diff -Nru gsl-doc-1.16/aclocal.m4 gsl-doc-2.3/aclocal.m4 --- gsl-doc-1.16/aclocal.m4 2013-07-19 15:14:50.000000000 +0000 +++ gsl-doc-2.3/aclocal.m4 2016-12-09 00:04:18.000000000 +0000 @@ -1,4 +1,4 @@ -# generated automatically by aclocal 1.13.2 -*- Autoconf -*- +# generated automatically by aclocal 1.13.4 -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. @@ -2683,10 +2683,14 @@ # before this can be enabled. hardcode_into_libs=yes + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -8622,7 +8626,7 @@ [am__api_version='1.13' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.13.2], [], +m4_if([$1], [1.13.4], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -8638,7 +8642,7 @@ # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.13.2])dnl +[AM_AUTOMAKE_VERSION([1.13.4])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) diff -Nru gsl-doc-1.16/AUTHORS gsl-doc-2.3/AUTHORS --- gsl-doc-1.16/AUTHORS 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/AUTHORS 2015-11-09 06:17:18.000000000 +0000 @@ -25,7 +25,8 @@ Ivo Alxneit (ivo.alxneit@psi.ch) - multidimensional minimization, wavelet transforms Jason H. Stover (jason@sakla.net) - cumulative distribution functions -Patrick Alken - nonsymmetric and generalized eigensystems, B-splines +Patrick Alken - nonsymmetric and generalized + eigensystems, B-splines, sparse matrices, linear and nonlinear least squares Rhys Ulerich (rhys.ulerich@gmail.com) - multisets Pavel Holoborodko - fixed order Gauss-Legendre quadrature Pedro Gonnet - CQUAD integration routines. diff -Nru gsl-doc-1.16/autogen.sh gsl-doc-2.3/autogen.sh --- gsl-doc-1.16/autogen.sh 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/autogen.sh 2015-11-03 16:21:55.000000000 +0000 @@ -1,15 +1,11 @@ #! /bin/sh -echo "If you use a recent version of autotools, this script is obsolete" -echo "Just run autoreconf -i -f -v" -echo "followed by ./configure --enable-maintainer-mode" -echo - # Run this to generate all the auto-generated files needed by the GNU # configure program -libtoolize --automake -aclocal -autoheader -automake --add-missing --gnu --force-missing -autoconf +#libtoolize --automake +#aclocal +#autoheader +#automake --add-missing --gnu --force-missing +#autoconf +autoreconf -i -f -v echo "Now use ./configure --enable-maintainer-mode" diff -Nru gsl-doc-1.16/blas/Makefile.am gsl-doc-2.3/blas/Makefile.am --- gsl-doc-1.16/blas/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/blas/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ pkginclude_HEADERS = gsl_blas.h gsl_blas_types.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslblas_la_SOURCES = blas.c diff -Nru gsl-doc-1.16/blas/Makefile.in gsl-doc-2.3/blas/Makefile.in --- gsl-doc-1.16/blas/Makefile.in 2013-07-19 15:14:52.000000000 +0000 +++ gsl-doc-2.3/blas/Makefile.in 2016-12-09 00:04:20.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -193,6 +193,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -215,7 +216,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -331,7 +335,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslblas.la pkginclude_HEADERS = gsl_blas.h gsl_blas_types.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslblas_la_SOURCES = blas.c all: all-am diff -Nru gsl-doc-1.16/block/fprintf_source.c gsl-doc-2.3/block/fprintf_source.c --- gsl-doc-1.16/block/fprintf_source.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/block/fprintf_source.c 2015-11-03 16:21:55.000000000 +0000 @@ -161,7 +161,9 @@ data [MULTIPLICITY * i * stride + k] = tmp; if (status != 1) - GSL_ERROR ("fscanf failed", GSL_EFAILED); + { + GSL_ERROR ("fscanf failed", GSL_EFAILED); + } } } diff -Nru gsl-doc-1.16/block/init.c gsl-doc-2.3/block/init.c --- gsl-doc-1.16/block/init.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/block/init.c 2015-11-03 16:21:55.000000000 +0000 @@ -1,5 +1,6 @@ #include #include +#include #include #define BASE_GSL_COMPLEX_LONG diff -Nru gsl-doc-1.16/block/init_source.c gsl-doc-2.3/block/init_source.c --- gsl-doc-1.16/block/init_source.c 2013-07-17 20:20:40.000000000 +0000 +++ gsl-doc-2.3/block/init_source.c 2015-11-03 16:21:55.000000000 +0000 @@ -36,7 +36,7 @@ GSL_ENOMEM, 0); } - b->data = (ATOMIC *) calloc (1, MULTIPLICITY * n * sizeof (ATOMIC)); + b->data = (ATOMIC *) malloc (MULTIPLICITY * n * sizeof (ATOMIC)); if (b->data == 0) { @@ -61,7 +61,8 @@ if (b == 0) return 0; - /* initialize block to zero */ + /* initialize block to zero; the memset call takes care of padding bytes */ + memset(b->data, 0, MULTIPLICITY * n * sizeof(ATOMIC)); for (i = 0; i < MULTIPLICITY * n; i++) { diff -Nru gsl-doc-1.16/block/Makefile.am gsl-doc-2.3/block/Makefile.am --- gsl-doc-1.16/block/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/block/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -4,7 +4,7 @@ pkginclude_HEADERS = gsl_block.h gsl_block_char.h gsl_block_complex_double.h gsl_block_complex_float.h gsl_block_complex_long_double.h gsl_block_double.h gsl_block_float.h gsl_block_int.h gsl_block_long.h gsl_block_long_double.h gsl_block_short.h gsl_block_uchar.h gsl_block_uint.h gsl_block_ulong.h gsl_block_ushort.h gsl_check_range.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/block/Makefile.in gsl-doc-2.3/block/Makefile.in --- gsl-doc-1.16/block/Makefile.in 2013-07-19 15:14:52.000000000 +0000 +++ gsl-doc-2.3/block/Makefile.in 2016-12-09 00:04:20.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -377,6 +377,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -399,7 +400,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -515,7 +519,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslblock.la pkginclude_HEADERS = gsl_block.h gsl_block_char.h gsl_block_complex_double.h gsl_block_complex_float.h gsl_block_complex_long_double.h gsl_block_double.h gsl_block_float.h gsl_block_int.h gsl_block_long.h gsl_block_long_double.h gsl_block_short.h gsl_block_uchar.h gsl_block_uint.h gsl_block_ulong.h gsl_block_ushort.h gsl_check_range.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_LDADD = libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c diff -Nru gsl-doc-1.16/bspline/bspline.c gsl-doc-2.3/bspline/bspline.c --- gsl-doc-1.16/bspline/bspline.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/bspline/bspline.c 2015-11-03 16:21:55.000000000 +0000 @@ -64,13 +64,13 @@ { gsl_bspline_workspace *w; - w = (gsl_bspline_workspace *) malloc (sizeof (gsl_bspline_workspace)); + w = calloc (1, sizeof (gsl_bspline_workspace)); if (w == 0) - { - GSL_ERROR_NULL ("failed to allocate space for workspace", - GSL_ENOMEM); - } + { + GSL_ERROR_NULL ("failed to allocate space for workspace", + GSL_ENOMEM); + } w->k = k; w->km1 = k - 1; @@ -80,47 +80,96 @@ w->knots = gsl_vector_alloc (w->n + k); if (w->knots == 0) - { - free (w); - GSL_ERROR_NULL ("failed to allocate space for knots vector", - GSL_ENOMEM); - } + { + gsl_bspline_free (w); + GSL_ERROR_NULL ("failed to allocate space for knots vector", + GSL_ENOMEM); + } w->deltal = gsl_vector_alloc (k); if (w->deltal == 0) - { - gsl_vector_free (w->knots); - free (w); - GSL_ERROR_NULL ("failed to allocate space for deltal vector", - GSL_ENOMEM); - } + { + gsl_bspline_free (w); + GSL_ERROR_NULL ("failed to allocate space for deltal vector", + GSL_ENOMEM); + } w->deltar = gsl_vector_alloc (k); if (w->deltar == 0) - { - gsl_vector_free (w->deltal); - gsl_vector_free (w->knots); - free (w); - GSL_ERROR_NULL ("failed to allocate space for deltar vector", - GSL_ENOMEM); - } - + { + gsl_bspline_free (w); + GSL_ERROR_NULL ("failed to allocate space for deltar vector", + GSL_ENOMEM); + } w->B = gsl_vector_alloc (k); if (w->B == 0) - { - gsl_vector_free (w->deltar);; - gsl_vector_free (w->deltal); - gsl_vector_free (w->knots); - free (w); - GSL_ERROR_NULL - ("failed to allocate space for temporary spline vector", - GSL_ENOMEM); - } + { + gsl_bspline_free (w); + GSL_ERROR_NULL + ("failed to allocate space for temporary spline vector", + GSL_ENOMEM); + } + + w->A = gsl_matrix_alloc (k, k); + if (w->A == 0) + { + gsl_bspline_free (w); + GSL_ERROR_NULL + ("failed to allocate space for derivative work matrix", + GSL_ENOMEM); + } + + w->dB = gsl_matrix_alloc (k, k + 1); + if (w->dB == 0) + { + gsl_bspline_free (w); + GSL_ERROR_NULL + ("failed to allocate space for temporary derivative matrix", + GSL_ENOMEM); + } return w; } -} /* gsl_bspline_alloc() */ +} /* gsl_bspline_alloc() */ + +/* +gsl_bspline_free() + Free a gsl_bspline_workspace. + +Inputs: w - workspace to free + +Return: none +*/ + +void +gsl_bspline_free (gsl_bspline_workspace * w) +{ + RETURN_IF_NULL (w); + + if (w->knots) + gsl_vector_free (w->knots); + + if (w->deltal) + gsl_vector_free (w->deltal); + + if (w->deltar) + gsl_vector_free (w->deltar); + + if (w->B) + gsl_vector_free (w->B); + + if (w->A) + gsl_matrix_free(w->A); + + if (w->dB) + gsl_matrix_free(w->dB); + + free (w); +} /* gsl_bspline_free() */ + + +#ifndef GSL_DISABLE_DEPRECATED /* gsl_bspline_deriv_alloc() @@ -178,6 +227,26 @@ } } /* gsl_bspline_deriv_alloc() */ +/* +gsl_bspline_deriv_free() + Free a gsl_bspline_deriv_workspace. + +Inputs: dw - workspace to free + +Return: none +*/ + +void +gsl_bspline_deriv_free (gsl_bspline_deriv_workspace * dw) +{ + RETURN_IF_NULL (dw); + gsl_matrix_free (dw->A); + gsl_matrix_free (dw->dB); + free (dw); +} /* gsl_bspline_deriv_free() */ + +#endif /* !GSL_DISABLE_DEPRECATED */ + /* Return number of coefficients */ size_t gsl_bspline_ncoeffs (gsl_bspline_workspace * w) @@ -208,44 +277,6 @@ } /* -gsl_bspline_free() - Free a gsl_bspline_workspace. - -Inputs: w - workspace to free - -Return: none -*/ - -void -gsl_bspline_free (gsl_bspline_workspace * w) -{ - RETURN_IF_NULL (w); - gsl_vector_free (w->knots); - gsl_vector_free (w->deltal); - gsl_vector_free (w->deltar); - gsl_vector_free (w->B); - free (w); -} /* gsl_bspline_free() */ - -/* -gsl_bspline_deriv_free() - Free a gsl_bspline_deriv_workspace. - -Inputs: dw - workspace to free - -Return: none -*/ - -void -gsl_bspline_deriv_free (gsl_bspline_deriv_workspace * dw) -{ - RETURN_IF_NULL (dw); - gsl_matrix_free (dw->A); - gsl_matrix_free (dw->dB); - free (dw); -} /* gsl_bspline_deriv_free() */ - -/* gsl_bspline_knots() Compute the knots from the given breakpoints: @@ -276,23 +307,23 @@ } else { - size_t i; /* looping */ + size_t i; /* looping */ for (i = 0; i < w->k; i++) - gsl_vector_set (w->knots, i, gsl_vector_get (breakpts, 0)); + gsl_vector_set (w->knots, i, gsl_vector_get (breakpts, 0)); for (i = 1; i < w->l; i++) - { - gsl_vector_set (w->knots, w->k - 1 + i, - gsl_vector_get (breakpts, i)); - } + { + gsl_vector_set (w->knots, w->k - 1 + i, + gsl_vector_get (breakpts, i)); + } for (i = w->n; i < w->n + w->k; i++) - gsl_vector_set (w->knots, i, gsl_vector_get (breakpts, w->l)); + gsl_vector_set (w->knots, i, gsl_vector_get (breakpts, w->l)); return GSL_SUCCESS; } -} /* gsl_bspline_knots() */ +} /* gsl_bspline_knots() */ /* gsl_bspline_knots_uniform() @@ -319,10 +350,10 @@ int gsl_bspline_knots_uniform (const double a, const double b, - gsl_bspline_workspace * w) + gsl_bspline_workspace * w) { - size_t i; /* looping */ - double delta; /* interval spacing */ + size_t i; /* looping */ + double delta; /* interval spacing */ double x; delta = (b - a) / (double) w->l; @@ -341,7 +372,7 @@ gsl_vector_set (w->knots, i, b); return GSL_SUCCESS; -} /* gsl_bspline_knots_uniform() */ +} /* gsl_bspline_knots_uniform() */ /* gsl_bspline_eval() @@ -378,23 +409,21 @@ /* find all non-zero B_i(x) values */ error = gsl_bspline_eval_nonzero (x, w->B, &istart, &iend, w); if (error) - { - return error; - } + return error; /* store values in appropriate part of given vector */ for (i = 0; i < istart; i++) - gsl_vector_set (B, i, 0.0); + gsl_vector_set (B, i, 0.0); for (i = istart; i <= iend; i++) - gsl_vector_set (B, i, gsl_vector_get (w->B, i - istart)); + gsl_vector_set (B, i, gsl_vector_get (w->B, i - istart)); for (i = iend + 1; i < w->n; i++) - gsl_vector_set (B, i, 0.0); + gsl_vector_set (B, i, 0.0); return GSL_SUCCESS; } -} /* gsl_bspline_eval() */ +} /* gsl_bspline_eval() */ /* gsl_bspline_eval_nonzero() @@ -426,7 +455,7 @@ int gsl_bspline_eval_nonzero (const double x, gsl_vector * Bk, size_t * istart, - size_t * iend, gsl_bspline_workspace * w) + size_t * iend, gsl_bspline_workspace * w) { if (Bk->size != w->k) { @@ -442,19 +471,17 @@ i = bspline_find_interval (x, &flag, w); error = bspline_process_interval_for_eval (x, &i, flag, w); if (error) - { - return error; - } + return error; *istart = i - w->k + 1; *iend = i; bspline_pppack_bsplvb (w->knots, w->k, 1, x, *iend, &j, w->deltal, - w->deltar, Bk); + w->deltar, Bk); return GSL_SUCCESS; } -} /* gsl_bspline_eval_nonzero() */ +} /* gsl_bspline_eval_nonzero() */ /* gsl_bspline_deriv_eval() @@ -479,9 +506,8 @@ */ int -gsl_bspline_deriv_eval (const double x, const size_t nderiv, gsl_matrix * dB, - gsl_bspline_workspace * w, - gsl_bspline_deriv_workspace * dw) +gsl_bspline_deriv_eval (const double x, const size_t nderiv, + gsl_matrix * dB, gsl_bspline_workspace * w) { if (dB->size1 != w->n) { @@ -490,12 +516,8 @@ else if (dB->size2 < nderiv + 1) { GSL_ERROR - ("dB matrix second dimension must be at least length nderiv+1", - GSL_EBADLEN); - } - else if (dw->k < w->k) - { - GSL_ERROR ("derivative workspace is too small", GSL_EBADLEN); + ("dB matrix second dimension must be at least length nderiv+1", + GSL_EBADLEN); } else { @@ -507,29 +529,26 @@ /* find all non-zero d^j/dx^j B_i(x) values */ error = - gsl_bspline_deriv_eval_nonzero (x, nderiv, dw->dB, &istart, &iend, w, - dw); + gsl_bspline_deriv_eval_nonzero (x, nderiv, w->dB, &istart, &iend, w); if (error) - { - return error; - } + return error; /* store values in appropriate part of given matrix */ for (j = 0; j <= nderiv; j++) - { - for (i = 0; i < istart; i++) - gsl_matrix_set (dB, i, j, 0.0); - - for (i = istart; i <= iend; i++) - gsl_matrix_set (dB, i, j, gsl_matrix_get (dw->dB, i - istart, j)); - - for (i = iend + 1; i < w->n; i++) - gsl_matrix_set (dB, i, j, 0.0); - } + { + for (i = 0; i < istart; i++) + gsl_matrix_set (dB, i, j, 0.0); + + for (i = istart; i <= iend; i++) + gsl_matrix_set (dB, i, j, gsl_matrix_get (w->dB, i - istart, j)); + + for (i = iend + 1; i < w->n; i++) + gsl_matrix_set (dB, i, j, 0.0); + } return GSL_SUCCESS; } -} /* gsl_bspline_deriv_eval() */ +} /* gsl_bspline_deriv_eval() */ /* gsl_bspline_deriv_eval_nonzero() @@ -573,9 +592,8 @@ int gsl_bspline_deriv_eval_nonzero (const double x, const size_t nderiv, - gsl_matrix * dB, size_t * istart, - size_t * iend, gsl_bspline_workspace * w, - gsl_bspline_deriv_workspace * dw) + gsl_matrix * dB, size_t * istart, + size_t * iend, gsl_bspline_workspace * w) { if (dB->size1 != w->k) { @@ -584,12 +602,8 @@ else if (dB->size2 < nderiv + 1) { GSL_ERROR - ("dB matrix second dimension must be at least length nderiv+1", - GSL_EBADLEN); - } - else if (dw->k < w->k) - { - GSL_ERROR ("derivative workspace is too small", GSL_EBADLEN); + ("dB matrix second dimension must be at least length nderiv+1", + GSL_EBADLEN); } else { @@ -602,30 +616,26 @@ i = bspline_find_interval (x, &flag, w); error = bspline_process_interval_for_eval (x, &i, flag, w); if (error) - { - return error; - } + return error; *istart = i - w->k + 1; *iend = i; bspline_pppack_bsplvd (w->knots, w->k, x, *iend, - w->deltal, w->deltar, dw->A, dB, nderiv); + w->deltal, w->deltar, w->A, dB, nderiv); /* An order k b-spline has at most k-1 nonzero derivatives so we need to zero all requested higher order derivatives */ min_nderivk = GSL_MIN_INT (nderiv, w->k - 1); for (j = min_nderivk + 1; j <= nderiv; j++) - { - for (i = 0; i < w->k; i++) - { - gsl_matrix_set (dB, i, j, 0.0); - } - } + { + for (i = 0; i < w->k; i++) + gsl_matrix_set (dB, i, j, 0.0); + } return GSL_SUCCESS; } -} /* gsl_bspline_deriv_eval_nonzero() */ +} /* gsl_bspline_deriv_eval_nonzero() */ /**************************************** * INTERNAL ROUTINES * diff -Nru gsl-doc-1.16/bspline/gsl_bspline.h gsl-doc-2.3/bspline/gsl_bspline.h --- gsl-doc-1.16/bspline/gsl_bspline.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/bspline/gsl_bspline.h 2015-11-03 16:21:55.000000000 +0000 @@ -40,18 +40,24 @@ typedef struct { - size_t k; /* spline order */ - size_t km1; /* k - 1 (polynomial order) */ - size_t l; /* number of polynomial pieces on interval */ + size_t k; /* spline order */ + size_t km1; /* k - 1 (polynomial order) */ + size_t l; /* number of polynomial pieces on interval */ size_t nbreak; /* number of breakpoints (l + 1) */ - size_t n; /* number of bspline basis functions (l + k - 1) */ + size_t n; /* number of bspline basis functions (l + k - 1) */ - gsl_vector *knots; /* knots vector */ + gsl_vector *knots; /* knots vector */ gsl_vector *deltal; /* left delta */ gsl_vector *deltar; /* right delta */ - gsl_vector *B; /* temporary spline results */ + gsl_vector *B; /* temporary spline results */ + + /* bspline derivative parameters */ + gsl_matrix *A; /* work matrix */ + gsl_matrix *dB; /* temporary derivative results */ } gsl_bspline_workspace; +#ifndef GSL_DISABLE_DEPRECATED + typedef struct { size_t k; /* spline order */ @@ -59,6 +65,11 @@ gsl_matrix *dB; /* temporary derivative results */ } gsl_bspline_deriv_workspace; +gsl_bspline_deriv_workspace *gsl_bspline_deriv_alloc(const size_t k); +void gsl_bspline_deriv_free(gsl_bspline_deriv_workspace *w); + +#endif /* !GSL_DISABLE_DEPRECATED */ + gsl_bspline_workspace * gsl_bspline_alloc(const size_t k, const size_t nbreak); @@ -92,18 +103,11 @@ size_t *iend, gsl_bspline_workspace *w); -gsl_bspline_deriv_workspace * -gsl_bspline_deriv_alloc(const size_t k); - -void -gsl_bspline_deriv_free(gsl_bspline_deriv_workspace *w); - int gsl_bspline_deriv_eval(const double x, const size_t nderiv, gsl_matrix *dB, - gsl_bspline_workspace *w, - gsl_bspline_deriv_workspace *dw); + gsl_bspline_workspace *w); int gsl_bspline_deriv_eval_nonzero(const double x, @@ -111,8 +115,7 @@ gsl_matrix *dB, size_t *istart, size_t *iend, - gsl_bspline_workspace *w, - gsl_bspline_deriv_workspace *dw); + gsl_bspline_workspace *w); __END_DECLS diff -Nru gsl-doc-1.16/bspline/Makefile.am gsl-doc-2.3/bspline/Makefile.am --- gsl-doc-1.16/bspline/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/bspline/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ pkginclude_HEADERS = gsl_bspline.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslbspline_la_SOURCES = bspline.c greville.c diff -Nru gsl-doc-1.16/bspline/Makefile.in gsl-doc-2.3/bspline/Makefile.in --- gsl-doc-1.16/bspline/Makefile.in 2013-07-19 15:14:52.000000000 +0000 +++ gsl-doc-2.3/bspline/Makefile.in 2016-12-09 00:04:20.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -381,6 +381,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -403,7 +404,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -519,7 +523,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslbspline.la pkginclude_HEADERS = gsl_bspline.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslbspline_la_SOURCES = bspline.c greville.c noinst_HEADERS = bspline.h TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/bspline/test.c gsl-doc-2.3/bspline/test.c --- gsl-doc-1.16/bspline/test.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/bspline/test.c 2015-11-03 16:21:55.000000000 +0000 @@ -26,7 +26,7 @@ #include void -test_bspline(gsl_bspline_workspace * bw, gsl_bspline_deriv_workspace * dbw) +test_bspline(gsl_bspline_workspace * bw) { gsl_vector *B; gsl_matrix *dB; @@ -68,7 +68,7 @@ { double xi = a + (b - a) * (i / (n - 1.0)); gsl_bspline_eval(xi, B, bw); - gsl_bspline_deriv_eval(xi, 0, dB, bw, dbw); + gsl_bspline_deriv_eval(xi, 0, dB, bw); for (j = 0; j < ncoeffs; j++) { @@ -100,10 +100,8 @@ { double a = -1.23 * order, b = 45.6 * order; gsl_bspline_workspace *bw = gsl_bspline_alloc(order, breakpoints); - gsl_bspline_deriv_workspace *dbw = gsl_bspline_deriv_alloc(order); gsl_bspline_knots_uniform(a, b, bw); - test_bspline(bw, dbw); - gsl_bspline_deriv_free(dbw); + test_bspline(bw); gsl_bspline_free(bw); } } @@ -115,7 +113,6 @@ { double a = -1.23 * order, b = 45.6 * order; gsl_bspline_workspace *bw = gsl_bspline_alloc(order, breakpoints); - gsl_bspline_deriv_workspace *dbw = gsl_bspline_deriv_alloc(order); gsl_vector *k = gsl_vector_alloc(breakpoints); for (i = 0; i < breakpoints; i++) { @@ -125,9 +122,8 @@ gsl_vector_set(k, i, x); }; gsl_bspline_knots(k, bw); - test_bspline(bw, dbw); + test_bspline(bw); gsl_vector_free(k); - gsl_bspline_deriv_free(dbw); gsl_bspline_free(bw); } } @@ -147,7 +143,6 @@ }; gsl_bspline_workspace *bw = gsl_bspline_alloc(2, 3); - gsl_bspline_deriv_workspace *dbw = gsl_bspline_deriv_alloc(2); gsl_matrix *dB = gsl_matrix_alloc(gsl_bspline_ncoeffs(bw), gsl_bspline_order(bw) + 1); @@ -163,7 +158,7 @@ /* Initialize dB with poison to ensure we overwrite it */ gsl_matrix_set_all(dB, GSL_NAN); - gsl_bspline_deriv_eval(xloc[i], gsl_bspline_order(bw), dB, bw, dbw); + gsl_bspline_deriv_eval(xloc[i], gsl_bspline_order(bw), dB, bw); for (j = 0; j < gsl_bspline_ncoeffs(bw) ; ++j) { /* check basis function 1st deriv */ @@ -183,7 +178,6 @@ } gsl_matrix_free(dB); - gsl_bspline_deriv_free(dbw); gsl_bspline_free(bw); gsl_vector_free(breakpts); } @@ -219,7 +213,6 @@ }; gsl_bspline_workspace *bw = gsl_bspline_alloc(3, 5); - gsl_bspline_deriv_workspace *dbw = gsl_bspline_deriv_alloc(3); gsl_matrix *dB = gsl_matrix_alloc(gsl_bspline_ncoeffs(bw), gsl_bspline_order(bw) + 1); @@ -236,7 +229,7 @@ { /* Initialize dB with poison to ensure we overwrite it */ gsl_matrix_set_all(dB, GSL_NAN); - gsl_bspline_deriv_eval(xloc[i], gsl_bspline_order(bw), dB, bw, dbw); + gsl_bspline_deriv_eval(xloc[i], gsl_bspline_order(bw), dB, bw); /* check basis function evaluation */ for (j = 0; j < gsl_bspline_ncoeffs(bw); ++j) @@ -262,7 +255,6 @@ } gsl_matrix_free(dB); - gsl_bspline_deriv_free(dbw); gsl_bspline_free(bw); gsl_vector_free(breakpts); } diff -Nru gsl-doc-1.16/BUGS gsl-doc-2.3/BUGS --- gsl-doc-1.16/BUGS 2013-07-18 16:23:38.000000000 +0000 +++ gsl-doc-2.3/BUGS 2015-11-03 16:21:55.000000000 +0000 @@ -1,136 +0,0 @@ -The GSL Bugs Database is at http://savannah.gnu.org/bugs/?group=gsl - -This file was generated from it at Thu Jul 18 10:23:38 2013 - ------------------------------------------------------------------------- -BUG-ID: 28267 -STATUS: Open/Postponed -CATEGORY: Accuracy problem -SUMMARY: poor convergence region for gsl_sf_hyperg_1F1 - -The magnitude of the error is greater than the value itself for -a<<0, b>0, x>>0 - -gsl_sf_hyperg1F1(-3.78e+01, 2, 1.035e+02) => -7.00055e+18 +/- 3.77654e+19 - ------------------------------------------------ -From: Weibin Li -To: bug-gsl@gnu.org -Subject: [Bug-gsl] gsl_sf_hyperg_1F1 -Date: Mon, 30 Nov 2009 15:26:11 +0100 - -Hi, guys - -I experienced bugs with gsl_sf_hyperg_1F1. The version is gsl_1.12, but -the testing is also done with gsl_1.13, using a mac with version 10.5.8 -and hp-workstation with gnome_2.24.1. - -#include -#include -#include -#include "gsl/gsl_sf_hyperg.h" - -int main(int argc, char **argv) -{ - int ii; - double Ri; - double v0; - - gsl_sf_result r; - for(ii = 10; ii< 140;ii++) -{ - Ri = 2013; - v0 =38.86871 +ii*2.5e-10; - - gsl_sf_hyperg_1F1_e(1.0-v0,2,2.0*Ri/v0,&r); - printf("%lg\t%14.13g\t%14.13g\n",v0,r.val,r.err); - - } -return 0; -} - -The output of above code shows an extremely large error. by increasing -Ri, the relative error decreases. Is there any idea to fix this? - -Thank you very much. - -Best - -Weibin - --It's inherently difficult to compute the value in this region either way as there is massive cancellation in both the series and the Kummer transformed series.I cannot find any algorithm which handles this case.Confirmed - ------------------------------------------------------------------------- -BUG-ID: 21828 -STATUS: Open/Confirmed -CATEGORY: Performance -SUMMARY: suboptimal performance of gsl_fdfsolver_lmsder - -From: "Alexander Usov" -To: help-gsl@gnu.org -Subject: [Help-gsl] Strange performance of gsl_fdfsolver_lmsder -Date: Wed, 24 Oct 2007 20:45:01 +0200 - -Hi all, - -I am currently working on the problem involving source extraction from -astronomical images, which essentially boils down to fitting a number of -2d gaussians to the image. - -One of the traditionally used fitters in this field is a Levenberg-Marquardt, -which gsl_fdfsolver_lmsder is and implementation of. - -At some moment I have notices that for the bigger images (about 550 -pixels, 20-30 parameters) gsl's lmsder algorithm spends a large fraction -of the run-time (about 50%) doing household transform. - -While looking around for are different minimization algorithms I have made -a surprising finding that original netlib/minpack/lmder is almost twice faster -that that of gsl. - -Could anyone explain such a big difference in performace? - --- -Best regards, - Alexander. - -_______________________________________________ -Help-gsl mailing list -Help-gsl@gnu.org -http://lists.gnu.org/mailman/listinfo/help-gsl - -Reply-To: help-gsl@gnu.org -From: Brian Gough -To: "Alexander Usov" -Cc: help-gsl@gnu.org -Subject: Re: [Help-gsl] Strange performance of gsl_fdfsolver_lmsder -Date: Thu, 25 Oct 2007 21:57:08 +0100 - -At Wed, 24 Oct 2007 20:45:01 +0200, -Alexander Usov wrote: -> At some moment I have notices that for the bigger images (about 550 -> pixels, 20-30 parameters) gsl's lmsder algorithm spends a large fraction -> of the run-time (about 50%) doing household transform. -> -> While looking around for are different minimization algorithms I have made -> a surprising finding that original netlib/minpack/lmder is almost twice faster -> that that of gsl. -> -> Could anyone explain such a big difference in performace? - -I have a vague memory that there was some quantity (Jacobian?) that -MINPACK only computes fully at the end, but in GSL it is accessible to -the user at each step so I felt I had to update it on each iteration -in the absence of some alternate scheme. Sorry this is not a great -answer but I am not able to look at it in detail now. - --- -Brian Gough - -_______________________________________________ -Help-gsl mailing list -Help-gsl@gnu.org -http://lists.gnu.org/mailman/listinfo/help-gsl - -1824 - diff -Nru gsl-doc-1.16/cblas/Makefile.am gsl-doc-2.3/cblas/Makefile.am --- gsl-doc-1.16/cblas/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/cblas/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -1,14 +1,9 @@ lib_LTLIBRARIES = libgslcblas.la -libgslcblas_la_LDFLAGS = -version-info $(GSL_LT_CBLAS_VERSION) - -MINGW32_HOST = @MINGW32_HOST@ -if MINGW32_HOST -libgslcblas_la_LDFLAGS += -no-undefined -endif +libgslcblas_la_LDFLAGS = $(GSLCBLAS_LDFLAGS) -version-info $(GSL_LT_CBLAS_VERSION) pkginclude_HEADERS = gsl_cblas.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslcblas_la_SOURCES = sasum.c saxpy.c scasum.c scnrm2.c scopy.c sdot.c sdsdot.c sgbmv.c sgemm.c sgemv.c sger.c snrm2.c srot.c srotg.c srotm.c srotmg.c ssbmv.c sscal.c sspmv.c sspr.c sspr2.c sswap.c ssymm.c ssymv.c ssyr.c ssyr2.c ssyr2k.c ssyrk.c stbmv.c stbsv.c stpmv.c stpsv.c strmm.c strmv.c strsm.c strsv.c dasum.c daxpy.c dcopy.c ddot.c dgbmv.c dgemm.c dgemv.c dger.c dnrm2.c drot.c drotg.c drotm.c drotmg.c dsbmv.c dscal.c dsdot.c dspmv.c dspr.c dspr2.c dswap.c dsymm.c dsymv.c dsyr.c dsyr2.c dsyr2k.c dsyrk.c dtbmv.c dtbsv.c dtpmv.c dtpsv.c dtrmm.c dtrmv.c dtrsm.c dtrsv.c dzasum.c dznrm2.c caxpy.c ccopy.c cdotc_sub.c cdotu_sub.c cgbmv.c cgemm.c cgemv.c cgerc.c cgeru.c chbmv.c chemm.c chemv.c cher.c cher2.c cher2k.c cherk.c chpmv.c chpr.c chpr2.c cscal.c csscal.c cswap.c csymm.c csyr2k.c csyrk.c ctbmv.c ctbsv.c ctpmv.c ctpsv.c ctrmm.c ctrmv.c ctrsm.c ctrsv.c zaxpy.c zcopy.c zdotc_sub.c zdotu_sub.c zdscal.c zgbmv.c zgemm.c zgemv.c zgerc.c zgeru.c zhbmv.c zhemm.c zhemv.c zher.c zher2.c zher2k.c zherk.c zhpmv.c zhpr.c zhpr2.c zscal.c zswap.c zsymm.c zsyr2k.c zsyrk.c ztbmv.c ztbsv.c ztpmv.c ztpsv.c ztrmm.c ztrmv.c ztrsm.c ztrsv.c icamax.c idamax.c isamax.c izamax.c xerbla.c diff -Nru gsl-doc-1.16/cblas/Makefile.in gsl-doc-2.3/cblas/Makefile.in --- gsl-doc-1.16/cblas/Makefile.in 2013-07-19 15:14:52.000000000 +0000 +++ gsl-doc-2.3/cblas/Makefile.in 2016-12-09 00:04:20.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -79,7 +79,6 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -@MINGW32_HOST_TRUE@am__append_1 = -no-undefined check_PROGRAMS = test$(EXEEXT) subdir = cblas DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ @@ -417,6 +416,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -439,7 +439,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -554,11 +557,9 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ lib_LTLIBRARIES = libgslcblas.la -libgslcblas_la_LDFLAGS = -version-info $(GSL_LT_CBLAS_VERSION) \ - $(am__append_1) -MINGW32_HOST = @MINGW32_HOST@ +libgslcblas_la_LDFLAGS = $(GSLCBLAS_LDFLAGS) -version-info $(GSL_LT_CBLAS_VERSION) pkginclude_HEADERS = gsl_cblas.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslcblas_la_SOURCES = sasum.c saxpy.c scasum.c scnrm2.c scopy.c \ sdot.c sdsdot.c sgbmv.c sgemm.c sgemv.c sger.c snrm2.c srot.c \ srotg.c srotm.c srotmg.c ssbmv.c sscal.c sspmv.c sspr.c \ diff -Nru gsl-doc-1.16/cdf/Makefile.am gsl-doc-2.3/cdf/Makefile.am --- gsl-doc-1.16/cdf/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/cdf/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -3,7 +3,7 @@ pkginclude_HEADERS= gsl_cdf.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslcdf_la_SOURCES = beta.c betainv.c cauchy.c cauchyinv.c chisq.c chisqinv.c exponential.c exponentialinv.c exppow.c fdist.c fdistinv.c flat.c flatinv.c gamma.c gammainv.c gauss.c gaussinv.c gumbel1.c gumbel1inv.c gumbel2.c gumbel2inv.c laplace.c laplaceinv.c logistic.c logisticinv.c lognormal.c lognormalinv.c pareto.c paretoinv.c rayleigh.c rayleighinv.c tdist.c tdistinv.c weibull.c weibullinv.c binomial.c poisson.c geometric.c nbinomial.c pascal.c hypergeometric.c diff -Nru gsl-doc-1.16/cdf/Makefile.in gsl-doc-2.3/cdf/Makefile.in --- gsl-doc-1.16/cdf/Makefile.in 2013-07-19 15:14:52.000000000 +0000 +++ gsl-doc-2.3/cdf/Makefile.in 2016-12-09 00:04:20.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -387,6 +387,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -409,7 +410,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -525,7 +529,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslcdf.la pkginclude_HEADERS = gsl_cdf.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslcdf_la_SOURCES = beta.c betainv.c cauchy.c cauchyinv.c chisq.c chisqinv.c exponential.c exponentialinv.c exppow.c fdist.c fdistinv.c flat.c flatinv.c gamma.c gammainv.c gauss.c gaussinv.c gumbel1.c gumbel1inv.c gumbel2.c gumbel2inv.c laplace.c laplaceinv.c logistic.c logisticinv.c lognormal.c lognormalinv.c pareto.c paretoinv.c rayleigh.c rayleighinv.c tdist.c tdistinv.c weibull.c weibullinv.c binomial.c poisson.c geometric.c nbinomial.c pascal.c hypergeometric.c noinst_HEADERS = beta_inc.c rat_eval.h test_auto.c error.h TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/cheb/Makefile.am gsl-doc-2.3/cheb/Makefile.am --- gsl-doc-1.16/cheb/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/cheb/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ pkginclude_HEADERS = gsl_chebyshev.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslcheb_la_SOURCES = deriv.c eval.c init.c integ.c diff -Nru gsl-doc-1.16/cheb/Makefile.in gsl-doc-2.3/cheb/Makefile.in --- gsl-doc-1.16/cheb/Makefile.in 2013-07-19 15:14:52.000000000 +0000 +++ gsl-doc-2.3/cheb/Makefile.in 2016-12-09 00:04:20.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -376,6 +376,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -398,7 +399,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -514,7 +518,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslcheb.la pkginclude_HEADERS = gsl_chebyshev.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslcheb_la_SOURCES = deriv.c eval.c init.c integ.c TESTS = $(check_PROGRAMS) test_LDADD = libgslcheb.la ../ieee-utils/libgslieeeutils.la ../test/libgsltest.la ../sys/libgslsys.la ../err/libgslerr.la ../utils/libutils.la diff -Nru gsl-doc-1.16/combination/Makefile.am gsl-doc-2.3/combination/Makefile.am --- gsl-doc-1.16/combination/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/combination/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ pkginclude_HEADERS = gsl_combination.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslcombination_la_SOURCES = init.c file.c combination.c inline.c diff -Nru gsl-doc-1.16/combination/Makefile.in gsl-doc-2.3/combination/Makefile.in --- gsl-doc-1.16/combination/Makefile.in 2013-07-19 15:14:52.000000000 +0000 +++ gsl-doc-2.3/combination/Makefile.in 2016-12-09 00:04:20.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -379,6 +379,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -401,7 +402,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -517,7 +521,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslcombination.la pkginclude_HEADERS = gsl_combination.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslcombination_la_SOURCES = init.c file.c combination.c inline.c noinst_HEADERS = TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/complex/Makefile.am gsl-doc-2.3/complex/Makefile.am --- gsl-doc-1.16/complex/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/complex/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ pkginclude_HEADERS = gsl_complex.h gsl_complex_math.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslcomplex_la_SOURCES = math.c inline.c diff -Nru gsl-doc-1.16/complex/Makefile.in gsl-doc-2.3/complex/Makefile.in --- gsl-doc-1.16/complex/Makefile.in 2013-07-19 15:14:52.000000000 +0000 +++ gsl-doc-2.3/complex/Makefile.in 2016-12-09 00:04:21.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -376,6 +376,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -398,7 +399,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -514,7 +518,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslcomplex.la pkginclude_HEADERS = gsl_complex.h gsl_complex_math.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslcomplex_la_SOURCES = math.c inline.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c results.h results1.h results2.h results_real.h results_zreal.h diff -Nru gsl-doc-1.16/complex/math.c gsl-doc-2.3/complex/math.c --- gsl-doc-1.16/complex/math.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/complex/math.c 2016-09-15 17:11:00.000000000 +0000 @@ -1,6 +1,6 @@ /* complex/math.c * - * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Jorma Olavi Tähtinen, Brian Gough + * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Jorma Olavi T�htinen, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,7 +19,7 @@ /* Basic complex arithmetic functions - * Original version by Jorma Olavi Tähtinen + * Original version by Jorma Olavi T�htinen * * Modified for GSL by Brian Gough, 3/2000 */ @@ -489,14 +489,10 @@ } else { - double u = exp (-I); - double C = 2 * u / (1 - pow (u, 2.0)); - double D = 1 + pow (cos (R), 2.0) * pow (C, 2.0); - - double S = pow (C, 2.0); - double T = 1.0 / tanh (I); + double D = pow (cos (R), 2.0) + pow (sinh (I), 2.0); + double F = 1 + pow(cos (R)/sinh (I), 2.0); - GSL_SET_COMPLEX (&z, 0.5 * sin (2 * R) * S / D, T / D); + GSL_SET_COMPLEX (&z, 0.5 * sin (2 * R) / D, 1 / (tanh (I) * F)); } return z; diff -Nru gsl-doc-1.16/complex/results2.h gsl-doc-2.3/complex/results2.h --- gsl-doc-1.16/complex/results2.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/complex/results2.h 2016-09-15 17:31:49.000000000 +0000 @@ -40,3 +40,4 @@ {FN (pow), ARG(5.0e-01,-1.00000000000000005551e-01), ARG(0.0e+00,-1.0e+00), RES(6.4160554864378080418e-1, 5.1201864456768275590e-1)}, {FN (pow), ARG(5.0e-01,-1.00000000000000005551e-01), ARG(5.0e-01,1.00000000000000005551e-01), RES(7.1829191470060938876e-1, -1.2038189555821612762e-1)}, {FN (pow), ARG(5.0e-01,-1.00000000000000005551e-01), ARG(5.0e-01,-1.00000000000000005551e-01), RES(6.9977300530987816719e-1, -2.1940939105372143160e-2)}, + {FN (pow), ARG(0.0e+00,9.0e+00), ARG(2.0e+00,0.0e+00), RES(-8.1e+01, 0.0e+00)}, diff -Nru gsl-doc-1.16/complex/results.h gsl-doc-2.3/complex/results.h --- gsl-doc-1.16/complex/results.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/complex/results.h 2016-09-15 17:11:00.000000000 +0000 @@ -1351,6 +1351,11 @@ {FN (tan), ARG(9.42512322775237976202e+00,-2.0e+00), RES(2.439339541035071690e-5, -9.6402758819508310550e-1)}, {FN (tan), ARG(-9.42512322775237976202e+00,2.0e+00), RES(-2.439339541035071690e-5, 9.6402758819508310550e-1)}, {FN (tan), ARG(-9.42512322775237976202e+00,-2.0e+00), RES(-2.439339541035071690e-5, -9.6402758819508310550e-1)}, + {FN (tan), ARG(0.0e+00,1.0e+03), RES(0.0, 1.0)}, + {FN (tan), ARG(0.0e+00,-1.0e+03), RES(0.0, -1.0)}, + {FN (tan), ARG(0.0e+00,-1.23456e+05), RES(0.0, -1.0)}, + {FN (tan), ARG(1.0e+03,0.0e+00), RES(1.470324155702718e+00, 0.0)}, + {FN (tan), ARG(-1.0e+03,0.0e+00), RES(-1.470324155702718e+00, 0.0)}, {FN (arcsin), ARG(0.0e+00,0.0e+00), RES(0e0, 0.0)}, {FN (arcsin), ARG(0.0e+00,1.19209289550781250e-07), RES(0, 1.1920928955078096766e-7)}, {FN (arcsin), ARG(0.0e+00,-1.19209289550781250e-07), RES(0, -1.1920928955078096766e-7)}, diff -Nru gsl-doc-1.16/complex/test.c gsl-doc-2.3/complex/test.c --- gsl-doc-1.16/complex/test.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/complex/test.c 2016-09-15 17:11:00.000000000 +0000 @@ -113,7 +113,7 @@ struct fzreal listzreal[] = { #include "results_zreal.h" - {"", 0, 0, 0, 0} + {"", 0, 0, 0, 0, 0, 0} }; diff -Nru gsl-doc-1.16/config.guess gsl-doc-2.3/config.guess --- gsl-doc-1.16/config.guess 2013-07-18 16:30:00.000000000 +0000 +++ gsl-doc-2.3/config.guess 2015-12-03 18:34:33.000000000 +0000 @@ -2,7 +2,7 @@ # Attempt to guess a canonical system name. # Copyright 1992-2013 Free Software Foundation, Inc. -timestamp='2013-04-24' +timestamp='2013-06-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -132,6 +132,27 @@ UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown +case "${UNAME_SYSTEM}" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval $set_cc_for_build + cat <<-EOF > $dummy.c + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + ;; +esac + # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in @@ -853,21 +874,21 @@ exit ;; *:GNU:*:*) # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in @@ -880,67 +901,54 @@ EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then - echo ${UNAME_MACHINE}-unknown-linux-gnueabi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else - echo ${UNAME_MACHINE}-unknown-linux-gnueabihf + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-gnu + echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-gnu + echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) - LIBC=gnu - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #ifdef __dietlibc__ - LIBC=dietlibc - #endif - #else - #include - #ifdef __UCLIBC__ - LIBC=uclibc - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build @@ -959,59 +967,63 @@ #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; or1k:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; or32:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) - echo sparc-unknown-linux-gnu + echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu + echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu + echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux + echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu + echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) - LIBC=gnu - test -r /lib/libc.so && od -An -S13 /lib/libc.so | grep -q __uClibc_main && LIBC=uclibc echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. @@ -1244,19 +1256,21 @@ exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - i386) - eval $set_cc_for_build - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - UNAME_PROCESSOR="x86_64" - fi - fi ;; - unknown) UNAME_PROCESSOR=powerpc ;; - esac + eval $set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) diff -Nru gsl-doc-1.16/config.sub gsl-doc-2.3/config.sub --- gsl-doc-1.16/config.sub 2013-07-18 16:30:00.000000000 +0000 +++ gsl-doc-2.3/config.sub 2015-12-03 18:34:33.000000000 +0000 @@ -1006,7 +1006,7 @@ ;; ppc64) basic_machine=powerpc64-unknown ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown diff -Nru gsl-doc-1.16/configure gsl-doc-2.3/configure --- gsl-doc-1.16/configure 2013-07-19 15:14:51.000000000 +0000 +++ gsl-doc-2.3/configure 2016-12-09 00:04:19.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for gsl 1.16. +# Generated by GNU Autoconf 2.69 for gsl 2.3. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -587,8 +587,8 @@ # Identity of this package. PACKAGE_NAME='gsl' PACKAGE_TARNAME='gsl' -PACKAGE_VERSION='1.16' -PACKAGE_STRING='gsl 1.16' +PACKAGE_VERSION='2.3' +PACKAGE_STRING='gsl 2.3' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -650,8 +650,9 @@ HAVE_GNUM68K_IEEE_INTERFACE HAVE_GNUSPARC_IEEE_INTERFACE LIBOBJS -MINGW32_HOST_FALSE -MINGW32_HOST_TRUE +GSL_LIBADD +GSL_LDFLAGS +GSLCBLAS_LDFLAGS GSL_LIBM GSL_LIBS GSL_CFLAGS @@ -665,8 +666,6 @@ RANLIB ac_ct_AR AR -DLLTOOL -OBJDUMP NM ac_ct_DUMPBIN DUMPBIN @@ -675,6 +674,9 @@ EGREP GREP LIBTOOL +OBJDUMP +DLLTOOL +AS LN_S CPP am__fastdepCC_FALSE @@ -1338,7 +1340,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures gsl 1.16 to adapt to many kinds of systems. +\`configure' configures gsl 2.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1408,7 +1410,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of gsl 1.16:";; + short | recursive ) echo "Configuration of gsl 2.3:";; esac cat <<\_ACEOF @@ -1516,7 +1518,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -gsl configure 1.16 +gsl configure 2.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1981,7 +1983,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by gsl $as_me 1.16, which was +It was created by gsl $as_me 2.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2846,7 +2848,7 @@ # Define the identity of the package. PACKAGE='gsl' - VERSION='1.16' + VERSION='2.3' cat >>confdefs.h <<_ACEOF @@ -2924,9 +2926,9 @@ -GSL_CURRENT=17 +GSL_CURRENT=22 GSL_REVISION=0 -GSL_AGE=17 +GSL_AGE=3 CBLAS_CURRENT=0 CBLAS_REVISION=0 CBLAS_AGE=0 @@ -5380,9 +5382,6 @@ - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : @@ -5727,9 +5726,6 @@ - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : @@ -7620,13 +7616,311 @@ # Set options +enable_win32_dll=yes +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. +set dummy ${ac_tool_prefix}as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AS"; then + ac_cv_prog_AS="$AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AS="${ac_tool_prefix}as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AS=$ac_cv_prog_AS +if test -n "$AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi - enable_dlopen=no + +fi +if test -z "$ac_cv_prog_AS"; then + ac_ct_AS=$AS + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AS"; then + ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AS="as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AS=$ac_cv_prog_ac_ct_AS +if test -n "$ac_ct_AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 +$as_echo "$ac_ct_AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AS" = x; then + AS="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AS=$ac_ct_AS + fi +else + AS="$ac_cv_prog_AS" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + + ;; +esac + +test -z "$AS" && AS=as + + + + + +test -z "$DLLTOOL" && DLLTOOL=dlltool - enable_win32_dll=no + + + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + enable_dlopen=no + # Check whether --enable-shared was given. @@ -10634,10 +10928,14 @@ # before this can be enabled. hardcode_into_libs=yes + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -11984,19 +12282,18 @@ -case "$host_os" in - *mingw*) - MINGW=true - ;; +case $host in + *-*-cygwin* | *-*-mingw* ) + if test "$enable_shared" = yes; then + GSLCBLAS_LDFLAGS="$GSLCBLAS_LDFLAGS -no-undefined" + GSL_LDFLAGS="$GSL_LDFLAGS -no-undefined" + GSL_LIBADD="cblas/libgslcblas.la" + fi + ;; esac - if test "$MINGW" = "true"; then - MINGW32_HOST_TRUE= - MINGW32_HOST_FALSE='#' -else - MINGW32_HOST_TRUE='#' - MINGW32_HOST_FALSE= -fi + + @@ -12788,7 +13085,8 @@ -ac_config_files="$ac_config_files gsl_version.h gsl.spec gsl/Makefile test/Makefile err/Makefile sys/Makefile utils/Makefile const/Makefile min/Makefile multimin/Makefile ieee-utils/Makefile fft/Makefile specfunc/Makefile dht/Makefile fit/Makefile multifit/Makefile bspline/Makefile statistics/Makefile sum/Makefile roots/Makefile multiroots/Makefile ntuple/Makefile poly/Makefile qrng/Makefile rng/Makefile randist/Makefile siman/Makefile integration/Makefile interpolation/Makefile doc/Makefile block/Makefile vector/Makefile matrix/Makefile histogram/Makefile monte/Makefile ode-initval/Makefile ode-initval2/Makefile cblas/Makefile blas/Makefile linalg/Makefile eigen/Makefile permutation/Makefile combination/Makefile multiset/Makefile sort/Makefile complex/Makefile diff/Makefile deriv/Makefile cheb/Makefile cdf/Makefile wavelet/Makefile Makefile" +ac_config_files="$ac_config_files Makefile gsl_version.h gsl.spec blas/Makefile block/Makefile bspline/Makefile cblas/Makefile cdf/Makefile cheb/Makefile combination/Makefile complex/Makefile const/Makefile deriv/Makefile dht/Makefile diff/Makefile doc/Makefile doc/examples/Makefile eigen/Makefile err/Makefile fit/Makefile fft/Makefile gsl/Makefile histogram/Makefile ieee-utils/Makefile integration/Makefile interpolation/Makefile linalg/Makefile matrix/Makefile min/Makefile monte/Makefile multifit/Makefile multifit_nlinear/Makefile multilarge/Makefile multilarge_nlinear/Makefile multimin/Makefile multiroots/Makefile multiset/Makefile ntuple/Makefile ode-initval/Makefile ode-initval2/Makefile permutation/Makefile poly/Makefile qrng/Makefile randist/Makefile rng/Makefile roots/Makefile rstat/Makefile siman/Makefile sort/Makefile spblas/Makefile splinalg/Makefile spmatrix/Makefile specfunc/Makefile statistics/Makefile sum/Makefile sys/Makefile test/Makefile utils/Makefile vector/Makefile wavelet/Makefile" + cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -12927,10 +13225,6 @@ as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${MINGW32_HOST_TRUE}" && test -z "${MINGW32_HOST_FALSE}"; then - as_fn_error $? "conditional \"MINGW32_HOST\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 @@ -13328,7 +13622,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by gsl $as_me 1.16, which was +This file was extended by gsl $as_me 2.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -13394,7 +13688,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -gsl config.status 1.16 +gsl config.status 2.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -13525,6 +13819,9 @@ delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' @@ -13556,12 +13853,10 @@ lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' -DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' @@ -13667,7 +13962,10 @@ } # Quote evaled strings. -for var in SHELL \ +for var in AS \ +DLLTOOL \ +OBJDUMP \ +SHELL \ ECHO \ PATH_SEPARATOR \ SED \ @@ -13680,12 +13978,10 @@ lt_SP2NL \ lt_NL2SP \ reload_flag \ -OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ -DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ @@ -13803,58 +14099,66 @@ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "gsl_version.h") CONFIG_FILES="$CONFIG_FILES gsl_version.h" ;; "gsl.spec") CONFIG_FILES="$CONFIG_FILES gsl.spec" ;; - "gsl/Makefile") CONFIG_FILES="$CONFIG_FILES gsl/Makefile" ;; - "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; - "err/Makefile") CONFIG_FILES="$CONFIG_FILES err/Makefile" ;; - "sys/Makefile") CONFIG_FILES="$CONFIG_FILES sys/Makefile" ;; - "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; + "blas/Makefile") CONFIG_FILES="$CONFIG_FILES blas/Makefile" ;; + "block/Makefile") CONFIG_FILES="$CONFIG_FILES block/Makefile" ;; + "bspline/Makefile") CONFIG_FILES="$CONFIG_FILES bspline/Makefile" ;; + "cblas/Makefile") CONFIG_FILES="$CONFIG_FILES cblas/Makefile" ;; + "cdf/Makefile") CONFIG_FILES="$CONFIG_FILES cdf/Makefile" ;; + "cheb/Makefile") CONFIG_FILES="$CONFIG_FILES cheb/Makefile" ;; + "combination/Makefile") CONFIG_FILES="$CONFIG_FILES combination/Makefile" ;; + "complex/Makefile") CONFIG_FILES="$CONFIG_FILES complex/Makefile" ;; "const/Makefile") CONFIG_FILES="$CONFIG_FILES const/Makefile" ;; - "min/Makefile") CONFIG_FILES="$CONFIG_FILES min/Makefile" ;; - "multimin/Makefile") CONFIG_FILES="$CONFIG_FILES multimin/Makefile" ;; - "ieee-utils/Makefile") CONFIG_FILES="$CONFIG_FILES ieee-utils/Makefile" ;; - "fft/Makefile") CONFIG_FILES="$CONFIG_FILES fft/Makefile" ;; - "specfunc/Makefile") CONFIG_FILES="$CONFIG_FILES specfunc/Makefile" ;; + "deriv/Makefile") CONFIG_FILES="$CONFIG_FILES deriv/Makefile" ;; "dht/Makefile") CONFIG_FILES="$CONFIG_FILES dht/Makefile" ;; + "diff/Makefile") CONFIG_FILES="$CONFIG_FILES diff/Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "doc/examples/Makefile") CONFIG_FILES="$CONFIG_FILES doc/examples/Makefile" ;; + "eigen/Makefile") CONFIG_FILES="$CONFIG_FILES eigen/Makefile" ;; + "err/Makefile") CONFIG_FILES="$CONFIG_FILES err/Makefile" ;; "fit/Makefile") CONFIG_FILES="$CONFIG_FILES fit/Makefile" ;; - "multifit/Makefile") CONFIG_FILES="$CONFIG_FILES multifit/Makefile" ;; - "bspline/Makefile") CONFIG_FILES="$CONFIG_FILES bspline/Makefile" ;; - "statistics/Makefile") CONFIG_FILES="$CONFIG_FILES statistics/Makefile" ;; - "sum/Makefile") CONFIG_FILES="$CONFIG_FILES sum/Makefile" ;; - "roots/Makefile") CONFIG_FILES="$CONFIG_FILES roots/Makefile" ;; - "multiroots/Makefile") CONFIG_FILES="$CONFIG_FILES multiroots/Makefile" ;; - "ntuple/Makefile") CONFIG_FILES="$CONFIG_FILES ntuple/Makefile" ;; - "poly/Makefile") CONFIG_FILES="$CONFIG_FILES poly/Makefile" ;; - "qrng/Makefile") CONFIG_FILES="$CONFIG_FILES qrng/Makefile" ;; - "rng/Makefile") CONFIG_FILES="$CONFIG_FILES rng/Makefile" ;; - "randist/Makefile") CONFIG_FILES="$CONFIG_FILES randist/Makefile" ;; - "siman/Makefile") CONFIG_FILES="$CONFIG_FILES siman/Makefile" ;; + "fft/Makefile") CONFIG_FILES="$CONFIG_FILES fft/Makefile" ;; + "gsl/Makefile") CONFIG_FILES="$CONFIG_FILES gsl/Makefile" ;; + "histogram/Makefile") CONFIG_FILES="$CONFIG_FILES histogram/Makefile" ;; + "ieee-utils/Makefile") CONFIG_FILES="$CONFIG_FILES ieee-utils/Makefile" ;; "integration/Makefile") CONFIG_FILES="$CONFIG_FILES integration/Makefile" ;; "interpolation/Makefile") CONFIG_FILES="$CONFIG_FILES interpolation/Makefile" ;; - "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; - "block/Makefile") CONFIG_FILES="$CONFIG_FILES block/Makefile" ;; - "vector/Makefile") CONFIG_FILES="$CONFIG_FILES vector/Makefile" ;; + "linalg/Makefile") CONFIG_FILES="$CONFIG_FILES linalg/Makefile" ;; "matrix/Makefile") CONFIG_FILES="$CONFIG_FILES matrix/Makefile" ;; - "histogram/Makefile") CONFIG_FILES="$CONFIG_FILES histogram/Makefile" ;; + "min/Makefile") CONFIG_FILES="$CONFIG_FILES min/Makefile" ;; "monte/Makefile") CONFIG_FILES="$CONFIG_FILES monte/Makefile" ;; + "multifit/Makefile") CONFIG_FILES="$CONFIG_FILES multifit/Makefile" ;; + "multifit_nlinear/Makefile") CONFIG_FILES="$CONFIG_FILES multifit_nlinear/Makefile" ;; + "multilarge/Makefile") CONFIG_FILES="$CONFIG_FILES multilarge/Makefile" ;; + "multilarge_nlinear/Makefile") CONFIG_FILES="$CONFIG_FILES multilarge_nlinear/Makefile" ;; + "multimin/Makefile") CONFIG_FILES="$CONFIG_FILES multimin/Makefile" ;; + "multiroots/Makefile") CONFIG_FILES="$CONFIG_FILES multiroots/Makefile" ;; + "multiset/Makefile") CONFIG_FILES="$CONFIG_FILES multiset/Makefile" ;; + "ntuple/Makefile") CONFIG_FILES="$CONFIG_FILES ntuple/Makefile" ;; "ode-initval/Makefile") CONFIG_FILES="$CONFIG_FILES ode-initval/Makefile" ;; "ode-initval2/Makefile") CONFIG_FILES="$CONFIG_FILES ode-initval2/Makefile" ;; - "cblas/Makefile") CONFIG_FILES="$CONFIG_FILES cblas/Makefile" ;; - "blas/Makefile") CONFIG_FILES="$CONFIG_FILES blas/Makefile" ;; - "linalg/Makefile") CONFIG_FILES="$CONFIG_FILES linalg/Makefile" ;; - "eigen/Makefile") CONFIG_FILES="$CONFIG_FILES eigen/Makefile" ;; "permutation/Makefile") CONFIG_FILES="$CONFIG_FILES permutation/Makefile" ;; - "combination/Makefile") CONFIG_FILES="$CONFIG_FILES combination/Makefile" ;; - "multiset/Makefile") CONFIG_FILES="$CONFIG_FILES multiset/Makefile" ;; + "poly/Makefile") CONFIG_FILES="$CONFIG_FILES poly/Makefile" ;; + "qrng/Makefile") CONFIG_FILES="$CONFIG_FILES qrng/Makefile" ;; + "randist/Makefile") CONFIG_FILES="$CONFIG_FILES randist/Makefile" ;; + "rng/Makefile") CONFIG_FILES="$CONFIG_FILES rng/Makefile" ;; + "roots/Makefile") CONFIG_FILES="$CONFIG_FILES roots/Makefile" ;; + "rstat/Makefile") CONFIG_FILES="$CONFIG_FILES rstat/Makefile" ;; + "siman/Makefile") CONFIG_FILES="$CONFIG_FILES siman/Makefile" ;; "sort/Makefile") CONFIG_FILES="$CONFIG_FILES sort/Makefile" ;; - "complex/Makefile") CONFIG_FILES="$CONFIG_FILES complex/Makefile" ;; - "diff/Makefile") CONFIG_FILES="$CONFIG_FILES diff/Makefile" ;; - "deriv/Makefile") CONFIG_FILES="$CONFIG_FILES deriv/Makefile" ;; - "cheb/Makefile") CONFIG_FILES="$CONFIG_FILES cheb/Makefile" ;; - "cdf/Makefile") CONFIG_FILES="$CONFIG_FILES cdf/Makefile" ;; + "spblas/Makefile") CONFIG_FILES="$CONFIG_FILES spblas/Makefile" ;; + "splinalg/Makefile") CONFIG_FILES="$CONFIG_FILES splinalg/Makefile" ;; + "spmatrix/Makefile") CONFIG_FILES="$CONFIG_FILES spmatrix/Makefile" ;; + "specfunc/Makefile") CONFIG_FILES="$CONFIG_FILES specfunc/Makefile" ;; + "statistics/Makefile") CONFIG_FILES="$CONFIG_FILES statistics/Makefile" ;; + "sum/Makefile") CONFIG_FILES="$CONFIG_FILES sum/Makefile" ;; + "sys/Makefile") CONFIG_FILES="$CONFIG_FILES sys/Makefile" ;; + "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; + "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; + "vector/Makefile") CONFIG_FILES="$CONFIG_FILES vector/Makefile" ;; "wavelet/Makefile") CONFIG_FILES="$CONFIG_FILES wavelet/Makefile" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac @@ -14601,6 +14905,15 @@ macro_version=$macro_version macro_revision=$macro_revision +# Assembler program. +AS=$lt_AS + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Object dumper program. +OBJDUMP=$lt_OBJDUMP + # Whether or not to build shared libraries. build_libtool_libs=$enable_shared @@ -14677,9 +14990,6 @@ # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -14692,9 +15002,6 @@ # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob -# DLL creation program. -DLLTOOL=$lt_DLLTOOL - # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd diff -Nru gsl-doc-1.16/configure.ac gsl-doc-2.3/configure.ac --- gsl-doc-1.16/configure.ac 2013-07-19 15:14:45.000000000 +0000 +++ gsl-doc-2.3/configure.ac 2016-12-09 00:04:13.000000000 +0000 @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT([gsl],[1.16]) +AC_INIT([gsl],[2.3]) AC_CONFIG_SRCDIR(gsl_math.h) AM_INIT_AUTOMAKE([gnu]) @@ -28,6 +28,11 @@ dnl gsl-1.14 libgsl 15:0:15 libgslcblas 0:0:0 dnl gsl-1.15 libgsl 16:0:16 libgslcblas 0:0:0 dnl gsl-1.16 libgsl 17:0:17 libgslcblas 0:0:0 +dnl gsl-2.0 libgsl 18:0:18 (**) libgslcblas 0:0:0 +dnl gsl-2.1 libgsl 19:0:0 libgslcblas 0:0:0 +dnl gsl-2.2 libgsl 20:0:1 libgslcblas 0:0:0 +dnl gsl-2.2.1 libgsl 21:0:2 libgslcblas 0:0:0 +dnl gsl-2.3 libgsl 22:0:3 libgslcblas 0:0:0 dnl dnl (*) There was an error on this release. Firstly, the versioning dnl numbers were not updated. Secondly, 2 functions were removed, but @@ -35,6 +40,9 @@ dnl functions were not documented and are regarded as internal, so we dnl will assume 11:0:11. dnl +dnl (**) There was an error on this release. Age should have been +dnl reset to 18:0:0 +dnl dnl How to update library version number dnl ==================================== dnl @@ -46,11 +54,14 @@ dnl A: increment if any interfaces have been added; set to 0 if any dnl interfaces have been removed. removal has precedence over adding, dnl so set to 0 if both happened. +dnl +dnl See https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html +dnl for more detailed info dnl -GSL_CURRENT=17 +GSL_CURRENT=22 GSL_REVISION=0 -GSL_AGE=17 +GSL_AGE=3 dnl CBLAS_CURRENT=0 CBLAS_REVISION=0 @@ -92,7 +103,7 @@ AC_PROG_CPP AC_PROG_INSTALL AC_PROG_LN_S -AC_PROG_LIBTOOL +LT_INIT([win32-dll]) dnl Check compiler features AC_TYPE_SIZE_T @@ -104,7 +115,7 @@ GSL_CFLAGS="-I$includedir" GSL_LIBS="-L$libdir -lgsl" dnl macro from libtool - can be replaced with LT_LIB_M when we require libtool 2 -AC_CHECK_LIBM +LT_LIB_M GSL_LIBM=$LIBM AC_SUBST(GSL_CFLAGS) @@ -148,13 +159,19 @@ dnl Checks for typedefs, structures, and compiler characteristics. -case "$host_os" in - *mingw*) - MINGW=true - ;; +case $host in + *-*-cygwin* | *-*-mingw* ) + if test "$enable_shared" = yes; then + GSLCBLAS_LDFLAGS="$GSLCBLAS_LDFLAGS -no-undefined" + GSL_LDFLAGS="$GSL_LDFLAGS -no-undefined" + GSL_LIBADD="cblas/libgslcblas.la" + fi + ;; esac -AM_CONDITIONAL(MINGW32_HOST, test "$MINGW" = "true") +AC_SUBST(GSLCBLAS_LDFLAGS) +AC_SUBST(GSL_LDFLAGS) +AC_SUBST(GSL_LIBADD) dnl Checks for library functions. @@ -564,5 +581,67 @@ #define GSL_DISABLE_DEPRECATED 1]) dnl -AC_CONFIG_FILES([gsl_version.h gsl.spec gsl/Makefile test/Makefile err/Makefile sys/Makefile utils/Makefile const/Makefile min/Makefile multimin/Makefile ieee-utils/Makefile fft/Makefile specfunc/Makefile dht/Makefile fit/Makefile multifit/Makefile bspline/Makefile statistics/Makefile sum/Makefile roots/Makefile multiroots/Makefile ntuple/Makefile poly/Makefile qrng/Makefile rng/Makefile randist/Makefile siman/Makefile integration/Makefile interpolation/Makefile doc/Makefile block/Makefile vector/Makefile matrix/Makefile histogram/Makefile monte/Makefile ode-initval/Makefile ode-initval2/Makefile cblas/Makefile blas/Makefile linalg/Makefile eigen/Makefile permutation/Makefile combination/Makefile multiset/Makefile sort/Makefile complex/Makefile diff/Makefile deriv/Makefile cheb/Makefile cdf/Makefile wavelet/Makefile Makefile]) +AC_CONFIG_FILES([ \ +Makefile \ +gsl_version.h \ +gsl.spec \ +blas/Makefile \ +block/Makefile \ +bspline/Makefile \ +cblas/Makefile \ +cdf/Makefile \ +cheb/Makefile \ +combination/Makefile \ +complex/Makefile \ +const/Makefile \ +deriv/Makefile \ +dht/Makefile \ +diff/Makefile \ +doc/Makefile \ +doc/examples/Makefile \ +eigen/Makefile \ +err/Makefile \ +fit/Makefile \ +fft/Makefile \ +gsl/Makefile \ +histogram/Makefile \ +ieee-utils/Makefile \ +integration/Makefile \ +interpolation/Makefile \ +linalg/Makefile \ +matrix/Makefile \ +min/Makefile \ +monte/Makefile \ +multifit/Makefile \ +multifit_nlinear/Makefile \ +multilarge/Makefile \ +multilarge_nlinear/Makefile \ +multimin/Makefile \ +multiroots/Makefile \ +multiset/Makefile \ +ntuple/Makefile \ +ode-initval/Makefile \ +ode-initval2/Makefile \ +permutation/Makefile \ +poly/Makefile \ +qrng/Makefile \ +randist/Makefile \ +rng/Makefile \ +roots/Makefile \ +rstat/Makefile \ +siman/Makefile \ +sort/Makefile \ +spblas/Makefile \ +splinalg/Makefile \ +spmatrix/Makefile \ +specfunc/Makefile \ +statistics/Makefile \ +sum/Makefile \ +sys/Makefile \ +test/Makefile \ +utils/Makefile \ +vector/Makefile \ +wavelet/Makefile \ +]) + AC_OUTPUT diff -Nru gsl-doc-1.16/const/Makefile.am gsl-doc-2.3/const/Makefile.am --- gsl-doc-1.16/const/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/const/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -1,6 +1,6 @@ pkginclude_HEADERS = gsl_const.h gsl_const_cgs.h gsl_const_mks.h gsl_const_cgsm.h gsl_const_mksa.h gsl_const_num.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/const/Makefile.in gsl-doc-2.3/const/Makefile.in --- gsl-doc-1.16/const/Makefile.in 2013-07-19 15:14:52.000000000 +0000 +++ gsl-doc-2.3/const/Makefile.in 2016-12-09 00:04:21.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -371,6 +371,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -393,7 +394,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -508,7 +512,7 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ pkginclude_HEADERS = gsl_const.h gsl_const_cgs.h gsl_const_mks.h gsl_const_cgsm.h gsl_const_mksa.h gsl_const_num.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la diff -Nru gsl-doc-1.16/debian/changelog gsl-doc-2.3/debian/changelog --- gsl-doc-1.16/debian/changelog 2017-03-02 01:15:34.000000000 +0000 +++ gsl-doc-2.3/debian/changelog 2017-03-02 01:15:35.000000000 +0000 @@ -1,3 +1,15 @@ +gsl-doc (2.3-1) unstable; urgency=medium + + * New upstream release + + * debian/control: Set Standards-Version: to current version + + * debian/compat: Increased to 9 + + * debian/control: Update Suggests: to libgsl2 + + -- Dirk Eddelbuettel Wed, 01 Mar 2017 06:16:49 -0600 + gsl-doc (1.16-1) unstable; urgency=low * New upstream release of what is considered 'non-free' GSL documentation diff -Nru gsl-doc-1.16/debian/compat gsl-doc-2.3/debian/compat --- gsl-doc-1.16/debian/compat 2017-03-02 01:15:34.000000000 +0000 +++ gsl-doc-2.3/debian/compat 2017-03-02 01:15:35.000000000 +0000 @@ -1 +1 @@ -5 +9 diff -Nru gsl-doc-1.16/debian/control gsl-doc-2.3/debian/control --- gsl-doc-1.16/debian/control 2017-03-02 01:15:34.000000000 +0000 +++ gsl-doc-2.3/debian/control 2017-03-02 01:15:35.000000000 +0000 @@ -2,7 +2,7 @@ Section: non-free/math Priority: optional Maintainer: Dirk Eddelbuettel -Standards-Version: 3.9.4 +Standards-Version: 3.9.8 Build-Depends: debhelper (>= 7.2.17), autotools-dev Build-Depends-Indep: texlive-base, texlive-latex-base, texlive-generic-recommended, texlive-font-utils, texinfo, ghostscript, ps2eps Homepage: http://www.gnu.org/software/gsl @@ -11,7 +11,7 @@ Section: non-free/doc Architecture: all Depends: ${misc:Depends} -Suggests: libgsl0ldbl, gv | pdf-viewer +Suggests: libgsl2, gv | pdf-viewer Description: GNU Scientific Library (GSL) Reference Manual in pdf This package provides a pdf file with the reference manual for the GNU Scientific Library (GSL), a collection of routines for numerical diff -Nru gsl-doc-1.16/debian/rules gsl-doc-2.3/debian/rules --- gsl-doc-1.16/debian/rules 2017-03-02 01:15:34.000000000 +0000 +++ gsl-doc-2.3/debian/rules 2017-03-02 01:15:35.000000000 +0000 @@ -90,7 +90,7 @@ install-work: dh_testdir dh_testroot - dh_clean -k + dh_prep dh_installdirs #$(MAKE) prefix=$(debtmp)/usr \ # libdir=$(debtmp)/usr/lib \ diff -Nru gsl-doc-1.16/depcomp gsl-doc-2.3/depcomp --- gsl-doc-1.16/depcomp 2013-07-18 16:30:04.000000000 +0000 +++ gsl-doc-2.3/depcomp 2015-12-03 18:34:36.000000000 +0000 @@ -1,7 +1,7 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2012-10-18.11; # UTC +scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. @@ -552,6 +552,7 @@ G p }' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; diff -Nru gsl-doc-1.16/deriv/Makefile.am gsl-doc-2.3/deriv/Makefile.am --- gsl-doc-1.16/deriv/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/deriv/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -1,6 +1,6 @@ noinst_LTLIBRARIES = libgslderiv.la -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslderiv_la_SOURCES = deriv.c diff -Nru gsl-doc-1.16/deriv/Makefile.in gsl-doc-2.3/deriv/Makefile.in --- gsl-doc-1.16/deriv/Makefile.in 2013-07-19 15:14:53.000000000 +0000 +++ gsl-doc-2.3/deriv/Makefile.in 2016-12-09 00:04:21.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -376,6 +376,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -398,7 +399,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -513,7 +517,7 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslderiv.la -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslderiv_la_SOURCES = deriv.c pkginclude_HEADERS = gsl_deriv.h TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/dht/Makefile.am gsl-doc-2.3/dht/Makefile.am --- gsl-doc-1.16/dht/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/dht/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ pkginclude_HEADERS = gsl_dht.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/dht/Makefile.in gsl-doc-2.3/dht/Makefile.in --- gsl-doc-1.16/dht/Makefile.in 2013-07-19 15:14:53.000000000 +0000 +++ gsl-doc-2.3/dht/Makefile.in 2016-12-09 00:04:21.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -377,6 +377,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -399,7 +400,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -515,7 +519,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgsldht.la pkginclude_HEADERS = gsl_dht.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_LDADD = libgsldht.la ../specfunc/libgslspecfunc.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c diff -Nru gsl-doc-1.16/diff/Makefile.am gsl-doc-2.3/diff/Makefile.am --- gsl-doc-1.16/diff/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/diff/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -1,6 +1,6 @@ noinst_LTLIBRARIES = libgsldiff.la -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgsldiff_la_SOURCES = diff.c diff -Nru gsl-doc-1.16/diff/Makefile.in gsl-doc-2.3/diff/Makefile.in --- gsl-doc-1.16/diff/Makefile.in 2013-07-19 15:14:53.000000000 +0000 +++ gsl-doc-2.3/diff/Makefile.in 2016-12-09 00:04:21.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -376,6 +376,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -398,7 +399,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -513,7 +517,7 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgsldiff.la -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgsldiff_la_SOURCES = diff.c pkginclude_HEADERS = gsl_diff.h TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/doc/blas.texi gsl-doc-2.3/doc/blas.texi --- gsl-doc-1.16/doc/blas.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/blas.texi 2015-11-09 05:23:40.000000000 +0000 @@ -652,7 +652,7 @@ @example $ ./a.out -@verbatiminclude examples/blas.out +@verbatiminclude examples/blas.txt @end example @node BLAS References and Further Reading diff -Nru gsl-doc-1.16/doc/bspline.texi gsl-doc-2.3/doc/bspline.texi --- gsl-doc-1.16/doc/bspline.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/bspline.texi 2015-11-10 20:59:47.000000000 +0000 @@ -18,7 +18,7 @@ * Evaluation of B-spline basis function derivatives:: * Working with the Greville abscissae:: * Example programs for B-splines:: -* References and Further Reading:: +* B-Spline References and Further Reading:: @end menu @node Overview of B-splines @@ -88,35 +88,21 @@ @cindex basis splines, initializing The computation of B-spline functions requires a preallocated -workspace of type @code{gsl_bspline_workspace}. If B-spline -derivatives are also required, an additional -@code{gsl_bspline_deriv_workspace} is needed. +workspace of type @code{gsl_bspline_workspace}. @deftypefun {gsl_bspline_workspace *} gsl_bspline_alloc (const size_t @var{k}, const size_t @var{nbreak}) -@tpindex gsl_bspline_workspace +@tindex gsl_bspline_workspace This function allocates a workspace for computing B-splines of order @var{k}. The number of breakpoints is given by @var{nbreak}. This leads to @math{n = nbreak + k - 2} basis functions. Cubic B-splines are specified by @math{k = 4}. The size of the workspace is -@math{O(5k + nbreak)}. +@math{O(2k^2 + 5k + nbreak)}. @end deftypefun @deftypefun void gsl_bspline_free (gsl_bspline_workspace * @var{w}) This function frees the memory associated with the workspace @var{w}. @end deftypefun -@deftypefun {gsl_bspline_deriv_workspace *} gsl_bspline_deriv_alloc (const size_t @var{k}) -@tpindex gsl_bspline_deriv_workspace -This function allocates a workspace for computing the derivatives of a -B-spline basis function of order @var{k}. The size of the workspace -is @math{O(2k^2)}. -@end deftypefun - -@deftypefun void gsl_bspline_deriv_free (gsl_bspline_deriv_workspace * @var{w}) -This function frees the memory associated with the derivative -workspace @var{w}. -@end deftypefun - @node Constructing the knots vector @section Constructing the knots vector @cindex knots, basis splines @@ -172,7 +158,7 @@ @section Evaluation of B-spline derivatives @cindex basis splines, derivatives -@deftypefun int gsl_bspline_deriv_eval (const double @var{x}, const size_t @var{nderiv}, gsl_matrix * @var{dB}, gsl_bspline_workspace * @var{w}, gsl_bspline_deriv_workspace * @var{dw}) +@deftypefun int gsl_bspline_deriv_eval (const double @var{x}, const size_t @var{nderiv}, gsl_matrix * @var{dB}, gsl_bspline_workspace * @var{w}) This function evaluates all B-spline basis function derivatives of orders @math{0} through @math{nderiv} (inclusive) at the position @var{x} and stores them in the matrix @var{dB}. The @math{(i,j)}-th element of @var{dB} @@ -186,7 +172,7 @@ recurrence relation. @end deftypefun -@deftypefun int gsl_bspline_deriv_eval_nonzero (const double @var{x}, const size_t @var{nderiv}, gsl_matrix * @var{dB}, size_t * @var{istart}, size_t * @var{iend}, gsl_bspline_workspace * @var{w}, gsl_bspline_deriv_workspace * @var{dw}) +@deftypefun int gsl_bspline_deriv_eval_nonzero (const double @var{x}, const size_t @var{nderiv}, gsl_matrix * @var{dB}, size_t * @var{istart}, size_t * @var{iend}, gsl_bspline_workspace * @var{w}) This function evaluates all potentially nonzero B-spline basis function derivatives of orders @math{0} through @math{nderiv} (inclusive) at the position @var{x} and stores them in the matrix @var{dB}. The @@ -253,9 +239,9 @@ The output can be plotted with @sc{gnu} @code{graph}. @example -$ ./a.out > bspline.dat +$ ./a.out > bspline.txt chisq/dof = 1.118217e+00, Rsq = 0.989771 -$ graph -T ps -X x -Y y -x 0 15 -y -1 1.3 < bspline.dat > bspline.ps +$ graph -T ps -X x -Y y -x 0 15 -y -1 1.3 < bspline.txt > bspline.ps @end example @iftex @@ -263,8 +249,8 @@ @center @image{bspline,3.4in} @end iftex -@node References and Further Reading -@section References and Further Reading +@node B-Spline References and Further Reading +@section B-Spline References and Further Reading Further information on the algorithms described in this section can be found in the following book, diff -Nru gsl-doc-1.16/doc/cblas.texi gsl-doc-2.3/doc/cblas.texi --- gsl-doc-1.16/doc/cblas.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/cblas.texi 2015-11-09 05:23:40.000000000 +0000 @@ -510,5 +510,5 @@ @example $ ./a.out -@verbatiminclude examples/cblas.out +@verbatiminclude examples/cblas.txt @end example diff -Nru gsl-doc-1.16/doc/cheb.texi gsl-doc-2.3/doc/cheb.texi --- gsl-doc-1.16/doc/cheb.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/cheb.texi 2015-11-03 16:21:55.000000000 +0000 @@ -27,7 +27,7 @@ @node Chebyshev Definitions @section Definitions -@tpindex gsl_cheb_series +@tindex gsl_cheb_series A Chebyshev series is stored using the following structure, @example diff -Nru gsl-doc-1.16/doc/combination.texi gsl-doc-2.3/doc/combination.texi --- gsl-doc-1.16/doc/combination.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/combination.texi 2015-11-09 05:23:40.000000000 +0000 @@ -24,7 +24,7 @@ @node The Combination struct @section The Combination struct -@tpindex gsl_combination +@tindex gsl_combination A combination is defined by a structure containing three components, the values of @math{n} and @math{k}, and a pointer to the combination array. The elements of the combination array are all of type @code{size_t}, and @@ -197,7 +197,7 @@ @example $ ./a.out -@verbatiminclude examples/combination.out +@verbatiminclude examples/combination.txt @end example @noindent diff -Nru gsl-doc-1.16/doc/const.texi gsl-doc-2.3/doc/const.texi --- gsl-doc-1.16/doc/const.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/const.texi 2015-11-09 05:23:40.000000000 +0000 @@ -555,7 +555,7 @@ Here is the output from the program, @example -@verbatiminclude examples/const.out +@verbatiminclude examples/const.txt @end example @node Physical Constant References and Further Reading diff -Nru gsl-doc-1.16/doc/dht.texi gsl-doc-2.3/doc/dht.texi --- gsl-doc-1.16/doc/dht.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/dht.texi 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ @cindex Hankel transforms, discrete @cindex transforms, Hankel This chapter describes functions for performing Discrete Hankel -Transforms (DHTs). The functions are declared in the header file +Transforms (DHTs). The functions are declared in the header file @file{gsl_dht.h}. @menu @@ -16,78 +16,115 @@ The discrete Hankel transform acts on a vector of sampled data, where the samples are assumed to have been taken at points related to the -zeroes of a Bessel function of fixed order; compare this to the case of +zeros of a Bessel function of fixed order; compare this to the case of the discrete Fourier transform, where samples are taken at points related to the zeroes of the sine or cosine function. -Specifically, let @math{f(t)} be a function on the unit interval and -@c{$j_{\nu,m}$} -@math{j_(\nu,m)} the @math{m}-th zero of the Bessel function -@math{J_\nu(x)}. Then the finite @math{\nu}-Hankel transform of -@math{f(t)} is defined to be the set of numbers @math{g_m} given by, +Starting with its definition, the Hankel transform (or Bessel transform) of +order @math{\nu} of a function @math{f} with @math{\nu > -1/2} is defined as +(see Johnson, 1987 and Lemoine, 1994) @tex \beforedisplay $$ -g_m = \int_0^1 t dt\, J_\nu(j_{\nu,m}t) f(t), +F_\nu(u) = \int_0^\infty f(t) J_\nu(u t) t dt $$ \afterdisplay @end tex @ifinfo @example -g_m = \int_0^1 t dt J_\nu(j_(\nu,m)t) f(t), +F_\nu(u) = \int_0^\infty f(t) J_\nu(u t) t dt @end example - @end ifinfo + @noindent -so that, +If the integral exists, @math{F_\nu} is called the Hankel transformation +of @math{f}. The reverse transform is given by @tex \beforedisplay $$ -f(t) = \sum_{m=1}^\infty {{2 J_\nu(j_{\nu,m}t)}\over{J_{\nu+1}(j_{\nu,m})^2}} g_m. +f(t) = \int_0^\infty F_\nu(u) J_\nu(u t) u du , $$ \afterdisplay @end tex @ifinfo @example -f(t) = \sum_@{m=1@}^\infty (2 J_\nu(j_(\nu,m)t) / J_(\nu+1)(j_(\nu,m))^2) g_m. +f(t) = \int_0^\infty F_\nu(u) J_\nu(u t) u du , @end example - @end ifinfo + @noindent -Suppose that @math{f} is band-limited in the sense that -@math{g_m=0} for @math{m > M}. Then we have the following -fundamental sampling theorem. +where @math{\int_0^\infty f(t) t^{1/2} dt} must exist and be +absolutely convergent, and where @math{f(t)} satisfies Dirichlet's +conditions (of limited total fluctuations) in the interval +@math{[0,\infty]}. + +Now the discrete Hankel transform works on a discrete function +@math{f}, which is sampled on points @math{n=1...M} located at +positions @math{t_n=(j_{\nu,n}/j_{\nu,M}) X} in real space and +at @math{u_n=j_{\nu,n}/X} in reciprocal space. Here, +@math{j_{\nu,m}} are the m-th zeros of the Bessel function +@math{J_\nu(x)} arranged in ascending order. Moreover, the +discrete functions are assumed to be band limited, so +@math{f(t_n)=0} and @math{F(u_n)=0} for @math{n>M}. Accordingly, +the function @math{f} is defined on the interval @math{[0,X]}. + +Following the work of Johnson, 1987 and +Lemoine, 1994, the discrete Hankel transform is given by @tex \beforedisplay $$ -g_m = {{2}\over{j_{\nu,M}^2}} - \sum_{k=1}^{M-1} f\left({{j_{\nu,k}}\over{j_{\nu,M}}}\right) +F_\nu(u_m) = {{2 X^2}\over{j_{\nu,M}^2}} + \sum_{k=1}^{M-1} f\left({{j_{\nu,k} X}\over{j_{\nu,M}}}\right) {{J_\nu(j_{\nu,m} j_{\nu,k} / j_{\nu,M})}\over{J_{\nu+1}(j_{\nu,k})^2}}. $$ \afterdisplay @end tex @ifinfo @example -g_m = (2 / j_(\nu,M)^2) - \sum_@{k=1@}^@{M-1@} f(j_(\nu,k)/j_(\nu,M)) +F_\nu(u_m) = (2 X^2 / j_(\nu,M)^2) + \sum_@{k=1@}^@{M-1@} f(j_(\nu,k) X/j_(\nu,M)) (J_\nu(j_(\nu,m) j_(\nu,k) / j_(\nu,M)) / J_(\nu+1)(j_(\nu,k))^2). @end example @end ifinfo @noindent It is this discrete expression which defines the discrete Hankel -transform. The kernel in the summation above defines the matrix of the -@math{\nu}-Hankel transform of size @math{M-1}. The coefficients of +transform calculated by GSL. In GSL, forward and backward transforms +are defined equally and calculate @math{F_\nu(u_m)}. +Following Johnson, the backward transform reads +@tex +\beforedisplay +$$ +f(t_k) = {{2}\over{X^2}} + \sum_{m=1}^{M-1} F\left({{j_{\nu,m}}\over{X}}\right) + {{J_\nu(j_{\nu,m} j_{\nu,k} / j_{\nu,M})}\over{J_{\nu+1}(j_{\nu,m})^2}}. +$$ +\afterdisplay +@end tex +@ifinfo +@example +f(t_k) = (2 / X^2) + \sum_@{m=1@}^@{M-1@} F(j_(\nu,m)/X) + (J_\nu(j_(\nu,m) j_(\nu,k) / j_(\nu,M)) / J_(\nu+1)(j_(\nu,m))^2). +@end example + +@end ifinfo +@noindent +Obviously, using the forward transform instead of the backward transform gives an +additional factor @math{X^4/j_{\nu,M}^2=t_m^2/u_m^2}. + +The kernel in the summation above defines the matrix of the +@math{\nu}-Hankel transform of size @math{M-1}. The coefficients of this matrix, being dependent on @math{\nu} and @math{M}, must be precomputed and stored; the @code{gsl_dht} object encapsulates this -data. The allocation function @code{gsl_dht_alloc} returns a +data. The allocation function @code{gsl_dht_alloc} returns a @code{gsl_dht} object which must be properly initialized with @code{gsl_dht_init} before it can be used to perform transforms on data sample vectors, for fixed @math{\nu} and @math{M}, using the -@code{gsl_dht_apply} function. The implementation allows a scaling of -the fundamental interval, for convenience, so that one can assume the -function is defined on the interval @math{[0,X]}, rather than the unit -interval. +@code{gsl_dht_apply} function. The implementation allows to define the +length @math{X} of the fundamental interval, for convenience, while +discrete Hankel transforms are often defined on the unit interval +instead of @math{[0,X]}. Notice that by assumption @math{f(t)} vanishes at the endpoints of the interval, consistent with the inversion formula @@ -95,12 +132,11 @@ corresponds to an orthogonal expansion in eigenfunctions of the Dirichlet problem for the Bessel differential equation. - @node Discrete Hankel Transform Functions @section Functions @deftypefun {gsl_dht *} gsl_dht_alloc (size_t @var{size}) -@tpindex gsl_dht +@tindex gsl_dht This function allocates a Discrete Hankel transform object of size @var{size}. @end deftypefun @@ -126,7 +162,7 @@ in the array @var{f_out} which must be of the same length. Applying this function to its output gives the original data -multiplied by @c{$(1/j_{\nu,M})^2$} +multiplied by @c{$(X^2/j_{\nu,M})^2$} @math{(1/j_(\nu,M))^2}, up to numerical errors. @end deftypefun diff -Nru gsl-doc-1.16/doc/diff.texi gsl-doc-2.3/doc/diff.texi --- gsl-doc-1.16/doc/diff.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/diff.texi 2015-11-09 05:23:40.000000000 +0000 @@ -86,7 +86,7 @@ @example $ ./a.out -@verbatiminclude examples/diff.out +@verbatiminclude examples/diff.txt @end example @node Numerical Differentiation References diff -Nru gsl-doc-1.16/doc/dwt.texi gsl-doc-2.3/doc/dwt.texi --- gsl-doc-1.16/doc/dwt.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/dwt.texi 2015-11-10 18:06:56.000000000 +0000 @@ -114,13 +114,13 @@ @node DWT Initialization @section Initialization @cindex DWT initialization -@tpindex gsl_wavelet_type +@tindex gsl_wavelet_type The @code{gsl_wavelet} structure contains the filter coefficients defining the wavelet and any associated offset parameters. @deftypefun {gsl_wavelet *} gsl_wavelet_alloc (const gsl_wavelet_type * @var{T}, size_t @var{k}) -@tpindex gsl_wavelet +@tindex gsl_wavelet This function allocates and initializes a wavelet object of type @var{T}. The parameter @var{k} selects the specific member of the wavelet family. A null pointer is returned if insufficient memory is @@ -179,7 +179,7 @@ during the transform. @deftypefun {gsl_wavelet_workspace *} gsl_wavelet_workspace_alloc (size_t @var{n}) -@tpindex gsl_wavelet_workspace +@tindex gsl_wavelet_workspace This function allocates a workspace for the discrete wavelet transform. To perform a one-dimensional transform on @var{n} elements, a workspace of size @var{n} must be provided. For two-dimensional transforms of @@ -347,8 +347,8 @@ The output can be used with the @sc{gnu} plotutils @code{graph} program, @example -$ ./a.out ecg.dat > dwt.dat -$ graph -T ps -x 0 256 32 -h 0.3 -a dwt.dat > dwt.ps +$ ./a.out ecg.dat > dwt.txt +$ graph -T ps -x 0 256 32 -h 0.3 -a dwt.txt > dwt.ps @end example @iftex diff -Nru gsl-doc-1.16/doc/eigen.texi gsl-doc-2.3/doc/eigen.texi --- gsl-doc-1.16/doc/eigen.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/eigen.texi 2015-11-03 16:21:55.000000000 +0000 @@ -36,7 +36,7 @@ the machine precision. @deftypefun {gsl_eigen_symm_workspace *} gsl_eigen_symm_alloc (const size_t @var{n}) -@tpindex gsl_eigen_symm_workspace +@tindex gsl_eigen_symm_workspace This function allocates a workspace for computing eigenvalues of @var{n}-by-@var{n} real symmetric matrices. The size of the workspace is @math{O(2n)}. @@ -56,7 +56,7 @@ @end deftypefun @deftypefun {gsl_eigen_symmv_workspace *} gsl_eigen_symmv_alloc (const size_t @var{n}) -@tpindex gsl_eigen_symmv_workspace +@tindex gsl_eigen_symmv_workspace This function allocates a workspace for computing eigenvalues and eigenvectors of @var{n}-by-@var{n} real symmetric matrices. The size of the workspace is @math{O(4n)}. @@ -88,7 +88,7 @@ @cindex hermitian matrix, complex, eigensystem @cindex complex hermitian matrix, eigensystem @deftypefun {gsl_eigen_herm_workspace *} gsl_eigen_herm_alloc (const size_t @var{n}) -@tpindex gsl_eigen_herm_workspace +@tindex gsl_eigen_herm_workspace This function allocates a workspace for computing eigenvalues of @var{n}-by-@var{n} complex hermitian matrices. The size of the workspace is @math{O(3n)}. @@ -109,7 +109,7 @@ @end deftypefun @deftypefun {gsl_eigen_hermv_workspace *} gsl_eigen_hermv_alloc (const size_t @var{n}) -@tpindex gsl_eigen_hermv_workspace +@tindex gsl_eigen_hermv_workspace This function allocates a workspace for computing eigenvalues and eigenvectors of @var{n}-by-@var{n} complex hermitian matrices. The size of the workspace is @math{O(5n)}. @@ -162,7 +162,7 @@ Francis method. @deftypefun {gsl_eigen_nonsymm_workspace *} gsl_eigen_nonsymm_alloc (const size_t @var{n}) -@tpindex gsl_eigen_nonsymm_workspace +@tindex gsl_eigen_nonsymm_workspace This function allocates a workspace for computing eigenvalues of @var{n}-by-@var{n} real nonsymmetric matrices. The size of the workspace is @math{O(2n)}. @@ -248,7 +248,7 @@ @end deftypefun @deftypefun {gsl_eigen_nonsymmv_workspace *} gsl_eigen_nonsymmv_alloc (const size_t @var{n}) -@tpindex gsl_eigen_nonsymmv_workspace +@tindex gsl_eigen_nonsymmv_workspace This function allocates a workspace for computing eigenvalues and eigenvectors of @var{n}-by-@var{n} real nonsymmetric matrices. The size of the workspace is @math{O(5n)}. @@ -334,7 +334,7 @@ of the generalized symmetric-definite eigenproblem are always real. @deftypefun {gsl_eigen_gensymm_workspace *} gsl_eigen_gensymm_alloc (const size_t @var{n}) -@tpindex gsl_eigen_gensymm_workspace +@tindex gsl_eigen_gensymm_workspace This function allocates a workspace for computing eigenvalues of @var{n}-by-@var{n} real generalized symmetric-definite eigensystems. The size of the workspace is @math{O(2n)}. @@ -352,7 +352,7 @@ @end deftypefun @deftypefun {gsl_eigen_gensymmv_workspace *} gsl_eigen_gensymmv_alloc (const size_t @var{n}) -@tpindex gsl_eigen_gensymmv_workspace +@tindex gsl_eigen_gensymmv_workspace This function allocates a workspace for computing eigenvalues and eigenvectors of @var{n}-by-@var{n} real generalized symmetric-definite eigensystems. The size of the workspace is @math{O(4n)}. @@ -402,7 +402,7 @@ of the generalized hermitian-definite eigenproblem are always real. @deftypefun {gsl_eigen_genherm_workspace *} gsl_eigen_genherm_alloc (const size_t @var{n}) -@tpindex gsl_eigen_genherm_workspace +@tindex gsl_eigen_genherm_workspace This function allocates a workspace for computing eigenvalues of @var{n}-by-@var{n} complex generalized hermitian-definite eigensystems. The size of the workspace is @math{O(3n)}. @@ -420,7 +420,7 @@ @end deftypefun @deftypefun {gsl_eigen_genhermv_workspace *} gsl_eigen_genhermv_alloc (const size_t @var{n}) -@tpindex gsl_eigen_genhermv_workspace +@tindex gsl_eigen_genhermv_workspace This function allocates a workspace for computing eigenvalues and eigenvectors of @var{n}-by-@var{n} complex generalized hermitian-definite eigensystems. The size of the workspace is @math{O(5n)}. @@ -526,7 +526,7 @@ (see references). @deftypefun {gsl_eigen_gen_workspace *} gsl_eigen_gen_alloc (const size_t @var{n}) -@tpindex gsl_eigen_gen_workspace +@tindex gsl_eigen_gen_workspace This function allocates a workspace for computing eigenvalues of @var{n}-by-@var{n} real generalized nonsymmetric eigensystems. The size of the workspace is @math{O(n)}. @@ -584,7 +584,7 @@ @end deftypefun @deftypefun {gsl_eigen_genv_workspace *} gsl_eigen_genv_alloc (const size_t @var{n}) -@tpindex gsl_eigen_genv_workspace +@tindex gsl_eigen_genv_workspace This function allocates a workspace for computing eigenvalues and eigenvectors of @var{n}-by-@var{n} real generalized nonsymmetric eigensystems. The size of the workspace is @math{O(7n)}. diff -Nru gsl-doc-1.16/doc/examples/blas.out gsl-doc-2.3/doc/examples/blas.out --- gsl-doc-1.16/doc/examples/blas.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/blas.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -[ 367.76, 368.12 - 674.06, 674.72 ] \ No newline at end of file diff -Nru gsl-doc-1.16/doc/examples/blas.txt gsl-doc-2.3/doc/examples/blas.txt --- gsl-doc-1.16/doc/examples/blas.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/blas.txt 2015-11-10 17:45:14.000000000 +0000 @@ -0,0 +1,2 @@ +[ 367.76, 368.12 + 674.06, 674.72 ] diff -Nru gsl-doc-1.16/doc/examples/block.c gsl-doc-2.3/doc/examples/block.c --- gsl-doc-1.16/doc/examples/block.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/block.c 2015-11-09 19:06:11.000000000 +0000 @@ -6,8 +6,8 @@ { gsl_block * b = gsl_block_alloc (100); - printf ("length of block = %u\n", b->size); - printf ("block data address = %#x\n", b->data); + printf ("length of block = %zu\n", b->size); + printf ("block data address = %p\n", b->data); gsl_block_free (b); return 0; diff -Nru gsl-doc-1.16/doc/examples/block.out gsl-doc-2.3/doc/examples/block.out --- gsl-doc-1.16/doc/examples/block.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/block.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -length of block = 100 -block data address = 0x804b0d8 diff -Nru gsl-doc-1.16/doc/examples/block.txt gsl-doc-2.3/doc/examples/block.txt --- gsl-doc-1.16/doc/examples/block.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/block.txt 2015-11-09 05:23:40.000000000 +0000 @@ -0,0 +1,2 @@ +length of block = 100 +block data address = 0x804b0d8 diff -Nru gsl-doc-1.16/doc/examples/bspline.txt gsl-doc-2.3/doc/examples/bspline.txt --- gsl-doc-1.16/doc/examples/bspline.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/bspline.txt 2015-11-10 18:19:30.000000000 +0000 @@ -0,0 +1,353 @@ +#m=0,S=0 +0.000000 1.013392 +0.075377 0.980953 +0.150754 1.136930 +0.226131 1.022649 +0.301508 1.018952 +0.376884 0.781034 +0.452261 0.653645 +0.527638 0.763919 +0.603015 0.772400 +0.678392 0.792524 +0.753769 0.674983 +0.829146 0.541142 +0.904523 0.526895 +0.979899 0.514283 +1.055276 0.480481 +1.130653 0.359657 +1.206030 0.296027 +1.281407 0.251224 +1.356784 0.173015 +1.432161 0.109840 +1.507538 0.057700 +1.582915 -0.009964 +1.658291 -0.071887 +1.733668 -0.123842 +1.809045 -0.185449 +1.884422 -0.257174 +1.959799 -0.313225 +2.035176 -0.337965 +2.110553 -0.410140 +2.185930 -0.532190 +2.261307 -0.497535 +2.336683 -0.534430 +2.412060 -0.577618 +2.487437 -0.461417 +2.562814 -0.685286 +2.638191 -0.670396 +2.713568 -0.677885 +2.788945 -0.760828 +2.864322 -0.836176 +2.939698 -0.701519 +3.015075 -0.820581 +3.090452 -0.864657 +3.165829 -0.675148 +3.241206 -0.674258 +3.316583 -0.853122 +3.391960 -0.627814 +3.467337 -0.786064 +3.542714 -0.735333 +3.618090 -0.595610 +3.693467 -0.570664 +3.768844 -0.625037 +3.844221 -0.505355 +3.919598 -0.479103 +3.994975 -0.476144 +4.070352 -0.420115 +4.145729 -0.357678 +4.221106 -0.351235 +4.296482 -0.263275 +4.371859 -0.231913 +4.447236 -0.141524 +4.522613 -0.117161 +4.597990 -0.074501 +4.673367 -0.024253 +4.748744 0.021384 +4.824121 0.059326 +4.899497 0.133528 +4.974874 0.164376 +5.050251 0.230545 +5.125628 0.257040 +5.201005 0.262619 +5.276382 0.356921 +5.351759 0.320297 +5.427136 0.410395 +5.502513 0.376859 +5.577889 0.432169 +5.653266 0.527822 +5.728643 0.498471 +5.804020 0.662444 +5.879397 0.602791 +5.954774 0.613485 +6.030151 0.565095 +6.105528 0.478371 +6.180905 0.553815 +6.256281 0.559066 +6.331658 0.405827 +6.407035 0.490786 +6.482412 0.401802 +6.557789 0.449565 +6.633166 0.461542 +6.708543 0.427638 +6.783920 0.453343 +6.859296 0.405652 +6.934673 0.331105 +7.010050 0.335669 +7.085427 0.342361 +7.160804 0.348337 +7.236181 0.333673 +7.311558 0.251268 +7.386935 0.219000 +7.462312 0.204136 +7.537688 0.154734 +7.613065 0.106188 +7.688442 0.079925 +7.763819 0.049781 +7.839196 0.008202 +7.914573 -0.026424 +7.989950 -0.056430 +8.065327 -0.081651 +8.140704 -0.107899 +8.216080 -0.149809 +8.291457 -0.212280 +8.366834 -0.184227 +8.442211 -0.213536 +8.517588 -0.259030 +8.592965 -0.290374 +8.668342 -0.377034 +8.743719 -0.335464 +8.819095 -0.352989 +8.894472 -0.328890 +8.969849 -0.429577 +9.045226 -0.362269 +9.120603 -0.456158 +9.195980 -0.404115 +9.271357 -0.351878 +9.346734 -0.402716 +9.422111 -0.376668 +9.497487 -0.420820 +9.572864 -0.429693 +9.648241 -0.401090 +9.723618 -0.347126 +9.798995 -0.369382 +9.874372 -0.314223 +9.949749 -0.302814 +10.025126 -0.325928 +10.100503 -0.289654 +10.175879 -0.252184 +10.251256 -0.254930 +10.326633 -0.210489 +10.402010 -0.198464 +10.477387 -0.182488 +10.552764 -0.191308 +10.628141 -0.115893 +10.703518 -0.092357 +10.778894 -0.086082 +10.854271 -0.054768 +10.929648 -0.022839 +11.005025 0.003120 +11.080402 0.027484 +11.155779 0.039650 +11.231156 0.068622 +11.306533 0.098587 +11.381910 0.120223 +11.457286 0.139761 +11.532663 0.163363 +11.608040 0.192581 +11.683417 0.184073 +11.758794 0.212051 +11.834171 0.224144 +11.909548 0.241003 +11.984925 0.286442 +12.060302 0.226233 +12.135678 0.296165 +12.211055 0.247044 +12.286432 0.298468 +12.361809 0.293579 +12.437186 0.294012 +12.512563 0.306141 +12.587940 0.277510 +12.663317 0.285759 +12.738693 0.302944 +12.814070 0.257310 +12.889447 0.243150 +12.964824 0.218764 +13.040201 0.264436 +13.115578 0.221957 +13.190955 0.196140 +13.266332 0.228542 +13.341709 0.156622 +13.417085 0.192438 +13.492462 0.156691 +13.567839 0.144335 +13.643216 0.148104 +13.718593 0.117823 +13.793970 0.082832 +13.869347 0.062686 +13.944724 0.040703 +14.020101 0.026491 +14.095477 0.010098 +14.170854 -0.007478 +14.246231 -0.029452 +14.321608 -0.042866 +14.396985 -0.057775 +14.472362 -0.071364 +14.547739 -0.098028 +14.623116 -0.130422 +14.698492 -0.133196 +14.773869 -0.131368 +14.849246 -0.152986 +14.924623 -0.156311 +15.000000 -0.163284 +#m=1,S=0 +0.000000 1.020318 +0.100000 1.001004 +0.200000 0.971769 +0.300000 0.933425 +0.400000 0.886787 +0.500000 0.832667 +0.600000 0.771879 +0.700000 0.705235 +0.800000 0.633550 +0.900000 0.557635 +1.000000 0.478304 +1.100000 0.396370 +1.200000 0.312647 +1.300000 0.227948 +1.400000 0.143085 +1.500000 0.058872 +1.600000 -0.023878 +1.700000 -0.104354 +1.800000 -0.181913 +1.900000 -0.256170 +2.000000 -0.326761 +2.100000 -0.393322 +2.200000 -0.455491 +2.300000 -0.512905 +2.400000 -0.565199 +2.500000 -0.612011 +2.600000 -0.652978 +2.700000 -0.687736 +2.800000 -0.715922 +2.900000 -0.737172 +3.000000 -0.751124 +3.100000 -0.757414 +3.200000 -0.755680 +3.300000 -0.745556 +3.400000 -0.726738 +3.500000 -0.699577 +3.600000 -0.664851 +3.700000 -0.623345 +3.800000 -0.575842 +3.900000 -0.523128 +4.000000 -0.465986 +4.100000 -0.405202 +4.200000 -0.341560 +4.300000 -0.275845 +4.400000 -0.208840 +4.500000 -0.141331 +4.600000 -0.074102 +4.700000 -0.007938 +4.800000 0.056378 +4.900000 0.118059 +5.000000 0.176323 +5.100000 0.230505 +5.200000 0.280423 +5.300000 0.326019 +5.400000 0.367230 +5.500000 0.403998 +5.600000 0.436261 +5.700000 0.463960 +5.800000 0.487034 +5.900000 0.505422 +6.000000 0.519064 +6.100000 0.527901 +6.200000 0.531871 +6.300000 0.530914 +6.400000 0.524970 +6.500000 0.513979 +6.600000 0.497880 +6.700000 0.476616 +6.800000 0.450349 +6.900000 0.419577 +7.000000 0.384827 +7.100000 0.346626 +7.200000 0.305503 +7.300000 0.261983 +7.400000 0.216596 +7.500000 0.169867 +7.600000 0.122325 +7.700000 0.074497 +7.800000 0.026910 +7.900000 -0.019908 +8.000000 -0.065431 +8.100000 -0.109130 +8.200000 -0.150478 +8.300000 -0.188949 +8.400000 -0.224041 +8.500000 -0.255567 +8.600000 -0.283542 +8.700000 -0.307985 +8.800000 -0.328913 +8.900000 -0.346344 +9.000000 -0.360298 +9.100000 -0.370791 +9.200000 -0.377843 +9.300000 -0.381471 +9.400000 -0.381694 +9.500000 -0.378529 +9.600000 -0.371996 +9.700000 -0.362111 +9.800000 -0.348894 +9.900000 -0.332363 +10.000000 -0.312535 +10.100000 -0.289491 +10.200000 -0.263558 +10.300000 -0.235124 +10.400000 -0.204580 +10.500000 -0.172313 +10.600000 -0.138713 +10.700000 -0.104170 +10.800000 -0.069070 +10.900000 -0.033805 +11.000000 0.001238 +11.100000 0.035668 +11.200000 0.069098 +11.300000 0.101139 +11.400000 0.131400 +11.500000 0.159494 +11.600000 0.185031 +11.700000 0.207625 +11.800000 0.227067 +11.900000 0.243418 +12.000000 0.256764 +12.100000 0.267192 +12.200000 0.274787 +12.300000 0.279636 +12.400000 0.281823 +12.500000 0.281436 +12.600000 0.278560 +12.700000 0.273281 +12.800000 0.265685 +12.900000 0.255858 +13.000000 0.243886 +13.100000 0.229854 +13.200000 0.213850 +13.300000 0.195957 +13.400000 0.176273 +13.500000 0.155000 +13.600000 0.132411 +13.700000 0.108780 +13.800000 0.084383 +13.900000 0.059492 +14.000000 0.034382 +14.100000 0.009328 +14.200000 -0.015397 +14.300000 -0.039517 +14.400000 -0.062760 +14.500000 -0.084850 +14.600000 -0.105514 +14.700000 -0.124477 +14.800000 -0.141465 +14.900000 -0.156204 +15.000000 -0.168419 diff -Nru gsl-doc-1.16/doc/examples/cblas.out gsl-doc-2.3/doc/examples/cblas.out --- gsl-doc-1.16/doc/examples/cblas.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/cblas.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -[ 367.76, 368.12 - 674.06, 674.72 ] diff -Nru gsl-doc-1.16/doc/examples/cblas.txt gsl-doc-2.3/doc/examples/cblas.txt --- gsl-doc-1.16/doc/examples/cblas.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/cblas.txt 2015-11-09 05:23:40.000000000 +0000 @@ -0,0 +1,2 @@ +[ 367.76, 368.12 + 674.06, 674.72 ] diff -Nru gsl-doc-1.16/doc/examples/cdf.out gsl-doc-2.3/doc/examples/cdf.out --- gsl-doc-1.16/doc/examples/cdf.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/cdf.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -prob(x < 2.000000) = 0.977250 -prob(x > 2.000000) = 0.022750 -Pinv(0.977250) = 2.000000 -Qinv(0.022750) = 2.000000 diff -Nru gsl-doc-1.16/doc/examples/cdf.txt gsl-doc-2.3/doc/examples/cdf.txt --- gsl-doc-1.16/doc/examples/cdf.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/cdf.txt 2015-11-09 05:23:40.000000000 +0000 @@ -0,0 +1,4 @@ +prob(x < 2.000000) = 0.977250 +prob(x > 2.000000) = 0.022750 +Pinv(0.977250) = 2.000000 +Qinv(0.022750) = 2.000000 diff -Nru gsl-doc-1.16/doc/examples/cheb.c gsl-doc-2.3/doc/examples/cheb.c --- gsl-doc-1.16/doc/examples/cheb.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/cheb.c 2015-11-09 19:08:25.000000000 +0000 @@ -5,6 +5,8 @@ double f (double x, void *p) { + (void)(p); /* avoid unused parameter warning */ + if (x < 0.5) return 0.25; else diff -Nru gsl-doc-1.16/doc/examples/cheb.txt gsl-doc-2.3/doc/examples/cheb.txt --- gsl-doc-1.16/doc/examples/cheb.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/cheb.txt 2015-11-10 17:57:34.000000000 +0000 @@ -0,0 +1,10000 @@ +0 0.25 0.228925 0.256331 +0.0001 0.25 0.229373 0.25432 +0.0002 0.25 0.229818 0.252531 +0.0003 0.25 0.23026 0.250949 +0.0004 0.25 0.230698 0.249561 +0.0005 0.25 0.231134 0.248353 +0.0006 0.25 0.231567 0.247312 +0.0007 0.25 0.231997 0.246425 +0.0008 0.25 0.232423 0.245683 +0.0009 0.25 0.232847 0.245073 +0.001 0.25 0.233268 0.244585 +0.0011 0.25 0.233686 0.24421 +0.0012 0.25 0.234101 0.243938 +0.0013 0.25 0.234513 0.24376 +0.0014 0.25 0.234922 0.243667 +0.0015 0.25 0.235328 0.243653 +0.0016 0.25 0.235731 0.243709 +0.0017 0.25 0.236132 0.243829 +0.0018 0.25 0.236529 0.244006 +0.0019 0.25 0.236924 0.244233 +0.002 0.25 0.237316 0.244505 +0.0021 0.25 0.237705 0.244815 +0.0022 0.25 0.238091 0.24516 +0.0023 0.25 0.238474 0.245534 +0.0024 0.25 0.238855 0.245932 +0.0025 0.25 0.239232 0.246351 +0.0026 0.25 0.239607 0.246786 +0.0027 0.25 0.23998 0.247233 +0.0028 0.25 0.240349 0.247689 +0.0029 0.25 0.240716 0.248152 +0.003 0.25 0.24108 0.248617 +0.0031 0.25 0.241441 0.249083 +0.0032 0.25 0.2418 0.249546 +0.0033 0.25 0.242155 0.250005 +0.0034 0.25 0.242509 0.250457 +0.0035 0.25 0.242859 0.2509 +0.0036 0.25 0.243207 0.251333 +0.0037 0.25 0.243552 0.251754 +0.0038 0.25 0.243894 0.252162 +0.0039 0.25 0.244234 0.252555 +0.004 0.25 0.244571 0.252932 +0.0041 0.25 0.244906 0.253293 +0.0042 0.25 0.245238 0.253635 +0.0043 0.25 0.245567 0.25396 +0.0044 0.25 0.245894 0.254265 +0.0045 0.25 0.246218 0.254551 +0.0046 0.25 0.24654 0.254816 +0.0047 0.25 0.246859 0.255062 +0.0048 0.25 0.247176 0.255287 +0.0049 0.25 0.24749 0.255491 +0.005 0.25 0.247801 0.255674 +0.0051 0.25 0.24811 0.255837 +0.0052 0.25 0.248417 0.255978 +0.0053 0.25 0.248721 0.2561 +0.0054 0.25 0.249022 0.2562 +0.0055 0.25 0.249321 0.256281 +0.0056 0.25 0.249618 0.256342 +0.0057 0.25 0.249912 0.256383 +0.0058 0.25 0.250204 0.256405 +0.0059 0.25 0.250493 0.256408 +0.006 0.25 0.25078 0.256393 +0.0061 0.25 0.251064 0.25636 +0.0062 0.25 0.251346 0.25631 +0.0063 0.25 0.251626 0.256243 +0.0064 0.25 0.251903 0.256159 +0.0065 0.25 0.252178 0.256061 +0.0066 0.25 0.252451 0.255947 +0.0067 0.25 0.252721 0.255819 +0.0068 0.25 0.252989 0.255677 +0.0069 0.25 0.253254 0.255522 +0.007 0.25 0.253517 0.255354 +0.0071 0.25 0.253778 0.255175 +0.0072 0.25 0.254037 0.254985 +0.0073 0.25 0.254293 0.254784 +0.0074 0.25 0.254547 0.254573 +0.0075 0.25 0.254799 0.254354 +0.0076 0.25 0.255048 0.254126 +0.0077 0.25 0.255296 0.25389 +0.0078 0.25 0.255541 0.253647 +0.0079 0.25 0.255783 0.253397 +0.008 0.25 0.256024 0.253142 +0.0081 0.25 0.256262 0.252882 +0.0082 0.25 0.256498 0.252617 +0.0083 0.25 0.256732 0.252348 +0.0084 0.25 0.256964 0.252076 +0.0085 0.25 0.257194 0.251801 +0.0086 0.25 0.257421 0.251524 +0.0087 0.25 0.257646 0.251245 +0.0088 0.25 0.257869 0.250966 +0.0089 0.25 0.25809 0.250686 +0.009 0.25 0.258309 0.250407 +0.0091 0.25 0.258526 0.250128 +0.0092 0.25 0.25874 0.24985 +0.0093 0.25 0.258953 0.249573 +0.0094 0.25 0.259163 0.249299 +0.0095 0.25 0.259371 0.249028 +0.0096 0.25 0.259578 0.248759 +0.0097 0.25 0.259782 0.248494 +0.0098 0.25 0.259984 0.248233 +0.0099 0.25 0.260184 0.247976 +0.01 0.25 0.260382 0.247724 +0.0101 0.25 0.260578 0.247477 +0.0102 0.25 0.260772 0.247235 +0.0103 0.25 0.260964 0.246999 +0.0104 0.25 0.261154 0.246768 +0.0105 0.25 0.261342 0.246544 +0.0106 0.25 0.261528 0.246327 +0.0107 0.25 0.261712 0.246116 +0.0108 0.25 0.261894 0.245912 +0.0109 0.25 0.262074 0.245716 +0.011 0.25 0.262253 0.245527 +0.0111 0.25 0.262429 0.245346 +0.0112 0.25 0.262603 0.245172 +0.0113 0.25 0.262775 0.245007 +0.0114 0.25 0.262946 0.244849 +0.0115 0.25 0.263114 0.2447 +0.0116 0.25 0.263281 0.24456 +0.0117 0.25 0.263446 0.244427 +0.0118 0.25 0.263609 0.244304 +0.0119 0.25 0.26377 0.244189 +0.012 0.25 0.263929 0.244083 +0.0121 0.25 0.264086 0.243985 +0.0122 0.25 0.264242 0.243896 +0.0123 0.25 0.264396 0.243817 +0.0124 0.25 0.264547 0.243746 +0.0125 0.25 0.264697 0.243683 +0.0126 0.25 0.264846 0.24363 +0.0127 0.25 0.264992 0.243585 +0.0128 0.25 0.265137 0.243549 +0.0129 0.25 0.26528 0.243522 +0.013 0.25 0.265421 0.243504 +0.0131 0.25 0.26556 0.243493 +0.0132 0.25 0.265697 0.243492 +0.0133 0.25 0.265833 0.243499 +0.0134 0.25 0.265967 0.243514 +0.0135 0.25 0.2661 0.243537 +0.0136 0.25 0.26623 0.243568 +0.0137 0.25 0.266359 0.243608 +0.0138 0.25 0.266486 0.243655 +0.0139 0.25 0.266612 0.243709 +0.014 0.25 0.266735 0.243772 +0.0141 0.25 0.266857 0.243841 +0.0142 0.25 0.266978 0.243918 +0.0143 0.25 0.267097 0.244002 +0.0144 0.25 0.267214 0.244093 +0.0145 0.25 0.267329 0.244191 +0.0146 0.25 0.267443 0.244295 +0.0147 0.25 0.267555 0.244405 +0.0148 0.25 0.267666 0.244522 +0.0149 0.25 0.267774 0.244644 +0.015 0.25 0.267882 0.244772 +0.0151 0.25 0.267987 0.244906 +0.0152 0.25 0.268092 0.245045 +0.0153 0.25 0.268194 0.24519 +0.0154 0.25 0.268295 0.245339 +0.0155 0.25 0.268394 0.245493 +0.0156 0.25 0.268492 0.245652 +0.0157 0.25 0.268588 0.245815 +0.0158 0.25 0.268683 0.245982 +0.0159 0.25 0.268776 0.246153 +0.016 0.25 0.268868 0.246327 +0.0161 0.25 0.268958 0.246505 +0.0162 0.25 0.269046 0.246687 +0.0163 0.25 0.269133 0.246871 +0.0164 0.25 0.269219 0.247058 +0.0165 0.25 0.269303 0.247248 +0.0166 0.25 0.269386 0.24744 +0.0167 0.25 0.269467 0.247634 +0.0168 0.25 0.269546 0.24783 +0.0169 0.25 0.269624 0.248028 +0.017 0.25 0.269701 0.248227 +0.0171 0.25 0.269776 0.248428 +0.0172 0.25 0.26985 0.248629 +0.0173 0.25 0.269922 0.248832 +0.0174 0.25 0.269993 0.249035 +0.0175 0.25 0.270063 0.249239 +0.0176 0.25 0.270131 0.249443 +0.0177 0.25 0.270198 0.249647 +0.0178 0.25 0.270263 0.249851 +0.0179 0.25 0.270327 0.250054 +0.018 0.25 0.270389 0.250257 +0.0181 0.25 0.27045 0.25046 +0.0182 0.25 0.27051 0.250661 +0.0183 0.25 0.270568 0.250862 +0.0184 0.25 0.270625 0.251061 +0.0185 0.25 0.270681 0.251258 +0.0186 0.25 0.270735 0.251454 +0.0187 0.25 0.270788 0.251649 +0.0188 0.25 0.27084 0.251841 +0.0189 0.25 0.27089 0.252031 +0.019 0.25 0.27094 0.252219 +0.0191 0.25 0.270987 0.252405 +0.0192 0.25 0.271034 0.252588 +0.0193 0.25 0.271079 0.252768 +0.0194 0.25 0.271123 0.252946 +0.0195 0.25 0.271165 0.25312 +0.0196 0.25 0.271207 0.253292 +0.0197 0.25 0.271247 0.25346 +0.0198 0.25 0.271285 0.253625 +0.0199 0.25 0.271323 0.253786 +0.02 0.25 0.271359 0.253944 +0.0201 0.25 0.271394 0.254098 +0.0202 0.25 0.271428 0.254249 +0.0203 0.25 0.271461 0.254395 +0.0204 0.25 0.271492 0.254538 +0.0205 0.25 0.271522 0.254676 +0.0206 0.25 0.271551 0.25481 +0.0207 0.25 0.271579 0.25494 +0.0208 0.25 0.271605 0.255066 +0.0209 0.25 0.271631 0.255187 +0.021 0.25 0.271655 0.255303 +0.0211 0.25 0.271678 0.255416 +0.0212 0.25 0.2717 0.255523 +0.0213 0.25 0.271721 0.255626 +0.0214 0.25 0.27174 0.255724 +0.0215 0.25 0.271759 0.255817 +0.0216 0.25 0.271776 0.255906 +0.0217 0.25 0.271792 0.25599 +0.0218 0.25 0.271807 0.256068 +0.0219 0.25 0.271821 0.256142 +0.022 0.25 0.271834 0.256211 +0.0221 0.25 0.271846 0.256275 +0.0222 0.25 0.271856 0.256334 +0.0223 0.25 0.271866 0.256388 +0.0224 0.25 0.271874 0.256437 +0.0225 0.25 0.271881 0.256481 +0.0226 0.25 0.271888 0.25652 +0.0227 0.25 0.271893 0.256554 +0.0228 0.25 0.271897 0.256583 +0.0229 0.25 0.2719 0.256607 +0.023 0.25 0.271902 0.256625 +0.0231 0.25 0.271903 0.256639 +0.0232 0.25 0.271903 0.256648 +0.0233 0.25 0.271902 0.256652 +0.0234 0.25 0.2719 0.256651 +0.0235 0.25 0.271897 0.256646 +0.0236 0.25 0.271893 0.256635 +0.0237 0.25 0.271888 0.256619 +0.0238 0.25 0.271881 0.256599 +0.0239 0.25 0.271874 0.256574 +0.024 0.25 0.271866 0.256545 +0.0241 0.25 0.271857 0.25651 +0.0242 0.25 0.271847 0.256471 +0.0243 0.25 0.271836 0.256428 +0.0244 0.25 0.271824 0.25638 +0.0245 0.25 0.271811 0.256328 +0.0246 0.25 0.271797 0.256271 +0.0247 0.25 0.271782 0.25621 +0.0248 0.25 0.271766 0.256145 +0.0249 0.25 0.27175 0.256075 +0.025 0.25 0.271732 0.256002 +0.0251 0.25 0.271713 0.255924 +0.0252 0.25 0.271694 0.255843 +0.0253 0.25 0.271673 0.255757 +0.0254 0.25 0.271652 0.255668 +0.0255 0.25 0.27163 0.255575 +0.0256 0.25 0.271607 0.255479 +0.0257 0.25 0.271583 0.255379 +0.0258 0.25 0.271558 0.255275 +0.0259 0.25 0.271532 0.255169 +0.026 0.25 0.271506 0.255058 +0.0261 0.25 0.271478 0.254945 +0.0262 0.25 0.27145 0.254829 +0.0263 0.25 0.27142 0.254709 +0.0264 0.25 0.27139 0.254587 +0.0265 0.25 0.27136 0.254462 +0.0266 0.25 0.271328 0.254334 +0.0267 0.25 0.271295 0.254203 +0.0268 0.25 0.271262 0.25407 +0.0269 0.25 0.271228 0.253935 +0.027 0.25 0.271193 0.253797 +0.0271 0.25 0.271157 0.253657 +0.0272 0.25 0.27112 0.253514 +0.0273 0.25 0.271083 0.25337 +0.0274 0.25 0.271044 0.253224 +0.0275 0.25 0.271005 0.253076 +0.0276 0.25 0.270966 0.252926 +0.0277 0.25 0.270925 0.252775 +0.0278 0.25 0.270884 0.252622 +0.0279 0.25 0.270842 0.252467 +0.028 0.25 0.270799 0.252312 +0.0281 0.25 0.270755 0.252155 +0.0282 0.25 0.270711 0.251997 +0.0283 0.25 0.270666 0.251837 +0.0284 0.25 0.27062 0.251677 +0.0285 0.25 0.270573 0.251517 +0.0286 0.25 0.270526 0.251355 +0.0287 0.25 0.270478 0.251193 +0.0288 0.25 0.270429 0.25103 +0.0289 0.25 0.270379 0.250867 +0.029 0.25 0.270329 0.250704 +0.0291 0.25 0.270278 0.25054 +0.0292 0.25 0.270227 0.250376 +0.0293 0.25 0.270174 0.250213 +0.0294 0.25 0.270122 0.250049 +0.0295 0.25 0.270068 0.249886 +0.0296 0.25 0.270013 0.249722 +0.0297 0.25 0.269958 0.249559 +0.0298 0.25 0.269903 0.249397 +0.0299 0.25 0.269846 0.249235 +0.03 0.25 0.269789 0.249074 +0.0301 0.25 0.269732 0.248913 +0.0302 0.25 0.269673 0.248753 +0.0303 0.25 0.269615 0.248595 +0.0304 0.25 0.269555 0.248437 +0.0305 0.25 0.269495 0.24828 +0.0306 0.25 0.269434 0.248124 +0.0307 0.25 0.269372 0.24797 +0.0308 0.25 0.26931 0.247817 +0.0309 0.25 0.269248 0.247665 +0.031 0.25 0.269184 0.247515 +0.0311 0.25 0.26912 0.247366 +0.0312 0.25 0.269056 0.247219 +0.0313 0.25 0.268991 0.247074 +0.0314 0.25 0.268925 0.246931 +0.0315 0.25 0.268859 0.246789 +0.0316 0.25 0.268792 0.246649 +0.0317 0.25 0.268724 0.246512 +0.0318 0.25 0.268656 0.246376 +0.0319 0.25 0.268588 0.246242 +0.032 0.25 0.268519 0.246111 +0.0321 0.25 0.268449 0.245982 +0.0322 0.25 0.268379 0.245855 +0.0323 0.25 0.268308 0.245731 +0.0324 0.25 0.268236 0.245609 +0.0325 0.25 0.268165 0.245489 +0.0326 0.25 0.268092 0.245372 +0.0327 0.25 0.268019 0.245258 +0.0328 0.25 0.267946 0.245146 +0.0329 0.25 0.267872 0.245037 +0.033 0.25 0.267797 0.24493 +0.0331 0.25 0.267722 0.244827 +0.0332 0.25 0.267647 0.244726 +0.0333 0.25 0.267571 0.244628 +0.0334 0.25 0.267494 0.244533 +0.0335 0.25 0.267417 0.244441 +0.0336 0.25 0.267339 0.244352 +0.0337 0.25 0.267261 0.244266 +0.0338 0.25 0.267183 0.244183 +0.0339 0.25 0.267104 0.244103 +0.034 0.25 0.267024 0.244026 +0.0341 0.25 0.266945 0.243952 +0.0342 0.25 0.266864 0.243881 +0.0343 0.25 0.266783 0.243814 +0.0344 0.25 0.266702 0.24375 +0.0345 0.25 0.26662 0.243689 +0.0346 0.25 0.266538 0.243631 +0.0347 0.25 0.266455 0.243576 +0.0348 0.25 0.266372 0.243525 +0.0349 0.25 0.266289 0.243477 +0.035 0.25 0.266205 0.243433 +0.0351 0.25 0.266121 0.243391 +0.0352 0.25 0.266036 0.243353 +0.0353 0.25 0.265951 0.243318 +0.0354 0.25 0.265865 0.243287 +0.0355 0.25 0.265779 0.243259 +0.0356 0.25 0.265692 0.243234 +0.0357 0.25 0.265606 0.243213 +0.0358 0.25 0.265518 0.243195 +0.0359 0.25 0.265431 0.24318 +0.036 0.25 0.265343 0.243169 +0.0361 0.25 0.265254 0.243161 +0.0362 0.25 0.265165 0.243156 +0.0363 0.25 0.265076 0.243154 +0.0364 0.25 0.264987 0.243156 +0.0365 0.25 0.264897 0.243161 +0.0366 0.25 0.264807 0.243169 +0.0367 0.25 0.264716 0.243181 +0.0368 0.25 0.264625 0.243196 +0.0369 0.25 0.264534 0.243214 +0.037 0.25 0.264442 0.243235 +0.0371 0.25 0.26435 0.243259 +0.0372 0.25 0.264257 0.243287 +0.0373 0.25 0.264165 0.243318 +0.0374 0.25 0.264072 0.243351 +0.0375 0.25 0.263978 0.243388 +0.0376 0.25 0.263885 0.243428 +0.0377 0.25 0.263791 0.243471 +0.0378 0.25 0.263696 0.243517 +0.0379 0.25 0.263601 0.243566 +0.038 0.25 0.263506 0.243617 +0.0381 0.25 0.263411 0.243672 +0.0382 0.25 0.263316 0.24373 +0.0383 0.25 0.26322 0.24379 +0.0384 0.25 0.263123 0.243853 +0.0385 0.25 0.263027 0.243919 +0.0386 0.25 0.26293 0.243987 +0.0387 0.25 0.262833 0.244059 +0.0388 0.25 0.262736 0.244132 +0.0389 0.25 0.262638 0.244209 +0.039 0.25 0.26254 0.244288 +0.0391 0.25 0.262442 0.244369 +0.0392 0.25 0.262344 0.244453 +0.0393 0.25 0.262245 0.244539 +0.0394 0.25 0.262146 0.244628 +0.0395 0.25 0.262047 0.244719 +0.0396 0.25 0.261947 0.244812 +0.0397 0.25 0.261847 0.244908 +0.0398 0.25 0.261747 0.245006 +0.0399 0.25 0.261647 0.245105 +0.04 0.25 0.261547 0.245207 +0.0401 0.25 0.261446 0.245311 +0.0402 0.25 0.261345 0.245417 +0.0403 0.25 0.261244 0.245525 +0.0404 0.25 0.261143 0.245634 +0.0405 0.25 0.261041 0.245746 +0.0406 0.25 0.260939 0.245859 +0.0407 0.25 0.260837 0.245974 +0.0408 0.25 0.260735 0.24609 +0.0409 0.25 0.260632 0.246208 +0.041 0.25 0.26053 0.246328 +0.0411 0.25 0.260427 0.246449 +0.0412 0.25 0.260324 0.246572 +0.0413 0.25 0.26022 0.246696 +0.0414 0.25 0.260117 0.246821 +0.0415 0.25 0.260013 0.246948 +0.0416 0.25 0.259909 0.247075 +0.0417 0.25 0.259805 0.247204 +0.0418 0.25 0.259701 0.247334 +0.0419 0.25 0.259597 0.247465 +0.042 0.25 0.259492 0.247597 +0.0421 0.25 0.259387 0.24773 +0.0422 0.25 0.259282 0.247864 +0.0423 0.25 0.259177 0.247998 +0.0424 0.25 0.259072 0.248133 +0.0425 0.25 0.258967 0.248269 +0.0426 0.25 0.258861 0.248406 +0.0427 0.25 0.258755 0.248543 +0.0428 0.25 0.25865 0.248681 +0.0429 0.25 0.258544 0.248819 +0.043 0.25 0.258437 0.248957 +0.0431 0.25 0.258331 0.249096 +0.0432 0.25 0.258225 0.249235 +0.0433 0.25 0.258118 0.249374 +0.0434 0.25 0.258012 0.249514 +0.0435 0.25 0.257905 0.249653 +0.0436 0.25 0.257798 0.249793 +0.0437 0.25 0.257691 0.249933 +0.0438 0.25 0.257584 0.250072 +0.0439 0.25 0.257476 0.250212 +0.044 0.25 0.257369 0.250351 +0.0441 0.25 0.257261 0.25049 +0.0442 0.25 0.257154 0.250629 +0.0443 0.25 0.257046 0.250767 +0.0444 0.25 0.256938 0.250905 +0.0445 0.25 0.25683 0.251043 +0.0446 0.25 0.256722 0.25118 +0.0447 0.25 0.256614 0.251316 +0.0448 0.25 0.256506 0.251452 +0.0449 0.25 0.256398 0.251588 +0.045 0.25 0.256289 0.251722 +0.0451 0.25 0.256181 0.251856 +0.0452 0.25 0.256072 0.251989 +0.0453 0.25 0.255964 0.252121 +0.0454 0.25 0.255855 0.252253 +0.0455 0.25 0.255746 0.252383 +0.0456 0.25 0.255638 0.252512 +0.0457 0.25 0.255529 0.252641 +0.0458 0.25 0.25542 0.252768 +0.0459 0.25 0.255311 0.252894 +0.046 0.25 0.255202 0.253019 +0.0461 0.25 0.255093 0.253142 +0.0462 0.25 0.254983 0.253265 +0.0463 0.25 0.254874 0.253386 +0.0464 0.25 0.254765 0.253505 +0.0465 0.25 0.254656 0.253624 +0.0466 0.25 0.254546 0.253741 +0.0467 0.25 0.254437 0.253856 +0.0468 0.25 0.254327 0.25397 +0.0469 0.25 0.254218 0.254082 +0.047 0.25 0.254109 0.254193 +0.0471 0.25 0.253999 0.254302 +0.0472 0.25 0.25389 0.254409 +0.0473 0.25 0.25378 0.254515 +0.0474 0.25 0.25367 0.254619 +0.0475 0.25 0.253561 0.254721 +0.0476 0.25 0.253451 0.254822 +0.0477 0.25 0.253342 0.25492 +0.0478 0.25 0.253232 0.255017 +0.0479 0.25 0.253122 0.255112 +0.048 0.25 0.253013 0.255204 +0.0481 0.25 0.252903 0.255295 +0.0482 0.25 0.252793 0.255384 +0.0483 0.25 0.252684 0.255471 +0.0484 0.25 0.252574 0.255556 +0.0485 0.25 0.252465 0.255639 +0.0486 0.25 0.252355 0.255719 +0.0487 0.25 0.252245 0.255798 +0.0488 0.25 0.252136 0.255874 +0.0489 0.25 0.252026 0.255948 +0.049 0.25 0.251917 0.25602 +0.0491 0.25 0.251807 0.25609 +0.0492 0.25 0.251698 0.256158 +0.0493 0.25 0.251588 0.256223 +0.0494 0.25 0.251479 0.256286 +0.0495 0.25 0.251369 0.256347 +0.0496 0.25 0.25126 0.256406 +0.0497 0.25 0.251151 0.256462 +0.0498 0.25 0.251041 0.256516 +0.0499 0.25 0.250932 0.256567 +0.05 0.25 0.250823 0.256617 +0.0501 0.25 0.250713 0.256663 +0.0502 0.25 0.250604 0.256708 +0.0503 0.25 0.250495 0.25675 +0.0504 0.25 0.250386 0.25679 +0.0505 0.25 0.250277 0.256827 +0.0506 0.25 0.250168 0.256862 +0.0507 0.25 0.250059 0.256894 +0.0508 0.25 0.249951 0.256924 +0.0509 0.25 0.249842 0.256952 +0.051 0.25 0.249733 0.256977 +0.0511 0.25 0.249625 0.257 +0.0512 0.25 0.249516 0.25702 +0.0513 0.25 0.249407 0.257038 +0.0514 0.25 0.249299 0.257053 +0.0515 0.25 0.249191 0.257066 +0.0516 0.25 0.249082 0.257077 +0.0517 0.25 0.248974 0.257085 +0.0518 0.25 0.248866 0.257091 +0.0519 0.25 0.248758 0.257094 +0.052 0.25 0.24865 0.257095 +0.0521 0.25 0.248542 0.257093 +0.0522 0.25 0.248435 0.257089 +0.0523 0.25 0.248327 0.257083 +0.0524 0.25 0.248219 0.257074 +0.0525 0.25 0.248112 0.257063 +0.0526 0.25 0.248005 0.25705 +0.0527 0.25 0.247897 0.257034 +0.0528 0.25 0.24779 0.257015 +0.0529 0.25 0.247683 0.256995 +0.053 0.25 0.247576 0.256972 +0.0531 0.25 0.247469 0.256947 +0.0532 0.25 0.247362 0.256919 +0.0533 0.25 0.247256 0.256889 +0.0534 0.25 0.247149 0.256857 +0.0535 0.25 0.247043 0.256822 +0.0536 0.25 0.246937 0.256786 +0.0537 0.25 0.24683 0.256747 +0.0538 0.25 0.246724 0.256706 +0.0539 0.25 0.246618 0.256662 +0.054 0.25 0.246513 0.256617 +0.0541 0.25 0.246407 0.256569 +0.0542 0.25 0.246301 0.256519 +0.0543 0.25 0.246196 0.256468 +0.0544 0.25 0.246091 0.256414 +0.0545 0.25 0.245985 0.256357 +0.0546 0.25 0.24588 0.256299 +0.0547 0.25 0.245775 0.256239 +0.0548 0.25 0.245671 0.256177 +0.0549 0.25 0.245566 0.256113 +0.055 0.25 0.245462 0.256047 +0.0551 0.25 0.245357 0.255979 +0.0552 0.25 0.245253 0.255909 +0.0553 0.25 0.245149 0.255837 +0.0554 0.25 0.245045 0.255763 +0.0555 0.25 0.244941 0.255688 +0.0556 0.25 0.244838 0.255611 +0.0557 0.25 0.244734 0.255532 +0.0558 0.25 0.244631 0.255451 +0.0559 0.25 0.244528 0.255368 +0.056 0.25 0.244425 0.255284 +0.0561 0.25 0.244322 0.255198 +0.0562 0.25 0.244219 0.255111 +0.0563 0.25 0.244117 0.255022 +0.0564 0.25 0.244015 0.254931 +0.0565 0.25 0.243912 0.254839 +0.0566 0.25 0.24381 0.254746 +0.0567 0.25 0.243709 0.254651 +0.0568 0.25 0.243607 0.254554 +0.0569 0.25 0.243506 0.254457 +0.057 0.25 0.243404 0.254357 +0.0571 0.25 0.243303 0.254257 +0.0572 0.25 0.243202 0.254155 +0.0573 0.25 0.243101 0.254052 +0.0574 0.25 0.243001 0.253948 +0.0575 0.25 0.2429 0.253842 +0.0576 0.25 0.2428 0.253735 +0.0577 0.25 0.2427 0.253628 +0.0578 0.25 0.2426 0.253519 +0.0579 0.25 0.242501 0.253409 +0.058 0.25 0.242401 0.253298 +0.0581 0.25 0.242302 0.253186 +0.0582 0.25 0.242203 0.253073 +0.0583 0.25 0.242104 0.252959 +0.0584 0.25 0.242005 0.252845 +0.0585 0.25 0.241907 0.252729 +0.0586 0.25 0.241809 0.252613 +0.0587 0.25 0.24171 0.252496 +0.0588 0.25 0.241613 0.252379 +0.0589 0.25 0.241515 0.25226 +0.059 0.25 0.241417 0.252141 +0.0591 0.25 0.24132 0.252021 +0.0592 0.25 0.241223 0.251901 +0.0593 0.25 0.241126 0.25178 +0.0594 0.25 0.24103 0.251659 +0.0595 0.25 0.240933 0.251537 +0.0596 0.25 0.240837 0.251415 +0.0597 0.25 0.240741 0.251293 +0.0598 0.25 0.240645 0.25117 +0.0599 0.25 0.240549 0.251047 +0.06 0.25 0.240454 0.250923 +0.0601 0.25 0.240359 0.2508 +0.0602 0.25 0.240264 0.250676 +0.0603 0.25 0.240169 0.250552 +0.0604 0.25 0.240075 0.250427 +0.0605 0.25 0.23998 0.250303 +0.0606 0.25 0.239886 0.250179 +0.0607 0.25 0.239793 0.250055 +0.0608 0.25 0.239699 0.24993 +0.0609 0.25 0.239606 0.249806 +0.061 0.25 0.239513 0.249682 +0.0611 0.25 0.23942 0.249558 +0.0612 0.25 0.239327 0.249434 +0.0613 0.25 0.239235 0.24931 +0.0614 0.25 0.239142 0.249187 +0.0615 0.25 0.23905 0.249064 +0.0616 0.25 0.238959 0.248941 +0.0617 0.25 0.238867 0.248818 +0.0618 0.25 0.238776 0.248696 +0.0619 0.25 0.238685 0.248574 +0.062 0.25 0.238594 0.248453 +0.0621 0.25 0.238504 0.248332 +0.0622 0.25 0.238413 0.248212 +0.0623 0.25 0.238323 0.248092 +0.0624 0.25 0.238234 0.247973 +0.0625 0.25 0.238144 0.247855 +0.0626 0.25 0.238055 0.247737 +0.0627 0.25 0.237966 0.247619 +0.0628 0.25 0.237877 0.247503 +0.0629 0.25 0.237789 0.247387 +0.063 0.25 0.2377 0.247272 +0.0631 0.25 0.237612 0.247158 +0.0632 0.25 0.237524 0.247045 +0.0633 0.25 0.237437 0.246932 +0.0634 0.25 0.23735 0.246821 +0.0635 0.25 0.237263 0.24671 +0.0636 0.25 0.237176 0.2466 +0.0637 0.25 0.237089 0.246492 +0.0638 0.25 0.237003 0.246384 +0.0639 0.25 0.236917 0.246277 +0.064 0.25 0.236832 0.246172 +0.0641 0.25 0.236746 0.246067 +0.0642 0.25 0.236661 0.245964 +0.0643 0.25 0.236576 0.245862 +0.0644 0.25 0.236492 0.245761 +0.0645 0.25 0.236407 0.245661 +0.0646 0.25 0.236323 0.245562 +0.0647 0.25 0.236239 0.245465 +0.0648 0.25 0.236156 0.245369 +0.0649 0.25 0.236072 0.245274 +0.065 0.25 0.235989 0.245181 +0.0651 0.25 0.235907 0.245089 +0.0652 0.25 0.235824 0.244998 +0.0653 0.25 0.235742 0.244909 +0.0654 0.25 0.23566 0.244821 +0.0655 0.25 0.235579 0.244735 +0.0656 0.25 0.235497 0.24465 +0.0657 0.25 0.235416 0.244566 +0.0658 0.25 0.235335 0.244484 +0.0659 0.25 0.235255 0.244404 +0.066 0.25 0.235175 0.244325 +0.0661 0.25 0.235095 0.244248 +0.0662 0.25 0.235015 0.244172 +0.0663 0.25 0.234936 0.244098 +0.0664 0.25 0.234857 0.244026 +0.0665 0.25 0.234778 0.243955 +0.0666 0.25 0.234699 0.243885 +0.0667 0.25 0.234621 0.243818 +0.0668 0.25 0.234543 0.243752 +0.0669 0.25 0.234465 0.243688 +0.067 0.25 0.234388 0.243625 +0.0671 0.25 0.234311 0.243565 +0.0672 0.25 0.234234 0.243506 +0.0673 0.25 0.234158 0.243448 +0.0674 0.25 0.234081 0.243393 +0.0675 0.25 0.234006 0.243339 +0.0676 0.25 0.23393 0.243287 +0.0677 0.25 0.233855 0.243237 +0.0678 0.25 0.23378 0.243189 +0.0679 0.25 0.233705 0.243142 +0.068 0.25 0.23363 0.243098 +0.0681 0.25 0.233556 0.243055 +0.0682 0.25 0.233482 0.243014 +0.0683 0.25 0.233409 0.242975 +0.0684 0.25 0.233336 0.242938 +0.0685 0.25 0.233263 0.242902 +0.0686 0.25 0.23319 0.242869 +0.0687 0.25 0.233118 0.242837 +0.0688 0.25 0.233046 0.242807 +0.0689 0.25 0.232974 0.24278 +0.069 0.25 0.232903 0.242754 +0.0691 0.25 0.232832 0.24273 +0.0692 0.25 0.232761 0.242707 +0.0693 0.25 0.23269 0.242687 +0.0694 0.25 0.23262 0.242669 +0.0695 0.25 0.23255 0.242652 +0.0696 0.25 0.232481 0.242638 +0.0697 0.25 0.232411 0.242625 +0.0698 0.25 0.232342 0.242615 +0.0699 0.25 0.232274 0.242606 +0.07 0.25 0.232205 0.242599 +0.0701 0.25 0.232137 0.242594 +0.0702 0.25 0.23207 0.242591 +0.0703 0.25 0.232002 0.24259 +0.0704 0.25 0.231935 0.242591 +0.0705 0.25 0.231868 0.242593 +0.0706 0.25 0.231802 0.242598 +0.0707 0.25 0.231736 0.242604 +0.0708 0.25 0.23167 0.242613 +0.0709 0.25 0.231604 0.242623 +0.071 0.25 0.231539 0.242635 +0.0711 0.25 0.231474 0.242649 +0.0712 0.25 0.23141 0.242665 +0.0713 0.25 0.231345 0.242683 +0.0714 0.25 0.231281 0.242702 +0.0715 0.25 0.231218 0.242724 +0.0716 0.25 0.231154 0.242747 +0.0717 0.25 0.231091 0.242772 +0.0718 0.25 0.231029 0.242799 +0.0719 0.25 0.230966 0.242828 +0.072 0.25 0.230904 0.242858 +0.0721 0.25 0.230843 0.24289 +0.0722 0.25 0.230781 0.242925 +0.0723 0.25 0.23072 0.24296 +0.0724 0.25 0.230659 0.242998 +0.0725 0.25 0.230599 0.243037 +0.0726 0.25 0.230539 0.243078 +0.0727 0.25 0.230479 0.243121 +0.0728 0.25 0.23042 0.243166 +0.0729 0.25 0.23036 0.243212 +0.073 0.25 0.230302 0.24326 +0.0731 0.25 0.230243 0.243309 +0.0732 0.25 0.230185 0.243361 +0.0733 0.25 0.230127 0.243414 +0.0734 0.25 0.23007 0.243468 +0.0735 0.25 0.230013 0.243524 +0.0736 0.25 0.229956 0.243582 +0.0737 0.25 0.229899 0.243641 +0.0738 0.25 0.229843 0.243702 +0.0739 0.25 0.229787 0.243764 +0.074 0.25 0.229732 0.243828 +0.0741 0.25 0.229676 0.243893 +0.0742 0.25 0.229621 0.24396 +0.0743 0.25 0.229567 0.244029 +0.0744 0.25 0.229513 0.244098 +0.0745 0.25 0.229459 0.24417 +0.0746 0.25 0.229405 0.244242 +0.0747 0.25 0.229352 0.244316 +0.0748 0.25 0.229299 0.244392 +0.0749 0.25 0.229247 0.244468 +0.075 0.25 0.229194 0.244546 +0.0751 0.25 0.229142 0.244626 +0.0752 0.25 0.229091 0.244706 +0.0753 0.25 0.22904 0.244788 +0.0754 0.25 0.228989 0.244872 +0.0755 0.25 0.228938 0.244956 +0.0756 0.25 0.228888 0.245042 +0.0757 0.25 0.228838 0.245128 +0.0758 0.25 0.228788 0.245216 +0.0759 0.25 0.228739 0.245305 +0.076 0.25 0.22869 0.245396 +0.0761 0.25 0.228642 0.245487 +0.0762 0.25 0.228593 0.245579 +0.0763 0.25 0.228546 0.245673 +0.0764 0.25 0.228498 0.245767 +0.0765 0.25 0.228451 0.245862 +0.0766 0.25 0.228404 0.245959 +0.0767 0.25 0.228357 0.246056 +0.0768 0.25 0.228311 0.246154 +0.0769 0.25 0.228265 0.246254 +0.077 0.25 0.22822 0.246354 +0.0771 0.25 0.228174 0.246455 +0.0772 0.25 0.22813 0.246556 +0.0773 0.25 0.228085 0.246659 +0.0774 0.25 0.228041 0.246762 +0.0775 0.25 0.227997 0.246866 +0.0776 0.25 0.227953 0.246971 +0.0777 0.25 0.22791 0.247077 +0.0778 0.25 0.227867 0.247183 +0.0779 0.25 0.227825 0.247289 +0.078 0.25 0.227783 0.247397 +0.0781 0.25 0.227741 0.247505 +0.0782 0.25 0.227699 0.247614 +0.0783 0.25 0.227658 0.247723 +0.0784 0.25 0.227617 0.247832 +0.0785 0.25 0.227577 0.247943 +0.0786 0.25 0.227537 0.248053 +0.0787 0.25 0.227497 0.248164 +0.0788 0.25 0.227458 0.248276 +0.0789 0.25 0.227418 0.248388 +0.079 0.25 0.22738 0.2485 +0.0791 0.25 0.227341 0.248612 +0.0792 0.25 0.227303 0.248725 +0.0793 0.25 0.227265 0.248839 +0.0794 0.25 0.227228 0.248952 +0.0795 0.25 0.227191 0.249066 +0.0796 0.25 0.227154 0.24918 +0.0797 0.25 0.227118 0.249294 +0.0798 0.25 0.227082 0.249408 +0.0799 0.25 0.227046 0.249522 +0.08 0.25 0.22701 0.249637 +0.0801 0.25 0.226975 0.249751 +0.0802 0.25 0.226941 0.249866 +0.0803 0.25 0.226906 0.24998 +0.0804 0.25 0.226872 0.250095 +0.0805 0.25 0.226839 0.250209 +0.0806 0.25 0.226805 0.250324 +0.0807 0.25 0.226772 0.250438 +0.0808 0.25 0.22674 0.250553 +0.0809 0.25 0.226707 0.250667 +0.081 0.25 0.226675 0.250781 +0.0811 0.25 0.226644 0.250895 +0.0812 0.25 0.226612 0.251008 +0.0813 0.25 0.226581 0.251122 +0.0814 0.25 0.226551 0.251235 +0.0815 0.25 0.22652 0.251347 +0.0816 0.25 0.22649 0.25146 +0.0817 0.25 0.226461 0.251572 +0.0818 0.25 0.226432 0.251684 +0.0819 0.25 0.226403 0.251796 +0.082 0.25 0.226374 0.251907 +0.0821 0.25 0.226346 0.252017 +0.0822 0.25 0.226318 0.252127 +0.0823 0.25 0.22629 0.252237 +0.0824 0.25 0.226263 0.252346 +0.0825 0.25 0.226236 0.252455 +0.0826 0.25 0.22621 0.252563 +0.0827 0.25 0.226183 0.25267 +0.0828 0.25 0.226158 0.252777 +0.0829 0.25 0.226132 0.252884 +0.083 0.25 0.226107 0.252989 +0.0831 0.25 0.226082 0.253094 +0.0832 0.25 0.226058 0.253199 +0.0833 0.25 0.226033 0.253302 +0.0834 0.25 0.22601 0.253405 +0.0835 0.25 0.225986 0.253507 +0.0836 0.25 0.225963 0.253609 +0.0837 0.25 0.22594 0.253709 +0.0838 0.25 0.225918 0.253809 +0.0839 0.25 0.225895 0.253908 +0.084 0.25 0.225874 0.254006 +0.0841 0.25 0.225852 0.254103 +0.0842 0.25 0.225831 0.254199 +0.0843 0.25 0.22581 0.254295 +0.0844 0.25 0.22579 0.254389 +0.0845 0.25 0.22577 0.254483 +0.0846 0.25 0.22575 0.254575 +0.0847 0.25 0.225731 0.254666 +0.0848 0.25 0.225711 0.254757 +0.0849 0.25 0.225693 0.254846 +0.085 0.25 0.225674 0.254935 +0.0851 0.25 0.225656 0.255022 +0.0852 0.25 0.225638 0.255108 +0.0853 0.25 0.225621 0.255193 +0.0854 0.25 0.225604 0.255277 +0.0855 0.25 0.225587 0.25536 +0.0856 0.25 0.225571 0.255442 +0.0857 0.25 0.225555 0.255523 +0.0858 0.25 0.225539 0.255602 +0.0859 0.25 0.225524 0.25568 +0.086 0.25 0.225509 0.255757 +0.0861 0.25 0.225494 0.255833 +0.0862 0.25 0.225479 0.255907 +0.0863 0.25 0.225465 0.25598 +0.0864 0.25 0.225452 0.256052 +0.0865 0.25 0.225438 0.256123 +0.0866 0.25 0.225425 0.256192 +0.0867 0.25 0.225412 0.25626 +0.0868 0.25 0.2254 0.256327 +0.0869 0.25 0.225388 0.256392 +0.087 0.25 0.225376 0.256456 +0.0871 0.25 0.225365 0.256519 +0.0872 0.25 0.225354 0.25658 +0.0873 0.25 0.225343 0.25664 +0.0874 0.25 0.225333 0.256698 +0.0875 0.25 0.225323 0.256755 +0.0876 0.25 0.225313 0.256811 +0.0877 0.25 0.225304 0.256865 +0.0878 0.25 0.225295 0.256918 +0.0879 0.25 0.225286 0.256969 +0.088 0.25 0.225277 0.257019 +0.0881 0.25 0.225269 0.257067 +0.0882 0.25 0.225262 0.257114 +0.0883 0.25 0.225254 0.25716 +0.0884 0.25 0.225247 0.257204 +0.0885 0.25 0.22524 0.257246 +0.0886 0.25 0.225234 0.257287 +0.0887 0.25 0.225228 0.257326 +0.0888 0.25 0.225222 0.257364 +0.0889 0.25 0.225217 0.2574 +0.089 0.25 0.225212 0.257435 +0.0891 0.25 0.225207 0.257468 +0.0892 0.25 0.225202 0.2575 +0.0893 0.25 0.225198 0.25753 +0.0894 0.25 0.225194 0.257559 +0.0895 0.25 0.225191 0.257586 +0.0896 0.25 0.225188 0.257611 +0.0897 0.25 0.225185 0.257635 +0.0898 0.25 0.225182 0.257658 +0.0899 0.25 0.22518 0.257678 +0.09 0.25 0.225178 0.257698 +0.0901 0.25 0.225177 0.257715 +0.0902 0.25 0.225176 0.257731 +0.0903 0.25 0.225175 0.257746 +0.0904 0.25 0.225174 0.257759 +0.0905 0.25 0.225174 0.25777 +0.0906 0.25 0.225174 0.25778 +0.0907 0.25 0.225175 0.257788 +0.0908 0.25 0.225175 0.257794 +0.0909 0.25 0.225176 0.257799 +0.091 0.25 0.225178 0.257802 +0.0911 0.25 0.225179 0.257804 +0.0912 0.25 0.225182 0.257804 +0.0913 0.25 0.225184 0.257803 +0.0914 0.25 0.225187 0.2578 +0.0915 0.25 0.22519 0.257795 +0.0916 0.25 0.225193 0.257789 +0.0917 0.25 0.225196 0.257782 +0.0918 0.25 0.2252 0.257772 +0.0919 0.25 0.225205 0.257761 +0.092 0.25 0.225209 0.257749 +0.0921 0.25 0.225214 0.257735 +0.0922 0.25 0.225219 0.25772 +0.0923 0.25 0.225225 0.257702 +0.0924 0.25 0.225231 0.257684 +0.0925 0.25 0.225237 0.257664 +0.0926 0.25 0.225243 0.257642 +0.0927 0.25 0.22525 0.257619 +0.0928 0.25 0.225257 0.257594 +0.0929 0.25 0.225265 0.257568 +0.093 0.25 0.225272 0.25754 +0.0931 0.25 0.22528 0.257511 +0.0932 0.25 0.225289 0.25748 +0.0933 0.25 0.225297 0.257448 +0.0934 0.25 0.225306 0.257414 +0.0935 0.25 0.225316 0.257379 +0.0936 0.25 0.225325 0.257342 +0.0937 0.25 0.225335 0.257304 +0.0938 0.25 0.225345 0.257264 +0.0939 0.25 0.225356 0.257223 +0.094 0.25 0.225367 0.257181 +0.0941 0.25 0.225378 0.257137 +0.0942 0.25 0.225389 0.257092 +0.0943 0.25 0.225401 0.257045 +0.0944 0.25 0.225413 0.256997 +0.0945 0.25 0.225426 0.256948 +0.0946 0.25 0.225438 0.256897 +0.0947 0.25 0.225451 0.256845 +0.0948 0.25 0.225465 0.256791 +0.0949 0.25 0.225478 0.256736 +0.095 0.25 0.225492 0.25668 +0.0951 0.25 0.225506 0.256623 +0.0952 0.25 0.225521 0.256564 +0.0953 0.25 0.225536 0.256504 +0.0954 0.25 0.225551 0.256443 +0.0955 0.25 0.225566 0.25638 +0.0956 0.25 0.225582 0.256316 +0.0957 0.25 0.225598 0.256251 +0.0958 0.25 0.225614 0.256185 +0.0959 0.25 0.225631 0.256118 +0.096 0.25 0.225648 0.256049 +0.0961 0.25 0.225665 0.255979 +0.0962 0.25 0.225683 0.255908 +0.0963 0.25 0.225701 0.255836 +0.0964 0.25 0.225719 0.255763 +0.0965 0.25 0.225737 0.255689 +0.0966 0.25 0.225756 0.255613 +0.0967 0.25 0.225775 0.255537 +0.0968 0.25 0.225794 0.255459 +0.0969 0.25 0.225814 0.25538 +0.097 0.25 0.225834 0.255301 +0.0971 0.25 0.225854 0.25522 +0.0972 0.25 0.225875 0.255138 +0.0973 0.25 0.225895 0.255055 +0.0974 0.25 0.225916 0.254972 +0.0975 0.25 0.225938 0.254887 +0.0976 0.25 0.225959 0.254801 +0.0977 0.25 0.225981 0.254715 +0.0978 0.25 0.226004 0.254627 +0.0979 0.25 0.226026 0.254539 +0.098 0.25 0.226049 0.25445 +0.0981 0.25 0.226072 0.25436 +0.0982 0.25 0.226096 0.254269 +0.0983 0.25 0.226119 0.254177 +0.0984 0.25 0.226143 0.254085 +0.0985 0.25 0.226168 0.253992 +0.0986 0.25 0.226192 0.253898 +0.0987 0.25 0.226217 0.253803 +0.0988 0.25 0.226242 0.253708 +0.0989 0.25 0.226268 0.253611 +0.099 0.25 0.226293 0.253514 +0.0991 0.25 0.226319 0.253417 +0.0992 0.25 0.226346 0.253319 +0.0993 0.25 0.226372 0.25322 +0.0994 0.25 0.226399 0.25312 +0.0995 0.25 0.226426 0.25302 +0.0996 0.25 0.226453 0.25292 +0.0997 0.25 0.226481 0.252819 +0.0998 0.25 0.226509 0.252717 +0.0999 0.25 0.226537 0.252615 +0.1 0.25 0.226566 0.252512 +0.1001 0.25 0.226595 0.252409 +0.1002 0.25 0.226624 0.252305 +0.1003 0.25 0.226653 0.252201 +0.1004 0.25 0.226683 0.252097 +0.1005 0.25 0.226713 0.251992 +0.1006 0.25 0.226743 0.251887 +0.1007 0.25 0.226773 0.251781 +0.1008 0.25 0.226804 0.251675 +0.1009 0.25 0.226835 0.251569 +0.101 0.25 0.226866 0.251462 +0.1011 0.25 0.226898 0.251355 +0.1012 0.25 0.22693 0.251248 +0.1013 0.25 0.226962 0.251141 +0.1014 0.25 0.226994 0.251033 +0.1015 0.25 0.227027 0.250925 +0.1016 0.25 0.22706 0.250817 +0.1017 0.25 0.227093 0.250709 +0.1018 0.25 0.227126 0.250601 +0.1019 0.25 0.22716 0.250493 +0.102 0.25 0.227194 0.250384 +0.1021 0.25 0.227228 0.250276 +0.1022 0.25 0.227263 0.250167 +0.1023 0.25 0.227297 0.250058 +0.1024 0.25 0.227332 0.24995 +0.1025 0.25 0.227368 0.249841 +0.1026 0.25 0.227403 0.249732 +0.1027 0.25 0.227439 0.249624 +0.1028 0.25 0.227475 0.249515 +0.1029 0.25 0.227512 0.249406 +0.103 0.25 0.227548 0.249298 +0.1031 0.25 0.227585 0.24919 +0.1032 0.25 0.227622 0.249082 +0.1033 0.25 0.22766 0.248974 +0.1034 0.25 0.227697 0.248866 +0.1035 0.25 0.227735 0.248758 +0.1036 0.25 0.227773 0.248651 +0.1037 0.25 0.227812 0.248544 +0.1038 0.25 0.22785 0.248437 +0.1039 0.25 0.227889 0.24833 +0.104 0.25 0.227928 0.248224 +0.1041 0.25 0.227968 0.248118 +0.1042 0.25 0.228008 0.248012 +0.1043 0.25 0.228048 0.247907 +0.1044 0.25 0.228088 0.247802 +0.1045 0.25 0.228128 0.247697 +0.1046 0.25 0.228169 0.247593 +0.1047 0.25 0.22821 0.247489 +0.1048 0.25 0.228251 0.247386 +0.1049 0.25 0.228292 0.247283 +0.105 0.25 0.228334 0.24718 +0.1051 0.25 0.228376 0.247078 +0.1052 0.25 0.228418 0.246977 +0.1053 0.25 0.228461 0.246876 +0.1054 0.25 0.228503 0.246776 +0.1055 0.25 0.228546 0.246676 +0.1056 0.25 0.228589 0.246577 +0.1057 0.25 0.228633 0.246478 +0.1058 0.25 0.228677 0.24638 +0.1059 0.25 0.22872 0.246283 +0.106 0.25 0.228765 0.246186 +0.1061 0.25 0.228809 0.24609 +0.1062 0.25 0.228854 0.245995 +0.1063 0.25 0.228898 0.2459 +0.1064 0.25 0.228944 0.245806 +0.1065 0.25 0.228989 0.245713 +0.1066 0.25 0.229034 0.24562 +0.1067 0.25 0.22908 0.245528 +0.1068 0.25 0.229126 0.245438 +0.1069 0.25 0.229173 0.245347 +0.107 0.25 0.229219 0.245258 +0.1071 0.25 0.229266 0.24517 +0.1072 0.25 0.229313 0.245082 +0.1073 0.25 0.22936 0.244995 +0.1074 0.25 0.229407 0.244909 +0.1075 0.25 0.229455 0.244824 +0.1076 0.25 0.229503 0.24474 +0.1077 0.25 0.229551 0.244657 +0.1078 0.25 0.2296 0.244574 +0.1079 0.25 0.229648 0.244493 +0.108 0.25 0.229697 0.244412 +0.1081 0.25 0.229746 0.244333 +0.1082 0.25 0.229795 0.244254 +0.1083 0.25 0.229845 0.244177 +0.1084 0.25 0.229895 0.2441 +0.1085 0.25 0.229945 0.244025 +0.1086 0.25 0.229995 0.24395 +0.1087 0.25 0.230045 0.243877 +0.1088 0.25 0.230096 0.243804 +0.1089 0.25 0.230147 0.243733 +0.109 0.25 0.230198 0.243663 +0.1091 0.25 0.230249 0.243594 +0.1092 0.25 0.2303 0.243526 +0.1093 0.25 0.230352 0.243459 +0.1094 0.25 0.230404 0.243393 +0.1095 0.25 0.230456 0.243328 +0.1096 0.25 0.230509 0.243265 +0.1097 0.25 0.230561 0.243202 +0.1098 0.25 0.230614 0.243141 +0.1099 0.25 0.230667 0.243081 +0.11 0.25 0.23072 0.243022 +0.1101 0.25 0.230774 0.242964 +0.1102 0.25 0.230827 0.242908 +0.1103 0.25 0.230881 0.242852 +0.1104 0.25 0.230935 0.242798 +0.1105 0.25 0.23099 0.242745 +0.1106 0.25 0.231044 0.242694 +0.1107 0.25 0.231099 0.242643 +0.1108 0.25 0.231154 0.242594 +0.1109 0.25 0.231209 0.242546 +0.111 0.25 0.231264 0.2425 +0.1111 0.25 0.23132 0.242454 +0.1112 0.25 0.231376 0.24241 +0.1113 0.25 0.231432 0.242367 +0.1114 0.25 0.231488 0.242326 +0.1115 0.25 0.231544 0.242286 +0.1116 0.25 0.231601 0.242247 +0.1117 0.25 0.231657 0.242209 +0.1118 0.25 0.231714 0.242173 +0.1119 0.25 0.231771 0.242138 +0.112 0.25 0.231829 0.242104 +0.1121 0.25 0.231886 0.242072 +0.1122 0.25 0.231944 0.242041 +0.1123 0.25 0.232002 0.242011 +0.1124 0.25 0.23206 0.241983 +0.1125 0.25 0.232119 0.241956 +0.1126 0.25 0.232177 0.241931 +0.1127 0.25 0.232236 0.241906 +0.1128 0.25 0.232295 0.241883 +0.1129 0.25 0.232354 0.241862 +0.113 0.25 0.232413 0.241842 +0.1131 0.25 0.232473 0.241823 +0.1132 0.25 0.232532 0.241805 +0.1133 0.25 0.232592 0.241789 +0.1134 0.25 0.232652 0.241775 +0.1135 0.25 0.232713 0.241761 +0.1136 0.25 0.232773 0.241749 +0.1137 0.25 0.232834 0.241739 +0.1138 0.25 0.232895 0.24173 +0.1139 0.25 0.232956 0.241722 +0.114 0.25 0.233017 0.241715 +0.1141 0.25 0.233078 0.24171 +0.1142 0.25 0.23314 0.241706 +0.1143 0.25 0.233202 0.241704 +0.1144 0.25 0.233263 0.241703 +0.1145 0.25 0.233326 0.241704 +0.1146 0.25 0.233388 0.241705 +0.1147 0.25 0.23345 0.241709 +0.1148 0.25 0.233513 0.241713 +0.1149 0.25 0.233576 0.241719 +0.115 0.25 0.233639 0.241726 +0.1151 0.25 0.233702 0.241735 +0.1152 0.25 0.233765 0.241745 +0.1153 0.25 0.233829 0.241756 +0.1154 0.25 0.233893 0.241769 +0.1155 0.25 0.233956 0.241783 +0.1156 0.25 0.23402 0.241799 +0.1157 0.25 0.234085 0.241816 +0.1158 0.25 0.234149 0.241834 +0.1159 0.25 0.234214 0.241853 +0.116 0.25 0.234278 0.241874 +0.1161 0.25 0.234343 0.241896 +0.1162 0.25 0.234408 0.24192 +0.1163 0.25 0.234474 0.241944 +0.1164 0.25 0.234539 0.241971 +0.1165 0.25 0.234605 0.241998 +0.1166 0.25 0.23467 0.242027 +0.1167 0.25 0.234736 0.242057 +0.1168 0.25 0.234802 0.242088 +0.1169 0.25 0.234868 0.242121 +0.117 0.25 0.234935 0.242155 +0.1171 0.25 0.235001 0.24219 +0.1172 0.25 0.235068 0.242227 +0.1173 0.25 0.235135 0.242264 +0.1174 0.25 0.235202 0.242304 +0.1175 0.25 0.235269 0.242344 +0.1176 0.25 0.235337 0.242385 +0.1177 0.25 0.235404 0.242428 +0.1178 0.25 0.235472 0.242472 +0.1179 0.25 0.23554 0.242517 +0.118 0.25 0.235608 0.242564 +0.1181 0.25 0.235676 0.242612 +0.1182 0.25 0.235744 0.24266 +0.1183 0.25 0.235812 0.24271 +0.1184 0.25 0.235881 0.242762 +0.1185 0.25 0.23595 0.242814 +0.1186 0.25 0.236019 0.242868 +0.1187 0.25 0.236088 0.242922 +0.1188 0.25 0.236157 0.242978 +0.1189 0.25 0.236226 0.243035 +0.119 0.25 0.236296 0.243094 +0.1191 0.25 0.236365 0.243153 +0.1192 0.25 0.236435 0.243213 +0.1193 0.25 0.236505 0.243275 +0.1194 0.25 0.236575 0.243337 +0.1195 0.25 0.236645 0.243401 +0.1196 0.25 0.236715 0.243466 +0.1197 0.25 0.236786 0.243531 +0.1198 0.25 0.236856 0.243598 +0.1199 0.25 0.236927 0.243666 +0.12 0.25 0.236998 0.243735 +0.1201 0.25 0.237069 0.243805 +0.1202 0.25 0.23714 0.243876 +0.1203 0.25 0.237212 0.243947 +0.1204 0.25 0.237283 0.24402 +0.1205 0.25 0.237355 0.244094 +0.1206 0.25 0.237426 0.244169 +0.1207 0.25 0.237498 0.244245 +0.1208 0.25 0.23757 0.244321 +0.1209 0.25 0.237642 0.244399 +0.121 0.25 0.237715 0.244477 +0.1211 0.25 0.237787 0.244556 +0.1212 0.25 0.23786 0.244637 +0.1213 0.25 0.237932 0.244718 +0.1214 0.25 0.238005 0.244799 +0.1215 0.25 0.238078 0.244882 +0.1216 0.25 0.238151 0.244966 +0.1217 0.25 0.238224 0.24505 +0.1218 0.25 0.238297 0.245135 +0.1219 0.25 0.238371 0.245221 +0.122 0.25 0.238444 0.245308 +0.1221 0.25 0.238518 0.245395 +0.1222 0.25 0.238592 0.245484 +0.1223 0.25 0.238665 0.245573 +0.1224 0.25 0.238739 0.245662 +0.1225 0.25 0.238814 0.245752 +0.1226 0.25 0.238888 0.245843 +0.1227 0.25 0.238962 0.245935 +0.1228 0.25 0.239037 0.246027 +0.1229 0.25 0.239111 0.24612 +0.123 0.25 0.239186 0.246214 +0.1231 0.25 0.239261 0.246308 +0.1232 0.25 0.239336 0.246403 +0.1233 0.25 0.239411 0.246498 +0.1234 0.25 0.239486 0.246594 +0.1235 0.25 0.239561 0.246691 +0.1236 0.25 0.239637 0.246788 +0.1237 0.25 0.239712 0.246885 +0.1238 0.25 0.239788 0.246983 +0.1239 0.25 0.239864 0.247082 +0.124 0.25 0.239939 0.247181 +0.1241 0.25 0.240015 0.24728 +0.1242 0.25 0.240091 0.24738 +0.1243 0.25 0.240168 0.247481 +0.1244 0.25 0.240244 0.247581 +0.1245 0.25 0.24032 0.247683 +0.1246 0.25 0.240397 0.247784 +0.1247 0.25 0.240473 0.247886 +0.1248 0.25 0.24055 0.247988 +0.1249 0.25 0.240627 0.248091 +0.125 0.25 0.240704 0.248194 +0.1251 0.25 0.240781 0.248297 +0.1252 0.25 0.240858 0.2484 +0.1253 0.25 0.240935 0.248504 +0.1254 0.25 0.241012 0.248608 +0.1255 0.25 0.241089 0.248712 +0.1256 0.25 0.241167 0.248817 +0.1257 0.25 0.241245 0.248921 +0.1258 0.25 0.241322 0.249026 +0.1259 0.25 0.2414 0.249131 +0.126 0.25 0.241478 0.249236 +0.1261 0.25 0.241556 0.249341 +0.1262 0.25 0.241634 0.249447 +0.1263 0.25 0.241712 0.249552 +0.1264 0.25 0.24179 0.249658 +0.1265 0.25 0.241868 0.249764 +0.1266 0.25 0.241947 0.249869 +0.1267 0.25 0.242025 0.249975 +0.1268 0.25 0.242104 0.250081 +0.1269 0.25 0.242182 0.250187 +0.127 0.25 0.242261 0.250293 +0.1271 0.25 0.24234 0.250399 +0.1272 0.25 0.242419 0.250504 +0.1273 0.25 0.242498 0.25061 +0.1274 0.25 0.242577 0.250716 +0.1275 0.25 0.242656 0.250821 +0.1276 0.25 0.242735 0.250927 +0.1277 0.25 0.242815 0.251032 +0.1278 0.25 0.242894 0.251137 +0.1279 0.25 0.242973 0.251242 +0.128 0.25 0.243053 0.251347 +0.1281 0.25 0.243133 0.251452 +0.1282 0.25 0.243212 0.251556 +0.1283 0.25 0.243292 0.251661 +0.1284 0.25 0.243372 0.251765 +0.1285 0.25 0.243452 0.251869 +0.1286 0.25 0.243532 0.251972 +0.1287 0.25 0.243612 0.252076 +0.1288 0.25 0.243692 0.252179 +0.1289 0.25 0.243772 0.252281 +0.129 0.25 0.243853 0.252384 +0.1291 0.25 0.243933 0.252486 +0.1292 0.25 0.244013 0.252588 +0.1293 0.25 0.244094 0.252689 +0.1294 0.25 0.244174 0.25279 +0.1295 0.25 0.244255 0.252891 +0.1296 0.25 0.244336 0.252991 +0.1297 0.25 0.244416 0.253091 +0.1298 0.25 0.244497 0.25319 +0.1299 0.25 0.244578 0.253289 +0.13 0.25 0.244659 0.253387 +0.1301 0.25 0.24474 0.253485 +0.1302 0.25 0.244821 0.253583 +0.1303 0.25 0.244902 0.25368 +0.1304 0.25 0.244983 0.253776 +0.1305 0.25 0.245065 0.253872 +0.1306 0.25 0.245146 0.253967 +0.1307 0.25 0.245227 0.254062 +0.1308 0.25 0.245309 0.254156 +0.1309 0.25 0.24539 0.25425 +0.131 0.25 0.245472 0.254343 +0.1311 0.25 0.245553 0.254435 +0.1312 0.25 0.245635 0.254527 +0.1313 0.25 0.245717 0.254618 +0.1314 0.25 0.245798 0.254709 +0.1315 0.25 0.24588 0.254798 +0.1316 0.25 0.245962 0.254888 +0.1317 0.25 0.246044 0.254976 +0.1318 0.25 0.246126 0.255064 +0.1319 0.25 0.246208 0.255151 +0.132 0.25 0.24629 0.255237 +0.1321 0.25 0.246372 0.255322 +0.1322 0.25 0.246454 0.255407 +0.1323 0.25 0.246536 0.255491 +0.1324 0.25 0.246618 0.255574 +0.1325 0.25 0.246701 0.255657 +0.1326 0.25 0.246783 0.255738 +0.1327 0.25 0.246865 0.255819 +0.1328 0.25 0.246948 0.255899 +0.1329 0.25 0.24703 0.255978 +0.133 0.25 0.247113 0.256056 +0.1331 0.25 0.247195 0.256134 +0.1332 0.25 0.247278 0.25621 +0.1333 0.25 0.24736 0.256286 +0.1334 0.25 0.247443 0.25636 +0.1335 0.25 0.247526 0.256434 +0.1336 0.25 0.247608 0.256507 +0.1337 0.25 0.247691 0.256579 +0.1338 0.25 0.247774 0.25665 +0.1339 0.25 0.247857 0.25672 +0.134 0.25 0.247939 0.256789 +0.1341 0.25 0.248022 0.256858 +0.1342 0.25 0.248105 0.256925 +0.1343 0.25 0.248188 0.256991 +0.1344 0.25 0.248271 0.257056 +0.1345 0.25 0.248354 0.25712 +0.1346 0.25 0.248437 0.257184 +0.1347 0.25 0.24852 0.257246 +0.1348 0.25 0.248603 0.257307 +0.1349 0.25 0.248686 0.257367 +0.135 0.25 0.248769 0.257426 +0.1351 0.25 0.248852 0.257484 +0.1352 0.25 0.248936 0.257541 +0.1353 0.25 0.249019 0.257597 +0.1354 0.25 0.249102 0.257652 +0.1355 0.25 0.249185 0.257706 +0.1356 0.25 0.249268 0.257758 +0.1357 0.25 0.249352 0.25781 +0.1358 0.25 0.249435 0.25786 +0.1359 0.25 0.249518 0.25791 +0.136 0.25 0.249602 0.257958 +0.1361 0.25 0.249685 0.258005 +0.1362 0.25 0.249768 0.258051 +0.1363 0.25 0.249852 0.258096 +0.1364 0.25 0.249935 0.258139 +0.1365 0.25 0.250018 0.258182 +0.1366 0.25 0.250102 0.258223 +0.1367 0.25 0.250185 0.258263 +0.1368 0.25 0.250269 0.258302 +0.1369 0.25 0.250352 0.25834 +0.137 0.25 0.250436 0.258377 +0.1371 0.25 0.250519 0.258412 +0.1372 0.25 0.250603 0.258447 +0.1373 0.25 0.250686 0.25848 +0.1374 0.25 0.25077 0.258512 +0.1375 0.25 0.250853 0.258543 +0.1376 0.25 0.250937 0.258572 +0.1377 0.25 0.25102 0.258601 +0.1378 0.25 0.251104 0.258628 +0.1379 0.25 0.251187 0.258654 +0.138 0.25 0.251271 0.258678 +0.1381 0.25 0.251354 0.258702 +0.1382 0.25 0.251438 0.258724 +0.1383 0.25 0.251521 0.258745 +0.1384 0.25 0.251605 0.258765 +0.1385 0.25 0.251688 0.258783 +0.1386 0.25 0.251772 0.258801 +0.1387 0.25 0.251855 0.258817 +0.1388 0.25 0.251939 0.258832 +0.1389 0.25 0.252023 0.258845 +0.139 0.25 0.252106 0.258858 +0.1391 0.25 0.25219 0.258869 +0.1392 0.25 0.252273 0.258879 +0.1393 0.25 0.252357 0.258888 +0.1394 0.25 0.25244 0.258895 +0.1395 0.25 0.252524 0.258901 +0.1396 0.25 0.252607 0.258906 +0.1397 0.25 0.252691 0.25891 +0.1398 0.25 0.252774 0.258912 +0.1399 0.25 0.252858 0.258914 +0.14 0.25 0.252941 0.258914 +0.1401 0.25 0.253024 0.258912 +0.1402 0.25 0.253108 0.25891 +0.1403 0.25 0.253191 0.258906 +0.1404 0.25 0.253275 0.258901 +0.1405 0.25 0.253358 0.258895 +0.1406 0.25 0.253441 0.258887 +0.1407 0.25 0.253525 0.258879 +0.1408 0.25 0.253608 0.258869 +0.1409 0.25 0.253691 0.258857 +0.141 0.25 0.253775 0.258845 +0.1411 0.25 0.253858 0.258831 +0.1412 0.25 0.253941 0.258817 +0.1413 0.25 0.254025 0.2588 +0.1414 0.25 0.254108 0.258783 +0.1415 0.25 0.254191 0.258765 +0.1416 0.25 0.254274 0.258745 +0.1417 0.25 0.254357 0.258724 +0.1418 0.25 0.254441 0.258702 +0.1419 0.25 0.254524 0.258678 +0.142 0.25 0.254607 0.258654 +0.1421 0.25 0.25469 0.258628 +0.1422 0.25 0.254773 0.258601 +0.1423 0.25 0.254856 0.258573 +0.1424 0.25 0.254939 0.258543 +0.1425 0.25 0.255022 0.258513 +0.1426 0.25 0.255105 0.258481 +0.1427 0.25 0.255188 0.258448 +0.1428 0.25 0.255271 0.258414 +0.1429 0.25 0.255353 0.258379 +0.143 0.25 0.255436 0.258342 +0.1431 0.25 0.255519 0.258305 +0.1432 0.25 0.255602 0.258266 +0.1433 0.25 0.255684 0.258226 +0.1434 0.25 0.255767 0.258185 +0.1435 0.25 0.25585 0.258143 +0.1436 0.25 0.255932 0.2581 +0.1437 0.25 0.256015 0.258055 +0.1438 0.25 0.256098 0.25801 +0.1439 0.25 0.25618 0.257963 +0.144 0.25 0.256263 0.257916 +0.1441 0.25 0.256345 0.257867 +0.1442 0.25 0.256427 0.257817 +0.1443 0.25 0.25651 0.257766 +0.1444 0.25 0.256592 0.257714 +0.1445 0.25 0.256674 0.257661 +0.1446 0.25 0.256757 0.257607 +0.1447 0.25 0.256839 0.257551 +0.1448 0.25 0.256921 0.257495 +0.1449 0.25 0.257003 0.257438 +0.145 0.25 0.257085 0.25738 +0.1451 0.25 0.257167 0.25732 +0.1452 0.25 0.257249 0.25726 +0.1453 0.25 0.257331 0.257199 +0.1454 0.25 0.257413 0.257136 +0.1455 0.25 0.257495 0.257073 +0.1456 0.25 0.257576 0.257009 +0.1457 0.25 0.257658 0.256943 +0.1458 0.25 0.25774 0.256877 +0.1459 0.25 0.257821 0.25681 +0.146 0.25 0.257903 0.256742 +0.1461 0.25 0.257984 0.256673 +0.1462 0.25 0.258066 0.256603 +0.1463 0.25 0.258147 0.256532 +0.1464 0.25 0.258229 0.25646 +0.1465 0.25 0.25831 0.256388 +0.1466 0.25 0.258391 0.256314 +0.1467 0.25 0.258472 0.25624 +0.1468 0.25 0.258554 0.256165 +0.1469 0.25 0.258635 0.256088 +0.147 0.25 0.258716 0.256012 +0.1471 0.25 0.258797 0.255934 +0.1472 0.25 0.258878 0.255855 +0.1473 0.25 0.258958 0.255776 +0.1474 0.25 0.259039 0.255696 +0.1475 0.25 0.25912 0.255615 +0.1476 0.25 0.259201 0.255533 +0.1477 0.25 0.259281 0.25545 +0.1478 0.25 0.259362 0.255367 +0.1479 0.25 0.259442 0.255283 +0.148 0.25 0.259523 0.255198 +0.1481 0.25 0.259603 0.255113 +0.1482 0.25 0.259683 0.255026 +0.1483 0.25 0.259764 0.25494 +0.1484 0.25 0.259844 0.254852 +0.1485 0.25 0.259924 0.254764 +0.1486 0.25 0.260004 0.254675 +0.1487 0.25 0.260084 0.254585 +0.1488 0.25 0.260164 0.254495 +0.1489 0.25 0.260244 0.254404 +0.149 0.25 0.260323 0.254313 +0.1491 0.25 0.260403 0.254221 +0.1492 0.25 0.260483 0.254128 +0.1493 0.25 0.260562 0.254035 +0.1494 0.25 0.260642 0.253941 +0.1495 0.25 0.260721 0.253847 +0.1496 0.25 0.2608 0.253752 +0.1497 0.25 0.26088 0.253657 +0.1498 0.25 0.260959 0.253561 +0.1499 0.25 0.261038 0.253465 +0.15 0.25 0.261117 0.253368 +0.1501 0.25 0.261196 0.25327 +0.1502 0.25 0.261275 0.253172 +0.1503 0.25 0.261353 0.253074 +0.1504 0.25 0.261432 0.252975 +0.1505 0.25 0.261511 0.252876 +0.1506 0.25 0.261589 0.252777 +0.1507 0.25 0.261668 0.252677 +0.1508 0.25 0.261746 0.252577 +0.1509 0.25 0.261825 0.252476 +0.151 0.25 0.261903 0.252375 +0.1511 0.25 0.261981 0.252273 +0.1512 0.25 0.262059 0.252172 +0.1513 0.25 0.262137 0.25207 +0.1514 0.25 0.262215 0.251967 +0.1515 0.25 0.262293 0.251865 +0.1516 0.25 0.26237 0.251762 +0.1517 0.25 0.262448 0.251659 +0.1518 0.25 0.262526 0.251555 +0.1519 0.25 0.262603 0.251452 +0.152 0.25 0.26268 0.251348 +0.1521 0.25 0.262758 0.251244 +0.1522 0.25 0.262835 0.251139 +0.1523 0.25 0.262912 0.251035 +0.1524 0.25 0.262989 0.25093 +0.1525 0.25 0.263066 0.250825 +0.1526 0.25 0.263143 0.25072 +0.1527 0.25 0.26322 0.250615 +0.1528 0.25 0.263296 0.25051 +0.1529 0.25 0.263373 0.250405 +0.153 0.25 0.263449 0.250299 +0.1531 0.25 0.263526 0.250194 +0.1532 0.25 0.263602 0.250088 +0.1533 0.25 0.263678 0.249983 +0.1534 0.25 0.263754 0.249877 +0.1535 0.25 0.26383 0.249772 +0.1536 0.25 0.263906 0.249666 +0.1537 0.25 0.263982 0.24956 +0.1538 0.25 0.264058 0.249455 +0.1539 0.25 0.264133 0.249349 +0.154 0.25 0.264209 0.249244 +0.1541 0.25 0.264284 0.249138 +0.1542 0.25 0.264359 0.249033 +0.1543 0.25 0.264435 0.248928 +0.1544 0.25 0.26451 0.248822 +0.1545 0.25 0.264585 0.248717 +0.1546 0.25 0.26466 0.248612 +0.1547 0.25 0.264734 0.248508 +0.1548 0.25 0.264809 0.248403 +0.1549 0.25 0.264884 0.248298 +0.155 0.25 0.264958 0.248194 +0.1551 0.25 0.265032 0.24809 +0.1552 0.25 0.265107 0.247986 +0.1553 0.25 0.265181 0.247882 +0.1554 0.25 0.265255 0.247779 +0.1555 0.25 0.265329 0.247676 +0.1556 0.25 0.265403 0.247573 +0.1557 0.25 0.265476 0.24747 +0.1558 0.25 0.26555 0.247368 +0.1559 0.25 0.265624 0.247266 +0.156 0.25 0.265697 0.247164 +0.1561 0.25 0.26577 0.247063 +0.1562 0.25 0.265844 0.246962 +0.1563 0.25 0.265917 0.246861 +0.1564 0.25 0.26599 0.24676 +0.1565 0.25 0.266062 0.24666 +0.1566 0.25 0.266135 0.246561 +0.1567 0.25 0.266208 0.246462 +0.1568 0.25 0.26628 0.246363 +0.1569 0.25 0.266353 0.246265 +0.157 0.25 0.266425 0.246167 +0.1571 0.25 0.266497 0.246069 +0.1572 0.25 0.266569 0.245972 +0.1573 0.25 0.266641 0.245876 +0.1574 0.25 0.266713 0.24578 +0.1575 0.25 0.266785 0.245684 +0.1576 0.25 0.266856 0.245589 +0.1577 0.25 0.266928 0.245495 +0.1578 0.25 0.266999 0.245401 +0.1579 0.25 0.26707 0.245307 +0.158 0.25 0.267141 0.245214 +0.1581 0.25 0.267212 0.245122 +0.1582 0.25 0.267283 0.24503 +0.1583 0.25 0.267354 0.244939 +0.1584 0.25 0.267424 0.244849 +0.1585 0.25 0.267495 0.244759 +0.1586 0.25 0.267565 0.24467 +0.1587 0.25 0.267635 0.244581 +0.1588 0.25 0.267706 0.244493 +0.1589 0.25 0.267776 0.244406 +0.159 0.25 0.267845 0.244319 +0.1591 0.25 0.267915 0.244233 +0.1592 0.25 0.267985 0.244148 +0.1593 0.25 0.268054 0.244063 +0.1594 0.25 0.268124 0.243979 +0.1595 0.25 0.268193 0.243896 +0.1596 0.25 0.268262 0.243814 +0.1597 0.25 0.268331 0.243732 +0.1598 0.25 0.2684 0.243651 +0.1599 0.25 0.268468 0.243571 +0.16 0.25 0.268537 0.243492 +0.1601 0.25 0.268605 0.243413 +0.1602 0.25 0.268674 0.243336 +0.1603 0.25 0.268742 0.243259 +0.1604 0.25 0.26881 0.243183 +0.1605 0.25 0.268878 0.243107 +0.1606 0.25 0.268946 0.243033 +0.1607 0.25 0.269013 0.242959 +0.1608 0.25 0.269081 0.242886 +0.1609 0.25 0.269148 0.242814 +0.161 0.25 0.269216 0.242743 +0.1611 0.25 0.269283 0.242673 +0.1612 0.25 0.26935 0.242604 +0.1613 0.25 0.269416 0.242535 +0.1614 0.25 0.269483 0.242468 +0.1615 0.25 0.26955 0.242401 +0.1616 0.25 0.269616 0.242336 +0.1617 0.25 0.269682 0.242271 +0.1618 0.25 0.269749 0.242207 +0.1619 0.25 0.269815 0.242144 +0.162 0.25 0.26988 0.242082 +0.1621 0.25 0.269946 0.242021 +0.1622 0.25 0.270012 0.241961 +0.1623 0.25 0.270077 0.241902 +0.1624 0.25 0.270143 0.241844 +0.1625 0.25 0.270208 0.241787 +0.1626 0.25 0.270273 0.241731 +0.1627 0.25 0.270338 0.241676 +0.1628 0.25 0.270402 0.241622 +0.1629 0.25 0.270467 0.241569 +0.163 0.25 0.270531 0.241516 +0.1631 0.25 0.270596 0.241465 +0.1632 0.25 0.27066 0.241415 +0.1633 0.25 0.270724 0.241366 +0.1634 0.25 0.270788 0.241319 +0.1635 0.25 0.270851 0.241272 +0.1636 0.25 0.270915 0.241226 +0.1637 0.25 0.270978 0.241181 +0.1638 0.25 0.271042 0.241137 +0.1639 0.25 0.271105 0.241095 +0.164 0.25 0.271168 0.241053 +0.1641 0.25 0.271231 0.241013 +0.1642 0.25 0.271293 0.240973 +0.1643 0.25 0.271356 0.240935 +0.1644 0.25 0.271418 0.240898 +0.1645 0.25 0.27148 0.240862 +0.1646 0.25 0.271542 0.240827 +0.1647 0.25 0.271604 0.240793 +0.1648 0.25 0.271666 0.24076 +0.1649 0.25 0.271728 0.240729 +0.165 0.25 0.271789 0.240698 +0.1651 0.25 0.271851 0.240669 +0.1652 0.25 0.271912 0.24064 +0.1653 0.25 0.271973 0.240613 +0.1654 0.25 0.272034 0.240587 +0.1655 0.25 0.272094 0.240562 +0.1656 0.25 0.272155 0.240539 +0.1657 0.25 0.272215 0.240516 +0.1658 0.25 0.272275 0.240494 +0.1659 0.25 0.272335 0.240474 +0.166 0.25 0.272395 0.240455 +0.1661 0.25 0.272455 0.240437 +0.1662 0.25 0.272515 0.24042 +0.1663 0.25 0.272574 0.240404 +0.1664 0.25 0.272633 0.24039 +0.1665 0.25 0.272693 0.240376 +0.1666 0.25 0.272752 0.240364 +0.1667 0.25 0.27281 0.240353 +0.1668 0.25 0.272869 0.240343 +0.1669 0.25 0.272927 0.240334 +0.167 0.25 0.272986 0.240327 +0.1671 0.25 0.273044 0.24032 +0.1672 0.25 0.273102 0.240315 +0.1673 0.25 0.27316 0.240311 +0.1674 0.25 0.273217 0.240308 +0.1675 0.25 0.273275 0.240306 +0.1676 0.25 0.273332 0.240306 +0.1677 0.25 0.273389 0.240306 +0.1678 0.25 0.273446 0.240308 +0.1679 0.25 0.273503 0.240311 +0.168 0.25 0.27356 0.240315 +0.1681 0.25 0.273616 0.24032 +0.1682 0.25 0.273673 0.240327 +0.1683 0.25 0.273729 0.240334 +0.1684 0.25 0.273785 0.240343 +0.1685 0.25 0.273841 0.240353 +0.1686 0.25 0.273897 0.240364 +0.1687 0.25 0.273952 0.240376 +0.1688 0.25 0.274007 0.24039 +0.1689 0.25 0.274063 0.240404 +0.169 0.25 0.274118 0.24042 +0.1691 0.25 0.274172 0.240437 +0.1692 0.25 0.274227 0.240455 +0.1693 0.25 0.274282 0.240474 +0.1694 0.25 0.274336 0.240494 +0.1695 0.25 0.27439 0.240516 +0.1696 0.25 0.274444 0.240538 +0.1697 0.25 0.274498 0.240562 +0.1698 0.25 0.274552 0.240587 +0.1699 0.25 0.274605 0.240613 +0.17 0.25 0.274658 0.24064 +0.1701 0.25 0.274711 0.240668 +0.1702 0.25 0.274764 0.240698 +0.1703 0.25 0.274817 0.240728 +0.1704 0.25 0.27487 0.24076 +0.1705 0.25 0.274922 0.240792 +0.1706 0.25 0.274974 0.240826 +0.1707 0.25 0.275027 0.240861 +0.1708 0.25 0.275078 0.240897 +0.1709 0.25 0.27513 0.240934 +0.171 0.25 0.275182 0.240972 +0.1711 0.25 0.275233 0.241012 +0.1712 0.25 0.275284 0.241052 +0.1713 0.25 0.275335 0.241093 +0.1714 0.25 0.275386 0.241136 +0.1715 0.25 0.275437 0.241179 +0.1716 0.25 0.275487 0.241224 +0.1717 0.25 0.275538 0.24127 +0.1718 0.25 0.275588 0.241317 +0.1719 0.25 0.275638 0.241364 +0.172 0.25 0.275687 0.241413 +0.1721 0.25 0.275737 0.241463 +0.1722 0.25 0.275787 0.241514 +0.1723 0.25 0.275836 0.241566 +0.1724 0.25 0.275885 0.241619 +0.1725 0.25 0.275934 0.241673 +0.1726 0.25 0.275982 0.241728 +0.1727 0.25 0.276031 0.241784 +0.1728 0.25 0.276079 0.24184 +0.1729 0.25 0.276127 0.241898 +0.173 0.25 0.276175 0.241957 +0.1731 0.25 0.276223 0.242017 +0.1732 0.25 0.276271 0.242078 +0.1733 0.25 0.276318 0.24214 +0.1734 0.25 0.276365 0.242202 +0.1735 0.25 0.276412 0.242266 +0.1736 0.25 0.276459 0.242331 +0.1737 0.25 0.276506 0.242396 +0.1738 0.25 0.276552 0.242463 +0.1739 0.25 0.276599 0.24253 +0.174 0.25 0.276645 0.242598 +0.1741 0.25 0.276691 0.242667 +0.1742 0.25 0.276737 0.242737 +0.1743 0.25 0.276782 0.242808 +0.1744 0.25 0.276827 0.24288 +0.1745 0.25 0.276873 0.242953 +0.1746 0.25 0.276918 0.243026 +0.1747 0.25 0.276962 0.2431 +0.1748 0.25 0.277007 0.243176 +0.1749 0.25 0.277052 0.243252 +0.175 0.25 0.277096 0.243328 +0.1751 0.25 0.27714 0.243406 +0.1752 0.25 0.277184 0.243484 +0.1753 0.25 0.277227 0.243564 +0.1754 0.25 0.277271 0.243644 +0.1755 0.25 0.277314 0.243724 +0.1756 0.25 0.277357 0.243806 +0.1757 0.25 0.2774 0.243888 +0.1758 0.25 0.277443 0.243971 +0.1759 0.25 0.277486 0.244055 +0.176 0.25 0.277528 0.244139 +0.1761 0.25 0.27757 0.244225 +0.1762 0.25 0.277612 0.244311 +0.1763 0.25 0.277654 0.244397 +0.1764 0.25 0.277695 0.244484 +0.1765 0.25 0.277737 0.244572 +0.1766 0.25 0.277778 0.244661 +0.1767 0.25 0.277819 0.24475 +0.1768 0.25 0.27786 0.24484 +0.1769 0.25 0.2779 0.244931 +0.177 0.25 0.277941 0.245022 +0.1771 0.25 0.277981 0.245114 +0.1772 0.25 0.278021 0.245206 +0.1773 0.25 0.278061 0.245299 +0.1774 0.25 0.278101 0.245393 +0.1775 0.25 0.27814 0.245487 +0.1776 0.25 0.278179 0.245582 +0.1777 0.25 0.278218 0.245677 +0.1778 0.25 0.278257 0.245773 +0.1779 0.25 0.278296 0.245869 +0.178 0.25 0.278334 0.245966 +0.1781 0.25 0.278373 0.246063 +0.1782 0.25 0.278411 0.246161 +0.1783 0.25 0.278448 0.246259 +0.1784 0.25 0.278486 0.246358 +0.1785 0.25 0.278524 0.246457 +0.1786 0.25 0.278561 0.246557 +0.1787 0.25 0.278598 0.246657 +0.1788 0.25 0.278635 0.246758 +0.1789 0.25 0.278672 0.246859 +0.179 0.25 0.278708 0.24696 +0.1791 0.25 0.278744 0.247062 +0.1792 0.25 0.27878 0.247164 +0.1793 0.25 0.278816 0.247266 +0.1794 0.25 0.278852 0.247369 +0.1795 0.25 0.278887 0.247473 +0.1796 0.25 0.278923 0.247576 +0.1797 0.25 0.278958 0.24768 +0.1798 0.25 0.278993 0.247784 +0.1799 0.25 0.279027 0.247889 +0.18 0.25 0.279062 0.247994 +0.1801 0.25 0.279096 0.248099 +0.1802 0.25 0.27913 0.248204 +0.1803 0.25 0.279164 0.248309 +0.1804 0.25 0.279198 0.248415 +0.1805 0.25 0.279231 0.248521 +0.1806 0.25 0.279265 0.248628 +0.1807 0.25 0.279298 0.248734 +0.1808 0.25 0.279331 0.248841 +0.1809 0.25 0.279363 0.248947 +0.181 0.25 0.279396 0.249054 +0.1811 0.25 0.279428 0.249162 +0.1812 0.25 0.27946 0.249269 +0.1813 0.25 0.279492 0.249376 +0.1814 0.25 0.279523 0.249484 +0.1815 0.25 0.279555 0.249592 +0.1816 0.25 0.279586 0.249699 +0.1817 0.25 0.279617 0.249807 +0.1818 0.25 0.279648 0.249915 +0.1819 0.25 0.279679 0.250023 +0.182 0.25 0.279709 0.250131 +0.1821 0.25 0.279739 0.250239 +0.1822 0.25 0.279769 0.250347 +0.1823 0.25 0.279799 0.250455 +0.1824 0.25 0.279829 0.250563 +0.1825 0.25 0.279858 0.250671 +0.1826 0.25 0.279887 0.250779 +0.1827 0.25 0.279916 0.250887 +0.1828 0.25 0.279945 0.250995 +0.1829 0.25 0.279974 0.251103 +0.183 0.25 0.280002 0.251211 +0.1831 0.25 0.28003 0.251318 +0.1832 0.25 0.280058 0.251426 +0.1833 0.25 0.280086 0.251534 +0.1834 0.25 0.280113 0.251641 +0.1835 0.25 0.280141 0.251748 +0.1836 0.25 0.280168 0.251855 +0.1837 0.25 0.280195 0.251962 +0.1838 0.25 0.280221 0.252069 +0.1839 0.25 0.280248 0.252175 +0.184 0.25 0.280274 0.252282 +0.1841 0.25 0.2803 0.252388 +0.1842 0.25 0.280326 0.252494 +0.1843 0.25 0.280352 0.2526 +0.1844 0.25 0.280377 0.252705 +0.1845 0.25 0.280402 0.25281 +0.1846 0.25 0.280427 0.252915 +0.1847 0.25 0.280452 0.25302 +0.1848 0.25 0.280477 0.253124 +0.1849 0.25 0.280501 0.253229 +0.185 0.25 0.280525 0.253332 +0.1851 0.25 0.280549 0.253436 +0.1852 0.25 0.280573 0.253539 +0.1853 0.25 0.280596 0.253642 +0.1854 0.25 0.28062 0.253744 +0.1855 0.25 0.280643 0.253846 +0.1856 0.25 0.280666 0.253948 +0.1857 0.25 0.280689 0.254049 +0.1858 0.25 0.280711 0.25415 +0.1859 0.25 0.280733 0.25425 +0.186 0.25 0.280755 0.254351 +0.1861 0.25 0.280777 0.25445 +0.1862 0.25 0.280799 0.254549 +0.1863 0.25 0.28082 0.254648 +0.1864 0.25 0.280842 0.254746 +0.1865 0.25 0.280863 0.254844 +0.1866 0.25 0.280883 0.254941 +0.1867 0.25 0.280904 0.255038 +0.1868 0.25 0.280924 0.255134 +0.1869 0.25 0.280944 0.25523 +0.187 0.25 0.280964 0.255325 +0.1871 0.25 0.280984 0.25542 +0.1872 0.25 0.281004 0.255514 +0.1873 0.25 0.281023 0.255607 +0.1874 0.25 0.281042 0.2557 +0.1875 0.25 0.281061 0.255793 +0.1876 0.25 0.281079 0.255884 +0.1877 0.25 0.281098 0.255976 +0.1878 0.25 0.281116 0.256066 +0.1879 0.25 0.281134 0.256156 +0.188 0.25 0.281152 0.256245 +0.1881 0.25 0.28117 0.256334 +0.1882 0.25 0.281187 0.256422 +0.1883 0.25 0.281204 0.256509 +0.1884 0.25 0.281221 0.256596 +0.1885 0.25 0.281238 0.256682 +0.1886 0.25 0.281254 0.256767 +0.1887 0.25 0.281271 0.256852 +0.1888 0.25 0.281287 0.256936 +0.1889 0.25 0.281303 0.257019 +0.189 0.25 0.281318 0.257101 +0.1891 0.25 0.281334 0.257183 +0.1892 0.25 0.281349 0.257264 +0.1893 0.25 0.281364 0.257344 +0.1894 0.25 0.281379 0.257423 +0.1895 0.25 0.281393 0.257502 +0.1896 0.25 0.281408 0.25758 +0.1897 0.25 0.281422 0.257657 +0.1898 0.25 0.281436 0.257733 +0.1899 0.25 0.281449 0.257808 +0.19 0.25 0.281463 0.257883 +0.1901 0.25 0.281476 0.257957 +0.1902 0.25 0.281489 0.25803 +0.1903 0.25 0.281502 0.258102 +0.1904 0.25 0.281515 0.258173 +0.1905 0.25 0.281527 0.258244 +0.1906 0.25 0.281539 0.258313 +0.1907 0.25 0.281551 0.258382 +0.1908 0.25 0.281563 0.25845 +0.1909 0.25 0.281574 0.258517 +0.191 0.25 0.281586 0.258583 +0.1911 0.25 0.281597 0.258648 +0.1912 0.25 0.281608 0.258712 +0.1913 0.25 0.281618 0.258775 +0.1914 0.25 0.281629 0.258838 +0.1915 0.25 0.281639 0.258899 +0.1916 0.25 0.281649 0.25896 +0.1917 0.25 0.281659 0.259019 +0.1918 0.25 0.281669 0.259078 +0.1919 0.25 0.281678 0.259135 +0.192 0.25 0.281687 0.259192 +0.1921 0.25 0.281696 0.259248 +0.1922 0.25 0.281705 0.259303 +0.1923 0.25 0.281713 0.259356 +0.1924 0.25 0.281722 0.259409 +0.1925 0.25 0.28173 0.259461 +0.1926 0.25 0.281737 0.259512 +0.1927 0.25 0.281745 0.259562 +0.1928 0.25 0.281752 0.25961 +0.1929 0.25 0.28176 0.259658 +0.193 0.25 0.281767 0.259705 +0.1931 0.25 0.281773 0.259751 +0.1932 0.25 0.28178 0.259795 +0.1933 0.25 0.281786 0.259839 +0.1934 0.25 0.281792 0.259882 +0.1935 0.25 0.281798 0.259923 +0.1936 0.25 0.281804 0.259964 +0.1937 0.25 0.281809 0.260003 +0.1938 0.25 0.281814 0.260042 +0.1939 0.25 0.281819 0.260079 +0.194 0.25 0.281824 0.260115 +0.1941 0.25 0.281829 0.260151 +0.1942 0.25 0.281833 0.260185 +0.1943 0.25 0.281837 0.260218 +0.1944 0.25 0.281841 0.26025 +0.1945 0.25 0.281845 0.260281 +0.1946 0.25 0.281848 0.260311 +0.1947 0.25 0.281852 0.260339 +0.1948 0.25 0.281855 0.260367 +0.1949 0.25 0.281857 0.260394 +0.195 0.25 0.28186 0.260419 +0.1951 0.25 0.281862 0.260443 +0.1952 0.25 0.281865 0.260467 +0.1953 0.25 0.281867 0.260489 +0.1954 0.25 0.281868 0.26051 +0.1955 0.25 0.28187 0.26053 +0.1956 0.25 0.281871 0.260548 +0.1957 0.25 0.281872 0.260566 +0.1958 0.25 0.281873 0.260583 +0.1959 0.25 0.281874 0.260598 +0.196 0.25 0.281874 0.260613 +0.1961 0.25 0.281874 0.260626 +0.1962 0.25 0.281874 0.260638 +0.1963 0.25 0.281874 0.260649 +0.1964 0.25 0.281873 0.260659 +0.1965 0.25 0.281873 0.260667 +0.1966 0.25 0.281872 0.260675 +0.1967 0.25 0.281871 0.260681 +0.1968 0.25 0.281869 0.260686 +0.1969 0.25 0.281868 0.260691 +0.197 0.25 0.281866 0.260694 +0.1971 0.25 0.281864 0.260696 +0.1972 0.25 0.281862 0.260696 +0.1973 0.25 0.281859 0.260696 +0.1974 0.25 0.281857 0.260694 +0.1975 0.25 0.281854 0.260692 +0.1976 0.25 0.281851 0.260688 +0.1977 0.25 0.281847 0.260683 +0.1978 0.25 0.281844 0.260677 +0.1979 0.25 0.28184 0.26067 +0.198 0.25 0.281836 0.260661 +0.1981 0.25 0.281832 0.260652 +0.1982 0.25 0.281828 0.260641 +0.1983 0.25 0.281823 0.26063 +0.1984 0.25 0.281818 0.260617 +0.1985 0.25 0.281813 0.260603 +0.1986 0.25 0.281808 0.260588 +0.1987 0.25 0.281802 0.260572 +0.1988 0.25 0.281796 0.260554 +0.1989 0.25 0.28179 0.260536 +0.199 0.25 0.281784 0.260516 +0.1991 0.25 0.281778 0.260495 +0.1992 0.25 0.281771 0.260474 +0.1993 0.25 0.281765 0.260451 +0.1994 0.25 0.281757 0.260427 +0.1995 0.25 0.28175 0.260401 +0.1996 0.25 0.281743 0.260375 +0.1997 0.25 0.281735 0.260348 +0.1998 0.25 0.281727 0.260319 +0.1999 0.25 0.281719 0.26029 +0.2 0.25 0.281711 0.260259 +0.2001 0.25 0.281702 0.260227 +0.2002 0.25 0.281693 0.260194 +0.2003 0.25 0.281684 0.26016 +0.2004 0.25 0.281675 0.260125 +0.2005 0.25 0.281666 0.260089 +0.2006 0.25 0.281656 0.260052 +0.2007 0.25 0.281646 0.260014 +0.2008 0.25 0.281636 0.259974 +0.2009 0.25 0.281626 0.259934 +0.201 0.25 0.281615 0.259893 +0.2011 0.25 0.281604 0.25985 +0.2012 0.25 0.281593 0.259807 +0.2013 0.25 0.281582 0.259762 +0.2014 0.25 0.281571 0.259716 +0.2015 0.25 0.281559 0.25967 +0.2016 0.25 0.281547 0.259622 +0.2017 0.25 0.281535 0.259573 +0.2018 0.25 0.281523 0.259523 +0.2019 0.25 0.281511 0.259473 +0.202 0.25 0.281498 0.259421 +0.2021 0.25 0.281485 0.259368 +0.2022 0.25 0.281472 0.259314 +0.2023 0.25 0.281459 0.259259 +0.2024 0.25 0.281445 0.259203 +0.2025 0.25 0.281431 0.259147 +0.2026 0.25 0.281417 0.259089 +0.2027 0.25 0.281403 0.25903 +0.2028 0.25 0.281388 0.25897 +0.2029 0.25 0.281374 0.25891 +0.203 0.25 0.281359 0.258848 +0.2031 0.25 0.281344 0.258785 +0.2032 0.25 0.281329 0.258722 +0.2033 0.25 0.281313 0.258657 +0.2034 0.25 0.281297 0.258592 +0.2035 0.25 0.281281 0.258525 +0.2036 0.25 0.281265 0.258458 +0.2037 0.25 0.281249 0.25839 +0.2038 0.25 0.281232 0.258321 +0.2039 0.25 0.281215 0.258251 +0.204 0.25 0.281198 0.25818 +0.2041 0.25 0.281181 0.258108 +0.2042 0.25 0.281164 0.258036 +0.2043 0.25 0.281146 0.257962 +0.2044 0.25 0.281128 0.257888 +0.2045 0.25 0.28111 0.257812 +0.2046 0.25 0.281092 0.257736 +0.2047 0.25 0.281073 0.257659 +0.2048 0.25 0.281054 0.257582 +0.2049 0.25 0.281035 0.257503 +0.205 0.25 0.281016 0.257424 +0.2051 0.25 0.280997 0.257344 +0.2052 0.25 0.280977 0.257263 +0.2053 0.25 0.280957 0.257181 +0.2054 0.25 0.280937 0.257098 +0.2055 0.25 0.280917 0.257015 +0.2056 0.25 0.280897 0.256931 +0.2057 0.25 0.280876 0.256846 +0.2058 0.25 0.280855 0.25676 +0.2059 0.25 0.280834 0.256674 +0.206 0.25 0.280812 0.256587 +0.2061 0.25 0.280791 0.256499 +0.2062 0.25 0.280769 0.25641 +0.2063 0.25 0.280747 0.256321 +0.2064 0.25 0.280725 0.256231 +0.2065 0.25 0.280703 0.256141 +0.2066 0.25 0.28068 0.256049 +0.2067 0.25 0.280657 0.255957 +0.2068 0.25 0.280634 0.255865 +0.2069 0.25 0.280611 0.255771 +0.207 0.25 0.280587 0.255677 +0.2071 0.25 0.280564 0.255583 +0.2072 0.25 0.28054 0.255488 +0.2073 0.25 0.280516 0.255392 +0.2074 0.25 0.280492 0.255296 +0.2075 0.25 0.280467 0.255199 +0.2076 0.25 0.280442 0.255101 +0.2077 0.25 0.280417 0.255003 +0.2078 0.25 0.280392 0.254904 +0.2079 0.25 0.280367 0.254805 +0.208 0.25 0.280341 0.254705 +0.2081 0.25 0.280315 0.254605 +0.2082 0.25 0.280289 0.254504 +0.2083 0.25 0.280263 0.254402 +0.2084 0.25 0.280237 0.2543 +0.2085 0.25 0.28021 0.254198 +0.2086 0.25 0.280183 0.254095 +0.2087 0.25 0.280156 0.253992 +0.2088 0.25 0.280129 0.253888 +0.2089 0.25 0.280102 0.253784 +0.209 0.25 0.280074 0.253679 +0.2091 0.25 0.280046 0.253574 +0.2092 0.25 0.280018 0.253468 +0.2093 0.25 0.27999 0.253362 +0.2094 0.25 0.279961 0.253256 +0.2095 0.25 0.279932 0.253149 +0.2096 0.25 0.279903 0.253042 +0.2097 0.25 0.279874 0.252935 +0.2098 0.25 0.279845 0.252827 +0.2099 0.25 0.279815 0.252719 +0.21 0.25 0.279786 0.25261 +0.2101 0.25 0.279756 0.252501 +0.2102 0.25 0.279725 0.252392 +0.2103 0.25 0.279695 0.252282 +0.2104 0.25 0.279664 0.252173 +0.2105 0.25 0.279634 0.252063 +0.2106 0.25 0.279603 0.251952 +0.2107 0.25 0.279571 0.251842 +0.2108 0.25 0.27954 0.251731 +0.2109 0.25 0.279508 0.25162 +0.211 0.25 0.279476 0.251508 +0.2111 0.25 0.279444 0.251397 +0.2112 0.25 0.279412 0.251285 +0.2113 0.25 0.27938 0.251173 +0.2114 0.25 0.279347 0.251061 +0.2115 0.25 0.279314 0.250949 +0.2116 0.25 0.279281 0.250837 +0.2117 0.25 0.279248 0.250724 +0.2118 0.25 0.279214 0.250611 +0.2119 0.25 0.279181 0.250498 +0.212 0.25 0.279147 0.250385 +0.2121 0.25 0.279113 0.250272 +0.2122 0.25 0.279078 0.250159 +0.2123 0.25 0.279044 0.250046 +0.2124 0.25 0.279009 0.249933 +0.2125 0.25 0.278974 0.249819 +0.2126 0.25 0.278939 0.249706 +0.2127 0.25 0.278904 0.249593 +0.2128 0.25 0.278868 0.249479 +0.2129 0.25 0.278832 0.249366 +0.213 0.25 0.278796 0.249252 +0.2131 0.25 0.27876 0.249139 +0.2132 0.25 0.278724 0.249025 +0.2133 0.25 0.278687 0.248912 +0.2134 0.25 0.278651 0.248799 +0.2135 0.25 0.278614 0.248685 +0.2136 0.25 0.278577 0.248572 +0.2137 0.25 0.278539 0.248459 +0.2138 0.25 0.278502 0.248346 +0.2139 0.25 0.278464 0.248233 +0.214 0.25 0.278426 0.24812 +0.2141 0.25 0.278388 0.248007 +0.2142 0.25 0.278349 0.247895 +0.2143 0.25 0.278311 0.247782 +0.2144 0.25 0.278272 0.24767 +0.2145 0.25 0.278233 0.247558 +0.2146 0.25 0.278194 0.247446 +0.2147 0.25 0.278155 0.247334 +0.2148 0.25 0.278115 0.247223 +0.2149 0.25 0.278075 0.247111 +0.215 0.25 0.278035 0.247 +0.2151 0.25 0.277995 0.246889 +0.2152 0.25 0.277955 0.246779 +0.2153 0.25 0.277914 0.246668 +0.2154 0.25 0.277873 0.246558 +0.2155 0.25 0.277833 0.246448 +0.2156 0.25 0.277791 0.246339 +0.2157 0.25 0.27775 0.24623 +0.2158 0.25 0.277708 0.246121 +0.2159 0.25 0.277667 0.246012 +0.216 0.25 0.277625 0.245904 +0.2161 0.25 0.277583 0.245796 +0.2162 0.25 0.27754 0.245688 +0.2163 0.25 0.277498 0.245581 +0.2164 0.25 0.277455 0.245474 +0.2165 0.25 0.277412 0.245368 +0.2166 0.25 0.277369 0.245262 +0.2167 0.25 0.277326 0.245156 +0.2168 0.25 0.277282 0.245051 +0.2169 0.25 0.277238 0.244946 +0.217 0.25 0.277195 0.244842 +0.2171 0.25 0.277151 0.244738 +0.2172 0.25 0.277106 0.244634 +0.2173 0.25 0.277062 0.244531 +0.2174 0.25 0.277017 0.244429 +0.2175 0.25 0.276972 0.244327 +0.2176 0.25 0.276927 0.244225 +0.2177 0.25 0.276882 0.244124 +0.2178 0.25 0.276836 0.244024 +0.2179 0.25 0.276791 0.243924 +0.218 0.25 0.276745 0.243824 +0.2181 0.25 0.276699 0.243726 +0.2182 0.25 0.276653 0.243627 +0.2183 0.25 0.276606 0.24353 +0.2184 0.25 0.27656 0.243432 +0.2185 0.25 0.276513 0.243336 +0.2186 0.25 0.276466 0.24324 +0.2187 0.25 0.276419 0.243145 +0.2188 0.25 0.276371 0.24305 +0.2189 0.25 0.276324 0.242956 +0.219 0.25 0.276276 0.242862 +0.2191 0.25 0.276228 0.242769 +0.2192 0.25 0.27618 0.242677 +0.2193 0.25 0.276132 0.242586 +0.2194 0.25 0.276083 0.242495 +0.2195 0.25 0.276035 0.242405 +0.2196 0.25 0.275986 0.242315 +0.2197 0.25 0.275937 0.242227 +0.2198 0.25 0.275887 0.242138 +0.2199 0.25 0.275838 0.242051 +0.22 0.25 0.275788 0.241965 +0.2201 0.25 0.275739 0.241879 +0.2202 0.25 0.275689 0.241794 +0.2203 0.25 0.275638 0.241709 +0.2204 0.25 0.275588 0.241626 +0.2205 0.25 0.275537 0.241543 +0.2206 0.25 0.275487 0.241461 +0.2207 0.25 0.275436 0.241379 +0.2208 0.25 0.275385 0.241299 +0.2209 0.25 0.275333 0.241219 +0.221 0.25 0.275282 0.24114 +0.2211 0.25 0.27523 0.241062 +0.2212 0.25 0.275178 0.240985 +0.2213 0.25 0.275126 0.240909 +0.2214 0.25 0.275074 0.240833 +0.2215 0.25 0.275022 0.240758 +0.2216 0.25 0.274969 0.240685 +0.2217 0.25 0.274916 0.240612 +0.2218 0.25 0.274863 0.240539 +0.2219 0.25 0.27481 0.240468 +0.222 0.25 0.274757 0.240398 +0.2221 0.25 0.274703 0.240328 +0.2222 0.25 0.27465 0.24026 +0.2223 0.25 0.274596 0.240192 +0.2224 0.25 0.274542 0.240125 +0.2225 0.25 0.274488 0.24006 +0.2226 0.25 0.274433 0.239995 +0.2227 0.25 0.274379 0.239931 +0.2228 0.25 0.274324 0.239868 +0.2229 0.25 0.274269 0.239806 +0.223 0.25 0.274214 0.239744 +0.2231 0.25 0.274158 0.239684 +0.2232 0.25 0.274103 0.239625 +0.2233 0.25 0.274047 0.239567 +0.2234 0.25 0.273991 0.239509 +0.2235 0.25 0.273935 0.239453 +0.2236 0.25 0.273879 0.239398 +0.2237 0.25 0.273823 0.239344 +0.2238 0.25 0.273766 0.23929 +0.2239 0.25 0.27371 0.239238 +0.224 0.25 0.273653 0.239187 +0.2241 0.25 0.273596 0.239136 +0.2242 0.25 0.273538 0.239087 +0.2243 0.25 0.273481 0.239039 +0.2244 0.25 0.273423 0.238992 +0.2245 0.25 0.273366 0.238945 +0.2246 0.25 0.273308 0.2389 +0.2247 0.25 0.273249 0.238856 +0.2248 0.25 0.273191 0.238813 +0.2249 0.25 0.273133 0.238771 +0.225 0.25 0.273074 0.23873 +0.2251 0.25 0.273015 0.23869 +0.2252 0.25 0.272956 0.238652 +0.2253 0.25 0.272897 0.238614 +0.2254 0.25 0.272838 0.238577 +0.2255 0.25 0.272778 0.238541 +0.2256 0.25 0.272719 0.238507 +0.2257 0.25 0.272659 0.238474 +0.2258 0.25 0.272599 0.238441 +0.2259 0.25 0.272538 0.23841 +0.226 0.25 0.272478 0.23838 +0.2261 0.25 0.272418 0.238351 +0.2262 0.25 0.272357 0.238323 +0.2263 0.25 0.272296 0.238296 +0.2264 0.25 0.272235 0.23827 +0.2265 0.25 0.272174 0.238246 +0.2266 0.25 0.272112 0.238222 +0.2267 0.25 0.272051 0.2382 +0.2268 0.25 0.271989 0.238178 +0.2269 0.25 0.271927 0.238158 +0.227 0.25 0.271865 0.238139 +0.2271 0.25 0.271803 0.238121 +0.2272 0.25 0.271741 0.238104 +0.2273 0.25 0.271678 0.238089 +0.2274 0.25 0.271615 0.238074 +0.2275 0.25 0.271552 0.238061 +0.2276 0.25 0.271489 0.238048 +0.2277 0.25 0.271426 0.238037 +0.2278 0.25 0.271363 0.238027 +0.2279 0.25 0.271299 0.238018 +0.228 0.25 0.271236 0.238011 +0.2281 0.25 0.271172 0.238004 +0.2282 0.25 0.271108 0.237999 +0.2283 0.25 0.271043 0.237994 +0.2284 0.25 0.270979 0.237991 +0.2285 0.25 0.270915 0.237989 +0.2286 0.25 0.27085 0.237988 +0.2287 0.25 0.270785 0.237988 +0.2288 0.25 0.27072 0.23799 +0.2289 0.25 0.270655 0.237992 +0.229 0.25 0.27059 0.237996 +0.2291 0.25 0.270524 0.238001 +0.2292 0.25 0.270458 0.238007 +0.2293 0.25 0.270393 0.238014 +0.2294 0.25 0.270327 0.238022 +0.2295 0.25 0.270261 0.238032 +0.2296 0.25 0.270194 0.238042 +0.2297 0.25 0.270128 0.238054 +0.2298 0.25 0.270061 0.238067 +0.2299 0.25 0.269994 0.238081 +0.23 0.25 0.269928 0.238096 +0.2301 0.25 0.26986 0.238112 +0.2302 0.25 0.269793 0.23813 +0.2303 0.25 0.269726 0.238148 +0.2304 0.25 0.269658 0.238168 +0.2305 0.25 0.269591 0.238189 +0.2306 0.25 0.269523 0.238211 +0.2307 0.25 0.269455 0.238234 +0.2308 0.25 0.269387 0.238258 +0.2309 0.25 0.269318 0.238283 +0.231 0.25 0.26925 0.23831 +0.2311 0.25 0.269181 0.238337 +0.2312 0.25 0.269112 0.238366 +0.2313 0.25 0.269043 0.238396 +0.2314 0.25 0.268974 0.238427 +0.2315 0.25 0.268905 0.238459 +0.2316 0.25 0.268836 0.238492 +0.2317 0.25 0.268766 0.238526 +0.2318 0.25 0.268697 0.238561 +0.2319 0.25 0.268627 0.238598 +0.232 0.25 0.268557 0.238635 +0.2321 0.25 0.268487 0.238674 +0.2322 0.25 0.268416 0.238714 +0.2323 0.25 0.268346 0.238755 +0.2324 0.25 0.268275 0.238797 +0.2325 0.25 0.268205 0.23884 +0.2326 0.25 0.268134 0.238884 +0.2327 0.25 0.268063 0.238929 +0.2328 0.25 0.267991 0.238975 +0.2329 0.25 0.26792 0.239023 +0.233 0.25 0.267849 0.239071 +0.2331 0.25 0.267777 0.23912 +0.2332 0.25 0.267705 0.239171 +0.2333 0.25 0.267633 0.239222 +0.2334 0.25 0.267561 0.239275 +0.2335 0.25 0.267489 0.239329 +0.2336 0.25 0.267417 0.239383 +0.2337 0.25 0.267344 0.239439 +0.2338 0.25 0.267272 0.239496 +0.2339 0.25 0.267199 0.239553 +0.234 0.25 0.267126 0.239612 +0.2341 0.25 0.267053 0.239672 +0.2342 0.25 0.26698 0.239733 +0.2343 0.25 0.266906 0.239794 +0.2344 0.25 0.266833 0.239857 +0.2345 0.25 0.266759 0.239921 +0.2346 0.25 0.266686 0.239986 +0.2347 0.25 0.266612 0.240052 +0.2348 0.25 0.266538 0.240118 +0.2349 0.25 0.266463 0.240186 +0.235 0.25 0.266389 0.240255 +0.2351 0.25 0.266315 0.240324 +0.2352 0.25 0.26624 0.240395 +0.2353 0.25 0.266165 0.240466 +0.2354 0.25 0.26609 0.240539 +0.2355 0.25 0.266015 0.240612 +0.2356 0.25 0.26594 0.240686 +0.2357 0.25 0.265865 0.240761 +0.2358 0.25 0.26579 0.240838 +0.2359 0.25 0.265714 0.240915 +0.236 0.25 0.265638 0.240992 +0.2361 0.25 0.265562 0.241071 +0.2362 0.25 0.265486 0.241151 +0.2363 0.25 0.26541 0.241232 +0.2364 0.25 0.265334 0.241313 +0.2365 0.25 0.265258 0.241395 +0.2366 0.25 0.265181 0.241478 +0.2367 0.25 0.265105 0.241562 +0.2368 0.25 0.265028 0.241647 +0.2369 0.25 0.264951 0.241733 +0.237 0.25 0.264874 0.241819 +0.2371 0.25 0.264797 0.241907 +0.2372 0.25 0.264719 0.241995 +0.2373 0.25 0.264642 0.242084 +0.2374 0.25 0.264564 0.242174 +0.2375 0.25 0.264487 0.242264 +0.2376 0.25 0.264409 0.242355 +0.2377 0.25 0.264331 0.242447 +0.2378 0.25 0.264253 0.24254 +0.2379 0.25 0.264175 0.242634 +0.238 0.25 0.264096 0.242728 +0.2381 0.25 0.264018 0.242823 +0.2382 0.25 0.263939 0.242919 +0.2383 0.25 0.263861 0.243015 +0.2384 0.25 0.263782 0.243113 +0.2385 0.25 0.263703 0.243211 +0.2386 0.25 0.263624 0.243309 +0.2387 0.25 0.263545 0.243409 +0.2388 0.25 0.263465 0.243508 +0.2389 0.25 0.263386 0.243609 +0.239 0.25 0.263306 0.24371 +0.2391 0.25 0.263227 0.243812 +0.2392 0.25 0.263147 0.243915 +0.2393 0.25 0.263067 0.244018 +0.2394 0.25 0.262987 0.244122 +0.2395 0.25 0.262907 0.244226 +0.2396 0.25 0.262826 0.244332 +0.2397 0.25 0.262746 0.244437 +0.2398 0.25 0.262665 0.244543 +0.2399 0.25 0.262585 0.24465 +0.24 0.25 0.262504 0.244758 +0.2401 0.25 0.262423 0.244866 +0.2402 0.25 0.262342 0.244974 +0.2403 0.25 0.262261 0.245083 +0.2404 0.25 0.262179 0.245193 +0.2405 0.25 0.262098 0.245303 +0.2406 0.25 0.262017 0.245413 +0.2407 0.25 0.261935 0.245524 +0.2408 0.25 0.261853 0.245636 +0.2409 0.25 0.261771 0.245748 +0.241 0.25 0.261689 0.24586 +0.2411 0.25 0.261607 0.245973 +0.2412 0.25 0.261525 0.246087 +0.2413 0.25 0.261443 0.246201 +0.2414 0.25 0.26136 0.246315 +0.2415 0.25 0.261278 0.24643 +0.2416 0.25 0.261195 0.246545 +0.2417 0.25 0.261112 0.24666 +0.2418 0.25 0.26103 0.246776 +0.2419 0.25 0.260947 0.246892 +0.242 0.25 0.260863 0.247009 +0.2421 0.25 0.26078 0.247126 +0.2422 0.25 0.260697 0.247243 +0.2423 0.25 0.260613 0.247361 +0.2424 0.25 0.26053 0.247479 +0.2425 0.25 0.260446 0.247597 +0.2426 0.25 0.260363 0.247716 +0.2427 0.25 0.260279 0.247834 +0.2428 0.25 0.260195 0.247954 +0.2429 0.25 0.260111 0.248073 +0.243 0.25 0.260026 0.248193 +0.2431 0.25 0.259942 0.248313 +0.2432 0.25 0.259858 0.248433 +0.2433 0.25 0.259773 0.248553 +0.2434 0.25 0.259689 0.248674 +0.2435 0.25 0.259604 0.248795 +0.2436 0.25 0.259519 0.248916 +0.2437 0.25 0.259434 0.249037 +0.2438 0.25 0.259349 0.249158 +0.2439 0.25 0.259264 0.24928 +0.244 0.25 0.259179 0.249401 +0.2441 0.25 0.259093 0.249523 +0.2442 0.25 0.259008 0.249645 +0.2443 0.25 0.258922 0.249767 +0.2444 0.25 0.258837 0.249889 +0.2445 0.25 0.258751 0.250011 +0.2446 0.25 0.258665 0.250134 +0.2447 0.25 0.258579 0.250256 +0.2448 0.25 0.258493 0.250379 +0.2449 0.25 0.258407 0.250501 +0.245 0.25 0.258321 0.250624 +0.2451 0.25 0.258234 0.250746 +0.2452 0.25 0.258148 0.250869 +0.2453 0.25 0.258061 0.250992 +0.2454 0.25 0.257975 0.251114 +0.2455 0.25 0.257888 0.251237 +0.2456 0.25 0.257801 0.251359 +0.2457 0.25 0.257714 0.251482 +0.2458 0.25 0.257627 0.251604 +0.2459 0.25 0.25754 0.251727 +0.246 0.25 0.257453 0.251849 +0.2461 0.25 0.257366 0.251971 +0.2462 0.25 0.257278 0.252094 +0.2463 0.25 0.257191 0.252216 +0.2464 0.25 0.257103 0.252338 +0.2465 0.25 0.257016 0.252459 +0.2466 0.25 0.256928 0.252581 +0.2467 0.25 0.25684 0.252703 +0.2468 0.25 0.256752 0.252824 +0.2469 0.25 0.256664 0.252945 +0.247 0.25 0.256576 0.253066 +0.2471 0.25 0.256488 0.253187 +0.2472 0.25 0.256399 0.253308 +0.2473 0.25 0.256311 0.253428 +0.2474 0.25 0.256222 0.253549 +0.2475 0.25 0.256134 0.253669 +0.2476 0.25 0.256045 0.253788 +0.2477 0.25 0.255956 0.253908 +0.2478 0.25 0.255868 0.254027 +0.2479 0.25 0.255779 0.254146 +0.248 0.25 0.25569 0.254265 +0.2481 0.25 0.255601 0.254383 +0.2482 0.25 0.255512 0.254501 +0.2483 0.25 0.255422 0.254619 +0.2484 0.25 0.255333 0.254736 +0.2485 0.25 0.255244 0.254853 +0.2486 0.25 0.255154 0.25497 +0.2487 0.25 0.255064 0.255086 +0.2488 0.25 0.254975 0.255202 +0.2489 0.25 0.254885 0.255318 +0.249 0.25 0.254795 0.255433 +0.2491 0.25 0.254705 0.255547 +0.2492 0.25 0.254615 0.255662 +0.2493 0.25 0.254525 0.255776 +0.2494 0.25 0.254435 0.255889 +0.2495 0.25 0.254345 0.256002 +0.2496 0.25 0.254255 0.256115 +0.2497 0.25 0.254164 0.256227 +0.2498 0.25 0.254074 0.256339 +0.2499 0.25 0.253983 0.25645 +0.25 0.25 0.253893 0.25656 +0.2501 0.25 0.253802 0.256671 +0.2502 0.25 0.253711 0.25678 +0.2503 0.25 0.25362 0.256889 +0.2504 0.25 0.253529 0.256998 +0.2505 0.25 0.253438 0.257106 +0.2506 0.25 0.253347 0.257213 +0.2507 0.25 0.253256 0.25732 +0.2508 0.25 0.253165 0.257426 +0.2509 0.25 0.253074 0.257532 +0.251 0.25 0.252982 0.257637 +0.2511 0.25 0.252891 0.257742 +0.2512 0.25 0.252799 0.257846 +0.2513 0.25 0.252708 0.257949 +0.2514 0.25 0.252616 0.258052 +0.2515 0.25 0.252525 0.258154 +0.2516 0.25 0.252433 0.258255 +0.2517 0.25 0.252341 0.258356 +0.2518 0.25 0.252249 0.258456 +0.2519 0.25 0.252157 0.258555 +0.252 0.25 0.252065 0.258654 +0.2521 0.25 0.251973 0.258752 +0.2522 0.25 0.251881 0.258849 +0.2523 0.25 0.251789 0.258945 +0.2524 0.25 0.251696 0.259041 +0.2525 0.25 0.251604 0.259136 +0.2526 0.25 0.251511 0.25923 +0.2527 0.25 0.251419 0.259324 +0.2528 0.25 0.251326 0.259417 +0.2529 0.25 0.251234 0.259509 +0.253 0.25 0.251141 0.2596 +0.2531 0.25 0.251048 0.25969 +0.2532 0.25 0.250956 0.25978 +0.2533 0.25 0.250863 0.259869 +0.2534 0.25 0.25077 0.259957 +0.2535 0.25 0.250677 0.260044 +0.2536 0.25 0.250584 0.260131 +0.2537 0.25 0.250491 0.260216 +0.2538 0.25 0.250397 0.260301 +0.2539 0.25 0.250304 0.260385 +0.254 0.25 0.250211 0.260468 +0.2541 0.25 0.250118 0.26055 +0.2542 0.25 0.250024 0.260631 +0.2543 0.25 0.249931 0.260712 +0.2544 0.25 0.249837 0.260791 +0.2545 0.25 0.249744 0.26087 +0.2546 0.25 0.24965 0.260947 +0.2547 0.25 0.249556 0.261024 +0.2548 0.25 0.249463 0.2611 +0.2549 0.25 0.249369 0.261175 +0.255 0.25 0.249275 0.261249 +0.2551 0.25 0.249181 0.261322 +0.2552 0.25 0.249087 0.261394 +0.2553 0.25 0.248993 0.261465 +0.2554 0.25 0.248899 0.261536 +0.2555 0.25 0.248805 0.261605 +0.2556 0.25 0.248711 0.261673 +0.2557 0.25 0.248617 0.26174 +0.2558 0.25 0.248522 0.261807 +0.2559 0.25 0.248428 0.261872 +0.256 0.25 0.248334 0.261936 +0.2561 0.25 0.248239 0.262 +0.2562 0.25 0.248145 0.262062 +0.2563 0.25 0.24805 0.262123 +0.2564 0.25 0.247956 0.262183 +0.2565 0.25 0.247861 0.262243 +0.2566 0.25 0.247767 0.262301 +0.2567 0.25 0.247672 0.262358 +0.2568 0.25 0.247577 0.262414 +0.2569 0.25 0.247483 0.262469 +0.257 0.25 0.247388 0.262523 +0.2571 0.25 0.247293 0.262576 +0.2572 0.25 0.247198 0.262628 +0.2573 0.25 0.247103 0.262679 +0.2574 0.25 0.247008 0.262728 +0.2575 0.25 0.246913 0.262777 +0.2576 0.25 0.246818 0.262825 +0.2577 0.25 0.246723 0.262871 +0.2578 0.25 0.246628 0.262916 +0.2579 0.25 0.246533 0.262961 +0.258 0.25 0.246438 0.263004 +0.2581 0.25 0.246342 0.263046 +0.2582 0.25 0.246247 0.263087 +0.2583 0.25 0.246152 0.263127 +0.2584 0.25 0.246056 0.263165 +0.2585 0.25 0.245961 0.263203 +0.2586 0.25 0.245865 0.263239 +0.2587 0.25 0.24577 0.263275 +0.2588 0.25 0.245675 0.263309 +0.2589 0.25 0.245579 0.263342 +0.259 0.25 0.245483 0.263374 +0.2591 0.25 0.245388 0.263404 +0.2592 0.25 0.245292 0.263434 +0.2593 0.25 0.245196 0.263463 +0.2594 0.25 0.245101 0.26349 +0.2595 0.25 0.245005 0.263516 +0.2596 0.25 0.244909 0.263541 +0.2597 0.25 0.244813 0.263565 +0.2598 0.25 0.244718 0.263587 +0.2599 0.25 0.244622 0.263609 +0.26 0.25 0.244526 0.263629 +0.2601 0.25 0.24443 0.263648 +0.2602 0.25 0.244334 0.263666 +0.2603 0.25 0.244238 0.263683 +0.2604 0.25 0.244142 0.263698 +0.2605 0.25 0.244046 0.263713 +0.2606 0.25 0.24395 0.263726 +0.2607 0.25 0.243854 0.263738 +0.2608 0.25 0.243758 0.263749 +0.2609 0.25 0.243662 0.263759 +0.261 0.25 0.243566 0.263767 +0.2611 0.25 0.243469 0.263774 +0.2612 0.25 0.243373 0.26378 +0.2613 0.25 0.243277 0.263785 +0.2614 0.25 0.243181 0.263789 +0.2615 0.25 0.243084 0.263791 +0.2616 0.25 0.242988 0.263793 +0.2617 0.25 0.242892 0.263793 +0.2618 0.25 0.242796 0.263792 +0.2619 0.25 0.242699 0.263789 +0.262 0.25 0.242603 0.263786 +0.2621 0.25 0.242506 0.263781 +0.2622 0.25 0.24241 0.263775 +0.2623 0.25 0.242314 0.263768 +0.2624 0.25 0.242217 0.26376 +0.2625 0.25 0.242121 0.26375 +0.2626 0.25 0.242024 0.263739 +0.2627 0.25 0.241928 0.263727 +0.2628 0.25 0.241831 0.263714 +0.2629 0.25 0.241735 0.2637 +0.263 0.25 0.241638 0.263684 +0.2631 0.25 0.241542 0.263668 +0.2632 0.25 0.241445 0.26365 +0.2633 0.25 0.241349 0.263631 +0.2634 0.25 0.241252 0.26361 +0.2635 0.25 0.241155 0.263589 +0.2636 0.25 0.241059 0.263566 +0.2637 0.25 0.240962 0.263542 +0.2638 0.25 0.240865 0.263517 +0.2639 0.25 0.240769 0.263491 +0.264 0.25 0.240672 0.263463 +0.2641 0.25 0.240575 0.263435 +0.2642 0.25 0.240479 0.263405 +0.2643 0.25 0.240382 0.263374 +0.2644 0.25 0.240285 0.263342 +0.2645 0.25 0.240189 0.263308 +0.2646 0.25 0.240092 0.263274 +0.2647 0.25 0.239995 0.263238 +0.2648 0.25 0.239899 0.263201 +0.2649 0.25 0.239802 0.263163 +0.265 0.25 0.239705 0.263124 +0.2651 0.25 0.239608 0.263083 +0.2652 0.25 0.239512 0.263042 +0.2653 0.25 0.239415 0.262999 +0.2654 0.25 0.239318 0.262955 +0.2655 0.25 0.239222 0.26291 +0.2656 0.25 0.239125 0.262864 +0.2657 0.25 0.239028 0.262817 +0.2658 0.25 0.238931 0.262768 +0.2659 0.25 0.238835 0.262719 +0.266 0.25 0.238738 0.262668 +0.2661 0.25 0.238641 0.262616 +0.2662 0.25 0.238544 0.262563 +0.2663 0.25 0.238448 0.262509 +0.2664 0.25 0.238351 0.262454 +0.2665 0.25 0.238254 0.262397 +0.2666 0.25 0.238157 0.26234 +0.2667 0.25 0.238061 0.262281 +0.2668 0.25 0.237964 0.262222 +0.2669 0.25 0.237867 0.262161 +0.267 0.25 0.23777 0.262099 +0.2671 0.25 0.237674 0.262036 +0.2672 0.25 0.237577 0.261972 +0.2673 0.25 0.23748 0.261907 +0.2674 0.25 0.237384 0.261841 +0.2675 0.25 0.237287 0.261773 +0.2676 0.25 0.23719 0.261705 +0.2677 0.25 0.237094 0.261636 +0.2678 0.25 0.236997 0.261565 +0.2679 0.25 0.2369 0.261494 +0.268 0.25 0.236804 0.261421 +0.2681 0.25 0.236707 0.261348 +0.2682 0.25 0.23661 0.261273 +0.2683 0.25 0.236514 0.261198 +0.2684 0.25 0.236417 0.261121 +0.2685 0.25 0.236321 0.261043 +0.2686 0.25 0.236224 0.260965 +0.2687 0.25 0.236128 0.260885 +0.2688 0.25 0.236031 0.260804 +0.2689 0.25 0.235935 0.260723 +0.269 0.25 0.235838 0.26064 +0.2691 0.25 0.235742 0.260556 +0.2692 0.25 0.235645 0.260472 +0.2693 0.25 0.235549 0.260386 +0.2694 0.25 0.235452 0.2603 +0.2695 0.25 0.235356 0.260212 +0.2696 0.25 0.235259 0.260124 +0.2697 0.25 0.235163 0.260035 +0.2698 0.25 0.235067 0.259944 +0.2699 0.25 0.23497 0.259853 +0.27 0.25 0.234874 0.259761 +0.2701 0.25 0.234778 0.259668 +0.2702 0.25 0.234681 0.259574 +0.2703 0.25 0.234585 0.259479 +0.2704 0.25 0.234489 0.259384 +0.2705 0.25 0.234393 0.259287 +0.2706 0.25 0.234296 0.25919 +0.2707 0.25 0.2342 0.259091 +0.2708 0.25 0.234104 0.258992 +0.2709 0.25 0.234008 0.258892 +0.271 0.25 0.233912 0.258791 +0.2711 0.25 0.233816 0.25869 +0.2712 0.25 0.23372 0.258587 +0.2713 0.25 0.233624 0.258484 +0.2714 0.25 0.233528 0.25838 +0.2715 0.25 0.233432 0.258275 +0.2716 0.25 0.233336 0.258169 +0.2717 0.25 0.23324 0.258063 +0.2718 0.25 0.233144 0.257956 +0.2719 0.25 0.233048 0.257848 +0.272 0.25 0.232952 0.257739 +0.2721 0.25 0.232856 0.257629 +0.2722 0.25 0.232761 0.257519 +0.2723 0.25 0.232665 0.257408 +0.2724 0.25 0.232569 0.257296 +0.2725 0.25 0.232474 0.257184 +0.2726 0.25 0.232378 0.257071 +0.2727 0.25 0.232282 0.256957 +0.2728 0.25 0.232187 0.256843 +0.2729 0.25 0.232091 0.256727 +0.273 0.25 0.231996 0.256612 +0.2731 0.25 0.2319 0.256495 +0.2732 0.25 0.231805 0.256378 +0.2733 0.25 0.231709 0.25626 +0.2734 0.25 0.231614 0.256142 +0.2735 0.25 0.231519 0.256023 +0.2736 0.25 0.231423 0.255903 +0.2737 0.25 0.231328 0.255783 +0.2738 0.25 0.231233 0.255662 +0.2739 0.25 0.231138 0.255541 +0.274 0.25 0.231043 0.255419 +0.2741 0.25 0.230948 0.255296 +0.2742 0.25 0.230853 0.255173 +0.2743 0.25 0.230758 0.25505 +0.2744 0.25 0.230663 0.254925 +0.2745 0.25 0.230568 0.254801 +0.2746 0.25 0.230473 0.254676 +0.2747 0.25 0.230378 0.25455 +0.2748 0.25 0.230283 0.254424 +0.2749 0.25 0.230188 0.254297 +0.275 0.25 0.230094 0.25417 +0.2751 0.25 0.229999 0.254042 +0.2752 0.25 0.229904 0.253914 +0.2753 0.25 0.22981 0.253786 +0.2754 0.25 0.229715 0.253657 +0.2755 0.25 0.229621 0.253528 +0.2756 0.25 0.229526 0.253398 +0.2757 0.25 0.229432 0.253268 +0.2758 0.25 0.229338 0.253137 +0.2759 0.25 0.229243 0.253007 +0.276 0.25 0.229149 0.252875 +0.2761 0.25 0.229055 0.252744 +0.2762 0.25 0.228961 0.252612 +0.2763 0.25 0.228867 0.25248 +0.2764 0.25 0.228773 0.252347 +0.2765 0.25 0.228679 0.252214 +0.2766 0.25 0.228585 0.252081 +0.2767 0.25 0.228491 0.251947 +0.2768 0.25 0.228397 0.251814 +0.2769 0.25 0.228304 0.25168 +0.277 0.25 0.22821 0.251545 +0.2771 0.25 0.228116 0.251411 +0.2772 0.25 0.228023 0.251276 +0.2773 0.25 0.227929 0.251141 +0.2774 0.25 0.227836 0.251006 +0.2775 0.25 0.227742 0.250871 +0.2776 0.25 0.227649 0.250735 +0.2777 0.25 0.227555 0.250599 +0.2778 0.25 0.227462 0.250463 +0.2779 0.25 0.227369 0.250327 +0.278 0.25 0.227276 0.250191 +0.2781 0.25 0.227183 0.250055 +0.2782 0.25 0.22709 0.249918 +0.2783 0.25 0.226997 0.249782 +0.2784 0.25 0.226904 0.249645 +0.2785 0.25 0.226811 0.249508 +0.2786 0.25 0.226718 0.249371 +0.2787 0.25 0.226626 0.249234 +0.2788 0.25 0.226533 0.249097 +0.2789 0.25 0.22644 0.24896 +0.279 0.25 0.226348 0.248823 +0.2791 0.25 0.226256 0.248686 +0.2792 0.25 0.226163 0.248549 +0.2793 0.25 0.226071 0.248412 +0.2794 0.25 0.225979 0.248275 +0.2795 0.25 0.225886 0.248138 +0.2796 0.25 0.225794 0.248001 +0.2797 0.25 0.225702 0.247864 +0.2798 0.25 0.22561 0.247727 +0.2799 0.25 0.225518 0.24759 +0.28 0.25 0.225427 0.247454 +0.2801 0.25 0.225335 0.247317 +0.2802 0.25 0.225243 0.247181 +0.2803 0.25 0.225151 0.247044 +0.2804 0.25 0.22506 0.246908 +0.2805 0.25 0.224968 0.246772 +0.2806 0.25 0.224877 0.246636 +0.2807 0.25 0.224786 0.2465 +0.2808 0.25 0.224694 0.246364 +0.2809 0.25 0.224603 0.246229 +0.281 0.25 0.224512 0.246093 +0.2811 0.25 0.224421 0.245958 +0.2812 0.25 0.22433 0.245823 +0.2813 0.25 0.224239 0.245689 +0.2814 0.25 0.224148 0.245554 +0.2815 0.25 0.224058 0.24542 +0.2816 0.25 0.223967 0.245286 +0.2817 0.25 0.223876 0.245153 +0.2818 0.25 0.223786 0.245019 +0.2819 0.25 0.223696 0.244886 +0.282 0.25 0.223605 0.244754 +0.2821 0.25 0.223515 0.244621 +0.2822 0.25 0.223425 0.244489 +0.2823 0.25 0.223335 0.244357 +0.2824 0.25 0.223245 0.244226 +0.2825 0.25 0.223155 0.244095 +0.2826 0.25 0.223065 0.243964 +0.2827 0.25 0.222975 0.243834 +0.2828 0.25 0.222885 0.243704 +0.2829 0.25 0.222796 0.243575 +0.283 0.25 0.222706 0.243446 +0.2831 0.25 0.222617 0.243317 +0.2832 0.25 0.222527 0.243189 +0.2833 0.25 0.222438 0.243061 +0.2834 0.25 0.222349 0.242934 +0.2835 0.25 0.22226 0.242807 +0.2836 0.25 0.222171 0.242681 +0.2837 0.25 0.222082 0.242555 +0.2838 0.25 0.221993 0.24243 +0.2839 0.25 0.221904 0.242305 +0.284 0.25 0.221816 0.242181 +0.2841 0.25 0.221727 0.242057 +0.2842 0.25 0.221639 0.241934 +0.2843 0.25 0.22155 0.241811 +0.2844 0.25 0.221462 0.241689 +0.2845 0.25 0.221374 0.241568 +0.2846 0.25 0.221286 0.241447 +0.2847 0.25 0.221198 0.241326 +0.2848 0.25 0.22111 0.241207 +0.2849 0.25 0.221022 0.241088 +0.285 0.25 0.220934 0.240969 +0.2851 0.25 0.220846 0.240851 +0.2852 0.25 0.220759 0.240734 +0.2853 0.25 0.220671 0.240618 +0.2854 0.25 0.220584 0.240502 +0.2855 0.25 0.220497 0.240387 +0.2856 0.25 0.22041 0.240272 +0.2857 0.25 0.220323 0.240158 +0.2858 0.25 0.220236 0.240045 +0.2859 0.25 0.220149 0.239933 +0.286 0.25 0.220062 0.239821 +0.2861 0.25 0.219975 0.239711 +0.2862 0.25 0.219889 0.2396 +0.2863 0.25 0.219802 0.239491 +0.2864 0.25 0.219716 0.239382 +0.2865 0.25 0.219629 0.239275 +0.2866 0.25 0.219543 0.239168 +0.2867 0.25 0.219457 0.239061 +0.2868 0.25 0.219371 0.238956 +0.2869 0.25 0.219285 0.238851 +0.287 0.25 0.2192 0.238747 +0.2871 0.25 0.219114 0.238644 +0.2872 0.25 0.219028 0.238542 +0.2873 0.25 0.218943 0.238441 +0.2874 0.25 0.218858 0.23834 +0.2875 0.25 0.218772 0.238241 +0.2876 0.25 0.218687 0.238142 +0.2877 0.25 0.218602 0.238044 +0.2878 0.25 0.218517 0.237947 +0.2879 0.25 0.218432 0.237851 +0.288 0.25 0.218348 0.237756 +0.2881 0.25 0.218263 0.237662 +0.2882 0.25 0.218179 0.237569 +0.2883 0.25 0.218094 0.237476 +0.2884 0.25 0.21801 0.237385 +0.2885 0.25 0.217926 0.237294 +0.2886 0.25 0.217842 0.237205 +0.2887 0.25 0.217758 0.237116 +0.2888 0.25 0.217674 0.237029 +0.2889 0.25 0.21759 0.236942 +0.289 0.25 0.217507 0.236857 +0.2891 0.25 0.217423 0.236772 +0.2892 0.25 0.21734 0.236688 +0.2893 0.25 0.217257 0.236606 +0.2894 0.25 0.217173 0.236524 +0.2895 0.25 0.21709 0.236444 +0.2896 0.25 0.217007 0.236364 +0.2897 0.25 0.216925 0.236286 +0.2898 0.25 0.216842 0.236208 +0.2899 0.25 0.216759 0.236132 +0.29 0.25 0.216677 0.236057 +0.2901 0.25 0.216595 0.235982 +0.2902 0.25 0.216512 0.235909 +0.2903 0.25 0.21643 0.235837 +0.2904 0.25 0.216348 0.235766 +0.2905 0.25 0.216266 0.235696 +0.2906 0.25 0.216185 0.235627 +0.2907 0.25 0.216103 0.23556 +0.2908 0.25 0.216022 0.235493 +0.2909 0.25 0.21594 0.235428 +0.291 0.25 0.215859 0.235363 +0.2911 0.25 0.215778 0.2353 +0.2912 0.25 0.215697 0.235238 +0.2913 0.25 0.215616 0.235177 +0.2914 0.25 0.215535 0.235117 +0.2915 0.25 0.215455 0.235059 +0.2916 0.25 0.215374 0.235001 +0.2917 0.25 0.215294 0.234945 +0.2918 0.25 0.215213 0.23489 +0.2919 0.25 0.215133 0.234836 +0.292 0.25 0.215053 0.234783 +0.2921 0.25 0.214973 0.234732 +0.2922 0.25 0.214894 0.234681 +0.2923 0.25 0.214814 0.234632 +0.2924 0.25 0.214735 0.234584 +0.2925 0.25 0.214655 0.234538 +0.2926 0.25 0.214576 0.234492 +0.2927 0.25 0.214497 0.234448 +0.2928 0.25 0.214418 0.234405 +0.2929 0.25 0.214339 0.234363 +0.293 0.25 0.21426 0.234322 +0.2931 0.25 0.214182 0.234283 +0.2932 0.25 0.214103 0.234244 +0.2933 0.25 0.214025 0.234207 +0.2934 0.25 0.213947 0.234172 +0.2935 0.25 0.213869 0.234137 +0.2936 0.25 0.213791 0.234104 +0.2937 0.25 0.213713 0.234072 +0.2938 0.25 0.213636 0.234041 +0.2939 0.25 0.213558 0.234012 +0.294 0.25 0.213481 0.233984 +0.2941 0.25 0.213403 0.233957 +0.2942 0.25 0.213326 0.233931 +0.2943 0.25 0.213249 0.233907 +0.2944 0.25 0.213173 0.233884 +0.2945 0.25 0.213096 0.233862 +0.2946 0.25 0.213019 0.233842 +0.2947 0.25 0.212943 0.233823 +0.2948 0.25 0.212867 0.233805 +0.2949 0.25 0.212791 0.233788 +0.295 0.25 0.212715 0.233773 +0.2951 0.25 0.212639 0.233759 +0.2952 0.25 0.212563 0.233746 +0.2953 0.25 0.212487 0.233735 +0.2954 0.25 0.212412 0.233724 +0.2955 0.25 0.212337 0.233716 +0.2956 0.25 0.212262 0.233708 +0.2957 0.25 0.212187 0.233702 +0.2958 0.25 0.212112 0.233697 +0.2959 0.25 0.212037 0.233693 +0.296 0.25 0.211963 0.233691 +0.2961 0.25 0.211888 0.23369 +0.2962 0.25 0.211814 0.233691 +0.2963 0.25 0.21174 0.233692 +0.2964 0.25 0.211666 0.233695 +0.2965 0.25 0.211592 0.2337 +0.2966 0.25 0.211518 0.233705 +0.2967 0.25 0.211445 0.233712 +0.2968 0.25 0.211371 0.23372 +0.2969 0.25 0.211298 0.23373 +0.297 0.25 0.211225 0.233741 +0.2971 0.25 0.211152 0.233753 +0.2972 0.25 0.211079 0.233767 +0.2973 0.25 0.211007 0.233781 +0.2974 0.25 0.210934 0.233798 +0.2975 0.25 0.210862 0.233815 +0.2976 0.25 0.21079 0.233834 +0.2977 0.25 0.210718 0.233854 +0.2978 0.25 0.210646 0.233876 +0.2979 0.25 0.210574 0.233898 +0.298 0.25 0.210503 0.233922 +0.2981 0.25 0.210431 0.233948 +0.2982 0.25 0.21036 0.233974 +0.2983 0.25 0.210289 0.234003 +0.2984 0.25 0.210218 0.234032 +0.2985 0.25 0.210147 0.234062 +0.2986 0.25 0.210077 0.234094 +0.2987 0.25 0.210006 0.234128 +0.2988 0.25 0.209936 0.234162 +0.2989 0.25 0.209866 0.234198 +0.299 0.25 0.209796 0.234235 +0.2991 0.25 0.209726 0.234274 +0.2992 0.25 0.209656 0.234314 +0.2993 0.25 0.209587 0.234355 +0.2994 0.25 0.209517 0.234397 +0.2995 0.25 0.209448 0.234441 +0.2996 0.25 0.209379 0.234486 +0.2997 0.25 0.20931 0.234532 +0.2998 0.25 0.209242 0.234579 +0.2999 0.25 0.209173 0.234628 +0.3 0.25 0.209105 0.234678 +0.3001 0.25 0.209036 0.23473 +0.3002 0.25 0.208968 0.234782 +0.3003 0.25 0.2089 0.234836 +0.3004 0.25 0.208833 0.234891 +0.3005 0.25 0.208765 0.234948 +0.3006 0.25 0.208698 0.235006 +0.3007 0.25 0.208631 0.235064 +0.3008 0.25 0.208563 0.235125 +0.3009 0.25 0.208497 0.235186 +0.301 0.25 0.20843 0.235249 +0.3011 0.25 0.208363 0.235313 +0.3012 0.25 0.208297 0.235378 +0.3013 0.25 0.208231 0.235444 +0.3014 0.25 0.208165 0.235512 +0.3015 0.25 0.208099 0.235581 +0.3016 0.25 0.208033 0.235651 +0.3017 0.25 0.207967 0.235722 +0.3018 0.25 0.207902 0.235795 +0.3019 0.25 0.207837 0.235868 +0.302 0.25 0.207772 0.235943 +0.3021 0.25 0.207707 0.236019 +0.3022 0.25 0.207642 0.236097 +0.3023 0.25 0.207578 0.236175 +0.3024 0.25 0.207513 0.236255 +0.3025 0.25 0.207449 0.236336 +0.3026 0.25 0.207385 0.236418 +0.3027 0.25 0.207321 0.236501 +0.3028 0.25 0.207258 0.236585 +0.3029 0.25 0.207194 0.236671 +0.303 0.25 0.207131 0.236757 +0.3031 0.25 0.207068 0.236845 +0.3032 0.25 0.207005 0.236934 +0.3033 0.25 0.206942 0.237024 +0.3034 0.25 0.20688 0.237115 +0.3035 0.25 0.206817 0.237207 +0.3036 0.25 0.206755 0.237301 +0.3037 0.25 0.206693 0.237395 +0.3038 0.25 0.206631 0.237491 +0.3039 0.25 0.206569 0.237588 +0.304 0.25 0.206508 0.237685 +0.3041 0.25 0.206446 0.237784 +0.3042 0.25 0.206385 0.237884 +0.3043 0.25 0.206324 0.237985 +0.3044 0.25 0.206264 0.238087 +0.3045 0.25 0.206203 0.23819 +0.3046 0.25 0.206142 0.238294 +0.3047 0.25 0.206082 0.238399 +0.3048 0.25 0.206022 0.238506 +0.3049 0.25 0.205962 0.238613 +0.305 0.25 0.205903 0.238721 +0.3051 0.25 0.205843 0.23883 +0.3052 0.25 0.205784 0.23894 +0.3053 0.25 0.205725 0.239052 +0.3054 0.25 0.205666 0.239164 +0.3055 0.25 0.205607 0.239277 +0.3056 0.25 0.205548 0.239391 +0.3057 0.25 0.20549 0.239506 +0.3058 0.25 0.205432 0.239622 +0.3059 0.25 0.205374 0.239739 +0.306 0.25 0.205316 0.239857 +0.3061 0.25 0.205258 0.239976 +0.3062 0.25 0.205201 0.240096 +0.3063 0.25 0.205143 0.240216 +0.3064 0.25 0.205086 0.240338 +0.3065 0.25 0.20503 0.24046 +0.3066 0.25 0.204973 0.240584 +0.3067 0.25 0.204916 0.240708 +0.3068 0.25 0.20486 0.240833 +0.3069 0.25 0.204804 0.240959 +0.307 0.25 0.204748 0.241086 +0.3071 0.25 0.204692 0.241213 +0.3072 0.25 0.204637 0.241342 +0.3073 0.25 0.204581 0.241471 +0.3074 0.25 0.204526 0.241601 +0.3075 0.25 0.204471 0.241732 +0.3076 0.25 0.204416 0.241863 +0.3077 0.25 0.204362 0.241996 +0.3078 0.25 0.204308 0.242129 +0.3079 0.25 0.204253 0.242263 +0.308 0.25 0.204199 0.242398 +0.3081 0.25 0.204146 0.242533 +0.3082 0.25 0.204092 0.242669 +0.3083 0.25 0.204039 0.242806 +0.3084 0.25 0.203985 0.242944 +0.3085 0.25 0.203932 0.243082 +0.3086 0.25 0.20388 0.243221 +0.3087 0.25 0.203827 0.243361 +0.3088 0.25 0.203775 0.243501 +0.3089 0.25 0.203722 0.243642 +0.309 0.25 0.20367 0.243784 +0.3091 0.25 0.203619 0.243926 +0.3092 0.25 0.203567 0.244069 +0.3093 0.25 0.203516 0.244212 +0.3094 0.25 0.203464 0.244356 +0.3095 0.25 0.203413 0.244501 +0.3096 0.25 0.203363 0.244646 +0.3097 0.25 0.203312 0.244792 +0.3098 0.25 0.203262 0.244939 +0.3099 0.25 0.203211 0.245086 +0.31 0.25 0.203161 0.245233 +0.3101 0.25 0.203112 0.245381 +0.3102 0.25 0.203062 0.24553 +0.3103 0.25 0.203013 0.245679 +0.3104 0.25 0.202964 0.245829 +0.3105 0.25 0.202915 0.245979 +0.3106 0.25 0.202866 0.246129 +0.3107 0.25 0.202817 0.24628 +0.3108 0.25 0.202769 0.246432 +0.3109 0.25 0.202721 0.246584 +0.311 0.25 0.202673 0.246736 +0.3111 0.25 0.202625 0.246889 +0.3112 0.25 0.202578 0.247042 +0.3113 0.25 0.202531 0.247195 +0.3114 0.25 0.202483 0.247349 +0.3115 0.25 0.202437 0.247504 +0.3116 0.25 0.20239 0.247658 +0.3117 0.25 0.202343 0.247813 +0.3118 0.25 0.202297 0.247969 +0.3119 0.25 0.202251 0.248124 +0.312 0.25 0.202205 0.24828 +0.3121 0.25 0.20216 0.248437 +0.3122 0.25 0.202114 0.248593 +0.3123 0.25 0.202069 0.24875 +0.3124 0.25 0.202024 0.248907 +0.3125 0.25 0.20198 0.249065 +0.3126 0.25 0.201935 0.249222 +0.3127 0.25 0.201891 0.24938 +0.3128 0.25 0.201847 0.249538 +0.3129 0.25 0.201803 0.249696 +0.313 0.25 0.201759 0.249855 +0.3131 0.25 0.201716 0.250014 +0.3132 0.25 0.201672 0.250172 +0.3133 0.25 0.201629 0.250331 +0.3134 0.25 0.201586 0.25049 +0.3135 0.25 0.201544 0.25065 +0.3136 0.25 0.201502 0.250809 +0.3137 0.25 0.201459 0.250969 +0.3138 0.25 0.201417 0.251128 +0.3139 0.25 0.201376 0.251288 +0.314 0.25 0.201334 0.251448 +0.3141 0.25 0.201293 0.251607 +0.3142 0.25 0.201252 0.251767 +0.3143 0.25 0.201211 0.251927 +0.3144 0.25 0.20117 0.252087 +0.3145 0.25 0.20113 0.252247 +0.3146 0.25 0.20109 0.252407 +0.3147 0.25 0.20105 0.252567 +0.3148 0.25 0.20101 0.252727 +0.3149 0.25 0.200971 0.252887 +0.315 0.25 0.200931 0.253046 +0.3151 0.25 0.200892 0.253206 +0.3152 0.25 0.200853 0.253366 +0.3153 0.25 0.200815 0.253525 +0.3154 0.25 0.200776 0.253685 +0.3155 0.25 0.200738 0.253844 +0.3156 0.25 0.2007 0.254003 +0.3157 0.25 0.200663 0.254163 +0.3158 0.25 0.200625 0.254321 +0.3159 0.25 0.200588 0.25448 +0.316 0.25 0.200551 0.254639 +0.3161 0.25 0.200514 0.254797 +0.3162 0.25 0.200477 0.254956 +0.3163 0.25 0.200441 0.255114 +0.3164 0.25 0.200405 0.255271 +0.3165 0.25 0.200369 0.255429 +0.3166 0.25 0.200333 0.255586 +0.3167 0.25 0.200298 0.255743 +0.3168 0.25 0.200263 0.2559 +0.3169 0.25 0.200228 0.256057 +0.317 0.25 0.200193 0.256213 +0.3171 0.25 0.200158 0.256369 +0.3172 0.25 0.200124 0.256524 +0.3173 0.25 0.20009 0.256679 +0.3174 0.25 0.200056 0.256834 +0.3175 0.25 0.200023 0.256989 +0.3176 0.25 0.199989 0.257143 +0.3177 0.25 0.199956 0.257297 +0.3178 0.25 0.199923 0.25745 +0.3179 0.25 0.199891 0.257603 +0.318 0.25 0.199858 0.257756 +0.3181 0.25 0.199826 0.257908 +0.3182 0.25 0.199794 0.258059 +0.3183 0.25 0.199762 0.258211 +0.3184 0.25 0.199731 0.258361 +0.3185 0.25 0.199699 0.258512 +0.3186 0.25 0.199668 0.258661 +0.3187 0.25 0.199638 0.258811 +0.3188 0.25 0.199607 0.258959 +0.3189 0.25 0.199577 0.259108 +0.319 0.25 0.199547 0.259255 +0.3191 0.25 0.199517 0.259403 +0.3192 0.25 0.199487 0.259549 +0.3193 0.25 0.199458 0.259695 +0.3194 0.25 0.199429 0.259841 +0.3195 0.25 0.1994 0.259985 +0.3196 0.25 0.199371 0.26013 +0.3197 0.25 0.199343 0.260273 +0.3198 0.25 0.199315 0.260416 +0.3199 0.25 0.199287 0.260559 +0.32 0.25 0.199259 0.2607 +0.3201 0.25 0.199232 0.260841 +0.3202 0.25 0.199204 0.260982 +0.3203 0.25 0.199177 0.261121 +0.3204 0.25 0.199151 0.26126 +0.3205 0.25 0.199124 0.261398 +0.3206 0.25 0.199098 0.261536 +0.3207 0.25 0.199072 0.261673 +0.3208 0.25 0.199046 0.261809 +0.3209 0.25 0.199021 0.261944 +0.321 0.25 0.198995 0.262078 +0.3211 0.25 0.19897 0.262212 +0.3212 0.25 0.198946 0.262345 +0.3213 0.25 0.198921 0.262477 +0.3214 0.25 0.198897 0.262608 +0.3215 0.25 0.198873 0.262739 +0.3216 0.25 0.198849 0.262869 +0.3217 0.25 0.198825 0.262997 +0.3218 0.25 0.198802 0.263125 +0.3219 0.25 0.198779 0.263253 +0.322 0.25 0.198756 0.263379 +0.3221 0.25 0.198733 0.263504 +0.3222 0.25 0.198711 0.263629 +0.3223 0.25 0.198689 0.263752 +0.3224 0.25 0.198667 0.263875 +0.3225 0.25 0.198646 0.263996 +0.3226 0.25 0.198624 0.264117 +0.3227 0.25 0.198603 0.264237 +0.3228 0.25 0.198582 0.264356 +0.3229 0.25 0.198562 0.264474 +0.323 0.25 0.198541 0.264591 +0.3231 0.25 0.198521 0.264707 +0.3232 0.25 0.198502 0.264821 +0.3233 0.25 0.198482 0.264935 +0.3234 0.25 0.198463 0.265048 +0.3235 0.25 0.198444 0.26516 +0.3236 0.25 0.198425 0.265271 +0.3237 0.25 0.198406 0.265381 +0.3238 0.25 0.198388 0.26549 +0.3239 0.25 0.19837 0.265597 +0.324 0.25 0.198352 0.265704 +0.3241 0.25 0.198334 0.265809 +0.3242 0.25 0.198317 0.265914 +0.3243 0.25 0.1983 0.266017 +0.3244 0.25 0.198283 0.266119 +0.3245 0.25 0.198267 0.26622 +0.3246 0.25 0.19825 0.26632 +0.3247 0.25 0.198234 0.266419 +0.3248 0.25 0.198219 0.266517 +0.3249 0.25 0.198203 0.266614 +0.325 0.25 0.198188 0.266709 +0.3251 0.25 0.198173 0.266803 +0.3252 0.25 0.198158 0.266896 +0.3253 0.25 0.198143 0.266988 +0.3254 0.25 0.198129 0.267079 +0.3255 0.25 0.198115 0.267168 +0.3256 0.25 0.198102 0.267256 +0.3257 0.25 0.198088 0.267344 +0.3258 0.25 0.198075 0.267429 +0.3259 0.25 0.198062 0.267514 +0.326 0.25 0.198049 0.267597 +0.3261 0.25 0.198037 0.267679 +0.3262 0.25 0.198025 0.26776 +0.3263 0.25 0.198013 0.26784 +0.3264 0.25 0.198001 0.267918 +0.3265 0.25 0.19799 0.267995 +0.3266 0.25 0.197978 0.268071 +0.3267 0.25 0.197968 0.268145 +0.3268 0.25 0.197957 0.268218 +0.3269 0.25 0.197947 0.26829 +0.327 0.25 0.197937 0.268361 +0.3271 0.25 0.197927 0.26843 +0.3272 0.25 0.197917 0.268498 +0.3273 0.25 0.197908 0.268565 +0.3274 0.25 0.197899 0.26863 +0.3275 0.25 0.19789 0.268694 +0.3276 0.25 0.197882 0.268756 +0.3277 0.25 0.197873 0.268817 +0.3278 0.25 0.197865 0.268877 +0.3279 0.25 0.197858 0.268936 +0.328 0.25 0.19785 0.268993 +0.3281 0.25 0.197843 0.269048 +0.3282 0.25 0.197836 0.269103 +0.3283 0.25 0.197829 0.269155 +0.3284 0.25 0.197823 0.269207 +0.3285 0.25 0.197817 0.269257 +0.3286 0.25 0.197811 0.269306 +0.3287 0.25 0.197805 0.269353 +0.3288 0.25 0.1978 0.269399 +0.3289 0.25 0.197795 0.269443 +0.329 0.25 0.19779 0.269486 +0.3291 0.25 0.197786 0.269528 +0.3292 0.25 0.197782 0.269568 +0.3293 0.25 0.197778 0.269607 +0.3294 0.25 0.197774 0.269644 +0.3295 0.25 0.19777 0.26968 +0.3296 0.25 0.197767 0.269714 +0.3297 0.25 0.197764 0.269747 +0.3298 0.25 0.197762 0.269779 +0.3299 0.25 0.197759 0.269809 +0.33 0.25 0.197757 0.269837 +0.3301 0.25 0.197755 0.269864 +0.3302 0.25 0.197754 0.26989 +0.3303 0.25 0.197753 0.269914 +0.3304 0.25 0.197752 0.269936 +0.3305 0.25 0.197751 0.269957 +0.3306 0.25 0.19775 0.269977 +0.3307 0.25 0.19775 0.269995 +0.3308 0.25 0.19775 0.270012 +0.3309 0.25 0.197751 0.270027 +0.331 0.25 0.197751 0.27004 +0.3311 0.25 0.197752 0.270053 +0.3312 0.25 0.197753 0.270063 +0.3313 0.25 0.197755 0.270072 +0.3314 0.25 0.197756 0.27008 +0.3315 0.25 0.197758 0.270086 +0.3316 0.25 0.197761 0.27009 +0.3317 0.25 0.197763 0.270093 +0.3318 0.25 0.197766 0.270095 +0.3319 0.25 0.197769 0.270095 +0.332 0.25 0.197772 0.270093 +0.3321 0.25 0.197776 0.27009 +0.3322 0.25 0.19778 0.270086 +0.3323 0.25 0.197784 0.27008 +0.3324 0.25 0.197789 0.270072 +0.3325 0.25 0.197793 0.270063 +0.3326 0.25 0.197798 0.270052 +0.3327 0.25 0.197804 0.27004 +0.3328 0.25 0.197809 0.270026 +0.3329 0.25 0.197815 0.270011 +0.333 0.25 0.197821 0.269994 +0.3331 0.25 0.197828 0.269976 +0.3332 0.25 0.197834 0.269956 +0.3333 0.25 0.197841 0.269934 +0.3334 0.25 0.197849 0.269911 +0.3335 0.25 0.197856 0.269887 +0.3336 0.25 0.197864 0.269861 +0.3337 0.25 0.197872 0.269833 +0.3338 0.25 0.19788 0.269804 +0.3339 0.25 0.197889 0.269773 +0.334 0.25 0.197898 0.269741 +0.3341 0.25 0.197907 0.269708 +0.3342 0.25 0.197917 0.269672 +0.3343 0.25 0.197927 0.269636 +0.3344 0.25 0.197937 0.269597 +0.3345 0.25 0.197947 0.269557 +0.3346 0.25 0.197958 0.269516 +0.3347 0.25 0.197968 0.269473 +0.3348 0.25 0.19798 0.269429 +0.3349 0.25 0.197991 0.269383 +0.335 0.25 0.198003 0.269335 +0.3351 0.25 0.198015 0.269286 +0.3352 0.25 0.198027 0.269236 +0.3353 0.25 0.19804 0.269184 +0.3354 0.25 0.198053 0.26913 +0.3355 0.25 0.198066 0.269075 +0.3356 0.25 0.198079 0.269019 +0.3357 0.25 0.198093 0.268961 +0.3358 0.25 0.198107 0.268901 +0.3359 0.25 0.198121 0.26884 +0.336 0.25 0.198136 0.268778 +0.3361 0.25 0.198151 0.268714 +0.3362 0.25 0.198166 0.268648 +0.3363 0.25 0.198181 0.268581 +0.3364 0.25 0.198197 0.268513 +0.3365 0.25 0.198213 0.268443 +0.3366 0.25 0.198229 0.268371 +0.3367 0.25 0.198246 0.268298 +0.3368 0.25 0.198263 0.268224 +0.3369 0.25 0.19828 0.268148 +0.337 0.25 0.198298 0.268071 +0.3371 0.25 0.198315 0.267992 +0.3372 0.25 0.198333 0.267912 +0.3373 0.25 0.198352 0.26783 +0.3374 0.25 0.19837 0.267747 +0.3375 0.25 0.198389 0.267662 +0.3376 0.25 0.198408 0.267576 +0.3377 0.25 0.198428 0.267489 +0.3378 0.25 0.198448 0.2674 +0.3379 0.25 0.198468 0.26731 +0.338 0.25 0.198488 0.267218 +0.3381 0.25 0.198509 0.267125 +0.3382 0.25 0.19853 0.26703 +0.3383 0.25 0.198551 0.266934 +0.3384 0.25 0.198572 0.266837 +0.3385 0.25 0.198594 0.266738 +0.3386 0.25 0.198616 0.266638 +0.3387 0.25 0.198639 0.266537 +0.3388 0.25 0.198661 0.266434 +0.3389 0.25 0.198684 0.26633 +0.339 0.25 0.198707 0.266224 +0.3391 0.25 0.198731 0.266117 +0.3392 0.25 0.198755 0.266009 +0.3393 0.25 0.198779 0.265899 +0.3394 0.25 0.198803 0.265788 +0.3395 0.25 0.198828 0.265676 +0.3396 0.25 0.198853 0.265562 +0.3397 0.25 0.198878 0.265448 +0.3398 0.25 0.198904 0.265331 +0.3399 0.25 0.19893 0.265214 +0.34 0.25 0.198956 0.265095 +0.3401 0.25 0.198983 0.264975 +0.3402 0.25 0.199009 0.264854 +0.3403 0.25 0.199036 0.264731 +0.3404 0.25 0.199064 0.264607 +0.3405 0.25 0.199091 0.264482 +0.3406 0.25 0.199119 0.264355 +0.3407 0.25 0.199148 0.264228 +0.3408 0.25 0.199176 0.264099 +0.3409 0.25 0.199205 0.263969 +0.341 0.25 0.199234 0.263837 +0.3411 0.25 0.199263 0.263705 +0.3412 0.25 0.199293 0.263571 +0.3413 0.25 0.199323 0.263436 +0.3414 0.25 0.199354 0.2633 +0.3415 0.25 0.199384 0.263163 +0.3416 0.25 0.199415 0.263024 +0.3417 0.25 0.199446 0.262885 +0.3418 0.25 0.199478 0.262744 +0.3419 0.25 0.19951 0.262602 +0.342 0.25 0.199542 0.262459 +0.3421 0.25 0.199574 0.262315 +0.3422 0.25 0.199607 0.26217 +0.3423 0.25 0.19964 0.262023 +0.3424 0.25 0.199673 0.261876 +0.3425 0.25 0.199707 0.261727 +0.3426 0.25 0.19974 0.261578 +0.3427 0.25 0.199775 0.261427 +0.3428 0.25 0.199809 0.261275 +0.3429 0.25 0.199844 0.261123 +0.343 0.25 0.199879 0.260969 +0.3431 0.25 0.199914 0.260814 +0.3432 0.25 0.19995 0.260658 +0.3433 0.25 0.199986 0.260501 +0.3434 0.25 0.200022 0.260344 +0.3435 0.25 0.200059 0.260185 +0.3436 0.25 0.200096 0.260025 +0.3437 0.25 0.200133 0.259864 +0.3438 0.25 0.20017 0.259702 +0.3439 0.25 0.200208 0.25954 +0.344 0.25 0.200246 0.259376 +0.3441 0.25 0.200285 0.259212 +0.3442 0.25 0.200323 0.259046 +0.3443 0.25 0.200362 0.25888 +0.3444 0.25 0.200402 0.258713 +0.3445 0.25 0.200441 0.258545 +0.3446 0.25 0.200481 0.258376 +0.3447 0.25 0.200521 0.258206 +0.3448 0.25 0.200562 0.258036 +0.3449 0.25 0.200603 0.257864 +0.345 0.25 0.200644 0.257692 +0.3451 0.25 0.200685 0.257519 +0.3452 0.25 0.200727 0.257345 +0.3453 0.25 0.200769 0.25717 +0.3454 0.25 0.200811 0.256995 +0.3455 0.25 0.200854 0.256819 +0.3456 0.25 0.200897 0.256642 +0.3457 0.25 0.20094 0.256464 +0.3458 0.25 0.200984 0.256286 +0.3459 0.25 0.201027 0.256107 +0.346 0.25 0.201072 0.255927 +0.3461 0.25 0.201116 0.255747 +0.3462 0.25 0.201161 0.255566 +0.3463 0.25 0.201206 0.255384 +0.3464 0.25 0.201251 0.255201 +0.3465 0.25 0.201297 0.255018 +0.3466 0.25 0.201343 0.254835 +0.3467 0.25 0.201389 0.25465 +0.3468 0.25 0.201436 0.254465 +0.3469 0.25 0.201483 0.25428 +0.347 0.25 0.20153 0.254094 +0.3471 0.25 0.201577 0.253907 +0.3472 0.25 0.201625 0.25372 +0.3473 0.25 0.201673 0.253532 +0.3474 0.25 0.201722 0.253344 +0.3475 0.25 0.20177 0.253155 +0.3476 0.25 0.201819 0.252966 +0.3477 0.25 0.201869 0.252776 +0.3478 0.25 0.201918 0.252586 +0.3479 0.25 0.201968 0.252396 +0.348 0.25 0.202019 0.252205 +0.3481 0.25 0.202069 0.252013 +0.3482 0.25 0.20212 0.251821 +0.3483 0.25 0.202171 0.251629 +0.3484 0.25 0.202223 0.251436 +0.3485 0.25 0.202275 0.251243 +0.3486 0.25 0.202327 0.25105 +0.3487 0.25 0.202379 0.250856 +0.3488 0.25 0.202432 0.250662 +0.3489 0.25 0.202485 0.250467 +0.349 0.25 0.202538 0.250273 +0.3491 0.25 0.202592 0.250078 +0.3492 0.25 0.202646 0.249882 +0.3493 0.25 0.2027 0.249687 +0.3494 0.25 0.202755 0.249491 +0.3495 0.25 0.20281 0.249295 +0.3496 0.25 0.202865 0.249098 +0.3497 0.25 0.20292 0.248902 +0.3498 0.25 0.202976 0.248705 +0.3499 0.25 0.203032 0.248508 +0.35 0.25 0.203089 0.248311 +0.3501 0.25 0.203146 0.248114 +0.3502 0.25 0.203203 0.247917 +0.3503 0.25 0.20326 0.247719 +0.3504 0.25 0.203318 0.247522 +0.3505 0.25 0.203376 0.247324 +0.3506 0.25 0.203434 0.247126 +0.3507 0.25 0.203493 0.246929 +0.3508 0.25 0.203551 0.246731 +0.3509 0.25 0.203611 0.246533 +0.351 0.25 0.20367 0.246335 +0.3511 0.25 0.20373 0.246137 +0.3512 0.25 0.20379 0.245939 +0.3513 0.25 0.203851 0.245741 +0.3514 0.25 0.203912 0.245543 +0.3515 0.25 0.203973 0.245345 +0.3516 0.25 0.204034 0.245148 +0.3517 0.25 0.204096 0.24495 +0.3518 0.25 0.204158 0.244752 +0.3519 0.25 0.20422 0.244555 +0.352 0.25 0.204283 0.244357 +0.3521 0.25 0.204346 0.24416 +0.3522 0.25 0.204409 0.243963 +0.3523 0.25 0.204473 0.243766 +0.3524 0.25 0.204537 0.243569 +0.3525 0.25 0.204601 0.243373 +0.3526 0.25 0.204665 0.243176 +0.3527 0.25 0.20473 0.24298 +0.3528 0.25 0.204795 0.242784 +0.3529 0.25 0.204861 0.242589 +0.353 0.25 0.204927 0.242393 +0.3531 0.25 0.204993 0.242198 +0.3532 0.25 0.205059 0.242003 +0.3533 0.25 0.205126 0.241809 +0.3534 0.25 0.205193 0.241615 +0.3535 0.25 0.20526 0.241421 +0.3536 0.25 0.205328 0.241227 +0.3537 0.25 0.205396 0.241034 +0.3538 0.25 0.205464 0.240841 +0.3539 0.25 0.205533 0.240649 +0.354 0.25 0.205602 0.240457 +0.3541 0.25 0.205671 0.240266 +0.3542 0.25 0.205741 0.240074 +0.3543 0.25 0.205811 0.239884 +0.3544 0.25 0.205881 0.239694 +0.3545 0.25 0.205951 0.239504 +0.3546 0.25 0.206022 0.239315 +0.3547 0.25 0.206093 0.239126 +0.3548 0.25 0.206165 0.238938 +0.3549 0.25 0.206237 0.23875 +0.355 0.25 0.206309 0.238563 +0.3551 0.25 0.206381 0.238377 +0.3552 0.25 0.206454 0.238191 +0.3553 0.25 0.206527 0.238005 +0.3554 0.25 0.2066 0.237821 +0.3555 0.25 0.206674 0.237636 +0.3556 0.25 0.206748 0.237453 +0.3557 0.25 0.206822 0.23727 +0.3558 0.25 0.206897 0.237088 +0.3559 0.25 0.206972 0.236906 +0.356 0.25 0.207047 0.236726 +0.3561 0.25 0.207123 0.236546 +0.3562 0.25 0.207198 0.236366 +0.3563 0.25 0.207275 0.236188 +0.3564 0.25 0.207351 0.23601 +0.3565 0.25 0.207428 0.235833 +0.3566 0.25 0.207505 0.235656 +0.3567 0.25 0.207583 0.235481 +0.3568 0.25 0.20766 0.235306 +0.3569 0.25 0.207738 0.235132 +0.357 0.25 0.207817 0.234959 +0.3571 0.25 0.207896 0.234787 +0.3572 0.25 0.207975 0.234615 +0.3573 0.25 0.208054 0.234445 +0.3574 0.25 0.208134 0.234275 +0.3575 0.25 0.208214 0.234106 +0.3576 0.25 0.208294 0.233938 +0.3577 0.25 0.208375 0.233772 +0.3578 0.25 0.208456 0.233606 +0.3579 0.25 0.208537 0.233441 +0.358 0.25 0.208618 0.233277 +0.3581 0.25 0.2087 0.233113 +0.3582 0.25 0.208783 0.232951 +0.3583 0.25 0.208865 0.23279 +0.3584 0.25 0.208948 0.23263 +0.3585 0.25 0.209031 0.232471 +0.3586 0.25 0.209115 0.232313 +0.3587 0.25 0.209198 0.232156 +0.3588 0.25 0.209283 0.232 +0.3589 0.25 0.209367 0.231846 +0.359 0.25 0.209452 0.231692 +0.3591 0.25 0.209537 0.231539 +0.3592 0.25 0.209622 0.231388 +0.3593 0.25 0.209708 0.231237 +0.3594 0.25 0.209794 0.231088 +0.3595 0.25 0.20988 0.23094 +0.3596 0.25 0.209967 0.230793 +0.3597 0.25 0.210054 0.230648 +0.3598 0.25 0.210141 0.230503 +0.3599 0.25 0.210229 0.23036 +0.36 0.25 0.210317 0.230218 +0.3601 0.25 0.210405 0.230077 +0.3602 0.25 0.210494 0.229937 +0.3603 0.25 0.210583 0.229799 +0.3604 0.25 0.210672 0.229662 +0.3605 0.25 0.210762 0.229526 +0.3606 0.25 0.210852 0.229391 +0.3607 0.25 0.210942 0.229258 +0.3608 0.25 0.211032 0.229126 +0.3609 0.25 0.211123 0.228995 +0.361 0.25 0.211214 0.228866 +0.3611 0.25 0.211306 0.228738 +0.3612 0.25 0.211397 0.228611 +0.3613 0.25 0.21149 0.228486 +0.3614 0.25 0.211582 0.228362 +0.3615 0.25 0.211675 0.22824 +0.3616 0.25 0.211768 0.228119 +0.3617 0.25 0.211861 0.227999 +0.3618 0.25 0.211955 0.227881 +0.3619 0.25 0.212049 0.227764 +0.362 0.25 0.212143 0.227649 +0.3621 0.25 0.212238 0.227535 +0.3622 0.25 0.212333 0.227422 +0.3623 0.25 0.212428 0.227311 +0.3624 0.25 0.212524 0.227202 +0.3625 0.25 0.21262 0.227093 +0.3626 0.25 0.212716 0.226987 +0.3627 0.25 0.212813 0.226882 +0.3628 0.25 0.21291 0.226778 +0.3629 0.25 0.213007 0.226676 +0.363 0.25 0.213104 0.226576 +0.3631 0.25 0.213202 0.226477 +0.3632 0.25 0.2133 0.22638 +0.3633 0.25 0.213399 0.226284 +0.3634 0.25 0.213498 0.22619 +0.3635 0.25 0.213597 0.226097 +0.3636 0.25 0.213696 0.226006 +0.3637 0.25 0.213796 0.225916 +0.3638 0.25 0.213896 0.225829 +0.3639 0.25 0.213997 0.225742 +0.364 0.25 0.214097 0.225658 +0.3641 0.25 0.214198 0.225575 +0.3642 0.25 0.2143 0.225493 +0.3643 0.25 0.214402 0.225414 +0.3644 0.25 0.214504 0.225336 +0.3645 0.25 0.214606 0.225259 +0.3646 0.25 0.214709 0.225185 +0.3647 0.25 0.214812 0.225112 +0.3648 0.25 0.214915 0.22504 +0.3649 0.25 0.215019 0.224971 +0.365 0.25 0.215122 0.224903 +0.3651 0.25 0.215227 0.224837 +0.3652 0.25 0.215331 0.224772 +0.3653 0.25 0.215436 0.22471 +0.3654 0.25 0.215541 0.224649 +0.3655 0.25 0.215647 0.224589 +0.3656 0.25 0.215753 0.224532 +0.3657 0.25 0.215859 0.224476 +0.3658 0.25 0.215966 0.224422 +0.3659 0.25 0.216072 0.22437 +0.366 0.25 0.21618 0.224319 +0.3661 0.25 0.216287 0.224271 +0.3662 0.25 0.216395 0.224224 +0.3663 0.25 0.216503 0.224179 +0.3664 0.25 0.216611 0.224136 +0.3665 0.25 0.21672 0.224094 +0.3666 0.25 0.216829 0.224054 +0.3667 0.25 0.216939 0.224017 +0.3668 0.25 0.217048 0.223981 +0.3669 0.25 0.217158 0.223946 +0.367 0.25 0.217269 0.223914 +0.3671 0.25 0.217379 0.223883 +0.3672 0.25 0.217491 0.223855 +0.3673 0.25 0.217602 0.223828 +0.3674 0.25 0.217713 0.223803 +0.3675 0.25 0.217825 0.22378 +0.3676 0.25 0.217938 0.223758 +0.3677 0.25 0.21805 0.223739 +0.3678 0.25 0.218163 0.223721 +0.3679 0.25 0.218277 0.223706 +0.368 0.25 0.21839 0.223692 +0.3681 0.25 0.218504 0.22368 +0.3682 0.25 0.218618 0.22367 +0.3683 0.25 0.218733 0.223662 +0.3684 0.25 0.218848 0.223655 +0.3685 0.25 0.218963 0.223651 +0.3686 0.25 0.219078 0.223649 +0.3687 0.25 0.219194 0.223648 +0.3688 0.25 0.21931 0.223649 +0.3689 0.25 0.219427 0.223653 +0.369 0.25 0.219543 0.223658 +0.3691 0.25 0.219661 0.223665 +0.3692 0.25 0.219778 0.223674 +0.3693 0.25 0.219896 0.223685 +0.3694 0.25 0.220014 0.223697 +0.3695 0.25 0.220132 0.223712 +0.3696 0.25 0.220251 0.223729 +0.3697 0.25 0.22037 0.223747 +0.3698 0.25 0.220489 0.223768 +0.3699 0.25 0.220609 0.22379 +0.37 0.25 0.220729 0.223815 +0.3701 0.25 0.220849 0.223841 +0.3702 0.25 0.22097 0.223869 +0.3703 0.25 0.221091 0.223899 +0.3704 0.25 0.221212 0.223931 +0.3705 0.25 0.221334 0.223965 +0.3706 0.25 0.221455 0.224001 +0.3707 0.25 0.221578 0.224039 +0.3708 0.25 0.2217 0.224079 +0.3709 0.25 0.221823 0.224121 +0.371 0.25 0.221946 0.224164 +0.3711 0.25 0.22207 0.22421 +0.3712 0.25 0.222194 0.224257 +0.3713 0.25 0.222318 0.224307 +0.3714 0.25 0.222442 0.224358 +0.3715 0.25 0.222567 0.224412 +0.3716 0.25 0.222692 0.224467 +0.3717 0.25 0.222817 0.224524 +0.3718 0.25 0.222943 0.224583 +0.3719 0.25 0.223069 0.224644 +0.372 0.25 0.223196 0.224707 +0.3721 0.25 0.223322 0.224772 +0.3722 0.25 0.223449 0.224839 +0.3723 0.25 0.223577 0.224908 +0.3724 0.25 0.223704 0.224979 +0.3725 0.25 0.223832 0.225051 +0.3726 0.25 0.223961 0.225126 +0.3727 0.25 0.224089 0.225202 +0.3728 0.25 0.224218 0.225281 +0.3729 0.25 0.224347 0.225361 +0.373 0.25 0.224477 0.225443 +0.3731 0.25 0.224607 0.225527 +0.3732 0.25 0.224737 0.225613 +0.3733 0.25 0.224868 0.225701 +0.3734 0.25 0.224999 0.225791 +0.3735 0.25 0.22513 0.225883 +0.3736 0.25 0.225261 0.225976 +0.3737 0.25 0.225393 0.226072 +0.3738 0.25 0.225525 0.226169 +0.3739 0.25 0.225658 0.226268 +0.374 0.25 0.22579 0.22637 +0.3741 0.25 0.225923 0.226473 +0.3742 0.25 0.226057 0.226577 +0.3743 0.25 0.226191 0.226684 +0.3744 0.25 0.226325 0.226793 +0.3745 0.25 0.226459 0.226903 +0.3746 0.25 0.226594 0.227016 +0.3747 0.25 0.226729 0.22713 +0.3748 0.25 0.226864 0.227246 +0.3749 0.25 0.227 0.227363 +0.375 0.25 0.227135 0.227483 +0.3751 0.25 0.227272 0.227605 +0.3752 0.25 0.227408 0.227728 +0.3753 0.25 0.227545 0.227853 +0.3754 0.25 0.227682 0.22798 +0.3755 0.25 0.22782 0.228108 +0.3756 0.25 0.227958 0.228239 +0.3757 0.25 0.228096 0.228371 +0.3758 0.25 0.228235 0.228505 +0.3759 0.25 0.228373 0.228641 +0.376 0.25 0.228512 0.228779 +0.3761 0.25 0.228652 0.228918 +0.3762 0.25 0.228792 0.229059 +0.3763 0.25 0.228932 0.229202 +0.3764 0.25 0.229072 0.229347 +0.3765 0.25 0.229213 0.229493 +0.3766 0.25 0.229354 0.229641 +0.3767 0.25 0.229495 0.229791 +0.3768 0.25 0.229637 0.229943 +0.3769 0.25 0.229779 0.230096 +0.377 0.25 0.229921 0.230251 +0.3771 0.25 0.230064 0.230407 +0.3772 0.25 0.230207 0.230566 +0.3773 0.25 0.23035 0.230726 +0.3774 0.25 0.230494 0.230887 +0.3775 0.25 0.230637 0.23105 +0.3776 0.25 0.230782 0.231215 +0.3777 0.25 0.230926 0.231382 +0.3778 0.25 0.231071 0.23155 +0.3779 0.25 0.231216 0.23172 +0.378 0.25 0.231362 0.231891 +0.3781 0.25 0.231507 0.232064 +0.3782 0.25 0.231653 0.232239 +0.3783 0.25 0.2318 0.232415 +0.3784 0.25 0.231947 0.232593 +0.3785 0.25 0.232094 0.232772 +0.3786 0.25 0.232241 0.232953 +0.3787 0.25 0.232389 0.233136 +0.3788 0.25 0.232537 0.23332 +0.3789 0.25 0.232685 0.233505 +0.379 0.25 0.232834 0.233692 +0.3791 0.25 0.232983 0.233881 +0.3792 0.25 0.233132 0.234071 +0.3793 0.25 0.233281 0.234262 +0.3794 0.25 0.233431 0.234455 +0.3795 0.25 0.233581 0.23465 +0.3796 0.25 0.233732 0.234845 +0.3797 0.25 0.233883 0.235043 +0.3798 0.25 0.234034 0.235241 +0.3799 0.25 0.234185 0.235442 +0.38 0.25 0.234337 0.235643 +0.3801 0.25 0.234489 0.235846 +0.3802 0.25 0.234642 0.23605 +0.3803 0.25 0.234794 0.236256 +0.3804 0.25 0.234947 0.236463 +0.3805 0.25 0.235101 0.236672 +0.3806 0.25 0.235254 0.236881 +0.3807 0.25 0.235408 0.237092 +0.3808 0.25 0.235563 0.237305 +0.3809 0.25 0.235717 0.237518 +0.381 0.25 0.235872 0.237733 +0.3811 0.25 0.236027 0.23795 +0.3812 0.25 0.236183 0.238167 +0.3813 0.25 0.236339 0.238386 +0.3814 0.25 0.236495 0.238606 +0.3815 0.25 0.236651 0.238827 +0.3816 0.25 0.236808 0.239049 +0.3817 0.25 0.236965 0.239273 +0.3818 0.25 0.237123 0.239497 +0.3819 0.25 0.23728 0.239723 +0.382 0.25 0.237438 0.23995 +0.3821 0.25 0.237597 0.240179 +0.3822 0.25 0.237755 0.240408 +0.3823 0.25 0.237914 0.240638 +0.3824 0.25 0.238074 0.24087 +0.3825 0.25 0.238233 0.241102 +0.3826 0.25 0.238393 0.241336 +0.3827 0.25 0.238553 0.241571 +0.3828 0.25 0.238714 0.241807 +0.3829 0.25 0.238875 0.242043 +0.383 0.25 0.239036 0.242281 +0.3831 0.25 0.239197 0.24252 +0.3832 0.25 0.239359 0.24276 +0.3833 0.25 0.239521 0.243 +0.3834 0.25 0.239684 0.243242 +0.3835 0.25 0.239846 0.243485 +0.3836 0.25 0.240009 0.243728 +0.3837 0.25 0.240173 0.243973 +0.3838 0.25 0.240336 0.244218 +0.3839 0.25 0.2405 0.244464 +0.384 0.25 0.240664 0.244711 +0.3841 0.25 0.240829 0.244959 +0.3842 0.25 0.240994 0.245208 +0.3843 0.25 0.241159 0.245457 +0.3844 0.25 0.241325 0.245708 +0.3845 0.25 0.24149 0.245959 +0.3846 0.25 0.241657 0.246211 +0.3847 0.25 0.241823 0.246464 +0.3848 0.25 0.24199 0.246717 +0.3849 0.25 0.242157 0.246971 +0.385 0.25 0.242324 0.247226 +0.3851 0.25 0.242492 0.247481 +0.3852 0.25 0.24266 0.247737 +0.3853 0.25 0.242828 0.247994 +0.3854 0.25 0.242997 0.248252 +0.3855 0.25 0.243165 0.24851 +0.3856 0.25 0.243335 0.248768 +0.3857 0.25 0.243504 0.249028 +0.3858 0.25 0.243674 0.249287 +0.3859 0.25 0.243844 0.249548 +0.386 0.25 0.244015 0.249809 +0.3861 0.25 0.244185 0.25007 +0.3862 0.25 0.244356 0.250332 +0.3863 0.25 0.244528 0.250594 +0.3864 0.25 0.244699 0.250857 +0.3865 0.25 0.244871 0.25112 +0.3866 0.25 0.245044 0.251384 +0.3867 0.25 0.245216 0.251648 +0.3868 0.25 0.245389 0.251913 +0.3869 0.25 0.245562 0.252178 +0.387 0.25 0.245736 0.252443 +0.3871 0.25 0.245909 0.252709 +0.3872 0.25 0.246084 0.252975 +0.3873 0.25 0.246258 0.253241 +0.3874 0.25 0.246433 0.253507 +0.3875 0.25 0.246608 0.253774 +0.3876 0.25 0.246783 0.254041 +0.3877 0.25 0.246959 0.254309 +0.3878 0.25 0.247135 0.254576 +0.3879 0.25 0.247311 0.254844 +0.388 0.25 0.247487 0.255112 +0.3881 0.25 0.247664 0.25538 +0.3882 0.25 0.247841 0.255648 +0.3883 0.25 0.248019 0.255917 +0.3884 0.25 0.248197 0.256185 +0.3885 0.25 0.248375 0.256454 +0.3886 0.25 0.248553 0.256722 +0.3887 0.25 0.248732 0.256991 +0.3888 0.25 0.248911 0.25726 +0.3889 0.25 0.24909 0.257528 +0.389 0.25 0.24927 0.257797 +0.3891 0.25 0.249449 0.258066 +0.3892 0.25 0.24963 0.258335 +0.3893 0.25 0.24981 0.258603 +0.3894 0.25 0.249991 0.258872 +0.3895 0.25 0.250172 0.25914 +0.3896 0.25 0.250353 0.259409 +0.3897 0.25 0.250535 0.259677 +0.3898 0.25 0.250717 0.259945 +0.3899 0.25 0.250899 0.260213 +0.39 0.25 0.251082 0.260481 +0.3901 0.25 0.251265 0.260748 +0.3902 0.25 0.251448 0.261016 +0.3903 0.25 0.251632 0.261283 +0.3904 0.25 0.251815 0.261549 +0.3905 0.25 0.252 0.261816 +0.3906 0.25 0.252184 0.262082 +0.3907 0.25 0.252369 0.262348 +0.3908 0.25 0.252554 0.262614 +0.3909 0.25 0.252739 0.262879 +0.391 0.25 0.252925 0.263144 +0.3911 0.25 0.25311 0.263408 +0.3912 0.25 0.253297 0.263672 +0.3913 0.25 0.253483 0.263936 +0.3914 0.25 0.25367 0.264199 +0.3915 0.25 0.253857 0.264462 +0.3916 0.25 0.254044 0.264724 +0.3917 0.25 0.254232 0.264986 +0.3918 0.25 0.25442 0.265247 +0.3919 0.25 0.254608 0.265508 +0.392 0.25 0.254797 0.265768 +0.3921 0.25 0.254986 0.266027 +0.3922 0.25 0.255175 0.266286 +0.3923 0.25 0.255365 0.266545 +0.3924 0.25 0.255554 0.266802 +0.3925 0.25 0.255744 0.267059 +0.3926 0.25 0.255935 0.267316 +0.3927 0.25 0.256126 0.267571 +0.3928 0.25 0.256317 0.267826 +0.3929 0.25 0.256508 0.26808 +0.393 0.25 0.256699 0.268334 +0.3931 0.25 0.256891 0.268586 +0.3932 0.25 0.257083 0.268838 +0.3933 0.25 0.257276 0.269089 +0.3934 0.25 0.257469 0.26934 +0.3935 0.25 0.257662 0.269589 +0.3936 0.25 0.257855 0.269838 +0.3937 0.25 0.258049 0.270085 +0.3938 0.25 0.258242 0.270332 +0.3939 0.25 0.258437 0.270578 +0.394 0.25 0.258631 0.270823 +0.3941 0.25 0.258826 0.271067 +0.3942 0.25 0.259021 0.27131 +0.3943 0.25 0.259216 0.271552 +0.3944 0.25 0.259412 0.271793 +0.3945 0.25 0.259608 0.272033 +0.3946 0.25 0.259804 0.272272 +0.3947 0.25 0.260001 0.27251 +0.3948 0.25 0.260198 0.272746 +0.3949 0.25 0.260395 0.272982 +0.395 0.25 0.260592 0.273217 +0.3951 0.25 0.26079 0.27345 +0.3952 0.25 0.260988 0.273682 +0.3953 0.25 0.261187 0.273913 +0.3954 0.25 0.261385 0.274143 +0.3955 0.25 0.261584 0.274372 +0.3956 0.25 0.261783 0.274599 +0.3957 0.25 0.261983 0.274826 +0.3958 0.25 0.262183 0.275051 +0.3959 0.25 0.262383 0.275274 +0.396 0.25 0.262583 0.275497 +0.3961 0.25 0.262784 0.275718 +0.3962 0.25 0.262985 0.275937 +0.3963 0.25 0.263186 0.276156 +0.3964 0.25 0.263387 0.276373 +0.3965 0.25 0.263589 0.276588 +0.3966 0.25 0.263791 0.276802 +0.3967 0.25 0.263994 0.277015 +0.3968 0.25 0.264196 0.277226 +0.3969 0.25 0.264399 0.277436 +0.397 0.25 0.264602 0.277645 +0.3971 0.25 0.264806 0.277851 +0.3972 0.25 0.26501 0.278057 +0.3973 0.25 0.265214 0.278261 +0.3974 0.25 0.265418 0.278463 +0.3975 0.25 0.265623 0.278664 +0.3976 0.25 0.265828 0.278863 +0.3977 0.25 0.266033 0.27906 +0.3978 0.25 0.266239 0.279256 +0.3979 0.25 0.266445 0.279451 +0.398 0.25 0.266651 0.279643 +0.3981 0.25 0.266857 0.279834 +0.3982 0.25 0.267064 0.280024 +0.3983 0.25 0.267271 0.280211 +0.3984 0.25 0.267478 0.280397 +0.3985 0.25 0.267686 0.280582 +0.3986 0.25 0.267893 0.280764 +0.3987 0.25 0.268102 0.280945 +0.3988 0.25 0.26831 0.281124 +0.3989 0.25 0.268519 0.281301 +0.399 0.25 0.268728 0.281476 +0.3991 0.25 0.268937 0.28165 +0.3992 0.25 0.269146 0.281821 +0.3993 0.25 0.269356 0.281991 +0.3994 0.25 0.269566 0.282159 +0.3995 0.25 0.269777 0.282325 +0.3996 0.25 0.269987 0.282489 +0.3997 0.25 0.270198 0.282651 +0.3998 0.25 0.27041 0.282812 +0.3999 0.25 0.270621 0.28297 +0.4 0.25 0.270833 0.283127 +0.4001 0.25 0.271045 0.283281 +0.4002 0.25 0.271257 0.283433 +0.4003 0.25 0.27147 0.283584 +0.4004 0.25 0.271683 0.283732 +0.4005 0.25 0.271896 0.283879 +0.4006 0.25 0.27211 0.284023 +0.4007 0.25 0.272323 0.284165 +0.4008 0.25 0.272537 0.284306 +0.4009 0.25 0.272752 0.284444 +0.401 0.25 0.272966 0.28458 +0.4011 0.25 0.273181 0.284714 +0.4012 0.25 0.273396 0.284845 +0.4013 0.25 0.273612 0.284975 +0.4014 0.25 0.273827 0.285103 +0.4015 0.25 0.274043 0.285228 +0.4016 0.25 0.27426 0.285351 +0.4017 0.25 0.274476 0.285472 +0.4018 0.25 0.274693 0.285591 +0.4019 0.25 0.27491 0.285707 +0.402 0.25 0.275128 0.285821 +0.4021 0.25 0.275345 0.285933 +0.4022 0.25 0.275563 0.286043 +0.4023 0.25 0.275781 0.286151 +0.4024 0.25 0.276 0.286256 +0.4025 0.25 0.276219 0.286359 +0.4026 0.25 0.276438 0.286459 +0.4027 0.25 0.276657 0.286558 +0.4028 0.25 0.276877 0.286654 +0.4029 0.25 0.277096 0.286747 +0.403 0.25 0.277317 0.286838 +0.4031 0.25 0.277537 0.286927 +0.4032 0.25 0.277758 0.287014 +0.4033 0.25 0.277979 0.287098 +0.4034 0.25 0.2782 0.287179 +0.4035 0.25 0.278421 0.287259 +0.4036 0.25 0.278643 0.287336 +0.4037 0.25 0.278865 0.28741 +0.4038 0.25 0.279087 0.287482 +0.4039 0.25 0.27931 0.287552 +0.404 0.25 0.279533 0.287619 +0.4041 0.25 0.279756 0.287683 +0.4042 0.25 0.279979 0.287745 +0.4043 0.25 0.280203 0.287805 +0.4044 0.25 0.280427 0.287862 +0.4045 0.25 0.280651 0.287917 +0.4046 0.25 0.280876 0.287969 +0.4047 0.25 0.281101 0.288018 +0.4048 0.25 0.281326 0.288065 +0.4049 0.25 0.281551 0.28811 +0.405 0.25 0.281777 0.288152 +0.4051 0.25 0.282002 0.288191 +0.4052 0.25 0.282228 0.288228 +0.4053 0.25 0.282455 0.288262 +0.4054 0.25 0.282682 0.288294 +0.4055 0.25 0.282908 0.288322 +0.4056 0.25 0.283136 0.288349 +0.4057 0.25 0.283363 0.288373 +0.4058 0.25 0.283591 0.288394 +0.4059 0.25 0.283819 0.288412 +0.406 0.25 0.284047 0.288428 +0.4061 0.25 0.284276 0.288441 +0.4062 0.25 0.284504 0.288452 +0.4063 0.25 0.284733 0.28846 +0.4064 0.25 0.284963 0.288465 +0.4065 0.25 0.285192 0.288468 +0.4066 0.25 0.285422 0.288467 +0.4067 0.25 0.285652 0.288465 +0.4068 0.25 0.285883 0.288459 +0.4069 0.25 0.286113 0.288451 +0.407 0.25 0.286344 0.28844 +0.4071 0.25 0.286575 0.288427 +0.4072 0.25 0.286807 0.28841 +0.4073 0.25 0.287039 0.288391 +0.4074 0.25 0.287271 0.288369 +0.4075 0.25 0.287503 0.288345 +0.4076 0.25 0.287735 0.288318 +0.4077 0.25 0.287968 0.288288 +0.4078 0.25 0.288201 0.288255 +0.4079 0.25 0.288434 0.28822 +0.408 0.25 0.288668 0.288181 +0.4081 0.25 0.288902 0.28814 +0.4082 0.25 0.289136 0.288097 +0.4083 0.25 0.28937 0.28805 +0.4084 0.25 0.289605 0.288001 +0.4085 0.25 0.28984 0.287949 +0.4086 0.25 0.290075 0.287894 +0.4087 0.25 0.29031 0.287837 +0.4088 0.25 0.290546 0.287776 +0.4089 0.25 0.290782 0.287713 +0.409 0.25 0.291018 0.287647 +0.4091 0.25 0.291254 0.287578 +0.4092 0.25 0.291491 0.287507 +0.4093 0.25 0.291728 0.287433 +0.4094 0.25 0.291965 0.287356 +0.4095 0.25 0.292202 0.287276 +0.4096 0.25 0.29244 0.287193 +0.4097 0.25 0.292678 0.287108 +0.4098 0.25 0.292916 0.287019 +0.4099 0.25 0.293155 0.286928 +0.41 0.25 0.293393 0.286834 +0.4101 0.25 0.293632 0.286738 +0.4102 0.25 0.293871 0.286638 +0.4103 0.25 0.294111 0.286536 +0.4104 0.25 0.294351 0.286431 +0.4105 0.25 0.294591 0.286323 +0.4106 0.25 0.294831 0.286212 +0.4107 0.25 0.295071 0.286099 +0.4108 0.25 0.295312 0.285983 +0.4109 0.25 0.295553 0.285863 +0.411 0.25 0.295794 0.285742 +0.4111 0.25 0.296036 0.285617 +0.4112 0.25 0.296278 0.285489 +0.4113 0.25 0.29652 0.285359 +0.4114 0.25 0.296762 0.285226 +0.4115 0.25 0.297005 0.28509 +0.4116 0.25 0.297247 0.284952 +0.4117 0.25 0.29749 0.28481 +0.4118 0.25 0.297734 0.284666 +0.4119 0.25 0.297977 0.284519 +0.412 0.25 0.298221 0.284369 +0.4121 0.25 0.298465 0.284217 +0.4122 0.25 0.298709 0.284061 +0.4123 0.25 0.298954 0.283903 +0.4124 0.25 0.299199 0.283742 +0.4125 0.25 0.299444 0.283579 +0.4126 0.25 0.299689 0.283412 +0.4127 0.25 0.299934 0.283243 +0.4128 0.25 0.30018 0.283071 +0.4129 0.25 0.300426 0.282897 +0.413 0.25 0.300672 0.282719 +0.4131 0.25 0.300919 0.282539 +0.4132 0.25 0.301166 0.282357 +0.4133 0.25 0.301413 0.282171 +0.4134 0.25 0.30166 0.281983 +0.4135 0.25 0.301907 0.281792 +0.4136 0.25 0.302155 0.281598 +0.4137 0.25 0.302403 0.281402 +0.4138 0.25 0.302651 0.281203 +0.4139 0.25 0.3029 0.281001 +0.414 0.25 0.303149 0.280796 +0.4141 0.25 0.303398 0.280589 +0.4142 0.25 0.303647 0.280379 +0.4143 0.25 0.303896 0.280167 +0.4144 0.25 0.304146 0.279952 +0.4145 0.25 0.304396 0.279734 +0.4146 0.25 0.304646 0.279513 +0.4147 0.25 0.304896 0.27929 +0.4148 0.25 0.305147 0.279065 +0.4149 0.25 0.305398 0.278836 +0.415 0.25 0.305649 0.278605 +0.4151 0.25 0.3059 0.278372 +0.4152 0.25 0.306152 0.278136 +0.4153 0.25 0.306404 0.277897 +0.4154 0.25 0.306656 0.277656 +0.4155 0.25 0.306908 0.277412 +0.4156 0.25 0.307161 0.277165 +0.4157 0.25 0.307414 0.276916 +0.4158 0.25 0.307667 0.276665 +0.4159 0.25 0.30792 0.276411 +0.416 0.25 0.308174 0.276154 +0.4161 0.25 0.308428 0.275895 +0.4162 0.25 0.308682 0.275633 +0.4163 0.25 0.308936 0.275369 +0.4164 0.25 0.30919 0.275103 +0.4165 0.25 0.309445 0.274834 +0.4166 0.25 0.3097 0.274562 +0.4167 0.25 0.309955 0.274288 +0.4168 0.25 0.310211 0.274012 +0.4169 0.25 0.310466 0.273733 +0.417 0.25 0.310722 0.273452 +0.4171 0.25 0.310978 0.273169 +0.4172 0.25 0.311235 0.272883 +0.4173 0.25 0.311491 0.272594 +0.4174 0.25 0.311748 0.272304 +0.4175 0.25 0.312005 0.272011 +0.4176 0.25 0.312263 0.271715 +0.4177 0.25 0.31252 0.271417 +0.4178 0.25 0.312778 0.271117 +0.4179 0.25 0.313036 0.270815 +0.418 0.25 0.313294 0.270511 +0.4181 0.25 0.313553 0.270204 +0.4182 0.25 0.313811 0.269895 +0.4183 0.25 0.31407 0.269583 +0.4184 0.25 0.314329 0.26927 +0.4185 0.25 0.314589 0.268954 +0.4186 0.25 0.314848 0.268636 +0.4187 0.25 0.315108 0.268316 +0.4188 0.25 0.315368 0.267993 +0.4189 0.25 0.315629 0.267669 +0.419 0.25 0.315889 0.267342 +0.4191 0.25 0.31615 0.267014 +0.4192 0.25 0.316411 0.266683 +0.4193 0.25 0.316672 0.26635 +0.4194 0.25 0.316933 0.266015 +0.4195 0.25 0.317195 0.265678 +0.4196 0.25 0.317457 0.265339 +0.4197 0.25 0.317719 0.264997 +0.4198 0.25 0.317982 0.264654 +0.4199 0.25 0.318244 0.264309 +0.42 0.25 0.318507 0.263962 +0.4201 0.25 0.31877 0.263613 +0.4202 0.25 0.319033 0.263262 +0.4203 0.25 0.319297 0.262909 +0.4204 0.25 0.31956 0.262554 +0.4205 0.25 0.319824 0.262197 +0.4206 0.25 0.320088 0.261839 +0.4207 0.25 0.320353 0.261478 +0.4208 0.25 0.320617 0.261116 +0.4209 0.25 0.320882 0.260752 +0.421 0.25 0.321147 0.260386 +0.4211 0.25 0.321412 0.260018 +0.4212 0.25 0.321678 0.259649 +0.4213 0.25 0.321944 0.259278 +0.4214 0.25 0.32221 0.258905 +0.4215 0.25 0.322476 0.25853 +0.4216 0.25 0.322742 0.258154 +0.4217 0.25 0.323009 0.257776 +0.4218 0.25 0.323275 0.257397 +0.4219 0.25 0.323542 0.257015 +0.422 0.25 0.32381 0.256633 +0.4221 0.25 0.324077 0.256248 +0.4222 0.25 0.324345 0.255862 +0.4223 0.25 0.324613 0.255475 +0.4224 0.25 0.324881 0.255086 +0.4225 0.25 0.325149 0.254695 +0.4226 0.25 0.325418 0.254303 +0.4227 0.25 0.325686 0.25391 +0.4228 0.25 0.325955 0.253515 +0.4229 0.25 0.326224 0.253118 +0.423 0.25 0.326494 0.252721 +0.4231 0.25 0.326763 0.252322 +0.4232 0.25 0.327033 0.251921 +0.4233 0.25 0.327303 0.251519 +0.4234 0.25 0.327574 0.251116 +0.4235 0.25 0.327844 0.250712 +0.4236 0.25 0.328115 0.250306 +0.4237 0.25 0.328386 0.2499 +0.4238 0.25 0.328657 0.249492 +0.4239 0.25 0.328928 0.249082 +0.424 0.25 0.3292 0.248672 +0.4241 0.25 0.329471 0.24826 +0.4242 0.25 0.329743 0.247848 +0.4243 0.25 0.330015 0.247434 +0.4244 0.25 0.330288 0.247019 +0.4245 0.25 0.33056 0.246603 +0.4246 0.25 0.330833 0.246186 +0.4247 0.25 0.331106 0.245768 +0.4248 0.25 0.331379 0.245349 +0.4249 0.25 0.331653 0.244929 +0.425 0.25 0.331926 0.244508 +0.4251 0.25 0.3322 0.244087 +0.4252 0.25 0.332474 0.243664 +0.4253 0.25 0.332748 0.24324 +0.4254 0.25 0.333023 0.242816 +0.4255 0.25 0.333298 0.242391 +0.4256 0.25 0.333572 0.241965 +0.4257 0.25 0.333848 0.241538 +0.4258 0.25 0.334123 0.241111 +0.4259 0.25 0.334398 0.240683 +0.426 0.25 0.334674 0.240254 +0.4261 0.25 0.33495 0.239824 +0.4262 0.25 0.335226 0.239394 +0.4263 0.25 0.335502 0.238964 +0.4264 0.25 0.335779 0.238532 +0.4265 0.25 0.336055 0.2381 +0.4266 0.25 0.336332 0.237668 +0.4267 0.25 0.336609 0.237235 +0.4268 0.25 0.336887 0.236802 +0.4269 0.25 0.337164 0.236368 +0.427 0.25 0.337442 0.235933 +0.4271 0.25 0.33772 0.235499 +0.4272 0.25 0.337998 0.235064 +0.4273 0.25 0.338276 0.234628 +0.4274 0.25 0.338555 0.234193 +0.4275 0.25 0.338833 0.233757 +0.4276 0.25 0.339112 0.23332 +0.4277 0.25 0.339391 0.232884 +0.4278 0.25 0.339671 0.232447 +0.4279 0.25 0.33995 0.23201 +0.428 0.25 0.34023 0.231573 +0.4281 0.25 0.34051 0.231136 +0.4282 0.25 0.34079 0.230699 +0.4283 0.25 0.34107 0.230261 +0.4284 0.25 0.341351 0.229824 +0.4285 0.25 0.341631 0.229387 +0.4286 0.25 0.341912 0.228949 +0.4287 0.25 0.342193 0.228512 +0.4288 0.25 0.342474 0.228074 +0.4289 0.25 0.342756 0.227637 +0.429 0.25 0.343038 0.2272 +0.4291 0.25 0.343319 0.226763 +0.4292 0.25 0.343601 0.226326 +0.4293 0.25 0.343884 0.22589 +0.4294 0.25 0.344166 0.225453 +0.4295 0.25 0.344449 0.225017 +0.4296 0.25 0.344731 0.224582 +0.4297 0.25 0.345014 0.224146 +0.4298 0.25 0.345298 0.223711 +0.4299 0.25 0.345581 0.223276 +0.43 0.25 0.345864 0.222842 +0.4301 0.25 0.346148 0.222408 +0.4302 0.25 0.346432 0.221975 +0.4303 0.25 0.346716 0.221542 +0.4304 0.25 0.347001 0.22111 +0.4305 0.25 0.347285 0.220678 +0.4306 0.25 0.34757 0.220247 +0.4307 0.25 0.347855 0.219816 +0.4308 0.25 0.34814 0.219386 +0.4309 0.25 0.348425 0.218957 +0.431 0.25 0.34871 0.218528 +0.4311 0.25 0.348996 0.2181 +0.4312 0.25 0.349282 0.217673 +0.4313 0.25 0.349568 0.217247 +0.4314 0.25 0.349854 0.216821 +0.4315 0.25 0.35014 0.216397 +0.4316 0.25 0.350427 0.215973 +0.4317 0.25 0.350714 0.21555 +0.4318 0.25 0.351 0.215128 +0.4319 0.25 0.351287 0.214707 +0.432 0.25 0.351575 0.214287 +0.4321 0.25 0.351862 0.213868 +0.4322 0.25 0.35215 0.21345 +0.4323 0.25 0.352438 0.213033 +0.4324 0.25 0.352726 0.212618 +0.4325 0.25 0.353014 0.212203 +0.4326 0.25 0.353302 0.21179 +0.4327 0.25 0.353591 0.211378 +0.4328 0.25 0.353879 0.210967 +0.4329 0.25 0.354168 0.210557 +0.433 0.25 0.354457 0.210149 +0.4331 0.25 0.354747 0.209742 +0.4332 0.25 0.355036 0.209336 +0.4333 0.25 0.355326 0.208932 +0.4334 0.25 0.355615 0.208529 +0.4335 0.25 0.355905 0.208128 +0.4336 0.25 0.356195 0.207728 +0.4337 0.25 0.356486 0.20733 +0.4338 0.25 0.356776 0.206933 +0.4339 0.25 0.357067 0.206538 +0.434 0.25 0.357358 0.206144 +0.4341 0.25 0.357649 0.205752 +0.4342 0.25 0.35794 0.205362 +0.4343 0.25 0.358231 0.204973 +0.4344 0.25 0.358523 0.204586 +0.4345 0.25 0.358814 0.204201 +0.4346 0.25 0.359106 0.203817 +0.4347 0.25 0.359398 0.203436 +0.4348 0.25 0.359691 0.203056 +0.4349 0.25 0.359983 0.202678 +0.435 0.25 0.360276 0.202302 +0.4351 0.25 0.360568 0.201928 +0.4352 0.25 0.360861 0.201556 +0.4353 0.25 0.361154 0.201186 +0.4354 0.25 0.361447 0.200818 +0.4355 0.25 0.361741 0.200452 +0.4356 0.25 0.362034 0.200088 +0.4357 0.25 0.362328 0.199727 +0.4358 0.25 0.362622 0.199367 +0.4359 0.25 0.362916 0.19901 +0.436 0.25 0.36321 0.198655 +0.4361 0.25 0.363505 0.198302 +0.4362 0.25 0.363799 0.197951 +0.4363 0.25 0.364094 0.197602 +0.4364 0.25 0.364389 0.197256 +0.4365 0.25 0.364684 0.196913 +0.4366 0.25 0.364979 0.196571 +0.4367 0.25 0.365275 0.196233 +0.4368 0.25 0.36557 0.195896 +0.4369 0.25 0.365866 0.195562 +0.437 0.25 0.366162 0.195231 +0.4371 0.25 0.366458 0.194902 +0.4372 0.25 0.366754 0.194576 +0.4373 0.25 0.36705 0.194252 +0.4374 0.25 0.367347 0.193931 +0.4375 0.25 0.367644 0.193612 +0.4376 0.25 0.36794 0.193297 +0.4377 0.25 0.368237 0.192984 +0.4378 0.25 0.368535 0.192673 +0.4379 0.25 0.368832 0.192366 +0.438 0.25 0.369129 0.192061 +0.4381 0.25 0.369427 0.191759 +0.4382 0.25 0.369725 0.19146 +0.4383 0.25 0.370023 0.191164 +0.4384 0.25 0.370321 0.190871 +0.4385 0.25 0.370619 0.190581 +0.4386 0.25 0.370918 0.190294 +0.4387 0.25 0.371216 0.190009 +0.4388 0.25 0.371515 0.189728 +0.4389 0.25 0.371814 0.18945 +0.439 0.25 0.372113 0.189175 +0.4391 0.25 0.372412 0.188903 +0.4392 0.25 0.372711 0.188635 +0.4393 0.25 0.373011 0.188369 +0.4394 0.25 0.373311 0.188107 +0.4395 0.25 0.37361 0.187848 +0.4396 0.25 0.37391 0.187592 +0.4397 0.25 0.37421 0.187339 +0.4398 0.25 0.374511 0.18709 +0.4399 0.25 0.374811 0.186844 +0.44 0.25 0.375112 0.186602 +0.4401 0.25 0.375412 0.186363 +0.4402 0.25 0.375713 0.186127 +0.4403 0.25 0.376014 0.185895 +0.4404 0.25 0.376315 0.185667 +0.4405 0.25 0.376617 0.185442 +0.4406 0.25 0.376918 0.18522 +0.4407 0.25 0.37722 0.185002 +0.4408 0.25 0.377522 0.184788 +0.4409 0.25 0.377823 0.184577 +0.441 0.25 0.378126 0.18437 +0.4411 0.25 0.378428 0.184167 +0.4412 0.25 0.37873 0.183967 +0.4413 0.25 0.379033 0.183771 +0.4414 0.25 0.379335 0.183579 +0.4415 0.25 0.379638 0.183391 +0.4416 0.25 0.379941 0.183206 +0.4417 0.25 0.380244 0.183026 +0.4418 0.25 0.380547 0.182849 +0.4419 0.25 0.380851 0.182676 +0.442 0.25 0.381154 0.182507 +0.4421 0.25 0.381458 0.182342 +0.4422 0.25 0.381761 0.182181 +0.4423 0.25 0.382065 0.182024 +0.4424 0.25 0.382369 0.181871 +0.4425 0.25 0.382674 0.181722 +0.4426 0.25 0.382978 0.181578 +0.4427 0.25 0.383282 0.181437 +0.4428 0.25 0.383587 0.1813 +0.4429 0.25 0.383892 0.181168 +0.443 0.25 0.384197 0.18104 +0.4431 0.25 0.384502 0.180916 +0.4432 0.25 0.384807 0.180796 +0.4433 0.25 0.385112 0.18068 +0.4434 0.25 0.385418 0.180569 +0.4435 0.25 0.385723 0.180462 +0.4436 0.25 0.386029 0.18036 +0.4437 0.25 0.386335 0.180261 +0.4438 0.25 0.386641 0.180168 +0.4439 0.25 0.386947 0.180078 +0.444 0.25 0.387253 0.179993 +0.4441 0.25 0.38756 0.179913 +0.4442 0.25 0.387866 0.179837 +0.4443 0.25 0.388173 0.179765 +0.4444 0.25 0.38848 0.179698 +0.4445 0.25 0.388786 0.179635 +0.4446 0.25 0.389094 0.179577 +0.4447 0.25 0.389401 0.179524 +0.4448 0.25 0.389708 0.179475 +0.4449 0.25 0.390015 0.179431 +0.445 0.25 0.390323 0.179392 +0.4451 0.25 0.390631 0.179357 +0.4452 0.25 0.390939 0.179327 +0.4453 0.25 0.391247 0.179302 +0.4454 0.25 0.391555 0.179281 +0.4455 0.25 0.391863 0.179265 +0.4456 0.25 0.392171 0.179254 +0.4457 0.25 0.39248 0.179248 +0.4458 0.25 0.392788 0.179247 +0.4459 0.25 0.393097 0.17925 +0.446 0.25 0.393406 0.179259 +0.4461 0.25 0.393715 0.179272 +0.4462 0.25 0.394024 0.17929 +0.4463 0.25 0.394333 0.179313 +0.4464 0.25 0.394642 0.179341 +0.4465 0.25 0.394952 0.179374 +0.4466 0.25 0.395262 0.179413 +0.4467 0.25 0.395571 0.179456 +0.4468 0.25 0.395881 0.179504 +0.4469 0.25 0.396191 0.179557 +0.447 0.25 0.396501 0.179615 +0.4471 0.25 0.396811 0.179678 +0.4472 0.25 0.397122 0.179747 +0.4473 0.25 0.397432 0.17982 +0.4474 0.25 0.397743 0.179899 +0.4475 0.25 0.398053 0.179983 +0.4476 0.25 0.398364 0.180072 +0.4477 0.25 0.398675 0.180166 +0.4478 0.25 0.398986 0.180266 +0.4479 0.25 0.399297 0.180371 +0.448 0.25 0.399609 0.180481 +0.4481 0.25 0.39992 0.180596 +0.4482 0.25 0.400231 0.180717 +0.4483 0.25 0.400543 0.180843 +0.4484 0.25 0.400855 0.180974 +0.4485 0.25 0.401167 0.18111 +0.4486 0.25 0.401479 0.181252 +0.4487 0.25 0.401791 0.181399 +0.4488 0.25 0.402103 0.181552 +0.4489 0.25 0.402415 0.18171 +0.449 0.25 0.402728 0.181874 +0.4491 0.25 0.40304 0.182043 +0.4492 0.25 0.403353 0.182217 +0.4493 0.25 0.403666 0.182397 +0.4494 0.25 0.403979 0.182582 +0.4495 0.25 0.404292 0.182773 +0.4496 0.25 0.404605 0.182969 +0.4497 0.25 0.404918 0.183171 +0.4498 0.25 0.405231 0.183379 +0.4499 0.25 0.405545 0.183592 +0.45 0.25 0.405858 0.18381 +0.4501 0.25 0.406172 0.184034 +0.4502 0.25 0.406485 0.184264 +0.4503 0.25 0.406799 0.184499 +0.4504 0.25 0.407113 0.18474 +0.4505 0.25 0.407427 0.184987 +0.4506 0.25 0.407742 0.185239 +0.4507 0.25 0.408056 0.185497 +0.4508 0.25 0.40837 0.185761 +0.4509 0.25 0.408685 0.18603 +0.451 0.25 0.408999 0.186305 +0.4511 0.25 0.409314 0.186585 +0.4512 0.25 0.409629 0.186872 +0.4513 0.25 0.409944 0.187164 +0.4514 0.25 0.410259 0.187461 +0.4515 0.25 0.410574 0.187765 +0.4516 0.25 0.410889 0.188074 +0.4517 0.25 0.411204 0.188389 +0.4518 0.25 0.41152 0.18871 +0.4519 0.25 0.411835 0.189037 +0.452 0.25 0.412151 0.189369 +0.4521 0.25 0.412467 0.189707 +0.4522 0.25 0.412782 0.190051 +0.4523 0.25 0.413098 0.190401 +0.4524 0.25 0.413414 0.190757 +0.4525 0.25 0.41373 0.191119 +0.4526 0.25 0.414047 0.191486 +0.4527 0.25 0.414363 0.191859 +0.4528 0.25 0.414679 0.192238 +0.4529 0.25 0.414996 0.192623 +0.453 0.25 0.415312 0.193014 +0.4531 0.25 0.415629 0.193411 +0.4532 0.25 0.415946 0.193813 +0.4533 0.25 0.416263 0.194222 +0.4534 0.25 0.41658 0.194636 +0.4535 0.25 0.416897 0.195057 +0.4536 0.25 0.417214 0.195483 +0.4537 0.25 0.417531 0.195915 +0.4538 0.25 0.417849 0.196353 +0.4539 0.25 0.418166 0.196797 +0.454 0.25 0.418484 0.197247 +0.4541 0.25 0.418801 0.197703 +0.4542 0.25 0.419119 0.198165 +0.4543 0.25 0.419437 0.198633 +0.4544 0.25 0.419755 0.199107 +0.4545 0.25 0.420073 0.199587 +0.4546 0.25 0.420391 0.200072 +0.4547 0.25 0.420709 0.200564 +0.4548 0.25 0.421027 0.201062 +0.4549 0.25 0.421345 0.201565 +0.455 0.25 0.421664 0.202075 +0.4551 0.25 0.421982 0.20259 +0.4552 0.25 0.422301 0.203112 +0.4553 0.25 0.42262 0.20364 +0.4554 0.25 0.422938 0.204173 +0.4555 0.25 0.423257 0.204713 +0.4556 0.25 0.423576 0.205258 +0.4557 0.25 0.423895 0.20581 +0.4558 0.25 0.424214 0.206367 +0.4559 0.25 0.424534 0.206931 +0.456 0.25 0.424853 0.2075 +0.4561 0.25 0.425172 0.208076 +0.4562 0.25 0.425492 0.208657 +0.4563 0.25 0.425811 0.209245 +0.4564 0.25 0.426131 0.209838 +0.4565 0.25 0.42645 0.210438 +0.4566 0.25 0.42677 0.211043 +0.4567 0.25 0.42709 0.211654 +0.4568 0.25 0.42741 0.212272 +0.4569 0.25 0.42773 0.212895 +0.457 0.25 0.42805 0.213525 +0.4571 0.25 0.42837 0.21416 +0.4572 0.25 0.42869 0.214801 +0.4573 0.25 0.429011 0.215449 +0.4574 0.25 0.429331 0.216102 +0.4575 0.25 0.429651 0.216761 +0.4576 0.25 0.429972 0.217427 +0.4577 0.25 0.430293 0.218098 +0.4578 0.25 0.430613 0.218775 +0.4579 0.25 0.430934 0.219458 +0.458 0.25 0.431255 0.220147 +0.4581 0.25 0.431576 0.220842 +0.4582 0.25 0.431897 0.221543 +0.4583 0.25 0.432218 0.22225 +0.4584 0.25 0.432539 0.222963 +0.4585 0.25 0.43286 0.223682 +0.4586 0.25 0.433181 0.224407 +0.4587 0.25 0.433503 0.225137 +0.4588 0.25 0.433824 0.225874 +0.4589 0.25 0.434146 0.226616 +0.459 0.25 0.434467 0.227365 +0.4591 0.25 0.434789 0.228119 +0.4592 0.25 0.43511 0.228879 +0.4593 0.25 0.435432 0.229645 +0.4594 0.25 0.435754 0.230417 +0.4595 0.25 0.436076 0.231195 +0.4596 0.25 0.436398 0.231978 +0.4597 0.25 0.43672 0.232768 +0.4598 0.25 0.437042 0.233563 +0.4599 0.25 0.437364 0.234364 +0.46 0.25 0.437686 0.235171 +0.4601 0.25 0.438009 0.235984 +0.4602 0.25 0.438331 0.236802 +0.4603 0.25 0.438653 0.237627 +0.4604 0.25 0.438976 0.238457 +0.4605 0.25 0.439298 0.239293 +0.4606 0.25 0.439621 0.240134 +0.4607 0.25 0.439944 0.240982 +0.4608 0.25 0.440266 0.241835 +0.4609 0.25 0.440589 0.242694 +0.461 0.25 0.440912 0.243558 +0.4611 0.25 0.441235 0.244429 +0.4612 0.25 0.441558 0.245305 +0.4613 0.25 0.441881 0.246186 +0.4614 0.25 0.442204 0.247074 +0.4615 0.25 0.442527 0.247967 +0.4616 0.25 0.44285 0.248865 +0.4617 0.25 0.443174 0.24977 +0.4618 0.25 0.443497 0.25068 +0.4619 0.25 0.44382 0.251595 +0.462 0.25 0.444144 0.252516 +0.4621 0.25 0.444467 0.253443 +0.4622 0.25 0.444791 0.254375 +0.4623 0.25 0.445114 0.255313 +0.4624 0.25 0.445438 0.256256 +0.4625 0.25 0.445762 0.257205 +0.4626 0.25 0.446086 0.25816 +0.4627 0.25 0.446409 0.25912 +0.4628 0.25 0.446733 0.260085 +0.4629 0.25 0.447057 0.261056 +0.463 0.25 0.447381 0.262032 +0.4631 0.25 0.447705 0.263014 +0.4632 0.25 0.448029 0.264001 +0.4633 0.25 0.448353 0.264994 +0.4634 0.25 0.448678 0.265992 +0.4635 0.25 0.449002 0.266995 +0.4636 0.25 0.449326 0.268004 +0.4637 0.25 0.44965 0.269018 +0.4638 0.25 0.449975 0.270037 +0.4639 0.25 0.450299 0.271062 +0.464 0.25 0.450624 0.272091 +0.4641 0.25 0.450948 0.273127 +0.4642 0.25 0.451273 0.274167 +0.4643 0.25 0.451597 0.275213 +0.4644 0.25 0.451922 0.276263 +0.4645 0.25 0.452247 0.277319 +0.4646 0.25 0.452571 0.278381 +0.4647 0.25 0.452896 0.279447 +0.4648 0.25 0.453221 0.280518 +0.4649 0.25 0.453546 0.281595 +0.465 0.25 0.453871 0.282677 +0.4651 0.25 0.454196 0.283763 +0.4652 0.25 0.454521 0.284855 +0.4653 0.25 0.454846 0.285952 +0.4654 0.25 0.455171 0.287054 +0.4655 0.25 0.455496 0.288161 +0.4656 0.25 0.455821 0.289272 +0.4657 0.25 0.456146 0.290389 +0.4658 0.25 0.456472 0.291511 +0.4659 0.25 0.456797 0.292637 +0.466 0.25 0.457122 0.293769 +0.4661 0.25 0.457448 0.294905 +0.4662 0.25 0.457773 0.296046 +0.4663 0.25 0.458099 0.297192 +0.4664 0.25 0.458424 0.298343 +0.4665 0.25 0.45875 0.299498 +0.4666 0.25 0.459075 0.300658 +0.4667 0.25 0.459401 0.301823 +0.4668 0.25 0.459726 0.302993 +0.4669 0.25 0.460052 0.304167 +0.467 0.25 0.460378 0.305346 +0.4671 0.25 0.460703 0.30653 +0.4672 0.25 0.461029 0.307718 +0.4673 0.25 0.461355 0.308911 +0.4674 0.25 0.461681 0.310108 +0.4675 0.25 0.462007 0.31131 +0.4676 0.25 0.462332 0.312516 +0.4677 0.25 0.462658 0.313727 +0.4678 0.25 0.462984 0.314942 +0.4679 0.25 0.46331 0.316162 +0.468 0.25 0.463636 0.317386 +0.4681 0.25 0.463962 0.318614 +0.4682 0.25 0.464288 0.319847 +0.4683 0.25 0.464615 0.321084 +0.4684 0.25 0.464941 0.322326 +0.4685 0.25 0.465267 0.323572 +0.4686 0.25 0.465593 0.324821 +0.4687 0.25 0.465919 0.326076 +0.4688 0.25 0.466245 0.327334 +0.4689 0.25 0.466572 0.328596 +0.469 0.25 0.466898 0.329863 +0.4691 0.25 0.467224 0.331134 +0.4692 0.25 0.467551 0.332408 +0.4693 0.25 0.467877 0.333687 +0.4694 0.25 0.468203 0.33497 +0.4695 0.25 0.46853 0.336257 +0.4696 0.25 0.468856 0.337548 +0.4697 0.25 0.469183 0.338842 +0.4698 0.25 0.469509 0.340141 +0.4699 0.25 0.469836 0.341444 +0.47 0.25 0.470162 0.34275 +0.4701 0.25 0.470489 0.34406 +0.4702 0.25 0.470815 0.345374 +0.4703 0.25 0.471142 0.346692 +0.4704 0.25 0.471468 0.348013 +0.4705 0.25 0.471795 0.349338 +0.4706 0.25 0.472122 0.350667 +0.4707 0.25 0.472448 0.352 +0.4708 0.25 0.472775 0.353336 +0.4709 0.25 0.473102 0.354675 +0.471 0.25 0.473428 0.356018 +0.4711 0.25 0.473755 0.357365 +0.4712 0.25 0.474082 0.358715 +0.4713 0.25 0.474408 0.360069 +0.4714 0.25 0.474735 0.361426 +0.4715 0.25 0.475062 0.362786 +0.4716 0.25 0.475389 0.36415 +0.4717 0.25 0.475716 0.365517 +0.4718 0.25 0.476042 0.366888 +0.4719 0.25 0.476369 0.368261 +0.472 0.25 0.476696 0.369638 +0.4721 0.25 0.477023 0.371018 +0.4722 0.25 0.47735 0.372402 +0.4723 0.25 0.477677 0.373788 +0.4724 0.25 0.478003 0.375177 +0.4725 0.25 0.47833 0.37657 +0.4726 0.25 0.478657 0.377966 +0.4727 0.25 0.478984 0.379364 +0.4728 0.25 0.479311 0.380766 +0.4729 0.25 0.479638 0.38217 +0.473 0.25 0.479965 0.383577 +0.4731 0.25 0.480292 0.384988 +0.4732 0.25 0.480619 0.386401 +0.4733 0.25 0.480946 0.387817 +0.4734 0.25 0.481273 0.389235 +0.4735 0.25 0.4816 0.390657 +0.4736 0.25 0.481927 0.392081 +0.4737 0.25 0.482254 0.393507 +0.4738 0.25 0.482581 0.394937 +0.4739 0.25 0.482908 0.396369 +0.474 0.25 0.483235 0.397803 +0.4741 0.25 0.483562 0.39924 +0.4742 0.25 0.483889 0.40068 +0.4743 0.25 0.484216 0.402122 +0.4744 0.25 0.484543 0.403566 +0.4745 0.25 0.48487 0.405013 +0.4746 0.25 0.485197 0.406462 +0.4747 0.25 0.485524 0.407914 +0.4748 0.25 0.485851 0.409367 +0.4749 0.25 0.486178 0.410823 +0.475 0.25 0.486505 0.412281 +0.4751 0.25 0.486832 0.413742 +0.4752 0.25 0.487159 0.415204 +0.4753 0.25 0.487486 0.416669 +0.4754 0.25 0.487813 0.418135 +0.4755 0.25 0.48814 0.419604 +0.4756 0.25 0.488466 0.421075 +0.4757 0.25 0.488793 0.422547 +0.4758 0.25 0.48912 0.424022 +0.4759 0.25 0.489447 0.425498 +0.476 0.25 0.489774 0.426977 +0.4761 0.25 0.490101 0.428457 +0.4762 0.25 0.490428 0.429939 +0.4763 0.25 0.490755 0.431422 +0.4764 0.25 0.491082 0.432908 +0.4765 0.25 0.491409 0.434394 +0.4766 0.25 0.491736 0.435883 +0.4767 0.25 0.492063 0.437373 +0.4768 0.25 0.49239 0.438865 +0.4769 0.25 0.492717 0.440358 +0.477 0.25 0.493044 0.441853 +0.4771 0.25 0.49337 0.443349 +0.4772 0.25 0.493697 0.444847 +0.4773 0.25 0.494024 0.446346 +0.4774 0.25 0.494351 0.447846 +0.4775 0.25 0.494678 0.449347 +0.4776 0.25 0.495005 0.45085 +0.4777 0.25 0.495331 0.452354 +0.4778 0.25 0.495658 0.453859 +0.4779 0.25 0.495985 0.455366 +0.478 0.25 0.496312 0.456873 +0.4781 0.25 0.496638 0.458382 +0.4782 0.25 0.496965 0.459891 +0.4783 0.25 0.497292 0.461402 +0.4784 0.25 0.497619 0.462913 +0.4785 0.25 0.497945 0.464426 +0.4786 0.25 0.498272 0.465939 +0.4787 0.25 0.498599 0.467453 +0.4788 0.25 0.498925 0.468968 +0.4789 0.25 0.499252 0.470484 +0.479 0.25 0.499578 0.472 +0.4791 0.25 0.499905 0.473517 +0.4792 0.25 0.500231 0.475035 +0.4793 0.25 0.500558 0.476553 +0.4794 0.25 0.500885 0.478072 +0.4795 0.25 0.501211 0.479592 +0.4796 0.25 0.501537 0.481112 +0.4797 0.25 0.501864 0.482632 +0.4798 0.25 0.50219 0.484153 +0.4799 0.25 0.502517 0.485674 +0.48 0.25 0.502843 0.487196 +0.4801 0.25 0.503169 0.488718 +0.4802 0.25 0.503496 0.49024 +0.4803 0.25 0.503822 0.491762 +0.4804 0.25 0.504148 0.493285 +0.4805 0.25 0.504475 0.494807 +0.4806 0.25 0.504801 0.49633 +0.4807 0.25 0.505127 0.497853 +0.4808 0.25 0.505453 0.499376 +0.4809 0.25 0.505779 0.500899 +0.481 0.25 0.506105 0.502422 +0.4811 0.25 0.506432 0.503945 +0.4812 0.25 0.506758 0.505468 +0.4813 0.25 0.507084 0.50699 +0.4814 0.25 0.50741 0.508512 +0.4815 0.25 0.507736 0.510035 +0.4816 0.25 0.508062 0.511556 +0.4817 0.25 0.508388 0.513078 +0.4818 0.25 0.508713 0.514599 +0.4819 0.25 0.509039 0.51612 +0.482 0.25 0.509365 0.51764 +0.4821 0.25 0.509691 0.51916 +0.4822 0.25 0.510017 0.52068 +0.4823 0.25 0.510342 0.522199 +0.4824 0.25 0.510668 0.523717 +0.4825 0.25 0.510994 0.525235 +0.4826 0.25 0.511319 0.526752 +0.4827 0.25 0.511645 0.528268 +0.4828 0.25 0.51197 0.529784 +0.4829 0.25 0.512296 0.531299 +0.483 0.25 0.512621 0.532813 +0.4831 0.25 0.512947 0.534326 +0.4832 0.25 0.513272 0.535839 +0.4833 0.25 0.513598 0.53735 +0.4834 0.25 0.513923 0.53886 +0.4835 0.25 0.514248 0.54037 +0.4836 0.25 0.514574 0.541878 +0.4837 0.25 0.514899 0.543386 +0.4838 0.25 0.515224 0.544892 +0.4839 0.25 0.515549 0.546397 +0.484 0.25 0.515874 0.547901 +0.4841 0.25 0.516199 0.549404 +0.4842 0.25 0.516524 0.550906 +0.4843 0.25 0.516849 0.552406 +0.4844 0.25 0.517174 0.553905 +0.4845 0.25 0.517499 0.555402 +0.4846 0.25 0.517824 0.556898 +0.4847 0.25 0.518149 0.558393 +0.4848 0.25 0.518473 0.559886 +0.4849 0.25 0.518798 0.561378 +0.485 0.25 0.519123 0.562868 +0.4851 0.25 0.519447 0.564357 +0.4852 0.25 0.519772 0.565844 +0.4853 0.25 0.520097 0.567329 +0.4854 0.25 0.520421 0.568812 +0.4855 0.25 0.520745 0.570294 +0.4856 0.25 0.52107 0.571774 +0.4857 0.25 0.521394 0.573252 +0.4858 0.25 0.521718 0.574729 +0.4859 0.25 0.522043 0.576203 +0.486 0.25 0.522367 0.577676 +0.4861 0.25 0.522691 0.579147 +0.4862 0.25 0.523015 0.580615 +0.4863 0.25 0.523339 0.582082 +0.4864 0.25 0.523663 0.583546 +0.4865 0.25 0.523987 0.585009 +0.4866 0.25 0.524311 0.586469 +0.4867 0.25 0.524635 0.587927 +0.4868 0.25 0.524959 0.589383 +0.4869 0.25 0.525282 0.590837 +0.487 0.25 0.525606 0.592289 +0.4871 0.25 0.52593 0.593738 +0.4872 0.25 0.526253 0.595184 +0.4873 0.25 0.526577 0.596629 +0.4874 0.25 0.5269 0.598071 +0.4875 0.25 0.527224 0.59951 +0.4876 0.25 0.527547 0.600947 +0.4877 0.25 0.52787 0.602382 +0.4878 0.25 0.528194 0.603814 +0.4879 0.25 0.528517 0.605243 +0.488 0.25 0.52884 0.60667 +0.4881 0.25 0.529163 0.608094 +0.4882 0.25 0.529486 0.609516 +0.4883 0.25 0.529809 0.610934 +0.4884 0.25 0.530132 0.61235 +0.4885 0.25 0.530455 0.613763 +0.4886 0.25 0.530777 0.615174 +0.4887 0.25 0.5311 0.616581 +0.4888 0.25 0.531423 0.617986 +0.4889 0.25 0.531745 0.619387 +0.489 0.25 0.532068 0.620786 +0.4891 0.25 0.53239 0.622182 +0.4892 0.25 0.532713 0.623575 +0.4893 0.25 0.533035 0.624964 +0.4894 0.25 0.533357 0.626351 +0.4895 0.25 0.533679 0.627734 +0.4896 0.25 0.534002 0.629114 +0.4897 0.25 0.534324 0.630491 +0.4898 0.25 0.534646 0.631865 +0.4899 0.25 0.534968 0.633236 +0.49 0.25 0.53529 0.634603 +0.4901 0.25 0.535611 0.635967 +0.4902 0.25 0.535933 0.637328 +0.4903 0.25 0.536255 0.638685 +0.4904 0.25 0.536576 0.640039 +0.4905 0.25 0.536898 0.641389 +0.4906 0.25 0.537219 0.642736 +0.4907 0.25 0.537541 0.64408 +0.4908 0.25 0.537862 0.64542 +0.4909 0.25 0.538183 0.646756 +0.491 0.25 0.538505 0.648089 +0.4911 0.25 0.538826 0.649418 +0.4912 0.25 0.539147 0.650743 +0.4913 0.25 0.539468 0.652065 +0.4914 0.25 0.539789 0.653383 +0.4915 0.25 0.54011 0.654697 +0.4916 0.25 0.54043 0.656008 +0.4917 0.25 0.540751 0.657315 +0.4918 0.25 0.541072 0.658618 +0.4919 0.25 0.541392 0.659917 +0.492 0.25 0.541713 0.661212 +0.4921 0.25 0.542033 0.662503 +0.4922 0.25 0.542353 0.66379 +0.4923 0.25 0.542674 0.665074 +0.4924 0.25 0.542994 0.666353 +0.4925 0.25 0.543314 0.667628 +0.4926 0.25 0.543634 0.6689 +0.4927 0.25 0.543954 0.670167 +0.4928 0.25 0.544274 0.67143 +0.4929 0.25 0.544594 0.672689 +0.493 0.25 0.544913 0.673943 +0.4931 0.25 0.545233 0.675194 +0.4932 0.25 0.545552 0.67644 +0.4933 0.25 0.545872 0.677682 +0.4934 0.25 0.546191 0.67892 +0.4935 0.25 0.546511 0.680154 +0.4936 0.25 0.54683 0.681383 +0.4937 0.25 0.547149 0.682608 +0.4938 0.25 0.547468 0.683828 +0.4939 0.25 0.547787 0.685044 +0.494 0.25 0.548106 0.686256 +0.4941 0.25 0.548425 0.687463 +0.4942 0.25 0.548743 0.688665 +0.4943 0.25 0.549062 0.689864 +0.4944 0.25 0.549381 0.691057 +0.4945 0.25 0.549699 0.692246 +0.4946 0.25 0.550018 0.693431 +0.4947 0.25 0.550336 0.694611 +0.4948 0.25 0.550654 0.695786 +0.4949 0.25 0.550972 0.696957 +0.495 0.25 0.55129 0.698123 +0.4951 0.25 0.551608 0.699284 +0.4952 0.25 0.551926 0.70044 +0.4953 0.25 0.552244 0.701592 +0.4954 0.25 0.552562 0.702739 +0.4955 0.25 0.552879 0.703881 +0.4956 0.25 0.553197 0.705019 +0.4957 0.25 0.553514 0.706151 +0.4958 0.25 0.553832 0.707279 +0.4959 0.25 0.554149 0.708402 +0.496 0.25 0.554466 0.70952 +0.4961 0.25 0.554783 0.710633 +0.4962 0.25 0.5551 0.711741 +0.4963 0.25 0.555417 0.712844 +0.4964 0.25 0.555734 0.713942 +0.4965 0.25 0.55605 0.715035 +0.4966 0.25 0.556367 0.716124 +0.4967 0.25 0.556683 0.717207 +0.4968 0.25 0.557 0.718285 +0.4969 0.25 0.557316 0.719358 +0.497 0.25 0.557632 0.720425 +0.4971 0.25 0.557949 0.721488 +0.4972 0.25 0.558265 0.722546 +0.4973 0.25 0.558581 0.723598 +0.4974 0.25 0.558896 0.724645 +0.4975 0.25 0.559212 0.725687 +0.4976 0.25 0.559528 0.726724 +0.4977 0.25 0.559843 0.727756 +0.4978 0.25 0.560159 0.728782 +0.4979 0.25 0.560474 0.729803 +0.498 0.25 0.560789 0.730819 +0.4981 0.25 0.561105 0.731829 +0.4982 0.25 0.56142 0.732835 +0.4983 0.25 0.561735 0.733834 +0.4984 0.25 0.562049 0.734829 +0.4985 0.25 0.562364 0.735818 +0.4986 0.25 0.562679 0.736802 +0.4987 0.25 0.562993 0.73778 +0.4988 0.25 0.563308 0.738753 +0.4989 0.25 0.563622 0.739721 +0.499 0.25 0.563936 0.740683 +0.4991 0.25 0.564251 0.741639 +0.4992 0.25 0.564565 0.74259 +0.4993 0.25 0.564879 0.743536 +0.4994 0.25 0.565192 0.744476 +0.4995 0.25 0.565506 0.74541 +0.4996 0.25 0.56582 0.746339 +0.4997 0.25 0.566133 0.747263 +0.4998 0.25 0.566447 0.748181 +0.4999 0.25 0.56676 0.749093 +0.5 0.75 0.567073 0.75 +0.5001 0.75 0.567386 0.750901 +0.5002 0.75 0.567699 0.751797 +0.5003 0.75 0.568012 0.752687 +0.5004 0.75 0.568325 0.753571 +0.5005 0.75 0.568638 0.75445 +0.5006 0.75 0.56895 0.755323 +0.5007 0.75 0.569263 0.75619 +0.5008 0.75 0.569575 0.757051 +0.5009 0.75 0.569887 0.757907 +0.501 0.75 0.570199 0.758758 +0.5011 0.75 0.570511 0.759602 +0.5012 0.75 0.570823 0.760441 +0.5013 0.75 0.571135 0.761274 +0.5014 0.75 0.571446 0.762101 +0.5015 0.75 0.571758 0.762923 +0.5016 0.75 0.572069 0.763739 +0.5017 0.75 0.572381 0.764549 +0.5018 0.75 0.572692 0.765353 +0.5019 0.75 0.573003 0.766151 +0.502 0.75 0.573314 0.766944 +0.5021 0.75 0.573625 0.767731 +0.5022 0.75 0.573936 0.768512 +0.5023 0.75 0.574246 0.769287 +0.5024 0.75 0.574557 0.770056 +0.5025 0.75 0.574867 0.77082 +0.5026 0.75 0.575177 0.771578 +0.5027 0.75 0.575488 0.772329 +0.5028 0.75 0.575798 0.773075 +0.5029 0.75 0.576108 0.773816 +0.503 0.75 0.576417 0.77455 +0.5031 0.75 0.576727 0.775278 +0.5032 0.75 0.577037 0.776001 +0.5033 0.75 0.577346 0.776717 +0.5034 0.75 0.577655 0.777428 +0.5035 0.75 0.577965 0.778133 +0.5036 0.75 0.578274 0.778832 +0.5037 0.75 0.578583 0.779525 +0.5038 0.75 0.578891 0.780212 +0.5039 0.75 0.5792 0.780893 +0.504 0.75 0.579509 0.781568 +0.5041 0.75 0.579817 0.782237 +0.5042 0.75 0.580126 0.782901 +0.5043 0.75 0.580434 0.783558 +0.5044 0.75 0.580742 0.78421 +0.5045 0.75 0.58105 0.784855 +0.5046 0.75 0.581358 0.785495 +0.5047 0.75 0.581665 0.786129 +0.5048 0.75 0.581973 0.786756 +0.5049 0.75 0.582281 0.787378 +0.505 0.75 0.582588 0.787994 +0.5051 0.75 0.582895 0.788604 +0.5052 0.75 0.583202 0.789208 +0.5053 0.75 0.583509 0.789806 +0.5054 0.75 0.583816 0.790398 +0.5055 0.75 0.584123 0.790984 +0.5056 0.75 0.584429 0.791564 +0.5057 0.75 0.584736 0.792139 +0.5058 0.75 0.585042 0.792707 +0.5059 0.75 0.585348 0.793269 +0.506 0.75 0.585654 0.793826 +0.5061 0.75 0.58596 0.794376 +0.5062 0.75 0.586266 0.794921 +0.5063 0.75 0.586572 0.795459 +0.5064 0.75 0.586877 0.795992 +0.5065 0.75 0.587183 0.796518 +0.5066 0.75 0.587488 0.797039 +0.5067 0.75 0.587793 0.797554 +0.5068 0.75 0.588098 0.798063 +0.5069 0.75 0.588403 0.798566 +0.507 0.75 0.588708 0.799063 +0.5071 0.75 0.589012 0.799554 +0.5072 0.75 0.589317 0.800039 +0.5073 0.75 0.589621 0.800518 +0.5074 0.75 0.589925 0.800991 +0.5075 0.75 0.590229 0.801459 +0.5076 0.75 0.590533 0.80192 +0.5077 0.75 0.590837 0.802376 +0.5078 0.75 0.591141 0.802826 +0.5079 0.75 0.591444 0.80327 +0.508 0.75 0.591748 0.803707 +0.5081 0.75 0.592051 0.80414 +0.5082 0.75 0.592354 0.804566 +0.5083 0.75 0.592657 0.804986 +0.5084 0.75 0.59296 0.8054 +0.5085 0.75 0.593263 0.805809 +0.5086 0.75 0.593565 0.806212 +0.5087 0.75 0.593868 0.806609 +0.5088 0.75 0.59417 0.807 +0.5089 0.75 0.594472 0.807385 +0.509 0.75 0.594774 0.807764 +0.5091 0.75 0.595076 0.808138 +0.5092 0.75 0.595378 0.808506 +0.5093 0.75 0.595679 0.808868 +0.5094 0.75 0.595981 0.809224 +0.5095 0.75 0.596282 0.809574 +0.5096 0.75 0.596583 0.809919 +0.5097 0.75 0.596884 0.810258 +0.5098 0.75 0.597185 0.810591 +0.5099 0.75 0.597485 0.810919 +0.51 0.75 0.597786 0.81124 +0.5101 0.75 0.598086 0.811556 +0.5102 0.75 0.598387 0.811866 +0.5103 0.75 0.598687 0.812171 +0.5104 0.75 0.598987 0.81247 +0.5105 0.75 0.599287 0.812763 +0.5106 0.75 0.599586 0.81305 +0.5107 0.75 0.599886 0.813332 +0.5108 0.75 0.600185 0.813608 +0.5109 0.75 0.600484 0.813879 +0.511 0.75 0.600784 0.814144 +0.5111 0.75 0.601082 0.814403 +0.5112 0.75 0.601381 0.814657 +0.5113 0.75 0.60168 0.814905 +0.5114 0.75 0.601978 0.815147 +0.5115 0.75 0.602277 0.815384 +0.5116 0.75 0.602575 0.815616 +0.5117 0.75 0.602873 0.815841 +0.5118 0.75 0.603171 0.816062 +0.5119 0.75 0.603469 0.816277 +0.512 0.75 0.603766 0.816486 +0.5121 0.75 0.604064 0.81669 +0.5122 0.75 0.604361 0.816888 +0.5123 0.75 0.604658 0.817081 +0.5124 0.75 0.604955 0.817268 +0.5125 0.75 0.605252 0.81745 +0.5126 0.75 0.605548 0.817627 +0.5127 0.75 0.605845 0.817798 +0.5128 0.75 0.606141 0.817964 +0.5129 0.75 0.606437 0.818124 +0.513 0.75 0.606733 0.81828 +0.5131 0.75 0.607029 0.818429 +0.5132 0.75 0.607325 0.818574 +0.5133 0.75 0.607621 0.818713 +0.5134 0.75 0.607916 0.818847 +0.5135 0.75 0.608211 0.818975 +0.5136 0.75 0.608506 0.819099 +0.5137 0.75 0.608801 0.819217 +0.5138 0.75 0.609096 0.819329 +0.5139 0.75 0.609391 0.819437 +0.514 0.75 0.609685 0.81954 +0.5141 0.75 0.60998 0.819637 +0.5142 0.75 0.610274 0.819729 +0.5143 0.75 0.610568 0.819816 +0.5144 0.75 0.610862 0.819898 +0.5145 0.75 0.611155 0.819975 +0.5146 0.75 0.611449 0.820046 +0.5147 0.75 0.611742 0.820113 +0.5148 0.75 0.612035 0.820174 +0.5149 0.75 0.612328 0.820231 +0.515 0.75 0.612621 0.820283 +0.5151 0.75 0.612914 0.820329 +0.5152 0.75 0.613206 0.820371 +0.5153 0.75 0.613499 0.820407 +0.5154 0.75 0.613791 0.820439 +0.5155 0.75 0.614083 0.820466 +0.5156 0.75 0.614375 0.820488 +0.5157 0.75 0.614666 0.820505 +0.5158 0.75 0.614958 0.820517 +0.5159 0.75 0.615249 0.820524 +0.516 0.75 0.615541 0.820527 +0.5161 0.75 0.615832 0.820525 +0.5162 0.75 0.616122 0.820518 +0.5163 0.75 0.616413 0.820506 +0.5164 0.75 0.616704 0.82049 +0.5165 0.75 0.616994 0.820469 +0.5166 0.75 0.617284 0.820443 +0.5167 0.75 0.617574 0.820412 +0.5168 0.75 0.617864 0.820377 +0.5169 0.75 0.618154 0.820337 +0.517 0.75 0.618443 0.820293 +0.5171 0.75 0.618733 0.820244 +0.5172 0.75 0.619022 0.820191 +0.5173 0.75 0.619311 0.820133 +0.5174 0.75 0.6196 0.82007 +0.5175 0.75 0.619889 0.820003 +0.5176 0.75 0.620177 0.819932 +0.5177 0.75 0.620465 0.819856 +0.5178 0.75 0.620754 0.819776 +0.5179 0.75 0.621042 0.819691 +0.518 0.75 0.621329 0.819602 +0.5181 0.75 0.621617 0.819509 +0.5182 0.75 0.621904 0.819411 +0.5183 0.75 0.622192 0.819309 +0.5184 0.75 0.622479 0.819203 +0.5185 0.75 0.622766 0.819093 +0.5186 0.75 0.623053 0.818978 +0.5187 0.75 0.623339 0.818859 +0.5188 0.75 0.623626 0.818736 +0.5189 0.75 0.623912 0.818609 +0.519 0.75 0.624198 0.818477 +0.5191 0.75 0.624484 0.818342 +0.5192 0.75 0.62477 0.818203 +0.5193 0.75 0.625055 0.818059 +0.5194 0.75 0.62534 0.817912 +0.5195 0.75 0.625626 0.81776 +0.5196 0.75 0.625911 0.817604 +0.5197 0.75 0.626195 0.817445 +0.5198 0.75 0.62648 0.817282 +0.5199 0.75 0.626765 0.817114 +0.52 0.75 0.627049 0.816943 +0.5201 0.75 0.627333 0.816768 +0.5202 0.75 0.627617 0.816589 +0.5203 0.75 0.627901 0.816407 +0.5204 0.75 0.628184 0.81622 +0.5205 0.75 0.628468 0.81603 +0.5206 0.75 0.628751 0.815837 +0.5207 0.75 0.629034 0.815639 +0.5208 0.75 0.629317 0.815438 +0.5209 0.75 0.629599 0.815233 +0.521 0.75 0.629882 0.815025 +0.5211 0.75 0.630164 0.814813 +0.5212 0.75 0.630446 0.814597 +0.5213 0.75 0.630728 0.814378 +0.5214 0.75 0.63101 0.814156 +0.5215 0.75 0.631292 0.81393 +0.5216 0.75 0.631573 0.8137 +0.5217 0.75 0.631854 0.813468 +0.5218 0.75 0.632135 0.813231 +0.5219 0.75 0.632416 0.812992 +0.522 0.75 0.632697 0.812749 +0.5221 0.75 0.632977 0.812503 +0.5222 0.75 0.633257 0.812253 +0.5223 0.75 0.633537 0.812 +0.5224 0.75 0.633817 0.811744 +0.5225 0.75 0.634097 0.811485 +0.5226 0.75 0.634376 0.811223 +0.5227 0.75 0.634656 0.810957 +0.5228 0.75 0.634935 0.810689 +0.5229 0.75 0.635214 0.810417 +0.523 0.75 0.635493 0.810143 +0.5231 0.75 0.635771 0.809865 +0.5232 0.75 0.63605 0.809584 +0.5233 0.75 0.636328 0.8093 +0.5234 0.75 0.636606 0.809014 +0.5235 0.75 0.636884 0.808724 +0.5236 0.75 0.637161 0.808432 +0.5237 0.75 0.637439 0.808137 +0.5238 0.75 0.637716 0.807839 +0.5239 0.75 0.637993 0.807538 +0.524 0.75 0.63827 0.807234 +0.5241 0.75 0.638547 0.806928 +0.5242 0.75 0.638823 0.806619 +0.5243 0.75 0.639099 0.806307 +0.5244 0.75 0.639375 0.805992 +0.5245 0.75 0.639651 0.805675 +0.5246 0.75 0.639927 0.805356 +0.5247 0.75 0.640202 0.805034 +0.5248 0.75 0.640478 0.804709 +0.5249 0.75 0.640753 0.804382 +0.525 0.75 0.641028 0.804052 +0.5251 0.75 0.641303 0.80372 +0.5252 0.75 0.641577 0.803386 +0.5253 0.75 0.641851 0.803049 +0.5254 0.75 0.642126 0.802709 +0.5255 0.75 0.642399 0.802368 +0.5256 0.75 0.642673 0.802024 +0.5257 0.75 0.642947 0.801678 +0.5258 0.75 0.64322 0.801329 +0.5259 0.75 0.643493 0.800979 +0.526 0.75 0.643766 0.800626 +0.5261 0.75 0.644039 0.800271 +0.5262 0.75 0.644312 0.799914 +0.5263 0.75 0.644584 0.799555 +0.5264 0.75 0.644856 0.799194 +0.5265 0.75 0.645128 0.798831 +0.5266 0.75 0.6454 0.798465 +0.5267 0.75 0.645671 0.798098 +0.5268 0.75 0.645943 0.797729 +0.5269 0.75 0.646214 0.797358 +0.527 0.75 0.646485 0.796985 +0.5271 0.75 0.646756 0.79661 +0.5272 0.75 0.647026 0.796234 +0.5273 0.75 0.647297 0.795856 +0.5274 0.75 0.647567 0.795475 +0.5275 0.75 0.647837 0.795094 +0.5276 0.75 0.648106 0.79471 +0.5277 0.75 0.648376 0.794325 +0.5278 0.75 0.648645 0.793938 +0.5279 0.75 0.648914 0.793549 +0.528 0.75 0.649183 0.793159 +0.5281 0.75 0.649452 0.792768 +0.5282 0.75 0.649721 0.792375 +0.5283 0.75 0.649989 0.79198 +0.5284 0.75 0.650257 0.791584 +0.5285 0.75 0.650525 0.791186 +0.5286 0.75 0.650793 0.790787 +0.5287 0.75 0.65106 0.790387 +0.5288 0.75 0.651327 0.789986 +0.5289 0.75 0.651595 0.789583 +0.529 0.75 0.651861 0.789178 +0.5291 0.75 0.652128 0.788773 +0.5292 0.75 0.652395 0.788366 +0.5293 0.75 0.652661 0.787958 +0.5294 0.75 0.652927 0.787549 +0.5295 0.75 0.653193 0.787139 +0.5296 0.75 0.653458 0.786727 +0.5297 0.75 0.653724 0.786315 +0.5298 0.75 0.653989 0.785902 +0.5299 0.75 0.654254 0.785487 +0.53 0.75 0.654519 0.785072 +0.5301 0.75 0.654783 0.784655 +0.5302 0.75 0.655048 0.784238 +0.5303 0.75 0.655312 0.783819 +0.5304 0.75 0.655576 0.7834 +0.5305 0.75 0.65584 0.78298 +0.5306 0.75 0.656103 0.782559 +0.5307 0.75 0.656367 0.782138 +0.5308 0.75 0.65663 0.781715 +0.5309 0.75 0.656893 0.781292 +0.531 0.75 0.657155 0.780868 +0.5311 0.75 0.657418 0.780444 +0.5312 0.75 0.65768 0.780019 +0.5313 0.75 0.657942 0.779593 +0.5314 0.75 0.658204 0.779167 +0.5315 0.75 0.658466 0.77874 +0.5316 0.75 0.658727 0.778313 +0.5317 0.75 0.658988 0.777885 +0.5318 0.75 0.659249 0.777456 +0.5319 0.75 0.65951 0.777027 +0.532 0.75 0.65977 0.776598 +0.5321 0.75 0.660031 0.776169 +0.5322 0.75 0.660291 0.775739 +0.5323 0.75 0.660551 0.775308 +0.5324 0.75 0.660811 0.774878 +0.5325 0.75 0.66107 0.774447 +0.5326 0.75 0.661329 0.774016 +0.5327 0.75 0.661588 0.773584 +0.5328 0.75 0.661847 0.773153 +0.5329 0.75 0.662106 0.772721 +0.533 0.75 0.662364 0.772289 +0.5331 0.75 0.662622 0.771857 +0.5332 0.75 0.66288 0.771425 +0.5333 0.75 0.663138 0.770993 +0.5334 0.75 0.663395 0.770561 +0.5335 0.75 0.663653 0.770129 +0.5336 0.75 0.66391 0.769697 +0.5337 0.75 0.664167 0.769265 +0.5338 0.75 0.664423 0.768833 +0.5339 0.75 0.66468 0.768401 +0.534 0.75 0.664936 0.767969 +0.5341 0.75 0.665192 0.767538 +0.5342 0.75 0.665448 0.767106 +0.5343 0.75 0.665703 0.766675 +0.5344 0.75 0.665959 0.766244 +0.5345 0.75 0.666214 0.765813 +0.5346 0.75 0.666469 0.765383 +0.5347 0.75 0.666723 0.764953 +0.5348 0.75 0.666978 0.764523 +0.5349 0.75 0.667232 0.764094 +0.535 0.75 0.667486 0.763665 +0.5351 0.75 0.66774 0.763237 +0.5352 0.75 0.667993 0.762809 +0.5353 0.75 0.668246 0.762381 +0.5354 0.75 0.6685 0.761954 +0.5355 0.75 0.668752 0.761528 +0.5356 0.75 0.669005 0.761102 +0.5357 0.75 0.669257 0.760676 +0.5358 0.75 0.66951 0.760251 +0.5359 0.75 0.669762 0.759827 +0.536 0.75 0.670013 0.759404 +0.5361 0.75 0.670265 0.758981 +0.5362 0.75 0.670516 0.758559 +0.5363 0.75 0.670767 0.758137 +0.5364 0.75 0.671018 0.757717 +0.5365 0.75 0.671269 0.757297 +0.5366 0.75 0.671519 0.756878 +0.5367 0.75 0.671769 0.756459 +0.5368 0.75 0.672019 0.756042 +0.5369 0.75 0.672269 0.755625 +0.537 0.75 0.672518 0.75521 +0.5371 0.75 0.672768 0.754795 +0.5372 0.75 0.673017 0.754381 +0.5373 0.75 0.673265 0.753968 +0.5374 0.75 0.673514 0.753557 +0.5375 0.75 0.673762 0.753146 +0.5376 0.75 0.67401 0.752736 +0.5377 0.75 0.674258 0.752327 +0.5378 0.75 0.674506 0.75192 +0.5379 0.75 0.674753 0.751513 +0.538 0.75 0.675001 0.751107 +0.5381 0.75 0.675248 0.750703 +0.5382 0.75 0.675494 0.7503 +0.5383 0.75 0.675741 0.749898 +0.5384 0.75 0.675987 0.749497 +0.5385 0.75 0.676233 0.749098 +0.5386 0.75 0.676479 0.7487 +0.5387 0.75 0.676724 0.748303 +0.5388 0.75 0.67697 0.747907 +0.5389 0.75 0.677215 0.747513 +0.539 0.75 0.67746 0.74712 +0.5391 0.75 0.677704 0.746728 +0.5392 0.75 0.677949 0.746338 +0.5393 0.75 0.678193 0.745949 +0.5394 0.75 0.678437 0.745562 +0.5395 0.75 0.678681 0.745176 +0.5396 0.75 0.678924 0.744791 +0.5397 0.75 0.679167 0.744408 +0.5398 0.75 0.67941 0.744027 +0.5399 0.75 0.679653 0.743647 +0.54 0.75 0.679896 0.743268 +0.5401 0.75 0.680138 0.742891 +0.5402 0.75 0.68038 0.742516 +0.5403 0.75 0.680622 0.742142 +0.5404 0.75 0.680863 0.74177 +0.5405 0.75 0.681105 0.7414 +0.5406 0.75 0.681346 0.741031 +0.5407 0.75 0.681587 0.740664 +0.5408 0.75 0.681827 0.740298 +0.5409 0.75 0.682068 0.739935 +0.541 0.75 0.682308 0.739573 +0.5411 0.75 0.682548 0.739213 +0.5412 0.75 0.682788 0.738854 +0.5413 0.75 0.683027 0.738498 +0.5414 0.75 0.683266 0.738143 +0.5415 0.75 0.683505 0.73779 +0.5416 0.75 0.683744 0.737439 +0.5417 0.75 0.683983 0.737089 +0.5418 0.75 0.684221 0.736742 +0.5419 0.75 0.684459 0.736396 +0.542 0.75 0.684697 0.736053 +0.5421 0.75 0.684934 0.735711 +0.5422 0.75 0.685172 0.735371 +0.5423 0.75 0.685409 0.735033 +0.5424 0.75 0.685646 0.734697 +0.5425 0.75 0.685882 0.734364 +0.5426 0.75 0.686119 0.734032 +0.5427 0.75 0.686355 0.733702 +0.5428 0.75 0.686591 0.733374 +0.5429 0.75 0.686826 0.733048 +0.543 0.75 0.687062 0.732725 +0.5431 0.75 0.687297 0.732403 +0.5432 0.75 0.687532 0.732084 +0.5433 0.75 0.687766 0.731766 +0.5434 0.75 0.688001 0.731451 +0.5435 0.75 0.688235 0.731138 +0.5436 0.75 0.688469 0.730827 +0.5437 0.75 0.688703 0.730518 +0.5438 0.75 0.688936 0.730212 +0.5439 0.75 0.689169 0.729907 +0.544 0.75 0.689402 0.729605 +0.5441 0.75 0.689635 0.729305 +0.5442 0.75 0.689867 0.729007 +0.5443 0.75 0.6901 0.728712 +0.5444 0.75 0.690332 0.728418 +0.5445 0.75 0.690563 0.728127 +0.5446 0.75 0.690795 0.727839 +0.5447 0.75 0.691026 0.727552 +0.5448 0.75 0.691257 0.727268 +0.5449 0.75 0.691488 0.726987 +0.545 0.75 0.691718 0.726707 +0.5451 0.75 0.691949 0.72643 +0.5452 0.75 0.692179 0.726155 +0.5453 0.75 0.692409 0.725883 +0.5454 0.75 0.692638 0.725613 +0.5455 0.75 0.692867 0.725345 +0.5456 0.75 0.693096 0.72508 +0.5457 0.75 0.693325 0.724817 +0.5458 0.75 0.693554 0.724557 +0.5459 0.75 0.693782 0.724299 +0.546 0.75 0.69401 0.724044 +0.5461 0.75 0.694238 0.723791 +0.5462 0.75 0.694465 0.72354 +0.5463 0.75 0.694693 0.723292 +0.5464 0.75 0.69492 0.723046 +0.5465 0.75 0.695147 0.722803 +0.5466 0.75 0.695373 0.722563 +0.5467 0.75 0.6956 0.722325 +0.5468 0.75 0.695826 0.722089 +0.5469 0.75 0.696051 0.721856 +0.547 0.75 0.696277 0.721625 +0.5471 0.75 0.696502 0.721397 +0.5472 0.75 0.696727 0.721172 +0.5473 0.75 0.696952 0.720949 +0.5474 0.75 0.697177 0.720729 +0.5475 0.75 0.697401 0.720511 +0.5476 0.75 0.697625 0.720296 +0.5477 0.75 0.697849 0.720083 +0.5478 0.75 0.698073 0.719873 +0.5479 0.75 0.698296 0.719666 +0.548 0.75 0.698519 0.719461 +0.5481 0.75 0.698742 0.719259 +0.5482 0.75 0.698964 0.719059 +0.5483 0.75 0.699187 0.718862 +0.5484 0.75 0.699409 0.718668 +0.5485 0.75 0.699631 0.718476 +0.5486 0.75 0.699852 0.718287 +0.5487 0.75 0.700073 0.718101 +0.5488 0.75 0.700295 0.717917 +0.5489 0.75 0.700515 0.717736 +0.549 0.75 0.700736 0.717558 +0.5491 0.75 0.700956 0.717382 +0.5492 0.75 0.701176 0.717209 +0.5493 0.75 0.701396 0.717038 +0.5494 0.75 0.701616 0.716871 +0.5495 0.75 0.701835 0.716706 +0.5496 0.75 0.702054 0.716543 +0.5497 0.75 0.702273 0.716384 +0.5498 0.75 0.702491 0.716227 +0.5499 0.75 0.702709 0.716073 +0.55 0.75 0.702927 0.715921 +0.5501 0.75 0.703145 0.715772 +0.5502 0.75 0.703363 0.715626 +0.5503 0.75 0.70358 0.715483 +0.5504 0.75 0.703797 0.715342 +0.5505 0.75 0.704014 0.715204 +0.5506 0.75 0.70423 0.715069 +0.5507 0.75 0.704446 0.714936 +0.5508 0.75 0.704662 0.714806 +0.5509 0.75 0.704878 0.714679 +0.551 0.75 0.705093 0.714555 +0.5511 0.75 0.705309 0.714433 +0.5512 0.75 0.705524 0.714314 +0.5513 0.75 0.705738 0.714198 +0.5514 0.75 0.705953 0.714084 +0.5515 0.75 0.706167 0.713973 +0.5516 0.75 0.706381 0.713865 +0.5517 0.75 0.706594 0.71376 +0.5518 0.75 0.706808 0.713658 +0.5519 0.75 0.707021 0.713558 +0.552 0.75 0.707234 0.713461 +0.5521 0.75 0.707447 0.713366 +0.5522 0.75 0.707659 0.713274 +0.5523 0.75 0.707871 0.713186 +0.5524 0.75 0.708083 0.713099 +0.5525 0.75 0.708294 0.713016 +0.5526 0.75 0.708506 0.712935 +0.5527 0.75 0.708717 0.712857 +0.5528 0.75 0.708928 0.712782 +0.5529 0.75 0.709138 0.712709 +0.553 0.75 0.709348 0.712639 +0.5531 0.75 0.709558 0.712572 +0.5532 0.75 0.709768 0.712507 +0.5533 0.75 0.709978 0.712446 +0.5534 0.75 0.710187 0.712387 +0.5535 0.75 0.710396 0.71233 +0.5536 0.75 0.710605 0.712277 +0.5537 0.75 0.710813 0.712226 +0.5538 0.75 0.711021 0.712177 +0.5539 0.75 0.711229 0.712132 +0.554 0.75 0.711437 0.712089 +0.5541 0.75 0.711644 0.712049 +0.5542 0.75 0.711852 0.712011 +0.5543 0.75 0.712059 0.711976 +0.5544 0.75 0.712265 0.711944 +0.5545 0.75 0.712472 0.711915 +0.5546 0.75 0.712678 0.711888 +0.5547 0.75 0.712884 0.711864 +0.5548 0.75 0.713089 0.711842 +0.5549 0.75 0.713294 0.711823 +0.555 0.75 0.7135 0.711807 +0.5551 0.75 0.713704 0.711793 +0.5552 0.75 0.713909 0.711782 +0.5553 0.75 0.714113 0.711774 +0.5554 0.75 0.714317 0.711768 +0.5555 0.75 0.714521 0.711765 +0.5556 0.75 0.714724 0.711765 +0.5557 0.75 0.714928 0.711767 +0.5558 0.75 0.715131 0.711772 +0.5559 0.75 0.715333 0.711779 +0.556 0.75 0.715536 0.711789 +0.5561 0.75 0.715738 0.711801 +0.5562 0.75 0.71594 0.711816 +0.5563 0.75 0.716141 0.711834 +0.5564 0.75 0.716343 0.711854 +0.5565 0.75 0.716544 0.711877 +0.5566 0.75 0.716745 0.711902 +0.5567 0.75 0.716945 0.71193 +0.5568 0.75 0.717146 0.71196 +0.5569 0.75 0.717346 0.711993 +0.557 0.75 0.717545 0.712028 +0.5571 0.75 0.717745 0.712066 +0.5572 0.75 0.717944 0.712106 +0.5573 0.75 0.718143 0.712149 +0.5574 0.75 0.718342 0.712194 +0.5575 0.75 0.71854 0.712242 +0.5576 0.75 0.718739 0.712292 +0.5577 0.75 0.718936 0.712345 +0.5578 0.75 0.719134 0.7124 +0.5579 0.75 0.719332 0.712458 +0.558 0.75 0.719529 0.712518 +0.5581 0.75 0.719726 0.71258 +0.5582 0.75 0.719922 0.712645 +0.5583 0.75 0.720118 0.712712 +0.5584 0.75 0.720314 0.712782 +0.5585 0.75 0.72051 0.712853 +0.5586 0.75 0.720706 0.712928 +0.5587 0.75 0.720901 0.713004 +0.5588 0.75 0.721096 0.713083 +0.5589 0.75 0.721291 0.713165 +0.559 0.75 0.721485 0.713248 +0.5591 0.75 0.721679 0.713334 +0.5592 0.75 0.721873 0.713423 +0.5593 0.75 0.722067 0.713513 +0.5594 0.75 0.72226 0.713606 +0.5595 0.75 0.722453 0.713701 +0.5596 0.75 0.722646 0.713799 +0.5597 0.75 0.722839 0.713898 +0.5598 0.75 0.723031 0.714 +0.5599 0.75 0.723223 0.714104 +0.56 0.75 0.723415 0.71421 +0.5601 0.75 0.723606 0.714319 +0.5602 0.75 0.723798 0.714429 +0.5603 0.75 0.723989 0.714542 +0.5604 0.75 0.724179 0.714657 +0.5605 0.75 0.72437 0.714774 +0.5606 0.75 0.72456 0.714894 +0.5607 0.75 0.72475 0.715015 +0.5608 0.75 0.724939 0.715138 +0.5609 0.75 0.725129 0.715264 +0.561 0.75 0.725318 0.715392 +0.5611 0.75 0.725507 0.715522 +0.5612 0.75 0.725695 0.715653 +0.5613 0.75 0.725883 0.715787 +0.5614 0.75 0.726071 0.715923 +0.5615 0.75 0.726259 0.716061 +0.5616 0.75 0.726446 0.716201 +0.5617 0.75 0.726634 0.716343 +0.5618 0.75 0.72682 0.716487 +0.5619 0.75 0.727007 0.716633 +0.562 0.75 0.727193 0.71678 +0.5621 0.75 0.72738 0.71693 +0.5622 0.75 0.727565 0.717082 +0.5623 0.75 0.727751 0.717235 +0.5624 0.75 0.727936 0.717391 +0.5625 0.75 0.728121 0.717548 +0.5626 0.75 0.728306 0.717707 +0.5627 0.75 0.72849 0.717869 +0.5628 0.75 0.728675 0.718031 +0.5629 0.75 0.728858 0.718196 +0.563 0.75 0.729042 0.718363 +0.5631 0.75 0.729225 0.718531 +0.5632 0.75 0.729409 0.718701 +0.5633 0.75 0.729591 0.718873 +0.5634 0.75 0.729774 0.719047 +0.5635 0.75 0.729956 0.719222 +0.5636 0.75 0.730138 0.719399 +0.5637 0.75 0.73032 0.719578 +0.5638 0.75 0.730501 0.719758 +0.5639 0.75 0.730683 0.71994 +0.564 0.75 0.730863 0.720124 +0.5641 0.75 0.731044 0.72031 +0.5642 0.75 0.731224 0.720497 +0.5643 0.75 0.731405 0.720685 +0.5644 0.75 0.731584 0.720875 +0.5645 0.75 0.731764 0.721067 +0.5646 0.75 0.731943 0.721261 +0.5647 0.75 0.732122 0.721456 +0.5648 0.75 0.732301 0.721652 +0.5649 0.75 0.732479 0.72185 +0.565 0.75 0.732657 0.722049 +0.5651 0.75 0.732835 0.72225 +0.5652 0.75 0.733013 0.722453 +0.5653 0.75 0.73319 0.722656 +0.5654 0.75 0.733367 0.722862 +0.5655 0.75 0.733544 0.723068 +0.5656 0.75 0.733721 0.723276 +0.5657 0.75 0.733897 0.723486 +0.5658 0.75 0.734073 0.723697 +0.5659 0.75 0.734249 0.723909 +0.566 0.75 0.734424 0.724122 +0.5661 0.75 0.734599 0.724337 +0.5662 0.75 0.734774 0.724553 +0.5663 0.75 0.734949 0.724771 +0.5664 0.75 0.735123 0.724989 +0.5665 0.75 0.735297 0.725209 +0.5666 0.75 0.735471 0.72543 +0.5667 0.75 0.735644 0.725653 +0.5668 0.75 0.735818 0.725876 +0.5669 0.75 0.735991 0.726101 +0.567 0.75 0.736163 0.726327 +0.5671 0.75 0.736336 0.726554 +0.5672 0.75 0.736508 0.726782 +0.5673 0.75 0.73668 0.727011 +0.5674 0.75 0.736851 0.727241 +0.5675 0.75 0.737022 0.727473 +0.5676 0.75 0.737193 0.727705 +0.5677 0.75 0.737364 0.727939 +0.5678 0.75 0.737535 0.728173 +0.5679 0.75 0.737705 0.728408 +0.568 0.75 0.737875 0.728645 +0.5681 0.75 0.738044 0.728882 +0.5682 0.75 0.738214 0.729121 +0.5683 0.75 0.738383 0.72936 +0.5684 0.75 0.738552 0.7296 +0.5685 0.75 0.73872 0.729841 +0.5686 0.75 0.738888 0.730083 +0.5687 0.75 0.739056 0.730326 +0.5688 0.75 0.739224 0.73057 +0.5689 0.75 0.739391 0.730814 +0.569 0.75 0.739559 0.73106 +0.5691 0.75 0.739725 0.731306 +0.5692 0.75 0.739892 0.731553 +0.5693 0.75 0.740058 0.7318 +0.5694 0.75 0.740224 0.732049 +0.5695 0.75 0.74039 0.732298 +0.5696 0.75 0.740556 0.732548 +0.5697 0.75 0.740721 0.732798 +0.5698 0.75 0.740886 0.733049 +0.5699 0.75 0.74105 0.733301 +0.57 0.75 0.741215 0.733553 +0.5701 0.75 0.741379 0.733806 +0.5702 0.75 0.741543 0.73406 +0.5703 0.75 0.741706 0.734314 +0.5704 0.75 0.741869 0.734569 +0.5705 0.75 0.742032 0.734824 +0.5706 0.75 0.742195 0.73508 +0.5707 0.75 0.742358 0.735336 +0.5708 0.75 0.74252 0.735593 +0.5709 0.75 0.742682 0.73585 +0.571 0.75 0.742843 0.736108 +0.5711 0.75 0.743004 0.736366 +0.5712 0.75 0.743165 0.736625 +0.5713 0.75 0.743326 0.736883 +0.5714 0.75 0.743487 0.737143 +0.5715 0.75 0.743647 0.737402 +0.5716 0.75 0.743807 0.737662 +0.5717 0.75 0.743966 0.737923 +0.5718 0.75 0.744126 0.738183 +0.5719 0.75 0.744285 0.738444 +0.572 0.75 0.744444 0.738705 +0.5721 0.75 0.744602 0.738967 +0.5722 0.75 0.74476 0.739228 +0.5723 0.75 0.744918 0.73949 +0.5724 0.75 0.745076 0.739752 +0.5725 0.75 0.745233 0.740014 +0.5726 0.75 0.745391 0.740277 +0.5727 0.75 0.745547 0.740539 +0.5728 0.75 0.745704 0.740802 +0.5729 0.75 0.74586 0.741065 +0.573 0.75 0.746016 0.741327 +0.5731 0.75 0.746172 0.74159 +0.5732 0.75 0.746327 0.741853 +0.5733 0.75 0.746483 0.742116 +0.5734 0.75 0.746638 0.742379 +0.5735 0.75 0.746792 0.742642 +0.5736 0.75 0.746946 0.742905 +0.5737 0.75 0.747101 0.743168 +0.5738 0.75 0.747254 0.743431 +0.5739 0.75 0.747408 0.743694 +0.574 0.75 0.747561 0.743957 +0.5741 0.75 0.747714 0.744219 +0.5742 0.75 0.747867 0.744482 +0.5743 0.75 0.748019 0.744744 +0.5744 0.75 0.748171 0.745007 +0.5745 0.75 0.748323 0.745269 +0.5746 0.75 0.748474 0.745531 +0.5747 0.75 0.748626 0.745792 +0.5748 0.75 0.748777 0.746054 +0.5749 0.75 0.748927 0.746315 +0.575 0.75 0.749078 0.746576 +0.5751 0.75 0.749228 0.746836 +0.5752 0.75 0.749378 0.747097 +0.5753 0.75 0.749527 0.747357 +0.5754 0.75 0.749677 0.747617 +0.5755 0.75 0.749826 0.747876 +0.5756 0.75 0.749974 0.748135 +0.5757 0.75 0.750123 0.748394 +0.5758 0.75 0.750271 0.748652 +0.5759 0.75 0.750419 0.74891 +0.576 0.75 0.750567 0.749167 +0.5761 0.75 0.750714 0.749424 +0.5762 0.75 0.750861 0.749681 +0.5763 0.75 0.751008 0.749937 +0.5764 0.75 0.751154 0.750193 +0.5765 0.75 0.7513 0.750448 +0.5766 0.75 0.751446 0.750702 +0.5767 0.75 0.751592 0.750956 +0.5768 0.75 0.751737 0.75121 +0.5769 0.75 0.751882 0.751463 +0.577 0.75 0.752027 0.751715 +0.5771 0.75 0.752172 0.751967 +0.5772 0.75 0.752316 0.752218 +0.5773 0.75 0.75246 0.752468 +0.5774 0.75 0.752604 0.752718 +0.5775 0.75 0.752747 0.752967 +0.5776 0.75 0.75289 0.753215 +0.5777 0.75 0.753033 0.753463 +0.5778 0.75 0.753176 0.75371 +0.5779 0.75 0.753318 0.753957 +0.578 0.75 0.75346 0.754202 +0.5781 0.75 0.753602 0.754447 +0.5782 0.75 0.753743 0.754691 +0.5783 0.75 0.753884 0.754934 +0.5784 0.75 0.754025 0.755177 +0.5785 0.75 0.754166 0.755418 +0.5786 0.75 0.754306 0.755659 +0.5787 0.75 0.754446 0.755899 +0.5788 0.75 0.754586 0.756138 +0.5789 0.75 0.754726 0.756377 +0.579 0.75 0.754865 0.756614 +0.5791 0.75 0.755004 0.75685 +0.5792 0.75 0.755142 0.757086 +0.5793 0.75 0.755281 0.757321 +0.5794 0.75 0.755419 0.757554 +0.5795 0.75 0.755557 0.757787 +0.5796 0.75 0.755694 0.758019 +0.5797 0.75 0.755831 0.75825 +0.5798 0.75 0.755968 0.758479 +0.5799 0.75 0.756105 0.758708 +0.58 0.75 0.756241 0.758936 +0.5801 0.75 0.756377 0.759162 +0.5802 0.75 0.756513 0.759388 +0.5803 0.75 0.756649 0.759613 +0.5804 0.75 0.756784 0.759836 +0.5805 0.75 0.756919 0.760058 +0.5806 0.75 0.757054 0.76028 +0.5807 0.75 0.757188 0.7605 +0.5808 0.75 0.757322 0.760719 +0.5809 0.75 0.757456 0.760937 +0.581 0.75 0.75759 0.761153 +0.5811 0.75 0.757723 0.761369 +0.5812 0.75 0.757856 0.761583 +0.5813 0.75 0.757989 0.761796 +0.5814 0.75 0.758122 0.762008 +0.5815 0.75 0.758254 0.762219 +0.5816 0.75 0.758386 0.762429 +0.5817 0.75 0.758517 0.762637 +0.5818 0.75 0.758649 0.762844 +0.5819 0.75 0.75878 0.76305 +0.582 0.75 0.75891 0.763254 +0.5821 0.75 0.759041 0.763457 +0.5822 0.75 0.759171 0.763659 +0.5823 0.75 0.759301 0.76386 +0.5824 0.75 0.759431 0.764059 +0.5825 0.75 0.75956 0.764257 +0.5826 0.75 0.759689 0.764454 +0.5827 0.75 0.759818 0.764649 +0.5828 0.75 0.759947 0.764843 +0.5829 0.75 0.760075 0.765035 +0.583 0.75 0.760203 0.765226 +0.5831 0.75 0.760331 0.765416 +0.5832 0.75 0.760458 0.765604 +0.5833 0.75 0.760585 0.765791 +0.5834 0.75 0.760712 0.765976 +0.5835 0.75 0.760839 0.76616 +0.5836 0.75 0.760965 0.766343 +0.5837 0.75 0.761091 0.766524 +0.5838 0.75 0.761217 0.766704 +0.5839 0.75 0.761342 0.766882 +0.584 0.75 0.761467 0.767058 +0.5841 0.75 0.761592 0.767234 +0.5842 0.75 0.761717 0.767407 +0.5843 0.75 0.761841 0.767579 +0.5844 0.75 0.761965 0.76775 +0.5845 0.75 0.762089 0.767919 +0.5846 0.75 0.762213 0.768087 +0.5847 0.75 0.762336 0.768253 +0.5848 0.75 0.762459 0.768417 +0.5849 0.75 0.762582 0.76858 +0.585 0.75 0.762704 0.768741 +0.5851 0.75 0.762826 0.768901 +0.5852 0.75 0.762948 0.769059 +0.5853 0.75 0.763069 0.769216 +0.5854 0.75 0.763191 0.76937 +0.5855 0.75 0.763312 0.769524 +0.5856 0.75 0.763432 0.769675 +0.5857 0.75 0.763553 0.769825 +0.5858 0.75 0.763673 0.769974 +0.5859 0.75 0.763793 0.770121 +0.586 0.75 0.763912 0.770266 +0.5861 0.75 0.764032 0.770409 +0.5862 0.75 0.764151 0.770551 +0.5863 0.75 0.76427 0.770691 +0.5864 0.75 0.764388 0.770829 +0.5865 0.75 0.764506 0.770966 +0.5866 0.75 0.764624 0.771101 +0.5867 0.75 0.764742 0.771235 +0.5868 0.75 0.764859 0.771366 +0.5869 0.75 0.764976 0.771496 +0.587 0.75 0.765093 0.771624 +0.5871 0.75 0.76521 0.771751 +0.5872 0.75 0.765326 0.771876 +0.5873 0.75 0.765442 0.771999 +0.5874 0.75 0.765557 0.77212 +0.5875 0.75 0.765673 0.772239 +0.5876 0.75 0.765788 0.772357 +0.5877 0.75 0.765903 0.772473 +0.5878 0.75 0.766017 0.772588 +0.5879 0.75 0.766132 0.7727 +0.588 0.75 0.766246 0.772811 +0.5881 0.75 0.766359 0.77292 +0.5882 0.75 0.766473 0.773027 +0.5883 0.75 0.766586 0.773132 +0.5884 0.75 0.766699 0.773236 +0.5885 0.75 0.766812 0.773338 +0.5886 0.75 0.766924 0.773438 +0.5887 0.75 0.767036 0.773536 +0.5888 0.75 0.767148 0.773633 +0.5889 0.75 0.767259 0.773727 +0.589 0.75 0.767371 0.77382 +0.5891 0.75 0.767482 0.773911 +0.5892 0.75 0.767592 0.774 +0.5893 0.75 0.767703 0.774088 +0.5894 0.75 0.767813 0.774173 +0.5895 0.75 0.767923 0.774257 +0.5896 0.75 0.768032 0.774339 +0.5897 0.75 0.768141 0.774419 +0.5898 0.75 0.76825 0.774497 +0.5899 0.75 0.768359 0.774574 +0.59 0.75 0.768468 0.774648 +0.5901 0.75 0.768576 0.774721 +0.5902 0.75 0.768684 0.774792 +0.5903 0.75 0.768791 0.774861 +0.5904 0.75 0.768899 0.774928 +0.5905 0.75 0.769006 0.774994 +0.5906 0.75 0.769113 0.775057 +0.5907 0.75 0.769219 0.775119 +0.5908 0.75 0.769325 0.775179 +0.5909 0.75 0.769431 0.775237 +0.591 0.75 0.769537 0.775293 +0.5911 0.75 0.769642 0.775347 +0.5912 0.75 0.769747 0.7754 +0.5913 0.75 0.769852 0.77545 +0.5914 0.75 0.769957 0.775499 +0.5915 0.75 0.770061 0.775546 +0.5916 0.75 0.770165 0.775591 +0.5917 0.75 0.770269 0.775634 +0.5918 0.75 0.770372 0.775675 +0.5919 0.75 0.770476 0.775715 +0.592 0.75 0.770579 0.775752 +0.5921 0.75 0.770681 0.775788 +0.5922 0.75 0.770784 0.775822 +0.5923 0.75 0.770886 0.775854 +0.5924 0.75 0.770987 0.775884 +0.5925 0.75 0.771089 0.775913 +0.5926 0.75 0.77119 0.775939 +0.5927 0.75 0.771291 0.775964 +0.5928 0.75 0.771392 0.775986 +0.5929 0.75 0.771492 0.776007 +0.593 0.75 0.771593 0.776027 +0.5931 0.75 0.771692 0.776044 +0.5932 0.75 0.771792 0.776059 +0.5933 0.75 0.771891 0.776073 +0.5934 0.75 0.77199 0.776085 +0.5935 0.75 0.772089 0.776094 +0.5936 0.75 0.772188 0.776103 +0.5937 0.75 0.772286 0.776109 +0.5938 0.75 0.772384 0.776113 +0.5939 0.75 0.772482 0.776116 +0.594 0.75 0.772579 0.776117 +0.5941 0.75 0.772676 0.776115 +0.5942 0.75 0.772773 0.776113 +0.5943 0.75 0.77287 0.776108 +0.5944 0.75 0.772966 0.776101 +0.5945 0.75 0.773062 0.776093 +0.5946 0.75 0.773158 0.776083 +0.5947 0.75 0.773253 0.776071 +0.5948 0.75 0.773348 0.776057 +0.5949 0.75 0.773443 0.776042 +0.595 0.75 0.773538 0.776025 +0.5951 0.75 0.773632 0.776006 +0.5952 0.75 0.773727 0.775985 +0.5953 0.75 0.77382 0.775962 +0.5954 0.75 0.773914 0.775938 +0.5955 0.75 0.774007 0.775911 +0.5956 0.75 0.7741 0.775884 +0.5957 0.75 0.774193 0.775854 +0.5958 0.75 0.774286 0.775822 +0.5959 0.75 0.774378 0.775789 +0.596 0.75 0.77447 0.775754 +0.5961 0.75 0.774561 0.775718 +0.5962 0.75 0.774653 0.775679 +0.5963 0.75 0.774744 0.775639 +0.5964 0.75 0.774835 0.775597 +0.5965 0.75 0.774925 0.775554 +0.5966 0.75 0.775016 0.775508 +0.5967 0.75 0.775106 0.775461 +0.5968 0.75 0.775195 0.775412 +0.5969 0.75 0.775285 0.775362 +0.597 0.75 0.775374 0.77531 +0.5971 0.75 0.775463 0.775256 +0.5972 0.75 0.775552 0.775201 +0.5973 0.75 0.77564 0.775144 +0.5974 0.75 0.775728 0.775085 +0.5975 0.75 0.775816 0.775024 +0.5976 0.75 0.775904 0.774962 +0.5977 0.75 0.775991 0.774898 +0.5978 0.75 0.776078 0.774833 +0.5979 0.75 0.776165 0.774766 +0.598 0.75 0.776251 0.774697 +0.5981 0.75 0.776337 0.774627 +0.5982 0.75 0.776423 0.774555 +0.5983 0.75 0.776509 0.774482 +0.5984 0.75 0.776594 0.774407 +0.5985 0.75 0.77668 0.77433 +0.5986 0.75 0.776764 0.774252 +0.5987 0.75 0.776849 0.774172 +0.5988 0.75 0.776933 0.774091 +0.5989 0.75 0.777017 0.774008 +0.599 0.75 0.777101 0.773923 +0.5991 0.75 0.777185 0.773837 +0.5992 0.75 0.777268 0.77375 +0.5993 0.75 0.777351 0.773661 +0.5994 0.75 0.777434 0.77357 +0.5995 0.75 0.777516 0.773478 +0.5996 0.75 0.777598 0.773385 +0.5997 0.75 0.77768 0.773289 +0.5998 0.75 0.777762 0.773193 +0.5999 0.75 0.777843 0.773095 +0.6 0.75 0.777924 0.772995 +0.6001 0.75 0.778005 0.772894 +0.6002 0.75 0.778086 0.772792 +0.6003 0.75 0.778166 0.772688 +0.6004 0.75 0.778246 0.772583 +0.6005 0.75 0.778326 0.772476 +0.6006 0.75 0.778405 0.772368 +0.6007 0.75 0.778484 0.772259 +0.6008 0.75 0.778563 0.772148 +0.6009 0.75 0.778642 0.772036 +0.601 0.75 0.77872 0.771922 +0.6011 0.75 0.778799 0.771807 +0.6012 0.75 0.778876 0.771691 +0.6013 0.75 0.778954 0.771573 +0.6014 0.75 0.779031 0.771454 +0.6015 0.75 0.779108 0.771334 +0.6016 0.75 0.779185 0.771212 +0.6017 0.75 0.779262 0.771089 +0.6018 0.75 0.779338 0.770965 +0.6019 0.75 0.779414 0.77084 +0.602 0.75 0.77949 0.770713 +0.6021 0.75 0.779565 0.770585 +0.6022 0.75 0.779641 0.770456 +0.6023 0.75 0.779716 0.770325 +0.6024 0.75 0.77979 0.770194 +0.6025 0.75 0.779865 0.770061 +0.6026 0.75 0.779939 0.769927 +0.6027 0.75 0.780013 0.769791 +0.6028 0.75 0.780086 0.769655 +0.6029 0.75 0.78016 0.769517 +0.603 0.75 0.780233 0.769378 +0.6031 0.75 0.780305 0.769238 +0.6032 0.75 0.780378 0.769097 +0.6033 0.75 0.78045 0.768955 +0.6034 0.75 0.780522 0.768812 +0.6035 0.75 0.780594 0.768667 +0.6036 0.75 0.780666 0.768522 +0.6037 0.75 0.780737 0.768375 +0.6038 0.75 0.780808 0.768227 +0.6039 0.75 0.780879 0.768079 +0.604 0.75 0.780949 0.767929 +0.6041 0.75 0.781019 0.767778 +0.6042 0.75 0.781089 0.767626 +0.6043 0.75 0.781159 0.767473 +0.6044 0.75 0.781228 0.767319 +0.6045 0.75 0.781297 0.767165 +0.6046 0.75 0.781366 0.767009 +0.6047 0.75 0.781435 0.766852 +0.6048 0.75 0.781503 0.766694 +0.6049 0.75 0.781571 0.766536 +0.605 0.75 0.781639 0.766376 +0.6051 0.75 0.781706 0.766216 +0.6052 0.75 0.781774 0.766054 +0.6053 0.75 0.781841 0.765892 +0.6054 0.75 0.781907 0.765729 +0.6055 0.75 0.781974 0.765565 +0.6056 0.75 0.78204 0.7654 +0.6057 0.75 0.782106 0.765234 +0.6058 0.75 0.782172 0.765068 +0.6059 0.75 0.782237 0.7649 +0.606 0.75 0.782303 0.764732 +0.6061 0.75 0.782367 0.764563 +0.6062 0.75 0.782432 0.764394 +0.6063 0.75 0.782497 0.764223 +0.6064 0.75 0.782561 0.764052 +0.6065 0.75 0.782625 0.76388 +0.6066 0.75 0.782688 0.763708 +0.6067 0.75 0.782752 0.763534 +0.6068 0.75 0.782815 0.76336 +0.6069 0.75 0.782878 0.763185 +0.607 0.75 0.78294 0.76301 +0.6071 0.75 0.783002 0.762834 +0.6072 0.75 0.783064 0.762657 +0.6073 0.75 0.783126 0.76248 +0.6074 0.75 0.783188 0.762302 +0.6075 0.75 0.783249 0.762123 +0.6076 0.75 0.78331 0.761944 +0.6077 0.75 0.783371 0.761765 +0.6078 0.75 0.783431 0.761584 +0.6079 0.75 0.783492 0.761403 +0.608 0.75 0.783552 0.761222 +0.6081 0.75 0.783611 0.76104 +0.6082 0.75 0.783671 0.760858 +0.6083 0.75 0.78373 0.760675 +0.6084 0.75 0.783789 0.760491 +0.6085 0.75 0.783848 0.760308 +0.6086 0.75 0.783906 0.760123 +0.6087 0.75 0.783964 0.759938 +0.6088 0.75 0.784022 0.759753 +0.6089 0.75 0.78408 0.759568 +0.609 0.75 0.784138 0.759382 +0.6091 0.75 0.784195 0.759195 +0.6092 0.75 0.784252 0.759008 +0.6093 0.75 0.784308 0.758821 +0.6094 0.75 0.784365 0.758634 +0.6095 0.75 0.784421 0.758446 +0.6096 0.75 0.784477 0.758258 +0.6097 0.75 0.784532 0.758069 +0.6098 0.75 0.784588 0.75788 +0.6099 0.75 0.784643 0.757691 +0.61 0.75 0.784698 0.757502 +0.6101 0.75 0.784752 0.757312 +0.6102 0.75 0.784807 0.757123 +0.6103 0.75 0.784861 0.756932 +0.6104 0.75 0.784915 0.756742 +0.6105 0.75 0.784968 0.756552 +0.6106 0.75 0.785022 0.756361 +0.6107 0.75 0.785075 0.75617 +0.6108 0.75 0.785128 0.755979 +0.6109 0.75 0.78518 0.755788 +0.611 0.75 0.785232 0.755597 +0.6111 0.75 0.785284 0.755405 +0.6112 0.75 0.785336 0.755214 +0.6113 0.75 0.785388 0.755022 +0.6114 0.75 0.785439 0.754831 +0.6115 0.75 0.78549 0.754639 +0.6116 0.75 0.785541 0.754447 +0.6117 0.75 0.785592 0.754255 +0.6118 0.75 0.785642 0.754063 +0.6119 0.75 0.785692 0.753871 +0.612 0.75 0.785742 0.753679 +0.6121 0.75 0.785791 0.753487 +0.6122 0.75 0.785841 0.753296 +0.6123 0.75 0.78589 0.753104 +0.6124 0.75 0.785939 0.752912 +0.6125 0.75 0.785987 0.75272 +0.6126 0.75 0.786035 0.752529 +0.6127 0.75 0.786083 0.752337 +0.6128 0.75 0.786131 0.752146 +0.6129 0.75 0.786179 0.751954 +0.613 0.75 0.786226 0.751763 +0.6131 0.75 0.786273 0.751572 +0.6132 0.75 0.78632 0.751381 +0.6133 0.75 0.786366 0.751191 +0.6134 0.75 0.786413 0.751 +0.6135 0.75 0.786459 0.75081 +0.6136 0.75 0.786505 0.75062 +0.6137 0.75 0.78655 0.75043 +0.6138 0.75 0.786595 0.75024 +0.6139 0.75 0.786641 0.750051 +0.614 0.75 0.786685 0.749861 +0.6141 0.75 0.78673 0.749673 +0.6142 0.75 0.786774 0.749484 +0.6143 0.75 0.786818 0.749296 +0.6144 0.75 0.786862 0.749108 +0.6145 0.75 0.786906 0.74892 +0.6146 0.75 0.786949 0.748733 +0.6147 0.75 0.786992 0.748546 +0.6148 0.75 0.787035 0.748359 +0.6149 0.75 0.787077 0.748173 +0.615 0.75 0.78712 0.747987 +0.6151 0.75 0.787162 0.747802 +0.6152 0.75 0.787204 0.747617 +0.6153 0.75 0.787245 0.747432 +0.6154 0.75 0.787287 0.747248 +0.6155 0.75 0.787328 0.747064 +0.6156 0.75 0.787369 0.746881 +0.6157 0.75 0.787409 0.746698 +0.6158 0.75 0.78745 0.746516 +0.6159 0.75 0.78749 0.746334 +0.616 0.75 0.78753 0.746153 +0.6161 0.75 0.787569 0.745972 +0.6162 0.75 0.787609 0.745792 +0.6163 0.75 0.787648 0.745612 +0.6164 0.75 0.787687 0.745433 +0.6165 0.75 0.787726 0.745255 +0.6166 0.75 0.787764 0.745077 +0.6167 0.75 0.787802 0.744899 +0.6168 0.75 0.78784 0.744723 +0.6169 0.75 0.787878 0.744546 +0.617 0.75 0.787915 0.744371 +0.6171 0.75 0.787952 0.744196 +0.6172 0.75 0.787989 0.744022 +0.6173 0.75 0.788026 0.743848 +0.6174 0.75 0.788063 0.743675 +0.6175 0.75 0.788099 0.743503 +0.6176 0.75 0.788135 0.743332 +0.6177 0.75 0.788171 0.743161 +0.6178 0.75 0.788206 0.742991 +0.6179 0.75 0.788241 0.742821 +0.618 0.75 0.788277 0.742653 +0.6181 0.75 0.788311 0.742485 +0.6182 0.75 0.788346 0.742318 +0.6183 0.75 0.78838 0.742152 +0.6184 0.75 0.788414 0.741986 +0.6185 0.75 0.788448 0.741821 +0.6186 0.75 0.788482 0.741657 +0.6187 0.75 0.788515 0.741494 +0.6188 0.75 0.788548 0.741332 +0.6189 0.75 0.788581 0.741171 +0.619 0.75 0.788614 0.74101 +0.6191 0.75 0.788646 0.74085 +0.6192 0.75 0.788678 0.740691 +0.6193 0.75 0.78871 0.740533 +0.6194 0.75 0.788742 0.740376 +0.6195 0.75 0.788773 0.74022 +0.6196 0.75 0.788805 0.740065 +0.6197 0.75 0.788836 0.73991 +0.6198 0.75 0.788866 0.739757 +0.6199 0.75 0.788897 0.739604 +0.62 0.75 0.788927 0.739453 +0.6201 0.75 0.788957 0.739302 +0.6202 0.75 0.788987 0.739152 +0.6203 0.75 0.789017 0.739004 +0.6204 0.75 0.789046 0.738856 +0.6205 0.75 0.789075 0.738709 +0.6206 0.75 0.789104 0.738563 +0.6207 0.75 0.789133 0.738419 +0.6208 0.75 0.789161 0.738275 +0.6209 0.75 0.789189 0.738132 +0.621 0.75 0.789217 0.737991 +0.6211 0.75 0.789245 0.73785 +0.6212 0.75 0.789272 0.73771 +0.6213 0.75 0.7893 0.737572 +0.6214 0.75 0.789327 0.737435 +0.6215 0.75 0.789353 0.737298 +0.6216 0.75 0.78938 0.737163 +0.6217 0.75 0.789406 0.737029 +0.6218 0.75 0.789432 0.736896 +0.6219 0.75 0.789458 0.736764 +0.622 0.75 0.789484 0.736633 +0.6221 0.75 0.789509 0.736503 +0.6222 0.75 0.789534 0.736375 +0.6223 0.75 0.789559 0.736247 +0.6224 0.75 0.789584 0.736121 +0.6225 0.75 0.789608 0.735996 +0.6226 0.75 0.789632 0.735872 +0.6227 0.75 0.789656 0.735749 +0.6228 0.75 0.78968 0.735628 +0.6229 0.75 0.789704 0.735507 +0.623 0.75 0.789727 0.735388 +0.6231 0.75 0.78975 0.73527 +0.6232 0.75 0.789773 0.735153 +0.6233 0.75 0.789795 0.735038 +0.6234 0.75 0.789818 0.734924 +0.6235 0.75 0.78984 0.73481 +0.6236 0.75 0.789862 0.734698 +0.6237 0.75 0.789884 0.734588 +0.6238 0.75 0.789905 0.734478 +0.6239 0.75 0.789926 0.73437 +0.624 0.75 0.789947 0.734263 +0.6241 0.75 0.789968 0.734158 +0.6242 0.75 0.789989 0.734053 +0.6243 0.75 0.790009 0.73395 +0.6244 0.75 0.790029 0.733849 +0.6245 0.75 0.790049 0.733748 +0.6246 0.75 0.790069 0.733649 +0.6247 0.75 0.790088 0.733551 +0.6248 0.75 0.790107 0.733454 +0.6249 0.75 0.790126 0.733359 +0.625 0.75 0.790145 0.733265 +0.6251 0.75 0.790163 0.733172 +0.6252 0.75 0.790182 0.733081 +0.6253 0.75 0.7902 0.732991 +0.6254 0.75 0.790218 0.732902 +0.6255 0.75 0.790235 0.732815 +0.6256 0.75 0.790253 0.732729 +0.6257 0.75 0.79027 0.732644 +0.6258 0.75 0.790287 0.732561 +0.6259 0.75 0.790304 0.732479 +0.626 0.75 0.79032 0.732398 +0.6261 0.75 0.790336 0.732319 +0.6262 0.75 0.790352 0.732241 +0.6263 0.75 0.790368 0.732165 +0.6264 0.75 0.790384 0.73209 +0.6265 0.75 0.790399 0.732016 +0.6266 0.75 0.790414 0.731944 +0.6267 0.75 0.790429 0.731873 +0.6268 0.75 0.790444 0.731803 +0.6269 0.75 0.790459 0.731735 +0.627 0.75 0.790473 0.731669 +0.6271 0.75 0.790487 0.731603 +0.6272 0.75 0.790501 0.731539 +0.6273 0.75 0.790515 0.731477 +0.6274 0.75 0.790528 0.731416 +0.6275 0.75 0.790541 0.731356 +0.6276 0.75 0.790554 0.731298 +0.6277 0.75 0.790567 0.731241 +0.6278 0.75 0.790579 0.731185 +0.6279 0.75 0.790592 0.731131 +0.628 0.75 0.790604 0.731079 +0.6281 0.75 0.790616 0.731027 +0.6282 0.75 0.790627 0.730978 +0.6283 0.75 0.790639 0.730929 +0.6284 0.75 0.79065 0.730882 +0.6285 0.75 0.790661 0.730837 +0.6286 0.75 0.790672 0.730793 +0.6287 0.75 0.790682 0.73075 +0.6288 0.75 0.790693 0.730709 +0.6289 0.75 0.790703 0.730669 +0.629 0.75 0.790713 0.730631 +0.6291 0.75 0.790723 0.730594 +0.6292 0.75 0.790732 0.730559 +0.6293 0.75 0.790741 0.730525 +0.6294 0.75 0.79075 0.730493 +0.6295 0.75 0.790759 0.730461 +0.6296 0.75 0.790768 0.730432 +0.6297 0.75 0.790776 0.730404 +0.6298 0.75 0.790785 0.730377 +0.6299 0.75 0.790793 0.730352 +0.63 0.75 0.7908 0.730328 +0.6301 0.75 0.790808 0.730306 +0.6302 0.75 0.790815 0.730285 +0.6303 0.75 0.790823 0.730265 +0.6304 0.75 0.790829 0.730247 +0.6305 0.75 0.790836 0.730231 +0.6306 0.75 0.790843 0.730215 +0.6307 0.75 0.790849 0.730202 +0.6308 0.75 0.790855 0.730189 +0.6309 0.75 0.790861 0.730179 +0.631 0.75 0.790867 0.730169 +0.6311 0.75 0.790872 0.730161 +0.6312 0.75 0.790877 0.730155 +0.6313 0.75 0.790882 0.73015 +0.6314 0.75 0.790887 0.730146 +0.6315 0.75 0.790892 0.730144 +0.6316 0.75 0.790896 0.730143 +0.6317 0.75 0.790901 0.730144 +0.6318 0.75 0.790905 0.730146 +0.6319 0.75 0.790908 0.73015 +0.632 0.75 0.790912 0.730155 +0.6321 0.75 0.790915 0.730161 +0.6322 0.75 0.790918 0.730169 +0.6323 0.75 0.790921 0.730178 +0.6324 0.75 0.790924 0.730189 +0.6325 0.75 0.790927 0.730201 +0.6326 0.75 0.790929 0.730215 +0.6327 0.75 0.790931 0.73023 +0.6328 0.75 0.790933 0.730246 +0.6329 0.75 0.790935 0.730264 +0.633 0.75 0.790936 0.730283 +0.6331 0.75 0.790938 0.730303 +0.6332 0.75 0.790939 0.730325 +0.6333 0.75 0.79094 0.730349 +0.6334 0.75 0.79094 0.730373 +0.6335 0.75 0.790941 0.7304 +0.6336 0.75 0.790941 0.730427 +0.6337 0.75 0.790941 0.730456 +0.6338 0.75 0.790941 0.730486 +0.6339 0.75 0.790941 0.730518 +0.634 0.75 0.79094 0.730551 +0.6341 0.75 0.79094 0.730585 +0.6342 0.75 0.790939 0.730621 +0.6343 0.75 0.790937 0.730658 +0.6344 0.75 0.790936 0.730697 +0.6345 0.75 0.790935 0.730737 +0.6346 0.75 0.790933 0.730778 +0.6347 0.75 0.790931 0.73082 +0.6348 0.75 0.790929 0.730864 +0.6349 0.75 0.790926 0.730909 +0.635 0.75 0.790924 0.730956 +0.6351 0.75 0.790921 0.731004 +0.6352 0.75 0.790918 0.731053 +0.6353 0.75 0.790915 0.731103 +0.6354 0.75 0.790912 0.731155 +0.6355 0.75 0.790908 0.731208 +0.6356 0.75 0.790904 0.731263 +0.6357 0.75 0.790901 0.731318 +0.6358 0.75 0.790896 0.731375 +0.6359 0.75 0.790892 0.731433 +0.636 0.75 0.790888 0.731493 +0.6361 0.75 0.790883 0.731554 +0.6362 0.75 0.790878 0.731616 +0.6363 0.75 0.790873 0.731679 +0.6364 0.75 0.790867 0.731744 +0.6365 0.75 0.790862 0.73181 +0.6366 0.75 0.790856 0.731877 +0.6367 0.75 0.79085 0.731945 +0.6368 0.75 0.790844 0.732014 +0.6369 0.75 0.790838 0.732085 +0.637 0.75 0.790832 0.732157 +0.6371 0.75 0.790825 0.73223 +0.6372 0.75 0.790818 0.732305 +0.6373 0.75 0.790811 0.73238 +0.6374 0.75 0.790804 0.732457 +0.6375 0.75 0.790796 0.732535 +0.6376 0.75 0.790789 0.732614 +0.6377 0.75 0.790781 0.732695 +0.6378 0.75 0.790773 0.732776 +0.6379 0.75 0.790764 0.732859 +0.638 0.75 0.790756 0.732942 +0.6381 0.75 0.790747 0.733027 +0.6382 0.75 0.790739 0.733113 +0.6383 0.75 0.79073 0.733201 +0.6384 0.75 0.79072 0.733289 +0.6385 0.75 0.790711 0.733378 +0.6386 0.75 0.790701 0.733469 +0.6387 0.75 0.790692 0.73356 +0.6388 0.75 0.790682 0.733653 +0.6389 0.75 0.790672 0.733747 +0.639 0.75 0.790661 0.733842 +0.6391 0.75 0.790651 0.733938 +0.6392 0.75 0.79064 0.734035 +0.6393 0.75 0.790629 0.734133 +0.6394 0.75 0.790618 0.734232 +0.6395 0.75 0.790607 0.734332 +0.6396 0.75 0.790595 0.734433 +0.6397 0.75 0.790584 0.734535 +0.6398 0.75 0.790572 0.734638 +0.6399 0.75 0.79056 0.734742 +0.64 0.75 0.790548 0.734848 +0.6401 0.75 0.790535 0.734954 +0.6402 0.75 0.790523 0.735061 +0.6403 0.75 0.79051 0.735169 +0.6404 0.75 0.790497 0.735278 +0.6405 0.75 0.790484 0.735388 +0.6406 0.75 0.790471 0.735499 +0.6407 0.75 0.790457 0.735611 +0.6408 0.75 0.790443 0.735723 +0.6409 0.75 0.79043 0.735837 +0.641 0.75 0.790416 0.735951 +0.6411 0.75 0.790401 0.736067 +0.6412 0.75 0.790387 0.736183 +0.6413 0.75 0.790372 0.736301 +0.6414 0.75 0.790358 0.736419 +0.6415 0.75 0.790343 0.736538 +0.6416 0.75 0.790327 0.736657 +0.6417 0.75 0.790312 0.736778 +0.6418 0.75 0.790297 0.736899 +0.6419 0.75 0.790281 0.737022 +0.642 0.75 0.790265 0.737145 +0.6421 0.75 0.790249 0.737269 +0.6422 0.75 0.790233 0.737393 +0.6423 0.75 0.790216 0.737519 +0.6424 0.75 0.7902 0.737645 +0.6425 0.75 0.790183 0.737772 +0.6426 0.75 0.790166 0.7379 +0.6427 0.75 0.790149 0.738028 +0.6428 0.75 0.790132 0.738157 +0.6429 0.75 0.790114 0.738287 +0.643 0.75 0.790096 0.738418 +0.6431 0.75 0.790079 0.738549 +0.6432 0.75 0.790061 0.738681 +0.6433 0.75 0.790042 0.738814 +0.6434 0.75 0.790024 0.738947 +0.6435 0.75 0.790006 0.739081 +0.6436 0.75 0.789987 0.739216 +0.6437 0.75 0.789968 0.739351 +0.6438 0.75 0.789949 0.739487 +0.6439 0.75 0.78993 0.739623 +0.644 0.75 0.78991 0.739761 +0.6441 0.75 0.789891 0.739898 +0.6442 0.75 0.789871 0.740037 +0.6443 0.75 0.789851 0.740175 +0.6444 0.75 0.789831 0.740315 +0.6445 0.75 0.78981 0.740455 +0.6446 0.75 0.78979 0.740595 +0.6447 0.75 0.789769 0.740737 +0.6448 0.75 0.789749 0.740878 +0.6449 0.75 0.789728 0.74102 +0.645 0.75 0.789706 0.741163 +0.6451 0.75 0.789685 0.741306 +0.6452 0.75 0.789664 0.741449 +0.6453 0.75 0.789642 0.741594 +0.6454 0.75 0.78962 0.741738 +0.6455 0.75 0.789598 0.741883 +0.6456 0.75 0.789576 0.742028 +0.6457 0.75 0.789554 0.742174 +0.6458 0.75 0.789531 0.74232 +0.6459 0.75 0.789508 0.742467 +0.646 0.75 0.789485 0.742614 +0.6461 0.75 0.789462 0.742761 +0.6462 0.75 0.789439 0.742909 +0.6463 0.75 0.789416 0.743057 +0.6464 0.75 0.789392 0.743205 +0.6465 0.75 0.789369 0.743354 +0.6466 0.75 0.789345 0.743503 +0.6467 0.75 0.789321 0.743653 +0.6468 0.75 0.789297 0.743802 +0.6469 0.75 0.789272 0.743952 +0.647 0.75 0.789248 0.744103 +0.6471 0.75 0.789223 0.744253 +0.6472 0.75 0.789198 0.744404 +0.6473 0.75 0.789173 0.744555 +0.6474 0.75 0.789148 0.744706 +0.6475 0.75 0.789123 0.744858 +0.6476 0.75 0.789097 0.74501 +0.6477 0.75 0.789071 0.745161 +0.6478 0.75 0.789046 0.745314 +0.6479 0.75 0.78902 0.745466 +0.648 0.75 0.788993 0.745618 +0.6481 0.75 0.788967 0.745771 +0.6482 0.75 0.788941 0.745924 +0.6483 0.75 0.788914 0.746076 +0.6484 0.75 0.788887 0.746229 +0.6485 0.75 0.78886 0.746383 +0.6486 0.75 0.788833 0.746536 +0.6487 0.75 0.788806 0.746689 +0.6488 0.75 0.788778 0.746842 +0.6489 0.75 0.788751 0.746996 +0.649 0.75 0.788723 0.747149 +0.6491 0.75 0.788695 0.747303 +0.6492 0.75 0.788667 0.747456 +0.6493 0.75 0.788638 0.74761 +0.6494 0.75 0.78861 0.747763 +0.6495 0.75 0.788581 0.747917 +0.6496 0.75 0.788553 0.748071 +0.6497 0.75 0.788524 0.748224 +0.6498 0.75 0.788495 0.748378 +0.6499 0.75 0.788466 0.748531 +0.65 0.75 0.788436 0.748684 +0.6501 0.75 0.788407 0.748838 +0.6502 0.75 0.788377 0.748991 +0.6503 0.75 0.788347 0.749144 +0.6504 0.75 0.788317 0.749297 +0.6505 0.75 0.788287 0.74945 +0.6506 0.75 0.788257 0.749603 +0.6507 0.75 0.788226 0.749756 +0.6508 0.75 0.788196 0.749908 +0.6509 0.75 0.788165 0.75006 +0.651 0.75 0.788134 0.750213 +0.6511 0.75 0.788103 0.750365 +0.6512 0.75 0.788072 0.750516 +0.6513 0.75 0.78804 0.750668 +0.6514 0.75 0.788009 0.75082 +0.6515 0.75 0.787977 0.750971 +0.6516 0.75 0.787945 0.751122 +0.6517 0.75 0.787913 0.751272 +0.6518 0.75 0.787881 0.751423 +0.6519 0.75 0.787849 0.751573 +0.652 0.75 0.787816 0.751723 +0.6521 0.75 0.787784 0.751873 +0.6522 0.75 0.787751 0.752022 +0.6523 0.75 0.787718 0.752171 +0.6524 0.75 0.787685 0.75232 +0.6525 0.75 0.787652 0.752468 +0.6526 0.75 0.787619 0.752616 +0.6527 0.75 0.787585 0.752764 +0.6528 0.75 0.787552 0.752911 +0.6529 0.75 0.787518 0.753058 +0.653 0.75 0.787484 0.753204 +0.6531 0.75 0.78745 0.75335 +0.6532 0.75 0.787416 0.753496 +0.6533 0.75 0.787381 0.753642 +0.6534 0.75 0.787347 0.753786 +0.6535 0.75 0.787312 0.753931 +0.6536 0.75 0.787277 0.754075 +0.6537 0.75 0.787242 0.754218 +0.6538 0.75 0.787207 0.754362 +0.6539 0.75 0.787172 0.754504 +0.654 0.75 0.787137 0.754646 +0.6541 0.75 0.787101 0.754788 +0.6542 0.75 0.787066 0.754929 +0.6543 0.75 0.78703 0.75507 +0.6544 0.75 0.786994 0.75521 +0.6545 0.75 0.786958 0.755349 +0.6546 0.75 0.786921 0.755488 +0.6547 0.75 0.786885 0.755627 +0.6548 0.75 0.786849 0.755765 +0.6549 0.75 0.786812 0.755902 +0.655 0.75 0.786775 0.756039 +0.6551 0.75 0.786738 0.756175 +0.6552 0.75 0.786701 0.756311 +0.6553 0.75 0.786664 0.756445 +0.6554 0.75 0.786626 0.75658 +0.6555 0.75 0.786589 0.756713 +0.6556 0.75 0.786551 0.756847 +0.6557 0.75 0.786514 0.756979 +0.6558 0.75 0.786476 0.757111 +0.6559 0.75 0.786438 0.757242 +0.656 0.75 0.786399 0.757372 +0.6561 0.75 0.786361 0.757502 +0.6562 0.75 0.786323 0.757631 +0.6563 0.75 0.786284 0.757759 +0.6564 0.75 0.786245 0.757887 +0.6565 0.75 0.786206 0.758014 +0.6566 0.75 0.786167 0.75814 +0.6567 0.75 0.786128 0.758265 +0.6568 0.75 0.786089 0.75839 +0.6569 0.75 0.786049 0.758514 +0.657 0.75 0.78601 0.758637 +0.6571 0.75 0.78597 0.758759 +0.6572 0.75 0.78593 0.758881 +0.6573 0.75 0.78589 0.759002 +0.6574 0.75 0.78585 0.759122 +0.6575 0.75 0.78581 0.759241 +0.6576 0.75 0.78577 0.759359 +0.6577 0.75 0.785729 0.759477 +0.6578 0.75 0.785689 0.759594 +0.6579 0.75 0.785648 0.75971 +0.658 0.75 0.785607 0.759825 +0.6581 0.75 0.785566 0.759939 +0.6582 0.75 0.785525 0.760052 +0.6583 0.75 0.785484 0.760165 +0.6584 0.75 0.785442 0.760276 +0.6585 0.75 0.785401 0.760387 +0.6586 0.75 0.785359 0.760497 +0.6587 0.75 0.785317 0.760606 +0.6588 0.75 0.785275 0.760714 +0.6589 0.75 0.785233 0.760821 +0.659 0.75 0.785191 0.760927 +0.6591 0.75 0.785149 0.761032 +0.6592 0.75 0.785106 0.761137 +0.6593 0.75 0.785064 0.76124 +0.6594 0.75 0.785021 0.761343 +0.6595 0.75 0.784978 0.761444 +0.6596 0.75 0.784935 0.761545 +0.6597 0.75 0.784892 0.761644 +0.6598 0.75 0.784849 0.761743 +0.6599 0.75 0.784806 0.76184 +0.66 0.75 0.784762 0.761937 +0.6601 0.75 0.784719 0.762033 +0.6602 0.75 0.784675 0.762127 +0.6603 0.75 0.784631 0.762221 +0.6604 0.75 0.784587 0.762314 +0.6605 0.75 0.784543 0.762405 +0.6606 0.75 0.784499 0.762496 +0.6607 0.75 0.784455 0.762586 +0.6608 0.75 0.78441 0.762674 +0.6609 0.75 0.784366 0.762762 +0.661 0.75 0.784321 0.762848 +0.6611 0.75 0.784276 0.762933 +0.6612 0.75 0.784231 0.763018 +0.6613 0.75 0.784186 0.763101 +0.6614 0.75 0.784141 0.763183 +0.6615 0.75 0.784096 0.763264 +0.6616 0.75 0.78405 0.763344 +0.6617 0.75 0.784005 0.763423 +0.6618 0.75 0.783959 0.763501 +0.6619 0.75 0.783913 0.763578 +0.662 0.75 0.783868 0.763654 +0.6621 0.75 0.783822 0.763728 +0.6622 0.75 0.783775 0.763802 +0.6623 0.75 0.783729 0.763874 +0.6624 0.75 0.783683 0.763946 +0.6625 0.75 0.783636 0.764016 +0.6626 0.75 0.78359 0.764085 +0.6627 0.75 0.783543 0.764153 +0.6628 0.75 0.783496 0.76422 +0.6629 0.75 0.783449 0.764285 +0.663 0.75 0.783402 0.76435 +0.6631 0.75 0.783355 0.764413 +0.6632 0.75 0.783308 0.764475 +0.6633 0.75 0.783261 0.764536 +0.6634 0.75 0.783213 0.764596 +0.6635 0.75 0.783165 0.764655 +0.6636 0.75 0.783118 0.764713 +0.6637 0.75 0.78307 0.764769 +0.6638 0.75 0.783022 0.764824 +0.6639 0.75 0.782974 0.764878 +0.664 0.75 0.782926 0.764931 +0.6641 0.75 0.782877 0.764983 +0.6642 0.75 0.782829 0.765034 +0.6643 0.75 0.78278 0.765083 +0.6644 0.75 0.782732 0.765131 +0.6645 0.75 0.782683 0.765178 +0.6646 0.75 0.782634 0.765224 +0.6647 0.75 0.782585 0.765269 +0.6648 0.75 0.782536 0.765312 +0.6649 0.75 0.782487 0.765354 +0.665 0.75 0.782438 0.765395 +0.6651 0.75 0.782388 0.765435 +0.6652 0.75 0.782339 0.765474 +0.6653 0.75 0.782289 0.765511 +0.6654 0.75 0.78224 0.765547 +0.6655 0.75 0.78219 0.765582 +0.6656 0.75 0.78214 0.765616 +0.6657 0.75 0.78209 0.765649 +0.6658 0.75 0.78204 0.76568 +0.6659 0.75 0.78199 0.76571 +0.666 0.75 0.781939 0.765739 +0.6661 0.75 0.781889 0.765767 +0.6662 0.75 0.781838 0.765793 +0.6663 0.75 0.781788 0.765819 +0.6664 0.75 0.781737 0.765843 +0.6665 0.75 0.781686 0.765866 +0.6666 0.75 0.781635 0.765887 +0.6667 0.75 0.781584 0.765908 +0.6668 0.75 0.781533 0.765927 +0.6669 0.75 0.781481 0.765945 +0.667 0.75 0.78143 0.765962 +0.6671 0.75 0.781379 0.765977 +0.6672 0.75 0.781327 0.765991 +0.6673 0.75 0.781275 0.766004 +0.6674 0.75 0.781224 0.766016 +0.6675 0.75 0.781172 0.766027 +0.6676 0.75 0.78112 0.766036 +0.6677 0.75 0.781068 0.766044 +0.6678 0.75 0.781015 0.766051 +0.6679 0.75 0.780963 0.766057 +0.668 0.75 0.780911 0.766062 +0.6681 0.75 0.780858 0.766065 +0.6682 0.75 0.780806 0.766067 +0.6683 0.75 0.780753 0.766068 +0.6684 0.75 0.7807 0.766068 +0.6685 0.75 0.780647 0.766066 +0.6686 0.75 0.780595 0.766063 +0.6687 0.75 0.780541 0.766059 +0.6688 0.75 0.780488 0.766054 +0.6689 0.75 0.780435 0.766047 +0.669 0.75 0.780382 0.76604 +0.6691 0.75 0.780328 0.766031 +0.6692 0.75 0.780275 0.766021 +0.6693 0.75 0.780221 0.76601 +0.6694 0.75 0.780167 0.765997 +0.6695 0.75 0.780114 0.765983 +0.6696 0.75 0.78006 0.765969 +0.6697 0.75 0.780006 0.765952 +0.6698 0.75 0.779952 0.765935 +0.6699 0.75 0.779897 0.765917 +0.67 0.75 0.779843 0.765897 +0.6701 0.75 0.779789 0.765876 +0.6702 0.75 0.779734 0.765854 +0.6703 0.75 0.77968 0.765831 +0.6704 0.75 0.779625 0.765807 +0.6705 0.75 0.77957 0.765781 +0.6706 0.75 0.779516 0.765754 +0.6707 0.75 0.779461 0.765726 +0.6708 0.75 0.779406 0.765697 +0.6709 0.75 0.779351 0.765667 +0.671 0.75 0.779295 0.765636 +0.6711 0.75 0.77924 0.765603 +0.6712 0.75 0.779185 0.765569 +0.6713 0.75 0.779129 0.765534 +0.6714 0.75 0.779074 0.765498 +0.6715 0.75 0.779018 0.765461 +0.6716 0.75 0.778963 0.765423 +0.6717 0.75 0.778907 0.765383 +0.6718 0.75 0.778851 0.765343 +0.6719 0.75 0.778795 0.765301 +0.672 0.75 0.778739 0.765258 +0.6721 0.75 0.778683 0.765214 +0.6722 0.75 0.778627 0.765169 +0.6723 0.75 0.77857 0.765123 +0.6724 0.75 0.778514 0.765076 +0.6725 0.75 0.778457 0.765027 +0.6726 0.75 0.778401 0.764978 +0.6727 0.75 0.778344 0.764927 +0.6728 0.75 0.778288 0.764875 +0.6729 0.75 0.778231 0.764823 +0.673 0.75 0.778174 0.764769 +0.6731 0.75 0.778117 0.764714 +0.6732 0.75 0.77806 0.764658 +0.6733 0.75 0.778003 0.764601 +0.6734 0.75 0.777946 0.764542 +0.6735 0.75 0.777888 0.764483 +0.6736 0.75 0.777831 0.764423 +0.6737 0.75 0.777774 0.764362 +0.6738 0.75 0.777716 0.764299 +0.6739 0.75 0.777658 0.764236 +0.674 0.75 0.777601 0.764172 +0.6741 0.75 0.777543 0.764106 +0.6742 0.75 0.777485 0.76404 +0.6743 0.75 0.777427 0.763972 +0.6744 0.75 0.777369 0.763904 +0.6745 0.75 0.777311 0.763834 +0.6746 0.75 0.777253 0.763764 +0.6747 0.75 0.777195 0.763692 +0.6748 0.75 0.777137 0.76362 +0.6749 0.75 0.777078 0.763547 +0.675 0.75 0.77702 0.763472 +0.6751 0.75 0.776961 0.763397 +0.6752 0.75 0.776903 0.763321 +0.6753 0.75 0.776844 0.763243 +0.6754 0.75 0.776785 0.763165 +0.6755 0.75 0.776727 0.763086 +0.6756 0.75 0.776668 0.763006 +0.6757 0.75 0.776609 0.762925 +0.6758 0.75 0.77655 0.762843 +0.6759 0.75 0.776491 0.76276 +0.676 0.75 0.776431 0.762677 +0.6761 0.75 0.776372 0.762592 +0.6762 0.75 0.776313 0.762507 +0.6763 0.75 0.776254 0.76242 +0.6764 0.75 0.776194 0.762333 +0.6765 0.75 0.776135 0.762245 +0.6766 0.75 0.776075 0.762156 +0.6767 0.75 0.776015 0.762066 +0.6768 0.75 0.775956 0.761976 +0.6769 0.75 0.775896 0.761884 +0.677 0.75 0.775836 0.761792 +0.6771 0.75 0.775776 0.761699 +0.6772 0.75 0.775716 0.761605 +0.6773 0.75 0.775656 0.76151 +0.6774 0.75 0.775596 0.761415 +0.6775 0.75 0.775536 0.761318 +0.6776 0.75 0.775475 0.761221 +0.6777 0.75 0.775415 0.761123 +0.6778 0.75 0.775355 0.761025 +0.6779 0.75 0.775294 0.760925 +0.678 0.75 0.775234 0.760825 +0.6781 0.75 0.775173 0.760724 +0.6782 0.75 0.775112 0.760623 +0.6783 0.75 0.775052 0.76052 +0.6784 0.75 0.774991 0.760417 +0.6785 0.75 0.77493 0.760313 +0.6786 0.75 0.774869 0.760209 +0.6787 0.75 0.774808 0.760104 +0.6788 0.75 0.774747 0.759998 +0.6789 0.75 0.774686 0.759891 +0.679 0.75 0.774625 0.759784 +0.6791 0.75 0.774563 0.759676 +0.6792 0.75 0.774502 0.759568 +0.6793 0.75 0.774441 0.759459 +0.6794 0.75 0.774379 0.759349 +0.6795 0.75 0.774318 0.759238 +0.6796 0.75 0.774256 0.759127 +0.6797 0.75 0.774195 0.759016 +0.6798 0.75 0.774133 0.758904 +0.6799 0.75 0.774071 0.758791 +0.68 0.75 0.77401 0.758678 +0.6801 0.75 0.773948 0.758564 +0.6802 0.75 0.773886 0.758449 +0.6803 0.75 0.773824 0.758334 +0.6804 0.75 0.773762 0.758218 +0.6805 0.75 0.7737 0.758102 +0.6806 0.75 0.773638 0.757986 +0.6807 0.75 0.773576 0.757869 +0.6808 0.75 0.773514 0.757751 +0.6809 0.75 0.773451 0.757633 +0.681 0.75 0.773389 0.757514 +0.6811 0.75 0.773327 0.757395 +0.6812 0.75 0.773264 0.757276 +0.6813 0.75 0.773202 0.757156 +0.6814 0.75 0.773139 0.757035 +0.6815 0.75 0.773077 0.756914 +0.6816 0.75 0.773014 0.756793 +0.6817 0.75 0.772951 0.756671 +0.6818 0.75 0.772888 0.756549 +0.6819 0.75 0.772826 0.756426 +0.682 0.75 0.772763 0.756304 +0.6821 0.75 0.7727 0.75618 +0.6822 0.75 0.772637 0.756057 +0.6823 0.75 0.772574 0.755933 +0.6824 0.75 0.772511 0.755808 +0.6825 0.75 0.772448 0.755683 +0.6826 0.75 0.772385 0.755558 +0.6827 0.75 0.772321 0.755433 +0.6828 0.75 0.772258 0.755307 +0.6829 0.75 0.772195 0.755181 +0.683 0.75 0.772131 0.755055 +0.6831 0.75 0.772068 0.754929 +0.6832 0.75 0.772005 0.754802 +0.6833 0.75 0.771941 0.754675 +0.6834 0.75 0.771878 0.754547 +0.6835 0.75 0.771814 0.75442 +0.6836 0.75 0.77175 0.754292 +0.6837 0.75 0.771687 0.754164 +0.6838 0.75 0.771623 0.754036 +0.6839 0.75 0.771559 0.753907 +0.684 0.75 0.771495 0.753779 +0.6841 0.75 0.771431 0.75365 +0.6842 0.75 0.771367 0.753521 +0.6843 0.75 0.771304 0.753392 +0.6844 0.75 0.77124 0.753262 +0.6845 0.75 0.771176 0.753133 +0.6846 0.75 0.771111 0.753003 +0.6847 0.75 0.771047 0.752874 +0.6848 0.75 0.770983 0.752744 +0.6849 0.75 0.770919 0.752614 +0.685 0.75 0.770855 0.752484 +0.6851 0.75 0.77079 0.752354 +0.6852 0.75 0.770726 0.752224 +0.6853 0.75 0.770662 0.752094 +0.6854 0.75 0.770597 0.751964 +0.6855 0.75 0.770533 0.751833 +0.6856 0.75 0.770468 0.751703 +0.6857 0.75 0.770404 0.751573 +0.6858 0.75 0.770339 0.751442 +0.6859 0.75 0.770275 0.751312 +0.686 0.75 0.77021 0.751182 +0.6861 0.75 0.770145 0.751051 +0.6862 0.75 0.77008 0.750921 +0.6863 0.75 0.770016 0.750791 +0.6864 0.75 0.769951 0.750661 +0.6865 0.75 0.769886 0.750531 +0.6866 0.75 0.769821 0.750401 +0.6867 0.75 0.769756 0.750271 +0.6868 0.75 0.769691 0.750141 +0.6869 0.75 0.769626 0.750011 +0.687 0.75 0.769561 0.749881 +0.6871 0.75 0.769496 0.749752 +0.6872 0.75 0.769431 0.749623 +0.6873 0.75 0.769366 0.749493 +0.6874 0.75 0.769301 0.749364 +0.6875 0.75 0.769236 0.749235 +0.6876 0.75 0.769171 0.749106 +0.6877 0.75 0.769105 0.748978 +0.6878 0.75 0.76904 0.748849 +0.6879 0.75 0.768975 0.748721 +0.688 0.75 0.768909 0.748593 +0.6881 0.75 0.768844 0.748466 +0.6882 0.75 0.768779 0.748338 +0.6883 0.75 0.768713 0.748211 +0.6884 0.75 0.768648 0.748084 +0.6885 0.75 0.768582 0.747957 +0.6886 0.75 0.768517 0.74783 +0.6887 0.75 0.768451 0.747704 +0.6888 0.75 0.768385 0.747578 +0.6889 0.75 0.76832 0.747453 +0.689 0.75 0.768254 0.747327 +0.6891 0.75 0.768188 0.747202 +0.6892 0.75 0.768123 0.747077 +0.6893 0.75 0.768057 0.746953 +0.6894 0.75 0.767991 0.746829 +0.6895 0.75 0.767925 0.746705 +0.6896 0.75 0.76786 0.746582 +0.6897 0.75 0.767794 0.746459 +0.6898 0.75 0.767728 0.746337 +0.6899 0.75 0.767662 0.746215 +0.69 0.75 0.767596 0.746093 +0.6901 0.75 0.76753 0.745971 +0.6902 0.75 0.767464 0.745851 +0.6903 0.75 0.767398 0.74573 +0.6904 0.75 0.767332 0.74561 +0.6905 0.75 0.767266 0.74549 +0.6906 0.75 0.7672 0.745371 +0.6907 0.75 0.767134 0.745253 +0.6908 0.75 0.767068 0.745134 +0.6909 0.75 0.767002 0.745017 +0.691 0.75 0.766936 0.744899 +0.6911 0.75 0.76687 0.744783 +0.6912 0.75 0.766803 0.744666 +0.6913 0.75 0.766737 0.744551 +0.6914 0.75 0.766671 0.744436 +0.6915 0.75 0.766605 0.744321 +0.6916 0.75 0.766538 0.744207 +0.6917 0.75 0.766472 0.744093 +0.6918 0.75 0.766406 0.74398 +0.6919 0.75 0.766339 0.743868 +0.692 0.75 0.766273 0.743756 +0.6921 0.75 0.766207 0.743645 +0.6922 0.75 0.76614 0.743534 +0.6923 0.75 0.766074 0.743424 +0.6924 0.75 0.766007 0.743315 +0.6925 0.75 0.765941 0.743206 +0.6926 0.75 0.765875 0.743098 +0.6927 0.75 0.765808 0.74299 +0.6928 0.75 0.765742 0.742883 +0.6929 0.75 0.765675 0.742777 +0.693 0.75 0.765608 0.742671 +0.6931 0.75 0.765542 0.742566 +0.6932 0.75 0.765475 0.742462 +0.6933 0.75 0.765409 0.742358 +0.6934 0.75 0.765342 0.742255 +0.6935 0.75 0.765276 0.742153 +0.6936 0.75 0.765209 0.742052 +0.6937 0.75 0.765142 0.741951 +0.6938 0.75 0.765076 0.741851 +0.6939 0.75 0.765009 0.741752 +0.694 0.75 0.764942 0.741653 +0.6941 0.75 0.764876 0.741555 +0.6942 0.75 0.764809 0.741458 +0.6943 0.75 0.764742 0.741362 +0.6944 0.75 0.764676 0.741266 +0.6945 0.75 0.764609 0.741171 +0.6946 0.75 0.764542 0.741077 +0.6947 0.75 0.764475 0.740984 +0.6948 0.75 0.764409 0.740891 +0.6949 0.75 0.764342 0.7408 +0.695 0.75 0.764275 0.740709 +0.6951 0.75 0.764208 0.740619 +0.6952 0.75 0.764142 0.74053 +0.6953 0.75 0.764075 0.740441 +0.6954 0.75 0.764008 0.740354 +0.6955 0.75 0.763941 0.740267 +0.6956 0.75 0.763874 0.740181 +0.6957 0.75 0.763808 0.740096 +0.6958 0.75 0.763741 0.740012 +0.6959 0.75 0.763674 0.739928 +0.696 0.75 0.763607 0.739846 +0.6961 0.75 0.76354 0.739764 +0.6962 0.75 0.763473 0.739684 +0.6963 0.75 0.763406 0.739604 +0.6964 0.75 0.76334 0.739525 +0.6965 0.75 0.763273 0.739447 +0.6966 0.75 0.763206 0.73937 +0.6967 0.75 0.763139 0.739294 +0.6968 0.75 0.763072 0.739218 +0.6969 0.75 0.763005 0.739144 +0.697 0.75 0.762938 0.73907 +0.6971 0.75 0.762871 0.738998 +0.6972 0.75 0.762805 0.738926 +0.6973 0.75 0.762738 0.738856 +0.6974 0.75 0.762671 0.738786 +0.6975 0.75 0.762604 0.738717 +0.6976 0.75 0.762537 0.738649 +0.6977 0.75 0.76247 0.738582 +0.6978 0.75 0.762403 0.738517 +0.6979 0.75 0.762336 0.738452 +0.698 0.75 0.762269 0.738388 +0.6981 0.75 0.762202 0.738325 +0.6982 0.75 0.762136 0.738263 +0.6983 0.75 0.762069 0.738202 +0.6984 0.75 0.762002 0.738142 +0.6985 0.75 0.761935 0.738083 +0.6986 0.75 0.761868 0.738025 +0.6987 0.75 0.761801 0.737968 +0.6988 0.75 0.761734 0.737912 +0.6989 0.75 0.761667 0.737857 +0.699 0.75 0.7616 0.737803 +0.6991 0.75 0.761533 0.73775 +0.6992 0.75 0.761467 0.737698 +0.6993 0.75 0.7614 0.737647 +0.6994 0.75 0.761333 0.737597 +0.6995 0.75 0.761266 0.737548 +0.6996 0.75 0.761199 0.7375 +0.6997 0.75 0.761132 0.737453 +0.6998 0.75 0.761065 0.737408 +0.6999 0.75 0.760999 0.737363 +0.7 0.75 0.760932 0.737319 +0.7001 0.75 0.760865 0.737277 +0.7002 0.75 0.760798 0.737235 +0.7003 0.75 0.760731 0.737194 +0.7004 0.75 0.760665 0.737155 +0.7005 0.75 0.760598 0.737117 +0.7006 0.75 0.760531 0.737079 +0.7007 0.75 0.760464 0.737043 +0.7008 0.75 0.760397 0.737008 +0.7009 0.75 0.760331 0.736974 +0.701 0.75 0.760264 0.736941 +0.7011 0.75 0.760197 0.736909 +0.7012 0.75 0.76013 0.736878 +0.7013 0.75 0.760064 0.736848 +0.7014 0.75 0.759997 0.736819 +0.7015 0.75 0.75993 0.736791 +0.7016 0.75 0.759864 0.736765 +0.7017 0.75 0.759797 0.736739 +0.7018 0.75 0.75973 0.736715 +0.7019 0.75 0.759664 0.736691 +0.702 0.75 0.759597 0.736669 +0.7021 0.75 0.75953 0.736648 +0.7022 0.75 0.759464 0.736628 +0.7023 0.75 0.759397 0.736609 +0.7024 0.75 0.75933 0.736591 +0.7025 0.75 0.759264 0.736574 +0.7026 0.75 0.759197 0.736559 +0.7027 0.75 0.759131 0.736544 +0.7028 0.75 0.759064 0.73653 +0.7029 0.75 0.758998 0.736518 +0.703 0.75 0.758931 0.736507 +0.7031 0.75 0.758865 0.736496 +0.7032 0.75 0.758798 0.736487 +0.7033 0.75 0.758732 0.736479 +0.7034 0.75 0.758665 0.736472 +0.7035 0.75 0.758599 0.736466 +0.7036 0.75 0.758533 0.736461 +0.7037 0.75 0.758466 0.736458 +0.7038 0.75 0.7584 0.736455 +0.7039 0.75 0.758333 0.736454 +0.704 0.75 0.758267 0.736453 +0.7041 0.75 0.758201 0.736454 +0.7042 0.75 0.758134 0.736456 +0.7043 0.75 0.758068 0.736459 +0.7044 0.75 0.758002 0.736463 +0.7045 0.75 0.757936 0.736468 +0.7046 0.75 0.757869 0.736474 +0.7047 0.75 0.757803 0.736481 +0.7048 0.75 0.757737 0.736489 +0.7049 0.75 0.757671 0.736499 +0.705 0.75 0.757605 0.736509 +0.7051 0.75 0.757539 0.736521 +0.7052 0.75 0.757473 0.736533 +0.7053 0.75 0.757407 0.736547 +0.7054 0.75 0.757341 0.736562 +0.7055 0.75 0.757274 0.736578 +0.7056 0.75 0.757209 0.736595 +0.7057 0.75 0.757143 0.736613 +0.7058 0.75 0.757077 0.736632 +0.7059 0.75 0.757011 0.736652 +0.706 0.75 0.756945 0.736673 +0.7061 0.75 0.756879 0.736695 +0.7062 0.75 0.756813 0.736719 +0.7063 0.75 0.756747 0.736743 +0.7064 0.75 0.756681 0.736768 +0.7065 0.75 0.756616 0.736795 +0.7066 0.75 0.75655 0.736823 +0.7067 0.75 0.756484 0.736851 +0.7068 0.75 0.756418 0.736881 +0.7069 0.75 0.756353 0.736911 +0.707 0.75 0.756287 0.736943 +0.7071 0.75 0.756221 0.736976 +0.7072 0.75 0.756156 0.73701 +0.7073 0.75 0.75609 0.737044 +0.7074 0.75 0.756025 0.73708 +0.7075 0.75 0.755959 0.737117 +0.7076 0.75 0.755894 0.737155 +0.7077 0.75 0.755828 0.737194 +0.7078 0.75 0.755763 0.737234 +0.7079 0.75 0.755698 0.737275 +0.708 0.75 0.755632 0.737316 +0.7081 0.75 0.755567 0.737359 +0.7082 0.75 0.755502 0.737403 +0.7083 0.75 0.755436 0.737448 +0.7084 0.75 0.755371 0.737494 +0.7085 0.75 0.755306 0.737541 +0.7086 0.75 0.755241 0.737589 +0.7087 0.75 0.755176 0.737637 +0.7088 0.75 0.75511 0.737687 +0.7089 0.75 0.755045 0.737738 +0.709 0.75 0.75498 0.73779 +0.7091 0.75 0.754915 0.737842 +0.7092 0.75 0.75485 0.737896 +0.7093 0.75 0.754785 0.73795 +0.7094 0.75 0.754721 0.738006 +0.7095 0.75 0.754656 0.738062 +0.7096 0.75 0.754591 0.73812 +0.7097 0.75 0.754526 0.738178 +0.7098 0.75 0.754461 0.738237 +0.7099 0.75 0.754396 0.738297 +0.71 0.75 0.754332 0.738358 +0.7101 0.75 0.754267 0.73842 +0.7102 0.75 0.754203 0.738483 +0.7103 0.75 0.754138 0.738547 +0.7104 0.75 0.754073 0.738611 +0.7105 0.75 0.754009 0.738677 +0.7106 0.75 0.753944 0.738743 +0.7107 0.75 0.75388 0.73881 +0.7108 0.75 0.753816 0.738878 +0.7109 0.75 0.753751 0.738947 +0.711 0.75 0.753687 0.739017 +0.7111 0.75 0.753623 0.739088 +0.7112 0.75 0.753558 0.739159 +0.7113 0.75 0.753494 0.739231 +0.7114 0.75 0.75343 0.739304 +0.7115 0.75 0.753366 0.739378 +0.7116 0.75 0.753302 0.739453 +0.7117 0.75 0.753238 0.739529 +0.7118 0.75 0.753174 0.739605 +0.7119 0.75 0.75311 0.739682 +0.712 0.75 0.753046 0.73976 +0.7121 0.75 0.752982 0.739839 +0.7122 0.75 0.752918 0.739918 +0.7123 0.75 0.752854 0.739999 +0.7124 0.75 0.75279 0.74008 +0.7125 0.75 0.752727 0.740162 +0.7126 0.75 0.752663 0.740244 +0.7127 0.75 0.752599 0.740327 +0.7128 0.75 0.752536 0.740411 +0.7129 0.75 0.752472 0.740496 +0.713 0.75 0.752409 0.740581 +0.7131 0.75 0.752345 0.740668 +0.7132 0.75 0.752282 0.740754 +0.7133 0.75 0.752219 0.740842 +0.7134 0.75 0.752155 0.74093 +0.7135 0.75 0.752092 0.741019 +0.7136 0.75 0.752029 0.741109 +0.7137 0.75 0.751966 0.741199 +0.7138 0.75 0.751902 0.74129 +0.7139 0.75 0.751839 0.741381 +0.714 0.75 0.751776 0.741474 +0.7141 0.75 0.751713 0.741566 +0.7142 0.75 0.75165 0.74166 +0.7143 0.75 0.751587 0.741754 +0.7144 0.75 0.751525 0.741849 +0.7145 0.75 0.751462 0.741944 +0.7146 0.75 0.751399 0.74204 +0.7147 0.75 0.751336 0.742136 +0.7148 0.75 0.751274 0.742233 +0.7149 0.75 0.751211 0.742331 +0.715 0.75 0.751148 0.742429 +0.7151 0.75 0.751086 0.742528 +0.7152 0.75 0.751023 0.742627 +0.7153 0.75 0.750961 0.742727 +0.7154 0.75 0.750899 0.742827 +0.7155 0.75 0.750836 0.742928 +0.7156 0.75 0.750774 0.743029 +0.7157 0.75 0.750712 0.743131 +0.7158 0.75 0.75065 0.743233 +0.7159 0.75 0.750588 0.743336 +0.716 0.75 0.750526 0.743439 +0.7161 0.75 0.750464 0.743543 +0.7162 0.75 0.750402 0.743647 +0.7163 0.75 0.75034 0.743752 +0.7164 0.75 0.750278 0.743857 +0.7165 0.75 0.750216 0.743963 +0.7166 0.75 0.750154 0.744069 +0.7167 0.75 0.750093 0.744175 +0.7168 0.75 0.750031 0.744282 +0.7169 0.75 0.749969 0.744389 +0.717 0.75 0.749908 0.744496 +0.7171 0.75 0.749846 0.744604 +0.7172 0.75 0.749785 0.744713 +0.7173 0.75 0.749724 0.744821 +0.7174 0.75 0.749662 0.74493 +0.7175 0.75 0.749601 0.74504 +0.7176 0.75 0.74954 0.745149 +0.7177 0.75 0.749479 0.745259 +0.7178 0.75 0.749418 0.74537 +0.7179 0.75 0.749357 0.74548 +0.718 0.75 0.749296 0.745591 +0.7181 0.75 0.749235 0.745702 +0.7182 0.75 0.749174 0.745814 +0.7183 0.75 0.749113 0.745926 +0.7184 0.75 0.749052 0.746038 +0.7185 0.75 0.748992 0.74615 +0.7186 0.75 0.748931 0.746262 +0.7187 0.75 0.74887 0.746375 +0.7188 0.75 0.74881 0.746488 +0.7189 0.75 0.74875 0.746601 +0.719 0.75 0.748689 0.746715 +0.7191 0.75 0.748629 0.746828 +0.7192 0.75 0.748569 0.746942 +0.7193 0.75 0.748508 0.747056 +0.7194 0.75 0.748448 0.74717 +0.7195 0.75 0.748388 0.747284 +0.7196 0.75 0.748328 0.747398 +0.7197 0.75 0.748268 0.747513 +0.7198 0.75 0.748208 0.747627 +0.7199 0.75 0.748148 0.747742 +0.72 0.75 0.748089 0.747857 +0.7201 0.75 0.748029 0.747972 +0.7202 0.75 0.747969 0.748087 +0.7203 0.75 0.74791 0.748202 +0.7204 0.75 0.74785 0.748317 +0.7205 0.75 0.747791 0.748432 +0.7206 0.75 0.747731 0.748548 +0.7207 0.75 0.747672 0.748663 +0.7208 0.75 0.747613 0.748778 +0.7209 0.75 0.747553 0.748894 +0.721 0.75 0.747494 0.749009 +0.7211 0.75 0.747435 0.749124 +0.7212 0.75 0.747376 0.74924 +0.7213 0.75 0.747317 0.749355 +0.7214 0.75 0.747258 0.74947 +0.7215 0.75 0.747199 0.749586 +0.7216 0.75 0.747141 0.749701 +0.7217 0.75 0.747082 0.749816 +0.7218 0.75 0.747023 0.749931 +0.7219 0.75 0.746965 0.750046 +0.722 0.75 0.746906 0.750161 +0.7221 0.75 0.746848 0.750276 +0.7222 0.75 0.74679 0.750391 +0.7223 0.75 0.746731 0.750505 +0.7224 0.75 0.746673 0.75062 +0.7225 0.75 0.746615 0.750734 +0.7226 0.75 0.746557 0.750848 +0.7227 0.75 0.746499 0.750962 +0.7228 0.75 0.746441 0.751076 +0.7229 0.75 0.746383 0.75119 +0.723 0.75 0.746325 0.751304 +0.7231 0.75 0.746267 0.751417 +0.7232 0.75 0.74621 0.75153 +0.7233 0.75 0.746152 0.751643 +0.7234 0.75 0.746095 0.751756 +0.7235 0.75 0.746037 0.751868 +0.7236 0.75 0.74598 0.751981 +0.7237 0.75 0.745922 0.752093 +0.7238 0.75 0.745865 0.752205 +0.7239 0.75 0.745808 0.752316 +0.724 0.75 0.745751 0.752427 +0.7241 0.75 0.745694 0.752538 +0.7242 0.75 0.745637 0.752649 +0.7243 0.75 0.74558 0.752759 +0.7244 0.75 0.745523 0.752869 +0.7245 0.75 0.745466 0.752979 +0.7246 0.75 0.74541 0.753089 +0.7247 0.75 0.745353 0.753198 +0.7248 0.75 0.745297 0.753306 +0.7249 0.75 0.74524 0.753415 +0.725 0.75 0.745184 0.753523 +0.7251 0.75 0.745128 0.75363 +0.7252 0.75 0.745071 0.753738 +0.7253 0.75 0.745015 0.753845 +0.7254 0.75 0.744959 0.753951 +0.7255 0.75 0.744903 0.754057 +0.7256 0.75 0.744847 0.754163 +0.7257 0.75 0.744791 0.754268 +0.7258 0.75 0.744735 0.754373 +0.7259 0.75 0.74468 0.754477 +0.726 0.75 0.744624 0.754581 +0.7261 0.75 0.744569 0.754685 +0.7262 0.75 0.744513 0.754788 +0.7263 0.75 0.744458 0.75489 +0.7264 0.75 0.744402 0.754992 +0.7265 0.75 0.744347 0.755094 +0.7266 0.75 0.744292 0.755195 +0.7267 0.75 0.744237 0.755295 +0.7268 0.75 0.744182 0.755395 +0.7269 0.75 0.744127 0.755495 +0.727 0.75 0.744072 0.755594 +0.7271 0.75 0.744017 0.755692 +0.7272 0.75 0.743963 0.75579 +0.7273 0.75 0.743908 0.755887 +0.7274 0.75 0.743853 0.755984 +0.7275 0.75 0.743799 0.75608 +0.7276 0.75 0.743744 0.756176 +0.7277 0.75 0.74369 0.756271 +0.7278 0.75 0.743636 0.756365 +0.7279 0.75 0.743582 0.756459 +0.728 0.75 0.743528 0.756552 +0.7281 0.75 0.743474 0.756645 +0.7282 0.75 0.74342 0.756737 +0.7283 0.75 0.743366 0.756828 +0.7284 0.75 0.743312 0.756919 +0.7285 0.75 0.743259 0.757009 +0.7286 0.75 0.743205 0.757098 +0.7287 0.75 0.743151 0.757187 +0.7288 0.75 0.743098 0.757275 +0.7289 0.75 0.743045 0.757362 +0.729 0.75 0.742991 0.757449 +0.7291 0.75 0.742938 0.757535 +0.7292 0.75 0.742885 0.75762 +0.7293 0.75 0.742832 0.757704 +0.7294 0.75 0.742779 0.757788 +0.7295 0.75 0.742726 0.757871 +0.7296 0.75 0.742674 0.757954 +0.7297 0.75 0.742621 0.758035 +0.7298 0.75 0.742568 0.758116 +0.7299 0.75 0.742516 0.758196 +0.73 0.75 0.742463 0.758276 +0.7301 0.75 0.742411 0.758355 +0.7302 0.75 0.742359 0.758432 +0.7303 0.75 0.742307 0.75851 +0.7304 0.75 0.742255 0.758586 +0.7305 0.75 0.742203 0.758662 +0.7306 0.75 0.742151 0.758736 +0.7307 0.75 0.742099 0.75881 +0.7308 0.75 0.742047 0.758883 +0.7309 0.75 0.741995 0.758956 +0.731 0.75 0.741944 0.759027 +0.7311 0.75 0.741892 0.759098 +0.7312 0.75 0.741841 0.759168 +0.7313 0.75 0.74179 0.759237 +0.7314 0.75 0.741738 0.759305 +0.7315 0.75 0.741687 0.759373 +0.7316 0.75 0.741636 0.759439 +0.7317 0.75 0.741585 0.759505 +0.7318 0.75 0.741534 0.75957 +0.7319 0.75 0.741484 0.759634 +0.732 0.75 0.741433 0.759697 +0.7321 0.75 0.741382 0.759759 +0.7322 0.75 0.741332 0.759821 +0.7323 0.75 0.741281 0.759881 +0.7324 0.75 0.741231 0.759941 +0.7325 0.75 0.741181 0.759999 +0.7326 0.75 0.741131 0.760057 +0.7327 0.75 0.74108 0.760114 +0.7328 0.75 0.74103 0.76017 +0.7329 0.75 0.740981 0.760225 +0.733 0.75 0.740931 0.760279 +0.7331 0.75 0.740881 0.760333 +0.7332 0.75 0.740831 0.760385 +0.7333 0.75 0.740782 0.760436 +0.7334 0.75 0.740732 0.760487 +0.7335 0.75 0.740683 0.760536 +0.7336 0.75 0.740634 0.760585 +0.7337 0.75 0.740585 0.760633 +0.7338 0.75 0.740536 0.76068 +0.7339 0.75 0.740487 0.760725 +0.734 0.75 0.740438 0.76077 +0.7341 0.75 0.740389 0.760814 +0.7342 0.75 0.74034 0.760857 +0.7343 0.75 0.740292 0.760899 +0.7344 0.75 0.740243 0.76094 +0.7345 0.75 0.740195 0.76098 +0.7346 0.75 0.740146 0.761019 +0.7347 0.75 0.740098 0.761057 +0.7348 0.75 0.74005 0.761094 +0.7349 0.75 0.740002 0.76113 +0.735 0.75 0.739954 0.761165 +0.7351 0.75 0.739906 0.761199 +0.7352 0.75 0.739858 0.761233 +0.7353 0.75 0.739811 0.761265 +0.7354 0.75 0.739763 0.761296 +0.7355 0.75 0.739715 0.761326 +0.7356 0.75 0.739668 0.761355 +0.7357 0.75 0.739621 0.761383 +0.7358 0.75 0.739574 0.761411 +0.7359 0.75 0.739526 0.761437 +0.736 0.75 0.739479 0.761462 +0.7361 0.75 0.739432 0.761486 +0.7362 0.75 0.739386 0.761509 +0.7363 0.75 0.739339 0.761531 +0.7364 0.75 0.739292 0.761552 +0.7365 0.75 0.739246 0.761573 +0.7366 0.75 0.739199 0.761592 +0.7367 0.75 0.739153 0.76161 +0.7368 0.75 0.739107 0.761627 +0.7369 0.75 0.739061 0.761643 +0.737 0.75 0.739014 0.761658 +0.7371 0.75 0.738969 0.761672 +0.7372 0.75 0.738923 0.761685 +0.7373 0.75 0.738877 0.761697 +0.7374 0.75 0.738831 0.761708 +0.7375 0.75 0.738786 0.761718 +0.7376 0.75 0.73874 0.761727 +0.7377 0.75 0.738695 0.761734 +0.7378 0.75 0.73865 0.761741 +0.7379 0.75 0.738604 0.761747 +0.738 0.75 0.738559 0.761752 +0.7381 0.75 0.738514 0.761756 +0.7382 0.75 0.738469 0.761758 +0.7383 0.75 0.738425 0.76176 +0.7384 0.75 0.73838 0.761761 +0.7385 0.75 0.738335 0.761761 +0.7386 0.75 0.738291 0.761759 +0.7387 0.75 0.738247 0.761757 +0.7388 0.75 0.738202 0.761753 +0.7389 0.75 0.738158 0.761749 +0.739 0.75 0.738114 0.761744 +0.7391 0.75 0.73807 0.761737 +0.7392 0.75 0.738026 0.76173 +0.7393 0.75 0.737982 0.761721 +0.7394 0.75 0.737939 0.761712 +0.7395 0.75 0.737895 0.761701 +0.7396 0.75 0.737852 0.76169 +0.7397 0.75 0.737808 0.761677 +0.7398 0.75 0.737765 0.761664 +0.7399 0.75 0.737722 0.761649 +0.74 0.75 0.737679 0.761634 +0.7401 0.75 0.737636 0.761617 +0.7402 0.75 0.737593 0.761599 +0.7403 0.75 0.73755 0.761581 +0.7404 0.75 0.737508 0.761561 +0.7405 0.75 0.737465 0.761541 +0.7406 0.75 0.737423 0.761519 +0.7407 0.75 0.73738 0.761497 +0.7408 0.75 0.737338 0.761473 +0.7409 0.75 0.737296 0.761448 +0.741 0.75 0.737254 0.761423 +0.7411 0.75 0.737212 0.761396 +0.7412 0.75 0.73717 0.761369 +0.7413 0.75 0.737128 0.76134 +0.7414 0.75 0.737087 0.761311 +0.7415 0.75 0.737045 0.761281 +0.7416 0.75 0.737004 0.761249 +0.7417 0.75 0.736963 0.761217 +0.7418 0.75 0.736921 0.761184 +0.7419 0.75 0.73688 0.761149 +0.742 0.75 0.736839 0.761114 +0.7421 0.75 0.736798 0.761078 +0.7422 0.75 0.736758 0.761041 +0.7423 0.75 0.736717 0.761003 +0.7424 0.75 0.736676 0.760964 +0.7425 0.75 0.736636 0.760924 +0.7426 0.75 0.736596 0.760883 +0.7427 0.75 0.736555 0.760841 +0.7428 0.75 0.736515 0.760798 +0.7429 0.75 0.736475 0.760755 +0.743 0.75 0.736435 0.76071 +0.7431 0.75 0.736395 0.760664 +0.7432 0.75 0.736356 0.760618 +0.7433 0.75 0.736316 0.760571 +0.7434 0.75 0.736277 0.760522 +0.7435 0.75 0.736237 0.760473 +0.7436 0.75 0.736198 0.760423 +0.7437 0.75 0.736159 0.760372 +0.7438 0.75 0.73612 0.760321 +0.7439 0.75 0.736081 0.760268 +0.744 0.75 0.736042 0.760215 +0.7441 0.75 0.736003 0.76016 +0.7442 0.75 0.735964 0.760105 +0.7443 0.75 0.735926 0.760049 +0.7444 0.75 0.735887 0.759992 +0.7445 0.75 0.735849 0.759934 +0.7446 0.75 0.735811 0.759875 +0.7447 0.75 0.735773 0.759816 +0.7448 0.75 0.735735 0.759756 +0.7449 0.75 0.735697 0.759694 +0.745 0.75 0.735659 0.759632 +0.7451 0.75 0.735622 0.75957 +0.7452 0.75 0.735584 0.759506 +0.7453 0.75 0.735547 0.759442 +0.7454 0.75 0.735509 0.759376 +0.7455 0.75 0.735472 0.759311 +0.7456 0.75 0.735435 0.759244 +0.7457 0.75 0.735398 0.759176 +0.7458 0.75 0.735361 0.759108 +0.7459 0.75 0.735324 0.759039 +0.746 0.75 0.735287 0.758969 +0.7461 0.75 0.735251 0.758898 +0.7462 0.75 0.735214 0.758827 +0.7463 0.75 0.735178 0.758755 +0.7464 0.75 0.735142 0.758682 +0.7465 0.75 0.735106 0.758609 +0.7466 0.75 0.73507 0.758535 +0.7467 0.75 0.735034 0.75846 +0.7468 0.75 0.734998 0.758384 +0.7469 0.75 0.734962 0.758308 +0.747 0.75 0.734927 0.758231 +0.7471 0.75 0.734891 0.758153 +0.7472 0.75 0.734856 0.758074 +0.7473 0.75 0.734821 0.757995 +0.7474 0.75 0.734786 0.757916 +0.7475 0.75 0.734751 0.757835 +0.7476 0.75 0.734716 0.757754 +0.7477 0.75 0.734681 0.757672 +0.7478 0.75 0.734646 0.75759 +0.7479 0.75 0.734612 0.757507 +0.748 0.75 0.734577 0.757424 +0.7481 0.75 0.734543 0.757339 +0.7482 0.75 0.734509 0.757255 +0.7483 0.75 0.734475 0.757169 +0.7484 0.75 0.734441 0.757083 +0.7485 0.75 0.734407 0.756997 +0.7486 0.75 0.734373 0.75691 +0.7487 0.75 0.734339 0.756822 +0.7488 0.75 0.734306 0.756734 +0.7489 0.75 0.734272 0.756645 +0.749 0.75 0.734239 0.756556 +0.7491 0.75 0.734206 0.756466 +0.7492 0.75 0.734173 0.756376 +0.7493 0.75 0.73414 0.756285 +0.7494 0.75 0.734107 0.756193 +0.7495 0.75 0.734074 0.756101 +0.7496 0.75 0.734042 0.756009 +0.7497 0.75 0.734009 0.755916 +0.7498 0.75 0.733977 0.755823 +0.7499 0.75 0.733944 0.755729 +0.75 0.75 0.733912 0.755635 +0.7501 0.75 0.73388 0.75554 +0.7502 0.75 0.733848 0.755445 +0.7503 0.75 0.733816 0.755349 +0.7504 0.75 0.733785 0.755253 +0.7505 0.75 0.733753 0.755157 +0.7506 0.75 0.733722 0.75506 +0.7507 0.75 0.73369 0.754963 +0.7508 0.75 0.733659 0.754865 +0.7509 0.75 0.733628 0.754767 +0.751 0.75 0.733597 0.754669 +0.7511 0.75 0.733566 0.75457 +0.7512 0.75 0.733535 0.754471 +0.7513 0.75 0.733505 0.754372 +0.7514 0.75 0.733474 0.754272 +0.7515 0.75 0.733444 0.754172 +0.7516 0.75 0.733413 0.754072 +0.7517 0.75 0.733383 0.753971 +0.7518 0.75 0.733353 0.75387 +0.7519 0.75 0.733323 0.753769 +0.752 0.75 0.733293 0.753667 +0.7521 0.75 0.733263 0.753565 +0.7522 0.75 0.733234 0.753463 +0.7523 0.75 0.733204 0.753361 +0.7524 0.75 0.733175 0.753258 +0.7525 0.75 0.733146 0.753156 +0.7526 0.75 0.733117 0.753053 +0.7527 0.75 0.733087 0.752949 +0.7528 0.75 0.733059 0.752846 +0.7529 0.75 0.73303 0.752742 +0.753 0.75 0.733001 0.752638 +0.7531 0.75 0.732973 0.752534 +0.7532 0.75 0.732944 0.75243 +0.7533 0.75 0.732916 0.752326 +0.7534 0.75 0.732888 0.752221 +0.7535 0.75 0.732859 0.752117 +0.7536 0.75 0.732831 0.752012 +0.7537 0.75 0.732804 0.751907 +0.7538 0.75 0.732776 0.751802 +0.7539 0.75 0.732748 0.751697 +0.754 0.75 0.732721 0.751592 +0.7541 0.75 0.732693 0.751487 +0.7542 0.75 0.732666 0.751381 +0.7543 0.75 0.732639 0.751276 +0.7544 0.75 0.732612 0.751171 +0.7545 0.75 0.732585 0.751065 +0.7546 0.75 0.732558 0.75096 +0.7547 0.75 0.732532 0.750854 +0.7548 0.75 0.732505 0.750748 +0.7549 0.75 0.732479 0.750643 +0.755 0.75 0.732452 0.750537 +0.7551 0.75 0.732426 0.750432 +0.7552 0.75 0.7324 0.750326 +0.7553 0.75 0.732374 0.750221 +0.7554 0.75 0.732348 0.750115 +0.7555 0.75 0.732323 0.75001 +0.7556 0.75 0.732297 0.749904 +0.7557 0.75 0.732271 0.749799 +0.7558 0.75 0.732246 0.749694 +0.7559 0.75 0.732221 0.749589 +0.756 0.75 0.732196 0.749484 +0.7561 0.75 0.732171 0.749379 +0.7562 0.75 0.732146 0.749274 +0.7563 0.75 0.732121 0.74917 +0.7564 0.75 0.732096 0.749065 +0.7565 0.75 0.732072 0.748961 +0.7566 0.75 0.732048 0.748856 +0.7567 0.75 0.732023 0.748752 +0.7568 0.75 0.731999 0.748649 +0.7569 0.75 0.731975 0.748545 +0.757 0.75 0.731951 0.748441 +0.7571 0.75 0.731927 0.748338 +0.7572 0.75 0.731904 0.748235 +0.7573 0.75 0.73188 0.748132 +0.7574 0.75 0.731857 0.748029 +0.7575 0.75 0.731833 0.747927 +0.7576 0.75 0.73181 0.747825 +0.7577 0.75 0.731787 0.747723 +0.7578 0.75 0.731764 0.747621 +0.7579 0.75 0.731741 0.74752 +0.758 0.75 0.731719 0.747419 +0.7581 0.75 0.731696 0.747318 +0.7582 0.75 0.731674 0.747218 +0.7583 0.75 0.731651 0.747118 +0.7584 0.75 0.731629 0.747018 +0.7585 0.75 0.731607 0.746918 +0.7586 0.75 0.731585 0.746819 +0.7587 0.75 0.731563 0.74672 +0.7588 0.75 0.731541 0.746622 +0.7589 0.75 0.73152 0.746524 +0.759 0.75 0.731498 0.746426 +0.7591 0.75 0.731477 0.746329 +0.7592 0.75 0.731456 0.746232 +0.7593 0.75 0.731434 0.746135 +0.7594 0.75 0.731413 0.746039 +0.7595 0.75 0.731393 0.745943 +0.7596 0.75 0.731372 0.745848 +0.7597 0.75 0.731351 0.745753 +0.7598 0.75 0.731331 0.745659 +0.7599 0.75 0.73131 0.745565 +0.76 0.75 0.73129 0.745471 +0.7601 0.75 0.73127 0.745378 +0.7602 0.75 0.73125 0.745286 +0.7603 0.75 0.73123 0.745194 +0.7604 0.75 0.73121 0.745102 +0.7605 0.75 0.73119 0.745011 +0.7606 0.75 0.731171 0.744921 +0.7607 0.75 0.731151 0.744831 +0.7608 0.75 0.731132 0.744741 +0.7609 0.75 0.731113 0.744652 +0.761 0.75 0.731094 0.744564 +0.7611 0.75 0.731075 0.744476 +0.7612 0.75 0.731056 0.744389 +0.7613 0.75 0.731037 0.744302 +0.7614 0.75 0.731019 0.744216 +0.7615 0.75 0.731 0.74413 +0.7616 0.75 0.730982 0.744045 +0.7617 0.75 0.730964 0.743961 +0.7618 0.75 0.730946 0.743877 +0.7619 0.75 0.730928 0.743794 +0.762 0.75 0.73091 0.743711 +0.7621 0.75 0.730892 0.743629 +0.7622 0.75 0.730875 0.743548 +0.7623 0.75 0.730857 0.743467 +0.7624 0.75 0.73084 0.743387 +0.7625 0.75 0.730823 0.743308 +0.7626 0.75 0.730806 0.743229 +0.7627 0.75 0.730789 0.743151 +0.7628 0.75 0.730772 0.743074 +0.7629 0.75 0.730755 0.742997 +0.763 0.75 0.730739 0.742922 +0.7631 0.75 0.730722 0.742846 +0.7632 0.75 0.730706 0.742772 +0.7633 0.75 0.73069 0.742698 +0.7634 0.75 0.730673 0.742625 +0.7635 0.75 0.730657 0.742553 +0.7636 0.75 0.730642 0.742481 +0.7637 0.75 0.730626 0.74241 +0.7638 0.75 0.73061 0.74234 +0.7639 0.75 0.730595 0.74227 +0.764 0.75 0.730579 0.742202 +0.7641 0.75 0.730564 0.742134 +0.7642 0.75 0.730549 0.742067 +0.7643 0.75 0.730534 0.742001 +0.7644 0.75 0.730519 0.741935 +0.7645 0.75 0.730504 0.74187 +0.7646 0.75 0.73049 0.741806 +0.7647 0.75 0.730475 0.741743 +0.7648 0.75 0.730461 0.741681 +0.7649 0.75 0.730447 0.741619 +0.765 0.75 0.730432 0.741558 +0.7651 0.75 0.730418 0.741499 +0.7652 0.75 0.730405 0.741439 +0.7653 0.75 0.730391 0.741381 +0.7654 0.75 0.730377 0.741324 +0.7655 0.75 0.730364 0.741267 +0.7656 0.75 0.73035 0.741212 +0.7657 0.75 0.730337 0.741157 +0.7658 0.75 0.730324 0.741103 +0.7659 0.75 0.730311 0.741049 +0.766 0.75 0.730298 0.740997 +0.7661 0.75 0.730285 0.740946 +0.7662 0.75 0.730272 0.740895 +0.7663 0.75 0.73026 0.740846 +0.7664 0.75 0.730248 0.740797 +0.7665 0.75 0.730235 0.740749 +0.7666 0.75 0.730223 0.740702 +0.7667 0.75 0.730211 0.740656 +0.7668 0.75 0.730199 0.740611 +0.7669 0.75 0.730187 0.740567 +0.767 0.75 0.730176 0.740523 +0.7671 0.75 0.730164 0.740481 +0.7672 0.75 0.730153 0.740439 +0.7673 0.75 0.730141 0.740399 +0.7674 0.75 0.73013 0.740359 +0.7675 0.75 0.730119 0.74032 +0.7676 0.75 0.730108 0.740282 +0.7677 0.75 0.730098 0.740245 +0.7678 0.75 0.730087 0.74021 +0.7679 0.75 0.730076 0.740174 +0.768 0.75 0.730066 0.74014 +0.7681 0.75 0.730056 0.740107 +0.7682 0.75 0.730045 0.740075 +0.7683 0.75 0.730035 0.740044 +0.7684 0.75 0.730025 0.740014 +0.7685 0.75 0.730016 0.739984 +0.7686 0.75 0.730006 0.739956 +0.7687 0.75 0.729996 0.739929 +0.7688 0.75 0.729987 0.739902 +0.7689 0.75 0.729978 0.739877 +0.769 0.75 0.729968 0.739852 +0.7691 0.75 0.729959 0.739829 +0.7692 0.75 0.72995 0.739806 +0.7693 0.75 0.729942 0.739785 +0.7694 0.75 0.729933 0.739764 +0.7695 0.75 0.729924 0.739745 +0.7696 0.75 0.729916 0.739726 +0.7697 0.75 0.729908 0.739709 +0.7698 0.75 0.729899 0.739692 +0.7699 0.75 0.729891 0.739676 +0.77 0.75 0.729883 0.739662 +0.7701 0.75 0.729875 0.739648 +0.7702 0.75 0.729868 0.739635 +0.7703 0.75 0.72986 0.739624 +0.7704 0.75 0.729853 0.739613 +0.7705 0.75 0.729845 0.739603 +0.7706 0.75 0.729838 0.739594 +0.7707 0.75 0.729831 0.739587 +0.7708 0.75 0.729824 0.73958 +0.7709 0.75 0.729817 0.739574 +0.771 0.75 0.729811 0.73957 +0.7711 0.75 0.729804 0.739566 +0.7712 0.75 0.729797 0.739563 +0.7713 0.75 0.729791 0.739561 +0.7714 0.75 0.729785 0.739561 +0.7715 0.75 0.729779 0.739561 +0.7716 0.75 0.729773 0.739562 +0.7717 0.75 0.729767 0.739564 +0.7718 0.75 0.729761 0.739567 +0.7719 0.75 0.729756 0.739572 +0.772 0.75 0.72975 0.739577 +0.7721 0.75 0.729745 0.739583 +0.7722 0.75 0.729739 0.73959 +0.7723 0.75 0.729734 0.739598 +0.7724 0.75 0.729729 0.739608 +0.7725 0.75 0.729724 0.739618 +0.7726 0.75 0.72972 0.739629 +0.7727 0.75 0.729715 0.739641 +0.7728 0.75 0.729711 0.739654 +0.7729 0.75 0.729706 0.739668 +0.773 0.75 0.729702 0.739683 +0.7731 0.75 0.729698 0.739699 +0.7732 0.75 0.729694 0.739716 +0.7733 0.75 0.72969 0.739734 +0.7734 0.75 0.729686 0.739753 +0.7735 0.75 0.729682 0.739773 +0.7736 0.75 0.729679 0.739794 +0.7737 0.75 0.729676 0.739816 +0.7738 0.75 0.729672 0.739839 +0.7739 0.75 0.729669 0.739863 +0.774 0.75 0.729666 0.739888 +0.7741 0.75 0.729663 0.739913 +0.7742 0.75 0.72966 0.73994 +0.7743 0.75 0.729658 0.739968 +0.7744 0.75 0.729655 0.739996 +0.7745 0.75 0.729653 0.740026 +0.7746 0.75 0.72965 0.740056 +0.7747 0.75 0.729648 0.740088 +0.7748 0.75 0.729646 0.74012 +0.7749 0.75 0.729644 0.740154 +0.775 0.75 0.729642 0.740188 +0.7751 0.75 0.729641 0.740223 +0.7752 0.75 0.729639 0.740259 +0.7753 0.75 0.729638 0.740296 +0.7754 0.75 0.729636 0.740334 +0.7755 0.75 0.729635 0.740373 +0.7756 0.75 0.729634 0.740413 +0.7757 0.75 0.729633 0.740453 +0.7758 0.75 0.729632 0.740495 +0.7759 0.75 0.729632 0.740537 +0.776 0.75 0.729631 0.74058 +0.7761 0.75 0.729631 0.740625 +0.7762 0.75 0.72963 0.74067 +0.7763 0.75 0.72963 0.740716 +0.7764 0.75 0.72963 0.740763 +0.7765 0.75 0.72963 0.74081 +0.7766 0.75 0.72963 0.740859 +0.7767 0.75 0.72963 0.740908 +0.7768 0.75 0.729631 0.740959 +0.7769 0.75 0.729631 0.74101 +0.777 0.75 0.729632 0.741062 +0.7771 0.75 0.729632 0.741115 +0.7772 0.75 0.729633 0.741168 +0.7773 0.75 0.729634 0.741223 +0.7774 0.75 0.729635 0.741278 +0.7775 0.75 0.729637 0.741335 +0.7776 0.75 0.729638 0.741391 +0.7777 0.75 0.729639 0.741449 +0.7778 0.75 0.729641 0.741508 +0.7779 0.75 0.729643 0.741567 +0.778 0.75 0.729644 0.741627 +0.7781 0.75 0.729646 0.741688 +0.7782 0.75 0.729648 0.74175 +0.7783 0.75 0.729651 0.741813 +0.7784 0.75 0.729653 0.741876 +0.7785 0.75 0.729655 0.74194 +0.7786 0.75 0.729658 0.742005 +0.7787 0.75 0.729661 0.74207 +0.7788 0.75 0.729663 0.742136 +0.7789 0.75 0.729666 0.742203 +0.779 0.75 0.729669 0.742271 +0.7791 0.75 0.729672 0.74234 +0.7792 0.75 0.729676 0.742409 +0.7793 0.75 0.729679 0.742479 +0.7794 0.75 0.729683 0.742549 +0.7795 0.75 0.729686 0.74262 +0.7796 0.75 0.72969 0.742692 +0.7797 0.75 0.729694 0.742765 +0.7798 0.75 0.729698 0.742838 +0.7799 0.75 0.729702 0.742912 +0.78 0.75 0.729706 0.742987 +0.7801 0.75 0.72971 0.743062 +0.7802 0.75 0.729715 0.743138 +0.7803 0.75 0.729719 0.743214 +0.7804 0.75 0.729724 0.743292 +0.7805 0.75 0.729729 0.743369 +0.7806 0.75 0.729734 0.743448 +0.7807 0.75 0.729739 0.743527 +0.7808 0.75 0.729744 0.743606 +0.7809 0.75 0.729749 0.743686 +0.781 0.75 0.729755 0.743767 +0.7811 0.75 0.72976 0.743849 +0.7812 0.75 0.729766 0.74393 +0.7813 0.75 0.729772 0.744013 +0.7814 0.75 0.729778 0.744096 +0.7815 0.75 0.729784 0.744179 +0.7816 0.75 0.72979 0.744263 +0.7817 0.75 0.729796 0.744348 +0.7818 0.75 0.729802 0.744433 +0.7819 0.75 0.729809 0.744519 +0.782 0.75 0.729815 0.744605 +0.7821 0.75 0.729822 0.744691 +0.7822 0.75 0.729829 0.744779 +0.7823 0.75 0.729836 0.744866 +0.7824 0.75 0.729843 0.744954 +0.7825 0.75 0.72985 0.745043 +0.7826 0.75 0.729857 0.745132 +0.7827 0.75 0.729865 0.745221 +0.7828 0.75 0.729872 0.745311 +0.7829 0.75 0.72988 0.745401 +0.783 0.75 0.729887 0.745491 +0.7831 0.75 0.729895 0.745582 +0.7832 0.75 0.729903 0.745674 +0.7833 0.75 0.729911 0.745766 +0.7834 0.75 0.72992 0.745858 +0.7835 0.75 0.729928 0.74595 +0.7836 0.75 0.729936 0.746043 +0.7837 0.75 0.729945 0.746136 +0.7838 0.75 0.729954 0.74623 +0.7839 0.75 0.729962 0.746324 +0.784 0.75 0.729971 0.746418 +0.7841 0.75 0.72998 0.746513 +0.7842 0.75 0.729989 0.746607 +0.7843 0.75 0.729999 0.746703 +0.7844 0.75 0.730008 0.746798 +0.7845 0.75 0.730018 0.746894 +0.7846 0.75 0.730027 0.746989 +0.7847 0.75 0.730037 0.747086 +0.7848 0.75 0.730047 0.747182 +0.7849 0.75 0.730057 0.747279 +0.785 0.75 0.730067 0.747376 +0.7851 0.75 0.730077 0.747473 +0.7852 0.75 0.730087 0.74757 +0.7853 0.75 0.730098 0.747667 +0.7854 0.75 0.730108 0.747765 +0.7855 0.75 0.730119 0.747863 +0.7856 0.75 0.730129 0.747961 +0.7857 0.75 0.73014 0.748059 +0.7858 0.75 0.730151 0.748158 +0.7859 0.75 0.730162 0.748256 +0.786 0.75 0.730174 0.748355 +0.7861 0.75 0.730185 0.748453 +0.7862 0.75 0.730196 0.748552 +0.7863 0.75 0.730208 0.748651 +0.7864 0.75 0.73022 0.74875 +0.7865 0.75 0.730231 0.748849 +0.7866 0.75 0.730243 0.748948 +0.7867 0.75 0.730255 0.749047 +0.7868 0.75 0.730267 0.749147 +0.7869 0.75 0.73028 0.749246 +0.787 0.75 0.730292 0.749345 +0.7871 0.75 0.730304 0.749445 +0.7872 0.75 0.730317 0.749544 +0.7873 0.75 0.73033 0.749643 +0.7874 0.75 0.730342 0.749743 +0.7875 0.75 0.730355 0.749842 +0.7876 0.75 0.730368 0.749941 +0.7877 0.75 0.730381 0.75004 +0.7878 0.75 0.730395 0.75014 +0.7879 0.75 0.730408 0.750239 +0.788 0.75 0.730421 0.750338 +0.7881 0.75 0.730435 0.750437 +0.7882 0.75 0.730449 0.750536 +0.7883 0.75 0.730462 0.750634 +0.7884 0.75 0.730476 0.750733 +0.7885 0.75 0.73049 0.750832 +0.7886 0.75 0.730504 0.75093 +0.7887 0.75 0.730519 0.751028 +0.7888 0.75 0.730533 0.751126 +0.7889 0.75 0.730547 0.751224 +0.789 0.75 0.730562 0.751322 +0.7891 0.75 0.730577 0.75142 +0.7892 0.75 0.730591 0.751517 +0.7893 0.75 0.730606 0.751614 +0.7894 0.75 0.730621 0.751711 +0.7895 0.75 0.730636 0.751808 +0.7896 0.75 0.730652 0.751905 +0.7897 0.75 0.730667 0.752001 +0.7898 0.75 0.730682 0.752097 +0.7899 0.75 0.730698 0.752193 +0.79 0.75 0.730713 0.752289 +0.7901 0.75 0.730729 0.752384 +0.7902 0.75 0.730745 0.752479 +0.7903 0.75 0.730761 0.752574 +0.7904 0.75 0.730777 0.752668 +0.7905 0.75 0.730793 0.752762 +0.7906 0.75 0.73081 0.752856 +0.7907 0.75 0.730826 0.752949 +0.7908 0.75 0.730843 0.753042 +0.7909 0.75 0.730859 0.753135 +0.791 0.75 0.730876 0.753227 +0.7911 0.75 0.730893 0.753319 +0.7912 0.75 0.73091 0.753411 +0.7913 0.75 0.730927 0.753502 +0.7914 0.75 0.730944 0.753593 +0.7915 0.75 0.730961 0.753684 +0.7916 0.75 0.730979 0.753774 +0.7917 0.75 0.730996 0.753863 +0.7918 0.75 0.731014 0.753952 +0.7919 0.75 0.731031 0.754041 +0.792 0.75 0.731049 0.754129 +0.7921 0.75 0.731067 0.754217 +0.7922 0.75 0.731085 0.754304 +0.7923 0.75 0.731103 0.754391 +0.7924 0.75 0.731121 0.754477 +0.7925 0.75 0.73114 0.754563 +0.7926 0.75 0.731158 0.754649 +0.7927 0.75 0.731177 0.754734 +0.7928 0.75 0.731195 0.754818 +0.7929 0.75 0.731214 0.754902 +0.793 0.75 0.731233 0.754985 +0.7931 0.75 0.731252 0.755068 +0.7932 0.75 0.731271 0.75515 +0.7933 0.75 0.73129 0.755231 +0.7934 0.75 0.731309 0.755312 +0.7935 0.75 0.731329 0.755393 +0.7936 0.75 0.731348 0.755473 +0.7937 0.75 0.731368 0.755552 +0.7938 0.75 0.731387 0.75563 +0.7939 0.75 0.731407 0.755708 +0.794 0.75 0.731427 0.755786 +0.7941 0.75 0.731447 0.755863 +0.7942 0.75 0.731467 0.755939 +0.7943 0.75 0.731487 0.756014 +0.7944 0.75 0.731508 0.756089 +0.7945 0.75 0.731528 0.756163 +0.7946 0.75 0.731549 0.756237 +0.7947 0.75 0.731569 0.756309 +0.7948 0.75 0.73159 0.756382 +0.7949 0.75 0.731611 0.756453 +0.795 0.75 0.731632 0.756524 +0.7951 0.75 0.731653 0.756594 +0.7952 0.75 0.731674 0.756663 +0.7953 0.75 0.731695 0.756732 +0.7954 0.75 0.731716 0.7568 +0.7955 0.75 0.731738 0.756867 +0.7956 0.75 0.731759 0.756933 +0.7957 0.75 0.731781 0.756999 +0.7958 0.75 0.731803 0.757064 +0.7959 0.75 0.731824 0.757128 +0.796 0.75 0.731846 0.757191 +0.7961 0.75 0.731868 0.757254 +0.7962 0.75 0.731891 0.757316 +0.7963 0.75 0.731913 0.757377 +0.7964 0.75 0.731935 0.757437 +0.7965 0.75 0.731957 0.757497 +0.7966 0.75 0.73198 0.757555 +0.7967 0.75 0.732003 0.757613 +0.7968 0.75 0.732025 0.75767 +0.7969 0.75 0.732048 0.757727 +0.797 0.75 0.732071 0.757782 +0.7971 0.75 0.732094 0.757836 +0.7972 0.75 0.732117 0.75789 +0.7973 0.75 0.73214 0.757943 +0.7974 0.75 0.732164 0.757995 +0.7975 0.75 0.732187 0.758046 +0.7976 0.75 0.732211 0.758097 +0.7977 0.75 0.732234 0.758146 +0.7978 0.75 0.732258 0.758195 +0.7979 0.75 0.732282 0.758242 +0.798 0.75 0.732306 0.758289 +0.7981 0.75 0.73233 0.758335 +0.7982 0.75 0.732354 0.75838 +0.7983 0.75 0.732378 0.758424 +0.7984 0.75 0.732402 0.758468 +0.7985 0.75 0.732426 0.75851 +0.7986 0.75 0.732451 0.758552 +0.7987 0.75 0.732475 0.758592 +0.7988 0.75 0.7325 0.758632 +0.7989 0.75 0.732525 0.75867 +0.799 0.75 0.73255 0.758708 +0.7991 0.75 0.732575 0.758745 +0.7992 0.75 0.7326 0.758781 +0.7993 0.75 0.732625 0.758816 +0.7994 0.75 0.73265 0.75885 +0.7995 0.75 0.732675 0.758883 +0.7996 0.75 0.732701 0.758915 +0.7997 0.75 0.732726 0.758947 +0.7998 0.75 0.732752 0.758977 +0.7999 0.75 0.732778 0.759006 +0.8 0.75 0.732803 0.759034 +0.8001 0.75 0.732829 0.759062 +0.8002 0.75 0.732855 0.759088 +0.8003 0.75 0.732881 0.759114 +0.8004 0.75 0.732907 0.759138 +0.8005 0.75 0.732934 0.759162 +0.8006 0.75 0.73296 0.759184 +0.8007 0.75 0.732987 0.759206 +0.8008 0.75 0.733013 0.759227 +0.8009 0.75 0.73304 0.759246 +0.801 0.75 0.733066 0.759265 +0.8011 0.75 0.733093 0.759282 +0.8012 0.75 0.73312 0.759299 +0.8013 0.75 0.733147 0.759315 +0.8014 0.75 0.733174 0.759329 +0.8015 0.75 0.733201 0.759343 +0.8016 0.75 0.733229 0.759356 +0.8017 0.75 0.733256 0.759368 +0.8018 0.75 0.733283 0.759378 +0.8019 0.75 0.733311 0.759388 +0.802 0.75 0.733338 0.759397 +0.8021 0.75 0.733366 0.759404 +0.8022 0.75 0.733394 0.759411 +0.8023 0.75 0.733422 0.759417 +0.8024 0.75 0.73345 0.759422 +0.8025 0.75 0.733478 0.759425 +0.8026 0.75 0.733506 0.759428 +0.8027 0.75 0.733534 0.75943 +0.8028 0.75 0.733563 0.759431 +0.8029 0.75 0.733591 0.75943 +0.803 0.75 0.733619 0.759429 +0.8031 0.75 0.733648 0.759427 +0.8032 0.75 0.733677 0.759423 +0.8033 0.75 0.733705 0.759419 +0.8034 0.75 0.733734 0.759414 +0.8035 0.75 0.733763 0.759408 +0.8036 0.75 0.733792 0.7594 +0.8037 0.75 0.733821 0.759392 +0.8038 0.75 0.733851 0.759383 +0.8039 0.75 0.73388 0.759372 +0.804 0.75 0.733909 0.759361 +0.8041 0.75 0.733939 0.759349 +0.8042 0.75 0.733968 0.759336 +0.8043 0.75 0.733998 0.759322 +0.8044 0.75 0.734027 0.759306 +0.8045 0.75 0.734057 0.75929 +0.8046 0.75 0.734087 0.759273 +0.8047 0.75 0.734117 0.759255 +0.8048 0.75 0.734147 0.759236 +0.8049 0.75 0.734177 0.759215 +0.805 0.75 0.734207 0.759194 +0.8051 0.75 0.734238 0.759172 +0.8052 0.75 0.734268 0.759149 +0.8053 0.75 0.734299 0.759125 +0.8054 0.75 0.734329 0.7591 +0.8055 0.75 0.73436 0.759074 +0.8056 0.75 0.73439 0.759047 +0.8057 0.75 0.734421 0.759019 +0.8058 0.75 0.734452 0.75899 +0.8059 0.75 0.734483 0.758961 +0.806 0.75 0.734514 0.75893 +0.8061 0.75 0.734545 0.758898 +0.8062 0.75 0.734576 0.758866 +0.8063 0.75 0.734608 0.758832 +0.8064 0.75 0.734639 0.758798 +0.8065 0.75 0.73467 0.758762 +0.8066 0.75 0.734702 0.758726 +0.8067 0.75 0.734733 0.758688 +0.8068 0.75 0.734765 0.75865 +0.8069 0.75 0.734797 0.758611 +0.807 0.75 0.734829 0.758571 +0.8071 0.75 0.734861 0.75853 +0.8072 0.75 0.734893 0.758488 +0.8073 0.75 0.734925 0.758445 +0.8074 0.75 0.734957 0.758402 +0.8075 0.75 0.734989 0.758357 +0.8076 0.75 0.735021 0.758312 +0.8077 0.75 0.735054 0.758266 +0.8078 0.75 0.735086 0.758218 +0.8079 0.75 0.735119 0.75817 +0.808 0.75 0.735151 0.758121 +0.8081 0.75 0.735184 0.758072 +0.8082 0.75 0.735217 0.758021 +0.8083 0.75 0.73525 0.75797 +0.8084 0.75 0.735283 0.757917 +0.8085 0.75 0.735316 0.757864 +0.8086 0.75 0.735349 0.75781 +0.8087 0.75 0.735382 0.757755 +0.8088 0.75 0.735415 0.7577 +0.8089 0.75 0.735448 0.757643 +0.809 0.75 0.735482 0.757586 +0.8091 0.75 0.735515 0.757528 +0.8092 0.75 0.735549 0.757469 +0.8093 0.75 0.735582 0.757409 +0.8094 0.75 0.735616 0.757349 +0.8095 0.75 0.73565 0.757288 +0.8096 0.75 0.735683 0.757226 +0.8097 0.75 0.735717 0.757163 +0.8098 0.75 0.735751 0.7571 +0.8099 0.75 0.735785 0.757035 +0.81 0.75 0.735819 0.75697 +0.8101 0.75 0.735854 0.756905 +0.8102 0.75 0.735888 0.756838 +0.8103 0.75 0.735922 0.756771 +0.8104 0.75 0.735957 0.756703 +0.8105 0.75 0.735991 0.756635 +0.8106 0.75 0.736026 0.756565 +0.8107 0.75 0.73606 0.756495 +0.8108 0.75 0.736095 0.756425 +0.8109 0.75 0.73613 0.756353 +0.811 0.75 0.736164 0.756281 +0.8111 0.75 0.736199 0.756209 +0.8112 0.75 0.736234 0.756135 +0.8113 0.75 0.736269 0.756061 +0.8114 0.75 0.736304 0.755987 +0.8115 0.75 0.73634 0.755912 +0.8116 0.75 0.736375 0.755836 +0.8117 0.75 0.73641 0.755759 +0.8118 0.75 0.736446 0.755682 +0.8119 0.75 0.736481 0.755605 +0.812 0.75 0.736517 0.755527 +0.8121 0.75 0.736552 0.755448 +0.8122 0.75 0.736588 0.755368 +0.8123 0.75 0.736623 0.755288 +0.8124 0.75 0.736659 0.755208 +0.8125 0.75 0.736695 0.755127 +0.8126 0.75 0.736731 0.755045 +0.8127 0.75 0.736767 0.754963 +0.8128 0.75 0.736803 0.754881 +0.8129 0.75 0.736839 0.754798 +0.813 0.75 0.736875 0.754714 +0.8131 0.75 0.736912 0.75463 +0.8132 0.75 0.736948 0.754545 +0.8133 0.75 0.736984 0.75446 +0.8134 0.75 0.737021 0.754375 +0.8135 0.75 0.737057 0.754289 +0.8136 0.75 0.737094 0.754203 +0.8137 0.75 0.73713 0.754116 +0.8138 0.75 0.737167 0.754028 +0.8139 0.75 0.737204 0.753941 +0.814 0.75 0.737241 0.753853 +0.8141 0.75 0.737278 0.753764 +0.8142 0.75 0.737315 0.753675 +0.8143 0.75 0.737352 0.753586 +0.8144 0.75 0.737389 0.753497 +0.8145 0.75 0.737426 0.753407 +0.8146 0.75 0.737463 0.753317 +0.8147 0.75 0.7375 0.753226 +0.8148 0.75 0.737537 0.753135 +0.8149 0.75 0.737575 0.753044 +0.815 0.75 0.737612 0.752952 +0.8151 0.75 0.73765 0.75286 +0.8152 0.75 0.737687 0.752768 +0.8153 0.75 0.737725 0.752676 +0.8154 0.75 0.737763 0.752583 +0.8155 0.75 0.7378 0.75249 +0.8156 0.75 0.737838 0.752397 +0.8157 0.75 0.737876 0.752304 +0.8158 0.75 0.737914 0.75221 +0.8159 0.75 0.737952 0.752116 +0.816 0.75 0.73799 0.752022 +0.8161 0.75 0.738028 0.751928 +0.8162 0.75 0.738066 0.751834 +0.8163 0.75 0.738104 0.751739 +0.8164 0.75 0.738143 0.751644 +0.8165 0.75 0.738181 0.75155 +0.8166 0.75 0.738219 0.751455 +0.8167 0.75 0.738258 0.751359 +0.8168 0.75 0.738296 0.751264 +0.8169 0.75 0.738335 0.751169 +0.817 0.75 0.738374 0.751073 +0.8171 0.75 0.738412 0.750978 +0.8172 0.75 0.738451 0.750882 +0.8173 0.75 0.73849 0.750787 +0.8174 0.75 0.738528 0.750691 +0.8175 0.75 0.738567 0.750595 +0.8176 0.75 0.738606 0.750499 +0.8177 0.75 0.738645 0.750404 +0.8178 0.75 0.738684 0.750308 +0.8179 0.75 0.738723 0.750212 +0.818 0.75 0.738763 0.750116 +0.8181 0.75 0.738802 0.75002 +0.8182 0.75 0.738841 0.749925 +0.8183 0.75 0.73888 0.749829 +0.8184 0.75 0.73892 0.749733 +0.8185 0.75 0.738959 0.749638 +0.8186 0.75 0.738999 0.749542 +0.8187 0.75 0.739038 0.749447 +0.8188 0.75 0.739078 0.749351 +0.8189 0.75 0.739117 0.749256 +0.819 0.75 0.739157 0.749161 +0.8191 0.75 0.739197 0.749066 +0.8192 0.75 0.739236 0.748971 +0.8193 0.75 0.739276 0.748877 +0.8194 0.75 0.739316 0.748782 +0.8195 0.75 0.739356 0.748688 +0.8196 0.75 0.739396 0.748594 +0.8197 0.75 0.739436 0.7485 +0.8198 0.75 0.739476 0.748406 +0.8199 0.75 0.739516 0.748312 +0.82 0.75 0.739556 0.748219 +0.8201 0.75 0.739596 0.748126 +0.8202 0.75 0.739637 0.748033 +0.8203 0.75 0.739677 0.747941 +0.8204 0.75 0.739717 0.747848 +0.8205 0.75 0.739758 0.747756 +0.8206 0.75 0.739798 0.747665 +0.8207 0.75 0.739839 0.747573 +0.8208 0.75 0.739879 0.747482 +0.8209 0.75 0.73992 0.747391 +0.821 0.75 0.73996 0.747301 +0.8211 0.75 0.740001 0.747211 +0.8212 0.75 0.740042 0.747121 +0.8213 0.75 0.740083 0.747031 +0.8214 0.75 0.740123 0.746942 +0.8215 0.75 0.740164 0.746854 +0.8216 0.75 0.740205 0.746766 +0.8217 0.75 0.740246 0.746678 +0.8218 0.75 0.740287 0.74659 +0.8219 0.75 0.740328 0.746503 +0.822 0.75 0.740369 0.746417 +0.8221 0.75 0.74041 0.74633 +0.8222 0.75 0.740451 0.746245 +0.8223 0.75 0.740492 0.74616 +0.8224 0.75 0.740534 0.746075 +0.8225 0.75 0.740575 0.745991 +0.8226 0.75 0.740616 0.745907 +0.8227 0.75 0.740658 0.745823 +0.8228 0.75 0.740699 0.745741 +0.8229 0.75 0.74074 0.745658 +0.823 0.75 0.740782 0.745577 +0.8231 0.75 0.740823 0.745496 +0.8232 0.75 0.740865 0.745415 +0.8233 0.75 0.740907 0.745335 +0.8234 0.75 0.740948 0.745255 +0.8235 0.75 0.74099 0.745176 +0.8236 0.75 0.741032 0.745098 +0.8237 0.75 0.741073 0.74502 +0.8238 0.75 0.741115 0.744943 +0.8239 0.75 0.741157 0.744867 +0.824 0.75 0.741199 0.744791 +0.8241 0.75 0.741241 0.744715 +0.8242 0.75 0.741283 0.744641 +0.8243 0.75 0.741325 0.744567 +0.8244 0.75 0.741367 0.744493 +0.8245 0.75 0.741409 0.744421 +0.8246 0.75 0.741451 0.744349 +0.8247 0.75 0.741493 0.744277 +0.8248 0.75 0.741535 0.744207 +0.8249 0.75 0.741577 0.744137 +0.825 0.75 0.741619 0.744068 +0.8251 0.75 0.741661 0.743999 +0.8252 0.75 0.741704 0.743931 +0.8253 0.75 0.741746 0.743864 +0.8254 0.75 0.741788 0.743798 +0.8255 0.75 0.741831 0.743732 +0.8256 0.75 0.741873 0.743668 +0.8257 0.75 0.741916 0.743604 +0.8258 0.75 0.741958 0.74354 +0.8259 0.75 0.742001 0.743478 +0.826 0.75 0.742043 0.743416 +0.8261 0.75 0.742086 0.743355 +0.8262 0.75 0.742128 0.743295 +0.8263 0.75 0.742171 0.743236 +0.8264 0.75 0.742214 0.743177 +0.8265 0.75 0.742256 0.743119 +0.8266 0.75 0.742299 0.743062 +0.8267 0.75 0.742342 0.743006 +0.8268 0.75 0.742385 0.742951 +0.8269 0.75 0.742427 0.742897 +0.827 0.75 0.74247 0.742843 +0.8271 0.75 0.742513 0.742791 +0.8272 0.75 0.742556 0.742739 +0.8273 0.75 0.742599 0.742688 +0.8274 0.75 0.742642 0.742638 +0.8275 0.75 0.742685 0.742589 +0.8276 0.75 0.742728 0.742541 +0.8277 0.75 0.742771 0.742493 +0.8278 0.75 0.742814 0.742447 +0.8279 0.75 0.742857 0.742401 +0.828 0.75 0.7429 0.742357 +0.8281 0.75 0.742943 0.742313 +0.8282 0.75 0.742986 0.74227 +0.8283 0.75 0.74303 0.742228 +0.8284 0.75 0.743073 0.742187 +0.8285 0.75 0.743116 0.742147 +0.8286 0.75 0.743159 0.742108 +0.8287 0.75 0.743203 0.74207 +0.8288 0.75 0.743246 0.742033 +0.8289 0.75 0.743289 0.741997 +0.829 0.75 0.743333 0.741961 +0.8291 0.75 0.743376 0.741927 +0.8292 0.75 0.743419 0.741894 +0.8293 0.75 0.743463 0.741861 +0.8294 0.75 0.743506 0.74183 +0.8295 0.75 0.74355 0.7418 +0.8296 0.75 0.743593 0.74177 +0.8297 0.75 0.743637 0.741742 +0.8298 0.75 0.74368 0.741714 +0.8299 0.75 0.743724 0.741688 +0.83 0.75 0.743767 0.741662 +0.8301 0.75 0.743811 0.741638 +0.8302 0.75 0.743854 0.741615 +0.8303 0.75 0.743898 0.741592 +0.8304 0.75 0.743942 0.741571 +0.8305 0.75 0.743985 0.74155 +0.8306 0.75 0.744029 0.741531 +0.8307 0.75 0.744073 0.741513 +0.8308 0.75 0.744116 0.741495 +0.8309 0.75 0.74416 0.741479 +0.831 0.75 0.744204 0.741464 +0.8311 0.75 0.744248 0.741449 +0.8312 0.75 0.744291 0.741436 +0.8313 0.75 0.744335 0.741424 +0.8314 0.75 0.744379 0.741413 +0.8315 0.75 0.744423 0.741402 +0.8316 0.75 0.744467 0.741393 +0.8317 0.75 0.744511 0.741385 +0.8318 0.75 0.744554 0.741378 +0.8319 0.75 0.744598 0.741372 +0.832 0.75 0.744642 0.741367 +0.8321 0.75 0.744686 0.741363 +0.8322 0.75 0.74473 0.74136 +0.8323 0.75 0.744774 0.741359 +0.8324 0.75 0.744818 0.741358 +0.8325 0.75 0.744862 0.741358 +0.8326 0.75 0.744906 0.741359 +0.8327 0.75 0.74495 0.741362 +0.8328 0.75 0.744994 0.741365 +0.8329 0.75 0.745038 0.741369 +0.833 0.75 0.745082 0.741375 +0.8331 0.75 0.745126 0.741381 +0.8332 0.75 0.74517 0.741389 +0.8333 0.75 0.745214 0.741397 +0.8334 0.75 0.745258 0.741407 +0.8335 0.75 0.745302 0.741417 +0.8336 0.75 0.745346 0.741429 +0.8337 0.75 0.74539 0.741442 +0.8338 0.75 0.745435 0.741455 +0.8339 0.75 0.745479 0.74147 +0.834 0.75 0.745523 0.741486 +0.8341 0.75 0.745567 0.741503 +0.8342 0.75 0.745611 0.741521 +0.8343 0.75 0.745655 0.74154 +0.8344 0.75 0.745699 0.741559 +0.8345 0.75 0.745744 0.74158 +0.8346 0.75 0.745788 0.741602 +0.8347 0.75 0.745832 0.741625 +0.8348 0.75 0.745876 0.741649 +0.8349 0.75 0.74592 0.741674 +0.835 0.75 0.745964 0.7417 +0.8351 0.75 0.746009 0.741727 +0.8352 0.75 0.746053 0.741755 +0.8353 0.75 0.746097 0.741784 +0.8354 0.75 0.746141 0.741814 +0.8355 0.75 0.746186 0.741845 +0.8356 0.75 0.74623 0.741877 +0.8357 0.75 0.746274 0.74191 +0.8358 0.75 0.746318 0.741944 +0.8359 0.75 0.746362 0.741979 +0.836 0.75 0.746407 0.742014 +0.8361 0.75 0.746451 0.742051 +0.8362 0.75 0.746495 0.742089 +0.8363 0.75 0.746539 0.742128 +0.8364 0.75 0.746584 0.742167 +0.8365 0.75 0.746628 0.742208 +0.8366 0.75 0.746672 0.74225 +0.8367 0.75 0.746716 0.742292 +0.8368 0.75 0.746761 0.742336 +0.8369 0.75 0.746805 0.74238 +0.837 0.75 0.746849 0.742425 +0.8371 0.75 0.746893 0.742471 +0.8372 0.75 0.746937 0.742519 +0.8373 0.75 0.746982 0.742567 +0.8374 0.75 0.747026 0.742616 +0.8375 0.75 0.74707 0.742665 +0.8376 0.75 0.747114 0.742716 +0.8377 0.75 0.747159 0.742768 +0.8378 0.75 0.747203 0.74282 +0.8379 0.75 0.747247 0.742874 +0.838 0.75 0.747291 0.742928 +0.8381 0.75 0.747335 0.742983 +0.8382 0.75 0.74738 0.743039 +0.8383 0.75 0.747424 0.743096 +0.8384 0.75 0.747468 0.743153 +0.8385 0.75 0.747512 0.743212 +0.8386 0.75 0.747556 0.743271 +0.8387 0.75 0.747601 0.743331 +0.8388 0.75 0.747645 0.743392 +0.8389 0.75 0.747689 0.743454 +0.839 0.75 0.747733 0.743516 +0.8391 0.75 0.747777 0.74358 +0.8392 0.75 0.747821 0.743644 +0.8393 0.75 0.747865 0.743709 +0.8394 0.75 0.74791 0.743774 +0.8395 0.75 0.747954 0.743841 +0.8396 0.75 0.747998 0.743908 +0.8397 0.75 0.748042 0.743975 +0.8398 0.75 0.748086 0.744044 +0.8399 0.75 0.74813 0.744113 +0.84 0.75 0.748174 0.744183 +0.8401 0.75 0.748218 0.744254 +0.8402 0.75 0.748262 0.744326 +0.8403 0.75 0.748306 0.744398 +0.8404 0.75 0.74835 0.74447 +0.8405 0.75 0.748394 0.744544 +0.8406 0.75 0.748438 0.744618 +0.8407 0.75 0.748482 0.744693 +0.8408 0.75 0.748526 0.744768 +0.8409 0.75 0.74857 0.744844 +0.841 0.75 0.748614 0.744921 +0.8411 0.75 0.748658 0.744998 +0.8412 0.75 0.748702 0.745076 +0.8413 0.75 0.748746 0.745155 +0.8414 0.75 0.74879 0.745234 +0.8415 0.75 0.748834 0.745313 +0.8416 0.75 0.748878 0.745394 +0.8417 0.75 0.748922 0.745474 +0.8418 0.75 0.748966 0.745556 +0.8419 0.75 0.749009 0.745638 +0.842 0.75 0.749053 0.74572 +0.8421 0.75 0.749097 0.745803 +0.8422 0.75 0.749141 0.745886 +0.8423 0.75 0.749184 0.74597 +0.8424 0.75 0.749228 0.746055 +0.8425 0.75 0.749272 0.746139 +0.8426 0.75 0.749316 0.746225 +0.8427 0.75 0.749359 0.746311 +0.8428 0.75 0.749403 0.746397 +0.8429 0.75 0.749447 0.746483 +0.843 0.75 0.74949 0.746571 +0.8431 0.75 0.749534 0.746658 +0.8432 0.75 0.749578 0.746746 +0.8433 0.75 0.749621 0.746834 +0.8434 0.75 0.749665 0.746923 +0.8435 0.75 0.749708 0.747012 +0.8436 0.75 0.749752 0.747101 +0.8437 0.75 0.749795 0.747191 +0.8438 0.75 0.749839 0.747281 +0.8439 0.75 0.749882 0.747371 +0.844 0.75 0.749926 0.747462 +0.8441 0.75 0.749969 0.747553 +0.8442 0.75 0.750012 0.747644 +0.8443 0.75 0.750056 0.747736 +0.8444 0.75 0.750099 0.747828 +0.8445 0.75 0.750142 0.74792 +0.8446 0.75 0.750186 0.748012 +0.8447 0.75 0.750229 0.748105 +0.8448 0.75 0.750272 0.748197 +0.8449 0.75 0.750316 0.74829 +0.845 0.75 0.750359 0.748383 +0.8451 0.75 0.750402 0.748477 +0.8452 0.75 0.750445 0.74857 +0.8453 0.75 0.750488 0.748664 +0.8454 0.75 0.750531 0.748758 +0.8455 0.75 0.750574 0.748852 +0.8456 0.75 0.750617 0.748946 +0.8457 0.75 0.75066 0.74904 +0.8458 0.75 0.750703 0.749134 +0.8459 0.75 0.750746 0.749228 +0.846 0.75 0.750789 0.749323 +0.8461 0.75 0.750832 0.749417 +0.8462 0.75 0.750875 0.749512 +0.8463 0.75 0.750918 0.749606 +0.8464 0.75 0.750961 0.749701 +0.8465 0.75 0.751003 0.749795 +0.8466 0.75 0.751046 0.74989 +0.8467 0.75 0.751089 0.749985 +0.8468 0.75 0.751132 0.750079 +0.8469 0.75 0.751174 0.750174 +0.847 0.75 0.751217 0.750268 +0.8471 0.75 0.75126 0.750363 +0.8472 0.75 0.751302 0.750457 +0.8473 0.75 0.751345 0.750551 +0.8474 0.75 0.751387 0.750645 +0.8475 0.75 0.75143 0.750739 +0.8476 0.75 0.751472 0.750833 +0.8477 0.75 0.751515 0.750927 +0.8478 0.75 0.751557 0.751021 +0.8479 0.75 0.751599 0.751114 +0.848 0.75 0.751642 0.751208 +0.8481 0.75 0.751684 0.751301 +0.8482 0.75 0.751726 0.751394 +0.8483 0.75 0.751768 0.751486 +0.8484 0.75 0.75181 0.751579 +0.8485 0.75 0.751853 0.751671 +0.8486 0.75 0.751895 0.751763 +0.8487 0.75 0.751937 0.751855 +0.8488 0.75 0.751979 0.751946 +0.8489 0.75 0.752021 0.752038 +0.849 0.75 0.752063 0.752129 +0.8491 0.75 0.752105 0.752219 +0.8492 0.75 0.752146 0.75231 +0.8493 0.75 0.752188 0.7524 +0.8494 0.75 0.75223 0.752489 +0.8495 0.75 0.752272 0.752579 +0.8496 0.75 0.752314 0.752668 +0.8497 0.75 0.752355 0.752756 +0.8498 0.75 0.752397 0.752844 +0.8499 0.75 0.752439 0.752932 +0.85 0.75 0.75248 0.753019 +0.8501 0.75 0.752522 0.753106 +0.8502 0.75 0.752563 0.753193 +0.8503 0.75 0.752605 0.753279 +0.8504 0.75 0.752646 0.753365 +0.8505 0.75 0.752687 0.75345 +0.8506 0.75 0.752729 0.753534 +0.8507 0.75 0.75277 0.753619 +0.8508 0.75 0.752811 0.753702 +0.8509 0.75 0.752852 0.753786 +0.851 0.75 0.752893 0.753868 +0.8511 0.75 0.752935 0.75395 +0.8512 0.75 0.752976 0.754032 +0.8513 0.75 0.753017 0.754113 +0.8514 0.75 0.753058 0.754193 +0.8515 0.75 0.753098 0.754273 +0.8516 0.75 0.753139 0.754353 +0.8517 0.75 0.75318 0.754431 +0.8518 0.75 0.753221 0.754509 +0.8519 0.75 0.753262 0.754587 +0.852 0.75 0.753302 0.754664 +0.8521 0.75 0.753343 0.75474 +0.8522 0.75 0.753384 0.754815 +0.8523 0.75 0.753424 0.75489 +0.8524 0.75 0.753465 0.754964 +0.8525 0.75 0.753505 0.755038 +0.8526 0.75 0.753546 0.755111 +0.8527 0.75 0.753586 0.755183 +0.8528 0.75 0.753626 0.755254 +0.8529 0.75 0.753667 0.755325 +0.853 0.75 0.753707 0.755395 +0.8531 0.75 0.753747 0.755464 +0.8532 0.75 0.753787 0.755533 +0.8533 0.75 0.753827 0.7556 +0.8534 0.75 0.753867 0.755667 +0.8535 0.75 0.753907 0.755733 +0.8536 0.75 0.753947 0.755799 +0.8537 0.75 0.753987 0.755863 +0.8538 0.75 0.754027 0.755927 +0.8539 0.75 0.754067 0.75599 +0.854 0.75 0.754106 0.756052 +0.8541 0.75 0.754146 0.756114 +0.8542 0.75 0.754186 0.756174 +0.8543 0.75 0.754225 0.756234 +0.8544 0.75 0.754265 0.756292 +0.8545 0.75 0.754304 0.75635 +0.8546 0.75 0.754343 0.756407 +0.8547 0.75 0.754383 0.756464 +0.8548 0.75 0.754422 0.756519 +0.8549 0.75 0.754461 0.756573 +0.855 0.75 0.754501 0.756627 +0.8551 0.75 0.75454 0.756679 +0.8552 0.75 0.754579 0.756731 +0.8553 0.75 0.754618 0.756782 +0.8554 0.75 0.754657 0.756831 +0.8555 0.75 0.754696 0.75688 +0.8556 0.75 0.754734 0.756928 +0.8557 0.75 0.754773 0.756975 +0.8558 0.75 0.754812 0.757021 +0.8559 0.75 0.754851 0.757066 +0.856 0.75 0.754889 0.75711 +0.8561 0.75 0.754928 0.757153 +0.8562 0.75 0.754966 0.757195 +0.8563 0.75 0.755005 0.757236 +0.8564 0.75 0.755043 0.757276 +0.8565 0.75 0.755081 0.757315 +0.8566 0.75 0.75512 0.757353 +0.8567 0.75 0.755158 0.757391 +0.8568 0.75 0.755196 0.757427 +0.8569 0.75 0.755234 0.757462 +0.857 0.75 0.755272 0.757496 +0.8571 0.75 0.75531 0.757529 +0.8572 0.75 0.755348 0.75756 +0.8573 0.75 0.755386 0.757591 +0.8574 0.75 0.755424 0.757621 +0.8575 0.75 0.755461 0.75765 +0.8576 0.75 0.755499 0.757678 +0.8577 0.75 0.755537 0.757704 +0.8578 0.75 0.755574 0.75773 +0.8579 0.75 0.755612 0.757754 +0.858 0.75 0.755649 0.757778 +0.8581 0.75 0.755686 0.7578 +0.8582 0.75 0.755724 0.757821 +0.8583 0.75 0.755761 0.757841 +0.8584 0.75 0.755798 0.757861 +0.8585 0.75 0.755835 0.757879 +0.8586 0.75 0.755872 0.757895 +0.8587 0.75 0.755909 0.757911 +0.8588 0.75 0.755946 0.757926 +0.8589 0.75 0.755983 0.75794 +0.859 0.75 0.756019 0.757952 +0.8591 0.75 0.756056 0.757963 +0.8592 0.75 0.756093 0.757974 +0.8593 0.75 0.756129 0.757983 +0.8594 0.75 0.756166 0.757991 +0.8595 0.75 0.756202 0.757998 +0.8596 0.75 0.756238 0.758004 +0.8597 0.75 0.756275 0.758009 +0.8598 0.75 0.756311 0.758012 +0.8599 0.75 0.756347 0.758015 +0.86 0.75 0.756383 0.758016 +0.8601 0.75 0.756419 0.758016 +0.8602 0.75 0.756455 0.758015 +0.8603 0.75 0.756491 0.758013 +0.8604 0.75 0.756527 0.75801 +0.8605 0.75 0.756562 0.758006 +0.8606 0.75 0.756598 0.758001 +0.8607 0.75 0.756634 0.757994 +0.8608 0.75 0.756669 0.757987 +0.8609 0.75 0.756704 0.757978 +0.861 0.75 0.75674 0.757968 +0.8611 0.75 0.756775 0.757957 +0.8612 0.75 0.75681 0.757945 +0.8613 0.75 0.756845 0.757932 +0.8614 0.75 0.756881 0.757918 +0.8615 0.75 0.756916 0.757902 +0.8616 0.75 0.75695 0.757886 +0.8617 0.75 0.756985 0.757868 +0.8618 0.75 0.75702 0.75785 +0.8619 0.75 0.757055 0.75783 +0.862 0.75 0.757089 0.757809 +0.8621 0.75 0.757124 0.757787 +0.8622 0.75 0.757158 0.757764 +0.8623 0.75 0.757193 0.75774 +0.8624 0.75 0.757227 0.757714 +0.8625 0.75 0.757261 0.757688 +0.8626 0.75 0.757296 0.757661 +0.8627 0.75 0.75733 0.757632 +0.8628 0.75 0.757364 0.757602 +0.8629 0.75 0.757398 0.757572 +0.863 0.75 0.757431 0.75754 +0.8631 0.75 0.757465 0.757507 +0.8632 0.75 0.757499 0.757473 +0.8633 0.75 0.757533 0.757438 +0.8634 0.75 0.757566 0.757402 +0.8635 0.75 0.7576 0.757365 +0.8636 0.75 0.757633 0.757327 +0.8637 0.75 0.757666 0.757288 +0.8638 0.75 0.7577 0.757248 +0.8639 0.75 0.757733 0.757207 +0.864 0.75 0.757766 0.757165 +0.8641 0.75 0.757799 0.757121 +0.8642 0.75 0.757832 0.757077 +0.8643 0.75 0.757864 0.757032 +0.8644 0.75 0.757897 0.756986 +0.8645 0.75 0.75793 0.756939 +0.8646 0.75 0.757962 0.75689 +0.8647 0.75 0.757995 0.756841 +0.8648 0.75 0.758027 0.756791 +0.8649 0.75 0.75806 0.75674 +0.865 0.75 0.758092 0.756688 +0.8651 0.75 0.758124 0.756635 +0.8652 0.75 0.758156 0.756581 +0.8653 0.75 0.758188 0.756526 +0.8654 0.75 0.75822 0.75647 +0.8655 0.75 0.758252 0.756414 +0.8656 0.75 0.758284 0.756356 +0.8657 0.75 0.758315 0.756297 +0.8658 0.75 0.758347 0.756238 +0.8659 0.75 0.758379 0.756177 +0.866 0.75 0.75841 0.756116 +0.8661 0.75 0.758441 0.756054 +0.8662 0.75 0.758472 0.755991 +0.8663 0.75 0.758504 0.755927 +0.8664 0.75 0.758535 0.755863 +0.8665 0.75 0.758566 0.755797 +0.8666 0.75 0.758597 0.755731 +0.8667 0.75 0.758627 0.755664 +0.8668 0.75 0.758658 0.755596 +0.8669 0.75 0.758689 0.755527 +0.867 0.75 0.758719 0.755457 +0.8671 0.75 0.75875 0.755387 +0.8672 0.75 0.75878 0.755316 +0.8673 0.75 0.75881 0.755244 +0.8674 0.75 0.758841 0.755171 +0.8675 0.75 0.758871 0.755098 +0.8676 0.75 0.758901 0.755024 +0.8677 0.75 0.758931 0.754949 +0.8678 0.75 0.75896 0.754873 +0.8679 0.75 0.75899 0.754797 +0.868 0.75 0.75902 0.75472 +0.8681 0.75 0.759049 0.754643 +0.8682 0.75 0.759079 0.754564 +0.8683 0.75 0.759108 0.754486 +0.8684 0.75 0.759138 0.754406 +0.8685 0.75 0.759167 0.754326 +0.8686 0.75 0.759196 0.754245 +0.8687 0.75 0.759225 0.754164 +0.8688 0.75 0.759254 0.754082 +0.8689 0.75 0.759283 0.753999 +0.869 0.75 0.759311 0.753916 +0.8691 0.75 0.75934 0.753832 +0.8692 0.75 0.759369 0.753748 +0.8693 0.75 0.759397 0.753663 +0.8694 0.75 0.759425 0.753577 +0.8695 0.75 0.759454 0.753492 +0.8696 0.75 0.759482 0.753405 +0.8697 0.75 0.75951 0.753318 +0.8698 0.75 0.759538 0.753231 +0.8699 0.75 0.759566 0.753143 +0.87 0.75 0.759594 0.753055 +0.8701 0.75 0.759621 0.752966 +0.8702 0.75 0.759649 0.752877 +0.8703 0.75 0.759676 0.752788 +0.8704 0.75 0.759704 0.752698 +0.8705 0.75 0.759731 0.752607 +0.8706 0.75 0.759758 0.752517 +0.8707 0.75 0.759785 0.752426 +0.8708 0.75 0.759812 0.752334 +0.8709 0.75 0.759839 0.752243 +0.871 0.75 0.759866 0.752151 +0.8711 0.75 0.759893 0.752058 +0.8712 0.75 0.75992 0.751966 +0.8713 0.75 0.759946 0.751873 +0.8714 0.75 0.759972 0.751779 +0.8715 0.75 0.759999 0.751686 +0.8716 0.75 0.760025 0.751592 +0.8717 0.75 0.760051 0.751499 +0.8718 0.75 0.760077 0.751404 +0.8719 0.75 0.760103 0.75131 +0.872 0.75 0.760129 0.751216 +0.8721 0.75 0.760155 0.751121 +0.8722 0.75 0.76018 0.751026 +0.8723 0.75 0.760206 0.750931 +0.8724 0.75 0.760231 0.750836 +0.8725 0.75 0.760257 0.750741 +0.8726 0.75 0.760282 0.750646 +0.8727 0.75 0.760307 0.750551 +0.8728 0.75 0.760332 0.750455 +0.8729 0.75 0.760357 0.75036 +0.873 0.75 0.760382 0.750264 +0.8731 0.75 0.760407 0.750169 +0.8732 0.75 0.760431 0.750073 +0.8733 0.75 0.760456 0.749978 +0.8734 0.75 0.76048 0.749882 +0.8735 0.75 0.760504 0.749787 +0.8736 0.75 0.760529 0.749691 +0.8737 0.75 0.760553 0.749596 +0.8738 0.75 0.760577 0.749501 +0.8739 0.75 0.760601 0.749405 +0.874 0.75 0.760624 0.74931 +0.8741 0.75 0.760648 0.749215 +0.8742 0.75 0.760672 0.749121 +0.8743 0.75 0.760695 0.749026 +0.8744 0.75 0.760719 0.748931 +0.8745 0.75 0.760742 0.748837 +0.8746 0.75 0.760765 0.748743 +0.8747 0.75 0.760788 0.748649 +0.8748 0.75 0.760811 0.748555 +0.8749 0.75 0.760834 0.748462 +0.875 0.75 0.760857 0.748369 +0.8751 0.75 0.760879 0.748276 +0.8752 0.75 0.760902 0.748183 +0.8753 0.75 0.760924 0.748091 +0.8754 0.75 0.760946 0.747999 +0.8755 0.75 0.760969 0.747907 +0.8756 0.75 0.760991 0.747815 +0.8757 0.75 0.761013 0.747724 +0.8758 0.75 0.761035 0.747634 +0.8759 0.75 0.761056 0.747543 +0.876 0.75 0.761078 0.747453 +0.8761 0.75 0.761099 0.747364 +0.8762 0.75 0.761121 0.747275 +0.8763 0.75 0.761142 0.747186 +0.8764 0.75 0.761163 0.747098 +0.8765 0.75 0.761185 0.74701 +0.8766 0.75 0.761206 0.746923 +0.8767 0.75 0.761226 0.746836 +0.8768 0.75 0.761247 0.74675 +0.8769 0.75 0.761268 0.746664 +0.877 0.75 0.761288 0.746579 +0.8771 0.75 0.761309 0.746494 +0.8772 0.75 0.761329 0.74641 +0.8773 0.75 0.76135 0.746327 +0.8774 0.75 0.76137 0.746244 +0.8775 0.75 0.76139 0.746161 +0.8776 0.75 0.76141 0.74608 +0.8777 0.75 0.761429 0.745999 +0.8778 0.75 0.761449 0.745918 +0.8779 0.75 0.761469 0.745838 +0.878 0.75 0.761488 0.745759 +0.8781 0.75 0.761507 0.745681 +0.8782 0.75 0.761527 0.745603 +0.8783 0.75 0.761546 0.745526 +0.8784 0.75 0.761565 0.745449 +0.8785 0.75 0.761583 0.745374 +0.8786 0.75 0.761602 0.745299 +0.8787 0.75 0.761621 0.745225 +0.8788 0.75 0.761639 0.745151 +0.8789 0.75 0.761658 0.745079 +0.879 0.75 0.761676 0.745007 +0.8791 0.75 0.761694 0.744936 +0.8792 0.75 0.761712 0.744866 +0.8793 0.75 0.76173 0.744796 +0.8794 0.75 0.761748 0.744728 +0.8795 0.75 0.761766 0.74466 +0.8796 0.75 0.761784 0.744593 +0.8797 0.75 0.761801 0.744527 +0.8798 0.75 0.761818 0.744462 +0.8799 0.75 0.761836 0.744398 +0.88 0.75 0.761853 0.744334 +0.8801 0.75 0.76187 0.744272 +0.8802 0.75 0.761887 0.744211 +0.8803 0.75 0.761904 0.74415 +0.8804 0.75 0.76192 0.74409 +0.8805 0.75 0.761937 0.744032 +0.8806 0.75 0.761953 0.743974 +0.8807 0.75 0.76197 0.743917 +0.8808 0.75 0.761986 0.743861 +0.8809 0.75 0.762002 0.743807 +0.881 0.75 0.762018 0.743753 +0.8811 0.75 0.762034 0.7437 +0.8812 0.75 0.76205 0.743648 +0.8813 0.75 0.762065 0.743598 +0.8814 0.75 0.762081 0.743548 +0.8815 0.75 0.762096 0.743499 +0.8816 0.75 0.762111 0.743452 +0.8817 0.75 0.762126 0.743405 +0.8818 0.75 0.762142 0.74336 +0.8819 0.75 0.762156 0.743315 +0.882 0.75 0.762171 0.743272 +0.8821 0.75 0.762186 0.74323 +0.8822 0.75 0.7622 0.743189 +0.8823 0.75 0.762215 0.743149 +0.8824 0.75 0.762229 0.74311 +0.8825 0.75 0.762243 0.743072 +0.8826 0.75 0.762257 0.743035 +0.8827 0.75 0.762271 0.743 +0.8828 0.75 0.762285 0.742965 +0.8829 0.75 0.762299 0.742932 +0.883 0.75 0.762312 0.7429 +0.8831 0.75 0.762326 0.742869 +0.8832 0.75 0.762339 0.742839 +0.8833 0.75 0.762353 0.742811 +0.8834 0.75 0.762366 0.742784 +0.8835 0.75 0.762379 0.742757 +0.8836 0.75 0.762391 0.742732 +0.8837 0.75 0.762404 0.742708 +0.8838 0.75 0.762417 0.742686 +0.8839 0.75 0.762429 0.742664 +0.884 0.75 0.762442 0.742644 +0.8841 0.75 0.762454 0.742625 +0.8842 0.75 0.762466 0.742607 +0.8843 0.75 0.762478 0.742591 +0.8844 0.75 0.76249 0.742575 +0.8845 0.75 0.762502 0.742561 +0.8846 0.75 0.762513 0.742548 +0.8847 0.75 0.762525 0.742536 +0.8848 0.75 0.762536 0.742526 +0.8849 0.75 0.762547 0.742516 +0.885 0.75 0.762558 0.742508 +0.8851 0.75 0.762569 0.742502 +0.8852 0.75 0.76258 0.742496 +0.8853 0.75 0.762591 0.742492 +0.8854 0.75 0.762602 0.742489 +0.8855 0.75 0.762612 0.742487 +0.8856 0.75 0.762623 0.742486 +0.8857 0.75 0.762633 0.742487 +0.8858 0.75 0.762643 0.742489 +0.8859 0.75 0.762653 0.742492 +0.886 0.75 0.762663 0.742497 +0.8861 0.75 0.762673 0.742502 +0.8862 0.75 0.762682 0.742509 +0.8863 0.75 0.762692 0.742517 +0.8864 0.75 0.762701 0.742527 +0.8865 0.75 0.76271 0.742537 +0.8866 0.75 0.76272 0.742549 +0.8867 0.75 0.762729 0.742562 +0.8868 0.75 0.762737 0.742577 +0.8869 0.75 0.762746 0.742592 +0.887 0.75 0.762755 0.742609 +0.8871 0.75 0.762763 0.742627 +0.8872 0.75 0.762772 0.742647 +0.8873 0.75 0.76278 0.742667 +0.8874 0.75 0.762788 0.742689 +0.8875 0.75 0.762796 0.742712 +0.8876 0.75 0.762804 0.742736 +0.8877 0.75 0.762812 0.742762 +0.8878 0.75 0.762819 0.742788 +0.8879 0.75 0.762827 0.742816 +0.888 0.75 0.762834 0.742845 +0.8881 0.75 0.762841 0.742876 +0.8882 0.75 0.762848 0.742907 +0.8883 0.75 0.762855 0.74294 +0.8884 0.75 0.762862 0.742974 +0.8885 0.75 0.762869 0.743009 +0.8886 0.75 0.762875 0.743045 +0.8887 0.75 0.762882 0.743082 +0.8888 0.75 0.762888 0.743121 +0.8889 0.75 0.762894 0.743161 +0.889 0.75 0.7629 0.743202 +0.8891 0.75 0.762906 0.743244 +0.8892 0.75 0.762912 0.743287 +0.8893 0.75 0.762918 0.743332 +0.8894 0.75 0.762923 0.743377 +0.8895 0.75 0.762929 0.743424 +0.8896 0.75 0.762934 0.743471 +0.8897 0.75 0.762939 0.74352 +0.8898 0.75 0.762944 0.74357 +0.8899 0.75 0.762949 0.743621 +0.89 0.75 0.762954 0.743674 +0.8901 0.75 0.762958 0.743727 +0.8902 0.75 0.762963 0.743781 +0.8903 0.75 0.762967 0.743836 +0.8904 0.75 0.762972 0.743893 +0.8905 0.75 0.762976 0.74395 +0.8906 0.75 0.76298 0.744009 +0.8907 0.75 0.762984 0.744068 +0.8908 0.75 0.762987 0.744129 +0.8909 0.75 0.762991 0.744191 +0.891 0.75 0.762994 0.744253 +0.8911 0.75 0.762998 0.744317 +0.8912 0.75 0.763001 0.744381 +0.8913 0.75 0.763004 0.744447 +0.8914 0.75 0.763007 0.744513 +0.8915 0.75 0.76301 0.744581 +0.8916 0.75 0.763012 0.744649 +0.8917 0.75 0.763015 0.744718 +0.8918 0.75 0.763017 0.744789 +0.8919 0.75 0.76302 0.74486 +0.892 0.75 0.763022 0.744932 +0.8921 0.75 0.763024 0.745004 +0.8922 0.75 0.763026 0.745078 +0.8923 0.75 0.763027 0.745153 +0.8924 0.75 0.763029 0.745228 +0.8925 0.75 0.76303 0.745304 +0.8926 0.75 0.763032 0.745381 +0.8927 0.75 0.763033 0.745459 +0.8928 0.75 0.763034 0.745538 +0.8929 0.75 0.763035 0.745617 +0.893 0.75 0.763036 0.745698 +0.8931 0.75 0.763037 0.745779 +0.8932 0.75 0.763037 0.74586 +0.8933 0.75 0.763038 0.745943 +0.8934 0.75 0.763038 0.746026 +0.8935 0.75 0.763038 0.74611 +0.8936 0.75 0.763038 0.746194 +0.8937 0.75 0.763038 0.746279 +0.8938 0.75 0.763038 0.746365 +0.8939 0.75 0.763037 0.746452 +0.894 0.75 0.763037 0.746539 +0.8941 0.75 0.763036 0.746626 +0.8942 0.75 0.763035 0.746715 +0.8943 0.75 0.763035 0.746804 +0.8944 0.75 0.763034 0.746893 +0.8945 0.75 0.763032 0.746983 +0.8946 0.75 0.763031 0.747073 +0.8947 0.75 0.76303 0.747164 +0.8948 0.75 0.763028 0.747256 +0.8949 0.75 0.763026 0.747348 +0.895 0.75 0.763025 0.74744 +0.8951 0.75 0.763023 0.747533 +0.8952 0.75 0.763021 0.747627 +0.8953 0.75 0.763018 0.74772 +0.8954 0.75 0.763016 0.747815 +0.8955 0.75 0.763013 0.747909 +0.8956 0.75 0.763011 0.748004 +0.8957 0.75 0.763008 0.748099 +0.8958 0.75 0.763005 0.748195 +0.8959 0.75 0.763002 0.748291 +0.896 0.75 0.762999 0.748387 +0.8961 0.75 0.762996 0.748484 +0.8962 0.75 0.762992 0.748581 +0.8963 0.75 0.762989 0.748678 +0.8964 0.75 0.762985 0.748775 +0.8965 0.75 0.762981 0.748872 +0.8966 0.75 0.762977 0.74897 +0.8967 0.75 0.762973 0.749068 +0.8968 0.75 0.762969 0.749166 +0.8969 0.75 0.762964 0.749264 +0.897 0.75 0.76296 0.749363 +0.8971 0.75 0.762955 0.749461 +0.8972 0.75 0.762951 0.749559 +0.8973 0.75 0.762946 0.749658 +0.8974 0.75 0.762941 0.749757 +0.8975 0.75 0.762935 0.749855 +0.8976 0.75 0.76293 0.749954 +0.8977 0.75 0.762925 0.750053 +0.8978 0.75 0.762919 0.750152 +0.8979 0.75 0.762913 0.75025 +0.898 0.75 0.762908 0.750349 +0.8981 0.75 0.762902 0.750447 +0.8982 0.75 0.762896 0.750546 +0.8983 0.75 0.762889 0.750644 +0.8984 0.75 0.762883 0.750743 +0.8985 0.75 0.762876 0.750841 +0.8986 0.75 0.76287 0.750939 +0.8987 0.75 0.762863 0.751036 +0.8988 0.75 0.762856 0.751134 +0.8989 0.75 0.762849 0.751231 +0.899 0.75 0.762842 0.751328 +0.8991 0.75 0.762835 0.751425 +0.8992 0.75 0.762827 0.751522 +0.8993 0.75 0.762819 0.751618 +0.8994 0.75 0.762812 0.751714 +0.8995 0.75 0.762804 0.75181 +0.8996 0.75 0.762796 0.751905 +0.8997 0.75 0.762788 0.752 +0.8998 0.75 0.76278 0.752095 +0.8999 0.75 0.762771 0.752189 +0.9 0.75 0.762763 0.752283 +0.9001 0.75 0.762754 0.752376 +0.9002 0.75 0.762745 0.752469 +0.9003 0.75 0.762736 0.752562 +0.9004 0.75 0.762727 0.752654 +0.9005 0.75 0.762718 0.752745 +0.9006 0.75 0.762709 0.752836 +0.9007 0.75 0.762699 0.752927 +0.9008 0.75 0.76269 0.753017 +0.9009 0.75 0.76268 0.753106 +0.901 0.75 0.76267 0.753195 +0.9011 0.75 0.76266 0.753283 +0.9012 0.75 0.76265 0.75337 +0.9013 0.75 0.76264 0.753457 +0.9014 0.75 0.762629 0.753544 +0.9015 0.75 0.762619 0.753629 +0.9016 0.75 0.762608 0.753714 +0.9017 0.75 0.762597 0.753798 +0.9018 0.75 0.762586 0.753882 +0.9019 0.75 0.762575 0.753964 +0.902 0.75 0.762564 0.754046 +0.9021 0.75 0.762553 0.754127 +0.9022 0.75 0.762541 0.754208 +0.9023 0.75 0.76253 0.754287 +0.9024 0.75 0.762518 0.754366 +0.9025 0.75 0.762506 0.754444 +0.9026 0.75 0.762494 0.754521 +0.9027 0.75 0.762482 0.754597 +0.9028 0.75 0.76247 0.754673 +0.9029 0.75 0.762457 0.754747 +0.903 0.75 0.762445 0.754821 +0.9031 0.75 0.762432 0.754893 +0.9032 0.75 0.762419 0.754965 +0.9033 0.75 0.762406 0.755036 +0.9034 0.75 0.762393 0.755105 +0.9035 0.75 0.76238 0.755174 +0.9036 0.75 0.762367 0.755242 +0.9037 0.75 0.762353 0.755309 +0.9038 0.75 0.76234 0.755374 +0.9039 0.75 0.762326 0.755439 +0.904 0.75 0.762312 0.755503 +0.9041 0.75 0.762298 0.755565 +0.9042 0.75 0.762284 0.755627 +0.9043 0.75 0.76227 0.755687 +0.9044 0.75 0.762256 0.755746 +0.9045 0.75 0.762241 0.755805 +0.9046 0.75 0.762226 0.755862 +0.9047 0.75 0.762212 0.755918 +0.9048 0.75 0.762197 0.755972 +0.9049 0.75 0.762182 0.756026 +0.905 0.75 0.762167 0.756078 +0.9051 0.75 0.762151 0.75613 +0.9052 0.75 0.762136 0.75618 +0.9053 0.75 0.76212 0.756228 +0.9054 0.75 0.762105 0.756276 +0.9055 0.75 0.762089 0.756322 +0.9056 0.75 0.762073 0.756367 +0.9057 0.75 0.762057 0.756411 +0.9058 0.75 0.76204 0.756454 +0.9059 0.75 0.762024 0.756495 +0.906 0.75 0.762008 0.756535 +0.9061 0.75 0.761991 0.756574 +0.9062 0.75 0.761974 0.756612 +0.9063 0.75 0.761957 0.756648 +0.9064 0.75 0.76194 0.756683 +0.9065 0.75 0.761923 0.756716 +0.9066 0.75 0.761906 0.756748 +0.9067 0.75 0.761889 0.756779 +0.9068 0.75 0.761871 0.756809 +0.9069 0.75 0.761853 0.756837 +0.907 0.75 0.761836 0.756864 +0.9071 0.75 0.761818 0.756889 +0.9072 0.75 0.7618 0.756913 +0.9073 0.75 0.761781 0.756936 +0.9074 0.75 0.761763 0.756957 +0.9075 0.75 0.761745 0.756977 +0.9076 0.75 0.761726 0.756996 +0.9077 0.75 0.761707 0.757013 +0.9078 0.75 0.761689 0.757028 +0.9079 0.75 0.76167 0.757043 +0.908 0.75 0.761651 0.757056 +0.9081 0.75 0.761631 0.757067 +0.9082 0.75 0.761612 0.757077 +0.9083 0.75 0.761593 0.757086 +0.9084 0.75 0.761573 0.757093 +0.9085 0.75 0.761553 0.757099 +0.9086 0.75 0.761534 0.757103 +0.9087 0.75 0.761514 0.757106 +0.9088 0.75 0.761493 0.757107 +0.9089 0.75 0.761473 0.757107 +0.909 0.75 0.761453 0.757106 +0.9091 0.75 0.761432 0.757103 +0.9092 0.75 0.761412 0.757099 +0.9093 0.75 0.761391 0.757093 +0.9094 0.75 0.76137 0.757086 +0.9095 0.75 0.761349 0.757077 +0.9096 0.75 0.761328 0.757067 +0.9097 0.75 0.761307 0.757055 +0.9098 0.75 0.761285 0.757042 +0.9099 0.75 0.761264 0.757028 +0.91 0.75 0.761242 0.757012 +0.9101 0.75 0.761221 0.756995 +0.9102 0.75 0.761199 0.756976 +0.9103 0.75 0.761177 0.756956 +0.9104 0.75 0.761155 0.756934 +0.9105 0.75 0.761132 0.756911 +0.9106 0.75 0.76111 0.756887 +0.9107 0.75 0.761087 0.756861 +0.9108 0.75 0.761065 0.756833 +0.9109 0.75 0.761042 0.756805 +0.911 0.75 0.761019 0.756775 +0.9111 0.75 0.760996 0.756743 +0.9112 0.75 0.760973 0.75671 +0.9113 0.75 0.76095 0.756676 +0.9114 0.75 0.760927 0.75664 +0.9115 0.75 0.760903 0.756603 +0.9116 0.75 0.760879 0.756564 +0.9117 0.75 0.760856 0.756524 +0.9118 0.75 0.760832 0.756483 +0.9119 0.75 0.760808 0.756441 +0.912 0.75 0.760784 0.756397 +0.9121 0.75 0.760759 0.756351 +0.9122 0.75 0.760735 0.756305 +0.9123 0.75 0.760711 0.756257 +0.9124 0.75 0.760686 0.756208 +0.9125 0.75 0.760661 0.756157 +0.9126 0.75 0.760637 0.756105 +0.9127 0.75 0.760612 0.756052 +0.9128 0.75 0.760586 0.755998 +0.9129 0.75 0.760561 0.755942 +0.913 0.75 0.760536 0.755885 +0.9131 0.75 0.760511 0.755827 +0.9132 0.75 0.760485 0.755767 +0.9133 0.75 0.760459 0.755707 +0.9134 0.75 0.760433 0.755645 +0.9135 0.75 0.760408 0.755582 +0.9136 0.75 0.760382 0.755518 +0.9137 0.75 0.760355 0.755452 +0.9138 0.75 0.760329 0.755386 +0.9139 0.75 0.760303 0.755318 +0.914 0.75 0.760276 0.755249 +0.9141 0.75 0.760249 0.755179 +0.9142 0.75 0.760223 0.755108 +0.9143 0.75 0.760196 0.755035 +0.9144 0.75 0.760169 0.754962 +0.9145 0.75 0.760142 0.754888 +0.9146 0.75 0.760115 0.754812 +0.9147 0.75 0.760087 0.754736 +0.9148 0.75 0.76006 0.754658 +0.9149 0.75 0.760032 0.75458 +0.915 0.75 0.760004 0.7545 +0.9151 0.75 0.759977 0.75442 +0.9152 0.75 0.759949 0.754338 +0.9153 0.75 0.759921 0.754256 +0.9154 0.75 0.759893 0.754173 +0.9155 0.75 0.759864 0.754088 +0.9156 0.75 0.759836 0.754003 +0.9157 0.75 0.759807 0.753917 +0.9158 0.75 0.759779 0.75383 +0.9159 0.75 0.75975 0.753742 +0.916 0.75 0.759721 0.753654 +0.9161 0.75 0.759692 0.753565 +0.9162 0.75 0.759663 0.753474 +0.9163 0.75 0.759634 0.753384 +0.9164 0.75 0.759605 0.753292 +0.9165 0.75 0.759575 0.7532 +0.9166 0.75 0.759546 0.753106 +0.9167 0.75 0.759516 0.753013 +0.9168 0.75 0.759486 0.752918 +0.9169 0.75 0.759456 0.752823 +0.917 0.75 0.759426 0.752727 +0.9171 0.75 0.759396 0.752631 +0.9172 0.75 0.759366 0.752534 +0.9173 0.75 0.759336 0.752437 +0.9174 0.75 0.759305 0.752338 +0.9175 0.75 0.759275 0.75224 +0.9176 0.75 0.759244 0.752141 +0.9177 0.75 0.759213 0.752041 +0.9178 0.75 0.759183 0.751941 +0.9179 0.75 0.759152 0.751841 +0.918 0.75 0.75912 0.75174 +0.9181 0.75 0.759089 0.751639 +0.9182 0.75 0.759058 0.751537 +0.9183 0.75 0.759027 0.751435 +0.9184 0.75 0.758995 0.751332 +0.9185 0.75 0.758963 0.75123 +0.9186 0.75 0.758932 0.751127 +0.9187 0.75 0.7589 0.751024 +0.9188 0.75 0.758868 0.75092 +0.9189 0.75 0.758836 0.750816 +0.919 0.75 0.758804 0.750713 +0.9191 0.75 0.758771 0.750609 +0.9192 0.75 0.758739 0.750504 +0.9193 0.75 0.758707 0.7504 +0.9194 0.75 0.758674 0.750296 +0.9195 0.75 0.758641 0.750191 +0.9196 0.75 0.758608 0.750087 +0.9197 0.75 0.758576 0.749982 +0.9198 0.75 0.758543 0.749877 +0.9199 0.75 0.758509 0.749773 +0.92 0.75 0.758476 0.749668 +0.9201 0.75 0.758443 0.749564 +0.9202 0.75 0.75841 0.749459 +0.9203 0.75 0.758376 0.749355 +0.9204 0.75 0.758342 0.749251 +0.9205 0.75 0.758309 0.749147 +0.9206 0.75 0.758275 0.749043 +0.9207 0.75 0.758241 0.74894 +0.9208 0.75 0.758207 0.748836 +0.9209 0.75 0.758173 0.748733 +0.921 0.75 0.758139 0.74863 +0.9211 0.75 0.758104 0.748528 +0.9212 0.75 0.75807 0.748425 +0.9213 0.75 0.758035 0.748324 +0.9214 0.75 0.758001 0.748222 +0.9215 0.75 0.757966 0.748121 +0.9216 0.75 0.757931 0.74802 +0.9217 0.75 0.757896 0.74792 +0.9218 0.75 0.757861 0.74782 +0.9219 0.75 0.757826 0.747721 +0.922 0.75 0.757791 0.747623 +0.9221 0.75 0.757755 0.747524 +0.9222 0.75 0.75772 0.747427 +0.9223 0.75 0.757685 0.74733 +0.9224 0.75 0.757649 0.747233 +0.9225 0.75 0.757613 0.747138 +0.9226 0.75 0.757577 0.747042 +0.9227 0.75 0.757542 0.746948 +0.9228 0.75 0.757506 0.746854 +0.9229 0.75 0.75747 0.746761 +0.923 0.75 0.757433 0.746669 +0.9231 0.75 0.757397 0.746578 +0.9232 0.75 0.757361 0.746487 +0.9233 0.75 0.757324 0.746397 +0.9234 0.75 0.757288 0.746308 +0.9235 0.75 0.757251 0.74622 +0.9236 0.75 0.757214 0.746133 +0.9237 0.75 0.757178 0.746046 +0.9238 0.75 0.757141 0.745961 +0.9239 0.75 0.757104 0.745876 +0.924 0.75 0.757067 0.745793 +0.9241 0.75 0.757029 0.74571 +0.9242 0.75 0.756992 0.745629 +0.9243 0.75 0.756955 0.745548 +0.9244 0.75 0.756917 0.745469 +0.9245 0.75 0.75688 0.745391 +0.9246 0.75 0.756842 0.745313 +0.9247 0.75 0.756805 0.745237 +0.9248 0.75 0.756767 0.745162 +0.9249 0.75 0.756729 0.745088 +0.925 0.75 0.756691 0.745016 +0.9251 0.75 0.756653 0.744944 +0.9252 0.75 0.756615 0.744874 +0.9253 0.75 0.756577 0.744805 +0.9254 0.75 0.756538 0.744737 +0.9255 0.75 0.7565 0.744671 +0.9256 0.75 0.756461 0.744606 +0.9257 0.75 0.756423 0.744542 +0.9258 0.75 0.756384 0.744479 +0.9259 0.75 0.756345 0.744418 +0.926 0.75 0.756307 0.744358 +0.9261 0.75 0.756268 0.7443 +0.9262 0.75 0.756229 0.744243 +0.9263 0.75 0.75619 0.744187 +0.9264 0.75 0.756151 0.744133 +0.9265 0.75 0.756111 0.74408 +0.9266 0.75 0.756072 0.744028 +0.9267 0.75 0.756033 0.743978 +0.9268 0.75 0.755993 0.74393 +0.9269 0.75 0.755954 0.743883 +0.927 0.75 0.755914 0.743838 +0.9271 0.75 0.755875 0.743794 +0.9272 0.75 0.755835 0.743751 +0.9273 0.75 0.755795 0.74371 +0.9274 0.75 0.755755 0.743671 +0.9275 0.75 0.755715 0.743633 +0.9276 0.75 0.755675 0.743597 +0.9277 0.75 0.755635 0.743563 +0.9278 0.75 0.755595 0.74353 +0.9279 0.75 0.755554 0.743499 +0.928 0.75 0.755514 0.743469 +0.9281 0.75 0.755474 0.743441 +0.9282 0.75 0.755433 0.743414 +0.9283 0.75 0.755392 0.74339 +0.9284 0.75 0.755352 0.743367 +0.9285 0.75 0.755311 0.743345 +0.9286 0.75 0.75527 0.743325 +0.9287 0.75 0.755229 0.743307 +0.9288 0.75 0.755189 0.743291 +0.9289 0.75 0.755148 0.743276 +0.929 0.75 0.755106 0.743263 +0.9291 0.75 0.755065 0.743252 +0.9292 0.75 0.755024 0.743243 +0.9293 0.75 0.754983 0.743235 +0.9294 0.75 0.754942 0.743229 +0.9295 0.75 0.7549 0.743225 +0.9296 0.75 0.754859 0.743222 +0.9297 0.75 0.754817 0.743221 +0.9298 0.75 0.754775 0.743222 +0.9299 0.75 0.754734 0.743225 +0.93 0.75 0.754692 0.743229 +0.9301 0.75 0.75465 0.743235 +0.9302 0.75 0.754608 0.743243 +0.9303 0.75 0.754567 0.743253 +0.9304 0.75 0.754525 0.743264 +0.9305 0.75 0.754482 0.743277 +0.9306 0.75 0.75444 0.743292 +0.9307 0.75 0.754398 0.743309 +0.9308 0.75 0.754356 0.743327 +0.9309 0.75 0.754314 0.743347 +0.931 0.75 0.754271 0.743369 +0.9311 0.75 0.754229 0.743393 +0.9312 0.75 0.754186 0.743418 +0.9313 0.75 0.754144 0.743445 +0.9314 0.75 0.754101 0.743474 +0.9315 0.75 0.754059 0.743505 +0.9316 0.75 0.754016 0.743537 +0.9317 0.75 0.753973 0.743571 +0.9318 0.75 0.75393 0.743606 +0.9319 0.75 0.753888 0.743644 +0.932 0.75 0.753845 0.743683 +0.9321 0.75 0.753802 0.743724 +0.9322 0.75 0.753759 0.743766 +0.9323 0.75 0.753716 0.74381 +0.9324 0.75 0.753672 0.743856 +0.9325 0.75 0.753629 0.743903 +0.9326 0.75 0.753586 0.743952 +0.9327 0.75 0.753543 0.744003 +0.9328 0.75 0.753499 0.744055 +0.9329 0.75 0.753456 0.744109 +0.933 0.75 0.753413 0.744165 +0.9331 0.75 0.753369 0.744222 +0.9332 0.75 0.753326 0.74428 +0.9333 0.75 0.753282 0.74434 +0.9334 0.75 0.753238 0.744402 +0.9335 0.75 0.753195 0.744465 +0.9336 0.75 0.753151 0.74453 +0.9337 0.75 0.753107 0.744596 +0.9338 0.75 0.753063 0.744664 +0.9339 0.75 0.75302 0.744733 +0.934 0.75 0.752976 0.744804 +0.9341 0.75 0.752932 0.744876 +0.9342 0.75 0.752888 0.74495 +0.9343 0.75 0.752844 0.745025 +0.9344 0.75 0.7528 0.745101 +0.9345 0.75 0.752756 0.745179 +0.9346 0.75 0.752711 0.745258 +0.9347 0.75 0.752667 0.745338 +0.9348 0.75 0.752623 0.74542 +0.9349 0.75 0.752579 0.745503 +0.935 0.75 0.752535 0.745587 +0.9351 0.75 0.75249 0.745672 +0.9352 0.75 0.752446 0.745759 +0.9353 0.75 0.752401 0.745847 +0.9354 0.75 0.752357 0.745936 +0.9355 0.75 0.752313 0.746026 +0.9356 0.75 0.752268 0.746117 +0.9357 0.75 0.752223 0.74621 +0.9358 0.75 0.752179 0.746303 +0.9359 0.75 0.752134 0.746398 +0.936 0.75 0.75209 0.746493 +0.9361 0.75 0.752045 0.74659 +0.9362 0.75 0.752 0.746688 +0.9363 0.75 0.751956 0.746786 +0.9364 0.75 0.751911 0.746886 +0.9365 0.75 0.751866 0.746986 +0.9366 0.75 0.751821 0.747087 +0.9367 0.75 0.751776 0.74719 +0.9368 0.75 0.751731 0.747293 +0.9369 0.75 0.751687 0.747396 +0.937 0.75 0.751642 0.747501 +0.9371 0.75 0.751597 0.747606 +0.9372 0.75 0.751552 0.747712 +0.9373 0.75 0.751507 0.747819 +0.9374 0.75 0.751462 0.747926 +0.9375 0.75 0.751417 0.748034 +0.9376 0.75 0.751372 0.748143 +0.9377 0.75 0.751326 0.748252 +0.9378 0.75 0.751281 0.748362 +0.9379 0.75 0.751236 0.748472 +0.938 0.75 0.751191 0.748583 +0.9381 0.75 0.751146 0.748694 +0.9382 0.75 0.751101 0.748805 +0.9383 0.75 0.751055 0.748917 +0.9384 0.75 0.75101 0.749029 +0.9385 0.75 0.750965 0.749142 +0.9386 0.75 0.75092 0.749255 +0.9387 0.75 0.750875 0.749368 +0.9388 0.75 0.750829 0.749481 +0.9389 0.75 0.750784 0.749595 +0.939 0.75 0.750739 0.749708 +0.9391 0.75 0.750693 0.749822 +0.9392 0.75 0.750648 0.749936 +0.9393 0.75 0.750603 0.75005 +0.9394 0.75 0.750557 0.750164 +0.9395 0.75 0.750512 0.750278 +0.9396 0.75 0.750467 0.750392 +0.9397 0.75 0.750421 0.750506 +0.9398 0.75 0.750376 0.750619 +0.9399 0.75 0.75033 0.750733 +0.94 0.75 0.750285 0.750846 +0.9401 0.75 0.75024 0.75096 +0.9402 0.75 0.750194 0.751073 +0.9403 0.75 0.750149 0.751185 +0.9404 0.75 0.750103 0.751298 +0.9405 0.75 0.750058 0.75141 +0.9406 0.75 0.750012 0.751521 +0.9407 0.75 0.749967 0.751632 +0.9408 0.75 0.749922 0.751743 +0.9409 0.75 0.749876 0.751853 +0.941 0.75 0.749831 0.751963 +0.9411 0.75 0.749785 0.752072 +0.9412 0.75 0.74974 0.752181 +0.9413 0.75 0.749694 0.752289 +0.9414 0.75 0.749649 0.752396 +0.9415 0.75 0.749604 0.752503 +0.9416 0.75 0.749558 0.752609 +0.9417 0.75 0.749513 0.752714 +0.9418 0.75 0.749467 0.752818 +0.9419 0.75 0.749422 0.752922 +0.942 0.75 0.749377 0.753024 +0.9421 0.75 0.749331 0.753126 +0.9422 0.75 0.749286 0.753227 +0.9423 0.75 0.749241 0.753327 +0.9424 0.75 0.749195 0.753426 +0.9425 0.75 0.74915 0.753524 +0.9426 0.75 0.749105 0.753621 +0.9427 0.75 0.749059 0.753716 +0.9428 0.75 0.749014 0.753811 +0.9429 0.75 0.748969 0.753904 +0.943 0.75 0.748923 0.753997 +0.9431 0.75 0.748878 0.754088 +0.9432 0.75 0.748833 0.754178 +0.9433 0.75 0.748788 0.754266 +0.9434 0.75 0.748743 0.754353 +0.9435 0.75 0.748697 0.754439 +0.9436 0.75 0.748652 0.754524 +0.9437 0.75 0.748607 0.754607 +0.9438 0.75 0.748562 0.754689 +0.9439 0.75 0.748517 0.754769 +0.944 0.75 0.748472 0.754848 +0.9441 0.75 0.748427 0.754925 +0.9442 0.75 0.748382 0.755001 +0.9443 0.75 0.748337 0.755075 +0.9444 0.75 0.748292 0.755148 +0.9445 0.75 0.748247 0.755219 +0.9446 0.75 0.748202 0.755288 +0.9447 0.75 0.748157 0.755356 +0.9448 0.75 0.748112 0.755422 +0.9449 0.75 0.748067 0.755486 +0.945 0.75 0.748022 0.755548 +0.9451 0.75 0.747978 0.755609 +0.9452 0.75 0.747933 0.755668 +0.9453 0.75 0.747888 0.755725 +0.9454 0.75 0.747844 0.755781 +0.9455 0.75 0.747799 0.755834 +0.9456 0.75 0.747754 0.755886 +0.9457 0.75 0.74771 0.755935 +0.9458 0.75 0.747665 0.755983 +0.9459 0.75 0.747621 0.756029 +0.946 0.75 0.747576 0.756073 +0.9461 0.75 0.747532 0.756115 +0.9462 0.75 0.747488 0.756155 +0.9463 0.75 0.747443 0.756192 +0.9464 0.75 0.747399 0.756228 +0.9465 0.75 0.747355 0.756262 +0.9466 0.75 0.74731 0.756294 +0.9467 0.75 0.747266 0.756323 +0.9468 0.75 0.747222 0.756351 +0.9469 0.75 0.747178 0.756376 +0.947 0.75 0.747134 0.7564 +0.9471 0.75 0.74709 0.756421 +0.9472 0.75 0.747046 0.75644 +0.9473 0.75 0.747002 0.756457 +0.9474 0.75 0.746958 0.756472 +0.9475 0.75 0.746915 0.756484 +0.9476 0.75 0.746871 0.756495 +0.9477 0.75 0.746827 0.756503 +0.9478 0.75 0.746784 0.756509 +0.9479 0.75 0.74674 0.756512 +0.948 0.75 0.746697 0.756514 +0.9481 0.75 0.746653 0.756513 +0.9482 0.75 0.74661 0.756511 +0.9483 0.75 0.746566 0.756505 +0.9484 0.75 0.746523 0.756498 +0.9485 0.75 0.74648 0.756488 +0.9486 0.75 0.746437 0.756477 +0.9487 0.75 0.746394 0.756463 +0.9488 0.75 0.746351 0.756446 +0.9489 0.75 0.746308 0.756428 +0.949 0.75 0.746265 0.756407 +0.9491 0.75 0.746222 0.756384 +0.9492 0.75 0.746179 0.756359 +0.9493 0.75 0.746136 0.756331 +0.9494 0.75 0.746094 0.756302 +0.9495 0.75 0.746051 0.75627 +0.9496 0.75 0.746009 0.756236 +0.9497 0.75 0.745966 0.756199 +0.9498 0.75 0.745924 0.756161 +0.9499 0.75 0.745882 0.75612 +0.95 0.75 0.745839 0.756077 +0.9501 0.75 0.745797 0.756032 +0.9502 0.75 0.745755 0.755985 +0.9503 0.75 0.745713 0.755935 +0.9504 0.75 0.745671 0.755884 +0.9505 0.75 0.745629 0.75583 +0.9506 0.75 0.745588 0.755774 +0.9507 0.75 0.745546 0.755717 +0.9508 0.75 0.745504 0.755657 +0.9509 0.75 0.745463 0.755595 +0.951 0.75 0.745421 0.755531 +0.9511 0.75 0.74538 0.755465 +0.9512 0.75 0.745339 0.755396 +0.9513 0.75 0.745297 0.755326 +0.9514 0.75 0.745256 0.755254 +0.9515 0.75 0.745215 0.75518 +0.9516 0.75 0.745174 0.755104 +0.9517 0.75 0.745134 0.755027 +0.9518 0.75 0.745093 0.754947 +0.9519 0.75 0.745052 0.754865 +0.952 0.75 0.745012 0.754782 +0.9521 0.75 0.744971 0.754697 +0.9522 0.75 0.744931 0.75461 +0.9523 0.75 0.74489 0.754521 +0.9524 0.75 0.74485 0.75443 +0.9525 0.75 0.74481 0.754338 +0.9526 0.75 0.74477 0.754244 +0.9527 0.75 0.74473 0.754149 +0.9528 0.75 0.74469 0.754052 +0.9529 0.75 0.744651 0.753953 +0.953 0.75 0.744611 0.753853 +0.9531 0.75 0.744571 0.753752 +0.9532 0.75 0.744532 0.753648 +0.9533 0.75 0.744493 0.753544 +0.9534 0.75 0.744454 0.753438 +0.9535 0.75 0.744414 0.75333 +0.9536 0.75 0.744375 0.753222 +0.9537 0.75 0.744337 0.753112 +0.9538 0.75 0.744298 0.753001 +0.9539 0.75 0.744259 0.752888 +0.954 0.75 0.744221 0.752775 +0.9541 0.75 0.744182 0.75266 +0.9542 0.75 0.744144 0.752544 +0.9543 0.75 0.744106 0.752427 +0.9544 0.75 0.744068 0.752309 +0.9545 0.75 0.74403 0.752191 +0.9546 0.75 0.743992 0.752071 +0.9547 0.75 0.743954 0.75195 +0.9548 0.75 0.743916 0.751829 +0.9549 0.75 0.743879 0.751706 +0.955 0.75 0.743841 0.751583 +0.9551 0.75 0.743804 0.75146 +0.9552 0.75 0.743767 0.751335 +0.9553 0.75 0.74373 0.75121 +0.9554 0.75 0.743693 0.751085 +0.9555 0.75 0.743656 0.750959 +0.9556 0.75 0.74362 0.750832 +0.9557 0.75 0.743583 0.750705 +0.9558 0.75 0.743547 0.750578 +0.9559 0.75 0.74351 0.750451 +0.956 0.75 0.743474 0.750323 +0.9561 0.75 0.743438 0.750195 +0.9562 0.75 0.743402 0.750066 +0.9563 0.75 0.743367 0.749938 +0.9564 0.75 0.743331 0.74981 +0.9565 0.75 0.743296 0.749681 +0.9566 0.75 0.74326 0.749553 +0.9567 0.75 0.743225 0.749425 +0.9568 0.75 0.74319 0.749297 +0.9569 0.75 0.743155 0.749169 +0.957 0.75 0.74312 0.749041 +0.9571 0.75 0.743086 0.748914 +0.9572 0.75 0.743051 0.748787 +0.9573 0.75 0.743017 0.74866 +0.9574 0.75 0.742983 0.748534 +0.9575 0.75 0.742949 0.748408 +0.9576 0.75 0.742915 0.748283 +0.9577 0.75 0.742881 0.748159 +0.9578 0.75 0.742848 0.748035 +0.9579 0.75 0.742814 0.747912 +0.958 0.75 0.742781 0.74779 +0.9581 0.75 0.742748 0.747668 +0.9582 0.75 0.742715 0.747548 +0.9583 0.75 0.742682 0.747428 +0.9584 0.75 0.742649 0.74731 +0.9585 0.75 0.742617 0.747192 +0.9586 0.75 0.742584 0.747076 +0.9587 0.75 0.742552 0.74696 +0.9588 0.75 0.74252 0.746846 +0.9589 0.75 0.742488 0.746733 +0.959 0.75 0.742456 0.746622 +0.9591 0.75 0.742425 0.746512 +0.9592 0.75 0.742394 0.746403 +0.9593 0.75 0.742362 0.746296 +0.9594 0.75 0.742331 0.74619 +0.9595 0.75 0.7423 0.746086 +0.9596 0.75 0.74227 0.745983 +0.9597 0.75 0.742239 0.745882 +0.9598 0.75 0.742209 0.745783 +0.9599 0.75 0.742179 0.745685 +0.96 0.75 0.742149 0.74559 +0.9601 0.75 0.742119 0.745496 +0.9602 0.75 0.742089 0.745404 +0.9603 0.75 0.74206 0.745314 +0.9604 0.75 0.74203 0.745226 +0.9605 0.75 0.742001 0.74514 +0.9606 0.75 0.741972 0.745056 +0.9607 0.75 0.741943 0.744975 +0.9608 0.75 0.741915 0.744895 +0.9609 0.75 0.741886 0.744818 +0.961 0.75 0.741858 0.744743 +0.9611 0.75 0.74183 0.74467 +0.9612 0.75 0.741802 0.7446 +0.9613 0.75 0.741775 0.744532 +0.9614 0.75 0.741747 0.744466 +0.9615 0.75 0.74172 0.744403 +0.9616 0.75 0.741693 0.744342 +0.9617 0.75 0.741666 0.744284 +0.9618 0.75 0.741639 0.744228 +0.9619 0.75 0.741613 0.744175 +0.962 0.75 0.741586 0.744125 +0.9621 0.75 0.74156 0.744077 +0.9622 0.75 0.741534 0.744032 +0.9623 0.75 0.741509 0.74399 +0.9624 0.75 0.741483 0.74395 +0.9625 0.75 0.741458 0.743913 +0.9626 0.75 0.741433 0.743879 +0.9627 0.75 0.741408 0.743848 +0.9628 0.75 0.741383 0.74382 +0.9629 0.75 0.741359 0.743794 +0.963 0.75 0.741335 0.743772 +0.9631 0.75 0.741311 0.743752 +0.9632 0.75 0.741287 0.743736 +0.9633 0.75 0.741263 0.743722 +0.9634 0.75 0.74124 0.743711 +0.9635 0.75 0.741217 0.743703 +0.9636 0.75 0.741194 0.743698 +0.9637 0.75 0.741171 0.743697 +0.9638 0.75 0.741148 0.743698 +0.9639 0.75 0.741126 0.743702 +0.964 0.75 0.741104 0.74371 +0.9641 0.75 0.741082 0.74372 +0.9642 0.75 0.74106 0.743733 +0.9643 0.75 0.741039 0.74375 +0.9644 0.75 0.741018 0.74377 +0.9645 0.75 0.740997 0.743792 +0.9646 0.75 0.740976 0.743818 +0.9647 0.75 0.740955 0.743847 +0.9648 0.75 0.740935 0.743879 +0.9649 0.75 0.740915 0.743914 +0.965 0.75 0.740895 0.743952 +0.9651 0.75 0.740876 0.743993 +0.9652 0.75 0.740856 0.744037 +0.9653 0.75 0.740837 0.744084 +0.9654 0.75 0.740818 0.744134 +0.9655 0.75 0.7408 0.744187 +0.9656 0.75 0.740781 0.744243 +0.9657 0.75 0.740763 0.744302 +0.9658 0.75 0.740745 0.744364 +0.9659 0.75 0.740728 0.744429 +0.966 0.75 0.74071 0.744497 +0.9661 0.75 0.740693 0.744568 +0.9662 0.75 0.740676 0.744641 +0.9663 0.75 0.74066 0.744718 +0.9664 0.75 0.740643 0.744797 +0.9665 0.75 0.740627 0.744879 +0.9666 0.75 0.740611 0.744964 +0.9667 0.75 0.740595 0.745051 +0.9668 0.75 0.74058 0.745141 +0.9669 0.75 0.740565 0.745234 +0.967 0.75 0.74055 0.745329 +0.9671 0.75 0.740535 0.745427 +0.9672 0.75 0.740521 0.745528 +0.9673 0.75 0.740507 0.745631 +0.9674 0.75 0.740493 0.745736 +0.9675 0.75 0.74048 0.745844 +0.9676 0.75 0.740466 0.745954 +0.9677 0.75 0.740453 0.746066 +0.9678 0.75 0.740441 0.746181 +0.9679 0.75 0.740428 0.746297 +0.968 0.75 0.740416 0.746416 +0.9681 0.75 0.740404 0.746537 +0.9682 0.75 0.740392 0.74666 +0.9683 0.75 0.740381 0.746785 +0.9684 0.75 0.74037 0.746912 +0.9685 0.75 0.740359 0.747041 +0.9686 0.75 0.740348 0.747171 +0.9687 0.75 0.740338 0.747304 +0.9688 0.75 0.740328 0.747438 +0.9689 0.75 0.740318 0.747573 +0.969 0.75 0.740309 0.74771 +0.9691 0.75 0.7403 0.747848 +0.9692 0.75 0.740291 0.747988 +0.9693 0.75 0.740282 0.748129 +0.9694 0.75 0.740274 0.748271 +0.9695 0.75 0.740266 0.748415 +0.9696 0.75 0.740259 0.748559 +0.9697 0.75 0.740251 0.748705 +0.9698 0.75 0.740244 0.748851 +0.9699 0.75 0.740237 0.748998 +0.97 0.75 0.740231 0.749146 +0.9701 0.75 0.740225 0.749295 +0.9702 0.75 0.740219 0.749444 +0.9703 0.75 0.740213 0.749594 +0.9704 0.75 0.740208 0.749744 +0.9705 0.75 0.740203 0.749894 +0.9706 0.75 0.740198 0.750045 +0.9707 0.75 0.740194 0.750196 +0.9708 0.75 0.74019 0.750347 +0.9709 0.75 0.740186 0.750498 +0.971 0.75 0.740183 0.750649 +0.9711 0.75 0.74018 0.7508 +0.9712 0.75 0.740177 0.75095 +0.9713 0.75 0.740175 0.7511 +0.9714 0.75 0.740172 0.751249 +0.9715 0.75 0.740171 0.751398 +0.9716 0.75 0.740169 0.751547 +0.9717 0.75 0.740168 0.751694 +0.9718 0.75 0.740167 0.751841 +0.9719 0.75 0.740167 0.751987 +0.972 0.75 0.740166 0.752131 +0.9721 0.75 0.740166 0.752275 +0.9722 0.75 0.740167 0.752417 +0.9723 0.75 0.740168 0.752559 +0.9724 0.75 0.740169 0.752698 +0.9725 0.75 0.74017 0.752836 +0.9726 0.75 0.740172 0.752973 +0.9727 0.75 0.740174 0.753108 +0.9728 0.75 0.740177 0.753241 +0.9729 0.75 0.74018 0.753372 +0.973 0.75 0.740183 0.753502 +0.9731 0.75 0.740186 0.753629 +0.9732 0.75 0.74019 0.753754 +0.9733 0.75 0.740194 0.753877 +0.9734 0.75 0.740199 0.753997 +0.9735 0.75 0.740204 0.754115 +0.9736 0.75 0.740209 0.754231 +0.9737 0.75 0.740214 0.754344 +0.9738 0.75 0.74022 0.754454 +0.9739 0.75 0.740227 0.754561 +0.974 0.75 0.740233 0.754666 +0.9741 0.75 0.74024 0.754768 +0.9742 0.75 0.740248 0.754866 +0.9743 0.75 0.740255 0.754962 +0.9744 0.75 0.740264 0.755054 +0.9745 0.75 0.740272 0.755143 +0.9746 0.75 0.740281 0.755229 +0.9747 0.75 0.74029 0.755311 +0.9748 0.75 0.7403 0.75539 +0.9749 0.75 0.74031 0.755465 +0.975 0.75 0.74032 0.755537 +0.9751 0.75 0.74033 0.755605 +0.9752 0.75 0.740342 0.755669 +0.9753 0.75 0.740353 0.755729 +0.9754 0.75 0.740365 0.755786 +0.9755 0.75 0.740377 0.755838 +0.9756 0.75 0.740389 0.755887 +0.9757 0.75 0.740402 0.755931 +0.9758 0.75 0.740416 0.755971 +0.9759 0.75 0.740429 0.756007 +0.976 0.75 0.740444 0.756039 +0.9761 0.75 0.740458 0.756066 +0.9762 0.75 0.740473 0.756089 +0.9763 0.75 0.740488 0.756108 +0.9764 0.75 0.740504 0.756123 +0.9765 0.75 0.74052 0.756133 +0.9766 0.75 0.740536 0.756138 +0.9767 0.75 0.740553 0.756139 +0.9768 0.75 0.74057 0.756135 +0.9769 0.75 0.740588 0.756127 +0.977 0.75 0.740606 0.756114 +0.9771 0.75 0.740624 0.756097 +0.9772 0.75 0.740643 0.756075 +0.9773 0.75 0.740663 0.756049 +0.9774 0.75 0.740682 0.756017 +0.9775 0.75 0.740702 0.755982 +0.9776 0.75 0.740723 0.755941 +0.9777 0.75 0.740744 0.755896 +0.9778 0.75 0.740765 0.755846 +0.9779 0.75 0.740787 0.755792 +0.978 0.75 0.740809 0.755733 +0.9781 0.75 0.740831 0.75567 +0.9782 0.75 0.740854 0.755601 +0.9783 0.75 0.740878 0.755529 +0.9784 0.75 0.740902 0.755452 +0.9785 0.75 0.740926 0.75537 +0.9786 0.75 0.74095 0.755284 +0.9787 0.75 0.740976 0.755193 +0.9788 0.75 0.741001 0.755099 +0.9789 0.75 0.741027 0.754999 +0.979 0.75 0.741053 0.754896 +0.9791 0.75 0.74108 0.754788 +0.9792 0.75 0.741108 0.754677 +0.9793 0.75 0.741135 0.754561 +0.9794 0.75 0.741163 0.754441 +0.9795 0.75 0.741192 0.754317 +0.9796 0.75 0.741221 0.754189 +0.9797 0.75 0.74125 0.754058 +0.9798 0.75 0.74128 0.753923 +0.9799 0.75 0.741311 0.753784 +0.98 0.75 0.741342 0.753642 +0.9801 0.75 0.741373 0.753496 +0.9802 0.75 0.741405 0.753347 +0.9803 0.75 0.741437 0.753195 +0.9804 0.75 0.741469 0.75304 +0.9805 0.75 0.741502 0.752881 +0.9806 0.75 0.741536 0.75272 +0.9807 0.75 0.74157 0.752556 +0.9808 0.75 0.741604 0.75239 +0.9809 0.75 0.741639 0.752221 +0.981 0.75 0.741675 0.752049 +0.9811 0.75 0.741711 0.751876 +0.9812 0.75 0.741747 0.7517 +0.9813 0.75 0.741784 0.751523 +0.9814 0.75 0.741821 0.751343 +0.9815 0.75 0.741859 0.751162 +0.9816 0.75 0.741897 0.75098 +0.9817 0.75 0.741936 0.750796 +0.9818 0.75 0.741975 0.750611 +0.9819 0.75 0.742014 0.750425 +0.982 0.75 0.742055 0.750238 +0.9821 0.75 0.742095 0.75005 +0.9822 0.75 0.742136 0.749862 +0.9823 0.75 0.742178 0.749674 +0.9824 0.75 0.74222 0.749485 +0.9825 0.75 0.742263 0.749297 +0.9826 0.75 0.742306 0.749109 +0.9827 0.75 0.742349 0.748921 +0.9828 0.75 0.742393 0.748734 +0.9829 0.75 0.742438 0.748548 +0.983 0.75 0.742483 0.748362 +0.9831 0.75 0.742528 0.748178 +0.9832 0.75 0.742574 0.747995 +0.9833 0.75 0.742621 0.747814 +0.9834 0.75 0.742668 0.747635 +0.9835 0.75 0.742716 0.747457 +0.9836 0.75 0.742764 0.747282 +0.9837 0.75 0.742812 0.747109 +0.9838 0.75 0.742861 0.746939 +0.9839 0.75 0.742911 0.746771 +0.984 0.75 0.742961 0.746607 +0.9841 0.75 0.743012 0.746445 +0.9842 0.75 0.743063 0.746287 +0.9843 0.75 0.743115 0.746133 +0.9844 0.75 0.743167 0.745982 +0.9845 0.75 0.743219 0.745836 +0.9846 0.75 0.743273 0.745693 +0.9847 0.75 0.743327 0.745555 +0.9848 0.75 0.743381 0.745422 +0.9849 0.75 0.743436 0.745293 +0.985 0.75 0.743491 0.745169 +0.9851 0.75 0.743547 0.745051 +0.9852 0.75 0.743603 0.744937 +0.9853 0.75 0.74366 0.744829 +0.9854 0.75 0.743718 0.744727 +0.9855 0.75 0.743776 0.744631 +0.9856 0.75 0.743835 0.744541 +0.9857 0.75 0.743894 0.744457 +0.9858 0.75 0.743953 0.744379 +0.9859 0.75 0.744014 0.744308 +0.986 0.75 0.744074 0.744244 +0.9861 0.75 0.744136 0.744186 +0.9862 0.75 0.744198 0.744135 +0.9863 0.75 0.74426 0.744092 +0.9864 0.75 0.744323 0.744055 +0.9865 0.75 0.744387 0.744026 +0.9866 0.75 0.744451 0.744005 +0.9867 0.75 0.744516 0.743991 +0.9868 0.75 0.744581 0.743984 +0.9869 0.75 0.744647 0.743986 +0.987 0.75 0.744713 0.743995 +0.9871 0.75 0.74478 0.744012 +0.9872 0.75 0.744848 0.744037 +0.9873 0.75 0.744916 0.74407 +0.9874 0.75 0.744984 0.744111 +0.9875 0.75 0.745054 0.74416 +0.9876 0.75 0.745124 0.744218 +0.9877 0.75 0.745194 0.744284 +0.9878 0.75 0.745265 0.744357 +0.9879 0.75 0.745337 0.744439 +0.988 0.75 0.745409 0.744529 +0.9881 0.75 0.745482 0.744627 +0.9882 0.75 0.745555 0.744733 +0.9883 0.75 0.745629 0.744848 +0.9884 0.75 0.745703 0.74497 +0.9885 0.75 0.745778 0.7451 +0.9886 0.75 0.745854 0.745237 +0.9887 0.75 0.745931 0.745383 +0.9888 0.75 0.746007 0.745536 +0.9889 0.75 0.746085 0.745696 +0.989 0.75 0.746163 0.745864 +0.9891 0.75 0.746242 0.746038 +0.9892 0.75 0.746321 0.74622 +0.9893 0.75 0.746401 0.746408 +0.9894 0.75 0.746482 0.746603 +0.9895 0.75 0.746563 0.746804 +0.9896 0.75 0.746645 0.747011 +0.9897 0.75 0.746727 0.747224 +0.9898 0.75 0.74681 0.747443 +0.9899 0.75 0.746894 0.747667 +0.99 0.75 0.746978 0.747895 +0.9901 0.75 0.747063 0.748128 +0.9902 0.75 0.747149 0.748366 +0.9903 0.75 0.747235 0.748608 +0.9904 0.75 0.747322 0.748853 +0.9905 0.75 0.747409 0.749101 +0.9906 0.75 0.747497 0.749352 +0.9907 0.75 0.747586 0.749605 +0.9908 0.75 0.747675 0.749861 +0.9909 0.75 0.747765 0.750118 +0.991 0.75 0.747856 0.750376 +0.9911 0.75 0.747947 0.750635 +0.9912 0.75 0.748039 0.750894 +0.9913 0.75 0.748131 0.751152 +0.9914 0.75 0.748225 0.75141 +0.9915 0.75 0.748318 0.751666 +0.9916 0.75 0.748413 0.75192 +0.9917 0.75 0.748508 0.752172 +0.9918 0.75 0.748604 0.752421 +0.9919 0.75 0.7487 0.752666 +0.992 0.75 0.748798 0.752907 +0.9921 0.75 0.748895 0.753143 +0.9922 0.75 0.748994 0.753374 +0.9923 0.75 0.749093 0.753599 +0.9924 0.75 0.749193 0.753817 +0.9925 0.75 0.749293 0.754028 +0.9926 0.75 0.749394 0.754231 +0.9927 0.75 0.749496 0.754426 +0.9928 0.75 0.749599 0.754612 +0.9929 0.75 0.749702 0.754788 +0.993 0.75 0.749806 0.754954 +0.9931 0.75 0.74991 0.755109 +0.9932 0.75 0.750015 0.755253 +0.9933 0.75 0.750121 0.755384 +0.9934 0.75 0.750228 0.755503 +0.9935 0.75 0.750335 0.755608 +0.9936 0.75 0.750443 0.7557 +0.9937 0.75 0.750552 0.755777 +0.9938 0.75 0.750661 0.755839 +0.9939 0.75 0.750771 0.755885 +0.994 0.75 0.750882 0.755916 +0.9941 0.75 0.750993 0.75593 +0.9942 0.75 0.751105 0.755927 +0.9943 0.75 0.751218 0.755907 +0.9944 0.75 0.751332 0.755869 +0.9945 0.75 0.751446 0.755813 +0.9946 0.75 0.751561 0.755738 +0.9947 0.75 0.751677 0.755645 +0.9948 0.75 0.751793 0.755533 +0.9949 0.75 0.75191 0.755402 +0.995 0.75 0.752028 0.755252 +0.9951 0.75 0.752147 0.755082 +0.9952 0.75 0.752266 0.754893 +0.9953 0.75 0.752386 0.754685 +0.9954 0.75 0.752507 0.754458 +0.9955 0.75 0.752628 0.754212 +0.9956 0.75 0.75275 0.753948 +0.9957 0.75 0.752873 0.753665 +0.9958 0.75 0.752997 0.753365 +0.9959 0.75 0.753121 0.753048 +0.996 0.75 0.753246 0.752714 +0.9961 0.75 0.753372 0.752365 +0.9962 0.75 0.753499 0.752001 +0.9963 0.75 0.753626 0.751624 +0.9964 0.75 0.753754 0.751234 +0.9965 0.75 0.753883 0.750833 +0.9966 0.75 0.754013 0.750423 +0.9967 0.75 0.754143 0.750004 +0.9968 0.75 0.754274 0.74958 +0.9969 0.75 0.754406 0.749151 +0.997 0.75 0.754539 0.74872 +0.9971 0.75 0.754672 0.748289 +0.9972 0.75 0.754806 0.747861 +0.9973 0.75 0.754941 0.747438 +0.9974 0.75 0.755077 0.747024 +0.9975 0.75 0.755213 0.746621 +0.9976 0.75 0.75535 0.746234 +0.9977 0.75 0.755488 0.745865 +0.9978 0.75 0.755627 0.745518 +0.9979 0.75 0.755767 0.745199 +0.998 0.75 0.755907 0.744911 +0.9981 0.75 0.756048 0.74466 +0.9982 0.75 0.75619 0.744449 +0.9983 0.75 0.756333 0.744286 +0.9984 0.75 0.756476 0.744175 +0.9985 0.75 0.75662 0.744122 +0.9986 0.75 0.756765 0.744136 +0.9987 0.75 0.756911 0.744221 +0.9988 0.75 0.757058 0.744386 +0.9989 0.75 0.757205 0.744638 +0.999 0.75 0.757353 0.744985 +0.9991 0.75 0.757502 0.745437 +0.9992 0.75 0.757652 0.746002 +0.9993 0.75 0.757803 0.746689 +0.9994 0.75 0.757954 0.74751 +0.9995 0.75 0.758106 0.748474 +0.9996 0.75 0.758259 0.749594 +0.9997 0.75 0.758413 0.750879 +0.9998 0.75 0.758568 0.752344 +0.9999 0.75 0.758723 0.754001 diff -Nru gsl-doc-1.16/doc/examples/combination.out gsl-doc-2.3/doc/examples/combination.out --- gsl-doc-1.16/doc/examples/combination.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/combination.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ -All subsets of {0,1,2,3} by size: -{ } -{ 0 } -{ 1 } -{ 2 } -{ 3 } -{ 0 1 } -{ 0 2 } -{ 0 3 } -{ 1 2 } -{ 1 3 } -{ 2 3 } -{ 0 1 2 } -{ 0 1 3 } -{ 0 2 3 } -{ 1 2 3 } -{ 0 1 2 3 } diff -Nru gsl-doc-1.16/doc/examples/combination.txt gsl-doc-2.3/doc/examples/combination.txt --- gsl-doc-1.16/doc/examples/combination.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/combination.txt 2015-11-09 05:23:40.000000000 +0000 @@ -0,0 +1,17 @@ +All subsets of {0,1,2,3} by size: +{ } +{ 0 } +{ 1 } +{ 2 } +{ 3 } +{ 0 1 } +{ 0 2 } +{ 0 3 } +{ 1 2 } +{ 1 3 } +{ 2 3 } +{ 0 1 2 } +{ 0 1 3 } +{ 0 2 3 } +{ 1 2 3 } +{ 0 1 2 3 } diff -Nru gsl-doc-1.16/doc/examples/const.out gsl-doc-2.3/doc/examples/const.out --- gsl-doc-1.16/doc/examples/const.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/const.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -light travel time from Earth to Mars: -minimum = 4.3 minutes -maximum = 21.0 minutes diff -Nru gsl-doc-1.16/doc/examples/const.txt gsl-doc-2.3/doc/examples/const.txt --- gsl-doc-1.16/doc/examples/const.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/const.txt 2015-11-09 05:23:40.000000000 +0000 @@ -0,0 +1,3 @@ +light travel time from Earth to Mars: +minimum = 4.3 minutes +maximum = 21.0 minutes diff -Nru gsl-doc-1.16/doc/examples/demo_fn.c gsl-doc-2.3/doc/examples/demo_fn.c --- gsl-doc-1.16/doc/examples/demo_fn.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/demo_fn.c 2015-11-09 19:15:37.000000000 +0000 @@ -19,7 +19,6 @@ double a = p->a; double b = p->b; - double c = p->c; return 2.0 * a * x + b; } diff -Nru gsl-doc-1.16/doc/examples/diff.c gsl-doc-2.3/doc/examples/diff.c --- gsl-doc-1.16/doc/examples/diff.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/diff.c 2015-11-09 19:08:59.000000000 +0000 @@ -4,6 +4,7 @@ double f (double x, void * params) { + (void)(params); /* avoid unused parameter warning */ return pow (x, 1.5); } diff -Nru gsl-doc-1.16/doc/examples/diff.out gsl-doc-2.3/doc/examples/diff.out --- gsl-doc-1.16/doc/examples/diff.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/diff.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -f(x) = x^(3/2) -x = 2.0 -f'(x) = 2.1213203120 +/- 0.0000004064 -exact = 2.1213203436 - -x = 0.0 -f'(x) = 0.0000000160 +/- 0.0000000339 -exact = 0.0000000000 diff -Nru gsl-doc-1.16/doc/examples/diff.txt gsl-doc-2.3/doc/examples/diff.txt --- gsl-doc-1.16/doc/examples/diff.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/diff.txt 2015-11-10 18:02:10.000000000 +0000 @@ -0,0 +1,8 @@ +f(x) = x^(3/2) +x = 2.0 +f'(x) = 2.1213203120 +/- 0.0000005006 +exact = 2.1213203436 + +x = 0.0 +f'(x) = 0.0000000160 +/- 0.0000000339 +exact = 0.0000000000 diff -Nru gsl-doc-1.16/doc/examples/dwt.c gsl-doc-2.3/doc/examples/dwt.c --- gsl-doc-1.16/doc/examples/dwt.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/dwt.c 2015-11-09 19:17:56.000000000 +0000 @@ -6,6 +6,7 @@ int main (int argc, char **argv) { + (void)(argc); /* avoid unused parameter warning */ int i, n = 256, nc = 20; double *data = malloc (n * sizeof (double)); double *abscoeff = malloc (n * sizeof (double)); diff -Nru gsl-doc-1.16/doc/examples/dwt.dat gsl-doc-2.3/doc/examples/dwt.dat --- gsl-doc-1.16/doc/examples/dwt.dat 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/dwt.dat 1970-01-01 00:00:00.000000000 +0000 @@ -1,256 +0,0 @@ -0.0167729 -0.031888 -0.0412921 -0.0522264 -0.0574496 -0.0642031 -0.0724869 -0.0803607 -0.0825233 -0.0862162 -0.0914394 -0.0962525 -0.102596 -0.108529 -0.114053 -0.119686 -0.104007 -0.094039 -0.0897813 -0.0839935 -0.0839162 -0.0823088 -0.0791713 -0.0764437 -0.0509741 -0.0315983 -0.0183161 -0.00340114 --0.00542012 --0.0158742 --0.0279611 --0.0396104 --0.0160286 --0.00188697 -0.00281451 -0.0100455 -0.00783627 -0.00815656 -0.0110063 -0.0131783 -0.00591016 -0.00117148 --0.00103772 --0.00392469 --0.00428218 --0.00531744 --0.00703047 --0.0085619 --0.014332 --0.0189663 --0.0224649 --0.0262678 --0.0289349 --0.0319064 --0.0351822 --0.0383765 --0.0801973 --0.111668 --0.132789 --0.156683 --0.162696 --0.1735 --0.189095 --0.203407 --0.00510083 -0.136235 -0.341101 -0.528945 -0.801527 -1.0514 -1.15485 -1.29754 -1.16912 -1.11335 -0.760921 -0.487984 -0.24772 --0.00129903 --0.0610099 --0.171446 --0.102442 --0.081519 --0.108677 --0.122951 --0.0931296 --0.0751235 --0.0689329 --0.0595764 --0.0723311 --0.0791611 --0.0800665 --0.0825593 --0.0791275 --0.0772832 --0.0770263 --0.0763442 --0.078946 --0.080668 --0.0815099 --0.0825877 --0.0827855 --0.083219 --0.0838884 --0.0844945 --0.0842208 --0.0841828 --0.0843805 --0.0845151 --0.0848855 --0.0851927 --0.0854368 --0.0856977 --0.0858204 --0.0859801 --0.0861769 --0.0863638 --0.0865877 --0.0868017 --0.0870057 --0.0872124 --0.0874562 --0.08769 --0.0879139 --0.0881405 --0.0883571 --0.0885764 --0.0887984 --0.0890196 --0.0890797 --0.0891829 --0.0893293 --0.0894642 --0.0896423 --0.0898087 --0.0899636 --0.0901216 --0.0903228 --0.0905125 --0.0906905 --0.0908717 --0.0910413 --0.0912139 --0.0913897 --0.0915647 --0.0917828 --0.0919894 --0.0921844 --0.0923825 --0.092569 --0.0927586 --0.0929514 --0.0931433 --0.0933236 --0.093507 --0.0936935 --0.0938792 --0.094068 --0.094256 --0.0944431 --0.0946305 --0.103627 --0.110264 --0.11454 --0.119448 --0.121996 --0.125177 --0.12899 --0.132633 --0.133916 --0.135831 --0.138379 --0.140758 --0.143768 --0.14661 --0.149282 --0.151999 --0.121242 --0.0994544 --0.0866362 --0.0714146 --0.0651625 --0.056507 --0.0454482 --0.0350333 --0.033588 --0.0297392 --0.0234871 --0.017879 --0.00986753 --0.00250002 -0.00422351 -0.0111196 --0.00226639 --0.0102178 --0.0127347 --0.0167077 --0.0152462 --0.0152409 --0.0166917 --0.0177524 --0.0133785 --0.0104608 --0.00899926 --0.00714755 --0.00675204 --0.00596633 --0.00479045 --0.00371911 -0.00278678 -0.00783649 -0.01143 -0.0154137 -0.0179412 -0.0208589 -0.0241668 -0.0273702 -0.0291173 -0.0312547 -0.0337822 -0.0362052 -0.0390183 -0.0417269 -0.044331 -0.0469631 -0.0347545 -0.0265225 -0.0222671 -0.0169461 -0.0156016 -0.0131917 -0.00971622 -0.00652626 -0.00731282 -0.00703387 -0.00568942 -0.00463047 -0.00250601 -0.000667052 --0.000886403 --0.00251636 --0.000169788 -0.00111128 -0.00132683 -0.00182789 -0.00126344 -0.000984496 -0.000991051 -0.000921107 --0.000214344 --0.00106429 --0.00162874 --0.00226969 --0.00262514 --0.00305708 --0.00356553 --0.00405348 diff -Nru gsl-doc-1.16/doc/examples/dwt.txt gsl-doc-2.3/doc/examples/dwt.txt --- gsl-doc-1.16/doc/examples/dwt.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/dwt.txt 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,256 @@ +0.0167729 +0.031888 +0.0412921 +0.0522264 +0.0574496 +0.0642031 +0.0724869 +0.0803607 +0.0825233 +0.0862162 +0.0914394 +0.0962525 +0.102596 +0.108529 +0.114053 +0.119686 +0.104007 +0.094039 +0.0897813 +0.0839935 +0.0839162 +0.0823088 +0.0791713 +0.0764437 +0.0509741 +0.0315983 +0.0183161 +0.00340114 +-0.00542012 +-0.0158742 +-0.0279611 +-0.0396104 +-0.0160286 +-0.00188697 +0.00281451 +0.0100455 +0.00783627 +0.00815656 +0.0110063 +0.0131783 +0.00591016 +0.00117148 +-0.00103772 +-0.00392469 +-0.00428218 +-0.00531744 +-0.00703047 +-0.0085619 +-0.014332 +-0.0189663 +-0.0224649 +-0.0262678 +-0.0289349 +-0.0319064 +-0.0351822 +-0.0383765 +-0.0801973 +-0.111668 +-0.132789 +-0.156683 +-0.162696 +-0.1735 +-0.189095 +-0.203407 +-0.00510083 +0.136235 +0.341101 +0.528945 +0.801527 +1.0514 +1.15485 +1.29754 +1.16912 +1.11335 +0.760921 +0.487984 +0.24772 +-0.00129903 +-0.0610099 +-0.171446 +-0.102442 +-0.081519 +-0.108677 +-0.122951 +-0.0931296 +-0.0751235 +-0.0689329 +-0.0595764 +-0.0723311 +-0.0791611 +-0.0800665 +-0.0825593 +-0.0791275 +-0.0772832 +-0.0770263 +-0.0763442 +-0.078946 +-0.080668 +-0.0815099 +-0.0825877 +-0.0827855 +-0.083219 +-0.0838884 +-0.0844945 +-0.0842208 +-0.0841828 +-0.0843805 +-0.0845151 +-0.0848855 +-0.0851927 +-0.0854368 +-0.0856977 +-0.0858204 +-0.0859801 +-0.0861769 +-0.0863638 +-0.0865877 +-0.0868017 +-0.0870057 +-0.0872124 +-0.0874562 +-0.08769 +-0.0879139 +-0.0881405 +-0.0883571 +-0.0885764 +-0.0887984 +-0.0890196 +-0.0890797 +-0.0891829 +-0.0893293 +-0.0894642 +-0.0896423 +-0.0898087 +-0.0899636 +-0.0901216 +-0.0903228 +-0.0905125 +-0.0906905 +-0.0908717 +-0.0910413 +-0.0912139 +-0.0913897 +-0.0915647 +-0.0917828 +-0.0919894 +-0.0921844 +-0.0923825 +-0.092569 +-0.0927586 +-0.0929514 +-0.0931433 +-0.0933236 +-0.093507 +-0.0936935 +-0.0938792 +-0.094068 +-0.094256 +-0.0944431 +-0.0946305 +-0.103627 +-0.110264 +-0.11454 +-0.119448 +-0.121996 +-0.125177 +-0.12899 +-0.132633 +-0.133916 +-0.135831 +-0.138379 +-0.140758 +-0.143768 +-0.14661 +-0.149282 +-0.151999 +-0.121242 +-0.0994544 +-0.0866362 +-0.0714146 +-0.0651625 +-0.056507 +-0.0454482 +-0.0350333 +-0.033588 +-0.0297392 +-0.0234871 +-0.017879 +-0.00986753 +-0.00250002 +0.00422351 +0.0111196 +-0.00226639 +-0.0102178 +-0.0127347 +-0.0167077 +-0.0152462 +-0.0152409 +-0.0166917 +-0.0177524 +-0.0133785 +-0.0104608 +-0.00899926 +-0.00714755 +-0.00675204 +-0.00596633 +-0.00479045 +-0.00371911 +0.00278678 +0.00783649 +0.01143 +0.0154137 +0.0179412 +0.0208589 +0.0241668 +0.0273702 +0.0291173 +0.0312547 +0.0337822 +0.0362052 +0.0390183 +0.0417269 +0.044331 +0.0469631 +0.0347545 +0.0265225 +0.0222671 +0.0169461 +0.0156016 +0.0131917 +0.00971622 +0.00652626 +0.00731282 +0.00703387 +0.00568942 +0.00463047 +0.00250601 +0.000667052 +-0.000886403 +-0.00251636 +-0.000169788 +0.00111128 +0.00132683 +0.00182789 +0.00126344 +0.000984496 +0.000991051 +0.000921107 +-0.000214344 +-0.00106429 +-0.00162874 +-0.00226969 +-0.00262514 +-0.00305708 +-0.00356553 +-0.00405348 diff -Nru gsl-doc-1.16/doc/examples/ecg.dat gsl-doc-2.3/doc/examples/ecg.dat --- gsl-doc-1.16/doc/examples/ecg.dat 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/ecg.dat 1970-01-01 00:00:00.000000000 +0000 @@ -1,256 +0,0 @@ - 0.0462458471760794 - 0.0462458471760794 - 0.0512458471760794 - 0.0712458471760795 - 0.0712458471760795 - 0.0662458471760795 - 0.0962458471760795 - 0.101245847176079 - 0.116245847176079 - 0.121245847176079 - 0.116245847176079 - 0.106245847176079 - 0.0912458471760794 - 0.101245847176079 - 0.0962458471760795 - 0.0962458471760795 - 0.0962458471760795 - 0.0912458471760794 - 0.0862458471760795 - 0.0812458471760795 - 0.0862458471760795 - 0.101245847176079 - 0.111245847176079 - 0.116245847176079 - 0.0762458471760795 - 0.0362458471760795 - 0.0362458471760795 - 0.0212458471760795 - 0.0112458471760795 - -0.00875415282392056 - -0.00875415282392056 - -0.00375415282392055 - 0.00624584717607946 - 0.00124584717607945 - 0.00624584717607946 - -0.00375415282392055 - -0.0187541528239206 - -0.0237541528239205 - -0.0187541528239206 - -0.0187541528239206 - -0.0287541528239205 - -0.0237541528239205 - -0.0337541528239205 - -0.00875415282392056 - -0.0137541528239206 - -0.00875415282392056 - 0.00124584717607945 - -0.0237541528239205 - -0.0337541528239205 - -0.0187541528239206 - -0.00875415282392056 - -0.00375415282392055 - -0.00875415282392056 - -0.0287541528239205 - -0.0437541528239205 - -0.0387541528239205 - -0.0587541528239205 - -0.103754152823921 - -0.123754152823921 - -0.153754152823921 - -0.188754152823921 - -0.213754152823921 - -0.183754152823921 - -0.0937541528239205 - 0.0212458471760795 - 0.161245847176079 - 0.306245847176079 - 0.556245847176079 - 0.81124584717608 - 1.04124584717608 - 1.19624584717608 - 1.26124584717608 - 1.22624584717608 - 1.07624584717608 - 0.81124584717608 - 0.486245847176079 - 0.211245847176079 - 0.0512458471760794 - -0.0687541528239206 - -0.128754152823921 - -0.153754152823921 - -0.133754152823921 - -0.103754152823921 - -0.0687541528239206 - -0.0687541528239206 - -0.0637541528239206 - -0.0687541528239206 - -0.0587541528239205 - -0.0587541528239205 - -0.0587541528239205 - -0.0737541528239206 - -0.0637541528239206 - -0.0637541528239206 - -0.0637541528239206 - -0.0537541528239205 - -0.0737541528239206 - -0.0887541528239205 - -0.0887541528239205 - -0.0787541528239206 - -0.0737541528239206 - -0.0687541528239206 - -0.0837541528239206 - -0.0737541528239206 - -0.0637541528239206 - -0.0537541528239205 - -0.0687541528239206 - -0.0687541528239206 - -0.0837541528239206 - -0.0887541528239205 - -0.0887541528239205 - -0.0687541528239206 - -0.0687541528239206 - -0.0737541528239206 - -0.0837541528239206 - -0.0937541528239205 - -0.0787541528239206 - -0.0887541528239205 - -0.0837541528239206 - -0.0887541528239205 - -0.0937541528239205 - -0.0887541528239205 - -0.0787541528239206 - -0.0787541528239206 - -0.0737541528239206 - -0.0687541528239206 - -0.0837541528239206 - -0.0887541528239205 - -0.0687541528239206 - -0.0687541528239206 - -0.0637541528239206 - -0.0637541528239206 - -0.0887541528239205 - -0.0837541528239206 - -0.0737541528239206 - -0.0687541528239206 - -0.0537541528239205 - -0.0687541528239206 - -0.0737541528239206 - -0.0887541528239205 - -0.0787541528239206 - -0.0687541528239206 - -0.0687541528239206 - -0.0637541528239206 - -0.0837541528239206 - -0.0937541528239205 - -0.0937541528239205 - -0.0787541528239206 - -0.0737541528239206 - -0.0837541528239206 - -0.0937541528239205 - -0.0987541528239205 - -0.0987541528239205 - -0.0887541528239205 - -0.0937541528239205 - -0.103754152823921 - -0.0987541528239205 - -0.113754152823921 - -0.108754152823921 - -0.108754152823921 - -0.0987541528239205 - -0.108754152823921 - -0.128754152823921 - -0.133754152823921 - -0.128754152823921 - -0.113754152823921 - -0.123754152823921 - -0.128754152823921 - -0.133754152823921 - -0.148754152823921 - -0.138754152823921 - -0.133754152823921 - -0.128754152823921 - -0.133754152823921 - -0.148754152823921 - -0.153754152823921 - -0.138754152823921 - -0.128754152823921 - -0.123754152823921 - -0.118754152823921 - -0.113754152823921 - -0.118754152823921 - -0.0887541528239205 - -0.0737541528239206 - -0.0487541528239205 - -0.0437541528239205 - -0.0387541528239205 - -0.0437541528239205 - -0.0187541528239206 - -0.00375415282392055 - 0.00624584717607946 - 0.00124584717607945 - -0.00875415282392056 - -0.00875415282392056 - 0.00124584717607945 - 0.0112458471760795 - 0.0212458471760795 - 0.0212458471760795 - 0.00124584717607945 - 0.00124584717607945 - 0.00624584717607946 - 0.0162458471760795 - 0.0162458471760795 - 0.0262458471760795 - 0.00124584717607945 - -0.00875415282392056 - 0.0162458471760795 - 0.0112458471760795 - 0.0212458471760795 - 0.0212458471760795 - 0.00124584717607945 - -0.00375415282392055 - 0.0112458471760795 - 0.0162458471760795 - 0.00624584717607946 - 0.0162458471760795 - 0.00624584717607946 - 0.00624584717607946 - 0.0112458471760795 - 0.0262458471760795 - 0.0312458471760795 - 0.0162458471760795 - 0.0112458471760795 - 0.00124584717607945 - 0.00624584717607946 - 0.0212458471760795 - 0.00624584717607946 - 0.00624584717607946 - 0.00624584717607946 - -0.00875415282392056 - 0.00624584717607946 - 0.00124584717607945 - 0.00624584717607946 - -0.00375415282392055 - -0.0137541528239206 - -0.0187541528239206 - -0.0137541528239206 - -0.0137541528239206 - -0.00875415282392056 - -0.00375415282392055 - -0.0237541528239205 - -0.0287541528239205 - -0.0237541528239205 - -0.0137541528239206 - -0.00875415282392056 - -0.00875415282392056 - -0.0237541528239205 - -0.0237541528239205 - -0.0237541528239205 - 0.00124584717607945 - -0.00875415282392056 - -0.0137541528239206 - -0.0187541528239206 - -0.0337541528239205 - -0.0137541528239206 - -0.00875415282392056 - -0.00875415282392056 diff -Nru gsl-doc-1.16/doc/examples/eigen_nonsymm.txt gsl-doc-2.3/doc/examples/eigen_nonsymm.txt --- gsl-doc-1.16/doc/examples/eigen_nonsymm.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/eigen_nonsymm.txt 2015-11-10 18:10:38.000000000 +0000 @@ -0,0 +1,24 @@ +eigenvalue = -6.41391 + 0i +eigenvector = +0.0998822 + 0i +0.111251 + 0i +-0.292501 + 0i +-0.944505 + 0i +eigenvalue = 5.54555 + 3.08545i +eigenvector = +0.0430757 + 0.00968662i +-0.0709124 + 0.138917i +0.516595 + -0.0160059i +0.839574 + 0.0413888i +eigenvalue = 5.54555 + -3.08545i +eigenvector = +0.0430757 + -0.00968662i +-0.0709124 + -0.138917i +0.516595 + 0.0160059i +0.839574 + -0.0413888i +eigenvalue = 2.3228 + 0i +eigenvector = +-0.144933 + 0i +0.356601 + 0i +0.919369 + 0i +0.0811836 + 0i diff -Nru gsl-doc-1.16/doc/examples/eigen.txt gsl-doc-2.3/doc/examples/eigen.txt --- gsl-doc-1.16/doc/examples/eigen.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/eigen.txt 2015-11-10 18:09:48.000000000 +0000 @@ -0,0 +1,24 @@ +eigenvalue = 9.67023e-05 +eigenvector = +-0.0291933 +0.328712 +-0.791411 +0.514553 +eigenvalue = 0.00673827 +eigenvector = +-0.179186 +0.741918 +-0.100228 +-0.638283 +eigenvalue = 0.169141 +eigenvector = +0.582076 +-0.370502 +-0.509579 +-0.514048 +eigenvalue = 1.50021 +eigenvector = +0.792608 +0.451923 +0.322416 +0.252161 diff -Nru gsl-doc-1.16/doc/examples/expfit.c gsl-doc-2.3/doc/examples/expfit.c --- gsl-doc-1.16/doc/examples/expfit.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/expfit.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ -/* expfit.c -- model functions for exponential + background */ - -struct data { - size_t n; - double * y; - double * sigma; -}; - -int -expb_f (const gsl_vector * x, void *data, - gsl_vector * f) -{ - size_t n = ((struct data *)data)->n; - double *y = ((struct data *)data)->y; - double *sigma = ((struct data *) data)->sigma; - - double A = gsl_vector_get (x, 0); - double lambda = gsl_vector_get (x, 1); - double b = gsl_vector_get (x, 2); - - size_t i; - - for (i = 0; i < n; i++) - { - /* Model Yi = A * exp(-lambda * i) + b */ - double t = i; - double Yi = A * exp (-lambda * t) + b; - gsl_vector_set (f, i, (Yi - y[i])/sigma[i]); - } - - return GSL_SUCCESS; -} - -int -expb_df (const gsl_vector * x, void *data, - gsl_matrix * J) -{ - size_t n = ((struct data *)data)->n; - double *sigma = ((struct data *) data)->sigma; - - double A = gsl_vector_get (x, 0); - double lambda = gsl_vector_get (x, 1); - - size_t i; - - for (i = 0; i < n; i++) - { - /* Jacobian matrix J(i,j) = dfi / dxj, */ - /* where fi = (Yi - yi)/sigma[i], */ - /* Yi = A * exp(-lambda * i) + b */ - /* and the xj are the parameters (A,lambda,b) */ - double t = i; - double s = sigma[i]; - double e = exp(-lambda * t); - gsl_matrix_set (J, i, 0, e/s); - gsl_matrix_set (J, i, 1, -t * A * e/s); - gsl_matrix_set (J, i, 2, 1/s); - } - return GSL_SUCCESS; -} - -int -expb_fdf (const gsl_vector * x, void *data, - gsl_vector * f, gsl_matrix * J) -{ - expb_f (x, data, f); - expb_df (x, data, J); - - return GSL_SUCCESS; -} diff -Nru gsl-doc-1.16/doc/examples/fftmr.c gsl-doc-2.3/doc/examples/fftmr.c --- gsl-doc-1.16/doc/examples/fftmr.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/fftmr.c 2015-11-09 19:10:38.000000000 +0000 @@ -39,9 +39,9 @@ wavetable = gsl_fft_complex_wavetable_alloc (n); workspace = gsl_fft_complex_workspace_alloc (n); - for (i = 0; i < wavetable->nf; i++) + for (i = 0; i < (int) wavetable->nf; i++) { - printf ("# factor %d: %d\n", i, + printf ("# factor %d: %zu\n", i, wavetable->factor[i]); } diff -Nru gsl-doc-1.16/doc/examples/fftmr.txt gsl-doc-2.3/doc/examples/fftmr.txt --- gsl-doc-1.16/doc/examples/fftmr.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/fftmr.txt 2015-11-10 18:14:15.000000000 +0000 @@ -0,0 +1,1265 @@ +0: 1.000000e+00 0.000000e+00 +1: 1.000000e+00 0.000000e+00 +2: 1.000000e+00 0.000000e+00 +3: 1.000000e+00 0.000000e+00 +4: 1.000000e+00 0.000000e+00 +5: 1.000000e+00 0.000000e+00 +6: 1.000000e+00 0.000000e+00 +7: 1.000000e+00 0.000000e+00 +8: 1.000000e+00 0.000000e+00 +9: 1.000000e+00 0.000000e+00 +10: 1.000000e+00 0.000000e+00 +11: 0.000000e+00 0.000000e+00 +12: 0.000000e+00 0.000000e+00 +13: 0.000000e+00 0.000000e+00 +14: 0.000000e+00 0.000000e+00 +15: 0.000000e+00 0.000000e+00 +16: 0.000000e+00 0.000000e+00 +17: 0.000000e+00 0.000000e+00 +18: 0.000000e+00 0.000000e+00 +19: 0.000000e+00 0.000000e+00 +20: 0.000000e+00 0.000000e+00 +21: 0.000000e+00 0.000000e+00 +22: 0.000000e+00 0.000000e+00 +23: 0.000000e+00 0.000000e+00 +24: 0.000000e+00 0.000000e+00 +25: 0.000000e+00 0.000000e+00 +26: 0.000000e+00 0.000000e+00 +27: 0.000000e+00 0.000000e+00 +28: 0.000000e+00 0.000000e+00 +29: 0.000000e+00 0.000000e+00 +30: 0.000000e+00 0.000000e+00 +31: 0.000000e+00 0.000000e+00 +32: 0.000000e+00 0.000000e+00 +33: 0.000000e+00 0.000000e+00 +34: 0.000000e+00 0.000000e+00 +35: 0.000000e+00 0.000000e+00 +36: 0.000000e+00 0.000000e+00 +37: 0.000000e+00 0.000000e+00 +38: 0.000000e+00 0.000000e+00 +39: 0.000000e+00 0.000000e+00 +40: 0.000000e+00 0.000000e+00 +41: 0.000000e+00 0.000000e+00 +42: 0.000000e+00 0.000000e+00 +43: 0.000000e+00 0.000000e+00 +44: 0.000000e+00 0.000000e+00 +45: 0.000000e+00 0.000000e+00 +46: 0.000000e+00 0.000000e+00 +47: 0.000000e+00 0.000000e+00 +48: 0.000000e+00 0.000000e+00 +49: 0.000000e+00 0.000000e+00 +50: 0.000000e+00 0.000000e+00 +51: 0.000000e+00 0.000000e+00 +52: 0.000000e+00 0.000000e+00 +53: 0.000000e+00 0.000000e+00 +54: 0.000000e+00 0.000000e+00 +55: 0.000000e+00 0.000000e+00 +56: 0.000000e+00 0.000000e+00 +57: 0.000000e+00 0.000000e+00 +58: 0.000000e+00 0.000000e+00 +59: 0.000000e+00 0.000000e+00 +60: 0.000000e+00 0.000000e+00 +61: 0.000000e+00 0.000000e+00 +62: 0.000000e+00 0.000000e+00 +63: 0.000000e+00 0.000000e+00 +64: 0.000000e+00 0.000000e+00 +65: 0.000000e+00 0.000000e+00 +66: 0.000000e+00 0.000000e+00 +67: 0.000000e+00 0.000000e+00 +68: 0.000000e+00 0.000000e+00 +69: 0.000000e+00 0.000000e+00 +70: 0.000000e+00 0.000000e+00 +71: 0.000000e+00 0.000000e+00 +72: 0.000000e+00 0.000000e+00 +73: 0.000000e+00 0.000000e+00 +74: 0.000000e+00 0.000000e+00 +75: 0.000000e+00 0.000000e+00 +76: 0.000000e+00 0.000000e+00 +77: 0.000000e+00 0.000000e+00 +78: 0.000000e+00 0.000000e+00 +79: 0.000000e+00 0.000000e+00 +80: 0.000000e+00 0.000000e+00 +81: 0.000000e+00 0.000000e+00 +82: 0.000000e+00 0.000000e+00 +83: 0.000000e+00 0.000000e+00 +84: 0.000000e+00 0.000000e+00 +85: 0.000000e+00 0.000000e+00 +86: 0.000000e+00 0.000000e+00 +87: 0.000000e+00 0.000000e+00 +88: 0.000000e+00 0.000000e+00 +89: 0.000000e+00 0.000000e+00 +90: 0.000000e+00 0.000000e+00 +91: 0.000000e+00 0.000000e+00 +92: 0.000000e+00 0.000000e+00 +93: 0.000000e+00 0.000000e+00 +94: 0.000000e+00 0.000000e+00 +95: 0.000000e+00 0.000000e+00 +96: 0.000000e+00 0.000000e+00 +97: 0.000000e+00 0.000000e+00 +98: 0.000000e+00 0.000000e+00 +99: 0.000000e+00 0.000000e+00 +100: 0.000000e+00 0.000000e+00 +101: 0.000000e+00 0.000000e+00 +102: 0.000000e+00 0.000000e+00 +103: 0.000000e+00 0.000000e+00 +104: 0.000000e+00 0.000000e+00 +105: 0.000000e+00 0.000000e+00 +106: 0.000000e+00 0.000000e+00 +107: 0.000000e+00 0.000000e+00 +108: 0.000000e+00 0.000000e+00 +109: 0.000000e+00 0.000000e+00 +110: 0.000000e+00 0.000000e+00 +111: 0.000000e+00 0.000000e+00 +112: 0.000000e+00 0.000000e+00 +113: 0.000000e+00 0.000000e+00 +114: 0.000000e+00 0.000000e+00 +115: 0.000000e+00 0.000000e+00 +116: 0.000000e+00 0.000000e+00 +117: 0.000000e+00 0.000000e+00 +118: 0.000000e+00 0.000000e+00 +119: 0.000000e+00 0.000000e+00 +120: 0.000000e+00 0.000000e+00 +121: 0.000000e+00 0.000000e+00 +122: 0.000000e+00 0.000000e+00 +123: 0.000000e+00 0.000000e+00 +124: 0.000000e+00 0.000000e+00 +125: 0.000000e+00 0.000000e+00 +126: 0.000000e+00 0.000000e+00 +127: 0.000000e+00 0.000000e+00 +128: 0.000000e+00 0.000000e+00 +129: 0.000000e+00 0.000000e+00 +130: 0.000000e+00 0.000000e+00 +131: 0.000000e+00 0.000000e+00 +132: 0.000000e+00 0.000000e+00 +133: 0.000000e+00 0.000000e+00 +134: 0.000000e+00 0.000000e+00 +135: 0.000000e+00 0.000000e+00 +136: 0.000000e+00 0.000000e+00 +137: 0.000000e+00 0.000000e+00 +138: 0.000000e+00 0.000000e+00 +139: 0.000000e+00 0.000000e+00 +140: 0.000000e+00 0.000000e+00 +141: 0.000000e+00 0.000000e+00 +142: 0.000000e+00 0.000000e+00 +143: 0.000000e+00 0.000000e+00 +144: 0.000000e+00 0.000000e+00 +145: 0.000000e+00 0.000000e+00 +146: 0.000000e+00 0.000000e+00 +147: 0.000000e+00 0.000000e+00 +148: 0.000000e+00 0.000000e+00 +149: 0.000000e+00 0.000000e+00 +150: 0.000000e+00 0.000000e+00 +151: 0.000000e+00 0.000000e+00 +152: 0.000000e+00 0.000000e+00 +153: 0.000000e+00 0.000000e+00 +154: 0.000000e+00 0.000000e+00 +155: 0.000000e+00 0.000000e+00 +156: 0.000000e+00 0.000000e+00 +157: 0.000000e+00 0.000000e+00 +158: 0.000000e+00 0.000000e+00 +159: 0.000000e+00 0.000000e+00 +160: 0.000000e+00 0.000000e+00 +161: 0.000000e+00 0.000000e+00 +162: 0.000000e+00 0.000000e+00 +163: 0.000000e+00 0.000000e+00 +164: 0.000000e+00 0.000000e+00 +165: 0.000000e+00 0.000000e+00 +166: 0.000000e+00 0.000000e+00 +167: 0.000000e+00 0.000000e+00 +168: 0.000000e+00 0.000000e+00 +169: 0.000000e+00 0.000000e+00 +170: 0.000000e+00 0.000000e+00 +171: 0.000000e+00 0.000000e+00 +172: 0.000000e+00 0.000000e+00 +173: 0.000000e+00 0.000000e+00 +174: 0.000000e+00 0.000000e+00 +175: 0.000000e+00 0.000000e+00 +176: 0.000000e+00 0.000000e+00 +177: 0.000000e+00 0.000000e+00 +178: 0.000000e+00 0.000000e+00 +179: 0.000000e+00 0.000000e+00 +180: 0.000000e+00 0.000000e+00 +181: 0.000000e+00 0.000000e+00 +182: 0.000000e+00 0.000000e+00 +183: 0.000000e+00 0.000000e+00 +184: 0.000000e+00 0.000000e+00 +185: 0.000000e+00 0.000000e+00 +186: 0.000000e+00 0.000000e+00 +187: 0.000000e+00 0.000000e+00 +188: 0.000000e+00 0.000000e+00 +189: 0.000000e+00 0.000000e+00 +190: 0.000000e+00 0.000000e+00 +191: 0.000000e+00 0.000000e+00 +192: 0.000000e+00 0.000000e+00 +193: 0.000000e+00 0.000000e+00 +194: 0.000000e+00 0.000000e+00 +195: 0.000000e+00 0.000000e+00 +196: 0.000000e+00 0.000000e+00 +197: 0.000000e+00 0.000000e+00 +198: 0.000000e+00 0.000000e+00 +199: 0.000000e+00 0.000000e+00 +200: 0.000000e+00 0.000000e+00 +201: 0.000000e+00 0.000000e+00 +202: 0.000000e+00 0.000000e+00 +203: 0.000000e+00 0.000000e+00 +204: 0.000000e+00 0.000000e+00 +205: 0.000000e+00 0.000000e+00 +206: 0.000000e+00 0.000000e+00 +207: 0.000000e+00 0.000000e+00 +208: 0.000000e+00 0.000000e+00 +209: 0.000000e+00 0.000000e+00 +210: 0.000000e+00 0.000000e+00 +211: 0.000000e+00 0.000000e+00 +212: 0.000000e+00 0.000000e+00 +213: 0.000000e+00 0.000000e+00 +214: 0.000000e+00 0.000000e+00 +215: 0.000000e+00 0.000000e+00 +216: 0.000000e+00 0.000000e+00 +217: 0.000000e+00 0.000000e+00 +218: 0.000000e+00 0.000000e+00 +219: 0.000000e+00 0.000000e+00 +220: 0.000000e+00 0.000000e+00 +221: 0.000000e+00 0.000000e+00 +222: 0.000000e+00 0.000000e+00 +223: 0.000000e+00 0.000000e+00 +224: 0.000000e+00 0.000000e+00 +225: 0.000000e+00 0.000000e+00 +226: 0.000000e+00 0.000000e+00 +227: 0.000000e+00 0.000000e+00 +228: 0.000000e+00 0.000000e+00 +229: 0.000000e+00 0.000000e+00 +230: 0.000000e+00 0.000000e+00 +231: 0.000000e+00 0.000000e+00 +232: 0.000000e+00 0.000000e+00 +233: 0.000000e+00 0.000000e+00 +234: 0.000000e+00 0.000000e+00 +235: 0.000000e+00 0.000000e+00 +236: 0.000000e+00 0.000000e+00 +237: 0.000000e+00 0.000000e+00 +238: 0.000000e+00 0.000000e+00 +239: 0.000000e+00 0.000000e+00 +240: 0.000000e+00 0.000000e+00 +241: 0.000000e+00 0.000000e+00 +242: 0.000000e+00 0.000000e+00 +243: 0.000000e+00 0.000000e+00 +244: 0.000000e+00 0.000000e+00 +245: 0.000000e+00 0.000000e+00 +246: 0.000000e+00 0.000000e+00 +247: 0.000000e+00 0.000000e+00 +248: 0.000000e+00 0.000000e+00 +249: 0.000000e+00 0.000000e+00 +250: 0.000000e+00 0.000000e+00 +251: 0.000000e+00 0.000000e+00 +252: 0.000000e+00 0.000000e+00 +253: 0.000000e+00 0.000000e+00 +254: 0.000000e+00 0.000000e+00 +255: 0.000000e+00 0.000000e+00 +256: 0.000000e+00 0.000000e+00 +257: 0.000000e+00 0.000000e+00 +258: 0.000000e+00 0.000000e+00 +259: 0.000000e+00 0.000000e+00 +260: 0.000000e+00 0.000000e+00 +261: 0.000000e+00 0.000000e+00 +262: 0.000000e+00 0.000000e+00 +263: 0.000000e+00 0.000000e+00 +264: 0.000000e+00 0.000000e+00 +265: 0.000000e+00 0.000000e+00 +266: 0.000000e+00 0.000000e+00 +267: 0.000000e+00 0.000000e+00 +268: 0.000000e+00 0.000000e+00 +269: 0.000000e+00 0.000000e+00 +270: 0.000000e+00 0.000000e+00 +271: 0.000000e+00 0.000000e+00 +272: 0.000000e+00 0.000000e+00 +273: 0.000000e+00 0.000000e+00 +274: 0.000000e+00 0.000000e+00 +275: 0.000000e+00 0.000000e+00 +276: 0.000000e+00 0.000000e+00 +277: 0.000000e+00 0.000000e+00 +278: 0.000000e+00 0.000000e+00 +279: 0.000000e+00 0.000000e+00 +280: 0.000000e+00 0.000000e+00 +281: 0.000000e+00 0.000000e+00 +282: 0.000000e+00 0.000000e+00 +283: 0.000000e+00 0.000000e+00 +284: 0.000000e+00 0.000000e+00 +285: 0.000000e+00 0.000000e+00 +286: 0.000000e+00 0.000000e+00 +287: 0.000000e+00 0.000000e+00 +288: 0.000000e+00 0.000000e+00 +289: 0.000000e+00 0.000000e+00 +290: 0.000000e+00 0.000000e+00 +291: 0.000000e+00 0.000000e+00 +292: 0.000000e+00 0.000000e+00 +293: 0.000000e+00 0.000000e+00 +294: 0.000000e+00 0.000000e+00 +295: 0.000000e+00 0.000000e+00 +296: 0.000000e+00 0.000000e+00 +297: 0.000000e+00 0.000000e+00 +298: 0.000000e+00 0.000000e+00 +299: 0.000000e+00 0.000000e+00 +300: 0.000000e+00 0.000000e+00 +301: 0.000000e+00 0.000000e+00 +302: 0.000000e+00 0.000000e+00 +303: 0.000000e+00 0.000000e+00 +304: 0.000000e+00 0.000000e+00 +305: 0.000000e+00 0.000000e+00 +306: 0.000000e+00 0.000000e+00 +307: 0.000000e+00 0.000000e+00 +308: 0.000000e+00 0.000000e+00 +309: 0.000000e+00 0.000000e+00 +310: 0.000000e+00 0.000000e+00 +311: 0.000000e+00 0.000000e+00 +312: 0.000000e+00 0.000000e+00 +313: 0.000000e+00 0.000000e+00 +314: 0.000000e+00 0.000000e+00 +315: 0.000000e+00 0.000000e+00 +316: 0.000000e+00 0.000000e+00 +317: 0.000000e+00 0.000000e+00 +318: 0.000000e+00 0.000000e+00 +319: 0.000000e+00 0.000000e+00 +320: 0.000000e+00 0.000000e+00 +321: 0.000000e+00 0.000000e+00 +322: 0.000000e+00 0.000000e+00 +323: 0.000000e+00 0.000000e+00 +324: 0.000000e+00 0.000000e+00 +325: 0.000000e+00 0.000000e+00 +326: 0.000000e+00 0.000000e+00 +327: 0.000000e+00 0.000000e+00 +328: 0.000000e+00 0.000000e+00 +329: 0.000000e+00 0.000000e+00 +330: 0.000000e+00 0.000000e+00 +331: 0.000000e+00 0.000000e+00 +332: 0.000000e+00 0.000000e+00 +333: 0.000000e+00 0.000000e+00 +334: 0.000000e+00 0.000000e+00 +335: 0.000000e+00 0.000000e+00 +336: 0.000000e+00 0.000000e+00 +337: 0.000000e+00 0.000000e+00 +338: 0.000000e+00 0.000000e+00 +339: 0.000000e+00 0.000000e+00 +340: 0.000000e+00 0.000000e+00 +341: 0.000000e+00 0.000000e+00 +342: 0.000000e+00 0.000000e+00 +343: 0.000000e+00 0.000000e+00 +344: 0.000000e+00 0.000000e+00 +345: 0.000000e+00 0.000000e+00 +346: 0.000000e+00 0.000000e+00 +347: 0.000000e+00 0.000000e+00 +348: 0.000000e+00 0.000000e+00 +349: 0.000000e+00 0.000000e+00 +350: 0.000000e+00 0.000000e+00 +351: 0.000000e+00 0.000000e+00 +352: 0.000000e+00 0.000000e+00 +353: 0.000000e+00 0.000000e+00 +354: 0.000000e+00 0.000000e+00 +355: 0.000000e+00 0.000000e+00 +356: 0.000000e+00 0.000000e+00 +357: 0.000000e+00 0.000000e+00 +358: 0.000000e+00 0.000000e+00 +359: 0.000000e+00 0.000000e+00 +360: 0.000000e+00 0.000000e+00 +361: 0.000000e+00 0.000000e+00 +362: 0.000000e+00 0.000000e+00 +363: 0.000000e+00 0.000000e+00 +364: 0.000000e+00 0.000000e+00 +365: 0.000000e+00 0.000000e+00 +366: 0.000000e+00 0.000000e+00 +367: 0.000000e+00 0.000000e+00 +368: 0.000000e+00 0.000000e+00 +369: 0.000000e+00 0.000000e+00 +370: 0.000000e+00 0.000000e+00 +371: 0.000000e+00 0.000000e+00 +372: 0.000000e+00 0.000000e+00 +373: 0.000000e+00 0.000000e+00 +374: 0.000000e+00 0.000000e+00 +375: 0.000000e+00 0.000000e+00 +376: 0.000000e+00 0.000000e+00 +377: 0.000000e+00 0.000000e+00 +378: 0.000000e+00 0.000000e+00 +379: 0.000000e+00 0.000000e+00 +380: 0.000000e+00 0.000000e+00 +381: 0.000000e+00 0.000000e+00 +382: 0.000000e+00 0.000000e+00 +383: 0.000000e+00 0.000000e+00 +384: 0.000000e+00 0.000000e+00 +385: 0.000000e+00 0.000000e+00 +386: 0.000000e+00 0.000000e+00 +387: 0.000000e+00 0.000000e+00 +388: 0.000000e+00 0.000000e+00 +389: 0.000000e+00 0.000000e+00 +390: 0.000000e+00 0.000000e+00 +391: 0.000000e+00 0.000000e+00 +392: 0.000000e+00 0.000000e+00 +393: 0.000000e+00 0.000000e+00 +394: 0.000000e+00 0.000000e+00 +395: 0.000000e+00 0.000000e+00 +396: 0.000000e+00 0.000000e+00 +397: 0.000000e+00 0.000000e+00 +398: 0.000000e+00 0.000000e+00 +399: 0.000000e+00 0.000000e+00 +400: 0.000000e+00 0.000000e+00 +401: 0.000000e+00 0.000000e+00 +402: 0.000000e+00 0.000000e+00 +403: 0.000000e+00 0.000000e+00 +404: 0.000000e+00 0.000000e+00 +405: 0.000000e+00 0.000000e+00 +406: 0.000000e+00 0.000000e+00 +407: 0.000000e+00 0.000000e+00 +408: 0.000000e+00 0.000000e+00 +409: 0.000000e+00 0.000000e+00 +410: 0.000000e+00 0.000000e+00 +411: 0.000000e+00 0.000000e+00 +412: 0.000000e+00 0.000000e+00 +413: 0.000000e+00 0.000000e+00 +414: 0.000000e+00 0.000000e+00 +415: 0.000000e+00 0.000000e+00 +416: 0.000000e+00 0.000000e+00 +417: 0.000000e+00 0.000000e+00 +418: 0.000000e+00 0.000000e+00 +419: 0.000000e+00 0.000000e+00 +420: 0.000000e+00 0.000000e+00 +421: 0.000000e+00 0.000000e+00 +422: 0.000000e+00 0.000000e+00 +423: 0.000000e+00 0.000000e+00 +424: 0.000000e+00 0.000000e+00 +425: 0.000000e+00 0.000000e+00 +426: 0.000000e+00 0.000000e+00 +427: 0.000000e+00 0.000000e+00 +428: 0.000000e+00 0.000000e+00 +429: 0.000000e+00 0.000000e+00 +430: 0.000000e+00 0.000000e+00 +431: 0.000000e+00 0.000000e+00 +432: 0.000000e+00 0.000000e+00 +433: 0.000000e+00 0.000000e+00 +434: 0.000000e+00 0.000000e+00 +435: 0.000000e+00 0.000000e+00 +436: 0.000000e+00 0.000000e+00 +437: 0.000000e+00 0.000000e+00 +438: 0.000000e+00 0.000000e+00 +439: 0.000000e+00 0.000000e+00 +440: 0.000000e+00 0.000000e+00 +441: 0.000000e+00 0.000000e+00 +442: 0.000000e+00 0.000000e+00 +443: 0.000000e+00 0.000000e+00 +444: 0.000000e+00 0.000000e+00 +445: 0.000000e+00 0.000000e+00 +446: 0.000000e+00 0.000000e+00 +447: 0.000000e+00 0.000000e+00 +448: 0.000000e+00 0.000000e+00 +449: 0.000000e+00 0.000000e+00 +450: 0.000000e+00 0.000000e+00 +451: 0.000000e+00 0.000000e+00 +452: 0.000000e+00 0.000000e+00 +453: 0.000000e+00 0.000000e+00 +454: 0.000000e+00 0.000000e+00 +455: 0.000000e+00 0.000000e+00 +456: 0.000000e+00 0.000000e+00 +457: 0.000000e+00 0.000000e+00 +458: 0.000000e+00 0.000000e+00 +459: 0.000000e+00 0.000000e+00 +460: 0.000000e+00 0.000000e+00 +461: 0.000000e+00 0.000000e+00 +462: 0.000000e+00 0.000000e+00 +463: 0.000000e+00 0.000000e+00 +464: 0.000000e+00 0.000000e+00 +465: 0.000000e+00 0.000000e+00 +466: 0.000000e+00 0.000000e+00 +467: 0.000000e+00 0.000000e+00 +468: 0.000000e+00 0.000000e+00 +469: 0.000000e+00 0.000000e+00 +470: 0.000000e+00 0.000000e+00 +471: 0.000000e+00 0.000000e+00 +472: 0.000000e+00 0.000000e+00 +473: 0.000000e+00 0.000000e+00 +474: 0.000000e+00 0.000000e+00 +475: 0.000000e+00 0.000000e+00 +476: 0.000000e+00 0.000000e+00 +477: 0.000000e+00 0.000000e+00 +478: 0.000000e+00 0.000000e+00 +479: 0.000000e+00 0.000000e+00 +480: 0.000000e+00 0.000000e+00 +481: 0.000000e+00 0.000000e+00 +482: 0.000000e+00 0.000000e+00 +483: 0.000000e+00 0.000000e+00 +484: 0.000000e+00 0.000000e+00 +485: 0.000000e+00 0.000000e+00 +486: 0.000000e+00 0.000000e+00 +487: 0.000000e+00 0.000000e+00 +488: 0.000000e+00 0.000000e+00 +489: 0.000000e+00 0.000000e+00 +490: 0.000000e+00 0.000000e+00 +491: 0.000000e+00 0.000000e+00 +492: 0.000000e+00 0.000000e+00 +493: 0.000000e+00 0.000000e+00 +494: 0.000000e+00 0.000000e+00 +495: 0.000000e+00 0.000000e+00 +496: 0.000000e+00 0.000000e+00 +497: 0.000000e+00 0.000000e+00 +498: 0.000000e+00 0.000000e+00 +499: 0.000000e+00 0.000000e+00 +500: 0.000000e+00 0.000000e+00 +501: 0.000000e+00 0.000000e+00 +502: 0.000000e+00 0.000000e+00 +503: 0.000000e+00 0.000000e+00 +504: 0.000000e+00 0.000000e+00 +505: 0.000000e+00 0.000000e+00 +506: 0.000000e+00 0.000000e+00 +507: 0.000000e+00 0.000000e+00 +508: 0.000000e+00 0.000000e+00 +509: 0.000000e+00 0.000000e+00 +510: 0.000000e+00 0.000000e+00 +511: 0.000000e+00 0.000000e+00 +512: 0.000000e+00 0.000000e+00 +513: 0.000000e+00 0.000000e+00 +514: 0.000000e+00 0.000000e+00 +515: 0.000000e+00 0.000000e+00 +516: 0.000000e+00 0.000000e+00 +517: 0.000000e+00 0.000000e+00 +518: 0.000000e+00 0.000000e+00 +519: 0.000000e+00 0.000000e+00 +520: 0.000000e+00 0.000000e+00 +521: 0.000000e+00 0.000000e+00 +522: 0.000000e+00 0.000000e+00 +523: 0.000000e+00 0.000000e+00 +524: 0.000000e+00 0.000000e+00 +525: 0.000000e+00 0.000000e+00 +526: 0.000000e+00 0.000000e+00 +527: 0.000000e+00 0.000000e+00 +528: 0.000000e+00 0.000000e+00 +529: 0.000000e+00 0.000000e+00 +530: 0.000000e+00 0.000000e+00 +531: 0.000000e+00 0.000000e+00 +532: 0.000000e+00 0.000000e+00 +533: 0.000000e+00 0.000000e+00 +534: 0.000000e+00 0.000000e+00 +535: 0.000000e+00 0.000000e+00 +536: 0.000000e+00 0.000000e+00 +537: 0.000000e+00 0.000000e+00 +538: 0.000000e+00 0.000000e+00 +539: 0.000000e+00 0.000000e+00 +540: 0.000000e+00 0.000000e+00 +541: 0.000000e+00 0.000000e+00 +542: 0.000000e+00 0.000000e+00 +543: 0.000000e+00 0.000000e+00 +544: 0.000000e+00 0.000000e+00 +545: 0.000000e+00 0.000000e+00 +546: 0.000000e+00 0.000000e+00 +547: 0.000000e+00 0.000000e+00 +548: 0.000000e+00 0.000000e+00 +549: 0.000000e+00 0.000000e+00 +550: 0.000000e+00 0.000000e+00 +551: 0.000000e+00 0.000000e+00 +552: 0.000000e+00 0.000000e+00 +553: 0.000000e+00 0.000000e+00 +554: 0.000000e+00 0.000000e+00 +555: 0.000000e+00 0.000000e+00 +556: 0.000000e+00 0.000000e+00 +557: 0.000000e+00 0.000000e+00 +558: 0.000000e+00 0.000000e+00 +559: 0.000000e+00 0.000000e+00 +560: 0.000000e+00 0.000000e+00 +561: 0.000000e+00 0.000000e+00 +562: 0.000000e+00 0.000000e+00 +563: 0.000000e+00 0.000000e+00 +564: 0.000000e+00 0.000000e+00 +565: 0.000000e+00 0.000000e+00 +566: 0.000000e+00 0.000000e+00 +567: 0.000000e+00 0.000000e+00 +568: 0.000000e+00 0.000000e+00 +569: 0.000000e+00 0.000000e+00 +570: 0.000000e+00 0.000000e+00 +571: 0.000000e+00 0.000000e+00 +572: 0.000000e+00 0.000000e+00 +573: 0.000000e+00 0.000000e+00 +574: 0.000000e+00 0.000000e+00 +575: 0.000000e+00 0.000000e+00 +576: 0.000000e+00 0.000000e+00 +577: 0.000000e+00 0.000000e+00 +578: 0.000000e+00 0.000000e+00 +579: 0.000000e+00 0.000000e+00 +580: 0.000000e+00 0.000000e+00 +581: 0.000000e+00 0.000000e+00 +582: 0.000000e+00 0.000000e+00 +583: 0.000000e+00 0.000000e+00 +584: 0.000000e+00 0.000000e+00 +585: 0.000000e+00 0.000000e+00 +586: 0.000000e+00 0.000000e+00 +587: 0.000000e+00 0.000000e+00 +588: 0.000000e+00 0.000000e+00 +589: 0.000000e+00 0.000000e+00 +590: 0.000000e+00 0.000000e+00 +591: 0.000000e+00 0.000000e+00 +592: 0.000000e+00 0.000000e+00 +593: 0.000000e+00 0.000000e+00 +594: 0.000000e+00 0.000000e+00 +595: 0.000000e+00 0.000000e+00 +596: 0.000000e+00 0.000000e+00 +597: 0.000000e+00 0.000000e+00 +598: 0.000000e+00 0.000000e+00 +599: 0.000000e+00 0.000000e+00 +600: 0.000000e+00 0.000000e+00 +601: 0.000000e+00 0.000000e+00 +602: 0.000000e+00 0.000000e+00 +603: 0.000000e+00 0.000000e+00 +604: 0.000000e+00 0.000000e+00 +605: 0.000000e+00 0.000000e+00 +606: 0.000000e+00 0.000000e+00 +607: 0.000000e+00 0.000000e+00 +608: 0.000000e+00 0.000000e+00 +609: 0.000000e+00 0.000000e+00 +610: 0.000000e+00 0.000000e+00 +611: 0.000000e+00 0.000000e+00 +612: 0.000000e+00 0.000000e+00 +613: 0.000000e+00 0.000000e+00 +614: 0.000000e+00 0.000000e+00 +615: 0.000000e+00 0.000000e+00 +616: 0.000000e+00 0.000000e+00 +617: 0.000000e+00 0.000000e+00 +618: 0.000000e+00 0.000000e+00 +619: 0.000000e+00 0.000000e+00 +620: 1.000000e+00 0.000000e+00 +621: 1.000000e+00 0.000000e+00 +622: 1.000000e+00 0.000000e+00 +623: 1.000000e+00 0.000000e+00 +624: 1.000000e+00 0.000000e+00 +625: 1.000000e+00 0.000000e+00 +626: 1.000000e+00 0.000000e+00 +627: 1.000000e+00 0.000000e+00 +628: 1.000000e+00 0.000000e+00 +629: 1.000000e+00 0.000000e+00 + +# factor 0: 7 +# factor 1: 6 +# factor 2: 5 +# factor 3: 3 +0: 2.100000e+01 0.000000e+00 +1: 2.096173e+01 -1.051242e-15 +2: 2.084715e+01 1.373901e-15 +3: 2.065704e+01 6.383782e-16 +4: 2.039261e+01 6.397660e-15 +5: 2.005560e+01 5.939693e-15 +6: 1.964821e+01 7.355228e-15 +7: 1.917307e+01 6.383782e-16 +8: 1.863328e+01 -5.273559e-16 +9: 1.803232e+01 1.887379e-15 +10: 1.737406e+01 6.661338e-16 +11: 1.666272e+01 4.884981e-15 +12: 1.590285e+01 5.273559e-15 +13: 1.509927e+01 5.939693e-15 +14: 1.425706e+01 1.165734e-15 +15: 1.338149e+01 8.326673e-16 +16: 1.247803e+01 2.081668e-15 +17: 1.155225e+01 7.494005e-16 +18: 1.060982e+01 3.039236e-15 +19: 9.656443e+00 4.177214e-15 +20: 8.697842e+00 3.788636e-15 +21: 7.739681e+00 1.110223e-15 +22: 6.787549e+00 8.604228e-16 +23: 5.846909e+00 1.748601e-15 +24: 4.923063e+00 1.387779e-16 +25: 4.021112e+00 7.216450e-16 +26: 3.145923e+00 1.942890e-15 +27: 2.302090e+00 1.276756e-15 +28: 1.493907e+00 -1.665335e-16 +29: 7.253407e-01 -5.551115e-16 +30: -6.661338e-16 -2.220446e-16 +31: -6.788825e-01 -1.221245e-15 +32: -1.308472e+00 -2.498002e-15 +33: -1.886344e+00 -1.110223e-15 +34: -2.410503e+00 -2.220446e-15 +35: -2.879385e+00 -1.276756e-15 +36: -3.291865e+00 -1.332268e-15 +37: -3.647260e+00 -1.165734e-15 +38: -3.945325e+00 -3.108624e-15 +39: -4.186247e+00 -4.662937e-15 +40: -4.370640e+00 -3.774758e-15 +41: -4.499527e+00 -3.552714e-15 +42: -4.574329e+00 -2.220446e-16 +43: -4.596844e+00 -6.277699e-17 +44: -4.569225e+00 -3.979137e-16 +45: -4.493959e+00 -6.125144e-16 +46: -4.373836e+00 -2.588272e-15 +47: -4.211924e+00 -1.708533e-15 +48: -4.011536e+00 -1.610301e-15 +49: -3.776200e+00 -6.521231e-16 +50: -3.509623e+00 -9.518362e-16 +51: -3.215658e+00 -8.615412e-16 +52: -2.898269e+00 -8.023074e-16 +53: -2.561495e+00 -1.295581e-15 +54: -2.209413e+00 -1.882798e-15 +55: -1.846105e+00 -1.309680e-15 +56: -1.475622e+00 -8.731621e-17 +57: -1.101950e+00 -6.064088e-16 +58: -7.289764e-01 -5.283445e-16 +59: -3.604599e-01 -3.700906e-16 +60: -2.480852e-16 -3.217778e-16 +61: 3.489905e-01 -3.427744e-16 +62: 6.833118e-01 -5.628327e-17 +63: 1.000000e+00 9.525275e-17 +64: 1.296348e+00 -1.015236e-16 +65: 1.569925e+00 1.617614e-16 +66: 1.818588e+00 1.651517e-16 +67: 2.040501e+00 8.832176e-16 +68: 2.234139e+00 7.155281e-16 +69: 2.398296e+00 8.060351e-16 +70: 2.532089e+00 9.180115e-16 +71: 2.634960e+00 2.633349e-16 +72: 2.706672e+00 1.187041e-15 +73: 2.747304e+00 3.755772e-16 +74: 2.757241e+00 8.376828e-16 +75: 2.737169e+00 2.203930e-15 +76: 2.688054e+00 1.197283e-15 +77: 2.611133e+00 -2.998065e-16 +78: 2.507892e+00 -9.785191e-16 +79: 2.380048e+00 -9.898606e-16 +80: 2.229526e+00 -5.077927e-16 +81: 2.058436e+00 -5.413850e-16 +82: 1.869051e+00 6.993526e-16 +83: 1.663775e+00 -4.736301e-16 +84: 1.445125e+00 1.110223e-16 +85: 1.215696e+00 -2.373302e-16 +86: 9.781383e-01 2.565092e-16 +87: 7.351295e-01 -2.522207e-16 +88: 4.893460e-01 -1.473382e-16 +89: 2.434373e-01 1.109184e-15 +90: -1.989431e-15 -3.411591e-16 +91: -2.384474e-01 -5.318012e-16 +92: -4.694881e-01 2.328401e-16 +93: -6.908292e-01 -8.646065e-17 +94: -9.003229e-01 -7.857807e-16 +95: -1.095985e+00 -1.799037e-15 +96: -1.276012e+00 -2.161196e-16 +97: -1.438796e+00 -9.983452e-16 +98: -1.582939e+00 -6.065732e-16 +99: -1.707260e+00 2.152265e-16 +100: -1.810806e+00 -3.264639e-16 +101: -1.892859e+00 -5.055122e-16 +102: -1.952933e+00 -2.036075e-15 +103: -1.990783e+00 -1.452785e-15 +104: -2.006398e+00 -1.506787e-15 +105: -2.000000e+00 -3.771208e-16 +106: -1.972036e+00 3.323489e-16 +107: -1.923170e+00 -7.476386e-16 +108: -1.854275e+00 -9.508935e-17 +109: -1.766419e+00 -1.940360e-15 +110: -1.660850e+00 -1.760991e-15 +111: -1.538980e+00 -6.147117e-16 +112: -1.402374e+00 -8.585493e-16 +113: -1.252721e+00 -3.300750e-16 +114: -1.091826e+00 -1.311000e-15 +115: -9.215804e-01 -4.440252e-16 +116: -7.439464e-01 -2.073484e-15 +117: -5.609343e-01 -2.601855e-15 +118: -3.745807e-01 -8.979032e-16 +119: -1.869274e-01 2.912711e-16 +120: -1.715798e-15 5.664477e-16 +121: 1.842128e-01 1.230585e-16 +122: 3.637795e-01 1.061285e-15 +123: 5.368447e-01 8.829804e-16 +124: 7.016480e-01 -4.939307e-16 +125: 8.565403e-01 1.392795e-15 +126: 1.000000e+00 0.000000e+00 +127: 1.130647e+00 -1.528557e-17 +128: 1.247255e+00 -4.291169e-16 +129: 1.348762e+00 3.223830e-16 +130: 1.434281e+00 -6.912208e-16 +131: 1.503106e+00 -1.380961e-15 +132: 1.554714e+00 1.253781e-16 +133: 1.588775e+00 -1.792421e-16 +134: 1.605146e+00 -6.501297e-16 +135: 1.603875e+00 2.105874e-16 +136: 1.585197e+00 1.751581e-16 +137: 1.549526e+00 1.205978e-16 +138: 1.497454e+00 -1.026329e-15 +139: 1.429739e+00 2.034781e-17 +140: 1.347296e+00 -4.955509e-16 +141: 1.251187e+00 -1.428373e-15 +142: 1.142604e+00 -3.568238e-16 +143: 1.022861e+00 -3.836222e-16 +144: 8.933738e-01 -6.389491e-16 +145: 7.556456e-01 -1.247492e-15 +146: 6.112512e-01 -8.130105e-16 +147: 4.618187e-01 8.646065e-17 +148: 3.090116e-01 -6.532673e-16 +149: 1.545116e-01 -1.839025e-16 +150: -6.539201e-17 1.134394e-16 +151: -1.528597e-01 -3.883800e-16 +152: -3.024391e-01 -9.790769e-16 +153: -4.471621e-01 -3.570986e-16 +154: -5.855204e-01 -3.154104e-17 +155: -7.160894e-01 -3.803775e-16 +156: -8.375420e-01 -1.423005e-16 +157: -9.486618e-01 9.467191e-16 +158: -1.048355e+00 -1.075184e-15 +159: -1.135660e+00 2.958649e-16 +160: -1.209758e+00 -7.434995e-16 +161: -1.269978e+00 -1.197924e-15 +162: -1.315804e+00 -2.483837e-15 +163: -1.346880e+00 -1.986506e-15 +164: -1.363010e+00 -2.273250e-15 +165: -1.364160e+00 -3.362421e-15 +166: -1.350455e+00 -2.707155e-15 +167: -1.322180e+00 -2.640979e-15 +168: -1.279773e+00 2.220446e-16 +169: -1.223817e+00 -5.068662e-16 +170: -1.155037e+00 1.680655e-16 +171: -1.074290e+00 7.088856e-16 +172: -9.825500e-01 -1.675164e-16 +173: -8.809036e-01 -2.262585e-16 +174: -7.705329e-01 1.660555e-16 +175: -6.527036e-01 4.472323e-16 +176: -5.287511e-01 7.307475e-16 +177: -4.000650e-01 -3.172974e-16 +178: -2.680744e-01 4.137293e-16 +179: -1.342324e-01 -6.064496e-16 +180: 6.742551e-16 -1.470733e-16 +181: 1.331690e-01 1.504979e-16 +182: 2.638437e-01 -8.731621e-17 +183: 3.906312e-01 3.207541e-16 +184: 5.121908e-01 -7.590137e-16 +185: 6.272483e-01 -1.424316e-16 +186: 7.346089e-01 -7.936247e-16 +187: 8.331694e-01 -8.288514e-16 +188: 9.219291e-01 -6.631544e-16 +189: 1.000000e+00 -7.482822e-16 +190: 1.066615e+00 -2.159362e-16 +191: 1.121136e+00 -3.681989e-16 +192: 1.163060e+00 -9.267006e-16 +193: 1.192020e+00 -6.361458e-16 +194: 1.207795e+00 -1.250618e-15 +195: 1.210304e+00 -2.498760e-15 +196: 1.199610e+00 -1.082633e-15 +197: 1.175919e+00 -1.051684e-15 +198: 1.139572e+00 -2.953387e-15 +199: 1.091048e+00 -1.988494e-15 +200: 1.030951e+00 -2.573996e-15 +201: 9.600058e-01 -2.506964e-15 +202: 8.790504e-01 -2.525727e-15 +203: 7.890244e-01 -1.430320e-15 +204: 6.909592e-01 -7.940139e-16 +205: 5.859667e-01 -1.448806e-15 +206: 4.752260e-01 -3.331757e-15 +207: 3.599714e-01 -2.696823e-15 +208: 2.414782e-01 -1.273025e-15 +209: 1.210491e-01 -3.884812e-15 +210: 0.000000e+00 0.000000e+00 +211: -1.203541e-01 9.367507e-17 +212: -2.387131e-01 -8.326673e-17 +213: -3.538059e-01 -1.671241e-15 +214: -4.644036e-01 -1.032863e-15 +215: -5.693324e-01 -5.551115e-17 +216: -6.674861e-01 -2.656564e-15 +217: -7.578373e-01 -1.046741e-15 +218: -8.394483e-01 5.748960e-16 +219: -9.114803e-01 -1.110223e-16 +220: -9.732024e-01 -6.661338e-16 +221: -1.023998e+00 -4.440892e-16 +222: -1.063373e+00 -5.551115e-17 +223: -1.090956e+00 -3.092682e-15 +224: -1.106507e+00 -1.665335e-16 +225: -1.109916e+00 -3.330669e-16 +226: -1.101205e+00 -8.524518e-16 +227: -1.080526e+00 -1.352052e-15 +228: -1.048159e+00 -6.760261e-16 +229: -1.004510e+00 -3.707147e-16 +230: -9.501041e-01 -1.643486e-15 +231: -8.855794e-01 -7.731706e-16 +232: -8.116813e-01 -4.718448e-16 +233: -7.292528e-01 -6.343927e-16 +234: -6.392251e-01 -1.213274e-15 +235: -5.426076e-01 -1.354045e-15 +236: -4.404764e-01 2.775558e-17 +237: -3.339626e-01 -1.586978e-15 +238: -2.242400e-01 -3.845925e-16 +239: -1.125123e-01 2.200518e-16 +240: -2.369188e-16 -4.916293e-16 +241: 1.120728e-01 -3.439556e-16 +242: 2.224913e-01 -4.163336e-16 +243: 3.300635e-01 3.885781e-16 +244: 4.336325e-01 3.221783e-16 +245: 5.320889e-01 -2.131487e-16 +246: 6.243825e-01 5.134066e-16 +247: 7.095336e-01 5.709105e-16 +248: 7.866431e-01 7.096884e-16 +249: 8.549018e-01 3.468732e-16 +250: 9.135989e-01 1.042755e-15 +251: 9.621294e-01 1.342088e-15 +252: 1.000000e+00 3.033186e-16 +253: 1.026834e+00 2.702899e-16 +254: 1.042376e+00 6.785755e-16 +255: 1.046493e+00 5.789826e-16 +256: 1.039174e+00 1.089270e-15 +257: 1.020536e+00 3.671570e-16 +258: 9.908126e-01 4.396257e-16 +259: 9.503608e-01 3.728405e-16 +260: 8.996505e-01 3.804314e-16 +261: 8.392616e-01 -2.887396e-17 +262: 7.698769e-01 4.595749e-16 +263: 6.922746e-01 9.020201e-16 +264: 6.073198e-01 2.890403e-16 +265: 5.159547e-01 -3.175108e-18 +266: 4.191883e-01 3.195876e-16 +267: 3.180856e-01 1.301103e-16 +268: 2.137557e-01 5.687302e-16 +269: 1.073401e-01 6.100192e-16 +270: -2.894407e-16 5.826677e-16 +271: -1.070960e-01 -2.616340e-16 +272: -2.127847e-01 -1.107472e-15 +273: -3.159206e-01 -3.949178e-16 +274: -4.153883e-01 -4.401969e-17 +275: -5.101143e-01 5.618340e-17 +276: -5.990789e-01 -8.538336e-16 +277: -6.813264e-01 5.927817e-18 +278: -7.559760e-01 -1.212488e-15 +279: -8.222306e-01 -1.417329e-15 +280: -8.793852e-01 -6.323152e-16 +281: -9.268349e-01 2.641613e-17 +282: -9.640807e-01 -3.563825e-16 +283: -9.907347e-01 -2.201713e-16 +284: -1.006524e+00 -1.872807e-16 +285: -1.011295e+00 -1.030591e-15 +286: -1.005012e+00 -1.762599e-15 +287: -9.877604e-01 -1.287051e-15 +288: -9.597424e-01 8.416380e-17 +289: -9.212779e-01 -5.229262e-16 +290: -8.727990e-01 -6.623696e-16 +291: -8.148456e-01 -5.929106e-16 +292: -7.480596e-01 -1.254426e-15 +293: -6.731776e-01 -1.896992e-15 +294: -5.910229e-01 -1.516593e-16 +295: -5.024970e-01 2.399589e-16 +296: -4.085691e-01 -2.688540e-16 +297: -3.102660e-01 -3.933898e-17 +298: -2.086610e-01 -8.122086e-16 +299: -1.048621e-01 -8.027307e-16 +300: 7.718245e-16 -3.315040e-16 +301: 1.047837e-01 3.818447e-17 +302: 2.083493e-01 -1.594565e-16 +303: 3.095711e-01 -1.937644e-16 +304: 4.073493e-01 -2.527135e-16 +305: 5.006223e-01 -1.132903e-15 +306: 5.883777e-01 -1.074550e-15 +307: 6.696634e-01 2.412259e-16 +308: 7.435978e-01 4.441532e-16 +309: 8.093792e-01 4.332855e-16 +310: 8.662947e-01 1.765880e-16 +311: 9.137272e-01 4.971401e-16 +312: 9.511629e-01 -3.896002e-16 +313: 9.781962e-01 2.715655e-17 +314: 9.945343e-01 8.315841e-16 +315: 1.000000e+00 3.405386e-16 +316: 9.945343e-01 4.577114e-16 +317: 9.781962e-01 2.807765e-16 +318: 9.511629e-01 4.560366e-16 +319: 9.137272e-01 -1.015889e-16 +320: 8.662947e-01 2.889358e-16 +321: 8.093792e-01 9.202069e-16 +322: 7.435978e-01 -3.847117e-16 +323: 6.696634e-01 -6.442822e-16 +324: 5.883777e-01 9.510423e-17 +325: 5.006223e-01 -5.178621e-16 +326: 4.073493e-01 -2.175789e-16 +327: 3.095711e-01 -2.918347e-16 +328: 2.083493e-01 -1.411991e-16 +329: 1.047837e-01 1.072074e-15 +330: -9.220486e-16 4.483855e-17 +331: -1.048621e-01 3.913489e-16 +332: -2.086610e-01 3.703136e-16 +333: -3.102660e-01 -5.325539e-16 +334: -4.085691e-01 -5.660418e-16 +335: -5.024970e-01 -9.996290e-16 +336: -5.910229e-01 -7.211110e-17 +337: -6.731776e-01 -4.239151e-16 +338: -7.480596e-01 -9.777574e-17 +339: -8.148456e-01 -6.837208e-16 +340: -8.727990e-01 -2.689088e-16 +341: -9.212779e-01 -8.882634e-16 +342: -9.597424e-01 -1.457615e-15 +343: -9.877604e-01 -4.711380e-16 +344: -1.005012e+00 -4.166625e-16 +345: -1.011295e+00 -1.465166e-16 +346: -1.006524e+00 -6.866384e-17 +347: -9.907347e-01 -7.860160e-17 +348: -9.640807e-01 -3.190243e-16 +349: -9.268349e-01 -1.562645e-15 +350: -8.793852e-01 -6.689875e-16 +351: -8.222306e-01 -4.120382e-16 +352: -7.559760e-01 -6.006457e-16 +353: -6.813264e-01 -1.082422e-15 +354: -5.990789e-01 -3.007668e-16 +355: -5.101143e-01 -1.113625e-15 +356: -4.153883e-01 -1.059421e-15 +357: -3.159206e-01 -2.723691e-16 +358: -2.127847e-01 -8.842800e-17 +359: -1.070960e-01 -8.046626e-17 +360: -1.906317e-16 -4.332091e-16 +361: 1.073401e-01 -2.998168e-17 +362: 2.137557e-01 -9.919583e-16 +363: 3.180856e-01 -5.691174e-16 +364: 4.191883e-01 -2.426970e-16 +365: 5.159547e-01 -3.323034e-16 +366: 6.073198e-01 5.066994e-16 +367: 6.922746e-01 6.240069e-16 +368: 7.698769e-01 -3.540730e-16 +369: 8.392616e-01 2.615971e-16 +370: 8.996505e-01 2.214334e-16 +371: 9.503608e-01 -1.437466e-16 +372: 9.908126e-01 7.610382e-16 +373: 1.020536e+00 6.918356e-16 +374: 1.039174e+00 1.404292e-15 +375: 1.046493e+00 6.516396e-16 +376: 1.042376e+00 1.124964e-15 +377: 1.026834e+00 1.764577e-15 +378: 1.000000e+00 4.899035e-16 +379: 9.621294e-01 1.117297e-15 +380: 9.135989e-01 2.951538e-16 +381: 8.549018e-01 4.273443e-16 +382: 7.866431e-01 -2.086873e-16 +383: 7.095336e-01 1.243452e-15 +384: 6.243825e-01 5.610027e-16 +385: 5.320889e-01 2.120393e-16 +386: 4.336325e-01 4.199919e-16 +387: 3.300635e-01 1.840288e-16 +388: 2.224913e-01 -8.919745e-16 +389: 1.120728e-01 -3.674045e-16 +390: 3.723582e-16 1.676634e-16 +391: -1.125123e-01 -7.950819e-16 +392: -2.242400e-01 -3.173938e-16 +393: -3.339626e-01 -1.822978e-16 +394: -4.404764e-01 -7.659168e-16 +395: -5.426076e-01 -1.206964e-15 +396: -6.392251e-01 -1.343149e-15 +397: -7.292528e-01 -1.765238e-16 +398: -8.116813e-01 -2.792220e-15 +399: -8.855794e-01 -1.338977e-15 +400: -9.501041e-01 -9.920244e-16 +401: -1.004510e+00 -2.009620e-15 +402: -1.048159e+00 -2.005039e-15 +403: -1.080526e+00 -2.305180e-15 +404: -1.101205e+00 -1.099740e-15 +405: -1.109916e+00 -3.130874e-15 +406: -1.106507e+00 -1.687134e-15 +407: -1.090956e+00 -1.656185e-15 +408: -1.063373e+00 -1.085649e-15 +409: -1.023998e+00 -2.991394e-15 +410: -9.732024e-01 -1.503056e-15 +411: -9.114803e-01 -1.614514e-15 +412: -8.394483e-01 -4.325425e-15 +413: -7.578373e-01 -1.100952e-15 +414: -6.674861e-01 -1.412321e-15 +415: -5.693324e-01 -1.504031e-15 +416: -4.644036e-01 -1.876225e-15 +417: -3.538059e-01 -1.268903e-15 +418: -2.387131e-01 -1.355863e-15 +419: -1.203541e-01 -3.610669e-15 +420: 0.000000e+00 0.000000e+00 +421: 1.210491e-01 9.367507e-17 +422: 2.414782e-01 -8.326673e-17 +423: 3.599714e-01 -1.328711e-16 +424: 4.752260e-01 5.055071e-16 +425: 5.859667e-01 -5.551115e-17 +426: 6.909592e-01 -1.118194e-15 +427: 7.890244e-01 4.916293e-16 +428: 8.790504e-01 -9.634741e-16 +429: 9.600058e-01 -1.110223e-16 +430: 1.030951e+00 -6.661338e-16 +431: 1.091048e+00 -4.440892e-16 +432: 1.139572e+00 -5.551115e-17 +433: 1.175919e+00 -1.594209e-17 +434: 1.199610e+00 -1.665335e-16 +435: 1.210304e+00 -3.330669e-16 +436: 1.207795e+00 6.859183e-16 +437: 1.192020e+00 1.863180e-16 +438: 1.163060e+00 9.315899e-17 +439: 1.121136e+00 3.984703e-16 +440: 1.066615e+00 -1.051156e-16 +441: 1.000000e+00 -3.985521e-18 +442: 9.219291e-01 -4.718448e-16 +443: 8.331694e-01 1.347924e-16 +444: 7.346089e-01 3.250959e-16 +445: 6.272483e-01 -2.002673e-16 +446: 5.121908e-01 2.775558e-17 +447: 3.906312e-01 1.436882e-16 +448: 2.638437e-01 3.845925e-16 +449: 1.331690e-01 -1.645407e-16 +450: -4.292150e-16 1.046741e-15 +451: -1.342324e-01 2.329333e-16 +452: -2.680744e-01 -4.163336e-16 +453: -4.000650e-01 3.885781e-16 +454: -5.287511e-01 8.990671e-16 +455: -6.527036e-01 -1.174630e-15 +456: -7.705329e-01 -2.178741e-15 +457: -8.809036e-01 -1.736645e-15 +458: -9.825500e-01 -1.597867e-15 +459: -1.074290e+00 -2.345275e-15 +460: -1.155037e+00 -1.264800e-15 +461: -1.223817e+00 -2.119244e-15 +462: -1.279773e+00 -8.127397e-17 +463: -1.322180e+00 2.702899e-16 +464: -1.350455e+00 -4.752021e-16 +465: -1.364160e+00 1.943900e-16 +466: -1.363010e+00 -1.602877e-15 +467: -1.346880e+00 -7.866206e-16 +468: -1.315804e+00 -3.295594e-16 +469: -1.269978e+00 -1.175205e-17 +470: -1.209758e+00 3.804314e-16 +471: -1.135660e+00 -2.887396e-17 +472: -1.048355e+00 2.672787e-16 +473: -9.486618e-01 -8.286463e-16 +474: -8.375420e-01 -1.057034e-15 +475: -7.160894e-01 3.814174e-16 +476: -5.855204e-01 -1.611531e-16 +477: -4.471621e-01 3.224066e-16 +478: -3.024391e-01 3.991542e-17 +479: -1.528597e-01 2.735007e-16 +480: 1.536727e-15 -6.379847e-16 +481: 1.545116e-01 -1.006782e-15 +482: 3.090116e-01 9.116388e-16 +483: 4.618187e-01 8.582290e-17 +484: 6.112512e-01 3.405728e-16 +485: 7.556456e-01 -2.322610e-16 +486: 8.933738e-01 6.845365e-16 +487: 1.022861e+00 -5.709610e-16 +488: 1.142604e+00 -1.020192e-15 +489: 1.251187e+00 6.979304e-16 +490: 1.347296e+00 1.368698e-16 +491: 1.429739e+00 -1.658801e-16 +492: 1.497454e+00 -9.332713e-16 +493: 1.549526e+00 -2.787505e-17 +494: 1.585197e+00 1.973118e-16 +495: 1.603875e+00 -1.222888e-15 +496: 1.605146e+00 1.603633e-16 +497: 1.588775e+00 1.020505e-15 +498: 1.554714e+00 1.622534e-15 +499: 1.503106e+00 1.207740e-15 +500: 1.434281e+00 1.645186e-15 +501: 1.348762e+00 1.762744e-16 +502: 1.247255e+00 -6.775376e-16 +503: 1.130647e+00 1.948933e-15 +504: 1.000000e+00 4.063698e-17 +505: 8.565403e-01 -4.848547e-17 +506: 7.016480e-01 1.157385e-16 +507: 5.368447e-01 2.010314e-16 +508: 3.637795e-01 1.011987e-16 +509: 1.842128e-01 -8.508047e-16 +510: 2.184058e-16 3.826635e-16 +511: -1.869274e-01 2.304807e-16 +512: -3.745807e-01 -2.075306e-16 +513: -5.609343e-01 -1.456903e-16 +514: -7.439464e-01 1.799531e-16 +515: -9.215804e-01 -1.132903e-15 +516: -1.091826e+00 -6.899572e-16 +517: -1.252721e+00 -2.395148e-16 +518: -1.402374e+00 -3.250319e-16 +519: -1.538980e+00 -3.358995e-16 +520: -1.660850e+00 -4.964489e-16 +521: -1.766419e+00 -1.758968e-16 +522: -1.854275e+00 -1.351082e-15 +523: -1.923170e+00 -9.343248e-16 +524: -1.972036e+00 -5.144897e-16 +525: -2.000000e+00 -4.286464e-16 +526: -2.006398e+00 -7.922144e-16 +527: -1.990783e+00 -7.768530e-16 +528: -1.952933e+00 -3.131484e-16 +529: -1.892859e+00 -1.447663e-15 +530: -1.810806e+00 -4.802492e-16 +531: -1.707260e+00 -1.483496e-15 +532: -1.582939e+00 -1.191984e-19 +533: -1.438796e+00 3.171992e-16 +534: -1.276012e+00 -3.856364e-16 +535: -1.095985e+00 -3.712144e-17 +536: -9.003229e-01 -2.656530e-16 +537: -6.908292e-01 -7.485384e-16 +538: -4.694881e-01 -4.056065e-16 +539: -2.384474e-01 -1.571999e-15 +540: -6.928228e-16 -1.164851e-15 +541: 2.434373e-01 -8.946324e-16 +542: 4.893460e-01 -1.744945e-15 +543: 7.351295e-01 -5.325539e-16 +544: 9.781383e-01 -4.218196e-16 +545: 1.215696e+00 -7.111846e-16 +546: 1.445125e+00 7.211110e-17 +547: 1.663775e+00 3.933440e-16 +548: 1.869051e+00 2.387427e-16 +549: 2.058436e+00 6.623531e-16 +550: 2.229526e+00 8.848688e-16 +551: 2.380048e+00 4.578105e-16 +552: 2.507892e+00 1.042237e-15 +553: 2.611133e+00 7.787877e-16 +554: 2.688054e+00 4.486707e-16 +555: 2.737169e+00 -9.844252e-17 +556: 2.757241e+00 1.085114e-15 +557: 2.747304e+00 1.652065e-15 +558: 2.706672e+00 9.309014e-16 +559: 2.634960e+00 9.372066e-16 +560: 2.532089e+00 6.770864e-16 +561: 2.398296e+00 8.859616e-16 +562: 2.234139e+00 5.531319e-16 +563: 2.040501e+00 6.482444e-16 +564: 1.818588e+00 1.021270e-15 +565: 1.569925e+00 6.170418e-16 +566: 1.296348e+00 5.991342e-16 +567: 1.000000e+00 1.122235e-16 +568: 6.833118e-01 -5.237245e-17 +569: 3.489905e-01 4.572817e-17 +570: 1.255224e-15 -1.911841e-16 +571: -3.604599e-01 -3.304446e-16 +572: -7.289764e-01 -7.996621e-16 +573: -1.101950e+00 -9.777470e-16 +574: -1.475622e+00 -8.195858e-16 +575: -1.846105e+00 -4.284516e-16 +576: -2.209413e+00 -7.913004e-16 +577: -2.561495e+00 -1.395104e-15 +578: -2.898269e+00 -1.796295e-15 +579: -3.215658e+00 -2.334403e-15 +580: -3.509623e+00 -2.374566e-15 +581: -3.776200e+00 -1.585969e-15 +582: -4.011536e+00 -1.065776e-15 +583: -4.211924e+00 -2.000312e-15 +584: -4.373836e+00 -1.287856e-15 +585: -4.493959e+00 -2.713545e-15 +586: -4.569225e+00 -3.874739e-15 +587: -4.596844e+00 -3.715867e-15 +588: -4.574329e+00 -7.119481e-16 +589: -4.499527e+00 -1.326284e-16 +590: -4.370640e+00 -1.291290e-15 +591: -4.186247e+00 -3.418408e-16 +592: -3.945325e+00 -1.458613e-15 +593: -3.647260e+00 -2.362103e-15 +594: -3.291865e+00 -2.227293e-15 +595: -2.879385e+00 -3.167754e-16 +596: -2.410503e+00 7.084363e-16 +597: -1.886344e+00 -1.524897e-16 +598: -1.308472e+00 8.867659e-16 +599: -6.788825e-01 5.700398e-16 +600: 3.116723e-15 -1.372575e-16 +601: 7.253407e-01 3.466772e-16 +602: 1.493907e+00 4.758283e-16 +603: 2.302090e+00 4.907391e-16 +604: 3.145923e+00 5.801571e-16 +605: 4.021112e+00 2.254369e-15 +606: 4.923063e+00 3.752702e-15 +607: 5.846909e+00 2.515624e-15 +608: 6.787549e+00 4.130446e-15 +609: 7.739681e+00 2.506948e-15 +610: 8.697842e+00 1.892420e-15 +611: 9.656443e+00 2.605490e-15 +612: 1.060982e+01 4.148441e-15 +613: 1.155225e+01 7.694226e-15 +614: 1.247803e+01 6.592110e-15 +615: 1.338149e+01 8.791495e-15 +616: 1.425706e+01 4.850939e-15 +617: 1.509927e+01 4.881888e-15 +618: 1.590285e+01 5.837016e-15 +619: 1.666272e+01 7.008012e-15 +620: 1.737406e+01 1.234228e-14 +621: 1.803232e+01 9.923262e-15 +622: 1.863328e+01 1.259665e-14 +623: 1.917307e+01 8.898454e-15 +624: 1.964821e+01 7.817899e-15 +625: 2.005560e+01 9.264560e-15 +626: 2.039261e+01 1.119992e-14 +627: 2.065704e+01 1.719154e-14 +628: 2.084715e+01 1.479702e-14 +629: 2.096173e+01 1.715733e-14 diff -Nru gsl-doc-1.16/doc/examples/fftreal.txt gsl-doc-2.3/doc/examples/fftreal.txt --- gsl-doc-1.16/doc/examples/fftreal.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/fftreal.txt 2015-11-10 18:14:51.000000000 +0000 @@ -0,0 +1,201 @@ +0: 0.000000e+00 +1: 0.000000e+00 +2: 0.000000e+00 +3: 0.000000e+00 +4: 0.000000e+00 +5: 0.000000e+00 +6: 0.000000e+00 +7: 0.000000e+00 +8: 0.000000e+00 +9: 0.000000e+00 +10: 0.000000e+00 +11: 0.000000e+00 +12: 0.000000e+00 +13: 0.000000e+00 +14: 0.000000e+00 +15: 0.000000e+00 +16: 0.000000e+00 +17: 0.000000e+00 +18: 0.000000e+00 +19: 0.000000e+00 +20: 0.000000e+00 +21: 0.000000e+00 +22: 0.000000e+00 +23: 0.000000e+00 +24: 0.000000e+00 +25: 0.000000e+00 +26: 0.000000e+00 +27: 0.000000e+00 +28: 0.000000e+00 +29: 0.000000e+00 +30: 0.000000e+00 +31: 0.000000e+00 +32: 0.000000e+00 +33: 1.000000e+00 +34: 1.000000e+00 +35: 1.000000e+00 +36: 1.000000e+00 +37: 1.000000e+00 +38: 1.000000e+00 +39: 1.000000e+00 +40: 1.000000e+00 +41: 1.000000e+00 +42: 1.000000e+00 +43: 1.000000e+00 +44: 1.000000e+00 +45: 1.000000e+00 +46: 1.000000e+00 +47: 1.000000e+00 +48: 1.000000e+00 +49: 1.000000e+00 +50: 1.000000e+00 +51: 1.000000e+00 +52: 1.000000e+00 +53: 1.000000e+00 +54: 1.000000e+00 +55: 1.000000e+00 +56: 1.000000e+00 +57: 1.000000e+00 +58: 1.000000e+00 +59: 1.000000e+00 +60: 1.000000e+00 +61: 1.000000e+00 +62: 1.000000e+00 +63: 1.000000e+00 +64: 1.000000e+00 +65: 1.000000e+00 +66: 0.000000e+00 +67: 0.000000e+00 +68: 0.000000e+00 +69: 0.000000e+00 +70: 0.000000e+00 +71: 0.000000e+00 +72: 0.000000e+00 +73: 0.000000e+00 +74: 0.000000e+00 +75: 0.000000e+00 +76: 0.000000e+00 +77: 0.000000e+00 +78: 0.000000e+00 +79: 0.000000e+00 +80: 0.000000e+00 +81: 0.000000e+00 +82: 0.000000e+00 +83: 0.000000e+00 +84: 0.000000e+00 +85: 0.000000e+00 +86: 0.000000e+00 +87: 0.000000e+00 +88: 0.000000e+00 +89: 0.000000e+00 +90: 0.000000e+00 +91: 0.000000e+00 +92: 0.000000e+00 +93: 0.000000e+00 +94: 0.000000e+00 +95: 0.000000e+00 +96: 0.000000e+00 +97: 0.000000e+00 +98: 0.000000e+00 +99: 0.000000e+00 + +0: 3.122705e-02 +1: 2.450194e-02 +2: 1.427646e-02 +3: 1.899536e-03 +4: -1.097701e-02 +5: -2.260263e-02 +6: -3.134804e-02 +7: -3.591554e-02 +8: -3.551489e-02 +9: -2.998321e-02 +10: -1.983327e-02 +11: -6.221841e-03 +12: 9.161253e-03 +13: 2.427436e-02 +14: 3.695824e-02 +15: 4.519985e-02 +16: 4.739798e-02 +17: 4.260194e-02 +18: 3.069621e-02 +19: 1.250816e-02 +20: -1.017626e-02 +21: -3.469604e-02 +22: -5.769429e-02 +23: -7.538051e-02 +24: -8.385398e-02 +25: -7.945977e-02 +26: -5.914429e-02 +27: -2.077636e-02 +28: 3.659819e-02 +29: 1.125953e-01 +30: 2.054434e-01 +31: 3.120546e-01 +32: 4.282146e-01 +33: 5.488770e-01 +34: 6.685387e-01 +35: 7.816653e-01 +36: 8.831282e-01 +37: 9.686159e-01 +38: 1.034981e+00 +39: 1.080492e+00 +40: 1.104967e+00 +41: 1.109770e+00 +42: 1.097677e+00 +43: 1.072623e+00 +44: 1.039334e+00 +45: 1.002904e+00 +46: 9.683306e-01 +47: 9.400659e-01 +48: 9.216117e-01 +49: 9.152040e-01 +50: 9.216117e-01 +51: 9.400659e-01 +52: 9.683306e-01 +53: 1.002904e+00 +54: 1.039334e+00 +55: 1.072623e+00 +56: 1.097677e+00 +57: 1.109770e+00 +58: 1.104967e+00 +59: 1.080492e+00 +60: 1.034981e+00 +61: 9.686159e-01 +62: 8.831282e-01 +63: 7.816653e-01 +64: 6.685387e-01 +65: 5.488770e-01 +66: 4.282146e-01 +67: 3.120546e-01 +68: 2.054434e-01 +69: 1.125953e-01 +70: 3.659819e-02 +71: -2.077636e-02 +72: -5.914429e-02 +73: -7.945977e-02 +74: -8.385398e-02 +75: -7.538051e-02 +76: -5.769429e-02 +77: -3.469604e-02 +78: -1.017626e-02 +79: 1.250816e-02 +80: 3.069621e-02 +81: 4.260194e-02 +82: 4.739798e-02 +83: 4.519985e-02 +84: 3.695824e-02 +85: 2.427436e-02 +86: 9.161253e-03 +87: -6.221841e-03 +88: -1.983327e-02 +89: -2.998321e-02 +90: -3.551489e-02 +91: -3.591554e-02 +92: -3.134804e-02 +93: -2.260263e-02 +94: -1.097701e-02 +95: 1.899536e-03 +96: 1.427646e-02 +97: 2.450194e-02 +98: 3.122705e-02 +99: 3.357077e-02 diff -Nru gsl-doc-1.16/doc/examples/fft.txt gsl-doc-2.3/doc/examples/fft.txt --- gsl-doc-1.16/doc/examples/fft.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/fft.txt 2015-11-10 18:12:54.000000000 +0000 @@ -0,0 +1,257 @@ +0 1.000000e+00 0.000000e+00 +1 1.000000e+00 0.000000e+00 +2 1.000000e+00 0.000000e+00 +3 1.000000e+00 0.000000e+00 +4 1.000000e+00 0.000000e+00 +5 1.000000e+00 0.000000e+00 +6 1.000000e+00 0.000000e+00 +7 1.000000e+00 0.000000e+00 +8 1.000000e+00 0.000000e+00 +9 1.000000e+00 0.000000e+00 +10 1.000000e+00 0.000000e+00 +11 0.000000e+00 0.000000e+00 +12 0.000000e+00 0.000000e+00 +13 0.000000e+00 0.000000e+00 +14 0.000000e+00 0.000000e+00 +15 0.000000e+00 0.000000e+00 +16 0.000000e+00 0.000000e+00 +17 0.000000e+00 0.000000e+00 +18 0.000000e+00 0.000000e+00 +19 0.000000e+00 0.000000e+00 +20 0.000000e+00 0.000000e+00 +21 0.000000e+00 0.000000e+00 +22 0.000000e+00 0.000000e+00 +23 0.000000e+00 0.000000e+00 +24 0.000000e+00 0.000000e+00 +25 0.000000e+00 0.000000e+00 +26 0.000000e+00 0.000000e+00 +27 0.000000e+00 0.000000e+00 +28 0.000000e+00 0.000000e+00 +29 0.000000e+00 0.000000e+00 +30 0.000000e+00 0.000000e+00 +31 0.000000e+00 0.000000e+00 +32 0.000000e+00 0.000000e+00 +33 0.000000e+00 0.000000e+00 +34 0.000000e+00 0.000000e+00 +35 0.000000e+00 0.000000e+00 +36 0.000000e+00 0.000000e+00 +37 0.000000e+00 0.000000e+00 +38 0.000000e+00 0.000000e+00 +39 0.000000e+00 0.000000e+00 +40 0.000000e+00 0.000000e+00 +41 0.000000e+00 0.000000e+00 +42 0.000000e+00 0.000000e+00 +43 0.000000e+00 0.000000e+00 +44 0.000000e+00 0.000000e+00 +45 0.000000e+00 0.000000e+00 +46 0.000000e+00 0.000000e+00 +47 0.000000e+00 0.000000e+00 +48 0.000000e+00 0.000000e+00 +49 0.000000e+00 0.000000e+00 +50 0.000000e+00 0.000000e+00 +51 0.000000e+00 0.000000e+00 +52 0.000000e+00 0.000000e+00 +53 0.000000e+00 0.000000e+00 +54 0.000000e+00 0.000000e+00 +55 0.000000e+00 0.000000e+00 +56 0.000000e+00 0.000000e+00 +57 0.000000e+00 0.000000e+00 +58 0.000000e+00 0.000000e+00 +59 0.000000e+00 0.000000e+00 +60 0.000000e+00 0.000000e+00 +61 0.000000e+00 0.000000e+00 +62 0.000000e+00 0.000000e+00 +63 0.000000e+00 0.000000e+00 +64 0.000000e+00 0.000000e+00 +65 0.000000e+00 0.000000e+00 +66 0.000000e+00 0.000000e+00 +67 0.000000e+00 0.000000e+00 +68 0.000000e+00 0.000000e+00 +69 0.000000e+00 0.000000e+00 +70 0.000000e+00 0.000000e+00 +71 0.000000e+00 0.000000e+00 +72 0.000000e+00 0.000000e+00 +73 0.000000e+00 0.000000e+00 +74 0.000000e+00 0.000000e+00 +75 0.000000e+00 0.000000e+00 +76 0.000000e+00 0.000000e+00 +77 0.000000e+00 0.000000e+00 +78 0.000000e+00 0.000000e+00 +79 0.000000e+00 0.000000e+00 +80 0.000000e+00 0.000000e+00 +81 0.000000e+00 0.000000e+00 +82 0.000000e+00 0.000000e+00 +83 0.000000e+00 0.000000e+00 +84 0.000000e+00 0.000000e+00 +85 0.000000e+00 0.000000e+00 +86 0.000000e+00 0.000000e+00 +87 0.000000e+00 0.000000e+00 +88 0.000000e+00 0.000000e+00 +89 0.000000e+00 0.000000e+00 +90 0.000000e+00 0.000000e+00 +91 0.000000e+00 0.000000e+00 +92 0.000000e+00 0.000000e+00 +93 0.000000e+00 0.000000e+00 +94 0.000000e+00 0.000000e+00 +95 0.000000e+00 0.000000e+00 +96 0.000000e+00 0.000000e+00 +97 0.000000e+00 0.000000e+00 +98 0.000000e+00 0.000000e+00 +99 0.000000e+00 0.000000e+00 +100 0.000000e+00 0.000000e+00 +101 0.000000e+00 0.000000e+00 +102 0.000000e+00 0.000000e+00 +103 0.000000e+00 0.000000e+00 +104 0.000000e+00 0.000000e+00 +105 0.000000e+00 0.000000e+00 +106 0.000000e+00 0.000000e+00 +107 0.000000e+00 0.000000e+00 +108 0.000000e+00 0.000000e+00 +109 0.000000e+00 0.000000e+00 +110 0.000000e+00 0.000000e+00 +111 0.000000e+00 0.000000e+00 +112 0.000000e+00 0.000000e+00 +113 0.000000e+00 0.000000e+00 +114 0.000000e+00 0.000000e+00 +115 0.000000e+00 0.000000e+00 +116 0.000000e+00 0.000000e+00 +117 0.000000e+00 0.000000e+00 +118 1.000000e+00 0.000000e+00 +119 1.000000e+00 0.000000e+00 +120 1.000000e+00 0.000000e+00 +121 1.000000e+00 0.000000e+00 +122 1.000000e+00 0.000000e+00 +123 1.000000e+00 0.000000e+00 +124 1.000000e+00 0.000000e+00 +125 1.000000e+00 0.000000e+00 +126 1.000000e+00 0.000000e+00 +127 1.000000e+00 0.000000e+00 + +0 1.856155e+00 0.000000e+00 +1 1.775235e+00 1.177569e-16 +2 1.545075e+00 0.000000e+00 +3 1.201145e+00 2.453269e-17 +4 7.952850e-01 -4.906539e-17 +5 3.863025e-01 -6.869155e-17 +6 2.955767e-02 -4.906539e-18 +7 -2.324518e-01 -9.813078e-18 +8 -3.767087e-01 2.943923e-17 +9 -4.023202e-01 -5.151866e-17 +10 -3.288421e-01 -1.226635e-17 +11 -1.908223e-01 -3.679904e-17 +12 -2.984509e-02 -5.397193e-17 +13 1.141877e-01 -1.054906e-16 +14 2.107341e-01 -1.496494e-16 +15 2.437478e-01 -2.526868e-16 +16 2.133883e-01 9.813078e-18 +17 1.341899e-01 -3.618572e-17 +18 3.033355e-02 -4.906539e-18 +19 -7.075117e-02 -5.887847e-17 +20 -1.449419e-01 2.453269e-18 +21 -1.766837e-01 -1.226635e-17 +22 -1.618772e-01 -9.813078e-18 +23 -1.079124e-01 1.471962e-17 +24 -3.103786e-02 3.925231e-17 +25 4.815112e-02 2.698596e-17 +26 1.099404e-01 2.759928e-17 +27 1.401760e-01 -2.943923e-17 +28 1.333280e-01 7.359808e-18 +29 9.330968e-02 -1.079439e-16 +30 3.198024e-02 -1.557826e-16 +31 -3.418842e-02 -1.711155e-16 +32 -8.838835e-02 0.000000e+00 +33 -1.176209e-01 1.103971e-17 +34 -1.157154e-01 5.642520e-17 +35 -8.454075e-02 -1.717289e-17 +36 -3.319203e-02 3.679904e-17 +37 2.456534e-02 -1.226635e-17 +38 7.390118e-02 -5.519856e-18 +39 1.026526e-01 -1.226635e-18 +40 1.042612e-01 9.813078e-18 +41 7.921898e-02 -1.717289e-17 +42 3.471627e-02 7.359808e-18 +43 -1.736727e-02 -2.207943e-17 +44 -6.358048e-02 -5.397193e-17 +45 -9.232361e-02 -6.133174e-17 +46 -9.671760e-02 -7.114481e-17 +47 -7.621953e-02 -6.133174e-17 +48 -3.661165e-02 0.000000e+00 +49 1.159674e-02 -3.066587e-18 +50 5.592184e-02 -4.906539e-18 +51 8.510068e-02 -3.679904e-18 +52 9.192081e-02 -4.906539e-18 +53 7.498108e-02 -2.453269e-18 +54 3.895842e-02 1.962616e-17 +55 -6.664175e-03 -4.906539e-18 +56 -5.006798e-02 0.000000e+00 +57 -8.013033e-02 -2.207943e-17 +58 -8.924785e-02 1.471962e-17 +59 -7.524106e-02 9.813078e-18 +60 -4.186758e-02 3.925231e-17 +61 2.175052e-03 5.887847e-17 +62 4.549549e-02 6.869155e-17 +63 7.692872e-02 7.359808e-17 +64 8.838835e-02 0.000000e+00 +65 7.692872e-02 -1.962616e-17 +66 4.549549e-02 -1.962616e-17 +67 2.175052e-03 4.906539e-18 +68 -4.186758e-02 9.813078e-18 +69 -7.524106e-02 9.813078e-18 +70 -8.924785e-02 1.471962e-17 +71 -8.013033e-02 0.000000e+00 +72 -5.006798e-02 -9.813078e-18 +73 -6.664175e-03 7.359808e-18 +74 3.895842e-02 7.359808e-18 +75 7.498108e-02 2.453269e-18 +76 9.192081e-02 4.906539e-18 +77 8.510068e-02 -1.226635e-17 +78 5.592184e-02 -2.207943e-17 +79 1.159674e-02 -5.642520e-17 +80 -3.661165e-02 -9.813078e-18 +81 -7.621953e-02 -3.618572e-17 +82 -9.671760e-02 -2.453269e-17 +83 -9.232361e-02 -2.943923e-17 +84 -6.358048e-02 1.717289e-17 +85 -1.736727e-02 -2.453269e-18 +86 3.471627e-02 9.813078e-18 +87 7.921898e-02 -4.906539e-18 +88 1.042612e-01 0.000000e+00 +89 1.026526e-01 -2.453269e-18 +90 7.390118e-02 1.839952e-18 +91 2.456534e-02 9.813078e-18 +92 -3.319203e-02 -4.661212e-17 +93 -8.454075e-02 9.813078e-18 +94 -1.157154e-01 3.802568e-17 +95 -1.176209e-01 7.298477e-17 +96 -8.838835e-02 0.000000e+00 +97 -3.418842e-02 -6.991818e-17 +98 3.198024e-02 -7.605135e-17 +99 9.330968e-02 7.359808e-18 +100 1.333280e-01 -3.679904e-17 +101 1.401760e-01 3.189250e-17 +102 1.099404e-01 1.533293e-17 +103 4.815112e-02 -4.783875e-17 +104 -3.103786e-02 -2.943923e-17 +105 -1.079124e-01 -2.698596e-17 +106 -1.618772e-01 1.717289e-17 +107 -1.766837e-01 -2.453269e-18 +108 -1.449419e-01 6.378501e-17 +109 -7.075117e-02 1.005840e-16 +110 3.033355e-02 1.251167e-16 +111 1.341899e-01 2.134344e-16 +112 2.133883e-01 0.000000e+00 +113 2.437478e-01 3.618572e-17 +114 2.107341e-01 -4.906539e-18 +115 1.141877e-01 3.311914e-17 +116 -2.984509e-02 2.453269e-17 +117 -1.908223e-01 -2.207943e-17 +118 -3.288421e-01 3.925231e-17 +119 -4.023202e-01 -2.453269e-17 +120 -3.767087e-01 -3.925231e-17 +121 -2.324518e-01 8.586443e-17 +122 2.955767e-02 1.471962e-17 +123 3.863025e-01 1.079439e-16 +124 7.952850e-01 3.925231e-17 +125 1.201145e+00 1.962616e-16 +126 1.545075e+00 8.831770e-17 +127 1.775235e+00 2.600466e-16 diff -Nru gsl-doc-1.16/doc/examples/fitreg2.c gsl-doc-2.3/doc/examples/fitreg2.c --- gsl-doc-1.16/doc/examples/fitreg2.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/fitreg2.c 2016-10-27 11:23:41.000000000 +0000 @@ -0,0 +1,142 @@ +#include +#include +#include +#include +#include + +static int +hilbert_matrix(gsl_matrix * m) +{ + const size_t N = m->size1; + const size_t M = m->size2; + size_t i, j; + + for (i = 0; i < N; i++) + { + for (j = 0; j < M; j++) + { + gsl_matrix_set(m, i, j, 1.0/(i+j+1.0)); + } + } + + return GSL_SUCCESS; +} + +int +main() +{ + const size_t n = 10; /* number of observations */ + const size_t p = 8; /* number of model parameters */ + size_t i; + gsl_matrix *X = gsl_matrix_alloc(n, p); + gsl_vector *y = gsl_vector_alloc(n); + + /* construct Hilbert matrix and rhs vector */ + hilbert_matrix(X); + + { + double val = 1.0; + for (i = 0; i < n; ++i) + { + gsl_vector_set(y, i, val); + val *= -1.0; + } + } + + { + const size_t npoints = 200; /* number of points on L-curve and GCV curve */ + gsl_multifit_linear_workspace *w = + gsl_multifit_linear_alloc(n, p); + gsl_vector *c = gsl_vector_alloc(p); /* OLS solution */ + gsl_vector *c_lcurve = gsl_vector_alloc(p); /* regularized solution (L-curve) */ + gsl_vector *c_gcv = gsl_vector_alloc(p); /* regularized solution (GCV) */ + gsl_vector *reg_param = gsl_vector_alloc(npoints); + gsl_vector *rho = gsl_vector_alloc(npoints); /* residual norms */ + gsl_vector *eta = gsl_vector_alloc(npoints); /* solution norms */ + gsl_vector *G = gsl_vector_alloc(npoints); /* GCV function values */ + double lambda_l; /* optimal regularization parameter (L-curve) */ + double lambda_gcv; /* optimal regularization parameter (GCV) */ + double G_gcv; /* G(lambda_gcv) */ + size_t reg_idx; /* index of optimal lambda */ + double rcond; /* reciprocal condition number of X */ + double chisq, rnorm, snorm; + + /* compute SVD of X */ + gsl_multifit_linear_svd(X, w); + + rcond = gsl_multifit_linear_rcond(w); + fprintf(stderr, "matrix condition number = %e\n", 1.0 / rcond); + + /* unregularized (standard) least squares fit, lambda = 0 */ + gsl_multifit_linear_solve(0.0, X, y, c, &rnorm, &snorm, w); + chisq = pow(rnorm, 2.0); + + fprintf(stderr, "=== Unregularized fit ===\n"); + fprintf(stderr, "residual norm = %g\n", rnorm); + fprintf(stderr, "solution norm = %g\n", snorm); + fprintf(stderr, "chisq/dof = %g\n", chisq / (n - p)); + + /* calculate L-curve and find its corner */ + gsl_multifit_linear_lcurve(y, reg_param, rho, eta, w); + gsl_multifit_linear_lcorner(rho, eta, ®_idx); + + /* store optimal regularization parameter */ + lambda_l = gsl_vector_get(reg_param, reg_idx); + + /* regularize with lambda_l */ + gsl_multifit_linear_solve(lambda_l, X, y, c_lcurve, &rnorm, &snorm, w); + chisq = pow(rnorm, 2.0) + pow(lambda_l * snorm, 2.0); + + fprintf(stderr, "=== Regularized fit (L-curve) ===\n"); + fprintf(stderr, "optimal lambda: %g\n", lambda_l); + fprintf(stderr, "residual norm = %g\n", rnorm); + fprintf(stderr, "solution norm = %g\n", snorm); + fprintf(stderr, "chisq/dof = %g\n", chisq / (n - p)); + + /* calculate GCV curve and find its minimum */ + gsl_multifit_linear_gcv(y, reg_param, G, &lambda_gcv, &G_gcv, w); + + /* regularize with lambda_gcv */ + gsl_multifit_linear_solve(lambda_gcv, X, y, c_gcv, &rnorm, &snorm, w); + chisq = pow(rnorm, 2.0) + pow(lambda_gcv * snorm, 2.0); + + fprintf(stderr, "=== Regularized fit (GCV) ===\n"); + fprintf(stderr, "optimal lambda: %g\n", lambda_gcv); + fprintf(stderr, "residual norm = %g\n", rnorm); + fprintf(stderr, "solution norm = %g\n", snorm); + fprintf(stderr, "chisq/dof = %g\n", chisq / (n - p)); + + /* output L-curve and GCV curve */ + for (i = 0; i < npoints; ++i) + { + printf("%e %e %e %e\n", + gsl_vector_get(reg_param, i), + gsl_vector_get(rho, i), + gsl_vector_get(eta, i), + gsl_vector_get(G, i)); + } + + /* output L-curve corner point */ + printf("\n\n%f %f\n", + gsl_vector_get(rho, reg_idx), + gsl_vector_get(eta, reg_idx)); + + /* output GCV curve corner minimum */ + printf("\n\n%e %e\n", + lambda_gcv, + G_gcv); + + gsl_multifit_linear_free(w); + gsl_vector_free(c); + gsl_vector_free(c_lcurve); + gsl_vector_free(reg_param); + gsl_vector_free(rho); + gsl_vector_free(eta); + gsl_vector_free(G); + } + + gsl_matrix_free(X); + gsl_vector_free(y); + + return 0; +} diff -Nru gsl-doc-1.16/doc/examples/fitreg2.txt gsl-doc-2.3/doc/examples/fitreg2.txt --- gsl-doc-1.16/doc/examples/fitreg2.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/fitreg2.txt 2016-10-27 11:23:47.000000000 +0000 @@ -0,0 +1,206 @@ +1.722777e+00 3.137496e+00 1.393571e-01 1.098466e-01 +1.542511e+00 3.134851e+00 1.602537e-01 1.111355e-01 +1.381107e+00 3.132105e+00 1.838003e-01 1.124535e-01 +1.236592e+00 3.129220e+00 2.106938e-01 1.137782e-01 +1.107199e+00 3.126141e+00 2.418828e-01 1.150910e-01 +9.913452e-01 3.122801e+00 2.785467e-01 1.163793e-01 +8.876139e-01 3.119134e+00 3.220259e-01 1.176379e-01 +7.947367e-01 3.115081e+00 3.737063e-01 1.188693e-01 +7.115778e-01 3.110606e+00 4.348745e-01 1.200830e-01 +6.371205e-01 3.105701e+00 5.065595e-01 1.212938e-01 +5.704542e-01 3.100403e+00 5.893764e-01 1.225198e-01 +5.107636e-01 3.094792e+00 6.833863e-01 1.237793e-01 +4.573188e-01 3.088992e+00 7.879919e-01 1.250887e-01 +4.094664e-01 3.083163e+00 9.018923e-01 1.264594e-01 +3.666211e-01 3.077483e+00 1.023126e+00 1.278954e-01 +3.282590e-01 3.072126e+00 1.149218e+00 1.293921e-01 +2.939109e-01 3.067236e+00 1.277432e+00 1.309363e-01 +2.631570e-01 3.062913e+00 1.405101e+00 1.325071e-01 +2.356210e-01 3.059197e+00 1.529994e+00 1.340794e-01 +2.109664e-01 3.056073e+00 1.650666e+00 1.356271e-01 +1.888915e-01 3.053481e+00 1.766774e+00 1.371273e-01 +1.691265e-01 3.051330e+00 1.879334e+00 1.385633e-01 +1.514296e-01 3.049515e+00 1.990948e+00 1.399270e-01 +1.355845e-01 3.047928e+00 2.106019e+00 1.412191e-01 +1.213973e-01 3.046466e+00 2.230932e+00 1.424491e-01 +1.086947e-01 3.045040e+00 2.374177e+00 1.436337e-01 +9.732119e-02 3.043574e+00 2.546260e+00 1.447959e-01 +8.713780e-02 3.042004e+00 2.759286e+00 1.459626e-01 +7.801997e-02 3.040285e+00 3.026090e+00 1.471633e-01 +6.985619e-02 3.038387e+00 3.358992e+00 1.484283e-01 +6.254665e-02 3.036296e+00 3.768366e+00 1.497867e-01 +5.600196e-02 3.034020e+00 4.261340e+00 1.512642e-01 +5.014209e-02 3.031585e+00 4.840819e+00 1.528812e-01 +4.489537e-02 3.029040e+00 5.504952e+00 1.546495e-01 +4.019766e-02 3.026446e+00 6.247119e+00 1.565704e-01 +3.599150e-02 3.023875e+00 7.056539e+00 1.586327e-01 +3.222546e-02 3.021398e+00 7.919639e+00 1.608119e-01 +2.885348e-02 3.019073e+00 8.822262e+00 1.630712e-01 +2.583434e-02 3.016940e+00 9.752649e+00 1.653647e-01 +2.313112e-02 3.015010e+00 1.070504e+01 1.676419e-01 +2.071075e-02 3.013269e+00 1.168365e+01 1.698529e-01 +1.854364e-02 3.011679e+00 1.270683e+01 1.719539e-01 +1.660329e-02 3.010183e+00 1.381130e+01 1.739109e-01 +1.486597e-02 3.008713e+00 1.505601e+01 1.757021e-01 +1.331044e-02 3.007191e+00 1.652543e+01 1.773182e-01 +1.191768e-02 3.005538e+00 1.833101e+01 1.787612e-01 +1.067065e-02 3.003668e+00 2.061036e+01 1.800425e-01 +9.554103e-03 3.001496e+00 2.352383e+01 1.811809e-01 +8.554391e-03 2.998932e+00 2.724970e+01 1.821998e-01 +7.659285e-03 2.995886e+00 3.197972e+01 1.831262e-01 +6.857841e-03 2.992265e+00 3.791607e+01 1.839890e-01 +6.140258e-03 2.987980e+00 4.526885e+01 1.848187e-01 +5.497760e-03 2.982950e+00 5.425209e+01 1.856470e-01 +4.922491e-03 2.977113e+00 6.507580e+01 1.865067e-01 +4.407416e-03 2.970435e+00 7.793223e+01 1.874314e-01 +3.946238e-03 2.962928e+00 9.297574e+01 1.884557e-01 +3.533316e-03 2.954661e+00 1.102970e+02 1.896138e-01 +3.163600e-03 2.945771e+00 1.298942e+02 1.909381e-01 +2.832571e-03 2.936465e+00 1.516468e+02 1.924564e-01 +2.536179e-03 2.927011e+00 1.752965e+02 1.941885e-01 +2.270801e-03 2.917712e+00 2.004452e+02 1.961420e-01 +2.033191e-03 2.908878e+00 2.265717e+02 1.983087e-01 +1.820444e-03 2.900780e+00 2.530716e+02 2.006625e-01 +1.629959e-03 2.893622e+00 2.793116e+02 2.031597e-01 +1.459405e-03 2.887516e+00 3.046926e+02 2.057427e-01 +1.306697e-03 2.882479e+00 3.287068e+02 2.083462e-01 +1.169968e-03 2.878452e+00 3.509813e+02 2.109050e-01 +1.047546e-03 2.875317e+00 3.713028e+02 2.133613e-01 +9.379343e-04 2.872926e+00 3.896242e+02 2.156706e-01 +8.397917e-04 2.871127e+00 4.060614e+02 2.178043e-01 +7.519185e-04 2.869774e+00 4.208862e+02 2.197508e-01 +6.732400e-04 2.868742e+00 4.345280e+02 2.215136e-01 +6.027942e-04 2.867925e+00 4.475887e+02 2.231087e-01 +5.397197e-04 2.867240e+00 4.608802e+02 2.245616e-01 +4.832451e-04 2.866619e+00 4.754845e+02 2.259049e-01 +4.326798e-04 2.866007e+00 4.928343e+02 2.271761e-01 +3.874055e-04 2.865362e+00 5.147993e+02 2.284162e-01 +3.468686e-04 2.864647e+00 5.437503e+02 2.296689e-01 +3.105733e-04 2.863829e+00 5.825596e+02 2.309801e-01 +2.780758e-04 2.862880e+00 6.345001e+02 2.323980e-01 +2.489788e-04 2.861776e+00 7.030369e+02 2.339728e-01 +2.229264e-04 2.860499e+00 7.915470e+02 2.357562e-01 +1.996001e-04 2.859036e+00 9.030327e+02 2.378005e-01 +1.787146e-04 2.857384e+00 1.039868e+03 2.401564e-01 +1.600144e-04 2.855552e+00 1.203580e+03 2.428702e-01 +1.432710e-04 2.853565e+00 1.394632e+03 2.459795e-01 +1.282795e-04 2.851464e+00 1.612233e+03 2.495081e-01 +1.148568e-04 2.849301e+00 1.854184e+03 2.534599e-01 +1.028385e-04 2.847142e+00 2.116859e+03 2.578138e-01 +9.207780e-05 2.845053e+00 2.395388e+03 2.625202e-01 +8.244306e-05 2.843097e+00 2.684085e+03 2.675006e-01 +7.381647e-05 2.841321e+00 2.977118e+03 2.726516e-01 +6.609254e-05 2.839753e+00 3.269361e+03 2.778528e-01 +5.917682e-05 2.838397e+00 3.557342e+03 2.829790e-01 +5.298473e-05 2.837240e+00 3.840201e+03 2.879116e-01 +4.744057e-05 2.836251e+00 4.120650e+03 2.925500e-01 +4.247654e-05 2.835386e+00 4.405963e+03 2.968191e-01 +3.803192e-05 2.834600e+00 4.709062e+03 3.006723e-01 +3.405238e-05 2.833841e+00 5.049753e+03 3.040905e-01 +3.048924e-05 2.833062e+00 5.456018e+03 3.070781e-01 +2.729894e-05 2.832211e+00 5.965090e+03 3.096580e-01 +2.444246e-05 2.831239e+00 6.623983e+03 3.118655e-01 +2.188488e-05 2.830091e+00 7.489257e+03 3.137428e-01 +1.959491e-05 2.828710e+00 8.626347e+03 3.153358e-01 +1.754456e-05 2.827031e+00 1.010924e+04 3.166905e-01 +1.570875e-05 2.824979e+00 1.202123e+04 3.178516e-01 +1.406503e-05 2.822470e+00 1.445704e+04 3.188617e-01 +1.259331e-05 2.819406e+00 1.752562e+04 3.197610e-01 +1.127559e-05 2.815678e+00 2.135312e+04 3.205881e-01 +1.009574e-05 2.811161e+00 2.608500e+04 3.213810e-01 +9.039355e-06 2.805726e+00 3.188670e+04 3.221777e-01 +8.093504e-06 2.799237e+00 3.894202e+04 3.230184e-01 +7.246625e-06 2.791566e+00 4.744843e+04 3.239468e-01 +6.488360e-06 2.782605e+00 5.760813e+04 3.250117e-01 +5.809438e-06 2.772286e+00 6.961416e+04 3.262684e-01 +5.201556e-06 2.760602e+00 8.363085e+04 3.277796e-01 +4.657281e-06 2.747633e+00 9.976912e+04 3.296152e-01 +4.169957e-06 2.733562e+00 1.180587e+05 3.318499e-01 +3.733626e-06 2.718689e+00 1.384212e+05 3.345583e-01 +3.342950e-06 2.703419e+00 1.606491e+05 3.378069e-01 +2.993154e-06 2.688234e+00 1.843986e+05 3.416434e-01 +2.679960e-06 2.673643e+00 2.092005e+05 3.460840e-01 +2.399537e-06 2.660116e+00 2.344916e+05 3.511029e-01 +2.148457e-06 2.648030e+00 2.596630e+05 3.566257e-01 +1.923649e-06 2.637620e+00 2.841185e+05 3.625315e-01 +1.722364e-06 2.628969e+00 3.073291e+05 3.686627e-01 +1.542141e-06 2.622018e+00 3.288765e+05 3.748433e-01 +1.380776e-06 2.616606e+00 3.484761e+05 3.808989e-01 +1.236296e-06 2.612510e+00 3.659817e+05 3.866765e-01 +1.106934e-06 2.609484e+00 3.813726e+05 3.920571e-01 +9.911075e-07 2.607295e+00 3.947318e+05 3.969632e-01 +8.874010e-07 2.605735e+00 4.062212e+05 4.013572e-01 +7.945461e-07 2.604636e+00 4.160595e+05 4.052372e-01 +7.114072e-07 2.603862e+00 4.245066e+05 4.086289e-01 +6.369677e-07 2.603312e+00 4.318573e+05 4.115774e-01 +5.703174e-07 2.602910e+00 4.384463e+05 4.141403e-01 +5.106411e-07 2.602602e+00 4.446656e+05 4.163818e-01 +4.572092e-07 2.602348e+00 4.509978e+05 4.183691e-01 +4.093682e-07 2.602117e+00 4.580674e+05 4.201702e-01 +3.665332e-07 2.601887e+00 4.667134e+05 4.218530e-01 +3.281802e-07 2.601639e+00 4.780848e+05 4.234853e-01 +2.938405e-07 2.601359e+00 4.937527e+05 4.251364e-01 +2.630939e-07 2.601029e+00 5.158218e+05 4.268778e-01 +2.355646e-07 2.600636e+00 5.470072e+05 4.287857e-01 +2.109158e-07 2.600165e+00 5.906325e+05 4.309424e-01 +1.888462e-07 2.599598e+00 6.505218e+05 4.334390e-01 +1.690859e-07 2.598921e+00 7.308011e+05 4.363771e-01 +1.513933e-07 2.598116e+00 8.356695e+05 4.398698e-01 +1.355519e-07 2.597169e+00 9.692012e+05 4.440427e-01 +1.213682e-07 2.596067e+00 1.135182e+06 4.490330e-01 +1.086686e-07 2.594806e+00 1.336932e+06 4.549863e-01 +9.729786e-08 2.593385e+00 1.577052e+06 4.620509e-01 +8.711690e-08 2.591819e+00 1.857073e+06 4.703688e-01 +7.800126e-08 2.590132e+00 2.177024e+06 4.800613e-01 +6.983944e-08 2.588362e+00 2.535010e+06 4.912121e-01 +6.253166e-08 2.586559e+00 2.926897e+06 5.038476e-01 +5.598853e-08 2.584781e+00 3.346241e+06 5.179163e-01 +5.013007e-08 2.583085e+00 3.784553e+06 5.332744e-01 +4.488461e-08 2.581523e+00 4.231936e+06 5.496803e-01 +4.018802e-08 2.580133e+00 4.678037e+06 5.668022e-01 +3.598287e-08 2.578938e+00 5.113157e+06 5.842421e-01 +3.221773e-08 2.577940e+00 5.529355e+06 6.015712e-01 +2.884656e-08 2.577129e+00 5.921393e+06 6.183721e-01 +2.582815e-08 2.576482e+00 6.287444e+06 6.342778e-01 +2.312557e-08 2.575968e+00 6.629644e+06 6.490016e-01 +2.070578e-08 2.575557e+00 6.954609e+06 6.623514e-01 +1.853919e-08 2.575218e+00 7.274153e+06 6.742307e-01 +1.659931e-08 2.574923e+00 7.606397e+06 6.846274e-01 +1.486241e-08 2.574646e+00 7.977424e+06 6.935959e-01 +1.330725e-08 2.574366e+00 8.423477e+06 7.012373e-01 +1.191482e-08 2.574061e+00 8.993390e+06 7.076806e-01 +1.066809e-08 2.573713e+00 9.750697e+06 7.130674e-01 +9.551812e-09 2.573299e+00 1.077472e+07 7.175402e-01 +8.552340e-09 2.572797e+00 1.216047e+07 7.212348e-01 +7.657449e-09 2.572182e+00 1.401811e+07 7.242757e-01 +6.856197e-09 2.571422e+00 1.647375e+07 7.267742e-01 +6.138785e-09 2.570481e+00 1.967292e+07 7.288276e-01 +5.496441e-09 2.569314e+00 2.378700e+07 7.305201e-01 +4.921311e-09 2.567867e+00 2.902207e+07 7.319240e-01 +4.406360e-09 2.566074e+00 3.562921e+07 7.331015e-01 +3.945292e-09 2.563853e+00 4.391592e+07 7.341066e-01 +3.532468e-09 2.561108e+00 5.425840e+07 7.349869e-01 +3.162842e-09 2.557722e+00 6.711471e+07 7.357857e-01 +2.831891e-09 2.553557e+00 8.303847e+07 7.365440e-01 +2.535571e-09 2.548448e+00 1.026925e+08 7.373029e-01 +2.270257e-09 2.542210e+00 1.268609e+08 7.381063e-01 +2.032704e-09 2.534630e+00 1.564577e+08 7.390036e-01 +1.820008e-09 2.525476e+00 1.925281e+08 7.400539e-01 +1.629568e-09 2.514504e+00 2.362389e+08 7.413306e-01 +1.459055e-09 2.501475e+00 2.888508e+08 7.429267e-01 +1.306384e-09 2.486172e+00 3.516668e+08 7.449623e-01 +1.169688e-09 2.468436e+00 4.259500e+08 7.475918e-01 +1.047295e-09 2.448205e+00 5.128065e+08 7.510116e-01 +9.377094e-10 2.425553e+00 6.130339e+08 7.554664e-01 +8.395904e-10 2.400735e+00 7.269474e+08 7.612503e-01 +7.517382e-10 2.374214e+00 8.542031e+08 7.687001e-01 +6.730786e-10 2.346657e+00 9.936560e+08 7.781758e-01 +6.026497e-10 2.318902e+00 1.143292e+09 7.900244e-01 +5.395903e-10 2.291876e+00 1.300270e+09 8.045283e-01 +4.831292e-10 2.266486e+00 1.461099e+09 8.218422e-01 + + +2.603862 424506.610976 + + +1.722777e+00 1.098466e-01 diff -Nru gsl-doc-1.16/doc/examples/fitreg.c gsl-doc-2.3/doc/examples/fitreg.c --- gsl-doc-1.16/doc/examples/fitreg.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/fitreg.c 2016-10-27 11:20:46.000000000 +0000 @@ -0,0 +1,140 @@ +#include +#include +#include +#include +#include +#include + +int +main() +{ + const size_t n = 1000; /* number of observations */ + const size_t p = 2; /* number of model parameters */ + size_t i; + gsl_rng *r = gsl_rng_alloc(gsl_rng_default); + gsl_matrix *X = gsl_matrix_alloc(n, p); + gsl_vector *y = gsl_vector_alloc(n); + + for (i = 0; i < n; ++i) + { + /* generate first random variable u */ + double ui = 5.0 * gsl_ran_gaussian(r, 1.0); + + /* set v = u + noise */ + double vi = ui + gsl_ran_gaussian(r, 0.001); + + /* set y = u + v + noise */ + double yi = ui + vi + gsl_ran_gaussian(r, 1.0); + + /* since u =~ v, the matrix X is ill-conditioned */ + gsl_matrix_set(X, i, 0, ui); + gsl_matrix_set(X, i, 1, vi); + + /* rhs vector */ + gsl_vector_set(y, i, yi); + } + + { + const size_t npoints = 200; /* number of points on L-curve and GCV curve */ + gsl_multifit_linear_workspace *w = + gsl_multifit_linear_alloc(n, p); + gsl_vector *c = gsl_vector_alloc(p); /* OLS solution */ + gsl_vector *c_lcurve = gsl_vector_alloc(p); /* regularized solution (L-curve) */ + gsl_vector *c_gcv = gsl_vector_alloc(p); /* regularized solution (GCV) */ + gsl_vector *reg_param = gsl_vector_alloc(npoints); + gsl_vector *rho = gsl_vector_alloc(npoints); /* residual norms */ + gsl_vector *eta = gsl_vector_alloc(npoints); /* solution norms */ + gsl_vector *G = gsl_vector_alloc(npoints); /* GCV function values */ + double lambda_l; /* optimal regularization parameter (L-curve) */ + double lambda_gcv; /* optimal regularization parameter (GCV) */ + double G_gcv; /* G(lambda_gcv) */ + size_t reg_idx; /* index of optimal lambda */ + double rcond; /* reciprocal condition number of X */ + double chisq, rnorm, snorm; + + /* compute SVD of X */ + gsl_multifit_linear_svd(X, w); + + rcond = gsl_multifit_linear_rcond(w); + fprintf(stderr, "matrix condition number = %e\n", 1.0 / rcond); + + /* unregularized (standard) least squares fit, lambda = 0 */ + gsl_multifit_linear_solve(0.0, X, y, c, &rnorm, &snorm, w); + chisq = pow(rnorm, 2.0); + + fprintf(stderr, "=== Unregularized fit ===\n"); + fprintf(stderr, "best fit: y = %g u + %g v\n", + gsl_vector_get(c, 0), gsl_vector_get(c, 1)); + fprintf(stderr, "residual norm = %g\n", rnorm); + fprintf(stderr, "solution norm = %g\n", snorm); + fprintf(stderr, "chisq/dof = %g\n", chisq / (n - p)); + + /* calculate L-curve and find its corner */ + gsl_multifit_linear_lcurve(y, reg_param, rho, eta, w); + gsl_multifit_linear_lcorner(rho, eta, ®_idx); + + /* store optimal regularization parameter */ + lambda_l = gsl_vector_get(reg_param, reg_idx); + + /* regularize with lambda_l */ + gsl_multifit_linear_solve(lambda_l, X, y, c_lcurve, &rnorm, &snorm, w); + chisq = pow(rnorm, 2.0) + pow(lambda_l * snorm, 2.0); + + fprintf(stderr, "=== Regularized fit (L-curve) ===\n"); + fprintf(stderr, "optimal lambda: %g\n", lambda_l); + fprintf(stderr, "best fit: y = %g u + %g v\n", + gsl_vector_get(c_lcurve, 0), gsl_vector_get(c_lcurve, 1)); + fprintf(stderr, "residual norm = %g\n", rnorm); + fprintf(stderr, "solution norm = %g\n", snorm); + fprintf(stderr, "chisq/dof = %g\n", chisq / (n - p)); + + /* calculate GCV curve and find its minimum */ + gsl_multifit_linear_gcv(y, reg_param, G, &lambda_gcv, &G_gcv, w); + + /* regularize with lambda_gcv */ + gsl_multifit_linear_solve(lambda_gcv, X, y, c_gcv, &rnorm, &snorm, w); + chisq = pow(rnorm, 2.0) + pow(lambda_gcv * snorm, 2.0); + + fprintf(stderr, "=== Regularized fit (GCV) ===\n"); + fprintf(stderr, "optimal lambda: %g\n", lambda_gcv); + fprintf(stderr, "best fit: y = %g u + %g v\n", + gsl_vector_get(c_gcv, 0), gsl_vector_get(c_gcv, 1)); + fprintf(stderr, "residual norm = %g\n", rnorm); + fprintf(stderr, "solution norm = %g\n", snorm); + fprintf(stderr, "chisq/dof = %g\n", chisq / (n - p)); + + /* output L-curve and GCV curve */ + for (i = 0; i < npoints; ++i) + { + printf("%e %e %e %e\n", + gsl_vector_get(reg_param, i), + gsl_vector_get(rho, i), + gsl_vector_get(eta, i), + gsl_vector_get(G, i)); + } + + /* output L-curve corner point */ + printf("\n\n%f %f\n", + gsl_vector_get(rho, reg_idx), + gsl_vector_get(eta, reg_idx)); + + /* output GCV curve corner minimum */ + printf("\n\n%e %e\n", + lambda_gcv, + G_gcv); + + gsl_multifit_linear_free(w); + gsl_vector_free(c); + gsl_vector_free(c_lcurve); + gsl_vector_free(reg_param); + gsl_vector_free(rho); + gsl_vector_free(eta); + gsl_vector_free(G); + } + + gsl_rng_free(r); + gsl_matrix_free(X); + gsl_vector_free(y); + + return 0; +} diff -Nru gsl-doc-1.16/doc/examples/fitreg.txt gsl-doc-2.3/doc/examples/fitreg.txt --- gsl-doc-1.16/doc/examples/fitreg.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/fitreg.txt 2016-10-27 11:20:46.000000000 +0000 @@ -0,0 +1,206 @@ +2.224664e+02 1.608585e+02 7.089304e-01 2.590135e-02 +2.123781e+02 1.536944e+02 7.418066e-01 2.364670e-02 +2.027474e+02 1.465757e+02 7.745418e-01 2.150793e-02 +1.935533e+02 1.395346e+02 8.069972e-01 1.949208e-02 +1.847762e+02 1.326021e+02 8.390388e-01 1.760414e-02 +1.763970e+02 1.258080e+02 8.705396e-01 1.584709e-02 +1.683979e+02 1.191799e+02 9.013813e-01 1.422193e-02 +1.607615e+02 1.127436e+02 9.314562e-01 1.272784e-02 +1.534714e+02 1.065220e+02 9.606681e-01 1.136232e-02 +1.465119e+02 1.005353e+02 9.889334e-01 1.012146e-02 +1.398679e+02 9.480095e+01 1.016182e+00 9.000116e-03 +1.335253e+02 8.933330e+01 1.042357e+00 7.992184e-03 +1.274703e+02 8.414375e+01 1.067414e+00 7.090842e-03 +1.216898e+02 7.924077e+01 1.091323e+00 6.288777e-03 +1.161715e+02 7.462999e+01 1.114065e+00 5.578398e-03 +1.109034e+02 7.031430e+01 1.135633e+00 4.952031e-03 +1.058743e+02 6.629405e+01 1.156030e+00 4.402076e-03 +1.010731e+02 6.256714e+01 1.175267e+00 3.921145e-03 +9.648973e+01 5.912926e+01 1.193366e+00 3.502162e-03 +9.211417e+01 5.597400e+01 1.210352e+00 3.138444e-03 +8.793704e+01 5.309306e+01 1.226260e+00 2.823755e-03 +8.394932e+01 5.047643e+01 1.241126e+00 2.552337e-03 +8.014244e+01 4.811257e+01 1.254992e+00 2.318922e-03 +7.650819e+01 4.598859e+01 1.267902e+00 2.118738e-03 +7.303874e+01 4.409052e+01 1.279901e+00 1.947488e-03 +6.972663e+01 4.240351e+01 1.291035e+00 1.801336e-03 +6.656471e+01 4.091211e+01 1.301353e+00 1.676878e-03 +6.354617e+01 3.960054e+01 1.310901e+00 1.571107e-03 +6.066452e+01 3.845296e+01 1.319726e+00 1.481387e-03 +5.791354e+01 3.745374e+01 1.327872e+00 1.405414e-03 +5.528732e+01 3.658771e+01 1.335385e+00 1.341185e-03 +5.278018e+01 3.584034e+01 1.342306e+00 1.286966e-03 +5.038674e+01 3.519797e+01 1.348676e+00 1.241257e-03 +4.810183e+01 3.464788e+01 1.354534e+00 1.202773e-03 +4.592054e+01 3.417841e+01 1.359918e+00 1.170408e-03 +4.383816e+01 3.377896e+01 1.364862e+00 1.143218e-03 +4.185022e+01 3.344003e+01 1.369399e+00 1.120399e-03 +3.995242e+01 3.315315e+01 1.373561e+00 1.101264e-03 +3.814068e+01 3.291086e+01 1.377375e+00 1.085232e-03 +3.641110e+01 3.270663e+01 1.380870e+00 1.071811e-03 +3.475995e+01 3.253478e+01 1.384071e+00 1.060581e-03 +3.318368e+01 3.239039e+01 1.387001e+00 1.051193e-03 +3.167889e+01 3.226924e+01 1.389682e+00 1.043348e-03 +3.024233e+01 3.216770e+01 1.392134e+00 1.036796e-03 +2.887092e+01 3.208269e+01 1.394377e+00 1.031327e-03 +2.756170e+01 3.201158e+01 1.396427e+00 1.026763e-03 +2.631185e+01 3.195215e+01 1.398300e+00 1.022957e-03 +2.511868e+01 3.190252e+01 1.400012e+00 1.019783e-03 +2.397961e+01 3.186109e+01 1.401576e+00 1.017139e-03 +2.289220e+01 3.182652e+01 1.403005e+00 1.014935e-03 +2.185410e+01 3.179770e+01 1.404309e+00 1.013100e-03 +2.086307e+01 3.177368e+01 1.405500e+00 1.011571e-03 +1.991699e+01 3.175367e+01 1.406587e+00 1.010299e-03 +1.901380e+01 3.173700e+01 1.407579e+00 1.009240e-03 +1.815158e+01 3.172311e+01 1.408484e+00 1.008358e-03 +1.732845e+01 3.171156e+01 1.409310e+00 1.007625e-03 +1.654265e+01 3.170194e+01 1.410064e+00 1.007015e-03 +1.579248e+01 3.169394e+01 1.410752e+00 1.006508e-03 +1.507634e+01 3.168728e+01 1.411379e+00 1.006086e-03 +1.439266e+01 3.168175e+01 1.411951e+00 1.005735e-03 +1.373999e+01 3.167714e+01 1.412473e+00 1.005444e-03 +1.311692e+01 3.167331e+01 1.412949e+00 1.005201e-03 +1.252210e+01 3.167013e+01 1.413383e+00 1.005000e-03 +1.195426e+01 3.166748e+01 1.413779e+00 1.004832e-03 +1.141216e+01 3.166528e+01 1.414139e+00 1.004693e-03 +1.089465e+01 3.166345e+01 1.414468e+00 1.004577e-03 +1.040061e+01 3.166193e+01 1.414769e+00 1.004481e-03 +9.928969e+00 3.166067e+01 1.415042e+00 1.004402e-03 +9.478716e+00 3.165962e+01 1.415291e+00 1.004335e-03 +9.048881e+00 3.165874e+01 1.415519e+00 1.004280e-03 +8.638538e+00 3.165802e+01 1.415726e+00 1.004235e-03 +8.246803e+00 3.165741e+01 1.415915e+00 1.004197e-03 +7.872832e+00 3.165691e+01 1.416087e+00 1.004165e-03 +7.515820e+00 3.165650e+01 1.416244e+00 1.004139e-03 +7.174997e+00 3.165615e+01 1.416388e+00 1.004117e-03 +6.849630e+00 3.165587e+01 1.416518e+00 1.004099e-03 +6.539017e+00 3.165563e+01 1.416637e+00 1.004084e-03 +6.242490e+00 3.165543e+01 1.416745e+00 1.004072e-03 +5.959409e+00 3.165526e+01 1.416844e+00 1.004061e-03 +5.689166e+00 3.165513e+01 1.416934e+00 1.004053e-03 +5.431177e+00 3.165501e+01 1.417017e+00 1.004046e-03 +5.184887e+00 3.165492e+01 1.417091e+00 1.004040e-03 +4.949766e+00 3.165484e+01 1.417160e+00 1.004035e-03 +4.725307e+00 3.165477e+01 1.417222e+00 1.004031e-03 +4.511027e+00 3.165472e+01 1.417279e+00 1.004028e-03 +4.306464e+00 3.165467e+01 1.417331e+00 1.004025e-03 +4.111177e+00 3.165464e+01 1.417378e+00 1.004022e-03 +3.924746e+00 3.165461e+01 1.417421e+00 1.004021e-03 +3.746769e+00 3.165458e+01 1.417460e+00 1.004019e-03 +3.576863e+00 3.165456e+01 1.417496e+00 1.004018e-03 +3.414661e+00 3.165454e+01 1.417529e+00 1.004017e-03 +3.259815e+00 3.165453e+01 1.417559e+00 1.004016e-03 +3.111991e+00 3.165451e+01 1.417587e+00 1.004015e-03 +2.970871e+00 3.165450e+01 1.417612e+00 1.004014e-03 +2.836149e+00 3.165449e+01 1.417635e+00 1.004014e-03 +2.707537e+00 3.165449e+01 1.417657e+00 1.004013e-03 +2.584758e+00 3.165448e+01 1.417676e+00 1.004013e-03 +2.467546e+00 3.165448e+01 1.417695e+00 1.004013e-03 +2.355649e+00 3.165447e+01 1.417712e+00 1.004012e-03 +2.248826e+00 3.165447e+01 1.417728e+00 1.004012e-03 +2.146848e+00 3.165446e+01 1.417743e+00 1.004012e-03 +2.049494e+00 3.165446e+01 1.417758e+00 1.004012e-03 +1.956555e+00 3.165446e+01 1.417772e+00 1.004012e-03 +1.867830e+00 3.165446e+01 1.417786e+00 1.004012e-03 +1.783129e+00 3.165445e+01 1.417801e+00 1.004012e-03 +1.702269e+00 3.165445e+01 1.417815e+00 1.004012e-03 +1.625075e+00 3.165445e+01 1.417830e+00 1.004011e-03 +1.551383e+00 3.165445e+01 1.417846e+00 1.004011e-03 +1.481031e+00 3.165445e+01 1.417863e+00 1.004011e-03 +1.413870e+00 3.165444e+01 1.417882e+00 1.004011e-03 +1.349755e+00 3.165444e+01 1.417903e+00 1.004011e-03 +1.288547e+00 3.165444e+01 1.417926e+00 1.004011e-03 +1.230115e+00 3.165444e+01 1.417954e+00 1.004011e-03 +1.174333e+00 3.165444e+01 1.417985e+00 1.004011e-03 +1.121080e+00 3.165443e+01 1.418022e+00 1.004011e-03 +1.070242e+00 3.165443e+01 1.418066e+00 1.004011e-03 +1.021709e+00 3.165443e+01 1.418117e+00 1.004011e-03 +9.753771e-01 3.165443e+01 1.418178e+00 1.004011e-03 +9.311463e-01 3.165442e+01 1.418250e+00 1.004011e-03 +8.889213e-01 3.165442e+01 1.418337e+00 1.004011e-03 +8.486110e-01 3.165442e+01 1.418441e+00 1.004010e-03 +8.101288e-01 3.165441e+01 1.418565e+00 1.004010e-03 +7.733915e-01 3.165441e+01 1.418714e+00 1.004010e-03 +7.383203e-01 3.165440e+01 1.418893e+00 1.004010e-03 +7.048394e-01 3.165440e+01 1.419108e+00 1.004010e-03 +6.728768e-01 3.165439e+01 1.419366e+00 1.004010e-03 +6.423636e-01 3.165439e+01 1.419676e+00 1.004010e-03 +6.132340e-01 3.165438e+01 1.420049e+00 1.004009e-03 +5.854255e-01 3.165437e+01 1.420498e+00 1.004009e-03 +5.588780e-01 3.165437e+01 1.421037e+00 1.004009e-03 +5.335343e-01 3.165436e+01 1.421685e+00 1.004009e-03 +5.093399e-01 3.165435e+01 1.422465e+00 1.004008e-03 +4.862427e-01 3.165434e+01 1.423403e+00 1.004008e-03 +4.641929e-01 3.165433e+01 1.424530e+00 1.004008e-03 +4.431429e-01 3.165431e+01 1.425885e+00 1.004007e-03 +4.230476e-01 3.165430e+01 1.427514e+00 1.004007e-03 +4.038635e-01 3.165429e+01 1.429470e+00 1.004007e-03 +3.855493e-01 3.165427e+01 1.431820e+00 1.004006e-03 +3.680657e-01 3.165425e+01 1.434642e+00 1.004006e-03 +3.513749e-01 3.165423e+01 1.438028e+00 1.004005e-03 +3.354409e-01 3.165421e+01 1.442091e+00 1.004004e-03 +3.202296e-01 3.165419e+01 1.446961e+00 1.004004e-03 +3.057080e-01 3.165416e+01 1.452795e+00 1.004003e-03 +2.918449e-01 3.165413e+01 1.459779e+00 1.004002e-03 +2.786105e-01 3.165410e+01 1.468130e+00 1.004001e-03 +2.659763e-01 3.165406e+01 1.478105e+00 1.004000e-03 +2.539149e-01 3.165403e+01 1.490005e+00 1.003999e-03 +2.424006e-01 3.165399e+01 1.504178e+00 1.003998e-03 +2.314083e-01 3.165394e+01 1.521030e+00 1.003996e-03 +2.209146e-01 3.165389e+01 1.541026e+00 1.003995e-03 +2.108967e-01 3.165384e+01 1.564700e+00 1.003993e-03 +2.013331e-01 3.165378e+01 1.592654e+00 1.003992e-03 +1.922031e-01 3.165371e+01 1.625568e+00 1.003990e-03 +1.834872e-01 3.165364e+01 1.664198e+00 1.003988e-03 +1.751666e-01 3.165357e+01 1.709378e+00 1.003985e-03 +1.672232e-01 3.165348e+01 1.762018e+00 1.003983e-03 +1.596401e-01 3.165339e+01 1.823102e+00 1.003980e-03 +1.524008e-01 3.165329e+01 1.893683e+00 1.003977e-03 +1.454898e-01 3.165318e+01 1.974875e+00 1.003974e-03 +1.388923e-01 3.165306e+01 2.067851e+00 1.003971e-03 +1.325939e-01 3.165293e+01 2.173834e+00 1.003967e-03 +1.265811e-01 3.165279e+01 2.294096e+00 1.003963e-03 +1.208410e-01 3.165263e+01 2.429951e+00 1.003959e-03 +1.153611e-01 3.165246e+01 2.582761e+00 1.003954e-03 +1.101298e-01 3.165228e+01 2.753932e+00 1.003949e-03 +1.051357e-01 3.165208e+01 2.944919e+00 1.003943e-03 +1.003681e-01 3.165186e+01 3.157231e+00 1.003937e-03 +9.581665e-02 3.165163e+01 3.392436e+00 1.003930e-03 +9.147162e-02 3.165138e+01 3.652162e+00 1.003923e-03 +8.732362e-02 3.165110e+01 3.938104e+00 1.003916e-03 +8.336372e-02 3.165081e+01 4.252021e+00 1.003908e-03 +7.958340e-02 3.165049e+01 4.595739e+00 1.003899e-03 +7.597450e-02 3.165015e+01 4.971143e+00 1.003890e-03 +7.252925e-02 3.164978e+01 5.380172e+00 1.003880e-03 +6.924024e-02 3.164938e+01 5.824807e+00 1.003870e-03 +6.610038e-02 3.164896e+01 6.307055e+00 1.003859e-03 +6.310290e-02 3.164851e+01 6.828932e+00 1.003847e-03 +6.024135e-02 3.164803e+01 7.392437e+00 1.003835e-03 +5.750956e-02 3.164752e+01 7.999525e+00 1.003822e-03 +5.490165e-02 3.164698e+01 8.652072e+00 1.003809e-03 +5.241201e-02 3.164640e+01 9.351841e+00 1.003795e-03 +5.003526e-02 3.164580e+01 1.010044e+01 1.003781e-03 +4.776629e-02 3.164517e+01 1.089926e+01 1.003766e-03 +4.560022e-02 3.164451e+01 1.174946e+01 1.003752e-03 +4.353237e-02 3.164382e+01 1.265188e+01 1.003737e-03 +4.155829e-02 3.164310e+01 1.360703e+01 1.003722e-03 +3.967373e-02 3.164236e+01 1.461497e+01 1.003707e-03 +3.787463e-02 3.164160e+01 1.567535e+01 1.003693e-03 +3.615711e-02 3.164082e+01 1.678729e+01 1.003679e-03 +3.451748e-02 3.164002e+01 1.794939e+01 1.003665e-03 +3.295221e-02 3.163921e+01 1.915966e+01 1.003653e-03 +3.145791e-02 3.163840e+01 2.041553e+01 1.003641e-03 +3.003138e-02 3.163758e+01 2.171386e+01 1.003631e-03 +2.866953e-02 3.163677e+01 2.305089e+01 1.003622e-03 +2.736944e-02 3.163596e+01 2.442232e+01 1.003614e-03 +2.612831e-02 3.163517e+01 2.582333e+01 1.003608e-03 +2.494346e-02 3.163439e+01 2.724862e+01 1.003604e-03 +2.381234e-02 3.163363e+01 2.869253e+01 1.003602e-03 +2.273251e-02 3.163290e+01 3.014906e+01 1.003602e-03 +2.170165e-02 3.163219e+01 3.161203e+01 1.003604e-03 + + +31.654720 1.417279 + + +2.320286e-02 1.003602e-03 diff -Nru gsl-doc-1.16/doc/examples/fitting2.txt gsl-doc-2.3/doc/examples/fitting2.txt --- gsl-doc-1.16/doc/examples/fitting2.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/fitting2.txt 2015-11-10 18:40:34.000000000 +0000 @@ -0,0 +1,25 @@ +0.1 0.97935 +/- 0.110517 +0.2 1.3359 +/- 0.12214 +0.3 1.52573 +/- 0.134986 +0.4 1.60318 +/- 0.149182 +0.5 1.81731 +/- 0.164872 +0.6 1.92475 +/- 0.182212 +0.7 1.93249 +/- 0.201375 +0.8 2.5107 +/- 0.222554 +0.9 2.45078 +/- 0.24596 +1 2.24949 +/- 0.271828 +1.1 3.08955 +/- 0.300417 +1.2 3.82315 +/- 0.332012 +1.3 4.26766 +/- 0.36693 +1.4 3.2597 +/- 0.40552 +1.5 4.98914 +/- 0.448169 +1.6 4.14527 +/- 0.495303 +1.7 5.22382 +/- 0.547395 +1.8 6.3838 +/- 0.604965 +1.9 6.00277 +/- 0.668589 +# best fit: Y = 1.02318 + 0.956201 X + 0.876796 X^2 +# covariance matrix: +[ +1.25612e-02, -3.64387e-02, +1.94389e-02 + -3.64387e-02, +1.42339e-01, -8.48761e-02 + +1.94389e-02, -8.48761e-02, +5.60243e-02 ] +# chisq = 23.0987 diff -Nru gsl-doc-1.16/doc/examples/fitting.txt gsl-doc-2.3/doc/examples/fitting.txt --- gsl-doc-1.16/doc/examples/fitting.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/fitting.txt 2015-11-10 18:29:34.000000000 +0000 @@ -0,0 +1,490 @@ +# best fit: Y = -106.6 + 0.06 X +# covariance matrix: +# [ 39602, -19.9 +# -19.9, 0.01] +# chisq = 0.8 +data: 1970 12 3.16228 +data: 1980 11 2.23607 +data: 1990 14 1.82574 +data: 2000 13 1.58114 + +fit: 1961 11.06 +hi : 1961 14.1276 +lo : 1961 7.99243 +fit: 1961.3 11.078 +hi : 1961.3 14.1172 +lo : 1961.3 8.03877 +fit: 1961.6 11.096 +hi : 1961.6 14.1069 +lo : 1961.6 8.08509 +fit: 1961.9 11.114 +hi : 1961.9 14.0966 +lo : 1961.9 8.13137 +fit: 1962.2 11.132 +hi : 1962.2 14.0864 +lo : 1962.2 8.17761 +fit: 1962.5 11.15 +hi : 1962.5 14.0762 +lo : 1962.5 8.22383 +fit: 1962.8 11.168 +hi : 1962.8 14.066 +lo : 1962.8 8.27 +fit: 1963.1 11.186 +hi : 1963.1 14.0559 +lo : 1963.1 8.31614 +fit: 1963.4 11.204 +hi : 1963.4 14.0458 +lo : 1963.4 8.36224 +fit: 1963.7 11.222 +hi : 1963.7 14.0357 +lo : 1963.7 8.4083 +fit: 1964 11.24 +hi : 1964 14.0257 +lo : 1964 8.45432 +fit: 1964.3 11.258 +hi : 1964.3 14.0157 +lo : 1964.3 8.5003 +fit: 1964.6 11.276 +hi : 1964.6 14.0058 +lo : 1964.6 8.54624 +fit: 1964.9 11.294 +hi : 1964.9 13.9959 +lo : 1964.9 8.59213 +fit: 1965.2 11.312 +hi : 1965.2 13.986 +lo : 1965.2 8.63798 +fit: 1965.5 11.33 +hi : 1965.5 13.9762 +lo : 1965.5 8.68378 +fit: 1965.8 11.348 +hi : 1965.8 13.9665 +lo : 1965.8 8.72953 +fit: 1966.1 11.366 +hi : 1966.1 13.9568 +lo : 1966.1 8.77523 +fit: 1966.4 11.384 +hi : 1966.4 13.9471 +lo : 1966.4 8.82088 +fit: 1966.7 11.402 +hi : 1966.7 13.9375 +lo : 1966.7 8.86647 +fit: 1967 11.42 +hi : 1967 13.928 +lo : 1967 8.91201 +fit: 1967.3 11.438 +hi : 1967.3 13.9185 +lo : 1967.3 8.9575 +fit: 1967.6 11.456 +hi : 1967.6 13.9091 +lo : 1967.6 9.00292 +fit: 1967.9 11.474 +hi : 1967.9 13.8997 +lo : 1967.9 9.04828 +fit: 1968.2 11.492 +hi : 1968.2 13.8904 +lo : 1968.2 9.09358 +fit: 1968.5 11.51 +hi : 1968.5 13.8812 +lo : 1968.5 9.13882 +fit: 1968.8 11.528 +hi : 1968.8 13.872 +lo : 1968.8 9.18399 +fit: 1969.1 11.546 +hi : 1969.1 13.8629 +lo : 1969.1 9.22908 +fit: 1969.4 11.564 +hi : 1969.4 13.8539 +lo : 1969.4 9.27411 +fit: 1969.7 11.582 +hi : 1969.7 13.8449 +lo : 1969.7 9.31906 +fit: 1970 11.6 +hi : 1970 13.8361 +lo : 1970 9.36393 +fit: 1970.3 11.618 +hi : 1970.3 13.8273 +lo : 1970.3 9.40872 +fit: 1970.6 11.636 +hi : 1970.6 13.8186 +lo : 1970.6 9.45343 +fit: 1970.9 11.654 +hi : 1970.9 13.8099 +lo : 1970.9 9.49805 +fit: 1971.2 11.672 +hi : 1971.2 13.8014 +lo : 1971.2 9.54259 +fit: 1971.5 11.69 +hi : 1971.5 13.793 +lo : 1971.5 9.58703 +fit: 1971.8 11.708 +hi : 1971.8 13.7846 +lo : 1971.8 9.63137 +fit: 1972.1 11.726 +hi : 1972.1 13.7764 +lo : 1972.1 9.67561 +fit: 1972.4 11.744 +hi : 1972.4 13.7683 +lo : 1972.4 9.71975 +fit: 1972.7 11.762 +hi : 1972.7 13.7602 +lo : 1972.7 9.76378 +fit: 1973 11.78 +hi : 1973 13.7523 +lo : 1973 9.80769 +fit: 1973.3 11.798 +hi : 1973.3 13.7445 +lo : 1973.3 9.85149 +fit: 1973.6 11.816 +hi : 1973.6 13.7368 +lo : 1973.6 9.89517 +fit: 1973.9 11.834 +hi : 1973.9 13.7293 +lo : 1973.9 9.93872 +fit: 1974.2 11.852 +hi : 1974.2 13.7219 +lo : 1974.2 9.98213 +fit: 1974.5 11.87 +hi : 1974.5 13.7146 +lo : 1974.5 10.0254 +fit: 1974.8 11.888 +hi : 1974.8 13.7075 +lo : 1974.8 10.0685 +fit: 1975.1 11.906 +hi : 1975.1 13.7005 +lo : 1975.1 10.1115 +fit: 1975.4 11.924 +hi : 1975.4 13.6936 +lo : 1975.4 10.1544 +fit: 1975.7 11.942 +hi : 1975.7 13.687 +lo : 1975.7 10.197 +fit: 1976 11.96 +hi : 1976 13.6805 +lo : 1976 10.2395 +fit: 1976.3 11.978 +hi : 1976.3 13.6741 +lo : 1976.3 10.2819 +fit: 1976.6 11.996 +hi : 1976.6 13.668 +lo : 1976.6 10.324 +fit: 1976.9 12.014 +hi : 1976.9 13.6621 +lo : 1976.9 10.3659 +fit: 1977.2 12.032 +hi : 1977.2 13.6563 +lo : 1977.2 10.4077 +fit: 1977.5 12.05 +hi : 1977.5 13.6508 +lo : 1977.5 10.4492 +fit: 1977.8 12.068 +hi : 1977.8 13.6455 +lo : 1977.8 10.4905 +fit: 1978.1 12.086 +hi : 1978.1 13.6404 +lo : 1978.1 10.5316 +fit: 1978.4 12.104 +hi : 1978.4 13.6355 +lo : 1978.4 10.5725 +fit: 1978.7 12.122 +hi : 1978.7 13.6309 +lo : 1978.7 10.6131 +fit: 1979 12.14 +hi : 1979 13.6266 +lo : 1979 10.6534 +fit: 1979.3 12.158 +hi : 1979.3 13.6225 +lo : 1979.3 10.6935 +fit: 1979.6 12.176 +hi : 1979.6 13.6188 +lo : 1979.6 10.7332 +fit: 1979.9 12.194 +hi : 1979.9 13.6153 +lo : 1979.9 10.7727 +fit: 1980.2 12.212 +hi : 1980.2 13.6121 +lo : 1980.2 10.8119 +fit: 1980.5 12.23 +hi : 1980.5 13.6093 +lo : 1980.5 10.8507 +fit: 1980.8 12.248 +hi : 1980.8 13.6068 +lo : 1980.8 10.8892 +fit: 1981.1 12.266 +hi : 1981.1 13.6047 +lo : 1981.1 10.9273 +fit: 1981.4 12.284 +hi : 1981.4 13.6029 +lo : 1981.4 10.9651 +fit: 1981.7 12.302 +hi : 1981.7 13.6016 +lo : 1981.7 11.0024 +fit: 1982 12.32 +hi : 1982 13.6006 +lo : 1982 11.0394 +fit: 1982.3 12.338 +hi : 1982.3 13.6001 +lo : 1982.3 11.0759 +fit: 1982.6 12.356 +hi : 1982.6 13.6 +lo : 1982.6 11.112 +fit: 1982.9 12.374 +hi : 1982.9 13.6004 +lo : 1982.9 11.1476 +fit: 1983.2 12.392 +hi : 1983.2 13.6013 +lo : 1983.2 11.1827 +fit: 1983.5 12.41 +hi : 1983.5 13.6027 +lo : 1983.5 11.2173 +fit: 1983.8 12.428 +hi : 1983.8 13.6046 +lo : 1983.8 11.2514 +fit: 1984.1 12.446 +hi : 1984.1 13.6071 +lo : 1984.1 11.2849 +fit: 1984.4 12.464 +hi : 1984.4 13.6101 +lo : 1984.4 11.3179 +fit: 1984.7 12.482 +hi : 1984.7 13.6138 +lo : 1984.7 11.3502 +fit: 1985 12.5 +hi : 1985 13.618 +lo : 1985 11.382 +fit: 1985.3 12.518 +hi : 1985.3 13.6229 +lo : 1985.3 11.4131 +fit: 1985.6 12.536 +hi : 1985.6 13.6285 +lo : 1985.6 11.4435 +fit: 1985.9 12.554 +hi : 1985.9 13.6348 +lo : 1985.9 11.4732 +fit: 1986.2 12.572 +hi : 1986.2 13.6418 +lo : 1986.2 11.5022 +fit: 1986.5 12.59 +hi : 1986.5 13.6495 +lo : 1986.5 11.5305 +fit: 1986.8 12.608 +hi : 1986.8 13.658 +lo : 1986.8 11.558 +fit: 1987.1 12.626 +hi : 1987.1 13.6672 +lo : 1987.1 11.5848 +fit: 1987.4 12.644 +hi : 1987.4 13.6772 +lo : 1987.4 11.6108 +fit: 1987.7 12.662 +hi : 1987.7 13.6881 +lo : 1987.7 11.6359 +fit: 1988 12.68 +hi : 1988 13.6998 +lo : 1988 11.6602 +fit: 1988.3 12.698 +hi : 1988.3 13.7123 +lo : 1988.3 11.6837 +fit: 1988.6 12.716 +hi : 1988.6 13.7258 +lo : 1988.6 11.7062 +fit: 1988.9 12.734 +hi : 1988.9 13.74 +lo : 1988.9 11.728 +fit: 1989.2 12.752 +hi : 1989.2 13.7552 +lo : 1989.2 11.7488 +fit: 1989.5 12.77 +hi : 1989.5 13.7712 +lo : 1989.5 11.7688 +fit: 1989.8 12.788 +hi : 1989.8 13.7882 +lo : 1989.8 11.7878 +fit: 1990.1 12.806 +hi : 1990.1 13.806 +lo : 1990.1 11.806 +fit: 1990.4 12.824 +hi : 1990.4 13.8248 +lo : 1990.4 11.8232 +fit: 1990.7 12.842 +hi : 1990.7 13.8444 +lo : 1990.7 11.8396 +fit: 1991 12.86 +hi : 1991 13.865 +lo : 1991 11.855 +fit: 1991.3 12.878 +hi : 1991.3 13.8864 +lo : 1991.3 11.8696 +fit: 1991.6 12.896 +hi : 1991.6 13.9087 +lo : 1991.6 11.8833 +fit: 1991.9 12.914 +hi : 1991.9 13.9319 +lo : 1991.9 11.8961 +fit: 1992.2 12.932 +hi : 1992.2 13.9559 +lo : 1992.2 11.9081 +fit: 1992.5 12.95 +hi : 1992.5 13.9808 +lo : 1992.5 11.9192 +fit: 1992.8 12.968 +hi : 1992.8 14.0065 +lo : 1992.8 11.9295 +fit: 1993.1 12.986 +hi : 1993.1 14.0329 +lo : 1993.1 11.9391 +fit: 1993.4 13.004 +hi : 1993.4 14.0602 +lo : 1993.4 11.9478 +fit: 1993.7 13.022 +hi : 1993.7 14.0883 +lo : 1993.7 11.9557 +fit: 1994 13.04 +hi : 1994 14.117 +lo : 1994 11.963 +fit: 1994.3 13.058 +hi : 1994.3 14.1465 +lo : 1994.3 11.9695 +fit: 1994.6 13.076 +hi : 1994.6 14.1767 +lo : 1994.6 11.9753 +fit: 1994.9 13.094 +hi : 1994.9 14.2076 +lo : 1994.9 11.9804 +fit: 1995.2 13.112 +hi : 1995.2 14.2391 +lo : 1995.2 11.9849 +fit: 1995.5 13.13 +hi : 1995.5 14.2713 +lo : 1995.5 11.9887 +fit: 1995.8 13.148 +hi : 1995.8 14.304 +lo : 1995.8 11.992 +fit: 1996.1 13.166 +hi : 1996.1 14.3374 +lo : 1996.1 11.9946 +fit: 1996.4 13.184 +hi : 1996.4 14.3713 +lo : 1996.4 11.9967 +fit: 1996.7 13.202 +hi : 1996.7 14.4057 +lo : 1996.7 11.9983 +fit: 1997 13.22 +hi : 1997 14.4407 +lo : 1997 11.9993 +fit: 1997.3 13.238 +hi : 1997.3 14.4761 +lo : 1997.3 11.9999 +fit: 1997.6 13.256 +hi : 1997.6 14.512 +lo : 1997.6 12 +fit: 1997.9 13.274 +hi : 1997.9 14.5484 +lo : 1997.9 11.9996 +fit: 1998.2 13.292 +hi : 1998.2 14.5852 +lo : 1998.2 11.9988 +fit: 1998.5 13.31 +hi : 1998.5 14.6224 +lo : 1998.5 11.9976 +fit: 1998.8 13.328 +hi : 1998.8 14.6601 +lo : 1998.8 11.9959 +fit: 1999.1 13.346 +hi : 1999.1 14.6981 +lo : 1999.1 11.9939 +fit: 1999.4 13.364 +hi : 1999.4 14.7364 +lo : 1999.4 11.9916 +fit: 1999.7 13.382 +hi : 1999.7 14.7752 +lo : 1999.7 11.9888 +fit: 2000 13.4 +hi : 2000 14.8142 +lo : 2000 11.9858 +fit: 2000.3 13.418 +hi : 2000.3 14.8536 +lo : 2000.3 11.9824 +fit: 2000.6 13.436 +hi : 2000.6 14.8933 +lo : 2000.6 11.9787 +fit: 2000.9 13.454 +hi : 2000.9 14.9332 +lo : 2000.9 11.9748 +fit: 2001.2 13.472 +hi : 2001.2 14.9735 +lo : 2001.2 11.9705 +fit: 2001.5 13.49 +hi : 2001.5 15.014 +lo : 2001.5 11.966 +fit: 2001.8 13.508 +hi : 2001.8 15.0547 +lo : 2001.8 11.9613 +fit: 2002.1 13.526 +hi : 2002.1 15.0957 +lo : 2002.1 11.9563 +fit: 2002.4 13.544 +hi : 2002.4 15.137 +lo : 2002.4 11.951 +fit: 2002.7 13.562 +hi : 2002.7 15.1784 +lo : 2002.7 11.9456 +fit: 2003 13.58 +hi : 2003 15.2201 +lo : 2003 11.9399 +fit: 2003.3 13.598 +hi : 2003.3 15.262 +lo : 2003.3 11.934 +fit: 2003.6 13.616 +hi : 2003.6 15.3041 +lo : 2003.6 11.9279 +fit: 2003.9 13.634 +hi : 2003.9 15.3463 +lo : 2003.9 11.9217 +fit: 2004.2 13.652 +hi : 2004.2 15.3888 +lo : 2004.2 11.9152 +fit: 2004.5 13.67 +hi : 2004.5 15.4314 +lo : 2004.5 11.9086 +fit: 2004.8 13.688 +hi : 2004.8 15.4742 +lo : 2004.8 11.9018 +fit: 2005.1 13.706 +hi : 2005.1 15.5171 +lo : 2005.1 11.8949 +fit: 2005.4 13.724 +hi : 2005.4 15.5602 +lo : 2005.4 11.8878 +fit: 2005.7 13.742 +hi : 2005.7 15.6034 +lo : 2005.7 11.8806 +fit: 2006 13.76 +hi : 2006 15.6468 +lo : 2006 11.8732 +fit: 2006.3 13.778 +hi : 2006.3 15.6903 +lo : 2006.3 11.8657 +fit: 2006.6 13.796 +hi : 2006.6 15.7339 +lo : 2006.6 11.8581 +fit: 2006.9 13.814 +hi : 2006.9 15.7777 +lo : 2006.9 11.8503 +fit: 2007.2 13.832 +hi : 2007.2 15.8216 +lo : 2007.2 11.8424 +fit: 2007.5 13.85 +hi : 2007.5 15.8656 +lo : 2007.5 11.8344 +fit: 2007.8 13.868 +hi : 2007.8 15.9097 +lo : 2007.8 11.8263 +fit: 2008.1 13.886 +hi : 2008.1 15.9539 +lo : 2008.1 11.8181 +fit: 2008.4 13.904 +hi : 2008.4 15.9982 +lo : 2008.4 11.8098 +fit: 2008.7 13.922 +hi : 2008.7 16.0426 +lo : 2008.7 11.8014 diff -Nru gsl-doc-1.16/doc/examples/histogram2d.txt gsl-doc-2.3/doc/examples/histogram2d.txt --- gsl-doc-1.16/doc/examples/histogram2d.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/histogram2d.txt 2015-11-10 18:41:47.000000000 +0000 @@ -0,0 +1,1000 @@ +0.899966 0.116291 +0.80674 0.19472 +0.800115 0.148497 +0.894472 0.174431 +0.840206 0.173995 +0.868793 0.165864 +0.811033 0.18044 +0.837557 0.116857 +0.831819 0.139231 +0.788168 0.921319 +0.319718 0.333354 +0.752394 0.994372 +0.845391 0.18983 +0.856523 0.149861 +0.842882 0.118228 +0.808548 0.111741 +0.340896 0.364813 +0.864304 0.163713 +0.862805 0.109958 +0.860905 0.110781 +0.384008 0.35024 +0.770114 0.928891 +0.354064 0.312812 +0.841158 0.108232 +0.807978 0.189162 +0.795253 0.943185 +0.391476 0.340039 +0.859303 0.117067 +0.827307 0.104534 +0.810469 0.150618 +0.737134 0.951103 +0.866302 0.136599 +0.709051 0.946011 +0.851619 0.16776 +0.860766 0.147854 +0.35857 0.333873 +0.361889 0.343654 +0.831708 0.141925 +0.87108 0.162461 +0.897457 0.137043 +0.878006 0.114081 +0.866731 0.182974 +0.820844 0.162196 +0.815071 0.104617 +0.849699 0.156737 +0.834856 0.17238 +0.393958 0.30423 +0.810402 0.112164 +0.801469 0.138106 +0.827217 0.15998 +0.853795 0.143263 +0.842276 0.171684 +0.853507 0.168578 +0.362503 0.312293 +0.337048 0.382007 +0.381601 0.331575 +0.734737 0.914223 +0.856376 0.168519 +0.748303 0.943634 +0.89538 0.186816 +0.385072 0.348444 +0.818705 0.190048 +0.732254 0.967964 +0.850974 0.198366 +0.827293 0.180474 +0.89933 0.154155 +0.803268 0.163895 +0.844868 0.125872 +0.749071 0.944566 +0.397023 0.399672 +0.379145 0.365154 +0.318067 0.338998 +0.877629 0.128381 +0.849326 0.123641 +0.823407 0.167771 +0.880126 0.164926 +0.352899 0.312083 +0.832296 0.177788 +0.831357 0.194334 +0.897504 0.133455 +0.763468 0.934284 +0.854961 0.168276 +0.849292 0.109993 +0.869613 0.173558 +0.801348 0.126318 +0.894913 0.14234 +0.813688 0.100025 +0.882949 0.100375 +0.7156 0.901182 +0.848839 0.172997 +0.849797 0.196577 +0.834623 0.152989 +0.830009 0.171303 +0.845395 0.16828 +0.89401 0.102366 +0.806414 0.186953 +0.808913 0.131955 +0.809124 0.194111 +0.880257 0.175335 +0.839972 0.140848 +0.776083 0.907614 +0.807692 0.101978 +0.801362 0.138462 +0.829138 0.137398 +0.827225 0.11179 +0.874706 0.116489 +0.806729 0.117269 +0.89166 0.168095 +0.386903 0.325476 +0.821928 0.136924 +0.864427 0.127784 +0.860164 0.150035 +0.376964 0.31513 +0.858588 0.172067 +0.897354 0.169678 +0.842437 0.168082 +0.894196 0.159821 +0.870159 0.19136 +0.855665 0.167097 +0.845164 0.195304 +0.7118 0.933506 +0.893737 0.110966 +0.850509 0.195682 +0.898082 0.107074 +0.835303 0.168072 +0.841932 0.158701 +0.859911 0.146265 +0.844653 0.107289 +0.852975 0.138776 +0.787248 0.900223 +0.834435 0.119132 +0.314472 0.390359 +0.866022 0.144453 +0.824301 0.176086 +0.826908 0.119098 +0.845025 0.113269 +0.811317 0.148692 +0.892082 0.193395 +0.347879 0.361244 +0.836917 0.162466 +0.384919 0.364521 +0.387197 0.365293 +0.804477 0.138181 +0.846728 0.16697 +0.842063 0.10195 +0.739651 0.999118 +0.844578 0.163776 +0.847331 0.151524 +0.81299 0.139674 +0.884916 0.177149 +0.84788 0.102473 +0.307968 0.369845 +0.804579 0.17367 +0.899996 0.174979 +0.833044 0.18237 +0.850961 0.190251 +0.336728 0.373908 +0.818903 0.10368 +0.870906 0.183735 +0.814861 0.108184 +0.789408 0.915248 +0.822153 0.153161 +0.875522 0.104078 +0.376628 0.357519 +0.878207 0.120464 +0.801034 0.199693 +0.803617 0.189206 +0.880092 0.130658 +0.321686 0.370642 +0.7517 0.950898 +0.314004 0.367273 +0.875763 0.180728 +0.832598 0.153752 +0.87151 0.133585 +0.860904 0.142586 +0.877281 0.194561 +0.842129 0.17105 +0.819187 0.164834 +0.329687 0.315548 +0.885096 0.172157 +0.895017 0.14303 +0.38582 0.343933 +0.830734 0.141008 +0.806036 0.127851 +0.894101 0.180436 +0.895906 0.199972 +0.893131 0.124855 +0.304358 0.344473 +0.857626 0.149648 +0.313656 0.383176 +0.370555 0.309315 +0.885727 0.144595 +0.887898 0.155404 +0.868726 0.181555 +0.839286 0.105514 +0.335091 0.389919 +0.39549 0.348265 +0.343747 0.328116 +0.89127 0.150732 +0.843385 0.180071 +0.853965 0.130922 +0.331074 0.325197 +0.862805 0.167099 +0.848687 0.114827 +0.873383 0.166528 +0.881059 0.181053 +0.346244 0.306879 +0.885761 0.175805 +0.345702 0.385209 +0.870796 0.16849 +0.800492 0.146158 +0.891737 0.166495 +0.829758 0.188782 +0.844701 0.103017 +0.869756 0.134548 +0.849186 0.121754 +0.853689 0.157139 +0.8743 0.196234 +0.82223 0.199655 +0.866973 0.144841 +0.821452 0.112339 +0.83924 0.183338 +0.889298 0.182561 +0.827969 0.126714 +0.856372 0.176686 +0.856576 0.150396 +0.87857 0.162241 +0.82948 0.155498 +0.817556 0.16563 +0.889215 0.127605 +0.378789 0.396618 +0.860667 0.144355 +0.851925 0.136835 +0.800965 0.130027 +0.862343 0.104747 +0.834028 0.108125 +0.379311 0.39931 +0.816162 0.176486 +0.887533 0.139611 +0.876228 0.134897 +0.804605 0.13675 +0.867801 0.15878 +0.833625 0.167347 +0.812678 0.185395 +0.878209 0.115959 +0.811913 0.195017 +0.361995 0.323102 +0.881879 0.135963 +0.89803 0.103198 +0.877724 0.151681 +0.833623 0.196398 +0.894817 0.168182 +0.881902 0.145583 +0.813211 0.105915 +0.828792 0.121735 +0.814929 0.154997 +0.811291 0.189298 +0.833706 0.125648 +0.89597 0.191064 +0.794733 0.932783 +0.807271 0.114252 +0.364533 0.319233 +0.810089 0.187142 +0.820849 0.178866 +0.761061 0.998648 +0.884772 0.110986 +0.816057 0.155574 +0.859791 0.164382 +0.817204 0.107886 +0.761067 0.971697 +0.866766 0.176764 +0.801908 0.166801 +0.885309 0.136685 +0.839102 0.150284 +0.810891 0.162254 +0.312938 0.367636 +0.825876 0.123284 +0.898391 0.130657 +0.834303 0.174861 +0.88594 0.104529 +0.825583 0.122698 +0.832929 0.116465 +0.358375 0.338426 +0.315493 0.332973 +0.83906 0.147668 +0.884073 0.14555 +0.834649 0.139618 +0.885196 0.173607 +0.370796 0.339792 +0.879535 0.18262 +0.891765 0.124559 +0.85316 0.149334 +0.347742 0.378014 +0.327373 0.370112 +0.892268 0.170055 +0.870979 0.119274 +0.304501 0.384298 +0.889512 0.124208 +0.747131 0.973508 +0.713879 0.999031 +0.89777 0.165717 +0.312203 0.37596 +0.816484 0.150902 +0.866057 0.156792 +0.807577 0.141502 +0.897537 0.136588 +0.837324 0.184421 +0.895856 0.125889 +0.83218 0.143734 +0.819322 0.120308 +0.841607 0.125554 +0.841513 0.187048 +0.80136 0.115711 +0.783739 0.911628 +0.867372 0.115829 +0.831926 0.154533 +0.884267 0.101714 +0.840588 0.131802 +0.872545 0.187172 +0.866004 0.109233 +0.809182 0.16371 +0.844303 0.171281 +0.853758 0.123048 +0.89632 0.196616 +0.807945 0.117529 +0.810675 0.198465 +0.843891 0.184447 +0.393882 0.345994 +0.849027 0.118412 +0.814565 0.160643 +0.878966 0.118619 +0.319678 0.330739 +0.381436 0.327039 +0.883641 0.137051 +0.88625 0.1408 +0.884644 0.164795 +0.800808 0.152881 +0.808185 0.109432 +0.89149 0.112168 +0.815459 0.106703 +0.853486 0.169245 +0.81354 0.137424 +0.810805 0.153874 +0.364085 0.349051 +0.812736 0.170973 +0.884621 0.1393 +0.881052 0.146378 +0.838517 0.149331 +0.804812 0.158308 +0.337278 0.395934 +0.870284 0.104272 +0.834796 0.105229 +0.843002 0.196036 +0.850576 0.152863 +0.860771 0.118616 +0.84202 0.166612 +0.399275 0.394875 +0.742874 0.958051 +0.880633 0.110687 +0.857862 0.179605 +0.855494 0.100935 +0.768148 0.963642 +0.324867 0.367771 +0.858129 0.167168 +0.821521 0.16616 +0.852337 0.196212 +0.899052 0.109934 +0.344131 0.342601 +0.893116 0.170833 +0.830686 0.104484 +0.867316 0.167837 +0.774198 0.939849 +0.893978 0.10289 +0.89165 0.184693 +0.856159 0.186791 +0.854807 0.14528 +0.80968 0.135203 +0.806354 0.123605 +0.317552 0.365206 +0.86256 0.161993 +0.381535 0.345279 +0.889903 0.112084 +0.822495 0.126029 +0.87125 0.166784 +0.317413 0.349133 +0.888958 0.170403 +0.851666 0.157834 +0.85179 0.173041 +0.853371 0.146371 +0.849858 0.125447 +0.875129 0.122898 +0.828562 0.187424 +0.763606 0.952371 +0.382237 0.35794 +0.804045 0.120777 +0.841869 0.18514 +0.836767 0.155826 +0.856599 0.199897 +0.731756 0.911674 +0.344477 0.362271 +0.810883 0.188983 +0.874842 0.142992 +0.83821 0.145268 +0.851997 0.156659 +0.894652 0.190805 +0.861117 0.137703 +0.858894 0.119809 +0.850262 0.141373 +0.877066 0.175558 +0.861403 0.136429 +0.876572 0.175158 +0.3317 0.352857 +0.850177 0.127094 +0.874109 0.123517 +0.887492 0.12588 +0.748737 0.901241 +0.880944 0.162101 +0.881262 0.114011 +0.883449 0.170884 +0.360217 0.302075 +0.871743 0.103008 +0.835599 0.108162 +0.870554 0.187258 +0.884404 0.188352 +0.883416 0.145872 +0.887299 0.15479 +0.336392 0.359118 +0.843312 0.177613 +0.808424 0.104085 +0.821814 0.128227 +0.874873 0.150716 +0.85946 0.149466 +0.829091 0.142148 +0.325514 0.30912 +0.821196 0.113537 +0.895925 0.181168 +0.812376 0.1962 +0.365183 0.310292 +0.809944 0.133368 +0.881536 0.152292 +0.850015 0.198156 +0.873673 0.119881 +0.829372 0.157097 +0.779381 0.968643 +0.806218 0.117974 +0.821675 0.116286 +0.874341 0.108365 +0.852975 0.123086 +0.845412 0.186429 +0.891256 0.182139 +0.832477 0.163637 +0.735961 0.94692 +0.810206 0.166881 +0.863904 0.157486 +0.838621 0.180923 +0.898295 0.132386 +0.848832 0.175956 +0.872826 0.106993 +0.841561 0.10093 +0.872002 0.168904 +0.895266 0.151644 +0.816433 0.148234 +0.825895 0.199631 +0.848153 0.1785 +0.89617 0.148785 +0.361702 0.397933 +0.378571 0.363026 +0.752522 0.921308 +0.309489 0.336667 +0.814213 0.172179 +0.817779 0.102103 +0.385597 0.358676 +0.865369 0.186364 +0.389047 0.305243 +0.822809 0.124166 +0.831419 0.187222 +0.829114 0.107158 +0.810828 0.149282 +0.866424 0.169478 +0.897773 0.131975 +0.874546 0.105347 +0.867 0.130347 +0.360503 0.393453 +0.867093 0.110005 +0.863639 0.121075 +0.895203 0.174919 +0.866151 0.151007 +0.35674 0.365002 +0.353537 0.372692 +0.83924 0.174931 +0.881965 0.10347 +0.36053 0.365526 +0.894737 0.148706 +0.881786 0.108479 +0.86341 0.185092 +0.876455 0.171627 +0.823069 0.163659 +0.838099 0.137204 +0.815945 0.159805 +0.363366 0.327635 +0.830124 0.16268 +0.717562 0.929106 +0.819273 0.189725 +0.889623 0.188949 +0.829135 0.144268 +0.836247 0.137433 +0.822904 0.19765 +0.81784 0.11125 +0.801468 0.169538 +0.89537 0.191735 +0.336984 0.365184 +0.889404 0.106429 +0.89432 0.146251 +0.829836 0.125841 +0.825965 0.129243 +0.866793 0.107128 +0.728253 0.943304 +0.807663 0.154252 +0.854678 0.197385 +0.742775 0.942044 +0.891946 0.172129 +0.811272 0.173145 +0.897055 0.102304 +0.803476 0.176486 +0.82882 0.179162 +0.79981 0.933256 +0.820002 0.169783 +0.325439 0.34104 +0.89168 0.144097 +0.837094 0.110958 +0.73852 0.948742 +0.80801 0.161061 +0.892927 0.126314 +0.89878 0.12125 +0.886638 0.121405 +0.805034 0.145919 +0.87593 0.108601 +0.880843 0.178815 +0.877678 0.120557 +0.369679 0.385181 +0.391426 0.368508 +0.854451 0.149913 +0.817572 0.192036 +0.76975 0.962605 +0.815622 0.181443 +0.839968 0.197315 +0.857016 0.196723 +0.373833 0.344159 +0.316118 0.32969 +0.811795 0.167347 +0.830065 0.19898 +0.833357 0.111303 +0.314904 0.368326 +0.819208 0.149162 +0.866229 0.107569 +0.874317 0.1308 +0.302638 0.311626 +0.860183 0.117928 +0.359574 0.335186 +0.866013 0.151279 +0.863533 0.182445 +0.300713 0.380895 +0.814188 0.159962 +0.827448 0.144729 +0.804141 0.141768 +0.805786 0.142367 +0.887465 0.162925 +0.843153 0.190503 +0.870828 0.121444 +0.840672 0.168627 +0.301934 0.318779 +0.856546 0.174779 +0.839502 0.172994 +0.847336 0.146206 +0.88028 0.106257 +0.866252 0.155547 +0.37095 0.344299 +0.871458 0.199763 +0.803762 0.12719 +0.826329 0.175 +0.893337 0.192424 +0.817331 0.144659 +0.832914 0.160164 +0.815635 0.122196 +0.885821 0.185214 +0.316989 0.31792 +0.870953 0.177478 +0.832255 0.111237 +0.844802 0.133626 +0.837412 0.10615 +0.759292 0.918901 +0.815619 0.121267 +0.378633 0.314083 +0.839548 0.157009 +0.828274 0.107626 +0.83284 0.187813 +0.890613 0.116485 +0.810089 0.153584 +0.814939 0.179072 +0.800258 0.177972 +0.895225 0.169157 +0.73314 0.931236 +0.848721 0.133783 +0.81551 0.11701 +0.868687 0.176634 +0.896957 0.113196 +0.389054 0.38854 +0.812717 0.132332 +0.87371 0.177684 +0.33352 0.382369 +0.846023 0.101822 +0.344 0.356494 +0.304544 0.366331 +0.832386 0.189727 +0.704722 0.910009 +0.310869 0.342362 +0.871299 0.116465 +0.837278 0.10274 +0.338403 0.365092 +0.783904 0.940099 +0.399713 0.306701 +0.889798 0.120483 +0.824056 0.108129 +0.844994 0.107482 +0.848904 0.112933 +0.826871 0.152845 +0.89664 0.12968 +0.85261 0.11861 +0.89598 0.12436 +0.876881 0.109845 +0.899763 0.139582 +0.856317 0.154608 +0.39 0.379794 +0.329216 0.382024 +0.818369 0.159607 +0.867544 0.151943 +0.816073 0.15709 +0.808482 0.193333 +0.361735 0.349184 +0.811246 0.196906 +0.377963 0.354646 +0.876862 0.139507 +0.801098 0.176761 +0.839471 0.117372 +0.370493 0.351441 +0.831857 0.157395 +0.892061 0.174507 +0.879924 0.184602 +0.814486 0.116701 +0.880326 0.198282 +0.329637 0.377028 +0.800409 0.173463 +0.858756 0.146521 +0.770298 0.909789 +0.89663 0.16985 +0.822317 0.151358 +0.863366 0.159056 +0.837438 0.109562 +0.375746 0.371853 +0.863035 0.13597 +0.341681 0.344239 +0.837191 0.102117 +0.857518 0.130338 +0.877843 0.198342 +0.831355 0.149361 +0.833199 0.194458 +0.861883 0.18576 +0.383883 0.394117 +0.80223 0.194725 +0.836584 0.109057 +0.830883 0.11098 +0.34931 0.343051 +0.87322 0.119193 +0.801568 0.179643 +0.83499 0.189089 +0.883306 0.162157 +0.855331 0.136167 +0.827353 0.15642 +0.835304 0.196587 +0.81356 0.178226 +0.855351 0.126984 +0.336538 0.32047 +0.871382 0.106942 +0.807136 0.126974 +0.719391 0.978292 +0.896613 0.177678 +0.392088 0.384363 +0.859672 0.100289 +0.814092 0.181898 +0.313111 0.317176 +0.833546 0.171589 +0.886529 0.191697 +0.858925 0.121079 +0.818901 0.161709 +0.384935 0.369578 +0.364446 0.35636 +0.805596 0.123281 +0.821475 0.167794 +0.842239 0.167674 +0.845516 0.162248 +0.325251 0.341913 +0.872824 0.158441 +0.885137 0.111048 +0.720571 0.994662 +0.889353 0.109002 +0.805082 0.101511 +0.893938 0.185086 +0.811223 0.12091 +0.897962 0.121979 +0.842313 0.106499 +0.888678 0.140187 +0.829431 0.162015 +0.800891 0.139997 +0.841009 0.11087 +0.85185 0.102892 +0.810698 0.199516 +0.730386 0.903186 +0.817545 0.106374 +0.841119 0.10445 +0.892531 0.166033 +0.855301 0.155058 +0.848869 0.160545 +0.837631 0.114136 +0.811895 0.182398 +0.348722 0.383998 +0.887236 0.158492 +0.815834 0.160024 +0.894654 0.124858 +0.83974 0.110182 +0.891484 0.160042 +0.879151 0.186509 +0.357824 0.385019 +0.815063 0.11887 +0.759898 0.948135 +0.821577 0.195292 +0.715555 0.920154 +0.863761 0.161641 +0.304333 0.334237 +0.881743 0.164423 +0.306421 0.340543 +0.865609 0.145499 +0.821731 0.149971 +0.885233 0.163874 +0.813339 0.114897 +0.874204 0.122921 +0.889057 0.154288 +0.871624 0.14409 +0.869097 0.136601 +0.807429 0.191712 +0.345041 0.321563 +0.83931 0.163284 +0.842468 0.106195 +0.396883 0.305262 +0.894628 0.128521 +0.886603 0.167256 +0.831638 0.157452 +0.840055 0.196995 +0.896967 0.135328 +0.844651 0.109273 +0.804906 0.123718 +0.829203 0.108781 +0.859297 0.133713 +0.8879 0.124796 +0.805 0.115723 +0.87793 0.136908 +0.822777 0.18758 +0.852614 0.123744 +0.885222 0.123751 +0.817925 0.116679 +0.309115 0.378005 +0.857027 0.112186 +0.350599 0.311118 +0.854424 0.185159 +0.863059 0.187469 +0.339618 0.392343 +0.396734 0.305498 +0.849875 0.159409 +0.734899 0.92365 +0.87443 0.198857 +0.82217 0.12192 +0.841567 0.140441 +0.833852 0.135251 +0.72093 0.930449 +0.80088 0.163544 +0.8089 0.102041 +0.879216 0.126808 +0.801086 0.174111 +0.896652 0.129354 +0.883714 0.189499 +0.372874 0.342523 +0.862953 0.173727 +0.357003 0.392382 +0.899427 0.132473 +0.84053 0.107673 +0.876139 0.15687 +0.313842 0.393008 +0.872346 0.171484 +0.779851 0.9059 +0.819865 0.166208 +0.810167 0.104493 +0.316024 0.358873 +0.862212 0.194171 +0.804558 0.151345 +0.875668 0.151805 +0.874691 0.150023 +0.316198 0.321145 +0.839726 0.129373 +0.847198 0.139909 +0.846986 0.184295 +0.781493 0.959652 +0.304141 0.391514 +0.855865 0.176878 +0.882039 0.152038 +0.842595 0.125085 +0.863633 0.123826 +0.818991 0.169564 +0.827721 0.181941 +0.323965 0.341294 +0.848177 0.155645 +0.839904 0.128129 +0.893658 0.14229 +0.84368 0.141728 +0.815819 0.19684 +0.875087 0.19956 +0.885086 0.142388 +0.882871 0.116048 +0.783763 0.974167 +0.89856 0.167246 +0.710974 0.977611 +0.846421 0.192404 +0.871532 0.151592 +0.73495 0.926971 +0.728067 0.993653 +0.883032 0.177956 +0.898197 0.151945 +0.868946 0.167706 +0.832313 0.199476 +0.814887 0.138395 +0.345664 0.300573 +0.881858 0.111975 +0.890711 0.183273 +0.862358 0.160852 +0.87707 0.168116 +0.801645 0.169858 +0.804203 0.143015 +0.845769 0.170608 +0.392847 0.346741 +0.85175 0.119732 +0.875177 0.117237 +0.879914 0.112512 +0.829533 0.143015 +0.837703 0.142995 +0.898297 0.192427 +0.832538 0.170702 +0.38302 0.344929 +0.805033 0.170622 +0.859109 0.115442 +0.854626 0.116947 +0.891335 0.17453 +0.3722 0.3248 +0.384064 0.358592 +0.311068 0.316408 +0.849568 0.172909 +0.851721 0.12168 +0.818386 0.100143 +0.818008 0.126522 +0.834449 0.171644 +0.882466 0.142316 +0.853358 0.102178 +0.853925 0.136591 +0.808353 0.155302 +0.876852 0.15125 +0.8433 0.113038 +0.806072 0.179906 +0.827626 0.103574 +0.804642 0.146007 +0.844456 0.105955 +0.3178 0.327756 +0.81962 0.183569 +0.845153 0.135188 +0.867568 0.193784 +0.344677 0.31555 +0.868502 0.139399 +0.869761 0.182259 +0.840942 0.12611 +0.823803 0.198989 +0.866021 0.189405 +0.830472 0.176892 +0.852984 0.122694 +0.726376 0.945389 +0.389562 0.387719 +0.751666 0.93967 +0.860234 0.138943 +0.867301 0.160167 +0.365457 0.379815 +0.820076 0.106114 +0.853005 0.187446 +0.806597 0.166647 +0.859759 0.127026 +0.8194 0.154785 +0.7781 0.903768 +0.896834 0.162089 +0.826042 0.135529 +0.855017 0.140164 +0.858975 0.160018 +0.877841 0.120589 +0.804365 0.140328 +0.857401 0.100001 +0.381695 0.394184 +0.880224 0.128239 +0.86796 0.164248 +0.82237 0.138774 +0.362795 0.369231 +0.826243 0.121746 +0.852736 0.117037 +0.823795 0.16244 +0.309912 0.37166 +0.815552 0.11289 +0.891685 0.137729 +0.840182 0.119087 +0.873933 0.121337 +0.88245 0.10173 +0.838509 0.19346 +0.872295 0.148754 +0.831451 0.116719 +0.85136 0.107784 +0.803645 0.131614 +0.877537 0.103931 +0.833487 0.175673 +0.837578 0.152661 +0.846693 0.126021 +0.881463 0.100271 +0.88044 0.154582 +0.834019 0.181083 +0.323731 0.370423 +0.807529 0.136034 +0.851471 0.155154 +0.86134 0.152341 +0.892364 0.192783 +0.879169 0.168451 +0.829042 0.142818 +0.887935 0.192168 +0.878671 0.177224 +0.773011 0.936844 +0.824737 0.193255 +0.841652 0.171013 +0.853776 0.19503 +0.840213 0.147429 +0.778386 0.940366 +0.896618 0.180843 +0.814105 0.145469 +0.874934 0.143933 +0.813603 0.117846 +0.876049 0.153262 +0.884423 0.126604 +0.870341 0.199748 +0.85078 0.145573 +0.898638 0.129449 +0.385363 0.39931 +0.891271 0.17511 +0.854424 0.176049 +0.843832 0.182309 +0.898589 0.13482 +0.892447 0.144832 +0.390647 0.310097 +0.37252 0.327555 +0.814935 0.170354 +0.812245 0.113686 +0.870132 0.134055 +0.310231 0.383543 +0.885627 0.144317 +0.861609 0.139202 +0.868226 0.172905 +0.301905 0.314431 +0.726291 0.961717 +0.896298 0.153264 +0.839346 0.162739 +0.862207 0.117241 +0.884096 0.134364 +0.888349 0.164626 +0.832364 0.119022 +0.889722 0.194606 +0.363968 0.305376 +0.819101 0.199337 +0.72635 0.914251 +0.870371 0.157249 +0.802227 0.14205 +0.338385 0.327053 +0.885202 0.105487 +0.723888 0.934808 +0.876837 0.170572 +0.808673 0.161296 +0.858623 0.187924 +0.823542 0.176925 +0.373642 0.39793 +0.821952 0.198513 +0.713005 0.998107 +0.872504 0.153095 +0.777351 0.918793 +0.815999 0.163651 diff -Nru gsl-doc-1.16/doc/examples/ieeeround.txt gsl-doc-2.3/doc/examples/ieeeround.txt --- gsl-doc-1.16/doc/examples/ieeeround.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/ieeeround.txt 2015-11-10 18:43:43.000000000 +0000 @@ -0,0 +1,19 @@ +i= 1 sum=1.000000000000000000 error=-1.71828 +i= 2 sum=2.000000000000000000 error=-0.718282 +i= 3 sum=2.500000000000000000 error=-0.218282 +i= 4 sum=2.666666666666666519 error=-0.0516152 +i= 5 sum=2.708333333333333037 error=-0.0099485 +i= 6 sum=2.716666666666666341 error=-0.00161516 +i= 7 sum=2.718055555555555447 error=-0.000226273 +i= 8 sum=2.718253968253968367 error=-2.78602e-05 +i= 9 sum=2.718278769841270037 error=-3.05862e-06 +i=10 sum=2.718281525573192248 error=-3.02886e-07 +i=11 sum=2.718281801146384513 error=-2.73127e-08 +i=12 sum=2.718281826198492901 error=-2.26055e-09 +i=13 sum=2.718281828286168711 error=-1.72876e-10 +i=14 sum=2.718281828446759363 error=-1.22857e-11 +i=15 sum=2.718281828458230187 error=-8.14904e-13 +i=16 sum=2.718281828458994909 error=-5.01821e-14 +i=17 sum=2.718281828459042870 error=-2.22045e-15 +i=18 sum=2.718281828459045535 error=4.44089e-16 +i=19 sum=2.718281828459045535 error=4.44089e-16 diff -Nru gsl-doc-1.16/doc/examples/ieee.txt gsl-doc-2.3/doc/examples/ieee.txt --- gsl-doc-1.16/doc/examples/ieee.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/ieee.txt 2015-11-10 18:42:56.000000000 +0000 @@ -0,0 +1,3 @@ + f= 1.01010101010101010101011*2^-2 +fd= 1.0101010101010101010101100000000000000000000000000000*2^-2 + d= 1.0101010101010101010101010101010101010101010101010101*2^-2 diff -Nru gsl-doc-1.16/doc/examples/integration.c gsl-doc-2.3/doc/examples/integration.c --- gsl-doc-1.16/doc/examples/integration.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/integration.c 2015-11-09 19:11:09.000000000 +0000 @@ -29,7 +29,7 @@ printf ("exact result = % .18f\n", expected); printf ("estimated error = % .18f\n", error); printf ("actual error = % .18f\n", result - expected); - printf ("intervals = %d\n", w->size); + printf ("intervals = %zu\n", w->size); gsl_integration_workspace_free (w); diff -Nru gsl-doc-1.16/doc/examples/integration.out gsl-doc-2.3/doc/examples/integration.out --- gsl-doc-1.16/doc/examples/integration.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/integration.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -result = -3.999999999999973799 -exact result = -4.000000000000000000 -estimated error = 0.000000000000246025 -actual error = 0.000000000000026201 -intervals = 8 diff -Nru gsl-doc-1.16/doc/examples/integration.txt gsl-doc-2.3/doc/examples/integration.txt --- gsl-doc-1.16/doc/examples/integration.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/integration.txt 2015-11-10 18:44:36.000000000 +0000 @@ -0,0 +1,5 @@ +result = -4.000000000000085265 +exact result = -4.000000000000000000 +estimated error = 0.000000000000135447 +actual error = -0.000000000000085265 +intervals = 8 diff -Nru gsl-doc-1.16/doc/examples/interp2d.c gsl-doc-2.3/doc/examples/interp2d.c --- gsl-doc-1.16/doc/examples/interp2d.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/interp2d.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,53 @@ +#include +#include + +#include +#include +#include + +int +main() +{ + const gsl_interp2d_type *T = gsl_interp2d_bilinear; + const size_t N = 100; /* number of points to interpolate */ + const double xa[] = { 0.0, 1.0 }; /* define unit square */ + const double ya[] = { 0.0, 1.0 }; + const size_t nx = sizeof(xa) / sizeof(double); /* x grid points */ + const size_t ny = sizeof(ya) / sizeof(double); /* y grid points */ + double *za = malloc(nx * ny * sizeof(double)); + gsl_spline2d *spline = gsl_spline2d_alloc(T, nx, ny); + gsl_interp_accel *xacc = gsl_interp_accel_alloc(); + gsl_interp_accel *yacc = gsl_interp_accel_alloc(); + size_t i, j; + + /* set z grid values */ + gsl_spline2d_set(spline, za, 0, 0, 0.0); + gsl_spline2d_set(spline, za, 0, 1, 1.0); + gsl_spline2d_set(spline, za, 1, 1, 0.5); + gsl_spline2d_set(spline, za, 1, 0, 1.0); + + /* initialize interpolation */ + gsl_spline2d_init(spline, xa, ya, za, nx, ny); + + /* interpolate N values in x and y and print out grid for plotting */ + for (i = 0; i < N; ++i) + { + double xi = i / (N - 1.0); + + for (j = 0; j < N; ++j) + { + double yj = j / (N - 1.0); + double zij = gsl_spline2d_eval(spline, xi, yj, xacc, yacc); + + printf("%f %f %f\n", xi, yj, zij); + } + printf("\n"); + } + + gsl_spline2d_free(spline); + gsl_interp_accel_free(xacc); + gsl_interp_accel_free(yacc); + free(za); + + return 0; +} diff -Nru gsl-doc-1.16/doc/examples/interp2d.txt gsl-doc-2.3/doc/examples/interp2d.txt --- gsl-doc-1.16/doc/examples/interp2d.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/interp2d.txt 2015-11-09 05:23:40.000000000 +0000 @@ -0,0 +1,10100 @@ +0.000000 0.000000 0.000000 +0.000000 0.010101 0.010101 +0.000000 0.020202 0.020202 +0.000000 0.030303 0.030303 +0.000000 0.040404 0.040404 +0.000000 0.050505 0.050505 +0.000000 0.060606 0.060606 +0.000000 0.070707 0.070707 +0.000000 0.080808 0.080808 +0.000000 0.090909 0.090909 +0.000000 0.101010 0.101010 +0.000000 0.111111 0.111111 +0.000000 0.121212 0.121212 +0.000000 0.131313 0.131313 +0.000000 0.141414 0.141414 +0.000000 0.151515 0.151515 +0.000000 0.161616 0.161616 +0.000000 0.171717 0.171717 +0.000000 0.181818 0.181818 +0.000000 0.191919 0.191919 +0.000000 0.202020 0.202020 +0.000000 0.212121 0.212121 +0.000000 0.222222 0.222222 +0.000000 0.232323 0.232323 +0.000000 0.242424 0.242424 +0.000000 0.252525 0.252525 +0.000000 0.262626 0.262626 +0.000000 0.272727 0.272727 +0.000000 0.282828 0.282828 +0.000000 0.292929 0.292929 +0.000000 0.303030 0.303030 +0.000000 0.313131 0.313131 +0.000000 0.323232 0.323232 +0.000000 0.333333 0.333333 +0.000000 0.343434 0.343434 +0.000000 0.353535 0.353535 +0.000000 0.363636 0.363636 +0.000000 0.373737 0.373737 +0.000000 0.383838 0.383838 +0.000000 0.393939 0.393939 +0.000000 0.404040 0.404040 +0.000000 0.414141 0.414141 +0.000000 0.424242 0.424242 +0.000000 0.434343 0.434343 +0.000000 0.444444 0.444444 +0.000000 0.454545 0.454545 +0.000000 0.464646 0.464646 +0.000000 0.474747 0.474747 +0.000000 0.484848 0.484848 +0.000000 0.494949 0.494949 +0.000000 0.505051 0.505051 +0.000000 0.515152 0.515152 +0.000000 0.525253 0.525253 +0.000000 0.535354 0.535354 +0.000000 0.545455 0.545455 +0.000000 0.555556 0.555556 +0.000000 0.565657 0.565657 +0.000000 0.575758 0.575758 +0.000000 0.585859 0.585859 +0.000000 0.595960 0.595960 +0.000000 0.606061 0.606061 +0.000000 0.616162 0.616162 +0.000000 0.626263 0.626263 +0.000000 0.636364 0.636364 +0.000000 0.646465 0.646465 +0.000000 0.656566 0.656566 +0.000000 0.666667 0.666667 +0.000000 0.676768 0.676768 +0.000000 0.686869 0.686869 +0.000000 0.696970 0.696970 +0.000000 0.707071 0.707071 +0.000000 0.717172 0.717172 +0.000000 0.727273 0.727273 +0.000000 0.737374 0.737374 +0.000000 0.747475 0.747475 +0.000000 0.757576 0.757576 +0.000000 0.767677 0.767677 +0.000000 0.777778 0.777778 +0.000000 0.787879 0.787879 +0.000000 0.797980 0.797980 +0.000000 0.808081 0.808081 +0.000000 0.818182 0.818182 +0.000000 0.828283 0.828283 +0.000000 0.838384 0.838384 +0.000000 0.848485 0.848485 +0.000000 0.858586 0.858586 +0.000000 0.868687 0.868687 +0.000000 0.878788 0.878788 +0.000000 0.888889 0.888889 +0.000000 0.898990 0.898990 +0.000000 0.909091 0.909091 +0.000000 0.919192 0.919192 +0.000000 0.929293 0.929293 +0.000000 0.939394 0.939394 +0.000000 0.949495 0.949495 +0.000000 0.959596 0.959596 +0.000000 0.969697 0.969697 +0.000000 0.979798 0.979798 +0.000000 0.989899 0.989899 +0.000000 1.000000 1.000000 + +0.010101 0.000000 0.010101 +0.010101 0.010101 0.020049 +0.010101 0.020202 0.029997 +0.010101 0.030303 0.039945 +0.010101 0.040404 0.049893 +0.010101 0.050505 0.059841 +0.010101 0.060606 0.069789 +0.010101 0.070707 0.079737 +0.010101 0.080808 0.089685 +0.010101 0.090909 0.099633 +0.010101 0.101010 0.109581 +0.010101 0.111111 0.119529 +0.010101 0.121212 0.129477 +0.010101 0.131313 0.139425 +0.010101 0.141414 0.149373 +0.010101 0.151515 0.159320 +0.010101 0.161616 0.169268 +0.010101 0.171717 0.179216 +0.010101 0.181818 0.189164 +0.010101 0.191919 0.199112 +0.010101 0.202020 0.209060 +0.010101 0.212121 0.219008 +0.010101 0.222222 0.228956 +0.010101 0.232323 0.238904 +0.010101 0.242424 0.248852 +0.010101 0.252525 0.258800 +0.010101 0.262626 0.268748 +0.010101 0.272727 0.278696 +0.010101 0.282828 0.288644 +0.010101 0.292929 0.298592 +0.010101 0.303030 0.308540 +0.010101 0.313131 0.318488 +0.010101 0.323232 0.328436 +0.010101 0.333333 0.338384 +0.010101 0.343434 0.348332 +0.010101 0.353535 0.358280 +0.010101 0.363636 0.368228 +0.010101 0.373737 0.378176 +0.010101 0.383838 0.388124 +0.010101 0.393939 0.398072 +0.010101 0.404040 0.408020 +0.010101 0.414141 0.417968 +0.010101 0.424242 0.427916 +0.010101 0.434343 0.437863 +0.010101 0.444444 0.447811 +0.010101 0.454545 0.457759 +0.010101 0.464646 0.467707 +0.010101 0.474747 0.477655 +0.010101 0.484848 0.487603 +0.010101 0.494949 0.497551 +0.010101 0.505051 0.507499 +0.010101 0.515152 0.517447 +0.010101 0.525253 0.527395 +0.010101 0.535354 0.537343 +0.010101 0.545455 0.547291 +0.010101 0.555556 0.557239 +0.010101 0.565657 0.567187 +0.010101 0.575758 0.577135 +0.010101 0.585859 0.587083 +0.010101 0.595960 0.597031 +0.010101 0.606061 0.606979 +0.010101 0.616162 0.616927 +0.010101 0.626263 0.626875 +0.010101 0.636364 0.636823 +0.010101 0.646465 0.646771 +0.010101 0.656566 0.656719 +0.010101 0.666667 0.666667 +0.010101 0.676768 0.676615 +0.010101 0.686869 0.686563 +0.010101 0.696970 0.696511 +0.010101 0.707071 0.706459 +0.010101 0.717172 0.716406 +0.010101 0.727273 0.726354 +0.010101 0.737374 0.736302 +0.010101 0.747475 0.746250 +0.010101 0.757576 0.756198 +0.010101 0.767677 0.766146 +0.010101 0.777778 0.776094 +0.010101 0.787879 0.786042 +0.010101 0.797980 0.795990 +0.010101 0.808081 0.805938 +0.010101 0.818182 0.815886 +0.010101 0.828283 0.825834 +0.010101 0.838384 0.835782 +0.010101 0.848485 0.845730 +0.010101 0.858586 0.855678 +0.010101 0.868687 0.865626 +0.010101 0.878788 0.875574 +0.010101 0.888889 0.885522 +0.010101 0.898990 0.895470 +0.010101 0.909091 0.905418 +0.010101 0.919192 0.915366 +0.010101 0.929293 0.925314 +0.010101 0.939394 0.935262 +0.010101 0.949495 0.945210 +0.010101 0.959596 0.955158 +0.010101 0.969697 0.965106 +0.010101 0.979798 0.975054 +0.010101 0.989899 0.985002 +0.010101 1.000000 0.994949 + +0.020202 0.000000 0.020202 +0.020202 0.010101 0.029997 +0.020202 0.020202 0.039792 +0.020202 0.030303 0.049587 +0.020202 0.040404 0.059382 +0.020202 0.050505 0.069177 +0.020202 0.060606 0.078972 +0.020202 0.070707 0.088766 +0.020202 0.080808 0.098561 +0.020202 0.090909 0.108356 +0.020202 0.101010 0.118151 +0.020202 0.111111 0.127946 +0.020202 0.121212 0.137741 +0.020202 0.131313 0.147536 +0.020202 0.141414 0.157331 +0.020202 0.151515 0.167126 +0.020202 0.161616 0.176921 +0.020202 0.171717 0.186716 +0.020202 0.181818 0.196511 +0.020202 0.191919 0.206305 +0.020202 0.202020 0.216100 +0.020202 0.212121 0.225895 +0.020202 0.222222 0.235690 +0.020202 0.232323 0.245485 +0.020202 0.242424 0.255280 +0.020202 0.252525 0.265075 +0.020202 0.262626 0.274870 +0.020202 0.272727 0.284665 +0.020202 0.282828 0.294460 +0.020202 0.292929 0.304255 +0.020202 0.303030 0.314050 +0.020202 0.313131 0.323845 +0.020202 0.323232 0.333639 +0.020202 0.333333 0.343434 +0.020202 0.343434 0.353229 +0.020202 0.353535 0.363024 +0.020202 0.363636 0.372819 +0.020202 0.373737 0.382614 +0.020202 0.383838 0.392409 +0.020202 0.393939 0.402204 +0.020202 0.404040 0.411999 +0.020202 0.414141 0.421794 +0.020202 0.424242 0.431589 +0.020202 0.434343 0.441384 +0.020202 0.444444 0.451178 +0.020202 0.454545 0.460973 +0.020202 0.464646 0.470768 +0.020202 0.474747 0.480563 +0.020202 0.484848 0.490358 +0.020202 0.494949 0.500153 +0.020202 0.505051 0.509948 +0.020202 0.515152 0.519743 +0.020202 0.525253 0.529538 +0.020202 0.535354 0.539333 +0.020202 0.545455 0.549128 +0.020202 0.555556 0.558923 +0.020202 0.565657 0.568717 +0.020202 0.575758 0.578512 +0.020202 0.585859 0.588307 +0.020202 0.595960 0.598102 +0.020202 0.606061 0.607897 +0.020202 0.616162 0.617692 +0.020202 0.626263 0.627487 +0.020202 0.636364 0.637282 +0.020202 0.646465 0.647077 +0.020202 0.656566 0.656872 +0.020202 0.666667 0.666667 +0.020202 0.676768 0.676462 +0.020202 0.686869 0.686257 +0.020202 0.696970 0.696051 +0.020202 0.707071 0.705846 +0.020202 0.717172 0.715641 +0.020202 0.727273 0.725436 +0.020202 0.737374 0.735231 +0.020202 0.747475 0.745026 +0.020202 0.757576 0.754821 +0.020202 0.767677 0.764616 +0.020202 0.777778 0.774411 +0.020202 0.787879 0.784206 +0.020202 0.797980 0.794001 +0.020202 0.808081 0.803796 +0.020202 0.818182 0.813590 +0.020202 0.828283 0.823385 +0.020202 0.838384 0.833180 +0.020202 0.848485 0.842975 +0.020202 0.858586 0.852770 +0.020202 0.868687 0.862565 +0.020202 0.878788 0.872360 +0.020202 0.888889 0.882155 +0.020202 0.898990 0.891950 +0.020202 0.909091 0.901745 +0.020202 0.919192 0.911540 +0.020202 0.929293 0.921335 +0.020202 0.939394 0.931129 +0.020202 0.949495 0.940924 +0.020202 0.959596 0.950719 +0.020202 0.969697 0.960514 +0.020202 0.979798 0.970309 +0.020202 0.989899 0.980104 +0.020202 1.000000 0.989899 + +0.030303 0.000000 0.030303 +0.030303 0.010101 0.039945 +0.030303 0.020202 0.049587 +0.030303 0.030303 0.059229 +0.030303 0.040404 0.068871 +0.030303 0.050505 0.078512 +0.030303 0.060606 0.088154 +0.030303 0.070707 0.097796 +0.030303 0.080808 0.107438 +0.030303 0.090909 0.117080 +0.030303 0.101010 0.126722 +0.030303 0.111111 0.136364 +0.030303 0.121212 0.146006 +0.030303 0.131313 0.155647 +0.030303 0.141414 0.165289 +0.030303 0.151515 0.174931 +0.030303 0.161616 0.184573 +0.030303 0.171717 0.194215 +0.030303 0.181818 0.203857 +0.030303 0.191919 0.213499 +0.030303 0.202020 0.223140 +0.030303 0.212121 0.232782 +0.030303 0.222222 0.242424 +0.030303 0.232323 0.252066 +0.030303 0.242424 0.261708 +0.030303 0.252525 0.271350 +0.030303 0.262626 0.280992 +0.030303 0.272727 0.290634 +0.030303 0.282828 0.300275 +0.030303 0.292929 0.309917 +0.030303 0.303030 0.319559 +0.030303 0.313131 0.329201 +0.030303 0.323232 0.338843 +0.030303 0.333333 0.348485 +0.030303 0.343434 0.358127 +0.030303 0.353535 0.367769 +0.030303 0.363636 0.377410 +0.030303 0.373737 0.387052 +0.030303 0.383838 0.396694 +0.030303 0.393939 0.406336 +0.030303 0.404040 0.415978 +0.030303 0.414141 0.425620 +0.030303 0.424242 0.435262 +0.030303 0.434343 0.444904 +0.030303 0.444444 0.454545 +0.030303 0.454545 0.464187 +0.030303 0.464646 0.473829 +0.030303 0.474747 0.483471 +0.030303 0.484848 0.493113 +0.030303 0.494949 0.502755 +0.030303 0.505051 0.512397 +0.030303 0.515152 0.522039 +0.030303 0.525253 0.531680 +0.030303 0.535354 0.541322 +0.030303 0.545455 0.550964 +0.030303 0.555556 0.560606 +0.030303 0.565657 0.570248 +0.030303 0.575758 0.579890 +0.030303 0.585859 0.589532 +0.030303 0.595960 0.599174 +0.030303 0.606061 0.608815 +0.030303 0.616162 0.618457 +0.030303 0.626263 0.628099 +0.030303 0.636364 0.637741 +0.030303 0.646465 0.647383 +0.030303 0.656566 0.657025 +0.030303 0.666667 0.666667 +0.030303 0.676768 0.676309 +0.030303 0.686869 0.685950 +0.030303 0.696970 0.695592 +0.030303 0.707071 0.705234 +0.030303 0.717172 0.714876 +0.030303 0.727273 0.724518 +0.030303 0.737374 0.734160 +0.030303 0.747475 0.743802 +0.030303 0.757576 0.753444 +0.030303 0.767677 0.763085 +0.030303 0.777778 0.772727 +0.030303 0.787879 0.782369 +0.030303 0.797980 0.792011 +0.030303 0.808081 0.801653 +0.030303 0.818182 0.811295 +0.030303 0.828283 0.820937 +0.030303 0.838384 0.830579 +0.030303 0.848485 0.840220 +0.030303 0.858586 0.849862 +0.030303 0.868687 0.859504 +0.030303 0.878788 0.869146 +0.030303 0.888889 0.878788 +0.030303 0.898990 0.888430 +0.030303 0.909091 0.898072 +0.030303 0.919192 0.907713 +0.030303 0.929293 0.917355 +0.030303 0.939394 0.926997 +0.030303 0.949495 0.936639 +0.030303 0.959596 0.946281 +0.030303 0.969697 0.955923 +0.030303 0.979798 0.965565 +0.030303 0.989899 0.975207 +0.030303 1.000000 0.984848 + +0.040404 0.000000 0.040404 +0.040404 0.010101 0.049893 +0.040404 0.020202 0.059382 +0.040404 0.030303 0.068871 +0.040404 0.040404 0.078359 +0.040404 0.050505 0.087848 +0.040404 0.060606 0.097337 +0.040404 0.070707 0.106826 +0.040404 0.080808 0.116315 +0.040404 0.090909 0.125803 +0.040404 0.101010 0.135292 +0.040404 0.111111 0.144781 +0.040404 0.121212 0.154270 +0.040404 0.131313 0.163759 +0.040404 0.141414 0.173248 +0.040404 0.151515 0.182736 +0.040404 0.161616 0.192225 +0.040404 0.171717 0.201714 +0.040404 0.181818 0.211203 +0.040404 0.191919 0.220692 +0.040404 0.202020 0.230181 +0.040404 0.212121 0.239669 +0.040404 0.222222 0.249158 +0.040404 0.232323 0.258647 +0.040404 0.242424 0.268136 +0.040404 0.252525 0.277625 +0.040404 0.262626 0.287114 +0.040404 0.272727 0.296602 +0.040404 0.282828 0.306091 +0.040404 0.292929 0.315580 +0.040404 0.303030 0.325069 +0.040404 0.313131 0.334558 +0.040404 0.323232 0.344047 +0.040404 0.333333 0.353535 +0.040404 0.343434 0.363024 +0.040404 0.353535 0.372513 +0.040404 0.363636 0.382002 +0.040404 0.373737 0.391491 +0.040404 0.383838 0.400979 +0.040404 0.393939 0.410468 +0.040404 0.404040 0.419957 +0.040404 0.414141 0.429446 +0.040404 0.424242 0.438935 +0.040404 0.434343 0.448424 +0.040404 0.444444 0.457912 +0.040404 0.454545 0.467401 +0.040404 0.464646 0.476890 +0.040404 0.474747 0.486379 +0.040404 0.484848 0.495868 +0.040404 0.494949 0.505357 +0.040404 0.505051 0.514845 +0.040404 0.515152 0.524334 +0.040404 0.525253 0.533823 +0.040404 0.535354 0.543312 +0.040404 0.545455 0.552801 +0.040404 0.555556 0.562290 +0.040404 0.565657 0.571778 +0.040404 0.575758 0.581267 +0.040404 0.585859 0.590756 +0.040404 0.595960 0.600245 +0.040404 0.606061 0.609734 +0.040404 0.616162 0.619223 +0.040404 0.626263 0.628711 +0.040404 0.636364 0.638200 +0.040404 0.646465 0.647689 +0.040404 0.656566 0.657178 +0.040404 0.666667 0.666667 +0.040404 0.676768 0.676155 +0.040404 0.686869 0.685644 +0.040404 0.696970 0.695133 +0.040404 0.707071 0.704622 +0.040404 0.717172 0.714111 +0.040404 0.727273 0.723600 +0.040404 0.737374 0.733088 +0.040404 0.747475 0.742577 +0.040404 0.757576 0.752066 +0.040404 0.767677 0.761555 +0.040404 0.777778 0.771044 +0.040404 0.787879 0.780533 +0.040404 0.797980 0.790021 +0.040404 0.808081 0.799510 +0.040404 0.818182 0.808999 +0.040404 0.828283 0.818488 +0.040404 0.838384 0.827977 +0.040404 0.848485 0.837466 +0.040404 0.858586 0.846954 +0.040404 0.868687 0.856443 +0.040404 0.878788 0.865932 +0.040404 0.888889 0.875421 +0.040404 0.898990 0.884910 +0.040404 0.909091 0.894399 +0.040404 0.919192 0.903887 +0.040404 0.929293 0.913376 +0.040404 0.939394 0.922865 +0.040404 0.949495 0.932354 +0.040404 0.959596 0.941843 +0.040404 0.969697 0.951331 +0.040404 0.979798 0.960820 +0.040404 0.989899 0.970309 +0.040404 1.000000 0.979798 + +0.050505 0.000000 0.050505 +0.050505 0.010101 0.059841 +0.050505 0.020202 0.069177 +0.050505 0.030303 0.078512 +0.050505 0.040404 0.087848 +0.050505 0.050505 0.097184 +0.050505 0.060606 0.106520 +0.050505 0.070707 0.115856 +0.050505 0.080808 0.125191 +0.050505 0.090909 0.134527 +0.050505 0.101010 0.143863 +0.050505 0.111111 0.153199 +0.050505 0.121212 0.162534 +0.050505 0.131313 0.171870 +0.050505 0.141414 0.181206 +0.050505 0.151515 0.190542 +0.050505 0.161616 0.199878 +0.050505 0.171717 0.209213 +0.050505 0.181818 0.218549 +0.050505 0.191919 0.227885 +0.050505 0.202020 0.237221 +0.050505 0.212121 0.246556 +0.050505 0.222222 0.255892 +0.050505 0.232323 0.265228 +0.050505 0.242424 0.274564 +0.050505 0.252525 0.283900 +0.050505 0.262626 0.293235 +0.050505 0.272727 0.302571 +0.050505 0.282828 0.311907 +0.050505 0.292929 0.321243 +0.050505 0.303030 0.330579 +0.050505 0.313131 0.339914 +0.050505 0.323232 0.349250 +0.050505 0.333333 0.358586 +0.050505 0.343434 0.367922 +0.050505 0.353535 0.377257 +0.050505 0.363636 0.386593 +0.050505 0.373737 0.395929 +0.050505 0.383838 0.405265 +0.050505 0.393939 0.414601 +0.050505 0.404040 0.423936 +0.050505 0.414141 0.433272 +0.050505 0.424242 0.442608 +0.050505 0.434343 0.451944 +0.050505 0.444444 0.461279 +0.050505 0.454545 0.470615 +0.050505 0.464646 0.479951 +0.050505 0.474747 0.489287 +0.050505 0.484848 0.498623 +0.050505 0.494949 0.507958 +0.050505 0.505051 0.517294 +0.050505 0.515152 0.526630 +0.050505 0.525253 0.535966 +0.050505 0.535354 0.545301 +0.050505 0.545455 0.554637 +0.050505 0.555556 0.563973 +0.050505 0.565657 0.573309 +0.050505 0.575758 0.582645 +0.050505 0.585859 0.591980 +0.050505 0.595960 0.601316 +0.050505 0.606061 0.610652 +0.050505 0.616162 0.619988 +0.050505 0.626263 0.629324 +0.050505 0.636364 0.638659 +0.050505 0.646465 0.647995 +0.050505 0.656566 0.657331 +0.050505 0.666667 0.666667 +0.050505 0.676768 0.676002 +0.050505 0.686869 0.685338 +0.050505 0.696970 0.694674 +0.050505 0.707071 0.704010 +0.050505 0.717172 0.713346 +0.050505 0.727273 0.722681 +0.050505 0.737374 0.732017 +0.050505 0.747475 0.741353 +0.050505 0.757576 0.750689 +0.050505 0.767677 0.760024 +0.050505 0.777778 0.769360 +0.050505 0.787879 0.778696 +0.050505 0.797980 0.788032 +0.050505 0.808081 0.797368 +0.050505 0.818182 0.806703 +0.050505 0.828283 0.816039 +0.050505 0.838384 0.825375 +0.050505 0.848485 0.834711 +0.050505 0.858586 0.844047 +0.050505 0.868687 0.853382 +0.050505 0.878788 0.862718 +0.050505 0.888889 0.872054 +0.050505 0.898990 0.881390 +0.050505 0.909091 0.890725 +0.050505 0.919192 0.900061 +0.050505 0.929293 0.909397 +0.050505 0.939394 0.918733 +0.050505 0.949495 0.928069 +0.050505 0.959596 0.937404 +0.050505 0.969697 0.946740 +0.050505 0.979798 0.956076 +0.050505 0.989899 0.965412 +0.050505 1.000000 0.974747 + +0.060606 0.000000 0.060606 +0.060606 0.010101 0.069789 +0.060606 0.020202 0.078972 +0.060606 0.030303 0.088154 +0.060606 0.040404 0.097337 +0.060606 0.050505 0.106520 +0.060606 0.060606 0.115702 +0.060606 0.070707 0.124885 +0.060606 0.080808 0.134068 +0.060606 0.090909 0.143251 +0.060606 0.101010 0.152433 +0.060606 0.111111 0.161616 +0.060606 0.121212 0.170799 +0.060606 0.131313 0.179982 +0.060606 0.141414 0.189164 +0.060606 0.151515 0.198347 +0.060606 0.161616 0.207530 +0.060606 0.171717 0.216713 +0.060606 0.181818 0.225895 +0.060606 0.191919 0.235078 +0.060606 0.202020 0.244261 +0.060606 0.212121 0.253444 +0.060606 0.222222 0.262626 +0.060606 0.232323 0.271809 +0.060606 0.242424 0.280992 +0.060606 0.252525 0.290174 +0.060606 0.262626 0.299357 +0.060606 0.272727 0.308540 +0.060606 0.282828 0.317723 +0.060606 0.292929 0.326905 +0.060606 0.303030 0.336088 +0.060606 0.313131 0.345271 +0.060606 0.323232 0.354454 +0.060606 0.333333 0.363636 +0.060606 0.343434 0.372819 +0.060606 0.353535 0.382002 +0.060606 0.363636 0.391185 +0.060606 0.373737 0.400367 +0.060606 0.383838 0.409550 +0.060606 0.393939 0.418733 +0.060606 0.404040 0.427916 +0.060606 0.414141 0.437098 +0.060606 0.424242 0.446281 +0.060606 0.434343 0.455464 +0.060606 0.444444 0.464646 +0.060606 0.454545 0.473829 +0.060606 0.464646 0.483012 +0.060606 0.474747 0.492195 +0.060606 0.484848 0.501377 +0.060606 0.494949 0.510560 +0.060606 0.505051 0.519743 +0.060606 0.515152 0.528926 +0.060606 0.525253 0.538108 +0.060606 0.535354 0.547291 +0.060606 0.545455 0.556474 +0.060606 0.555556 0.565657 +0.060606 0.565657 0.574839 +0.060606 0.575758 0.584022 +0.060606 0.585859 0.593205 +0.060606 0.595960 0.602388 +0.060606 0.606061 0.611570 +0.060606 0.616162 0.620753 +0.060606 0.626263 0.629936 +0.060606 0.636364 0.639118 +0.060606 0.646465 0.648301 +0.060606 0.656566 0.657484 +0.060606 0.666667 0.666667 +0.060606 0.676768 0.675849 +0.060606 0.686869 0.685032 +0.060606 0.696970 0.694215 +0.060606 0.707071 0.703398 +0.060606 0.717172 0.712580 +0.060606 0.727273 0.721763 +0.060606 0.737374 0.730946 +0.060606 0.747475 0.740129 +0.060606 0.757576 0.749311 +0.060606 0.767677 0.758494 +0.060606 0.777778 0.767677 +0.060606 0.787879 0.776860 +0.060606 0.797980 0.786042 +0.060606 0.808081 0.795225 +0.060606 0.818182 0.804408 +0.060606 0.828283 0.813590 +0.060606 0.838384 0.822773 +0.060606 0.848485 0.831956 +0.060606 0.858586 0.841139 +0.060606 0.868687 0.850321 +0.060606 0.878788 0.859504 +0.060606 0.888889 0.868687 +0.060606 0.898990 0.877870 +0.060606 0.909091 0.887052 +0.060606 0.919192 0.896235 +0.060606 0.929293 0.905418 +0.060606 0.939394 0.914601 +0.060606 0.949495 0.923783 +0.060606 0.959596 0.932966 +0.060606 0.969697 0.942149 +0.060606 0.979798 0.951331 +0.060606 0.989899 0.960514 +0.060606 1.000000 0.969697 + +0.070707 0.000000 0.070707 +0.070707 0.010101 0.079737 +0.070707 0.020202 0.088766 +0.070707 0.030303 0.097796 +0.070707 0.040404 0.106826 +0.070707 0.050505 0.115856 +0.070707 0.060606 0.124885 +0.070707 0.070707 0.133915 +0.070707 0.080808 0.142945 +0.070707 0.090909 0.151974 +0.070707 0.101010 0.161004 +0.070707 0.111111 0.170034 +0.070707 0.121212 0.179063 +0.070707 0.131313 0.188093 +0.070707 0.141414 0.197123 +0.070707 0.151515 0.206152 +0.070707 0.161616 0.215182 +0.070707 0.171717 0.224212 +0.070707 0.181818 0.233242 +0.070707 0.191919 0.242271 +0.070707 0.202020 0.251301 +0.070707 0.212121 0.260331 +0.070707 0.222222 0.269360 +0.070707 0.232323 0.278390 +0.070707 0.242424 0.287420 +0.070707 0.252525 0.296449 +0.070707 0.262626 0.305479 +0.070707 0.272727 0.314509 +0.070707 0.282828 0.323538 +0.070707 0.292929 0.332568 +0.070707 0.303030 0.341598 +0.070707 0.313131 0.350627 +0.070707 0.323232 0.359657 +0.070707 0.333333 0.368687 +0.070707 0.343434 0.377717 +0.070707 0.353535 0.386746 +0.070707 0.363636 0.395776 +0.070707 0.373737 0.404806 +0.070707 0.383838 0.413835 +0.070707 0.393939 0.422865 +0.070707 0.404040 0.431895 +0.070707 0.414141 0.440924 +0.070707 0.424242 0.449954 +0.070707 0.434343 0.458984 +0.070707 0.444444 0.468013 +0.070707 0.454545 0.477043 +0.070707 0.464646 0.486073 +0.070707 0.474747 0.495103 +0.070707 0.484848 0.504132 +0.070707 0.494949 0.513162 +0.070707 0.505051 0.522192 +0.070707 0.515152 0.531221 +0.070707 0.525253 0.540251 +0.070707 0.535354 0.549281 +0.070707 0.545455 0.558310 +0.070707 0.555556 0.567340 +0.070707 0.565657 0.576370 +0.070707 0.575758 0.585399 +0.070707 0.585859 0.594429 +0.070707 0.595960 0.603459 +0.070707 0.606061 0.612489 +0.070707 0.616162 0.621518 +0.070707 0.626263 0.630548 +0.070707 0.636364 0.639578 +0.070707 0.646465 0.648607 +0.070707 0.656566 0.657637 +0.070707 0.666667 0.666667 +0.070707 0.676768 0.675696 +0.070707 0.686869 0.684726 +0.070707 0.696970 0.693756 +0.070707 0.707071 0.702785 +0.070707 0.717172 0.711815 +0.070707 0.727273 0.720845 +0.070707 0.737374 0.729875 +0.070707 0.747475 0.738904 +0.070707 0.757576 0.747934 +0.070707 0.767677 0.756964 +0.070707 0.777778 0.765993 +0.070707 0.787879 0.775023 +0.070707 0.797980 0.784053 +0.070707 0.808081 0.793082 +0.070707 0.818182 0.802112 +0.070707 0.828283 0.811142 +0.070707 0.838384 0.820171 +0.070707 0.848485 0.829201 +0.070707 0.858586 0.838231 +0.070707 0.868687 0.847260 +0.070707 0.878788 0.856290 +0.070707 0.888889 0.865320 +0.070707 0.898990 0.874350 +0.070707 0.909091 0.883379 +0.070707 0.919192 0.892409 +0.070707 0.929293 0.901439 +0.070707 0.939394 0.910468 +0.070707 0.949495 0.919498 +0.070707 0.959596 0.928528 +0.070707 0.969697 0.937557 +0.070707 0.979798 0.946587 +0.070707 0.989899 0.955617 +0.070707 1.000000 0.964646 + +0.080808 0.000000 0.080808 +0.080808 0.010101 0.089685 +0.080808 0.020202 0.098561 +0.080808 0.030303 0.107438 +0.080808 0.040404 0.116315 +0.080808 0.050505 0.125191 +0.080808 0.060606 0.134068 +0.080808 0.070707 0.142945 +0.080808 0.080808 0.151821 +0.080808 0.090909 0.160698 +0.080808 0.101010 0.169575 +0.080808 0.111111 0.178451 +0.080808 0.121212 0.187328 +0.080808 0.131313 0.196204 +0.080808 0.141414 0.205081 +0.080808 0.151515 0.213958 +0.080808 0.161616 0.222834 +0.080808 0.171717 0.231711 +0.080808 0.181818 0.240588 +0.080808 0.191919 0.249464 +0.080808 0.202020 0.258341 +0.080808 0.212121 0.267218 +0.080808 0.222222 0.276094 +0.080808 0.232323 0.284971 +0.080808 0.242424 0.293848 +0.080808 0.252525 0.302724 +0.080808 0.262626 0.311601 +0.080808 0.272727 0.320478 +0.080808 0.282828 0.329354 +0.080808 0.292929 0.338231 +0.080808 0.303030 0.347107 +0.080808 0.313131 0.355984 +0.080808 0.323232 0.364861 +0.080808 0.333333 0.373737 +0.080808 0.343434 0.382614 +0.080808 0.353535 0.391491 +0.080808 0.363636 0.400367 +0.080808 0.373737 0.409244 +0.080808 0.383838 0.418121 +0.080808 0.393939 0.426997 +0.080808 0.404040 0.435874 +0.080808 0.414141 0.444751 +0.080808 0.424242 0.453627 +0.080808 0.434343 0.462504 +0.080808 0.444444 0.471380 +0.080808 0.454545 0.480257 +0.080808 0.464646 0.489134 +0.080808 0.474747 0.498010 +0.080808 0.484848 0.506887 +0.080808 0.494949 0.515764 +0.080808 0.505051 0.524640 +0.080808 0.515152 0.533517 +0.080808 0.525253 0.542394 +0.080808 0.535354 0.551270 +0.080808 0.545455 0.560147 +0.080808 0.555556 0.569024 +0.080808 0.565657 0.577900 +0.080808 0.575758 0.586777 +0.080808 0.585859 0.595654 +0.080808 0.595960 0.604530 +0.080808 0.606061 0.613407 +0.080808 0.616162 0.622283 +0.080808 0.626263 0.631160 +0.080808 0.636364 0.640037 +0.080808 0.646465 0.648913 +0.080808 0.656566 0.657790 +0.080808 0.666667 0.666667 +0.080808 0.676768 0.675543 +0.080808 0.686869 0.684420 +0.080808 0.696970 0.693297 +0.080808 0.707071 0.702173 +0.080808 0.717172 0.711050 +0.080808 0.727273 0.719927 +0.080808 0.737374 0.728803 +0.080808 0.747475 0.737680 +0.080808 0.757576 0.746556 +0.080808 0.767677 0.755433 +0.080808 0.777778 0.764310 +0.080808 0.787879 0.773186 +0.080808 0.797980 0.782063 +0.080808 0.808081 0.790940 +0.080808 0.818182 0.799816 +0.080808 0.828283 0.808693 +0.080808 0.838384 0.817570 +0.080808 0.848485 0.826446 +0.080808 0.858586 0.835323 +0.080808 0.868687 0.844200 +0.080808 0.878788 0.853076 +0.080808 0.888889 0.861953 +0.080808 0.898990 0.870830 +0.080808 0.909091 0.879706 +0.080808 0.919192 0.888583 +0.080808 0.929293 0.897459 +0.080808 0.939394 0.906336 +0.080808 0.949495 0.915213 +0.080808 0.959596 0.924089 +0.080808 0.969697 0.932966 +0.080808 0.979798 0.941843 +0.080808 0.989899 0.950719 +0.080808 1.000000 0.959596 + +0.090909 0.000000 0.090909 +0.090909 0.010101 0.099633 +0.090909 0.020202 0.108356 +0.090909 0.030303 0.117080 +0.090909 0.040404 0.125803 +0.090909 0.050505 0.134527 +0.090909 0.060606 0.143251 +0.090909 0.070707 0.151974 +0.090909 0.080808 0.160698 +0.090909 0.090909 0.169421 +0.090909 0.101010 0.178145 +0.090909 0.111111 0.186869 +0.090909 0.121212 0.195592 +0.090909 0.131313 0.204316 +0.090909 0.141414 0.213039 +0.090909 0.151515 0.221763 +0.090909 0.161616 0.230487 +0.090909 0.171717 0.239210 +0.090909 0.181818 0.247934 +0.090909 0.191919 0.256657 +0.090909 0.202020 0.265381 +0.090909 0.212121 0.274105 +0.090909 0.222222 0.282828 +0.090909 0.232323 0.291552 +0.090909 0.242424 0.300275 +0.090909 0.252525 0.308999 +0.090909 0.262626 0.317723 +0.090909 0.272727 0.326446 +0.090909 0.282828 0.335170 +0.090909 0.292929 0.343893 +0.090909 0.303030 0.352617 +0.090909 0.313131 0.361341 +0.090909 0.323232 0.370064 +0.090909 0.333333 0.378788 +0.090909 0.343434 0.387511 +0.090909 0.353535 0.396235 +0.090909 0.363636 0.404959 +0.090909 0.373737 0.413682 +0.090909 0.383838 0.422406 +0.090909 0.393939 0.431129 +0.090909 0.404040 0.439853 +0.090909 0.414141 0.448577 +0.090909 0.424242 0.457300 +0.090909 0.434343 0.466024 +0.090909 0.444444 0.474747 +0.090909 0.454545 0.483471 +0.090909 0.464646 0.492195 +0.090909 0.474747 0.500918 +0.090909 0.484848 0.509642 +0.090909 0.494949 0.518365 +0.090909 0.505051 0.527089 +0.090909 0.515152 0.535813 +0.090909 0.525253 0.544536 +0.090909 0.535354 0.553260 +0.090909 0.545455 0.561983 +0.090909 0.555556 0.570707 +0.090909 0.565657 0.579431 +0.090909 0.575758 0.588154 +0.090909 0.585859 0.596878 +0.090909 0.595960 0.605601 +0.090909 0.606061 0.614325 +0.090909 0.616162 0.623049 +0.090909 0.626263 0.631772 +0.090909 0.636364 0.640496 +0.090909 0.646465 0.649219 +0.090909 0.656566 0.657943 +0.090909 0.666667 0.666667 +0.090909 0.676768 0.675390 +0.090909 0.686869 0.684114 +0.090909 0.696970 0.692837 +0.090909 0.707071 0.701561 +0.090909 0.717172 0.710285 +0.090909 0.727273 0.719008 +0.090909 0.737374 0.727732 +0.090909 0.747475 0.736455 +0.090909 0.757576 0.745179 +0.090909 0.767677 0.753903 +0.090909 0.777778 0.762626 +0.090909 0.787879 0.771350 +0.090909 0.797980 0.780073 +0.090909 0.808081 0.788797 +0.090909 0.818182 0.797521 +0.090909 0.828283 0.806244 +0.090909 0.838384 0.814968 +0.090909 0.848485 0.823691 +0.090909 0.858586 0.832415 +0.090909 0.868687 0.841139 +0.090909 0.878788 0.849862 +0.090909 0.888889 0.858586 +0.090909 0.898990 0.867309 +0.090909 0.909091 0.876033 +0.090909 0.919192 0.884757 +0.090909 0.929293 0.893480 +0.090909 0.939394 0.902204 +0.090909 0.949495 0.910927 +0.090909 0.959596 0.919651 +0.090909 0.969697 0.928375 +0.090909 0.979798 0.937098 +0.090909 0.989899 0.945822 +0.090909 1.000000 0.954545 + +0.101010 0.000000 0.101010 +0.101010 0.010101 0.109581 +0.101010 0.020202 0.118151 +0.101010 0.030303 0.126722 +0.101010 0.040404 0.135292 +0.101010 0.050505 0.143863 +0.101010 0.060606 0.152433 +0.101010 0.070707 0.161004 +0.101010 0.080808 0.169575 +0.101010 0.090909 0.178145 +0.101010 0.101010 0.186716 +0.101010 0.111111 0.195286 +0.101010 0.121212 0.203857 +0.101010 0.131313 0.212427 +0.101010 0.141414 0.220998 +0.101010 0.151515 0.229568 +0.101010 0.161616 0.238139 +0.101010 0.171717 0.246710 +0.101010 0.181818 0.255280 +0.101010 0.191919 0.263851 +0.101010 0.202020 0.272421 +0.101010 0.212121 0.280992 +0.101010 0.222222 0.289562 +0.101010 0.232323 0.298133 +0.101010 0.242424 0.306703 +0.101010 0.252525 0.315274 +0.101010 0.262626 0.323845 +0.101010 0.272727 0.332415 +0.101010 0.282828 0.340986 +0.101010 0.292929 0.349556 +0.101010 0.303030 0.358127 +0.101010 0.313131 0.366697 +0.101010 0.323232 0.375268 +0.101010 0.333333 0.383838 +0.101010 0.343434 0.392409 +0.101010 0.353535 0.400979 +0.101010 0.363636 0.409550 +0.101010 0.373737 0.418121 +0.101010 0.383838 0.426691 +0.101010 0.393939 0.435262 +0.101010 0.404040 0.443832 +0.101010 0.414141 0.452403 +0.101010 0.424242 0.460973 +0.101010 0.434343 0.469544 +0.101010 0.444444 0.478114 +0.101010 0.454545 0.486685 +0.101010 0.464646 0.495256 +0.101010 0.474747 0.503826 +0.101010 0.484848 0.512397 +0.101010 0.494949 0.520967 +0.101010 0.505051 0.529538 +0.101010 0.515152 0.538108 +0.101010 0.525253 0.546679 +0.101010 0.535354 0.555249 +0.101010 0.545455 0.563820 +0.101010 0.555556 0.572391 +0.101010 0.565657 0.580961 +0.101010 0.575758 0.589532 +0.101010 0.585859 0.598102 +0.101010 0.595960 0.606673 +0.101010 0.606061 0.615243 +0.101010 0.616162 0.623814 +0.101010 0.626263 0.632384 +0.101010 0.636364 0.640955 +0.101010 0.646465 0.649526 +0.101010 0.656566 0.658096 +0.101010 0.666667 0.666667 +0.101010 0.676768 0.675237 +0.101010 0.686869 0.683808 +0.101010 0.696970 0.692378 +0.101010 0.707071 0.700949 +0.101010 0.717172 0.709519 +0.101010 0.727273 0.718090 +0.101010 0.737374 0.726661 +0.101010 0.747475 0.735231 +0.101010 0.757576 0.743802 +0.101010 0.767677 0.752372 +0.101010 0.777778 0.760943 +0.101010 0.787879 0.769513 +0.101010 0.797980 0.778084 +0.101010 0.808081 0.786654 +0.101010 0.818182 0.795225 +0.101010 0.828283 0.803796 +0.101010 0.838384 0.812366 +0.101010 0.848485 0.820937 +0.101010 0.858586 0.829507 +0.101010 0.868687 0.838078 +0.101010 0.878788 0.846648 +0.101010 0.888889 0.855219 +0.101010 0.898990 0.863789 +0.101010 0.909091 0.872360 +0.101010 0.919192 0.880931 +0.101010 0.929293 0.889501 +0.101010 0.939394 0.898072 +0.101010 0.949495 0.906642 +0.101010 0.959596 0.915213 +0.101010 0.969697 0.923783 +0.101010 0.979798 0.932354 +0.101010 0.989899 0.940924 +0.101010 1.000000 0.949495 + +0.111111 0.000000 0.111111 +0.111111 0.010101 0.119529 +0.111111 0.020202 0.127946 +0.111111 0.030303 0.136364 +0.111111 0.040404 0.144781 +0.111111 0.050505 0.153199 +0.111111 0.060606 0.161616 +0.111111 0.070707 0.170034 +0.111111 0.080808 0.178451 +0.111111 0.090909 0.186869 +0.111111 0.101010 0.195286 +0.111111 0.111111 0.203704 +0.111111 0.121212 0.212121 +0.111111 0.131313 0.220539 +0.111111 0.141414 0.228956 +0.111111 0.151515 0.237374 +0.111111 0.161616 0.245791 +0.111111 0.171717 0.254209 +0.111111 0.181818 0.262626 +0.111111 0.191919 0.271044 +0.111111 0.202020 0.279461 +0.111111 0.212121 0.287879 +0.111111 0.222222 0.296296 +0.111111 0.232323 0.304714 +0.111111 0.242424 0.313131 +0.111111 0.252525 0.321549 +0.111111 0.262626 0.329966 +0.111111 0.272727 0.338384 +0.111111 0.282828 0.346801 +0.111111 0.292929 0.355219 +0.111111 0.303030 0.363636 +0.111111 0.313131 0.372054 +0.111111 0.323232 0.380471 +0.111111 0.333333 0.388889 +0.111111 0.343434 0.397306 +0.111111 0.353535 0.405724 +0.111111 0.363636 0.414141 +0.111111 0.373737 0.422559 +0.111111 0.383838 0.430976 +0.111111 0.393939 0.439394 +0.111111 0.404040 0.447811 +0.111111 0.414141 0.456229 +0.111111 0.424242 0.464646 +0.111111 0.434343 0.473064 +0.111111 0.444444 0.481481 +0.111111 0.454545 0.489899 +0.111111 0.464646 0.498316 +0.111111 0.474747 0.506734 +0.111111 0.484848 0.515152 +0.111111 0.494949 0.523569 +0.111111 0.505051 0.531987 +0.111111 0.515152 0.540404 +0.111111 0.525253 0.548822 +0.111111 0.535354 0.557239 +0.111111 0.545455 0.565657 +0.111111 0.555556 0.574074 +0.111111 0.565657 0.582492 +0.111111 0.575758 0.590909 +0.111111 0.585859 0.599327 +0.111111 0.595960 0.607744 +0.111111 0.606061 0.616162 +0.111111 0.616162 0.624579 +0.111111 0.626263 0.632997 +0.111111 0.636364 0.641414 +0.111111 0.646465 0.649832 +0.111111 0.656566 0.658249 +0.111111 0.666667 0.666667 +0.111111 0.676768 0.675084 +0.111111 0.686869 0.683502 +0.111111 0.696970 0.691919 +0.111111 0.707071 0.700337 +0.111111 0.717172 0.708754 +0.111111 0.727273 0.717172 +0.111111 0.737374 0.725589 +0.111111 0.747475 0.734007 +0.111111 0.757576 0.742424 +0.111111 0.767677 0.750842 +0.111111 0.777778 0.759259 +0.111111 0.787879 0.767677 +0.111111 0.797980 0.776094 +0.111111 0.808081 0.784512 +0.111111 0.818182 0.792929 +0.111111 0.828283 0.801347 +0.111111 0.838384 0.809764 +0.111111 0.848485 0.818182 +0.111111 0.858586 0.826599 +0.111111 0.868687 0.835017 +0.111111 0.878788 0.843434 +0.111111 0.888889 0.851852 +0.111111 0.898990 0.860269 +0.111111 0.909091 0.868687 +0.111111 0.919192 0.877104 +0.111111 0.929293 0.885522 +0.111111 0.939394 0.893939 +0.111111 0.949495 0.902357 +0.111111 0.959596 0.910774 +0.111111 0.969697 0.919192 +0.111111 0.979798 0.927609 +0.111111 0.989899 0.936027 +0.111111 1.000000 0.944444 + +0.121212 0.000000 0.121212 +0.121212 0.010101 0.129477 +0.121212 0.020202 0.137741 +0.121212 0.030303 0.146006 +0.121212 0.040404 0.154270 +0.121212 0.050505 0.162534 +0.121212 0.060606 0.170799 +0.121212 0.070707 0.179063 +0.121212 0.080808 0.187328 +0.121212 0.090909 0.195592 +0.121212 0.101010 0.203857 +0.121212 0.111111 0.212121 +0.121212 0.121212 0.220386 +0.121212 0.131313 0.228650 +0.121212 0.141414 0.236915 +0.121212 0.151515 0.245179 +0.121212 0.161616 0.253444 +0.121212 0.171717 0.261708 +0.121212 0.181818 0.269972 +0.121212 0.191919 0.278237 +0.121212 0.202020 0.286501 +0.121212 0.212121 0.294766 +0.121212 0.222222 0.303030 +0.121212 0.232323 0.311295 +0.121212 0.242424 0.319559 +0.121212 0.252525 0.327824 +0.121212 0.262626 0.336088 +0.121212 0.272727 0.344353 +0.121212 0.282828 0.352617 +0.121212 0.292929 0.360882 +0.121212 0.303030 0.369146 +0.121212 0.313131 0.377410 +0.121212 0.323232 0.385675 +0.121212 0.333333 0.393939 +0.121212 0.343434 0.402204 +0.121212 0.353535 0.410468 +0.121212 0.363636 0.418733 +0.121212 0.373737 0.426997 +0.121212 0.383838 0.435262 +0.121212 0.393939 0.443526 +0.121212 0.404040 0.451791 +0.121212 0.414141 0.460055 +0.121212 0.424242 0.468320 +0.121212 0.434343 0.476584 +0.121212 0.444444 0.484848 +0.121212 0.454545 0.493113 +0.121212 0.464646 0.501377 +0.121212 0.474747 0.509642 +0.121212 0.484848 0.517906 +0.121212 0.494949 0.526171 +0.121212 0.505051 0.534435 +0.121212 0.515152 0.542700 +0.121212 0.525253 0.550964 +0.121212 0.535354 0.559229 +0.121212 0.545455 0.567493 +0.121212 0.555556 0.575758 +0.121212 0.565657 0.584022 +0.121212 0.575758 0.592287 +0.121212 0.585859 0.600551 +0.121212 0.595960 0.608815 +0.121212 0.606061 0.617080 +0.121212 0.616162 0.625344 +0.121212 0.626263 0.633609 +0.121212 0.636364 0.641873 +0.121212 0.646465 0.650138 +0.121212 0.656566 0.658402 +0.121212 0.666667 0.666667 +0.121212 0.676768 0.674931 +0.121212 0.686869 0.683196 +0.121212 0.696970 0.691460 +0.121212 0.707071 0.699725 +0.121212 0.717172 0.707989 +0.121212 0.727273 0.716253 +0.121212 0.737374 0.724518 +0.121212 0.747475 0.732782 +0.121212 0.757576 0.741047 +0.121212 0.767677 0.749311 +0.121212 0.777778 0.757576 +0.121212 0.787879 0.765840 +0.121212 0.797980 0.774105 +0.121212 0.808081 0.782369 +0.121212 0.818182 0.790634 +0.121212 0.828283 0.798898 +0.121212 0.838384 0.807163 +0.121212 0.848485 0.815427 +0.121212 0.858586 0.823691 +0.121212 0.868687 0.831956 +0.121212 0.878788 0.840220 +0.121212 0.888889 0.848485 +0.121212 0.898990 0.856749 +0.121212 0.909091 0.865014 +0.121212 0.919192 0.873278 +0.121212 0.929293 0.881543 +0.121212 0.939394 0.889807 +0.121212 0.949495 0.898072 +0.121212 0.959596 0.906336 +0.121212 0.969697 0.914601 +0.121212 0.979798 0.922865 +0.121212 0.989899 0.931129 +0.121212 1.000000 0.939394 + +0.131313 0.000000 0.131313 +0.131313 0.010101 0.139425 +0.131313 0.020202 0.147536 +0.131313 0.030303 0.155647 +0.131313 0.040404 0.163759 +0.131313 0.050505 0.171870 +0.131313 0.060606 0.179982 +0.131313 0.070707 0.188093 +0.131313 0.080808 0.196204 +0.131313 0.090909 0.204316 +0.131313 0.101010 0.212427 +0.131313 0.111111 0.220539 +0.131313 0.121212 0.228650 +0.131313 0.131313 0.236762 +0.131313 0.141414 0.244873 +0.131313 0.151515 0.252984 +0.131313 0.161616 0.261096 +0.131313 0.171717 0.269207 +0.131313 0.181818 0.277319 +0.131313 0.191919 0.285430 +0.131313 0.202020 0.293541 +0.131313 0.212121 0.301653 +0.131313 0.222222 0.309764 +0.131313 0.232323 0.317876 +0.131313 0.242424 0.325987 +0.131313 0.252525 0.334099 +0.131313 0.262626 0.342210 +0.131313 0.272727 0.350321 +0.131313 0.282828 0.358433 +0.131313 0.292929 0.366544 +0.131313 0.303030 0.374656 +0.131313 0.313131 0.382767 +0.131313 0.323232 0.390878 +0.131313 0.333333 0.398990 +0.131313 0.343434 0.407101 +0.131313 0.353535 0.415213 +0.131313 0.363636 0.423324 +0.131313 0.373737 0.431436 +0.131313 0.383838 0.439547 +0.131313 0.393939 0.447658 +0.131313 0.404040 0.455770 +0.131313 0.414141 0.463881 +0.131313 0.424242 0.471993 +0.131313 0.434343 0.480104 +0.131313 0.444444 0.488215 +0.131313 0.454545 0.496327 +0.131313 0.464646 0.504438 +0.131313 0.474747 0.512550 +0.131313 0.484848 0.520661 +0.131313 0.494949 0.528773 +0.131313 0.505051 0.536884 +0.131313 0.515152 0.544995 +0.131313 0.525253 0.553107 +0.131313 0.535354 0.561218 +0.131313 0.545455 0.569330 +0.131313 0.555556 0.577441 +0.131313 0.565657 0.585552 +0.131313 0.575758 0.593664 +0.131313 0.585859 0.601775 +0.131313 0.595960 0.609887 +0.131313 0.606061 0.617998 +0.131313 0.616162 0.626110 +0.131313 0.626263 0.634221 +0.131313 0.636364 0.642332 +0.131313 0.646465 0.650444 +0.131313 0.656566 0.658555 +0.131313 0.666667 0.666667 +0.131313 0.676768 0.674778 +0.131313 0.686869 0.682890 +0.131313 0.696970 0.691001 +0.131313 0.707071 0.699112 +0.131313 0.717172 0.707224 +0.131313 0.727273 0.715335 +0.131313 0.737374 0.723447 +0.131313 0.747475 0.731558 +0.131313 0.757576 0.739669 +0.131313 0.767677 0.747781 +0.131313 0.777778 0.755892 +0.131313 0.787879 0.764004 +0.131313 0.797980 0.772115 +0.131313 0.808081 0.780227 +0.131313 0.818182 0.788338 +0.131313 0.828283 0.796449 +0.131313 0.838384 0.804561 +0.131313 0.848485 0.812672 +0.131313 0.858586 0.820784 +0.131313 0.868687 0.828895 +0.131313 0.878788 0.837006 +0.131313 0.888889 0.845118 +0.131313 0.898990 0.853229 +0.131313 0.909091 0.861341 +0.131313 0.919192 0.869452 +0.131313 0.929293 0.877564 +0.131313 0.939394 0.885675 +0.131313 0.949495 0.893786 +0.131313 0.959596 0.901898 +0.131313 0.969697 0.910009 +0.131313 0.979798 0.918121 +0.131313 0.989899 0.926232 +0.131313 1.000000 0.934343 + +0.141414 0.000000 0.141414 +0.141414 0.010101 0.149373 +0.141414 0.020202 0.157331 +0.141414 0.030303 0.165289 +0.141414 0.040404 0.173248 +0.141414 0.050505 0.181206 +0.141414 0.060606 0.189164 +0.141414 0.070707 0.197123 +0.141414 0.080808 0.205081 +0.141414 0.090909 0.213039 +0.141414 0.101010 0.220998 +0.141414 0.111111 0.228956 +0.141414 0.121212 0.236915 +0.141414 0.131313 0.244873 +0.141414 0.141414 0.252831 +0.141414 0.151515 0.260790 +0.141414 0.161616 0.268748 +0.141414 0.171717 0.276706 +0.141414 0.181818 0.284665 +0.141414 0.191919 0.292623 +0.141414 0.202020 0.300582 +0.141414 0.212121 0.308540 +0.141414 0.222222 0.316498 +0.141414 0.232323 0.324457 +0.141414 0.242424 0.332415 +0.141414 0.252525 0.340373 +0.141414 0.262626 0.348332 +0.141414 0.272727 0.356290 +0.141414 0.282828 0.364249 +0.141414 0.292929 0.372207 +0.141414 0.303030 0.380165 +0.141414 0.313131 0.388124 +0.141414 0.323232 0.396082 +0.141414 0.333333 0.404040 +0.141414 0.343434 0.411999 +0.141414 0.353535 0.419957 +0.141414 0.363636 0.427916 +0.141414 0.373737 0.435874 +0.141414 0.383838 0.443832 +0.141414 0.393939 0.451791 +0.141414 0.404040 0.459749 +0.141414 0.414141 0.467707 +0.141414 0.424242 0.475666 +0.141414 0.434343 0.483624 +0.141414 0.444444 0.491582 +0.141414 0.454545 0.499541 +0.141414 0.464646 0.507499 +0.141414 0.474747 0.515458 +0.141414 0.484848 0.523416 +0.141414 0.494949 0.531374 +0.141414 0.505051 0.539333 +0.141414 0.515152 0.547291 +0.141414 0.525253 0.555249 +0.141414 0.535354 0.563208 +0.141414 0.545455 0.571166 +0.141414 0.555556 0.579125 +0.141414 0.565657 0.587083 +0.141414 0.575758 0.595041 +0.141414 0.585859 0.603000 +0.141414 0.595960 0.610958 +0.141414 0.606061 0.618916 +0.141414 0.616162 0.626875 +0.141414 0.626263 0.634833 +0.141414 0.636364 0.642792 +0.141414 0.646465 0.650750 +0.141414 0.656566 0.658708 +0.141414 0.666667 0.666667 +0.141414 0.676768 0.674625 +0.141414 0.686869 0.682583 +0.141414 0.696970 0.690542 +0.141414 0.707071 0.698500 +0.141414 0.717172 0.706459 +0.141414 0.727273 0.714417 +0.141414 0.737374 0.722375 +0.141414 0.747475 0.730334 +0.141414 0.757576 0.738292 +0.141414 0.767677 0.746250 +0.141414 0.777778 0.754209 +0.141414 0.787879 0.762167 +0.141414 0.797980 0.770125 +0.141414 0.808081 0.778084 +0.141414 0.818182 0.786042 +0.141414 0.828283 0.794001 +0.141414 0.838384 0.801959 +0.141414 0.848485 0.809917 +0.141414 0.858586 0.817876 +0.141414 0.868687 0.825834 +0.141414 0.878788 0.833792 +0.141414 0.888889 0.841751 +0.141414 0.898990 0.849709 +0.141414 0.909091 0.857668 +0.141414 0.919192 0.865626 +0.141414 0.929293 0.873584 +0.141414 0.939394 0.881543 +0.141414 0.949495 0.889501 +0.141414 0.959596 0.897459 +0.141414 0.969697 0.905418 +0.141414 0.979798 0.913376 +0.141414 0.989899 0.921335 +0.141414 1.000000 0.929293 + +0.151515 0.000000 0.151515 +0.151515 0.010101 0.159320 +0.151515 0.020202 0.167126 +0.151515 0.030303 0.174931 +0.151515 0.040404 0.182736 +0.151515 0.050505 0.190542 +0.151515 0.060606 0.198347 +0.151515 0.070707 0.206152 +0.151515 0.080808 0.213958 +0.151515 0.090909 0.221763 +0.151515 0.101010 0.229568 +0.151515 0.111111 0.237374 +0.151515 0.121212 0.245179 +0.151515 0.131313 0.252984 +0.151515 0.141414 0.260790 +0.151515 0.151515 0.268595 +0.151515 0.161616 0.276400 +0.151515 0.171717 0.284206 +0.151515 0.181818 0.292011 +0.151515 0.191919 0.299816 +0.151515 0.202020 0.307622 +0.151515 0.212121 0.315427 +0.151515 0.222222 0.323232 +0.151515 0.232323 0.331038 +0.151515 0.242424 0.338843 +0.151515 0.252525 0.346648 +0.151515 0.262626 0.354454 +0.151515 0.272727 0.362259 +0.151515 0.282828 0.370064 +0.151515 0.292929 0.377870 +0.151515 0.303030 0.385675 +0.151515 0.313131 0.393480 +0.151515 0.323232 0.401286 +0.151515 0.333333 0.409091 +0.151515 0.343434 0.416896 +0.151515 0.353535 0.424702 +0.151515 0.363636 0.432507 +0.151515 0.373737 0.440312 +0.151515 0.383838 0.448118 +0.151515 0.393939 0.455923 +0.151515 0.404040 0.463728 +0.151515 0.414141 0.471534 +0.151515 0.424242 0.479339 +0.151515 0.434343 0.487144 +0.151515 0.444444 0.494949 +0.151515 0.454545 0.502755 +0.151515 0.464646 0.510560 +0.151515 0.474747 0.518365 +0.151515 0.484848 0.526171 +0.151515 0.494949 0.533976 +0.151515 0.505051 0.541781 +0.151515 0.515152 0.549587 +0.151515 0.525253 0.557392 +0.151515 0.535354 0.565197 +0.151515 0.545455 0.573003 +0.151515 0.555556 0.580808 +0.151515 0.565657 0.588613 +0.151515 0.575758 0.596419 +0.151515 0.585859 0.604224 +0.151515 0.595960 0.612029 +0.151515 0.606061 0.619835 +0.151515 0.616162 0.627640 +0.151515 0.626263 0.635445 +0.151515 0.636364 0.643251 +0.151515 0.646465 0.651056 +0.151515 0.656566 0.658861 +0.151515 0.666667 0.666667 +0.151515 0.676768 0.674472 +0.151515 0.686869 0.682277 +0.151515 0.696970 0.690083 +0.151515 0.707071 0.697888 +0.151515 0.717172 0.705693 +0.151515 0.727273 0.713499 +0.151515 0.737374 0.721304 +0.151515 0.747475 0.729109 +0.151515 0.757576 0.736915 +0.151515 0.767677 0.744720 +0.151515 0.777778 0.752525 +0.151515 0.787879 0.760331 +0.151515 0.797980 0.768136 +0.151515 0.808081 0.775941 +0.151515 0.818182 0.783747 +0.151515 0.828283 0.791552 +0.151515 0.838384 0.799357 +0.151515 0.848485 0.807163 +0.151515 0.858586 0.814968 +0.151515 0.868687 0.822773 +0.151515 0.878788 0.830579 +0.151515 0.888889 0.838384 +0.151515 0.898990 0.846189 +0.151515 0.909091 0.853994 +0.151515 0.919192 0.861800 +0.151515 0.929293 0.869605 +0.151515 0.939394 0.877410 +0.151515 0.949495 0.885216 +0.151515 0.959596 0.893021 +0.151515 0.969697 0.900826 +0.151515 0.979798 0.908632 +0.151515 0.989899 0.916437 +0.151515 1.000000 0.924242 + +0.161616 0.000000 0.161616 +0.161616 0.010101 0.169268 +0.161616 0.020202 0.176921 +0.161616 0.030303 0.184573 +0.161616 0.040404 0.192225 +0.161616 0.050505 0.199878 +0.161616 0.060606 0.207530 +0.161616 0.070707 0.215182 +0.161616 0.080808 0.222834 +0.161616 0.090909 0.230487 +0.161616 0.101010 0.238139 +0.161616 0.111111 0.245791 +0.161616 0.121212 0.253444 +0.161616 0.131313 0.261096 +0.161616 0.141414 0.268748 +0.161616 0.151515 0.276400 +0.161616 0.161616 0.284053 +0.161616 0.171717 0.291705 +0.161616 0.181818 0.299357 +0.161616 0.191919 0.307009 +0.161616 0.202020 0.314662 +0.161616 0.212121 0.322314 +0.161616 0.222222 0.329966 +0.161616 0.232323 0.337619 +0.161616 0.242424 0.345271 +0.161616 0.252525 0.352923 +0.161616 0.262626 0.360575 +0.161616 0.272727 0.368228 +0.161616 0.282828 0.375880 +0.161616 0.292929 0.383532 +0.161616 0.303030 0.391185 +0.161616 0.313131 0.398837 +0.161616 0.323232 0.406489 +0.161616 0.333333 0.414141 +0.161616 0.343434 0.421794 +0.161616 0.353535 0.429446 +0.161616 0.363636 0.437098 +0.161616 0.373737 0.444751 +0.161616 0.383838 0.452403 +0.161616 0.393939 0.460055 +0.161616 0.404040 0.467707 +0.161616 0.414141 0.475360 +0.161616 0.424242 0.483012 +0.161616 0.434343 0.490664 +0.161616 0.444444 0.498316 +0.161616 0.454545 0.505969 +0.161616 0.464646 0.513621 +0.161616 0.474747 0.521273 +0.161616 0.484848 0.528926 +0.161616 0.494949 0.536578 +0.161616 0.505051 0.544230 +0.161616 0.515152 0.551882 +0.161616 0.525253 0.559535 +0.161616 0.535354 0.567187 +0.161616 0.545455 0.574839 +0.161616 0.555556 0.582492 +0.161616 0.565657 0.590144 +0.161616 0.575758 0.597796 +0.161616 0.585859 0.605448 +0.161616 0.595960 0.613101 +0.161616 0.606061 0.620753 +0.161616 0.616162 0.628405 +0.161616 0.626263 0.636058 +0.161616 0.636364 0.643710 +0.161616 0.646465 0.651362 +0.161616 0.656566 0.659014 +0.161616 0.666667 0.666667 +0.161616 0.676768 0.674319 +0.161616 0.686869 0.681971 +0.161616 0.696970 0.689624 +0.161616 0.707071 0.697276 +0.161616 0.717172 0.704928 +0.161616 0.727273 0.712580 +0.161616 0.737374 0.720233 +0.161616 0.747475 0.727885 +0.161616 0.757576 0.735537 +0.161616 0.767677 0.743189 +0.161616 0.777778 0.750842 +0.161616 0.787879 0.758494 +0.161616 0.797980 0.766146 +0.161616 0.808081 0.773799 +0.161616 0.818182 0.781451 +0.161616 0.828283 0.789103 +0.161616 0.838384 0.796755 +0.161616 0.848485 0.804408 +0.161616 0.858586 0.812060 +0.161616 0.868687 0.819712 +0.161616 0.878788 0.827365 +0.161616 0.888889 0.835017 +0.161616 0.898990 0.842669 +0.161616 0.909091 0.850321 +0.161616 0.919192 0.857974 +0.161616 0.929293 0.865626 +0.161616 0.939394 0.873278 +0.161616 0.949495 0.880931 +0.161616 0.959596 0.888583 +0.161616 0.969697 0.896235 +0.161616 0.979798 0.903887 +0.161616 0.989899 0.911540 +0.161616 1.000000 0.919192 + +0.171717 0.000000 0.171717 +0.171717 0.010101 0.179216 +0.171717 0.020202 0.186716 +0.171717 0.030303 0.194215 +0.171717 0.040404 0.201714 +0.171717 0.050505 0.209213 +0.171717 0.060606 0.216713 +0.171717 0.070707 0.224212 +0.171717 0.080808 0.231711 +0.171717 0.090909 0.239210 +0.171717 0.101010 0.246710 +0.171717 0.111111 0.254209 +0.171717 0.121212 0.261708 +0.171717 0.131313 0.269207 +0.171717 0.141414 0.276706 +0.171717 0.151515 0.284206 +0.171717 0.161616 0.291705 +0.171717 0.171717 0.299204 +0.171717 0.181818 0.306703 +0.171717 0.191919 0.314203 +0.171717 0.202020 0.321702 +0.171717 0.212121 0.329201 +0.171717 0.222222 0.336700 +0.171717 0.232323 0.344200 +0.171717 0.242424 0.351699 +0.171717 0.252525 0.359198 +0.171717 0.262626 0.366697 +0.171717 0.272727 0.374197 +0.171717 0.282828 0.381696 +0.171717 0.292929 0.389195 +0.171717 0.303030 0.396694 +0.171717 0.313131 0.404193 +0.171717 0.323232 0.411693 +0.171717 0.333333 0.419192 +0.171717 0.343434 0.426691 +0.171717 0.353535 0.434190 +0.171717 0.363636 0.441690 +0.171717 0.373737 0.449189 +0.171717 0.383838 0.456688 +0.171717 0.393939 0.464187 +0.171717 0.404040 0.471687 +0.171717 0.414141 0.479186 +0.171717 0.424242 0.486685 +0.171717 0.434343 0.494184 +0.171717 0.444444 0.501684 +0.171717 0.454545 0.509183 +0.171717 0.464646 0.516682 +0.171717 0.474747 0.524181 +0.171717 0.484848 0.531680 +0.171717 0.494949 0.539180 +0.171717 0.505051 0.546679 +0.171717 0.515152 0.554178 +0.171717 0.525253 0.561677 +0.171717 0.535354 0.569177 +0.171717 0.545455 0.576676 +0.171717 0.555556 0.584175 +0.171717 0.565657 0.591674 +0.171717 0.575758 0.599174 +0.171717 0.585859 0.606673 +0.171717 0.595960 0.614172 +0.171717 0.606061 0.621671 +0.171717 0.616162 0.629170 +0.171717 0.626263 0.636670 +0.171717 0.636364 0.644169 +0.171717 0.646465 0.651668 +0.171717 0.656566 0.659167 +0.171717 0.666667 0.666667 +0.171717 0.676768 0.674166 +0.171717 0.686869 0.681665 +0.171717 0.696970 0.689164 +0.171717 0.707071 0.696664 +0.171717 0.717172 0.704163 +0.171717 0.727273 0.711662 +0.171717 0.737374 0.719161 +0.171717 0.747475 0.726661 +0.171717 0.757576 0.734160 +0.171717 0.767677 0.741659 +0.171717 0.777778 0.749158 +0.171717 0.787879 0.756657 +0.171717 0.797980 0.764157 +0.171717 0.808081 0.771656 +0.171717 0.818182 0.779155 +0.171717 0.828283 0.786654 +0.171717 0.838384 0.794154 +0.171717 0.848485 0.801653 +0.171717 0.858586 0.809152 +0.171717 0.868687 0.816651 +0.171717 0.878788 0.824151 +0.171717 0.888889 0.831650 +0.171717 0.898990 0.839149 +0.171717 0.909091 0.846648 +0.171717 0.919192 0.854148 +0.171717 0.929293 0.861647 +0.171717 0.939394 0.869146 +0.171717 0.949495 0.876645 +0.171717 0.959596 0.884144 +0.171717 0.969697 0.891644 +0.171717 0.979798 0.899143 +0.171717 0.989899 0.906642 +0.171717 1.000000 0.914141 + +0.181818 0.000000 0.181818 +0.181818 0.010101 0.189164 +0.181818 0.020202 0.196511 +0.181818 0.030303 0.203857 +0.181818 0.040404 0.211203 +0.181818 0.050505 0.218549 +0.181818 0.060606 0.225895 +0.181818 0.070707 0.233242 +0.181818 0.080808 0.240588 +0.181818 0.090909 0.247934 +0.181818 0.101010 0.255280 +0.181818 0.111111 0.262626 +0.181818 0.121212 0.269972 +0.181818 0.131313 0.277319 +0.181818 0.141414 0.284665 +0.181818 0.151515 0.292011 +0.181818 0.161616 0.299357 +0.181818 0.171717 0.306703 +0.181818 0.181818 0.314050 +0.181818 0.191919 0.321396 +0.181818 0.202020 0.328742 +0.181818 0.212121 0.336088 +0.181818 0.222222 0.343434 +0.181818 0.232323 0.350781 +0.181818 0.242424 0.358127 +0.181818 0.252525 0.365473 +0.181818 0.262626 0.372819 +0.181818 0.272727 0.380165 +0.181818 0.282828 0.387511 +0.181818 0.292929 0.394858 +0.181818 0.303030 0.402204 +0.181818 0.313131 0.409550 +0.181818 0.323232 0.416896 +0.181818 0.333333 0.424242 +0.181818 0.343434 0.431589 +0.181818 0.353535 0.438935 +0.181818 0.363636 0.446281 +0.181818 0.373737 0.453627 +0.181818 0.383838 0.460973 +0.181818 0.393939 0.468320 +0.181818 0.404040 0.475666 +0.181818 0.414141 0.483012 +0.181818 0.424242 0.490358 +0.181818 0.434343 0.497704 +0.181818 0.444444 0.505051 +0.181818 0.454545 0.512397 +0.181818 0.464646 0.519743 +0.181818 0.474747 0.527089 +0.181818 0.484848 0.534435 +0.181818 0.494949 0.541781 +0.181818 0.505051 0.549128 +0.181818 0.515152 0.556474 +0.181818 0.525253 0.563820 +0.181818 0.535354 0.571166 +0.181818 0.545455 0.578512 +0.181818 0.555556 0.585859 +0.181818 0.565657 0.593205 +0.181818 0.575758 0.600551 +0.181818 0.585859 0.607897 +0.181818 0.595960 0.615243 +0.181818 0.606061 0.622590 +0.181818 0.616162 0.629936 +0.181818 0.626263 0.637282 +0.181818 0.636364 0.644628 +0.181818 0.646465 0.651974 +0.181818 0.656566 0.659320 +0.181818 0.666667 0.666667 +0.181818 0.676768 0.674013 +0.181818 0.686869 0.681359 +0.181818 0.696970 0.688705 +0.181818 0.707071 0.696051 +0.181818 0.717172 0.703398 +0.181818 0.727273 0.710744 +0.181818 0.737374 0.718090 +0.181818 0.747475 0.725436 +0.181818 0.757576 0.732782 +0.181818 0.767677 0.740129 +0.181818 0.777778 0.747475 +0.181818 0.787879 0.754821 +0.181818 0.797980 0.762167 +0.181818 0.808081 0.769513 +0.181818 0.818182 0.776860 +0.181818 0.828283 0.784206 +0.181818 0.838384 0.791552 +0.181818 0.848485 0.798898 +0.181818 0.858586 0.806244 +0.181818 0.868687 0.813590 +0.181818 0.878788 0.820937 +0.181818 0.888889 0.828283 +0.181818 0.898990 0.835629 +0.181818 0.909091 0.842975 +0.181818 0.919192 0.850321 +0.181818 0.929293 0.857668 +0.181818 0.939394 0.865014 +0.181818 0.949495 0.872360 +0.181818 0.959596 0.879706 +0.181818 0.969697 0.887052 +0.181818 0.979798 0.894399 +0.181818 0.989899 0.901745 +0.181818 1.000000 0.909091 + +0.191919 0.000000 0.191919 +0.191919 0.010101 0.199112 +0.191919 0.020202 0.206305 +0.191919 0.030303 0.213499 +0.191919 0.040404 0.220692 +0.191919 0.050505 0.227885 +0.191919 0.060606 0.235078 +0.191919 0.070707 0.242271 +0.191919 0.080808 0.249464 +0.191919 0.090909 0.256657 +0.191919 0.101010 0.263851 +0.191919 0.111111 0.271044 +0.191919 0.121212 0.278237 +0.191919 0.131313 0.285430 +0.191919 0.141414 0.292623 +0.191919 0.151515 0.299816 +0.191919 0.161616 0.307009 +0.191919 0.171717 0.314203 +0.191919 0.181818 0.321396 +0.191919 0.191919 0.328589 +0.191919 0.202020 0.335782 +0.191919 0.212121 0.342975 +0.191919 0.222222 0.350168 +0.191919 0.232323 0.357361 +0.191919 0.242424 0.364555 +0.191919 0.252525 0.371748 +0.191919 0.262626 0.378941 +0.191919 0.272727 0.386134 +0.191919 0.282828 0.393327 +0.191919 0.292929 0.400520 +0.191919 0.303030 0.407713 +0.191919 0.313131 0.414907 +0.191919 0.323232 0.422100 +0.191919 0.333333 0.429293 +0.191919 0.343434 0.436486 +0.191919 0.353535 0.443679 +0.191919 0.363636 0.450872 +0.191919 0.373737 0.458066 +0.191919 0.383838 0.465259 +0.191919 0.393939 0.472452 +0.191919 0.404040 0.479645 +0.191919 0.414141 0.486838 +0.191919 0.424242 0.494031 +0.191919 0.434343 0.501224 +0.191919 0.444444 0.508418 +0.191919 0.454545 0.515611 +0.191919 0.464646 0.522804 +0.191919 0.474747 0.529997 +0.191919 0.484848 0.537190 +0.191919 0.494949 0.544383 +0.191919 0.505051 0.551576 +0.191919 0.515152 0.558770 +0.191919 0.525253 0.565963 +0.191919 0.535354 0.573156 +0.191919 0.545455 0.580349 +0.191919 0.555556 0.587542 +0.191919 0.565657 0.594735 +0.191919 0.575758 0.601928 +0.191919 0.585859 0.609122 +0.191919 0.595960 0.616315 +0.191919 0.606061 0.623508 +0.191919 0.616162 0.630701 +0.191919 0.626263 0.637894 +0.191919 0.636364 0.645087 +0.191919 0.646465 0.652280 +0.191919 0.656566 0.659474 +0.191919 0.666667 0.666667 +0.191919 0.676768 0.673860 +0.191919 0.686869 0.681053 +0.191919 0.696970 0.688246 +0.191919 0.707071 0.695439 +0.191919 0.717172 0.702632 +0.191919 0.727273 0.709826 +0.191919 0.737374 0.717019 +0.191919 0.747475 0.724212 +0.191919 0.757576 0.731405 +0.191919 0.767677 0.738598 +0.191919 0.777778 0.745791 +0.191919 0.787879 0.752984 +0.191919 0.797980 0.760178 +0.191919 0.808081 0.767371 +0.191919 0.818182 0.774564 +0.191919 0.828283 0.781757 +0.191919 0.838384 0.788950 +0.191919 0.848485 0.796143 +0.191919 0.858586 0.803336 +0.191919 0.868687 0.810530 +0.191919 0.878788 0.817723 +0.191919 0.888889 0.824916 +0.191919 0.898990 0.832109 +0.191919 0.909091 0.839302 +0.191919 0.919192 0.846495 +0.191919 0.929293 0.853688 +0.191919 0.939394 0.860882 +0.191919 0.949495 0.868075 +0.191919 0.959596 0.875268 +0.191919 0.969697 0.882461 +0.191919 0.979798 0.889654 +0.191919 0.989899 0.896847 +0.191919 1.000000 0.904040 + +0.202020 0.000000 0.202020 +0.202020 0.010101 0.209060 +0.202020 0.020202 0.216100 +0.202020 0.030303 0.223140 +0.202020 0.040404 0.230181 +0.202020 0.050505 0.237221 +0.202020 0.060606 0.244261 +0.202020 0.070707 0.251301 +0.202020 0.080808 0.258341 +0.202020 0.090909 0.265381 +0.202020 0.101010 0.272421 +0.202020 0.111111 0.279461 +0.202020 0.121212 0.286501 +0.202020 0.131313 0.293541 +0.202020 0.141414 0.300582 +0.202020 0.151515 0.307622 +0.202020 0.161616 0.314662 +0.202020 0.171717 0.321702 +0.202020 0.181818 0.328742 +0.202020 0.191919 0.335782 +0.202020 0.202020 0.342822 +0.202020 0.212121 0.349862 +0.202020 0.222222 0.356902 +0.202020 0.232323 0.363942 +0.202020 0.242424 0.370983 +0.202020 0.252525 0.378023 +0.202020 0.262626 0.385063 +0.202020 0.272727 0.392103 +0.202020 0.282828 0.399143 +0.202020 0.292929 0.406183 +0.202020 0.303030 0.413223 +0.202020 0.313131 0.420263 +0.202020 0.323232 0.427303 +0.202020 0.333333 0.434343 +0.202020 0.343434 0.441384 +0.202020 0.353535 0.448424 +0.202020 0.363636 0.455464 +0.202020 0.373737 0.462504 +0.202020 0.383838 0.469544 +0.202020 0.393939 0.476584 +0.202020 0.404040 0.483624 +0.202020 0.414141 0.490664 +0.202020 0.424242 0.497704 +0.202020 0.434343 0.504744 +0.202020 0.444444 0.511785 +0.202020 0.454545 0.518825 +0.202020 0.464646 0.525865 +0.202020 0.474747 0.532905 +0.202020 0.484848 0.539945 +0.202020 0.494949 0.546985 +0.202020 0.505051 0.554025 +0.202020 0.515152 0.561065 +0.202020 0.525253 0.568105 +0.202020 0.535354 0.575145 +0.202020 0.545455 0.582185 +0.202020 0.555556 0.589226 +0.202020 0.565657 0.596266 +0.202020 0.575758 0.603306 +0.202020 0.585859 0.610346 +0.202020 0.595960 0.617386 +0.202020 0.606061 0.624426 +0.202020 0.616162 0.631466 +0.202020 0.626263 0.638506 +0.202020 0.636364 0.645546 +0.202020 0.646465 0.652586 +0.202020 0.656566 0.659627 +0.202020 0.666667 0.666667 +0.202020 0.676768 0.673707 +0.202020 0.686869 0.680747 +0.202020 0.696970 0.687787 +0.202020 0.707071 0.694827 +0.202020 0.717172 0.701867 +0.202020 0.727273 0.708907 +0.202020 0.737374 0.715947 +0.202020 0.747475 0.722987 +0.202020 0.757576 0.730028 +0.202020 0.767677 0.737068 +0.202020 0.777778 0.744108 +0.202020 0.787879 0.751148 +0.202020 0.797980 0.758188 +0.202020 0.808081 0.765228 +0.202020 0.818182 0.772268 +0.202020 0.828283 0.779308 +0.202020 0.838384 0.786348 +0.202020 0.848485 0.793388 +0.202020 0.858586 0.800429 +0.202020 0.868687 0.807469 +0.202020 0.878788 0.814509 +0.202020 0.888889 0.821549 +0.202020 0.898990 0.828589 +0.202020 0.909091 0.835629 +0.202020 0.919192 0.842669 +0.202020 0.929293 0.849709 +0.202020 0.939394 0.856749 +0.202020 0.949495 0.863789 +0.202020 0.959596 0.870830 +0.202020 0.969697 0.877870 +0.202020 0.979798 0.884910 +0.202020 0.989899 0.891950 +0.202020 1.000000 0.898990 + +0.212121 0.000000 0.212121 +0.212121 0.010101 0.219008 +0.212121 0.020202 0.225895 +0.212121 0.030303 0.232782 +0.212121 0.040404 0.239669 +0.212121 0.050505 0.246556 +0.212121 0.060606 0.253444 +0.212121 0.070707 0.260331 +0.212121 0.080808 0.267218 +0.212121 0.090909 0.274105 +0.212121 0.101010 0.280992 +0.212121 0.111111 0.287879 +0.212121 0.121212 0.294766 +0.212121 0.131313 0.301653 +0.212121 0.141414 0.308540 +0.212121 0.151515 0.315427 +0.212121 0.161616 0.322314 +0.212121 0.171717 0.329201 +0.212121 0.181818 0.336088 +0.212121 0.191919 0.342975 +0.212121 0.202020 0.349862 +0.212121 0.212121 0.356749 +0.212121 0.222222 0.363636 +0.212121 0.232323 0.370523 +0.212121 0.242424 0.377410 +0.212121 0.252525 0.384298 +0.212121 0.262626 0.391185 +0.212121 0.272727 0.398072 +0.212121 0.282828 0.404959 +0.212121 0.292929 0.411846 +0.212121 0.303030 0.418733 +0.212121 0.313131 0.425620 +0.212121 0.323232 0.432507 +0.212121 0.333333 0.439394 +0.212121 0.343434 0.446281 +0.212121 0.353535 0.453168 +0.212121 0.363636 0.460055 +0.212121 0.373737 0.466942 +0.212121 0.383838 0.473829 +0.212121 0.393939 0.480716 +0.212121 0.404040 0.487603 +0.212121 0.414141 0.494490 +0.212121 0.424242 0.501377 +0.212121 0.434343 0.508264 +0.212121 0.444444 0.515152 +0.212121 0.454545 0.522039 +0.212121 0.464646 0.528926 +0.212121 0.474747 0.535813 +0.212121 0.484848 0.542700 +0.212121 0.494949 0.549587 +0.212121 0.505051 0.556474 +0.212121 0.515152 0.563361 +0.212121 0.525253 0.570248 +0.212121 0.535354 0.577135 +0.212121 0.545455 0.584022 +0.212121 0.555556 0.590909 +0.212121 0.565657 0.597796 +0.212121 0.575758 0.604683 +0.212121 0.585859 0.611570 +0.212121 0.595960 0.618457 +0.212121 0.606061 0.625344 +0.212121 0.616162 0.632231 +0.212121 0.626263 0.639118 +0.212121 0.636364 0.646006 +0.212121 0.646465 0.652893 +0.212121 0.656566 0.659780 +0.212121 0.666667 0.666667 +0.212121 0.676768 0.673554 +0.212121 0.686869 0.680441 +0.212121 0.696970 0.687328 +0.212121 0.707071 0.694215 +0.212121 0.717172 0.701102 +0.212121 0.727273 0.707989 +0.212121 0.737374 0.714876 +0.212121 0.747475 0.721763 +0.212121 0.757576 0.728650 +0.212121 0.767677 0.735537 +0.212121 0.777778 0.742424 +0.212121 0.787879 0.749311 +0.212121 0.797980 0.756198 +0.212121 0.808081 0.763085 +0.212121 0.818182 0.769972 +0.212121 0.828283 0.776860 +0.212121 0.838384 0.783747 +0.212121 0.848485 0.790634 +0.212121 0.858586 0.797521 +0.212121 0.868687 0.804408 +0.212121 0.878788 0.811295 +0.212121 0.888889 0.818182 +0.212121 0.898990 0.825069 +0.212121 0.909091 0.831956 +0.212121 0.919192 0.838843 +0.212121 0.929293 0.845730 +0.212121 0.939394 0.852617 +0.212121 0.949495 0.859504 +0.212121 0.959596 0.866391 +0.212121 0.969697 0.873278 +0.212121 0.979798 0.880165 +0.212121 0.989899 0.887052 +0.212121 1.000000 0.893939 + +0.222222 0.000000 0.222222 +0.222222 0.010101 0.228956 +0.222222 0.020202 0.235690 +0.222222 0.030303 0.242424 +0.222222 0.040404 0.249158 +0.222222 0.050505 0.255892 +0.222222 0.060606 0.262626 +0.222222 0.070707 0.269360 +0.222222 0.080808 0.276094 +0.222222 0.090909 0.282828 +0.222222 0.101010 0.289562 +0.222222 0.111111 0.296296 +0.222222 0.121212 0.303030 +0.222222 0.131313 0.309764 +0.222222 0.141414 0.316498 +0.222222 0.151515 0.323232 +0.222222 0.161616 0.329966 +0.222222 0.171717 0.336700 +0.222222 0.181818 0.343434 +0.222222 0.191919 0.350168 +0.222222 0.202020 0.356902 +0.222222 0.212121 0.363636 +0.222222 0.222222 0.370370 +0.222222 0.232323 0.377104 +0.222222 0.242424 0.383838 +0.222222 0.252525 0.390572 +0.222222 0.262626 0.397306 +0.222222 0.272727 0.404040 +0.222222 0.282828 0.410774 +0.222222 0.292929 0.417508 +0.222222 0.303030 0.424242 +0.222222 0.313131 0.430976 +0.222222 0.323232 0.437710 +0.222222 0.333333 0.444444 +0.222222 0.343434 0.451178 +0.222222 0.353535 0.457912 +0.222222 0.363636 0.464646 +0.222222 0.373737 0.471380 +0.222222 0.383838 0.478114 +0.222222 0.393939 0.484848 +0.222222 0.404040 0.491582 +0.222222 0.414141 0.498316 +0.222222 0.424242 0.505051 +0.222222 0.434343 0.511785 +0.222222 0.444444 0.518519 +0.222222 0.454545 0.525253 +0.222222 0.464646 0.531987 +0.222222 0.474747 0.538721 +0.222222 0.484848 0.545455 +0.222222 0.494949 0.552189 +0.222222 0.505051 0.558923 +0.222222 0.515152 0.565657 +0.222222 0.525253 0.572391 +0.222222 0.535354 0.579125 +0.222222 0.545455 0.585859 +0.222222 0.555556 0.592593 +0.222222 0.565657 0.599327 +0.222222 0.575758 0.606061 +0.222222 0.585859 0.612795 +0.222222 0.595960 0.619529 +0.222222 0.606061 0.626263 +0.222222 0.616162 0.632997 +0.222222 0.626263 0.639731 +0.222222 0.636364 0.646465 +0.222222 0.646465 0.653199 +0.222222 0.656566 0.659933 +0.222222 0.666667 0.666667 +0.222222 0.676768 0.673401 +0.222222 0.686869 0.680135 +0.222222 0.696970 0.686869 +0.222222 0.707071 0.693603 +0.222222 0.717172 0.700337 +0.222222 0.727273 0.707071 +0.222222 0.737374 0.713805 +0.222222 0.747475 0.720539 +0.222222 0.757576 0.727273 +0.222222 0.767677 0.734007 +0.222222 0.777778 0.740741 +0.222222 0.787879 0.747475 +0.222222 0.797980 0.754209 +0.222222 0.808081 0.760943 +0.222222 0.818182 0.767677 +0.222222 0.828283 0.774411 +0.222222 0.838384 0.781145 +0.222222 0.848485 0.787879 +0.222222 0.858586 0.794613 +0.222222 0.868687 0.801347 +0.222222 0.878788 0.808081 +0.222222 0.888889 0.814815 +0.222222 0.898990 0.821549 +0.222222 0.909091 0.828283 +0.222222 0.919192 0.835017 +0.222222 0.929293 0.841751 +0.222222 0.939394 0.848485 +0.222222 0.949495 0.855219 +0.222222 0.959596 0.861953 +0.222222 0.969697 0.868687 +0.222222 0.979798 0.875421 +0.222222 0.989899 0.882155 +0.222222 1.000000 0.888889 + +0.232323 0.000000 0.232323 +0.232323 0.010101 0.238904 +0.232323 0.020202 0.245485 +0.232323 0.030303 0.252066 +0.232323 0.040404 0.258647 +0.232323 0.050505 0.265228 +0.232323 0.060606 0.271809 +0.232323 0.070707 0.278390 +0.232323 0.080808 0.284971 +0.232323 0.090909 0.291552 +0.232323 0.101010 0.298133 +0.232323 0.111111 0.304714 +0.232323 0.121212 0.311295 +0.232323 0.131313 0.317876 +0.232323 0.141414 0.324457 +0.232323 0.151515 0.331038 +0.232323 0.161616 0.337619 +0.232323 0.171717 0.344200 +0.232323 0.181818 0.350781 +0.232323 0.191919 0.357361 +0.232323 0.202020 0.363942 +0.232323 0.212121 0.370523 +0.232323 0.222222 0.377104 +0.232323 0.232323 0.383685 +0.232323 0.242424 0.390266 +0.232323 0.252525 0.396847 +0.232323 0.262626 0.403428 +0.232323 0.272727 0.410009 +0.232323 0.282828 0.416590 +0.232323 0.292929 0.423171 +0.232323 0.303030 0.429752 +0.232323 0.313131 0.436333 +0.232323 0.323232 0.442914 +0.232323 0.333333 0.449495 +0.232323 0.343434 0.456076 +0.232323 0.353535 0.462657 +0.232323 0.363636 0.469238 +0.232323 0.373737 0.475819 +0.232323 0.383838 0.482400 +0.232323 0.393939 0.488981 +0.232323 0.404040 0.495562 +0.232323 0.414141 0.502143 +0.232323 0.424242 0.508724 +0.232323 0.434343 0.515305 +0.232323 0.444444 0.521886 +0.232323 0.454545 0.528466 +0.232323 0.464646 0.535047 +0.232323 0.474747 0.541628 +0.232323 0.484848 0.548209 +0.232323 0.494949 0.554790 +0.232323 0.505051 0.561371 +0.232323 0.515152 0.567952 +0.232323 0.525253 0.574533 +0.232323 0.535354 0.581114 +0.232323 0.545455 0.587695 +0.232323 0.555556 0.594276 +0.232323 0.565657 0.600857 +0.232323 0.575758 0.607438 +0.232323 0.585859 0.614019 +0.232323 0.595960 0.620600 +0.232323 0.606061 0.627181 +0.232323 0.616162 0.633762 +0.232323 0.626263 0.640343 +0.232323 0.636364 0.646924 +0.232323 0.646465 0.653505 +0.232323 0.656566 0.660086 +0.232323 0.666667 0.666667 +0.232323 0.676768 0.673248 +0.232323 0.686869 0.679829 +0.232323 0.696970 0.686410 +0.232323 0.707071 0.692991 +0.232323 0.717172 0.699571 +0.232323 0.727273 0.706152 +0.232323 0.737374 0.712733 +0.232323 0.747475 0.719314 +0.232323 0.757576 0.725895 +0.232323 0.767677 0.732476 +0.232323 0.777778 0.739057 +0.232323 0.787879 0.745638 +0.232323 0.797980 0.752219 +0.232323 0.808081 0.758800 +0.232323 0.818182 0.765381 +0.232323 0.828283 0.771962 +0.232323 0.838384 0.778543 +0.232323 0.848485 0.785124 +0.232323 0.858586 0.791705 +0.232323 0.868687 0.798286 +0.232323 0.878788 0.804867 +0.232323 0.888889 0.811448 +0.232323 0.898990 0.818029 +0.232323 0.909091 0.824610 +0.232323 0.919192 0.831191 +0.232323 0.929293 0.837772 +0.232323 0.939394 0.844353 +0.232323 0.949495 0.850934 +0.232323 0.959596 0.857515 +0.232323 0.969697 0.864096 +0.232323 0.979798 0.870676 +0.232323 0.989899 0.877257 +0.232323 1.000000 0.883838 + +0.242424 0.000000 0.242424 +0.242424 0.010101 0.248852 +0.242424 0.020202 0.255280 +0.242424 0.030303 0.261708 +0.242424 0.040404 0.268136 +0.242424 0.050505 0.274564 +0.242424 0.060606 0.280992 +0.242424 0.070707 0.287420 +0.242424 0.080808 0.293848 +0.242424 0.090909 0.300275 +0.242424 0.101010 0.306703 +0.242424 0.111111 0.313131 +0.242424 0.121212 0.319559 +0.242424 0.131313 0.325987 +0.242424 0.141414 0.332415 +0.242424 0.151515 0.338843 +0.242424 0.161616 0.345271 +0.242424 0.171717 0.351699 +0.242424 0.181818 0.358127 +0.242424 0.191919 0.364555 +0.242424 0.202020 0.370983 +0.242424 0.212121 0.377410 +0.242424 0.222222 0.383838 +0.242424 0.232323 0.390266 +0.242424 0.242424 0.396694 +0.242424 0.252525 0.403122 +0.242424 0.262626 0.409550 +0.242424 0.272727 0.415978 +0.242424 0.282828 0.422406 +0.242424 0.292929 0.428834 +0.242424 0.303030 0.435262 +0.242424 0.313131 0.441690 +0.242424 0.323232 0.448118 +0.242424 0.333333 0.454545 +0.242424 0.343434 0.460973 +0.242424 0.353535 0.467401 +0.242424 0.363636 0.473829 +0.242424 0.373737 0.480257 +0.242424 0.383838 0.486685 +0.242424 0.393939 0.493113 +0.242424 0.404040 0.499541 +0.242424 0.414141 0.505969 +0.242424 0.424242 0.512397 +0.242424 0.434343 0.518825 +0.242424 0.444444 0.525253 +0.242424 0.454545 0.531680 +0.242424 0.464646 0.538108 +0.242424 0.474747 0.544536 +0.242424 0.484848 0.550964 +0.242424 0.494949 0.557392 +0.242424 0.505051 0.563820 +0.242424 0.515152 0.570248 +0.242424 0.525253 0.576676 +0.242424 0.535354 0.583104 +0.242424 0.545455 0.589532 +0.242424 0.555556 0.595960 +0.242424 0.565657 0.602388 +0.242424 0.575758 0.608815 +0.242424 0.585859 0.615243 +0.242424 0.595960 0.621671 +0.242424 0.606061 0.628099 +0.242424 0.616162 0.634527 +0.242424 0.626263 0.640955 +0.242424 0.636364 0.647383 +0.242424 0.646465 0.653811 +0.242424 0.656566 0.660239 +0.242424 0.666667 0.666667 +0.242424 0.676768 0.673095 +0.242424 0.686869 0.679522 +0.242424 0.696970 0.685950 +0.242424 0.707071 0.692378 +0.242424 0.717172 0.698806 +0.242424 0.727273 0.705234 +0.242424 0.737374 0.711662 +0.242424 0.747475 0.718090 +0.242424 0.757576 0.724518 +0.242424 0.767677 0.730946 +0.242424 0.777778 0.737374 +0.242424 0.787879 0.743802 +0.242424 0.797980 0.750230 +0.242424 0.808081 0.756657 +0.242424 0.818182 0.763085 +0.242424 0.828283 0.769513 +0.242424 0.838384 0.775941 +0.242424 0.848485 0.782369 +0.242424 0.858586 0.788797 +0.242424 0.868687 0.795225 +0.242424 0.878788 0.801653 +0.242424 0.888889 0.808081 +0.242424 0.898990 0.814509 +0.242424 0.909091 0.820937 +0.242424 0.919192 0.827365 +0.242424 0.929293 0.833792 +0.242424 0.939394 0.840220 +0.242424 0.949495 0.846648 +0.242424 0.959596 0.853076 +0.242424 0.969697 0.859504 +0.242424 0.979798 0.865932 +0.242424 0.989899 0.872360 +0.242424 1.000000 0.878788 + +0.252525 0.000000 0.252525 +0.252525 0.010101 0.258800 +0.252525 0.020202 0.265075 +0.252525 0.030303 0.271350 +0.252525 0.040404 0.277625 +0.252525 0.050505 0.283900 +0.252525 0.060606 0.290174 +0.252525 0.070707 0.296449 +0.252525 0.080808 0.302724 +0.252525 0.090909 0.308999 +0.252525 0.101010 0.315274 +0.252525 0.111111 0.321549 +0.252525 0.121212 0.327824 +0.252525 0.131313 0.334099 +0.252525 0.141414 0.340373 +0.252525 0.151515 0.346648 +0.252525 0.161616 0.352923 +0.252525 0.171717 0.359198 +0.252525 0.181818 0.365473 +0.252525 0.191919 0.371748 +0.252525 0.202020 0.378023 +0.252525 0.212121 0.384298 +0.252525 0.222222 0.390572 +0.252525 0.232323 0.396847 +0.252525 0.242424 0.403122 +0.252525 0.252525 0.409397 +0.252525 0.262626 0.415672 +0.252525 0.272727 0.421947 +0.252525 0.282828 0.428222 +0.252525 0.292929 0.434496 +0.252525 0.303030 0.440771 +0.252525 0.313131 0.447046 +0.252525 0.323232 0.453321 +0.252525 0.333333 0.459596 +0.252525 0.343434 0.465871 +0.252525 0.353535 0.472146 +0.252525 0.363636 0.478421 +0.252525 0.373737 0.484695 +0.252525 0.383838 0.490970 +0.252525 0.393939 0.497245 +0.252525 0.404040 0.503520 +0.252525 0.414141 0.509795 +0.252525 0.424242 0.516070 +0.252525 0.434343 0.522345 +0.252525 0.444444 0.528620 +0.252525 0.454545 0.534894 +0.252525 0.464646 0.541169 +0.252525 0.474747 0.547444 +0.252525 0.484848 0.553719 +0.252525 0.494949 0.559994 +0.252525 0.505051 0.566269 +0.252525 0.515152 0.572544 +0.252525 0.525253 0.578818 +0.252525 0.535354 0.585093 +0.252525 0.545455 0.591368 +0.252525 0.555556 0.597643 +0.252525 0.565657 0.603918 +0.252525 0.575758 0.610193 +0.252525 0.585859 0.616468 +0.252525 0.595960 0.622743 +0.252525 0.606061 0.629017 +0.252525 0.616162 0.635292 +0.252525 0.626263 0.641567 +0.252525 0.636364 0.647842 +0.252525 0.646465 0.654117 +0.252525 0.656566 0.660392 +0.252525 0.666667 0.666667 +0.252525 0.676768 0.672942 +0.252525 0.686869 0.679216 +0.252525 0.696970 0.685491 +0.252525 0.707071 0.691766 +0.252525 0.717172 0.698041 +0.252525 0.727273 0.704316 +0.252525 0.737374 0.710591 +0.252525 0.747475 0.716866 +0.252525 0.757576 0.723140 +0.252525 0.767677 0.729415 +0.252525 0.777778 0.735690 +0.252525 0.787879 0.741965 +0.252525 0.797980 0.748240 +0.252525 0.808081 0.754515 +0.252525 0.818182 0.760790 +0.252525 0.828283 0.767065 +0.252525 0.838384 0.773339 +0.252525 0.848485 0.779614 +0.252525 0.858586 0.785889 +0.252525 0.868687 0.792164 +0.252525 0.878788 0.798439 +0.252525 0.888889 0.804714 +0.252525 0.898990 0.810989 +0.252525 0.909091 0.817264 +0.252525 0.919192 0.823538 +0.252525 0.929293 0.829813 +0.252525 0.939394 0.836088 +0.252525 0.949495 0.842363 +0.252525 0.959596 0.848638 +0.252525 0.969697 0.854913 +0.252525 0.979798 0.861188 +0.252525 0.989899 0.867463 +0.252525 1.000000 0.873737 + +0.262626 0.000000 0.262626 +0.262626 0.010101 0.268748 +0.262626 0.020202 0.274870 +0.262626 0.030303 0.280992 +0.262626 0.040404 0.287114 +0.262626 0.050505 0.293235 +0.262626 0.060606 0.299357 +0.262626 0.070707 0.305479 +0.262626 0.080808 0.311601 +0.262626 0.090909 0.317723 +0.262626 0.101010 0.323845 +0.262626 0.111111 0.329966 +0.262626 0.121212 0.336088 +0.262626 0.131313 0.342210 +0.262626 0.141414 0.348332 +0.262626 0.151515 0.354454 +0.262626 0.161616 0.360575 +0.262626 0.171717 0.366697 +0.262626 0.181818 0.372819 +0.262626 0.191919 0.378941 +0.262626 0.202020 0.385063 +0.262626 0.212121 0.391185 +0.262626 0.222222 0.397306 +0.262626 0.232323 0.403428 +0.262626 0.242424 0.409550 +0.262626 0.252525 0.415672 +0.262626 0.262626 0.421794 +0.262626 0.272727 0.427916 +0.262626 0.282828 0.434037 +0.262626 0.292929 0.440159 +0.262626 0.303030 0.446281 +0.262626 0.313131 0.452403 +0.262626 0.323232 0.458525 +0.262626 0.333333 0.464646 +0.262626 0.343434 0.470768 +0.262626 0.353535 0.476890 +0.262626 0.363636 0.483012 +0.262626 0.373737 0.489134 +0.262626 0.383838 0.495256 +0.262626 0.393939 0.501377 +0.262626 0.404040 0.507499 +0.262626 0.414141 0.513621 +0.262626 0.424242 0.519743 +0.262626 0.434343 0.525865 +0.262626 0.444444 0.531987 +0.262626 0.454545 0.538108 +0.262626 0.464646 0.544230 +0.262626 0.474747 0.550352 +0.262626 0.484848 0.556474 +0.262626 0.494949 0.562596 +0.262626 0.505051 0.568717 +0.262626 0.515152 0.574839 +0.262626 0.525253 0.580961 +0.262626 0.535354 0.587083 +0.262626 0.545455 0.593205 +0.262626 0.555556 0.599327 +0.262626 0.565657 0.605448 +0.262626 0.575758 0.611570 +0.262626 0.585859 0.617692 +0.262626 0.595960 0.623814 +0.262626 0.606061 0.629936 +0.262626 0.616162 0.636058 +0.262626 0.626263 0.642179 +0.262626 0.636364 0.648301 +0.262626 0.646465 0.654423 +0.262626 0.656566 0.660545 +0.262626 0.666667 0.666667 +0.262626 0.676768 0.672788 +0.262626 0.686869 0.678910 +0.262626 0.696970 0.685032 +0.262626 0.707071 0.691154 +0.262626 0.717172 0.697276 +0.262626 0.727273 0.703398 +0.262626 0.737374 0.709519 +0.262626 0.747475 0.715641 +0.262626 0.757576 0.721763 +0.262626 0.767677 0.727885 +0.262626 0.777778 0.734007 +0.262626 0.787879 0.740129 +0.262626 0.797980 0.746250 +0.262626 0.808081 0.752372 +0.262626 0.818182 0.758494 +0.262626 0.828283 0.764616 +0.262626 0.838384 0.770738 +0.262626 0.848485 0.776860 +0.262626 0.858586 0.782981 +0.262626 0.868687 0.789103 +0.262626 0.878788 0.795225 +0.262626 0.888889 0.801347 +0.262626 0.898990 0.807469 +0.262626 0.909091 0.813590 +0.262626 0.919192 0.819712 +0.262626 0.929293 0.825834 +0.262626 0.939394 0.831956 +0.262626 0.949495 0.838078 +0.262626 0.959596 0.844200 +0.262626 0.969697 0.850321 +0.262626 0.979798 0.856443 +0.262626 0.989899 0.862565 +0.262626 1.000000 0.868687 + +0.272727 0.000000 0.272727 +0.272727 0.010101 0.278696 +0.272727 0.020202 0.284665 +0.272727 0.030303 0.290634 +0.272727 0.040404 0.296602 +0.272727 0.050505 0.302571 +0.272727 0.060606 0.308540 +0.272727 0.070707 0.314509 +0.272727 0.080808 0.320478 +0.272727 0.090909 0.326446 +0.272727 0.101010 0.332415 +0.272727 0.111111 0.338384 +0.272727 0.121212 0.344353 +0.272727 0.131313 0.350321 +0.272727 0.141414 0.356290 +0.272727 0.151515 0.362259 +0.272727 0.161616 0.368228 +0.272727 0.171717 0.374197 +0.272727 0.181818 0.380165 +0.272727 0.191919 0.386134 +0.272727 0.202020 0.392103 +0.272727 0.212121 0.398072 +0.272727 0.222222 0.404040 +0.272727 0.232323 0.410009 +0.272727 0.242424 0.415978 +0.272727 0.252525 0.421947 +0.272727 0.262626 0.427916 +0.272727 0.272727 0.433884 +0.272727 0.282828 0.439853 +0.272727 0.292929 0.445822 +0.272727 0.303030 0.451791 +0.272727 0.313131 0.457759 +0.272727 0.323232 0.463728 +0.272727 0.333333 0.469697 +0.272727 0.343434 0.475666 +0.272727 0.353535 0.481635 +0.272727 0.363636 0.487603 +0.272727 0.373737 0.493572 +0.272727 0.383838 0.499541 +0.272727 0.393939 0.505510 +0.272727 0.404040 0.511478 +0.272727 0.414141 0.517447 +0.272727 0.424242 0.523416 +0.272727 0.434343 0.529385 +0.272727 0.444444 0.535354 +0.272727 0.454545 0.541322 +0.272727 0.464646 0.547291 +0.272727 0.474747 0.553260 +0.272727 0.484848 0.559229 +0.272727 0.494949 0.565197 +0.272727 0.505051 0.571166 +0.272727 0.515152 0.577135 +0.272727 0.525253 0.583104 +0.272727 0.535354 0.589073 +0.272727 0.545455 0.595041 +0.272727 0.555556 0.601010 +0.272727 0.565657 0.606979 +0.272727 0.575758 0.612948 +0.272727 0.585859 0.618916 +0.272727 0.595960 0.624885 +0.272727 0.606061 0.630854 +0.272727 0.616162 0.636823 +0.272727 0.626263 0.642792 +0.272727 0.636364 0.648760 +0.272727 0.646465 0.654729 +0.272727 0.656566 0.660698 +0.272727 0.666667 0.666667 +0.272727 0.676768 0.672635 +0.272727 0.686869 0.678604 +0.272727 0.696970 0.684573 +0.272727 0.707071 0.690542 +0.272727 0.717172 0.696511 +0.272727 0.727273 0.702479 +0.272727 0.737374 0.708448 +0.272727 0.747475 0.714417 +0.272727 0.757576 0.720386 +0.272727 0.767677 0.726354 +0.272727 0.777778 0.732323 +0.272727 0.787879 0.738292 +0.272727 0.797980 0.744261 +0.272727 0.808081 0.750230 +0.272727 0.818182 0.756198 +0.272727 0.828283 0.762167 +0.272727 0.838384 0.768136 +0.272727 0.848485 0.774105 +0.272727 0.858586 0.780073 +0.272727 0.868687 0.786042 +0.272727 0.878788 0.792011 +0.272727 0.888889 0.797980 +0.272727 0.898990 0.803949 +0.272727 0.909091 0.809917 +0.272727 0.919192 0.815886 +0.272727 0.929293 0.821855 +0.272727 0.939394 0.827824 +0.272727 0.949495 0.833792 +0.272727 0.959596 0.839761 +0.272727 0.969697 0.845730 +0.272727 0.979798 0.851699 +0.272727 0.989899 0.857668 +0.272727 1.000000 0.863636 + +0.282828 0.000000 0.282828 +0.282828 0.010101 0.288644 +0.282828 0.020202 0.294460 +0.282828 0.030303 0.300275 +0.282828 0.040404 0.306091 +0.282828 0.050505 0.311907 +0.282828 0.060606 0.317723 +0.282828 0.070707 0.323538 +0.282828 0.080808 0.329354 +0.282828 0.090909 0.335170 +0.282828 0.101010 0.340986 +0.282828 0.111111 0.346801 +0.282828 0.121212 0.352617 +0.282828 0.131313 0.358433 +0.282828 0.141414 0.364249 +0.282828 0.151515 0.370064 +0.282828 0.161616 0.375880 +0.282828 0.171717 0.381696 +0.282828 0.181818 0.387511 +0.282828 0.191919 0.393327 +0.282828 0.202020 0.399143 +0.282828 0.212121 0.404959 +0.282828 0.222222 0.410774 +0.282828 0.232323 0.416590 +0.282828 0.242424 0.422406 +0.282828 0.252525 0.428222 +0.282828 0.262626 0.434037 +0.282828 0.272727 0.439853 +0.282828 0.282828 0.445669 +0.282828 0.292929 0.451485 +0.282828 0.303030 0.457300 +0.282828 0.313131 0.463116 +0.282828 0.323232 0.468932 +0.282828 0.333333 0.474747 +0.282828 0.343434 0.480563 +0.282828 0.353535 0.486379 +0.282828 0.363636 0.492195 +0.282828 0.373737 0.498010 +0.282828 0.383838 0.503826 +0.282828 0.393939 0.509642 +0.282828 0.404040 0.515458 +0.282828 0.414141 0.521273 +0.282828 0.424242 0.527089 +0.282828 0.434343 0.532905 +0.282828 0.444444 0.538721 +0.282828 0.454545 0.544536 +0.282828 0.464646 0.550352 +0.282828 0.474747 0.556168 +0.282828 0.484848 0.561983 +0.282828 0.494949 0.567799 +0.282828 0.505051 0.573615 +0.282828 0.515152 0.579431 +0.282828 0.525253 0.585246 +0.282828 0.535354 0.591062 +0.282828 0.545455 0.596878 +0.282828 0.555556 0.602694 +0.282828 0.565657 0.608509 +0.282828 0.575758 0.614325 +0.282828 0.585859 0.620141 +0.282828 0.595960 0.625957 +0.282828 0.606061 0.631772 +0.282828 0.616162 0.637588 +0.282828 0.626263 0.643404 +0.282828 0.636364 0.649219 +0.282828 0.646465 0.655035 +0.282828 0.656566 0.660851 +0.282828 0.666667 0.666667 +0.282828 0.676768 0.672482 +0.282828 0.686869 0.678298 +0.282828 0.696970 0.684114 +0.282828 0.707071 0.689930 +0.282828 0.717172 0.695745 +0.282828 0.727273 0.701561 +0.282828 0.737374 0.707377 +0.282828 0.747475 0.713193 +0.282828 0.757576 0.719008 +0.282828 0.767677 0.724824 +0.282828 0.777778 0.730640 +0.282828 0.787879 0.736455 +0.282828 0.797980 0.742271 +0.282828 0.808081 0.748087 +0.282828 0.818182 0.753903 +0.282828 0.828283 0.759718 +0.282828 0.838384 0.765534 +0.282828 0.848485 0.771350 +0.282828 0.858586 0.777166 +0.282828 0.868687 0.782981 +0.282828 0.878788 0.788797 +0.282828 0.888889 0.794613 +0.282828 0.898990 0.800429 +0.282828 0.909091 0.806244 +0.282828 0.919192 0.812060 +0.282828 0.929293 0.817876 +0.282828 0.939394 0.823691 +0.282828 0.949495 0.829507 +0.282828 0.959596 0.835323 +0.282828 0.969697 0.841139 +0.282828 0.979798 0.846954 +0.282828 0.989899 0.852770 +0.282828 1.000000 0.858586 + +0.292929 0.000000 0.292929 +0.292929 0.010101 0.298592 +0.292929 0.020202 0.304255 +0.292929 0.030303 0.309917 +0.292929 0.040404 0.315580 +0.292929 0.050505 0.321243 +0.292929 0.060606 0.326905 +0.292929 0.070707 0.332568 +0.292929 0.080808 0.338231 +0.292929 0.090909 0.343893 +0.292929 0.101010 0.349556 +0.292929 0.111111 0.355219 +0.292929 0.121212 0.360882 +0.292929 0.131313 0.366544 +0.292929 0.141414 0.372207 +0.292929 0.151515 0.377870 +0.292929 0.161616 0.383532 +0.292929 0.171717 0.389195 +0.292929 0.181818 0.394858 +0.292929 0.191919 0.400520 +0.292929 0.202020 0.406183 +0.292929 0.212121 0.411846 +0.292929 0.222222 0.417508 +0.292929 0.232323 0.423171 +0.292929 0.242424 0.428834 +0.292929 0.252525 0.434496 +0.292929 0.262626 0.440159 +0.292929 0.272727 0.445822 +0.292929 0.282828 0.451485 +0.292929 0.292929 0.457147 +0.292929 0.303030 0.462810 +0.292929 0.313131 0.468473 +0.292929 0.323232 0.474135 +0.292929 0.333333 0.479798 +0.292929 0.343434 0.485461 +0.292929 0.353535 0.491123 +0.292929 0.363636 0.496786 +0.292929 0.373737 0.502449 +0.292929 0.383838 0.508111 +0.292929 0.393939 0.513774 +0.292929 0.404040 0.519437 +0.292929 0.414141 0.525099 +0.292929 0.424242 0.530762 +0.292929 0.434343 0.536425 +0.292929 0.444444 0.542088 +0.292929 0.454545 0.547750 +0.292929 0.464646 0.553413 +0.292929 0.474747 0.559076 +0.292929 0.484848 0.564738 +0.292929 0.494949 0.570401 +0.292929 0.505051 0.576064 +0.292929 0.515152 0.581726 +0.292929 0.525253 0.587389 +0.292929 0.535354 0.593052 +0.292929 0.545455 0.598714 +0.292929 0.555556 0.604377 +0.292929 0.565657 0.610040 +0.292929 0.575758 0.615702 +0.292929 0.585859 0.621365 +0.292929 0.595960 0.627028 +0.292929 0.606061 0.632691 +0.292929 0.616162 0.638353 +0.292929 0.626263 0.644016 +0.292929 0.636364 0.649679 +0.292929 0.646465 0.655341 +0.292929 0.656566 0.661004 +0.292929 0.666667 0.666667 +0.292929 0.676768 0.672329 +0.292929 0.686869 0.677992 +0.292929 0.696970 0.683655 +0.292929 0.707071 0.689317 +0.292929 0.717172 0.694980 +0.292929 0.727273 0.700643 +0.292929 0.737374 0.706305 +0.292929 0.747475 0.711968 +0.292929 0.757576 0.717631 +0.292929 0.767677 0.723294 +0.292929 0.777778 0.728956 +0.292929 0.787879 0.734619 +0.292929 0.797980 0.740282 +0.292929 0.808081 0.745944 +0.292929 0.818182 0.751607 +0.292929 0.828283 0.757270 +0.292929 0.838384 0.762932 +0.292929 0.848485 0.768595 +0.292929 0.858586 0.774258 +0.292929 0.868687 0.779920 +0.292929 0.878788 0.785583 +0.292929 0.888889 0.791246 +0.292929 0.898990 0.796908 +0.292929 0.909091 0.802571 +0.292929 0.919192 0.808234 +0.292929 0.929293 0.813897 +0.292929 0.939394 0.819559 +0.292929 0.949495 0.825222 +0.292929 0.959596 0.830885 +0.292929 0.969697 0.836547 +0.292929 0.979798 0.842210 +0.292929 0.989899 0.847873 +0.292929 1.000000 0.853535 + +0.303030 0.000000 0.303030 +0.303030 0.010101 0.308540 +0.303030 0.020202 0.314050 +0.303030 0.030303 0.319559 +0.303030 0.040404 0.325069 +0.303030 0.050505 0.330579 +0.303030 0.060606 0.336088 +0.303030 0.070707 0.341598 +0.303030 0.080808 0.347107 +0.303030 0.090909 0.352617 +0.303030 0.101010 0.358127 +0.303030 0.111111 0.363636 +0.303030 0.121212 0.369146 +0.303030 0.131313 0.374656 +0.303030 0.141414 0.380165 +0.303030 0.151515 0.385675 +0.303030 0.161616 0.391185 +0.303030 0.171717 0.396694 +0.303030 0.181818 0.402204 +0.303030 0.191919 0.407713 +0.303030 0.202020 0.413223 +0.303030 0.212121 0.418733 +0.303030 0.222222 0.424242 +0.303030 0.232323 0.429752 +0.303030 0.242424 0.435262 +0.303030 0.252525 0.440771 +0.303030 0.262626 0.446281 +0.303030 0.272727 0.451791 +0.303030 0.282828 0.457300 +0.303030 0.292929 0.462810 +0.303030 0.303030 0.468320 +0.303030 0.313131 0.473829 +0.303030 0.323232 0.479339 +0.303030 0.333333 0.484848 +0.303030 0.343434 0.490358 +0.303030 0.353535 0.495868 +0.303030 0.363636 0.501377 +0.303030 0.373737 0.506887 +0.303030 0.383838 0.512397 +0.303030 0.393939 0.517906 +0.303030 0.404040 0.523416 +0.303030 0.414141 0.528926 +0.303030 0.424242 0.534435 +0.303030 0.434343 0.539945 +0.303030 0.444444 0.545455 +0.303030 0.454545 0.550964 +0.303030 0.464646 0.556474 +0.303030 0.474747 0.561983 +0.303030 0.484848 0.567493 +0.303030 0.494949 0.573003 +0.303030 0.505051 0.578512 +0.303030 0.515152 0.584022 +0.303030 0.525253 0.589532 +0.303030 0.535354 0.595041 +0.303030 0.545455 0.600551 +0.303030 0.555556 0.606061 +0.303030 0.565657 0.611570 +0.303030 0.575758 0.617080 +0.303030 0.585859 0.622590 +0.303030 0.595960 0.628099 +0.303030 0.606061 0.633609 +0.303030 0.616162 0.639118 +0.303030 0.626263 0.644628 +0.303030 0.636364 0.650138 +0.303030 0.646465 0.655647 +0.303030 0.656566 0.661157 +0.303030 0.666667 0.666667 +0.303030 0.676768 0.672176 +0.303030 0.686869 0.677686 +0.303030 0.696970 0.683196 +0.303030 0.707071 0.688705 +0.303030 0.717172 0.694215 +0.303030 0.727273 0.699725 +0.303030 0.737374 0.705234 +0.303030 0.747475 0.710744 +0.303030 0.757576 0.716253 +0.303030 0.767677 0.721763 +0.303030 0.777778 0.727273 +0.303030 0.787879 0.732782 +0.303030 0.797980 0.738292 +0.303030 0.808081 0.743802 +0.303030 0.818182 0.749311 +0.303030 0.828283 0.754821 +0.303030 0.838384 0.760331 +0.303030 0.848485 0.765840 +0.303030 0.858586 0.771350 +0.303030 0.868687 0.776860 +0.303030 0.878788 0.782369 +0.303030 0.888889 0.787879 +0.303030 0.898990 0.793388 +0.303030 0.909091 0.798898 +0.303030 0.919192 0.804408 +0.303030 0.929293 0.809917 +0.303030 0.939394 0.815427 +0.303030 0.949495 0.820937 +0.303030 0.959596 0.826446 +0.303030 0.969697 0.831956 +0.303030 0.979798 0.837466 +0.303030 0.989899 0.842975 +0.303030 1.000000 0.848485 + +0.313131 0.000000 0.313131 +0.313131 0.010101 0.318488 +0.313131 0.020202 0.323845 +0.313131 0.030303 0.329201 +0.313131 0.040404 0.334558 +0.313131 0.050505 0.339914 +0.313131 0.060606 0.345271 +0.313131 0.070707 0.350627 +0.313131 0.080808 0.355984 +0.313131 0.090909 0.361341 +0.313131 0.101010 0.366697 +0.313131 0.111111 0.372054 +0.313131 0.121212 0.377410 +0.313131 0.131313 0.382767 +0.313131 0.141414 0.388124 +0.313131 0.151515 0.393480 +0.313131 0.161616 0.398837 +0.313131 0.171717 0.404193 +0.313131 0.181818 0.409550 +0.313131 0.191919 0.414907 +0.313131 0.202020 0.420263 +0.313131 0.212121 0.425620 +0.313131 0.222222 0.430976 +0.313131 0.232323 0.436333 +0.313131 0.242424 0.441690 +0.313131 0.252525 0.447046 +0.313131 0.262626 0.452403 +0.313131 0.272727 0.457759 +0.313131 0.282828 0.463116 +0.313131 0.292929 0.468473 +0.313131 0.303030 0.473829 +0.313131 0.313131 0.479186 +0.313131 0.323232 0.484542 +0.313131 0.333333 0.489899 +0.313131 0.343434 0.495256 +0.313131 0.353535 0.500612 +0.313131 0.363636 0.505969 +0.313131 0.373737 0.511325 +0.313131 0.383838 0.516682 +0.313131 0.393939 0.522039 +0.313131 0.404040 0.527395 +0.313131 0.414141 0.532752 +0.313131 0.424242 0.538108 +0.313131 0.434343 0.543465 +0.313131 0.444444 0.548822 +0.313131 0.454545 0.554178 +0.313131 0.464646 0.559535 +0.313131 0.474747 0.564891 +0.313131 0.484848 0.570248 +0.313131 0.494949 0.575605 +0.313131 0.505051 0.580961 +0.313131 0.515152 0.586318 +0.313131 0.525253 0.591674 +0.313131 0.535354 0.597031 +0.313131 0.545455 0.602388 +0.313131 0.555556 0.607744 +0.313131 0.565657 0.613101 +0.313131 0.575758 0.618457 +0.313131 0.585859 0.623814 +0.313131 0.595960 0.629170 +0.313131 0.606061 0.634527 +0.313131 0.616162 0.639884 +0.313131 0.626263 0.645240 +0.313131 0.636364 0.650597 +0.313131 0.646465 0.655953 +0.313131 0.656566 0.661310 +0.313131 0.666667 0.666667 +0.313131 0.676768 0.672023 +0.313131 0.686869 0.677380 +0.313131 0.696970 0.682736 +0.313131 0.707071 0.688093 +0.313131 0.717172 0.693450 +0.313131 0.727273 0.698806 +0.313131 0.737374 0.704163 +0.313131 0.747475 0.709519 +0.313131 0.757576 0.714876 +0.313131 0.767677 0.720233 +0.313131 0.777778 0.725589 +0.313131 0.787879 0.730946 +0.313131 0.797980 0.736302 +0.313131 0.808081 0.741659 +0.313131 0.818182 0.747016 +0.313131 0.828283 0.752372 +0.313131 0.838384 0.757729 +0.313131 0.848485 0.763085 +0.313131 0.858586 0.768442 +0.313131 0.868687 0.773799 +0.313131 0.878788 0.779155 +0.313131 0.888889 0.784512 +0.313131 0.898990 0.789868 +0.313131 0.909091 0.795225 +0.313131 0.919192 0.800582 +0.313131 0.929293 0.805938 +0.313131 0.939394 0.811295 +0.313131 0.949495 0.816651 +0.313131 0.959596 0.822008 +0.313131 0.969697 0.827365 +0.313131 0.979798 0.832721 +0.313131 0.989899 0.838078 +0.313131 1.000000 0.843434 + +0.323232 0.000000 0.323232 +0.323232 0.010101 0.328436 +0.323232 0.020202 0.333639 +0.323232 0.030303 0.338843 +0.323232 0.040404 0.344047 +0.323232 0.050505 0.349250 +0.323232 0.060606 0.354454 +0.323232 0.070707 0.359657 +0.323232 0.080808 0.364861 +0.323232 0.090909 0.370064 +0.323232 0.101010 0.375268 +0.323232 0.111111 0.380471 +0.323232 0.121212 0.385675 +0.323232 0.131313 0.390878 +0.323232 0.141414 0.396082 +0.323232 0.151515 0.401286 +0.323232 0.161616 0.406489 +0.323232 0.171717 0.411693 +0.323232 0.181818 0.416896 +0.323232 0.191919 0.422100 +0.323232 0.202020 0.427303 +0.323232 0.212121 0.432507 +0.323232 0.222222 0.437710 +0.323232 0.232323 0.442914 +0.323232 0.242424 0.448118 +0.323232 0.252525 0.453321 +0.323232 0.262626 0.458525 +0.323232 0.272727 0.463728 +0.323232 0.282828 0.468932 +0.323232 0.292929 0.474135 +0.323232 0.303030 0.479339 +0.323232 0.313131 0.484542 +0.323232 0.323232 0.489746 +0.323232 0.333333 0.494949 +0.323232 0.343434 0.500153 +0.323232 0.353535 0.505357 +0.323232 0.363636 0.510560 +0.323232 0.373737 0.515764 +0.323232 0.383838 0.520967 +0.323232 0.393939 0.526171 +0.323232 0.404040 0.531374 +0.323232 0.414141 0.536578 +0.323232 0.424242 0.541781 +0.323232 0.434343 0.546985 +0.323232 0.444444 0.552189 +0.323232 0.454545 0.557392 +0.323232 0.464646 0.562596 +0.323232 0.474747 0.567799 +0.323232 0.484848 0.573003 +0.323232 0.494949 0.578206 +0.323232 0.505051 0.583410 +0.323232 0.515152 0.588613 +0.323232 0.525253 0.593817 +0.323232 0.535354 0.599021 +0.323232 0.545455 0.604224 +0.323232 0.555556 0.609428 +0.323232 0.565657 0.614631 +0.323232 0.575758 0.619835 +0.323232 0.585859 0.625038 +0.323232 0.595960 0.630242 +0.323232 0.606061 0.635445 +0.323232 0.616162 0.640649 +0.323232 0.626263 0.645852 +0.323232 0.636364 0.651056 +0.323232 0.646465 0.656260 +0.323232 0.656566 0.661463 +0.323232 0.666667 0.666667 +0.323232 0.676768 0.671870 +0.323232 0.686869 0.677074 +0.323232 0.696970 0.682277 +0.323232 0.707071 0.687481 +0.323232 0.717172 0.692684 +0.323232 0.727273 0.697888 +0.323232 0.737374 0.703092 +0.323232 0.747475 0.708295 +0.323232 0.757576 0.713499 +0.323232 0.767677 0.718702 +0.323232 0.777778 0.723906 +0.323232 0.787879 0.729109 +0.323232 0.797980 0.734313 +0.323232 0.808081 0.739516 +0.323232 0.818182 0.744720 +0.323232 0.828283 0.749923 +0.323232 0.838384 0.755127 +0.323232 0.848485 0.760331 +0.323232 0.858586 0.765534 +0.323232 0.868687 0.770738 +0.323232 0.878788 0.775941 +0.323232 0.888889 0.781145 +0.323232 0.898990 0.786348 +0.323232 0.909091 0.791552 +0.323232 0.919192 0.796755 +0.323232 0.929293 0.801959 +0.323232 0.939394 0.807163 +0.323232 0.949495 0.812366 +0.323232 0.959596 0.817570 +0.323232 0.969697 0.822773 +0.323232 0.979798 0.827977 +0.323232 0.989899 0.833180 +0.323232 1.000000 0.838384 + +0.333333 0.000000 0.333333 +0.333333 0.010101 0.338384 +0.333333 0.020202 0.343434 +0.333333 0.030303 0.348485 +0.333333 0.040404 0.353535 +0.333333 0.050505 0.358586 +0.333333 0.060606 0.363636 +0.333333 0.070707 0.368687 +0.333333 0.080808 0.373737 +0.333333 0.090909 0.378788 +0.333333 0.101010 0.383838 +0.333333 0.111111 0.388889 +0.333333 0.121212 0.393939 +0.333333 0.131313 0.398990 +0.333333 0.141414 0.404040 +0.333333 0.151515 0.409091 +0.333333 0.161616 0.414141 +0.333333 0.171717 0.419192 +0.333333 0.181818 0.424242 +0.333333 0.191919 0.429293 +0.333333 0.202020 0.434343 +0.333333 0.212121 0.439394 +0.333333 0.222222 0.444444 +0.333333 0.232323 0.449495 +0.333333 0.242424 0.454545 +0.333333 0.252525 0.459596 +0.333333 0.262626 0.464646 +0.333333 0.272727 0.469697 +0.333333 0.282828 0.474747 +0.333333 0.292929 0.479798 +0.333333 0.303030 0.484848 +0.333333 0.313131 0.489899 +0.333333 0.323232 0.494949 +0.333333 0.333333 0.500000 +0.333333 0.343434 0.505051 +0.333333 0.353535 0.510101 +0.333333 0.363636 0.515152 +0.333333 0.373737 0.520202 +0.333333 0.383838 0.525253 +0.333333 0.393939 0.530303 +0.333333 0.404040 0.535354 +0.333333 0.414141 0.540404 +0.333333 0.424242 0.545455 +0.333333 0.434343 0.550505 +0.333333 0.444444 0.555556 +0.333333 0.454545 0.560606 +0.333333 0.464646 0.565657 +0.333333 0.474747 0.570707 +0.333333 0.484848 0.575758 +0.333333 0.494949 0.580808 +0.333333 0.505051 0.585859 +0.333333 0.515152 0.590909 +0.333333 0.525253 0.595960 +0.333333 0.535354 0.601010 +0.333333 0.545455 0.606061 +0.333333 0.555556 0.611111 +0.333333 0.565657 0.616162 +0.333333 0.575758 0.621212 +0.333333 0.585859 0.626263 +0.333333 0.595960 0.631313 +0.333333 0.606061 0.636364 +0.333333 0.616162 0.641414 +0.333333 0.626263 0.646465 +0.333333 0.636364 0.651515 +0.333333 0.646465 0.656566 +0.333333 0.656566 0.661616 +0.333333 0.666667 0.666667 +0.333333 0.676768 0.671717 +0.333333 0.686869 0.676768 +0.333333 0.696970 0.681818 +0.333333 0.707071 0.686869 +0.333333 0.717172 0.691919 +0.333333 0.727273 0.696970 +0.333333 0.737374 0.702020 +0.333333 0.747475 0.707071 +0.333333 0.757576 0.712121 +0.333333 0.767677 0.717172 +0.333333 0.777778 0.722222 +0.333333 0.787879 0.727273 +0.333333 0.797980 0.732323 +0.333333 0.808081 0.737374 +0.333333 0.818182 0.742424 +0.333333 0.828283 0.747475 +0.333333 0.838384 0.752525 +0.333333 0.848485 0.757576 +0.333333 0.858586 0.762626 +0.333333 0.868687 0.767677 +0.333333 0.878788 0.772727 +0.333333 0.888889 0.777778 +0.333333 0.898990 0.782828 +0.333333 0.909091 0.787879 +0.333333 0.919192 0.792929 +0.333333 0.929293 0.797980 +0.333333 0.939394 0.803030 +0.333333 0.949495 0.808081 +0.333333 0.959596 0.813131 +0.333333 0.969697 0.818182 +0.333333 0.979798 0.823232 +0.333333 0.989899 0.828283 +0.333333 1.000000 0.833333 + +0.343434 0.000000 0.343434 +0.343434 0.010101 0.348332 +0.343434 0.020202 0.353229 +0.343434 0.030303 0.358127 +0.343434 0.040404 0.363024 +0.343434 0.050505 0.367922 +0.343434 0.060606 0.372819 +0.343434 0.070707 0.377717 +0.343434 0.080808 0.382614 +0.343434 0.090909 0.387511 +0.343434 0.101010 0.392409 +0.343434 0.111111 0.397306 +0.343434 0.121212 0.402204 +0.343434 0.131313 0.407101 +0.343434 0.141414 0.411999 +0.343434 0.151515 0.416896 +0.343434 0.161616 0.421794 +0.343434 0.171717 0.426691 +0.343434 0.181818 0.431589 +0.343434 0.191919 0.436486 +0.343434 0.202020 0.441384 +0.343434 0.212121 0.446281 +0.343434 0.222222 0.451178 +0.343434 0.232323 0.456076 +0.343434 0.242424 0.460973 +0.343434 0.252525 0.465871 +0.343434 0.262626 0.470768 +0.343434 0.272727 0.475666 +0.343434 0.282828 0.480563 +0.343434 0.292929 0.485461 +0.343434 0.303030 0.490358 +0.343434 0.313131 0.495256 +0.343434 0.323232 0.500153 +0.343434 0.333333 0.505051 +0.343434 0.343434 0.509948 +0.343434 0.353535 0.514845 +0.343434 0.363636 0.519743 +0.343434 0.373737 0.524640 +0.343434 0.383838 0.529538 +0.343434 0.393939 0.534435 +0.343434 0.404040 0.539333 +0.343434 0.414141 0.544230 +0.343434 0.424242 0.549128 +0.343434 0.434343 0.554025 +0.343434 0.444444 0.558923 +0.343434 0.454545 0.563820 +0.343434 0.464646 0.568717 +0.343434 0.474747 0.573615 +0.343434 0.484848 0.578512 +0.343434 0.494949 0.583410 +0.343434 0.505051 0.588307 +0.343434 0.515152 0.593205 +0.343434 0.525253 0.598102 +0.343434 0.535354 0.603000 +0.343434 0.545455 0.607897 +0.343434 0.555556 0.612795 +0.343434 0.565657 0.617692 +0.343434 0.575758 0.622590 +0.343434 0.585859 0.627487 +0.343434 0.595960 0.632384 +0.343434 0.606061 0.637282 +0.343434 0.616162 0.642179 +0.343434 0.626263 0.647077 +0.343434 0.636364 0.651974 +0.343434 0.646465 0.656872 +0.343434 0.656566 0.661769 +0.343434 0.666667 0.666667 +0.343434 0.676768 0.671564 +0.343434 0.686869 0.676462 +0.343434 0.696970 0.681359 +0.343434 0.707071 0.686257 +0.343434 0.717172 0.691154 +0.343434 0.727273 0.696051 +0.343434 0.737374 0.700949 +0.343434 0.747475 0.705846 +0.343434 0.757576 0.710744 +0.343434 0.767677 0.715641 +0.343434 0.777778 0.720539 +0.343434 0.787879 0.725436 +0.343434 0.797980 0.730334 +0.343434 0.808081 0.735231 +0.343434 0.818182 0.740129 +0.343434 0.828283 0.745026 +0.343434 0.838384 0.749923 +0.343434 0.848485 0.754821 +0.343434 0.858586 0.759718 +0.343434 0.868687 0.764616 +0.343434 0.878788 0.769513 +0.343434 0.888889 0.774411 +0.343434 0.898990 0.779308 +0.343434 0.909091 0.784206 +0.343434 0.919192 0.789103 +0.343434 0.929293 0.794001 +0.343434 0.939394 0.798898 +0.343434 0.949495 0.803796 +0.343434 0.959596 0.808693 +0.343434 0.969697 0.813590 +0.343434 0.979798 0.818488 +0.343434 0.989899 0.823385 +0.343434 1.000000 0.828283 + +0.353535 0.000000 0.353535 +0.353535 0.010101 0.358280 +0.353535 0.020202 0.363024 +0.353535 0.030303 0.367769 +0.353535 0.040404 0.372513 +0.353535 0.050505 0.377257 +0.353535 0.060606 0.382002 +0.353535 0.070707 0.386746 +0.353535 0.080808 0.391491 +0.353535 0.090909 0.396235 +0.353535 0.101010 0.400979 +0.353535 0.111111 0.405724 +0.353535 0.121212 0.410468 +0.353535 0.131313 0.415213 +0.353535 0.141414 0.419957 +0.353535 0.151515 0.424702 +0.353535 0.161616 0.429446 +0.353535 0.171717 0.434190 +0.353535 0.181818 0.438935 +0.353535 0.191919 0.443679 +0.353535 0.202020 0.448424 +0.353535 0.212121 0.453168 +0.353535 0.222222 0.457912 +0.353535 0.232323 0.462657 +0.353535 0.242424 0.467401 +0.353535 0.252525 0.472146 +0.353535 0.262626 0.476890 +0.353535 0.272727 0.481635 +0.353535 0.282828 0.486379 +0.353535 0.292929 0.491123 +0.353535 0.303030 0.495868 +0.353535 0.313131 0.500612 +0.353535 0.323232 0.505357 +0.353535 0.333333 0.510101 +0.353535 0.343434 0.514845 +0.353535 0.353535 0.519590 +0.353535 0.363636 0.524334 +0.353535 0.373737 0.529079 +0.353535 0.383838 0.533823 +0.353535 0.393939 0.538567 +0.353535 0.404040 0.543312 +0.353535 0.414141 0.548056 +0.353535 0.424242 0.552801 +0.353535 0.434343 0.557545 +0.353535 0.444444 0.562290 +0.353535 0.454545 0.567034 +0.353535 0.464646 0.571778 +0.353535 0.474747 0.576523 +0.353535 0.484848 0.581267 +0.353535 0.494949 0.586012 +0.353535 0.505051 0.590756 +0.353535 0.515152 0.595500 +0.353535 0.525253 0.600245 +0.353535 0.535354 0.604989 +0.353535 0.545455 0.609734 +0.353535 0.555556 0.614478 +0.353535 0.565657 0.619223 +0.353535 0.575758 0.623967 +0.353535 0.585859 0.628711 +0.353535 0.595960 0.633456 +0.353535 0.606061 0.638200 +0.353535 0.616162 0.642945 +0.353535 0.626263 0.647689 +0.353535 0.636364 0.652433 +0.353535 0.646465 0.657178 +0.353535 0.656566 0.661922 +0.353535 0.666667 0.666667 +0.353535 0.676768 0.671411 +0.353535 0.686869 0.676155 +0.353535 0.696970 0.680900 +0.353535 0.707071 0.685644 +0.353535 0.717172 0.690389 +0.353535 0.727273 0.695133 +0.353535 0.737374 0.699878 +0.353535 0.747475 0.704622 +0.353535 0.757576 0.709366 +0.353535 0.767677 0.714111 +0.353535 0.777778 0.718855 +0.353535 0.787879 0.723600 +0.353535 0.797980 0.728344 +0.353535 0.808081 0.733088 +0.353535 0.818182 0.737833 +0.353535 0.828283 0.742577 +0.353535 0.838384 0.747322 +0.353535 0.848485 0.752066 +0.353535 0.858586 0.756811 +0.353535 0.868687 0.761555 +0.353535 0.878788 0.766299 +0.353535 0.888889 0.771044 +0.353535 0.898990 0.775788 +0.353535 0.909091 0.780533 +0.353535 0.919192 0.785277 +0.353535 0.929293 0.790021 +0.353535 0.939394 0.794766 +0.353535 0.949495 0.799510 +0.353535 0.959596 0.804255 +0.353535 0.969697 0.808999 +0.353535 0.979798 0.813743 +0.353535 0.989899 0.818488 +0.353535 1.000000 0.823232 + +0.363636 0.000000 0.363636 +0.363636 0.010101 0.368228 +0.363636 0.020202 0.372819 +0.363636 0.030303 0.377410 +0.363636 0.040404 0.382002 +0.363636 0.050505 0.386593 +0.363636 0.060606 0.391185 +0.363636 0.070707 0.395776 +0.363636 0.080808 0.400367 +0.363636 0.090909 0.404959 +0.363636 0.101010 0.409550 +0.363636 0.111111 0.414141 +0.363636 0.121212 0.418733 +0.363636 0.131313 0.423324 +0.363636 0.141414 0.427916 +0.363636 0.151515 0.432507 +0.363636 0.161616 0.437098 +0.363636 0.171717 0.441690 +0.363636 0.181818 0.446281 +0.363636 0.191919 0.450872 +0.363636 0.202020 0.455464 +0.363636 0.212121 0.460055 +0.363636 0.222222 0.464646 +0.363636 0.232323 0.469238 +0.363636 0.242424 0.473829 +0.363636 0.252525 0.478421 +0.363636 0.262626 0.483012 +0.363636 0.272727 0.487603 +0.363636 0.282828 0.492195 +0.363636 0.292929 0.496786 +0.363636 0.303030 0.501377 +0.363636 0.313131 0.505969 +0.363636 0.323232 0.510560 +0.363636 0.333333 0.515152 +0.363636 0.343434 0.519743 +0.363636 0.353535 0.524334 +0.363636 0.363636 0.528926 +0.363636 0.373737 0.533517 +0.363636 0.383838 0.538108 +0.363636 0.393939 0.542700 +0.363636 0.404040 0.547291 +0.363636 0.414141 0.551882 +0.363636 0.424242 0.556474 +0.363636 0.434343 0.561065 +0.363636 0.444444 0.565657 +0.363636 0.454545 0.570248 +0.363636 0.464646 0.574839 +0.363636 0.474747 0.579431 +0.363636 0.484848 0.584022 +0.363636 0.494949 0.588613 +0.363636 0.505051 0.593205 +0.363636 0.515152 0.597796 +0.363636 0.525253 0.602388 +0.363636 0.535354 0.606979 +0.363636 0.545455 0.611570 +0.363636 0.555556 0.616162 +0.363636 0.565657 0.620753 +0.363636 0.575758 0.625344 +0.363636 0.585859 0.629936 +0.363636 0.595960 0.634527 +0.363636 0.606061 0.639118 +0.363636 0.616162 0.643710 +0.363636 0.626263 0.648301 +0.363636 0.636364 0.652893 +0.363636 0.646465 0.657484 +0.363636 0.656566 0.662075 +0.363636 0.666667 0.666667 +0.363636 0.676768 0.671258 +0.363636 0.686869 0.675849 +0.363636 0.696970 0.680441 +0.363636 0.707071 0.685032 +0.363636 0.717172 0.689624 +0.363636 0.727273 0.694215 +0.363636 0.737374 0.698806 +0.363636 0.747475 0.703398 +0.363636 0.757576 0.707989 +0.363636 0.767677 0.712580 +0.363636 0.777778 0.717172 +0.363636 0.787879 0.721763 +0.363636 0.797980 0.726354 +0.363636 0.808081 0.730946 +0.363636 0.818182 0.735537 +0.363636 0.828283 0.740129 +0.363636 0.838384 0.744720 +0.363636 0.848485 0.749311 +0.363636 0.858586 0.753903 +0.363636 0.868687 0.758494 +0.363636 0.878788 0.763085 +0.363636 0.888889 0.767677 +0.363636 0.898990 0.772268 +0.363636 0.909091 0.776860 +0.363636 0.919192 0.781451 +0.363636 0.929293 0.786042 +0.363636 0.939394 0.790634 +0.363636 0.949495 0.795225 +0.363636 0.959596 0.799816 +0.363636 0.969697 0.804408 +0.363636 0.979798 0.808999 +0.363636 0.989899 0.813590 +0.363636 1.000000 0.818182 + +0.373737 0.000000 0.373737 +0.373737 0.010101 0.378176 +0.373737 0.020202 0.382614 +0.373737 0.030303 0.387052 +0.373737 0.040404 0.391491 +0.373737 0.050505 0.395929 +0.373737 0.060606 0.400367 +0.373737 0.070707 0.404806 +0.373737 0.080808 0.409244 +0.373737 0.090909 0.413682 +0.373737 0.101010 0.418121 +0.373737 0.111111 0.422559 +0.373737 0.121212 0.426997 +0.373737 0.131313 0.431436 +0.373737 0.141414 0.435874 +0.373737 0.151515 0.440312 +0.373737 0.161616 0.444751 +0.373737 0.171717 0.449189 +0.373737 0.181818 0.453627 +0.373737 0.191919 0.458066 +0.373737 0.202020 0.462504 +0.373737 0.212121 0.466942 +0.373737 0.222222 0.471380 +0.373737 0.232323 0.475819 +0.373737 0.242424 0.480257 +0.373737 0.252525 0.484695 +0.373737 0.262626 0.489134 +0.373737 0.272727 0.493572 +0.373737 0.282828 0.498010 +0.373737 0.292929 0.502449 +0.373737 0.303030 0.506887 +0.373737 0.313131 0.511325 +0.373737 0.323232 0.515764 +0.373737 0.333333 0.520202 +0.373737 0.343434 0.524640 +0.373737 0.353535 0.529079 +0.373737 0.363636 0.533517 +0.373737 0.373737 0.537955 +0.373737 0.383838 0.542394 +0.373737 0.393939 0.546832 +0.373737 0.404040 0.551270 +0.373737 0.414141 0.555709 +0.373737 0.424242 0.560147 +0.373737 0.434343 0.564585 +0.373737 0.444444 0.569024 +0.373737 0.454545 0.573462 +0.373737 0.464646 0.577900 +0.373737 0.474747 0.582339 +0.373737 0.484848 0.586777 +0.373737 0.494949 0.591215 +0.373737 0.505051 0.595654 +0.373737 0.515152 0.600092 +0.373737 0.525253 0.604530 +0.373737 0.535354 0.608968 +0.373737 0.545455 0.613407 +0.373737 0.555556 0.617845 +0.373737 0.565657 0.622283 +0.373737 0.575758 0.626722 +0.373737 0.585859 0.631160 +0.373737 0.595960 0.635598 +0.373737 0.606061 0.640037 +0.373737 0.616162 0.644475 +0.373737 0.626263 0.648913 +0.373737 0.636364 0.653352 +0.373737 0.646465 0.657790 +0.373737 0.656566 0.662228 +0.373737 0.666667 0.666667 +0.373737 0.676768 0.671105 +0.373737 0.686869 0.675543 +0.373737 0.696970 0.679982 +0.373737 0.707071 0.684420 +0.373737 0.717172 0.688858 +0.373737 0.727273 0.693297 +0.373737 0.737374 0.697735 +0.373737 0.747475 0.702173 +0.373737 0.757576 0.706612 +0.373737 0.767677 0.711050 +0.373737 0.777778 0.715488 +0.373737 0.787879 0.719927 +0.373737 0.797980 0.724365 +0.373737 0.808081 0.728803 +0.373737 0.818182 0.733242 +0.373737 0.828283 0.737680 +0.373737 0.838384 0.742118 +0.373737 0.848485 0.746556 +0.373737 0.858586 0.750995 +0.373737 0.868687 0.755433 +0.373737 0.878788 0.759871 +0.373737 0.888889 0.764310 +0.373737 0.898990 0.768748 +0.373737 0.909091 0.773186 +0.373737 0.919192 0.777625 +0.373737 0.929293 0.782063 +0.373737 0.939394 0.786501 +0.373737 0.949495 0.790940 +0.373737 0.959596 0.795378 +0.373737 0.969697 0.799816 +0.373737 0.979798 0.804255 +0.373737 0.989899 0.808693 +0.373737 1.000000 0.813131 + +0.383838 0.000000 0.383838 +0.383838 0.010101 0.388124 +0.383838 0.020202 0.392409 +0.383838 0.030303 0.396694 +0.383838 0.040404 0.400979 +0.383838 0.050505 0.405265 +0.383838 0.060606 0.409550 +0.383838 0.070707 0.413835 +0.383838 0.080808 0.418121 +0.383838 0.090909 0.422406 +0.383838 0.101010 0.426691 +0.383838 0.111111 0.430976 +0.383838 0.121212 0.435262 +0.383838 0.131313 0.439547 +0.383838 0.141414 0.443832 +0.383838 0.151515 0.448118 +0.383838 0.161616 0.452403 +0.383838 0.171717 0.456688 +0.383838 0.181818 0.460973 +0.383838 0.191919 0.465259 +0.383838 0.202020 0.469544 +0.383838 0.212121 0.473829 +0.383838 0.222222 0.478114 +0.383838 0.232323 0.482400 +0.383838 0.242424 0.486685 +0.383838 0.252525 0.490970 +0.383838 0.262626 0.495256 +0.383838 0.272727 0.499541 +0.383838 0.282828 0.503826 +0.383838 0.292929 0.508111 +0.383838 0.303030 0.512397 +0.383838 0.313131 0.516682 +0.383838 0.323232 0.520967 +0.383838 0.333333 0.525253 +0.383838 0.343434 0.529538 +0.383838 0.353535 0.533823 +0.383838 0.363636 0.538108 +0.383838 0.373737 0.542394 +0.383838 0.383838 0.546679 +0.383838 0.393939 0.550964 +0.383838 0.404040 0.555249 +0.383838 0.414141 0.559535 +0.383838 0.424242 0.563820 +0.383838 0.434343 0.568105 +0.383838 0.444444 0.572391 +0.383838 0.454545 0.576676 +0.383838 0.464646 0.580961 +0.383838 0.474747 0.585246 +0.383838 0.484848 0.589532 +0.383838 0.494949 0.593817 +0.383838 0.505051 0.598102 +0.383838 0.515152 0.602388 +0.383838 0.525253 0.606673 +0.383838 0.535354 0.610958 +0.383838 0.545455 0.615243 +0.383838 0.555556 0.619529 +0.383838 0.565657 0.623814 +0.383838 0.575758 0.628099 +0.383838 0.585859 0.632384 +0.383838 0.595960 0.636670 +0.383838 0.606061 0.640955 +0.383838 0.616162 0.645240 +0.383838 0.626263 0.649526 +0.383838 0.636364 0.653811 +0.383838 0.646465 0.658096 +0.383838 0.656566 0.662381 +0.383838 0.666667 0.666667 +0.383838 0.676768 0.670952 +0.383838 0.686869 0.675237 +0.383838 0.696970 0.679522 +0.383838 0.707071 0.683808 +0.383838 0.717172 0.688093 +0.383838 0.727273 0.692378 +0.383838 0.737374 0.696664 +0.383838 0.747475 0.700949 +0.383838 0.757576 0.705234 +0.383838 0.767677 0.709519 +0.383838 0.777778 0.713805 +0.383838 0.787879 0.718090 +0.383838 0.797980 0.722375 +0.383838 0.808081 0.726661 +0.383838 0.818182 0.730946 +0.383838 0.828283 0.735231 +0.383838 0.838384 0.739516 +0.383838 0.848485 0.743802 +0.383838 0.858586 0.748087 +0.383838 0.868687 0.752372 +0.383838 0.878788 0.756657 +0.383838 0.888889 0.760943 +0.383838 0.898990 0.765228 +0.383838 0.909091 0.769513 +0.383838 0.919192 0.773799 +0.383838 0.929293 0.778084 +0.383838 0.939394 0.782369 +0.383838 0.949495 0.786654 +0.383838 0.959596 0.790940 +0.383838 0.969697 0.795225 +0.383838 0.979798 0.799510 +0.383838 0.989899 0.803796 +0.383838 1.000000 0.808081 + +0.393939 0.000000 0.393939 +0.393939 0.010101 0.398072 +0.393939 0.020202 0.402204 +0.393939 0.030303 0.406336 +0.393939 0.040404 0.410468 +0.393939 0.050505 0.414601 +0.393939 0.060606 0.418733 +0.393939 0.070707 0.422865 +0.393939 0.080808 0.426997 +0.393939 0.090909 0.431129 +0.393939 0.101010 0.435262 +0.393939 0.111111 0.439394 +0.393939 0.121212 0.443526 +0.393939 0.131313 0.447658 +0.393939 0.141414 0.451791 +0.393939 0.151515 0.455923 +0.393939 0.161616 0.460055 +0.393939 0.171717 0.464187 +0.393939 0.181818 0.468320 +0.393939 0.191919 0.472452 +0.393939 0.202020 0.476584 +0.393939 0.212121 0.480716 +0.393939 0.222222 0.484848 +0.393939 0.232323 0.488981 +0.393939 0.242424 0.493113 +0.393939 0.252525 0.497245 +0.393939 0.262626 0.501377 +0.393939 0.272727 0.505510 +0.393939 0.282828 0.509642 +0.393939 0.292929 0.513774 +0.393939 0.303030 0.517906 +0.393939 0.313131 0.522039 +0.393939 0.323232 0.526171 +0.393939 0.333333 0.530303 +0.393939 0.343434 0.534435 +0.393939 0.353535 0.538567 +0.393939 0.363636 0.542700 +0.393939 0.373737 0.546832 +0.393939 0.383838 0.550964 +0.393939 0.393939 0.555096 +0.393939 0.404040 0.559229 +0.393939 0.414141 0.563361 +0.393939 0.424242 0.567493 +0.393939 0.434343 0.571625 +0.393939 0.444444 0.575758 +0.393939 0.454545 0.579890 +0.393939 0.464646 0.584022 +0.393939 0.474747 0.588154 +0.393939 0.484848 0.592287 +0.393939 0.494949 0.596419 +0.393939 0.505051 0.600551 +0.393939 0.515152 0.604683 +0.393939 0.525253 0.608815 +0.393939 0.535354 0.612948 +0.393939 0.545455 0.617080 +0.393939 0.555556 0.621212 +0.393939 0.565657 0.625344 +0.393939 0.575758 0.629477 +0.393939 0.585859 0.633609 +0.393939 0.595960 0.637741 +0.393939 0.606061 0.641873 +0.393939 0.616162 0.646006 +0.393939 0.626263 0.650138 +0.393939 0.636364 0.654270 +0.393939 0.646465 0.658402 +0.393939 0.656566 0.662534 +0.393939 0.666667 0.666667 +0.393939 0.676768 0.670799 +0.393939 0.686869 0.674931 +0.393939 0.696970 0.679063 +0.393939 0.707071 0.683196 +0.393939 0.717172 0.687328 +0.393939 0.727273 0.691460 +0.393939 0.737374 0.695592 +0.393939 0.747475 0.699725 +0.393939 0.757576 0.703857 +0.393939 0.767677 0.707989 +0.393939 0.777778 0.712121 +0.393939 0.787879 0.716253 +0.393939 0.797980 0.720386 +0.393939 0.808081 0.724518 +0.393939 0.818182 0.728650 +0.393939 0.828283 0.732782 +0.393939 0.838384 0.736915 +0.393939 0.848485 0.741047 +0.393939 0.858586 0.745179 +0.393939 0.868687 0.749311 +0.393939 0.878788 0.753444 +0.393939 0.888889 0.757576 +0.393939 0.898990 0.761708 +0.393939 0.909091 0.765840 +0.393939 0.919192 0.769972 +0.393939 0.929293 0.774105 +0.393939 0.939394 0.778237 +0.393939 0.949495 0.782369 +0.393939 0.959596 0.786501 +0.393939 0.969697 0.790634 +0.393939 0.979798 0.794766 +0.393939 0.989899 0.798898 +0.393939 1.000000 0.803030 + +0.404040 0.000000 0.404040 +0.404040 0.010101 0.408020 +0.404040 0.020202 0.411999 +0.404040 0.030303 0.415978 +0.404040 0.040404 0.419957 +0.404040 0.050505 0.423936 +0.404040 0.060606 0.427916 +0.404040 0.070707 0.431895 +0.404040 0.080808 0.435874 +0.404040 0.090909 0.439853 +0.404040 0.101010 0.443832 +0.404040 0.111111 0.447811 +0.404040 0.121212 0.451791 +0.404040 0.131313 0.455770 +0.404040 0.141414 0.459749 +0.404040 0.151515 0.463728 +0.404040 0.161616 0.467707 +0.404040 0.171717 0.471687 +0.404040 0.181818 0.475666 +0.404040 0.191919 0.479645 +0.404040 0.202020 0.483624 +0.404040 0.212121 0.487603 +0.404040 0.222222 0.491582 +0.404040 0.232323 0.495562 +0.404040 0.242424 0.499541 +0.404040 0.252525 0.503520 +0.404040 0.262626 0.507499 +0.404040 0.272727 0.511478 +0.404040 0.282828 0.515458 +0.404040 0.292929 0.519437 +0.404040 0.303030 0.523416 +0.404040 0.313131 0.527395 +0.404040 0.323232 0.531374 +0.404040 0.333333 0.535354 +0.404040 0.343434 0.539333 +0.404040 0.353535 0.543312 +0.404040 0.363636 0.547291 +0.404040 0.373737 0.551270 +0.404040 0.383838 0.555249 +0.404040 0.393939 0.559229 +0.404040 0.404040 0.563208 +0.404040 0.414141 0.567187 +0.404040 0.424242 0.571166 +0.404040 0.434343 0.575145 +0.404040 0.444444 0.579125 +0.404040 0.454545 0.583104 +0.404040 0.464646 0.587083 +0.404040 0.474747 0.591062 +0.404040 0.484848 0.595041 +0.404040 0.494949 0.599021 +0.404040 0.505051 0.603000 +0.404040 0.515152 0.606979 +0.404040 0.525253 0.610958 +0.404040 0.535354 0.614937 +0.404040 0.545455 0.618916 +0.404040 0.555556 0.622896 +0.404040 0.565657 0.626875 +0.404040 0.575758 0.630854 +0.404040 0.585859 0.634833 +0.404040 0.595960 0.638812 +0.404040 0.606061 0.642792 +0.404040 0.616162 0.646771 +0.404040 0.626263 0.650750 +0.404040 0.636364 0.654729 +0.404040 0.646465 0.658708 +0.404040 0.656566 0.662687 +0.404040 0.666667 0.666667 +0.404040 0.676768 0.670646 +0.404040 0.686869 0.674625 +0.404040 0.696970 0.678604 +0.404040 0.707071 0.682583 +0.404040 0.717172 0.686563 +0.404040 0.727273 0.690542 +0.404040 0.737374 0.694521 +0.404040 0.747475 0.698500 +0.404040 0.757576 0.702479 +0.404040 0.767677 0.706459 +0.404040 0.777778 0.710438 +0.404040 0.787879 0.714417 +0.404040 0.797980 0.718396 +0.404040 0.808081 0.722375 +0.404040 0.818182 0.726354 +0.404040 0.828283 0.730334 +0.404040 0.838384 0.734313 +0.404040 0.848485 0.738292 +0.404040 0.858586 0.742271 +0.404040 0.868687 0.746250 +0.404040 0.878788 0.750230 +0.404040 0.888889 0.754209 +0.404040 0.898990 0.758188 +0.404040 0.909091 0.762167 +0.404040 0.919192 0.766146 +0.404040 0.929293 0.770125 +0.404040 0.939394 0.774105 +0.404040 0.949495 0.778084 +0.404040 0.959596 0.782063 +0.404040 0.969697 0.786042 +0.404040 0.979798 0.790021 +0.404040 0.989899 0.794001 +0.404040 1.000000 0.797980 + +0.414141 0.000000 0.414141 +0.414141 0.010101 0.417968 +0.414141 0.020202 0.421794 +0.414141 0.030303 0.425620 +0.414141 0.040404 0.429446 +0.414141 0.050505 0.433272 +0.414141 0.060606 0.437098 +0.414141 0.070707 0.440924 +0.414141 0.080808 0.444751 +0.414141 0.090909 0.448577 +0.414141 0.101010 0.452403 +0.414141 0.111111 0.456229 +0.414141 0.121212 0.460055 +0.414141 0.131313 0.463881 +0.414141 0.141414 0.467707 +0.414141 0.151515 0.471534 +0.414141 0.161616 0.475360 +0.414141 0.171717 0.479186 +0.414141 0.181818 0.483012 +0.414141 0.191919 0.486838 +0.414141 0.202020 0.490664 +0.414141 0.212121 0.494490 +0.414141 0.222222 0.498316 +0.414141 0.232323 0.502143 +0.414141 0.242424 0.505969 +0.414141 0.252525 0.509795 +0.414141 0.262626 0.513621 +0.414141 0.272727 0.517447 +0.414141 0.282828 0.521273 +0.414141 0.292929 0.525099 +0.414141 0.303030 0.528926 +0.414141 0.313131 0.532752 +0.414141 0.323232 0.536578 +0.414141 0.333333 0.540404 +0.414141 0.343434 0.544230 +0.414141 0.353535 0.548056 +0.414141 0.363636 0.551882 +0.414141 0.373737 0.555709 +0.414141 0.383838 0.559535 +0.414141 0.393939 0.563361 +0.414141 0.404040 0.567187 +0.414141 0.414141 0.571013 +0.414141 0.424242 0.574839 +0.414141 0.434343 0.578665 +0.414141 0.444444 0.582492 +0.414141 0.454545 0.586318 +0.414141 0.464646 0.590144 +0.414141 0.474747 0.593970 +0.414141 0.484848 0.597796 +0.414141 0.494949 0.601622 +0.414141 0.505051 0.605448 +0.414141 0.515152 0.609275 +0.414141 0.525253 0.613101 +0.414141 0.535354 0.616927 +0.414141 0.545455 0.620753 +0.414141 0.555556 0.624579 +0.414141 0.565657 0.628405 +0.414141 0.575758 0.632231 +0.414141 0.585859 0.636058 +0.414141 0.595960 0.639884 +0.414141 0.606061 0.643710 +0.414141 0.616162 0.647536 +0.414141 0.626263 0.651362 +0.414141 0.636364 0.655188 +0.414141 0.646465 0.659014 +0.414141 0.656566 0.662841 +0.414141 0.666667 0.666667 +0.414141 0.676768 0.670493 +0.414141 0.686869 0.674319 +0.414141 0.696970 0.678145 +0.414141 0.707071 0.681971 +0.414141 0.717172 0.685797 +0.414141 0.727273 0.689624 +0.414141 0.737374 0.693450 +0.414141 0.747475 0.697276 +0.414141 0.757576 0.701102 +0.414141 0.767677 0.704928 +0.414141 0.777778 0.708754 +0.414141 0.787879 0.712580 +0.414141 0.797980 0.716406 +0.414141 0.808081 0.720233 +0.414141 0.818182 0.724059 +0.414141 0.828283 0.727885 +0.414141 0.838384 0.731711 +0.414141 0.848485 0.735537 +0.414141 0.858586 0.739363 +0.414141 0.868687 0.743189 +0.414141 0.878788 0.747016 +0.414141 0.888889 0.750842 +0.414141 0.898990 0.754668 +0.414141 0.909091 0.758494 +0.414141 0.919192 0.762320 +0.414141 0.929293 0.766146 +0.414141 0.939394 0.769972 +0.414141 0.949495 0.773799 +0.414141 0.959596 0.777625 +0.414141 0.969697 0.781451 +0.414141 0.979798 0.785277 +0.414141 0.989899 0.789103 +0.414141 1.000000 0.792929 + +0.424242 0.000000 0.424242 +0.424242 0.010101 0.427916 +0.424242 0.020202 0.431589 +0.424242 0.030303 0.435262 +0.424242 0.040404 0.438935 +0.424242 0.050505 0.442608 +0.424242 0.060606 0.446281 +0.424242 0.070707 0.449954 +0.424242 0.080808 0.453627 +0.424242 0.090909 0.457300 +0.424242 0.101010 0.460973 +0.424242 0.111111 0.464646 +0.424242 0.121212 0.468320 +0.424242 0.131313 0.471993 +0.424242 0.141414 0.475666 +0.424242 0.151515 0.479339 +0.424242 0.161616 0.483012 +0.424242 0.171717 0.486685 +0.424242 0.181818 0.490358 +0.424242 0.191919 0.494031 +0.424242 0.202020 0.497704 +0.424242 0.212121 0.501377 +0.424242 0.222222 0.505051 +0.424242 0.232323 0.508724 +0.424242 0.242424 0.512397 +0.424242 0.252525 0.516070 +0.424242 0.262626 0.519743 +0.424242 0.272727 0.523416 +0.424242 0.282828 0.527089 +0.424242 0.292929 0.530762 +0.424242 0.303030 0.534435 +0.424242 0.313131 0.538108 +0.424242 0.323232 0.541781 +0.424242 0.333333 0.545455 +0.424242 0.343434 0.549128 +0.424242 0.353535 0.552801 +0.424242 0.363636 0.556474 +0.424242 0.373737 0.560147 +0.424242 0.383838 0.563820 +0.424242 0.393939 0.567493 +0.424242 0.404040 0.571166 +0.424242 0.414141 0.574839 +0.424242 0.424242 0.578512 +0.424242 0.434343 0.582185 +0.424242 0.444444 0.585859 +0.424242 0.454545 0.589532 +0.424242 0.464646 0.593205 +0.424242 0.474747 0.596878 +0.424242 0.484848 0.600551 +0.424242 0.494949 0.604224 +0.424242 0.505051 0.607897 +0.424242 0.515152 0.611570 +0.424242 0.525253 0.615243 +0.424242 0.535354 0.618916 +0.424242 0.545455 0.622590 +0.424242 0.555556 0.626263 +0.424242 0.565657 0.629936 +0.424242 0.575758 0.633609 +0.424242 0.585859 0.637282 +0.424242 0.595960 0.640955 +0.424242 0.606061 0.644628 +0.424242 0.616162 0.648301 +0.424242 0.626263 0.651974 +0.424242 0.636364 0.655647 +0.424242 0.646465 0.659320 +0.424242 0.656566 0.662994 +0.424242 0.666667 0.666667 +0.424242 0.676768 0.670340 +0.424242 0.686869 0.674013 +0.424242 0.696970 0.677686 +0.424242 0.707071 0.681359 +0.424242 0.717172 0.685032 +0.424242 0.727273 0.688705 +0.424242 0.737374 0.692378 +0.424242 0.747475 0.696051 +0.424242 0.757576 0.699725 +0.424242 0.767677 0.703398 +0.424242 0.777778 0.707071 +0.424242 0.787879 0.710744 +0.424242 0.797980 0.714417 +0.424242 0.808081 0.718090 +0.424242 0.818182 0.721763 +0.424242 0.828283 0.725436 +0.424242 0.838384 0.729109 +0.424242 0.848485 0.732782 +0.424242 0.858586 0.736455 +0.424242 0.868687 0.740129 +0.424242 0.878788 0.743802 +0.424242 0.888889 0.747475 +0.424242 0.898990 0.751148 +0.424242 0.909091 0.754821 +0.424242 0.919192 0.758494 +0.424242 0.929293 0.762167 +0.424242 0.939394 0.765840 +0.424242 0.949495 0.769513 +0.424242 0.959596 0.773186 +0.424242 0.969697 0.776860 +0.424242 0.979798 0.780533 +0.424242 0.989899 0.784206 +0.424242 1.000000 0.787879 + +0.434343 0.000000 0.434343 +0.434343 0.010101 0.437863 +0.434343 0.020202 0.441384 +0.434343 0.030303 0.444904 +0.434343 0.040404 0.448424 +0.434343 0.050505 0.451944 +0.434343 0.060606 0.455464 +0.434343 0.070707 0.458984 +0.434343 0.080808 0.462504 +0.434343 0.090909 0.466024 +0.434343 0.101010 0.469544 +0.434343 0.111111 0.473064 +0.434343 0.121212 0.476584 +0.434343 0.131313 0.480104 +0.434343 0.141414 0.483624 +0.434343 0.151515 0.487144 +0.434343 0.161616 0.490664 +0.434343 0.171717 0.494184 +0.434343 0.181818 0.497704 +0.434343 0.191919 0.501224 +0.434343 0.202020 0.504744 +0.434343 0.212121 0.508264 +0.434343 0.222222 0.511785 +0.434343 0.232323 0.515305 +0.434343 0.242424 0.518825 +0.434343 0.252525 0.522345 +0.434343 0.262626 0.525865 +0.434343 0.272727 0.529385 +0.434343 0.282828 0.532905 +0.434343 0.292929 0.536425 +0.434343 0.303030 0.539945 +0.434343 0.313131 0.543465 +0.434343 0.323232 0.546985 +0.434343 0.333333 0.550505 +0.434343 0.343434 0.554025 +0.434343 0.353535 0.557545 +0.434343 0.363636 0.561065 +0.434343 0.373737 0.564585 +0.434343 0.383838 0.568105 +0.434343 0.393939 0.571625 +0.434343 0.404040 0.575145 +0.434343 0.414141 0.578665 +0.434343 0.424242 0.582185 +0.434343 0.434343 0.585706 +0.434343 0.444444 0.589226 +0.434343 0.454545 0.592746 +0.434343 0.464646 0.596266 +0.434343 0.474747 0.599786 +0.434343 0.484848 0.603306 +0.434343 0.494949 0.606826 +0.434343 0.505051 0.610346 +0.434343 0.515152 0.613866 +0.434343 0.525253 0.617386 +0.434343 0.535354 0.620906 +0.434343 0.545455 0.624426 +0.434343 0.555556 0.627946 +0.434343 0.565657 0.631466 +0.434343 0.575758 0.634986 +0.434343 0.585859 0.638506 +0.434343 0.595960 0.642026 +0.434343 0.606061 0.645546 +0.434343 0.616162 0.649066 +0.434343 0.626263 0.652586 +0.434343 0.636364 0.656107 +0.434343 0.646465 0.659627 +0.434343 0.656566 0.663147 +0.434343 0.666667 0.666667 +0.434343 0.676768 0.670187 +0.434343 0.686869 0.673707 +0.434343 0.696970 0.677227 +0.434343 0.707071 0.680747 +0.434343 0.717172 0.684267 +0.434343 0.727273 0.687787 +0.434343 0.737374 0.691307 +0.434343 0.747475 0.694827 +0.434343 0.757576 0.698347 +0.434343 0.767677 0.701867 +0.434343 0.777778 0.705387 +0.434343 0.787879 0.708907 +0.434343 0.797980 0.712427 +0.434343 0.808081 0.715947 +0.434343 0.818182 0.719467 +0.434343 0.828283 0.722987 +0.434343 0.838384 0.726507 +0.434343 0.848485 0.730028 +0.434343 0.858586 0.733548 +0.434343 0.868687 0.737068 +0.434343 0.878788 0.740588 +0.434343 0.888889 0.744108 +0.434343 0.898990 0.747628 +0.434343 0.909091 0.751148 +0.434343 0.919192 0.754668 +0.434343 0.929293 0.758188 +0.434343 0.939394 0.761708 +0.434343 0.949495 0.765228 +0.434343 0.959596 0.768748 +0.434343 0.969697 0.772268 +0.434343 0.979798 0.775788 +0.434343 0.989899 0.779308 +0.434343 1.000000 0.782828 + +0.444444 0.000000 0.444444 +0.444444 0.010101 0.447811 +0.444444 0.020202 0.451178 +0.444444 0.030303 0.454545 +0.444444 0.040404 0.457912 +0.444444 0.050505 0.461279 +0.444444 0.060606 0.464646 +0.444444 0.070707 0.468013 +0.444444 0.080808 0.471380 +0.444444 0.090909 0.474747 +0.444444 0.101010 0.478114 +0.444444 0.111111 0.481481 +0.444444 0.121212 0.484848 +0.444444 0.131313 0.488215 +0.444444 0.141414 0.491582 +0.444444 0.151515 0.494949 +0.444444 0.161616 0.498316 +0.444444 0.171717 0.501684 +0.444444 0.181818 0.505051 +0.444444 0.191919 0.508418 +0.444444 0.202020 0.511785 +0.444444 0.212121 0.515152 +0.444444 0.222222 0.518519 +0.444444 0.232323 0.521886 +0.444444 0.242424 0.525253 +0.444444 0.252525 0.528620 +0.444444 0.262626 0.531987 +0.444444 0.272727 0.535354 +0.444444 0.282828 0.538721 +0.444444 0.292929 0.542088 +0.444444 0.303030 0.545455 +0.444444 0.313131 0.548822 +0.444444 0.323232 0.552189 +0.444444 0.333333 0.555556 +0.444444 0.343434 0.558923 +0.444444 0.353535 0.562290 +0.444444 0.363636 0.565657 +0.444444 0.373737 0.569024 +0.444444 0.383838 0.572391 +0.444444 0.393939 0.575758 +0.444444 0.404040 0.579125 +0.444444 0.414141 0.582492 +0.444444 0.424242 0.585859 +0.444444 0.434343 0.589226 +0.444444 0.444444 0.592593 +0.444444 0.454545 0.595960 +0.444444 0.464646 0.599327 +0.444444 0.474747 0.602694 +0.444444 0.484848 0.606061 +0.444444 0.494949 0.609428 +0.444444 0.505051 0.612795 +0.444444 0.515152 0.616162 +0.444444 0.525253 0.619529 +0.444444 0.535354 0.622896 +0.444444 0.545455 0.626263 +0.444444 0.555556 0.629630 +0.444444 0.565657 0.632997 +0.444444 0.575758 0.636364 +0.444444 0.585859 0.639731 +0.444444 0.595960 0.643098 +0.444444 0.606061 0.646465 +0.444444 0.616162 0.649832 +0.444444 0.626263 0.653199 +0.444444 0.636364 0.656566 +0.444444 0.646465 0.659933 +0.444444 0.656566 0.663300 +0.444444 0.666667 0.666667 +0.444444 0.676768 0.670034 +0.444444 0.686869 0.673401 +0.444444 0.696970 0.676768 +0.444444 0.707071 0.680135 +0.444444 0.717172 0.683502 +0.444444 0.727273 0.686869 +0.444444 0.737374 0.690236 +0.444444 0.747475 0.693603 +0.444444 0.757576 0.696970 +0.444444 0.767677 0.700337 +0.444444 0.777778 0.703704 +0.444444 0.787879 0.707071 +0.444444 0.797980 0.710438 +0.444444 0.808081 0.713805 +0.444444 0.818182 0.717172 +0.444444 0.828283 0.720539 +0.444444 0.838384 0.723906 +0.444444 0.848485 0.727273 +0.444444 0.858586 0.730640 +0.444444 0.868687 0.734007 +0.444444 0.878788 0.737374 +0.444444 0.888889 0.740741 +0.444444 0.898990 0.744108 +0.444444 0.909091 0.747475 +0.444444 0.919192 0.750842 +0.444444 0.929293 0.754209 +0.444444 0.939394 0.757576 +0.444444 0.949495 0.760943 +0.444444 0.959596 0.764310 +0.444444 0.969697 0.767677 +0.444444 0.979798 0.771044 +0.444444 0.989899 0.774411 +0.444444 1.000000 0.777778 + +0.454545 0.000000 0.454545 +0.454545 0.010101 0.457759 +0.454545 0.020202 0.460973 +0.454545 0.030303 0.464187 +0.454545 0.040404 0.467401 +0.454545 0.050505 0.470615 +0.454545 0.060606 0.473829 +0.454545 0.070707 0.477043 +0.454545 0.080808 0.480257 +0.454545 0.090909 0.483471 +0.454545 0.101010 0.486685 +0.454545 0.111111 0.489899 +0.454545 0.121212 0.493113 +0.454545 0.131313 0.496327 +0.454545 0.141414 0.499541 +0.454545 0.151515 0.502755 +0.454545 0.161616 0.505969 +0.454545 0.171717 0.509183 +0.454545 0.181818 0.512397 +0.454545 0.191919 0.515611 +0.454545 0.202020 0.518825 +0.454545 0.212121 0.522039 +0.454545 0.222222 0.525253 +0.454545 0.232323 0.528466 +0.454545 0.242424 0.531680 +0.454545 0.252525 0.534894 +0.454545 0.262626 0.538108 +0.454545 0.272727 0.541322 +0.454545 0.282828 0.544536 +0.454545 0.292929 0.547750 +0.454545 0.303030 0.550964 +0.454545 0.313131 0.554178 +0.454545 0.323232 0.557392 +0.454545 0.333333 0.560606 +0.454545 0.343434 0.563820 +0.454545 0.353535 0.567034 +0.454545 0.363636 0.570248 +0.454545 0.373737 0.573462 +0.454545 0.383838 0.576676 +0.454545 0.393939 0.579890 +0.454545 0.404040 0.583104 +0.454545 0.414141 0.586318 +0.454545 0.424242 0.589532 +0.454545 0.434343 0.592746 +0.454545 0.444444 0.595960 +0.454545 0.454545 0.599174 +0.454545 0.464646 0.602388 +0.454545 0.474747 0.605601 +0.454545 0.484848 0.608815 +0.454545 0.494949 0.612029 +0.454545 0.505051 0.615243 +0.454545 0.515152 0.618457 +0.454545 0.525253 0.621671 +0.454545 0.535354 0.624885 +0.454545 0.545455 0.628099 +0.454545 0.555556 0.631313 +0.454545 0.565657 0.634527 +0.454545 0.575758 0.637741 +0.454545 0.585859 0.640955 +0.454545 0.595960 0.644169 +0.454545 0.606061 0.647383 +0.454545 0.616162 0.650597 +0.454545 0.626263 0.653811 +0.454545 0.636364 0.657025 +0.454545 0.646465 0.660239 +0.454545 0.656566 0.663453 +0.454545 0.666667 0.666667 +0.454545 0.676768 0.669881 +0.454545 0.686869 0.673095 +0.454545 0.696970 0.676309 +0.454545 0.707071 0.679522 +0.454545 0.717172 0.682736 +0.454545 0.727273 0.685950 +0.454545 0.737374 0.689164 +0.454545 0.747475 0.692378 +0.454545 0.757576 0.695592 +0.454545 0.767677 0.698806 +0.454545 0.777778 0.702020 +0.454545 0.787879 0.705234 +0.454545 0.797980 0.708448 +0.454545 0.808081 0.711662 +0.454545 0.818182 0.714876 +0.454545 0.828283 0.718090 +0.454545 0.838384 0.721304 +0.454545 0.848485 0.724518 +0.454545 0.858586 0.727732 +0.454545 0.868687 0.730946 +0.454545 0.878788 0.734160 +0.454545 0.888889 0.737374 +0.454545 0.898990 0.740588 +0.454545 0.909091 0.743802 +0.454545 0.919192 0.747016 +0.454545 0.929293 0.750230 +0.454545 0.939394 0.753444 +0.454545 0.949495 0.756657 +0.454545 0.959596 0.759871 +0.454545 0.969697 0.763085 +0.454545 0.979798 0.766299 +0.454545 0.989899 0.769513 +0.454545 1.000000 0.772727 + +0.464646 0.000000 0.464646 +0.464646 0.010101 0.467707 +0.464646 0.020202 0.470768 +0.464646 0.030303 0.473829 +0.464646 0.040404 0.476890 +0.464646 0.050505 0.479951 +0.464646 0.060606 0.483012 +0.464646 0.070707 0.486073 +0.464646 0.080808 0.489134 +0.464646 0.090909 0.492195 +0.464646 0.101010 0.495256 +0.464646 0.111111 0.498316 +0.464646 0.121212 0.501377 +0.464646 0.131313 0.504438 +0.464646 0.141414 0.507499 +0.464646 0.151515 0.510560 +0.464646 0.161616 0.513621 +0.464646 0.171717 0.516682 +0.464646 0.181818 0.519743 +0.464646 0.191919 0.522804 +0.464646 0.202020 0.525865 +0.464646 0.212121 0.528926 +0.464646 0.222222 0.531987 +0.464646 0.232323 0.535047 +0.464646 0.242424 0.538108 +0.464646 0.252525 0.541169 +0.464646 0.262626 0.544230 +0.464646 0.272727 0.547291 +0.464646 0.282828 0.550352 +0.464646 0.292929 0.553413 +0.464646 0.303030 0.556474 +0.464646 0.313131 0.559535 +0.464646 0.323232 0.562596 +0.464646 0.333333 0.565657 +0.464646 0.343434 0.568717 +0.464646 0.353535 0.571778 +0.464646 0.363636 0.574839 +0.464646 0.373737 0.577900 +0.464646 0.383838 0.580961 +0.464646 0.393939 0.584022 +0.464646 0.404040 0.587083 +0.464646 0.414141 0.590144 +0.464646 0.424242 0.593205 +0.464646 0.434343 0.596266 +0.464646 0.444444 0.599327 +0.464646 0.454545 0.602388 +0.464646 0.464646 0.605448 +0.464646 0.474747 0.608509 +0.464646 0.484848 0.611570 +0.464646 0.494949 0.614631 +0.464646 0.505051 0.617692 +0.464646 0.515152 0.620753 +0.464646 0.525253 0.623814 +0.464646 0.535354 0.626875 +0.464646 0.545455 0.629936 +0.464646 0.555556 0.632997 +0.464646 0.565657 0.636058 +0.464646 0.575758 0.639118 +0.464646 0.585859 0.642179 +0.464646 0.595960 0.645240 +0.464646 0.606061 0.648301 +0.464646 0.616162 0.651362 +0.464646 0.626263 0.654423 +0.464646 0.636364 0.657484 +0.464646 0.646465 0.660545 +0.464646 0.656566 0.663606 +0.464646 0.666667 0.666667 +0.464646 0.676768 0.669728 +0.464646 0.686869 0.672788 +0.464646 0.696970 0.675849 +0.464646 0.707071 0.678910 +0.464646 0.717172 0.681971 +0.464646 0.727273 0.685032 +0.464646 0.737374 0.688093 +0.464646 0.747475 0.691154 +0.464646 0.757576 0.694215 +0.464646 0.767677 0.697276 +0.464646 0.777778 0.700337 +0.464646 0.787879 0.703398 +0.464646 0.797980 0.706459 +0.464646 0.808081 0.709519 +0.464646 0.818182 0.712580 +0.464646 0.828283 0.715641 +0.464646 0.838384 0.718702 +0.464646 0.848485 0.721763 +0.464646 0.858586 0.724824 +0.464646 0.868687 0.727885 +0.464646 0.878788 0.730946 +0.464646 0.888889 0.734007 +0.464646 0.898990 0.737068 +0.464646 0.909091 0.740129 +0.464646 0.919192 0.743189 +0.464646 0.929293 0.746250 +0.464646 0.939394 0.749311 +0.464646 0.949495 0.752372 +0.464646 0.959596 0.755433 +0.464646 0.969697 0.758494 +0.464646 0.979798 0.761555 +0.464646 0.989899 0.764616 +0.464646 1.000000 0.767677 + +0.474747 0.000000 0.474747 +0.474747 0.010101 0.477655 +0.474747 0.020202 0.480563 +0.474747 0.030303 0.483471 +0.474747 0.040404 0.486379 +0.474747 0.050505 0.489287 +0.474747 0.060606 0.492195 +0.474747 0.070707 0.495103 +0.474747 0.080808 0.498010 +0.474747 0.090909 0.500918 +0.474747 0.101010 0.503826 +0.474747 0.111111 0.506734 +0.474747 0.121212 0.509642 +0.474747 0.131313 0.512550 +0.474747 0.141414 0.515458 +0.474747 0.151515 0.518365 +0.474747 0.161616 0.521273 +0.474747 0.171717 0.524181 +0.474747 0.181818 0.527089 +0.474747 0.191919 0.529997 +0.474747 0.202020 0.532905 +0.474747 0.212121 0.535813 +0.474747 0.222222 0.538721 +0.474747 0.232323 0.541628 +0.474747 0.242424 0.544536 +0.474747 0.252525 0.547444 +0.474747 0.262626 0.550352 +0.474747 0.272727 0.553260 +0.474747 0.282828 0.556168 +0.474747 0.292929 0.559076 +0.474747 0.303030 0.561983 +0.474747 0.313131 0.564891 +0.474747 0.323232 0.567799 +0.474747 0.333333 0.570707 +0.474747 0.343434 0.573615 +0.474747 0.353535 0.576523 +0.474747 0.363636 0.579431 +0.474747 0.373737 0.582339 +0.474747 0.383838 0.585246 +0.474747 0.393939 0.588154 +0.474747 0.404040 0.591062 +0.474747 0.414141 0.593970 +0.474747 0.424242 0.596878 +0.474747 0.434343 0.599786 +0.474747 0.444444 0.602694 +0.474747 0.454545 0.605601 +0.474747 0.464646 0.608509 +0.474747 0.474747 0.611417 +0.474747 0.484848 0.614325 +0.474747 0.494949 0.617233 +0.474747 0.505051 0.620141 +0.474747 0.515152 0.623049 +0.474747 0.525253 0.625957 +0.474747 0.535354 0.628864 +0.474747 0.545455 0.631772 +0.474747 0.555556 0.634680 +0.474747 0.565657 0.637588 +0.474747 0.575758 0.640496 +0.474747 0.585859 0.643404 +0.474747 0.595960 0.646312 +0.474747 0.606061 0.649219 +0.474747 0.616162 0.652127 +0.474747 0.626263 0.655035 +0.474747 0.636364 0.657943 +0.474747 0.646465 0.660851 +0.474747 0.656566 0.663759 +0.474747 0.666667 0.666667 +0.474747 0.676768 0.669575 +0.474747 0.686869 0.672482 +0.474747 0.696970 0.675390 +0.474747 0.707071 0.678298 +0.474747 0.717172 0.681206 +0.474747 0.727273 0.684114 +0.474747 0.737374 0.687022 +0.474747 0.747475 0.689930 +0.474747 0.757576 0.692837 +0.474747 0.767677 0.695745 +0.474747 0.777778 0.698653 +0.474747 0.787879 0.701561 +0.474747 0.797980 0.704469 +0.474747 0.808081 0.707377 +0.474747 0.818182 0.710285 +0.474747 0.828283 0.713193 +0.474747 0.838384 0.716100 +0.474747 0.848485 0.719008 +0.474747 0.858586 0.721916 +0.474747 0.868687 0.724824 +0.474747 0.878788 0.727732 +0.474747 0.888889 0.730640 +0.474747 0.898990 0.733548 +0.474747 0.909091 0.736455 +0.474747 0.919192 0.739363 +0.474747 0.929293 0.742271 +0.474747 0.939394 0.745179 +0.474747 0.949495 0.748087 +0.474747 0.959596 0.750995 +0.474747 0.969697 0.753903 +0.474747 0.979798 0.756811 +0.474747 0.989899 0.759718 +0.474747 1.000000 0.762626 + +0.484848 0.000000 0.484848 +0.484848 0.010101 0.487603 +0.484848 0.020202 0.490358 +0.484848 0.030303 0.493113 +0.484848 0.040404 0.495868 +0.484848 0.050505 0.498623 +0.484848 0.060606 0.501377 +0.484848 0.070707 0.504132 +0.484848 0.080808 0.506887 +0.484848 0.090909 0.509642 +0.484848 0.101010 0.512397 +0.484848 0.111111 0.515152 +0.484848 0.121212 0.517906 +0.484848 0.131313 0.520661 +0.484848 0.141414 0.523416 +0.484848 0.151515 0.526171 +0.484848 0.161616 0.528926 +0.484848 0.171717 0.531680 +0.484848 0.181818 0.534435 +0.484848 0.191919 0.537190 +0.484848 0.202020 0.539945 +0.484848 0.212121 0.542700 +0.484848 0.222222 0.545455 +0.484848 0.232323 0.548209 +0.484848 0.242424 0.550964 +0.484848 0.252525 0.553719 +0.484848 0.262626 0.556474 +0.484848 0.272727 0.559229 +0.484848 0.282828 0.561983 +0.484848 0.292929 0.564738 +0.484848 0.303030 0.567493 +0.484848 0.313131 0.570248 +0.484848 0.323232 0.573003 +0.484848 0.333333 0.575758 +0.484848 0.343434 0.578512 +0.484848 0.353535 0.581267 +0.484848 0.363636 0.584022 +0.484848 0.373737 0.586777 +0.484848 0.383838 0.589532 +0.484848 0.393939 0.592287 +0.484848 0.404040 0.595041 +0.484848 0.414141 0.597796 +0.484848 0.424242 0.600551 +0.484848 0.434343 0.603306 +0.484848 0.444444 0.606061 +0.484848 0.454545 0.608815 +0.484848 0.464646 0.611570 +0.484848 0.474747 0.614325 +0.484848 0.484848 0.617080 +0.484848 0.494949 0.619835 +0.484848 0.505051 0.622590 +0.484848 0.515152 0.625344 +0.484848 0.525253 0.628099 +0.484848 0.535354 0.630854 +0.484848 0.545455 0.633609 +0.484848 0.555556 0.636364 +0.484848 0.565657 0.639118 +0.484848 0.575758 0.641873 +0.484848 0.585859 0.644628 +0.484848 0.595960 0.647383 +0.484848 0.606061 0.650138 +0.484848 0.616162 0.652893 +0.484848 0.626263 0.655647 +0.484848 0.636364 0.658402 +0.484848 0.646465 0.661157 +0.484848 0.656566 0.663912 +0.484848 0.666667 0.666667 +0.484848 0.676768 0.669421 +0.484848 0.686869 0.672176 +0.484848 0.696970 0.674931 +0.484848 0.707071 0.677686 +0.484848 0.717172 0.680441 +0.484848 0.727273 0.683196 +0.484848 0.737374 0.685950 +0.484848 0.747475 0.688705 +0.484848 0.757576 0.691460 +0.484848 0.767677 0.694215 +0.484848 0.777778 0.696970 +0.484848 0.787879 0.699725 +0.484848 0.797980 0.702479 +0.484848 0.808081 0.705234 +0.484848 0.818182 0.707989 +0.484848 0.828283 0.710744 +0.484848 0.838384 0.713499 +0.484848 0.848485 0.716253 +0.484848 0.858586 0.719008 +0.484848 0.868687 0.721763 +0.484848 0.878788 0.724518 +0.484848 0.888889 0.727273 +0.484848 0.898990 0.730028 +0.484848 0.909091 0.732782 +0.484848 0.919192 0.735537 +0.484848 0.929293 0.738292 +0.484848 0.939394 0.741047 +0.484848 0.949495 0.743802 +0.484848 0.959596 0.746556 +0.484848 0.969697 0.749311 +0.484848 0.979798 0.752066 +0.484848 0.989899 0.754821 +0.484848 1.000000 0.757576 + +0.494949 0.000000 0.494949 +0.494949 0.010101 0.497551 +0.494949 0.020202 0.500153 +0.494949 0.030303 0.502755 +0.494949 0.040404 0.505357 +0.494949 0.050505 0.507958 +0.494949 0.060606 0.510560 +0.494949 0.070707 0.513162 +0.494949 0.080808 0.515764 +0.494949 0.090909 0.518365 +0.494949 0.101010 0.520967 +0.494949 0.111111 0.523569 +0.494949 0.121212 0.526171 +0.494949 0.131313 0.528773 +0.494949 0.141414 0.531374 +0.494949 0.151515 0.533976 +0.494949 0.161616 0.536578 +0.494949 0.171717 0.539180 +0.494949 0.181818 0.541781 +0.494949 0.191919 0.544383 +0.494949 0.202020 0.546985 +0.494949 0.212121 0.549587 +0.494949 0.222222 0.552189 +0.494949 0.232323 0.554790 +0.494949 0.242424 0.557392 +0.494949 0.252525 0.559994 +0.494949 0.262626 0.562596 +0.494949 0.272727 0.565197 +0.494949 0.282828 0.567799 +0.494949 0.292929 0.570401 +0.494949 0.303030 0.573003 +0.494949 0.313131 0.575605 +0.494949 0.323232 0.578206 +0.494949 0.333333 0.580808 +0.494949 0.343434 0.583410 +0.494949 0.353535 0.586012 +0.494949 0.363636 0.588613 +0.494949 0.373737 0.591215 +0.494949 0.383838 0.593817 +0.494949 0.393939 0.596419 +0.494949 0.404040 0.599021 +0.494949 0.414141 0.601622 +0.494949 0.424242 0.604224 +0.494949 0.434343 0.606826 +0.494949 0.444444 0.609428 +0.494949 0.454545 0.612029 +0.494949 0.464646 0.614631 +0.494949 0.474747 0.617233 +0.494949 0.484848 0.619835 +0.494949 0.494949 0.622436 +0.494949 0.505051 0.625038 +0.494949 0.515152 0.627640 +0.494949 0.525253 0.630242 +0.494949 0.535354 0.632844 +0.494949 0.545455 0.635445 +0.494949 0.555556 0.638047 +0.494949 0.565657 0.640649 +0.494949 0.575758 0.643251 +0.494949 0.585859 0.645852 +0.494949 0.595960 0.648454 +0.494949 0.606061 0.651056 +0.494949 0.616162 0.653658 +0.494949 0.626263 0.656260 +0.494949 0.636364 0.658861 +0.494949 0.646465 0.661463 +0.494949 0.656566 0.664065 +0.494949 0.666667 0.666667 +0.494949 0.676768 0.669268 +0.494949 0.686869 0.671870 +0.494949 0.696970 0.674472 +0.494949 0.707071 0.677074 +0.494949 0.717172 0.679676 +0.494949 0.727273 0.682277 +0.494949 0.737374 0.684879 +0.494949 0.747475 0.687481 +0.494949 0.757576 0.690083 +0.494949 0.767677 0.692684 +0.494949 0.777778 0.695286 +0.494949 0.787879 0.697888 +0.494949 0.797980 0.700490 +0.494949 0.808081 0.703092 +0.494949 0.818182 0.705693 +0.494949 0.828283 0.708295 +0.494949 0.838384 0.710897 +0.494949 0.848485 0.713499 +0.494949 0.858586 0.716100 +0.494949 0.868687 0.718702 +0.494949 0.878788 0.721304 +0.494949 0.888889 0.723906 +0.494949 0.898990 0.726507 +0.494949 0.909091 0.729109 +0.494949 0.919192 0.731711 +0.494949 0.929293 0.734313 +0.494949 0.939394 0.736915 +0.494949 0.949495 0.739516 +0.494949 0.959596 0.742118 +0.494949 0.969697 0.744720 +0.494949 0.979798 0.747322 +0.494949 0.989899 0.749923 +0.494949 1.000000 0.752525 + +0.505051 0.000000 0.505051 +0.505051 0.010101 0.507499 +0.505051 0.020202 0.509948 +0.505051 0.030303 0.512397 +0.505051 0.040404 0.514845 +0.505051 0.050505 0.517294 +0.505051 0.060606 0.519743 +0.505051 0.070707 0.522192 +0.505051 0.080808 0.524640 +0.505051 0.090909 0.527089 +0.505051 0.101010 0.529538 +0.505051 0.111111 0.531987 +0.505051 0.121212 0.534435 +0.505051 0.131313 0.536884 +0.505051 0.141414 0.539333 +0.505051 0.151515 0.541781 +0.505051 0.161616 0.544230 +0.505051 0.171717 0.546679 +0.505051 0.181818 0.549128 +0.505051 0.191919 0.551576 +0.505051 0.202020 0.554025 +0.505051 0.212121 0.556474 +0.505051 0.222222 0.558923 +0.505051 0.232323 0.561371 +0.505051 0.242424 0.563820 +0.505051 0.252525 0.566269 +0.505051 0.262626 0.568717 +0.505051 0.272727 0.571166 +0.505051 0.282828 0.573615 +0.505051 0.292929 0.576064 +0.505051 0.303030 0.578512 +0.505051 0.313131 0.580961 +0.505051 0.323232 0.583410 +0.505051 0.333333 0.585859 +0.505051 0.343434 0.588307 +0.505051 0.353535 0.590756 +0.505051 0.363636 0.593205 +0.505051 0.373737 0.595654 +0.505051 0.383838 0.598102 +0.505051 0.393939 0.600551 +0.505051 0.404040 0.603000 +0.505051 0.414141 0.605448 +0.505051 0.424242 0.607897 +0.505051 0.434343 0.610346 +0.505051 0.444444 0.612795 +0.505051 0.454545 0.615243 +0.505051 0.464646 0.617692 +0.505051 0.474747 0.620141 +0.505051 0.484848 0.622590 +0.505051 0.494949 0.625038 +0.505051 0.505051 0.627487 +0.505051 0.515152 0.629936 +0.505051 0.525253 0.632384 +0.505051 0.535354 0.634833 +0.505051 0.545455 0.637282 +0.505051 0.555556 0.639731 +0.505051 0.565657 0.642179 +0.505051 0.575758 0.644628 +0.505051 0.585859 0.647077 +0.505051 0.595960 0.649526 +0.505051 0.606061 0.651974 +0.505051 0.616162 0.654423 +0.505051 0.626263 0.656872 +0.505051 0.636364 0.659320 +0.505051 0.646465 0.661769 +0.505051 0.656566 0.664218 +0.505051 0.666667 0.666667 +0.505051 0.676768 0.669115 +0.505051 0.686869 0.671564 +0.505051 0.696970 0.674013 +0.505051 0.707071 0.676462 +0.505051 0.717172 0.678910 +0.505051 0.727273 0.681359 +0.505051 0.737374 0.683808 +0.505051 0.747475 0.686257 +0.505051 0.757576 0.688705 +0.505051 0.767677 0.691154 +0.505051 0.777778 0.693603 +0.505051 0.787879 0.696051 +0.505051 0.797980 0.698500 +0.505051 0.808081 0.700949 +0.505051 0.818182 0.703398 +0.505051 0.828283 0.705846 +0.505051 0.838384 0.708295 +0.505051 0.848485 0.710744 +0.505051 0.858586 0.713193 +0.505051 0.868687 0.715641 +0.505051 0.878788 0.718090 +0.505051 0.888889 0.720539 +0.505051 0.898990 0.722987 +0.505051 0.909091 0.725436 +0.505051 0.919192 0.727885 +0.505051 0.929293 0.730334 +0.505051 0.939394 0.732782 +0.505051 0.949495 0.735231 +0.505051 0.959596 0.737680 +0.505051 0.969697 0.740129 +0.505051 0.979798 0.742577 +0.505051 0.989899 0.745026 +0.505051 1.000000 0.747475 + +0.515152 0.000000 0.515152 +0.515152 0.010101 0.517447 +0.515152 0.020202 0.519743 +0.515152 0.030303 0.522039 +0.515152 0.040404 0.524334 +0.515152 0.050505 0.526630 +0.515152 0.060606 0.528926 +0.515152 0.070707 0.531221 +0.515152 0.080808 0.533517 +0.515152 0.090909 0.535813 +0.515152 0.101010 0.538108 +0.515152 0.111111 0.540404 +0.515152 0.121212 0.542700 +0.515152 0.131313 0.544995 +0.515152 0.141414 0.547291 +0.515152 0.151515 0.549587 +0.515152 0.161616 0.551882 +0.515152 0.171717 0.554178 +0.515152 0.181818 0.556474 +0.515152 0.191919 0.558770 +0.515152 0.202020 0.561065 +0.515152 0.212121 0.563361 +0.515152 0.222222 0.565657 +0.515152 0.232323 0.567952 +0.515152 0.242424 0.570248 +0.515152 0.252525 0.572544 +0.515152 0.262626 0.574839 +0.515152 0.272727 0.577135 +0.515152 0.282828 0.579431 +0.515152 0.292929 0.581726 +0.515152 0.303030 0.584022 +0.515152 0.313131 0.586318 +0.515152 0.323232 0.588613 +0.515152 0.333333 0.590909 +0.515152 0.343434 0.593205 +0.515152 0.353535 0.595500 +0.515152 0.363636 0.597796 +0.515152 0.373737 0.600092 +0.515152 0.383838 0.602388 +0.515152 0.393939 0.604683 +0.515152 0.404040 0.606979 +0.515152 0.414141 0.609275 +0.515152 0.424242 0.611570 +0.515152 0.434343 0.613866 +0.515152 0.444444 0.616162 +0.515152 0.454545 0.618457 +0.515152 0.464646 0.620753 +0.515152 0.474747 0.623049 +0.515152 0.484848 0.625344 +0.515152 0.494949 0.627640 +0.515152 0.505051 0.629936 +0.515152 0.515152 0.632231 +0.515152 0.525253 0.634527 +0.515152 0.535354 0.636823 +0.515152 0.545455 0.639118 +0.515152 0.555556 0.641414 +0.515152 0.565657 0.643710 +0.515152 0.575758 0.646006 +0.515152 0.585859 0.648301 +0.515152 0.595960 0.650597 +0.515152 0.606061 0.652893 +0.515152 0.616162 0.655188 +0.515152 0.626263 0.657484 +0.515152 0.636364 0.659780 +0.515152 0.646465 0.662075 +0.515152 0.656566 0.664371 +0.515152 0.666667 0.666667 +0.515152 0.676768 0.668962 +0.515152 0.686869 0.671258 +0.515152 0.696970 0.673554 +0.515152 0.707071 0.675849 +0.515152 0.717172 0.678145 +0.515152 0.727273 0.680441 +0.515152 0.737374 0.682736 +0.515152 0.747475 0.685032 +0.515152 0.757576 0.687328 +0.515152 0.767677 0.689624 +0.515152 0.777778 0.691919 +0.515152 0.787879 0.694215 +0.515152 0.797980 0.696511 +0.515152 0.808081 0.698806 +0.515152 0.818182 0.701102 +0.515152 0.828283 0.703398 +0.515152 0.838384 0.705693 +0.515152 0.848485 0.707989 +0.515152 0.858586 0.710285 +0.515152 0.868687 0.712580 +0.515152 0.878788 0.714876 +0.515152 0.888889 0.717172 +0.515152 0.898990 0.719467 +0.515152 0.909091 0.721763 +0.515152 0.919192 0.724059 +0.515152 0.929293 0.726354 +0.515152 0.939394 0.728650 +0.515152 0.949495 0.730946 +0.515152 0.959596 0.733242 +0.515152 0.969697 0.735537 +0.515152 0.979798 0.737833 +0.515152 0.989899 0.740129 +0.515152 1.000000 0.742424 + +0.525253 0.000000 0.525253 +0.525253 0.010101 0.527395 +0.525253 0.020202 0.529538 +0.525253 0.030303 0.531680 +0.525253 0.040404 0.533823 +0.525253 0.050505 0.535966 +0.525253 0.060606 0.538108 +0.525253 0.070707 0.540251 +0.525253 0.080808 0.542394 +0.525253 0.090909 0.544536 +0.525253 0.101010 0.546679 +0.525253 0.111111 0.548822 +0.525253 0.121212 0.550964 +0.525253 0.131313 0.553107 +0.525253 0.141414 0.555249 +0.525253 0.151515 0.557392 +0.525253 0.161616 0.559535 +0.525253 0.171717 0.561677 +0.525253 0.181818 0.563820 +0.525253 0.191919 0.565963 +0.525253 0.202020 0.568105 +0.525253 0.212121 0.570248 +0.525253 0.222222 0.572391 +0.525253 0.232323 0.574533 +0.525253 0.242424 0.576676 +0.525253 0.252525 0.578818 +0.525253 0.262626 0.580961 +0.525253 0.272727 0.583104 +0.525253 0.282828 0.585246 +0.525253 0.292929 0.587389 +0.525253 0.303030 0.589532 +0.525253 0.313131 0.591674 +0.525253 0.323232 0.593817 +0.525253 0.333333 0.595960 +0.525253 0.343434 0.598102 +0.525253 0.353535 0.600245 +0.525253 0.363636 0.602388 +0.525253 0.373737 0.604530 +0.525253 0.383838 0.606673 +0.525253 0.393939 0.608815 +0.525253 0.404040 0.610958 +0.525253 0.414141 0.613101 +0.525253 0.424242 0.615243 +0.525253 0.434343 0.617386 +0.525253 0.444444 0.619529 +0.525253 0.454545 0.621671 +0.525253 0.464646 0.623814 +0.525253 0.474747 0.625957 +0.525253 0.484848 0.628099 +0.525253 0.494949 0.630242 +0.525253 0.505051 0.632384 +0.525253 0.515152 0.634527 +0.525253 0.525253 0.636670 +0.525253 0.535354 0.638812 +0.525253 0.545455 0.640955 +0.525253 0.555556 0.643098 +0.525253 0.565657 0.645240 +0.525253 0.575758 0.647383 +0.525253 0.585859 0.649526 +0.525253 0.595960 0.651668 +0.525253 0.606061 0.653811 +0.525253 0.616162 0.655953 +0.525253 0.626263 0.658096 +0.525253 0.636364 0.660239 +0.525253 0.646465 0.662381 +0.525253 0.656566 0.664524 +0.525253 0.666667 0.666667 +0.525253 0.676768 0.668809 +0.525253 0.686869 0.670952 +0.525253 0.696970 0.673095 +0.525253 0.707071 0.675237 +0.525253 0.717172 0.677380 +0.525253 0.727273 0.679522 +0.525253 0.737374 0.681665 +0.525253 0.747475 0.683808 +0.525253 0.757576 0.685950 +0.525253 0.767677 0.688093 +0.525253 0.777778 0.690236 +0.525253 0.787879 0.692378 +0.525253 0.797980 0.694521 +0.525253 0.808081 0.696664 +0.525253 0.818182 0.698806 +0.525253 0.828283 0.700949 +0.525253 0.838384 0.703092 +0.525253 0.848485 0.705234 +0.525253 0.858586 0.707377 +0.525253 0.868687 0.709519 +0.525253 0.878788 0.711662 +0.525253 0.888889 0.713805 +0.525253 0.898990 0.715947 +0.525253 0.909091 0.718090 +0.525253 0.919192 0.720233 +0.525253 0.929293 0.722375 +0.525253 0.939394 0.724518 +0.525253 0.949495 0.726661 +0.525253 0.959596 0.728803 +0.525253 0.969697 0.730946 +0.525253 0.979798 0.733088 +0.525253 0.989899 0.735231 +0.525253 1.000000 0.737374 + +0.535354 0.000000 0.535354 +0.535354 0.010101 0.537343 +0.535354 0.020202 0.539333 +0.535354 0.030303 0.541322 +0.535354 0.040404 0.543312 +0.535354 0.050505 0.545301 +0.535354 0.060606 0.547291 +0.535354 0.070707 0.549281 +0.535354 0.080808 0.551270 +0.535354 0.090909 0.553260 +0.535354 0.101010 0.555249 +0.535354 0.111111 0.557239 +0.535354 0.121212 0.559229 +0.535354 0.131313 0.561218 +0.535354 0.141414 0.563208 +0.535354 0.151515 0.565197 +0.535354 0.161616 0.567187 +0.535354 0.171717 0.569177 +0.535354 0.181818 0.571166 +0.535354 0.191919 0.573156 +0.535354 0.202020 0.575145 +0.535354 0.212121 0.577135 +0.535354 0.222222 0.579125 +0.535354 0.232323 0.581114 +0.535354 0.242424 0.583104 +0.535354 0.252525 0.585093 +0.535354 0.262626 0.587083 +0.535354 0.272727 0.589073 +0.535354 0.282828 0.591062 +0.535354 0.292929 0.593052 +0.535354 0.303030 0.595041 +0.535354 0.313131 0.597031 +0.535354 0.323232 0.599021 +0.535354 0.333333 0.601010 +0.535354 0.343434 0.603000 +0.535354 0.353535 0.604989 +0.535354 0.363636 0.606979 +0.535354 0.373737 0.608968 +0.535354 0.383838 0.610958 +0.535354 0.393939 0.612948 +0.535354 0.404040 0.614937 +0.535354 0.414141 0.616927 +0.535354 0.424242 0.618916 +0.535354 0.434343 0.620906 +0.535354 0.444444 0.622896 +0.535354 0.454545 0.624885 +0.535354 0.464646 0.626875 +0.535354 0.474747 0.628864 +0.535354 0.484848 0.630854 +0.535354 0.494949 0.632844 +0.535354 0.505051 0.634833 +0.535354 0.515152 0.636823 +0.535354 0.525253 0.638812 +0.535354 0.535354 0.640802 +0.535354 0.545455 0.642792 +0.535354 0.555556 0.644781 +0.535354 0.565657 0.646771 +0.535354 0.575758 0.648760 +0.535354 0.585859 0.650750 +0.535354 0.595960 0.652740 +0.535354 0.606061 0.654729 +0.535354 0.616162 0.656719 +0.535354 0.626263 0.658708 +0.535354 0.636364 0.660698 +0.535354 0.646465 0.662687 +0.535354 0.656566 0.664677 +0.535354 0.666667 0.666667 +0.535354 0.676768 0.668656 +0.535354 0.686869 0.670646 +0.535354 0.696970 0.672635 +0.535354 0.707071 0.674625 +0.535354 0.717172 0.676615 +0.535354 0.727273 0.678604 +0.535354 0.737374 0.680594 +0.535354 0.747475 0.682583 +0.535354 0.757576 0.684573 +0.535354 0.767677 0.686563 +0.535354 0.777778 0.688552 +0.535354 0.787879 0.690542 +0.535354 0.797980 0.692531 +0.535354 0.808081 0.694521 +0.535354 0.818182 0.696511 +0.535354 0.828283 0.698500 +0.535354 0.838384 0.700490 +0.535354 0.848485 0.702479 +0.535354 0.858586 0.704469 +0.535354 0.868687 0.706459 +0.535354 0.878788 0.708448 +0.535354 0.888889 0.710438 +0.535354 0.898990 0.712427 +0.535354 0.909091 0.714417 +0.535354 0.919192 0.716406 +0.535354 0.929293 0.718396 +0.535354 0.939394 0.720386 +0.535354 0.949495 0.722375 +0.535354 0.959596 0.724365 +0.535354 0.969697 0.726354 +0.535354 0.979798 0.728344 +0.535354 0.989899 0.730334 +0.535354 1.000000 0.732323 + +0.545455 0.000000 0.545455 +0.545455 0.010101 0.547291 +0.545455 0.020202 0.549128 +0.545455 0.030303 0.550964 +0.545455 0.040404 0.552801 +0.545455 0.050505 0.554637 +0.545455 0.060606 0.556474 +0.545455 0.070707 0.558310 +0.545455 0.080808 0.560147 +0.545455 0.090909 0.561983 +0.545455 0.101010 0.563820 +0.545455 0.111111 0.565657 +0.545455 0.121212 0.567493 +0.545455 0.131313 0.569330 +0.545455 0.141414 0.571166 +0.545455 0.151515 0.573003 +0.545455 0.161616 0.574839 +0.545455 0.171717 0.576676 +0.545455 0.181818 0.578512 +0.545455 0.191919 0.580349 +0.545455 0.202020 0.582185 +0.545455 0.212121 0.584022 +0.545455 0.222222 0.585859 +0.545455 0.232323 0.587695 +0.545455 0.242424 0.589532 +0.545455 0.252525 0.591368 +0.545455 0.262626 0.593205 +0.545455 0.272727 0.595041 +0.545455 0.282828 0.596878 +0.545455 0.292929 0.598714 +0.545455 0.303030 0.600551 +0.545455 0.313131 0.602388 +0.545455 0.323232 0.604224 +0.545455 0.333333 0.606061 +0.545455 0.343434 0.607897 +0.545455 0.353535 0.609734 +0.545455 0.363636 0.611570 +0.545455 0.373737 0.613407 +0.545455 0.383838 0.615243 +0.545455 0.393939 0.617080 +0.545455 0.404040 0.618916 +0.545455 0.414141 0.620753 +0.545455 0.424242 0.622590 +0.545455 0.434343 0.624426 +0.545455 0.444444 0.626263 +0.545455 0.454545 0.628099 +0.545455 0.464646 0.629936 +0.545455 0.474747 0.631772 +0.545455 0.484848 0.633609 +0.545455 0.494949 0.635445 +0.545455 0.505051 0.637282 +0.545455 0.515152 0.639118 +0.545455 0.525253 0.640955 +0.545455 0.535354 0.642792 +0.545455 0.545455 0.644628 +0.545455 0.555556 0.646465 +0.545455 0.565657 0.648301 +0.545455 0.575758 0.650138 +0.545455 0.585859 0.651974 +0.545455 0.595960 0.653811 +0.545455 0.606061 0.655647 +0.545455 0.616162 0.657484 +0.545455 0.626263 0.659320 +0.545455 0.636364 0.661157 +0.545455 0.646465 0.662994 +0.545455 0.656566 0.664830 +0.545455 0.666667 0.666667 +0.545455 0.676768 0.668503 +0.545455 0.686869 0.670340 +0.545455 0.696970 0.672176 +0.545455 0.707071 0.674013 +0.545455 0.717172 0.675849 +0.545455 0.727273 0.677686 +0.545455 0.737374 0.679522 +0.545455 0.747475 0.681359 +0.545455 0.757576 0.683196 +0.545455 0.767677 0.685032 +0.545455 0.777778 0.686869 +0.545455 0.787879 0.688705 +0.545455 0.797980 0.690542 +0.545455 0.808081 0.692378 +0.545455 0.818182 0.694215 +0.545455 0.828283 0.696051 +0.545455 0.838384 0.697888 +0.545455 0.848485 0.699725 +0.545455 0.858586 0.701561 +0.545455 0.868687 0.703398 +0.545455 0.878788 0.705234 +0.545455 0.888889 0.707071 +0.545455 0.898990 0.708907 +0.545455 0.909091 0.710744 +0.545455 0.919192 0.712580 +0.545455 0.929293 0.714417 +0.545455 0.939394 0.716253 +0.545455 0.949495 0.718090 +0.545455 0.959596 0.719927 +0.545455 0.969697 0.721763 +0.545455 0.979798 0.723600 +0.545455 0.989899 0.725436 +0.545455 1.000000 0.727273 + +0.555556 0.000000 0.555556 +0.555556 0.010101 0.557239 +0.555556 0.020202 0.558923 +0.555556 0.030303 0.560606 +0.555556 0.040404 0.562290 +0.555556 0.050505 0.563973 +0.555556 0.060606 0.565657 +0.555556 0.070707 0.567340 +0.555556 0.080808 0.569024 +0.555556 0.090909 0.570707 +0.555556 0.101010 0.572391 +0.555556 0.111111 0.574074 +0.555556 0.121212 0.575758 +0.555556 0.131313 0.577441 +0.555556 0.141414 0.579125 +0.555556 0.151515 0.580808 +0.555556 0.161616 0.582492 +0.555556 0.171717 0.584175 +0.555556 0.181818 0.585859 +0.555556 0.191919 0.587542 +0.555556 0.202020 0.589226 +0.555556 0.212121 0.590909 +0.555556 0.222222 0.592593 +0.555556 0.232323 0.594276 +0.555556 0.242424 0.595960 +0.555556 0.252525 0.597643 +0.555556 0.262626 0.599327 +0.555556 0.272727 0.601010 +0.555556 0.282828 0.602694 +0.555556 0.292929 0.604377 +0.555556 0.303030 0.606061 +0.555556 0.313131 0.607744 +0.555556 0.323232 0.609428 +0.555556 0.333333 0.611111 +0.555556 0.343434 0.612795 +0.555556 0.353535 0.614478 +0.555556 0.363636 0.616162 +0.555556 0.373737 0.617845 +0.555556 0.383838 0.619529 +0.555556 0.393939 0.621212 +0.555556 0.404040 0.622896 +0.555556 0.414141 0.624579 +0.555556 0.424242 0.626263 +0.555556 0.434343 0.627946 +0.555556 0.444444 0.629630 +0.555556 0.454545 0.631313 +0.555556 0.464646 0.632997 +0.555556 0.474747 0.634680 +0.555556 0.484848 0.636364 +0.555556 0.494949 0.638047 +0.555556 0.505051 0.639731 +0.555556 0.515152 0.641414 +0.555556 0.525253 0.643098 +0.555556 0.535354 0.644781 +0.555556 0.545455 0.646465 +0.555556 0.555556 0.648148 +0.555556 0.565657 0.649832 +0.555556 0.575758 0.651515 +0.555556 0.585859 0.653199 +0.555556 0.595960 0.654882 +0.555556 0.606061 0.656566 +0.555556 0.616162 0.658249 +0.555556 0.626263 0.659933 +0.555556 0.636364 0.661616 +0.555556 0.646465 0.663300 +0.555556 0.656566 0.664983 +0.555556 0.666667 0.666667 +0.555556 0.676768 0.668350 +0.555556 0.686869 0.670034 +0.555556 0.696970 0.671717 +0.555556 0.707071 0.673401 +0.555556 0.717172 0.675084 +0.555556 0.727273 0.676768 +0.555556 0.737374 0.678451 +0.555556 0.747475 0.680135 +0.555556 0.757576 0.681818 +0.555556 0.767677 0.683502 +0.555556 0.777778 0.685185 +0.555556 0.787879 0.686869 +0.555556 0.797980 0.688552 +0.555556 0.808081 0.690236 +0.555556 0.818182 0.691919 +0.555556 0.828283 0.693603 +0.555556 0.838384 0.695286 +0.555556 0.848485 0.696970 +0.555556 0.858586 0.698653 +0.555556 0.868687 0.700337 +0.555556 0.878788 0.702020 +0.555556 0.888889 0.703704 +0.555556 0.898990 0.705387 +0.555556 0.909091 0.707071 +0.555556 0.919192 0.708754 +0.555556 0.929293 0.710438 +0.555556 0.939394 0.712121 +0.555556 0.949495 0.713805 +0.555556 0.959596 0.715488 +0.555556 0.969697 0.717172 +0.555556 0.979798 0.718855 +0.555556 0.989899 0.720539 +0.555556 1.000000 0.722222 + +0.565657 0.000000 0.565657 +0.565657 0.010101 0.567187 +0.565657 0.020202 0.568717 +0.565657 0.030303 0.570248 +0.565657 0.040404 0.571778 +0.565657 0.050505 0.573309 +0.565657 0.060606 0.574839 +0.565657 0.070707 0.576370 +0.565657 0.080808 0.577900 +0.565657 0.090909 0.579431 +0.565657 0.101010 0.580961 +0.565657 0.111111 0.582492 +0.565657 0.121212 0.584022 +0.565657 0.131313 0.585552 +0.565657 0.141414 0.587083 +0.565657 0.151515 0.588613 +0.565657 0.161616 0.590144 +0.565657 0.171717 0.591674 +0.565657 0.181818 0.593205 +0.565657 0.191919 0.594735 +0.565657 0.202020 0.596266 +0.565657 0.212121 0.597796 +0.565657 0.222222 0.599327 +0.565657 0.232323 0.600857 +0.565657 0.242424 0.602388 +0.565657 0.252525 0.603918 +0.565657 0.262626 0.605448 +0.565657 0.272727 0.606979 +0.565657 0.282828 0.608509 +0.565657 0.292929 0.610040 +0.565657 0.303030 0.611570 +0.565657 0.313131 0.613101 +0.565657 0.323232 0.614631 +0.565657 0.333333 0.616162 +0.565657 0.343434 0.617692 +0.565657 0.353535 0.619223 +0.565657 0.363636 0.620753 +0.565657 0.373737 0.622283 +0.565657 0.383838 0.623814 +0.565657 0.393939 0.625344 +0.565657 0.404040 0.626875 +0.565657 0.414141 0.628405 +0.565657 0.424242 0.629936 +0.565657 0.434343 0.631466 +0.565657 0.444444 0.632997 +0.565657 0.454545 0.634527 +0.565657 0.464646 0.636058 +0.565657 0.474747 0.637588 +0.565657 0.484848 0.639118 +0.565657 0.494949 0.640649 +0.565657 0.505051 0.642179 +0.565657 0.515152 0.643710 +0.565657 0.525253 0.645240 +0.565657 0.535354 0.646771 +0.565657 0.545455 0.648301 +0.565657 0.555556 0.649832 +0.565657 0.565657 0.651362 +0.565657 0.575758 0.652893 +0.565657 0.585859 0.654423 +0.565657 0.595960 0.655953 +0.565657 0.606061 0.657484 +0.565657 0.616162 0.659014 +0.565657 0.626263 0.660545 +0.565657 0.636364 0.662075 +0.565657 0.646465 0.663606 +0.565657 0.656566 0.665136 +0.565657 0.666667 0.666667 +0.565657 0.676768 0.668197 +0.565657 0.686869 0.669728 +0.565657 0.696970 0.671258 +0.565657 0.707071 0.672788 +0.565657 0.717172 0.674319 +0.565657 0.727273 0.675849 +0.565657 0.737374 0.677380 +0.565657 0.747475 0.678910 +0.565657 0.757576 0.680441 +0.565657 0.767677 0.681971 +0.565657 0.777778 0.683502 +0.565657 0.787879 0.685032 +0.565657 0.797980 0.686563 +0.565657 0.808081 0.688093 +0.565657 0.818182 0.689624 +0.565657 0.828283 0.691154 +0.565657 0.838384 0.692684 +0.565657 0.848485 0.694215 +0.565657 0.858586 0.695745 +0.565657 0.868687 0.697276 +0.565657 0.878788 0.698806 +0.565657 0.888889 0.700337 +0.565657 0.898990 0.701867 +0.565657 0.909091 0.703398 +0.565657 0.919192 0.704928 +0.565657 0.929293 0.706459 +0.565657 0.939394 0.707989 +0.565657 0.949495 0.709519 +0.565657 0.959596 0.711050 +0.565657 0.969697 0.712580 +0.565657 0.979798 0.714111 +0.565657 0.989899 0.715641 +0.565657 1.000000 0.717172 + +0.575758 0.000000 0.575758 +0.575758 0.010101 0.577135 +0.575758 0.020202 0.578512 +0.575758 0.030303 0.579890 +0.575758 0.040404 0.581267 +0.575758 0.050505 0.582645 +0.575758 0.060606 0.584022 +0.575758 0.070707 0.585399 +0.575758 0.080808 0.586777 +0.575758 0.090909 0.588154 +0.575758 0.101010 0.589532 +0.575758 0.111111 0.590909 +0.575758 0.121212 0.592287 +0.575758 0.131313 0.593664 +0.575758 0.141414 0.595041 +0.575758 0.151515 0.596419 +0.575758 0.161616 0.597796 +0.575758 0.171717 0.599174 +0.575758 0.181818 0.600551 +0.575758 0.191919 0.601928 +0.575758 0.202020 0.603306 +0.575758 0.212121 0.604683 +0.575758 0.222222 0.606061 +0.575758 0.232323 0.607438 +0.575758 0.242424 0.608815 +0.575758 0.252525 0.610193 +0.575758 0.262626 0.611570 +0.575758 0.272727 0.612948 +0.575758 0.282828 0.614325 +0.575758 0.292929 0.615702 +0.575758 0.303030 0.617080 +0.575758 0.313131 0.618457 +0.575758 0.323232 0.619835 +0.575758 0.333333 0.621212 +0.575758 0.343434 0.622590 +0.575758 0.353535 0.623967 +0.575758 0.363636 0.625344 +0.575758 0.373737 0.626722 +0.575758 0.383838 0.628099 +0.575758 0.393939 0.629477 +0.575758 0.404040 0.630854 +0.575758 0.414141 0.632231 +0.575758 0.424242 0.633609 +0.575758 0.434343 0.634986 +0.575758 0.444444 0.636364 +0.575758 0.454545 0.637741 +0.575758 0.464646 0.639118 +0.575758 0.474747 0.640496 +0.575758 0.484848 0.641873 +0.575758 0.494949 0.643251 +0.575758 0.505051 0.644628 +0.575758 0.515152 0.646006 +0.575758 0.525253 0.647383 +0.575758 0.535354 0.648760 +0.575758 0.545455 0.650138 +0.575758 0.555556 0.651515 +0.575758 0.565657 0.652893 +0.575758 0.575758 0.654270 +0.575758 0.585859 0.655647 +0.575758 0.595960 0.657025 +0.575758 0.606061 0.658402 +0.575758 0.616162 0.659780 +0.575758 0.626263 0.661157 +0.575758 0.636364 0.662534 +0.575758 0.646465 0.663912 +0.575758 0.656566 0.665289 +0.575758 0.666667 0.666667 +0.575758 0.676768 0.668044 +0.575758 0.686869 0.669421 +0.575758 0.696970 0.670799 +0.575758 0.707071 0.672176 +0.575758 0.717172 0.673554 +0.575758 0.727273 0.674931 +0.575758 0.737374 0.676309 +0.575758 0.747475 0.677686 +0.575758 0.757576 0.679063 +0.575758 0.767677 0.680441 +0.575758 0.777778 0.681818 +0.575758 0.787879 0.683196 +0.575758 0.797980 0.684573 +0.575758 0.808081 0.685950 +0.575758 0.818182 0.687328 +0.575758 0.828283 0.688705 +0.575758 0.838384 0.690083 +0.575758 0.848485 0.691460 +0.575758 0.858586 0.692837 +0.575758 0.868687 0.694215 +0.575758 0.878788 0.695592 +0.575758 0.888889 0.696970 +0.575758 0.898990 0.698347 +0.575758 0.909091 0.699725 +0.575758 0.919192 0.701102 +0.575758 0.929293 0.702479 +0.575758 0.939394 0.703857 +0.575758 0.949495 0.705234 +0.575758 0.959596 0.706612 +0.575758 0.969697 0.707989 +0.575758 0.979798 0.709366 +0.575758 0.989899 0.710744 +0.575758 1.000000 0.712121 + +0.585859 0.000000 0.585859 +0.585859 0.010101 0.587083 +0.585859 0.020202 0.588307 +0.585859 0.030303 0.589532 +0.585859 0.040404 0.590756 +0.585859 0.050505 0.591980 +0.585859 0.060606 0.593205 +0.585859 0.070707 0.594429 +0.585859 0.080808 0.595654 +0.585859 0.090909 0.596878 +0.585859 0.101010 0.598102 +0.585859 0.111111 0.599327 +0.585859 0.121212 0.600551 +0.585859 0.131313 0.601775 +0.585859 0.141414 0.603000 +0.585859 0.151515 0.604224 +0.585859 0.161616 0.605448 +0.585859 0.171717 0.606673 +0.585859 0.181818 0.607897 +0.585859 0.191919 0.609122 +0.585859 0.202020 0.610346 +0.585859 0.212121 0.611570 +0.585859 0.222222 0.612795 +0.585859 0.232323 0.614019 +0.585859 0.242424 0.615243 +0.585859 0.252525 0.616468 +0.585859 0.262626 0.617692 +0.585859 0.272727 0.618916 +0.585859 0.282828 0.620141 +0.585859 0.292929 0.621365 +0.585859 0.303030 0.622590 +0.585859 0.313131 0.623814 +0.585859 0.323232 0.625038 +0.585859 0.333333 0.626263 +0.585859 0.343434 0.627487 +0.585859 0.353535 0.628711 +0.585859 0.363636 0.629936 +0.585859 0.373737 0.631160 +0.585859 0.383838 0.632384 +0.585859 0.393939 0.633609 +0.585859 0.404040 0.634833 +0.585859 0.414141 0.636058 +0.585859 0.424242 0.637282 +0.585859 0.434343 0.638506 +0.585859 0.444444 0.639731 +0.585859 0.454545 0.640955 +0.585859 0.464646 0.642179 +0.585859 0.474747 0.643404 +0.585859 0.484848 0.644628 +0.585859 0.494949 0.645852 +0.585859 0.505051 0.647077 +0.585859 0.515152 0.648301 +0.585859 0.525253 0.649526 +0.585859 0.535354 0.650750 +0.585859 0.545455 0.651974 +0.585859 0.555556 0.653199 +0.585859 0.565657 0.654423 +0.585859 0.575758 0.655647 +0.585859 0.585859 0.656872 +0.585859 0.595960 0.658096 +0.585859 0.606061 0.659320 +0.585859 0.616162 0.660545 +0.585859 0.626263 0.661769 +0.585859 0.636364 0.662994 +0.585859 0.646465 0.664218 +0.585859 0.656566 0.665442 +0.585859 0.666667 0.666667 +0.585859 0.676768 0.667891 +0.585859 0.686869 0.669115 +0.585859 0.696970 0.670340 +0.585859 0.707071 0.671564 +0.585859 0.717172 0.672788 +0.585859 0.727273 0.674013 +0.585859 0.737374 0.675237 +0.585859 0.747475 0.676462 +0.585859 0.757576 0.677686 +0.585859 0.767677 0.678910 +0.585859 0.777778 0.680135 +0.585859 0.787879 0.681359 +0.585859 0.797980 0.682583 +0.585859 0.808081 0.683808 +0.585859 0.818182 0.685032 +0.585859 0.828283 0.686257 +0.585859 0.838384 0.687481 +0.585859 0.848485 0.688705 +0.585859 0.858586 0.689930 +0.585859 0.868687 0.691154 +0.585859 0.878788 0.692378 +0.585859 0.888889 0.693603 +0.585859 0.898990 0.694827 +0.585859 0.909091 0.696051 +0.585859 0.919192 0.697276 +0.585859 0.929293 0.698500 +0.585859 0.939394 0.699725 +0.585859 0.949495 0.700949 +0.585859 0.959596 0.702173 +0.585859 0.969697 0.703398 +0.585859 0.979798 0.704622 +0.585859 0.989899 0.705846 +0.585859 1.000000 0.707071 + +0.595960 0.000000 0.595960 +0.595960 0.010101 0.597031 +0.595960 0.020202 0.598102 +0.595960 0.030303 0.599174 +0.595960 0.040404 0.600245 +0.595960 0.050505 0.601316 +0.595960 0.060606 0.602388 +0.595960 0.070707 0.603459 +0.595960 0.080808 0.604530 +0.595960 0.090909 0.605601 +0.595960 0.101010 0.606673 +0.595960 0.111111 0.607744 +0.595960 0.121212 0.608815 +0.595960 0.131313 0.609887 +0.595960 0.141414 0.610958 +0.595960 0.151515 0.612029 +0.595960 0.161616 0.613101 +0.595960 0.171717 0.614172 +0.595960 0.181818 0.615243 +0.595960 0.191919 0.616315 +0.595960 0.202020 0.617386 +0.595960 0.212121 0.618457 +0.595960 0.222222 0.619529 +0.595960 0.232323 0.620600 +0.595960 0.242424 0.621671 +0.595960 0.252525 0.622743 +0.595960 0.262626 0.623814 +0.595960 0.272727 0.624885 +0.595960 0.282828 0.625957 +0.595960 0.292929 0.627028 +0.595960 0.303030 0.628099 +0.595960 0.313131 0.629170 +0.595960 0.323232 0.630242 +0.595960 0.333333 0.631313 +0.595960 0.343434 0.632384 +0.595960 0.353535 0.633456 +0.595960 0.363636 0.634527 +0.595960 0.373737 0.635598 +0.595960 0.383838 0.636670 +0.595960 0.393939 0.637741 +0.595960 0.404040 0.638812 +0.595960 0.414141 0.639884 +0.595960 0.424242 0.640955 +0.595960 0.434343 0.642026 +0.595960 0.444444 0.643098 +0.595960 0.454545 0.644169 +0.595960 0.464646 0.645240 +0.595960 0.474747 0.646312 +0.595960 0.484848 0.647383 +0.595960 0.494949 0.648454 +0.595960 0.505051 0.649526 +0.595960 0.515152 0.650597 +0.595960 0.525253 0.651668 +0.595960 0.535354 0.652740 +0.595960 0.545455 0.653811 +0.595960 0.555556 0.654882 +0.595960 0.565657 0.655953 +0.595960 0.575758 0.657025 +0.595960 0.585859 0.658096 +0.595960 0.595960 0.659167 +0.595960 0.606061 0.660239 +0.595960 0.616162 0.661310 +0.595960 0.626263 0.662381 +0.595960 0.636364 0.663453 +0.595960 0.646465 0.664524 +0.595960 0.656566 0.665595 +0.595960 0.666667 0.666667 +0.595960 0.676768 0.667738 +0.595960 0.686869 0.668809 +0.595960 0.696970 0.669881 +0.595960 0.707071 0.670952 +0.595960 0.717172 0.672023 +0.595960 0.727273 0.673095 +0.595960 0.737374 0.674166 +0.595960 0.747475 0.675237 +0.595960 0.757576 0.676309 +0.595960 0.767677 0.677380 +0.595960 0.777778 0.678451 +0.595960 0.787879 0.679522 +0.595960 0.797980 0.680594 +0.595960 0.808081 0.681665 +0.595960 0.818182 0.682736 +0.595960 0.828283 0.683808 +0.595960 0.838384 0.684879 +0.595960 0.848485 0.685950 +0.595960 0.858586 0.687022 +0.595960 0.868687 0.688093 +0.595960 0.878788 0.689164 +0.595960 0.888889 0.690236 +0.595960 0.898990 0.691307 +0.595960 0.909091 0.692378 +0.595960 0.919192 0.693450 +0.595960 0.929293 0.694521 +0.595960 0.939394 0.695592 +0.595960 0.949495 0.696664 +0.595960 0.959596 0.697735 +0.595960 0.969697 0.698806 +0.595960 0.979798 0.699878 +0.595960 0.989899 0.700949 +0.595960 1.000000 0.702020 + +0.606061 0.000000 0.606061 +0.606061 0.010101 0.606979 +0.606061 0.020202 0.607897 +0.606061 0.030303 0.608815 +0.606061 0.040404 0.609734 +0.606061 0.050505 0.610652 +0.606061 0.060606 0.611570 +0.606061 0.070707 0.612489 +0.606061 0.080808 0.613407 +0.606061 0.090909 0.614325 +0.606061 0.101010 0.615243 +0.606061 0.111111 0.616162 +0.606061 0.121212 0.617080 +0.606061 0.131313 0.617998 +0.606061 0.141414 0.618916 +0.606061 0.151515 0.619835 +0.606061 0.161616 0.620753 +0.606061 0.171717 0.621671 +0.606061 0.181818 0.622590 +0.606061 0.191919 0.623508 +0.606061 0.202020 0.624426 +0.606061 0.212121 0.625344 +0.606061 0.222222 0.626263 +0.606061 0.232323 0.627181 +0.606061 0.242424 0.628099 +0.606061 0.252525 0.629017 +0.606061 0.262626 0.629936 +0.606061 0.272727 0.630854 +0.606061 0.282828 0.631772 +0.606061 0.292929 0.632691 +0.606061 0.303030 0.633609 +0.606061 0.313131 0.634527 +0.606061 0.323232 0.635445 +0.606061 0.333333 0.636364 +0.606061 0.343434 0.637282 +0.606061 0.353535 0.638200 +0.606061 0.363636 0.639118 +0.606061 0.373737 0.640037 +0.606061 0.383838 0.640955 +0.606061 0.393939 0.641873 +0.606061 0.404040 0.642792 +0.606061 0.414141 0.643710 +0.606061 0.424242 0.644628 +0.606061 0.434343 0.645546 +0.606061 0.444444 0.646465 +0.606061 0.454545 0.647383 +0.606061 0.464646 0.648301 +0.606061 0.474747 0.649219 +0.606061 0.484848 0.650138 +0.606061 0.494949 0.651056 +0.606061 0.505051 0.651974 +0.606061 0.515152 0.652893 +0.606061 0.525253 0.653811 +0.606061 0.535354 0.654729 +0.606061 0.545455 0.655647 +0.606061 0.555556 0.656566 +0.606061 0.565657 0.657484 +0.606061 0.575758 0.658402 +0.606061 0.585859 0.659320 +0.606061 0.595960 0.660239 +0.606061 0.606061 0.661157 +0.606061 0.616162 0.662075 +0.606061 0.626263 0.662994 +0.606061 0.636364 0.663912 +0.606061 0.646465 0.664830 +0.606061 0.656566 0.665748 +0.606061 0.666667 0.666667 +0.606061 0.676768 0.667585 +0.606061 0.686869 0.668503 +0.606061 0.696970 0.669421 +0.606061 0.707071 0.670340 +0.606061 0.717172 0.671258 +0.606061 0.727273 0.672176 +0.606061 0.737374 0.673095 +0.606061 0.747475 0.674013 +0.606061 0.757576 0.674931 +0.606061 0.767677 0.675849 +0.606061 0.777778 0.676768 +0.606061 0.787879 0.677686 +0.606061 0.797980 0.678604 +0.606061 0.808081 0.679522 +0.606061 0.818182 0.680441 +0.606061 0.828283 0.681359 +0.606061 0.838384 0.682277 +0.606061 0.848485 0.683196 +0.606061 0.858586 0.684114 +0.606061 0.868687 0.685032 +0.606061 0.878788 0.685950 +0.606061 0.888889 0.686869 +0.606061 0.898990 0.687787 +0.606061 0.909091 0.688705 +0.606061 0.919192 0.689624 +0.606061 0.929293 0.690542 +0.606061 0.939394 0.691460 +0.606061 0.949495 0.692378 +0.606061 0.959596 0.693297 +0.606061 0.969697 0.694215 +0.606061 0.979798 0.695133 +0.606061 0.989899 0.696051 +0.606061 1.000000 0.696970 + +0.616162 0.000000 0.616162 +0.616162 0.010101 0.616927 +0.616162 0.020202 0.617692 +0.616162 0.030303 0.618457 +0.616162 0.040404 0.619223 +0.616162 0.050505 0.619988 +0.616162 0.060606 0.620753 +0.616162 0.070707 0.621518 +0.616162 0.080808 0.622283 +0.616162 0.090909 0.623049 +0.616162 0.101010 0.623814 +0.616162 0.111111 0.624579 +0.616162 0.121212 0.625344 +0.616162 0.131313 0.626110 +0.616162 0.141414 0.626875 +0.616162 0.151515 0.627640 +0.616162 0.161616 0.628405 +0.616162 0.171717 0.629170 +0.616162 0.181818 0.629936 +0.616162 0.191919 0.630701 +0.616162 0.202020 0.631466 +0.616162 0.212121 0.632231 +0.616162 0.222222 0.632997 +0.616162 0.232323 0.633762 +0.616162 0.242424 0.634527 +0.616162 0.252525 0.635292 +0.616162 0.262626 0.636058 +0.616162 0.272727 0.636823 +0.616162 0.282828 0.637588 +0.616162 0.292929 0.638353 +0.616162 0.303030 0.639118 +0.616162 0.313131 0.639884 +0.616162 0.323232 0.640649 +0.616162 0.333333 0.641414 +0.616162 0.343434 0.642179 +0.616162 0.353535 0.642945 +0.616162 0.363636 0.643710 +0.616162 0.373737 0.644475 +0.616162 0.383838 0.645240 +0.616162 0.393939 0.646006 +0.616162 0.404040 0.646771 +0.616162 0.414141 0.647536 +0.616162 0.424242 0.648301 +0.616162 0.434343 0.649066 +0.616162 0.444444 0.649832 +0.616162 0.454545 0.650597 +0.616162 0.464646 0.651362 +0.616162 0.474747 0.652127 +0.616162 0.484848 0.652893 +0.616162 0.494949 0.653658 +0.616162 0.505051 0.654423 +0.616162 0.515152 0.655188 +0.616162 0.525253 0.655953 +0.616162 0.535354 0.656719 +0.616162 0.545455 0.657484 +0.616162 0.555556 0.658249 +0.616162 0.565657 0.659014 +0.616162 0.575758 0.659780 +0.616162 0.585859 0.660545 +0.616162 0.595960 0.661310 +0.616162 0.606061 0.662075 +0.616162 0.616162 0.662841 +0.616162 0.626263 0.663606 +0.616162 0.636364 0.664371 +0.616162 0.646465 0.665136 +0.616162 0.656566 0.665901 +0.616162 0.666667 0.666667 +0.616162 0.676768 0.667432 +0.616162 0.686869 0.668197 +0.616162 0.696970 0.668962 +0.616162 0.707071 0.669728 +0.616162 0.717172 0.670493 +0.616162 0.727273 0.671258 +0.616162 0.737374 0.672023 +0.616162 0.747475 0.672788 +0.616162 0.757576 0.673554 +0.616162 0.767677 0.674319 +0.616162 0.777778 0.675084 +0.616162 0.787879 0.675849 +0.616162 0.797980 0.676615 +0.616162 0.808081 0.677380 +0.616162 0.818182 0.678145 +0.616162 0.828283 0.678910 +0.616162 0.838384 0.679676 +0.616162 0.848485 0.680441 +0.616162 0.858586 0.681206 +0.616162 0.868687 0.681971 +0.616162 0.878788 0.682736 +0.616162 0.888889 0.683502 +0.616162 0.898990 0.684267 +0.616162 0.909091 0.685032 +0.616162 0.919192 0.685797 +0.616162 0.929293 0.686563 +0.616162 0.939394 0.687328 +0.616162 0.949495 0.688093 +0.616162 0.959596 0.688858 +0.616162 0.969697 0.689624 +0.616162 0.979798 0.690389 +0.616162 0.989899 0.691154 +0.616162 1.000000 0.691919 + +0.626263 0.000000 0.626263 +0.626263 0.010101 0.626875 +0.626263 0.020202 0.627487 +0.626263 0.030303 0.628099 +0.626263 0.040404 0.628711 +0.626263 0.050505 0.629324 +0.626263 0.060606 0.629936 +0.626263 0.070707 0.630548 +0.626263 0.080808 0.631160 +0.626263 0.090909 0.631772 +0.626263 0.101010 0.632384 +0.626263 0.111111 0.632997 +0.626263 0.121212 0.633609 +0.626263 0.131313 0.634221 +0.626263 0.141414 0.634833 +0.626263 0.151515 0.635445 +0.626263 0.161616 0.636058 +0.626263 0.171717 0.636670 +0.626263 0.181818 0.637282 +0.626263 0.191919 0.637894 +0.626263 0.202020 0.638506 +0.626263 0.212121 0.639118 +0.626263 0.222222 0.639731 +0.626263 0.232323 0.640343 +0.626263 0.242424 0.640955 +0.626263 0.252525 0.641567 +0.626263 0.262626 0.642179 +0.626263 0.272727 0.642792 +0.626263 0.282828 0.643404 +0.626263 0.292929 0.644016 +0.626263 0.303030 0.644628 +0.626263 0.313131 0.645240 +0.626263 0.323232 0.645852 +0.626263 0.333333 0.646465 +0.626263 0.343434 0.647077 +0.626263 0.353535 0.647689 +0.626263 0.363636 0.648301 +0.626263 0.373737 0.648913 +0.626263 0.383838 0.649526 +0.626263 0.393939 0.650138 +0.626263 0.404040 0.650750 +0.626263 0.414141 0.651362 +0.626263 0.424242 0.651974 +0.626263 0.434343 0.652586 +0.626263 0.444444 0.653199 +0.626263 0.454545 0.653811 +0.626263 0.464646 0.654423 +0.626263 0.474747 0.655035 +0.626263 0.484848 0.655647 +0.626263 0.494949 0.656260 +0.626263 0.505051 0.656872 +0.626263 0.515152 0.657484 +0.626263 0.525253 0.658096 +0.626263 0.535354 0.658708 +0.626263 0.545455 0.659320 +0.626263 0.555556 0.659933 +0.626263 0.565657 0.660545 +0.626263 0.575758 0.661157 +0.626263 0.585859 0.661769 +0.626263 0.595960 0.662381 +0.626263 0.606061 0.662994 +0.626263 0.616162 0.663606 +0.626263 0.626263 0.664218 +0.626263 0.636364 0.664830 +0.626263 0.646465 0.665442 +0.626263 0.656566 0.666054 +0.626263 0.666667 0.666667 +0.626263 0.676768 0.667279 +0.626263 0.686869 0.667891 +0.626263 0.696970 0.668503 +0.626263 0.707071 0.669115 +0.626263 0.717172 0.669728 +0.626263 0.727273 0.670340 +0.626263 0.737374 0.670952 +0.626263 0.747475 0.671564 +0.626263 0.757576 0.672176 +0.626263 0.767677 0.672788 +0.626263 0.777778 0.673401 +0.626263 0.787879 0.674013 +0.626263 0.797980 0.674625 +0.626263 0.808081 0.675237 +0.626263 0.818182 0.675849 +0.626263 0.828283 0.676462 +0.626263 0.838384 0.677074 +0.626263 0.848485 0.677686 +0.626263 0.858586 0.678298 +0.626263 0.868687 0.678910 +0.626263 0.878788 0.679522 +0.626263 0.888889 0.680135 +0.626263 0.898990 0.680747 +0.626263 0.909091 0.681359 +0.626263 0.919192 0.681971 +0.626263 0.929293 0.682583 +0.626263 0.939394 0.683196 +0.626263 0.949495 0.683808 +0.626263 0.959596 0.684420 +0.626263 0.969697 0.685032 +0.626263 0.979798 0.685644 +0.626263 0.989899 0.686257 +0.626263 1.000000 0.686869 + +0.636364 0.000000 0.636364 +0.636364 0.010101 0.636823 +0.636364 0.020202 0.637282 +0.636364 0.030303 0.637741 +0.636364 0.040404 0.638200 +0.636364 0.050505 0.638659 +0.636364 0.060606 0.639118 +0.636364 0.070707 0.639578 +0.636364 0.080808 0.640037 +0.636364 0.090909 0.640496 +0.636364 0.101010 0.640955 +0.636364 0.111111 0.641414 +0.636364 0.121212 0.641873 +0.636364 0.131313 0.642332 +0.636364 0.141414 0.642792 +0.636364 0.151515 0.643251 +0.636364 0.161616 0.643710 +0.636364 0.171717 0.644169 +0.636364 0.181818 0.644628 +0.636364 0.191919 0.645087 +0.636364 0.202020 0.645546 +0.636364 0.212121 0.646006 +0.636364 0.222222 0.646465 +0.636364 0.232323 0.646924 +0.636364 0.242424 0.647383 +0.636364 0.252525 0.647842 +0.636364 0.262626 0.648301 +0.636364 0.272727 0.648760 +0.636364 0.282828 0.649219 +0.636364 0.292929 0.649679 +0.636364 0.303030 0.650138 +0.636364 0.313131 0.650597 +0.636364 0.323232 0.651056 +0.636364 0.333333 0.651515 +0.636364 0.343434 0.651974 +0.636364 0.353535 0.652433 +0.636364 0.363636 0.652893 +0.636364 0.373737 0.653352 +0.636364 0.383838 0.653811 +0.636364 0.393939 0.654270 +0.636364 0.404040 0.654729 +0.636364 0.414141 0.655188 +0.636364 0.424242 0.655647 +0.636364 0.434343 0.656107 +0.636364 0.444444 0.656566 +0.636364 0.454545 0.657025 +0.636364 0.464646 0.657484 +0.636364 0.474747 0.657943 +0.636364 0.484848 0.658402 +0.636364 0.494949 0.658861 +0.636364 0.505051 0.659320 +0.636364 0.515152 0.659780 +0.636364 0.525253 0.660239 +0.636364 0.535354 0.660698 +0.636364 0.545455 0.661157 +0.636364 0.555556 0.661616 +0.636364 0.565657 0.662075 +0.636364 0.575758 0.662534 +0.636364 0.585859 0.662994 +0.636364 0.595960 0.663453 +0.636364 0.606061 0.663912 +0.636364 0.616162 0.664371 +0.636364 0.626263 0.664830 +0.636364 0.636364 0.665289 +0.636364 0.646465 0.665748 +0.636364 0.656566 0.666208 +0.636364 0.666667 0.666667 +0.636364 0.676768 0.667126 +0.636364 0.686869 0.667585 +0.636364 0.696970 0.668044 +0.636364 0.707071 0.668503 +0.636364 0.717172 0.668962 +0.636364 0.727273 0.669421 +0.636364 0.737374 0.669881 +0.636364 0.747475 0.670340 +0.636364 0.757576 0.670799 +0.636364 0.767677 0.671258 +0.636364 0.777778 0.671717 +0.636364 0.787879 0.672176 +0.636364 0.797980 0.672635 +0.636364 0.808081 0.673095 +0.636364 0.818182 0.673554 +0.636364 0.828283 0.674013 +0.636364 0.838384 0.674472 +0.636364 0.848485 0.674931 +0.636364 0.858586 0.675390 +0.636364 0.868687 0.675849 +0.636364 0.878788 0.676309 +0.636364 0.888889 0.676768 +0.636364 0.898990 0.677227 +0.636364 0.909091 0.677686 +0.636364 0.919192 0.678145 +0.636364 0.929293 0.678604 +0.636364 0.939394 0.679063 +0.636364 0.949495 0.679522 +0.636364 0.959596 0.679982 +0.636364 0.969697 0.680441 +0.636364 0.979798 0.680900 +0.636364 0.989899 0.681359 +0.636364 1.000000 0.681818 + +0.646465 0.000000 0.646465 +0.646465 0.010101 0.646771 +0.646465 0.020202 0.647077 +0.646465 0.030303 0.647383 +0.646465 0.040404 0.647689 +0.646465 0.050505 0.647995 +0.646465 0.060606 0.648301 +0.646465 0.070707 0.648607 +0.646465 0.080808 0.648913 +0.646465 0.090909 0.649219 +0.646465 0.101010 0.649526 +0.646465 0.111111 0.649832 +0.646465 0.121212 0.650138 +0.646465 0.131313 0.650444 +0.646465 0.141414 0.650750 +0.646465 0.151515 0.651056 +0.646465 0.161616 0.651362 +0.646465 0.171717 0.651668 +0.646465 0.181818 0.651974 +0.646465 0.191919 0.652280 +0.646465 0.202020 0.652586 +0.646465 0.212121 0.652893 +0.646465 0.222222 0.653199 +0.646465 0.232323 0.653505 +0.646465 0.242424 0.653811 +0.646465 0.252525 0.654117 +0.646465 0.262626 0.654423 +0.646465 0.272727 0.654729 +0.646465 0.282828 0.655035 +0.646465 0.292929 0.655341 +0.646465 0.303030 0.655647 +0.646465 0.313131 0.655953 +0.646465 0.323232 0.656260 +0.646465 0.333333 0.656566 +0.646465 0.343434 0.656872 +0.646465 0.353535 0.657178 +0.646465 0.363636 0.657484 +0.646465 0.373737 0.657790 +0.646465 0.383838 0.658096 +0.646465 0.393939 0.658402 +0.646465 0.404040 0.658708 +0.646465 0.414141 0.659014 +0.646465 0.424242 0.659320 +0.646465 0.434343 0.659627 +0.646465 0.444444 0.659933 +0.646465 0.454545 0.660239 +0.646465 0.464646 0.660545 +0.646465 0.474747 0.660851 +0.646465 0.484848 0.661157 +0.646465 0.494949 0.661463 +0.646465 0.505051 0.661769 +0.646465 0.515152 0.662075 +0.646465 0.525253 0.662381 +0.646465 0.535354 0.662687 +0.646465 0.545455 0.662994 +0.646465 0.555556 0.663300 +0.646465 0.565657 0.663606 +0.646465 0.575758 0.663912 +0.646465 0.585859 0.664218 +0.646465 0.595960 0.664524 +0.646465 0.606061 0.664830 +0.646465 0.616162 0.665136 +0.646465 0.626263 0.665442 +0.646465 0.636364 0.665748 +0.646465 0.646465 0.666054 +0.646465 0.656566 0.666361 +0.646465 0.666667 0.666667 +0.646465 0.676768 0.666973 +0.646465 0.686869 0.667279 +0.646465 0.696970 0.667585 +0.646465 0.707071 0.667891 +0.646465 0.717172 0.668197 +0.646465 0.727273 0.668503 +0.646465 0.737374 0.668809 +0.646465 0.747475 0.669115 +0.646465 0.757576 0.669421 +0.646465 0.767677 0.669728 +0.646465 0.777778 0.670034 +0.646465 0.787879 0.670340 +0.646465 0.797980 0.670646 +0.646465 0.808081 0.670952 +0.646465 0.818182 0.671258 +0.646465 0.828283 0.671564 +0.646465 0.838384 0.671870 +0.646465 0.848485 0.672176 +0.646465 0.858586 0.672482 +0.646465 0.868687 0.672788 +0.646465 0.878788 0.673095 +0.646465 0.888889 0.673401 +0.646465 0.898990 0.673707 +0.646465 0.909091 0.674013 +0.646465 0.919192 0.674319 +0.646465 0.929293 0.674625 +0.646465 0.939394 0.674931 +0.646465 0.949495 0.675237 +0.646465 0.959596 0.675543 +0.646465 0.969697 0.675849 +0.646465 0.979798 0.676155 +0.646465 0.989899 0.676462 +0.646465 1.000000 0.676768 + +0.656566 0.000000 0.656566 +0.656566 0.010101 0.656719 +0.656566 0.020202 0.656872 +0.656566 0.030303 0.657025 +0.656566 0.040404 0.657178 +0.656566 0.050505 0.657331 +0.656566 0.060606 0.657484 +0.656566 0.070707 0.657637 +0.656566 0.080808 0.657790 +0.656566 0.090909 0.657943 +0.656566 0.101010 0.658096 +0.656566 0.111111 0.658249 +0.656566 0.121212 0.658402 +0.656566 0.131313 0.658555 +0.656566 0.141414 0.658708 +0.656566 0.151515 0.658861 +0.656566 0.161616 0.659014 +0.656566 0.171717 0.659167 +0.656566 0.181818 0.659320 +0.656566 0.191919 0.659474 +0.656566 0.202020 0.659627 +0.656566 0.212121 0.659780 +0.656566 0.222222 0.659933 +0.656566 0.232323 0.660086 +0.656566 0.242424 0.660239 +0.656566 0.252525 0.660392 +0.656566 0.262626 0.660545 +0.656566 0.272727 0.660698 +0.656566 0.282828 0.660851 +0.656566 0.292929 0.661004 +0.656566 0.303030 0.661157 +0.656566 0.313131 0.661310 +0.656566 0.323232 0.661463 +0.656566 0.333333 0.661616 +0.656566 0.343434 0.661769 +0.656566 0.353535 0.661922 +0.656566 0.363636 0.662075 +0.656566 0.373737 0.662228 +0.656566 0.383838 0.662381 +0.656566 0.393939 0.662534 +0.656566 0.404040 0.662687 +0.656566 0.414141 0.662841 +0.656566 0.424242 0.662994 +0.656566 0.434343 0.663147 +0.656566 0.444444 0.663300 +0.656566 0.454545 0.663453 +0.656566 0.464646 0.663606 +0.656566 0.474747 0.663759 +0.656566 0.484848 0.663912 +0.656566 0.494949 0.664065 +0.656566 0.505051 0.664218 +0.656566 0.515152 0.664371 +0.656566 0.525253 0.664524 +0.656566 0.535354 0.664677 +0.656566 0.545455 0.664830 +0.656566 0.555556 0.664983 +0.656566 0.565657 0.665136 +0.656566 0.575758 0.665289 +0.656566 0.585859 0.665442 +0.656566 0.595960 0.665595 +0.656566 0.606061 0.665748 +0.656566 0.616162 0.665901 +0.656566 0.626263 0.666054 +0.656566 0.636364 0.666208 +0.656566 0.646465 0.666361 +0.656566 0.656566 0.666514 +0.656566 0.666667 0.666667 +0.656566 0.676768 0.666820 +0.656566 0.686869 0.666973 +0.656566 0.696970 0.667126 +0.656566 0.707071 0.667279 +0.656566 0.717172 0.667432 +0.656566 0.727273 0.667585 +0.656566 0.737374 0.667738 +0.656566 0.747475 0.667891 +0.656566 0.757576 0.668044 +0.656566 0.767677 0.668197 +0.656566 0.777778 0.668350 +0.656566 0.787879 0.668503 +0.656566 0.797980 0.668656 +0.656566 0.808081 0.668809 +0.656566 0.818182 0.668962 +0.656566 0.828283 0.669115 +0.656566 0.838384 0.669268 +0.656566 0.848485 0.669421 +0.656566 0.858586 0.669575 +0.656566 0.868687 0.669728 +0.656566 0.878788 0.669881 +0.656566 0.888889 0.670034 +0.656566 0.898990 0.670187 +0.656566 0.909091 0.670340 +0.656566 0.919192 0.670493 +0.656566 0.929293 0.670646 +0.656566 0.939394 0.670799 +0.656566 0.949495 0.670952 +0.656566 0.959596 0.671105 +0.656566 0.969697 0.671258 +0.656566 0.979798 0.671411 +0.656566 0.989899 0.671564 +0.656566 1.000000 0.671717 + +0.666667 0.000000 0.666667 +0.666667 0.010101 0.666667 +0.666667 0.020202 0.666667 +0.666667 0.030303 0.666667 +0.666667 0.040404 0.666667 +0.666667 0.050505 0.666667 +0.666667 0.060606 0.666667 +0.666667 0.070707 0.666667 +0.666667 0.080808 0.666667 +0.666667 0.090909 0.666667 +0.666667 0.101010 0.666667 +0.666667 0.111111 0.666667 +0.666667 0.121212 0.666667 +0.666667 0.131313 0.666667 +0.666667 0.141414 0.666667 +0.666667 0.151515 0.666667 +0.666667 0.161616 0.666667 +0.666667 0.171717 0.666667 +0.666667 0.181818 0.666667 +0.666667 0.191919 0.666667 +0.666667 0.202020 0.666667 +0.666667 0.212121 0.666667 +0.666667 0.222222 0.666667 +0.666667 0.232323 0.666667 +0.666667 0.242424 0.666667 +0.666667 0.252525 0.666667 +0.666667 0.262626 0.666667 +0.666667 0.272727 0.666667 +0.666667 0.282828 0.666667 +0.666667 0.292929 0.666667 +0.666667 0.303030 0.666667 +0.666667 0.313131 0.666667 +0.666667 0.323232 0.666667 +0.666667 0.333333 0.666667 +0.666667 0.343434 0.666667 +0.666667 0.353535 0.666667 +0.666667 0.363636 0.666667 +0.666667 0.373737 0.666667 +0.666667 0.383838 0.666667 +0.666667 0.393939 0.666667 +0.666667 0.404040 0.666667 +0.666667 0.414141 0.666667 +0.666667 0.424242 0.666667 +0.666667 0.434343 0.666667 +0.666667 0.444444 0.666667 +0.666667 0.454545 0.666667 +0.666667 0.464646 0.666667 +0.666667 0.474747 0.666667 +0.666667 0.484848 0.666667 +0.666667 0.494949 0.666667 +0.666667 0.505051 0.666667 +0.666667 0.515152 0.666667 +0.666667 0.525253 0.666667 +0.666667 0.535354 0.666667 +0.666667 0.545455 0.666667 +0.666667 0.555556 0.666667 +0.666667 0.565657 0.666667 +0.666667 0.575758 0.666667 +0.666667 0.585859 0.666667 +0.666667 0.595960 0.666667 +0.666667 0.606061 0.666667 +0.666667 0.616162 0.666667 +0.666667 0.626263 0.666667 +0.666667 0.636364 0.666667 +0.666667 0.646465 0.666667 +0.666667 0.656566 0.666667 +0.666667 0.666667 0.666667 +0.666667 0.676768 0.666667 +0.666667 0.686869 0.666667 +0.666667 0.696970 0.666667 +0.666667 0.707071 0.666667 +0.666667 0.717172 0.666667 +0.666667 0.727273 0.666667 +0.666667 0.737374 0.666667 +0.666667 0.747475 0.666667 +0.666667 0.757576 0.666667 +0.666667 0.767677 0.666667 +0.666667 0.777778 0.666667 +0.666667 0.787879 0.666667 +0.666667 0.797980 0.666667 +0.666667 0.808081 0.666667 +0.666667 0.818182 0.666667 +0.666667 0.828283 0.666667 +0.666667 0.838384 0.666667 +0.666667 0.848485 0.666667 +0.666667 0.858586 0.666667 +0.666667 0.868687 0.666667 +0.666667 0.878788 0.666667 +0.666667 0.888889 0.666667 +0.666667 0.898990 0.666667 +0.666667 0.909091 0.666667 +0.666667 0.919192 0.666667 +0.666667 0.929293 0.666667 +0.666667 0.939394 0.666667 +0.666667 0.949495 0.666667 +0.666667 0.959596 0.666667 +0.666667 0.969697 0.666667 +0.666667 0.979798 0.666667 +0.666667 0.989899 0.666667 +0.666667 1.000000 0.666667 + +0.676768 0.000000 0.676768 +0.676768 0.010101 0.676615 +0.676768 0.020202 0.676462 +0.676768 0.030303 0.676309 +0.676768 0.040404 0.676155 +0.676768 0.050505 0.676002 +0.676768 0.060606 0.675849 +0.676768 0.070707 0.675696 +0.676768 0.080808 0.675543 +0.676768 0.090909 0.675390 +0.676768 0.101010 0.675237 +0.676768 0.111111 0.675084 +0.676768 0.121212 0.674931 +0.676768 0.131313 0.674778 +0.676768 0.141414 0.674625 +0.676768 0.151515 0.674472 +0.676768 0.161616 0.674319 +0.676768 0.171717 0.674166 +0.676768 0.181818 0.674013 +0.676768 0.191919 0.673860 +0.676768 0.202020 0.673707 +0.676768 0.212121 0.673554 +0.676768 0.222222 0.673401 +0.676768 0.232323 0.673248 +0.676768 0.242424 0.673095 +0.676768 0.252525 0.672942 +0.676768 0.262626 0.672788 +0.676768 0.272727 0.672635 +0.676768 0.282828 0.672482 +0.676768 0.292929 0.672329 +0.676768 0.303030 0.672176 +0.676768 0.313131 0.672023 +0.676768 0.323232 0.671870 +0.676768 0.333333 0.671717 +0.676768 0.343434 0.671564 +0.676768 0.353535 0.671411 +0.676768 0.363636 0.671258 +0.676768 0.373737 0.671105 +0.676768 0.383838 0.670952 +0.676768 0.393939 0.670799 +0.676768 0.404040 0.670646 +0.676768 0.414141 0.670493 +0.676768 0.424242 0.670340 +0.676768 0.434343 0.670187 +0.676768 0.444444 0.670034 +0.676768 0.454545 0.669881 +0.676768 0.464646 0.669728 +0.676768 0.474747 0.669575 +0.676768 0.484848 0.669421 +0.676768 0.494949 0.669268 +0.676768 0.505051 0.669115 +0.676768 0.515152 0.668962 +0.676768 0.525253 0.668809 +0.676768 0.535354 0.668656 +0.676768 0.545455 0.668503 +0.676768 0.555556 0.668350 +0.676768 0.565657 0.668197 +0.676768 0.575758 0.668044 +0.676768 0.585859 0.667891 +0.676768 0.595960 0.667738 +0.676768 0.606061 0.667585 +0.676768 0.616162 0.667432 +0.676768 0.626263 0.667279 +0.676768 0.636364 0.667126 +0.676768 0.646465 0.666973 +0.676768 0.656566 0.666820 +0.676768 0.666667 0.666667 +0.676768 0.676768 0.666514 +0.676768 0.686869 0.666361 +0.676768 0.696970 0.666208 +0.676768 0.707071 0.666054 +0.676768 0.717172 0.665901 +0.676768 0.727273 0.665748 +0.676768 0.737374 0.665595 +0.676768 0.747475 0.665442 +0.676768 0.757576 0.665289 +0.676768 0.767677 0.665136 +0.676768 0.777778 0.664983 +0.676768 0.787879 0.664830 +0.676768 0.797980 0.664677 +0.676768 0.808081 0.664524 +0.676768 0.818182 0.664371 +0.676768 0.828283 0.664218 +0.676768 0.838384 0.664065 +0.676768 0.848485 0.663912 +0.676768 0.858586 0.663759 +0.676768 0.868687 0.663606 +0.676768 0.878788 0.663453 +0.676768 0.888889 0.663300 +0.676768 0.898990 0.663147 +0.676768 0.909091 0.662994 +0.676768 0.919192 0.662841 +0.676768 0.929293 0.662687 +0.676768 0.939394 0.662534 +0.676768 0.949495 0.662381 +0.676768 0.959596 0.662228 +0.676768 0.969697 0.662075 +0.676768 0.979798 0.661922 +0.676768 0.989899 0.661769 +0.676768 1.000000 0.661616 + +0.686869 0.000000 0.686869 +0.686869 0.010101 0.686563 +0.686869 0.020202 0.686257 +0.686869 0.030303 0.685950 +0.686869 0.040404 0.685644 +0.686869 0.050505 0.685338 +0.686869 0.060606 0.685032 +0.686869 0.070707 0.684726 +0.686869 0.080808 0.684420 +0.686869 0.090909 0.684114 +0.686869 0.101010 0.683808 +0.686869 0.111111 0.683502 +0.686869 0.121212 0.683196 +0.686869 0.131313 0.682890 +0.686869 0.141414 0.682583 +0.686869 0.151515 0.682277 +0.686869 0.161616 0.681971 +0.686869 0.171717 0.681665 +0.686869 0.181818 0.681359 +0.686869 0.191919 0.681053 +0.686869 0.202020 0.680747 +0.686869 0.212121 0.680441 +0.686869 0.222222 0.680135 +0.686869 0.232323 0.679829 +0.686869 0.242424 0.679522 +0.686869 0.252525 0.679216 +0.686869 0.262626 0.678910 +0.686869 0.272727 0.678604 +0.686869 0.282828 0.678298 +0.686869 0.292929 0.677992 +0.686869 0.303030 0.677686 +0.686869 0.313131 0.677380 +0.686869 0.323232 0.677074 +0.686869 0.333333 0.676768 +0.686869 0.343434 0.676462 +0.686869 0.353535 0.676155 +0.686869 0.363636 0.675849 +0.686869 0.373737 0.675543 +0.686869 0.383838 0.675237 +0.686869 0.393939 0.674931 +0.686869 0.404040 0.674625 +0.686869 0.414141 0.674319 +0.686869 0.424242 0.674013 +0.686869 0.434343 0.673707 +0.686869 0.444444 0.673401 +0.686869 0.454545 0.673095 +0.686869 0.464646 0.672788 +0.686869 0.474747 0.672482 +0.686869 0.484848 0.672176 +0.686869 0.494949 0.671870 +0.686869 0.505051 0.671564 +0.686869 0.515152 0.671258 +0.686869 0.525253 0.670952 +0.686869 0.535354 0.670646 +0.686869 0.545455 0.670340 +0.686869 0.555556 0.670034 +0.686869 0.565657 0.669728 +0.686869 0.575758 0.669421 +0.686869 0.585859 0.669115 +0.686869 0.595960 0.668809 +0.686869 0.606061 0.668503 +0.686869 0.616162 0.668197 +0.686869 0.626263 0.667891 +0.686869 0.636364 0.667585 +0.686869 0.646465 0.667279 +0.686869 0.656566 0.666973 +0.686869 0.666667 0.666667 +0.686869 0.676768 0.666361 +0.686869 0.686869 0.666054 +0.686869 0.696970 0.665748 +0.686869 0.707071 0.665442 +0.686869 0.717172 0.665136 +0.686869 0.727273 0.664830 +0.686869 0.737374 0.664524 +0.686869 0.747475 0.664218 +0.686869 0.757576 0.663912 +0.686869 0.767677 0.663606 +0.686869 0.777778 0.663300 +0.686869 0.787879 0.662994 +0.686869 0.797980 0.662687 +0.686869 0.808081 0.662381 +0.686869 0.818182 0.662075 +0.686869 0.828283 0.661769 +0.686869 0.838384 0.661463 +0.686869 0.848485 0.661157 +0.686869 0.858586 0.660851 +0.686869 0.868687 0.660545 +0.686869 0.878788 0.660239 +0.686869 0.888889 0.659933 +0.686869 0.898990 0.659627 +0.686869 0.909091 0.659320 +0.686869 0.919192 0.659014 +0.686869 0.929293 0.658708 +0.686869 0.939394 0.658402 +0.686869 0.949495 0.658096 +0.686869 0.959596 0.657790 +0.686869 0.969697 0.657484 +0.686869 0.979798 0.657178 +0.686869 0.989899 0.656872 +0.686869 1.000000 0.656566 + +0.696970 0.000000 0.696970 +0.696970 0.010101 0.696511 +0.696970 0.020202 0.696051 +0.696970 0.030303 0.695592 +0.696970 0.040404 0.695133 +0.696970 0.050505 0.694674 +0.696970 0.060606 0.694215 +0.696970 0.070707 0.693756 +0.696970 0.080808 0.693297 +0.696970 0.090909 0.692837 +0.696970 0.101010 0.692378 +0.696970 0.111111 0.691919 +0.696970 0.121212 0.691460 +0.696970 0.131313 0.691001 +0.696970 0.141414 0.690542 +0.696970 0.151515 0.690083 +0.696970 0.161616 0.689624 +0.696970 0.171717 0.689164 +0.696970 0.181818 0.688705 +0.696970 0.191919 0.688246 +0.696970 0.202020 0.687787 +0.696970 0.212121 0.687328 +0.696970 0.222222 0.686869 +0.696970 0.232323 0.686410 +0.696970 0.242424 0.685950 +0.696970 0.252525 0.685491 +0.696970 0.262626 0.685032 +0.696970 0.272727 0.684573 +0.696970 0.282828 0.684114 +0.696970 0.292929 0.683655 +0.696970 0.303030 0.683196 +0.696970 0.313131 0.682736 +0.696970 0.323232 0.682277 +0.696970 0.333333 0.681818 +0.696970 0.343434 0.681359 +0.696970 0.353535 0.680900 +0.696970 0.363636 0.680441 +0.696970 0.373737 0.679982 +0.696970 0.383838 0.679522 +0.696970 0.393939 0.679063 +0.696970 0.404040 0.678604 +0.696970 0.414141 0.678145 +0.696970 0.424242 0.677686 +0.696970 0.434343 0.677227 +0.696970 0.444444 0.676768 +0.696970 0.454545 0.676309 +0.696970 0.464646 0.675849 +0.696970 0.474747 0.675390 +0.696970 0.484848 0.674931 +0.696970 0.494949 0.674472 +0.696970 0.505051 0.674013 +0.696970 0.515152 0.673554 +0.696970 0.525253 0.673095 +0.696970 0.535354 0.672635 +0.696970 0.545455 0.672176 +0.696970 0.555556 0.671717 +0.696970 0.565657 0.671258 +0.696970 0.575758 0.670799 +0.696970 0.585859 0.670340 +0.696970 0.595960 0.669881 +0.696970 0.606061 0.669421 +0.696970 0.616162 0.668962 +0.696970 0.626263 0.668503 +0.696970 0.636364 0.668044 +0.696970 0.646465 0.667585 +0.696970 0.656566 0.667126 +0.696970 0.666667 0.666667 +0.696970 0.676768 0.666208 +0.696970 0.686869 0.665748 +0.696970 0.696970 0.665289 +0.696970 0.707071 0.664830 +0.696970 0.717172 0.664371 +0.696970 0.727273 0.663912 +0.696970 0.737374 0.663453 +0.696970 0.747475 0.662994 +0.696970 0.757576 0.662534 +0.696970 0.767677 0.662075 +0.696970 0.777778 0.661616 +0.696970 0.787879 0.661157 +0.696970 0.797980 0.660698 +0.696970 0.808081 0.660239 +0.696970 0.818182 0.659780 +0.696970 0.828283 0.659320 +0.696970 0.838384 0.658861 +0.696970 0.848485 0.658402 +0.696970 0.858586 0.657943 +0.696970 0.868687 0.657484 +0.696970 0.878788 0.657025 +0.696970 0.888889 0.656566 +0.696970 0.898990 0.656107 +0.696970 0.909091 0.655647 +0.696970 0.919192 0.655188 +0.696970 0.929293 0.654729 +0.696970 0.939394 0.654270 +0.696970 0.949495 0.653811 +0.696970 0.959596 0.653352 +0.696970 0.969697 0.652893 +0.696970 0.979798 0.652433 +0.696970 0.989899 0.651974 +0.696970 1.000000 0.651515 + +0.707071 0.000000 0.707071 +0.707071 0.010101 0.706459 +0.707071 0.020202 0.705846 +0.707071 0.030303 0.705234 +0.707071 0.040404 0.704622 +0.707071 0.050505 0.704010 +0.707071 0.060606 0.703398 +0.707071 0.070707 0.702785 +0.707071 0.080808 0.702173 +0.707071 0.090909 0.701561 +0.707071 0.101010 0.700949 +0.707071 0.111111 0.700337 +0.707071 0.121212 0.699725 +0.707071 0.131313 0.699112 +0.707071 0.141414 0.698500 +0.707071 0.151515 0.697888 +0.707071 0.161616 0.697276 +0.707071 0.171717 0.696664 +0.707071 0.181818 0.696051 +0.707071 0.191919 0.695439 +0.707071 0.202020 0.694827 +0.707071 0.212121 0.694215 +0.707071 0.222222 0.693603 +0.707071 0.232323 0.692991 +0.707071 0.242424 0.692378 +0.707071 0.252525 0.691766 +0.707071 0.262626 0.691154 +0.707071 0.272727 0.690542 +0.707071 0.282828 0.689930 +0.707071 0.292929 0.689317 +0.707071 0.303030 0.688705 +0.707071 0.313131 0.688093 +0.707071 0.323232 0.687481 +0.707071 0.333333 0.686869 +0.707071 0.343434 0.686257 +0.707071 0.353535 0.685644 +0.707071 0.363636 0.685032 +0.707071 0.373737 0.684420 +0.707071 0.383838 0.683808 +0.707071 0.393939 0.683196 +0.707071 0.404040 0.682583 +0.707071 0.414141 0.681971 +0.707071 0.424242 0.681359 +0.707071 0.434343 0.680747 +0.707071 0.444444 0.680135 +0.707071 0.454545 0.679522 +0.707071 0.464646 0.678910 +0.707071 0.474747 0.678298 +0.707071 0.484848 0.677686 +0.707071 0.494949 0.677074 +0.707071 0.505051 0.676462 +0.707071 0.515152 0.675849 +0.707071 0.525253 0.675237 +0.707071 0.535354 0.674625 +0.707071 0.545455 0.674013 +0.707071 0.555556 0.673401 +0.707071 0.565657 0.672788 +0.707071 0.575758 0.672176 +0.707071 0.585859 0.671564 +0.707071 0.595960 0.670952 +0.707071 0.606061 0.670340 +0.707071 0.616162 0.669728 +0.707071 0.626263 0.669115 +0.707071 0.636364 0.668503 +0.707071 0.646465 0.667891 +0.707071 0.656566 0.667279 +0.707071 0.666667 0.666667 +0.707071 0.676768 0.666054 +0.707071 0.686869 0.665442 +0.707071 0.696970 0.664830 +0.707071 0.707071 0.664218 +0.707071 0.717172 0.663606 +0.707071 0.727273 0.662994 +0.707071 0.737374 0.662381 +0.707071 0.747475 0.661769 +0.707071 0.757576 0.661157 +0.707071 0.767677 0.660545 +0.707071 0.777778 0.659933 +0.707071 0.787879 0.659320 +0.707071 0.797980 0.658708 +0.707071 0.808081 0.658096 +0.707071 0.818182 0.657484 +0.707071 0.828283 0.656872 +0.707071 0.838384 0.656260 +0.707071 0.848485 0.655647 +0.707071 0.858586 0.655035 +0.707071 0.868687 0.654423 +0.707071 0.878788 0.653811 +0.707071 0.888889 0.653199 +0.707071 0.898990 0.652586 +0.707071 0.909091 0.651974 +0.707071 0.919192 0.651362 +0.707071 0.929293 0.650750 +0.707071 0.939394 0.650138 +0.707071 0.949495 0.649526 +0.707071 0.959596 0.648913 +0.707071 0.969697 0.648301 +0.707071 0.979798 0.647689 +0.707071 0.989899 0.647077 +0.707071 1.000000 0.646465 + +0.717172 0.000000 0.717172 +0.717172 0.010101 0.716406 +0.717172 0.020202 0.715641 +0.717172 0.030303 0.714876 +0.717172 0.040404 0.714111 +0.717172 0.050505 0.713346 +0.717172 0.060606 0.712580 +0.717172 0.070707 0.711815 +0.717172 0.080808 0.711050 +0.717172 0.090909 0.710285 +0.717172 0.101010 0.709519 +0.717172 0.111111 0.708754 +0.717172 0.121212 0.707989 +0.717172 0.131313 0.707224 +0.717172 0.141414 0.706459 +0.717172 0.151515 0.705693 +0.717172 0.161616 0.704928 +0.717172 0.171717 0.704163 +0.717172 0.181818 0.703398 +0.717172 0.191919 0.702632 +0.717172 0.202020 0.701867 +0.717172 0.212121 0.701102 +0.717172 0.222222 0.700337 +0.717172 0.232323 0.699571 +0.717172 0.242424 0.698806 +0.717172 0.252525 0.698041 +0.717172 0.262626 0.697276 +0.717172 0.272727 0.696511 +0.717172 0.282828 0.695745 +0.717172 0.292929 0.694980 +0.717172 0.303030 0.694215 +0.717172 0.313131 0.693450 +0.717172 0.323232 0.692684 +0.717172 0.333333 0.691919 +0.717172 0.343434 0.691154 +0.717172 0.353535 0.690389 +0.717172 0.363636 0.689624 +0.717172 0.373737 0.688858 +0.717172 0.383838 0.688093 +0.717172 0.393939 0.687328 +0.717172 0.404040 0.686563 +0.717172 0.414141 0.685797 +0.717172 0.424242 0.685032 +0.717172 0.434343 0.684267 +0.717172 0.444444 0.683502 +0.717172 0.454545 0.682736 +0.717172 0.464646 0.681971 +0.717172 0.474747 0.681206 +0.717172 0.484848 0.680441 +0.717172 0.494949 0.679676 +0.717172 0.505051 0.678910 +0.717172 0.515152 0.678145 +0.717172 0.525253 0.677380 +0.717172 0.535354 0.676615 +0.717172 0.545455 0.675849 +0.717172 0.555556 0.675084 +0.717172 0.565657 0.674319 +0.717172 0.575758 0.673554 +0.717172 0.585859 0.672788 +0.717172 0.595960 0.672023 +0.717172 0.606061 0.671258 +0.717172 0.616162 0.670493 +0.717172 0.626263 0.669728 +0.717172 0.636364 0.668962 +0.717172 0.646465 0.668197 +0.717172 0.656566 0.667432 +0.717172 0.666667 0.666667 +0.717172 0.676768 0.665901 +0.717172 0.686869 0.665136 +0.717172 0.696970 0.664371 +0.717172 0.707071 0.663606 +0.717172 0.717172 0.662841 +0.717172 0.727273 0.662075 +0.717172 0.737374 0.661310 +0.717172 0.747475 0.660545 +0.717172 0.757576 0.659780 +0.717172 0.767677 0.659014 +0.717172 0.777778 0.658249 +0.717172 0.787879 0.657484 +0.717172 0.797980 0.656719 +0.717172 0.808081 0.655953 +0.717172 0.818182 0.655188 +0.717172 0.828283 0.654423 +0.717172 0.838384 0.653658 +0.717172 0.848485 0.652893 +0.717172 0.858586 0.652127 +0.717172 0.868687 0.651362 +0.717172 0.878788 0.650597 +0.717172 0.888889 0.649832 +0.717172 0.898990 0.649066 +0.717172 0.909091 0.648301 +0.717172 0.919192 0.647536 +0.717172 0.929293 0.646771 +0.717172 0.939394 0.646006 +0.717172 0.949495 0.645240 +0.717172 0.959596 0.644475 +0.717172 0.969697 0.643710 +0.717172 0.979798 0.642945 +0.717172 0.989899 0.642179 +0.717172 1.000000 0.641414 + +0.727273 0.000000 0.727273 +0.727273 0.010101 0.726354 +0.727273 0.020202 0.725436 +0.727273 0.030303 0.724518 +0.727273 0.040404 0.723600 +0.727273 0.050505 0.722681 +0.727273 0.060606 0.721763 +0.727273 0.070707 0.720845 +0.727273 0.080808 0.719927 +0.727273 0.090909 0.719008 +0.727273 0.101010 0.718090 +0.727273 0.111111 0.717172 +0.727273 0.121212 0.716253 +0.727273 0.131313 0.715335 +0.727273 0.141414 0.714417 +0.727273 0.151515 0.713499 +0.727273 0.161616 0.712580 +0.727273 0.171717 0.711662 +0.727273 0.181818 0.710744 +0.727273 0.191919 0.709826 +0.727273 0.202020 0.708907 +0.727273 0.212121 0.707989 +0.727273 0.222222 0.707071 +0.727273 0.232323 0.706152 +0.727273 0.242424 0.705234 +0.727273 0.252525 0.704316 +0.727273 0.262626 0.703398 +0.727273 0.272727 0.702479 +0.727273 0.282828 0.701561 +0.727273 0.292929 0.700643 +0.727273 0.303030 0.699725 +0.727273 0.313131 0.698806 +0.727273 0.323232 0.697888 +0.727273 0.333333 0.696970 +0.727273 0.343434 0.696051 +0.727273 0.353535 0.695133 +0.727273 0.363636 0.694215 +0.727273 0.373737 0.693297 +0.727273 0.383838 0.692378 +0.727273 0.393939 0.691460 +0.727273 0.404040 0.690542 +0.727273 0.414141 0.689624 +0.727273 0.424242 0.688705 +0.727273 0.434343 0.687787 +0.727273 0.444444 0.686869 +0.727273 0.454545 0.685950 +0.727273 0.464646 0.685032 +0.727273 0.474747 0.684114 +0.727273 0.484848 0.683196 +0.727273 0.494949 0.682277 +0.727273 0.505051 0.681359 +0.727273 0.515152 0.680441 +0.727273 0.525253 0.679522 +0.727273 0.535354 0.678604 +0.727273 0.545455 0.677686 +0.727273 0.555556 0.676768 +0.727273 0.565657 0.675849 +0.727273 0.575758 0.674931 +0.727273 0.585859 0.674013 +0.727273 0.595960 0.673095 +0.727273 0.606061 0.672176 +0.727273 0.616162 0.671258 +0.727273 0.626263 0.670340 +0.727273 0.636364 0.669421 +0.727273 0.646465 0.668503 +0.727273 0.656566 0.667585 +0.727273 0.666667 0.666667 +0.727273 0.676768 0.665748 +0.727273 0.686869 0.664830 +0.727273 0.696970 0.663912 +0.727273 0.707071 0.662994 +0.727273 0.717172 0.662075 +0.727273 0.727273 0.661157 +0.727273 0.737374 0.660239 +0.727273 0.747475 0.659320 +0.727273 0.757576 0.658402 +0.727273 0.767677 0.657484 +0.727273 0.777778 0.656566 +0.727273 0.787879 0.655647 +0.727273 0.797980 0.654729 +0.727273 0.808081 0.653811 +0.727273 0.818182 0.652893 +0.727273 0.828283 0.651974 +0.727273 0.838384 0.651056 +0.727273 0.848485 0.650138 +0.727273 0.858586 0.649219 +0.727273 0.868687 0.648301 +0.727273 0.878788 0.647383 +0.727273 0.888889 0.646465 +0.727273 0.898990 0.645546 +0.727273 0.909091 0.644628 +0.727273 0.919192 0.643710 +0.727273 0.929293 0.642792 +0.727273 0.939394 0.641873 +0.727273 0.949495 0.640955 +0.727273 0.959596 0.640037 +0.727273 0.969697 0.639118 +0.727273 0.979798 0.638200 +0.727273 0.989899 0.637282 +0.727273 1.000000 0.636364 + +0.737374 0.000000 0.737374 +0.737374 0.010101 0.736302 +0.737374 0.020202 0.735231 +0.737374 0.030303 0.734160 +0.737374 0.040404 0.733088 +0.737374 0.050505 0.732017 +0.737374 0.060606 0.730946 +0.737374 0.070707 0.729875 +0.737374 0.080808 0.728803 +0.737374 0.090909 0.727732 +0.737374 0.101010 0.726661 +0.737374 0.111111 0.725589 +0.737374 0.121212 0.724518 +0.737374 0.131313 0.723447 +0.737374 0.141414 0.722375 +0.737374 0.151515 0.721304 +0.737374 0.161616 0.720233 +0.737374 0.171717 0.719161 +0.737374 0.181818 0.718090 +0.737374 0.191919 0.717019 +0.737374 0.202020 0.715947 +0.737374 0.212121 0.714876 +0.737374 0.222222 0.713805 +0.737374 0.232323 0.712733 +0.737374 0.242424 0.711662 +0.737374 0.252525 0.710591 +0.737374 0.262626 0.709519 +0.737374 0.272727 0.708448 +0.737374 0.282828 0.707377 +0.737374 0.292929 0.706305 +0.737374 0.303030 0.705234 +0.737374 0.313131 0.704163 +0.737374 0.323232 0.703092 +0.737374 0.333333 0.702020 +0.737374 0.343434 0.700949 +0.737374 0.353535 0.699878 +0.737374 0.363636 0.698806 +0.737374 0.373737 0.697735 +0.737374 0.383838 0.696664 +0.737374 0.393939 0.695592 +0.737374 0.404040 0.694521 +0.737374 0.414141 0.693450 +0.737374 0.424242 0.692378 +0.737374 0.434343 0.691307 +0.737374 0.444444 0.690236 +0.737374 0.454545 0.689164 +0.737374 0.464646 0.688093 +0.737374 0.474747 0.687022 +0.737374 0.484848 0.685950 +0.737374 0.494949 0.684879 +0.737374 0.505051 0.683808 +0.737374 0.515152 0.682736 +0.737374 0.525253 0.681665 +0.737374 0.535354 0.680594 +0.737374 0.545455 0.679522 +0.737374 0.555556 0.678451 +0.737374 0.565657 0.677380 +0.737374 0.575758 0.676309 +0.737374 0.585859 0.675237 +0.737374 0.595960 0.674166 +0.737374 0.606061 0.673095 +0.737374 0.616162 0.672023 +0.737374 0.626263 0.670952 +0.737374 0.636364 0.669881 +0.737374 0.646465 0.668809 +0.737374 0.656566 0.667738 +0.737374 0.666667 0.666667 +0.737374 0.676768 0.665595 +0.737374 0.686869 0.664524 +0.737374 0.696970 0.663453 +0.737374 0.707071 0.662381 +0.737374 0.717172 0.661310 +0.737374 0.727273 0.660239 +0.737374 0.737374 0.659167 +0.737374 0.747475 0.658096 +0.737374 0.757576 0.657025 +0.737374 0.767677 0.655953 +0.737374 0.777778 0.654882 +0.737374 0.787879 0.653811 +0.737374 0.797980 0.652740 +0.737374 0.808081 0.651668 +0.737374 0.818182 0.650597 +0.737374 0.828283 0.649526 +0.737374 0.838384 0.648454 +0.737374 0.848485 0.647383 +0.737374 0.858586 0.646312 +0.737374 0.868687 0.645240 +0.737374 0.878788 0.644169 +0.737374 0.888889 0.643098 +0.737374 0.898990 0.642026 +0.737374 0.909091 0.640955 +0.737374 0.919192 0.639884 +0.737374 0.929293 0.638812 +0.737374 0.939394 0.637741 +0.737374 0.949495 0.636670 +0.737374 0.959596 0.635598 +0.737374 0.969697 0.634527 +0.737374 0.979798 0.633456 +0.737374 0.989899 0.632384 +0.737374 1.000000 0.631313 + +0.747475 0.000000 0.747475 +0.747475 0.010101 0.746250 +0.747475 0.020202 0.745026 +0.747475 0.030303 0.743802 +0.747475 0.040404 0.742577 +0.747475 0.050505 0.741353 +0.747475 0.060606 0.740129 +0.747475 0.070707 0.738904 +0.747475 0.080808 0.737680 +0.747475 0.090909 0.736455 +0.747475 0.101010 0.735231 +0.747475 0.111111 0.734007 +0.747475 0.121212 0.732782 +0.747475 0.131313 0.731558 +0.747475 0.141414 0.730334 +0.747475 0.151515 0.729109 +0.747475 0.161616 0.727885 +0.747475 0.171717 0.726661 +0.747475 0.181818 0.725436 +0.747475 0.191919 0.724212 +0.747475 0.202020 0.722987 +0.747475 0.212121 0.721763 +0.747475 0.222222 0.720539 +0.747475 0.232323 0.719314 +0.747475 0.242424 0.718090 +0.747475 0.252525 0.716866 +0.747475 0.262626 0.715641 +0.747475 0.272727 0.714417 +0.747475 0.282828 0.713193 +0.747475 0.292929 0.711968 +0.747475 0.303030 0.710744 +0.747475 0.313131 0.709519 +0.747475 0.323232 0.708295 +0.747475 0.333333 0.707071 +0.747475 0.343434 0.705846 +0.747475 0.353535 0.704622 +0.747475 0.363636 0.703398 +0.747475 0.373737 0.702173 +0.747475 0.383838 0.700949 +0.747475 0.393939 0.699725 +0.747475 0.404040 0.698500 +0.747475 0.414141 0.697276 +0.747475 0.424242 0.696051 +0.747475 0.434343 0.694827 +0.747475 0.444444 0.693603 +0.747475 0.454545 0.692378 +0.747475 0.464646 0.691154 +0.747475 0.474747 0.689930 +0.747475 0.484848 0.688705 +0.747475 0.494949 0.687481 +0.747475 0.505051 0.686257 +0.747475 0.515152 0.685032 +0.747475 0.525253 0.683808 +0.747475 0.535354 0.682583 +0.747475 0.545455 0.681359 +0.747475 0.555556 0.680135 +0.747475 0.565657 0.678910 +0.747475 0.575758 0.677686 +0.747475 0.585859 0.676462 +0.747475 0.595960 0.675237 +0.747475 0.606061 0.674013 +0.747475 0.616162 0.672788 +0.747475 0.626263 0.671564 +0.747475 0.636364 0.670340 +0.747475 0.646465 0.669115 +0.747475 0.656566 0.667891 +0.747475 0.666667 0.666667 +0.747475 0.676768 0.665442 +0.747475 0.686869 0.664218 +0.747475 0.696970 0.662994 +0.747475 0.707071 0.661769 +0.747475 0.717172 0.660545 +0.747475 0.727273 0.659320 +0.747475 0.737374 0.658096 +0.747475 0.747475 0.656872 +0.747475 0.757576 0.655647 +0.747475 0.767677 0.654423 +0.747475 0.777778 0.653199 +0.747475 0.787879 0.651974 +0.747475 0.797980 0.650750 +0.747475 0.808081 0.649526 +0.747475 0.818182 0.648301 +0.747475 0.828283 0.647077 +0.747475 0.838384 0.645852 +0.747475 0.848485 0.644628 +0.747475 0.858586 0.643404 +0.747475 0.868687 0.642179 +0.747475 0.878788 0.640955 +0.747475 0.888889 0.639731 +0.747475 0.898990 0.638506 +0.747475 0.909091 0.637282 +0.747475 0.919192 0.636058 +0.747475 0.929293 0.634833 +0.747475 0.939394 0.633609 +0.747475 0.949495 0.632384 +0.747475 0.959596 0.631160 +0.747475 0.969697 0.629936 +0.747475 0.979798 0.628711 +0.747475 0.989899 0.627487 +0.747475 1.000000 0.626263 + +0.757576 0.000000 0.757576 +0.757576 0.010101 0.756198 +0.757576 0.020202 0.754821 +0.757576 0.030303 0.753444 +0.757576 0.040404 0.752066 +0.757576 0.050505 0.750689 +0.757576 0.060606 0.749311 +0.757576 0.070707 0.747934 +0.757576 0.080808 0.746556 +0.757576 0.090909 0.745179 +0.757576 0.101010 0.743802 +0.757576 0.111111 0.742424 +0.757576 0.121212 0.741047 +0.757576 0.131313 0.739669 +0.757576 0.141414 0.738292 +0.757576 0.151515 0.736915 +0.757576 0.161616 0.735537 +0.757576 0.171717 0.734160 +0.757576 0.181818 0.732782 +0.757576 0.191919 0.731405 +0.757576 0.202020 0.730028 +0.757576 0.212121 0.728650 +0.757576 0.222222 0.727273 +0.757576 0.232323 0.725895 +0.757576 0.242424 0.724518 +0.757576 0.252525 0.723140 +0.757576 0.262626 0.721763 +0.757576 0.272727 0.720386 +0.757576 0.282828 0.719008 +0.757576 0.292929 0.717631 +0.757576 0.303030 0.716253 +0.757576 0.313131 0.714876 +0.757576 0.323232 0.713499 +0.757576 0.333333 0.712121 +0.757576 0.343434 0.710744 +0.757576 0.353535 0.709366 +0.757576 0.363636 0.707989 +0.757576 0.373737 0.706612 +0.757576 0.383838 0.705234 +0.757576 0.393939 0.703857 +0.757576 0.404040 0.702479 +0.757576 0.414141 0.701102 +0.757576 0.424242 0.699725 +0.757576 0.434343 0.698347 +0.757576 0.444444 0.696970 +0.757576 0.454545 0.695592 +0.757576 0.464646 0.694215 +0.757576 0.474747 0.692837 +0.757576 0.484848 0.691460 +0.757576 0.494949 0.690083 +0.757576 0.505051 0.688705 +0.757576 0.515152 0.687328 +0.757576 0.525253 0.685950 +0.757576 0.535354 0.684573 +0.757576 0.545455 0.683196 +0.757576 0.555556 0.681818 +0.757576 0.565657 0.680441 +0.757576 0.575758 0.679063 +0.757576 0.585859 0.677686 +0.757576 0.595960 0.676309 +0.757576 0.606061 0.674931 +0.757576 0.616162 0.673554 +0.757576 0.626263 0.672176 +0.757576 0.636364 0.670799 +0.757576 0.646465 0.669421 +0.757576 0.656566 0.668044 +0.757576 0.666667 0.666667 +0.757576 0.676768 0.665289 +0.757576 0.686869 0.663912 +0.757576 0.696970 0.662534 +0.757576 0.707071 0.661157 +0.757576 0.717172 0.659780 +0.757576 0.727273 0.658402 +0.757576 0.737374 0.657025 +0.757576 0.747475 0.655647 +0.757576 0.757576 0.654270 +0.757576 0.767677 0.652893 +0.757576 0.777778 0.651515 +0.757576 0.787879 0.650138 +0.757576 0.797980 0.648760 +0.757576 0.808081 0.647383 +0.757576 0.818182 0.646006 +0.757576 0.828283 0.644628 +0.757576 0.838384 0.643251 +0.757576 0.848485 0.641873 +0.757576 0.858586 0.640496 +0.757576 0.868687 0.639118 +0.757576 0.878788 0.637741 +0.757576 0.888889 0.636364 +0.757576 0.898990 0.634986 +0.757576 0.909091 0.633609 +0.757576 0.919192 0.632231 +0.757576 0.929293 0.630854 +0.757576 0.939394 0.629477 +0.757576 0.949495 0.628099 +0.757576 0.959596 0.626722 +0.757576 0.969697 0.625344 +0.757576 0.979798 0.623967 +0.757576 0.989899 0.622590 +0.757576 1.000000 0.621212 + +0.767677 0.000000 0.767677 +0.767677 0.010101 0.766146 +0.767677 0.020202 0.764616 +0.767677 0.030303 0.763085 +0.767677 0.040404 0.761555 +0.767677 0.050505 0.760024 +0.767677 0.060606 0.758494 +0.767677 0.070707 0.756964 +0.767677 0.080808 0.755433 +0.767677 0.090909 0.753903 +0.767677 0.101010 0.752372 +0.767677 0.111111 0.750842 +0.767677 0.121212 0.749311 +0.767677 0.131313 0.747781 +0.767677 0.141414 0.746250 +0.767677 0.151515 0.744720 +0.767677 0.161616 0.743189 +0.767677 0.171717 0.741659 +0.767677 0.181818 0.740129 +0.767677 0.191919 0.738598 +0.767677 0.202020 0.737068 +0.767677 0.212121 0.735537 +0.767677 0.222222 0.734007 +0.767677 0.232323 0.732476 +0.767677 0.242424 0.730946 +0.767677 0.252525 0.729415 +0.767677 0.262626 0.727885 +0.767677 0.272727 0.726354 +0.767677 0.282828 0.724824 +0.767677 0.292929 0.723294 +0.767677 0.303030 0.721763 +0.767677 0.313131 0.720233 +0.767677 0.323232 0.718702 +0.767677 0.333333 0.717172 +0.767677 0.343434 0.715641 +0.767677 0.353535 0.714111 +0.767677 0.363636 0.712580 +0.767677 0.373737 0.711050 +0.767677 0.383838 0.709519 +0.767677 0.393939 0.707989 +0.767677 0.404040 0.706459 +0.767677 0.414141 0.704928 +0.767677 0.424242 0.703398 +0.767677 0.434343 0.701867 +0.767677 0.444444 0.700337 +0.767677 0.454545 0.698806 +0.767677 0.464646 0.697276 +0.767677 0.474747 0.695745 +0.767677 0.484848 0.694215 +0.767677 0.494949 0.692684 +0.767677 0.505051 0.691154 +0.767677 0.515152 0.689624 +0.767677 0.525253 0.688093 +0.767677 0.535354 0.686563 +0.767677 0.545455 0.685032 +0.767677 0.555556 0.683502 +0.767677 0.565657 0.681971 +0.767677 0.575758 0.680441 +0.767677 0.585859 0.678910 +0.767677 0.595960 0.677380 +0.767677 0.606061 0.675849 +0.767677 0.616162 0.674319 +0.767677 0.626263 0.672788 +0.767677 0.636364 0.671258 +0.767677 0.646465 0.669728 +0.767677 0.656566 0.668197 +0.767677 0.666667 0.666667 +0.767677 0.676768 0.665136 +0.767677 0.686869 0.663606 +0.767677 0.696970 0.662075 +0.767677 0.707071 0.660545 +0.767677 0.717172 0.659014 +0.767677 0.727273 0.657484 +0.767677 0.737374 0.655953 +0.767677 0.747475 0.654423 +0.767677 0.757576 0.652893 +0.767677 0.767677 0.651362 +0.767677 0.777778 0.649832 +0.767677 0.787879 0.648301 +0.767677 0.797980 0.646771 +0.767677 0.808081 0.645240 +0.767677 0.818182 0.643710 +0.767677 0.828283 0.642179 +0.767677 0.838384 0.640649 +0.767677 0.848485 0.639118 +0.767677 0.858586 0.637588 +0.767677 0.868687 0.636058 +0.767677 0.878788 0.634527 +0.767677 0.888889 0.632997 +0.767677 0.898990 0.631466 +0.767677 0.909091 0.629936 +0.767677 0.919192 0.628405 +0.767677 0.929293 0.626875 +0.767677 0.939394 0.625344 +0.767677 0.949495 0.623814 +0.767677 0.959596 0.622283 +0.767677 0.969697 0.620753 +0.767677 0.979798 0.619223 +0.767677 0.989899 0.617692 +0.767677 1.000000 0.616162 + +0.777778 0.000000 0.777778 +0.777778 0.010101 0.776094 +0.777778 0.020202 0.774411 +0.777778 0.030303 0.772727 +0.777778 0.040404 0.771044 +0.777778 0.050505 0.769360 +0.777778 0.060606 0.767677 +0.777778 0.070707 0.765993 +0.777778 0.080808 0.764310 +0.777778 0.090909 0.762626 +0.777778 0.101010 0.760943 +0.777778 0.111111 0.759259 +0.777778 0.121212 0.757576 +0.777778 0.131313 0.755892 +0.777778 0.141414 0.754209 +0.777778 0.151515 0.752525 +0.777778 0.161616 0.750842 +0.777778 0.171717 0.749158 +0.777778 0.181818 0.747475 +0.777778 0.191919 0.745791 +0.777778 0.202020 0.744108 +0.777778 0.212121 0.742424 +0.777778 0.222222 0.740741 +0.777778 0.232323 0.739057 +0.777778 0.242424 0.737374 +0.777778 0.252525 0.735690 +0.777778 0.262626 0.734007 +0.777778 0.272727 0.732323 +0.777778 0.282828 0.730640 +0.777778 0.292929 0.728956 +0.777778 0.303030 0.727273 +0.777778 0.313131 0.725589 +0.777778 0.323232 0.723906 +0.777778 0.333333 0.722222 +0.777778 0.343434 0.720539 +0.777778 0.353535 0.718855 +0.777778 0.363636 0.717172 +0.777778 0.373737 0.715488 +0.777778 0.383838 0.713805 +0.777778 0.393939 0.712121 +0.777778 0.404040 0.710438 +0.777778 0.414141 0.708754 +0.777778 0.424242 0.707071 +0.777778 0.434343 0.705387 +0.777778 0.444444 0.703704 +0.777778 0.454545 0.702020 +0.777778 0.464646 0.700337 +0.777778 0.474747 0.698653 +0.777778 0.484848 0.696970 +0.777778 0.494949 0.695286 +0.777778 0.505051 0.693603 +0.777778 0.515152 0.691919 +0.777778 0.525253 0.690236 +0.777778 0.535354 0.688552 +0.777778 0.545455 0.686869 +0.777778 0.555556 0.685185 +0.777778 0.565657 0.683502 +0.777778 0.575758 0.681818 +0.777778 0.585859 0.680135 +0.777778 0.595960 0.678451 +0.777778 0.606061 0.676768 +0.777778 0.616162 0.675084 +0.777778 0.626263 0.673401 +0.777778 0.636364 0.671717 +0.777778 0.646465 0.670034 +0.777778 0.656566 0.668350 +0.777778 0.666667 0.666667 +0.777778 0.676768 0.664983 +0.777778 0.686869 0.663300 +0.777778 0.696970 0.661616 +0.777778 0.707071 0.659933 +0.777778 0.717172 0.658249 +0.777778 0.727273 0.656566 +0.777778 0.737374 0.654882 +0.777778 0.747475 0.653199 +0.777778 0.757576 0.651515 +0.777778 0.767677 0.649832 +0.777778 0.777778 0.648148 +0.777778 0.787879 0.646465 +0.777778 0.797980 0.644781 +0.777778 0.808081 0.643098 +0.777778 0.818182 0.641414 +0.777778 0.828283 0.639731 +0.777778 0.838384 0.638047 +0.777778 0.848485 0.636364 +0.777778 0.858586 0.634680 +0.777778 0.868687 0.632997 +0.777778 0.878788 0.631313 +0.777778 0.888889 0.629630 +0.777778 0.898990 0.627946 +0.777778 0.909091 0.626263 +0.777778 0.919192 0.624579 +0.777778 0.929293 0.622896 +0.777778 0.939394 0.621212 +0.777778 0.949495 0.619529 +0.777778 0.959596 0.617845 +0.777778 0.969697 0.616162 +0.777778 0.979798 0.614478 +0.777778 0.989899 0.612795 +0.777778 1.000000 0.611111 + +0.787879 0.000000 0.787879 +0.787879 0.010101 0.786042 +0.787879 0.020202 0.784206 +0.787879 0.030303 0.782369 +0.787879 0.040404 0.780533 +0.787879 0.050505 0.778696 +0.787879 0.060606 0.776860 +0.787879 0.070707 0.775023 +0.787879 0.080808 0.773186 +0.787879 0.090909 0.771350 +0.787879 0.101010 0.769513 +0.787879 0.111111 0.767677 +0.787879 0.121212 0.765840 +0.787879 0.131313 0.764004 +0.787879 0.141414 0.762167 +0.787879 0.151515 0.760331 +0.787879 0.161616 0.758494 +0.787879 0.171717 0.756657 +0.787879 0.181818 0.754821 +0.787879 0.191919 0.752984 +0.787879 0.202020 0.751148 +0.787879 0.212121 0.749311 +0.787879 0.222222 0.747475 +0.787879 0.232323 0.745638 +0.787879 0.242424 0.743802 +0.787879 0.252525 0.741965 +0.787879 0.262626 0.740129 +0.787879 0.272727 0.738292 +0.787879 0.282828 0.736455 +0.787879 0.292929 0.734619 +0.787879 0.303030 0.732782 +0.787879 0.313131 0.730946 +0.787879 0.323232 0.729109 +0.787879 0.333333 0.727273 +0.787879 0.343434 0.725436 +0.787879 0.353535 0.723600 +0.787879 0.363636 0.721763 +0.787879 0.373737 0.719927 +0.787879 0.383838 0.718090 +0.787879 0.393939 0.716253 +0.787879 0.404040 0.714417 +0.787879 0.414141 0.712580 +0.787879 0.424242 0.710744 +0.787879 0.434343 0.708907 +0.787879 0.444444 0.707071 +0.787879 0.454545 0.705234 +0.787879 0.464646 0.703398 +0.787879 0.474747 0.701561 +0.787879 0.484848 0.699725 +0.787879 0.494949 0.697888 +0.787879 0.505051 0.696051 +0.787879 0.515152 0.694215 +0.787879 0.525253 0.692378 +0.787879 0.535354 0.690542 +0.787879 0.545455 0.688705 +0.787879 0.555556 0.686869 +0.787879 0.565657 0.685032 +0.787879 0.575758 0.683196 +0.787879 0.585859 0.681359 +0.787879 0.595960 0.679522 +0.787879 0.606061 0.677686 +0.787879 0.616162 0.675849 +0.787879 0.626263 0.674013 +0.787879 0.636364 0.672176 +0.787879 0.646465 0.670340 +0.787879 0.656566 0.668503 +0.787879 0.666667 0.666667 +0.787879 0.676768 0.664830 +0.787879 0.686869 0.662994 +0.787879 0.696970 0.661157 +0.787879 0.707071 0.659320 +0.787879 0.717172 0.657484 +0.787879 0.727273 0.655647 +0.787879 0.737374 0.653811 +0.787879 0.747475 0.651974 +0.787879 0.757576 0.650138 +0.787879 0.767677 0.648301 +0.787879 0.777778 0.646465 +0.787879 0.787879 0.644628 +0.787879 0.797980 0.642792 +0.787879 0.808081 0.640955 +0.787879 0.818182 0.639118 +0.787879 0.828283 0.637282 +0.787879 0.838384 0.635445 +0.787879 0.848485 0.633609 +0.787879 0.858586 0.631772 +0.787879 0.868687 0.629936 +0.787879 0.878788 0.628099 +0.787879 0.888889 0.626263 +0.787879 0.898990 0.624426 +0.787879 0.909091 0.622590 +0.787879 0.919192 0.620753 +0.787879 0.929293 0.618916 +0.787879 0.939394 0.617080 +0.787879 0.949495 0.615243 +0.787879 0.959596 0.613407 +0.787879 0.969697 0.611570 +0.787879 0.979798 0.609734 +0.787879 0.989899 0.607897 +0.787879 1.000000 0.606061 + +0.797980 0.000000 0.797980 +0.797980 0.010101 0.795990 +0.797980 0.020202 0.794001 +0.797980 0.030303 0.792011 +0.797980 0.040404 0.790021 +0.797980 0.050505 0.788032 +0.797980 0.060606 0.786042 +0.797980 0.070707 0.784053 +0.797980 0.080808 0.782063 +0.797980 0.090909 0.780073 +0.797980 0.101010 0.778084 +0.797980 0.111111 0.776094 +0.797980 0.121212 0.774105 +0.797980 0.131313 0.772115 +0.797980 0.141414 0.770125 +0.797980 0.151515 0.768136 +0.797980 0.161616 0.766146 +0.797980 0.171717 0.764157 +0.797980 0.181818 0.762167 +0.797980 0.191919 0.760178 +0.797980 0.202020 0.758188 +0.797980 0.212121 0.756198 +0.797980 0.222222 0.754209 +0.797980 0.232323 0.752219 +0.797980 0.242424 0.750230 +0.797980 0.252525 0.748240 +0.797980 0.262626 0.746250 +0.797980 0.272727 0.744261 +0.797980 0.282828 0.742271 +0.797980 0.292929 0.740282 +0.797980 0.303030 0.738292 +0.797980 0.313131 0.736302 +0.797980 0.323232 0.734313 +0.797980 0.333333 0.732323 +0.797980 0.343434 0.730334 +0.797980 0.353535 0.728344 +0.797980 0.363636 0.726354 +0.797980 0.373737 0.724365 +0.797980 0.383838 0.722375 +0.797980 0.393939 0.720386 +0.797980 0.404040 0.718396 +0.797980 0.414141 0.716406 +0.797980 0.424242 0.714417 +0.797980 0.434343 0.712427 +0.797980 0.444444 0.710438 +0.797980 0.454545 0.708448 +0.797980 0.464646 0.706459 +0.797980 0.474747 0.704469 +0.797980 0.484848 0.702479 +0.797980 0.494949 0.700490 +0.797980 0.505051 0.698500 +0.797980 0.515152 0.696511 +0.797980 0.525253 0.694521 +0.797980 0.535354 0.692531 +0.797980 0.545455 0.690542 +0.797980 0.555556 0.688552 +0.797980 0.565657 0.686563 +0.797980 0.575758 0.684573 +0.797980 0.585859 0.682583 +0.797980 0.595960 0.680594 +0.797980 0.606061 0.678604 +0.797980 0.616162 0.676615 +0.797980 0.626263 0.674625 +0.797980 0.636364 0.672635 +0.797980 0.646465 0.670646 +0.797980 0.656566 0.668656 +0.797980 0.666667 0.666667 +0.797980 0.676768 0.664677 +0.797980 0.686869 0.662687 +0.797980 0.696970 0.660698 +0.797980 0.707071 0.658708 +0.797980 0.717172 0.656719 +0.797980 0.727273 0.654729 +0.797980 0.737374 0.652740 +0.797980 0.747475 0.650750 +0.797980 0.757576 0.648760 +0.797980 0.767677 0.646771 +0.797980 0.777778 0.644781 +0.797980 0.787879 0.642792 +0.797980 0.797980 0.640802 +0.797980 0.808081 0.638812 +0.797980 0.818182 0.636823 +0.797980 0.828283 0.634833 +0.797980 0.838384 0.632844 +0.797980 0.848485 0.630854 +0.797980 0.858586 0.628864 +0.797980 0.868687 0.626875 +0.797980 0.878788 0.624885 +0.797980 0.888889 0.622896 +0.797980 0.898990 0.620906 +0.797980 0.909091 0.618916 +0.797980 0.919192 0.616927 +0.797980 0.929293 0.614937 +0.797980 0.939394 0.612948 +0.797980 0.949495 0.610958 +0.797980 0.959596 0.608968 +0.797980 0.969697 0.606979 +0.797980 0.979798 0.604989 +0.797980 0.989899 0.603000 +0.797980 1.000000 0.601010 + +0.808081 0.000000 0.808081 +0.808081 0.010101 0.805938 +0.808081 0.020202 0.803796 +0.808081 0.030303 0.801653 +0.808081 0.040404 0.799510 +0.808081 0.050505 0.797368 +0.808081 0.060606 0.795225 +0.808081 0.070707 0.793082 +0.808081 0.080808 0.790940 +0.808081 0.090909 0.788797 +0.808081 0.101010 0.786654 +0.808081 0.111111 0.784512 +0.808081 0.121212 0.782369 +0.808081 0.131313 0.780227 +0.808081 0.141414 0.778084 +0.808081 0.151515 0.775941 +0.808081 0.161616 0.773799 +0.808081 0.171717 0.771656 +0.808081 0.181818 0.769513 +0.808081 0.191919 0.767371 +0.808081 0.202020 0.765228 +0.808081 0.212121 0.763085 +0.808081 0.222222 0.760943 +0.808081 0.232323 0.758800 +0.808081 0.242424 0.756657 +0.808081 0.252525 0.754515 +0.808081 0.262626 0.752372 +0.808081 0.272727 0.750230 +0.808081 0.282828 0.748087 +0.808081 0.292929 0.745944 +0.808081 0.303030 0.743802 +0.808081 0.313131 0.741659 +0.808081 0.323232 0.739516 +0.808081 0.333333 0.737374 +0.808081 0.343434 0.735231 +0.808081 0.353535 0.733088 +0.808081 0.363636 0.730946 +0.808081 0.373737 0.728803 +0.808081 0.383838 0.726661 +0.808081 0.393939 0.724518 +0.808081 0.404040 0.722375 +0.808081 0.414141 0.720233 +0.808081 0.424242 0.718090 +0.808081 0.434343 0.715947 +0.808081 0.444444 0.713805 +0.808081 0.454545 0.711662 +0.808081 0.464646 0.709519 +0.808081 0.474747 0.707377 +0.808081 0.484848 0.705234 +0.808081 0.494949 0.703092 +0.808081 0.505051 0.700949 +0.808081 0.515152 0.698806 +0.808081 0.525253 0.696664 +0.808081 0.535354 0.694521 +0.808081 0.545455 0.692378 +0.808081 0.555556 0.690236 +0.808081 0.565657 0.688093 +0.808081 0.575758 0.685950 +0.808081 0.585859 0.683808 +0.808081 0.595960 0.681665 +0.808081 0.606061 0.679522 +0.808081 0.616162 0.677380 +0.808081 0.626263 0.675237 +0.808081 0.636364 0.673095 +0.808081 0.646465 0.670952 +0.808081 0.656566 0.668809 +0.808081 0.666667 0.666667 +0.808081 0.676768 0.664524 +0.808081 0.686869 0.662381 +0.808081 0.696970 0.660239 +0.808081 0.707071 0.658096 +0.808081 0.717172 0.655953 +0.808081 0.727273 0.653811 +0.808081 0.737374 0.651668 +0.808081 0.747475 0.649526 +0.808081 0.757576 0.647383 +0.808081 0.767677 0.645240 +0.808081 0.777778 0.643098 +0.808081 0.787879 0.640955 +0.808081 0.797980 0.638812 +0.808081 0.808081 0.636670 +0.808081 0.818182 0.634527 +0.808081 0.828283 0.632384 +0.808081 0.838384 0.630242 +0.808081 0.848485 0.628099 +0.808081 0.858586 0.625957 +0.808081 0.868687 0.623814 +0.808081 0.878788 0.621671 +0.808081 0.888889 0.619529 +0.808081 0.898990 0.617386 +0.808081 0.909091 0.615243 +0.808081 0.919192 0.613101 +0.808081 0.929293 0.610958 +0.808081 0.939394 0.608815 +0.808081 0.949495 0.606673 +0.808081 0.959596 0.604530 +0.808081 0.969697 0.602388 +0.808081 0.979798 0.600245 +0.808081 0.989899 0.598102 +0.808081 1.000000 0.595960 + +0.818182 0.000000 0.818182 +0.818182 0.010101 0.815886 +0.818182 0.020202 0.813590 +0.818182 0.030303 0.811295 +0.818182 0.040404 0.808999 +0.818182 0.050505 0.806703 +0.818182 0.060606 0.804408 +0.818182 0.070707 0.802112 +0.818182 0.080808 0.799816 +0.818182 0.090909 0.797521 +0.818182 0.101010 0.795225 +0.818182 0.111111 0.792929 +0.818182 0.121212 0.790634 +0.818182 0.131313 0.788338 +0.818182 0.141414 0.786042 +0.818182 0.151515 0.783747 +0.818182 0.161616 0.781451 +0.818182 0.171717 0.779155 +0.818182 0.181818 0.776860 +0.818182 0.191919 0.774564 +0.818182 0.202020 0.772268 +0.818182 0.212121 0.769972 +0.818182 0.222222 0.767677 +0.818182 0.232323 0.765381 +0.818182 0.242424 0.763085 +0.818182 0.252525 0.760790 +0.818182 0.262626 0.758494 +0.818182 0.272727 0.756198 +0.818182 0.282828 0.753903 +0.818182 0.292929 0.751607 +0.818182 0.303030 0.749311 +0.818182 0.313131 0.747016 +0.818182 0.323232 0.744720 +0.818182 0.333333 0.742424 +0.818182 0.343434 0.740129 +0.818182 0.353535 0.737833 +0.818182 0.363636 0.735537 +0.818182 0.373737 0.733242 +0.818182 0.383838 0.730946 +0.818182 0.393939 0.728650 +0.818182 0.404040 0.726354 +0.818182 0.414141 0.724059 +0.818182 0.424242 0.721763 +0.818182 0.434343 0.719467 +0.818182 0.444444 0.717172 +0.818182 0.454545 0.714876 +0.818182 0.464646 0.712580 +0.818182 0.474747 0.710285 +0.818182 0.484848 0.707989 +0.818182 0.494949 0.705693 +0.818182 0.505051 0.703398 +0.818182 0.515152 0.701102 +0.818182 0.525253 0.698806 +0.818182 0.535354 0.696511 +0.818182 0.545455 0.694215 +0.818182 0.555556 0.691919 +0.818182 0.565657 0.689624 +0.818182 0.575758 0.687328 +0.818182 0.585859 0.685032 +0.818182 0.595960 0.682736 +0.818182 0.606061 0.680441 +0.818182 0.616162 0.678145 +0.818182 0.626263 0.675849 +0.818182 0.636364 0.673554 +0.818182 0.646465 0.671258 +0.818182 0.656566 0.668962 +0.818182 0.666667 0.666667 +0.818182 0.676768 0.664371 +0.818182 0.686869 0.662075 +0.818182 0.696970 0.659780 +0.818182 0.707071 0.657484 +0.818182 0.717172 0.655188 +0.818182 0.727273 0.652893 +0.818182 0.737374 0.650597 +0.818182 0.747475 0.648301 +0.818182 0.757576 0.646006 +0.818182 0.767677 0.643710 +0.818182 0.777778 0.641414 +0.818182 0.787879 0.639118 +0.818182 0.797980 0.636823 +0.818182 0.808081 0.634527 +0.818182 0.818182 0.632231 +0.818182 0.828283 0.629936 +0.818182 0.838384 0.627640 +0.818182 0.848485 0.625344 +0.818182 0.858586 0.623049 +0.818182 0.868687 0.620753 +0.818182 0.878788 0.618457 +0.818182 0.888889 0.616162 +0.818182 0.898990 0.613866 +0.818182 0.909091 0.611570 +0.818182 0.919192 0.609275 +0.818182 0.929293 0.606979 +0.818182 0.939394 0.604683 +0.818182 0.949495 0.602388 +0.818182 0.959596 0.600092 +0.818182 0.969697 0.597796 +0.818182 0.979798 0.595500 +0.818182 0.989899 0.593205 +0.818182 1.000000 0.590909 + +0.828283 0.000000 0.828283 +0.828283 0.010101 0.825834 +0.828283 0.020202 0.823385 +0.828283 0.030303 0.820937 +0.828283 0.040404 0.818488 +0.828283 0.050505 0.816039 +0.828283 0.060606 0.813590 +0.828283 0.070707 0.811142 +0.828283 0.080808 0.808693 +0.828283 0.090909 0.806244 +0.828283 0.101010 0.803796 +0.828283 0.111111 0.801347 +0.828283 0.121212 0.798898 +0.828283 0.131313 0.796449 +0.828283 0.141414 0.794001 +0.828283 0.151515 0.791552 +0.828283 0.161616 0.789103 +0.828283 0.171717 0.786654 +0.828283 0.181818 0.784206 +0.828283 0.191919 0.781757 +0.828283 0.202020 0.779308 +0.828283 0.212121 0.776860 +0.828283 0.222222 0.774411 +0.828283 0.232323 0.771962 +0.828283 0.242424 0.769513 +0.828283 0.252525 0.767065 +0.828283 0.262626 0.764616 +0.828283 0.272727 0.762167 +0.828283 0.282828 0.759718 +0.828283 0.292929 0.757270 +0.828283 0.303030 0.754821 +0.828283 0.313131 0.752372 +0.828283 0.323232 0.749923 +0.828283 0.333333 0.747475 +0.828283 0.343434 0.745026 +0.828283 0.353535 0.742577 +0.828283 0.363636 0.740129 +0.828283 0.373737 0.737680 +0.828283 0.383838 0.735231 +0.828283 0.393939 0.732782 +0.828283 0.404040 0.730334 +0.828283 0.414141 0.727885 +0.828283 0.424242 0.725436 +0.828283 0.434343 0.722987 +0.828283 0.444444 0.720539 +0.828283 0.454545 0.718090 +0.828283 0.464646 0.715641 +0.828283 0.474747 0.713193 +0.828283 0.484848 0.710744 +0.828283 0.494949 0.708295 +0.828283 0.505051 0.705846 +0.828283 0.515152 0.703398 +0.828283 0.525253 0.700949 +0.828283 0.535354 0.698500 +0.828283 0.545455 0.696051 +0.828283 0.555556 0.693603 +0.828283 0.565657 0.691154 +0.828283 0.575758 0.688705 +0.828283 0.585859 0.686257 +0.828283 0.595960 0.683808 +0.828283 0.606061 0.681359 +0.828283 0.616162 0.678910 +0.828283 0.626263 0.676462 +0.828283 0.636364 0.674013 +0.828283 0.646465 0.671564 +0.828283 0.656566 0.669115 +0.828283 0.666667 0.666667 +0.828283 0.676768 0.664218 +0.828283 0.686869 0.661769 +0.828283 0.696970 0.659320 +0.828283 0.707071 0.656872 +0.828283 0.717172 0.654423 +0.828283 0.727273 0.651974 +0.828283 0.737374 0.649526 +0.828283 0.747475 0.647077 +0.828283 0.757576 0.644628 +0.828283 0.767677 0.642179 +0.828283 0.777778 0.639731 +0.828283 0.787879 0.637282 +0.828283 0.797980 0.634833 +0.828283 0.808081 0.632384 +0.828283 0.818182 0.629936 +0.828283 0.828283 0.627487 +0.828283 0.838384 0.625038 +0.828283 0.848485 0.622590 +0.828283 0.858586 0.620141 +0.828283 0.868687 0.617692 +0.828283 0.878788 0.615243 +0.828283 0.888889 0.612795 +0.828283 0.898990 0.610346 +0.828283 0.909091 0.607897 +0.828283 0.919192 0.605448 +0.828283 0.929293 0.603000 +0.828283 0.939394 0.600551 +0.828283 0.949495 0.598102 +0.828283 0.959596 0.595654 +0.828283 0.969697 0.593205 +0.828283 0.979798 0.590756 +0.828283 0.989899 0.588307 +0.828283 1.000000 0.585859 + +0.838384 0.000000 0.838384 +0.838384 0.010101 0.835782 +0.838384 0.020202 0.833180 +0.838384 0.030303 0.830579 +0.838384 0.040404 0.827977 +0.838384 0.050505 0.825375 +0.838384 0.060606 0.822773 +0.838384 0.070707 0.820171 +0.838384 0.080808 0.817570 +0.838384 0.090909 0.814968 +0.838384 0.101010 0.812366 +0.838384 0.111111 0.809764 +0.838384 0.121212 0.807163 +0.838384 0.131313 0.804561 +0.838384 0.141414 0.801959 +0.838384 0.151515 0.799357 +0.838384 0.161616 0.796755 +0.838384 0.171717 0.794154 +0.838384 0.181818 0.791552 +0.838384 0.191919 0.788950 +0.838384 0.202020 0.786348 +0.838384 0.212121 0.783747 +0.838384 0.222222 0.781145 +0.838384 0.232323 0.778543 +0.838384 0.242424 0.775941 +0.838384 0.252525 0.773339 +0.838384 0.262626 0.770738 +0.838384 0.272727 0.768136 +0.838384 0.282828 0.765534 +0.838384 0.292929 0.762932 +0.838384 0.303030 0.760331 +0.838384 0.313131 0.757729 +0.838384 0.323232 0.755127 +0.838384 0.333333 0.752525 +0.838384 0.343434 0.749923 +0.838384 0.353535 0.747322 +0.838384 0.363636 0.744720 +0.838384 0.373737 0.742118 +0.838384 0.383838 0.739516 +0.838384 0.393939 0.736915 +0.838384 0.404040 0.734313 +0.838384 0.414141 0.731711 +0.838384 0.424242 0.729109 +0.838384 0.434343 0.726507 +0.838384 0.444444 0.723906 +0.838384 0.454545 0.721304 +0.838384 0.464646 0.718702 +0.838384 0.474747 0.716100 +0.838384 0.484848 0.713499 +0.838384 0.494949 0.710897 +0.838384 0.505051 0.708295 +0.838384 0.515152 0.705693 +0.838384 0.525253 0.703092 +0.838384 0.535354 0.700490 +0.838384 0.545455 0.697888 +0.838384 0.555556 0.695286 +0.838384 0.565657 0.692684 +0.838384 0.575758 0.690083 +0.838384 0.585859 0.687481 +0.838384 0.595960 0.684879 +0.838384 0.606061 0.682277 +0.838384 0.616162 0.679676 +0.838384 0.626263 0.677074 +0.838384 0.636364 0.674472 +0.838384 0.646465 0.671870 +0.838384 0.656566 0.669268 +0.838384 0.666667 0.666667 +0.838384 0.676768 0.664065 +0.838384 0.686869 0.661463 +0.838384 0.696970 0.658861 +0.838384 0.707071 0.656260 +0.838384 0.717172 0.653658 +0.838384 0.727273 0.651056 +0.838384 0.737374 0.648454 +0.838384 0.747475 0.645852 +0.838384 0.757576 0.643251 +0.838384 0.767677 0.640649 +0.838384 0.777778 0.638047 +0.838384 0.787879 0.635445 +0.838384 0.797980 0.632844 +0.838384 0.808081 0.630242 +0.838384 0.818182 0.627640 +0.838384 0.828283 0.625038 +0.838384 0.838384 0.622436 +0.838384 0.848485 0.619835 +0.838384 0.858586 0.617233 +0.838384 0.868687 0.614631 +0.838384 0.878788 0.612029 +0.838384 0.888889 0.609428 +0.838384 0.898990 0.606826 +0.838384 0.909091 0.604224 +0.838384 0.919192 0.601622 +0.838384 0.929293 0.599021 +0.838384 0.939394 0.596419 +0.838384 0.949495 0.593817 +0.838384 0.959596 0.591215 +0.838384 0.969697 0.588613 +0.838384 0.979798 0.586012 +0.838384 0.989899 0.583410 +0.838384 1.000000 0.580808 + +0.848485 0.000000 0.848485 +0.848485 0.010101 0.845730 +0.848485 0.020202 0.842975 +0.848485 0.030303 0.840220 +0.848485 0.040404 0.837466 +0.848485 0.050505 0.834711 +0.848485 0.060606 0.831956 +0.848485 0.070707 0.829201 +0.848485 0.080808 0.826446 +0.848485 0.090909 0.823691 +0.848485 0.101010 0.820937 +0.848485 0.111111 0.818182 +0.848485 0.121212 0.815427 +0.848485 0.131313 0.812672 +0.848485 0.141414 0.809917 +0.848485 0.151515 0.807163 +0.848485 0.161616 0.804408 +0.848485 0.171717 0.801653 +0.848485 0.181818 0.798898 +0.848485 0.191919 0.796143 +0.848485 0.202020 0.793388 +0.848485 0.212121 0.790634 +0.848485 0.222222 0.787879 +0.848485 0.232323 0.785124 +0.848485 0.242424 0.782369 +0.848485 0.252525 0.779614 +0.848485 0.262626 0.776860 +0.848485 0.272727 0.774105 +0.848485 0.282828 0.771350 +0.848485 0.292929 0.768595 +0.848485 0.303030 0.765840 +0.848485 0.313131 0.763085 +0.848485 0.323232 0.760331 +0.848485 0.333333 0.757576 +0.848485 0.343434 0.754821 +0.848485 0.353535 0.752066 +0.848485 0.363636 0.749311 +0.848485 0.373737 0.746556 +0.848485 0.383838 0.743802 +0.848485 0.393939 0.741047 +0.848485 0.404040 0.738292 +0.848485 0.414141 0.735537 +0.848485 0.424242 0.732782 +0.848485 0.434343 0.730028 +0.848485 0.444444 0.727273 +0.848485 0.454545 0.724518 +0.848485 0.464646 0.721763 +0.848485 0.474747 0.719008 +0.848485 0.484848 0.716253 +0.848485 0.494949 0.713499 +0.848485 0.505051 0.710744 +0.848485 0.515152 0.707989 +0.848485 0.525253 0.705234 +0.848485 0.535354 0.702479 +0.848485 0.545455 0.699725 +0.848485 0.555556 0.696970 +0.848485 0.565657 0.694215 +0.848485 0.575758 0.691460 +0.848485 0.585859 0.688705 +0.848485 0.595960 0.685950 +0.848485 0.606061 0.683196 +0.848485 0.616162 0.680441 +0.848485 0.626263 0.677686 +0.848485 0.636364 0.674931 +0.848485 0.646465 0.672176 +0.848485 0.656566 0.669421 +0.848485 0.666667 0.666667 +0.848485 0.676768 0.663912 +0.848485 0.686869 0.661157 +0.848485 0.696970 0.658402 +0.848485 0.707071 0.655647 +0.848485 0.717172 0.652893 +0.848485 0.727273 0.650138 +0.848485 0.737374 0.647383 +0.848485 0.747475 0.644628 +0.848485 0.757576 0.641873 +0.848485 0.767677 0.639118 +0.848485 0.777778 0.636364 +0.848485 0.787879 0.633609 +0.848485 0.797980 0.630854 +0.848485 0.808081 0.628099 +0.848485 0.818182 0.625344 +0.848485 0.828283 0.622590 +0.848485 0.838384 0.619835 +0.848485 0.848485 0.617080 +0.848485 0.858586 0.614325 +0.848485 0.868687 0.611570 +0.848485 0.878788 0.608815 +0.848485 0.888889 0.606061 +0.848485 0.898990 0.603306 +0.848485 0.909091 0.600551 +0.848485 0.919192 0.597796 +0.848485 0.929293 0.595041 +0.848485 0.939394 0.592287 +0.848485 0.949495 0.589532 +0.848485 0.959596 0.586777 +0.848485 0.969697 0.584022 +0.848485 0.979798 0.581267 +0.848485 0.989899 0.578512 +0.848485 1.000000 0.575758 + +0.858586 0.000000 0.858586 +0.858586 0.010101 0.855678 +0.858586 0.020202 0.852770 +0.858586 0.030303 0.849862 +0.858586 0.040404 0.846954 +0.858586 0.050505 0.844047 +0.858586 0.060606 0.841139 +0.858586 0.070707 0.838231 +0.858586 0.080808 0.835323 +0.858586 0.090909 0.832415 +0.858586 0.101010 0.829507 +0.858586 0.111111 0.826599 +0.858586 0.121212 0.823691 +0.858586 0.131313 0.820784 +0.858586 0.141414 0.817876 +0.858586 0.151515 0.814968 +0.858586 0.161616 0.812060 +0.858586 0.171717 0.809152 +0.858586 0.181818 0.806244 +0.858586 0.191919 0.803336 +0.858586 0.202020 0.800429 +0.858586 0.212121 0.797521 +0.858586 0.222222 0.794613 +0.858586 0.232323 0.791705 +0.858586 0.242424 0.788797 +0.858586 0.252525 0.785889 +0.858586 0.262626 0.782981 +0.858586 0.272727 0.780073 +0.858586 0.282828 0.777166 +0.858586 0.292929 0.774258 +0.858586 0.303030 0.771350 +0.858586 0.313131 0.768442 +0.858586 0.323232 0.765534 +0.858586 0.333333 0.762626 +0.858586 0.343434 0.759718 +0.858586 0.353535 0.756811 +0.858586 0.363636 0.753903 +0.858586 0.373737 0.750995 +0.858586 0.383838 0.748087 +0.858586 0.393939 0.745179 +0.858586 0.404040 0.742271 +0.858586 0.414141 0.739363 +0.858586 0.424242 0.736455 +0.858586 0.434343 0.733548 +0.858586 0.444444 0.730640 +0.858586 0.454545 0.727732 +0.858586 0.464646 0.724824 +0.858586 0.474747 0.721916 +0.858586 0.484848 0.719008 +0.858586 0.494949 0.716100 +0.858586 0.505051 0.713193 +0.858586 0.515152 0.710285 +0.858586 0.525253 0.707377 +0.858586 0.535354 0.704469 +0.858586 0.545455 0.701561 +0.858586 0.555556 0.698653 +0.858586 0.565657 0.695745 +0.858586 0.575758 0.692837 +0.858586 0.585859 0.689930 +0.858586 0.595960 0.687022 +0.858586 0.606061 0.684114 +0.858586 0.616162 0.681206 +0.858586 0.626263 0.678298 +0.858586 0.636364 0.675390 +0.858586 0.646465 0.672482 +0.858586 0.656566 0.669575 +0.858586 0.666667 0.666667 +0.858586 0.676768 0.663759 +0.858586 0.686869 0.660851 +0.858586 0.696970 0.657943 +0.858586 0.707071 0.655035 +0.858586 0.717172 0.652127 +0.858586 0.727273 0.649219 +0.858586 0.737374 0.646312 +0.858586 0.747475 0.643404 +0.858586 0.757576 0.640496 +0.858586 0.767677 0.637588 +0.858586 0.777778 0.634680 +0.858586 0.787879 0.631772 +0.858586 0.797980 0.628864 +0.858586 0.808081 0.625957 +0.858586 0.818182 0.623049 +0.858586 0.828283 0.620141 +0.858586 0.838384 0.617233 +0.858586 0.848485 0.614325 +0.858586 0.858586 0.611417 +0.858586 0.868687 0.608509 +0.858586 0.878788 0.605601 +0.858586 0.888889 0.602694 +0.858586 0.898990 0.599786 +0.858586 0.909091 0.596878 +0.858586 0.919192 0.593970 +0.858586 0.929293 0.591062 +0.858586 0.939394 0.588154 +0.858586 0.949495 0.585246 +0.858586 0.959596 0.582339 +0.858586 0.969697 0.579431 +0.858586 0.979798 0.576523 +0.858586 0.989899 0.573615 +0.858586 1.000000 0.570707 + +0.868687 0.000000 0.868687 +0.868687 0.010101 0.865626 +0.868687 0.020202 0.862565 +0.868687 0.030303 0.859504 +0.868687 0.040404 0.856443 +0.868687 0.050505 0.853382 +0.868687 0.060606 0.850321 +0.868687 0.070707 0.847260 +0.868687 0.080808 0.844200 +0.868687 0.090909 0.841139 +0.868687 0.101010 0.838078 +0.868687 0.111111 0.835017 +0.868687 0.121212 0.831956 +0.868687 0.131313 0.828895 +0.868687 0.141414 0.825834 +0.868687 0.151515 0.822773 +0.868687 0.161616 0.819712 +0.868687 0.171717 0.816651 +0.868687 0.181818 0.813590 +0.868687 0.191919 0.810530 +0.868687 0.202020 0.807469 +0.868687 0.212121 0.804408 +0.868687 0.222222 0.801347 +0.868687 0.232323 0.798286 +0.868687 0.242424 0.795225 +0.868687 0.252525 0.792164 +0.868687 0.262626 0.789103 +0.868687 0.272727 0.786042 +0.868687 0.282828 0.782981 +0.868687 0.292929 0.779920 +0.868687 0.303030 0.776860 +0.868687 0.313131 0.773799 +0.868687 0.323232 0.770738 +0.868687 0.333333 0.767677 +0.868687 0.343434 0.764616 +0.868687 0.353535 0.761555 +0.868687 0.363636 0.758494 +0.868687 0.373737 0.755433 +0.868687 0.383838 0.752372 +0.868687 0.393939 0.749311 +0.868687 0.404040 0.746250 +0.868687 0.414141 0.743189 +0.868687 0.424242 0.740129 +0.868687 0.434343 0.737068 +0.868687 0.444444 0.734007 +0.868687 0.454545 0.730946 +0.868687 0.464646 0.727885 +0.868687 0.474747 0.724824 +0.868687 0.484848 0.721763 +0.868687 0.494949 0.718702 +0.868687 0.505051 0.715641 +0.868687 0.515152 0.712580 +0.868687 0.525253 0.709519 +0.868687 0.535354 0.706459 +0.868687 0.545455 0.703398 +0.868687 0.555556 0.700337 +0.868687 0.565657 0.697276 +0.868687 0.575758 0.694215 +0.868687 0.585859 0.691154 +0.868687 0.595960 0.688093 +0.868687 0.606061 0.685032 +0.868687 0.616162 0.681971 +0.868687 0.626263 0.678910 +0.868687 0.636364 0.675849 +0.868687 0.646465 0.672788 +0.868687 0.656566 0.669728 +0.868687 0.666667 0.666667 +0.868687 0.676768 0.663606 +0.868687 0.686869 0.660545 +0.868687 0.696970 0.657484 +0.868687 0.707071 0.654423 +0.868687 0.717172 0.651362 +0.868687 0.727273 0.648301 +0.868687 0.737374 0.645240 +0.868687 0.747475 0.642179 +0.868687 0.757576 0.639118 +0.868687 0.767677 0.636058 +0.868687 0.777778 0.632997 +0.868687 0.787879 0.629936 +0.868687 0.797980 0.626875 +0.868687 0.808081 0.623814 +0.868687 0.818182 0.620753 +0.868687 0.828283 0.617692 +0.868687 0.838384 0.614631 +0.868687 0.848485 0.611570 +0.868687 0.858586 0.608509 +0.868687 0.868687 0.605448 +0.868687 0.878788 0.602388 +0.868687 0.888889 0.599327 +0.868687 0.898990 0.596266 +0.868687 0.909091 0.593205 +0.868687 0.919192 0.590144 +0.868687 0.929293 0.587083 +0.868687 0.939394 0.584022 +0.868687 0.949495 0.580961 +0.868687 0.959596 0.577900 +0.868687 0.969697 0.574839 +0.868687 0.979798 0.571778 +0.868687 0.989899 0.568717 +0.868687 1.000000 0.565657 + +0.878788 0.000000 0.878788 +0.878788 0.010101 0.875574 +0.878788 0.020202 0.872360 +0.878788 0.030303 0.869146 +0.878788 0.040404 0.865932 +0.878788 0.050505 0.862718 +0.878788 0.060606 0.859504 +0.878788 0.070707 0.856290 +0.878788 0.080808 0.853076 +0.878788 0.090909 0.849862 +0.878788 0.101010 0.846648 +0.878788 0.111111 0.843434 +0.878788 0.121212 0.840220 +0.878788 0.131313 0.837006 +0.878788 0.141414 0.833792 +0.878788 0.151515 0.830579 +0.878788 0.161616 0.827365 +0.878788 0.171717 0.824151 +0.878788 0.181818 0.820937 +0.878788 0.191919 0.817723 +0.878788 0.202020 0.814509 +0.878788 0.212121 0.811295 +0.878788 0.222222 0.808081 +0.878788 0.232323 0.804867 +0.878788 0.242424 0.801653 +0.878788 0.252525 0.798439 +0.878788 0.262626 0.795225 +0.878788 0.272727 0.792011 +0.878788 0.282828 0.788797 +0.878788 0.292929 0.785583 +0.878788 0.303030 0.782369 +0.878788 0.313131 0.779155 +0.878788 0.323232 0.775941 +0.878788 0.333333 0.772727 +0.878788 0.343434 0.769513 +0.878788 0.353535 0.766299 +0.878788 0.363636 0.763085 +0.878788 0.373737 0.759871 +0.878788 0.383838 0.756657 +0.878788 0.393939 0.753444 +0.878788 0.404040 0.750230 +0.878788 0.414141 0.747016 +0.878788 0.424242 0.743802 +0.878788 0.434343 0.740588 +0.878788 0.444444 0.737374 +0.878788 0.454545 0.734160 +0.878788 0.464646 0.730946 +0.878788 0.474747 0.727732 +0.878788 0.484848 0.724518 +0.878788 0.494949 0.721304 +0.878788 0.505051 0.718090 +0.878788 0.515152 0.714876 +0.878788 0.525253 0.711662 +0.878788 0.535354 0.708448 +0.878788 0.545455 0.705234 +0.878788 0.555556 0.702020 +0.878788 0.565657 0.698806 +0.878788 0.575758 0.695592 +0.878788 0.585859 0.692378 +0.878788 0.595960 0.689164 +0.878788 0.606061 0.685950 +0.878788 0.616162 0.682736 +0.878788 0.626263 0.679522 +0.878788 0.636364 0.676309 +0.878788 0.646465 0.673095 +0.878788 0.656566 0.669881 +0.878788 0.666667 0.666667 +0.878788 0.676768 0.663453 +0.878788 0.686869 0.660239 +0.878788 0.696970 0.657025 +0.878788 0.707071 0.653811 +0.878788 0.717172 0.650597 +0.878788 0.727273 0.647383 +0.878788 0.737374 0.644169 +0.878788 0.747475 0.640955 +0.878788 0.757576 0.637741 +0.878788 0.767677 0.634527 +0.878788 0.777778 0.631313 +0.878788 0.787879 0.628099 +0.878788 0.797980 0.624885 +0.878788 0.808081 0.621671 +0.878788 0.818182 0.618457 +0.878788 0.828283 0.615243 +0.878788 0.838384 0.612029 +0.878788 0.848485 0.608815 +0.878788 0.858586 0.605601 +0.878788 0.868687 0.602388 +0.878788 0.878788 0.599174 +0.878788 0.888889 0.595960 +0.878788 0.898990 0.592746 +0.878788 0.909091 0.589532 +0.878788 0.919192 0.586318 +0.878788 0.929293 0.583104 +0.878788 0.939394 0.579890 +0.878788 0.949495 0.576676 +0.878788 0.959596 0.573462 +0.878788 0.969697 0.570248 +0.878788 0.979798 0.567034 +0.878788 0.989899 0.563820 +0.878788 1.000000 0.560606 + +0.888889 0.000000 0.888889 +0.888889 0.010101 0.885522 +0.888889 0.020202 0.882155 +0.888889 0.030303 0.878788 +0.888889 0.040404 0.875421 +0.888889 0.050505 0.872054 +0.888889 0.060606 0.868687 +0.888889 0.070707 0.865320 +0.888889 0.080808 0.861953 +0.888889 0.090909 0.858586 +0.888889 0.101010 0.855219 +0.888889 0.111111 0.851852 +0.888889 0.121212 0.848485 +0.888889 0.131313 0.845118 +0.888889 0.141414 0.841751 +0.888889 0.151515 0.838384 +0.888889 0.161616 0.835017 +0.888889 0.171717 0.831650 +0.888889 0.181818 0.828283 +0.888889 0.191919 0.824916 +0.888889 0.202020 0.821549 +0.888889 0.212121 0.818182 +0.888889 0.222222 0.814815 +0.888889 0.232323 0.811448 +0.888889 0.242424 0.808081 +0.888889 0.252525 0.804714 +0.888889 0.262626 0.801347 +0.888889 0.272727 0.797980 +0.888889 0.282828 0.794613 +0.888889 0.292929 0.791246 +0.888889 0.303030 0.787879 +0.888889 0.313131 0.784512 +0.888889 0.323232 0.781145 +0.888889 0.333333 0.777778 +0.888889 0.343434 0.774411 +0.888889 0.353535 0.771044 +0.888889 0.363636 0.767677 +0.888889 0.373737 0.764310 +0.888889 0.383838 0.760943 +0.888889 0.393939 0.757576 +0.888889 0.404040 0.754209 +0.888889 0.414141 0.750842 +0.888889 0.424242 0.747475 +0.888889 0.434343 0.744108 +0.888889 0.444444 0.740741 +0.888889 0.454545 0.737374 +0.888889 0.464646 0.734007 +0.888889 0.474747 0.730640 +0.888889 0.484848 0.727273 +0.888889 0.494949 0.723906 +0.888889 0.505051 0.720539 +0.888889 0.515152 0.717172 +0.888889 0.525253 0.713805 +0.888889 0.535354 0.710438 +0.888889 0.545455 0.707071 +0.888889 0.555556 0.703704 +0.888889 0.565657 0.700337 +0.888889 0.575758 0.696970 +0.888889 0.585859 0.693603 +0.888889 0.595960 0.690236 +0.888889 0.606061 0.686869 +0.888889 0.616162 0.683502 +0.888889 0.626263 0.680135 +0.888889 0.636364 0.676768 +0.888889 0.646465 0.673401 +0.888889 0.656566 0.670034 +0.888889 0.666667 0.666667 +0.888889 0.676768 0.663300 +0.888889 0.686869 0.659933 +0.888889 0.696970 0.656566 +0.888889 0.707071 0.653199 +0.888889 0.717172 0.649832 +0.888889 0.727273 0.646465 +0.888889 0.737374 0.643098 +0.888889 0.747475 0.639731 +0.888889 0.757576 0.636364 +0.888889 0.767677 0.632997 +0.888889 0.777778 0.629630 +0.888889 0.787879 0.626263 +0.888889 0.797980 0.622896 +0.888889 0.808081 0.619529 +0.888889 0.818182 0.616162 +0.888889 0.828283 0.612795 +0.888889 0.838384 0.609428 +0.888889 0.848485 0.606061 +0.888889 0.858586 0.602694 +0.888889 0.868687 0.599327 +0.888889 0.878788 0.595960 +0.888889 0.888889 0.592593 +0.888889 0.898990 0.589226 +0.888889 0.909091 0.585859 +0.888889 0.919192 0.582492 +0.888889 0.929293 0.579125 +0.888889 0.939394 0.575758 +0.888889 0.949495 0.572391 +0.888889 0.959596 0.569024 +0.888889 0.969697 0.565657 +0.888889 0.979798 0.562290 +0.888889 0.989899 0.558923 +0.888889 1.000000 0.555556 + +0.898990 0.000000 0.898990 +0.898990 0.010101 0.895470 +0.898990 0.020202 0.891950 +0.898990 0.030303 0.888430 +0.898990 0.040404 0.884910 +0.898990 0.050505 0.881390 +0.898990 0.060606 0.877870 +0.898990 0.070707 0.874350 +0.898990 0.080808 0.870830 +0.898990 0.090909 0.867309 +0.898990 0.101010 0.863789 +0.898990 0.111111 0.860269 +0.898990 0.121212 0.856749 +0.898990 0.131313 0.853229 +0.898990 0.141414 0.849709 +0.898990 0.151515 0.846189 +0.898990 0.161616 0.842669 +0.898990 0.171717 0.839149 +0.898990 0.181818 0.835629 +0.898990 0.191919 0.832109 +0.898990 0.202020 0.828589 +0.898990 0.212121 0.825069 +0.898990 0.222222 0.821549 +0.898990 0.232323 0.818029 +0.898990 0.242424 0.814509 +0.898990 0.252525 0.810989 +0.898990 0.262626 0.807469 +0.898990 0.272727 0.803949 +0.898990 0.282828 0.800429 +0.898990 0.292929 0.796908 +0.898990 0.303030 0.793388 +0.898990 0.313131 0.789868 +0.898990 0.323232 0.786348 +0.898990 0.333333 0.782828 +0.898990 0.343434 0.779308 +0.898990 0.353535 0.775788 +0.898990 0.363636 0.772268 +0.898990 0.373737 0.768748 +0.898990 0.383838 0.765228 +0.898990 0.393939 0.761708 +0.898990 0.404040 0.758188 +0.898990 0.414141 0.754668 +0.898990 0.424242 0.751148 +0.898990 0.434343 0.747628 +0.898990 0.444444 0.744108 +0.898990 0.454545 0.740588 +0.898990 0.464646 0.737068 +0.898990 0.474747 0.733548 +0.898990 0.484848 0.730028 +0.898990 0.494949 0.726507 +0.898990 0.505051 0.722987 +0.898990 0.515152 0.719467 +0.898990 0.525253 0.715947 +0.898990 0.535354 0.712427 +0.898990 0.545455 0.708907 +0.898990 0.555556 0.705387 +0.898990 0.565657 0.701867 +0.898990 0.575758 0.698347 +0.898990 0.585859 0.694827 +0.898990 0.595960 0.691307 +0.898990 0.606061 0.687787 +0.898990 0.616162 0.684267 +0.898990 0.626263 0.680747 +0.898990 0.636364 0.677227 +0.898990 0.646465 0.673707 +0.898990 0.656566 0.670187 +0.898990 0.666667 0.666667 +0.898990 0.676768 0.663147 +0.898990 0.686869 0.659627 +0.898990 0.696970 0.656107 +0.898990 0.707071 0.652586 +0.898990 0.717172 0.649066 +0.898990 0.727273 0.645546 +0.898990 0.737374 0.642026 +0.898990 0.747475 0.638506 +0.898990 0.757576 0.634986 +0.898990 0.767677 0.631466 +0.898990 0.777778 0.627946 +0.898990 0.787879 0.624426 +0.898990 0.797980 0.620906 +0.898990 0.808081 0.617386 +0.898990 0.818182 0.613866 +0.898990 0.828283 0.610346 +0.898990 0.838384 0.606826 +0.898990 0.848485 0.603306 +0.898990 0.858586 0.599786 +0.898990 0.868687 0.596266 +0.898990 0.878788 0.592746 +0.898990 0.888889 0.589226 +0.898990 0.898990 0.585706 +0.898990 0.909091 0.582185 +0.898990 0.919192 0.578665 +0.898990 0.929293 0.575145 +0.898990 0.939394 0.571625 +0.898990 0.949495 0.568105 +0.898990 0.959596 0.564585 +0.898990 0.969697 0.561065 +0.898990 0.979798 0.557545 +0.898990 0.989899 0.554025 +0.898990 1.000000 0.550505 + +0.909091 0.000000 0.909091 +0.909091 0.010101 0.905418 +0.909091 0.020202 0.901745 +0.909091 0.030303 0.898072 +0.909091 0.040404 0.894399 +0.909091 0.050505 0.890725 +0.909091 0.060606 0.887052 +0.909091 0.070707 0.883379 +0.909091 0.080808 0.879706 +0.909091 0.090909 0.876033 +0.909091 0.101010 0.872360 +0.909091 0.111111 0.868687 +0.909091 0.121212 0.865014 +0.909091 0.131313 0.861341 +0.909091 0.141414 0.857668 +0.909091 0.151515 0.853994 +0.909091 0.161616 0.850321 +0.909091 0.171717 0.846648 +0.909091 0.181818 0.842975 +0.909091 0.191919 0.839302 +0.909091 0.202020 0.835629 +0.909091 0.212121 0.831956 +0.909091 0.222222 0.828283 +0.909091 0.232323 0.824610 +0.909091 0.242424 0.820937 +0.909091 0.252525 0.817264 +0.909091 0.262626 0.813590 +0.909091 0.272727 0.809917 +0.909091 0.282828 0.806244 +0.909091 0.292929 0.802571 +0.909091 0.303030 0.798898 +0.909091 0.313131 0.795225 +0.909091 0.323232 0.791552 +0.909091 0.333333 0.787879 +0.909091 0.343434 0.784206 +0.909091 0.353535 0.780533 +0.909091 0.363636 0.776860 +0.909091 0.373737 0.773186 +0.909091 0.383838 0.769513 +0.909091 0.393939 0.765840 +0.909091 0.404040 0.762167 +0.909091 0.414141 0.758494 +0.909091 0.424242 0.754821 +0.909091 0.434343 0.751148 +0.909091 0.444444 0.747475 +0.909091 0.454545 0.743802 +0.909091 0.464646 0.740129 +0.909091 0.474747 0.736455 +0.909091 0.484848 0.732782 +0.909091 0.494949 0.729109 +0.909091 0.505051 0.725436 +0.909091 0.515152 0.721763 +0.909091 0.525253 0.718090 +0.909091 0.535354 0.714417 +0.909091 0.545455 0.710744 +0.909091 0.555556 0.707071 +0.909091 0.565657 0.703398 +0.909091 0.575758 0.699725 +0.909091 0.585859 0.696051 +0.909091 0.595960 0.692378 +0.909091 0.606061 0.688705 +0.909091 0.616162 0.685032 +0.909091 0.626263 0.681359 +0.909091 0.636364 0.677686 +0.909091 0.646465 0.674013 +0.909091 0.656566 0.670340 +0.909091 0.666667 0.666667 +0.909091 0.676768 0.662994 +0.909091 0.686869 0.659320 +0.909091 0.696970 0.655647 +0.909091 0.707071 0.651974 +0.909091 0.717172 0.648301 +0.909091 0.727273 0.644628 +0.909091 0.737374 0.640955 +0.909091 0.747475 0.637282 +0.909091 0.757576 0.633609 +0.909091 0.767677 0.629936 +0.909091 0.777778 0.626263 +0.909091 0.787879 0.622590 +0.909091 0.797980 0.618916 +0.909091 0.808081 0.615243 +0.909091 0.818182 0.611570 +0.909091 0.828283 0.607897 +0.909091 0.838384 0.604224 +0.909091 0.848485 0.600551 +0.909091 0.858586 0.596878 +0.909091 0.868687 0.593205 +0.909091 0.878788 0.589532 +0.909091 0.888889 0.585859 +0.909091 0.898990 0.582185 +0.909091 0.909091 0.578512 +0.909091 0.919192 0.574839 +0.909091 0.929293 0.571166 +0.909091 0.939394 0.567493 +0.909091 0.949495 0.563820 +0.909091 0.959596 0.560147 +0.909091 0.969697 0.556474 +0.909091 0.979798 0.552801 +0.909091 0.989899 0.549128 +0.909091 1.000000 0.545455 + +0.919192 0.000000 0.919192 +0.919192 0.010101 0.915366 +0.919192 0.020202 0.911540 +0.919192 0.030303 0.907713 +0.919192 0.040404 0.903887 +0.919192 0.050505 0.900061 +0.919192 0.060606 0.896235 +0.919192 0.070707 0.892409 +0.919192 0.080808 0.888583 +0.919192 0.090909 0.884757 +0.919192 0.101010 0.880931 +0.919192 0.111111 0.877104 +0.919192 0.121212 0.873278 +0.919192 0.131313 0.869452 +0.919192 0.141414 0.865626 +0.919192 0.151515 0.861800 +0.919192 0.161616 0.857974 +0.919192 0.171717 0.854148 +0.919192 0.181818 0.850321 +0.919192 0.191919 0.846495 +0.919192 0.202020 0.842669 +0.919192 0.212121 0.838843 +0.919192 0.222222 0.835017 +0.919192 0.232323 0.831191 +0.919192 0.242424 0.827365 +0.919192 0.252525 0.823538 +0.919192 0.262626 0.819712 +0.919192 0.272727 0.815886 +0.919192 0.282828 0.812060 +0.919192 0.292929 0.808234 +0.919192 0.303030 0.804408 +0.919192 0.313131 0.800582 +0.919192 0.323232 0.796755 +0.919192 0.333333 0.792929 +0.919192 0.343434 0.789103 +0.919192 0.353535 0.785277 +0.919192 0.363636 0.781451 +0.919192 0.373737 0.777625 +0.919192 0.383838 0.773799 +0.919192 0.393939 0.769972 +0.919192 0.404040 0.766146 +0.919192 0.414141 0.762320 +0.919192 0.424242 0.758494 +0.919192 0.434343 0.754668 +0.919192 0.444444 0.750842 +0.919192 0.454545 0.747016 +0.919192 0.464646 0.743189 +0.919192 0.474747 0.739363 +0.919192 0.484848 0.735537 +0.919192 0.494949 0.731711 +0.919192 0.505051 0.727885 +0.919192 0.515152 0.724059 +0.919192 0.525253 0.720233 +0.919192 0.535354 0.716406 +0.919192 0.545455 0.712580 +0.919192 0.555556 0.708754 +0.919192 0.565657 0.704928 +0.919192 0.575758 0.701102 +0.919192 0.585859 0.697276 +0.919192 0.595960 0.693450 +0.919192 0.606061 0.689624 +0.919192 0.616162 0.685797 +0.919192 0.626263 0.681971 +0.919192 0.636364 0.678145 +0.919192 0.646465 0.674319 +0.919192 0.656566 0.670493 +0.919192 0.666667 0.666667 +0.919192 0.676768 0.662841 +0.919192 0.686869 0.659014 +0.919192 0.696970 0.655188 +0.919192 0.707071 0.651362 +0.919192 0.717172 0.647536 +0.919192 0.727273 0.643710 +0.919192 0.737374 0.639884 +0.919192 0.747475 0.636058 +0.919192 0.757576 0.632231 +0.919192 0.767677 0.628405 +0.919192 0.777778 0.624579 +0.919192 0.787879 0.620753 +0.919192 0.797980 0.616927 +0.919192 0.808081 0.613101 +0.919192 0.818182 0.609275 +0.919192 0.828283 0.605448 +0.919192 0.838384 0.601622 +0.919192 0.848485 0.597796 +0.919192 0.858586 0.593970 +0.919192 0.868687 0.590144 +0.919192 0.878788 0.586318 +0.919192 0.888889 0.582492 +0.919192 0.898990 0.578665 +0.919192 0.909091 0.574839 +0.919192 0.919192 0.571013 +0.919192 0.929293 0.567187 +0.919192 0.939394 0.563361 +0.919192 0.949495 0.559535 +0.919192 0.959596 0.555709 +0.919192 0.969697 0.551882 +0.919192 0.979798 0.548056 +0.919192 0.989899 0.544230 +0.919192 1.000000 0.540404 + +0.929293 0.000000 0.929293 +0.929293 0.010101 0.925314 +0.929293 0.020202 0.921335 +0.929293 0.030303 0.917355 +0.929293 0.040404 0.913376 +0.929293 0.050505 0.909397 +0.929293 0.060606 0.905418 +0.929293 0.070707 0.901439 +0.929293 0.080808 0.897459 +0.929293 0.090909 0.893480 +0.929293 0.101010 0.889501 +0.929293 0.111111 0.885522 +0.929293 0.121212 0.881543 +0.929293 0.131313 0.877564 +0.929293 0.141414 0.873584 +0.929293 0.151515 0.869605 +0.929293 0.161616 0.865626 +0.929293 0.171717 0.861647 +0.929293 0.181818 0.857668 +0.929293 0.191919 0.853688 +0.929293 0.202020 0.849709 +0.929293 0.212121 0.845730 +0.929293 0.222222 0.841751 +0.929293 0.232323 0.837772 +0.929293 0.242424 0.833792 +0.929293 0.252525 0.829813 +0.929293 0.262626 0.825834 +0.929293 0.272727 0.821855 +0.929293 0.282828 0.817876 +0.929293 0.292929 0.813897 +0.929293 0.303030 0.809917 +0.929293 0.313131 0.805938 +0.929293 0.323232 0.801959 +0.929293 0.333333 0.797980 +0.929293 0.343434 0.794001 +0.929293 0.353535 0.790021 +0.929293 0.363636 0.786042 +0.929293 0.373737 0.782063 +0.929293 0.383838 0.778084 +0.929293 0.393939 0.774105 +0.929293 0.404040 0.770125 +0.929293 0.414141 0.766146 +0.929293 0.424242 0.762167 +0.929293 0.434343 0.758188 +0.929293 0.444444 0.754209 +0.929293 0.454545 0.750230 +0.929293 0.464646 0.746250 +0.929293 0.474747 0.742271 +0.929293 0.484848 0.738292 +0.929293 0.494949 0.734313 +0.929293 0.505051 0.730334 +0.929293 0.515152 0.726354 +0.929293 0.525253 0.722375 +0.929293 0.535354 0.718396 +0.929293 0.545455 0.714417 +0.929293 0.555556 0.710438 +0.929293 0.565657 0.706459 +0.929293 0.575758 0.702479 +0.929293 0.585859 0.698500 +0.929293 0.595960 0.694521 +0.929293 0.606061 0.690542 +0.929293 0.616162 0.686563 +0.929293 0.626263 0.682583 +0.929293 0.636364 0.678604 +0.929293 0.646465 0.674625 +0.929293 0.656566 0.670646 +0.929293 0.666667 0.666667 +0.929293 0.676768 0.662687 +0.929293 0.686869 0.658708 +0.929293 0.696970 0.654729 +0.929293 0.707071 0.650750 +0.929293 0.717172 0.646771 +0.929293 0.727273 0.642792 +0.929293 0.737374 0.638812 +0.929293 0.747475 0.634833 +0.929293 0.757576 0.630854 +0.929293 0.767677 0.626875 +0.929293 0.777778 0.622896 +0.929293 0.787879 0.618916 +0.929293 0.797980 0.614937 +0.929293 0.808081 0.610958 +0.929293 0.818182 0.606979 +0.929293 0.828283 0.603000 +0.929293 0.838384 0.599021 +0.929293 0.848485 0.595041 +0.929293 0.858586 0.591062 +0.929293 0.868687 0.587083 +0.929293 0.878788 0.583104 +0.929293 0.888889 0.579125 +0.929293 0.898990 0.575145 +0.929293 0.909091 0.571166 +0.929293 0.919192 0.567187 +0.929293 0.929293 0.563208 +0.929293 0.939394 0.559229 +0.929293 0.949495 0.555249 +0.929293 0.959596 0.551270 +0.929293 0.969697 0.547291 +0.929293 0.979798 0.543312 +0.929293 0.989899 0.539333 +0.929293 1.000000 0.535354 + +0.939394 0.000000 0.939394 +0.939394 0.010101 0.935262 +0.939394 0.020202 0.931129 +0.939394 0.030303 0.926997 +0.939394 0.040404 0.922865 +0.939394 0.050505 0.918733 +0.939394 0.060606 0.914601 +0.939394 0.070707 0.910468 +0.939394 0.080808 0.906336 +0.939394 0.090909 0.902204 +0.939394 0.101010 0.898072 +0.939394 0.111111 0.893939 +0.939394 0.121212 0.889807 +0.939394 0.131313 0.885675 +0.939394 0.141414 0.881543 +0.939394 0.151515 0.877410 +0.939394 0.161616 0.873278 +0.939394 0.171717 0.869146 +0.939394 0.181818 0.865014 +0.939394 0.191919 0.860882 +0.939394 0.202020 0.856749 +0.939394 0.212121 0.852617 +0.939394 0.222222 0.848485 +0.939394 0.232323 0.844353 +0.939394 0.242424 0.840220 +0.939394 0.252525 0.836088 +0.939394 0.262626 0.831956 +0.939394 0.272727 0.827824 +0.939394 0.282828 0.823691 +0.939394 0.292929 0.819559 +0.939394 0.303030 0.815427 +0.939394 0.313131 0.811295 +0.939394 0.323232 0.807163 +0.939394 0.333333 0.803030 +0.939394 0.343434 0.798898 +0.939394 0.353535 0.794766 +0.939394 0.363636 0.790634 +0.939394 0.373737 0.786501 +0.939394 0.383838 0.782369 +0.939394 0.393939 0.778237 +0.939394 0.404040 0.774105 +0.939394 0.414141 0.769972 +0.939394 0.424242 0.765840 +0.939394 0.434343 0.761708 +0.939394 0.444444 0.757576 +0.939394 0.454545 0.753444 +0.939394 0.464646 0.749311 +0.939394 0.474747 0.745179 +0.939394 0.484848 0.741047 +0.939394 0.494949 0.736915 +0.939394 0.505051 0.732782 +0.939394 0.515152 0.728650 +0.939394 0.525253 0.724518 +0.939394 0.535354 0.720386 +0.939394 0.545455 0.716253 +0.939394 0.555556 0.712121 +0.939394 0.565657 0.707989 +0.939394 0.575758 0.703857 +0.939394 0.585859 0.699725 +0.939394 0.595960 0.695592 +0.939394 0.606061 0.691460 +0.939394 0.616162 0.687328 +0.939394 0.626263 0.683196 +0.939394 0.636364 0.679063 +0.939394 0.646465 0.674931 +0.939394 0.656566 0.670799 +0.939394 0.666667 0.666667 +0.939394 0.676768 0.662534 +0.939394 0.686869 0.658402 +0.939394 0.696970 0.654270 +0.939394 0.707071 0.650138 +0.939394 0.717172 0.646006 +0.939394 0.727273 0.641873 +0.939394 0.737374 0.637741 +0.939394 0.747475 0.633609 +0.939394 0.757576 0.629477 +0.939394 0.767677 0.625344 +0.939394 0.777778 0.621212 +0.939394 0.787879 0.617080 +0.939394 0.797980 0.612948 +0.939394 0.808081 0.608815 +0.939394 0.818182 0.604683 +0.939394 0.828283 0.600551 +0.939394 0.838384 0.596419 +0.939394 0.848485 0.592287 +0.939394 0.858586 0.588154 +0.939394 0.868687 0.584022 +0.939394 0.878788 0.579890 +0.939394 0.888889 0.575758 +0.939394 0.898990 0.571625 +0.939394 0.909091 0.567493 +0.939394 0.919192 0.563361 +0.939394 0.929293 0.559229 +0.939394 0.939394 0.555096 +0.939394 0.949495 0.550964 +0.939394 0.959596 0.546832 +0.939394 0.969697 0.542700 +0.939394 0.979798 0.538567 +0.939394 0.989899 0.534435 +0.939394 1.000000 0.530303 + +0.949495 0.000000 0.949495 +0.949495 0.010101 0.945210 +0.949495 0.020202 0.940924 +0.949495 0.030303 0.936639 +0.949495 0.040404 0.932354 +0.949495 0.050505 0.928069 +0.949495 0.060606 0.923783 +0.949495 0.070707 0.919498 +0.949495 0.080808 0.915213 +0.949495 0.090909 0.910927 +0.949495 0.101010 0.906642 +0.949495 0.111111 0.902357 +0.949495 0.121212 0.898072 +0.949495 0.131313 0.893786 +0.949495 0.141414 0.889501 +0.949495 0.151515 0.885216 +0.949495 0.161616 0.880931 +0.949495 0.171717 0.876645 +0.949495 0.181818 0.872360 +0.949495 0.191919 0.868075 +0.949495 0.202020 0.863789 +0.949495 0.212121 0.859504 +0.949495 0.222222 0.855219 +0.949495 0.232323 0.850934 +0.949495 0.242424 0.846648 +0.949495 0.252525 0.842363 +0.949495 0.262626 0.838078 +0.949495 0.272727 0.833792 +0.949495 0.282828 0.829507 +0.949495 0.292929 0.825222 +0.949495 0.303030 0.820937 +0.949495 0.313131 0.816651 +0.949495 0.323232 0.812366 +0.949495 0.333333 0.808081 +0.949495 0.343434 0.803796 +0.949495 0.353535 0.799510 +0.949495 0.363636 0.795225 +0.949495 0.373737 0.790940 +0.949495 0.383838 0.786654 +0.949495 0.393939 0.782369 +0.949495 0.404040 0.778084 +0.949495 0.414141 0.773799 +0.949495 0.424242 0.769513 +0.949495 0.434343 0.765228 +0.949495 0.444444 0.760943 +0.949495 0.454545 0.756657 +0.949495 0.464646 0.752372 +0.949495 0.474747 0.748087 +0.949495 0.484848 0.743802 +0.949495 0.494949 0.739516 +0.949495 0.505051 0.735231 +0.949495 0.515152 0.730946 +0.949495 0.525253 0.726661 +0.949495 0.535354 0.722375 +0.949495 0.545455 0.718090 +0.949495 0.555556 0.713805 +0.949495 0.565657 0.709519 +0.949495 0.575758 0.705234 +0.949495 0.585859 0.700949 +0.949495 0.595960 0.696664 +0.949495 0.606061 0.692378 +0.949495 0.616162 0.688093 +0.949495 0.626263 0.683808 +0.949495 0.636364 0.679522 +0.949495 0.646465 0.675237 +0.949495 0.656566 0.670952 +0.949495 0.666667 0.666667 +0.949495 0.676768 0.662381 +0.949495 0.686869 0.658096 +0.949495 0.696970 0.653811 +0.949495 0.707071 0.649526 +0.949495 0.717172 0.645240 +0.949495 0.727273 0.640955 +0.949495 0.737374 0.636670 +0.949495 0.747475 0.632384 +0.949495 0.757576 0.628099 +0.949495 0.767677 0.623814 +0.949495 0.777778 0.619529 +0.949495 0.787879 0.615243 +0.949495 0.797980 0.610958 +0.949495 0.808081 0.606673 +0.949495 0.818182 0.602388 +0.949495 0.828283 0.598102 +0.949495 0.838384 0.593817 +0.949495 0.848485 0.589532 +0.949495 0.858586 0.585246 +0.949495 0.868687 0.580961 +0.949495 0.878788 0.576676 +0.949495 0.888889 0.572391 +0.949495 0.898990 0.568105 +0.949495 0.909091 0.563820 +0.949495 0.919192 0.559535 +0.949495 0.929293 0.555249 +0.949495 0.939394 0.550964 +0.949495 0.949495 0.546679 +0.949495 0.959596 0.542394 +0.949495 0.969697 0.538108 +0.949495 0.979798 0.533823 +0.949495 0.989899 0.529538 +0.949495 1.000000 0.525253 + +0.959596 0.000000 0.959596 +0.959596 0.010101 0.955158 +0.959596 0.020202 0.950719 +0.959596 0.030303 0.946281 +0.959596 0.040404 0.941843 +0.959596 0.050505 0.937404 +0.959596 0.060606 0.932966 +0.959596 0.070707 0.928528 +0.959596 0.080808 0.924089 +0.959596 0.090909 0.919651 +0.959596 0.101010 0.915213 +0.959596 0.111111 0.910774 +0.959596 0.121212 0.906336 +0.959596 0.131313 0.901898 +0.959596 0.141414 0.897459 +0.959596 0.151515 0.893021 +0.959596 0.161616 0.888583 +0.959596 0.171717 0.884144 +0.959596 0.181818 0.879706 +0.959596 0.191919 0.875268 +0.959596 0.202020 0.870830 +0.959596 0.212121 0.866391 +0.959596 0.222222 0.861953 +0.959596 0.232323 0.857515 +0.959596 0.242424 0.853076 +0.959596 0.252525 0.848638 +0.959596 0.262626 0.844200 +0.959596 0.272727 0.839761 +0.959596 0.282828 0.835323 +0.959596 0.292929 0.830885 +0.959596 0.303030 0.826446 +0.959596 0.313131 0.822008 +0.959596 0.323232 0.817570 +0.959596 0.333333 0.813131 +0.959596 0.343434 0.808693 +0.959596 0.353535 0.804255 +0.959596 0.363636 0.799816 +0.959596 0.373737 0.795378 +0.959596 0.383838 0.790940 +0.959596 0.393939 0.786501 +0.959596 0.404040 0.782063 +0.959596 0.414141 0.777625 +0.959596 0.424242 0.773186 +0.959596 0.434343 0.768748 +0.959596 0.444444 0.764310 +0.959596 0.454545 0.759871 +0.959596 0.464646 0.755433 +0.959596 0.474747 0.750995 +0.959596 0.484848 0.746556 +0.959596 0.494949 0.742118 +0.959596 0.505051 0.737680 +0.959596 0.515152 0.733242 +0.959596 0.525253 0.728803 +0.959596 0.535354 0.724365 +0.959596 0.545455 0.719927 +0.959596 0.555556 0.715488 +0.959596 0.565657 0.711050 +0.959596 0.575758 0.706612 +0.959596 0.585859 0.702173 +0.959596 0.595960 0.697735 +0.959596 0.606061 0.693297 +0.959596 0.616162 0.688858 +0.959596 0.626263 0.684420 +0.959596 0.636364 0.679982 +0.959596 0.646465 0.675543 +0.959596 0.656566 0.671105 +0.959596 0.666667 0.666667 +0.959596 0.676768 0.662228 +0.959596 0.686869 0.657790 +0.959596 0.696970 0.653352 +0.959596 0.707071 0.648913 +0.959596 0.717172 0.644475 +0.959596 0.727273 0.640037 +0.959596 0.737374 0.635598 +0.959596 0.747475 0.631160 +0.959596 0.757576 0.626722 +0.959596 0.767677 0.622283 +0.959596 0.777778 0.617845 +0.959596 0.787879 0.613407 +0.959596 0.797980 0.608968 +0.959596 0.808081 0.604530 +0.959596 0.818182 0.600092 +0.959596 0.828283 0.595654 +0.959596 0.838384 0.591215 +0.959596 0.848485 0.586777 +0.959596 0.858586 0.582339 +0.959596 0.868687 0.577900 +0.959596 0.878788 0.573462 +0.959596 0.888889 0.569024 +0.959596 0.898990 0.564585 +0.959596 0.909091 0.560147 +0.959596 0.919192 0.555709 +0.959596 0.929293 0.551270 +0.959596 0.939394 0.546832 +0.959596 0.949495 0.542394 +0.959596 0.959596 0.537955 +0.959596 0.969697 0.533517 +0.959596 0.979798 0.529079 +0.959596 0.989899 0.524640 +0.959596 1.000000 0.520202 + +0.969697 0.000000 0.969697 +0.969697 0.010101 0.965106 +0.969697 0.020202 0.960514 +0.969697 0.030303 0.955923 +0.969697 0.040404 0.951331 +0.969697 0.050505 0.946740 +0.969697 0.060606 0.942149 +0.969697 0.070707 0.937557 +0.969697 0.080808 0.932966 +0.969697 0.090909 0.928375 +0.969697 0.101010 0.923783 +0.969697 0.111111 0.919192 +0.969697 0.121212 0.914601 +0.969697 0.131313 0.910009 +0.969697 0.141414 0.905418 +0.969697 0.151515 0.900826 +0.969697 0.161616 0.896235 +0.969697 0.171717 0.891644 +0.969697 0.181818 0.887052 +0.969697 0.191919 0.882461 +0.969697 0.202020 0.877870 +0.969697 0.212121 0.873278 +0.969697 0.222222 0.868687 +0.969697 0.232323 0.864096 +0.969697 0.242424 0.859504 +0.969697 0.252525 0.854913 +0.969697 0.262626 0.850321 +0.969697 0.272727 0.845730 +0.969697 0.282828 0.841139 +0.969697 0.292929 0.836547 +0.969697 0.303030 0.831956 +0.969697 0.313131 0.827365 +0.969697 0.323232 0.822773 +0.969697 0.333333 0.818182 +0.969697 0.343434 0.813590 +0.969697 0.353535 0.808999 +0.969697 0.363636 0.804408 +0.969697 0.373737 0.799816 +0.969697 0.383838 0.795225 +0.969697 0.393939 0.790634 +0.969697 0.404040 0.786042 +0.969697 0.414141 0.781451 +0.969697 0.424242 0.776860 +0.969697 0.434343 0.772268 +0.969697 0.444444 0.767677 +0.969697 0.454545 0.763085 +0.969697 0.464646 0.758494 +0.969697 0.474747 0.753903 +0.969697 0.484848 0.749311 +0.969697 0.494949 0.744720 +0.969697 0.505051 0.740129 +0.969697 0.515152 0.735537 +0.969697 0.525253 0.730946 +0.969697 0.535354 0.726354 +0.969697 0.545455 0.721763 +0.969697 0.555556 0.717172 +0.969697 0.565657 0.712580 +0.969697 0.575758 0.707989 +0.969697 0.585859 0.703398 +0.969697 0.595960 0.698806 +0.969697 0.606061 0.694215 +0.969697 0.616162 0.689624 +0.969697 0.626263 0.685032 +0.969697 0.636364 0.680441 +0.969697 0.646465 0.675849 +0.969697 0.656566 0.671258 +0.969697 0.666667 0.666667 +0.969697 0.676768 0.662075 +0.969697 0.686869 0.657484 +0.969697 0.696970 0.652893 +0.969697 0.707071 0.648301 +0.969697 0.717172 0.643710 +0.969697 0.727273 0.639118 +0.969697 0.737374 0.634527 +0.969697 0.747475 0.629936 +0.969697 0.757576 0.625344 +0.969697 0.767677 0.620753 +0.969697 0.777778 0.616162 +0.969697 0.787879 0.611570 +0.969697 0.797980 0.606979 +0.969697 0.808081 0.602388 +0.969697 0.818182 0.597796 +0.969697 0.828283 0.593205 +0.969697 0.838384 0.588613 +0.969697 0.848485 0.584022 +0.969697 0.858586 0.579431 +0.969697 0.868687 0.574839 +0.969697 0.878788 0.570248 +0.969697 0.888889 0.565657 +0.969697 0.898990 0.561065 +0.969697 0.909091 0.556474 +0.969697 0.919192 0.551882 +0.969697 0.929293 0.547291 +0.969697 0.939394 0.542700 +0.969697 0.949495 0.538108 +0.969697 0.959596 0.533517 +0.969697 0.969697 0.528926 +0.969697 0.979798 0.524334 +0.969697 0.989899 0.519743 +0.969697 1.000000 0.515152 + +0.979798 0.000000 0.979798 +0.979798 0.010101 0.975054 +0.979798 0.020202 0.970309 +0.979798 0.030303 0.965565 +0.979798 0.040404 0.960820 +0.979798 0.050505 0.956076 +0.979798 0.060606 0.951331 +0.979798 0.070707 0.946587 +0.979798 0.080808 0.941843 +0.979798 0.090909 0.937098 +0.979798 0.101010 0.932354 +0.979798 0.111111 0.927609 +0.979798 0.121212 0.922865 +0.979798 0.131313 0.918121 +0.979798 0.141414 0.913376 +0.979798 0.151515 0.908632 +0.979798 0.161616 0.903887 +0.979798 0.171717 0.899143 +0.979798 0.181818 0.894399 +0.979798 0.191919 0.889654 +0.979798 0.202020 0.884910 +0.979798 0.212121 0.880165 +0.979798 0.222222 0.875421 +0.979798 0.232323 0.870676 +0.979798 0.242424 0.865932 +0.979798 0.252525 0.861188 +0.979798 0.262626 0.856443 +0.979798 0.272727 0.851699 +0.979798 0.282828 0.846954 +0.979798 0.292929 0.842210 +0.979798 0.303030 0.837466 +0.979798 0.313131 0.832721 +0.979798 0.323232 0.827977 +0.979798 0.333333 0.823232 +0.979798 0.343434 0.818488 +0.979798 0.353535 0.813743 +0.979798 0.363636 0.808999 +0.979798 0.373737 0.804255 +0.979798 0.383838 0.799510 +0.979798 0.393939 0.794766 +0.979798 0.404040 0.790021 +0.979798 0.414141 0.785277 +0.979798 0.424242 0.780533 +0.979798 0.434343 0.775788 +0.979798 0.444444 0.771044 +0.979798 0.454545 0.766299 +0.979798 0.464646 0.761555 +0.979798 0.474747 0.756811 +0.979798 0.484848 0.752066 +0.979798 0.494949 0.747322 +0.979798 0.505051 0.742577 +0.979798 0.515152 0.737833 +0.979798 0.525253 0.733088 +0.979798 0.535354 0.728344 +0.979798 0.545455 0.723600 +0.979798 0.555556 0.718855 +0.979798 0.565657 0.714111 +0.979798 0.575758 0.709366 +0.979798 0.585859 0.704622 +0.979798 0.595960 0.699878 +0.979798 0.606061 0.695133 +0.979798 0.616162 0.690389 +0.979798 0.626263 0.685644 +0.979798 0.636364 0.680900 +0.979798 0.646465 0.676155 +0.979798 0.656566 0.671411 +0.979798 0.666667 0.666667 +0.979798 0.676768 0.661922 +0.979798 0.686869 0.657178 +0.979798 0.696970 0.652433 +0.979798 0.707071 0.647689 +0.979798 0.717172 0.642945 +0.979798 0.727273 0.638200 +0.979798 0.737374 0.633456 +0.979798 0.747475 0.628711 +0.979798 0.757576 0.623967 +0.979798 0.767677 0.619223 +0.979798 0.777778 0.614478 +0.979798 0.787879 0.609734 +0.979798 0.797980 0.604989 +0.979798 0.808081 0.600245 +0.979798 0.818182 0.595500 +0.979798 0.828283 0.590756 +0.979798 0.838384 0.586012 +0.979798 0.848485 0.581267 +0.979798 0.858586 0.576523 +0.979798 0.868687 0.571778 +0.979798 0.878788 0.567034 +0.979798 0.888889 0.562290 +0.979798 0.898990 0.557545 +0.979798 0.909091 0.552801 +0.979798 0.919192 0.548056 +0.979798 0.929293 0.543312 +0.979798 0.939394 0.538567 +0.979798 0.949495 0.533823 +0.979798 0.959596 0.529079 +0.979798 0.969697 0.524334 +0.979798 0.979798 0.519590 +0.979798 0.989899 0.514845 +0.979798 1.000000 0.510101 + +0.989899 0.000000 0.989899 +0.989899 0.010101 0.985002 +0.989899 0.020202 0.980104 +0.989899 0.030303 0.975207 +0.989899 0.040404 0.970309 +0.989899 0.050505 0.965412 +0.989899 0.060606 0.960514 +0.989899 0.070707 0.955617 +0.989899 0.080808 0.950719 +0.989899 0.090909 0.945822 +0.989899 0.101010 0.940924 +0.989899 0.111111 0.936027 +0.989899 0.121212 0.931129 +0.989899 0.131313 0.926232 +0.989899 0.141414 0.921335 +0.989899 0.151515 0.916437 +0.989899 0.161616 0.911540 +0.989899 0.171717 0.906642 +0.989899 0.181818 0.901745 +0.989899 0.191919 0.896847 +0.989899 0.202020 0.891950 +0.989899 0.212121 0.887052 +0.989899 0.222222 0.882155 +0.989899 0.232323 0.877257 +0.989899 0.242424 0.872360 +0.989899 0.252525 0.867463 +0.989899 0.262626 0.862565 +0.989899 0.272727 0.857668 +0.989899 0.282828 0.852770 +0.989899 0.292929 0.847873 +0.989899 0.303030 0.842975 +0.989899 0.313131 0.838078 +0.989899 0.323232 0.833180 +0.989899 0.333333 0.828283 +0.989899 0.343434 0.823385 +0.989899 0.353535 0.818488 +0.989899 0.363636 0.813590 +0.989899 0.373737 0.808693 +0.989899 0.383838 0.803796 +0.989899 0.393939 0.798898 +0.989899 0.404040 0.794001 +0.989899 0.414141 0.789103 +0.989899 0.424242 0.784206 +0.989899 0.434343 0.779308 +0.989899 0.444444 0.774411 +0.989899 0.454545 0.769513 +0.989899 0.464646 0.764616 +0.989899 0.474747 0.759718 +0.989899 0.484848 0.754821 +0.989899 0.494949 0.749923 +0.989899 0.505051 0.745026 +0.989899 0.515152 0.740129 +0.989899 0.525253 0.735231 +0.989899 0.535354 0.730334 +0.989899 0.545455 0.725436 +0.989899 0.555556 0.720539 +0.989899 0.565657 0.715641 +0.989899 0.575758 0.710744 +0.989899 0.585859 0.705846 +0.989899 0.595960 0.700949 +0.989899 0.606061 0.696051 +0.989899 0.616162 0.691154 +0.989899 0.626263 0.686257 +0.989899 0.636364 0.681359 +0.989899 0.646465 0.676462 +0.989899 0.656566 0.671564 +0.989899 0.666667 0.666667 +0.989899 0.676768 0.661769 +0.989899 0.686869 0.656872 +0.989899 0.696970 0.651974 +0.989899 0.707071 0.647077 +0.989899 0.717172 0.642179 +0.989899 0.727273 0.637282 +0.989899 0.737374 0.632384 +0.989899 0.747475 0.627487 +0.989899 0.757576 0.622590 +0.989899 0.767677 0.617692 +0.989899 0.777778 0.612795 +0.989899 0.787879 0.607897 +0.989899 0.797980 0.603000 +0.989899 0.808081 0.598102 +0.989899 0.818182 0.593205 +0.989899 0.828283 0.588307 +0.989899 0.838384 0.583410 +0.989899 0.848485 0.578512 +0.989899 0.858586 0.573615 +0.989899 0.868687 0.568717 +0.989899 0.878788 0.563820 +0.989899 0.888889 0.558923 +0.989899 0.898990 0.554025 +0.989899 0.909091 0.549128 +0.989899 0.919192 0.544230 +0.989899 0.929293 0.539333 +0.989899 0.939394 0.534435 +0.989899 0.949495 0.529538 +0.989899 0.959596 0.524640 +0.989899 0.969697 0.519743 +0.989899 0.979798 0.514845 +0.989899 0.989899 0.509948 +0.989899 1.000000 0.505051 + +1.000000 0.000000 1.000000 +1.000000 0.010101 0.994949 +1.000000 0.020202 0.989899 +1.000000 0.030303 0.984848 +1.000000 0.040404 0.979798 +1.000000 0.050505 0.974747 +1.000000 0.060606 0.969697 +1.000000 0.070707 0.964646 +1.000000 0.080808 0.959596 +1.000000 0.090909 0.954545 +1.000000 0.101010 0.949495 +1.000000 0.111111 0.944444 +1.000000 0.121212 0.939394 +1.000000 0.131313 0.934343 +1.000000 0.141414 0.929293 +1.000000 0.151515 0.924242 +1.000000 0.161616 0.919192 +1.000000 0.171717 0.914141 +1.000000 0.181818 0.909091 +1.000000 0.191919 0.904040 +1.000000 0.202020 0.898990 +1.000000 0.212121 0.893939 +1.000000 0.222222 0.888889 +1.000000 0.232323 0.883838 +1.000000 0.242424 0.878788 +1.000000 0.252525 0.873737 +1.000000 0.262626 0.868687 +1.000000 0.272727 0.863636 +1.000000 0.282828 0.858586 +1.000000 0.292929 0.853535 +1.000000 0.303030 0.848485 +1.000000 0.313131 0.843434 +1.000000 0.323232 0.838384 +1.000000 0.333333 0.833333 +1.000000 0.343434 0.828283 +1.000000 0.353535 0.823232 +1.000000 0.363636 0.818182 +1.000000 0.373737 0.813131 +1.000000 0.383838 0.808081 +1.000000 0.393939 0.803030 +1.000000 0.404040 0.797980 +1.000000 0.414141 0.792929 +1.000000 0.424242 0.787879 +1.000000 0.434343 0.782828 +1.000000 0.444444 0.777778 +1.000000 0.454545 0.772727 +1.000000 0.464646 0.767677 +1.000000 0.474747 0.762626 +1.000000 0.484848 0.757576 +1.000000 0.494949 0.752525 +1.000000 0.505051 0.747475 +1.000000 0.515152 0.742424 +1.000000 0.525253 0.737374 +1.000000 0.535354 0.732323 +1.000000 0.545455 0.727273 +1.000000 0.555556 0.722222 +1.000000 0.565657 0.717172 +1.000000 0.575758 0.712121 +1.000000 0.585859 0.707071 +1.000000 0.595960 0.702020 +1.000000 0.606061 0.696970 +1.000000 0.616162 0.691919 +1.000000 0.626263 0.686869 +1.000000 0.636364 0.681818 +1.000000 0.646465 0.676768 +1.000000 0.656566 0.671717 +1.000000 0.666667 0.666667 +1.000000 0.676768 0.661616 +1.000000 0.686869 0.656566 +1.000000 0.696970 0.651515 +1.000000 0.707071 0.646465 +1.000000 0.717172 0.641414 +1.000000 0.727273 0.636364 +1.000000 0.737374 0.631313 +1.000000 0.747475 0.626263 +1.000000 0.757576 0.621212 +1.000000 0.767677 0.616162 +1.000000 0.777778 0.611111 +1.000000 0.787879 0.606061 +1.000000 0.797980 0.601010 +1.000000 0.808081 0.595960 +1.000000 0.818182 0.590909 +1.000000 0.828283 0.585859 +1.000000 0.838384 0.580808 +1.000000 0.848485 0.575758 +1.000000 0.858586 0.570707 +1.000000 0.868687 0.565657 +1.000000 0.878788 0.560606 +1.000000 0.888889 0.555556 +1.000000 0.898990 0.550505 +1.000000 0.909091 0.545455 +1.000000 0.919192 0.540404 +1.000000 0.929293 0.535354 +1.000000 0.939394 0.530303 +1.000000 0.949495 0.525253 +1.000000 0.959596 0.520202 +1.000000 0.969697 0.515152 +1.000000 0.979798 0.510101 +1.000000 0.989899 0.505051 +1.000000 1.000000 0.500000 + diff -Nru gsl-doc-1.16/doc/examples/interp_compare.c gsl-doc-2.3/doc/examples/interp_compare.c --- gsl-doc-1.16/doc/examples/interp_compare.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/interp_compare.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,53 @@ +#include +#include +#include + +#include +#include + +int +main(void) +{ + size_t i; + const size_t N = 9; + + /* this dataset is taken from + * J. M. Hyman, Accurate Monotonicity preserving cubic interpolation, + * SIAM J. Sci. Stat. Comput. 4, 4, 1983. */ + const double x[] = { 7.99, 8.09, 8.19, 8.7, 9.2, + 10.0, 12.0, 15.0, 20.0 }; + const double y[] = { 0.0, 2.76429e-5, 4.37498e-2, + 0.169183, 0.469428, 0.943740, + 0.998636, 0.999919, 0.999994 }; + + gsl_interp_accel *acc = gsl_interp_accel_alloc(); + gsl_spline *spline_cubic = gsl_spline_alloc(gsl_interp_cspline, N); + gsl_spline *spline_akima = gsl_spline_alloc(gsl_interp_akima, N); + gsl_spline *spline_steffen = gsl_spline_alloc(gsl_interp_steffen, N); + + gsl_spline_init(spline_cubic, x, y, N); + gsl_spline_init(spline_akima, x, y, N); + gsl_spline_init(spline_steffen, x, y, N); + + for (i = 0; i < N; ++i) + printf("%g %g\n", x[i], y[i]); + + printf("\n\n"); + + for (i = 0; i <= 100; ++i) + { + double xi = (1 - i / 100.0) * x[0] + (i / 100.0) * x[N-1]; + double yi_cubic = gsl_spline_eval(spline_cubic, xi, acc); + double yi_akima = gsl_spline_eval(spline_akima, xi, acc); + double yi_steffen = gsl_spline_eval(spline_steffen, xi, acc); + + printf("%g %g %g %g\n", xi, yi_cubic, yi_akima, yi_steffen); + } + + gsl_spline_free(spline_cubic); + gsl_spline_free(spline_akima); + gsl_spline_free(spline_steffen); + gsl_interp_accel_free(acc); + + return 0; +} diff -Nru gsl-doc-1.16/doc/examples/interp_compare.txt gsl-doc-2.3/doc/examples/interp_compare.txt --- gsl-doc-1.16/doc/examples/interp_compare.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/interp_compare.txt 2015-11-09 05:23:40.000000000 +0000 @@ -0,0 +1,112 @@ +7.99 0 +8.09 2.76429e-05 +8.19 0.0437498 +8.7 0.169183 +9.2 0.469428 +10 0.94374 +12 0.998636 +15 0.999919 +20 0.999994 + + +7.99 0 0 0 +8.1101 0.00610446 0.00744955 0.00331374 +8.2302 0.0614194 0.0555643 0.0585695 +8.3503 0.0977872 0.077852 0.0890428 +8.4704 0.119747 0.0939162 0.109376 +8.5905 0.140403 0.120807 0.133115 +8.7106 0.172856 0.175411 0.173766 +8.8307 0.226073 0.246775 0.235226 +8.9508 0.296298 0.319125 0.309035 +9.0709 0.377336 0.391778 0.387772 +9.191 0.462995 0.464047 0.464021 +9.3111 0.54776 0.537332 0.542831 +9.4312 0.629514 0.612947 0.632609 +9.5513 0.707207 0.688966 0.724776 +9.6714 0.779786 0.76345 0.810671 +9.7915 0.846198 0.834458 0.881632 +9.9116 0.905394 0.900051 0.928998 +10.0317 0.956324 0.958173 0.945466 +10.1518 0.998494 1.0054 0.951748 +10.2719 1.03243 1.04165 0.957624 +10.392 1.05878 1.06799 0.963098 +10.5121 1.07819 1.08551 0.96817 +10.6322 1.0913 1.09528 0.972843 +10.7523 1.09875 1.09837 0.97712 +10.8724 1.10119 1.09586 0.981003 +10.9925 1.09925 1.08883 0.984493 +11.1126 1.09359 1.07836 0.987594 +11.2327 1.08484 1.06552 0.990307 +11.3528 1.07366 1.05138 0.992634 +11.4729 1.06067 1.03704 0.994578 +11.593 1.04654 1.02355 0.996142 +11.7131 1.03189 1.012 0.997326 +11.8332 1.01737 1.00347 0.998134 +11.9533 1.00363 0.999027 0.998568 +12.0734 0.991283 0.998669 0.998698 +12.1935 0.980549 0.998727 0.998796 +12.3136 0.971356 0.998787 0.998889 +12.4337 0.963625 0.99885 0.998979 +12.5538 0.957277 0.998914 0.999063 +12.6739 0.952232 0.99898 0.999144 +12.794 0.94841 0.999047 0.999221 +12.9141 0.945733 0.999114 0.999293 +13.0342 0.944121 0.999182 0.999361 +13.1543 0.943493 0.999249 0.999425 +13.2744 0.943772 0.999316 0.999485 +13.3945 0.944877 0.999381 0.999541 +13.5146 0.946729 0.999445 0.999593 +13.6347 0.949248 0.999507 0.999641 +13.7548 0.952355 0.999566 0.999685 +13.8749 0.955971 0.999622 0.999725 +13.995 0.960016 0.999674 0.999762 +14.1151 0.964411 0.999723 0.999794 +14.2352 0.969075 0.999767 0.999823 +14.3553 0.973931 0.999807 0.999848 +14.4754 0.978897 0.999841 0.999869 +14.5955 0.983896 0.99987 0.999887 +14.7156 0.988847 0.999893 0.9999 +14.8357 0.99367 0.999909 0.999911 +14.9558 0.998288 0.999918 0.999917 +15.0759 1.00262 0.999921 0.999921 +15.196 1.00665 0.999925 0.999925 +15.3161 1.01037 0.999929 0.999928 +15.4362 1.0138 0.999935 0.999931 +15.5563 1.01694 0.999941 0.999934 +15.6764 1.01979 0.999949 0.999937 +15.7965 1.02238 0.999956 0.999939 +15.9166 1.0247 0.999965 0.999942 +16.0367 1.02677 0.999974 0.999944 +16.1568 1.02858 0.999983 0.999947 +16.2769 1.03015 0.999993 0.999949 +16.397 1.03149 1 0.999951 +16.5171 1.0326 1.00001 0.999953 +16.6372 1.03349 1.00002 0.999955 +16.7573 1.03417 1.00003 0.999956 +16.8774 1.03464 1.00004 0.999958 +16.9975 1.03492 1.00005 0.99996 +17.1176 1.035 1.00006 0.999961 +17.2377 1.03491 1.00007 0.999963 +17.3578 1.03464 1.00008 0.999964 +17.4779 1.03421 1.00009 0.999966 +17.598 1.03361 1.0001 0.999967 +17.7181 1.03287 1.0001 0.999968 +17.8382 1.03198 1.00011 0.99997 +17.9583 1.03095 1.00011 0.999971 +18.0784 1.0298 1.00012 0.999972 +18.1985 1.02852 1.00012 0.999973 +18.3186 1.02713 1.00012 0.999974 +18.4387 1.02563 1.00013 0.999976 +18.5588 1.02404 1.00012 0.999977 +18.6789 1.02236 1.00012 0.999978 +18.799 1.02059 1.00012 0.999979 +18.9191 1.01875 1.00012 0.999981 +19.0392 1.01683 1.00011 0.999982 +19.1593 1.01486 1.0001 0.999983 +19.2794 1.01284 1.00009 0.999985 +19.3995 1.01076 1.00008 0.999986 +19.5196 1.00866 1.00007 0.999987 +19.6397 1.00652 1.00005 0.999989 +19.7598 1.00436 1.00004 0.999991 +19.8799 1.00218 1.00002 0.999992 +20 0.999994 0.999994 0.999994 diff -Nru gsl-doc-1.16/doc/examples/interpp.txt gsl-doc-2.3/doc/examples/interpp.txt --- gsl-doc-1.16/doc/examples/interpp.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/interpp.txt 2015-11-10 18:47:31.000000000 +0000 @@ -0,0 +1,107 @@ +#m=0,S=5 +0 0.15 +0.1 0.7 +0.27 -0.1 +0.3 0.15 +#m=1,S=0 +0 0.15 +0.003 0.178463 +0.006 0.206683 +0.009 0.234613 +0.012 0.262204 +0.015 0.28941 +0.018 0.316182 +0.021 0.342474 +0.024 0.368236 +0.027 0.393423 +0.03 0.417986 +0.033 0.441878 +0.036 0.465051 +0.039 0.487458 +0.042 0.50905 +0.045 0.529781 +0.048 0.549603 +0.051 0.568468 +0.054 0.586329 +0.057 0.603138 +0.06 0.618847 +0.063 0.633409 +0.066 0.646777 +0.069 0.658902 +0.072 0.669737 +0.075 0.679235 +0.078 0.687348 +0.081 0.694029 +0.084 0.699229 +0.087 0.702901 +0.09 0.704998 +0.093 0.705472 +0.096 0.704276 +0.099 0.701362 +0.102 0.696687 +0.105 0.690283 +0.108 0.682225 +0.111 0.672587 +0.114 0.661448 +0.117 0.648882 +0.12 0.634965 +0.123 0.619775 +0.126 0.603387 +0.129 0.585877 +0.132 0.567321 +0.135 0.547796 +0.138 0.527377 +0.141 0.506141 +0.144 0.484164 +0.147 0.461522 +0.15 0.43829 +0.153 0.414546 +0.156 0.390366 +0.159 0.365824 +0.162 0.340999 +0.165 0.315964 +0.168 0.290798 +0.171 0.265576 +0.174 0.240373 +0.177 0.215267 +0.18 0.190333 +0.183 0.165648 +0.186 0.141287 +0.189 0.117326 +0.192 0.0938429 +0.195 0.0709122 +0.198 0.0486106 +0.201 0.0270141 +0.204 0.00619895 +0.207 -0.0137588 +0.21 -0.0327831 +0.213 -0.0507978 +0.216 -0.0677266 +0.219 -0.0834936 +0.222 -0.0980226 +0.225 -0.111237 +0.228 -0.123062 +0.231 -0.13342 +0.234 -0.142236 +0.237 -0.149433 +0.24 -0.154935 +0.243 -0.158667 +0.246 -0.160551 +0.249 -0.160512 +0.252 -0.158475 +0.255 -0.154361 +0.258 -0.148096 +0.261 -0.139604 +0.264 -0.128808 +0.267 -0.115632 +0.27 -0.1 +0.273 -0.0818941 +0.276 -0.0615288 +0.279 -0.0391769 +0.282 -0.0151111 +0.285 0.0103957 +0.288 0.0370709 +0.291 0.0646417 +0.294 0.0928353 +0.297 0.121379 +0.3 0.15 diff -Nru gsl-doc-1.16/doc/examples/interp.txt gsl-doc-2.3/doc/examples/interp.txt --- gsl-doc-1.16/doc/examples/interp.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/interp.txt 2015-11-10 18:44:58.000000000 +0000 @@ -0,0 +1,933 @@ +#m=0,S=2 +0 1 +1.42074 1.5403 +2.45465 1.34636 +3.07056 2.08887 +3.6216 3.04234 +4.52054 5.9912 +5.86029 5.87204 +7.32849 7.30059 +8.49468 8.39186 +9.20606 9.77669 +#m=1,S=0 +0 1 +0.01 1.00699 +0.02 1.01397 +0.03 1.02096 +0.04 1.02794 +0.05 1.03492 +0.06 1.04189 +0.07 1.04886 +0.08 1.05582 +0.09 1.06278 +0.1 1.06972 +0.11 1.07666 +0.12 1.08358 +0.13 1.0905 +0.14 1.0974 +0.15 1.10429 +0.16 1.11116 +0.17 1.11802 +0.18 1.12487 +0.19 1.13169 +0.2 1.1385 +0.21 1.14529 +0.22 1.15206 +0.23 1.15881 +0.24 1.16553 +0.25 1.17224 +0.26 1.17892 +0.27 1.18557 +0.28 1.1922 +0.29 1.19881 +0.3 1.20538 +0.31 1.21193 +0.32 1.21845 +0.33 1.22494 +0.34 1.23139 +0.35 1.23782 +0.36 1.24421 +0.37 1.25057 +0.38 1.25689 +0.39 1.26317 +0.4 1.26942 +0.41 1.27564 +0.42 1.28181 +0.43 1.28794 +0.44 1.29403 +0.45 1.30008 +0.46 1.30609 +0.47 1.31206 +0.48 1.31798 +0.49 1.32385 +0.5 1.32968 +0.51 1.33546 +0.52 1.34119 +0.53 1.34688 +0.54 1.35251 +0.55 1.35809 +0.56 1.36362 +0.57 1.3691 +0.58 1.37452 +0.59 1.37989 +0.6 1.3852 +0.61 1.39046 +0.62 1.39565 +0.63 1.40079 +0.64 1.40587 +0.65 1.41089 +0.66 1.41585 +0.67 1.42074 +0.68 1.42557 +0.69 1.43034 +0.7 1.43504 +0.71 1.43968 +0.72 1.44424 +0.73 1.44874 +0.74 1.45317 +0.75 1.45754 +0.76 1.46182 +0.77 1.46604 +0.78 1.47019 +0.79 1.47426 +0.8 1.47825 +0.81 1.48217 +0.82 1.48602 +0.83 1.48978 +0.84 1.49347 +0.85 1.49708 +0.86 1.50061 +0.87 1.50405 +0.88 1.50742 +0.89 1.5107 +0.9 1.51389 +0.91 1.517 +0.92 1.52003 +0.93 1.52297 +0.94 1.52582 +0.95 1.52858 +0.96 1.53125 +0.97 1.53383 +0.98 1.53631 +0.99 1.53871 +1 1.54101 +1.01 1.54322 +1.02 1.54533 +1.03 1.54734 +1.04 1.54926 +1.05 1.55108 +1.06 1.5528 +1.07 1.55442 +1.08 1.55593 +1.09 1.55735 +1.1 1.55866 +1.11 1.55987 +1.12 1.56097 +1.13 1.56197 +1.14 1.56286 +1.15 1.56364 +1.16 1.56431 +1.17 1.56488 +1.18 1.56533 +1.19 1.56567 +1.2 1.5659 +1.21 1.56601 +1.22 1.56601 +1.23 1.5659 +1.24 1.56566 +1.25 1.56531 +1.26 1.56485 +1.27 1.56426 +1.28 1.56355 +1.29 1.56272 +1.3 1.56177 +1.31 1.5607 +1.32 1.5595 +1.33 1.55818 +1.34 1.55673 +1.35 1.55515 +1.36 1.55345 +1.37 1.55162 +1.38 1.54965 +1.39 1.54756 +1.4 1.54534 +1.41 1.54298 +1.42 1.54049 +1.43 1.53787 +1.44 1.53511 +1.45 1.53223 +1.46 1.52923 +1.47 1.52611 +1.48 1.52287 +1.49 1.51953 +1.5 1.51608 +1.51 1.51254 +1.52 1.50889 +1.53 1.50516 +1.54 1.50133 +1.55 1.49742 +1.56 1.49344 +1.57 1.48938 +1.58 1.48525 +1.59 1.48105 +1.6 1.47679 +1.61 1.47247 +1.62 1.4681 +1.63 1.46368 +1.64 1.45922 +1.65 1.45471 +1.66 1.45017 +1.67 1.4456 +1.68 1.441 +1.69 1.43638 +1.7 1.43173 +1.71 1.42708 +1.72 1.42241 +1.73 1.41774 +1.74 1.41306 +1.75 1.40839 +1.76 1.40372 +1.77 1.39907 +1.78 1.39443 +1.79 1.38981 +1.8 1.38521 +1.81 1.38064 +1.82 1.37611 +1.83 1.37161 +1.84 1.36715 +1.85 1.36274 +1.86 1.35838 +1.87 1.35407 +1.88 1.34982 +1.89 1.34563 +1.9 1.34151 +1.91 1.33746 +1.92 1.33349 +1.93 1.32959 +1.94 1.32578 +1.95 1.32206 +1.96 1.31843 +1.97 1.3149 +1.98 1.31147 +1.99 1.30814 +2 1.30493 +2.01 1.30182 +2.02 1.29884 +2.03 1.29598 +2.04 1.29325 +2.05 1.29064 +2.06 1.28817 +2.07 1.28585 +2.08 1.28366 +2.09 1.28163 +2.1 1.27975 +2.11 1.27802 +2.12 1.27646 +2.13 1.27506 +2.14 1.27383 +2.15 1.27277 +2.16 1.2719 +2.17 1.2712 +2.18 1.2707 +2.19 1.27038 +2.2 1.27026 +2.21 1.27034 +2.22 1.27063 +2.23 1.27112 +2.24 1.27183 +2.25 1.27275 +2.26 1.27389 +2.27 1.27526 +2.28 1.27686 +2.29 1.27869 +2.3 1.28077 +2.31 1.28308 +2.32 1.28564 +2.33 1.28846 +2.34 1.29153 +2.35 1.29486 +2.36 1.29845 +2.37 1.30231 +2.38 1.30644 +2.39 1.31086 +2.4 1.31555 +2.41 1.32053 +2.42 1.3258 +2.43 1.33136 +2.44 1.33722 +2.45 1.34339 +2.46 1.34986 +2.47 1.35663 +2.48 1.36371 +2.49 1.37108 +2.5 1.37874 +2.51 1.38668 +2.52 1.39489 +2.53 1.40337 +2.54 1.41212 +2.55 1.42112 +2.56 1.43037 +2.57 1.43986 +2.58 1.44959 +2.59 1.45955 +2.6 1.46974 +2.61 1.48015 +2.62 1.49077 +2.63 1.50159 +2.64 1.51262 +2.65 1.52384 +2.66 1.53525 +2.67 1.54684 +2.68 1.5586 +2.69 1.57054 +2.7 1.58263 +2.71 1.59489 +2.72 1.60729 +2.73 1.61984 +2.74 1.63253 +2.75 1.64535 +2.76 1.65829 +2.77 1.67136 +2.78 1.68454 +2.79 1.69782 +2.8 1.71121 +2.81 1.72469 +2.82 1.73826 +2.83 1.75191 +2.84 1.76564 +2.85 1.77943 +2.86 1.7933 +2.87 1.80722 +2.88 1.82119 +2.89 1.8352 +2.9 1.84925 +2.91 1.86334 +2.92 1.87745 +2.93 1.89159 +2.94 1.90573 +2.95 1.91989 +2.96 1.93405 +2.97 1.9482 +2.98 1.96234 +2.99 1.97646 +3 1.99057 +3.01 2.00464 +3.02 2.01867 +3.03 2.03267 +3.04 2.04661 +3.05 2.06051 +3.06 2.07434 +3.07 2.0881 +3.08 2.1018 +3.09 2.11543 +3.1 2.12901 +3.11 2.14254 +3.12 2.15605 +3.13 2.16954 +3.14 2.18303 +3.15 2.19651 +3.16 2.21002 +3.17 2.22354 +3.18 2.23711 +3.19 2.25072 +3.2 2.26439 +3.21 2.27813 +3.22 2.29195 +3.23 2.30586 +3.24 2.31988 +3.25 2.33401 +3.26 2.34826 +3.27 2.36266 +3.28 2.37719 +3.29 2.39189 +3.3 2.40676 +3.31 2.42181 +3.32 2.43704 +3.33 2.45249 +3.34 2.46814 +3.35 2.48402 +3.36 2.50014 +3.37 2.5165 +3.38 2.53312 +3.39 2.55001 +3.4 2.56718 +3.41 2.58464 +3.42 2.6024 +3.43 2.62047 +3.44 2.63887 +3.45 2.65761 +3.46 2.67669 +3.47 2.69613 +3.48 2.71593 +3.49 2.73612 +3.5 2.7567 +3.51 2.77768 +3.52 2.79907 +3.53 2.82088 +3.54 2.84313 +3.55 2.86583 +3.56 2.88898 +3.57 2.9126 +3.58 2.9367 +3.59 2.96129 +3.6 2.98638 +3.61 3.01199 +3.62 3.03811 +3.63 3.06477 +3.64 3.09196 +3.65 3.11965 +3.66 3.14785 +3.67 3.17653 +3.68 3.20568 +3.69 3.23529 +3.7 3.26534 +3.71 3.29583 +3.72 3.32674 +3.73 3.35806 +3.74 3.38977 +3.75 3.42185 +3.76 3.45431 +3.77 3.48712 +3.78 3.52026 +3.79 3.55374 +3.8 3.58753 +3.81 3.62162 +3.82 3.656 +3.83 3.69065 +3.84 3.72556 +3.85 3.76072 +3.86 3.79612 +3.87 3.83174 +3.88 3.86756 +3.89 3.90358 +3.9 3.93979 +3.91 3.97616 +3.92 4.01269 +3.93 4.04936 +3.94 4.08616 +3.95 4.12307 +3.96 4.16009 +3.97 4.1972 +3.98 4.23438 +3.99 4.27163 +4 4.30892 +4.01 4.34626 +4.02 4.38361 +4.03 4.42098 +4.04 4.45835 +4.05 4.4957 +4.06 4.53302 +4.07 4.5703 +4.08 4.60752 +4.09 4.64467 +4.1 4.68174 +4.11 4.71872 +4.12 4.75559 +4.13 4.79233 +4.14 4.82895 +4.15 4.86541 +4.16 4.90171 +4.17 4.93784 +4.18 4.97378 +4.19 5.00953 +4.2 5.04505 +4.21 5.08035 +4.22 5.11541 +4.23 5.15022 +4.24 5.18476 +4.25 5.21902 +4.26 5.25299 +4.27 5.28665 +4.28 5.31999 +4.29 5.353 +4.3 5.38566 +4.31 5.41796 +4.32 5.44989 +4.33 5.48144 +4.34 5.51259 +4.35 5.54332 +4.36 5.57364 +4.37 5.60351 +4.38 5.63293 +4.39 5.66189 +4.4 5.69037 +4.41 5.71835 +4.42 5.74584 +4.43 5.77281 +4.44 5.79924 +4.45 5.82514 +4.46 5.85047 +4.47 5.87524 +4.48 5.89942 +4.49 5.92301 +4.5 5.94598 +4.51 5.96834 +4.52 5.99005 +4.53 6.01112 +4.54 6.03155 +4.55 6.05134 +4.56 6.07051 +4.57 6.08905 +4.58 6.10697 +4.59 6.12429 +4.6 6.14101 +4.61 6.15713 +4.62 6.17267 +4.63 6.18763 +4.64 6.20202 +4.65 6.21584 +4.66 6.22911 +4.67 6.24182 +4.68 6.25399 +4.69 6.26562 +4.7 6.27673 +4.71 6.28731 +4.72 6.29738 +4.73 6.30693 +4.74 6.31599 +4.75 6.32456 +4.76 6.33263 +4.77 6.34023 +4.78 6.34736 +4.79 6.35402 +4.8 6.36022 +4.81 6.36597 +4.82 6.37128 +4.83 6.37615 +4.84 6.38059 +4.85 6.38461 +4.86 6.38821 +4.87 6.3914 +4.88 6.39419 +4.89 6.39659 +4.9 6.3986 +4.91 6.40024 +4.92 6.40149 +4.93 6.40239 +4.94 6.40292 +4.95 6.4031 +4.96 6.40294 +4.97 6.40244 +4.98 6.40162 +4.99 6.40046 +5 6.399 +5.01 6.39722 +5.02 6.39514 +5.03 6.39277 +5.04 6.39011 +5.05 6.38717 +5.06 6.38396 +5.07 6.38048 +5.08 6.37674 +5.09 6.37275 +5.1 6.36852 +5.11 6.36404 +5.12 6.35934 +5.13 6.35441 +5.14 6.34927 +5.15 6.34392 +5.16 6.33837 +5.17 6.33262 +5.18 6.32668 +5.19 6.32057 +5.2 6.31428 +5.21 6.30782 +5.22 6.3012 +5.23 6.29444 +5.24 6.28752 +5.25 6.28047 +5.26 6.27329 +5.27 6.26598 +5.28 6.25856 +5.29 6.25103 +5.3 6.2434 +5.31 6.23567 +5.32 6.22785 +5.33 6.21995 +5.34 6.21198 +5.35 6.20394 +5.36 6.19584 +5.37 6.18769 +5.38 6.17949 +5.39 6.17126 +5.4 6.16299 +5.41 6.1547 +5.42 6.14639 +5.43 6.13807 +5.44 6.12975 +5.45 6.12144 +5.46 6.11313 +5.47 6.10485 +5.48 6.09659 +5.49 6.08836 +5.5 6.08017 +5.51 6.07203 +5.52 6.06395 +5.53 6.05592 +5.54 6.04797 +5.55 6.04009 +5.56 6.03229 +5.57 6.02458 +5.58 6.01697 +5.59 6.00946 +5.6 6.00207 +5.61 5.99479 +5.62 5.98764 +5.63 5.98062 +5.64 5.97374 +5.65 5.967 +5.66 5.96042 +5.67 5.954 +5.68 5.94775 +5.69 5.94168 +5.7 5.93578 +5.71 5.93008 +5.72 5.92457 +5.73 5.91927 +5.74 5.91418 +5.75 5.9093 +5.76 5.90465 +5.77 5.90023 +5.78 5.89605 +5.79 5.89212 +5.8 5.88844 +5.81 5.88502 +5.82 5.88187 +5.83 5.879 +5.84 5.8764 +5.85 5.8741 +5.86 5.87209 +5.87 5.87038 +5.88 5.86898 +5.89 5.86787 +5.9 5.86705 +5.91 5.86653 +5.92 5.8663 +5.93 5.86635 +5.94 5.86668 +5.95 5.8673 +5.96 5.86819 +5.97 5.86935 +5.98 5.87079 +5.99 5.87249 +6 5.87446 +6.01 5.87669 +6.02 5.87918 +6.03 5.88193 +6.04 5.88492 +6.05 5.88817 +6.06 5.89167 +6.07 5.89541 +6.08 5.89939 +6.09 5.9036 +6.1 5.90806 +6.11 5.91274 +6.12 5.91766 +6.13 5.9228 +6.14 5.92816 +6.15 5.93374 +6.16 5.93955 +6.17 5.94556 +6.18 5.95179 +6.19 5.95822 +6.2 5.96486 +6.21 5.9717 +6.22 5.97875 +6.23 5.98598 +6.24 5.99342 +6.25 6.00104 +6.26 6.00885 +6.27 6.01684 +6.28 6.02502 +6.29 6.03337 +6.3 6.0419 +6.31 6.0506 +6.32 6.05947 +6.33 6.06851 +6.34 6.07771 +6.35 6.08707 +6.36 6.09659 +6.37 6.10627 +6.38 6.11609 +6.39 6.12607 +6.4 6.13619 +6.41 6.14645 +6.42 6.15686 +6.43 6.1674 +6.44 6.17807 +6.45 6.18887 +6.46 6.19981 +6.47 6.21086 +6.48 6.22204 +6.49 6.23334 +6.5 6.24475 +6.51 6.25628 +6.52 6.26792 +6.53 6.27966 +6.54 6.29151 +6.55 6.30346 +6.56 6.31551 +6.57 6.32765 +6.58 6.33988 +6.59 6.35221 +6.6 6.36462 +6.61 6.37711 +6.62 6.38968 +6.63 6.40233 +6.64 6.41506 +6.65 6.42786 +6.66 6.44072 +6.67 6.45365 +6.68 6.46664 +6.69 6.47969 +6.7 6.4928 +6.71 6.50596 +6.72 6.51917 +6.73 6.53243 +6.74 6.54574 +6.75 6.55908 +6.76 6.57246 +6.77 6.58588 +6.78 6.59933 +6.79 6.61282 +6.8 6.62632 +6.81 6.63986 +6.82 6.65341 +6.83 6.66698 +6.84 6.68056 +6.85 6.69416 +6.86 6.70776 +6.87 6.72137 +6.88 6.73499 +6.89 6.7486 +6.9 6.76221 +6.91 6.77581 +6.92 6.78941 +6.93 6.80299 +6.94 6.81656 +6.95 6.83011 +6.96 6.84364 +6.97 6.85714 +6.98 6.87062 +6.99 6.88407 +7 6.89748 +7.01 6.91086 +7.02 6.9242 +7.03 6.9375 +7.04 6.95075 +7.05 6.96396 +7.06 6.97711 +7.07 6.99021 +7.08 7.00326 +7.09 7.01624 +7.1 7.02916 +7.11 7.04202 +7.12 7.0548 +7.13 7.06752 +7.14 7.08016 +7.15 7.09272 +7.16 7.10521 +7.17 7.1176 +7.18 7.12992 +7.19 7.14214 +7.2 7.15427 +7.21 7.1663 +7.22 7.17824 +7.23 7.19008 +7.24 7.20181 +7.25 7.21343 +7.26 7.22494 +7.27 7.23634 +7.28 7.24762 +7.29 7.25879 +7.3 7.26983 +7.31 7.28075 +7.32 7.29153 +7.33 7.30219 +7.34 7.31271 +7.35 7.32311 +7.36 7.33337 +7.37 7.34351 +7.38 7.35353 +7.39 7.36343 +7.4 7.37322 +7.41 7.38289 +7.42 7.39245 +7.43 7.40191 +7.44 7.41125 +7.45 7.4205 +7.46 7.42965 +7.47 7.43871 +7.48 7.44767 +7.49 7.45654 +7.5 7.46532 +7.51 7.47402 +7.52 7.48264 +7.53 7.49118 +7.54 7.49964 +7.55 7.50803 +7.56 7.51635 +7.57 7.52461 +7.58 7.5328 +7.59 7.54093 +7.6 7.549 +7.61 7.55702 +7.62 7.56498 +7.63 7.57289 +7.64 7.58076 +7.65 7.58858 +7.66 7.59637 +7.67 7.60411 +7.68 7.61182 +7.69 7.6195 +7.7 7.62715 +7.71 7.63477 +7.72 7.64237 +7.73 7.64994 +7.74 7.6575 +7.75 7.66505 +7.76 7.67258 +7.77 7.6801 +7.78 7.68762 +7.79 7.69513 +7.8 7.70265 +7.81 7.71016 +7.82 7.71768 +7.83 7.72521 +7.84 7.73275 +7.85 7.74031 +7.86 7.74788 +7.87 7.75547 +7.88 7.76308 +7.89 7.77072 +7.9 7.77839 +7.91 7.78609 +7.92 7.79382 +7.93 7.80159 +7.94 7.8094 +7.95 7.81725 +7.96 7.82515 +7.97 7.8331 +7.98 7.8411 +7.99 7.84915 +8 7.85726 +8.01 7.86543 +8.02 7.87367 +8.03 7.88197 +8.04 7.89034 +8.05 7.89878 +8.06 7.90729 +8.07 7.91588 +8.08 7.92456 +8.09 7.93331 +8.1 7.94216 +8.11 7.95109 +8.12 7.96011 +8.13 7.96923 +8.14 7.97844 +8.15 7.98776 +8.16 7.99718 +8.17 8.00671 +8.18 8.01634 +8.19 8.02609 +8.2 8.03596 +8.21 8.04594 +8.22 8.05604 +8.23 8.06626 +8.24 8.07662 +8.25 8.0871 +8.26 8.09771 +8.27 8.10846 +8.28 8.11935 +8.29 8.13038 +8.3 8.14155 +8.31 8.15287 +8.32 8.16434 +8.33 8.17596 +8.34 8.18774 +8.35 8.19967 +8.36 8.21177 +8.37 8.22403 +8.38 8.23646 +8.39 8.24906 +8.4 8.26183 +8.41 8.27478 +8.42 8.2879 +8.43 8.30121 +8.44 8.3147 +8.45 8.32838 +8.46 8.34225 +8.47 8.35631 +8.48 8.37057 +8.49 8.38502 +8.5 8.39968 +8.51 8.41454 +8.52 8.4296 +8.53 8.44485 +8.54 8.4603 +8.55 8.47594 +8.56 8.49176 +8.57 8.50777 +8.58 8.52396 +8.59 8.54033 +8.6 8.55688 +8.61 8.57359 +8.62 8.59048 +8.63 8.60754 +8.64 8.62476 +8.65 8.64214 +8.66 8.65968 +8.67 8.67737 +8.68 8.69522 +8.69 8.71322 +8.7 8.73137 +8.71 8.74966 +8.72 8.76809 +8.73 8.78666 +8.74 8.80537 +8.75 8.82421 +8.76 8.84318 +8.77 8.86228 +8.78 8.8815 +8.79 8.90085 +8.8 8.92031 +8.81 8.93989 +8.82 8.95958 +8.83 8.97938 +8.84 8.99929 +8.85 9.0193 +8.86 9.03942 +8.87 9.05963 +8.88 9.07994 +8.89 9.10035 +8.9 9.12084 +8.91 9.14142 +8.92 9.16208 +8.93 9.18283 +8.94 9.20366 +8.95 9.22456 +8.96 9.24553 +8.97 9.26658 +8.98 9.28769 +8.99 9.30887 +9 9.33011 +9.01 9.3514 +9.02 9.37276 +9.03 9.39416 +9.04 9.41562 +9.05 9.43712 +9.06 9.45867 +9.07 9.48026 +9.08 9.50189 +9.09 9.52356 +9.1 9.54526 +9.11 9.56698 +9.12 9.58874 +9.13 9.61052 +9.14 9.63232 +9.15 9.65414 +9.16 9.67598 +9.17 9.69783 +9.18 9.71969 +9.19 9.74156 +9.2 9.76343 diff -Nru gsl-doc-1.16/doc/examples/intro.out gsl-doc-2.3/doc/examples/intro.out --- gsl-doc-1.16/doc/examples/intro.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/intro.out 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -J0(5) = -1.775967713143382920e-01 diff -Nru gsl-doc-1.16/doc/examples/intro.txt gsl-doc-2.3/doc/examples/intro.txt --- gsl-doc-1.16/doc/examples/intro.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/intro.txt 2015-11-10 18:48:30.000000000 +0000 @@ -0,0 +1 @@ +J0(5) = -1.775967713143382642e-01 diff -Nru gsl-doc-1.16/doc/examples/largefit2.txt gsl-doc-2.3/doc/examples/largefit2.txt --- gsl-doc-1.16/doc/examples/largefit2.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/largefit2.txt 2016-08-12 17:51:55.000000000 +0000 @@ -0,0 +1,1006 @@ +0.000000 1.013392 +0.002000 1.057114 +0.004000 1.006672 +0.006000 1.005092 +0.008000 1.034198 +0.010000 0.999146 +0.012000 0.972324 +0.014000 1.091945 +0.016000 1.027780 +0.018000 0.997921 +0.020000 0.911458 +0.022000 1.176001 +0.024000 1.249657 +0.026001 0.873918 +0.028001 0.996930 +0.030001 1.168647 +0.032001 1.042424 +0.034001 0.956186 +0.036001 1.032493 +0.038001 1.016478 +0.040001 0.916054 +0.042001 1.160628 +0.044001 1.129574 +0.046001 1.134291 +0.048001 1.103102 +0.050001 1.067503 +0.052001 1.242134 +0.054001 1.210027 +0.056001 1.286558 +0.058001 1.167437 +0.060001 1.270989 +0.062001 1.238484 +0.064001 1.247879 +0.066001 1.318323 +0.068001 1.290329 +0.070001 1.076233 +0.072001 1.364227 +0.074001 1.331892 +0.076002 1.644310 +0.078002 1.272358 +0.080002 1.444683 +0.082002 1.379124 +0.084002 1.681307 +0.086002 1.662120 +0.088002 1.616803 +0.090002 1.563115 +0.092002 1.980689 +0.094002 1.605972 +0.096002 1.714268 +0.098002 1.721501 +0.100002 1.835777 +0.102002 1.843517 +0.104002 1.874658 +0.106002 1.839987 +0.108002 2.096691 +0.110002 1.874711 +0.112002 2.227526 +0.114002 2.198516 +0.116002 2.531939 +0.118002 2.440293 +0.120002 2.474498 +0.122002 1.886756 +0.124002 2.395872 +0.126003 2.424067 +0.128003 2.533481 +0.130003 2.920822 +0.132003 2.639199 +0.134003 2.178261 +0.136003 2.563181 +0.138003 2.330377 +0.140003 2.482197 +0.142003 2.944214 +0.144003 2.375046 +0.146003 2.706059 +0.148003 2.644492 +0.150003 2.344976 +0.152003 2.700872 +0.154003 3.176028 +0.156003 2.982176 +0.158003 2.663030 +0.160003 2.816813 +0.162003 2.245545 +0.164003 2.257987 +0.166003 2.447319 +0.168003 2.955995 +0.170003 2.754546 +0.172003 3.082176 +0.174003 2.488766 +0.176004 2.452559 +0.178004 2.407845 +0.180004 2.795500 +0.182004 2.230950 +0.184004 2.287802 +0.186004 2.460347 +0.188004 2.083690 +0.190004 2.204919 +0.192004 2.696174 +0.194004 2.395705 +0.196004 2.178485 +0.198004 2.307372 +0.200004 2.255902 +0.202004 1.987918 +0.204004 1.887785 +0.206004 2.075691 +0.208004 1.686572 +0.210004 1.982841 +0.212004 2.020780 +0.214004 1.649430 +0.216004 1.963334 +0.218004 1.816612 +0.220004 2.047502 +0.222004 1.570563 +0.224004 1.573427 +0.226005 1.335974 +0.228005 1.378628 +0.230005 1.628469 +0.232005 1.620938 +0.234005 1.216537 +0.236005 1.638633 +0.238005 1.554498 +0.240005 1.391226 +0.242005 1.431787 +0.244005 1.263934 +0.246005 1.425465 +0.248005 1.105883 +0.250005 1.265657 +0.252005 1.168639 +0.254005 1.242218 +0.256005 1.245104 +0.258005 1.108120 +0.260005 1.211894 +0.262005 1.078647 +0.264005 1.057431 +0.266005 1.108110 +0.268005 1.266898 +0.270005 1.100118 +0.272005 0.990081 +0.274005 1.023601 +0.276006 1.238272 +0.278006 1.145608 +0.280006 1.064366 +0.282006 1.025441 +0.284006 1.121463 +0.286006 0.977097 +0.288006 1.032786 +0.290006 1.166776 +0.292006 1.089725 +0.294006 1.048237 +0.296006 0.994855 +0.298006 0.981623 +0.300006 0.964743 +0.302006 1.170996 +0.304006 0.909883 +0.306006 1.060783 +0.308006 1.066695 +0.310006 1.235120 +0.312006 0.983080 +0.314006 0.818831 +0.316006 1.173228 +0.318006 1.052397 +0.320006 0.958336 +0.322006 1.063317 +0.324006 1.045760 +0.326007 0.918851 +0.328007 0.828151 +0.330007 0.922930 +0.332007 0.960096 +0.334007 0.837558 +0.336007 1.093800 +0.338007 0.822421 +0.340007 0.982303 +0.342007 0.857034 +0.344007 0.929809 +0.346007 1.098484 +0.348007 0.912742 +0.350007 0.877250 +0.352007 0.875453 +0.354007 0.842108 +0.356007 0.885992 +0.358007 0.906674 +0.360007 0.948593 +0.362007 0.826321 +0.364007 0.794805 +0.366007 0.799018 +0.368007 0.762520 +0.370007 0.854828 +0.372007 0.913891 +0.374007 0.900230 +0.376008 0.764344 +0.378008 0.893758 +0.380008 0.843119 +0.382008 0.637597 +0.384008 0.732940 +0.386008 0.632072 +0.388008 0.820424 +0.390008 0.653834 +0.392008 0.723423 +0.394008 0.668586 +0.396008 0.587775 +0.398008 0.638778 +0.400008 0.675101 +0.402008 0.679205 +0.404008 0.558361 +0.406008 0.669089 +0.408008 0.659724 +0.410008 0.599887 +0.412008 0.691995 +0.414008 0.577313 +0.416008 0.483322 +0.418008 0.536498 +0.420008 0.504125 +0.422008 0.548830 +0.424008 0.493233 +0.426009 0.477806 +0.428009 0.407442 +0.430009 0.503880 +0.432009 0.460940 +0.434009 0.469029 +0.436009 0.501596 +0.438009 0.405411 +0.440009 0.418834 +0.442009 0.478496 +0.444009 0.420672 +0.446009 0.447649 +0.448009 0.375458 +0.450009 0.400451 +0.452009 0.373357 +0.454009 0.434920 +0.456009 0.422812 +0.458009 0.340769 +0.460009 0.414966 +0.462009 0.369741 +0.464009 0.385961 +0.466009 0.366010 +0.468009 0.353909 +0.470009 0.320795 +0.472009 0.422465 +0.474009 0.402222 +0.476010 0.335765 +0.478010 0.409413 +0.480010 0.384967 +0.482010 0.381460 +0.484010 0.357884 +0.486010 0.423619 +0.488010 0.450770 +0.490010 0.421563 +0.492010 0.386944 +0.494010 0.434098 +0.496010 0.414335 +0.498010 0.373130 +0.500010 0.494584 +0.502010 0.399168 +0.504010 0.327445 +0.506010 0.414090 +0.508010 0.548788 +0.510010 0.413589 +0.512010 0.415560 +0.514010 0.402811 +0.516010 0.467932 +0.518010 0.447742 +0.520010 0.514848 +0.522010 0.545292 +0.524010 0.585226 +0.526011 0.481420 +0.528011 0.542183 +0.530011 0.566527 +0.532011 0.639324 +0.534011 0.665601 +0.536011 0.728721 +0.538011 0.628460 +0.540011 0.745176 +0.542011 0.629362 +0.544011 0.755605 +0.546011 0.730199 +0.548011 0.538527 +0.550011 0.716283 +0.552011 0.653197 +0.554011 0.750977 +0.556011 0.751317 +0.558011 0.669732 +0.560011 0.890732 +0.562011 0.801524 +0.564011 0.896916 +0.566011 0.728432 +0.568011 0.873384 +0.570011 0.915557 +0.572011 0.801362 +0.574011 0.939248 +0.576012 0.841058 +0.578012 0.982556 +0.580012 0.801244 +0.582012 0.944939 +0.584012 0.849316 +0.586012 1.044572 +0.588012 0.991711 +0.590012 0.775179 +0.592012 0.900808 +0.594012 1.054818 +0.596012 0.949419 +0.598012 1.055190 +0.600012 0.960703 +0.602012 0.994899 +0.604012 0.942069 +0.606012 0.782694 +0.608012 0.862081 +0.610012 0.972296 +0.612012 1.084091 +0.614012 0.859938 +0.616012 0.945606 +0.618012 0.991509 +0.620012 1.135856 +0.622012 1.113732 +0.624012 1.075624 +0.626013 1.136413 +0.628013 0.989279 +0.630013 0.986572 +0.632013 0.963125 +0.634013 0.976137 +0.636013 1.133298 +0.638013 0.942319 +0.640013 1.061070 +0.642013 1.010832 +0.644013 1.017137 +0.646013 1.033211 +0.648013 1.023089 +0.650013 1.207996 +0.652013 1.029256 +0.654013 0.894798 +0.656013 1.034056 +0.658013 1.023175 +0.660013 0.972134 +0.662013 1.000921 +0.664013 1.059754 +0.666013 1.205824 +0.668013 1.291515 +0.670013 1.253979 +0.672013 1.021328 +0.674013 1.099351 +0.676014 1.250217 +0.678014 1.053546 +0.680014 1.240934 +0.682014 1.132546 +0.684014 1.207390 +0.686014 1.143019 +0.688014 1.187569 +0.690014 1.117158 +0.692014 1.017676 +0.694014 1.148909 +0.696014 1.307952 +0.698014 1.134271 +0.700014 1.339668 +0.702014 1.360803 +0.704014 1.209263 +0.706014 1.643307 +0.708014 1.482189 +0.710014 1.620002 +0.712014 1.531291 +0.714014 1.508616 +0.716014 1.551789 +0.718014 1.820704 +0.720014 1.190510 +0.722014 1.871826 +0.724014 1.808171 +0.726015 1.639588 +0.728015 1.896243 +0.730015 1.814870 +0.732015 2.268629 +0.734015 1.860003 +0.736015 1.909307 +0.738015 2.091058 +0.740015 2.307699 +0.742015 1.724754 +0.744015 2.136682 +0.746015 2.482358 +0.748015 2.739133 +0.750015 2.183903 +0.752015 2.505655 +0.754015 2.256298 +0.756015 2.232645 +0.758015 2.418358 +0.760015 2.743980 +0.762015 2.490451 +0.764015 2.591839 +0.766015 2.890467 +0.768015 2.441939 +0.770015 2.795238 +0.772015 2.882743 +0.774015 2.704971 +0.776016 2.864923 +0.778016 2.931144 +0.780016 2.595133 +0.782016 2.778879 +0.784016 2.588524 +0.786016 2.424629 +0.788016 3.490356 +0.790016 2.725991 +0.792016 2.819722 +0.794016 2.795897 +0.796016 2.278287 +0.798016 2.709274 +0.800016 2.864658 +0.802016 2.495316 +0.804016 2.481585 +0.806016 2.761135 +0.808016 2.443268 +0.810016 2.565330 +0.812016 2.160156 +0.814016 2.817464 +0.816016 2.687451 +0.818016 2.225290 +0.820016 2.234668 +0.822016 2.366997 +0.824016 1.801739 +0.826017 1.999203 +0.828017 2.121902 +0.830017 1.658141 +0.832017 2.048377 +0.834017 1.987455 +0.836017 2.056994 +0.838017 1.748644 +0.840017 2.035117 +0.842017 1.991255 +0.844017 1.933487 +0.846017 1.927148 +0.848017 1.526116 +0.850017 1.825349 +0.852017 1.448218 +0.854017 1.266984 +0.856017 1.574851 +0.858017 1.569314 +0.860017 1.461266 +0.862017 1.241627 +0.864017 1.385409 +0.866017 1.438944 +0.868017 1.458593 +0.870017 1.045023 +0.872017 1.156637 +0.874017 1.231397 +0.876018 1.060101 +0.878018 1.208137 +0.880018 1.297885 +0.882018 1.261846 +0.884018 1.073377 +0.886018 1.146843 +0.888018 1.110004 +0.890018 1.142169 +0.892018 1.091117 +0.894018 1.018172 +0.896018 1.325115 +0.898018 1.055748 +0.900018 0.984488 +0.902018 0.967879 +0.904018 0.961651 +0.906018 1.085517 +0.908018 0.924754 +0.910018 1.080906 +0.912018 0.949908 +0.914018 1.084287 +0.916018 1.115371 +0.918018 1.150677 +0.920018 1.197850 +0.922018 0.909476 +0.924018 0.920649 +0.926019 1.061322 +0.928019 0.867733 +0.930019 1.122616 +0.932019 0.730512 +0.934019 1.068192 +0.936019 1.051183 +0.938019 0.939787 +0.940019 0.793864 +0.942019 0.954387 +0.944019 0.949134 +0.946019 0.950377 +0.948019 0.837390 +0.950019 0.920521 +0.952019 1.038896 +0.954019 1.054405 +0.956019 0.800492 +0.958019 1.108765 +0.960019 1.029235 +0.962019 0.886213 +0.964019 1.086449 +0.966019 0.845174 +0.968019 0.825587 +0.970019 0.979444 +0.972019 0.801748 +0.974019 1.027216 +0.976020 1.065852 +0.978020 0.918422 +0.980020 1.073070 +0.982020 0.794571 +0.984020 1.009434 +0.986020 0.789657 +0.988020 1.017966 +0.990020 0.877302 +0.992020 1.009978 +0.994020 0.872902 +0.996020 0.866302 +0.998020 0.851322 + + +3.049679424205e+02 2.259835726033e+02 4.582825874915e-01 +2.680463954339e+02 2.141625880951e+02 5.231740188551e-01 +2.355948285412e+02 2.030649087681e+02 5.890884464064e-01 +2.070720747634e+02 1.929847787351e+02 6.548268076391e-01 +1.820024845720e+02 1.841072060161e+02 7.193815491988e-01 +1.599679938893e+02 1.765119161116e+02 7.819322821113e-01 +1.406011523916e+02 1.701896640168e+02 8.418163499861e-01 +1.235789958554e+02 1.650602877714e+02 8.985336544077e-01 +1.086176603596e+02 1.609890697240e+02 9.518223955972e-01 +9.546764852977e+01 1.578034068101e+02 1.001803566519e+00 +8.390966888471e+01 1.553114384423e+02 1.049166704959e+00 +7.375097889990e+01 1.533208888884e+02 1.095369478520e+00 +6.482217080569e+01 1.516545543003e+02 1.142835180762e+00 +5.697434651904e+01 1.501600821886e+02 1.195128756643e+00 +5.007663459779e+01 1.487142619106e+02 1.257054974652e+00 +4.401400780969e+01 1.472238754460e+02 1.334559527277e+00 +3.868536492180e+01 1.456254596505e+02 1.434275177416e+00 +3.400184472188e+01 1.438854289541e+02 1.562623610255e+00 +2.988534415606e+01 1.420005556014e+02 1.724596948917e+00 +2.626721587113e+01 1.399974024973e+02 1.922589454722e+00 +2.308712344143e+01 1.379285302548e+02 2.155726253457e+00 +2.029203518998e+01 1.358637352439e+02 2.419978906549e+00 +1.783533982465e+01 1.338764658641e+02 2.709110562615e+00 +1.567606914154e+01 1.320282596578e+02 3.016297482822e+00 +1.377821483337e+01 1.303559182938e+02 3.336147029939e+00 +1.211012800981e+01 1.288656178663e+02 3.666761776237e+00 +1.064399141598e+01 1.275352277273e+02 4.011506063370e+00 +9.355355547988e+00 1.263226219087e+02 4.380226295606e+00 +8.222730929480e+00 1.251758562191e+02 4.789832968191e+00 +7.227229750040e+00 1.240414585308e+02 5.264340172168e+00 +6.352250889373e+00 1.228688803423e+02 5.834649703649e+00 +5.583203074639e+00 1.216111234489e+02 6.538466669693e+00 +4.907261554294e+00 1.202229496636e+02 7.420551016472e+00 +4.313154230704e+00 1.186587305709e+02 8.532950836315e+00 +3.790973685020e+00 1.168719533463e+02 9.934207301729e+00 +3.332011959648e+00 1.148178006003e+02 1.168632231592e+01 +2.928615343100e+00 1.124592892136e+02 1.384882214885e+01 +2.574056735603e+00 1.097764132560e+02 1.647021807289e+01 +2.262423467019e+00 1.067766702154e+02 1.957804508552e+01 +1.988518696314e+00 1.035042389902e+02 2.316931526695e+01 +1.747774748288e+00 1.000441263405e+02 2.720379867731e+01 +1.536176942372e+00 9.651751550744e+01 3.160290211673e+01 +1.350196643238e+00 9.306632436152e+01 3.625646867326e+01 +1.186732416773e+00 8.982894691955e+01 4.103808359877e+01 +1.043058310116e+00 8.691391183585e+01 4.582676062570e+01 +9.167783932792e-01 8.438070050596e+01 5.053038948883e+01 +8.057868042778e-01 8.223470407157e+01 5.510530773189e+01 +7.082326314713e-01 8.043702331377e+01 5.956711649011e+01 +6.224890474974e-01 7.892357938800e+01 6.398958416973e+01 +5.471261800648e-01 7.762560078773e+01 6.849028056538e+01 +4.808872671990e-01 7.648531883774e+01 7.320362439154e+01 +4.226676992988e-01 7.546418427863e+01 7.824535039656e+01 +3.714965985086e-01 7.454378223531e+01 8.367705422653e+01 +3.265206282203e-01 7.372122857792e+01 8.948281171216e+01 +2.869897627095e-01 7.300159914866e+01 9.556798423928e+01 +2.522447795993e-01 7.239018973299e+01 1.017823565619e+02 +2.217062665734e-01 7.188699034993e+01 1.079600203842e+02 +1.948649590132e-01 7.148458809107e+01 1.139628834504e+02 +1.712732474282e-01 7.116922187338e+01 1.197157695454e+02 +1.505377130561e-01 7.092365340987e+01 1.252264459579e+02 +1.323125671547e-01 7.073032520221e+01 1.305894207317e+02 +1.162938845799e-01 7.057376516914e+01 1.359754401985e+02 +1.022145354861e-01 7.044186488844e+01 1.416096903477e+02 +8.983973063048e-02 7.032612844923e+01 1.477431961358e+02 +7.896310599444e-02 7.022118277132e+01 1.546258673032e+02 +6.940328142717e-02 7.012386456067e+01 1.624950613229e+02 +6.100083592454e-02 7.003217179598e+01 1.715957508969e+02 +5.361564910151e-02 6.994433015584e+01 1.822423835322e+02 +4.712456452454e-02 6.985815866212e+01 1.949179608667e+02 +4.141933593721e-02 6.977081093619e+01 2.103878858382e+02 +3.640482213021e-02 6.967884969909e+01 2.297913717301e+02 +3.199740035286e-02 6.957853426728e+01 2.546684078657e+02 +2.812357180813e-02 6.946618683456e+01 2.868951226109e+02 +2.471873597619e-02 6.933853021627e+01 3.285416801955e+02 +2.172611332691e-02 6.919291616778e+01 3.817194980868e+02 +1.909579845621e-02 6.902736812910e+01 4.485119002619e+02 +1.678392785646e-02 6.884035987401e+01 5.310659202446e+02 +1.475194844232e-02 6.863027944213e+01 6.318835512218e+02 +1.296597463394e-02 6.839461346375e+01 7.543092624425e+02 +1.139622327623e-02 6.812901417531e+01 9.031585111281e+02 +1.001651697063e-02 6.782651456142e+01 1.085359927714e+03 +8.803847537122e-03 6.747716659000e+01 1.310418952090e+03 +7.737992326490e-03 6.706828588715e+01 1.590506790044e+03 +6.801176984534e-03 6.658536327462e+01 1.940059864352e+03 +5.977779044391e-03 6.601363178470e+01 2.374889252061e+03 +5.254067404042e-03 6.534026945891e+01 2.910855638793e+03 +4.617973344485e-03 6.455719732250e+01 3.562138386906e+03 +4.058889270048e-03 6.366428932867e+01 4.339102681606e+03 +3.567491814604e-03 6.267248832862e+01 5.245859720167e+03 +3.135586363782e-03 6.160588907903e+01 6.277853533189e+03 +2.755970400406e-03 6.050155242530e+01 7.420104055499e+03 +2.422313394281e-03 5.940602862165e+01 8.646904275189e+03 +2.129051233368e-03 5.836855639358e+01 9.923613104847e+03 +1.871293435858e-03 5.743244640608e+01 1.121063715501e+04 +1.644741595788e-03 5.662739636684e+01 1.246893675602e+04 +1.445617702215e-03 5.596542477358e+01 1.366581501745e+04 +1.270601136561e-03 5.544155166517e+01 1.477969701783e+04 +1.116773297502e-03 5.503826835667e+01 1.580309946444e+04 +9.815689299551e-04 5.473156687373e+01 1.674369511751e+04 +8.627333465155e-04 5.449640043827e+01 1.762385046111e+04 +7.582848279681e-04 5.431042986004e+01 1.847900635574e+04 +6.664815758530e-04 5.415593441138e+01 1.935484503417e+04 +5.857926659852e-04 5.402033332951e+01 2.030270337697e+04 +5.148725185431e-04 5.389585865836e+01 2.137270142245e+04 +4.525384589871e-04 5.377876456271e+01 2.260501851422e+04 +3.977509956095e-04 5.366827635539e+01 2.402150709753e+04 +3.495964848212e-04 5.356539678304e+01 2.562124943888e+04 +3.072718951013e-04 5.347170769179e+01 2.738330307216e+04 +2.700714155276e-04 5.338835905032e+01 2.927752258345e+04 +2.373746855730e-04 5.331543087285e+01 3.128147567889e+04 +2.086364498842e-04 5.325174979972e+01 3.339987703278e+04 +1.833774655255e-04 5.319509292624e+01 3.568305894010e+04 +1.611765100547e-04 5.314260887537e+01 3.824166167882e+04 +1.416633571578e-04 5.309128027256e+01 4.125447176857e+04 +1.245126027012e-04 5.303831969727e+01 4.496484882641e+04 +1.094382382465e-04 5.298147262353e+01 4.966040333759e+04 +9.618888153220e-05 5.291924900503e+01 5.563383515992e+04 +8.454358438755e-05 5.285110689565e+01 6.313071752292e+04 +7.430814816890e-05 5.277757941862e+01 7.229717397212e+04 +6.531188527540e-05 5.270029563775e+01 8.314068461487e+04 +5.740477273813e-05 5.262182638889e+01 9.551210236273e+04 +5.045495041555e-05 5.254531378210e+01 1.091125928936e+05 +4.434652207489e-05 5.247392203016e+01 1.235271215048e+05 +3.897762268998e-05 5.241024302340e+01 1.382828041506e+05 +3.425871972545e-05 5.235583933623e+01 1.529245504406e+05 +3.011112007939e-05 5.231106435988e+01 1.670954150499e+05 +2.646565778586e-05 5.227518193852e+01 1.806094911526e+05 +2.326154059335e-05 5.224668972485e+01 1.935119799947e+05 +2.044533618452e-05 5.222369908601e+01 2.061305143217e+05 +1.797008113114e-05 5.220425083049e+01 2.191280230144e+05 +1.579449772533e-05 5.218651154871e+01 2.335655557254e+05 +1.388230562649e-05 5.216885414581e+01 2.509716911627e+05 +1.220161684523e-05 5.214985583332e+01 2.733973324070e+05 +1.072440397463e-05 5.212824939940e+01 3.034255308554e+05 +9.426032801221e-06 5.210285127069e+01 3.441286227233e+05 +8.284851501294e-06 5.207247405350e+01 3.990242380564e+05 +7.281829571992e-06 5.203581896811e+01 4.721336506966e+05 +6.400240475916e-06 5.199133865623e+01 5.682316956516e+05 +5.625382706993e-06 5.193706450555e+01 6.933025701832e+05 +4.944334626053e-06 5.187040273270e+01 8.551440096070e+05 +4.345738977722e-06 5.178791397898e+01 1.064035103089e+06 +3.819613495208e-06 5.168509532479e+01 1.333397492723e+06 +3.357184434584e-06 5.155617973127e+01 1.680418230300e+06 +2.950740262582e-06 5.139396237027e+01 2.126640761294e+06 +2.593503057958e-06 5.118966656947e+01 2.698536351414e+06 +2.279515481906e-06 5.093288121229e+01 3.428020357099e+06 +2.003541432621e-06 5.061163611976e+01 4.352780805349e+06 +1.760978727319e-06 5.021272592245e+01 5.516163242910e+06 +1.547782355572e-06 4.972243530928e+01 6.966230762767e+06 +1.360397024141e-06 4.912784091228e+01 8.753521489096e+06 +1.195697868392e-06 4.841883568674e+01 1.092701093981e+07 +1.050938341606e-06 4.759089389166e+01 1.352794387497e+07 +9.237044131753e-07 4.664832218953e+01 1.658164028060e+07 +8.118743118798e-07 4.560732261099e+01 2.008816503830e+07 +7.135831429282e-07 4.449773910327e+01 2.401376999151e+07 +6.271917887047e-07 4.336215166050e+01 2.828587218909e+07 +5.512595746088e-07 4.225139784199e+01 3.279438219587e+07 +4.845202441592e-07 4.121682990561e+01 3.740090786786e+07 +4.258608427195e-07 4.030127349128e+01 4.195485557181e+07 +3.743031577071e-07 3.953173297308e+01 4.631278202120e+07 +3.289874057797e-07 3.891642339257e+01 5.035599138393e+07 +2.891578949660e-07 3.844676343210e+01 5.400216182414e+07 +2.541504226369e-07 3.810280148913e+01 5.720924257908e+07 +2.233811991685e-07 3.785954274835e+01 5.997258460255e+07 +1.963371125817e-07 3.769210926731e+01 6.231799311050e+07 +1.725671718139e-07 3.757885546304e+01 6.429372180437e+07 +1.516749859274e-07 3.750258812543e+01 6.596375020163e+07 +1.333121538371e-07 3.745051689113e+01 6.740362385498e+07 +1.171724543240e-07 3.741358003337e+01 6.869911719292e+07 +1.029867394468e-07 3.738560108985e+01 6.994710253322e+07 +9.051844619181e-08 3.736252106902e+01 7.125718563003e+07 +7.955965151425e-08 3.734179686937e+01 7.275186740938e+07 +6.992760498403e-08 3.732196707845e+01 7.456253628416e+07 +6.146168121320e-08 3.730234421251e+01 7.681932313605e+07 +5.402070124404e-08 3.728278048869e+01 7.963573818349e+07 +4.748057822849e-08 3.726346243053e+01 8.309395524530e+07 +4.173224813812e-08 3.724471192961e+01 8.724121987765e+07 +3.667985099677e-08 3.722679910599e+01 9.210837630022e+07 +3.223913230585e-08 3.720979199425e+01 9.775638111824e+07 +2.833603800423e-08 3.719346822868e+01 1.043487916304e+08 +2.490547953214e-08 3.717729492105e+01 1.122419448656e+08 +2.189024840499e-08 3.716045855081e+01 1.220806229921e+08 +1.924006219650e-08 3.714191300791e+01 1.348824173316e+08 +1.691072602177e-08 3.712041695171e+01 1.520889847190e+08 +1.486339553702e-08 3.709454560502e+01 1.755672020785e+08 +1.306392916575e-08 3.706267739824e+01 2.075689433456e+08 +1.148231874895e-08 3.702296679654e+01 2.506905659759e+08 +1.009218912470e-08 3.697332095515e+01 3.078742741709e+08 +8.870358292231e-09 3.691140209812e+01 3.824534649951e+08 +7.796450825514e-09 3.683468187906e+01 4.781999433549e+08 +6.852558089779e-09 3.674057841140e+01 5.993131653022e+08 +6.022939594530e-09 3.662670799804e+01 7.502945321952e+08 +5.293760502879e-09 3.649127521517e+01 9.356581119542e+08 +4.652860919823e-09 3.633359756823e+01 1.159442820756e+09 +4.089553112091e-09 3.615470633857e+01 1.424521991192e+09 +3.594443277976e-09 3.595788592371e+01 1.731766078313e+09 +3.159274894948e-09 3.574893609636e+01 2.079201726433e+09 +2.776791032705e-09 3.553592108066e+01 2.461399457379e+09 +2.440613335560e-09 3.532827065242e+01 2.869359696485e+09 +2.145135656071e-09 3.513533667002e+01 3.291094515703e+09 + + +3.049679424205e+02 2.259835726033e+02 4.582825874915e-01 +2.580143967012e+02 2.107917110746e+02 5.426082927241e-01 +2.182899237760e+02 1.969684354706e+02 6.280418497061e-01 +1.846815194475e+02 1.850487061133e+02 7.121585522137e-01 +1.562475401313e+02 1.752656274770e+02 7.930682981603e-01 +1.321913197927e+02 1.675964837258e+02 8.693421204564e-01 +1.118388488795e+02 1.618268821054e+02 9.400558583882e-01 +9.461988985585e+01 1.576110875095e+02 1.005149540682e+00 +8.005200023099e+01 1.545371696057e+02 1.066046743531e+00 +6.772701543772e+01 1.521942914640e+02 1.126373406299e+00 +5.729961283748e+01 1.502241872559e+02 1.192658486550e+00 +4.847763643658e+01 1.483466628748e+02 1.274825221439e+00 +4.101391123083e+01 1.463656702668e+02 1.385929772224e+00 +3.469931783187e+01 1.441690985792e+02 1.540301316776e+00 +2.935693333953e+01 1.417297421472e+02 1.749806092407e+00 +2.483707429862e+01 1.391041033590e+02 2.019585643005e+00 +2.101310285311e+01 1.364177628998e+02 2.345735002147e+00 +1.777787859417e+01 1.338283415434e+02 2.716599205799e+00 +1.504075668969e+01 1.314720392843e+02 3.117640207549e+00 +1.272504818840e+01 1.294169569152e+02 3.538511961844e+00 +1.076587134131e+01 1.276471559312e+02 3.980317715907e+00 +9.108333738442e+00 1.260812049620e+02 4.461112370318e+00 +7.705994327879e+00 1.246070234525e+02 5.018597491481e+00 +6.519562225819e+00 1.231104890422e+02 5.710329194894e+00 +5.515795860705e+00 1.214867211134e+02 6.613138593918e+00 +4.666571607597e+00 1.196368388221e+02 7.823580755521e+00 +3.948095817681e+00 1.174610443004e+02 9.458350960490e+00 +3.340238165469e+00 1.148598056939e+02 1.164917560198e+01 +2.825967635357e+00 1.117502412693e+02 1.452604760013e+01 +2.390875344951e+00 1.080972264270e+02 1.818796364880e+01 +2.022770835581e+00 1.039503446808e+02 2.266732295247e+01 +1.711340518826e+00 9.946934383099e+01 2.789962785978e+01 +1.447858709380e+00 9.491587394605e+01 3.371400985489e+01 +1.224943147940e+00 9.059756018016e+01 3.985883912724e+01 +1.036348164336e+00 8.677789061808e+01 4.606460668162e+01 +8.767896857335e-01 8.359646347455e+01 5.212653786163e+01 +7.417971869529e-01 8.104571911451e+01 5.797568302676e+01 +6.275884348605e-01 7.901219010388e+01 6.370905876257e+01 +5.309635173847e-01 7.734832525030e+01 6.956172344971e+01 +4.492151880655e-01 7.593296422152e+01 7.581897226351e+01 +3.800530141556e-01 7.469915091790e+01 8.268988116780e+01 +3.215392030504e-01 7.362996788669e+01 9.019565601143e+01 +2.720343090240e-01 7.273474094259e+01 9.813916665329e+01 +2.301512990768e-01 7.202192463254e+01 1.061832261122e+02 +1.947166909085e-01 7.148248866532e+01 1.139975843316e+02 +1.647376741754e-01 7.108865833154e+01 1.213999943425e+02 +1.393742938322e-01 7.080299585605e+01 1.284368825002e+02 +1.179159161890e-01 7.058920502254e+01 1.353897398723e+02 +9.976131830610e-02 7.041904289990e+01 1.427184814670e+02 +8.440184287099e-02 7.027423887434e+01 1.509648598701e+02 +7.140714658724e-02 7.014478571731e+01 1.606625767605e+02 +6.041314277373e-02 7.002547201602e+01 1.723360934395e+02 +5.111180034816e-02 6.991233631353e+01 1.866698902479e+02 +4.324251338182e-02 6.980030144257e+01 2.048512607612e+02 +3.658479941695e-02 6.968249354276e+01 2.289602472619e+02 +3.095212196757e-02 6.955090952728e+01 2.621794592607e+02 +2.618666412181e-02 6.939767543500e+01 3.086242096507e+02 +2.215490681210e-02 6.921620850188e+01 3.728421070701e+02 +1.874388786482e-02 6.900177043142e+01 4.593858154564e+02 +1.585803701495e-02 6.875094124020e+01 5.729767296634e+02 +1.341649820897e-02 6.845968368576e+01 7.195640314556e+02 +1.135086417200e-02 6.812026175427e+01 9.082478531752e+02 +9.603259766031e-03 6.771817256197e+01 1.153588955293e+03 +8.124720438586e-03 6.723070460904e+01 1.477311918389e+03 +6.873820329080e-03 6.662828151778e+01 1.908279926652e+03 +5.815511594968e-03 6.587892354475e+01 2.480185026957e+03 +4.920142437842e-03 6.495574734126e+01 3.227081011554e+03 +4.162626316419e-03 6.384720900213e+01 4.176967938403e+03 +3.521739069356e-03 6.256865185603e+01 5.343610016092e+03 +2.979524254605e-03 6.117107240471e+01 6.717761704343e+03 +2.520790044052e-03 5.974038296860e+01 8.260991136084e+03 +2.132683577376e-03 5.838168094622e+01 9.906593124929e+03 +1.804330849347e-03 5.719097351245e+01 1.157044754920e+04 +1.526532040872e-03 5.622731665128e+01 1.316986820656e+04 +1.291503757557e-03 5.550068025654e+01 1.464383902609e+04 +1.092660953800e-03 5.498030660407e+01 1.596756996356e+04 +9.244324323271e-04 5.461483823207e+01 1.715835023547e+04 +7.821047498462e-04 5.435156904376e+01 1.827395545075e+04 +6.616901553228e-04 5.414797212023e+01 1.940534856590e+04 +5.598148607808e-04 5.397562114610e+01 2.066231255729e+04 +4.736245141778e-04 5.381940468664e+01 2.214936214812e+04 +4.007042258887e-04 5.367450654534e+01 2.393457955958e+04 +3.390109080900e-04 5.354229985126e+01 2.602639663440e+04 +2.868160313236e-04 5.342604724619e+01 2.837817555207e+04 +2.426571943885e-04 5.332736508149e+01 3.092967785648e+04 +2.052971506396e-04 5.324459080968e+01 3.367054173808e+04 +1.736891426893e-04 5.317299906526e+01 3.671050569139e+04 +1.469475742560e-04 5.310630424053e+01 4.032974244152e+04 +1.243231974398e-04 5.303819740723e+01 4.499743271301e+04 +1.051821202216e-04 5.296362103615e+01 5.132199424049e+04 +8.898804601339e-05 5.287975482181e+01 5.991429886061e+04 +7.528724764817e-05 5.278641293981e+01 7.122146357710e+04 +6.369585480710e-05 5.268658738576e+01 8.532818479701e+04 +5.388909870323e-05 5.258592744926e+01 1.018857103170e+05 +4.559221267760e-05 5.249113326898e+01 1.201705707293e+05 +3.857273375988e-05 5.240863762809e+01 1.391467466499e+05 +3.263398949798e-05 5.234177351724e+01 1.578504886232e+05 +2.760958756991e-05 5.229076495765e+01 1.755532601109e+05 +2.335875378730e-05 5.225329742770e+01 1.920099678601e+05 +1.976238787030e-05 5.222562200334e+01 2.076530752312e+05 +1.671972648424e-05 5.220315733218e+01 2.239381257502e+05 +1.414552004253e-05 5.218315775742e+01 2.429197584341e+05 +1.196764417542e-05 5.216240796147e+01 2.684093632441e+05 +1.012507894223e-05 5.213794233797e+01 3.046802204850e+05 +8.566199168660e-06 5.210910669969e+01 3.577988367371e+05 +7.247328007599e-06 5.207584536028e+01 4.301821112814e+05 +6.131513196879e-06 5.203088670405e+01 5.412010475005e+05 +5.187491727169e-06 5.183122774103e+01 9.969792728200e+05 +4.388813911898e-06 5.190699188272e+01 9.893521774544e+05 +3.713102317328e-06 5.190798847671e+01 9.961181134401e+05 +3.141424789410e-06 5.182411236510e+01 1.341532374497e+06 +2.657764010829e-06 5.147839905729e+01 2.509821409081e+06 +2.248568726226e-06 5.046109021201e+01 5.732483448678e+06 +1.902374061791e-06 5.184220134806e+01 2.005716766290e+06 +1.609480301297e-06 5.187119094759e+01 1.692576367374e+06 +1.361681118499e-06 5.186791358945e+01 1.721948981712e+06 +1.152033651473e-06 5.186832227990e+01 1.719877644338e+06 +9.746639768273e-07 5.186808539121e+01 1.767622829488e+06 +8.246025335369e-07 5.187135128498e+01 1.773673814186e+06 +6.976448852957e-07 5.186817629358e+01 1.780216661561e+06 +5.902339202035e-07 5.187107789658e+01 1.795770998166e+06 +4.993601872550e-07 5.186433526457e+01 1.795350920380e+06 +4.224775772450e-07 5.186090336890e+01 1.814290881152e+06 +3.574319856293e-07 5.186090336890e+01 1.814290881152e+06 +3.024009586119e-07 5.186039910453e+01 1.853208087651e+06 +2.558426314545e-07 5.186039910453e+01 1.853208087651e+06 +2.164525283584e-07 5.186039910453e+01 1.853208087651e+06 +1.831270135332e-07 5.186039910453e+01 1.853208087651e+06 +1.549323694204e-07 5.186039910453e+01 1.853208087651e+06 +1.310786357025e-07 5.186039910453e+01 1.853208087651e+06 +1.108974761176e-07 5.186039910453e+01 1.853208087651e+06 +9.382345294742e-08 5.186039910453e+01 1.853208087651e+06 +7.937818452824e-08 5.186039910453e+01 1.853208087651e+06 +6.715694190588e-08 5.186039910453e+01 1.853208087651e+06 +5.681730910015e-08 5.186039910453e+01 1.853208087651e+06 +4.806958926013e-08 5.186039910453e+01 1.853208087651e+06 +4.066868790926e-08 5.186039910453e+01 1.853208087651e+06 +3.440724586412e-08 5.186039910453e+01 1.853208087651e+06 +2.910982942443e-08 5.186039910453e+01 1.853208087651e+06 +2.462801505433e-08 5.186039910453e+01 1.853208087651e+06 +2.083623083710e-08 5.186039910453e+01 1.853208087651e+06 +1.762823818888e-08 5.186039910453e+01 1.853208087651e+06 +1.491415525550e-08 5.186039910453e+01 1.853208087651e+06 +1.261793859385e-08 5.186039910453e+01 1.853208087651e+06 +1.067525257923e-08 5.186039910453e+01 1.853208087651e+06 +9.031666843409e-09 5.186039910453e+01 1.853208087651e+06 +7.641131239281e-09 5.186039910453e+01 1.853208087651e+06 +6.464685603247e-09 5.186039910453e+01 1.853208087651e+06 +5.469368165539e-09 5.186039910453e+01 1.853208087651e+06 +4.627292024099e-09 5.186039910453e+01 1.853208087651e+06 +3.914863806610e-09 5.186039910453e+01 1.853208087651e+06 +3.312122629063e-09 5.186039910453e+01 1.853208087651e+06 +2.802180829747e-09 5.186039910453e+01 1.853208087651e+06 +2.370750809073e-09 5.186039910453e+01 1.853208087651e+06 +2.005744718205e-09 5.186039910453e+01 1.853208087651e+06 +1.696935780518e-09 5.186039910453e+01 1.853208087651e+06 +1.435671756763e-09 5.186039910453e+01 1.853208087651e+06 +1.214632525773e-09 5.186039910453e+01 1.853208087651e+06 +1.027624988593e-09 5.186039910453e+01 1.853208087651e+06 +8.694095496150e-10 5.186039910453e+01 1.853208087651e+06 +7.355533130786e-10 5.186039910453e+01 1.853208087651e+06 +6.223058817568e-10 5.186039910453e+01 1.853208087651e+06 +5.264942779582e-10 5.186039910453e+01 1.853208087651e+06 +4.454340427254e-10 5.186039910453e+01 1.853208087651e+06 +3.768540223992e-10 5.186039910453e+01 1.853208087651e+06 +3.188327352115e-10 5.186039910453e+01 1.853208087651e+06 +2.697445350199e-10 5.186039910453e+01 1.853208087651e+06 +2.282140637938e-10 5.186039910453e+01 1.853208087651e+06 +1.930777166975e-10 5.186039910453e+01 1.853208087651e+06 +1.633510400954e-10 5.186039910453e+01 1.853208087651e+06 +1.382011490329e-10 5.186039910453e+01 1.853208087651e+06 +1.169233913838e-10 5.186039910453e+01 1.853208087651e+06 +9.892160483726e-11 5.186039910453e+01 1.853208087651e+06 +8.369141356375e-11 5.186039910453e+01 1.853208087651e+06 +7.080609656325e-11 5.186039910453e+01 1.853208087651e+06 +5.990463175419e-11 5.186039910453e+01 1.853208087651e+06 +5.068158082121e-11 5.186039910453e+01 1.853208087651e+06 +4.287853141435e-11 5.186039910453e+01 1.853208087651e+06 +3.627685692634e-11 5.186039910453e+01 1.853208087651e+06 +3.069159099076e-11 5.186039910453e+01 1.853208087651e+06 +2.596624507622e-11 5.186039910453e+01 1.853208087651e+06 +2.196842397520e-11 5.186039910453e+01 1.853208087651e+06 +1.858611634209e-11 5.186039910453e+01 1.853208087651e+06 +1.572455634832e-11 5.186039910453e+01 1.853208087651e+06 +1.330356852397e-11 5.186039910453e+01 1.853208087651e+06 +1.125532139360e-11 5.186039910453e+01 1.853208087651e+06 +9.522426967234e-12 5.186039910453e+01 1.853208087651e+06 +8.056332838073e-12 5.186039910453e+01 1.853208087651e+06 +6.815961836321e-12 5.186039910453e+01 1.853208087651e+06 +5.766561125012e-12 5.186039910453e+01 1.853208087651e+06 +4.878728491596e-12 5.186039910453e+01 1.853208087651e+06 +4.127588553857e-12 5.186039910453e+01 1.853208087651e+06 +3.492095798993e-12 5.186039910453e+01 1.853208087651e+06 +2.954444928371e-12 5.186039910453e+01 1.853208087651e+06 +2.499571986912e-12 5.186039910453e+01 1.853208087651e+06 +2.114732299715e-12 5.186039910453e+01 1.853208087651e+06 +1.789143390499e-12 5.186039910453e+01 1.853208087651e+06 +1.513682877117e-12 5.186039910453e+01 1.853208087651e+06 +1.280632879759e-12 5.186039910453e+01 1.853208087651e+06 +1.083463780633e-12 5.186039910453e+01 1.853208087651e+06 + + +0.000000 1.000000e+00 1.320696e+00 1.561410e+00 +0.010000 1.000996e+00 1.052953e+00 1.045781e+00 +0.020000 1.007872e+00 8.988771e-01 8.083334e-01 +0.030000 1.026144e+00 8.543474e-01 7.678692e-01 +0.040000 1.060833e+00 9.048302e-01 8.597155e-01 +0.050000 1.116496e+00 1.030102e+00 1.033247e+00 +0.060000 1.197241e+00 1.207755e+00 1.249664e+00 +0.070000 1.306512e+00 1.415701e+00 1.480016e+00 +0.080000 1.446506e+00 1.633851e+00 1.703452e+00 +0.090000 1.617126e+00 1.845151e+00 1.905692e+00 +0.100000 1.814524e+00 2.036098e+00 2.077696e+00 +0.110000 2.029607e+00 2.196880e+00 2.214522e+00 +0.120000 2.247143e+00 2.321225e+00 2.314354e+00 +0.130000 2.446382e+00 2.406059e+00 2.377688e+00 +0.140000 2.603824e+00 2.451050e+00 2.406653e+00 +0.150000 2.697981e+00 2.458079e+00 2.404465e+00 +0.160000 2.714808e+00 2.430697e+00 2.374983e+00 +0.170000 2.651704e+00 2.373608e+00 2.322369e+00 +0.180000 2.518282e+00 2.292186e+00 2.250825e+00 +0.190000 2.333563e+00 2.192052e+00 2.164408e+00 +0.200000 2.120871e+00 2.078735e+00 2.066892e+00 +0.210000 1.902566e+00 1.957391e+00 1.961695e+00 +0.220000 1.696364e+00 1.832606e+00 1.851827e+00 +0.230000 1.513870e+00 1.708267e+00 1.739883e+00 +0.240000 1.360947e+00 1.587501e+00 1.628049e+00 +0.250000 1.239061e+00 1.472656e+00 1.518125e+00 +0.260000 1.146817e+00 1.365347e+00 1.411564e+00 +0.270000 1.081190e+00 1.266515e+00 1.309507e+00 +0.280000 1.038307e+00 1.176531e+00 1.212831e+00 +0.290000 1.013789e+00 1.095299e+00 1.122183e+00 +0.300000 1.002814e+00 1.022375e+00 1.038023e+00 +0.310000 1.000072e+00 9.570805e-01 9.606555e-01 +0.320000 9.998011e-01 8.986103e-01 8.902566e-01 +0.330000 9.960824e-01 8.461235e-01 8.268962e-01 +0.340000 9.834513e-01 7.988224e-01 7.705551e-01 +0.350000 9.577548e-01 7.560100e-01 7.211372e-01 +0.360000 9.169922e-01 7.171291e-01 6.784768e-01 +0.370000 8.617940e-01 6.817822e-01 6.423447e-01 +0.380000 7.952798e-01 6.497336e-01 6.124505e-01 +0.390000 7.222899e-01 6.208967e-01 5.884460e-01 +0.400000 6.482631e-01 5.953087e-01 5.699278e-01 +0.410000 5.781627e-01 5.730971e-01 5.564420e-01 +0.420000 5.157735e-01 5.544402e-01 5.474905e-01 +0.430000 4.634795e-01 5.395280e-01 5.425407e-01 +0.440000 4.224349e-01 5.285235e-01 5.410380e-01 +0.450000 3.929418e-01 5.215305e-01 5.424213e-01 +0.460000 3.748639e-01 5.185692e-01 5.461420e-01 +0.470000 3.679641e-01 5.195620e-01 5.516852e-01 +0.480000 3.721204e-01 5.243302e-01 5.585935e-01 +0.490000 3.874083e-01 5.326029e-01 5.664907e-01 +0.500000 4.140514e-01 5.440364e-01 5.751059e-01 +0.510000 4.522382e-01 5.582450e-01 5.842963e-01 +0.520000 5.018122e-01 5.748387e-01 5.940669e-01 +0.530000 5.618693e-01 5.934668e-01 6.045855e-01 +0.540000 6.303577e-01 6.138641e-01 6.161926e-01 +0.550000 7.038367e-01 6.358952e-01 6.294037e-01 +0.560000 7.775882e-01 6.595946e-01 6.449037e-01 +0.570000 8.462014e-01 6.851967e-01 6.635316e-01 +0.580000 9.045780e-01 7.131548e-01 6.862563e-01 +0.590000 9.490803e-01 7.441439e-01 7.141411e-01 +0.600000 9.784214e-01 7.790452e-01 7.482988e-01 +0.610000 9.939735e-01 8.189122e-01 7.898381e-01 +0.620000 9.994265e-01 8.649154e-01 8.398003e-01 +0.630000 1.000005e+00 9.182684e-01 8.990911e-01 +0.640000 1.001584e+00 9.801360e-01 9.684065e-01 +0.650000 1.010005e+00 1.051528e+00 1.048158e+00 +0.660000 1.030699e+00 1.133185e+00 1.138401e+00 +0.670000 1.068607e+00 1.225456e+00 1.238764e+00 +0.680000 1.128215e+00 1.328188e+00 1.348390e+00 +0.690000 1.213540e+00 1.440615e+00 1.465895e+00 +0.700000 1.327870e+00 1.561279e+00 1.589337e+00 +0.710000 1.473103e+00 1.687976e+00 1.716210e+00 +0.720000 1.648620e+00 1.817733e+00 1.843471e+00 +0.730000 1.849790e+00 1.946844e+00 1.967584e+00 +0.740000 2.066518e+00 2.070947e+00 2.084608e+00 +0.750000 2.282551e+00 2.185163e+00 2.190315e+00 +0.760000 2.476419e+00 2.284296e+00 2.280342e+00 +0.770000 2.624586e+00 2.363084e+00 2.350381e+00 +0.780000 2.706446e+00 2.416507e+00 2.396395e+00 +0.790000 2.709671e+00 2.440138e+00 2.414867e+00 +0.800000 2.633762e+00 2.430512e+00 2.403061e+00 +0.810000 2.490197e+00 2.385512e+00 2.359293e+00 +0.820000 2.299110e+00 2.304722e+00 2.283198e+00 +0.830000 2.084002e+00 2.189740e+00 2.175969e+00 +0.840000 1.866653e+00 2.044391e+00 2.040558e+00 +0.850000 1.663794e+00 1.874817e+00 1.881798e+00 +0.860000 1.486002e+00 1.689399e+00 1.706439e+00 +0.870000 1.338291e+00 1.498464e+00 1.523040e+00 +0.880000 1.221545e+00 1.313751e+00 1.341704e+00 +0.890000 1.134018e+00 1.147597e+00 1.173601e+00 +0.900000 1.072503e+00 1.011844e+00 1.030238e+00 +0.910000 1.033025e+00 9.164632e-01 9.224422e-01 +0.920000 1.011135e+00 8.679496e-01 8.589928e-01 +0.930000 1.001930e+00 8.675563e-01 8.448692e-01 +0.940000 1.000015e+00 9.095173e-01 8.790638e-01 +0.950000 9.995757e-01 9.794604e-01 9.519200e-01 +0.960000 9.947162e-01 1.053310e+00 1.041957e+00 +0.970000 9.801295e-01 1.097087e+00 1.112156e+00 +0.980000 9.519710e-01 1.068153e+00 1.105690e+00 +0.990000 9.086638e-01 9.186056e-01 9.411008e-01 diff -Nru gsl-doc-1.16/doc/examples/largefit.c gsl-doc-2.3/doc/examples/largefit.c --- gsl-doc-1.16/doc/examples/largefit.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/largefit.c 2016-08-12 17:52:51.000000000 +0000 @@ -0,0 +1,173 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +/* function to be fitted */ +double +func(const double t) +{ + double x = sin(10.0 * t); + return exp(x*x*x); +} + +/* construct a row of the least squares matrix */ +int +build_row(const double t, gsl_vector *row) +{ + const size_t p = row->size; + double Xj = 1.0; + size_t j; + + for (j = 0; j < p; ++j) + { + gsl_vector_set(row, j, Xj); + Xj *= t; + } + + return 0; +} + +int +solve_system(const int print_data, const gsl_multilarge_linear_type * T, + const double lambda, const size_t n, const size_t p, + gsl_vector * c) +{ + const size_t nblock = 5; /* number of blocks to accumulate */ + const size_t nrows = n / nblock; /* number of rows per block */ + gsl_multilarge_linear_workspace * w = + gsl_multilarge_linear_alloc(T, p); + gsl_matrix *X = gsl_matrix_alloc(nrows, p); + gsl_vector *y = gsl_vector_alloc(nrows); + gsl_rng *r = gsl_rng_alloc(gsl_rng_default); + const size_t nlcurve = 200; + gsl_vector *reg_param = gsl_vector_alloc(nlcurve); + gsl_vector *rho = gsl_vector_alloc(nlcurve); + gsl_vector *eta = gsl_vector_alloc(nlcurve); + size_t rowidx = 0; + double rnorm, snorm, rcond; + double t = 0.0; + double dt = 1.0 / (n - 1.0); + + while (rowidx < n) + { + size_t nleft = n - rowidx; /* number of rows left to accumulate */ + size_t nr = GSL_MIN(nrows, nleft); /* number of rows in this block */ + gsl_matrix_view Xv = gsl_matrix_submatrix(X, 0, 0, nr, p); + gsl_vector_view yv = gsl_vector_subvector(y, 0, nr); + size_t i; + + /* build (X,y) block with 'nr' rows */ + for (i = 0; i < nr; ++i) + { + gsl_vector_view row = gsl_matrix_row(&Xv.matrix, i); + double fi = func(t); + double ei = gsl_ran_gaussian (r, 0.1 * fi); /* noise */ + double yi = fi + ei; + + /* construct this row of LS matrix */ + build_row(t, &row.vector); + + /* set right hand side value with added noise */ + gsl_vector_set(&yv.vector, i, yi); + + if (print_data && (i % 100 == 0)) + printf("%f %f\n", t, yi); + + t += dt; + } + + /* accumulate (X,y) block into LS system */ + gsl_multilarge_linear_accumulate(&Xv.matrix, &yv.vector, w); + + rowidx += nr; + } + + if (print_data) + printf("\n\n"); + + /* compute L-curve */ + gsl_multilarge_linear_lcurve(reg_param, rho, eta, w); + + /* solve large LS system and store solution in c */ + gsl_multilarge_linear_solve(lambda, c, &rnorm, &snorm, w); + + /* compute reciprocal condition number */ + gsl_multilarge_linear_rcond(&rcond, w); + + fprintf(stderr, "=== Method %s ===\n", gsl_multilarge_linear_name(w)); + fprintf(stderr, "condition number = %e\n", 1.0 / rcond); + fprintf(stderr, "residual norm = %e\n", rnorm); + fprintf(stderr, "solution norm = %e\n", snorm); + + /* output L-curve */ + { + size_t i; + for (i = 0; i < nlcurve; ++i) + { + printf("%.12e %.12e %.12e\n", + gsl_vector_get(reg_param, i), + gsl_vector_get(rho, i), + gsl_vector_get(eta, i)); + } + printf("\n\n"); + } + + gsl_matrix_free(X); + gsl_vector_free(y); + gsl_multilarge_linear_free(w); + gsl_rng_free(r); + gsl_vector_free(reg_param); + gsl_vector_free(rho); + gsl_vector_free(eta); + + return 0; +} + +int +main(int argc, char *argv[]) +{ + const size_t n = 50000; /* number of observations */ + const size_t p = 16; /* polynomial order + 1 */ + double lambda = 0.0; /* regularization parameter */ + gsl_vector *c_tsqr = gsl_vector_alloc(p); + gsl_vector *c_normal = gsl_vector_alloc(p); + + if (argc > 1) + lambda = atof(argv[1]); + + /* solve system with TSQR method */ + solve_system(1, gsl_multilarge_linear_tsqr, lambda, n, p, c_tsqr); + + /* solve system with Normal equations method */ + solve_system(0, gsl_multilarge_linear_normal, lambda, n, p, c_normal); + + /* output solutions */ + { + gsl_vector *v = gsl_vector_alloc(p); + double t; + + for (t = 0.0; t <= 1.0; t += 0.01) + { + double f_exact = func(t); + double f_tsqr, f_normal; + + build_row(t, v); + gsl_blas_ddot(v, c_tsqr, &f_tsqr); + gsl_blas_ddot(v, c_normal, &f_normal); + + printf("%f %e %e %e\n", t, f_exact, f_tsqr, f_normal); + } + + gsl_vector_free(v); + } + + gsl_vector_free(c_tsqr); + gsl_vector_free(c_normal); + + return 0; +} diff -Nru gsl-doc-1.16/doc/examples/largefit.txt gsl-doc-2.3/doc/examples/largefit.txt --- gsl-doc-1.16/doc/examples/largefit.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/largefit.txt 2016-08-12 17:51:38.000000000 +0000 @@ -0,0 +1,1006 @@ +0.000000 1.013392 +0.002000 1.057114 +0.004000 1.006672 +0.006000 1.005092 +0.008000 1.034198 +0.010000 0.999146 +0.012000 0.972324 +0.014000 1.091945 +0.016000 1.027780 +0.018000 0.997921 +0.020000 0.911458 +0.022000 1.176001 +0.024000 1.249657 +0.026001 0.873918 +0.028001 0.996930 +0.030001 1.168647 +0.032001 1.042424 +0.034001 0.956186 +0.036001 1.032493 +0.038001 1.016478 +0.040001 0.916054 +0.042001 1.160628 +0.044001 1.129574 +0.046001 1.134291 +0.048001 1.103102 +0.050001 1.067503 +0.052001 1.242134 +0.054001 1.210027 +0.056001 1.286558 +0.058001 1.167437 +0.060001 1.270989 +0.062001 1.238484 +0.064001 1.247879 +0.066001 1.318323 +0.068001 1.290329 +0.070001 1.076233 +0.072001 1.364227 +0.074001 1.331892 +0.076002 1.644310 +0.078002 1.272358 +0.080002 1.444683 +0.082002 1.379124 +0.084002 1.681307 +0.086002 1.662120 +0.088002 1.616803 +0.090002 1.563115 +0.092002 1.980689 +0.094002 1.605972 +0.096002 1.714268 +0.098002 1.721501 +0.100002 1.835777 +0.102002 1.843517 +0.104002 1.874658 +0.106002 1.839987 +0.108002 2.096691 +0.110002 1.874711 +0.112002 2.227526 +0.114002 2.198516 +0.116002 2.531939 +0.118002 2.440293 +0.120002 2.474498 +0.122002 1.886756 +0.124002 2.395872 +0.126003 2.424067 +0.128003 2.533481 +0.130003 2.920822 +0.132003 2.639199 +0.134003 2.178261 +0.136003 2.563181 +0.138003 2.330377 +0.140003 2.482197 +0.142003 2.944214 +0.144003 2.375046 +0.146003 2.706059 +0.148003 2.644492 +0.150003 2.344976 +0.152003 2.700872 +0.154003 3.176028 +0.156003 2.982176 +0.158003 2.663030 +0.160003 2.816813 +0.162003 2.245545 +0.164003 2.257987 +0.166003 2.447319 +0.168003 2.955995 +0.170003 2.754546 +0.172003 3.082176 +0.174003 2.488766 +0.176004 2.452559 +0.178004 2.407845 +0.180004 2.795500 +0.182004 2.230950 +0.184004 2.287802 +0.186004 2.460347 +0.188004 2.083690 +0.190004 2.204919 +0.192004 2.696174 +0.194004 2.395705 +0.196004 2.178485 +0.198004 2.307372 +0.200004 2.255902 +0.202004 1.987918 +0.204004 1.887785 +0.206004 2.075691 +0.208004 1.686572 +0.210004 1.982841 +0.212004 2.020780 +0.214004 1.649430 +0.216004 1.963334 +0.218004 1.816612 +0.220004 2.047502 +0.222004 1.570563 +0.224004 1.573427 +0.226005 1.335974 +0.228005 1.378628 +0.230005 1.628469 +0.232005 1.620938 +0.234005 1.216537 +0.236005 1.638633 +0.238005 1.554498 +0.240005 1.391226 +0.242005 1.431787 +0.244005 1.263934 +0.246005 1.425465 +0.248005 1.105883 +0.250005 1.265657 +0.252005 1.168639 +0.254005 1.242218 +0.256005 1.245104 +0.258005 1.108120 +0.260005 1.211894 +0.262005 1.078647 +0.264005 1.057431 +0.266005 1.108110 +0.268005 1.266898 +0.270005 1.100118 +0.272005 0.990081 +0.274005 1.023601 +0.276006 1.238272 +0.278006 1.145608 +0.280006 1.064366 +0.282006 1.025441 +0.284006 1.121463 +0.286006 0.977097 +0.288006 1.032786 +0.290006 1.166776 +0.292006 1.089725 +0.294006 1.048237 +0.296006 0.994855 +0.298006 0.981623 +0.300006 0.964743 +0.302006 1.170996 +0.304006 0.909883 +0.306006 1.060783 +0.308006 1.066695 +0.310006 1.235120 +0.312006 0.983080 +0.314006 0.818831 +0.316006 1.173228 +0.318006 1.052397 +0.320006 0.958336 +0.322006 1.063317 +0.324006 1.045760 +0.326007 0.918851 +0.328007 0.828151 +0.330007 0.922930 +0.332007 0.960096 +0.334007 0.837558 +0.336007 1.093800 +0.338007 0.822421 +0.340007 0.982303 +0.342007 0.857034 +0.344007 0.929809 +0.346007 1.098484 +0.348007 0.912742 +0.350007 0.877250 +0.352007 0.875453 +0.354007 0.842108 +0.356007 0.885992 +0.358007 0.906674 +0.360007 0.948593 +0.362007 0.826321 +0.364007 0.794805 +0.366007 0.799018 +0.368007 0.762520 +0.370007 0.854828 +0.372007 0.913891 +0.374007 0.900230 +0.376008 0.764344 +0.378008 0.893758 +0.380008 0.843119 +0.382008 0.637597 +0.384008 0.732940 +0.386008 0.632072 +0.388008 0.820424 +0.390008 0.653834 +0.392008 0.723423 +0.394008 0.668586 +0.396008 0.587775 +0.398008 0.638778 +0.400008 0.675101 +0.402008 0.679205 +0.404008 0.558361 +0.406008 0.669089 +0.408008 0.659724 +0.410008 0.599887 +0.412008 0.691995 +0.414008 0.577313 +0.416008 0.483322 +0.418008 0.536498 +0.420008 0.504125 +0.422008 0.548830 +0.424008 0.493233 +0.426009 0.477806 +0.428009 0.407442 +0.430009 0.503880 +0.432009 0.460940 +0.434009 0.469029 +0.436009 0.501596 +0.438009 0.405411 +0.440009 0.418834 +0.442009 0.478496 +0.444009 0.420672 +0.446009 0.447649 +0.448009 0.375458 +0.450009 0.400451 +0.452009 0.373357 +0.454009 0.434920 +0.456009 0.422812 +0.458009 0.340769 +0.460009 0.414966 +0.462009 0.369741 +0.464009 0.385961 +0.466009 0.366010 +0.468009 0.353909 +0.470009 0.320795 +0.472009 0.422465 +0.474009 0.402222 +0.476010 0.335765 +0.478010 0.409413 +0.480010 0.384967 +0.482010 0.381460 +0.484010 0.357884 +0.486010 0.423619 +0.488010 0.450770 +0.490010 0.421563 +0.492010 0.386944 +0.494010 0.434098 +0.496010 0.414335 +0.498010 0.373130 +0.500010 0.494584 +0.502010 0.399168 +0.504010 0.327445 +0.506010 0.414090 +0.508010 0.548788 +0.510010 0.413589 +0.512010 0.415560 +0.514010 0.402811 +0.516010 0.467932 +0.518010 0.447742 +0.520010 0.514848 +0.522010 0.545292 +0.524010 0.585226 +0.526011 0.481420 +0.528011 0.542183 +0.530011 0.566527 +0.532011 0.639324 +0.534011 0.665601 +0.536011 0.728721 +0.538011 0.628460 +0.540011 0.745176 +0.542011 0.629362 +0.544011 0.755605 +0.546011 0.730199 +0.548011 0.538527 +0.550011 0.716283 +0.552011 0.653197 +0.554011 0.750977 +0.556011 0.751317 +0.558011 0.669732 +0.560011 0.890732 +0.562011 0.801524 +0.564011 0.896916 +0.566011 0.728432 +0.568011 0.873384 +0.570011 0.915557 +0.572011 0.801362 +0.574011 0.939248 +0.576012 0.841058 +0.578012 0.982556 +0.580012 0.801244 +0.582012 0.944939 +0.584012 0.849316 +0.586012 1.044572 +0.588012 0.991711 +0.590012 0.775179 +0.592012 0.900808 +0.594012 1.054818 +0.596012 0.949419 +0.598012 1.055190 +0.600012 0.960703 +0.602012 0.994899 +0.604012 0.942069 +0.606012 0.782694 +0.608012 0.862081 +0.610012 0.972296 +0.612012 1.084091 +0.614012 0.859938 +0.616012 0.945606 +0.618012 0.991509 +0.620012 1.135856 +0.622012 1.113732 +0.624012 1.075624 +0.626013 1.136413 +0.628013 0.989279 +0.630013 0.986572 +0.632013 0.963125 +0.634013 0.976137 +0.636013 1.133298 +0.638013 0.942319 +0.640013 1.061070 +0.642013 1.010832 +0.644013 1.017137 +0.646013 1.033211 +0.648013 1.023089 +0.650013 1.207996 +0.652013 1.029256 +0.654013 0.894798 +0.656013 1.034056 +0.658013 1.023175 +0.660013 0.972134 +0.662013 1.000921 +0.664013 1.059754 +0.666013 1.205824 +0.668013 1.291515 +0.670013 1.253979 +0.672013 1.021328 +0.674013 1.099351 +0.676014 1.250217 +0.678014 1.053546 +0.680014 1.240934 +0.682014 1.132546 +0.684014 1.207390 +0.686014 1.143019 +0.688014 1.187569 +0.690014 1.117158 +0.692014 1.017676 +0.694014 1.148909 +0.696014 1.307952 +0.698014 1.134271 +0.700014 1.339668 +0.702014 1.360803 +0.704014 1.209263 +0.706014 1.643307 +0.708014 1.482189 +0.710014 1.620002 +0.712014 1.531291 +0.714014 1.508616 +0.716014 1.551789 +0.718014 1.820704 +0.720014 1.190510 +0.722014 1.871826 +0.724014 1.808171 +0.726015 1.639588 +0.728015 1.896243 +0.730015 1.814870 +0.732015 2.268629 +0.734015 1.860003 +0.736015 1.909307 +0.738015 2.091058 +0.740015 2.307699 +0.742015 1.724754 +0.744015 2.136682 +0.746015 2.482358 +0.748015 2.739133 +0.750015 2.183903 +0.752015 2.505655 +0.754015 2.256298 +0.756015 2.232645 +0.758015 2.418358 +0.760015 2.743980 +0.762015 2.490451 +0.764015 2.591839 +0.766015 2.890467 +0.768015 2.441939 +0.770015 2.795238 +0.772015 2.882743 +0.774015 2.704971 +0.776016 2.864923 +0.778016 2.931144 +0.780016 2.595133 +0.782016 2.778879 +0.784016 2.588524 +0.786016 2.424629 +0.788016 3.490356 +0.790016 2.725991 +0.792016 2.819722 +0.794016 2.795897 +0.796016 2.278287 +0.798016 2.709274 +0.800016 2.864658 +0.802016 2.495316 +0.804016 2.481585 +0.806016 2.761135 +0.808016 2.443268 +0.810016 2.565330 +0.812016 2.160156 +0.814016 2.817464 +0.816016 2.687451 +0.818016 2.225290 +0.820016 2.234668 +0.822016 2.366997 +0.824016 1.801739 +0.826017 1.999203 +0.828017 2.121902 +0.830017 1.658141 +0.832017 2.048377 +0.834017 1.987455 +0.836017 2.056994 +0.838017 1.748644 +0.840017 2.035117 +0.842017 1.991255 +0.844017 1.933487 +0.846017 1.927148 +0.848017 1.526116 +0.850017 1.825349 +0.852017 1.448218 +0.854017 1.266984 +0.856017 1.574851 +0.858017 1.569314 +0.860017 1.461266 +0.862017 1.241627 +0.864017 1.385409 +0.866017 1.438944 +0.868017 1.458593 +0.870017 1.045023 +0.872017 1.156637 +0.874017 1.231397 +0.876018 1.060101 +0.878018 1.208137 +0.880018 1.297885 +0.882018 1.261846 +0.884018 1.073377 +0.886018 1.146843 +0.888018 1.110004 +0.890018 1.142169 +0.892018 1.091117 +0.894018 1.018172 +0.896018 1.325115 +0.898018 1.055748 +0.900018 0.984488 +0.902018 0.967879 +0.904018 0.961651 +0.906018 1.085517 +0.908018 0.924754 +0.910018 1.080906 +0.912018 0.949908 +0.914018 1.084287 +0.916018 1.115371 +0.918018 1.150677 +0.920018 1.197850 +0.922018 0.909476 +0.924018 0.920649 +0.926019 1.061322 +0.928019 0.867733 +0.930019 1.122616 +0.932019 0.730512 +0.934019 1.068192 +0.936019 1.051183 +0.938019 0.939787 +0.940019 0.793864 +0.942019 0.954387 +0.944019 0.949134 +0.946019 0.950377 +0.948019 0.837390 +0.950019 0.920521 +0.952019 1.038896 +0.954019 1.054405 +0.956019 0.800492 +0.958019 1.108765 +0.960019 1.029235 +0.962019 0.886213 +0.964019 1.086449 +0.966019 0.845174 +0.968019 0.825587 +0.970019 0.979444 +0.972019 0.801748 +0.974019 1.027216 +0.976020 1.065852 +0.978020 0.918422 +0.980020 1.073070 +0.982020 0.794571 +0.984020 1.009434 +0.986020 0.789657 +0.988020 1.017966 +0.990020 0.877302 +0.992020 1.009978 +0.994020 0.872902 +0.996020 0.866302 +0.998020 0.851322 + + +3.049679424205e+02 2.259835726033e+02 4.582825874915e-01 +2.680463954339e+02 2.141625880951e+02 5.231740188551e-01 +2.355948285412e+02 2.030649087681e+02 5.890884464064e-01 +2.070720747634e+02 1.929847787351e+02 6.548268076391e-01 +1.820024845720e+02 1.841072060161e+02 7.193815491988e-01 +1.599679938893e+02 1.765119161116e+02 7.819322821113e-01 +1.406011523916e+02 1.701896640168e+02 8.418163499861e-01 +1.235789958554e+02 1.650602877714e+02 8.985336544077e-01 +1.086176603596e+02 1.609890697240e+02 9.518223955972e-01 +9.546764852977e+01 1.578034068101e+02 1.001803566519e+00 +8.390966888471e+01 1.553114384423e+02 1.049166704959e+00 +7.375097889990e+01 1.533208888884e+02 1.095369478520e+00 +6.482217080569e+01 1.516545543003e+02 1.142835180762e+00 +5.697434651904e+01 1.501600821886e+02 1.195128756643e+00 +5.007663459779e+01 1.487142619106e+02 1.257054974652e+00 +4.401400780969e+01 1.472238754460e+02 1.334559527277e+00 +3.868536492180e+01 1.456254596505e+02 1.434275177416e+00 +3.400184472188e+01 1.438854289541e+02 1.562623610255e+00 +2.988534415606e+01 1.420005556014e+02 1.724596948917e+00 +2.626721587113e+01 1.399974024973e+02 1.922589454722e+00 +2.308712344143e+01 1.379285302548e+02 2.155726253457e+00 +2.029203518998e+01 1.358637352439e+02 2.419978906549e+00 +1.783533982465e+01 1.338764658641e+02 2.709110562615e+00 +1.567606914154e+01 1.320282596578e+02 3.016297482822e+00 +1.377821483337e+01 1.303559182938e+02 3.336147029939e+00 +1.211012800981e+01 1.288656178663e+02 3.666761776237e+00 +1.064399141598e+01 1.275352277273e+02 4.011506063370e+00 +9.355355547988e+00 1.263226219087e+02 4.380226295606e+00 +8.222730929480e+00 1.251758562191e+02 4.789832968191e+00 +7.227229750040e+00 1.240414585308e+02 5.264340172168e+00 +6.352250889373e+00 1.228688803423e+02 5.834649703649e+00 +5.583203074639e+00 1.216111234489e+02 6.538466669693e+00 +4.907261554294e+00 1.202229496636e+02 7.420551016472e+00 +4.313154230704e+00 1.186587305709e+02 8.532950836315e+00 +3.790973685020e+00 1.168719533463e+02 9.934207301729e+00 +3.332011959648e+00 1.148178006003e+02 1.168632231592e+01 +2.928615343100e+00 1.124592892136e+02 1.384882214885e+01 +2.574056735603e+00 1.097764132560e+02 1.647021807289e+01 +2.262423467019e+00 1.067766702154e+02 1.957804508552e+01 +1.988518696314e+00 1.035042389902e+02 2.316931526695e+01 +1.747774748288e+00 1.000441263405e+02 2.720379867731e+01 +1.536176942372e+00 9.651751550744e+01 3.160290211673e+01 +1.350196643238e+00 9.306632436152e+01 3.625646867326e+01 +1.186732416773e+00 8.982894691955e+01 4.103808359877e+01 +1.043058310116e+00 8.691391183585e+01 4.582676062570e+01 +9.167783932792e-01 8.438070050596e+01 5.053038948883e+01 +8.057868042778e-01 8.223470407157e+01 5.510530773189e+01 +7.082326314713e-01 8.043702331377e+01 5.956711649011e+01 +6.224890474974e-01 7.892357938800e+01 6.398958416973e+01 +5.471261800648e-01 7.762560078773e+01 6.849028056538e+01 +4.808872671990e-01 7.648531883774e+01 7.320362439154e+01 +4.226676992988e-01 7.546418427863e+01 7.824535039656e+01 +3.714965985086e-01 7.454378223531e+01 8.367705422653e+01 +3.265206282203e-01 7.372122857792e+01 8.948281171216e+01 +2.869897627095e-01 7.300159914866e+01 9.556798423928e+01 +2.522447795993e-01 7.239018973299e+01 1.017823565619e+02 +2.217062665734e-01 7.188699034993e+01 1.079600203842e+02 +1.948649590132e-01 7.148458809107e+01 1.139628834504e+02 +1.712732474282e-01 7.116922187338e+01 1.197157695454e+02 +1.505377130561e-01 7.092365340987e+01 1.252264459579e+02 +1.323125671547e-01 7.073032520221e+01 1.305894207317e+02 +1.162938845799e-01 7.057376516914e+01 1.359754401985e+02 +1.022145354861e-01 7.044186488844e+01 1.416096903477e+02 +8.983973063048e-02 7.032612844923e+01 1.477431961358e+02 +7.896310599444e-02 7.022118277132e+01 1.546258673032e+02 +6.940328142717e-02 7.012386456067e+01 1.624950613229e+02 +6.100083592454e-02 7.003217179598e+01 1.715957508969e+02 +5.361564910151e-02 6.994433015584e+01 1.822423835322e+02 +4.712456452454e-02 6.985815866212e+01 1.949179608667e+02 +4.141933593721e-02 6.977081093619e+01 2.103878858382e+02 +3.640482213021e-02 6.967884969909e+01 2.297913717301e+02 +3.199740035286e-02 6.957853426728e+01 2.546684078657e+02 +2.812357180813e-02 6.946618683456e+01 2.868951226109e+02 +2.471873597619e-02 6.933853021627e+01 3.285416801955e+02 +2.172611332691e-02 6.919291616778e+01 3.817194980868e+02 +1.909579845621e-02 6.902736812910e+01 4.485119002619e+02 +1.678392785646e-02 6.884035987401e+01 5.310659202446e+02 +1.475194844232e-02 6.863027944213e+01 6.318835512218e+02 +1.296597463394e-02 6.839461346375e+01 7.543092624425e+02 +1.139622327623e-02 6.812901417531e+01 9.031585111281e+02 +1.001651697063e-02 6.782651456142e+01 1.085359927714e+03 +8.803847537122e-03 6.747716659000e+01 1.310418952090e+03 +7.737992326490e-03 6.706828588715e+01 1.590506790044e+03 +6.801176984534e-03 6.658536327462e+01 1.940059864352e+03 +5.977779044391e-03 6.601363178470e+01 2.374889252061e+03 +5.254067404042e-03 6.534026945891e+01 2.910855638793e+03 +4.617973344485e-03 6.455719732250e+01 3.562138386906e+03 +4.058889270048e-03 6.366428932867e+01 4.339102681606e+03 +3.567491814604e-03 6.267248832862e+01 5.245859720167e+03 +3.135586363782e-03 6.160588907903e+01 6.277853533189e+03 +2.755970400406e-03 6.050155242530e+01 7.420104055499e+03 +2.422313394281e-03 5.940602862165e+01 8.646904275189e+03 +2.129051233368e-03 5.836855639358e+01 9.923613104847e+03 +1.871293435858e-03 5.743244640608e+01 1.121063715501e+04 +1.644741595788e-03 5.662739636684e+01 1.246893675602e+04 +1.445617702215e-03 5.596542477358e+01 1.366581501745e+04 +1.270601136561e-03 5.544155166517e+01 1.477969701783e+04 +1.116773297502e-03 5.503826835667e+01 1.580309946444e+04 +9.815689299551e-04 5.473156687373e+01 1.674369511751e+04 +8.627333465155e-04 5.449640043827e+01 1.762385046111e+04 +7.582848279681e-04 5.431042986004e+01 1.847900635574e+04 +6.664815758530e-04 5.415593441138e+01 1.935484503417e+04 +5.857926659852e-04 5.402033332951e+01 2.030270337697e+04 +5.148725185431e-04 5.389585865836e+01 2.137270142245e+04 +4.525384589871e-04 5.377876456271e+01 2.260501851422e+04 +3.977509956095e-04 5.366827635539e+01 2.402150709753e+04 +3.495964848212e-04 5.356539678304e+01 2.562124943888e+04 +3.072718951013e-04 5.347170769179e+01 2.738330307216e+04 +2.700714155276e-04 5.338835905032e+01 2.927752258345e+04 +2.373746855730e-04 5.331543087285e+01 3.128147567889e+04 +2.086364498842e-04 5.325174979972e+01 3.339987703278e+04 +1.833774655255e-04 5.319509292624e+01 3.568305894010e+04 +1.611765100547e-04 5.314260887537e+01 3.824166167882e+04 +1.416633571578e-04 5.309128027256e+01 4.125447176857e+04 +1.245126027012e-04 5.303831969727e+01 4.496484882641e+04 +1.094382382465e-04 5.298147262353e+01 4.966040333759e+04 +9.618888153220e-05 5.291924900503e+01 5.563383515992e+04 +8.454358438755e-05 5.285110689565e+01 6.313071752292e+04 +7.430814816890e-05 5.277757941862e+01 7.229717397212e+04 +6.531188527540e-05 5.270029563775e+01 8.314068461487e+04 +5.740477273813e-05 5.262182638889e+01 9.551210236273e+04 +5.045495041555e-05 5.254531378210e+01 1.091125928936e+05 +4.434652207489e-05 5.247392203016e+01 1.235271215048e+05 +3.897762268998e-05 5.241024302340e+01 1.382828041506e+05 +3.425871972545e-05 5.235583933623e+01 1.529245504406e+05 +3.011112007939e-05 5.231106435988e+01 1.670954150499e+05 +2.646565778586e-05 5.227518193852e+01 1.806094911526e+05 +2.326154059335e-05 5.224668972485e+01 1.935119799947e+05 +2.044533618452e-05 5.222369908601e+01 2.061305143217e+05 +1.797008113114e-05 5.220425083049e+01 2.191280230144e+05 +1.579449772533e-05 5.218651154871e+01 2.335655557254e+05 +1.388230562649e-05 5.216885414581e+01 2.509716911627e+05 +1.220161684523e-05 5.214985583332e+01 2.733973324070e+05 +1.072440397463e-05 5.212824939940e+01 3.034255308554e+05 +9.426032801221e-06 5.210285127069e+01 3.441286227233e+05 +8.284851501294e-06 5.207247405350e+01 3.990242380564e+05 +7.281829571992e-06 5.203581896811e+01 4.721336506966e+05 +6.400240475916e-06 5.199133865623e+01 5.682316956516e+05 +5.625382706993e-06 5.193706450555e+01 6.933025701832e+05 +4.944334626053e-06 5.187040273270e+01 8.551440096070e+05 +4.345738977722e-06 5.178791397898e+01 1.064035103089e+06 +3.819613495208e-06 5.168509532479e+01 1.333397492723e+06 +3.357184434584e-06 5.155617973127e+01 1.680418230300e+06 +2.950740262582e-06 5.139396237027e+01 2.126640761294e+06 +2.593503057958e-06 5.118966656947e+01 2.698536351414e+06 +2.279515481906e-06 5.093288121229e+01 3.428020357099e+06 +2.003541432621e-06 5.061163611976e+01 4.352780805349e+06 +1.760978727319e-06 5.021272592245e+01 5.516163242910e+06 +1.547782355572e-06 4.972243530928e+01 6.966230762767e+06 +1.360397024141e-06 4.912784091228e+01 8.753521489096e+06 +1.195697868392e-06 4.841883568674e+01 1.092701093981e+07 +1.050938341606e-06 4.759089389166e+01 1.352794387497e+07 +9.237044131753e-07 4.664832218953e+01 1.658164028060e+07 +8.118743118798e-07 4.560732261099e+01 2.008816503830e+07 +7.135831429282e-07 4.449773910327e+01 2.401376999151e+07 +6.271917887047e-07 4.336215166050e+01 2.828587218909e+07 +5.512595746088e-07 4.225139784199e+01 3.279438219587e+07 +4.845202441592e-07 4.121682990561e+01 3.740090786786e+07 +4.258608427195e-07 4.030127349128e+01 4.195485557181e+07 +3.743031577071e-07 3.953173297308e+01 4.631278202120e+07 +3.289874057797e-07 3.891642339257e+01 5.035599138393e+07 +2.891578949660e-07 3.844676343210e+01 5.400216182414e+07 +2.541504226369e-07 3.810280148913e+01 5.720924257908e+07 +2.233811991685e-07 3.785954274835e+01 5.997258460255e+07 +1.963371125817e-07 3.769210926731e+01 6.231799311050e+07 +1.725671718139e-07 3.757885546304e+01 6.429372180437e+07 +1.516749859274e-07 3.750258812543e+01 6.596375020163e+07 +1.333121538371e-07 3.745051689113e+01 6.740362385498e+07 +1.171724543240e-07 3.741358003337e+01 6.869911719292e+07 +1.029867394468e-07 3.738560108985e+01 6.994710253322e+07 +9.051844619181e-08 3.736252106902e+01 7.125718563003e+07 +7.955965151425e-08 3.734179686937e+01 7.275186740938e+07 +6.992760498403e-08 3.732196707845e+01 7.456253628416e+07 +6.146168121320e-08 3.730234421251e+01 7.681932313605e+07 +5.402070124404e-08 3.728278048869e+01 7.963573818349e+07 +4.748057822849e-08 3.726346243053e+01 8.309395524530e+07 +4.173224813812e-08 3.724471192961e+01 8.724121987765e+07 +3.667985099677e-08 3.722679910599e+01 9.210837630022e+07 +3.223913230585e-08 3.720979199425e+01 9.775638111824e+07 +2.833603800423e-08 3.719346822868e+01 1.043487916304e+08 +2.490547953214e-08 3.717729492105e+01 1.122419448656e+08 +2.189024840499e-08 3.716045855081e+01 1.220806229921e+08 +1.924006219650e-08 3.714191300791e+01 1.348824173316e+08 +1.691072602177e-08 3.712041695171e+01 1.520889847190e+08 +1.486339553702e-08 3.709454560502e+01 1.755672020785e+08 +1.306392916575e-08 3.706267739824e+01 2.075689433456e+08 +1.148231874895e-08 3.702296679654e+01 2.506905659759e+08 +1.009218912470e-08 3.697332095515e+01 3.078742741709e+08 +8.870358292231e-09 3.691140209812e+01 3.824534649951e+08 +7.796450825514e-09 3.683468187906e+01 4.781999433549e+08 +6.852558089779e-09 3.674057841140e+01 5.993131653022e+08 +6.022939594530e-09 3.662670799804e+01 7.502945321952e+08 +5.293760502879e-09 3.649127521517e+01 9.356581119542e+08 +4.652860919823e-09 3.633359756823e+01 1.159442820756e+09 +4.089553112091e-09 3.615470633857e+01 1.424521991192e+09 +3.594443277976e-09 3.595788592371e+01 1.731766078313e+09 +3.159274894948e-09 3.574893609636e+01 2.079201726433e+09 +2.776791032705e-09 3.553592108066e+01 2.461399457379e+09 +2.440613335560e-09 3.532827065242e+01 2.869359696485e+09 +2.145135656071e-09 3.513533667002e+01 3.291094515703e+09 + + +3.049679424205e+02 2.259835726033e+02 4.582825874915e-01 +2.580143967012e+02 2.107917110746e+02 5.426082927241e-01 +2.182899237760e+02 1.969684354706e+02 6.280418497061e-01 +1.846815194475e+02 1.850487061133e+02 7.121585522137e-01 +1.562475401313e+02 1.752656274770e+02 7.930682981603e-01 +1.321913197927e+02 1.675964837258e+02 8.693421204564e-01 +1.118388488795e+02 1.618268821054e+02 9.400558583882e-01 +9.461988985585e+01 1.576110875095e+02 1.005149540682e+00 +8.005200023099e+01 1.545371696057e+02 1.066046743531e+00 +6.772701543772e+01 1.521942914640e+02 1.126373406299e+00 +5.729961283748e+01 1.502241872559e+02 1.192658486550e+00 +4.847763643658e+01 1.483466628748e+02 1.274825221439e+00 +4.101391123083e+01 1.463656702668e+02 1.385929772224e+00 +3.469931783187e+01 1.441690985792e+02 1.540301316776e+00 +2.935693333953e+01 1.417297421472e+02 1.749806092407e+00 +2.483707429862e+01 1.391041033590e+02 2.019585643005e+00 +2.101310285311e+01 1.364177628998e+02 2.345735002147e+00 +1.777787859417e+01 1.338283415434e+02 2.716599205799e+00 +1.504075668969e+01 1.314720392843e+02 3.117640207549e+00 +1.272504818840e+01 1.294169569152e+02 3.538511961844e+00 +1.076587134131e+01 1.276471559312e+02 3.980317715907e+00 +9.108333738442e+00 1.260812049620e+02 4.461112370318e+00 +7.705994327879e+00 1.246070234525e+02 5.018597491481e+00 +6.519562225819e+00 1.231104890422e+02 5.710329194894e+00 +5.515795860705e+00 1.214867211134e+02 6.613138593918e+00 +4.666571607597e+00 1.196368388221e+02 7.823580755521e+00 +3.948095817681e+00 1.174610443004e+02 9.458350960490e+00 +3.340238165469e+00 1.148598056939e+02 1.164917560198e+01 +2.825967635357e+00 1.117502412693e+02 1.452604760013e+01 +2.390875344951e+00 1.080972264270e+02 1.818796364880e+01 +2.022770835581e+00 1.039503446808e+02 2.266732295247e+01 +1.711340518826e+00 9.946934383099e+01 2.789962785978e+01 +1.447858709380e+00 9.491587394605e+01 3.371400985489e+01 +1.224943147940e+00 9.059756018016e+01 3.985883912724e+01 +1.036348164336e+00 8.677789061808e+01 4.606460668162e+01 +8.767896857335e-01 8.359646347455e+01 5.212653786163e+01 +7.417971869529e-01 8.104571911451e+01 5.797568302676e+01 +6.275884348605e-01 7.901219010388e+01 6.370905876257e+01 +5.309635173847e-01 7.734832525030e+01 6.956172344971e+01 +4.492151880655e-01 7.593296422152e+01 7.581897226351e+01 +3.800530141556e-01 7.469915091790e+01 8.268988116780e+01 +3.215392030504e-01 7.362996788669e+01 9.019565601143e+01 +2.720343090240e-01 7.273474094259e+01 9.813916665329e+01 +2.301512990768e-01 7.202192463254e+01 1.061832261122e+02 +1.947166909085e-01 7.148248866532e+01 1.139975843316e+02 +1.647376741754e-01 7.108865833154e+01 1.213999943425e+02 +1.393742938322e-01 7.080299585605e+01 1.284368825002e+02 +1.179159161890e-01 7.058920502254e+01 1.353897398723e+02 +9.976131830610e-02 7.041904289990e+01 1.427184814670e+02 +8.440184287099e-02 7.027423887434e+01 1.509648598701e+02 +7.140714658724e-02 7.014478571731e+01 1.606625767605e+02 +6.041314277373e-02 7.002547201602e+01 1.723360934395e+02 +5.111180034816e-02 6.991233631353e+01 1.866698902479e+02 +4.324251338182e-02 6.980030144257e+01 2.048512607612e+02 +3.658479941695e-02 6.968249354276e+01 2.289602472619e+02 +3.095212196757e-02 6.955090952728e+01 2.621794592607e+02 +2.618666412181e-02 6.939767543500e+01 3.086242096507e+02 +2.215490681210e-02 6.921620850188e+01 3.728421070701e+02 +1.874388786482e-02 6.900177043142e+01 4.593858154564e+02 +1.585803701495e-02 6.875094124020e+01 5.729767296634e+02 +1.341649820897e-02 6.845968368576e+01 7.195640314556e+02 +1.135086417200e-02 6.812026175427e+01 9.082478531752e+02 +9.603259766031e-03 6.771817256197e+01 1.153588955293e+03 +8.124720438586e-03 6.723070460904e+01 1.477311918389e+03 +6.873820329080e-03 6.662828151778e+01 1.908279926652e+03 +5.815511594968e-03 6.587892354475e+01 2.480185026957e+03 +4.920142437842e-03 6.495574734126e+01 3.227081011554e+03 +4.162626316419e-03 6.384720900213e+01 4.176967938403e+03 +3.521739069356e-03 6.256865185603e+01 5.343610016092e+03 +2.979524254605e-03 6.117107240471e+01 6.717761704343e+03 +2.520790044052e-03 5.974038296860e+01 8.260991136084e+03 +2.132683577376e-03 5.838168094622e+01 9.906593124929e+03 +1.804330849347e-03 5.719097351245e+01 1.157044754920e+04 +1.526532040872e-03 5.622731665128e+01 1.316986820656e+04 +1.291503757557e-03 5.550068025654e+01 1.464383902609e+04 +1.092660953800e-03 5.498030660407e+01 1.596756996356e+04 +9.244324323271e-04 5.461483823207e+01 1.715835023547e+04 +7.821047498462e-04 5.435156904376e+01 1.827395545075e+04 +6.616901553228e-04 5.414797212023e+01 1.940534856590e+04 +5.598148607808e-04 5.397562114610e+01 2.066231255729e+04 +4.736245141778e-04 5.381940468664e+01 2.214936214812e+04 +4.007042258887e-04 5.367450654534e+01 2.393457955958e+04 +3.390109080900e-04 5.354229985126e+01 2.602639663440e+04 +2.868160313236e-04 5.342604724619e+01 2.837817555207e+04 +2.426571943885e-04 5.332736508149e+01 3.092967785648e+04 +2.052971506396e-04 5.324459080968e+01 3.367054173808e+04 +1.736891426893e-04 5.317299906526e+01 3.671050569139e+04 +1.469475742560e-04 5.310630424053e+01 4.032974244152e+04 +1.243231974398e-04 5.303819740723e+01 4.499743271301e+04 +1.051821202216e-04 5.296362103615e+01 5.132199424049e+04 +8.898804601339e-05 5.287975482181e+01 5.991429886061e+04 +7.528724764817e-05 5.278641293981e+01 7.122146357710e+04 +6.369585480710e-05 5.268658738576e+01 8.532818479701e+04 +5.388909870323e-05 5.258592744926e+01 1.018857103170e+05 +4.559221267760e-05 5.249113326898e+01 1.201705707293e+05 +3.857273375988e-05 5.240863762809e+01 1.391467466499e+05 +3.263398949798e-05 5.234177351724e+01 1.578504886232e+05 +2.760958756991e-05 5.229076495765e+01 1.755532601109e+05 +2.335875378730e-05 5.225329742770e+01 1.920099678601e+05 +1.976238787030e-05 5.222562200334e+01 2.076530752312e+05 +1.671972648424e-05 5.220315733218e+01 2.239381257502e+05 +1.414552004253e-05 5.218315775742e+01 2.429197584341e+05 +1.196764417542e-05 5.216240796147e+01 2.684093632441e+05 +1.012507894223e-05 5.213794233797e+01 3.046802204850e+05 +8.566199168660e-06 5.210910669969e+01 3.577988367371e+05 +7.247328007599e-06 5.207584536028e+01 4.301821112814e+05 +6.131513196879e-06 5.203088670405e+01 5.412010475005e+05 +5.187491727169e-06 5.183122774103e+01 9.969792728200e+05 +4.388813911898e-06 5.190699188272e+01 9.893521774544e+05 +3.713102317328e-06 5.190798847671e+01 9.961181134401e+05 +3.141424789410e-06 5.182411236510e+01 1.341532374497e+06 +2.657764010829e-06 5.147839905729e+01 2.509821409081e+06 +2.248568726226e-06 5.046109021201e+01 5.732483448678e+06 +1.902374061791e-06 5.184220134806e+01 2.005716766290e+06 +1.609480301297e-06 5.187119094759e+01 1.692576367374e+06 +1.361681118499e-06 5.186791358945e+01 1.721948981712e+06 +1.152033651473e-06 5.186832227990e+01 1.719877644338e+06 +9.746639768273e-07 5.186808539121e+01 1.767622829488e+06 +8.246025335369e-07 5.187135128498e+01 1.773673814186e+06 +6.976448852957e-07 5.186817629358e+01 1.780216661561e+06 +5.902339202035e-07 5.187107789658e+01 1.795770998166e+06 +4.993601872550e-07 5.186433526457e+01 1.795350920380e+06 +4.224775772450e-07 5.186090336890e+01 1.814290881152e+06 +3.574319856293e-07 5.186090336890e+01 1.814290881152e+06 +3.024009586119e-07 5.186039910453e+01 1.853208087651e+06 +2.558426314545e-07 5.186039910453e+01 1.853208087651e+06 +2.164525283584e-07 5.186039910453e+01 1.853208087651e+06 +1.831270135332e-07 5.186039910453e+01 1.853208087651e+06 +1.549323694204e-07 5.186039910453e+01 1.853208087651e+06 +1.310786357025e-07 5.186039910453e+01 1.853208087651e+06 +1.108974761176e-07 5.186039910453e+01 1.853208087651e+06 +9.382345294742e-08 5.186039910453e+01 1.853208087651e+06 +7.937818452824e-08 5.186039910453e+01 1.853208087651e+06 +6.715694190588e-08 5.186039910453e+01 1.853208087651e+06 +5.681730910015e-08 5.186039910453e+01 1.853208087651e+06 +4.806958926013e-08 5.186039910453e+01 1.853208087651e+06 +4.066868790926e-08 5.186039910453e+01 1.853208087651e+06 +3.440724586412e-08 5.186039910453e+01 1.853208087651e+06 +2.910982942443e-08 5.186039910453e+01 1.853208087651e+06 +2.462801505433e-08 5.186039910453e+01 1.853208087651e+06 +2.083623083710e-08 5.186039910453e+01 1.853208087651e+06 +1.762823818888e-08 5.186039910453e+01 1.853208087651e+06 +1.491415525550e-08 5.186039910453e+01 1.853208087651e+06 +1.261793859385e-08 5.186039910453e+01 1.853208087651e+06 +1.067525257923e-08 5.186039910453e+01 1.853208087651e+06 +9.031666843409e-09 5.186039910453e+01 1.853208087651e+06 +7.641131239281e-09 5.186039910453e+01 1.853208087651e+06 +6.464685603247e-09 5.186039910453e+01 1.853208087651e+06 +5.469368165539e-09 5.186039910453e+01 1.853208087651e+06 +4.627292024099e-09 5.186039910453e+01 1.853208087651e+06 +3.914863806610e-09 5.186039910453e+01 1.853208087651e+06 +3.312122629063e-09 5.186039910453e+01 1.853208087651e+06 +2.802180829747e-09 5.186039910453e+01 1.853208087651e+06 +2.370750809073e-09 5.186039910453e+01 1.853208087651e+06 +2.005744718205e-09 5.186039910453e+01 1.853208087651e+06 +1.696935780518e-09 5.186039910453e+01 1.853208087651e+06 +1.435671756763e-09 5.186039910453e+01 1.853208087651e+06 +1.214632525773e-09 5.186039910453e+01 1.853208087651e+06 +1.027624988593e-09 5.186039910453e+01 1.853208087651e+06 +8.694095496150e-10 5.186039910453e+01 1.853208087651e+06 +7.355533130786e-10 5.186039910453e+01 1.853208087651e+06 +6.223058817568e-10 5.186039910453e+01 1.853208087651e+06 +5.264942779582e-10 5.186039910453e+01 1.853208087651e+06 +4.454340427254e-10 5.186039910453e+01 1.853208087651e+06 +3.768540223992e-10 5.186039910453e+01 1.853208087651e+06 +3.188327352115e-10 5.186039910453e+01 1.853208087651e+06 +2.697445350199e-10 5.186039910453e+01 1.853208087651e+06 +2.282140637938e-10 5.186039910453e+01 1.853208087651e+06 +1.930777166975e-10 5.186039910453e+01 1.853208087651e+06 +1.633510400954e-10 5.186039910453e+01 1.853208087651e+06 +1.382011490329e-10 5.186039910453e+01 1.853208087651e+06 +1.169233913838e-10 5.186039910453e+01 1.853208087651e+06 +9.892160483726e-11 5.186039910453e+01 1.853208087651e+06 +8.369141356375e-11 5.186039910453e+01 1.853208087651e+06 +7.080609656325e-11 5.186039910453e+01 1.853208087651e+06 +5.990463175419e-11 5.186039910453e+01 1.853208087651e+06 +5.068158082121e-11 5.186039910453e+01 1.853208087651e+06 +4.287853141435e-11 5.186039910453e+01 1.853208087651e+06 +3.627685692634e-11 5.186039910453e+01 1.853208087651e+06 +3.069159099076e-11 5.186039910453e+01 1.853208087651e+06 +2.596624507622e-11 5.186039910453e+01 1.853208087651e+06 +2.196842397520e-11 5.186039910453e+01 1.853208087651e+06 +1.858611634209e-11 5.186039910453e+01 1.853208087651e+06 +1.572455634832e-11 5.186039910453e+01 1.853208087651e+06 +1.330356852397e-11 5.186039910453e+01 1.853208087651e+06 +1.125532139360e-11 5.186039910453e+01 1.853208087651e+06 +9.522426967234e-12 5.186039910453e+01 1.853208087651e+06 +8.056332838073e-12 5.186039910453e+01 1.853208087651e+06 +6.815961836321e-12 5.186039910453e+01 1.853208087651e+06 +5.766561125012e-12 5.186039910453e+01 1.853208087651e+06 +4.878728491596e-12 5.186039910453e+01 1.853208087651e+06 +4.127588553857e-12 5.186039910453e+01 1.853208087651e+06 +3.492095798993e-12 5.186039910453e+01 1.853208087651e+06 +2.954444928371e-12 5.186039910453e+01 1.853208087651e+06 +2.499571986912e-12 5.186039910453e+01 1.853208087651e+06 +2.114732299715e-12 5.186039910453e+01 1.853208087651e+06 +1.789143390499e-12 5.186039910453e+01 1.853208087651e+06 +1.513682877117e-12 5.186039910453e+01 1.853208087651e+06 +1.280632879759e-12 5.186039910453e+01 1.853208087651e+06 +1.083463780633e-12 5.186039910453e+01 1.853208087651e+06 + + +0.000000 1.000000e+00 1.106435e+00 1.564761e+00 +0.010000 1.000996e+00 9.643174e-01 1.046171e+00 +0.020000 1.007872e+00 9.985518e-01 8.072637e-01 +0.030000 1.026144e+00 1.055627e+00 7.663715e-01 +0.040000 1.060833e+00 1.095438e+00 8.584341e-01 +0.050000 1.116496e+00 1.129109e+00 1.032520e+00 +0.060000 1.197241e+00 1.182450e+00 1.249602e+00 +0.070000 1.306512e+00 1.276822e+00 1.480568e+00 +0.080000 1.446506e+00 1.421306e+00 1.704470e+00 +0.090000 1.617126e+00 1.611688e+00 1.906976e+00 +0.100000 1.814524e+00 1.833147e+00 2.079037e+00 +0.110000 2.029607e+00 2.064484e+00 2.215728e+00 +0.120000 2.247143e+00 2.282520e+00 2.315273e+00 +0.130000 2.446382e+00 2.465879e+00 2.378215e+00 +0.140000 2.603824e+00 2.597737e+00 2.406738e+00 +0.150000 2.697981e+00 2.667444e+00 2.404107e+00 +0.160000 2.714808e+00 2.671077e+00 2.374229e+00 +0.170000 2.651704e+00 2.611102e+00 2.321300e+00 +0.180000 2.518282e+00 2.495385e+00 2.249549e+00 +0.190000 2.333563e+00 2.335779e+00 2.163044e+00 +0.200000 2.120871e+00 2.146524e+00 2.065565e+00 +0.210000 1.902566e+00 1.942651e+00 1.960518e+00 +0.220000 1.696364e+00 1.738537e+00 1.850899e+00 +0.230000 1.513870e+00 1.546724e+00 1.739278e+00 +0.240000 1.360947e+00 1.377063e+00 1.627814e+00 +0.250000 1.239061e+00 1.236213e+00 1.518278e+00 +0.260000 1.146817e+00 1.127472e+00 1.412091e+00 +0.270000 1.081190e+00 1.050925e+00 1.310369e+00 +0.280000 1.038307e+00 1.003833e+00 1.213964e+00 +0.290000 1.013789e+00 9.812211e-01 1.123505e+00 +0.300000 1.002814e+00 9.765745e-01 1.039440e+00 +0.310000 1.000072e+00 9.825851e-01 9.620688e-01 +0.320000 9.998011e-01 9.918822e-01 8.915680e-01 +0.330000 9.960824e-01 9.976926e-01 8.280159e-01 +0.340000 9.834513e-01 9.943849e-01 7.714069e-01 +0.350000 9.577548e-01 9.778718e-01 7.216631e-01 +0.360000 9.169922e-01 9.458505e-01 6.786410e-01 +0.370000 8.617940e-01 8.978799e-01 6.421348e-01 +0.380000 7.952798e-01 8.353015e-01 6.118786e-01 +0.390000 7.222899e-01 7.610231e-01 5.875475e-01 +0.400000 6.482631e-01 6.791917e-01 5.687590e-01 +0.410000 5.781627e-01 5.947875e-01 5.550766e-01 +0.420000 5.157735e-01 5.131735e-01 5.460150e-01 +0.430000 4.634795e-01 4.396378e-01 5.410488e-01 +0.440000 4.224349e-01 3.789614e-01 5.396247e-01 +0.450000 3.929418e-01 3.350427e-01 5.411772e-01 +0.460000 3.748639e-01 3.106037e-01 5.451478e-01 +0.470000 3.679641e-01 3.069960e-01 5.510064e-01 +0.480000 3.721204e-01 3.241182e-01 5.582759e-01 +0.490000 3.874083e-01 3.604473e-01 5.665579e-01 +0.500000 4.140514e-01 4.131796e-01 5.755570e-01 +0.510000 4.522382e-01 4.784692e-01 5.851062e-01 +0.520000 5.018122e-01 5.517453e-01 5.951866e-01 +0.530000 5.618693e-01 6.280851e-01 6.059456e-01 +0.540000 6.303577e-01 7.026157e-01 6.177069e-01 +0.550000 7.038367e-01 7.709139e-01 6.309742e-01 +0.560000 7.775882e-01 8.293771e-01 6.464270e-01 +0.570000 8.462014e-01 8.755360e-01 6.649054e-01 +0.580000 9.045780e-01 9.082848e-01 6.873860e-01 +0.590000 9.490803e-01 9.280111e-01 7.149463e-01 +0.600000 9.784214e-01 9.366110e-01 7.487197e-01 +0.610000 9.939735e-01 9.373849e-01 7.898396e-01 +0.620000 9.994265e-01 9.348157e-01 8.393758e-01 +0.630000 1.000005e+00 9.342404e-01 8.982640e-01 +0.640000 1.001584e+00 9.414336e-01 9.672299e-01 +0.650000 1.010005e+00 9.621283e-01 1.046713e+00 +0.660000 1.030699e+00 1.001506e+00 1.136789e+00 +0.670000 1.068607e+00 1.063689e+00 1.237105e+00 +0.680000 1.128215e+00 1.151285e+00 1.346812e+00 +0.690000 1.213540e+00 1.264999e+00 1.464524e+00 +0.700000 1.327870e+00 1.403374e+00 1.588287e+00 +0.710000 1.473103e+00 1.562677e+00 1.715577e+00 +0.720000 1.648620e+00 1.736952e+00 1.843317e+00 +0.730000 1.849790e+00 1.918257e+00 1.967934e+00 +0.740000 2.066518e+00 2.097091e+00 2.085446e+00 +0.750000 2.282551e+00 2.262978e+00 2.191578e+00 +0.760000 2.476419e+00 2.405206e+00 2.281925e+00 +0.770000 2.624586e+00 2.513653e+00 2.352140e+00 +0.780000 2.706446e+00 2.579667e+00 2.398161e+00 +0.790000 2.709671e+00 2.596905e+00 2.416458e+00 +0.800000 2.633762e+00 2.562085e+00 2.404298e+00 +0.810000 2.490197e+00 2.475547e+00 2.360025e+00 +0.820000 2.299110e+00 2.341554e+00 2.283317e+00 +0.830000 2.084002e+00 2.168269e+00 2.175433e+00 +0.840000 1.866653e+00 1.967353e+00 2.039403e+00 +0.850000 1.663794e+00 1.753153e+00 1.880148e+00 +0.860000 1.486002e+00 1.541503e+00 1.704501e+00 +0.870000 1.338291e+00 1.348178e+00 1.521091e+00 +0.880000 1.221545e+00 1.187118e+00 1.340059e+00 +0.890000 1.134018e+00 1.068574e+00 1.172570e+00 +0.900000 1.072503e+00 9.974043e-01 1.030068e+00 +0.910000 1.033025e+00 9.717928e-01 9.232463e-01 +0.920000 1.011135e+00 9.827288e-01 8.606868e-01 +0.930000 1.001930e+00 1.014601e+00 8.471216e-01 +0.940000 1.000015e+00 1.047279e+00 8.812897e-01 +0.950000 9.995757e-01 1.060013e+00 9.533524e-01 +0.960000 9.947162e-01 1.037401e+00 1.041848e+00 +0.970000 9.801295e-01 9.774923e-01 1.110176e+00 +0.980000 9.519710e-01 9.018439e-01 1.102617e+00 +0.990000 9.086638e-01 8.669304e-01 9.399196e-01 diff -Nru gsl-doc-1.16/doc/examples/linalglu.out gsl-doc-2.3/doc/examples/linalglu.out --- gsl-doc-1.16/doc/examples/linalglu.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/linalglu.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -x = -4.05205 --12.6056 -1.66091 -8.69377 diff -Nru gsl-doc-1.16/doc/examples/linalglu.txt gsl-doc-2.3/doc/examples/linalglu.txt --- gsl-doc-1.16/doc/examples/linalglu.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/linalglu.txt 2015-11-10 18:54:46.000000000 +0000 @@ -0,0 +1,5 @@ +x = +-4.05205 +-12.6056 +1.66091 +8.69377 diff -Nru gsl-doc-1.16/doc/examples/Makefile.am gsl-doc-2.3/doc/examples/Makefile.am --- gsl-doc-1.16/doc/examples/Makefile.am 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/Makefile.am 2016-10-27 11:20:46.000000000 +0000 @@ -0,0 +1,12 @@ +## Process this file with automake to produce Makefile.in + +check_PROGRAMS = blas block cblas cdf cheb combination multiset const diff eigen fft fftmr fftreal fitting fitting2 fitting3 fitreg fitreg2 histogram histogram2d ieee ieeeround integration interp interp2d intro linalglu largefit matrix matrixw min monte ntupler ntuplew ode-initval permseq permshuffle polyroots qrng randpoisson randwalk rng rngunif robfit rootnewt roots siman sortsmall specfun specfun_e rstat rquantile stat statsort sum vector vectorr vectorview vectorw dwt nlfit nlfit2 nlfit3 nlfit4 interpp eigen_nonsymm bspline poisson interp_compare spmatrix + +examples_src = blas.c block.c cblas.c cdf.c cheb.c combination.c multiset.c const.c demo_fn.c diff.c eigen.c fft.c fftmr.c fftreal.c fitting.c fitting2.c fitting3.c fitreg.c fitreg2.c histogram.c histogram2d.c ieee.c ieeeround.c integration.c interp.c interp2d.c intro.c linalglu.c largefit.c matrix.c matrixw.c min.c monte.c ntupler.c ntuplew.c ode-initval.c odefixed.c permseq.c permshuffle.c polyroots.c qrng.c randpoisson.c randwalk.c rng.c rngunif.c robfit.c rootnewt.c roots.c siman.c sortsmall.c specfun.c specfun_e.c rstat.c rquantile.c stat.c statsort.c sum.c vector.c vectorr.c vectorview.c vectorw.c demo_fn.h dwt.c nlfit.c nlfit2.c nlfit3.c interpp.c eigen_nonsymm.c bspline.c multimin.c multiminfn.c nmsimplex.c ode-initval-low-level.c poisson.c interp_compare.c spmatrix.c + +examples_txt = blas.txt block.txt bspline.txt cblas.txt cdf.txt cheb.txt combination.txt const.txt diff.txt dwt.txt eigen_nonsymm.txt eigen.txt fftmr.txt fftreal.txt fft.txt fitreg.txt fitreg2.txt fitting2.txt fitting.txt histogram2d.txt ieeeround.txt ieee.txt integration.txt interp2d.txt interp_compare.txt interpp.txt interp.txt intro.txt largefit.txt largefit2.txt linalglu.txt matrix.txt matrixw.txt min.txt monte.txt multimin.txt multiset.txt nlfit.txt nlfit2.txt nlfit3.txt nmsimplex.txt ntuple.txt ode-initval.txt permseq.txt permshuffle.txt poisson.txt polyroots.txt qrng.txt randpoisson2.txt randpoisson.txt randwalk.txt rng.txt rngunif.txt rngunif2.txt robfit.txt rootnewt.txt roots.txt rquantile.txt rstat.txt siman.txt sortsmall.txt specfun.txt specfun_e.txt spmatrix.txt statsort.txt stat.txt sum.txt vectorr.txt vectorview.txt + +dist_noinst_DATA = $(examples_src) $(examples_txt) + +LDADD = ../../libgsl.la ../../cblas/libgslcblas.la +AM_DEFAULT_SOURCE_EXT = .c diff -Nru gsl-doc-1.16/doc/examples/Makefile.in gsl-doc-2.3/doc/examples/Makefile.in --- gsl-doc-1.16/doc/examples/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/Makefile.in 2016-12-09 00:04:21.000000000 +0000 @@ -0,0 +1,1269 @@ +# Makefile.in generated by automake 1.13.4 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +check_PROGRAMS = blas$(EXEEXT) block$(EXEEXT) cblas$(EXEEXT) \ + cdf$(EXEEXT) cheb$(EXEEXT) combination$(EXEEXT) \ + multiset$(EXEEXT) const$(EXEEXT) diff$(EXEEXT) eigen$(EXEEXT) \ + fft$(EXEEXT) fftmr$(EXEEXT) fftreal$(EXEEXT) fitting$(EXEEXT) \ + fitting2$(EXEEXT) fitting3$(EXEEXT) fitreg$(EXEEXT) \ + fitreg2$(EXEEXT) histogram$(EXEEXT) histogram2d$(EXEEXT) \ + ieee$(EXEEXT) ieeeround$(EXEEXT) integration$(EXEEXT) \ + interp$(EXEEXT) interp2d$(EXEEXT) intro$(EXEEXT) \ + linalglu$(EXEEXT) largefit$(EXEEXT) matrix$(EXEEXT) \ + matrixw$(EXEEXT) min$(EXEEXT) monte$(EXEEXT) ntupler$(EXEEXT) \ + ntuplew$(EXEEXT) ode-initval$(EXEEXT) permseq$(EXEEXT) \ + permshuffle$(EXEEXT) polyroots$(EXEEXT) qrng$(EXEEXT) \ + randpoisson$(EXEEXT) randwalk$(EXEEXT) rng$(EXEEXT) \ + rngunif$(EXEEXT) robfit$(EXEEXT) rootnewt$(EXEEXT) \ + roots$(EXEEXT) siman$(EXEEXT) sortsmall$(EXEEXT) \ + specfun$(EXEEXT) specfun_e$(EXEEXT) rstat$(EXEEXT) \ + rquantile$(EXEEXT) stat$(EXEEXT) statsort$(EXEEXT) \ + sum$(EXEEXT) vector$(EXEEXT) vectorr$(EXEEXT) \ + vectorview$(EXEEXT) vectorw$(EXEEXT) dwt$(EXEEXT) \ + nlfit$(EXEEXT) nlfit2$(EXEEXT) nlfit3$(EXEEXT) nlfit4$(EXEEXT) \ + interpp$(EXEEXT) eigen_nonsymm$(EXEEXT) bspline$(EXEEXT) \ + poisson$(EXEEXT) interp_compare$(EXEEXT) spmatrix$(EXEEXT) +subdir = doc/examples +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp \ + $(dist_noinst_DATA) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +blas_SOURCES = blas.c +blas_OBJECTS = blas.$(OBJEXT) +blas_LDADD = $(LDADD) +blas_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +block_SOURCES = block.c +block_OBJECTS = block.$(OBJEXT) +block_LDADD = $(LDADD) +block_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +bspline_SOURCES = bspline.c +bspline_OBJECTS = bspline.$(OBJEXT) +bspline_LDADD = $(LDADD) +bspline_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +cblas_SOURCES = cblas.c +cblas_OBJECTS = cblas.$(OBJEXT) +cblas_LDADD = $(LDADD) +cblas_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +cdf_SOURCES = cdf.c +cdf_OBJECTS = cdf.$(OBJEXT) +cdf_LDADD = $(LDADD) +cdf_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +cheb_SOURCES = cheb.c +cheb_OBJECTS = cheb.$(OBJEXT) +cheb_LDADD = $(LDADD) +cheb_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +combination_SOURCES = combination.c +combination_OBJECTS = combination.$(OBJEXT) +combination_LDADD = $(LDADD) +combination_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +const_SOURCES = const.c +const_OBJECTS = const.$(OBJEXT) +const_LDADD = $(LDADD) +const_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +diff_SOURCES = diff.c +diff_OBJECTS = diff.$(OBJEXT) +diff_LDADD = $(LDADD) +diff_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +dwt_SOURCES = dwt.c +dwt_OBJECTS = dwt.$(OBJEXT) +dwt_LDADD = $(LDADD) +dwt_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +eigen_SOURCES = eigen.c +eigen_OBJECTS = eigen.$(OBJEXT) +eigen_LDADD = $(LDADD) +eigen_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +eigen_nonsymm_SOURCES = eigen_nonsymm.c +eigen_nonsymm_OBJECTS = eigen_nonsymm.$(OBJEXT) +eigen_nonsymm_LDADD = $(LDADD) +eigen_nonsymm_DEPENDENCIES = ../../libgsl.la \ + ../../cblas/libgslcblas.la +fft_SOURCES = fft.c +fft_OBJECTS = fft.$(OBJEXT) +fft_LDADD = $(LDADD) +fft_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +fftmr_SOURCES = fftmr.c +fftmr_OBJECTS = fftmr.$(OBJEXT) +fftmr_LDADD = $(LDADD) +fftmr_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +fftreal_SOURCES = fftreal.c +fftreal_OBJECTS = fftreal.$(OBJEXT) +fftreal_LDADD = $(LDADD) +fftreal_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +fitreg_SOURCES = fitreg.c +fitreg_OBJECTS = fitreg.$(OBJEXT) +fitreg_LDADD = $(LDADD) +fitreg_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +fitreg2_SOURCES = fitreg2.c +fitreg2_OBJECTS = fitreg2.$(OBJEXT) +fitreg2_LDADD = $(LDADD) +fitreg2_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +fitting_SOURCES = fitting.c +fitting_OBJECTS = fitting.$(OBJEXT) +fitting_LDADD = $(LDADD) +fitting_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +fitting2_SOURCES = fitting2.c +fitting2_OBJECTS = fitting2.$(OBJEXT) +fitting2_LDADD = $(LDADD) +fitting2_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +fitting3_SOURCES = fitting3.c +fitting3_OBJECTS = fitting3.$(OBJEXT) +fitting3_LDADD = $(LDADD) +fitting3_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +histogram_SOURCES = histogram.c +histogram_OBJECTS = histogram.$(OBJEXT) +histogram_LDADD = $(LDADD) +histogram_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +histogram2d_SOURCES = histogram2d.c +histogram2d_OBJECTS = histogram2d.$(OBJEXT) +histogram2d_LDADD = $(LDADD) +histogram2d_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +ieee_SOURCES = ieee.c +ieee_OBJECTS = ieee.$(OBJEXT) +ieee_LDADD = $(LDADD) +ieee_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +ieeeround_SOURCES = ieeeround.c +ieeeround_OBJECTS = ieeeround.$(OBJEXT) +ieeeround_LDADD = $(LDADD) +ieeeround_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +integration_SOURCES = integration.c +integration_OBJECTS = integration.$(OBJEXT) +integration_LDADD = $(LDADD) +integration_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +interp_SOURCES = interp.c +interp_OBJECTS = interp.$(OBJEXT) +interp_LDADD = $(LDADD) +interp_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +interp2d_SOURCES = interp2d.c +interp2d_OBJECTS = interp2d.$(OBJEXT) +interp2d_LDADD = $(LDADD) +interp2d_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +interp_compare_SOURCES = interp_compare.c +interp_compare_OBJECTS = interp_compare.$(OBJEXT) +interp_compare_LDADD = $(LDADD) +interp_compare_DEPENDENCIES = ../../libgsl.la \ + ../../cblas/libgslcblas.la +interpp_SOURCES = interpp.c +interpp_OBJECTS = interpp.$(OBJEXT) +interpp_LDADD = $(LDADD) +interpp_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +intro_SOURCES = intro.c +intro_OBJECTS = intro.$(OBJEXT) +intro_LDADD = $(LDADD) +intro_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +largefit_SOURCES = largefit.c +largefit_OBJECTS = largefit.$(OBJEXT) +largefit_LDADD = $(LDADD) +largefit_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +linalglu_SOURCES = linalglu.c +linalglu_OBJECTS = linalglu.$(OBJEXT) +linalglu_LDADD = $(LDADD) +linalglu_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +matrix_SOURCES = matrix.c +matrix_OBJECTS = matrix.$(OBJEXT) +matrix_LDADD = $(LDADD) +matrix_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +matrixw_SOURCES = matrixw.c +matrixw_OBJECTS = matrixw.$(OBJEXT) +matrixw_LDADD = $(LDADD) +matrixw_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +min_SOURCES = min.c +min_OBJECTS = min.$(OBJEXT) +min_LDADD = $(LDADD) +min_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +monte_SOURCES = monte.c +monte_OBJECTS = monte.$(OBJEXT) +monte_LDADD = $(LDADD) +monte_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +multiset_SOURCES = multiset.c +multiset_OBJECTS = multiset.$(OBJEXT) +multiset_LDADD = $(LDADD) +multiset_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +nlfit_SOURCES = nlfit.c +nlfit_OBJECTS = nlfit.$(OBJEXT) +nlfit_LDADD = $(LDADD) +nlfit_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +nlfit2_SOURCES = nlfit2.c +nlfit2_OBJECTS = nlfit2.$(OBJEXT) +nlfit2_LDADD = $(LDADD) +nlfit2_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +nlfit3_SOURCES = nlfit3.c +nlfit3_OBJECTS = nlfit3.$(OBJEXT) +nlfit3_LDADD = $(LDADD) +nlfit3_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +nlfit4_SOURCES = nlfit4.c +nlfit4_OBJECTS = nlfit4.$(OBJEXT) +nlfit4_LDADD = $(LDADD) +nlfit4_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +ntupler_SOURCES = ntupler.c +ntupler_OBJECTS = ntupler.$(OBJEXT) +ntupler_LDADD = $(LDADD) +ntupler_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +ntuplew_SOURCES = ntuplew.c +ntuplew_OBJECTS = ntuplew.$(OBJEXT) +ntuplew_LDADD = $(LDADD) +ntuplew_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +ode_initval_SOURCES = ode-initval.c +ode_initval_OBJECTS = ode-initval.$(OBJEXT) +ode_initval_LDADD = $(LDADD) +ode_initval_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +permseq_SOURCES = permseq.c +permseq_OBJECTS = permseq.$(OBJEXT) +permseq_LDADD = $(LDADD) +permseq_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +permshuffle_SOURCES = permshuffle.c +permshuffle_OBJECTS = permshuffle.$(OBJEXT) +permshuffle_LDADD = $(LDADD) +permshuffle_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +poisson_SOURCES = poisson.c +poisson_OBJECTS = poisson.$(OBJEXT) +poisson_LDADD = $(LDADD) +poisson_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +polyroots_SOURCES = polyroots.c +polyroots_OBJECTS = polyroots.$(OBJEXT) +polyroots_LDADD = $(LDADD) +polyroots_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +qrng_SOURCES = qrng.c +qrng_OBJECTS = qrng.$(OBJEXT) +qrng_LDADD = $(LDADD) +qrng_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +randpoisson_SOURCES = randpoisson.c +randpoisson_OBJECTS = randpoisson.$(OBJEXT) +randpoisson_LDADD = $(LDADD) +randpoisson_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +randwalk_SOURCES = randwalk.c +randwalk_OBJECTS = randwalk.$(OBJEXT) +randwalk_LDADD = $(LDADD) +randwalk_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +rng_SOURCES = rng.c +rng_OBJECTS = rng.$(OBJEXT) +rng_LDADD = $(LDADD) +rng_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +rngunif_SOURCES = rngunif.c +rngunif_OBJECTS = rngunif.$(OBJEXT) +rngunif_LDADD = $(LDADD) +rngunif_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +robfit_SOURCES = robfit.c +robfit_OBJECTS = robfit.$(OBJEXT) +robfit_LDADD = $(LDADD) +robfit_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +rootnewt_SOURCES = rootnewt.c +rootnewt_OBJECTS = rootnewt.$(OBJEXT) +rootnewt_LDADD = $(LDADD) +rootnewt_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +roots_SOURCES = roots.c +roots_OBJECTS = roots.$(OBJEXT) +roots_LDADD = $(LDADD) +roots_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +rquantile_SOURCES = rquantile.c +rquantile_OBJECTS = rquantile.$(OBJEXT) +rquantile_LDADD = $(LDADD) +rquantile_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +rstat_SOURCES = rstat.c +rstat_OBJECTS = rstat.$(OBJEXT) +rstat_LDADD = $(LDADD) +rstat_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +siman_SOURCES = siman.c +siman_OBJECTS = siman.$(OBJEXT) +siman_LDADD = $(LDADD) +siman_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +sortsmall_SOURCES = sortsmall.c +sortsmall_OBJECTS = sortsmall.$(OBJEXT) +sortsmall_LDADD = $(LDADD) +sortsmall_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +specfun_SOURCES = specfun.c +specfun_OBJECTS = specfun.$(OBJEXT) +specfun_LDADD = $(LDADD) +specfun_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +specfun_e_SOURCES = specfun_e.c +specfun_e_OBJECTS = specfun_e.$(OBJEXT) +specfun_e_LDADD = $(LDADD) +specfun_e_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +spmatrix_SOURCES = spmatrix.c +spmatrix_OBJECTS = spmatrix.$(OBJEXT) +spmatrix_LDADD = $(LDADD) +spmatrix_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +stat_SOURCES = stat.c +stat_OBJECTS = stat.$(OBJEXT) +stat_LDADD = $(LDADD) +stat_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +statsort_SOURCES = statsort.c +statsort_OBJECTS = statsort.$(OBJEXT) +statsort_LDADD = $(LDADD) +statsort_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +sum_SOURCES = sum.c +sum_OBJECTS = sum.$(OBJEXT) +sum_LDADD = $(LDADD) +sum_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +vector_SOURCES = vector.c +vector_OBJECTS = vector.$(OBJEXT) +vector_LDADD = $(LDADD) +vector_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +vectorr_SOURCES = vectorr.c +vectorr_OBJECTS = vectorr.$(OBJEXT) +vectorr_LDADD = $(LDADD) +vectorr_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +vectorview_SOURCES = vectorview.c +vectorview_OBJECTS = vectorview.$(OBJEXT) +vectorview_LDADD = $(LDADD) +vectorview_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +vectorw_SOURCES = vectorw.c +vectorw_OBJECTS = vectorw.$(OBJEXT) +vectorw_LDADD = $(LDADD) +vectorw_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = blas.c block.c bspline.c cblas.c cdf.c cheb.c combination.c \ + const.c diff.c dwt.c eigen.c eigen_nonsymm.c fft.c fftmr.c \ + fftreal.c fitreg.c fitreg2.c fitting.c fitting2.c fitting3.c \ + histogram.c histogram2d.c ieee.c ieeeround.c integration.c \ + interp.c interp2d.c interp_compare.c interpp.c intro.c \ + largefit.c linalglu.c matrix.c matrixw.c min.c monte.c \ + multiset.c nlfit.c nlfit2.c nlfit3.c nlfit4.c ntupler.c \ + ntuplew.c ode-initval.c permseq.c permshuffle.c poisson.c \ + polyroots.c qrng.c randpoisson.c randwalk.c rng.c rngunif.c \ + robfit.c rootnewt.c roots.c rquantile.c rstat.c siman.c \ + sortsmall.c specfun.c specfun_e.c spmatrix.c stat.c statsort.c \ + sum.c vector.c vectorr.c vectorview.c vectorw.c +DIST_SOURCES = blas.c block.c bspline.c cblas.c cdf.c cheb.c \ + combination.c const.c diff.c dwt.c eigen.c eigen_nonsymm.c \ + fft.c fftmr.c fftreal.c fitreg.c fitreg2.c fitting.c \ + fitting2.c fitting3.c histogram.c histogram2d.c ieee.c \ + ieeeround.c integration.c interp.c interp2d.c interp_compare.c \ + interpp.c intro.c largefit.c linalglu.c matrix.c matrixw.c \ + min.c monte.c multiset.c nlfit.c nlfit2.c nlfit3.c nlfit4.c \ + ntupler.c ntuplew.c ode-initval.c permseq.c permshuffle.c \ + poisson.c polyroots.c qrng.c randpoisson.c randwalk.c rng.c \ + rngunif.c robfit.c rootnewt.c roots.c rquantile.c rstat.c \ + siman.c sortsmall.c specfun.c specfun_e.c spmatrix.c stat.c \ + statsort.c sum.c vector.c vectorr.c vectorview.c vectorw.c +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +DATA = $(dist_noinst_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ +GSL_LIBM = @GSL_LIBM@ +GSL_LIBS = @GSL_LIBS@ +GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ +GSL_LT_VERSION = @GSL_LT_VERSION@ +GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ +GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ +HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ +HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ +HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ +HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ +HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ +HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ +HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ +HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ +HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ +HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ +HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ +HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ +HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ +HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ +HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ +HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ +HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBM = @LIBM@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +examples_src = blas.c block.c cblas.c cdf.c cheb.c combination.c multiset.c const.c demo_fn.c diff.c eigen.c fft.c fftmr.c fftreal.c fitting.c fitting2.c fitting3.c fitreg.c fitreg2.c histogram.c histogram2d.c ieee.c ieeeround.c integration.c interp.c interp2d.c intro.c linalglu.c largefit.c matrix.c matrixw.c min.c monte.c ntupler.c ntuplew.c ode-initval.c odefixed.c permseq.c permshuffle.c polyroots.c qrng.c randpoisson.c randwalk.c rng.c rngunif.c robfit.c rootnewt.c roots.c siman.c sortsmall.c specfun.c specfun_e.c rstat.c rquantile.c stat.c statsort.c sum.c vector.c vectorr.c vectorview.c vectorw.c demo_fn.h dwt.c nlfit.c nlfit2.c nlfit3.c interpp.c eigen_nonsymm.c bspline.c multimin.c multiminfn.c nmsimplex.c ode-initval-low-level.c poisson.c interp_compare.c spmatrix.c +examples_txt = blas.txt block.txt bspline.txt cblas.txt cdf.txt cheb.txt combination.txt const.txt diff.txt dwt.txt eigen_nonsymm.txt eigen.txt fftmr.txt fftreal.txt fft.txt fitreg.txt fitreg2.txt fitting2.txt fitting.txt histogram2d.txt ieeeround.txt ieee.txt integration.txt interp2d.txt interp_compare.txt interpp.txt interp.txt intro.txt largefit.txt largefit2.txt linalglu.txt matrix.txt matrixw.txt min.txt monte.txt multimin.txt multiset.txt nlfit.txt nlfit2.txt nlfit3.txt nmsimplex.txt ntuple.txt ode-initval.txt permseq.txt permshuffle.txt poisson.txt polyroots.txt qrng.txt randpoisson2.txt randpoisson.txt randwalk.txt rng.txt rngunif.txt rngunif2.txt robfit.txt rootnewt.txt roots.txt rquantile.txt rstat.txt siman.txt sortsmall.txt specfun.txt specfun_e.txt spmatrix.txt statsort.txt stat.txt sum.txt vectorr.txt vectorview.txt +dist_noinst_DATA = $(examples_src) $(examples_txt) +LDADD = ../../libgsl.la ../../cblas/libgslcblas.la +AM_DEFAULT_SOURCE_EXT = .c +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/examples/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/examples/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +blas$(EXEEXT): $(blas_OBJECTS) $(blas_DEPENDENCIES) $(EXTRA_blas_DEPENDENCIES) + @rm -f blas$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(blas_OBJECTS) $(blas_LDADD) $(LIBS) + +block$(EXEEXT): $(block_OBJECTS) $(block_DEPENDENCIES) $(EXTRA_block_DEPENDENCIES) + @rm -f block$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(block_OBJECTS) $(block_LDADD) $(LIBS) + +bspline$(EXEEXT): $(bspline_OBJECTS) $(bspline_DEPENDENCIES) $(EXTRA_bspline_DEPENDENCIES) + @rm -f bspline$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(bspline_OBJECTS) $(bspline_LDADD) $(LIBS) + +cblas$(EXEEXT): $(cblas_OBJECTS) $(cblas_DEPENDENCIES) $(EXTRA_cblas_DEPENDENCIES) + @rm -f cblas$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(cblas_OBJECTS) $(cblas_LDADD) $(LIBS) + +cdf$(EXEEXT): $(cdf_OBJECTS) $(cdf_DEPENDENCIES) $(EXTRA_cdf_DEPENDENCIES) + @rm -f cdf$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(cdf_OBJECTS) $(cdf_LDADD) $(LIBS) + +cheb$(EXEEXT): $(cheb_OBJECTS) $(cheb_DEPENDENCIES) $(EXTRA_cheb_DEPENDENCIES) + @rm -f cheb$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(cheb_OBJECTS) $(cheb_LDADD) $(LIBS) + +combination$(EXEEXT): $(combination_OBJECTS) $(combination_DEPENDENCIES) $(EXTRA_combination_DEPENDENCIES) + @rm -f combination$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(combination_OBJECTS) $(combination_LDADD) $(LIBS) + +const$(EXEEXT): $(const_OBJECTS) $(const_DEPENDENCIES) $(EXTRA_const_DEPENDENCIES) + @rm -f const$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(const_OBJECTS) $(const_LDADD) $(LIBS) + +diff$(EXEEXT): $(diff_OBJECTS) $(diff_DEPENDENCIES) $(EXTRA_diff_DEPENDENCIES) + @rm -f diff$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(diff_OBJECTS) $(diff_LDADD) $(LIBS) + +dwt$(EXEEXT): $(dwt_OBJECTS) $(dwt_DEPENDENCIES) $(EXTRA_dwt_DEPENDENCIES) + @rm -f dwt$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(dwt_OBJECTS) $(dwt_LDADD) $(LIBS) + +eigen$(EXEEXT): $(eigen_OBJECTS) $(eigen_DEPENDENCIES) $(EXTRA_eigen_DEPENDENCIES) + @rm -f eigen$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eigen_OBJECTS) $(eigen_LDADD) $(LIBS) + +eigen_nonsymm$(EXEEXT): $(eigen_nonsymm_OBJECTS) $(eigen_nonsymm_DEPENDENCIES) $(EXTRA_eigen_nonsymm_DEPENDENCIES) + @rm -f eigen_nonsymm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eigen_nonsymm_OBJECTS) $(eigen_nonsymm_LDADD) $(LIBS) + +fft$(EXEEXT): $(fft_OBJECTS) $(fft_DEPENDENCIES) $(EXTRA_fft_DEPENDENCIES) + @rm -f fft$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(fft_OBJECTS) $(fft_LDADD) $(LIBS) + +fftmr$(EXEEXT): $(fftmr_OBJECTS) $(fftmr_DEPENDENCIES) $(EXTRA_fftmr_DEPENDENCIES) + @rm -f fftmr$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(fftmr_OBJECTS) $(fftmr_LDADD) $(LIBS) + +fftreal$(EXEEXT): $(fftreal_OBJECTS) $(fftreal_DEPENDENCIES) $(EXTRA_fftreal_DEPENDENCIES) + @rm -f fftreal$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(fftreal_OBJECTS) $(fftreal_LDADD) $(LIBS) + +fitreg$(EXEEXT): $(fitreg_OBJECTS) $(fitreg_DEPENDENCIES) $(EXTRA_fitreg_DEPENDENCIES) + @rm -f fitreg$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(fitreg_OBJECTS) $(fitreg_LDADD) $(LIBS) + +fitreg2$(EXEEXT): $(fitreg2_OBJECTS) $(fitreg2_DEPENDENCIES) $(EXTRA_fitreg2_DEPENDENCIES) + @rm -f fitreg2$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(fitreg2_OBJECTS) $(fitreg2_LDADD) $(LIBS) + +fitting$(EXEEXT): $(fitting_OBJECTS) $(fitting_DEPENDENCIES) $(EXTRA_fitting_DEPENDENCIES) + @rm -f fitting$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(fitting_OBJECTS) $(fitting_LDADD) $(LIBS) + +fitting2$(EXEEXT): $(fitting2_OBJECTS) $(fitting2_DEPENDENCIES) $(EXTRA_fitting2_DEPENDENCIES) + @rm -f fitting2$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(fitting2_OBJECTS) $(fitting2_LDADD) $(LIBS) + +fitting3$(EXEEXT): $(fitting3_OBJECTS) $(fitting3_DEPENDENCIES) $(EXTRA_fitting3_DEPENDENCIES) + @rm -f fitting3$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(fitting3_OBJECTS) $(fitting3_LDADD) $(LIBS) + +histogram$(EXEEXT): $(histogram_OBJECTS) $(histogram_DEPENDENCIES) $(EXTRA_histogram_DEPENDENCIES) + @rm -f histogram$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(histogram_OBJECTS) $(histogram_LDADD) $(LIBS) + +histogram2d$(EXEEXT): $(histogram2d_OBJECTS) $(histogram2d_DEPENDENCIES) $(EXTRA_histogram2d_DEPENDENCIES) + @rm -f histogram2d$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(histogram2d_OBJECTS) $(histogram2d_LDADD) $(LIBS) + +ieee$(EXEEXT): $(ieee_OBJECTS) $(ieee_DEPENDENCIES) $(EXTRA_ieee_DEPENDENCIES) + @rm -f ieee$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(ieee_OBJECTS) $(ieee_LDADD) $(LIBS) + +ieeeround$(EXEEXT): $(ieeeround_OBJECTS) $(ieeeround_DEPENDENCIES) $(EXTRA_ieeeround_DEPENDENCIES) + @rm -f ieeeround$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(ieeeround_OBJECTS) $(ieeeround_LDADD) $(LIBS) + +integration$(EXEEXT): $(integration_OBJECTS) $(integration_DEPENDENCIES) $(EXTRA_integration_DEPENDENCIES) + @rm -f integration$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(integration_OBJECTS) $(integration_LDADD) $(LIBS) + +interp$(EXEEXT): $(interp_OBJECTS) $(interp_DEPENDENCIES) $(EXTRA_interp_DEPENDENCIES) + @rm -f interp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(interp_OBJECTS) $(interp_LDADD) $(LIBS) + +interp2d$(EXEEXT): $(interp2d_OBJECTS) $(interp2d_DEPENDENCIES) $(EXTRA_interp2d_DEPENDENCIES) + @rm -f interp2d$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(interp2d_OBJECTS) $(interp2d_LDADD) $(LIBS) + +interp_compare$(EXEEXT): $(interp_compare_OBJECTS) $(interp_compare_DEPENDENCIES) $(EXTRA_interp_compare_DEPENDENCIES) + @rm -f interp_compare$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(interp_compare_OBJECTS) $(interp_compare_LDADD) $(LIBS) + +interpp$(EXEEXT): $(interpp_OBJECTS) $(interpp_DEPENDENCIES) $(EXTRA_interpp_DEPENDENCIES) + @rm -f interpp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(interpp_OBJECTS) $(interpp_LDADD) $(LIBS) + +intro$(EXEEXT): $(intro_OBJECTS) $(intro_DEPENDENCIES) $(EXTRA_intro_DEPENDENCIES) + @rm -f intro$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(intro_OBJECTS) $(intro_LDADD) $(LIBS) + +largefit$(EXEEXT): $(largefit_OBJECTS) $(largefit_DEPENDENCIES) $(EXTRA_largefit_DEPENDENCIES) + @rm -f largefit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(largefit_OBJECTS) $(largefit_LDADD) $(LIBS) + +linalglu$(EXEEXT): $(linalglu_OBJECTS) $(linalglu_DEPENDENCIES) $(EXTRA_linalglu_DEPENDENCIES) + @rm -f linalglu$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(linalglu_OBJECTS) $(linalglu_LDADD) $(LIBS) + +matrix$(EXEEXT): $(matrix_OBJECTS) $(matrix_DEPENDENCIES) $(EXTRA_matrix_DEPENDENCIES) + @rm -f matrix$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(matrix_OBJECTS) $(matrix_LDADD) $(LIBS) + +matrixw$(EXEEXT): $(matrixw_OBJECTS) $(matrixw_DEPENDENCIES) $(EXTRA_matrixw_DEPENDENCIES) + @rm -f matrixw$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(matrixw_OBJECTS) $(matrixw_LDADD) $(LIBS) + +min$(EXEEXT): $(min_OBJECTS) $(min_DEPENDENCIES) $(EXTRA_min_DEPENDENCIES) + @rm -f min$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(min_OBJECTS) $(min_LDADD) $(LIBS) + +monte$(EXEEXT): $(monte_OBJECTS) $(monte_DEPENDENCIES) $(EXTRA_monte_DEPENDENCIES) + @rm -f monte$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(monte_OBJECTS) $(monte_LDADD) $(LIBS) + +multiset$(EXEEXT): $(multiset_OBJECTS) $(multiset_DEPENDENCIES) $(EXTRA_multiset_DEPENDENCIES) + @rm -f multiset$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(multiset_OBJECTS) $(multiset_LDADD) $(LIBS) + +nlfit$(EXEEXT): $(nlfit_OBJECTS) $(nlfit_DEPENDENCIES) $(EXTRA_nlfit_DEPENDENCIES) + @rm -f nlfit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(nlfit_OBJECTS) $(nlfit_LDADD) $(LIBS) + +nlfit2$(EXEEXT): $(nlfit2_OBJECTS) $(nlfit2_DEPENDENCIES) $(EXTRA_nlfit2_DEPENDENCIES) + @rm -f nlfit2$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(nlfit2_OBJECTS) $(nlfit2_LDADD) $(LIBS) + +nlfit3$(EXEEXT): $(nlfit3_OBJECTS) $(nlfit3_DEPENDENCIES) $(EXTRA_nlfit3_DEPENDENCIES) + @rm -f nlfit3$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(nlfit3_OBJECTS) $(nlfit3_LDADD) $(LIBS) + +nlfit4$(EXEEXT): $(nlfit4_OBJECTS) $(nlfit4_DEPENDENCIES) $(EXTRA_nlfit4_DEPENDENCIES) + @rm -f nlfit4$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(nlfit4_OBJECTS) $(nlfit4_LDADD) $(LIBS) + +ntupler$(EXEEXT): $(ntupler_OBJECTS) $(ntupler_DEPENDENCIES) $(EXTRA_ntupler_DEPENDENCIES) + @rm -f ntupler$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(ntupler_OBJECTS) $(ntupler_LDADD) $(LIBS) + +ntuplew$(EXEEXT): $(ntuplew_OBJECTS) $(ntuplew_DEPENDENCIES) $(EXTRA_ntuplew_DEPENDENCIES) + @rm -f ntuplew$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(ntuplew_OBJECTS) $(ntuplew_LDADD) $(LIBS) + +ode-initval$(EXEEXT): $(ode_initval_OBJECTS) $(ode_initval_DEPENDENCIES) $(EXTRA_ode_initval_DEPENDENCIES) + @rm -f ode-initval$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(ode_initval_OBJECTS) $(ode_initval_LDADD) $(LIBS) + +permseq$(EXEEXT): $(permseq_OBJECTS) $(permseq_DEPENDENCIES) $(EXTRA_permseq_DEPENDENCIES) + @rm -f permseq$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(permseq_OBJECTS) $(permseq_LDADD) $(LIBS) + +permshuffle$(EXEEXT): $(permshuffle_OBJECTS) $(permshuffle_DEPENDENCIES) $(EXTRA_permshuffle_DEPENDENCIES) + @rm -f permshuffle$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(permshuffle_OBJECTS) $(permshuffle_LDADD) $(LIBS) + +poisson$(EXEEXT): $(poisson_OBJECTS) $(poisson_DEPENDENCIES) $(EXTRA_poisson_DEPENDENCIES) + @rm -f poisson$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(poisson_OBJECTS) $(poisson_LDADD) $(LIBS) + +polyroots$(EXEEXT): $(polyroots_OBJECTS) $(polyroots_DEPENDENCIES) $(EXTRA_polyroots_DEPENDENCIES) + @rm -f polyroots$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(polyroots_OBJECTS) $(polyroots_LDADD) $(LIBS) + +qrng$(EXEEXT): $(qrng_OBJECTS) $(qrng_DEPENDENCIES) $(EXTRA_qrng_DEPENDENCIES) + @rm -f qrng$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(qrng_OBJECTS) $(qrng_LDADD) $(LIBS) + +randpoisson$(EXEEXT): $(randpoisson_OBJECTS) $(randpoisson_DEPENDENCIES) $(EXTRA_randpoisson_DEPENDENCIES) + @rm -f randpoisson$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(randpoisson_OBJECTS) $(randpoisson_LDADD) $(LIBS) + +randwalk$(EXEEXT): $(randwalk_OBJECTS) $(randwalk_DEPENDENCIES) $(EXTRA_randwalk_DEPENDENCIES) + @rm -f randwalk$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(randwalk_OBJECTS) $(randwalk_LDADD) $(LIBS) + +rng$(EXEEXT): $(rng_OBJECTS) $(rng_DEPENDENCIES) $(EXTRA_rng_DEPENDENCIES) + @rm -f rng$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(rng_OBJECTS) $(rng_LDADD) $(LIBS) + +rngunif$(EXEEXT): $(rngunif_OBJECTS) $(rngunif_DEPENDENCIES) $(EXTRA_rngunif_DEPENDENCIES) + @rm -f rngunif$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(rngunif_OBJECTS) $(rngunif_LDADD) $(LIBS) + +robfit$(EXEEXT): $(robfit_OBJECTS) $(robfit_DEPENDENCIES) $(EXTRA_robfit_DEPENDENCIES) + @rm -f robfit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(robfit_OBJECTS) $(robfit_LDADD) $(LIBS) + +rootnewt$(EXEEXT): $(rootnewt_OBJECTS) $(rootnewt_DEPENDENCIES) $(EXTRA_rootnewt_DEPENDENCIES) + @rm -f rootnewt$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(rootnewt_OBJECTS) $(rootnewt_LDADD) $(LIBS) + +roots$(EXEEXT): $(roots_OBJECTS) $(roots_DEPENDENCIES) $(EXTRA_roots_DEPENDENCIES) + @rm -f roots$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(roots_OBJECTS) $(roots_LDADD) $(LIBS) + +rquantile$(EXEEXT): $(rquantile_OBJECTS) $(rquantile_DEPENDENCIES) $(EXTRA_rquantile_DEPENDENCIES) + @rm -f rquantile$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(rquantile_OBJECTS) $(rquantile_LDADD) $(LIBS) + +rstat$(EXEEXT): $(rstat_OBJECTS) $(rstat_DEPENDENCIES) $(EXTRA_rstat_DEPENDENCIES) + @rm -f rstat$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(rstat_OBJECTS) $(rstat_LDADD) $(LIBS) + +siman$(EXEEXT): $(siman_OBJECTS) $(siman_DEPENDENCIES) $(EXTRA_siman_DEPENDENCIES) + @rm -f siman$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(siman_OBJECTS) $(siman_LDADD) $(LIBS) + +sortsmall$(EXEEXT): $(sortsmall_OBJECTS) $(sortsmall_DEPENDENCIES) $(EXTRA_sortsmall_DEPENDENCIES) + @rm -f sortsmall$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(sortsmall_OBJECTS) $(sortsmall_LDADD) $(LIBS) + +specfun$(EXEEXT): $(specfun_OBJECTS) $(specfun_DEPENDENCIES) $(EXTRA_specfun_DEPENDENCIES) + @rm -f specfun$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(specfun_OBJECTS) $(specfun_LDADD) $(LIBS) + +specfun_e$(EXEEXT): $(specfun_e_OBJECTS) $(specfun_e_DEPENDENCIES) $(EXTRA_specfun_e_DEPENDENCIES) + @rm -f specfun_e$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(specfun_e_OBJECTS) $(specfun_e_LDADD) $(LIBS) + +spmatrix$(EXEEXT): $(spmatrix_OBJECTS) $(spmatrix_DEPENDENCIES) $(EXTRA_spmatrix_DEPENDENCIES) + @rm -f spmatrix$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(spmatrix_OBJECTS) $(spmatrix_LDADD) $(LIBS) + +stat$(EXEEXT): $(stat_OBJECTS) $(stat_DEPENDENCIES) $(EXTRA_stat_DEPENDENCIES) + @rm -f stat$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(stat_OBJECTS) $(stat_LDADD) $(LIBS) + +statsort$(EXEEXT): $(statsort_OBJECTS) $(statsort_DEPENDENCIES) $(EXTRA_statsort_DEPENDENCIES) + @rm -f statsort$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(statsort_OBJECTS) $(statsort_LDADD) $(LIBS) + +sum$(EXEEXT): $(sum_OBJECTS) $(sum_DEPENDENCIES) $(EXTRA_sum_DEPENDENCIES) + @rm -f sum$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(sum_OBJECTS) $(sum_LDADD) $(LIBS) + +vector$(EXEEXT): $(vector_OBJECTS) $(vector_DEPENDENCIES) $(EXTRA_vector_DEPENDENCIES) + @rm -f vector$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(vector_OBJECTS) $(vector_LDADD) $(LIBS) + +vectorr$(EXEEXT): $(vectorr_OBJECTS) $(vectorr_DEPENDENCIES) $(EXTRA_vectorr_DEPENDENCIES) + @rm -f vectorr$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(vectorr_OBJECTS) $(vectorr_LDADD) $(LIBS) + +vectorview$(EXEEXT): $(vectorview_OBJECTS) $(vectorview_DEPENDENCIES) $(EXTRA_vectorview_DEPENDENCIES) + @rm -f vectorview$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(vectorview_OBJECTS) $(vectorview_LDADD) $(LIBS) + +vectorw$(EXEEXT): $(vectorw_OBJECTS) $(vectorw_DEPENDENCIES) $(EXTRA_vectorw_DEPENDENCIES) + @rm -f vectorw$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(vectorw_OBJECTS) $(vectorw_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blas.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/block.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bspline.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cblas.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cheb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/combination.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/const.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diff.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eigen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eigen_nonsymm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fft.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fftmr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fftreal.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fitreg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fitreg2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fitting.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fitting2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fitting3.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/histogram.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/histogram2d.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ieee.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ieeeround.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/integration.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interp2d.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interp_compare.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interpp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/intro.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/largefit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linalglu.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matrix.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matrixw.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/min.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/monte.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multiset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlfit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlfit2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlfit3.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlfit4.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ntupler.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ntuplew.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ode-initval.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/permseq.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/permshuffle.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poisson.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/polyroots.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qrng.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/randpoisson.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/randwalk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rng.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rngunif.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/robfit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rootnewt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/roots.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rquantile.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/siman.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sortsmall.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/specfun.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/specfun_e.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spmatrix.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/statsort.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sum.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vectorr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vectorview.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vectorw.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) +check: check-am +all-am: Makefile $(DATA) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -Nru gsl-doc-1.16/doc/examples/matrix.txt gsl-doc-2.3/doc/examples/matrix.txt --- gsl-doc-1.16/doc/examples/matrix.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/matrix.txt 2015-11-10 18:57:49.000000000 +0000 @@ -0,0 +1,30 @@ +m(0,0) = 0.23 +m(0,1) = 1.23 +m(0,2) = 2.23 +m(1,0) = 100.23 +m(1,1) = 101.23 +m(1,2) = 102.23 +m(2,0) = 200.23 +m(2,1) = 201.23 +m(2,2) = 202.23 +m(3,0) = 300.23 +m(3,1) = 301.23 +m(3,2) = 302.23 +m(4,0) = 400.23 +m(4,1) = 401.23 +m(4,2) = 402.23 +m(5,0) = 500.23 +m(5,1) = 501.23 +m(5,2) = 502.23 +m(6,0) = 600.23 +m(6,1) = 601.23 +m(6,2) = 602.23 +m(7,0) = 700.23 +m(7,1) = 701.23 +m(7,2) = 702.23 +m(8,0) = 800.23 +m(8,1) = 801.23 +m(8,2) = 802.23 +m(9,0) = 900.23 +m(9,1) = 901.23 +m(9,2) = 902.23 diff -Nru gsl-doc-1.16/doc/examples/matrixw.txt gsl-doc-2.3/doc/examples/matrixw.txt --- gsl-doc-1.16/doc/examples/matrixw.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/matrixw.txt 2015-11-10 18:59:04.000000000 +0000 @@ -0,0 +1 @@ +differences = 0 (should be zero) diff -Nru gsl-doc-1.16/doc/examples/min.c gsl-doc-2.3/doc/examples/min.c --- gsl-doc-1.16/doc/examples/min.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/min.c 2015-11-09 19:11:38.000000000 +0000 @@ -5,6 +5,7 @@ double fn1 (double x, void * params) { + (void)(params); /* avoid unused parameter warning */ return cos(x) + 1.0; } diff -Nru gsl-doc-1.16/doc/examples/min.out gsl-doc-2.3/doc/examples/min.out --- gsl-doc-1.16/doc/examples/min.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/min.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ - 0 [0.0000000, 6.0000000] 2.0000000 -1.1415927 6.0000000 - 1 [2.0000000, 6.0000000] 3.2758640 +0.1342713 4.0000000 - 2 [2.0000000, 3.2831929] 3.2758640 +0.1342713 1.2831929 - 3 [2.8689068, 3.2831929] 3.2758640 +0.1342713 0.4142862 - 4 [2.8689068, 3.2831929] 3.2758640 +0.1342713 0.4142862 - 5 [2.8689068, 3.2758640] 3.1460585 +0.0044658 0.4069572 - 6 [3.1346075, 3.2758640] 3.1460585 +0.0044658 0.1412565 - 7 [3.1346075, 3.1874620] 3.1460585 +0.0044658 0.0528545 - 8 [3.1346075, 3.1460585] 3.1460585 +0.0044658 0.0114510 - 9 [3.1346075, 3.1460585] 3.1424060 +0.0008133 0.0114510 - 10 [3.1346075, 3.1424060] 3.1415885 -0.0000041 0.0077985 -Converged: - 11 [3.1415885, 3.1424060] 3.1415927 -0.0000000 0.0008175 diff -Nru gsl-doc-1.16/doc/examples/min.txt gsl-doc-2.3/doc/examples/min.txt --- gsl-doc-1.16/doc/examples/min.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/min.txt 2015-11-10 19:01:40.000000000 +0000 @@ -0,0 +1,10 @@ +using brent method + iter [ lower, upper] min err err(est) + 0 [0.0000000, 6.0000000] 2.0000000 -1.1415927 6.0000000 + 1 [2.0000000, 6.0000000] 3.5278640 +0.3862713 4.0000000 + 2 [2.0000000, 3.5278640] 3.1748217 +0.0332290 1.5278640 + 3 [2.0000000, 3.1748217] 3.1264576 -0.0151351 1.1748217 + 4 [3.1264576, 3.1748217] 3.1414743 -0.0001183 0.0483641 + 5 [3.1414743, 3.1748217] 3.1415930 +0.0000004 0.0333474 +Converged: + 6 [3.1414743, 3.1415930] 3.1415927 +0.0000000 0.0001187 diff -Nru gsl-doc-1.16/doc/examples/monte.c gsl-doc-2.3/doc/examples/monte.c --- gsl-doc-1.16/doc/examples/monte.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/monte.c 2015-11-09 19:12:29.000000000 +0000 @@ -24,6 +24,8 @@ double g (double *k, size_t dim, void *params) { + (void)(dim); /* avoid unused parameter warnings */ + (void)(params); double A = 1.0 / (M_PI * M_PI * M_PI); return A / (1.0 - cos (k[0]) * cos (k[1]) * cos (k[2])); } diff -Nru gsl-doc-1.16/doc/examples/monte.txt gsl-doc-2.3/doc/examples/monte.txt --- gsl-doc-1.16/doc/examples/monte.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/monte.txt 2015-11-10 19:02:56.000000000 +0000 @@ -0,0 +1,22 @@ +plain ================== +result = 1.412209 +sigma = 0.013436 +exact = 1.393204 +error = 0.019005 = 1.4 sigma +miser ================== +result = 1.391322 +sigma = 0.003461 +exact = 1.393204 +error = -0.001882 = 0.54 sigma +vegas warm-up ================== +result = 1.392673 +sigma = 0.003410 +exact = 1.393204 +error = -0.000531 = 0.16 sigma +converging... +result = 1.393281 sigma = 0.000362 chisq/dof = 1.5 +vegas final ================== +result = 1.393281 +sigma = 0.000362 +exact = 1.393204 +error = 0.000077 = 0.21 sigma diff -Nru gsl-doc-1.16/doc/examples/multimin.out gsl-doc-2.3/doc/examples/multimin.out --- gsl-doc-1.16/doc/examples/multimin.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/multimin.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ - x y f - 1 4.99629 6.99072 687.84780 - 2 4.98886 6.97215 683.55456 - 3 4.97400 6.93501 675.01278 - 4 4.94429 6.86073 658.10798 - 5 4.88487 6.71217 625.01340 - 6 4.76602 6.41506 561.68440 - 7 4.52833 5.82083 446.46694 - 8 4.05295 4.63238 261.79422 - 9 3.10219 2.25548 75.49762 - 10 2.85185 1.62963 67.03704 - 11 2.19088 1.76182 45.31640 - 12 0.86892 2.02622 30.18555 -Minimum found at: - 13 1.00000 2.00000 30.00000 diff -Nru gsl-doc-1.16/doc/examples/multimin.txt gsl-doc-2.3/doc/examples/multimin.txt --- gsl-doc-1.16/doc/examples/multimin.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/multimin.txt 2015-11-09 05:23:40.000000000 +0000 @@ -0,0 +1,15 @@ + x y f + 1 4.99629 6.99072 687.84780 + 2 4.98886 6.97215 683.55456 + 3 4.97400 6.93501 675.01278 + 4 4.94429 6.86073 658.10798 + 5 4.88487 6.71217 625.01340 + 6 4.76602 6.41506 561.68440 + 7 4.52833 5.82083 446.46694 + 8 4.05295 4.63238 261.79422 + 9 3.10219 2.25548 75.49762 + 10 2.85185 1.62963 67.03704 + 11 2.19088 1.76182 45.31640 + 12 0.86892 2.02622 30.18555 +Minimum found at: + 13 1.00000 2.00000 30.00000 diff -Nru gsl-doc-1.16/doc/examples/multiset.out gsl-doc-2.3/doc/examples/multiset.out --- gsl-doc-1.16/doc/examples/multiset.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/multiset.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,71 +0,0 @@ -all multisets of {0,1,2,3} by size: -{ } -{ 0 } -{ 1 } -{ 2 } -{ 3 } -{ 0 0 } -{ 0 1 } -{ 0 2 } -{ 0 3 } -{ 1 1 } -{ 1 2 } -{ 1 3 } -{ 2 2 } -{ 2 3 } -{ 3 3 } -{ 0 0 0 } -{ 0 0 1 } -{ 0 0 2 } -{ 0 0 3 } -{ 0 1 1 } -{ 0 1 2 } -{ 0 1 3 } -{ 0 2 2 } -{ 0 2 3 } -{ 0 3 3 } -{ 1 1 1 } -{ 1 1 2 } -{ 1 1 3 } -{ 1 2 2 } -{ 1 2 3 } -{ 1 3 3 } -{ 2 2 2 } -{ 2 2 3 } -{ 2 3 3 } -{ 3 3 3 } -{ 0 0 0 0 } -{ 0 0 0 1 } -{ 0 0 0 2 } -{ 0 0 0 3 } -{ 0 0 1 1 } -{ 0 0 1 2 } -{ 0 0 1 3 } -{ 0 0 2 2 } -{ 0 0 2 3 } -{ 0 0 3 3 } -{ 0 1 1 1 } -{ 0 1 1 2 } -{ 0 1 1 3 } -{ 0 1 2 2 } -{ 0 1 2 3 } -{ 0 1 3 3 } -{ 0 2 2 2 } -{ 0 2 2 3 } -{ 0 2 3 3 } -{ 0 3 3 3 } -{ 1 1 1 1 } -{ 1 1 1 2 } -{ 1 1 1 3 } -{ 1 1 2 2 } -{ 1 1 2 3 } -{ 1 1 3 3 } -{ 1 2 2 2 } -{ 1 2 2 3 } -{ 1 2 3 3 } -{ 1 3 3 3 } -{ 2 2 2 2 } -{ 2 2 2 3 } -{ 2 2 3 3 } -{ 2 3 3 3 } -{ 3 3 3 3 } diff -Nru gsl-doc-1.16/doc/examples/multiset.txt gsl-doc-2.3/doc/examples/multiset.txt --- gsl-doc-1.16/doc/examples/multiset.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/multiset.txt 2015-11-10 19:04:56.000000000 +0000 @@ -0,0 +1,71 @@ +All multisets of {0,1,2,3} by size: +{ } +{ 0 } +{ 1 } +{ 2 } +{ 3 } +{ 0 0 } +{ 0 1 } +{ 0 2 } +{ 0 3 } +{ 1 1 } +{ 1 2 } +{ 1 3 } +{ 2 2 } +{ 2 3 } +{ 3 3 } +{ 0 0 0 } +{ 0 0 1 } +{ 0 0 2 } +{ 0 0 3 } +{ 0 1 1 } +{ 0 1 2 } +{ 0 1 3 } +{ 0 2 2 } +{ 0 2 3 } +{ 0 3 3 } +{ 1 1 1 } +{ 1 1 2 } +{ 1 1 3 } +{ 1 2 2 } +{ 1 2 3 } +{ 1 3 3 } +{ 2 2 2 } +{ 2 2 3 } +{ 2 3 3 } +{ 3 3 3 } +{ 0 0 0 0 } +{ 0 0 0 1 } +{ 0 0 0 2 } +{ 0 0 0 3 } +{ 0 0 1 1 } +{ 0 0 1 2 } +{ 0 0 1 3 } +{ 0 0 2 2 } +{ 0 0 2 3 } +{ 0 0 3 3 } +{ 0 1 1 1 } +{ 0 1 1 2 } +{ 0 1 1 3 } +{ 0 1 2 2 } +{ 0 1 2 3 } +{ 0 1 3 3 } +{ 0 2 2 2 } +{ 0 2 2 3 } +{ 0 2 3 3 } +{ 0 3 3 3 } +{ 1 1 1 1 } +{ 1 1 1 2 } +{ 1 1 1 3 } +{ 1 1 2 2 } +{ 1 1 2 3 } +{ 1 1 3 3 } +{ 1 2 2 2 } +{ 1 2 2 3 } +{ 1 2 3 3 } +{ 1 3 3 3 } +{ 2 2 2 2 } +{ 2 2 2 3 } +{ 2 2 3 3 } +{ 2 3 3 3 } +{ 3 3 3 3 } diff -Nru gsl-doc-1.16/doc/examples/nlfit2.c gsl-doc-2.3/doc/examples/nlfit2.c --- gsl-doc-1.16/doc/examples/nlfit2.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/nlfit2.c 2016-07-07 20:36:10.000000000 +0000 @@ -0,0 +1,165 @@ +#include +#include +#include +#include +#include +#include + +int +func_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + + gsl_vector_set(f, 0, 100.0 * (x2 - x1*x1)); + gsl_vector_set(f, 1, 1.0 - x1); + + return GSL_SUCCESS; +} + +int +func_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + + gsl_matrix_set(J, 0, 0, -200.0*x1); + gsl_matrix_set(J, 0, 1, 100.0); + gsl_matrix_set(J, 1, 0, -1.0); + gsl_matrix_set(J, 1, 1, 0.0); + + return GSL_SUCCESS; +} + +int +func_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double v1 = gsl_vector_get(v, 0); + + gsl_vector_set(fvv, 0, -200.0 * v1 * v1); + gsl_vector_set(fvv, 1, 0.0); + + return GSL_SUCCESS; +} + +void +callback(const size_t iter, void *params, + const gsl_multifit_nlinear_workspace *w) +{ + gsl_vector * x = gsl_multifit_nlinear_position(w); + + /* print out current location */ + printf("%f %f\n", + gsl_vector_get(x, 0), + gsl_vector_get(x, 1)); +} + +void +solve_system(gsl_vector *x0, gsl_multifit_nlinear_fdf *fdf, + gsl_multifit_nlinear_parameters *params) +{ + const gsl_multifit_nlinear_type *T = gsl_multifit_nlinear_trust; + const size_t max_iter = 200; + const double xtol = 1.0e-8; + const double gtol = 1.0e-8; + const double ftol = 1.0e-8; + const size_t n = fdf->n; + const size_t p = fdf->p; + gsl_multifit_nlinear_workspace *work = + gsl_multifit_nlinear_alloc(T, params, n, p); + gsl_vector * f = gsl_multifit_nlinear_residual(work); + gsl_vector * x = gsl_multifit_nlinear_position(work); + int info; + double chisq0, chisq, rcond; + + /* initialize solver */ + gsl_multifit_nlinear_init(x0, fdf, work); + + /* store initial cost */ + gsl_blas_ddot(f, f, &chisq0); + + /* iterate until convergence */ + gsl_multifit_nlinear_driver(max_iter, xtol, gtol, ftol, + callback, NULL, &info, work); + + /* store final cost */ + gsl_blas_ddot(f, f, &chisq); + + /* store cond(J(x)) */ + gsl_multifit_nlinear_rcond(&rcond, work); + + /* print summary */ + + fprintf(stderr, "NITER = %zu\n", gsl_multifit_nlinear_niter(work)); + fprintf(stderr, "NFEV = %zu\n", fdf->nevalf); + fprintf(stderr, "NJEV = %zu\n", fdf->nevaldf); + fprintf(stderr, "NAEV = %zu\n", fdf->nevalfvv); + fprintf(stderr, "initial cost = %.12e\n", chisq0); + fprintf(stderr, "final cost = %.12e\n", chisq); + fprintf(stderr, "final x = (%.12e, %.12e)\n", + gsl_vector_get(x, 0), gsl_vector_get(x, 1)); + fprintf(stderr, "final cond(J) = %.12e\n", 1.0 / rcond); + + printf("\n\n"); + + gsl_multifit_nlinear_free(work); +} + +int +main (void) +{ + const size_t n = 2; + const size_t p = 2; + gsl_vector *f = gsl_vector_alloc(n); + gsl_vector *x = gsl_vector_alloc(p); + gsl_multifit_nlinear_fdf fdf; + gsl_multifit_nlinear_parameters fdf_params = + gsl_multifit_nlinear_default_parameters(); + + /* print map of Phi(x1, x2) */ + { + double x1, x2, chisq; + double *f1 = gsl_vector_ptr(f, 0); + double *f2 = gsl_vector_ptr(f, 1); + + for (x1 = -1.2; x1 < 1.3; x1 += 0.1) + { + for (x2 = -0.5; x2 < 2.1; x2 += 0.1) + { + gsl_vector_set(x, 0, x1); + gsl_vector_set(x, 1, x2); + func_f(x, NULL, f); + + chisq = (*f1) * (*f1) + (*f2) * (*f2); + printf("%f %f %f\n", x1, x2, chisq); + } + printf("\n"); + } + printf("\n\n"); + } + + /* define function to be minimized */ + fdf.f = func_f; + fdf.df = func_df; + fdf.fvv = func_fvv; + fdf.n = n; + fdf.p = p; + fdf.params = NULL; + + /* starting point */ + gsl_vector_set(x, 0, -0.5); + gsl_vector_set(x, 1, 1.75); + + fprintf(stderr, "=== Solving system without acceleration ===\n"); + fdf_params.trs = gsl_multifit_nlinear_trs_lm; + solve_system(x, &fdf, &fdf_params); + + fprintf(stderr, "=== Solving system with acceleration ===\n"); + fdf_params.trs = gsl_multifit_nlinear_trs_lmaccel; + solve_system(x, &fdf, &fdf_params); + + gsl_vector_free(f); + gsl_vector_free(x); + + return 0; +} diff -Nru gsl-doc-1.16/doc/examples/nlfit2.txt gsl-doc-2.3/doc/examples/nlfit2.txt --- gsl-doc-1.16/doc/examples/nlfit2.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/nlfit2.txt 2016-07-07 20:36:10.000000000 +0000 @@ -0,0 +1,751 @@ +-1.200000 -0.500000 37640.840000 +-1.200000 -0.400000 33860.840000 +-1.200000 -0.300000 30280.840000 +-1.200000 -0.200000 26900.840000 +-1.200000 -0.100000 23720.840000 +-1.200000 -0.000000 20740.840000 +-1.200000 0.100000 17960.840000 +-1.200000 0.200000 15380.840000 +-1.200000 0.300000 13000.840000 +-1.200000 0.400000 10820.840000 +-1.200000 0.500000 8840.840000 +-1.200000 0.600000 7060.840000 +-1.200000 0.700000 5480.840000 +-1.200000 0.800000 4100.840000 +-1.200000 0.900000 2920.840000 +-1.200000 1.000000 1940.840000 +-1.200000 1.100000 1160.840000 +-1.200000 1.200000 580.840000 +-1.200000 1.300000 200.840000 +-1.200000 1.400000 20.840000 +-1.200000 1.500000 40.840000 +-1.200000 1.600000 260.840000 +-1.200000 1.700000 680.840000 +-1.200000 1.800000 1300.840000 +-1.200000 1.900000 2120.840000 +-1.200000 2.000000 3140.840000 + +-1.100000 -0.500000 29245.410000 +-1.100000 -0.400000 25925.410000 +-1.100000 -0.300000 22805.410000 +-1.100000 -0.200000 19885.410000 +-1.100000 -0.100000 17165.410000 +-1.100000 -0.000000 14645.410000 +-1.100000 0.100000 12325.410000 +-1.100000 0.200000 10205.410000 +-1.100000 0.300000 8285.410000 +-1.100000 0.400000 6565.410000 +-1.100000 0.500000 5045.410000 +-1.100000 0.600000 3725.410000 +-1.100000 0.700000 2605.410000 +-1.100000 0.800000 1685.410000 +-1.100000 0.900000 965.410000 +-1.100000 1.000000 445.410000 +-1.100000 1.100000 125.410000 +-1.100000 1.200000 5.410000 +-1.100000 1.300000 85.410000 +-1.100000 1.400000 365.410000 +-1.100000 1.500000 845.410000 +-1.100000 1.600000 1525.410000 +-1.100000 1.700000 2405.410000 +-1.100000 1.800000 3485.410000 +-1.100000 1.900000 4765.410000 +-1.100000 2.000000 6245.410000 + +-1.000000 -0.500000 22504.000000 +-1.000000 -0.400000 19604.000000 +-1.000000 -0.300000 16904.000000 +-1.000000 -0.200000 14404.000000 +-1.000000 -0.100000 12104.000000 +-1.000000 -0.000000 10004.000000 +-1.000000 0.100000 8104.000000 +-1.000000 0.200000 6404.000000 +-1.000000 0.300000 4904.000000 +-1.000000 0.400000 3604.000000 +-1.000000 0.500000 2504.000000 +-1.000000 0.600000 1604.000000 +-1.000000 0.700000 904.000000 +-1.000000 0.800000 404.000000 +-1.000000 0.900000 104.000000 +-1.000000 1.000000 4.000000 +-1.000000 1.100000 104.000000 +-1.000000 1.200000 404.000000 +-1.000000 1.300000 904.000000 +-1.000000 1.400000 1604.000000 +-1.000000 1.500000 2504.000000 +-1.000000 1.600000 3604.000000 +-1.000000 1.700000 4904.000000 +-1.000000 1.800000 6404.000000 +-1.000000 1.900000 8104.000000 +-1.000000 2.000000 10004.000000 + +-0.900000 -0.500000 17164.610000 +-0.900000 -0.400000 14644.610000 +-0.900000 -0.300000 12324.610000 +-0.900000 -0.200000 10204.610000 +-0.900000 -0.100000 8284.610000 +-0.900000 -0.000000 6564.610000 +-0.900000 0.100000 5044.610000 +-0.900000 0.200000 3724.610000 +-0.900000 0.300000 2604.610000 +-0.900000 0.400000 1684.610000 +-0.900000 0.500000 964.610000 +-0.900000 0.600000 444.610000 +-0.900000 0.700000 124.610000 +-0.900000 0.800000 4.610000 +-0.900000 0.900000 84.610000 +-0.900000 1.000000 364.610000 +-0.900000 1.100000 844.610000 +-0.900000 1.200000 1524.610000 +-0.900000 1.300000 2404.610000 +-0.900000 1.400000 3484.610000 +-0.900000 1.500000 4764.610000 +-0.900000 1.600000 6244.610000 +-0.900000 1.700000 7924.610000 +-0.900000 1.800000 9804.610000 +-0.900000 1.900000 11884.610000 +-0.900000 2.000000 14164.610000 + +-0.800000 -0.500000 12999.240000 +-0.800000 -0.400000 10819.240000 +-0.800000 -0.300000 8839.240000 +-0.800000 -0.200000 7059.240000 +-0.800000 -0.100000 5479.240000 +-0.800000 -0.000000 4099.240000 +-0.800000 0.100000 2919.240000 +-0.800000 0.200000 1939.240000 +-0.800000 0.300000 1159.240000 +-0.800000 0.400000 579.240000 +-0.800000 0.500000 199.240000 +-0.800000 0.600000 19.240000 +-0.800000 0.700000 39.240000 +-0.800000 0.800000 259.240000 +-0.800000 0.900000 679.240000 +-0.800000 1.000000 1299.240000 +-0.800000 1.100000 2119.240000 +-0.800000 1.200000 3139.240000 +-0.800000 1.300000 4359.240000 +-0.800000 1.400000 5779.240000 +-0.800000 1.500000 7399.240000 +-0.800000 1.600000 9219.240000 +-0.800000 1.700000 11239.240000 +-0.800000 1.800000 13459.240000 +-0.800000 1.900000 15879.240000 +-0.800000 2.000000 18499.240000 + +-0.700000 -0.500000 9803.890000 +-0.700000 -0.400000 7923.890000 +-0.700000 -0.300000 6243.890000 +-0.700000 -0.200000 4763.890000 +-0.700000 -0.100000 3483.890000 +-0.700000 -0.000000 2403.890000 +-0.700000 0.100000 1523.890000 +-0.700000 0.200000 843.890000 +-0.700000 0.300000 363.890000 +-0.700000 0.400000 83.890000 +-0.700000 0.500000 3.890000 +-0.700000 0.600000 123.890000 +-0.700000 0.700000 443.890000 +-0.700000 0.800000 963.890000 +-0.700000 0.900000 1683.890000 +-0.700000 1.000000 2603.890000 +-0.700000 1.100000 3723.890000 +-0.700000 1.200000 5043.890000 +-0.700000 1.300000 6563.890000 +-0.700000 1.400000 8283.890000 +-0.700000 1.500000 10203.890000 +-0.700000 1.600000 12323.890000 +-0.700000 1.700000 14643.890000 +-0.700000 1.800000 17163.890000 +-0.700000 1.900000 19883.890000 +-0.700000 2.000000 22803.890000 + +-0.600000 -0.500000 7398.560000 +-0.600000 -0.400000 5778.560000 +-0.600000 -0.300000 4358.560000 +-0.600000 -0.200000 3138.560000 +-0.600000 -0.100000 2118.560000 +-0.600000 -0.000000 1298.560000 +-0.600000 0.100000 678.560000 +-0.600000 0.200000 258.560000 +-0.600000 0.300000 38.560000 +-0.600000 0.400000 18.560000 +-0.600000 0.500000 198.560000 +-0.600000 0.600000 578.560000 +-0.600000 0.700000 1158.560000 +-0.600000 0.800000 1938.560000 +-0.600000 0.900000 2918.560000 +-0.600000 1.000000 4098.560000 +-0.600000 1.100000 5478.560000 +-0.600000 1.200000 7058.560000 +-0.600000 1.300000 8838.560000 +-0.600000 1.400000 10818.560000 +-0.600000 1.500000 12998.560000 +-0.600000 1.600000 15378.560000 +-0.600000 1.700000 17958.560000 +-0.600000 1.800000 20738.560000 +-0.600000 1.900000 23718.560000 +-0.600000 2.000000 26898.560000 + +-0.500000 -0.500000 5627.250000 +-0.500000 -0.400000 4227.250000 +-0.500000 -0.300000 3027.250000 +-0.500000 -0.200000 2027.250000 +-0.500000 -0.100000 1227.250000 +-0.500000 -0.000000 627.250000 +-0.500000 0.100000 227.250000 +-0.500000 0.200000 27.250000 +-0.500000 0.300000 27.250000 +-0.500000 0.400000 227.250000 +-0.500000 0.500000 627.250000 +-0.500000 0.600000 1227.250000 +-0.500000 0.700000 2027.250000 +-0.500000 0.800000 3027.250000 +-0.500000 0.900000 4227.250000 +-0.500000 1.000000 5627.250000 +-0.500000 1.100000 7227.250000 +-0.500000 1.200000 9027.250000 +-0.500000 1.300000 11027.250000 +-0.500000 1.400000 13227.250000 +-0.500000 1.500000 15627.250000 +-0.500000 1.600000 18227.250000 +-0.500000 1.700000 21027.250000 +-0.500000 1.800000 24027.250000 +-0.500000 1.900000 27227.250000 +-0.500000 2.000000 30627.250000 + +-0.400000 -0.500000 4357.960000 +-0.400000 -0.400000 3137.960000 +-0.400000 -0.300000 2117.960000 +-0.400000 -0.200000 1297.960000 +-0.400000 -0.100000 677.960000 +-0.400000 -0.000000 257.960000 +-0.400000 0.100000 37.960000 +-0.400000 0.200000 17.960000 +-0.400000 0.300000 197.960000 +-0.400000 0.400000 577.960000 +-0.400000 0.500000 1157.960000 +-0.400000 0.600000 1937.960000 +-0.400000 0.700000 2917.960000 +-0.400000 0.800000 4097.960000 +-0.400000 0.900000 5477.960000 +-0.400000 1.000000 7057.960000 +-0.400000 1.100000 8837.960000 +-0.400000 1.200000 10817.960000 +-0.400000 1.300000 12997.960000 +-0.400000 1.400000 15377.960000 +-0.400000 1.500000 17957.960000 +-0.400000 1.600000 20737.960000 +-0.400000 1.700000 23717.960000 +-0.400000 1.800000 26897.960000 +-0.400000 1.900000 30277.960000 +-0.400000 2.000000 33857.960000 + +-0.300000 -0.500000 3482.690000 +-0.300000 -0.400000 2402.690000 +-0.300000 -0.300000 1522.690000 +-0.300000 -0.200000 842.690000 +-0.300000 -0.100000 362.690000 +-0.300000 -0.000000 82.690000 +-0.300000 0.100000 2.690000 +-0.300000 0.200000 122.690000 +-0.300000 0.300000 442.690000 +-0.300000 0.400000 962.690000 +-0.300000 0.500000 1682.690000 +-0.300000 0.600000 2602.690000 +-0.300000 0.700000 3722.690000 +-0.300000 0.800000 5042.690000 +-0.300000 0.900000 6562.690000 +-0.300000 1.000000 8282.690000 +-0.300000 1.100000 10202.690000 +-0.300000 1.200000 12322.690000 +-0.300000 1.300000 14642.690000 +-0.300000 1.400000 17162.690000 +-0.300000 1.500000 19882.690000 +-0.300000 1.600000 22802.690000 +-0.300000 1.700000 25922.690000 +-0.300000 1.800000 29242.690000 +-0.300000 1.900000 32762.690000 +-0.300000 2.000000 36482.690000 + +-0.200000 -0.500000 2917.440000 +-0.200000 -0.400000 1937.440000 +-0.200000 -0.300000 1157.440000 +-0.200000 -0.200000 577.440000 +-0.200000 -0.100000 197.440000 +-0.200000 -0.000000 17.440000 +-0.200000 0.100000 37.440000 +-0.200000 0.200000 257.440000 +-0.200000 0.300000 677.440000 +-0.200000 0.400000 1297.440000 +-0.200000 0.500000 2117.440000 +-0.200000 0.600000 3137.440000 +-0.200000 0.700000 4357.440000 +-0.200000 0.800000 5777.440000 +-0.200000 0.900000 7397.440000 +-0.200000 1.000000 9217.440000 +-0.200000 1.100000 11237.440000 +-0.200000 1.200000 13457.440000 +-0.200000 1.300000 15877.440000 +-0.200000 1.400000 18497.440000 +-0.200000 1.500000 21317.440000 +-0.200000 1.600000 24337.440000 +-0.200000 1.700000 27557.440000 +-0.200000 1.800000 30977.440000 +-0.200000 1.900000 34597.440000 +-0.200000 2.000000 38417.440000 + +-0.100000 -0.500000 2602.210000 +-0.100000 -0.400000 1682.210000 +-0.100000 -0.300000 962.210000 +-0.100000 -0.200000 442.210000 +-0.100000 -0.100000 122.210000 +-0.100000 -0.000000 2.210000 +-0.100000 0.100000 82.210000 +-0.100000 0.200000 362.210000 +-0.100000 0.300000 842.210000 +-0.100000 0.400000 1522.210000 +-0.100000 0.500000 2402.210000 +-0.100000 0.600000 3482.210000 +-0.100000 0.700000 4762.210000 +-0.100000 0.800000 6242.210000 +-0.100000 0.900000 7922.210000 +-0.100000 1.000000 9802.210000 +-0.100000 1.100000 11882.210000 +-0.100000 1.200000 14162.210000 +-0.100000 1.300000 16642.210000 +-0.100000 1.400000 19322.210000 +-0.100000 1.500000 22202.210000 +-0.100000 1.600000 25282.210000 +-0.100000 1.700000 28562.210000 +-0.100000 1.800000 32042.210000 +-0.100000 1.900000 35722.210000 +-0.100000 2.000000 39602.210000 + +-0.000000 -0.500000 2501.000000 +-0.000000 -0.400000 1601.000000 +-0.000000 -0.300000 901.000000 +-0.000000 -0.200000 401.000000 +-0.000000 -0.100000 101.000000 +-0.000000 -0.000000 1.000000 +-0.000000 0.100000 101.000000 +-0.000000 0.200000 401.000000 +-0.000000 0.300000 901.000000 +-0.000000 0.400000 1601.000000 +-0.000000 0.500000 2501.000000 +-0.000000 0.600000 3601.000000 +-0.000000 0.700000 4901.000000 +-0.000000 0.800000 6401.000000 +-0.000000 0.900000 8101.000000 +-0.000000 1.000000 10001.000000 +-0.000000 1.100000 12101.000000 +-0.000000 1.200000 14401.000000 +-0.000000 1.300000 16901.000000 +-0.000000 1.400000 19601.000000 +-0.000000 1.500000 22501.000000 +-0.000000 1.600000 25601.000000 +-0.000000 1.700000 28901.000000 +-0.000000 1.800000 32401.000000 +-0.000000 1.900000 36101.000000 +-0.000000 2.000000 40001.000000 + +0.100000 -0.500000 2601.810000 +0.100000 -0.400000 1681.810000 +0.100000 -0.300000 961.810000 +0.100000 -0.200000 441.810000 +0.100000 -0.100000 121.810000 +0.100000 -0.000000 1.810000 +0.100000 0.100000 81.810000 +0.100000 0.200000 361.810000 +0.100000 0.300000 841.810000 +0.100000 0.400000 1521.810000 +0.100000 0.500000 2401.810000 +0.100000 0.600000 3481.810000 +0.100000 0.700000 4761.810000 +0.100000 0.800000 6241.810000 +0.100000 0.900000 7921.810000 +0.100000 1.000000 9801.810000 +0.100000 1.100000 11881.810000 +0.100000 1.200000 14161.810000 +0.100000 1.300000 16641.810000 +0.100000 1.400000 19321.810000 +0.100000 1.500000 22201.810000 +0.100000 1.600000 25281.810000 +0.100000 1.700000 28561.810000 +0.100000 1.800000 32041.810000 +0.100000 1.900000 35721.810000 +0.100000 2.000000 39601.810000 + +0.200000 -0.500000 2916.640000 +0.200000 -0.400000 1936.640000 +0.200000 -0.300000 1156.640000 +0.200000 -0.200000 576.640000 +0.200000 -0.100000 196.640000 +0.200000 -0.000000 16.640000 +0.200000 0.100000 36.640000 +0.200000 0.200000 256.640000 +0.200000 0.300000 676.640000 +0.200000 0.400000 1296.640000 +0.200000 0.500000 2116.640000 +0.200000 0.600000 3136.640000 +0.200000 0.700000 4356.640000 +0.200000 0.800000 5776.640000 +0.200000 0.900000 7396.640000 +0.200000 1.000000 9216.640000 +0.200000 1.100000 11236.640000 +0.200000 1.200000 13456.640000 +0.200000 1.300000 15876.640000 +0.200000 1.400000 18496.640000 +0.200000 1.500000 21316.640000 +0.200000 1.600000 24336.640000 +0.200000 1.700000 27556.640000 +0.200000 1.800000 30976.640000 +0.200000 1.900000 34596.640000 +0.200000 2.000000 38416.640000 + +0.300000 -0.500000 3481.490000 +0.300000 -0.400000 2401.490000 +0.300000 -0.300000 1521.490000 +0.300000 -0.200000 841.490000 +0.300000 -0.100000 361.490000 +0.300000 -0.000000 81.490000 +0.300000 0.100000 1.490000 +0.300000 0.200000 121.490000 +0.300000 0.300000 441.490000 +0.300000 0.400000 961.490000 +0.300000 0.500000 1681.490000 +0.300000 0.600000 2601.490000 +0.300000 0.700000 3721.490000 +0.300000 0.800000 5041.490000 +0.300000 0.900000 6561.490000 +0.300000 1.000000 8281.490000 +0.300000 1.100000 10201.490000 +0.300000 1.200000 12321.490000 +0.300000 1.300000 14641.490000 +0.300000 1.400000 17161.490000 +0.300000 1.500000 19881.490000 +0.300000 1.600000 22801.490000 +0.300000 1.700000 25921.490000 +0.300000 1.800000 29241.490000 +0.300000 1.900000 32761.490000 +0.300000 2.000000 36481.490000 + +0.400000 -0.500000 4356.360000 +0.400000 -0.400000 3136.360000 +0.400000 -0.300000 2116.360000 +0.400000 -0.200000 1296.360000 +0.400000 -0.100000 676.360000 +0.400000 -0.000000 256.360000 +0.400000 0.100000 36.360000 +0.400000 0.200000 16.360000 +0.400000 0.300000 196.360000 +0.400000 0.400000 576.360000 +0.400000 0.500000 1156.360000 +0.400000 0.600000 1936.360000 +0.400000 0.700000 2916.360000 +0.400000 0.800000 4096.360000 +0.400000 0.900000 5476.360000 +0.400000 1.000000 7056.360000 +0.400000 1.100000 8836.360000 +0.400000 1.200000 10816.360000 +0.400000 1.300000 12996.360000 +0.400000 1.400000 15376.360000 +0.400000 1.500000 17956.360000 +0.400000 1.600000 20736.360000 +0.400000 1.700000 23716.360000 +0.400000 1.800000 26896.360000 +0.400000 1.900000 30276.360000 +0.400000 2.000000 33856.360000 + +0.500000 -0.500000 5625.250000 +0.500000 -0.400000 4225.250000 +0.500000 -0.300000 3025.250000 +0.500000 -0.200000 2025.250000 +0.500000 -0.100000 1225.250000 +0.500000 -0.000000 625.250000 +0.500000 0.100000 225.250000 +0.500000 0.200000 25.250000 +0.500000 0.300000 25.250000 +0.500000 0.400000 225.250000 +0.500000 0.500000 625.250000 +0.500000 0.600000 1225.250000 +0.500000 0.700000 2025.250000 +0.500000 0.800000 3025.250000 +0.500000 0.900000 4225.250000 +0.500000 1.000000 5625.250000 +0.500000 1.100000 7225.250000 +0.500000 1.200000 9025.250000 +0.500000 1.300000 11025.250000 +0.500000 1.400000 13225.250000 +0.500000 1.500000 15625.250000 +0.500000 1.600000 18225.250000 +0.500000 1.700000 21025.250000 +0.500000 1.800000 24025.250000 +0.500000 1.900000 27225.250000 +0.500000 2.000000 30625.250000 + +0.600000 -0.500000 7396.160000 +0.600000 -0.400000 5776.160000 +0.600000 -0.300000 4356.160000 +0.600000 -0.200000 3136.160000 +0.600000 -0.100000 2116.160000 +0.600000 -0.000000 1296.160000 +0.600000 0.100000 676.160000 +0.600000 0.200000 256.160000 +0.600000 0.300000 36.160000 +0.600000 0.400000 16.160000 +0.600000 0.500000 196.160000 +0.600000 0.600000 576.160000 +0.600000 0.700000 1156.160000 +0.600000 0.800000 1936.160000 +0.600000 0.900000 2916.160000 +0.600000 1.000000 4096.160000 +0.600000 1.100000 5476.160000 +0.600000 1.200000 7056.160000 +0.600000 1.300000 8836.160000 +0.600000 1.400000 10816.160000 +0.600000 1.500000 12996.160000 +0.600000 1.600000 15376.160000 +0.600000 1.700000 17956.160000 +0.600000 1.800000 20736.160000 +0.600000 1.900000 23716.160000 +0.600000 2.000000 26896.160000 + +0.700000 -0.500000 9801.090000 +0.700000 -0.400000 7921.090000 +0.700000 -0.300000 6241.090000 +0.700000 -0.200000 4761.090000 +0.700000 -0.100000 3481.090000 +0.700000 -0.000000 2401.090000 +0.700000 0.100000 1521.090000 +0.700000 0.200000 841.090000 +0.700000 0.300000 361.090000 +0.700000 0.400000 81.090000 +0.700000 0.500000 1.090000 +0.700000 0.600000 121.090000 +0.700000 0.700000 441.090000 +0.700000 0.800000 961.090000 +0.700000 0.900000 1681.090000 +0.700000 1.000000 2601.090000 +0.700000 1.100000 3721.090000 +0.700000 1.200000 5041.090000 +0.700000 1.300000 6561.090000 +0.700000 1.400000 8281.090000 +0.700000 1.500000 10201.090000 +0.700000 1.600000 12321.090000 +0.700000 1.700000 14641.090000 +0.700000 1.800000 17161.090000 +0.700000 1.900000 19881.090000 +0.700000 2.000000 22801.090000 + +0.800000 -0.500000 12996.040000 +0.800000 -0.400000 10816.040000 +0.800000 -0.300000 8836.040000 +0.800000 -0.200000 7056.040000 +0.800000 -0.100000 5476.040000 +0.800000 -0.000000 4096.040000 +0.800000 0.100000 2916.040000 +0.800000 0.200000 1936.040000 +0.800000 0.300000 1156.040000 +0.800000 0.400000 576.040000 +0.800000 0.500000 196.040000 +0.800000 0.600000 16.040000 +0.800000 0.700000 36.040000 +0.800000 0.800000 256.040000 +0.800000 0.900000 676.040000 +0.800000 1.000000 1296.040000 +0.800000 1.100000 2116.040000 +0.800000 1.200000 3136.040000 +0.800000 1.300000 4356.040000 +0.800000 1.400000 5776.040000 +0.800000 1.500000 7396.040000 +0.800000 1.600000 9216.040000 +0.800000 1.700000 11236.040000 +0.800000 1.800000 13456.040000 +0.800000 1.900000 15876.040000 +0.800000 2.000000 18496.040000 + +0.900000 -0.500000 17161.010000 +0.900000 -0.400000 14641.010000 +0.900000 -0.300000 12321.010000 +0.900000 -0.200000 10201.010000 +0.900000 -0.100000 8281.010000 +0.900000 -0.000000 6561.010000 +0.900000 0.100000 5041.010000 +0.900000 0.200000 3721.010000 +0.900000 0.300000 2601.010000 +0.900000 0.400000 1681.010000 +0.900000 0.500000 961.010000 +0.900000 0.600000 441.010000 +0.900000 0.700000 121.010000 +0.900000 0.800000 1.010000 +0.900000 0.900000 81.010000 +0.900000 1.000000 361.010000 +0.900000 1.100000 841.010000 +0.900000 1.200000 1521.010000 +0.900000 1.300000 2401.010000 +0.900000 1.400000 3481.010000 +0.900000 1.500000 4761.010000 +0.900000 1.600000 6241.010000 +0.900000 1.700000 7921.010000 +0.900000 1.800000 9801.010000 +0.900000 1.900000 11881.010000 +0.900000 2.000000 14161.010000 + +1.000000 -0.500000 22500.000000 +1.000000 -0.400000 19600.000000 +1.000000 -0.300000 16900.000000 +1.000000 -0.200000 14400.000000 +1.000000 -0.100000 12100.000000 +1.000000 -0.000000 10000.000000 +1.000000 0.100000 8100.000000 +1.000000 0.200000 6400.000000 +1.000000 0.300000 4900.000000 +1.000000 0.400000 3600.000000 +1.000000 0.500000 2500.000000 +1.000000 0.600000 1600.000000 +1.000000 0.700000 900.000000 +1.000000 0.800000 400.000000 +1.000000 0.900000 100.000000 +1.000000 1.000000 0.000000 +1.000000 1.100000 100.000000 +1.000000 1.200000 400.000000 +1.000000 1.300000 900.000000 +1.000000 1.400000 1600.000000 +1.000000 1.500000 2500.000000 +1.000000 1.600000 3600.000000 +1.000000 1.700000 4900.000000 +1.000000 1.800000 6400.000000 +1.000000 1.900000 8100.000000 +1.000000 2.000000 10000.000000 + +1.100000 -0.500000 29241.010000 +1.100000 -0.400000 25921.010000 +1.100000 -0.300000 22801.010000 +1.100000 -0.200000 19881.010000 +1.100000 -0.100000 17161.010000 +1.100000 -0.000000 14641.010000 +1.100000 0.100000 12321.010000 +1.100000 0.200000 10201.010000 +1.100000 0.300000 8281.010000 +1.100000 0.400000 6561.010000 +1.100000 0.500000 5041.010000 +1.100000 0.600000 3721.010000 +1.100000 0.700000 2601.010000 +1.100000 0.800000 1681.010000 +1.100000 0.900000 961.010000 +1.100000 1.000000 441.010000 +1.100000 1.100000 121.010000 +1.100000 1.200000 1.010000 +1.100000 1.300000 81.010000 +1.100000 1.400000 361.010000 +1.100000 1.500000 841.010000 +1.100000 1.600000 1521.010000 +1.100000 1.700000 2401.010000 +1.100000 1.800000 3481.010000 +1.100000 1.900000 4761.010000 +1.100000 2.000000 6241.010000 + +1.200000 -0.500000 37636.040000 +1.200000 -0.400000 33856.040000 +1.200000 -0.300000 30276.040000 +1.200000 -0.200000 26896.040000 +1.200000 -0.100000 23716.040000 +1.200000 -0.000000 20736.040000 +1.200000 0.100000 17956.040000 +1.200000 0.200000 15376.040000 +1.200000 0.300000 12996.040000 +1.200000 0.400000 10816.040000 +1.200000 0.500000 8836.040000 +1.200000 0.600000 7056.040000 +1.200000 0.700000 5476.040000 +1.200000 0.800000 4096.040000 +1.200000 0.900000 2916.040000 +1.200000 1.000000 1936.040000 +1.200000 1.100000 1156.040000 +1.200000 1.200000 576.040000 +1.200000 1.300000 196.040000 +1.200000 1.400000 16.040000 +1.200000 1.500000 36.040000 +1.200000 1.600000 256.040000 +1.200000 1.700000 676.040000 +1.200000 1.800000 1296.040000 +1.200000 1.900000 2116.040000 +1.200000 2.000000 3136.040000 + + + +-0.500000 1.750000 +-1.142419 0.893275 +-1.002809 0.986100 +-0.918244 0.836060 +-0.843637 0.706196 +-0.767030 0.582503 +-0.689381 0.469250 +-0.611125 0.367380 +-0.532857 0.277838 +-0.455124 0.201118 +-0.378459 0.137373 +-0.303367 0.086408 +-0.230328 0.047728 +-0.159798 0.020569 +-0.092192 0.003934 +-0.027873 -0.003358 +0.032893 -0.002611 +0.089988 0.004836 +0.143479 0.017721 +0.193621 0.034970 +0.240795 0.055751 +0.285430 0.079471 +0.327928 0.105723 +0.368632 0.134225 +0.407805 0.164762 +0.445640 0.197155 +0.482269 0.231234 +0.517778 0.266826 +0.552221 0.303754 +0.585627 0.341835 +0.618008 0.380878 +0.649364 0.420684 +0.679689 0.461051 +0.708966 0.501770 +0.737174 0.542625 +0.764288 0.583396 +0.790274 0.623854 +0.815097 0.663764 +0.838715 0.702882 +0.861079 0.740954 +0.882134 0.777714 +0.901817 0.812884 +0.920054 0.846166 +0.936762 0.877243 +0.951840 0.905772 +0.965169 0.931373 +0.976604 0.953625 +0.985967 0.972043 +0.993042 0.986082 +0.997603 0.995191 +0.999638 0.999272 +0.999980 0.999959 +1.000000 0.999999 +1.000000 1.000000 + + +-0.500000 1.750000 +-0.946006 1.109349 +-0.921962 0.850093 +-0.691178 0.472692 +-0.415856 0.165195 +-0.135440 0.012083 +0.128552 0.014498 +0.393660 0.156838 +0.667141 0.449487 +0.796457 0.635023 +0.923422 0.853111 +0.985892 0.972006 +0.998922 0.997845 +0.999970 0.999941 +1.000000 0.999999 +1.000000 1.000000 + + diff -Nru gsl-doc-1.16/doc/examples/nlfit3.c gsl-doc-2.3/doc/examples/nlfit3.c --- gsl-doc-1.16/doc/examples/nlfit3.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/nlfit3.c 2016-08-22 19:33:19.000000000 +0000 @@ -0,0 +1,209 @@ +#include +#include +#include +#include +#include +#include + +/* parameters to model */ +struct model_params +{ + double a1; + double a2; + double a3; + double a4; + double a5; +}; + +/* Branin function */ +int +func_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + struct model_params *par = (struct model_params *) params; + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double f1 = x2 + par->a1 * x1 * x1 + par->a2 * x1 + par->a3; + double f2 = sqrt(par->a4) * sqrt(1.0 + (1.0 - par->a5) * cos(x1)); + + gsl_vector_set(f, 0, f1); + gsl_vector_set(f, 1, f2); + + return GSL_SUCCESS; +} + +int +func_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + struct model_params *par = (struct model_params *) params; + double x1 = gsl_vector_get(x, 0); + double f2 = sqrt(par->a4) * sqrt(1.0 + (1.0 - par->a5) * cos(x1)); + + gsl_matrix_set(J, 0, 0, 2.0 * par->a1 * x1 + par->a2); + gsl_matrix_set(J, 0, 1, 1.0); + + gsl_matrix_set(J, 1, 0, -0.5 * par->a4 / f2 * (1.0 - par->a5) * sin(x1)); + gsl_matrix_set(J, 1, 1, 0.0); + + return GSL_SUCCESS; +} + +int +func_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + struct model_params *par = (struct model_params *) params; + double x1 = gsl_vector_get(x, 0); + double v1 = gsl_vector_get(v, 0); + double c = cos(x1); + double s = sin(x1); + double f2 = sqrt(par->a4) * sqrt(1.0 + (1.0 - par->a5) * c); + double t = 0.5 * par->a4 * (1.0 - par->a5) / f2; + + gsl_vector_set(fvv, 0, 2.0 * par->a1 * v1 * v1); + gsl_vector_set(fvv, 1, -t * (c + s*s/f2) * v1 * v1); + + return GSL_SUCCESS; +} + +void +callback(const size_t iter, void *params, + const gsl_multifit_nlinear_workspace *w) +{ + gsl_vector * x = gsl_multifit_nlinear_position(w); + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + + /* print out current location */ + printf("%f %f\n", x1, x2); +} + +void +solve_system(gsl_vector *x0, gsl_multifit_nlinear_fdf *fdf, + gsl_multifit_nlinear_parameters *params) +{ + const gsl_multifit_nlinear_type *T = gsl_multifit_nlinear_trust; + const size_t max_iter = 200; + const double xtol = 1.0e-8; + const double gtol = 1.0e-8; + const double ftol = 1.0e-8; + const size_t n = fdf->n; + const size_t p = fdf->p; + gsl_multifit_nlinear_workspace *work = + gsl_multifit_nlinear_alloc(T, params, n, p); + gsl_vector * f = gsl_multifit_nlinear_residual(work); + gsl_vector * x = gsl_multifit_nlinear_position(work); + int info; + double chisq0, chisq, rcond; + + printf("# %s/%s\n", + gsl_multifit_nlinear_name(work), + gsl_multifit_nlinear_trs_name(work)); + + /* initialize solver */ + gsl_multifit_nlinear_init(x0, fdf, work); + + /* store initial cost */ + gsl_blas_ddot(f, f, &chisq0); + + /* iterate until convergence */ + gsl_multifit_nlinear_driver(max_iter, xtol, gtol, ftol, + callback, NULL, &info, work); + + /* store final cost */ + gsl_blas_ddot(f, f, &chisq); + + /* store cond(J(x)) */ + gsl_multifit_nlinear_rcond(&rcond, work); + + /* print summary */ + fprintf(stderr, "%-25s %-6zu %-5zu %-5zu %-13.4e %-12.4e %-13.4e (%.2e, %.2e)\n", + gsl_multifit_nlinear_trs_name(work), + gsl_multifit_nlinear_niter(work), + fdf->nevalf, + fdf->nevaldf, + chisq0, + chisq, + 1.0 / rcond, + gsl_vector_get(x, 0), + gsl_vector_get(x, 1)); + + printf("\n\n"); + + gsl_multifit_nlinear_free(work); +} + +int +main (void) +{ + const size_t n = 2; + const size_t p = 2; + gsl_vector *f = gsl_vector_alloc(n); + gsl_vector *x = gsl_vector_alloc(p); + gsl_multifit_nlinear_fdf fdf; + gsl_multifit_nlinear_parameters fdf_params = + gsl_multifit_nlinear_default_parameters(); + struct model_params params; + + params.a1 = -5.1 / (4.0 * M_PI * M_PI); + params.a2 = 5.0 / M_PI; + params.a3 = -6.0; + params.a4 = 10.0; + params.a5 = 1.0 / (8.0 * M_PI); + + /* print map of Phi(x1, x2) */ + { + double x1, x2, chisq; + + for (x1 = -5.0; x1 < 15.0; x1 += 0.1) + { + for (x2 = -5.0; x2 < 15.0; x2 += 0.1) + { + gsl_vector_set(x, 0, x1); + gsl_vector_set(x, 1, x2); + func_f(x, ¶ms, f); + + gsl_blas_ddot(f, f, &chisq); + + printf("%f %f %f\n", x1, x2, chisq); + } + printf("\n"); + } + printf("\n\n"); + } + + /* define function to be minimized */ + fdf.f = func_f; + fdf.df = func_df; + fdf.fvv = func_fvv; + fdf.n = n; + fdf.p = p; + fdf.params = ¶ms; + + /* starting point */ + gsl_vector_set(x, 0, 6.0); + gsl_vector_set(x, 1, 14.5); + + fprintf(stderr, "%-25s %-6s %-5s %-5s %-13s %-12s %-13s %-15s\n", + "Method", "NITER", "NFEV", "NJEV", "Initial Cost", + "Final cost", "Final cond(J)", "Final x"); + + fdf_params.trs = gsl_multifit_nlinear_trs_lm; + solve_system(x, &fdf, &fdf_params); + + fdf_params.trs = gsl_multifit_nlinear_trs_lmaccel; + solve_system(x, &fdf, &fdf_params); + + fdf_params.trs = gsl_multifit_nlinear_trs_dogleg; + solve_system(x, &fdf, &fdf_params); + + fdf_params.trs = gsl_multifit_nlinear_trs_ddogleg; + solve_system(x, &fdf, &fdf_params); + + fdf_params.trs = gsl_multifit_nlinear_trs_subspace2D; + solve_system(x, &fdf, &fdf_params); + + gsl_vector_free(f); + gsl_vector_free(x); + + return 0; +} diff -Nru gsl-doc-1.16/doc/examples/nlfit3.txt gsl-doc-2.3/doc/examples/nlfit3.txt --- gsl-doc-1.16/doc/examples/nlfit3.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/nlfit3.txt 2016-09-08 18:00:12.000000000 +0000 @@ -0,0 +1,40741 @@ +-5.000000 -5.000000 505.002695 +-5.000000 -4.900000 500.575223 +-5.000000 -4.800000 496.167751 +-5.000000 -4.700000 491.780279 +-5.000000 -4.600000 487.412807 +-5.000000 -4.500000 483.065335 +-5.000000 -4.400000 478.737863 +-5.000000 -4.300000 474.430391 +-5.000000 -4.200000 470.142919 +-5.000000 -4.100000 465.875447 +-5.000000 -4.000000 461.627975 +-5.000000 -3.900000 457.400503 +-5.000000 -3.800000 453.193031 +-5.000000 -3.700000 449.005559 +-5.000000 -3.600000 444.838087 +-5.000000 -3.500000 440.690615 +-5.000000 -3.400000 436.563143 +-5.000000 -3.300000 432.455671 +-5.000000 -3.200000 428.368199 +-5.000000 -3.100000 424.300727 +-5.000000 -3.000000 420.253255 +-5.000000 -2.900000 416.225783 +-5.000000 -2.800000 412.218311 +-5.000000 -2.700000 408.230839 +-5.000000 -2.600000 404.263367 +-5.000000 -2.500000 400.315895 +-5.000000 -2.400000 396.388423 +-5.000000 -2.300000 392.480951 +-5.000000 -2.200000 388.593479 +-5.000000 -2.100000 384.726008 +-5.000000 -2.000000 380.878536 +-5.000000 -1.900000 377.051064 +-5.000000 -1.800000 373.243592 +-5.000000 -1.700000 369.456120 +-5.000000 -1.600000 365.688648 +-5.000000 -1.500000 361.941176 +-5.000000 -1.400000 358.213704 +-5.000000 -1.300000 354.506232 +-5.000000 -1.200000 350.818760 +-5.000000 -1.100000 347.151288 +-5.000000 -1.000000 343.503816 +-5.000000 -0.900000 339.876344 +-5.000000 -0.800000 336.268872 +-5.000000 -0.700000 332.681400 +-5.000000 -0.600000 329.113928 +-5.000000 -0.500000 325.566456 +-5.000000 -0.400000 322.038984 +-5.000000 -0.300000 318.531512 +-5.000000 -0.200000 315.044040 +-5.000000 -0.100000 311.576568 +-5.000000 -0.000000 308.129096 +-5.000000 0.100000 304.701624 +-5.000000 0.200000 301.294152 +-5.000000 0.300000 297.906680 +-5.000000 0.400000 294.539208 +-5.000000 0.500000 291.191736 +-5.000000 0.600000 287.864264 +-5.000000 0.700000 284.556792 +-5.000000 0.800000 281.269320 +-5.000000 0.900000 278.001848 +-5.000000 1.000000 274.754376 +-5.000000 1.100000 271.526904 +-5.000000 1.200000 268.319432 +-5.000000 1.300000 265.131960 +-5.000000 1.400000 261.964488 +-5.000000 1.500000 258.817016 +-5.000000 1.600000 255.689544 +-5.000000 1.700000 252.582072 +-5.000000 1.800000 249.494600 +-5.000000 1.900000 246.427128 +-5.000000 2.000000 243.379656 +-5.000000 2.100000 240.352185 +-5.000000 2.200000 237.344713 +-5.000000 2.300000 234.357241 +-5.000000 2.400000 231.389769 +-5.000000 2.500000 228.442297 +-5.000000 2.600000 225.514825 +-5.000000 2.700000 222.607353 +-5.000000 2.800000 219.719881 +-5.000000 2.900000 216.852409 +-5.000000 3.000000 214.004937 +-5.000000 3.100000 211.177465 +-5.000000 3.200000 208.369993 +-5.000000 3.300000 205.582521 +-5.000000 3.400000 202.815049 +-5.000000 3.500000 200.067577 +-5.000000 3.600000 197.340105 +-5.000000 3.700000 194.632633 +-5.000000 3.800000 191.945161 +-5.000000 3.900000 189.277689 +-5.000000 4.000000 186.630217 +-5.000000 4.100000 184.002745 +-5.000000 4.200000 181.395273 +-5.000000 4.300000 178.807801 +-5.000000 4.400000 176.240329 +-5.000000 4.500000 173.692857 +-5.000000 4.600000 171.165385 +-5.000000 4.700000 168.657913 +-5.000000 4.800000 166.170441 +-5.000000 4.900000 163.702969 +-5.000000 5.000000 161.255497 +-5.000000 5.100000 158.828025 +-5.000000 5.200000 156.420553 +-5.000000 5.300000 154.033081 +-5.000000 5.400000 151.665609 +-5.000000 5.500000 149.318137 +-5.000000 5.600000 146.990665 +-5.000000 5.700000 144.683193 +-5.000000 5.800000 142.395721 +-5.000000 5.900000 140.128249 +-5.000000 6.000000 137.880777 +-5.000000 6.100000 135.653305 +-5.000000 6.200000 133.445833 +-5.000000 6.300000 131.258361 +-5.000000 6.400000 129.090890 +-5.000000 6.500000 126.943418 +-5.000000 6.600000 124.815946 +-5.000000 6.700000 122.708474 +-5.000000 6.800000 120.621002 +-5.000000 6.900000 118.553530 +-5.000000 7.000000 116.506058 +-5.000000 7.100000 114.478586 +-5.000000 7.200000 112.471114 +-5.000000 7.300000 110.483642 +-5.000000 7.400000 108.516170 +-5.000000 7.500000 106.568698 +-5.000000 7.600000 104.641226 +-5.000000 7.700000 102.733754 +-5.000000 7.800000 100.846282 +-5.000000 7.900000 98.978810 +-5.000000 8.000000 97.131338 +-5.000000 8.100000 95.303866 +-5.000000 8.200000 93.496394 +-5.000000 8.300000 91.708922 +-5.000000 8.400000 89.941450 +-5.000000 8.500000 88.193978 +-5.000000 8.600000 86.466506 +-5.000000 8.700000 84.759034 +-5.000000 8.800000 83.071562 +-5.000000 8.900000 81.404090 +-5.000000 9.000000 79.756618 +-5.000000 9.100000 78.129146 +-5.000000 9.200000 76.521674 +-5.000000 9.300000 74.934202 +-5.000000 9.400000 73.366730 +-5.000000 9.500000 71.819258 +-5.000000 9.600000 70.291786 +-5.000000 9.700000 68.784314 +-5.000000 9.800000 67.296842 +-5.000000 9.900000 65.829370 +-5.000000 10.000000 64.381898 +-5.000000 10.100000 62.954426 +-5.000000 10.200000 61.546954 +-5.000000 10.300000 60.159482 +-5.000000 10.400000 58.792010 +-5.000000 10.500000 57.444538 +-5.000000 10.600000 56.117066 +-5.000000 10.700000 54.809595 +-5.000000 10.800000 53.522123 +-5.000000 10.900000 52.254651 +-5.000000 11.000000 51.007179 +-5.000000 11.100000 49.779707 +-5.000000 11.200000 48.572235 +-5.000000 11.300000 47.384763 +-5.000000 11.400000 46.217291 +-5.000000 11.500000 45.069819 +-5.000000 11.600000 43.942347 +-5.000000 11.700000 42.834875 +-5.000000 11.800000 41.747403 +-5.000000 11.900000 40.679931 +-5.000000 12.000000 39.632459 +-5.000000 12.100000 38.604987 +-5.000000 12.200000 37.597515 +-5.000000 12.300000 36.610043 +-5.000000 12.400000 35.642571 +-5.000000 12.500000 34.695099 +-5.000000 12.600000 33.767627 +-5.000000 12.700000 32.860155 +-5.000000 12.800000 31.972683 +-5.000000 12.900000 31.105211 +-5.000000 13.000000 30.257739 +-5.000000 13.100000 29.430267 +-5.000000 13.200000 28.622795 +-5.000000 13.300000 27.835323 +-5.000000 13.400000 27.067851 +-5.000000 13.500000 26.320379 +-5.000000 13.600000 25.592907 +-5.000000 13.700000 24.885435 +-5.000000 13.800000 24.197963 +-5.000000 13.900000 23.530491 +-5.000000 14.000000 22.883019 +-5.000000 14.100000 22.255547 +-5.000000 14.200000 21.648075 +-5.000000 14.300000 21.060603 +-5.000000 14.400000 20.493131 +-5.000000 14.500000 19.945659 +-5.000000 14.600000 19.418187 +-5.000000 14.700000 18.910715 +-5.000000 14.800000 18.423243 +-5.000000 14.900000 17.955771 +-5.000000 15.000000 17.508300 + +-4.900000 -5.000000 491.414591 +-4.900000 -4.900000 487.044528 +-4.900000 -4.800000 482.694466 +-4.900000 -4.700000 478.364403 +-4.900000 -4.600000 474.054341 +-4.900000 -4.500000 469.764278 +-4.900000 -4.400000 465.494216 +-4.900000 -4.300000 461.244153 +-4.900000 -4.200000 457.014091 +-4.900000 -4.100000 452.804028 +-4.900000 -4.000000 448.613966 +-4.900000 -3.900000 444.443904 +-4.900000 -3.800000 440.293841 +-4.900000 -3.700000 436.163779 +-4.900000 -3.600000 432.053716 +-4.900000 -3.500000 427.963654 +-4.900000 -3.400000 423.893591 +-4.900000 -3.300000 419.843529 +-4.900000 -3.200000 415.813466 +-4.900000 -3.100000 411.803404 +-4.900000 -3.000000 407.813341 +-4.900000 -2.900000 403.843279 +-4.900000 -2.800000 399.893217 +-4.900000 -2.700000 395.963154 +-4.900000 -2.600000 392.053092 +-4.900000 -2.500000 388.163029 +-4.900000 -2.400000 384.292967 +-4.900000 -2.300000 380.442904 +-4.900000 -2.200000 376.612842 +-4.900000 -2.100000 372.802779 +-4.900000 -2.000000 369.012717 +-4.900000 -1.900000 365.242654 +-4.900000 -1.800000 361.492592 +-4.900000 -1.700000 357.762530 +-4.900000 -1.600000 354.052467 +-4.900000 -1.500000 350.362405 +-4.900000 -1.400000 346.692342 +-4.900000 -1.300000 343.042280 +-4.900000 -1.200000 339.412217 +-4.900000 -1.100000 335.802155 +-4.900000 -1.000000 332.212092 +-4.900000 -0.900000 328.642030 +-4.900000 -0.800000 325.091967 +-4.900000 -0.700000 321.561905 +-4.900000 -0.600000 318.051843 +-4.900000 -0.500000 314.561780 +-4.900000 -0.400000 311.091718 +-4.900000 -0.300000 307.641655 +-4.900000 -0.200000 304.211593 +-4.900000 -0.100000 300.801530 +-4.900000 -0.000000 297.411468 +-4.900000 0.100000 294.041405 +-4.900000 0.200000 290.691343 +-4.900000 0.300000 287.361280 +-4.900000 0.400000 284.051218 +-4.900000 0.500000 280.761156 +-4.900000 0.600000 277.491093 +-4.900000 0.700000 274.241031 +-4.900000 0.800000 271.010968 +-4.900000 0.900000 267.800906 +-4.900000 1.000000 264.610843 +-4.900000 1.100000 261.440781 +-4.900000 1.200000 258.290718 +-4.900000 1.300000 255.160656 +-4.900000 1.400000 252.050593 +-4.900000 1.500000 248.960531 +-4.900000 1.600000 245.890469 +-4.900000 1.700000 242.840406 +-4.900000 1.800000 239.810344 +-4.900000 1.900000 236.800281 +-4.900000 2.000000 233.810219 +-4.900000 2.100000 230.840156 +-4.900000 2.200000 227.890094 +-4.900000 2.300000 224.960031 +-4.900000 2.400000 222.049969 +-4.900000 2.500000 219.159906 +-4.900000 2.600000 216.289844 +-4.900000 2.700000 213.439782 +-4.900000 2.800000 210.609719 +-4.900000 2.900000 207.799657 +-4.900000 3.000000 205.009594 +-4.900000 3.100000 202.239532 +-4.900000 3.200000 199.489469 +-4.900000 3.300000 196.759407 +-4.900000 3.400000 194.049344 +-4.900000 3.500000 191.359282 +-4.900000 3.600000 188.689219 +-4.900000 3.700000 186.039157 +-4.900000 3.800000 183.409095 +-4.900000 3.900000 180.799032 +-4.900000 4.000000 178.208970 +-4.900000 4.100000 175.638907 +-4.900000 4.200000 173.088845 +-4.900000 4.300000 170.558782 +-4.900000 4.400000 168.048720 +-4.900000 4.500000 165.558657 +-4.900000 4.600000 163.088595 +-4.900000 4.700000 160.638532 +-4.900000 4.800000 158.208470 +-4.900000 4.900000 155.798408 +-4.900000 5.000000 153.408345 +-4.900000 5.100000 151.038283 +-4.900000 5.200000 148.688220 +-4.900000 5.300000 146.358158 +-4.900000 5.400000 144.048095 +-4.900000 5.500000 141.758033 +-4.900000 5.600000 139.487970 +-4.900000 5.700000 137.237908 +-4.900000 5.800000 135.007845 +-4.900000 5.900000 132.797783 +-4.900000 6.000000 130.607720 +-4.900000 6.100000 128.437658 +-4.900000 6.200000 126.287596 +-4.900000 6.300000 124.157533 +-4.900000 6.400000 122.047471 +-4.900000 6.500000 119.957408 +-4.900000 6.600000 117.887346 +-4.900000 6.700000 115.837283 +-4.900000 6.800000 113.807221 +-4.900000 6.900000 111.797158 +-4.900000 7.000000 109.807096 +-4.900000 7.100000 107.837033 +-4.900000 7.200000 105.886971 +-4.900000 7.300000 103.956909 +-4.900000 7.400000 102.046846 +-4.900000 7.500000 100.156784 +-4.900000 7.600000 98.286721 +-4.900000 7.700000 96.436659 +-4.900000 7.800000 94.606596 +-4.900000 7.900000 92.796534 +-4.900000 8.000000 91.006471 +-4.900000 8.100000 89.236409 +-4.900000 8.200000 87.486346 +-4.900000 8.300000 85.756284 +-4.900000 8.400000 84.046222 +-4.900000 8.500000 82.356159 +-4.900000 8.600000 80.686097 +-4.900000 8.700000 79.036034 +-4.900000 8.800000 77.405972 +-4.900000 8.900000 75.795909 +-4.900000 9.000000 74.205847 +-4.900000 9.100000 72.635784 +-4.900000 9.200000 71.085722 +-4.900000 9.300000 69.555659 +-4.900000 9.400000 68.045597 +-4.900000 9.500000 66.555535 +-4.900000 9.600000 65.085472 +-4.900000 9.700000 63.635410 +-4.900000 9.800000 62.205347 +-4.900000 9.900000 60.795285 +-4.900000 10.000000 59.405222 +-4.900000 10.100000 58.035160 +-4.900000 10.200000 56.685097 +-4.900000 10.300000 55.355035 +-4.900000 10.400000 54.044972 +-4.900000 10.500000 52.754910 +-4.900000 10.600000 51.484848 +-4.900000 10.700000 50.234785 +-4.900000 10.800000 49.004723 +-4.900000 10.900000 47.794660 +-4.900000 11.000000 46.604598 +-4.900000 11.100000 45.434535 +-4.900000 11.200000 44.284473 +-4.900000 11.300000 43.154410 +-4.900000 11.400000 42.044348 +-4.900000 11.500000 40.954285 +-4.900000 11.600000 39.884223 +-4.900000 11.700000 38.834161 +-4.900000 11.800000 37.804098 +-4.900000 11.900000 36.794036 +-4.900000 12.000000 35.803973 +-4.900000 12.100000 34.833911 +-4.900000 12.200000 33.883848 +-4.900000 12.300000 32.953786 +-4.900000 12.400000 32.043723 +-4.900000 12.500000 31.153661 +-4.900000 12.600000 30.283598 +-4.900000 12.700000 29.433536 +-4.900000 12.800000 28.603474 +-4.900000 12.900000 27.793411 +-4.900000 13.000000 27.003349 +-4.900000 13.100000 26.233286 +-4.900000 13.200000 25.483224 +-4.900000 13.300000 24.753161 +-4.900000 13.400000 24.043099 +-4.900000 13.500000 23.353036 +-4.900000 13.600000 22.682974 +-4.900000 13.700000 22.032911 +-4.900000 13.800000 21.402849 +-4.900000 13.900000 20.792787 +-4.900000 14.000000 20.202724 +-4.900000 14.100000 19.632662 +-4.900000 14.200000 19.082599 +-4.900000 14.300000 18.552537 +-4.900000 14.400000 18.042474 +-4.900000 14.500000 17.552412 +-4.900000 14.600000 17.082349 +-4.900000 14.700000 16.632287 +-4.900000 14.800000 16.202224 +-4.900000 14.900000 15.792162 +-4.900000 15.000000 15.402100 + +-4.800000 -5.000000 478.085075 +-4.800000 -4.900000 473.771906 +-4.800000 -4.800000 469.478736 +-4.800000 -4.700000 465.205566 +-4.800000 -4.600000 460.952397 +-4.800000 -4.500000 456.719227 +-4.800000 -4.400000 452.506057 +-4.800000 -4.300000 448.312888 +-4.800000 -4.200000 444.139718 +-4.800000 -4.100000 439.986548 +-4.800000 -4.000000 435.853379 +-4.800000 -3.900000 431.740209 +-4.800000 -3.800000 427.647039 +-4.800000 -3.700000 423.573870 +-4.800000 -3.600000 419.520700 +-4.800000 -3.500000 415.487530 +-4.800000 -3.400000 411.474361 +-4.800000 -3.300000 407.481191 +-4.800000 -3.200000 403.508021 +-4.800000 -3.100000 399.554852 +-4.800000 -3.000000 395.621682 +-4.800000 -2.900000 391.708512 +-4.800000 -2.800000 387.815343 +-4.800000 -2.700000 383.942173 +-4.800000 -2.600000 380.089003 +-4.800000 -2.500000 376.255834 +-4.800000 -2.400000 372.442664 +-4.800000 -2.300000 368.649494 +-4.800000 -2.200000 364.876325 +-4.800000 -2.100000 361.123155 +-4.800000 -2.000000 357.389985 +-4.800000 -1.900000 353.676816 +-4.800000 -1.800000 349.983646 +-4.800000 -1.700000 346.310476 +-4.800000 -1.600000 342.657307 +-4.800000 -1.500000 339.024137 +-4.800000 -1.400000 335.410967 +-4.800000 -1.300000 331.817798 +-4.800000 -1.200000 328.244628 +-4.800000 -1.100000 324.691458 +-4.800000 -1.000000 321.158289 +-4.800000 -0.900000 317.645119 +-4.800000 -0.800000 314.151949 +-4.800000 -0.700000 310.678779 +-4.800000 -0.600000 307.225610 +-4.800000 -0.500000 303.792440 +-4.800000 -0.400000 300.379270 +-4.800000 -0.300000 296.986101 +-4.800000 -0.200000 293.612931 +-4.800000 -0.100000 290.259761 +-4.800000 -0.000000 286.926592 +-4.800000 0.100000 283.613422 +-4.800000 0.200000 280.320252 +-4.800000 0.300000 277.047083 +-4.800000 0.400000 273.793913 +-4.800000 0.500000 270.560743 +-4.800000 0.600000 267.347574 +-4.800000 0.700000 264.154404 +-4.800000 0.800000 260.981234 +-4.800000 0.900000 257.828065 +-4.800000 1.000000 254.694895 +-4.800000 1.100000 251.581725 +-4.800000 1.200000 248.488556 +-4.800000 1.300000 245.415386 +-4.800000 1.400000 242.362216 +-4.800000 1.500000 239.329047 +-4.800000 1.600000 236.315877 +-4.800000 1.700000 233.322707 +-4.800000 1.800000 230.349538 +-4.800000 1.900000 227.396368 +-4.800000 2.000000 224.463198 +-4.800000 2.100000 221.550029 +-4.800000 2.200000 218.656859 +-4.800000 2.300000 215.783689 +-4.800000 2.400000 212.930520 +-4.800000 2.500000 210.097350 +-4.800000 2.600000 207.284180 +-4.800000 2.700000 204.491011 +-4.800000 2.800000 201.717841 +-4.800000 2.900000 198.964671 +-4.800000 3.000000 196.231502 +-4.800000 3.100000 193.518332 +-4.800000 3.200000 190.825162 +-4.800000 3.300000 188.151993 +-4.800000 3.400000 185.498823 +-4.800000 3.500000 182.865653 +-4.800000 3.600000 180.252484 +-4.800000 3.700000 177.659314 +-4.800000 3.800000 175.086144 +-4.800000 3.900000 172.532975 +-4.800000 4.000000 169.999805 +-4.800000 4.100000 167.486635 +-4.800000 4.200000 164.993466 +-4.800000 4.300000 162.520296 +-4.800000 4.400000 160.067126 +-4.800000 4.500000 157.633957 +-4.800000 4.600000 155.220787 +-4.800000 4.700000 152.827617 +-4.800000 4.800000 150.454448 +-4.800000 4.900000 148.101278 +-4.800000 5.000000 145.768108 +-4.800000 5.100000 143.454939 +-4.800000 5.200000 141.161769 +-4.800000 5.300000 138.888599 +-4.800000 5.400000 136.635430 +-4.800000 5.500000 134.402260 +-4.800000 5.600000 132.189090 +-4.800000 5.700000 129.995920 +-4.800000 5.800000 127.822751 +-4.800000 5.900000 125.669581 +-4.800000 6.000000 123.536411 +-4.800000 6.100000 121.423242 +-4.800000 6.200000 119.330072 +-4.800000 6.300000 117.256902 +-4.800000 6.400000 115.203733 +-4.800000 6.500000 113.170563 +-4.800000 6.600000 111.157393 +-4.800000 6.700000 109.164224 +-4.800000 6.800000 107.191054 +-4.800000 6.900000 105.237884 +-4.800000 7.000000 103.304715 +-4.800000 7.100000 101.391545 +-4.800000 7.200000 99.498375 +-4.800000 7.300000 97.625206 +-4.800000 7.400000 95.772036 +-4.800000 7.500000 93.938866 +-4.800000 7.600000 92.125697 +-4.800000 7.700000 90.332527 +-4.800000 7.800000 88.559357 +-4.800000 7.900000 86.806188 +-4.800000 8.000000 85.073018 +-4.800000 8.100000 83.359848 +-4.800000 8.200000 81.666679 +-4.800000 8.300000 79.993509 +-4.800000 8.400000 78.340339 +-4.800000 8.500000 76.707170 +-4.800000 8.600000 75.094000 +-4.800000 8.700000 73.500830 +-4.800000 8.800000 71.927661 +-4.800000 8.900000 70.374491 +-4.800000 9.000000 68.841321 +-4.800000 9.100000 67.328152 +-4.800000 9.200000 65.834982 +-4.800000 9.300000 64.361812 +-4.800000 9.400000 62.908643 +-4.800000 9.500000 61.475473 +-4.800000 9.600000 60.062303 +-4.800000 9.700000 58.669134 +-4.800000 9.800000 57.295964 +-4.800000 9.900000 55.942794 +-4.800000 10.000000 54.609625 +-4.800000 10.100000 53.296455 +-4.800000 10.200000 52.003285 +-4.800000 10.300000 50.730116 +-4.800000 10.400000 49.476946 +-4.800000 10.500000 48.243776 +-4.800000 10.600000 47.030607 +-4.800000 10.700000 45.837437 +-4.800000 10.800000 44.664267 +-4.800000 10.900000 43.511098 +-4.800000 11.000000 42.377928 +-4.800000 11.100000 41.264758 +-4.800000 11.200000 40.171589 +-4.800000 11.300000 39.098419 +-4.800000 11.400000 38.045249 +-4.800000 11.500000 37.012080 +-4.800000 11.600000 35.998910 +-4.800000 11.700000 35.005740 +-4.800000 11.800000 34.032571 +-4.800000 11.900000 33.079401 +-4.800000 12.000000 32.146231 +-4.800000 12.100000 31.233061 +-4.800000 12.200000 30.339892 +-4.800000 12.300000 29.466722 +-4.800000 12.400000 28.613552 +-4.800000 12.500000 27.780383 +-4.800000 12.600000 26.967213 +-4.800000 12.700000 26.174043 +-4.800000 12.800000 25.400874 +-4.800000 12.900000 24.647704 +-4.800000 13.000000 23.914534 +-4.800000 13.100000 23.201365 +-4.800000 13.200000 22.508195 +-4.800000 13.300000 21.835025 +-4.800000 13.400000 21.181856 +-4.800000 13.500000 20.548686 +-4.800000 13.600000 19.935516 +-4.800000 13.700000 19.342347 +-4.800000 13.800000 18.769177 +-4.800000 13.900000 18.216007 +-4.800000 14.000000 17.682838 +-4.800000 14.100000 17.169668 +-4.800000 14.200000 16.676498 +-4.800000 14.300000 16.203329 +-4.800000 14.400000 15.750159 +-4.800000 14.500000 15.316989 +-4.800000 14.600000 14.903820 +-4.800000 14.700000 14.510650 +-4.800000 14.800000 14.137480 +-4.800000 14.900000 13.784311 +-4.800000 15.000000 13.451141 + +-4.700000 -5.000000 465.019239 +-4.700000 -4.900000 460.762445 +-4.700000 -4.800000 456.525652 +-4.700000 -4.700000 452.308858 +-4.700000 -4.600000 448.112064 +-4.700000 -4.500000 443.935271 +-4.700000 -4.400000 439.778477 +-4.700000 -4.300000 435.641684 +-4.700000 -4.200000 431.524890 +-4.700000 -4.100000 427.428096 +-4.700000 -4.000000 423.351303 +-4.700000 -3.900000 419.294509 +-4.700000 -3.800000 415.257715 +-4.700000 -3.700000 411.240922 +-4.700000 -3.600000 407.244128 +-4.700000 -3.500000 403.267335 +-4.700000 -3.400000 399.310541 +-4.700000 -3.300000 395.373747 +-4.700000 -3.200000 391.456954 +-4.700000 -3.100000 387.560160 +-4.700000 -3.000000 383.683366 +-4.700000 -2.900000 379.826573 +-4.700000 -2.800000 375.989779 +-4.700000 -2.700000 372.172986 +-4.700000 -2.600000 368.376192 +-4.700000 -2.500000 364.599398 +-4.700000 -2.400000 360.842605 +-4.700000 -2.300000 357.105811 +-4.700000 -2.200000 353.389017 +-4.700000 -2.100000 349.692224 +-4.700000 -2.000000 346.015430 +-4.700000 -1.900000 342.358637 +-4.700000 -1.800000 338.721843 +-4.700000 -1.700000 335.105049 +-4.700000 -1.600000 331.508256 +-4.700000 -1.500000 327.931462 +-4.700000 -1.400000 324.374668 +-4.700000 -1.300000 320.837875 +-4.700000 -1.200000 317.321081 +-4.700000 -1.100000 313.824287 +-4.700000 -1.000000 310.347494 +-4.700000 -0.900000 306.890700 +-4.700000 -0.800000 303.453907 +-4.700000 -0.700000 300.037113 +-4.700000 -0.600000 296.640319 +-4.700000 -0.500000 293.263526 +-4.700000 -0.400000 289.906732 +-4.700000 -0.300000 286.569938 +-4.700000 -0.200000 283.253145 +-4.700000 -0.100000 279.956351 +-4.700000 -0.000000 276.679558 +-4.700000 0.100000 273.422764 +-4.700000 0.200000 270.185970 +-4.700000 0.300000 266.969177 +-4.700000 0.400000 263.772383 +-4.700000 0.500000 260.595589 +-4.700000 0.600000 257.438796 +-4.700000 0.700000 254.302002 +-4.700000 0.800000 251.185209 +-4.700000 0.900000 248.088415 +-4.700000 1.000000 245.011621 +-4.700000 1.100000 241.954828 +-4.700000 1.200000 238.918034 +-4.700000 1.300000 235.901240 +-4.700000 1.400000 232.904447 +-4.700000 1.500000 229.927653 +-4.700000 1.600000 226.970860 +-4.700000 1.700000 224.034066 +-4.700000 1.800000 221.117272 +-4.700000 1.900000 218.220479 +-4.700000 2.000000 215.343685 +-4.700000 2.100000 212.486891 +-4.700000 2.200000 209.650098 +-4.700000 2.300000 206.833304 +-4.700000 2.400000 204.036511 +-4.700000 2.500000 201.259717 +-4.700000 2.600000 198.502923 +-4.700000 2.700000 195.766130 +-4.700000 2.800000 193.049336 +-4.700000 2.900000 190.352542 +-4.700000 3.000000 187.675749 +-4.700000 3.100000 185.018955 +-4.700000 3.200000 182.382162 +-4.700000 3.300000 179.765368 +-4.700000 3.400000 177.168574 +-4.700000 3.500000 174.591781 +-4.700000 3.600000 172.034987 +-4.700000 3.700000 169.498193 +-4.700000 3.800000 166.981400 +-4.700000 3.900000 164.484606 +-4.700000 4.000000 162.007813 +-4.700000 4.100000 159.551019 +-4.700000 4.200000 157.114225 +-4.700000 4.300000 154.697432 +-4.700000 4.400000 152.300638 +-4.700000 4.500000 149.923844 +-4.700000 4.600000 147.567051 +-4.700000 4.700000 145.230257 +-4.700000 4.800000 142.913464 +-4.700000 4.900000 140.616670 +-4.700000 5.000000 138.339876 +-4.700000 5.100000 136.083083 +-4.700000 5.200000 133.846289 +-4.700000 5.300000 131.629495 +-4.700000 5.400000 129.432702 +-4.700000 5.500000 127.255908 +-4.700000 5.600000 125.099115 +-4.700000 5.700000 122.962321 +-4.700000 5.800000 120.845527 +-4.700000 5.900000 118.748734 +-4.700000 6.000000 116.671940 +-4.700000 6.100000 114.615146 +-4.700000 6.200000 112.578353 +-4.700000 6.300000 110.561559 +-4.700000 6.400000 108.564766 +-4.700000 6.500000 106.587972 +-4.700000 6.600000 104.631178 +-4.700000 6.700000 102.694385 +-4.700000 6.800000 100.777591 +-4.700000 6.900000 98.880797 +-4.700000 7.000000 97.004004 +-4.700000 7.100000 95.147210 +-4.700000 7.200000 93.310416 +-4.700000 7.300000 91.493623 +-4.700000 7.400000 89.696829 +-4.700000 7.500000 87.920036 +-4.700000 7.600000 86.163242 +-4.700000 7.700000 84.426448 +-4.700000 7.800000 82.709655 +-4.700000 7.900000 81.012861 +-4.700000 8.000000 79.336067 +-4.700000 8.100000 77.679274 +-4.700000 8.200000 76.042480 +-4.700000 8.300000 74.425687 +-4.700000 8.400000 72.828893 +-4.700000 8.500000 71.252099 +-4.700000 8.600000 69.695306 +-4.700000 8.700000 68.158512 +-4.700000 8.800000 66.641718 +-4.700000 8.900000 65.144925 +-4.700000 9.000000 63.668131 +-4.700000 9.100000 62.211338 +-4.700000 9.200000 60.774544 +-4.700000 9.300000 59.357750 +-4.700000 9.400000 57.960957 +-4.700000 9.500000 56.584163 +-4.700000 9.600000 55.227369 +-4.700000 9.700000 53.890576 +-4.700000 9.800000 52.573782 +-4.700000 9.900000 51.276989 +-4.700000 10.000000 50.000195 +-4.700000 10.100000 48.743401 +-4.700000 10.200000 47.506608 +-4.700000 10.300000 46.289814 +-4.700000 10.400000 45.093020 +-4.700000 10.500000 43.916227 +-4.700000 10.600000 42.759433 +-4.700000 10.700000 41.622640 +-4.700000 10.800000 40.505846 +-4.700000 10.900000 39.409052 +-4.700000 11.000000 38.332259 +-4.700000 11.100000 37.275465 +-4.700000 11.200000 36.238671 +-4.700000 11.300000 35.221878 +-4.700000 11.400000 34.225084 +-4.700000 11.500000 33.248291 +-4.700000 11.600000 32.291497 +-4.700000 11.700000 31.354703 +-4.700000 11.800000 30.437910 +-4.700000 11.900000 29.541116 +-4.700000 12.000000 28.664322 +-4.700000 12.100000 27.807529 +-4.700000 12.200000 26.970735 +-4.700000 12.300000 26.153942 +-4.700000 12.400000 25.357148 +-4.700000 12.500000 24.580354 +-4.700000 12.600000 23.823561 +-4.700000 12.700000 23.086767 +-4.700000 12.800000 22.369973 +-4.700000 12.900000 21.673180 +-4.700000 13.000000 20.996386 +-4.700000 13.100000 20.339593 +-4.700000 13.200000 19.702799 +-4.700000 13.300000 19.086005 +-4.700000 13.400000 18.489212 +-4.700000 13.500000 17.912418 +-4.700000 13.600000 17.355624 +-4.700000 13.700000 16.818831 +-4.700000 13.800000 16.302037 +-4.700000 13.900000 15.805244 +-4.700000 14.000000 15.328450 +-4.700000 14.100000 14.871656 +-4.700000 14.200000 14.434863 +-4.700000 14.300000 14.018069 +-4.700000 14.400000 13.621275 +-4.700000 14.500000 13.244482 +-4.700000 14.600000 12.887688 +-4.700000 14.700000 12.550895 +-4.700000 14.800000 12.234101 +-4.700000 14.900000 11.937307 +-4.700000 15.000000 11.660514 + +-4.600000 -5.000000 452.222295 +-4.600000 -4.900000 448.021360 +-4.600000 -4.800000 443.840426 +-4.600000 -4.700000 439.679492 +-4.600000 -4.600000 435.538558 +-4.600000 -4.500000 431.417623 +-4.600000 -4.400000 427.316689 +-4.600000 -4.300000 423.235755 +-4.600000 -4.200000 419.174820 +-4.600000 -4.100000 415.133886 +-4.600000 -4.000000 411.112952 +-4.600000 -3.900000 407.112017 +-4.600000 -3.800000 403.131083 +-4.600000 -3.700000 399.170149 +-4.600000 -3.600000 395.229214 +-4.600000 -3.500000 391.308280 +-4.600000 -3.400000 387.407346 +-4.600000 -3.300000 383.526411 +-4.600000 -3.200000 379.665477 +-4.600000 -3.100000 375.824543 +-4.600000 -3.000000 372.003608 +-4.600000 -2.900000 368.202674 +-4.600000 -2.800000 364.421740 +-4.600000 -2.700000 360.660805 +-4.600000 -2.600000 356.919871 +-4.600000 -2.500000 353.198937 +-4.600000 -2.400000 349.498003 +-4.600000 -2.300000 345.817068 +-4.600000 -2.200000 342.156134 +-4.600000 -2.100000 338.515200 +-4.600000 -2.000000 334.894265 +-4.600000 -1.900000 331.293331 +-4.600000 -1.800000 327.712397 +-4.600000 -1.700000 324.151462 +-4.600000 -1.600000 320.610528 +-4.600000 -1.500000 317.089594 +-4.600000 -1.400000 313.588659 +-4.600000 -1.300000 310.107725 +-4.600000 -1.200000 306.646791 +-4.600000 -1.100000 303.205856 +-4.600000 -1.000000 299.784922 +-4.600000 -0.900000 296.383988 +-4.600000 -0.800000 293.003053 +-4.600000 -0.700000 289.642119 +-4.600000 -0.600000 286.301185 +-4.600000 -0.500000 282.980250 +-4.600000 -0.400000 279.679316 +-4.600000 -0.300000 276.398382 +-4.600000 -0.200000 273.137447 +-4.600000 -0.100000 269.896513 +-4.600000 -0.000000 266.675579 +-4.600000 0.100000 263.474645 +-4.600000 0.200000 260.293710 +-4.600000 0.300000 257.132776 +-4.600000 0.400000 253.991842 +-4.600000 0.500000 250.870907 +-4.600000 0.600000 247.769973 +-4.600000 0.700000 244.689039 +-4.600000 0.800000 241.628104 +-4.600000 0.900000 238.587170 +-4.600000 1.000000 235.566236 +-4.600000 1.100000 232.565301 +-4.600000 1.200000 229.584367 +-4.600000 1.300000 226.623433 +-4.600000 1.400000 223.682498 +-4.600000 1.500000 220.761564 +-4.600000 1.600000 217.860630 +-4.600000 1.700000 214.979695 +-4.600000 1.800000 212.118761 +-4.600000 1.900000 209.277827 +-4.600000 2.000000 206.456892 +-4.600000 2.100000 203.655958 +-4.600000 2.200000 200.875024 +-4.600000 2.300000 198.114090 +-4.600000 2.400000 195.373155 +-4.600000 2.500000 192.652221 +-4.600000 2.600000 189.951287 +-4.600000 2.700000 187.270352 +-4.600000 2.800000 184.609418 +-4.600000 2.900000 181.968484 +-4.600000 3.000000 179.347549 +-4.600000 3.100000 176.746615 +-4.600000 3.200000 174.165681 +-4.600000 3.300000 171.604746 +-4.600000 3.400000 169.063812 +-4.600000 3.500000 166.542878 +-4.600000 3.600000 164.041943 +-4.600000 3.700000 161.561009 +-4.600000 3.800000 159.100075 +-4.600000 3.900000 156.659140 +-4.600000 4.000000 154.238206 +-4.600000 4.100000 151.837272 +-4.600000 4.200000 149.456337 +-4.600000 4.300000 147.095403 +-4.600000 4.400000 144.754469 +-4.600000 4.500000 142.433534 +-4.600000 4.600000 140.132600 +-4.600000 4.700000 137.851666 +-4.600000 4.800000 135.590732 +-4.600000 4.900000 133.349797 +-4.600000 5.000000 131.128863 +-4.600000 5.100000 128.927929 +-4.600000 5.200000 126.746994 +-4.600000 5.300000 124.586060 +-4.600000 5.400000 122.445126 +-4.600000 5.500000 120.324191 +-4.600000 5.600000 118.223257 +-4.600000 5.700000 116.142323 +-4.600000 5.800000 114.081388 +-4.600000 5.900000 112.040454 +-4.600000 6.000000 110.019520 +-4.600000 6.100000 108.018585 +-4.600000 6.200000 106.037651 +-4.600000 6.300000 104.076717 +-4.600000 6.400000 102.135782 +-4.600000 6.500000 100.214848 +-4.600000 6.600000 98.313914 +-4.600000 6.700000 96.432979 +-4.600000 6.800000 94.572045 +-4.600000 6.900000 92.731111 +-4.600000 7.000000 90.910177 +-4.600000 7.100000 89.109242 +-4.600000 7.200000 87.328308 +-4.600000 7.300000 85.567374 +-4.600000 7.400000 83.826439 +-4.600000 7.500000 82.105505 +-4.600000 7.600000 80.404571 +-4.600000 7.700000 78.723636 +-4.600000 7.800000 77.062702 +-4.600000 7.900000 75.421768 +-4.600000 8.000000 73.800833 +-4.600000 8.100000 72.199899 +-4.600000 8.200000 70.618965 +-4.600000 8.300000 69.058030 +-4.600000 8.400000 67.517096 +-4.600000 8.500000 65.996162 +-4.600000 8.600000 64.495227 +-4.600000 8.700000 63.014293 +-4.600000 8.800000 61.553359 +-4.600000 8.900000 60.112424 +-4.600000 9.000000 58.691490 +-4.600000 9.100000 57.290556 +-4.600000 9.200000 55.909621 +-4.600000 9.300000 54.548687 +-4.600000 9.400000 53.207753 +-4.600000 9.500000 51.886819 +-4.600000 9.600000 50.585884 +-4.600000 9.700000 49.304950 +-4.600000 9.800000 48.044016 +-4.600000 9.900000 46.803081 +-4.600000 10.000000 45.582147 +-4.600000 10.100000 44.381213 +-4.600000 10.200000 43.200278 +-4.600000 10.300000 42.039344 +-4.600000 10.400000 40.898410 +-4.600000 10.500000 39.777475 +-4.600000 10.600000 38.676541 +-4.600000 10.700000 37.595607 +-4.600000 10.800000 36.534672 +-4.600000 10.900000 35.493738 +-4.600000 11.000000 34.472804 +-4.600000 11.100000 33.471869 +-4.600000 11.200000 32.490935 +-4.600000 11.300000 31.530001 +-4.600000 11.400000 30.589066 +-4.600000 11.500000 29.668132 +-4.600000 11.600000 28.767198 +-4.600000 11.700000 27.886264 +-4.600000 11.800000 27.025329 +-4.600000 11.900000 26.184395 +-4.600000 12.000000 25.363461 +-4.600000 12.100000 24.562526 +-4.600000 12.200000 23.781592 +-4.600000 12.300000 23.020658 +-4.600000 12.400000 22.279723 +-4.600000 12.500000 21.558789 +-4.600000 12.600000 20.857855 +-4.600000 12.700000 20.176920 +-4.600000 12.800000 19.515986 +-4.600000 12.900000 18.875052 +-4.600000 13.000000 18.254117 +-4.600000 13.100000 17.653183 +-4.600000 13.200000 17.072249 +-4.600000 13.300000 16.511314 +-4.600000 13.400000 15.970380 +-4.600000 13.500000 15.449446 +-4.600000 13.600000 14.948511 +-4.600000 13.700000 14.467577 +-4.600000 13.800000 14.006643 +-4.600000 13.900000 13.565708 +-4.600000 14.000000 13.144774 +-4.600000 14.100000 12.743840 +-4.600000 14.200000 12.362906 +-4.600000 14.300000 12.001971 +-4.600000 14.400000 11.661037 +-4.600000 14.500000 11.340103 +-4.600000 14.600000 11.039168 +-4.600000 14.700000 10.758234 +-4.600000 14.800000 10.497300 +-4.600000 14.900000 10.256365 +-4.600000 15.000000 10.035431 + +-4.500000 -5.000000 439.699485 +-4.500000 -4.900000 435.553893 +-4.500000 -4.800000 431.428301 +-4.500000 -4.700000 427.322710 +-4.500000 -4.600000 423.237118 +-4.500000 -4.500000 419.171526 +-4.500000 -4.400000 415.125934 +-4.500000 -4.300000 411.100343 +-4.500000 -4.200000 407.094751 +-4.500000 -4.100000 403.109159 +-4.500000 -4.000000 399.143567 +-4.500000 -3.900000 395.197976 +-4.500000 -3.800000 391.272384 +-4.500000 -3.700000 387.366792 +-4.500000 -3.600000 383.481200 +-4.500000 -3.500000 379.615609 +-4.500000 -3.400000 375.770017 +-4.500000 -3.300000 371.944425 +-4.500000 -3.200000 368.138833 +-4.500000 -3.100000 364.353242 +-4.500000 -3.000000 360.587650 +-4.500000 -2.900000 356.842058 +-4.500000 -2.800000 353.116466 +-4.500000 -2.700000 349.410875 +-4.500000 -2.600000 345.725283 +-4.500000 -2.500000 342.059691 +-4.500000 -2.400000 338.414099 +-4.500000 -2.300000 334.788508 +-4.500000 -2.200000 331.182916 +-4.500000 -2.100000 327.597324 +-4.500000 -2.000000 324.031732 +-4.500000 -1.900000 320.486141 +-4.500000 -1.800000 316.960549 +-4.500000 -1.700000 313.454957 +-4.500000 -1.600000 309.969365 +-4.500000 -1.500000 306.503774 +-4.500000 -1.400000 303.058182 +-4.500000 -1.300000 299.632590 +-4.500000 -1.200000 296.226998 +-4.500000 -1.100000 292.841407 +-4.500000 -1.000000 289.475815 +-4.500000 -0.900000 286.130223 +-4.500000 -0.800000 282.804631 +-4.500000 -0.700000 279.499040 +-4.500000 -0.600000 276.213448 +-4.500000 -0.500000 272.947856 +-4.500000 -0.400000 269.702264 +-4.500000 -0.300000 266.476673 +-4.500000 -0.200000 263.271081 +-4.500000 -0.100000 260.085489 +-4.500000 -0.000000 256.919897 +-4.500000 0.100000 253.774306 +-4.500000 0.200000 250.648714 +-4.500000 0.300000 247.543122 +-4.500000 0.400000 244.457530 +-4.500000 0.500000 241.391939 +-4.500000 0.600000 238.346347 +-4.500000 0.700000 235.320755 +-4.500000 0.800000 232.315163 +-4.500000 0.900000 229.329572 +-4.500000 1.000000 226.363980 +-4.500000 1.100000 223.418388 +-4.500000 1.200000 220.492796 +-4.500000 1.300000 217.587205 +-4.500000 1.400000 214.701613 +-4.500000 1.500000 211.836021 +-4.500000 1.600000 208.990429 +-4.500000 1.700000 206.164838 +-4.500000 1.800000 203.359246 +-4.500000 1.900000 200.573654 +-4.500000 2.000000 197.808062 +-4.500000 2.100000 195.062471 +-4.500000 2.200000 192.336879 +-4.500000 2.300000 189.631287 +-4.500000 2.400000 186.945695 +-4.500000 2.500000 184.280104 +-4.500000 2.600000 181.634512 +-4.500000 2.700000 179.008920 +-4.500000 2.800000 176.403328 +-4.500000 2.900000 173.817737 +-4.500000 3.000000 171.252145 +-4.500000 3.100000 168.706553 +-4.500000 3.200000 166.180961 +-4.500000 3.300000 163.675370 +-4.500000 3.400000 161.189778 +-4.500000 3.500000 158.724186 +-4.500000 3.600000 156.278594 +-4.500000 3.700000 153.853003 +-4.500000 3.800000 151.447411 +-4.500000 3.900000 149.061819 +-4.500000 4.000000 146.696227 +-4.500000 4.100000 144.350636 +-4.500000 4.200000 142.025044 +-4.500000 4.300000 139.719452 +-4.500000 4.400000 137.433860 +-4.500000 4.500000 135.168269 +-4.500000 4.600000 132.922677 +-4.500000 4.700000 130.697085 +-4.500000 4.800000 128.491493 +-4.500000 4.900000 126.305902 +-4.500000 5.000000 124.140310 +-4.500000 5.100000 121.994718 +-4.500000 5.200000 119.869126 +-4.500000 5.300000 117.763535 +-4.500000 5.400000 115.677943 +-4.500000 5.500000 113.612351 +-4.500000 5.600000 111.566759 +-4.500000 5.700000 109.541168 +-4.500000 5.800000 107.535576 +-4.500000 5.900000 105.549984 +-4.500000 6.000000 103.584392 +-4.500000 6.100000 101.638801 +-4.500000 6.200000 99.713209 +-4.500000 6.300000 97.807617 +-4.500000 6.400000 95.922025 +-4.500000 6.500000 94.056434 +-4.500000 6.600000 92.210842 +-4.500000 6.700000 90.385250 +-4.500000 6.800000 88.579658 +-4.500000 6.900000 86.794067 +-4.500000 7.000000 85.028475 +-4.500000 7.100000 83.282883 +-4.500000 7.200000 81.557291 +-4.500000 7.300000 79.851700 +-4.500000 7.400000 78.166108 +-4.500000 7.500000 76.500516 +-4.500000 7.600000 74.854924 +-4.500000 7.700000 73.229333 +-4.500000 7.800000 71.623741 +-4.500000 7.900000 70.038149 +-4.500000 8.000000 68.472557 +-4.500000 8.100000 66.926966 +-4.500000 8.200000 65.401374 +-4.500000 8.300000 63.895782 +-4.500000 8.400000 62.410190 +-4.500000 8.500000 60.944599 +-4.500000 8.600000 59.499007 +-4.500000 8.700000 58.073415 +-4.500000 8.800000 56.667823 +-4.500000 8.900000 55.282232 +-4.500000 9.000000 53.916640 +-4.500000 9.100000 52.571048 +-4.500000 9.200000 51.245456 +-4.500000 9.300000 49.939865 +-4.500000 9.400000 48.654273 +-4.500000 9.500000 47.388681 +-4.500000 9.600000 46.143089 +-4.500000 9.700000 44.917498 +-4.500000 9.800000 43.711906 +-4.500000 9.900000 42.526314 +-4.500000 10.000000 41.360722 +-4.500000 10.100000 40.215131 +-4.500000 10.200000 39.089539 +-4.500000 10.300000 37.983947 +-4.500000 10.400000 36.898355 +-4.500000 10.500000 35.832764 +-4.500000 10.600000 34.787172 +-4.500000 10.700000 33.761580 +-4.500000 10.800000 32.755988 +-4.500000 10.900000 31.770397 +-4.500000 11.000000 30.804805 +-4.500000 11.100000 29.859213 +-4.500000 11.200000 28.933621 +-4.500000 11.300000 28.028030 +-4.500000 11.400000 27.142438 +-4.500000 11.500000 26.276846 +-4.500000 11.600000 25.431254 +-4.500000 11.700000 24.605663 +-4.500000 11.800000 23.800071 +-4.500000 11.900000 23.014479 +-4.500000 12.000000 22.248887 +-4.500000 12.100000 21.503296 +-4.500000 12.200000 20.777704 +-4.500000 12.300000 20.072112 +-4.500000 12.400000 19.386520 +-4.500000 12.500000 18.720929 +-4.500000 12.600000 18.075337 +-4.500000 12.700000 17.449745 +-4.500000 12.800000 16.844153 +-4.500000 12.900000 16.258562 +-4.500000 13.000000 15.692970 +-4.500000 13.100000 15.147378 +-4.500000 13.200000 14.621786 +-4.500000 13.300000 14.116195 +-4.500000 13.400000 13.630603 +-4.500000 13.500000 13.165011 +-4.500000 13.600000 12.719419 +-4.500000 13.700000 12.293828 +-4.500000 13.800000 11.888236 +-4.500000 13.900000 11.502644 +-4.500000 14.000000 11.137052 +-4.500000 14.100000 10.791461 +-4.500000 14.200000 10.465869 +-4.500000 14.300000 10.160277 +-4.500000 14.400000 9.874685 +-4.500000 14.500000 9.609094 +-4.500000 14.600000 9.363502 +-4.500000 14.700000 9.137910 +-4.500000 14.800000 8.932318 +-4.500000 14.900000 8.746727 +-4.500000 15.000000 8.581135 + +-4.400000 -5.000000 427.455983 +-4.400000 -4.900000 423.365217 +-4.400000 -4.800000 419.294451 +-4.400000 -4.700000 415.243685 +-4.400000 -4.600000 411.212919 +-4.400000 -4.500000 407.202154 +-4.400000 -4.400000 403.211388 +-4.400000 -4.300000 399.240622 +-4.400000 -4.200000 395.289856 +-4.400000 -4.100000 391.359090 +-4.400000 -4.000000 387.448324 +-4.400000 -3.900000 383.557558 +-4.400000 -3.800000 379.686792 +-4.400000 -3.700000 375.836026 +-4.400000 -3.600000 372.005260 +-4.400000 -3.500000 368.194494 +-4.400000 -3.400000 364.403728 +-4.400000 -3.300000 360.632963 +-4.400000 -3.200000 356.882197 +-4.400000 -3.100000 353.151431 +-4.400000 -3.000000 349.440665 +-4.400000 -2.900000 345.749899 +-4.400000 -2.800000 342.079133 +-4.400000 -2.700000 338.428367 +-4.400000 -2.600000 334.797601 +-4.400000 -2.500000 331.186835 +-4.400000 -2.400000 327.596069 +-4.400000 -2.300000 324.025303 +-4.400000 -2.200000 320.474537 +-4.400000 -2.100000 316.943772 +-4.400000 -2.000000 313.433006 +-4.400000 -1.900000 309.942240 +-4.400000 -1.800000 306.471474 +-4.400000 -1.700000 303.020708 +-4.400000 -1.600000 299.589942 +-4.400000 -1.500000 296.179176 +-4.400000 -1.400000 292.788410 +-4.400000 -1.300000 289.417644 +-4.400000 -1.200000 286.066878 +-4.400000 -1.100000 282.736112 +-4.400000 -1.000000 279.425346 +-4.400000 -0.900000 276.134580 +-4.400000 -0.800000 272.863815 +-4.400000 -0.700000 269.613049 +-4.400000 -0.600000 266.382283 +-4.400000 -0.500000 263.171517 +-4.400000 -0.400000 259.980751 +-4.400000 -0.300000 256.809985 +-4.400000 -0.200000 253.659219 +-4.400000 -0.100000 250.528453 +-4.400000 -0.000000 247.417687 +-4.400000 0.100000 244.326921 +-4.400000 0.200000 241.256155 +-4.400000 0.300000 238.205389 +-4.400000 0.400000 235.174624 +-4.400000 0.500000 232.163858 +-4.400000 0.600000 229.173092 +-4.400000 0.700000 226.202326 +-4.400000 0.800000 223.251560 +-4.400000 0.900000 220.320794 +-4.400000 1.000000 217.410028 +-4.400000 1.100000 214.519262 +-4.400000 1.200000 211.648496 +-4.400000 1.300000 208.797730 +-4.400000 1.400000 205.966964 +-4.400000 1.500000 203.156198 +-4.400000 1.600000 200.365433 +-4.400000 1.700000 197.594667 +-4.400000 1.800000 194.843901 +-4.400000 1.900000 192.113135 +-4.400000 2.000000 189.402369 +-4.400000 2.100000 186.711603 +-4.400000 2.200000 184.040837 +-4.400000 2.300000 181.390071 +-4.400000 2.400000 178.759305 +-4.400000 2.500000 176.148539 +-4.400000 2.600000 173.557773 +-4.400000 2.700000 170.987007 +-4.400000 2.800000 168.436241 +-4.400000 2.900000 165.905476 +-4.400000 3.000000 163.394710 +-4.400000 3.100000 160.903944 +-4.400000 3.200000 158.433178 +-4.400000 3.300000 155.982412 +-4.400000 3.400000 153.551646 +-4.400000 3.500000 151.140880 +-4.400000 3.600000 148.750114 +-4.400000 3.700000 146.379348 +-4.400000 3.800000 144.028582 +-4.400000 3.900000 141.697816 +-4.400000 4.000000 139.387050 +-4.400000 4.100000 137.096285 +-4.400000 4.200000 134.825519 +-4.400000 4.300000 132.574753 +-4.400000 4.400000 130.343987 +-4.400000 4.500000 128.133221 +-4.400000 4.600000 125.942455 +-4.400000 4.700000 123.771689 +-4.400000 4.800000 121.620923 +-4.400000 4.900000 119.490157 +-4.400000 5.000000 117.379391 +-4.400000 5.100000 115.288625 +-4.400000 5.200000 113.217859 +-4.400000 5.300000 111.167094 +-4.400000 5.400000 109.136328 +-4.400000 5.500000 107.125562 +-4.400000 5.600000 105.134796 +-4.400000 5.700000 103.164030 +-4.400000 5.800000 101.213264 +-4.400000 5.900000 99.282498 +-4.400000 6.000000 97.371732 +-4.400000 6.100000 95.480966 +-4.400000 6.200000 93.610200 +-4.400000 6.300000 91.759434 +-4.400000 6.400000 89.928668 +-4.400000 6.500000 88.117903 +-4.400000 6.600000 86.327137 +-4.400000 6.700000 84.556371 +-4.400000 6.800000 82.805605 +-4.400000 6.900000 81.074839 +-4.400000 7.000000 79.364073 +-4.400000 7.100000 77.673307 +-4.400000 7.200000 76.002541 +-4.400000 7.300000 74.351775 +-4.400000 7.400000 72.721009 +-4.400000 7.500000 71.110243 +-4.400000 7.600000 69.519477 +-4.400000 7.700000 67.948711 +-4.400000 7.800000 66.397946 +-4.400000 7.900000 64.867180 +-4.400000 8.000000 63.356414 +-4.400000 8.100000 61.865648 +-4.400000 8.200000 60.394882 +-4.400000 8.300000 58.944116 +-4.400000 8.400000 57.513350 +-4.400000 8.500000 56.102584 +-4.400000 8.600000 54.711818 +-4.400000 8.700000 53.341052 +-4.400000 8.800000 51.990286 +-4.400000 8.900000 50.659520 +-4.400000 9.000000 49.348755 +-4.400000 9.100000 48.057989 +-4.400000 9.200000 46.787223 +-4.400000 9.300000 45.536457 +-4.400000 9.400000 44.305691 +-4.400000 9.500000 43.094925 +-4.400000 9.600000 41.904159 +-4.400000 9.700000 40.733393 +-4.400000 9.800000 39.582627 +-4.400000 9.900000 38.451861 +-4.400000 10.000000 37.341095 +-4.400000 10.100000 36.250329 +-4.400000 10.200000 35.179564 +-4.400000 10.300000 34.128798 +-4.400000 10.400000 33.098032 +-4.400000 10.500000 32.087266 +-4.400000 10.600000 31.096500 +-4.400000 10.700000 30.125734 +-4.400000 10.800000 29.174968 +-4.400000 10.900000 28.244202 +-4.400000 11.000000 27.333436 +-4.400000 11.100000 26.442670 +-4.400000 11.200000 25.571904 +-4.400000 11.300000 24.721138 +-4.400000 11.400000 23.890372 +-4.400000 11.500000 23.079607 +-4.400000 11.600000 22.288841 +-4.400000 11.700000 21.518075 +-4.400000 11.800000 20.767309 +-4.400000 11.900000 20.036543 +-4.400000 12.000000 19.325777 +-4.400000 12.100000 18.635011 +-4.400000 12.200000 17.964245 +-4.400000 12.300000 17.313479 +-4.400000 12.400000 16.682713 +-4.400000 12.500000 16.071947 +-4.400000 12.600000 15.481181 +-4.400000 12.700000 14.910416 +-4.400000 12.800000 14.359650 +-4.400000 12.900000 13.828884 +-4.400000 13.000000 13.318118 +-4.400000 13.100000 12.827352 +-4.400000 13.200000 12.356586 +-4.400000 13.300000 11.905820 +-4.400000 13.400000 11.475054 +-4.400000 13.500000 11.064288 +-4.400000 13.600000 10.673522 +-4.400000 13.700000 10.302756 +-4.400000 13.800000 9.951990 +-4.400000 13.900000 9.621225 +-4.400000 14.000000 9.310459 +-4.400000 14.100000 9.019693 +-4.400000 14.200000 8.748927 +-4.400000 14.300000 8.498161 +-4.400000 14.400000 8.267395 +-4.400000 14.500000 8.056629 +-4.400000 14.600000 7.865863 +-4.400000 14.700000 7.695097 +-4.400000 14.800000 7.544331 +-4.400000 14.900000 7.413565 +-4.400000 15.000000 7.302799 + +-4.300000 -5.000000 415.496802 +-4.300000 -4.900000 411.460345 +-4.300000 -4.800000 407.443889 +-4.300000 -4.700000 403.447432 +-4.300000 -4.600000 399.470975 +-4.300000 -4.500000 395.514518 +-4.300000 -4.400000 391.578061 +-4.300000 -4.300000 387.661604 +-4.300000 -4.200000 383.765148 +-4.300000 -4.100000 379.888691 +-4.300000 -4.000000 376.032234 +-4.300000 -3.900000 372.195777 +-4.300000 -3.800000 368.379320 +-4.300000 -3.700000 364.582863 +-4.300000 -3.600000 360.806407 +-4.300000 -3.500000 357.049950 +-4.300000 -3.400000 353.313493 +-4.300000 -3.300000 349.597036 +-4.300000 -3.200000 345.900579 +-4.300000 -3.100000 342.224123 +-4.300000 -3.000000 338.567666 +-4.300000 -2.900000 334.931209 +-4.300000 -2.800000 331.314752 +-4.300000 -2.700000 327.718295 +-4.300000 -2.600000 324.141838 +-4.300000 -2.500000 320.585382 +-4.300000 -2.400000 317.048925 +-4.300000 -2.300000 313.532468 +-4.300000 -2.200000 310.036011 +-4.300000 -2.100000 306.559554 +-4.300000 -2.000000 303.103097 +-4.300000 -1.900000 299.666641 +-4.300000 -1.800000 296.250184 +-4.300000 -1.700000 292.853727 +-4.300000 -1.600000 289.477270 +-4.300000 -1.500000 286.120813 +-4.300000 -1.400000 282.784356 +-4.300000 -1.300000 279.467900 +-4.300000 -1.200000 276.171443 +-4.300000 -1.100000 272.894986 +-4.300000 -1.000000 269.638529 +-4.300000 -0.900000 266.402072 +-4.300000 -0.800000 263.185616 +-4.300000 -0.700000 259.989159 +-4.300000 -0.600000 256.812702 +-4.300000 -0.500000 253.656245 +-4.300000 -0.400000 250.519788 +-4.300000 -0.300000 247.403331 +-4.300000 -0.200000 244.306875 +-4.300000 -0.100000 241.230418 +-4.300000 -0.000000 238.173961 +-4.300000 0.100000 235.137504 +-4.300000 0.200000 232.121047 +-4.300000 0.300000 229.124590 +-4.300000 0.400000 226.148134 +-4.300000 0.500000 223.191677 +-4.300000 0.600000 220.255220 +-4.300000 0.700000 217.338763 +-4.300000 0.800000 214.442306 +-4.300000 0.900000 211.565850 +-4.300000 1.000000 208.709393 +-4.300000 1.100000 205.872936 +-4.300000 1.200000 203.056479 +-4.300000 1.300000 200.260022 +-4.300000 1.400000 197.483565 +-4.300000 1.500000 194.727109 +-4.300000 1.600000 191.990652 +-4.300000 1.700000 189.274195 +-4.300000 1.800000 186.577738 +-4.300000 1.900000 183.901281 +-4.300000 2.000000 181.244824 +-4.300000 2.100000 178.608368 +-4.300000 2.200000 175.991911 +-4.300000 2.300000 173.395454 +-4.300000 2.400000 170.818997 +-4.300000 2.500000 168.262540 +-4.300000 2.600000 165.726083 +-4.300000 2.700000 163.209627 +-4.300000 2.800000 160.713170 +-4.300000 2.900000 158.236713 +-4.300000 3.000000 155.780256 +-4.300000 3.100000 153.343799 +-4.300000 3.200000 150.927343 +-4.300000 3.300000 148.530886 +-4.300000 3.400000 146.154429 +-4.300000 3.500000 143.797972 +-4.300000 3.600000 141.461515 +-4.300000 3.700000 139.145058 +-4.300000 3.800000 136.848602 +-4.300000 3.900000 134.572145 +-4.300000 4.000000 132.315688 +-4.300000 4.100000 130.079231 +-4.300000 4.200000 127.862774 +-4.300000 4.300000 125.666317 +-4.300000 4.400000 123.489861 +-4.300000 4.500000 121.333404 +-4.300000 4.600000 119.196947 +-4.300000 4.700000 117.080490 +-4.300000 4.800000 114.984033 +-4.300000 4.900000 112.907576 +-4.300000 5.000000 110.851120 +-4.300000 5.100000 108.814663 +-4.300000 5.200000 106.798206 +-4.300000 5.300000 104.801749 +-4.300000 5.400000 102.825292 +-4.300000 5.500000 100.868836 +-4.300000 5.600000 98.932379 +-4.300000 5.700000 97.015922 +-4.300000 5.800000 95.119465 +-4.300000 5.900000 93.243008 +-4.300000 6.000000 91.386551 +-4.300000 6.100000 89.550095 +-4.300000 6.200000 87.733638 +-4.300000 6.300000 85.937181 +-4.300000 6.400000 84.160724 +-4.300000 6.500000 82.404267 +-4.300000 6.600000 80.667810 +-4.300000 6.700000 78.951354 +-4.300000 6.800000 77.254897 +-4.300000 6.900000 75.578440 +-4.300000 7.000000 73.921983 +-4.300000 7.100000 72.285526 +-4.300000 7.200000 70.669069 +-4.300000 7.300000 69.072613 +-4.300000 7.400000 67.496156 +-4.300000 7.500000 65.939699 +-4.300000 7.600000 64.403242 +-4.300000 7.700000 62.886785 +-4.300000 7.800000 61.390329 +-4.300000 7.900000 59.913872 +-4.300000 8.000000 58.457415 +-4.300000 8.100000 57.020958 +-4.300000 8.200000 55.604501 +-4.300000 8.300000 54.208044 +-4.300000 8.400000 52.831588 +-4.300000 8.500000 51.475131 +-4.300000 8.600000 50.138674 +-4.300000 8.700000 48.822217 +-4.300000 8.800000 47.525760 +-4.300000 8.900000 46.249303 +-4.300000 9.000000 44.992847 +-4.300000 9.100000 43.756390 +-4.300000 9.200000 42.539933 +-4.300000 9.300000 41.343476 +-4.300000 9.400000 40.167019 +-4.300000 9.500000 39.010563 +-4.300000 9.600000 37.874106 +-4.300000 9.700000 36.757649 +-4.300000 9.800000 35.661192 +-4.300000 9.900000 34.584735 +-4.300000 10.000000 33.528278 +-4.300000 10.100000 32.491822 +-4.300000 10.200000 31.475365 +-4.300000 10.300000 30.478908 +-4.300000 10.400000 29.502451 +-4.300000 10.500000 28.545994 +-4.300000 10.600000 27.609537 +-4.300000 10.700000 26.693081 +-4.300000 10.800000 25.796624 +-4.300000 10.900000 24.920167 +-4.300000 11.000000 24.063710 +-4.300000 11.100000 23.227253 +-4.300000 11.200000 22.410796 +-4.300000 11.300000 21.614340 +-4.300000 11.400000 20.837883 +-4.300000 11.500000 20.081426 +-4.300000 11.600000 19.344969 +-4.300000 11.700000 18.628512 +-4.300000 11.800000 17.932056 +-4.300000 11.900000 17.255599 +-4.300000 12.000000 16.599142 +-4.300000 12.100000 15.962685 +-4.300000 12.200000 15.346228 +-4.300000 12.300000 14.749771 +-4.300000 12.400000 14.173315 +-4.300000 12.500000 13.616858 +-4.300000 12.600000 13.080401 +-4.300000 12.700000 12.563944 +-4.300000 12.800000 12.067487 +-4.300000 12.900000 11.591030 +-4.300000 13.000000 11.134574 +-4.300000 13.100000 10.698117 +-4.300000 13.200000 10.281660 +-4.300000 13.300000 9.885203 +-4.300000 13.400000 9.508746 +-4.300000 13.500000 9.152289 +-4.300000 13.600000 8.815833 +-4.300000 13.700000 8.499376 +-4.300000 13.800000 8.202919 +-4.300000 13.900000 7.926462 +-4.300000 14.000000 7.670005 +-4.300000 14.100000 7.433549 +-4.300000 14.200000 7.217092 +-4.300000 14.300000 7.020635 +-4.300000 14.400000 6.844178 +-4.300000 14.500000 6.687721 +-4.300000 14.600000 6.551264 +-4.300000 14.700000 6.434808 +-4.300000 14.800000 6.338351 +-4.300000 14.900000 6.261894 +-4.300000 15.000000 6.205437 + +-4.200000 -5.000000 403.826700 +-4.200000 -4.900000 399.844035 +-4.200000 -4.800000 395.881371 +-4.200000 -4.700000 391.938706 +-4.200000 -4.600000 388.016042 +-4.200000 -4.500000 384.113377 +-4.200000 -4.400000 380.230713 +-4.200000 -4.300000 376.368048 +-4.200000 -4.200000 372.525384 +-4.200000 -4.100000 368.702719 +-4.200000 -4.000000 364.900055 +-4.200000 -3.900000 361.117390 +-4.200000 -3.800000 357.354726 +-4.200000 -3.700000 353.612062 +-4.200000 -3.600000 349.889397 +-4.200000 -3.500000 346.186733 +-4.200000 -3.400000 342.504068 +-4.200000 -3.300000 338.841404 +-4.200000 -3.200000 335.198739 +-4.200000 -3.100000 331.576075 +-4.200000 -3.000000 327.973410 +-4.200000 -2.900000 324.390746 +-4.200000 -2.800000 320.828081 +-4.200000 -2.700000 317.285417 +-4.200000 -2.600000 313.762752 +-4.200000 -2.500000 310.260088 +-4.200000 -2.400000 306.777423 +-4.200000 -2.300000 303.314759 +-4.200000 -2.200000 299.872094 +-4.200000 -2.100000 296.449430 +-4.200000 -2.000000 293.046766 +-4.200000 -1.900000 289.664101 +-4.200000 -1.800000 286.301437 +-4.200000 -1.700000 282.958772 +-4.200000 -1.600000 279.636108 +-4.200000 -1.500000 276.333443 +-4.200000 -1.400000 273.050779 +-4.200000 -1.300000 269.788114 +-4.200000 -1.200000 266.545450 +-4.200000 -1.100000 263.322785 +-4.200000 -1.000000 260.120121 +-4.200000 -0.900000 256.937456 +-4.200000 -0.800000 253.774792 +-4.200000 -0.700000 250.632127 +-4.200000 -0.600000 247.509463 +-4.200000 -0.500000 244.406799 +-4.200000 -0.400000 241.324134 +-4.200000 -0.300000 238.261470 +-4.200000 -0.200000 235.218805 +-4.200000 -0.100000 232.196141 +-4.200000 -0.000000 229.193476 +-4.200000 0.100000 226.210812 +-4.200000 0.200000 223.248147 +-4.200000 0.300000 220.305483 +-4.200000 0.400000 217.382818 +-4.200000 0.500000 214.480154 +-4.200000 0.600000 211.597489 +-4.200000 0.700000 208.734825 +-4.200000 0.800000 205.892160 +-4.200000 0.900000 203.069496 +-4.200000 1.000000 200.266831 +-4.200000 1.100000 197.484167 +-4.200000 1.200000 194.721503 +-4.200000 1.300000 191.978838 +-4.200000 1.400000 189.256174 +-4.200000 1.500000 186.553509 +-4.200000 1.600000 183.870845 +-4.200000 1.700000 181.208180 +-4.200000 1.800000 178.565516 +-4.200000 1.900000 175.942851 +-4.200000 2.000000 173.340187 +-4.200000 2.100000 170.757522 +-4.200000 2.200000 168.194858 +-4.200000 2.300000 165.652193 +-4.200000 2.400000 163.129529 +-4.200000 2.500000 160.626864 +-4.200000 2.600000 158.144200 +-4.200000 2.700000 155.681535 +-4.200000 2.800000 153.238871 +-4.200000 2.900000 150.816207 +-4.200000 3.000000 148.413542 +-4.200000 3.100000 146.030878 +-4.200000 3.200000 143.668213 +-4.200000 3.300000 141.325549 +-4.200000 3.400000 139.002884 +-4.200000 3.500000 136.700220 +-4.200000 3.600000 134.417555 +-4.200000 3.700000 132.154891 +-4.200000 3.800000 129.912226 +-4.200000 3.900000 127.689562 +-4.200000 4.000000 125.486897 +-4.200000 4.100000 123.304233 +-4.200000 4.200000 121.141568 +-4.200000 4.300000 118.998904 +-4.200000 4.400000 116.876239 +-4.200000 4.500000 114.773575 +-4.200000 4.600000 112.690911 +-4.200000 4.700000 110.628246 +-4.200000 4.800000 108.585582 +-4.200000 4.900000 106.562917 +-4.200000 5.000000 104.560253 +-4.200000 5.100000 102.577588 +-4.200000 5.200000 100.614924 +-4.200000 5.300000 98.672259 +-4.200000 5.400000 96.749595 +-4.200000 5.500000 94.846930 +-4.200000 5.600000 92.964266 +-4.200000 5.700000 91.101601 +-4.200000 5.800000 89.258937 +-4.200000 5.900000 87.436272 +-4.200000 6.000000 85.633608 +-4.200000 6.100000 83.850943 +-4.200000 6.200000 82.088279 +-4.200000 6.300000 80.345615 +-4.200000 6.400000 78.622950 +-4.200000 6.500000 76.920286 +-4.200000 6.600000 75.237621 +-4.200000 6.700000 73.574957 +-4.200000 6.800000 71.932292 +-4.200000 6.900000 70.309628 +-4.200000 7.000000 68.706963 +-4.200000 7.100000 67.124299 +-4.200000 7.200000 65.561634 +-4.200000 7.300000 64.018970 +-4.200000 7.400000 62.496305 +-4.200000 7.500000 60.993641 +-4.200000 7.600000 59.510976 +-4.200000 7.700000 58.048312 +-4.200000 7.800000 56.605647 +-4.200000 7.900000 55.182983 +-4.200000 8.000000 53.780319 +-4.200000 8.100000 52.397654 +-4.200000 8.200000 51.034990 +-4.200000 8.300000 49.692325 +-4.200000 8.400000 48.369661 +-4.200000 8.500000 47.066996 +-4.200000 8.600000 45.784332 +-4.200000 8.700000 44.521667 +-4.200000 8.800000 43.279003 +-4.200000 8.900000 42.056338 +-4.200000 9.000000 40.853674 +-4.200000 9.100000 39.671009 +-4.200000 9.200000 38.508345 +-4.200000 9.300000 37.365680 +-4.200000 9.400000 36.243016 +-4.200000 9.500000 35.140351 +-4.200000 9.600000 34.057687 +-4.200000 9.700000 32.995023 +-4.200000 9.800000 31.952358 +-4.200000 9.900000 30.929694 +-4.200000 10.000000 29.927029 +-4.200000 10.100000 28.944365 +-4.200000 10.200000 27.981700 +-4.200000 10.300000 27.039036 +-4.200000 10.400000 26.116371 +-4.200000 10.500000 25.213707 +-4.200000 10.600000 24.331042 +-4.200000 10.700000 23.468378 +-4.200000 10.800000 22.625713 +-4.200000 10.900000 21.803049 +-4.200000 11.000000 21.000384 +-4.200000 11.100000 20.217720 +-4.200000 11.200000 19.455055 +-4.200000 11.300000 18.712391 +-4.200000 11.400000 17.989727 +-4.200000 11.500000 17.287062 +-4.200000 11.600000 16.604398 +-4.200000 11.700000 15.941733 +-4.200000 11.800000 15.299069 +-4.200000 11.900000 14.676404 +-4.200000 12.000000 14.073740 +-4.200000 12.100000 13.491075 +-4.200000 12.200000 12.928411 +-4.200000 12.300000 12.385746 +-4.200000 12.400000 11.863082 +-4.200000 12.500000 11.360417 +-4.200000 12.600000 10.877753 +-4.200000 12.700000 10.415088 +-4.200000 12.800000 9.972424 +-4.200000 12.900000 9.549759 +-4.200000 13.000000 9.147095 +-4.200000 13.100000 8.764431 +-4.200000 13.200000 8.401766 +-4.200000 13.300000 8.059102 +-4.200000 13.400000 7.736437 +-4.200000 13.500000 7.433773 +-4.200000 13.600000 7.151108 +-4.200000 13.700000 6.888444 +-4.200000 13.800000 6.645779 +-4.200000 13.900000 6.423115 +-4.200000 14.000000 6.220450 +-4.200000 14.100000 6.037786 +-4.200000 14.200000 5.875121 +-4.200000 14.300000 5.732457 +-4.200000 14.400000 5.609792 +-4.200000 14.500000 5.507128 +-4.200000 14.600000 5.424464 +-4.200000 14.700000 5.361799 +-4.200000 14.800000 5.319135 +-4.200000 14.900000 5.296470 +-4.200000 15.000000 5.293806 + +-4.100000 -5.000000 392.450089 +-4.100000 -4.900000 388.520700 +-4.100000 -4.800000 384.611311 +-4.100000 -4.700000 380.721923 +-4.100000 -4.600000 376.852534 +-4.100000 -4.500000 373.003145 +-4.100000 -4.400000 369.173756 +-4.100000 -4.300000 365.364367 +-4.100000 -4.200000 361.574978 +-4.100000 -4.100000 357.805589 +-4.100000 -4.000000 354.056201 +-4.100000 -3.900000 350.326812 +-4.100000 -3.800000 346.617423 +-4.100000 -3.700000 342.928034 +-4.100000 -3.600000 339.258645 +-4.100000 -3.500000 335.609256 +-4.100000 -3.400000 331.979867 +-4.100000 -3.300000 328.370479 +-4.100000 -3.200000 324.781090 +-4.100000 -3.100000 321.211701 +-4.100000 -3.000000 317.662312 +-4.100000 -2.900000 314.132923 +-4.100000 -2.800000 310.623534 +-4.100000 -2.700000 307.134145 +-4.100000 -2.600000 303.664757 +-4.100000 -2.500000 300.215368 +-4.100000 -2.400000 296.785979 +-4.100000 -2.300000 293.376590 +-4.100000 -2.200000 289.987201 +-4.100000 -2.100000 286.617812 +-4.100000 -2.000000 283.268424 +-4.100000 -1.900000 279.939035 +-4.100000 -1.800000 276.629646 +-4.100000 -1.700000 273.340257 +-4.100000 -1.600000 270.070868 +-4.100000 -1.500000 266.821479 +-4.100000 -1.400000 263.592090 +-4.100000 -1.300000 260.382702 +-4.100000 -1.200000 257.193313 +-4.100000 -1.100000 254.023924 +-4.100000 -1.000000 250.874535 +-4.100000 -0.900000 247.745146 +-4.100000 -0.800000 244.635757 +-4.100000 -0.700000 241.546368 +-4.100000 -0.600000 238.476980 +-4.100000 -0.500000 235.427591 +-4.100000 -0.400000 232.398202 +-4.100000 -0.300000 229.388813 +-4.100000 -0.200000 226.399424 +-4.100000 -0.100000 223.430035 +-4.100000 -0.000000 220.480646 +-4.100000 0.100000 217.551258 +-4.100000 0.200000 214.641869 +-4.100000 0.300000 211.752480 +-4.100000 0.400000 208.883091 +-4.100000 0.500000 206.033702 +-4.100000 0.600000 203.204313 +-4.100000 0.700000 200.394924 +-4.100000 0.800000 197.605536 +-4.100000 0.900000 194.836147 +-4.100000 1.000000 192.086758 +-4.100000 1.100000 189.357369 +-4.100000 1.200000 186.647980 +-4.100000 1.300000 183.958591 +-4.100000 1.400000 181.289203 +-4.100000 1.500000 178.639814 +-4.100000 1.600000 176.010425 +-4.100000 1.700000 173.401036 +-4.100000 1.800000 170.811647 +-4.100000 1.900000 168.242258 +-4.100000 2.000000 165.692869 +-4.100000 2.100000 163.163481 +-4.100000 2.200000 160.654092 +-4.100000 2.300000 158.164703 +-4.100000 2.400000 155.695314 +-4.100000 2.500000 153.245925 +-4.100000 2.600000 150.816536 +-4.100000 2.700000 148.407147 +-4.100000 2.800000 146.017759 +-4.100000 2.900000 143.648370 +-4.100000 3.000000 141.298981 +-4.100000 3.100000 138.969592 +-4.100000 3.200000 136.660203 +-4.100000 3.300000 134.370814 +-4.100000 3.400000 132.101425 +-4.100000 3.500000 129.852037 +-4.100000 3.600000 127.622648 +-4.100000 3.700000 125.413259 +-4.100000 3.800000 123.223870 +-4.100000 3.900000 121.054481 +-4.100000 4.000000 118.905092 +-4.100000 4.100000 116.775703 +-4.100000 4.200000 114.666315 +-4.100000 4.300000 112.576926 +-4.100000 4.400000 110.507537 +-4.100000 4.500000 108.458148 +-4.100000 4.600000 106.428759 +-4.100000 4.700000 104.419370 +-4.100000 4.800000 102.429982 +-4.100000 4.900000 100.460593 +-4.100000 5.000000 98.511204 +-4.100000 5.100000 96.581815 +-4.100000 5.200000 94.672426 +-4.100000 5.300000 92.783037 +-4.100000 5.400000 90.913648 +-4.100000 5.500000 89.064260 +-4.100000 5.600000 87.234871 +-4.100000 5.700000 85.425482 +-4.100000 5.800000 83.636093 +-4.100000 5.900000 81.866704 +-4.100000 6.000000 80.117315 +-4.100000 6.100000 78.387926 +-4.100000 6.200000 76.678538 +-4.100000 6.300000 74.989149 +-4.100000 6.400000 73.319760 +-4.100000 6.500000 71.670371 +-4.100000 6.600000 70.040982 +-4.100000 6.700000 68.431593 +-4.100000 6.800000 66.842204 +-4.100000 6.900000 65.272816 +-4.100000 7.000000 63.723427 +-4.100000 7.100000 62.194038 +-4.100000 7.200000 60.684649 +-4.100000 7.300000 59.195260 +-4.100000 7.400000 57.725871 +-4.100000 7.500000 56.276482 +-4.100000 7.600000 54.847094 +-4.100000 7.700000 53.437705 +-4.100000 7.800000 52.048316 +-4.100000 7.900000 50.678927 +-4.100000 8.000000 49.329538 +-4.100000 8.100000 48.000149 +-4.100000 8.200000 46.690761 +-4.100000 8.300000 45.401372 +-4.100000 8.400000 44.131983 +-4.100000 8.500000 42.882594 +-4.100000 8.600000 41.653205 +-4.100000 8.700000 40.443816 +-4.100000 8.800000 39.254427 +-4.100000 8.900000 38.085039 +-4.100000 9.000000 36.935650 +-4.100000 9.100000 35.806261 +-4.100000 9.200000 34.696872 +-4.100000 9.300000 33.607483 +-4.100000 9.400000 32.538094 +-4.100000 9.500000 31.488705 +-4.100000 9.600000 30.459317 +-4.100000 9.700000 29.449928 +-4.100000 9.800000 28.460539 +-4.100000 9.900000 27.491150 +-4.100000 10.000000 26.541761 +-4.100000 10.100000 25.612372 +-4.100000 10.200000 24.702983 +-4.100000 10.300000 23.813595 +-4.100000 10.400000 22.944206 +-4.100000 10.500000 22.094817 +-4.100000 10.600000 21.265428 +-4.100000 10.700000 20.456039 +-4.100000 10.800000 19.666650 +-4.100000 10.900000 18.897261 +-4.100000 11.000000 18.147873 +-4.100000 11.100000 17.418484 +-4.100000 11.200000 16.709095 +-4.100000 11.300000 16.019706 +-4.100000 11.400000 15.350317 +-4.100000 11.500000 14.700928 +-4.100000 11.600000 14.071539 +-4.100000 11.700000 13.462151 +-4.100000 11.800000 12.872762 +-4.100000 11.900000 12.303373 +-4.100000 12.000000 11.753984 +-4.100000 12.100000 11.224595 +-4.100000 12.200000 10.715206 +-4.100000 12.300000 10.225818 +-4.100000 12.400000 9.756429 +-4.100000 12.500000 9.307040 +-4.100000 12.600000 8.877651 +-4.100000 12.700000 8.468262 +-4.100000 12.800000 8.078873 +-4.100000 12.900000 7.709484 +-4.100000 13.000000 7.360096 +-4.100000 13.100000 7.030707 +-4.100000 13.200000 6.721318 +-4.100000 13.300000 6.431929 +-4.100000 13.400000 6.162540 +-4.100000 13.500000 5.913151 +-4.100000 13.600000 5.683762 +-4.100000 13.700000 5.474374 +-4.100000 13.800000 5.284985 +-4.100000 13.900000 5.115596 +-4.100000 14.000000 4.966207 +-4.100000 14.100000 4.836818 +-4.100000 14.200000 4.727429 +-4.100000 14.300000 4.638040 +-4.100000 14.400000 4.568652 +-4.100000 14.500000 4.519263 +-4.100000 14.600000 4.489874 +-4.100000 14.700000 4.480485 +-4.100000 14.800000 4.491096 +-4.100000 14.900000 4.521707 +-4.100000 15.000000 4.572318 + +-4.000000 -5.000000 381.370954 +-4.000000 -4.900000 377.494324 +-4.000000 -4.800000 373.637694 +-4.000000 -4.700000 369.801064 +-4.000000 -4.600000 365.984434 +-4.000000 -4.500000 362.187804 +-4.000000 -4.400000 358.411174 +-4.000000 -4.300000 354.654544 +-4.000000 -4.200000 350.917914 +-4.000000 -4.100000 347.201284 +-4.000000 -4.000000 343.504654 +-4.000000 -3.900000 339.828024 +-4.000000 -3.800000 336.171395 +-4.000000 -3.700000 332.534765 +-4.000000 -3.600000 328.918135 +-4.000000 -3.500000 325.321505 +-4.000000 -3.400000 321.744875 +-4.000000 -3.300000 318.188245 +-4.000000 -3.200000 314.651615 +-4.000000 -3.100000 311.134985 +-4.000000 -3.000000 307.638355 +-4.000000 -2.900000 304.161725 +-4.000000 -2.800000 300.705095 +-4.000000 -2.700000 297.268465 +-4.000000 -2.600000 293.851835 +-4.000000 -2.500000 290.455205 +-4.000000 -2.400000 287.078575 +-4.000000 -2.300000 283.721945 +-4.000000 -2.200000 280.385315 +-4.000000 -2.100000 277.068685 +-4.000000 -2.000000 273.772055 +-4.000000 -1.900000 270.495425 +-4.000000 -1.800000 267.238795 +-4.000000 -1.700000 264.002165 +-4.000000 -1.600000 260.785535 +-4.000000 -1.500000 257.588905 +-4.000000 -1.400000 254.412275 +-4.000000 -1.300000 251.255645 +-4.000000 -1.200000 248.119015 +-4.000000 -1.100000 245.002385 +-4.000000 -1.000000 241.905755 +-4.000000 -0.900000 238.829125 +-4.000000 -0.800000 235.772495 +-4.000000 -0.700000 232.735865 +-4.000000 -0.600000 229.719235 +-4.000000 -0.500000 226.722605 +-4.000000 -0.400000 223.745975 +-4.000000 -0.300000 220.789345 +-4.000000 -0.200000 217.852715 +-4.000000 -0.100000 214.936085 +-4.000000 -0.000000 212.039455 +-4.000000 0.100000 209.162826 +-4.000000 0.200000 206.306196 +-4.000000 0.300000 203.469566 +-4.000000 0.400000 200.652936 +-4.000000 0.500000 197.856306 +-4.000000 0.600000 195.079676 +-4.000000 0.700000 192.323046 +-4.000000 0.800000 189.586416 +-4.000000 0.900000 186.869786 +-4.000000 1.000000 184.173156 +-4.000000 1.100000 181.496526 +-4.000000 1.200000 178.839896 +-4.000000 1.300000 176.203266 +-4.000000 1.400000 173.586636 +-4.000000 1.500000 170.990006 +-4.000000 1.600000 168.413376 +-4.000000 1.700000 165.856746 +-4.000000 1.800000 163.320116 +-4.000000 1.900000 160.803486 +-4.000000 2.000000 158.306856 +-4.000000 2.100000 155.830226 +-4.000000 2.200000 153.373596 +-4.000000 2.300000 150.936966 +-4.000000 2.400000 148.520336 +-4.000000 2.500000 146.123706 +-4.000000 2.600000 143.747076 +-4.000000 2.700000 141.390446 +-4.000000 2.800000 139.053816 +-4.000000 2.900000 136.737186 +-4.000000 3.000000 134.440556 +-4.000000 3.100000 132.163926 +-4.000000 3.200000 129.907296 +-4.000000 3.300000 127.670666 +-4.000000 3.400000 125.454036 +-4.000000 3.500000 123.257406 +-4.000000 3.600000 121.080776 +-4.000000 3.700000 118.924146 +-4.000000 3.800000 116.787516 +-4.000000 3.900000 114.670887 +-4.000000 4.000000 112.574257 +-4.000000 4.100000 110.497627 +-4.000000 4.200000 108.440997 +-4.000000 4.300000 106.404367 +-4.000000 4.400000 104.387737 +-4.000000 4.500000 102.391107 +-4.000000 4.600000 100.414477 +-4.000000 4.700000 98.457847 +-4.000000 4.800000 96.521217 +-4.000000 4.900000 94.604587 +-4.000000 5.000000 92.707957 +-4.000000 5.100000 90.831327 +-4.000000 5.200000 88.974697 +-4.000000 5.300000 87.138067 +-4.000000 5.400000 85.321437 +-4.000000 5.500000 83.524807 +-4.000000 5.600000 81.748177 +-4.000000 5.700000 79.991547 +-4.000000 5.800000 78.254917 +-4.000000 5.900000 76.538287 +-4.000000 6.000000 74.841657 +-4.000000 6.100000 73.165027 +-4.000000 6.200000 71.508397 +-4.000000 6.300000 69.871767 +-4.000000 6.400000 68.255137 +-4.000000 6.500000 66.658507 +-4.000000 6.600000 65.081877 +-4.000000 6.700000 63.525247 +-4.000000 6.800000 61.988617 +-4.000000 6.900000 60.471987 +-4.000000 7.000000 58.975357 +-4.000000 7.100000 57.498727 +-4.000000 7.200000 56.042097 +-4.000000 7.300000 54.605467 +-4.000000 7.400000 53.188837 +-4.000000 7.500000 51.792207 +-4.000000 7.600000 50.415577 +-4.000000 7.700000 49.058947 +-4.000000 7.800000 47.722318 +-4.000000 7.900000 46.405688 +-4.000000 8.000000 45.109058 +-4.000000 8.100000 43.832428 +-4.000000 8.200000 42.575798 +-4.000000 8.300000 41.339168 +-4.000000 8.400000 40.122538 +-4.000000 8.500000 38.925908 +-4.000000 8.600000 37.749278 +-4.000000 8.700000 36.592648 +-4.000000 8.800000 35.456018 +-4.000000 8.900000 34.339388 +-4.000000 9.000000 33.242758 +-4.000000 9.100000 32.166128 +-4.000000 9.200000 31.109498 +-4.000000 9.300000 30.072868 +-4.000000 9.400000 29.056238 +-4.000000 9.500000 28.059608 +-4.000000 9.600000 27.082978 +-4.000000 9.700000 26.126348 +-4.000000 9.800000 25.189718 +-4.000000 9.900000 24.273088 +-4.000000 10.000000 23.376458 +-4.000000 10.100000 22.499828 +-4.000000 10.200000 21.643198 +-4.000000 10.300000 20.806568 +-4.000000 10.400000 19.989938 +-4.000000 10.500000 19.193308 +-4.000000 10.600000 18.416678 +-4.000000 10.700000 17.660048 +-4.000000 10.800000 16.923418 +-4.000000 10.900000 16.206788 +-4.000000 11.000000 15.510158 +-4.000000 11.100000 14.833528 +-4.000000 11.200000 14.176898 +-4.000000 11.300000 13.540268 +-4.000000 11.400000 12.923638 +-4.000000 11.500000 12.327008 +-4.000000 11.600000 11.750379 +-4.000000 11.700000 11.193749 +-4.000000 11.800000 10.657119 +-4.000000 11.900000 10.140489 +-4.000000 12.000000 9.643859 +-4.000000 12.100000 9.167229 +-4.000000 12.200000 8.710599 +-4.000000 12.300000 8.273969 +-4.000000 12.400000 7.857339 +-4.000000 12.500000 7.460709 +-4.000000 12.600000 7.084079 +-4.000000 12.700000 6.727449 +-4.000000 12.800000 6.390819 +-4.000000 12.900000 6.074189 +-4.000000 13.000000 5.777559 +-4.000000 13.100000 5.500929 +-4.000000 13.200000 5.244299 +-4.000000 13.300000 5.007669 +-4.000000 13.400000 4.791039 +-4.000000 13.500000 4.594409 +-4.000000 13.600000 4.417779 +-4.000000 13.700000 4.261149 +-4.000000 13.800000 4.124519 +-4.000000 13.900000 4.007889 +-4.000000 14.000000 3.911259 +-4.000000 14.100000 3.834629 +-4.000000 14.200000 3.777999 +-4.000000 14.300000 3.741369 +-4.000000 14.400000 3.724739 +-4.000000 14.500000 3.728109 +-4.000000 14.600000 3.751479 +-4.000000 14.700000 3.794849 +-4.000000 14.800000 3.858219 +-4.000000 14.900000 3.941589 +-4.000000 15.000000 4.044959 + +-3.900000 -5.000000 370.592768 +-3.900000 -4.900000 366.768380 +-3.900000 -4.800000 362.963992 +-3.900000 -4.700000 359.179604 +-3.900000 -4.600000 355.415216 +-3.900000 -4.500000 351.670828 +-3.900000 -4.400000 347.946441 +-3.900000 -4.300000 344.242053 +-3.900000 -4.200000 340.557665 +-3.900000 -4.100000 336.893277 +-3.900000 -4.000000 333.248889 +-3.900000 -3.900000 329.624501 +-3.900000 -3.800000 326.020114 +-3.900000 -3.700000 322.435726 +-3.900000 -3.600000 318.871338 +-3.900000 -3.500000 315.326950 +-3.900000 -3.400000 311.802562 +-3.900000 -3.300000 308.298174 +-3.900000 -3.200000 304.813787 +-3.900000 -3.100000 301.349399 +-3.900000 -3.000000 297.905011 +-3.900000 -2.900000 294.480623 +-3.900000 -2.800000 291.076235 +-3.900000 -2.700000 287.691847 +-3.900000 -2.600000 284.327460 +-3.900000 -2.500000 280.983072 +-3.900000 -2.400000 277.658684 +-3.900000 -2.300000 274.354296 +-3.900000 -2.200000 271.069908 +-3.900000 -2.100000 267.805520 +-3.900000 -2.000000 264.561133 +-3.900000 -1.900000 261.336745 +-3.900000 -1.800000 258.132357 +-3.900000 -1.700000 254.947969 +-3.900000 -1.600000 251.783581 +-3.900000 -1.500000 248.639193 +-3.900000 -1.400000 245.514806 +-3.900000 -1.300000 242.410418 +-3.900000 -1.200000 239.326030 +-3.900000 -1.100000 236.261642 +-3.900000 -1.000000 233.217254 +-3.900000 -0.900000 230.192866 +-3.900000 -0.800000 227.188479 +-3.900000 -0.700000 224.204091 +-3.900000 -0.600000 221.239703 +-3.900000 -0.500000 218.295315 +-3.900000 -0.400000 215.370927 +-3.900000 -0.300000 212.466539 +-3.900000 -0.200000 209.582152 +-3.900000 -0.100000 206.717764 +-3.900000 -0.000000 203.873376 +-3.900000 0.100000 201.048988 +-3.900000 0.200000 198.244600 +-3.900000 0.300000 195.460212 +-3.900000 0.400000 192.695825 +-3.900000 0.500000 189.951437 +-3.900000 0.600000 187.227049 +-3.900000 0.700000 184.522661 +-3.900000 0.800000 181.838273 +-3.900000 0.900000 179.173885 +-3.900000 1.000000 176.529498 +-3.900000 1.100000 173.905110 +-3.900000 1.200000 171.300722 +-3.900000 1.300000 168.716334 +-3.900000 1.400000 166.151946 +-3.900000 1.500000 163.607558 +-3.900000 1.600000 161.083171 +-3.900000 1.700000 158.578783 +-3.900000 1.800000 156.094395 +-3.900000 1.900000 153.630007 +-3.900000 2.000000 151.185619 +-3.900000 2.100000 148.761231 +-3.900000 2.200000 146.356844 +-3.900000 2.300000 143.972456 +-3.900000 2.400000 141.608068 +-3.900000 2.500000 139.263680 +-3.900000 2.600000 136.939292 +-3.900000 2.700000 134.634904 +-3.900000 2.800000 132.350517 +-3.900000 2.900000 130.086129 +-3.900000 3.000000 127.841741 +-3.900000 3.100000 125.617353 +-3.900000 3.200000 123.412965 +-3.900000 3.300000 121.228577 +-3.900000 3.400000 119.064190 +-3.900000 3.500000 116.919802 +-3.900000 3.600000 114.795414 +-3.900000 3.700000 112.691026 +-3.900000 3.800000 110.606638 +-3.900000 3.900000 108.542250 +-3.900000 4.000000 106.497863 +-3.900000 4.100000 104.473475 +-3.900000 4.200000 102.469087 +-3.900000 4.300000 100.484699 +-3.900000 4.400000 98.520311 +-3.900000 4.500000 96.575923 +-3.900000 4.600000 94.651536 +-3.900000 4.700000 92.747148 +-3.900000 4.800000 90.862760 +-3.900000 4.900000 88.998372 +-3.900000 5.000000 87.153984 +-3.900000 5.100000 85.329596 +-3.900000 5.200000 83.525209 +-3.900000 5.300000 81.740821 +-3.900000 5.400000 79.976433 +-3.900000 5.500000 78.232045 +-3.900000 5.600000 76.507657 +-3.900000 5.700000 74.803269 +-3.900000 5.800000 73.118882 +-3.900000 5.900000 71.454494 +-3.900000 6.000000 69.810106 +-3.900000 6.100000 68.185718 +-3.900000 6.200000 66.581330 +-3.900000 6.300000 64.996942 +-3.900000 6.400000 63.432555 +-3.900000 6.500000 61.888167 +-3.900000 6.600000 60.363779 +-3.900000 6.700000 58.859391 +-3.900000 6.800000 57.375003 +-3.900000 6.900000 55.910615 +-3.900000 7.000000 54.466228 +-3.900000 7.100000 53.041840 +-3.900000 7.200000 51.637452 +-3.900000 7.300000 50.253064 +-3.900000 7.400000 48.888676 +-3.900000 7.500000 47.544288 +-3.900000 7.600000 46.219901 +-3.900000 7.700000 44.915513 +-3.900000 7.800000 43.631125 +-3.900000 7.900000 42.366737 +-3.900000 8.000000 41.122349 +-3.900000 8.100000 39.897961 +-3.900000 8.200000 38.693574 +-3.900000 8.300000 37.509186 +-3.900000 8.400000 36.344798 +-3.900000 8.500000 35.200410 +-3.900000 8.600000 34.076022 +-3.900000 8.700000 32.971634 +-3.900000 8.800000 31.887247 +-3.900000 8.900000 30.822859 +-3.900000 9.000000 29.778471 +-3.900000 9.100000 28.754083 +-3.900000 9.200000 27.749695 +-3.900000 9.300000 26.765307 +-3.900000 9.400000 25.800920 +-3.900000 9.500000 24.856532 +-3.900000 9.600000 23.932144 +-3.900000 9.700000 23.027756 +-3.900000 9.800000 22.143368 +-3.900000 9.900000 21.278980 +-3.900000 10.000000 20.434593 +-3.900000 10.100000 19.610205 +-3.900000 10.200000 18.805817 +-3.900000 10.300000 18.021429 +-3.900000 10.400000 17.257041 +-3.900000 10.500000 16.512653 +-3.900000 10.600000 15.788266 +-3.900000 10.700000 15.083878 +-3.900000 10.800000 14.399490 +-3.900000 10.900000 13.735102 +-3.900000 11.000000 13.090714 +-3.900000 11.100000 12.466326 +-3.900000 11.200000 11.861939 +-3.900000 11.300000 11.277551 +-3.900000 11.400000 10.713163 +-3.900000 11.500000 10.168775 +-3.900000 11.600000 9.644387 +-3.900000 11.700000 9.139999 +-3.900000 11.800000 8.655612 +-3.900000 11.900000 8.191224 +-3.900000 12.000000 7.746836 +-3.900000 12.100000 7.322448 +-3.900000 12.200000 6.918060 +-3.900000 12.300000 6.533672 +-3.900000 12.400000 6.169285 +-3.900000 12.500000 5.824897 +-3.900000 12.600000 5.500509 +-3.900000 12.700000 5.196121 +-3.900000 12.800000 4.911733 +-3.900000 12.900000 4.647345 +-3.900000 13.000000 4.402958 +-3.900000 13.100000 4.178570 +-3.900000 13.200000 3.974182 +-3.900000 13.300000 3.789794 +-3.900000 13.400000 3.625406 +-3.900000 13.500000 3.481018 +-3.900000 13.600000 3.356631 +-3.900000 13.700000 3.252243 +-3.900000 13.800000 3.167855 +-3.900000 13.900000 3.103467 +-3.900000 14.000000 3.059079 +-3.900000 14.100000 3.034691 +-3.900000 14.200000 3.030304 +-3.900000 14.300000 3.045916 +-3.900000 14.400000 3.081528 +-3.900000 14.500000 3.137140 +-3.900000 14.600000 3.212752 +-3.900000 14.700000 3.308364 +-3.900000 14.800000 3.423977 +-3.900000 14.900000 3.559589 +-3.900000 15.000000 3.715201 + +-3.800000 -5.000000 360.118415 +-3.800000 -4.900000 356.345753 +-3.800000 -4.800000 352.593091 +-3.800000 -4.700000 348.860428 +-3.800000 -4.600000 345.147766 +-3.800000 -4.500000 341.455103 +-3.800000 -4.400000 337.782441 +-3.800000 -4.300000 334.129778 +-3.800000 -4.200000 330.497116 +-3.800000 -4.100000 326.884454 +-3.800000 -4.000000 323.291791 +-3.800000 -3.900000 319.719129 +-3.800000 -3.800000 316.166466 +-3.800000 -3.700000 312.633804 +-3.800000 -3.600000 309.121141 +-3.800000 -3.500000 305.628479 +-3.800000 -3.400000 302.155817 +-3.800000 -3.300000 298.703154 +-3.800000 -3.200000 295.270492 +-3.800000 -3.100000 291.857829 +-3.800000 -3.000000 288.465167 +-3.800000 -2.900000 285.092504 +-3.800000 -2.800000 281.739842 +-3.800000 -2.700000 278.407180 +-3.800000 -2.600000 275.094517 +-3.800000 -2.500000 271.801855 +-3.800000 -2.400000 268.529192 +-3.800000 -2.300000 265.276530 +-3.800000 -2.200000 262.043867 +-3.800000 -2.100000 258.831205 +-3.800000 -2.000000 255.638543 +-3.800000 -1.900000 252.465880 +-3.800000 -1.800000 249.313218 +-3.800000 -1.700000 246.180555 +-3.800000 -1.600000 243.067893 +-3.800000 -1.500000 239.975230 +-3.800000 -1.400000 236.902568 +-3.800000 -1.300000 233.849905 +-3.800000 -1.200000 230.817243 +-3.800000 -1.100000 227.804581 +-3.800000 -1.000000 224.811918 +-3.800000 -0.900000 221.839256 +-3.800000 -0.800000 218.886593 +-3.800000 -0.700000 215.953931 +-3.800000 -0.600000 213.041268 +-3.800000 -0.500000 210.148606 +-3.800000 -0.400000 207.275944 +-3.800000 -0.300000 204.423281 +-3.800000 -0.200000 201.590619 +-3.800000 -0.100000 198.777956 +-3.800000 -0.000000 195.985294 +-3.800000 0.100000 193.212631 +-3.800000 0.200000 190.459969 +-3.800000 0.300000 187.727307 +-3.800000 0.400000 185.014644 +-3.800000 0.500000 182.321982 +-3.800000 0.600000 179.649319 +-3.800000 0.700000 176.996657 +-3.800000 0.800000 174.363994 +-3.800000 0.900000 171.751332 +-3.800000 1.000000 169.158670 +-3.800000 1.100000 166.586007 +-3.800000 1.200000 164.033345 +-3.800000 1.300000 161.500682 +-3.800000 1.400000 158.988020 +-3.800000 1.500000 156.495357 +-3.800000 1.600000 154.022695 +-3.800000 1.700000 151.570033 +-3.800000 1.800000 149.137370 +-3.800000 1.900000 146.724708 +-3.800000 2.000000 144.332045 +-3.800000 2.100000 141.959383 +-3.800000 2.200000 139.606720 +-3.800000 2.300000 137.274058 +-3.800000 2.400000 134.961396 +-3.800000 2.500000 132.668733 +-3.800000 2.600000 130.396071 +-3.800000 2.700000 128.143408 +-3.800000 2.800000 125.910746 +-3.800000 2.900000 123.698083 +-3.800000 3.000000 121.505421 +-3.800000 3.100000 119.332759 +-3.800000 3.200000 117.180096 +-3.800000 3.300000 115.047434 +-3.800000 3.400000 112.934771 +-3.800000 3.500000 110.842109 +-3.800000 3.600000 108.769446 +-3.800000 3.700000 106.716784 +-3.800000 3.800000 104.684122 +-3.800000 3.900000 102.671459 +-3.800000 4.000000 100.678797 +-3.800000 4.100000 98.706134 +-3.800000 4.200000 96.753472 +-3.800000 4.300000 94.820809 +-3.800000 4.400000 92.908147 +-3.800000 4.500000 91.015485 +-3.800000 4.600000 89.142822 +-3.800000 4.700000 87.290160 +-3.800000 4.800000 85.457497 +-3.800000 4.900000 83.644835 +-3.800000 5.000000 81.852172 +-3.800000 5.100000 80.079510 +-3.800000 5.200000 78.326848 +-3.800000 5.300000 76.594185 +-3.800000 5.400000 74.881523 +-3.800000 5.500000 73.188860 +-3.800000 5.600000 71.516198 +-3.800000 5.700000 69.863535 +-3.800000 5.800000 68.230873 +-3.800000 5.900000 66.618211 +-3.800000 6.000000 65.025548 +-3.800000 6.100000 63.452886 +-3.800000 6.200000 61.900223 +-3.800000 6.300000 60.367561 +-3.800000 6.400000 58.854898 +-3.800000 6.500000 57.362236 +-3.800000 6.600000 55.889574 +-3.800000 6.700000 54.436911 +-3.800000 6.800000 53.004249 +-3.800000 6.900000 51.591586 +-3.800000 7.000000 50.198924 +-3.800000 7.100000 48.826261 +-3.800000 7.200000 47.473599 +-3.800000 7.300000 46.140937 +-3.800000 7.400000 44.828274 +-3.800000 7.500000 43.535612 +-3.800000 7.600000 42.262949 +-3.800000 7.700000 41.010287 +-3.800000 7.800000 39.777624 +-3.800000 7.900000 38.564962 +-3.800000 8.000000 37.372300 +-3.800000 8.100000 36.199637 +-3.800000 8.200000 35.046975 +-3.800000 8.300000 33.914312 +-3.800000 8.400000 32.801650 +-3.800000 8.500000 31.708987 +-3.800000 8.600000 30.636325 +-3.800000 8.700000 29.583663 +-3.800000 8.800000 28.551000 +-3.800000 8.900000 27.538338 +-3.800000 9.000000 26.545675 +-3.800000 9.100000 25.573013 +-3.800000 9.200000 24.620350 +-3.800000 9.300000 23.687688 +-3.800000 9.400000 22.775025 +-3.800000 9.500000 21.882363 +-3.800000 9.600000 21.009701 +-3.800000 9.700000 20.157038 +-3.800000 9.800000 19.324376 +-3.800000 9.900000 18.511713 +-3.800000 10.000000 17.719051 +-3.800000 10.100000 16.946388 +-3.800000 10.200000 16.193726 +-3.800000 10.300000 15.461064 +-3.800000 10.400000 14.748401 +-3.800000 10.500000 14.055739 +-3.800000 10.600000 13.383076 +-3.800000 10.700000 12.730414 +-3.800000 10.800000 12.097751 +-3.800000 10.900000 11.485089 +-3.800000 11.000000 10.892427 +-3.800000 11.100000 10.319764 +-3.800000 11.200000 9.767102 +-3.800000 11.300000 9.234439 +-3.800000 11.400000 8.721777 +-3.800000 11.500000 8.229114 +-3.800000 11.600000 7.756452 +-3.800000 11.700000 7.303790 +-3.800000 11.800000 6.871127 +-3.800000 11.900000 6.458465 +-3.800000 12.000000 6.065802 +-3.800000 12.100000 5.693140 +-3.800000 12.200000 5.340477 +-3.800000 12.300000 5.007815 +-3.800000 12.400000 4.695153 +-3.800000 12.500000 4.402490 +-3.800000 12.600000 4.129828 +-3.800000 12.700000 3.877165 +-3.800000 12.800000 3.644503 +-3.800000 12.900000 3.431840 +-3.800000 13.000000 3.239178 +-3.800000 13.100000 3.066516 +-3.800000 13.200000 2.913853 +-3.800000 13.300000 2.781191 +-3.800000 13.400000 2.668528 +-3.800000 13.500000 2.575866 +-3.800000 13.600000 2.503203 +-3.800000 13.700000 2.450541 +-3.800000 13.800000 2.417879 +-3.800000 13.900000 2.405216 +-3.800000 14.000000 2.412554 +-3.800000 14.100000 2.439891 +-3.800000 14.200000 2.487229 +-3.800000 14.300000 2.554566 +-3.800000 14.400000 2.641904 +-3.800000 14.500000 2.749242 +-3.800000 14.600000 2.876579 +-3.800000 14.700000 3.023917 +-3.800000 14.800000 3.191254 +-3.800000 14.900000 3.378592 +-3.800000 15.000000 3.585929 + +-3.700000 -5.000000 349.950128 +-3.700000 -4.900000 346.228674 +-3.700000 -4.800000 342.527220 +-3.700000 -4.700000 338.845767 +-3.700000 -4.600000 335.184313 +-3.700000 -4.500000 331.542859 +-3.700000 -4.400000 327.921405 +-3.700000 -4.300000 324.319952 +-3.700000 -4.200000 320.738498 +-3.700000 -4.100000 317.177044 +-3.700000 -4.000000 313.635590 +-3.700000 -3.900000 310.114137 +-3.700000 -3.800000 306.612683 +-3.700000 -3.700000 303.131229 +-3.700000 -3.600000 299.669775 +-3.700000 -3.500000 296.228321 +-3.700000 -3.400000 292.806868 +-3.700000 -3.300000 289.405414 +-3.700000 -3.200000 286.023960 +-3.700000 -3.100000 282.662506 +-3.700000 -3.000000 279.321053 +-3.700000 -2.900000 275.999599 +-3.700000 -2.800000 272.698145 +-3.700000 -2.700000 269.416691 +-3.700000 -2.600000 266.155238 +-3.700000 -2.500000 262.913784 +-3.700000 -2.400000 259.692330 +-3.700000 -2.300000 256.490876 +-3.700000 -2.200000 253.309423 +-3.700000 -2.100000 250.147969 +-3.700000 -2.000000 247.006515 +-3.700000 -1.900000 243.885061 +-3.700000 -1.800000 240.783607 +-3.700000 -1.700000 237.702154 +-3.700000 -1.600000 234.640700 +-3.700000 -1.500000 231.599246 +-3.700000 -1.400000 228.577792 +-3.700000 -1.300000 225.576339 +-3.700000 -1.200000 222.594885 +-3.700000 -1.100000 219.633431 +-3.700000 -1.000000 216.691977 +-3.700000 -0.900000 213.770524 +-3.700000 -0.800000 210.869070 +-3.700000 -0.700000 207.987616 +-3.700000 -0.600000 205.126162 +-3.700000 -0.500000 202.284709 +-3.700000 -0.400000 199.463255 +-3.700000 -0.300000 196.661801 +-3.700000 -0.200000 193.880347 +-3.700000 -0.100000 191.118893 +-3.700000 -0.000000 188.377440 +-3.700000 0.100000 185.655986 +-3.700000 0.200000 182.954532 +-3.700000 0.300000 180.273078 +-3.700000 0.400000 177.611625 +-3.700000 0.500000 174.970171 +-3.700000 0.600000 172.348717 +-3.700000 0.700000 169.747263 +-3.700000 0.800000 167.165810 +-3.700000 0.900000 164.604356 +-3.700000 1.000000 162.062902 +-3.700000 1.100000 159.541448 +-3.700000 1.200000 157.039995 +-3.700000 1.300000 154.558541 +-3.700000 1.400000 152.097087 +-3.700000 1.500000 149.655633 +-3.700000 1.600000 147.234179 +-3.700000 1.700000 144.832726 +-3.700000 1.800000 142.451272 +-3.700000 1.900000 140.089818 +-3.700000 2.000000 137.748364 +-3.700000 2.100000 135.426911 +-3.700000 2.200000 133.125457 +-3.700000 2.300000 130.844003 +-3.700000 2.400000 128.582549 +-3.700000 2.500000 126.341096 +-3.700000 2.600000 124.119642 +-3.700000 2.700000 121.918188 +-3.700000 2.800000 119.736734 +-3.700000 2.900000 117.575281 +-3.700000 3.000000 115.433827 +-3.700000 3.100000 113.312373 +-3.700000 3.200000 111.210919 +-3.700000 3.300000 109.129465 +-3.700000 3.400000 107.068012 +-3.700000 3.500000 105.026558 +-3.700000 3.600000 103.005104 +-3.700000 3.700000 101.003650 +-3.700000 3.800000 99.022197 +-3.700000 3.900000 97.060743 +-3.700000 4.000000 95.119289 +-3.700000 4.100000 93.197835 +-3.700000 4.200000 91.296382 +-3.700000 4.300000 89.414928 +-3.700000 4.400000 87.553474 +-3.700000 4.500000 85.712020 +-3.700000 4.600000 83.890567 +-3.700000 4.700000 82.089113 +-3.700000 4.800000 80.307659 +-3.700000 4.900000 78.546205 +-3.700000 5.000000 76.804751 +-3.700000 5.100000 75.083298 +-3.700000 5.200000 73.381844 +-3.700000 5.300000 71.700390 +-3.700000 5.400000 70.038936 +-3.700000 5.500000 68.397483 +-3.700000 5.600000 66.776029 +-3.700000 5.700000 65.174575 +-3.700000 5.800000 63.593121 +-3.700000 5.900000 62.031668 +-3.700000 6.000000 60.490214 +-3.700000 6.100000 58.968760 +-3.700000 6.200000 57.467306 +-3.700000 6.300000 55.985853 +-3.700000 6.400000 54.524399 +-3.700000 6.500000 53.082945 +-3.700000 6.600000 51.661491 +-3.700000 6.700000 50.260037 +-3.700000 6.800000 48.878584 +-3.700000 6.900000 47.517130 +-3.700000 7.000000 46.175676 +-3.700000 7.100000 44.854222 +-3.700000 7.200000 43.552769 +-3.700000 7.300000 42.271315 +-3.700000 7.400000 41.009861 +-3.700000 7.500000 39.768407 +-3.700000 7.600000 38.546954 +-3.700000 7.700000 37.345500 +-3.700000 7.800000 36.164046 +-3.700000 7.900000 35.002592 +-3.700000 8.000000 33.861139 +-3.700000 8.100000 32.739685 +-3.700000 8.200000 31.638231 +-3.700000 8.300000 30.556777 +-3.700000 8.400000 29.495323 +-3.700000 8.500000 28.453870 +-3.700000 8.600000 27.432416 +-3.700000 8.700000 26.430962 +-3.700000 8.800000 25.449508 +-3.700000 8.900000 24.488055 +-3.700000 9.000000 23.546601 +-3.700000 9.100000 22.625147 +-3.700000 9.200000 21.723693 +-3.700000 9.300000 20.842240 +-3.700000 9.400000 19.980786 +-3.700000 9.500000 19.139332 +-3.700000 9.600000 18.317878 +-3.700000 9.700000 17.516425 +-3.700000 9.800000 16.734971 +-3.700000 9.900000 15.973517 +-3.700000 10.000000 15.232063 +-3.700000 10.100000 14.510609 +-3.700000 10.200000 13.809156 +-3.700000 10.300000 13.127702 +-3.700000 10.400000 12.466248 +-3.700000 10.500000 11.824794 +-3.700000 10.600000 11.203341 +-3.700000 10.700000 10.601887 +-3.700000 10.800000 10.020433 +-3.700000 10.900000 9.458979 +-3.700000 11.000000 8.917526 +-3.700000 11.100000 8.396072 +-3.700000 11.200000 7.894618 +-3.700000 11.300000 7.413164 +-3.700000 11.400000 6.951711 +-3.700000 11.500000 6.510257 +-3.700000 11.600000 6.088803 +-3.700000 11.700000 5.687349 +-3.700000 11.800000 5.305895 +-3.700000 11.900000 4.944442 +-3.700000 12.000000 4.602988 +-3.700000 12.100000 4.281534 +-3.700000 12.200000 3.980080 +-3.700000 12.300000 3.698627 +-3.700000 12.400000 3.437173 +-3.700000 12.500000 3.195719 +-3.700000 12.600000 2.974265 +-3.700000 12.700000 2.772812 +-3.700000 12.800000 2.591358 +-3.700000 12.900000 2.429904 +-3.700000 13.000000 2.288450 +-3.700000 13.100000 2.166997 +-3.700000 13.200000 2.065543 +-3.700000 13.300000 1.984089 +-3.700000 13.400000 1.922635 +-3.700000 13.500000 1.881181 +-3.700000 13.600000 1.859728 +-3.700000 13.700000 1.858274 +-3.700000 13.800000 1.876820 +-3.700000 13.900000 1.915366 +-3.700000 14.000000 1.973913 +-3.700000 14.100000 2.052459 +-3.700000 14.200000 2.151005 +-3.700000 14.300000 2.269551 +-3.700000 14.400000 2.408098 +-3.700000 14.500000 2.566644 +-3.700000 14.600000 2.745190 +-3.700000 14.700000 2.943736 +-3.700000 14.800000 3.162283 +-3.700000 14.900000 3.400829 +-3.700000 15.000000 3.659375 + +-3.600000 -5.000000 340.089417 +-3.600000 -4.900000 336.418656 +-3.600000 -4.800000 332.767894 +-3.600000 -4.700000 329.137132 +-3.600000 -4.600000 325.526370 +-3.600000 -4.500000 321.935608 +-3.600000 -4.400000 318.364846 +-3.600000 -4.300000 314.814085 +-3.600000 -4.200000 311.283323 +-3.600000 -4.100000 307.772561 +-3.600000 -4.000000 304.281799 +-3.600000 -3.900000 300.811037 +-3.600000 -3.800000 297.360275 +-3.600000 -3.700000 293.929513 +-3.600000 -3.600000 290.518752 +-3.600000 -3.500000 287.127990 +-3.600000 -3.400000 283.757228 +-3.600000 -3.300000 280.406466 +-3.600000 -3.200000 277.075704 +-3.600000 -3.100000 273.764942 +-3.600000 -3.000000 270.474181 +-3.600000 -2.900000 267.203419 +-3.600000 -2.800000 263.952657 +-3.600000 -2.700000 260.721895 +-3.600000 -2.600000 257.511133 +-3.600000 -2.500000 254.320371 +-3.600000 -2.400000 251.149610 +-3.600000 -2.300000 247.998848 +-3.600000 -2.200000 244.868086 +-3.600000 -2.100000 241.757324 +-3.600000 -2.000000 238.666562 +-3.600000 -1.900000 235.595800 +-3.600000 -1.800000 232.545039 +-3.600000 -1.700000 229.514277 +-3.600000 -1.600000 226.503515 +-3.600000 -1.500000 223.512753 +-3.600000 -1.400000 220.541991 +-3.600000 -1.300000 217.591229 +-3.600000 -1.200000 214.660468 +-3.600000 -1.100000 211.749706 +-3.600000 -1.000000 208.858944 +-3.600000 -0.900000 205.988182 +-3.600000 -0.800000 203.137420 +-3.600000 -0.700000 200.306658 +-3.600000 -0.600000 197.495896 +-3.600000 -0.500000 194.705135 +-3.600000 -0.400000 191.934373 +-3.600000 -0.300000 189.183611 +-3.600000 -0.200000 186.452849 +-3.600000 -0.100000 183.742087 +-3.600000 -0.000000 181.051325 +-3.600000 0.100000 178.380564 +-3.600000 0.200000 175.729802 +-3.600000 0.300000 173.099040 +-3.600000 0.400000 170.488278 +-3.600000 0.500000 167.897516 +-3.600000 0.600000 165.326754 +-3.600000 0.700000 162.775993 +-3.600000 0.800000 160.245231 +-3.600000 0.900000 157.734469 +-3.600000 1.000000 155.243707 +-3.600000 1.100000 152.772945 +-3.600000 1.200000 150.322183 +-3.600000 1.300000 147.891422 +-3.600000 1.400000 145.480660 +-3.600000 1.500000 143.089898 +-3.600000 1.600000 140.719136 +-3.600000 1.700000 138.368374 +-3.600000 1.800000 136.037612 +-3.600000 1.900000 133.726851 +-3.600000 2.000000 131.436089 +-3.600000 2.100000 129.165327 +-3.600000 2.200000 126.914565 +-3.600000 2.300000 124.683803 +-3.600000 2.400000 122.473041 +-3.600000 2.500000 120.282280 +-3.600000 2.600000 118.111518 +-3.600000 2.700000 115.960756 +-3.600000 2.800000 113.829994 +-3.600000 2.900000 111.719232 +-3.600000 3.000000 109.628470 +-3.600000 3.100000 107.557708 +-3.600000 3.200000 105.506947 +-3.600000 3.300000 103.476185 +-3.600000 3.400000 101.465423 +-3.600000 3.500000 99.474661 +-3.600000 3.600000 97.503899 +-3.600000 3.700000 95.553137 +-3.600000 3.800000 93.622376 +-3.600000 3.900000 91.711614 +-3.600000 4.000000 89.820852 +-3.600000 4.100000 87.950090 +-3.600000 4.200000 86.099328 +-3.600000 4.300000 84.268566 +-3.600000 4.400000 82.457805 +-3.600000 4.500000 80.667043 +-3.600000 4.600000 78.896281 +-3.600000 4.700000 77.145519 +-3.600000 4.800000 75.414757 +-3.600000 4.900000 73.703995 +-3.600000 5.000000 72.013234 +-3.600000 5.100000 70.342472 +-3.600000 5.200000 68.691710 +-3.600000 5.300000 67.060948 +-3.600000 5.400000 65.450186 +-3.600000 5.500000 63.859424 +-3.600000 5.600000 62.288663 +-3.600000 5.700000 60.737901 +-3.600000 5.800000 59.207139 +-3.600000 5.900000 57.696377 +-3.600000 6.000000 56.205615 +-3.600000 6.100000 54.734853 +-3.600000 6.200000 53.284092 +-3.600000 6.300000 51.853330 +-3.600000 6.400000 50.442568 +-3.600000 6.500000 49.051806 +-3.600000 6.600000 47.681044 +-3.600000 6.700000 46.330282 +-3.600000 6.800000 44.999520 +-3.600000 6.900000 43.688759 +-3.600000 7.000000 42.397997 +-3.600000 7.100000 41.127235 +-3.600000 7.200000 39.876473 +-3.600000 7.300000 38.645711 +-3.600000 7.400000 37.434949 +-3.600000 7.500000 36.244188 +-3.600000 7.600000 35.073426 +-3.600000 7.700000 33.922664 +-3.600000 7.800000 32.791902 +-3.600000 7.900000 31.681140 +-3.600000 8.000000 30.590378 +-3.600000 8.100000 29.519617 +-3.600000 8.200000 28.468855 +-3.600000 8.300000 27.438093 +-3.600000 8.400000 26.427331 +-3.600000 8.500000 25.436569 +-3.600000 8.600000 24.465807 +-3.600000 8.700000 23.515046 +-3.600000 8.800000 22.584284 +-3.600000 8.900000 21.673522 +-3.600000 9.000000 20.782760 +-3.600000 9.100000 19.911998 +-3.600000 9.200000 19.061236 +-3.600000 9.300000 18.230475 +-3.600000 9.400000 17.419713 +-3.600000 9.500000 16.628951 +-3.600000 9.600000 15.858189 +-3.600000 9.700000 15.107427 +-3.600000 9.800000 14.376665 +-3.600000 9.900000 13.665904 +-3.600000 10.000000 12.975142 +-3.600000 10.100000 12.304380 +-3.600000 10.200000 11.653618 +-3.600000 10.300000 11.022856 +-3.600000 10.400000 10.412094 +-3.600000 10.500000 9.821332 +-3.600000 10.600000 9.250571 +-3.600000 10.700000 8.699809 +-3.600000 10.800000 8.169047 +-3.600000 10.900000 7.658285 +-3.600000 11.000000 7.167523 +-3.600000 11.100000 6.696761 +-3.600000 11.200000 6.246000 +-3.600000 11.300000 5.815238 +-3.600000 11.400000 5.404476 +-3.600000 11.500000 5.013714 +-3.600000 11.600000 4.642952 +-3.600000 11.700000 4.292190 +-3.600000 11.800000 3.961429 +-3.600000 11.900000 3.650667 +-3.600000 12.000000 3.359905 +-3.600000 12.100000 3.089143 +-3.600000 12.200000 2.838381 +-3.600000 12.300000 2.607619 +-3.600000 12.400000 2.396858 +-3.600000 12.500000 2.206096 +-3.600000 12.600000 2.035334 +-3.600000 12.700000 1.884572 +-3.600000 12.800000 1.753810 +-3.600000 12.900000 1.643048 +-3.600000 13.000000 1.552287 +-3.600000 13.100000 1.481525 +-3.600000 13.200000 1.430763 +-3.600000 13.300000 1.400001 +-3.600000 13.400000 1.389239 +-3.600000 13.500000 1.398477 +-3.600000 13.600000 1.427716 +-3.600000 13.700000 1.476954 +-3.600000 13.800000 1.546192 +-3.600000 13.900000 1.635430 +-3.600000 14.000000 1.744668 +-3.600000 14.100000 1.873906 +-3.600000 14.200000 2.023144 +-3.600000 14.300000 2.192383 +-3.600000 14.400000 2.381621 +-3.600000 14.500000 2.590859 +-3.600000 14.600000 2.820097 +-3.600000 14.700000 3.069335 +-3.600000 14.800000 3.338573 +-3.600000 14.900000 3.627812 +-3.600000 15.000000 3.937050 + +-3.500000 -5.000000 330.537023 +-3.500000 -4.900000 326.916436 +-3.500000 -4.800000 323.315850 +-3.500000 -4.700000 319.735263 +-3.500000 -4.600000 316.174676 +-3.500000 -4.500000 312.634090 +-3.500000 -4.400000 309.113503 +-3.500000 -4.300000 305.612916 +-3.500000 -4.200000 302.132330 +-3.500000 -4.100000 298.671743 +-3.500000 -4.000000 295.231156 +-3.500000 -3.900000 291.810570 +-3.500000 -3.800000 288.409983 +-3.500000 -3.700000 285.029396 +-3.500000 -3.600000 281.668810 +-3.500000 -3.500000 278.328223 +-3.500000 -3.400000 275.007636 +-3.500000 -3.300000 271.707050 +-3.500000 -3.200000 268.426463 +-3.500000 -3.100000 265.165876 +-3.500000 -3.000000 261.925290 +-3.500000 -2.900000 258.704703 +-3.500000 -2.800000 255.504117 +-3.500000 -2.700000 252.323530 +-3.500000 -2.600000 249.162943 +-3.500000 -2.500000 246.022357 +-3.500000 -2.400000 242.901770 +-3.500000 -2.300000 239.801183 +-3.500000 -2.200000 236.720597 +-3.500000 -2.100000 233.660010 +-3.500000 -2.000000 230.619423 +-3.500000 -1.900000 227.598837 +-3.500000 -1.800000 224.598250 +-3.500000 -1.700000 221.617663 +-3.500000 -1.600000 218.657077 +-3.500000 -1.500000 215.716490 +-3.500000 -1.400000 212.795903 +-3.500000 -1.300000 209.895317 +-3.500000 -1.200000 207.014730 +-3.500000 -1.100000 204.154143 +-3.500000 -1.000000 201.313557 +-3.500000 -0.900000 198.492970 +-3.500000 -0.800000 195.692384 +-3.500000 -0.700000 192.911797 +-3.500000 -0.600000 190.151210 +-3.500000 -0.500000 187.410624 +-3.500000 -0.400000 184.690037 +-3.500000 -0.300000 181.989450 +-3.500000 -0.200000 179.308864 +-3.500000 -0.100000 176.648277 +-3.500000 -0.000000 174.007690 +-3.500000 0.100000 171.387104 +-3.500000 0.200000 168.786517 +-3.500000 0.300000 166.205930 +-3.500000 0.400000 163.645344 +-3.500000 0.500000 161.104757 +-3.500000 0.600000 158.584170 +-3.500000 0.700000 156.083584 +-3.500000 0.800000 153.602997 +-3.500000 0.900000 151.142411 +-3.500000 1.000000 148.701824 +-3.500000 1.100000 146.281237 +-3.500000 1.200000 143.880651 +-3.500000 1.300000 141.500064 +-3.500000 1.400000 139.139477 +-3.500000 1.500000 136.798891 +-3.500000 1.600000 134.478304 +-3.500000 1.700000 132.177717 +-3.500000 1.800000 129.897131 +-3.500000 1.900000 127.636544 +-3.500000 2.000000 125.395957 +-3.500000 2.100000 123.175371 +-3.500000 2.200000 120.974784 +-3.500000 2.300000 118.794197 +-3.500000 2.400000 116.633611 +-3.500000 2.500000 114.493024 +-3.500000 2.600000 112.372437 +-3.500000 2.700000 110.271851 +-3.500000 2.800000 108.191264 +-3.500000 2.900000 106.130678 +-3.500000 3.000000 104.090091 +-3.500000 3.100000 102.069504 +-3.500000 3.200000 100.068918 +-3.500000 3.300000 98.088331 +-3.500000 3.400000 96.127744 +-3.500000 3.500000 94.187158 +-3.500000 3.600000 92.266571 +-3.500000 3.700000 90.365984 +-3.500000 3.800000 88.485398 +-3.500000 3.900000 86.624811 +-3.500000 4.000000 84.784224 +-3.500000 4.100000 82.963638 +-3.500000 4.200000 81.163051 +-3.500000 4.300000 79.382464 +-3.500000 4.400000 77.621878 +-3.500000 4.500000 75.881291 +-3.500000 4.600000 74.160705 +-3.500000 4.700000 72.460118 +-3.500000 4.800000 70.779531 +-3.500000 4.900000 69.118945 +-3.500000 5.000000 67.478358 +-3.500000 5.100000 65.857771 +-3.500000 5.200000 64.257185 +-3.500000 5.300000 62.676598 +-3.500000 5.400000 61.116011 +-3.500000 5.500000 59.575425 +-3.500000 5.600000 58.054838 +-3.500000 5.700000 56.554251 +-3.500000 5.800000 55.073665 +-3.500000 5.900000 53.613078 +-3.500000 6.000000 52.172491 +-3.500000 6.100000 50.751905 +-3.500000 6.200000 49.351318 +-3.500000 6.300000 47.970731 +-3.500000 6.400000 46.610145 +-3.500000 6.500000 45.269558 +-3.500000 6.600000 43.948972 +-3.500000 6.700000 42.648385 +-3.500000 6.800000 41.367798 +-3.500000 6.900000 40.107212 +-3.500000 7.000000 38.866625 +-3.500000 7.100000 37.646038 +-3.500000 7.200000 36.445452 +-3.500000 7.300000 35.264865 +-3.500000 7.400000 34.104278 +-3.500000 7.500000 32.963692 +-3.500000 7.600000 31.843105 +-3.500000 7.700000 30.742518 +-3.500000 7.800000 29.661932 +-3.500000 7.900000 28.601345 +-3.500000 8.000000 27.560758 +-3.500000 8.100000 26.540172 +-3.500000 8.200000 25.539585 +-3.500000 8.300000 24.558998 +-3.500000 8.400000 23.598412 +-3.500000 8.500000 22.657825 +-3.500000 8.600000 21.737239 +-3.500000 8.700000 20.836652 +-3.500000 8.800000 19.956065 +-3.500000 8.900000 19.095479 +-3.500000 9.000000 18.254892 +-3.500000 9.100000 17.434305 +-3.500000 9.200000 16.633719 +-3.500000 9.300000 15.853132 +-3.500000 9.400000 15.092545 +-3.500000 9.500000 14.351959 +-3.500000 9.600000 13.631372 +-3.500000 9.700000 12.930785 +-3.500000 9.800000 12.250199 +-3.500000 9.900000 11.589612 +-3.500000 10.000000 10.949025 +-3.500000 10.100000 10.328439 +-3.500000 10.200000 9.727852 +-3.500000 10.300000 9.147266 +-3.500000 10.400000 8.586679 +-3.500000 10.500000 8.046092 +-3.500000 10.600000 7.525506 +-3.500000 10.700000 7.024919 +-3.500000 10.800000 6.544332 +-3.500000 10.900000 6.083746 +-3.500000 11.000000 5.643159 +-3.500000 11.100000 5.222572 +-3.500000 11.200000 4.821986 +-3.500000 11.300000 4.441399 +-3.500000 11.400000 4.080812 +-3.500000 11.500000 3.740226 +-3.500000 11.600000 3.419639 +-3.500000 11.700000 3.119052 +-3.500000 11.800000 2.838466 +-3.500000 11.900000 2.577879 +-3.500000 12.000000 2.337292 +-3.500000 12.100000 2.116706 +-3.500000 12.200000 1.916119 +-3.500000 12.300000 1.735533 +-3.500000 12.400000 1.574946 +-3.500000 12.500000 1.434359 +-3.500000 12.600000 1.313773 +-3.500000 12.700000 1.213186 +-3.500000 12.800000 1.132599 +-3.500000 12.900000 1.072013 +-3.500000 13.000000 1.031426 +-3.500000 13.100000 1.010839 +-3.500000 13.200000 1.010253 +-3.500000 13.300000 1.029666 +-3.500000 13.400000 1.069079 +-3.500000 13.500000 1.128493 +-3.500000 13.600000 1.207906 +-3.500000 13.700000 1.307319 +-3.500000 13.800000 1.426733 +-3.500000 13.900000 1.566146 +-3.500000 14.000000 1.725559 +-3.500000 14.100000 1.904973 +-3.500000 14.200000 2.104386 +-3.500000 14.300000 2.323800 +-3.500000 14.400000 2.563213 +-3.500000 14.500000 2.822626 +-3.500000 14.600000 3.102040 +-3.500000 14.700000 3.401453 +-3.500000 14.800000 3.720866 +-3.500000 14.900000 4.060280 +-3.500000 15.000000 4.419693 + +-3.400000 -5.000000 321.292864 +-3.400000 -4.900000 317.721936 +-3.400000 -4.800000 314.171007 +-3.400000 -4.700000 310.640079 +-3.400000 -4.600000 307.129151 +-3.400000 -4.500000 303.638223 +-3.400000 -4.400000 300.167295 +-3.400000 -4.300000 296.716366 +-3.400000 -4.200000 293.285438 +-3.400000 -4.100000 289.874510 +-3.400000 -4.000000 286.483582 +-3.400000 -3.900000 283.112654 +-3.400000 -3.800000 279.761725 +-3.400000 -3.700000 276.430797 +-3.400000 -3.600000 273.119869 +-3.400000 -3.500000 269.828941 +-3.400000 -3.400000 266.558013 +-3.400000 -3.300000 263.307084 +-3.400000 -3.200000 260.076156 +-3.400000 -3.100000 256.865228 +-3.400000 -3.000000 253.674300 +-3.400000 -2.900000 250.503372 +-3.400000 -2.800000 247.352444 +-3.400000 -2.700000 244.221515 +-3.400000 -2.600000 241.110587 +-3.400000 -2.500000 238.019659 +-3.400000 -2.400000 234.948731 +-3.400000 -2.300000 231.897803 +-3.400000 -2.200000 228.866874 +-3.400000 -2.100000 225.855946 +-3.400000 -2.000000 222.865018 +-3.400000 -1.900000 219.894090 +-3.400000 -1.800000 216.943162 +-3.400000 -1.700000 214.012233 +-3.400000 -1.600000 211.101305 +-3.400000 -1.500000 208.210377 +-3.400000 -1.400000 205.339449 +-3.400000 -1.300000 202.488521 +-3.400000 -1.200000 199.657592 +-3.400000 -1.100000 196.846664 +-3.400000 -1.000000 194.055736 +-3.400000 -0.900000 191.284808 +-3.400000 -0.800000 188.533880 +-3.400000 -0.700000 185.802951 +-3.400000 -0.600000 183.092023 +-3.400000 -0.500000 180.401095 +-3.400000 -0.400000 177.730167 +-3.400000 -0.300000 175.079239 +-3.400000 -0.200000 172.448310 +-3.400000 -0.100000 169.837382 +-3.400000 -0.000000 167.246454 +-3.400000 0.100000 164.675526 +-3.400000 0.200000 162.124598 +-3.400000 0.300000 159.593669 +-3.400000 0.400000 157.082741 +-3.400000 0.500000 154.591813 +-3.400000 0.600000 152.120885 +-3.400000 0.700000 149.669957 +-3.400000 0.800000 147.239028 +-3.400000 0.900000 144.828100 +-3.400000 1.000000 142.437172 +-3.400000 1.100000 140.066244 +-3.400000 1.200000 137.715316 +-3.400000 1.300000 135.384387 +-3.400000 1.400000 133.073459 +-3.400000 1.500000 130.782531 +-3.400000 1.600000 128.511603 +-3.400000 1.700000 126.260675 +-3.400000 1.800000 124.029746 +-3.400000 1.900000 121.818818 +-3.400000 2.000000 119.627890 +-3.400000 2.100000 117.456962 +-3.400000 2.200000 115.306034 +-3.400000 2.300000 113.175105 +-3.400000 2.400000 111.064177 +-3.400000 2.500000 108.973249 +-3.400000 2.600000 106.902321 +-3.400000 2.700000 104.851393 +-3.400000 2.800000 102.820464 +-3.400000 2.900000 100.809536 +-3.400000 3.000000 98.818608 +-3.400000 3.100000 96.847680 +-3.400000 3.200000 94.896752 +-3.400000 3.300000 92.965823 +-3.400000 3.400000 91.054895 +-3.400000 3.500000 89.163967 +-3.400000 3.600000 87.293039 +-3.400000 3.700000 85.442111 +-3.400000 3.800000 83.611182 +-3.400000 3.900000 81.800254 +-3.400000 4.000000 80.009326 +-3.400000 4.100000 78.238398 +-3.400000 4.200000 76.487470 +-3.400000 4.300000 74.756541 +-3.400000 4.400000 73.045613 +-3.400000 4.500000 71.354685 +-3.400000 4.600000 69.683757 +-3.400000 4.700000 68.032829 +-3.400000 4.800000 66.401900 +-3.400000 4.900000 64.790972 +-3.400000 5.000000 63.200044 +-3.400000 5.100000 61.629116 +-3.400000 5.200000 60.078188 +-3.400000 5.300000 58.547259 +-3.400000 5.400000 57.036331 +-3.400000 5.500000 55.545403 +-3.400000 5.600000 54.074475 +-3.400000 5.700000 52.623547 +-3.400000 5.800000 51.192618 +-3.400000 5.900000 49.781690 +-3.400000 6.000000 48.390762 +-3.400000 6.100000 47.019834 +-3.400000 6.200000 45.668906 +-3.400000 6.300000 44.337977 +-3.400000 6.400000 43.027049 +-3.400000 6.500000 41.736121 +-3.400000 6.600000 40.465193 +-3.400000 6.700000 39.214265 +-3.400000 6.800000 37.983336 +-3.400000 6.900000 36.772408 +-3.400000 7.000000 35.581480 +-3.400000 7.100000 34.410552 +-3.400000 7.200000 33.259624 +-3.400000 7.300000 32.128695 +-3.400000 7.400000 31.017767 +-3.400000 7.500000 29.926839 +-3.400000 7.600000 28.855911 +-3.400000 7.700000 27.804983 +-3.400000 7.800000 26.774054 +-3.400000 7.900000 25.763126 +-3.400000 8.000000 24.772198 +-3.400000 8.100000 23.801270 +-3.400000 8.200000 22.850342 +-3.400000 8.300000 21.919414 +-3.400000 8.400000 21.008485 +-3.400000 8.500000 20.117557 +-3.400000 8.600000 19.246629 +-3.400000 8.700000 18.395701 +-3.400000 8.800000 17.564773 +-3.400000 8.900000 16.753844 +-3.400000 9.000000 15.962916 +-3.400000 9.100000 15.191988 +-3.400000 9.200000 14.441060 +-3.400000 9.300000 13.710132 +-3.400000 9.400000 12.999203 +-3.400000 9.500000 12.308275 +-3.400000 9.600000 11.637347 +-3.400000 9.700000 10.986419 +-3.400000 9.800000 10.355491 +-3.400000 9.900000 9.744562 +-3.400000 10.000000 9.153634 +-3.400000 10.100000 8.582706 +-3.400000 10.200000 8.031778 +-3.400000 10.300000 7.500850 +-3.400000 10.400000 6.989921 +-3.400000 10.500000 6.498993 +-3.400000 10.600000 6.028065 +-3.400000 10.700000 5.577137 +-3.400000 10.800000 5.146209 +-3.400000 10.900000 4.735280 +-3.400000 11.000000 4.344352 +-3.400000 11.100000 3.973424 +-3.400000 11.200000 3.622496 +-3.400000 11.300000 3.291568 +-3.400000 11.400000 2.980639 +-3.400000 11.500000 2.689711 +-3.400000 11.600000 2.418783 +-3.400000 11.700000 2.167855 +-3.400000 11.800000 1.936927 +-3.400000 11.900000 1.725998 +-3.400000 12.000000 1.535070 +-3.400000 12.100000 1.364142 +-3.400000 12.200000 1.213214 +-3.400000 12.300000 1.082286 +-3.400000 12.400000 0.971357 +-3.400000 12.500000 0.880429 +-3.400000 12.600000 0.809501 +-3.400000 12.700000 0.758573 +-3.400000 12.800000 0.727645 +-3.400000 12.900000 0.716716 +-3.400000 13.000000 0.725788 +-3.400000 13.100000 0.754860 +-3.400000 13.200000 0.803932 +-3.400000 13.300000 0.873004 +-3.400000 13.400000 0.962075 +-3.400000 13.500000 1.071147 +-3.400000 13.600000 1.200219 +-3.400000 13.700000 1.349291 +-3.400000 13.800000 1.518363 +-3.400000 13.900000 1.707434 +-3.400000 14.000000 1.916506 +-3.400000 14.100000 2.145578 +-3.400000 14.200000 2.394650 +-3.400000 14.300000 2.663722 +-3.400000 14.400000 2.952793 +-3.400000 14.500000 3.261865 +-3.400000 14.600000 3.590937 +-3.400000 14.700000 3.940009 +-3.400000 14.800000 4.309081 +-3.400000 14.900000 4.698152 +-3.400000 15.000000 5.107224 + +-3.300000 -5.000000 312.356002 +-3.300000 -4.900000 308.834216 +-3.300000 -4.800000 305.332429 +-3.300000 -4.700000 301.850643 +-3.300000 -4.600000 298.388857 +-3.300000 -4.500000 294.947070 +-3.300000 -4.400000 291.525284 +-3.300000 -4.300000 288.123497 +-3.300000 -4.200000 284.741711 +-3.300000 -4.100000 281.379924 +-3.300000 -4.000000 278.038138 +-3.300000 -3.900000 274.716351 +-3.300000 -3.800000 271.414565 +-3.300000 -3.700000 268.132778 +-3.300000 -3.600000 264.870992 +-3.300000 -3.500000 261.629205 +-3.300000 -3.400000 258.407419 +-3.300000 -3.300000 255.205632 +-3.300000 -3.200000 252.023846 +-3.300000 -3.100000 248.862059 +-3.300000 -3.000000 245.720273 +-3.300000 -2.900000 242.598486 +-3.300000 -2.800000 239.496700 +-3.300000 -2.700000 236.414913 +-3.300000 -2.600000 233.353127 +-3.300000 -2.500000 230.311340 +-3.300000 -2.400000 227.289554 +-3.300000 -2.300000 224.287767 +-3.300000 -2.200000 221.305981 +-3.300000 -2.100000 218.344194 +-3.300000 -2.000000 215.402408 +-3.300000 -1.900000 212.480621 +-3.300000 -1.800000 209.578835 +-3.300000 -1.700000 206.697048 +-3.300000 -1.600000 203.835262 +-3.300000 -1.500000 200.993475 +-3.300000 -1.400000 198.171689 +-3.300000 -1.300000 195.369903 +-3.300000 -1.200000 192.588116 +-3.300000 -1.100000 189.826330 +-3.300000 -1.000000 187.084543 +-3.300000 -0.900000 184.362757 +-3.300000 -0.800000 181.660970 +-3.300000 -0.700000 178.979184 +-3.300000 -0.600000 176.317397 +-3.300000 -0.500000 173.675611 +-3.300000 -0.400000 171.053824 +-3.300000 -0.300000 168.452038 +-3.300000 -0.200000 165.870251 +-3.300000 -0.100000 163.308465 +-3.300000 -0.000000 160.766678 +-3.300000 0.100000 158.244892 +-3.300000 0.200000 155.743105 +-3.300000 0.300000 153.261319 +-3.300000 0.400000 150.799532 +-3.300000 0.500000 148.357746 +-3.300000 0.600000 145.935959 +-3.300000 0.700000 143.534173 +-3.300000 0.800000 141.152386 +-3.300000 0.900000 138.790600 +-3.300000 1.000000 136.448813 +-3.300000 1.100000 134.127027 +-3.300000 1.200000 131.825240 +-3.300000 1.300000 129.543454 +-3.300000 1.400000 127.281667 +-3.300000 1.500000 125.039881 +-3.300000 1.600000 122.818094 +-3.300000 1.700000 120.616308 +-3.300000 1.800000 118.434521 +-3.300000 1.900000 116.272735 +-3.300000 2.000000 114.130948 +-3.300000 2.100000 112.009162 +-3.300000 2.200000 109.907376 +-3.300000 2.300000 107.825589 +-3.300000 2.400000 105.763803 +-3.300000 2.500000 103.722016 +-3.300000 2.600000 101.700230 +-3.300000 2.700000 99.698443 +-3.300000 2.800000 97.716657 +-3.300000 2.900000 95.754870 +-3.300000 3.000000 93.813084 +-3.300000 3.100000 91.891297 +-3.300000 3.200000 89.989511 +-3.300000 3.300000 88.107724 +-3.300000 3.400000 86.245938 +-3.300000 3.500000 84.404151 +-3.300000 3.600000 82.582365 +-3.300000 3.700000 80.780578 +-3.300000 3.800000 78.998792 +-3.300000 3.900000 77.237005 +-3.300000 4.000000 75.495219 +-3.300000 4.100000 73.773432 +-3.300000 4.200000 72.071646 +-3.300000 4.300000 70.389859 +-3.300000 4.400000 68.728073 +-3.300000 4.500000 67.086286 +-3.300000 4.600000 65.464500 +-3.300000 4.700000 63.862713 +-3.300000 4.800000 62.280927 +-3.300000 4.900000 60.719140 +-3.300000 5.000000 59.177354 +-3.300000 5.100000 57.655567 +-3.300000 5.200000 56.153781 +-3.300000 5.300000 54.671994 +-3.300000 5.400000 53.210208 +-3.300000 5.500000 51.768422 +-3.300000 5.600000 50.346635 +-3.300000 5.700000 48.944849 +-3.300000 5.800000 47.563062 +-3.300000 5.900000 46.201276 +-3.300000 6.000000 44.859489 +-3.300000 6.100000 43.537703 +-3.300000 6.200000 42.235916 +-3.300000 6.300000 40.954130 +-3.300000 6.400000 39.692343 +-3.300000 6.500000 38.450557 +-3.300000 6.600000 37.228770 +-3.300000 6.700000 36.026984 +-3.300000 6.800000 34.845197 +-3.300000 6.900000 33.683411 +-3.300000 7.000000 32.541624 +-3.300000 7.100000 31.419838 +-3.300000 7.200000 30.318051 +-3.300000 7.300000 29.236265 +-3.300000 7.400000 28.174478 +-3.300000 7.500000 27.132692 +-3.300000 7.600000 26.110905 +-3.300000 7.700000 25.109119 +-3.300000 7.800000 24.127332 +-3.300000 7.900000 23.165546 +-3.300000 8.000000 22.223759 +-3.300000 8.100000 21.301973 +-3.300000 8.200000 20.400186 +-3.300000 8.300000 19.518400 +-3.300000 8.400000 18.656613 +-3.300000 8.500000 17.814827 +-3.300000 8.600000 16.993040 +-3.300000 8.700000 16.191254 +-3.300000 8.800000 15.409467 +-3.300000 8.900000 14.647681 +-3.300000 9.000000 13.905895 +-3.300000 9.100000 13.184108 +-3.300000 9.200000 12.482322 +-3.300000 9.300000 11.800535 +-3.300000 9.400000 11.138749 +-3.300000 9.500000 10.496962 +-3.300000 9.600000 9.875176 +-3.300000 9.700000 9.273389 +-3.300000 9.800000 8.691603 +-3.300000 9.900000 8.129816 +-3.300000 10.000000 7.588030 +-3.300000 10.100000 7.066243 +-3.300000 10.200000 6.564457 +-3.300000 10.300000 6.082670 +-3.300000 10.400000 5.620884 +-3.300000 10.500000 5.179097 +-3.300000 10.600000 4.757311 +-3.300000 10.700000 4.355524 +-3.300000 10.800000 3.973738 +-3.300000 10.900000 3.611951 +-3.300000 11.000000 3.270165 +-3.300000 11.100000 2.948378 +-3.300000 11.200000 2.646592 +-3.300000 11.300000 2.364805 +-3.300000 11.400000 2.103019 +-3.300000 11.500000 1.861232 +-3.300000 11.600000 1.639446 +-3.300000 11.700000 1.437659 +-3.300000 11.800000 1.255873 +-3.300000 11.900000 1.094086 +-3.300000 12.000000 0.952300 +-3.300000 12.100000 0.830513 +-3.300000 12.200000 0.728727 +-3.300000 12.300000 0.646941 +-3.300000 12.400000 0.585154 +-3.300000 12.500000 0.543368 +-3.300000 12.600000 0.521581 +-3.300000 12.700000 0.519795 +-3.300000 12.800000 0.538008 +-3.300000 12.900000 0.576222 +-3.300000 13.000000 0.634435 +-3.300000 13.100000 0.712649 +-3.300000 13.200000 0.810862 +-3.300000 13.300000 0.929076 +-3.300000 13.400000 1.067289 +-3.300000 13.500000 1.225503 +-3.300000 13.600000 1.403716 +-3.300000 13.700000 1.601930 +-3.300000 13.800000 1.820143 +-3.300000 13.900000 2.058357 +-3.300000 14.000000 2.316570 +-3.300000 14.100000 2.594784 +-3.300000 14.200000 2.892997 +-3.300000 14.300000 3.211211 +-3.300000 14.400000 3.549424 +-3.300000 14.500000 3.907638 +-3.300000 14.600000 4.285851 +-3.300000 14.700000 4.684065 +-3.300000 14.800000 5.102278 +-3.300000 14.900000 5.540492 +-3.300000 15.000000 5.998705 + +-3.200000 -5.000000 303.724614 +-3.200000 -4.900000 300.251452 +-3.200000 -4.800000 296.798291 +-3.200000 -4.700000 293.365129 +-3.200000 -4.600000 289.951968 +-3.200000 -4.500000 286.558806 +-3.200000 -4.400000 283.185645 +-3.200000 -4.300000 279.832483 +-3.200000 -4.200000 276.499322 +-3.200000 -4.100000 273.186160 +-3.200000 -4.000000 269.892999 +-3.200000 -3.900000 266.619837 +-3.200000 -3.800000 263.366676 +-3.200000 -3.700000 260.133514 +-3.200000 -3.600000 256.920353 +-3.200000 -3.500000 253.727191 +-3.200000 -3.400000 250.554030 +-3.200000 -3.300000 247.400868 +-3.200000 -3.200000 244.267707 +-3.200000 -3.100000 241.154545 +-3.200000 -3.000000 238.061384 +-3.200000 -2.900000 234.988222 +-3.200000 -2.800000 231.935061 +-3.200000 -2.700000 228.901899 +-3.200000 -2.600000 225.888738 +-3.200000 -2.500000 222.895576 +-3.200000 -2.400000 219.922415 +-3.200000 -2.300000 216.969253 +-3.200000 -2.200000 214.036092 +-3.200000 -2.100000 211.122930 +-3.200000 -2.000000 208.229769 +-3.200000 -1.900000 205.356607 +-3.200000 -1.800000 202.503445 +-3.200000 -1.700000 199.670284 +-3.200000 -1.600000 196.857122 +-3.200000 -1.500000 194.063961 +-3.200000 -1.400000 191.290799 +-3.200000 -1.300000 188.537638 +-3.200000 -1.200000 185.804476 +-3.200000 -1.100000 183.091315 +-3.200000 -1.000000 180.398153 +-3.200000 -0.900000 177.724992 +-3.200000 -0.800000 175.071830 +-3.200000 -0.700000 172.438669 +-3.200000 -0.600000 169.825507 +-3.200000 -0.500000 167.232346 +-3.200000 -0.400000 164.659184 +-3.200000 -0.300000 162.106023 +-3.200000 -0.200000 159.572861 +-3.200000 -0.100000 157.059700 +-3.200000 -0.000000 154.566538 +-3.200000 0.100000 152.093377 +-3.200000 0.200000 149.640215 +-3.200000 0.300000 147.207054 +-3.200000 0.400000 144.793892 +-3.200000 0.500000 142.400731 +-3.200000 0.600000 140.027569 +-3.200000 0.700000 137.674408 +-3.200000 0.800000 135.341246 +-3.200000 0.900000 133.028085 +-3.200000 1.000000 130.734923 +-3.200000 1.100000 128.461762 +-3.200000 1.200000 126.208600 +-3.200000 1.300000 123.975439 +-3.200000 1.400000 121.762277 +-3.200000 1.500000 119.569116 +-3.200000 1.600000 117.395954 +-3.200000 1.700000 115.242793 +-3.200000 1.800000 113.109631 +-3.200000 1.900000 110.996470 +-3.200000 2.000000 108.903308 +-3.200000 2.100000 106.830147 +-3.200000 2.200000 104.776985 +-3.200000 2.300000 102.743824 +-3.200000 2.400000 100.730662 +-3.200000 2.500000 98.737501 +-3.200000 2.600000 96.764339 +-3.200000 2.700000 94.811178 +-3.200000 2.800000 92.878016 +-3.200000 2.900000 90.964854 +-3.200000 3.000000 89.071693 +-3.200000 3.100000 87.198531 +-3.200000 3.200000 85.345370 +-3.200000 3.300000 83.512208 +-3.200000 3.400000 81.699047 +-3.200000 3.500000 79.905885 +-3.200000 3.600000 78.132724 +-3.200000 3.700000 76.379562 +-3.200000 3.800000 74.646401 +-3.200000 3.900000 72.933239 +-3.200000 4.000000 71.240078 +-3.200000 4.100000 69.566916 +-3.200000 4.200000 67.913755 +-3.200000 4.300000 66.280593 +-3.200000 4.400000 64.667432 +-3.200000 4.500000 63.074270 +-3.200000 4.600000 61.501109 +-3.200000 4.700000 59.947947 +-3.200000 4.800000 58.414786 +-3.200000 4.900000 56.901624 +-3.200000 5.000000 55.408463 +-3.200000 5.100000 53.935301 +-3.200000 5.200000 52.482140 +-3.200000 5.300000 51.048978 +-3.200000 5.400000 49.635817 +-3.200000 5.500000 48.242655 +-3.200000 5.600000 46.869494 +-3.200000 5.700000 45.516332 +-3.200000 5.800000 44.183171 +-3.200000 5.900000 42.870009 +-3.200000 6.000000 41.576848 +-3.200000 6.100000 40.303686 +-3.200000 6.200000 39.050525 +-3.200000 6.300000 37.817363 +-3.200000 6.400000 36.604202 +-3.200000 6.500000 35.411040 +-3.200000 6.600000 34.237879 +-3.200000 6.700000 33.084717 +-3.200000 6.800000 31.951556 +-3.200000 6.900000 30.838394 +-3.200000 7.000000 29.745233 +-3.200000 7.100000 28.672071 +-3.200000 7.200000 27.618910 +-3.200000 7.300000 26.585748 +-3.200000 7.400000 25.572587 +-3.200000 7.500000 24.579425 +-3.200000 7.600000 23.606263 +-3.200000 7.700000 22.653102 +-3.200000 7.800000 21.719940 +-3.200000 7.900000 20.806779 +-3.200000 8.000000 19.913617 +-3.200000 8.100000 19.040456 +-3.200000 8.200000 18.187294 +-3.200000 8.300000 17.354133 +-3.200000 8.400000 16.540971 +-3.200000 8.500000 15.747810 +-3.200000 8.600000 14.974648 +-3.200000 8.700000 14.221487 +-3.200000 8.800000 13.488325 +-3.200000 8.900000 12.775164 +-3.200000 9.000000 12.082002 +-3.200000 9.100000 11.408841 +-3.200000 9.200000 10.755679 +-3.200000 9.300000 10.122518 +-3.200000 9.400000 9.509356 +-3.200000 9.500000 8.916195 +-3.200000 9.600000 8.343033 +-3.200000 9.700000 7.789872 +-3.200000 9.800000 7.256710 +-3.200000 9.900000 6.743549 +-3.200000 10.000000 6.250387 +-3.200000 10.100000 5.777226 +-3.200000 10.200000 5.324064 +-3.200000 10.300000 4.890903 +-3.200000 10.400000 4.477741 +-3.200000 10.500000 4.084580 +-3.200000 10.600000 3.711418 +-3.200000 10.700000 3.358257 +-3.200000 10.800000 3.025095 +-3.200000 10.900000 2.711934 +-3.200000 11.000000 2.418772 +-3.200000 11.100000 2.145611 +-3.200000 11.200000 1.892449 +-3.200000 11.300000 1.659288 +-3.200000 11.400000 1.446126 +-3.200000 11.500000 1.252965 +-3.200000 11.600000 1.079803 +-3.200000 11.700000 0.926642 +-3.200000 11.800000 0.793480 +-3.200000 11.900000 0.680319 +-3.200000 12.000000 0.587157 +-3.200000 12.100000 0.513996 +-3.200000 12.200000 0.460834 +-3.200000 12.300000 0.427673 +-3.200000 12.400000 0.414511 +-3.200000 12.500000 0.421349 +-3.200000 12.600000 0.448188 +-3.200000 12.700000 0.495026 +-3.200000 12.800000 0.561865 +-3.200000 12.900000 0.648703 +-3.200000 13.000000 0.755542 +-3.200000 13.100000 0.882380 +-3.200000 13.200000 1.029219 +-3.200000 13.300000 1.196057 +-3.200000 13.400000 1.382896 +-3.200000 13.500000 1.589734 +-3.200000 13.600000 1.816573 +-3.200000 13.700000 2.063411 +-3.200000 13.800000 2.330250 +-3.200000 13.900000 2.617088 +-3.200000 14.000000 2.923927 +-3.200000 14.100000 3.250765 +-3.200000 14.200000 3.597604 +-3.200000 14.300000 3.964442 +-3.200000 14.400000 4.351281 +-3.200000 14.500000 4.758119 +-3.200000 14.600000 5.184958 +-3.200000 14.700000 5.631796 +-3.200000 14.800000 6.098635 +-3.200000 14.900000 6.585473 +-3.200000 15.000000 7.092312 + +-3.100000 -5.000000 295.395967 +-3.100000 -4.900000 291.970913 +-3.100000 -4.800000 288.565860 +-3.100000 -4.700000 285.180807 +-3.100000 -4.600000 281.815753 +-3.100000 -4.500000 278.470700 +-3.100000 -4.400000 275.145647 +-3.100000 -4.300000 271.840594 +-3.100000 -4.200000 268.555540 +-3.100000 -4.100000 265.290487 +-3.100000 -4.000000 262.045434 +-3.100000 -3.900000 258.820381 +-3.100000 -3.800000 255.615327 +-3.100000 -3.700000 252.430274 +-3.100000 -3.600000 249.265221 +-3.100000 -3.500000 246.120167 +-3.100000 -3.400000 242.995114 +-3.100000 -3.300000 239.890061 +-3.100000 -3.200000 236.805008 +-3.100000 -3.100000 233.739954 +-3.100000 -3.000000 230.694901 +-3.100000 -2.900000 227.669848 +-3.100000 -2.800000 224.664795 +-3.100000 -2.700000 221.679741 +-3.100000 -2.600000 218.714688 +-3.100000 -2.500000 215.769635 +-3.100000 -2.400000 212.844581 +-3.100000 -2.300000 209.939528 +-3.100000 -2.200000 207.054475 +-3.100000 -2.100000 204.189422 +-3.100000 -2.000000 201.344368 +-3.100000 -1.900000 198.519315 +-3.100000 -1.800000 195.714262 +-3.100000 -1.700000 192.929209 +-3.100000 -1.600000 190.164155 +-3.100000 -1.500000 187.419102 +-3.100000 -1.400000 184.694049 +-3.100000 -1.300000 181.988995 +-3.100000 -1.200000 179.303942 +-3.100000 -1.100000 176.638889 +-3.100000 -1.000000 173.993836 +-3.100000 -0.900000 171.368782 +-3.100000 -0.800000 168.763729 +-3.100000 -0.700000 166.178676 +-3.100000 -0.600000 163.613623 +-3.100000 -0.500000 161.068569 +-3.100000 -0.400000 158.543516 +-3.100000 -0.300000 156.038463 +-3.100000 -0.200000 153.553409 +-3.100000 -0.100000 151.088356 +-3.100000 -0.000000 148.643303 +-3.100000 0.100000 146.218250 +-3.100000 0.200000 143.813196 +-3.100000 0.300000 141.428143 +-3.100000 0.400000 139.063090 +-3.100000 0.500000 136.718037 +-3.100000 0.600000 134.392983 +-3.100000 0.700000 132.087930 +-3.100000 0.800000 129.802877 +-3.100000 0.900000 127.537823 +-3.100000 1.000000 125.292770 +-3.100000 1.100000 123.067717 +-3.100000 1.200000 120.862664 +-3.100000 1.300000 118.677610 +-3.100000 1.400000 116.512557 +-3.100000 1.500000 114.367504 +-3.100000 1.600000 112.242451 +-3.100000 1.700000 110.137397 +-3.100000 1.800000 108.052344 +-3.100000 1.900000 105.987291 +-3.100000 2.000000 103.942237 +-3.100000 2.100000 101.917184 +-3.100000 2.200000 99.912131 +-3.100000 2.300000 97.927078 +-3.100000 2.400000 95.962024 +-3.100000 2.500000 94.016971 +-3.100000 2.600000 92.091918 +-3.100000 2.700000 90.186865 +-3.100000 2.800000 88.301811 +-3.100000 2.900000 86.436758 +-3.100000 3.000000 84.591705 +-3.100000 3.100000 82.766651 +-3.100000 3.200000 80.961598 +-3.100000 3.300000 79.176545 +-3.100000 3.400000 77.411492 +-3.100000 3.500000 75.666438 +-3.100000 3.600000 73.941385 +-3.100000 3.700000 72.236332 +-3.100000 3.800000 70.551278 +-3.100000 3.900000 68.886225 +-3.100000 4.000000 67.241172 +-3.100000 4.100000 65.616119 +-3.100000 4.200000 64.011065 +-3.100000 4.300000 62.426012 +-3.100000 4.400000 60.860959 +-3.100000 4.500000 59.315906 +-3.100000 4.600000 57.790852 +-3.100000 4.700000 56.285799 +-3.100000 4.800000 54.800746 +-3.100000 4.900000 53.335692 +-3.100000 5.000000 51.890639 +-3.100000 5.100000 50.465586 +-3.100000 5.200000 49.060533 +-3.100000 5.300000 47.675479 +-3.100000 5.400000 46.310426 +-3.100000 5.500000 44.965373 +-3.100000 5.600000 43.640320 +-3.100000 5.700000 42.335266 +-3.100000 5.800000 41.050213 +-3.100000 5.900000 39.785160 +-3.100000 6.000000 38.540106 +-3.100000 6.100000 37.315053 +-3.100000 6.200000 36.110000 +-3.100000 6.300000 34.924947 +-3.100000 6.400000 33.759893 +-3.100000 6.500000 32.614840 +-3.100000 6.600000 31.489787 +-3.100000 6.700000 30.384734 +-3.100000 6.800000 29.299680 +-3.100000 6.900000 28.234627 +-3.100000 7.000000 27.189574 +-3.100000 7.100000 26.164520 +-3.100000 7.200000 25.159467 +-3.100000 7.300000 24.174414 +-3.100000 7.400000 23.209361 +-3.100000 7.500000 22.264307 +-3.100000 7.600000 21.339254 +-3.100000 7.700000 20.434201 +-3.100000 7.800000 19.549148 +-3.100000 7.900000 18.684094 +-3.100000 8.000000 17.839041 +-3.100000 8.100000 17.013988 +-3.100000 8.200000 16.208934 +-3.100000 8.300000 15.423881 +-3.100000 8.400000 14.658828 +-3.100000 8.500000 13.913775 +-3.100000 8.600000 13.188721 +-3.100000 8.700000 12.483668 +-3.100000 8.800000 11.798615 +-3.100000 8.900000 11.133562 +-3.100000 9.000000 10.488508 +-3.100000 9.100000 9.863455 +-3.100000 9.200000 9.258402 +-3.100000 9.300000 8.673348 +-3.100000 9.400000 8.108295 +-3.100000 9.500000 7.563242 +-3.100000 9.600000 7.038189 +-3.100000 9.700000 6.533135 +-3.100000 9.800000 6.048082 +-3.100000 9.900000 5.583029 +-3.100000 10.000000 5.137976 +-3.100000 10.100000 4.712922 +-3.100000 10.200000 4.307869 +-3.100000 10.300000 3.922816 +-3.100000 10.400000 3.557762 +-3.100000 10.500000 3.212709 +-3.100000 10.600000 2.887656 +-3.100000 10.700000 2.582603 +-3.100000 10.800000 2.297549 +-3.100000 10.900000 2.032496 +-3.100000 11.000000 1.787443 +-3.100000 11.100000 1.562390 +-3.100000 11.200000 1.357336 +-3.100000 11.300000 1.172283 +-3.100000 11.400000 1.007230 +-3.100000 11.500000 0.862176 +-3.100000 11.600000 0.737123 +-3.100000 11.700000 0.632070 +-3.100000 11.800000 0.547017 +-3.100000 11.900000 0.481963 +-3.100000 12.000000 0.436910 +-3.100000 12.100000 0.411857 +-3.100000 12.200000 0.406803 +-3.100000 12.300000 0.421750 +-3.100000 12.400000 0.456697 +-3.100000 12.500000 0.511644 +-3.100000 12.600000 0.586590 +-3.100000 12.700000 0.681537 +-3.100000 12.800000 0.796484 +-3.100000 12.900000 0.931431 +-3.100000 13.000000 1.086377 +-3.100000 13.100000 1.261324 +-3.100000 13.200000 1.456271 +-3.100000 13.300000 1.671217 +-3.100000 13.400000 1.906164 +-3.100000 13.500000 2.161111 +-3.100000 13.600000 2.436058 +-3.100000 13.700000 2.731004 +-3.100000 13.800000 3.045951 +-3.100000 13.900000 3.380898 +-3.100000 14.000000 3.735845 +-3.100000 14.100000 4.110791 +-3.100000 14.200000 4.505738 +-3.100000 14.300000 4.920685 +-3.100000 14.400000 5.355631 +-3.100000 14.500000 5.810578 +-3.100000 14.600000 6.285525 +-3.100000 14.700000 6.780472 +-3.100000 14.800000 7.295418 +-3.100000 14.900000 7.830365 +-3.100000 15.000000 8.385312 + +-3.000000 -5.000000 287.366412 +-3.000000 -4.900000 283.988951 +-3.000000 -4.800000 280.631489 +-3.000000 -4.700000 277.294027 +-3.000000 -4.600000 273.976565 +-3.000000 -4.500000 270.679104 +-3.000000 -4.400000 267.401642 +-3.000000 -4.300000 264.144180 +-3.000000 -4.200000 260.906718 +-3.000000 -4.100000 257.689256 +-3.000000 -4.000000 254.491795 +-3.000000 -3.900000 251.314333 +-3.000000 -3.800000 248.156871 +-3.000000 -3.700000 245.019409 +-3.000000 -3.600000 241.901948 +-3.000000 -3.500000 238.804486 +-3.000000 -3.400000 235.727024 +-3.000000 -3.300000 232.669562 +-3.000000 -3.200000 229.632101 +-3.000000 -3.100000 226.614639 +-3.000000 -3.000000 223.617177 +-3.000000 -2.900000 220.639715 +-3.000000 -2.800000 217.682253 +-3.000000 -2.700000 214.744792 +-3.000000 -2.600000 211.827330 +-3.000000 -2.500000 208.929868 +-3.000000 -2.400000 206.052406 +-3.000000 -2.300000 203.194945 +-3.000000 -2.200000 200.357483 +-3.000000 -2.100000 197.540021 +-3.000000 -2.000000 194.742559 +-3.000000 -1.900000 191.965097 +-3.000000 -1.800000 189.207636 +-3.000000 -1.700000 186.470174 +-3.000000 -1.600000 183.752712 +-3.000000 -1.500000 181.055250 +-3.000000 -1.400000 178.377789 +-3.000000 -1.300000 175.720327 +-3.000000 -1.200000 173.082865 +-3.000000 -1.100000 170.465403 +-3.000000 -1.000000 167.867941 +-3.000000 -0.900000 165.290480 +-3.000000 -0.800000 162.733018 +-3.000000 -0.700000 160.195556 +-3.000000 -0.600000 157.678094 +-3.000000 -0.500000 155.180633 +-3.000000 -0.400000 152.703171 +-3.000000 -0.300000 150.245709 +-3.000000 -0.200000 147.808247 +-3.000000 -0.100000 145.390785 +-3.000000 -0.000000 142.993324 +-3.000000 0.100000 140.615862 +-3.000000 0.200000 138.258400 +-3.000000 0.300000 135.920938 +-3.000000 0.400000 133.603477 +-3.000000 0.500000 131.306015 +-3.000000 0.600000 129.028553 +-3.000000 0.700000 126.771091 +-3.000000 0.800000 124.533630 +-3.000000 0.900000 122.316168 +-3.000000 1.000000 120.118706 +-3.000000 1.100000 117.941244 +-3.000000 1.200000 115.783782 +-3.000000 1.300000 113.646321 +-3.000000 1.400000 111.528859 +-3.000000 1.500000 109.431397 +-3.000000 1.600000 107.353935 +-3.000000 1.700000 105.296474 +-3.000000 1.800000 103.259012 +-3.000000 1.900000 101.241550 +-3.000000 2.000000 99.244088 +-3.000000 2.100000 97.266626 +-3.000000 2.200000 95.309165 +-3.000000 2.300000 93.371703 +-3.000000 2.400000 91.454241 +-3.000000 2.500000 89.556779 +-3.000000 2.600000 87.679318 +-3.000000 2.700000 85.821856 +-3.000000 2.800000 83.984394 +-3.000000 2.900000 82.166932 +-3.000000 3.000000 80.369470 +-3.000000 3.100000 78.592009 +-3.000000 3.200000 76.834547 +-3.000000 3.300000 75.097085 +-3.000000 3.400000 73.379623 +-3.000000 3.500000 71.682162 +-3.000000 3.600000 70.004700 +-3.000000 3.700000 68.347238 +-3.000000 3.800000 66.709776 +-3.000000 3.900000 65.092314 +-3.000000 4.000000 63.494853 +-3.000000 4.100000 61.917391 +-3.000000 4.200000 60.359929 +-3.000000 4.300000 58.822467 +-3.000000 4.400000 57.305006 +-3.000000 4.500000 55.807544 +-3.000000 4.600000 54.330082 +-3.000000 4.700000 52.872620 +-3.000000 4.800000 51.435159 +-3.000000 4.900000 50.017697 +-3.000000 5.000000 48.620235 +-3.000000 5.100000 47.242773 +-3.000000 5.200000 45.885311 +-3.000000 5.300000 44.547850 +-3.000000 5.400000 43.230388 +-3.000000 5.500000 41.932926 +-3.000000 5.600000 40.655464 +-3.000000 5.700000 39.398003 +-3.000000 5.800000 38.160541 +-3.000000 5.900000 36.943079 +-3.000000 6.000000 35.745617 +-3.000000 6.100000 34.568155 +-3.000000 6.200000 33.410694 +-3.000000 6.300000 32.273232 +-3.000000 6.400000 31.155770 +-3.000000 6.500000 30.058308 +-3.000000 6.600000 28.980847 +-3.000000 6.700000 27.923385 +-3.000000 6.800000 26.885923 +-3.000000 6.900000 25.868461 +-3.000000 7.000000 24.870999 +-3.000000 7.100000 23.893538 +-3.000000 7.200000 22.936076 +-3.000000 7.300000 21.998614 +-3.000000 7.400000 21.081152 +-3.000000 7.500000 20.183691 +-3.000000 7.600000 19.306229 +-3.000000 7.700000 18.448767 +-3.000000 7.800000 17.611305 +-3.000000 7.900000 16.793843 +-3.000000 8.000000 15.996382 +-3.000000 8.100000 15.218920 +-3.000000 8.200000 14.461458 +-3.000000 8.300000 13.723996 +-3.000000 8.400000 13.006535 +-3.000000 8.500000 12.309073 +-3.000000 8.600000 11.631611 +-3.000000 8.700000 10.974149 +-3.000000 8.800000 10.336688 +-3.000000 8.900000 9.719226 +-3.000000 9.000000 9.121764 +-3.000000 9.100000 8.544302 +-3.000000 9.200000 7.986840 +-3.000000 9.300000 7.449379 +-3.000000 9.400000 6.931917 +-3.000000 9.500000 6.434455 +-3.000000 9.600000 5.956993 +-3.000000 9.700000 5.499532 +-3.000000 9.800000 5.062070 +-3.000000 9.900000 4.644608 +-3.000000 10.000000 4.247146 +-3.000000 10.100000 3.869684 +-3.000000 10.200000 3.512223 +-3.000000 10.300000 3.174761 +-3.000000 10.400000 2.857299 +-3.000000 10.500000 2.559837 +-3.000000 10.600000 2.282376 +-3.000000 10.700000 2.024914 +-3.000000 10.800000 1.787452 +-3.000000 10.900000 1.569990 +-3.000000 11.000000 1.372528 +-3.000000 11.100000 1.195067 +-3.000000 11.200000 1.037605 +-3.000000 11.300000 0.900143 +-3.000000 11.400000 0.782681 +-3.000000 11.500000 0.685220 +-3.000000 11.600000 0.607758 +-3.000000 11.700000 0.550296 +-3.000000 11.800000 0.512834 +-3.000000 11.900000 0.495372 +-3.000000 12.000000 0.497911 +-3.000000 12.100000 0.520449 +-3.000000 12.200000 0.562987 +-3.000000 12.300000 0.625525 +-3.000000 12.400000 0.708064 +-3.000000 12.500000 0.810602 +-3.000000 12.600000 0.933140 +-3.000000 12.700000 1.075678 +-3.000000 12.800000 1.238217 +-3.000000 12.900000 1.420755 +-3.000000 13.000000 1.623293 +-3.000000 13.100000 1.845831 +-3.000000 13.200000 2.088369 +-3.000000 13.300000 2.350908 +-3.000000 13.400000 2.633446 +-3.000000 13.500000 2.935984 +-3.000000 13.600000 3.258522 +-3.000000 13.700000 3.601061 +-3.000000 13.800000 3.963599 +-3.000000 13.900000 4.346137 +-3.000000 14.000000 4.748675 +-3.000000 14.100000 5.171213 +-3.000000 14.200000 5.613752 +-3.000000 14.300000 6.076290 +-3.000000 14.400000 6.558828 +-3.000000 14.500000 7.061366 +-3.000000 14.600000 7.583905 +-3.000000 14.700000 8.126443 +-3.000000 14.800000 8.688981 +-3.000000 14.900000 9.271519 +-3.000000 15.000000 9.874057 + +-2.900000 -5.000000 279.631385 +-2.900000 -4.900000 276.300998 +-2.900000 -4.800000 272.990611 +-2.900000 -4.700000 269.700224 +-2.900000 -4.600000 266.429837 +-2.900000 -4.500000 263.179450 +-2.900000 -4.400000 259.949063 +-2.900000 -4.300000 256.738676 +-2.900000 -4.200000 253.548289 +-2.900000 -4.100000 250.377902 +-2.900000 -4.000000 247.227515 +-2.900000 -3.900000 244.097128 +-2.900000 -3.800000 240.986741 +-2.900000 -3.700000 237.896354 +-2.900000 -3.600000 234.825967 +-2.900000 -3.500000 231.775580 +-2.900000 -3.400000 228.745193 +-2.900000 -3.300000 225.734806 +-2.900000 -3.200000 222.744419 +-2.900000 -3.100000 219.774032 +-2.900000 -3.000000 216.823645 +-2.900000 -2.900000 213.893258 +-2.900000 -2.800000 210.982871 +-2.900000 -2.700000 208.092484 +-2.900000 -2.600000 205.222097 +-2.900000 -2.500000 202.371710 +-2.900000 -2.400000 199.541323 +-2.900000 -2.300000 196.730936 +-2.900000 -2.200000 193.940549 +-2.900000 -2.100000 191.170162 +-2.900000 -2.000000 188.419775 +-2.900000 -1.900000 185.689388 +-2.900000 -1.800000 182.979001 +-2.900000 -1.700000 180.288614 +-2.900000 -1.600000 177.618227 +-2.900000 -1.500000 174.967840 +-2.900000 -1.400000 172.337453 +-2.900000 -1.300000 169.727066 +-2.900000 -1.200000 167.136679 +-2.900000 -1.100000 164.566292 +-2.900000 -1.000000 162.015905 +-2.900000 -0.900000 159.485518 +-2.900000 -0.800000 156.975131 +-2.900000 -0.700000 154.484744 +-2.900000 -0.600000 152.014357 +-2.900000 -0.500000 149.563970 +-2.900000 -0.400000 147.133583 +-2.900000 -0.300000 144.723196 +-2.900000 -0.200000 142.332809 +-2.900000 -0.100000 139.962422 +-2.900000 -0.000000 137.612035 +-2.900000 0.100000 135.281648 +-2.900000 0.200000 132.971261 +-2.900000 0.300000 130.680874 +-2.900000 0.400000 128.410487 +-2.900000 0.500000 126.160100 +-2.900000 0.600000 123.929713 +-2.900000 0.700000 121.719326 +-2.900000 0.800000 119.528939 +-2.900000 0.900000 117.358552 +-2.900000 1.000000 115.208165 +-2.900000 1.100000 113.077778 +-2.900000 1.200000 110.967391 +-2.900000 1.300000 108.877004 +-2.900000 1.400000 106.806617 +-2.900000 1.500000 104.756230 +-2.900000 1.600000 102.725843 +-2.900000 1.700000 100.715456 +-2.900000 1.800000 98.725068 +-2.900000 1.900000 96.754681 +-2.900000 2.000000 94.804294 +-2.900000 2.100000 92.873907 +-2.900000 2.200000 90.963520 +-2.900000 2.300000 89.073133 +-2.900000 2.400000 87.202746 +-2.900000 2.500000 85.352359 +-2.900000 2.600000 83.521972 +-2.900000 2.700000 81.711585 +-2.900000 2.800000 79.921198 +-2.900000 2.900000 78.150811 +-2.900000 3.000000 76.400424 +-2.900000 3.100000 74.670037 +-2.900000 3.200000 72.959650 +-2.900000 3.300000 71.269263 +-2.900000 3.400000 69.598876 +-2.900000 3.500000 67.948489 +-2.900000 3.600000 66.318102 +-2.900000 3.700000 64.707715 +-2.900000 3.800000 63.117328 +-2.900000 3.900000 61.546941 +-2.900000 4.000000 59.996554 +-2.900000 4.100000 58.466167 +-2.900000 4.200000 56.955780 +-2.900000 4.300000 55.465393 +-2.900000 4.400000 53.995006 +-2.900000 4.500000 52.544619 +-2.900000 4.600000 51.114232 +-2.900000 4.700000 49.703845 +-2.900000 4.800000 48.313458 +-2.900000 4.900000 46.943071 +-2.900000 5.000000 45.592684 +-2.900000 5.100000 44.262297 +-2.900000 5.200000 42.951910 +-2.900000 5.300000 41.661523 +-2.900000 5.400000 40.391136 +-2.900000 5.500000 39.140749 +-2.900000 5.600000 37.910362 +-2.900000 5.700000 36.699975 +-2.900000 5.800000 35.509588 +-2.900000 5.900000 34.339201 +-2.900000 6.000000 33.188814 +-2.900000 6.100000 32.058427 +-2.900000 6.200000 30.948040 +-2.900000 6.300000 29.857653 +-2.900000 6.400000 28.787266 +-2.900000 6.500000 27.736879 +-2.900000 6.600000 26.706492 +-2.900000 6.700000 25.696105 +-2.900000 6.800000 24.705718 +-2.900000 6.900000 23.735331 +-2.900000 7.000000 22.784944 +-2.900000 7.100000 21.854557 +-2.900000 7.200000 20.944170 +-2.900000 7.300000 20.053783 +-2.900000 7.400000 19.183396 +-2.900000 7.500000 18.333009 +-2.900000 7.600000 17.502622 +-2.900000 7.700000 16.692235 +-2.900000 7.800000 15.901848 +-2.900000 7.900000 15.131461 +-2.900000 8.000000 14.381074 +-2.900000 8.100000 13.650687 +-2.900000 8.200000 12.940300 +-2.900000 8.300000 12.249913 +-2.900000 8.400000 11.579526 +-2.900000 8.500000 10.929139 +-2.900000 8.600000 10.298752 +-2.900000 8.700000 9.688365 +-2.900000 8.800000 9.097977 +-2.900000 8.900000 8.527590 +-2.900000 9.000000 7.977203 +-2.900000 9.100000 7.446816 +-2.900000 9.200000 6.936429 +-2.900000 9.300000 6.446042 +-2.900000 9.400000 5.975655 +-2.900000 9.500000 5.525268 +-2.900000 9.600000 5.094881 +-2.900000 9.700000 4.684494 +-2.900000 9.800000 4.294107 +-2.900000 9.900000 3.923720 +-2.900000 10.000000 3.573333 +-2.900000 10.100000 3.242946 +-2.900000 10.200000 2.932559 +-2.900000 10.300000 2.642172 +-2.900000 10.400000 2.371785 +-2.900000 10.500000 2.121398 +-2.900000 10.600000 1.891011 +-2.900000 10.700000 1.680624 +-2.900000 10.800000 1.490237 +-2.900000 10.900000 1.319850 +-2.900000 11.000000 1.169463 +-2.900000 11.100000 1.039076 +-2.900000 11.200000 0.928689 +-2.900000 11.300000 0.838302 +-2.900000 11.400000 0.767915 +-2.900000 11.500000 0.717528 +-2.900000 11.600000 0.687141 +-2.900000 11.700000 0.676754 +-2.900000 11.800000 0.686367 +-2.900000 11.900000 0.715980 +-2.900000 12.000000 0.765593 +-2.900000 12.100000 0.835206 +-2.900000 12.200000 0.924819 +-2.900000 12.300000 1.034432 +-2.900000 12.400000 1.164045 +-2.900000 12.500000 1.313658 +-2.900000 12.600000 1.483271 +-2.900000 12.700000 1.672884 +-2.900000 12.800000 1.882497 +-2.900000 12.900000 2.112110 +-2.900000 13.000000 2.361723 +-2.900000 13.100000 2.631336 +-2.900000 13.200000 2.920949 +-2.900000 13.300000 3.230562 +-2.900000 13.400000 3.560175 +-2.900000 13.500000 3.909788 +-2.900000 13.600000 4.279401 +-2.900000 13.700000 4.669014 +-2.900000 13.800000 5.078627 +-2.900000 13.900000 5.508240 +-2.900000 14.000000 5.957853 +-2.900000 14.100000 6.427466 +-2.900000 14.200000 6.917079 +-2.900000 14.300000 7.426692 +-2.900000 14.400000 7.956305 +-2.900000 14.500000 8.505918 +-2.900000 14.600000 9.075531 +-2.900000 14.700000 9.665144 +-2.900000 14.800000 10.274757 +-2.900000 14.900000 10.904370 +-2.900000 15.000000 11.553983 + +-2.800000 -5.000000 272.185411 +-2.800000 -4.900000 268.901582 +-2.800000 -4.800000 265.637753 +-2.800000 -4.700000 262.393924 +-2.800000 -4.600000 259.170095 +-2.800000 -4.500000 255.966266 +-2.800000 -4.400000 252.782437 +-2.800000 -4.300000 249.618608 +-2.800000 -4.200000 246.474779 +-2.800000 -4.100000 243.350950 +-2.800000 -4.000000 240.247121 +-2.800000 -3.900000 237.163292 +-2.800000 -3.800000 234.099463 +-2.800000 -3.700000 231.055634 +-2.800000 -3.600000 228.031805 +-2.800000 -3.500000 225.027976 +-2.800000 -3.400000 222.044147 +-2.800000 -3.300000 219.080318 +-2.800000 -3.200000 216.136489 +-2.800000 -3.100000 213.212660 +-2.800000 -3.000000 210.308831 +-2.800000 -2.900000 207.425002 +-2.800000 -2.800000 204.561173 +-2.800000 -2.700000 201.717344 +-2.800000 -2.600000 198.893515 +-2.800000 -2.500000 196.089686 +-2.800000 -2.400000 193.305857 +-2.800000 -2.300000 190.542028 +-2.800000 -2.200000 187.798199 +-2.800000 -2.100000 185.074370 +-2.800000 -2.000000 182.370541 +-2.800000 -1.900000 179.686712 +-2.800000 -1.800000 177.022883 +-2.800000 -1.700000 174.379054 +-2.800000 -1.600000 171.755225 +-2.800000 -1.500000 169.151396 +-2.800000 -1.400000 166.567567 +-2.800000 -1.300000 164.003738 +-2.800000 -1.200000 161.459909 +-2.800000 -1.100000 158.936080 +-2.800000 -1.000000 156.432251 +-2.800000 -0.900000 153.948422 +-2.800000 -0.800000 151.484593 +-2.800000 -0.700000 149.040764 +-2.800000 -0.600000 146.616935 +-2.800000 -0.500000 144.213106 +-2.800000 -0.400000 141.829277 +-2.800000 -0.300000 139.465448 +-2.800000 -0.200000 137.121619 +-2.800000 -0.100000 134.797790 +-2.800000 -0.000000 132.493961 +-2.800000 0.100000 130.210132 +-2.800000 0.200000 127.946303 +-2.800000 0.300000 125.702474 +-2.800000 0.400000 123.478645 +-2.800000 0.500000 121.274816 +-2.800000 0.600000 119.090987 +-2.800000 0.700000 116.927158 +-2.800000 0.800000 114.783329 +-2.800000 0.900000 112.659500 +-2.800000 1.000000 110.555671 +-2.800000 1.100000 108.471842 +-2.800000 1.200000 106.408013 +-2.800000 1.300000 104.364184 +-2.800000 1.400000 102.340355 +-2.800000 1.500000 100.336526 +-2.800000 1.600000 98.352697 +-2.800000 1.700000 96.388868 +-2.800000 1.800000 94.445039 +-2.800000 1.900000 92.521210 +-2.800000 2.000000 90.617381 +-2.800000 2.100000 88.733552 +-2.800000 2.200000 86.869723 +-2.800000 2.300000 85.025894 +-2.800000 2.400000 83.202065 +-2.800000 2.500000 81.398236 +-2.800000 2.600000 79.614407 +-2.800000 2.700000 77.850578 +-2.800000 2.800000 76.106749 +-2.800000 2.900000 74.382920 +-2.800000 3.000000 72.679091 +-2.800000 3.100000 70.995262 +-2.800000 3.200000 69.331433 +-2.800000 3.300000 67.687604 +-2.800000 3.400000 66.063775 +-2.800000 3.500000 64.459946 +-2.800000 3.600000 62.876117 +-2.800000 3.700000 61.312288 +-2.800000 3.800000 59.768459 +-2.800000 3.900000 58.244630 +-2.800000 4.000000 56.740801 +-2.800000 4.100000 55.256972 +-2.800000 4.200000 53.793143 +-2.800000 4.300000 52.349314 +-2.800000 4.400000 50.925485 +-2.800000 4.500000 49.521656 +-2.800000 4.600000 48.137827 +-2.800000 4.700000 46.773998 +-2.800000 4.800000 45.430169 +-2.800000 4.900000 44.106340 +-2.800000 5.000000 42.802511 +-2.800000 5.100000 41.518682 +-2.800000 5.200000 40.254853 +-2.800000 5.300000 39.011024 +-2.800000 5.400000 37.787195 +-2.800000 5.500000 36.583366 +-2.800000 5.600000 35.399537 +-2.800000 5.700000 34.235709 +-2.800000 5.800000 33.091880 +-2.800000 5.900000 31.968051 +-2.800000 6.000000 30.864222 +-2.800000 6.100000 29.780393 +-2.800000 6.200000 28.716564 +-2.800000 6.300000 27.672735 +-2.800000 6.400000 26.648906 +-2.800000 6.500000 25.645077 +-2.800000 6.600000 24.661248 +-2.800000 6.700000 23.697419 +-2.800000 6.800000 22.753590 +-2.800000 6.900000 21.829761 +-2.800000 7.000000 20.925932 +-2.800000 7.100000 20.042103 +-2.800000 7.200000 19.178274 +-2.800000 7.300000 18.334445 +-2.800000 7.400000 17.510616 +-2.800000 7.500000 16.706787 +-2.800000 7.600000 15.922958 +-2.800000 7.700000 15.159129 +-2.800000 7.800000 14.415300 +-2.800000 7.900000 13.691471 +-2.800000 8.000000 12.987642 +-2.800000 8.100000 12.303813 +-2.800000 8.200000 11.639984 +-2.800000 8.300000 10.996155 +-2.800000 8.400000 10.372326 +-2.800000 8.500000 9.768497 +-2.800000 8.600000 9.184668 +-2.800000 8.700000 8.620839 +-2.800000 8.800000 8.077010 +-2.800000 8.900000 7.553181 +-2.800000 9.000000 7.049352 +-2.800000 9.100000 6.565523 +-2.800000 9.200000 6.101694 +-2.800000 9.300000 5.657865 +-2.800000 9.400000 5.234036 +-2.800000 9.500000 4.830207 +-2.800000 9.600000 4.446378 +-2.800000 9.700000 4.082549 +-2.800000 9.800000 3.738720 +-2.800000 9.900000 3.414891 +-2.800000 10.000000 3.111062 +-2.800000 10.100000 2.827233 +-2.800000 10.200000 2.563404 +-2.800000 10.300000 2.319575 +-2.800000 10.400000 2.095746 +-2.800000 10.500000 1.891917 +-2.800000 10.600000 1.708088 +-2.800000 10.700000 1.544259 +-2.800000 10.800000 1.400430 +-2.800000 10.900000 1.276601 +-2.800000 11.000000 1.172772 +-2.800000 11.100000 1.088943 +-2.800000 11.200000 1.025114 +-2.800000 11.300000 0.981285 +-2.800000 11.400000 0.957456 +-2.800000 11.500000 0.953627 +-2.800000 11.600000 0.969798 +-2.800000 11.700000 1.005969 +-2.800000 11.800000 1.062140 +-2.800000 11.900000 1.138311 +-2.800000 12.000000 1.234482 +-2.800000 12.100000 1.350653 +-2.800000 12.200000 1.486824 +-2.800000 12.300000 1.642995 +-2.800000 12.400000 1.819166 +-2.800000 12.500000 2.015337 +-2.800000 12.600000 2.231508 +-2.800000 12.700000 2.467679 +-2.800000 12.800000 2.723850 +-2.800000 12.900000 3.000021 +-2.800000 13.000000 3.296192 +-2.800000 13.100000 3.612363 +-2.800000 13.200000 3.948534 +-2.800000 13.300000 4.304705 +-2.800000 13.400000 4.680876 +-2.800000 13.500000 5.077047 +-2.800000 13.600000 5.493218 +-2.800000 13.700000 5.929389 +-2.800000 13.800000 6.385560 +-2.800000 13.900000 6.861731 +-2.800000 14.000000 7.357902 +-2.800000 14.100000 7.874073 +-2.800000 14.200000 8.410244 +-2.800000 14.300000 8.966415 +-2.800000 14.400000 9.542586 +-2.800000 14.500000 10.138757 +-2.800000 14.600000 10.754928 +-2.800000 14.700000 11.391099 +-2.800000 14.800000 12.047270 +-2.800000 14.900000 12.723441 +-2.800000 15.000000 13.419612 + +-2.700000 -5.000000 265.022122 +-2.700000 -4.900000 261.784334 +-2.700000 -4.800000 258.566547 +-2.700000 -4.700000 255.368759 +-2.700000 -4.600000 252.190971 +-2.700000 -4.500000 249.033184 +-2.700000 -4.400000 245.895396 +-2.700000 -4.300000 242.777608 +-2.700000 -4.200000 239.679821 +-2.700000 -4.100000 236.602033 +-2.700000 -4.000000 233.544245 +-2.700000 -3.900000 230.506457 +-2.700000 -3.800000 227.488670 +-2.700000 -3.700000 224.490882 +-2.700000 -3.600000 221.513094 +-2.700000 -3.500000 218.555307 +-2.700000 -3.400000 215.617519 +-2.700000 -3.300000 212.699731 +-2.700000 -3.200000 209.801943 +-2.700000 -3.100000 206.924156 +-2.700000 -3.000000 204.066368 +-2.700000 -2.900000 201.228580 +-2.700000 -2.800000 198.410793 +-2.700000 -2.700000 195.613005 +-2.700000 -2.600000 192.835217 +-2.700000 -2.500000 190.077430 +-2.700000 -2.400000 187.339642 +-2.700000 -2.300000 184.621854 +-2.700000 -2.200000 181.924066 +-2.700000 -2.100000 179.246279 +-2.700000 -2.000000 176.588491 +-2.700000 -1.900000 173.950703 +-2.700000 -1.800000 171.332916 +-2.700000 -1.700000 168.735128 +-2.700000 -1.600000 166.157340 +-2.700000 -1.500000 163.599552 +-2.700000 -1.400000 161.061765 +-2.700000 -1.300000 158.543977 +-2.700000 -1.200000 156.046189 +-2.700000 -1.100000 153.568402 +-2.700000 -1.000000 151.110614 +-2.700000 -0.900000 148.672826 +-2.700000 -0.800000 146.255039 +-2.700000 -0.700000 143.857251 +-2.700000 -0.600000 141.479463 +-2.700000 -0.500000 139.121675 +-2.700000 -0.400000 136.783888 +-2.700000 -0.300000 134.466100 +-2.700000 -0.200000 132.168312 +-2.700000 -0.100000 129.890525 +-2.700000 -0.000000 127.632737 +-2.700000 0.100000 125.394949 +-2.700000 0.200000 123.177161 +-2.700000 0.300000 120.979374 +-2.700000 0.400000 118.801586 +-2.700000 0.500000 116.643798 +-2.700000 0.600000 114.506011 +-2.700000 0.700000 112.388223 +-2.700000 0.800000 110.290435 +-2.700000 0.900000 108.212647 +-2.700000 1.000000 106.154860 +-2.700000 1.100000 104.117072 +-2.700000 1.200000 102.099284 +-2.700000 1.300000 100.101497 +-2.700000 1.400000 98.123709 +-2.700000 1.500000 96.165921 +-2.700000 1.600000 94.228134 +-2.700000 1.700000 92.310346 +-2.700000 1.800000 90.412558 +-2.700000 1.900000 88.534770 +-2.700000 2.000000 86.676983 +-2.700000 2.100000 84.839195 +-2.700000 2.200000 83.021407 +-2.700000 2.300000 81.223620 +-2.700000 2.400000 79.445832 +-2.700000 2.500000 77.688044 +-2.700000 2.600000 75.950256 +-2.700000 2.700000 74.232469 +-2.700000 2.800000 72.534681 +-2.700000 2.900000 70.856893 +-2.700000 3.000000 69.199106 +-2.700000 3.100000 67.561318 +-2.700000 3.200000 65.943530 +-2.700000 3.300000 64.345743 +-2.700000 3.400000 62.767955 +-2.700000 3.500000 61.210167 +-2.700000 3.600000 59.672379 +-2.700000 3.700000 58.154592 +-2.700000 3.800000 56.656804 +-2.700000 3.900000 55.179016 +-2.700000 4.000000 53.721229 +-2.700000 4.100000 52.283441 +-2.700000 4.200000 50.865653 +-2.700000 4.300000 49.467865 +-2.700000 4.400000 48.090078 +-2.700000 4.500000 46.732290 +-2.700000 4.600000 45.394502 +-2.700000 4.700000 44.076715 +-2.700000 4.800000 42.778927 +-2.700000 4.900000 41.501139 +-2.700000 5.000000 40.243352 +-2.700000 5.100000 39.005564 +-2.700000 5.200000 37.787776 +-2.700000 5.300000 36.589988 +-2.700000 5.400000 35.412201 +-2.700000 5.500000 34.254413 +-2.700000 5.600000 33.116625 +-2.700000 5.700000 31.998838 +-2.700000 5.800000 30.901050 +-2.700000 5.900000 29.823262 +-2.700000 6.000000 28.765474 +-2.700000 6.100000 27.727687 +-2.700000 6.200000 26.709899 +-2.700000 6.300000 25.712111 +-2.700000 6.400000 24.734324 +-2.700000 6.500000 23.776536 +-2.700000 6.600000 22.838748 +-2.700000 6.700000 21.920960 +-2.700000 6.800000 21.023173 +-2.700000 6.900000 20.145385 +-2.700000 7.000000 19.287597 +-2.700000 7.100000 18.449810 +-2.700000 7.200000 17.632022 +-2.700000 7.300000 16.834234 +-2.700000 7.400000 16.056447 +-2.700000 7.500000 15.298659 +-2.700000 7.600000 14.560871 +-2.700000 7.700000 13.843083 +-2.700000 7.800000 13.145296 +-2.700000 7.900000 12.467508 +-2.700000 8.000000 11.809720 +-2.700000 8.100000 11.171933 +-2.700000 8.200000 10.554145 +-2.700000 8.300000 9.956357 +-2.700000 8.400000 9.378569 +-2.700000 8.500000 8.820782 +-2.700000 8.600000 8.282994 +-2.700000 8.700000 7.765206 +-2.700000 8.800000 7.267419 +-2.700000 8.900000 6.789631 +-2.700000 9.000000 6.331843 +-2.700000 9.100000 5.894056 +-2.700000 9.200000 5.476268 +-2.700000 9.300000 5.078480 +-2.700000 9.400000 4.700692 +-2.700000 9.500000 4.342905 +-2.700000 9.600000 4.005117 +-2.700000 9.700000 3.687329 +-2.700000 9.800000 3.389542 +-2.700000 9.900000 3.111754 +-2.700000 10.000000 2.853966 +-2.700000 10.100000 2.616178 +-2.700000 10.200000 2.398391 +-2.700000 10.300000 2.200603 +-2.700000 10.400000 2.022815 +-2.700000 10.500000 1.865028 +-2.700000 10.600000 1.727240 +-2.700000 10.700000 1.609452 +-2.700000 10.800000 1.511664 +-2.700000 10.900000 1.433877 +-2.700000 11.000000 1.376089 +-2.700000 11.100000 1.338301 +-2.700000 11.200000 1.320514 +-2.700000 11.300000 1.322726 +-2.700000 11.400000 1.344938 +-2.700000 11.500000 1.387151 +-2.700000 11.600000 1.449363 +-2.700000 11.700000 1.531575 +-2.700000 11.800000 1.633787 +-2.700000 11.900000 1.756000 +-2.700000 12.000000 1.898212 +-2.700000 12.100000 2.060424 +-2.700000 12.200000 2.242637 +-2.700000 12.300000 2.444849 +-2.700000 12.400000 2.667061 +-2.700000 12.500000 2.909273 +-2.700000 12.600000 3.171486 +-2.700000 12.700000 3.453698 +-2.700000 12.800000 3.755910 +-2.700000 12.900000 4.078123 +-2.700000 13.000000 4.420335 +-2.700000 13.100000 4.782547 +-2.700000 13.200000 5.164760 +-2.700000 13.300000 5.566972 +-2.700000 13.400000 5.989184 +-2.700000 13.500000 6.431396 +-2.700000 13.600000 6.893609 +-2.700000 13.700000 7.375821 +-2.700000 13.800000 7.878033 +-2.700000 13.900000 8.400246 +-2.700000 14.000000 8.942458 +-2.700000 14.100000 9.504670 +-2.700000 14.200000 10.086882 +-2.700000 14.300000 10.689095 +-2.700000 14.400000 11.311307 +-2.700000 14.500000 11.953519 +-2.700000 14.600000 12.615732 +-2.700000 14.700000 13.297944 +-2.700000 14.800000 14.000156 +-2.700000 14.900000 14.722369 +-2.700000 15.000000 15.464581 + +-2.600000 -5.000000 258.134291 +-2.600000 -4.900000 254.942028 +-2.600000 -4.800000 251.769765 +-2.600000 -4.700000 248.617502 +-2.600000 -4.600000 245.485239 +-2.600000 -4.500000 242.372976 +-2.600000 -4.400000 239.280712 +-2.600000 -4.300000 236.208449 +-2.600000 -4.200000 233.156186 +-2.600000 -4.100000 230.123923 +-2.600000 -4.000000 227.111660 +-2.600000 -3.900000 224.119397 +-2.600000 -3.800000 221.147133 +-2.600000 -3.700000 218.194870 +-2.600000 -3.600000 215.262607 +-2.600000 -3.500000 212.350344 +-2.600000 -3.400000 209.458081 +-2.600000 -3.300000 206.585818 +-2.600000 -3.200000 203.733554 +-2.600000 -3.100000 200.901291 +-2.600000 -3.000000 198.089028 +-2.600000 -2.900000 195.296765 +-2.600000 -2.800000 192.524502 +-2.600000 -2.700000 189.772239 +-2.600000 -2.600000 187.039976 +-2.600000 -2.500000 184.327712 +-2.600000 -2.400000 181.635449 +-2.600000 -2.300000 178.963186 +-2.600000 -2.200000 176.310923 +-2.600000 -2.100000 173.678660 +-2.600000 -2.000000 171.066397 +-2.600000 -1.900000 168.474133 +-2.600000 -1.800000 165.901870 +-2.600000 -1.700000 163.349607 +-2.600000 -1.600000 160.817344 +-2.600000 -1.500000 158.305081 +-2.600000 -1.400000 155.812818 +-2.600000 -1.300000 153.340554 +-2.600000 -1.200000 150.888291 +-2.600000 -1.100000 148.456028 +-2.600000 -1.000000 146.043765 +-2.600000 -0.900000 143.651502 +-2.600000 -0.800000 141.279239 +-2.600000 -0.700000 138.926975 +-2.600000 -0.600000 136.594712 +-2.600000 -0.500000 134.282449 +-2.600000 -0.400000 131.990186 +-2.600000 -0.300000 129.717923 +-2.600000 -0.200000 127.465660 +-2.600000 -0.100000 125.233397 +-2.600000 -0.000000 123.021133 +-2.600000 0.100000 120.828870 +-2.600000 0.200000 118.656607 +-2.600000 0.300000 116.504344 +-2.600000 0.400000 114.372081 +-2.600000 0.500000 112.259818 +-2.600000 0.600000 110.167554 +-2.600000 0.700000 108.095291 +-2.600000 0.800000 106.043028 +-2.600000 0.900000 104.010765 +-2.600000 1.000000 101.998502 +-2.600000 1.100000 100.006239 +-2.600000 1.200000 98.033975 +-2.600000 1.300000 96.081712 +-2.600000 1.400000 94.149449 +-2.600000 1.500000 92.237186 +-2.600000 1.600000 90.344923 +-2.600000 1.700000 88.472660 +-2.600000 1.800000 86.620396 +-2.600000 1.900000 84.788133 +-2.600000 2.000000 82.975870 +-2.600000 2.100000 81.183607 +-2.600000 2.200000 79.411344 +-2.600000 2.300000 77.659081 +-2.600000 2.400000 75.926818 +-2.600000 2.500000 74.214554 +-2.600000 2.600000 72.522291 +-2.600000 2.700000 70.850028 +-2.600000 2.800000 69.197765 +-2.600000 2.900000 67.565502 +-2.600000 3.000000 65.953239 +-2.600000 3.100000 64.360975 +-2.600000 3.200000 62.788712 +-2.600000 3.300000 61.236449 +-2.600000 3.400000 59.704186 +-2.600000 3.500000 58.191923 +-2.600000 3.600000 56.699660 +-2.600000 3.700000 55.227396 +-2.600000 3.800000 53.775133 +-2.600000 3.900000 52.342870 +-2.600000 4.000000 50.930607 +-2.600000 4.100000 49.538344 +-2.600000 4.200000 48.166081 +-2.600000 4.300000 46.813817 +-2.600000 4.400000 45.481554 +-2.600000 4.500000 44.169291 +-2.600000 4.600000 42.877028 +-2.600000 4.700000 41.604765 +-2.600000 4.800000 40.352502 +-2.600000 4.900000 39.120239 +-2.600000 5.000000 37.907975 +-2.600000 5.100000 36.715712 +-2.600000 5.200000 35.543449 +-2.600000 5.300000 34.391186 +-2.600000 5.400000 33.258923 +-2.600000 5.500000 32.146660 +-2.600000 5.600000 31.054396 +-2.600000 5.700000 29.982133 +-2.600000 5.800000 28.929870 +-2.600000 5.900000 27.897607 +-2.600000 6.000000 26.885344 +-2.600000 6.100000 25.893081 +-2.600000 6.200000 24.920817 +-2.600000 6.300000 23.968554 +-2.600000 6.400000 23.036291 +-2.600000 6.500000 22.124028 +-2.600000 6.600000 21.231765 +-2.600000 6.700000 20.359502 +-2.600000 6.800000 19.507238 +-2.600000 6.900000 18.674975 +-2.600000 7.000000 17.862712 +-2.600000 7.100000 17.070449 +-2.600000 7.200000 16.298186 +-2.600000 7.300000 15.545923 +-2.600000 7.400000 14.813659 +-2.600000 7.500000 14.101396 +-2.600000 7.600000 13.409133 +-2.600000 7.700000 12.736870 +-2.600000 7.800000 12.084607 +-2.600000 7.900000 11.452344 +-2.600000 8.000000 10.840081 +-2.600000 8.100000 10.247817 +-2.600000 8.200000 9.675554 +-2.600000 8.300000 9.123291 +-2.600000 8.400000 8.591028 +-2.600000 8.500000 8.078765 +-2.600000 8.600000 7.586502 +-2.600000 8.700000 7.114238 +-2.600000 8.800000 6.661975 +-2.600000 8.900000 6.229712 +-2.600000 9.000000 5.817449 +-2.600000 9.100000 5.425186 +-2.600000 9.200000 5.052923 +-2.600000 9.300000 4.700659 +-2.600000 9.400000 4.368396 +-2.600000 9.500000 4.056133 +-2.600000 9.600000 3.763870 +-2.600000 9.700000 3.491607 +-2.600000 9.800000 3.239344 +-2.600000 9.900000 3.007080 +-2.600000 10.000000 2.794817 +-2.600000 10.100000 2.602554 +-2.600000 10.200000 2.430291 +-2.600000 10.300000 2.278028 +-2.600000 10.400000 2.145765 +-2.600000 10.500000 2.033502 +-2.600000 10.600000 1.941238 +-2.600000 10.700000 1.868975 +-2.600000 10.800000 1.816712 +-2.600000 10.900000 1.784449 +-2.600000 11.000000 1.772186 +-2.600000 11.100000 1.779923 +-2.600000 11.200000 1.807659 +-2.600000 11.300000 1.855396 +-2.600000 11.400000 1.923133 +-2.600000 11.500000 2.010870 +-2.600000 11.600000 2.118607 +-2.600000 11.700000 2.246344 +-2.600000 11.800000 2.394080 +-2.600000 11.900000 2.561817 +-2.600000 12.000000 2.749554 +-2.600000 12.100000 2.957291 +-2.600000 12.200000 3.185028 +-2.600000 12.300000 3.432765 +-2.600000 12.400000 3.700501 +-2.600000 12.500000 3.988238 +-2.600000 12.600000 4.295975 +-2.600000 12.700000 4.623712 +-2.600000 12.800000 4.971449 +-2.600000 12.900000 5.339186 +-2.600000 13.000000 5.726923 +-2.600000 13.100000 6.134659 +-2.600000 13.200000 6.562396 +-2.600000 13.300000 7.010133 +-2.600000 13.400000 7.477870 +-2.600000 13.500000 7.965607 +-2.600000 13.600000 8.473344 +-2.600000 13.700000 9.001080 +-2.600000 13.800000 9.548817 +-2.600000 13.900000 10.116554 +-2.600000 14.000000 10.704291 +-2.600000 14.100000 11.312028 +-2.600000 14.200000 11.939765 +-2.600000 14.300000 12.587501 +-2.600000 14.400000 13.255238 +-2.600000 14.500000 13.942975 +-2.600000 14.600000 14.650712 +-2.600000 14.700000 15.378449 +-2.600000 14.800000 16.126186 +-2.600000 14.900000 16.893922 +-2.600000 15.000000 17.681659 + +-2.500000 -5.000000 251.513863 +-2.500000 -4.900000 248.366607 +-2.500000 -4.800000 245.239352 +-2.500000 -4.700000 242.132097 +-2.500000 -4.600000 239.044841 +-2.500000 -4.500000 235.977586 +-2.500000 -4.400000 232.930331 +-2.500000 -4.300000 229.903075 +-2.500000 -4.200000 226.895820 +-2.500000 -4.100000 223.908565 +-2.500000 -4.000000 220.941309 +-2.500000 -3.900000 217.994054 +-2.500000 -3.800000 215.066798 +-2.500000 -3.700000 212.159543 +-2.500000 -3.600000 209.272288 +-2.500000 -3.500000 206.405032 +-2.500000 -3.400000 203.557777 +-2.500000 -3.300000 200.730522 +-2.500000 -3.200000 197.923266 +-2.500000 -3.100000 195.136011 +-2.500000 -3.000000 192.368756 +-2.500000 -2.900000 189.621500 +-2.500000 -2.800000 186.894245 +-2.500000 -2.700000 184.186990 +-2.500000 -2.600000 181.499734 +-2.500000 -2.500000 178.832479 +-2.500000 -2.400000 176.185224 +-2.500000 -2.300000 173.557968 +-2.500000 -2.200000 170.950713 +-2.500000 -2.100000 168.363457 +-2.500000 -2.000000 165.796202 +-2.500000 -1.900000 163.248947 +-2.500000 -1.800000 160.721691 +-2.500000 -1.700000 158.214436 +-2.500000 -1.600000 155.727181 +-2.500000 -1.500000 153.259925 +-2.500000 -1.400000 150.812670 +-2.500000 -1.300000 148.385415 +-2.500000 -1.200000 145.978159 +-2.500000 -1.100000 143.590904 +-2.500000 -1.000000 141.223649 +-2.500000 -0.900000 138.876393 +-2.500000 -0.800000 136.549138 +-2.500000 -0.700000 134.241883 +-2.500000 -0.600000 131.954627 +-2.500000 -0.500000 129.687372 +-2.500000 -0.400000 127.440116 +-2.500000 -0.300000 125.212861 +-2.500000 -0.200000 123.005606 +-2.500000 -0.100000 120.818350 +-2.500000 -0.000000 118.651095 +-2.500000 0.100000 116.503840 +-2.500000 0.200000 114.376584 +-2.500000 0.300000 112.269329 +-2.500000 0.400000 110.182074 +-2.500000 0.500000 108.114818 +-2.500000 0.600000 106.067563 +-2.500000 0.700000 104.040308 +-2.500000 0.800000 102.033052 +-2.500000 0.900000 100.045797 +-2.500000 1.000000 98.078542 +-2.500000 1.100000 96.131286 +-2.500000 1.200000 94.204031 +-2.500000 1.300000 92.296776 +-2.500000 1.400000 90.409520 +-2.500000 1.500000 88.542265 +-2.500000 1.600000 86.695009 +-2.500000 1.700000 84.867754 +-2.500000 1.800000 83.060499 +-2.500000 1.900000 81.273243 +-2.500000 2.000000 79.505988 +-2.500000 2.100000 77.758733 +-2.500000 2.200000 76.031477 +-2.500000 2.300000 74.324222 +-2.500000 2.400000 72.636967 +-2.500000 2.500000 70.969711 +-2.500000 2.600000 69.322456 +-2.500000 2.700000 67.695201 +-2.500000 2.800000 66.087945 +-2.500000 2.900000 64.500690 +-2.500000 3.000000 62.933435 +-2.500000 3.100000 61.386179 +-2.500000 3.200000 59.858924 +-2.500000 3.300000 58.351668 +-2.500000 3.400000 56.864413 +-2.500000 3.500000 55.397158 +-2.500000 3.600000 53.949902 +-2.500000 3.700000 52.522647 +-2.500000 3.800000 51.115392 +-2.500000 3.900000 49.728136 +-2.500000 4.000000 48.360881 +-2.500000 4.100000 47.013626 +-2.500000 4.200000 45.686370 +-2.500000 4.300000 44.379115 +-2.500000 4.400000 43.091860 +-2.500000 4.500000 41.824604 +-2.500000 4.600000 40.577349 +-2.500000 4.700000 39.350094 +-2.500000 4.800000 38.142838 +-2.500000 4.900000 36.955583 +-2.500000 5.000000 35.788327 +-2.500000 5.100000 34.641072 +-2.500000 5.200000 33.513817 +-2.500000 5.300000 32.406561 +-2.500000 5.400000 31.319306 +-2.500000 5.500000 30.252051 +-2.500000 5.600000 29.204795 +-2.500000 5.700000 28.177540 +-2.500000 5.800000 27.170285 +-2.500000 5.900000 26.183029 +-2.500000 6.000000 25.215774 +-2.500000 6.100000 24.268519 +-2.500000 6.200000 23.341263 +-2.500000 6.300000 22.434008 +-2.500000 6.400000 21.546753 +-2.500000 6.500000 20.679497 +-2.500000 6.600000 19.832242 +-2.500000 6.700000 19.004987 +-2.500000 6.800000 18.197731 +-2.500000 6.900000 17.410476 +-2.500000 7.000000 16.643220 +-2.500000 7.100000 15.895965 +-2.500000 7.200000 15.168710 +-2.500000 7.300000 14.461454 +-2.500000 7.400000 13.774199 +-2.500000 7.500000 13.106944 +-2.500000 7.600000 12.459688 +-2.500000 7.700000 11.832433 +-2.500000 7.800000 11.225178 +-2.500000 7.900000 10.637922 +-2.500000 8.000000 10.070667 +-2.500000 8.100000 9.523412 +-2.500000 8.200000 8.996156 +-2.500000 8.300000 8.488901 +-2.500000 8.400000 8.001646 +-2.500000 8.500000 7.534390 +-2.500000 8.600000 7.087135 +-2.500000 8.700000 6.659879 +-2.500000 8.800000 6.252624 +-2.500000 8.900000 5.865369 +-2.500000 9.000000 5.498113 +-2.500000 9.100000 5.150858 +-2.500000 9.200000 4.823603 +-2.500000 9.300000 4.516347 +-2.500000 9.400000 4.229092 +-2.500000 9.500000 3.961837 +-2.500000 9.600000 3.714581 +-2.500000 9.700000 3.487326 +-2.500000 9.800000 3.280071 +-2.500000 9.900000 3.092815 +-2.500000 10.000000 2.925560 +-2.500000 10.100000 2.778305 +-2.500000 10.200000 2.651049 +-2.500000 10.300000 2.543794 +-2.500000 10.400000 2.456538 +-2.500000 10.500000 2.389283 +-2.500000 10.600000 2.342028 +-2.500000 10.700000 2.314772 +-2.500000 10.800000 2.307517 +-2.500000 10.900000 2.320262 +-2.500000 11.000000 2.353006 +-2.500000 11.100000 2.405751 +-2.500000 11.200000 2.478496 +-2.500000 11.300000 2.571240 +-2.500000 11.400000 2.683985 +-2.500000 11.500000 2.816730 +-2.500000 11.600000 2.969474 +-2.500000 11.700000 3.142219 +-2.500000 11.800000 3.334964 +-2.500000 11.900000 3.547708 +-2.500000 12.000000 3.780453 +-2.500000 12.100000 4.033198 +-2.500000 12.200000 4.305942 +-2.500000 12.300000 4.598687 +-2.500000 12.400000 4.911431 +-2.500000 12.500000 5.244176 +-2.500000 12.600000 5.596921 +-2.500000 12.700000 5.969665 +-2.500000 12.800000 6.362410 +-2.500000 12.900000 6.775155 +-2.500000 13.000000 7.207899 +-2.500000 13.100000 7.660644 +-2.500000 13.200000 8.133389 +-2.500000 13.300000 8.626133 +-2.500000 13.400000 9.138878 +-2.500000 13.500000 9.671623 +-2.500000 13.600000 10.224367 +-2.500000 13.700000 10.797112 +-2.500000 13.800000 11.389857 +-2.500000 13.900000 12.002601 +-2.500000 14.000000 12.635346 +-2.500000 14.100000 13.288090 +-2.500000 14.200000 13.960835 +-2.500000 14.300000 14.653580 +-2.500000 14.400000 15.366324 +-2.500000 14.500000 16.099069 +-2.500000 14.600000 16.851814 +-2.500000 14.700000 17.624558 +-2.500000 14.800000 18.417303 +-2.500000 14.900000 19.230048 +-2.500000 15.000000 20.062792 + +-2.400000 -5.000000 245.151999 +-2.400000 -4.900000 242.049235 +-2.400000 -4.800000 238.966471 +-2.400000 -4.700000 235.903706 +-2.400000 -4.600000 232.860942 +-2.400000 -4.500000 229.838178 +-2.400000 -4.400000 226.835414 +-2.400000 -4.300000 223.852649 +-2.400000 -4.200000 220.889885 +-2.400000 -4.100000 217.947121 +-2.400000 -4.000000 215.024356 +-2.400000 -3.900000 212.121592 +-2.400000 -3.800000 209.238828 +-2.400000 -3.700000 206.376064 +-2.400000 -3.600000 203.533299 +-2.400000 -3.500000 200.710535 +-2.400000 -3.400000 197.907771 +-2.400000 -3.300000 195.125006 +-2.400000 -3.200000 192.362242 +-2.400000 -3.100000 189.619478 +-2.400000 -3.000000 186.896714 +-2.400000 -2.900000 184.193949 +-2.400000 -2.800000 181.511185 +-2.400000 -2.700000 178.848421 +-2.400000 -2.600000 176.205657 +-2.400000 -2.500000 173.582892 +-2.400000 -2.400000 170.980128 +-2.400000 -2.300000 168.397364 +-2.400000 -2.200000 165.834599 +-2.400000 -2.100000 163.291835 +-2.400000 -2.000000 160.769071 +-2.400000 -1.900000 158.266307 +-2.400000 -1.800000 155.783542 +-2.400000 -1.700000 153.320778 +-2.400000 -1.600000 150.878014 +-2.400000 -1.500000 148.455249 +-2.400000 -1.400000 146.052485 +-2.400000 -1.300000 143.669721 +-2.400000 -1.200000 141.306957 +-2.400000 -1.100000 138.964192 +-2.400000 -1.000000 136.641428 +-2.400000 -0.900000 134.338664 +-2.400000 -0.800000 132.055899 +-2.400000 -0.700000 129.793135 +-2.400000 -0.600000 127.550371 +-2.400000 -0.500000 125.327607 +-2.400000 -0.400000 123.124842 +-2.400000 -0.300000 120.942078 +-2.400000 -0.200000 118.779314 +-2.400000 -0.100000 116.636549 +-2.400000 -0.000000 114.513785 +-2.400000 0.100000 112.411021 +-2.400000 0.200000 110.328257 +-2.400000 0.300000 108.265492 +-2.400000 0.400000 106.222728 +-2.400000 0.500000 104.199964 +-2.400000 0.600000 102.197200 +-2.400000 0.700000 100.214435 +-2.400000 0.800000 98.251671 +-2.400000 0.900000 96.308907 +-2.400000 1.000000 94.386142 +-2.400000 1.100000 92.483378 +-2.400000 1.200000 90.600614 +-2.400000 1.300000 88.737850 +-2.400000 1.400000 86.895085 +-2.400000 1.500000 85.072321 +-2.400000 1.600000 83.269557 +-2.400000 1.700000 81.486792 +-2.400000 1.800000 79.724028 +-2.400000 1.900000 77.981264 +-2.400000 2.000000 76.258500 +-2.400000 2.100000 74.555735 +-2.400000 2.200000 72.872971 +-2.400000 2.300000 71.210207 +-2.400000 2.400000 69.567442 +-2.400000 2.500000 67.944678 +-2.400000 2.600000 66.341914 +-2.400000 2.700000 64.759150 +-2.400000 2.800000 63.196385 +-2.400000 2.900000 61.653621 +-2.400000 3.000000 60.130857 +-2.400000 3.100000 58.628092 +-2.400000 3.200000 57.145328 +-2.400000 3.300000 55.682564 +-2.400000 3.400000 54.239800 +-2.400000 3.500000 52.817035 +-2.400000 3.600000 51.414271 +-2.400000 3.700000 50.031507 +-2.400000 3.800000 48.668743 +-2.400000 3.900000 47.325978 +-2.400000 4.000000 46.003214 +-2.400000 4.100000 44.700450 +-2.400000 4.200000 43.417685 +-2.400000 4.300000 42.154921 +-2.400000 4.400000 40.912157 +-2.400000 4.500000 39.689393 +-2.400000 4.600000 38.486628 +-2.400000 4.700000 37.303864 +-2.400000 4.800000 36.141100 +-2.400000 4.900000 34.998335 +-2.400000 5.000000 33.875571 +-2.400000 5.100000 32.772807 +-2.400000 5.200000 31.690043 +-2.400000 5.300000 30.627278 +-2.400000 5.400000 29.584514 +-2.400000 5.500000 28.561750 +-2.400000 5.600000 27.558985 +-2.400000 5.700000 26.576221 +-2.400000 5.800000 25.613457 +-2.400000 5.900000 24.670693 +-2.400000 6.000000 23.747928 +-2.400000 6.100000 22.845164 +-2.400000 6.200000 21.962400 +-2.400000 6.300000 21.099635 +-2.400000 6.400000 20.256871 +-2.400000 6.500000 19.434107 +-2.400000 6.600000 18.631343 +-2.400000 6.700000 17.848578 +-2.400000 6.800000 17.085814 +-2.400000 6.900000 16.343050 +-2.400000 7.000000 15.620286 +-2.400000 7.100000 14.917521 +-2.400000 7.200000 14.234757 +-2.400000 7.300000 13.571993 +-2.400000 7.400000 12.929228 +-2.400000 7.500000 12.306464 +-2.400000 7.600000 11.703700 +-2.400000 7.700000 11.120936 +-2.400000 7.800000 10.558171 +-2.400000 7.900000 10.015407 +-2.400000 8.000000 9.492643 +-2.400000 8.100000 8.989878 +-2.400000 8.200000 8.507114 +-2.400000 8.300000 8.044350 +-2.400000 8.400000 7.601586 +-2.400000 8.500000 7.178821 +-2.400000 8.600000 6.776057 +-2.400000 8.700000 6.393293 +-2.400000 8.800000 6.030528 +-2.400000 8.900000 5.687764 +-2.400000 9.000000 5.365000 +-2.400000 9.100000 5.062236 +-2.400000 9.200000 4.779471 +-2.400000 9.300000 4.516707 +-2.400000 9.400000 4.273943 +-2.400000 9.500000 4.051178 +-2.400000 9.600000 3.848414 +-2.400000 9.700000 3.665650 +-2.400000 9.800000 3.502886 +-2.400000 9.900000 3.360121 +-2.400000 10.000000 3.237357 +-2.400000 10.100000 3.134593 +-2.400000 10.200000 3.051828 +-2.400000 10.300000 2.989064 +-2.400000 10.400000 2.946300 +-2.400000 10.500000 2.923536 +-2.400000 10.600000 2.920771 +-2.400000 10.700000 2.938007 +-2.400000 10.800000 2.975243 +-2.400000 10.900000 3.032479 +-2.400000 11.000000 3.109714 +-2.400000 11.100000 3.206950 +-2.400000 11.200000 3.324186 +-2.400000 11.300000 3.461421 +-2.400000 11.400000 3.618657 +-2.400000 11.500000 3.795893 +-2.400000 11.600000 3.993129 +-2.400000 11.700000 4.210364 +-2.400000 11.800000 4.447600 +-2.400000 11.900000 4.704836 +-2.400000 12.000000 4.982071 +-2.400000 12.100000 5.279307 +-2.400000 12.200000 5.596543 +-2.400000 12.300000 5.933779 +-2.400000 12.400000 6.291014 +-2.400000 12.500000 6.668250 +-2.400000 12.600000 7.065486 +-2.400000 12.700000 7.482721 +-2.400000 12.800000 7.919957 +-2.400000 12.900000 8.377193 +-2.400000 13.000000 8.854429 +-2.400000 13.100000 9.351664 +-2.400000 13.200000 9.868900 +-2.400000 13.300000 10.406136 +-2.400000 13.400000 10.963371 +-2.400000 13.500000 11.540607 +-2.400000 13.600000 12.137843 +-2.400000 13.700000 12.755079 +-2.400000 13.800000 13.392314 +-2.400000 13.900000 14.049550 +-2.400000 14.000000 14.726786 +-2.400000 14.100000 15.424022 +-2.400000 14.200000 16.141257 +-2.400000 14.300000 16.878493 +-2.400000 14.400000 17.635729 +-2.400000 14.500000 18.412964 +-2.400000 14.600000 19.210200 +-2.400000 14.700000 20.027436 +-2.400000 14.800000 20.864672 +-2.400000 14.900000 21.721907 +-2.400000 15.000000 22.599143 + +-2.300000 -5.000000 239.039136 +-2.300000 -4.900000 235.980346 +-2.300000 -4.800000 232.941556 +-2.300000 -4.700000 229.922767 +-2.300000 -4.600000 226.923977 +-2.300000 -4.500000 223.945187 +-2.300000 -4.400000 220.986397 +-2.300000 -4.300000 218.047607 +-2.300000 -4.200000 215.128817 +-2.300000 -4.100000 212.230027 +-2.300000 -4.000000 209.351237 +-2.300000 -3.900000 206.492447 +-2.300000 -3.800000 203.653657 +-2.300000 -3.700000 200.834867 +-2.300000 -3.600000 198.036077 +-2.300000 -3.500000 195.257287 +-2.300000 -3.400000 192.498497 +-2.300000 -3.300000 189.759707 +-2.300000 -3.200000 187.040917 +-2.300000 -3.100000 184.342127 +-2.300000 -3.000000 181.663337 +-2.300000 -2.900000 179.004547 +-2.300000 -2.800000 176.365757 +-2.300000 -2.700000 173.746968 +-2.300000 -2.600000 171.148178 +-2.300000 -2.500000 168.569388 +-2.300000 -2.400000 166.010598 +-2.300000 -2.300000 163.471808 +-2.300000 -2.200000 160.953018 +-2.300000 -2.100000 158.454228 +-2.300000 -2.000000 155.975438 +-2.300000 -1.900000 153.516648 +-2.300000 -1.800000 151.077858 +-2.300000 -1.700000 148.659068 +-2.300000 -1.600000 146.260278 +-2.300000 -1.500000 143.881488 +-2.300000 -1.400000 141.522698 +-2.300000 -1.300000 139.183908 +-2.300000 -1.200000 136.865118 +-2.300000 -1.100000 134.566328 +-2.300000 -1.000000 132.287538 +-2.300000 -0.900000 130.028748 +-2.300000 -0.800000 127.789959 +-2.300000 -0.700000 125.571169 +-2.300000 -0.600000 123.372379 +-2.300000 -0.500000 121.193589 +-2.300000 -0.400000 119.034799 +-2.300000 -0.300000 116.896009 +-2.300000 -0.200000 114.777219 +-2.300000 -0.100000 112.678429 +-2.300000 -0.000000 110.599639 +-2.300000 0.100000 108.540849 +-2.300000 0.200000 106.502059 +-2.300000 0.300000 104.483269 +-2.300000 0.400000 102.484479 +-2.300000 0.500000 100.505689 +-2.300000 0.600000 98.546899 +-2.300000 0.700000 96.608109 +-2.300000 0.800000 94.689319 +-2.300000 0.900000 92.790529 +-2.300000 1.000000 90.911739 +-2.300000 1.100000 89.052949 +-2.300000 1.200000 87.214160 +-2.300000 1.300000 85.395370 +-2.300000 1.400000 83.596580 +-2.300000 1.500000 81.817790 +-2.300000 1.600000 80.059000 +-2.300000 1.700000 78.320210 +-2.300000 1.800000 76.601420 +-2.300000 1.900000 74.902630 +-2.300000 2.000000 73.223840 +-2.300000 2.100000 71.565050 +-2.300000 2.200000 69.926260 +-2.300000 2.300000 68.307470 +-2.300000 2.400000 66.708680 +-2.300000 2.500000 65.129890 +-2.300000 2.600000 63.571100 +-2.300000 2.700000 62.032310 +-2.300000 2.800000 60.513520 +-2.300000 2.900000 59.014730 +-2.300000 3.000000 57.535940 +-2.300000 3.100000 56.077150 +-2.300000 3.200000 54.638361 +-2.300000 3.300000 53.219571 +-2.300000 3.400000 51.820781 +-2.300000 3.500000 50.441991 +-2.300000 3.600000 49.083201 +-2.300000 3.700000 47.744411 +-2.300000 3.800000 46.425621 +-2.300000 3.900000 45.126831 +-2.300000 4.000000 43.848041 +-2.300000 4.100000 42.589251 +-2.300000 4.200000 41.350461 +-2.300000 4.300000 40.131671 +-2.300000 4.400000 38.932881 +-2.300000 4.500000 37.754091 +-2.300000 4.600000 36.595301 +-2.300000 4.700000 35.456511 +-2.300000 4.800000 34.337721 +-2.300000 4.900000 33.238931 +-2.300000 5.000000 32.160141 +-2.300000 5.100000 31.101352 +-2.300000 5.200000 30.062562 +-2.300000 5.300000 29.043772 +-2.300000 5.400000 28.044982 +-2.300000 5.500000 27.066192 +-2.300000 5.600000 26.107402 +-2.300000 5.700000 25.168612 +-2.300000 5.800000 24.249822 +-2.300000 5.900000 23.351032 +-2.300000 6.000000 22.472242 +-2.300000 6.100000 21.613452 +-2.300000 6.200000 20.774662 +-2.300000 6.300000 19.955872 +-2.300000 6.400000 19.157082 +-2.300000 6.500000 18.378292 +-2.300000 6.600000 17.619502 +-2.300000 6.700000 16.880712 +-2.300000 6.800000 16.161922 +-2.300000 6.900000 15.463132 +-2.300000 7.000000 14.784342 +-2.300000 7.100000 14.125553 +-2.300000 7.200000 13.486763 +-2.300000 7.300000 12.867973 +-2.300000 7.400000 12.269183 +-2.300000 7.500000 11.690393 +-2.300000 7.600000 11.131603 +-2.300000 7.700000 10.592813 +-2.300000 7.800000 10.074023 +-2.300000 7.900000 9.575233 +-2.300000 8.000000 9.096443 +-2.300000 8.100000 8.637653 +-2.300000 8.200000 8.198863 +-2.300000 8.300000 7.780073 +-2.300000 8.400000 7.381283 +-2.300000 8.500000 7.002493 +-2.300000 8.600000 6.643703 +-2.300000 8.700000 6.304913 +-2.300000 8.800000 5.986123 +-2.300000 8.900000 5.687333 +-2.300000 9.000000 5.408544 +-2.300000 9.100000 5.149754 +-2.300000 9.200000 4.910964 +-2.300000 9.300000 4.692174 +-2.300000 9.400000 4.493384 +-2.300000 9.500000 4.314594 +-2.300000 9.600000 4.155804 +-2.300000 9.700000 4.017014 +-2.300000 9.800000 3.898224 +-2.300000 9.900000 3.799434 +-2.300000 10.000000 3.720644 +-2.300000 10.100000 3.661854 +-2.300000 10.200000 3.623064 +-2.300000 10.300000 3.604274 +-2.300000 10.400000 3.605484 +-2.300000 10.500000 3.626694 +-2.300000 10.600000 3.667904 +-2.300000 10.700000 3.729114 +-2.300000 10.800000 3.810324 +-2.300000 10.900000 3.911534 +-2.300000 11.000000 4.032745 +-2.300000 11.100000 4.173955 +-2.300000 11.200000 4.335165 +-2.300000 11.300000 4.516375 +-2.300000 11.400000 4.717585 +-2.300000 11.500000 4.938795 +-2.300000 11.600000 5.180005 +-2.300000 11.700000 5.441215 +-2.300000 11.800000 5.722425 +-2.300000 11.900000 6.023635 +-2.300000 12.000000 6.344845 +-2.300000 12.100000 6.686055 +-2.300000 12.200000 7.047265 +-2.300000 12.300000 7.428475 +-2.300000 12.400000 7.829685 +-2.300000 12.500000 8.250895 +-2.300000 12.600000 8.692105 +-2.300000 12.700000 9.153315 +-2.300000 12.800000 9.634525 +-2.300000 12.900000 10.135736 +-2.300000 13.000000 10.656946 +-2.300000 13.100000 11.198156 +-2.300000 13.200000 11.759366 +-2.300000 13.300000 12.340576 +-2.300000 13.400000 12.941786 +-2.300000 13.500000 13.562996 +-2.300000 13.600000 14.204206 +-2.300000 13.700000 14.865416 +-2.300000 13.800000 15.546626 +-2.300000 13.900000 16.247836 +-2.300000 14.000000 16.969046 +-2.300000 14.100000 17.710256 +-2.300000 14.200000 18.471466 +-2.300000 14.300000 19.252676 +-2.300000 14.400000 20.053886 +-2.300000 14.500000 20.875096 +-2.300000 14.600000 21.716306 +-2.300000 14.700000 22.577516 +-2.300000 14.800000 23.458726 +-2.300000 14.900000 24.359937 +-2.300000 15.000000 25.281147 + +-2.200000 -5.000000 233.165042 +-2.200000 -4.900000 230.149710 +-2.200000 -4.800000 227.154378 +-2.200000 -4.700000 224.179045 +-2.200000 -4.600000 221.223713 +-2.200000 -4.500000 218.288381 +-2.200000 -4.400000 215.373048 +-2.200000 -4.300000 212.477716 +-2.200000 -4.200000 209.602384 +-2.200000 -4.100000 206.747051 +-2.200000 -4.000000 203.911719 +-2.200000 -3.900000 201.096386 +-2.200000 -3.800000 198.301054 +-2.200000 -3.700000 195.525722 +-2.200000 -3.600000 192.770389 +-2.200000 -3.500000 190.035057 +-2.200000 -3.400000 187.319725 +-2.200000 -3.300000 184.624392 +-2.200000 -3.200000 181.949060 +-2.200000 -3.100000 179.293728 +-2.200000 -3.000000 176.658395 +-2.200000 -2.900000 174.043063 +-2.200000 -2.800000 171.447731 +-2.200000 -2.700000 168.872398 +-2.200000 -2.600000 166.317066 +-2.200000 -2.500000 163.781733 +-2.200000 -2.400000 161.266401 +-2.200000 -2.300000 158.771069 +-2.200000 -2.200000 156.295736 +-2.200000 -2.100000 153.840404 +-2.200000 -2.000000 151.405072 +-2.200000 -1.900000 148.989739 +-2.200000 -1.800000 146.594407 +-2.200000 -1.700000 144.219075 +-2.200000 -1.600000 141.863742 +-2.200000 -1.500000 139.528410 +-2.200000 -1.400000 137.213078 +-2.200000 -1.300000 134.917745 +-2.200000 -1.200000 132.642413 +-2.200000 -1.100000 130.387081 +-2.200000 -1.000000 128.151748 +-2.200000 -0.900000 125.936416 +-2.200000 -0.800000 123.741083 +-2.200000 -0.700000 121.565751 +-2.200000 -0.600000 119.410419 +-2.200000 -0.500000 117.275086 +-2.200000 -0.400000 115.159754 +-2.200000 -0.300000 113.064422 +-2.200000 -0.200000 110.989089 +-2.200000 -0.100000 108.933757 +-2.200000 -0.000000 106.898425 +-2.200000 0.100000 104.883092 +-2.200000 0.200000 102.887760 +-2.200000 0.300000 100.912428 +-2.200000 0.400000 98.957095 +-2.200000 0.500000 97.021763 +-2.200000 0.600000 95.106431 +-2.200000 0.700000 93.211098 +-2.200000 0.800000 91.335766 +-2.200000 0.900000 89.480433 +-2.200000 1.000000 87.645101 +-2.200000 1.100000 85.829769 +-2.200000 1.200000 84.034436 +-2.200000 1.300000 82.259104 +-2.200000 1.400000 80.503772 +-2.200000 1.500000 78.768439 +-2.200000 1.600000 77.053107 +-2.200000 1.700000 75.357775 +-2.200000 1.800000 73.682442 +-2.200000 1.900000 72.027110 +-2.200000 2.000000 70.391778 +-2.200000 2.100000 68.776445 +-2.200000 2.200000 67.181113 +-2.200000 2.300000 65.605780 +-2.200000 2.400000 64.050448 +-2.200000 2.500000 62.515116 +-2.200000 2.600000 60.999783 +-2.200000 2.700000 59.504451 +-2.200000 2.800000 58.029119 +-2.200000 2.900000 56.573786 +-2.200000 3.000000 55.138454 +-2.200000 3.100000 53.723122 +-2.200000 3.200000 52.327789 +-2.200000 3.300000 50.952457 +-2.200000 3.400000 49.597125 +-2.200000 3.500000 48.261792 +-2.200000 3.600000 46.946460 +-2.200000 3.700000 45.651128 +-2.200000 3.800000 44.375795 +-2.200000 3.900000 43.120463 +-2.200000 4.000000 41.885130 +-2.200000 4.100000 40.669798 +-2.200000 4.200000 39.474466 +-2.200000 4.300000 38.299133 +-2.200000 4.400000 37.143801 +-2.200000 4.500000 36.008469 +-2.200000 4.600000 34.893136 +-2.200000 4.700000 33.797804 +-2.200000 4.800000 32.722472 +-2.200000 4.900000 31.667139 +-2.200000 5.000000 30.631807 +-2.200000 5.100000 29.616475 +-2.200000 5.200000 28.621142 +-2.200000 5.300000 27.645810 +-2.200000 5.400000 26.690477 +-2.200000 5.500000 25.755145 +-2.200000 5.600000 24.839813 +-2.200000 5.700000 23.944480 +-2.200000 5.800000 23.069148 +-2.200000 5.900000 22.213816 +-2.200000 6.000000 21.378483 +-2.200000 6.100000 20.563151 +-2.200000 6.200000 19.767819 +-2.200000 6.300000 18.992486 +-2.200000 6.400000 18.237154 +-2.200000 6.500000 17.501822 +-2.200000 6.600000 16.786489 +-2.200000 6.700000 16.091157 +-2.200000 6.800000 15.415825 +-2.200000 6.900000 14.760492 +-2.200000 7.000000 14.125160 +-2.200000 7.100000 13.509827 +-2.200000 7.200000 12.914495 +-2.200000 7.300000 12.339163 +-2.200000 7.400000 11.783830 +-2.200000 7.500000 11.248498 +-2.200000 7.600000 10.733166 +-2.200000 7.700000 10.237833 +-2.200000 7.800000 9.762501 +-2.200000 7.900000 9.307169 +-2.200000 8.000000 8.871836 +-2.200000 8.100000 8.456504 +-2.200000 8.200000 8.061172 +-2.200000 8.300000 7.685839 +-2.200000 8.400000 7.330507 +-2.200000 8.500000 6.995175 +-2.200000 8.600000 6.679842 +-2.200000 8.700000 6.384510 +-2.200000 8.800000 6.109177 +-2.200000 8.900000 5.853845 +-2.200000 9.000000 5.618513 +-2.200000 9.100000 5.403180 +-2.200000 9.200000 5.207848 +-2.200000 9.300000 5.032516 +-2.200000 9.400000 4.877183 +-2.200000 9.500000 4.741851 +-2.200000 9.600000 4.626519 +-2.200000 9.700000 4.531186 +-2.200000 9.800000 4.455854 +-2.200000 9.900000 4.400522 +-2.200000 10.000000 4.365189 +-2.200000 10.100000 4.349857 +-2.200000 10.200000 4.354524 +-2.200000 10.300000 4.379192 +-2.200000 10.400000 4.423860 +-2.200000 10.500000 4.488527 +-2.200000 10.600000 4.573195 +-2.200000 10.700000 4.677863 +-2.200000 10.800000 4.802530 +-2.200000 10.900000 4.947198 +-2.200000 11.000000 5.111866 +-2.200000 11.100000 5.296533 +-2.200000 11.200000 5.501201 +-2.200000 11.300000 5.725869 +-2.200000 11.400000 5.970536 +-2.200000 11.500000 6.235204 +-2.200000 11.600000 6.519872 +-2.200000 11.700000 6.824539 +-2.200000 11.800000 7.149207 +-2.200000 11.900000 7.493874 +-2.200000 12.000000 7.858542 +-2.200000 12.100000 8.243210 +-2.200000 12.200000 8.647877 +-2.200000 12.300000 9.072545 +-2.200000 12.400000 9.517213 +-2.200000 12.500000 9.981880 +-2.200000 12.600000 10.466548 +-2.200000 12.700000 10.971216 +-2.200000 12.800000 11.495883 +-2.200000 12.900000 12.040551 +-2.200000 13.000000 12.605219 +-2.200000 13.100000 13.189886 +-2.200000 13.200000 13.794554 +-2.200000 13.300000 14.419221 +-2.200000 13.400000 15.063889 +-2.200000 13.500000 15.728557 +-2.200000 13.600000 16.413224 +-2.200000 13.700000 17.117892 +-2.200000 13.800000 17.842560 +-2.200000 13.900000 18.587227 +-2.200000 14.000000 19.351895 +-2.200000 14.100000 20.136563 +-2.200000 14.200000 20.941230 +-2.200000 14.300000 21.765898 +-2.200000 14.400000 22.610566 +-2.200000 14.500000 23.475233 +-2.200000 14.600000 24.359901 +-2.200000 14.700000 25.264569 +-2.200000 14.800000 26.189236 +-2.200000 14.900000 27.133904 +-2.200000 15.000000 28.098571 + +-2.100000 -5.000000 227.518887 +-2.100000 -4.900000 224.546496 +-2.100000 -4.800000 221.594104 +-2.100000 -4.700000 218.661713 +-2.100000 -4.600000 215.749321 +-2.100000 -4.500000 212.856930 +-2.100000 -4.400000 209.984538 +-2.100000 -4.300000 207.132147 +-2.100000 -4.200000 204.299755 +-2.100000 -4.100000 201.487364 +-2.100000 -4.000000 198.694972 +-2.100000 -3.900000 195.922581 +-2.100000 -3.800000 193.170189 +-2.100000 -3.700000 190.437798 +-2.100000 -3.600000 187.725406 +-2.100000 -3.500000 185.033015 +-2.100000 -3.400000 182.360623 +-2.100000 -3.300000 179.708232 +-2.100000 -3.200000 177.075840 +-2.100000 -3.100000 174.463449 +-2.100000 -3.000000 171.871057 +-2.100000 -2.900000 169.298666 +-2.100000 -2.800000 166.746274 +-2.100000 -2.700000 164.213883 +-2.100000 -2.600000 161.701491 +-2.100000 -2.500000 159.209100 +-2.100000 -2.400000 156.736708 +-2.100000 -2.300000 154.284317 +-2.100000 -2.200000 151.851925 +-2.100000 -2.100000 149.439534 +-2.100000 -2.000000 147.047142 +-2.100000 -1.900000 144.674751 +-2.100000 -1.800000 142.322359 +-2.100000 -1.700000 139.989968 +-2.100000 -1.600000 137.677576 +-2.100000 -1.500000 135.385185 +-2.100000 -1.400000 133.112793 +-2.100000 -1.300000 130.860402 +-2.100000 -1.200000 128.628010 +-2.100000 -1.100000 126.415619 +-2.100000 -1.000000 124.223227 +-2.100000 -0.900000 122.050836 +-2.100000 -0.800000 119.898444 +-2.100000 -0.700000 117.766053 +-2.100000 -0.600000 115.653661 +-2.100000 -0.500000 113.561270 +-2.100000 -0.400000 111.488878 +-2.100000 -0.300000 109.436487 +-2.100000 -0.200000 107.404095 +-2.100000 -0.100000 105.391704 +-2.100000 -0.000000 103.399312 +-2.100000 0.100000 101.426921 +-2.100000 0.200000 99.474529 +-2.100000 0.300000 97.542138 +-2.100000 0.400000 95.629746 +-2.100000 0.500000 93.737355 +-2.100000 0.600000 91.864963 +-2.100000 0.700000 90.012572 +-2.100000 0.800000 88.180180 +-2.100000 0.900000 86.367789 +-2.100000 1.000000 84.575397 +-2.100000 1.100000 82.803006 +-2.100000 1.200000 81.050614 +-2.100000 1.300000 79.318223 +-2.100000 1.400000 77.605831 +-2.100000 1.500000 75.913440 +-2.100000 1.600000 74.241048 +-2.100000 1.700000 72.588657 +-2.100000 1.800000 70.956265 +-2.100000 1.900000 69.343874 +-2.100000 2.000000 67.751482 +-2.100000 2.100000 66.179091 +-2.100000 2.200000 64.626699 +-2.100000 2.300000 63.094308 +-2.100000 2.400000 61.581916 +-2.100000 2.500000 60.089525 +-2.100000 2.600000 58.617133 +-2.100000 2.700000 57.164742 +-2.100000 2.800000 55.732350 +-2.100000 2.900000 54.319959 +-2.100000 3.000000 52.927567 +-2.100000 3.100000 51.555176 +-2.100000 3.200000 50.202784 +-2.100000 3.300000 48.870393 +-2.100000 3.400000 47.558001 +-2.100000 3.500000 46.265610 +-2.100000 3.600000 44.993218 +-2.100000 3.700000 43.740827 +-2.100000 3.800000 42.508435 +-2.100000 3.900000 41.296044 +-2.100000 4.000000 40.103652 +-2.100000 4.100000 38.931261 +-2.100000 4.200000 37.778869 +-2.100000 4.300000 36.646478 +-2.100000 4.400000 35.534086 +-2.100000 4.500000 34.441695 +-2.100000 4.600000 33.369303 +-2.100000 4.700000 32.316912 +-2.100000 4.800000 31.284520 +-2.100000 4.900000 30.272129 +-2.100000 5.000000 29.279737 +-2.100000 5.100000 28.307346 +-2.100000 5.200000 27.354954 +-2.100000 5.300000 26.422563 +-2.100000 5.400000 25.510171 +-2.100000 5.500000 24.617780 +-2.100000 5.600000 23.745388 +-2.100000 5.700000 22.892997 +-2.100000 5.800000 22.060605 +-2.100000 5.900000 21.248214 +-2.100000 6.000000 20.455822 +-2.100000 6.100000 19.683431 +-2.100000 6.200000 18.931039 +-2.100000 6.300000 18.198648 +-2.100000 6.400000 17.486256 +-2.100000 6.500000 16.793865 +-2.100000 6.600000 16.121473 +-2.100000 6.700000 15.469082 +-2.100000 6.800000 14.836690 +-2.100000 6.900000 14.224299 +-2.100000 7.000000 13.631907 +-2.100000 7.100000 13.059516 +-2.100000 7.200000 12.507124 +-2.100000 7.300000 11.974733 +-2.100000 7.400000 11.462341 +-2.100000 7.500000 10.969950 +-2.100000 7.600000 10.497558 +-2.100000 7.700000 10.045167 +-2.100000 7.800000 9.612775 +-2.100000 7.900000 9.200384 +-2.100000 8.000000 8.807992 +-2.100000 8.100000 8.435601 +-2.100000 8.200000 8.083209 +-2.100000 8.300000 7.750818 +-2.100000 8.400000 7.438426 +-2.100000 8.500000 7.146035 +-2.100000 8.600000 6.873643 +-2.100000 8.700000 6.621252 +-2.100000 8.800000 6.388860 +-2.100000 8.900000 6.176469 +-2.100000 9.000000 5.984077 +-2.100000 9.100000 5.811686 +-2.100000 9.200000 5.659294 +-2.100000 9.300000 5.526903 +-2.100000 9.400000 5.414511 +-2.100000 9.500000 5.322120 +-2.100000 9.600000 5.249728 +-2.100000 9.700000 5.197337 +-2.100000 9.800000 5.164945 +-2.100000 9.900000 5.152554 +-2.100000 10.000000 5.160162 +-2.100000 10.100000 5.187771 +-2.100000 10.200000 5.235379 +-2.100000 10.300000 5.302988 +-2.100000 10.400000 5.390596 +-2.100000 10.500000 5.498205 +-2.100000 10.600000 5.625813 +-2.100000 10.700000 5.773422 +-2.100000 10.800000 5.941030 +-2.100000 10.900000 6.128639 +-2.100000 11.000000 6.336247 +-2.100000 11.100000 6.563856 +-2.100000 11.200000 6.811464 +-2.100000 11.300000 7.079073 +-2.100000 11.400000 7.366681 +-2.100000 11.500000 7.674290 +-2.100000 11.600000 8.001898 +-2.100000 11.700000 8.349507 +-2.100000 11.800000 8.717115 +-2.100000 11.900000 9.104724 +-2.100000 12.000000 9.512332 +-2.100000 12.100000 9.939941 +-2.100000 12.200000 10.387549 +-2.100000 12.300000 10.855158 +-2.100000 12.400000 11.342766 +-2.100000 12.500000 11.850375 +-2.100000 12.600000 12.377983 +-2.100000 12.700000 12.925592 +-2.100000 12.800000 13.493200 +-2.100000 12.900000 14.080809 +-2.100000 13.000000 14.688417 +-2.100000 13.100000 15.316026 +-2.100000 13.200000 15.963634 +-2.100000 13.300000 16.631243 +-2.100000 13.400000 17.318851 +-2.100000 13.500000 18.026460 +-2.100000 13.600000 18.754068 +-2.100000 13.700000 19.501677 +-2.100000 13.800000 20.269285 +-2.100000 13.900000 21.056894 +-2.100000 14.000000 21.864502 +-2.100000 14.100000 22.692111 +-2.100000 14.200000 23.539719 +-2.100000 14.300000 24.407328 +-2.100000 14.400000 25.294936 +-2.100000 14.500000 26.202545 +-2.100000 14.600000 27.130153 +-2.100000 14.700000 28.077762 +-2.100000 14.800000 29.045370 +-2.100000 14.900000 30.032979 +-2.100000 15.000000 31.040587 + +-2.000000 -5.000000 222.089316 +-2.000000 -4.900000 219.159349 +-2.000000 -4.800000 216.249381 +-2.000000 -4.700000 213.359414 +-2.000000 -4.600000 210.489447 +-2.000000 -4.500000 207.639479 +-2.000000 -4.400000 204.809512 +-2.000000 -4.300000 201.999544 +-2.000000 -4.200000 199.209577 +-2.000000 -4.100000 196.439610 +-2.000000 -4.000000 193.689642 +-2.000000 -3.900000 190.959675 +-2.000000 -3.800000 188.249707 +-2.000000 -3.700000 185.559740 +-2.000000 -3.600000 182.889773 +-2.000000 -3.500000 180.239805 +-2.000000 -3.400000 177.609838 +-2.000000 -3.300000 174.999871 +-2.000000 -3.200000 172.409903 +-2.000000 -3.100000 169.839936 +-2.000000 -3.000000 167.289968 +-2.000000 -2.900000 164.760001 +-2.000000 -2.800000 162.250034 +-2.000000 -2.700000 159.760066 +-2.000000 -2.600000 157.290099 +-2.000000 -2.500000 154.840132 +-2.000000 -2.400000 152.410164 +-2.000000 -2.300000 150.000197 +-2.000000 -2.200000 147.610229 +-2.000000 -2.100000 145.240262 +-2.000000 -2.000000 142.890295 +-2.000000 -1.900000 140.560327 +-2.000000 -1.800000 138.250360 +-2.000000 -1.700000 135.960393 +-2.000000 -1.600000 133.690425 +-2.000000 -1.500000 131.440458 +-2.000000 -1.400000 129.210490 +-2.000000 -1.300000 127.000523 +-2.000000 -1.200000 124.810556 +-2.000000 -1.100000 122.640588 +-2.000000 -1.000000 120.490621 +-2.000000 -0.900000 118.360653 +-2.000000 -0.800000 116.250686 +-2.000000 -0.700000 114.160719 +-2.000000 -0.600000 112.090751 +-2.000000 -0.500000 110.040784 +-2.000000 -0.400000 108.010817 +-2.000000 -0.300000 106.000849 +-2.000000 -0.200000 104.010882 +-2.000000 -0.100000 102.040914 +-2.000000 -0.000000 100.090947 +-2.000000 0.100000 98.160980 +-2.000000 0.200000 96.251012 +-2.000000 0.300000 94.361045 +-2.000000 0.400000 92.491078 +-2.000000 0.500000 90.641110 +-2.000000 0.600000 88.811143 +-2.000000 0.700000 87.001175 +-2.000000 0.800000 85.211208 +-2.000000 0.900000 83.441241 +-2.000000 1.000000 81.691273 +-2.000000 1.100000 79.961306 +-2.000000 1.200000 78.251338 +-2.000000 1.300000 76.561371 +-2.000000 1.400000 74.891404 +-2.000000 1.500000 73.241436 +-2.000000 1.600000 71.611469 +-2.000000 1.700000 70.001502 +-2.000000 1.800000 68.411534 +-2.000000 1.900000 66.841567 +-2.000000 2.000000 65.291599 +-2.000000 2.100000 63.761632 +-2.000000 2.200000 62.251665 +-2.000000 2.300000 60.761697 +-2.000000 2.400000 59.291730 +-2.000000 2.500000 57.841763 +-2.000000 2.600000 56.411795 +-2.000000 2.700000 55.001828 +-2.000000 2.800000 53.611860 +-2.000000 2.900000 52.241893 +-2.000000 3.000000 50.891926 +-2.000000 3.100000 49.561958 +-2.000000 3.200000 48.251991 +-2.000000 3.300000 46.962024 +-2.000000 3.400000 45.692056 +-2.000000 3.500000 44.442089 +-2.000000 3.600000 43.212121 +-2.000000 3.700000 42.002154 +-2.000000 3.800000 40.812187 +-2.000000 3.900000 39.642219 +-2.000000 4.000000 38.492252 +-2.000000 4.100000 37.362284 +-2.000000 4.200000 36.252317 +-2.000000 4.300000 35.162350 +-2.000000 4.400000 34.092382 +-2.000000 4.500000 33.042415 +-2.000000 4.600000 32.012448 +-2.000000 4.700000 31.002480 +-2.000000 4.800000 30.012513 +-2.000000 4.900000 29.042545 +-2.000000 5.000000 28.092578 +-2.000000 5.100000 27.162611 +-2.000000 5.200000 26.252643 +-2.000000 5.300000 25.362676 +-2.000000 5.400000 24.492709 +-2.000000 5.500000 23.642741 +-2.000000 5.600000 22.812774 +-2.000000 5.700000 22.002806 +-2.000000 5.800000 21.212839 +-2.000000 5.900000 20.442872 +-2.000000 6.000000 19.692904 +-2.000000 6.100000 18.962937 +-2.000000 6.200000 18.252970 +-2.000000 6.300000 17.563002 +-2.000000 6.400000 16.893035 +-2.000000 6.500000 16.243067 +-2.000000 6.600000 15.613100 +-2.000000 6.700000 15.003133 +-2.000000 6.800000 14.413165 +-2.000000 6.900000 13.843198 +-2.000000 7.000000 13.293230 +-2.000000 7.100000 12.763263 +-2.000000 7.200000 12.253296 +-2.000000 7.300000 11.763328 +-2.000000 7.400000 11.293361 +-2.000000 7.500000 10.843394 +-2.000000 7.600000 10.413426 +-2.000000 7.700000 10.003459 +-2.000000 7.800000 9.613491 +-2.000000 7.900000 9.243524 +-2.000000 8.000000 8.893557 +-2.000000 8.100000 8.563589 +-2.000000 8.200000 8.253622 +-2.000000 8.300000 7.963655 +-2.000000 8.400000 7.693687 +-2.000000 8.500000 7.443720 +-2.000000 8.600000 7.213752 +-2.000000 8.700000 7.003785 +-2.000000 8.800000 6.813818 +-2.000000 8.900000 6.643850 +-2.000000 9.000000 6.493883 +-2.000000 9.100000 6.363916 +-2.000000 9.200000 6.253948 +-2.000000 9.300000 6.163981 +-2.000000 9.400000 6.094013 +-2.000000 9.500000 6.044046 +-2.000000 9.600000 6.014079 +-2.000000 9.700000 6.004111 +-2.000000 9.800000 6.014144 +-2.000000 9.900000 6.044176 +-2.000000 10.000000 6.094209 +-2.000000 10.100000 6.164242 +-2.000000 10.200000 6.254274 +-2.000000 10.300000 6.364307 +-2.000000 10.400000 6.494340 +-2.000000 10.500000 6.644372 +-2.000000 10.600000 6.814405 +-2.000000 10.700000 7.004437 +-2.000000 10.800000 7.214470 +-2.000000 10.900000 7.444503 +-2.000000 11.000000 7.694535 +-2.000000 11.100000 7.964568 +-2.000000 11.200000 8.254601 +-2.000000 11.300000 8.564633 +-2.000000 11.400000 8.894666 +-2.000000 11.500000 9.244698 +-2.000000 11.600000 9.614731 +-2.000000 11.700000 10.004764 +-2.000000 11.800000 10.414796 +-2.000000 11.900000 10.844829 +-2.000000 12.000000 11.294861 +-2.000000 12.100000 11.764894 +-2.000000 12.200000 12.254927 +-2.000000 12.300000 12.764959 +-2.000000 12.400000 13.294992 +-2.000000 12.500000 13.845025 +-2.000000 12.600000 14.415057 +-2.000000 12.700000 15.005090 +-2.000000 12.800000 15.615122 +-2.000000 12.900000 16.245155 +-2.000000 13.000000 16.895188 +-2.000000 13.100000 17.565220 +-2.000000 13.200000 18.255253 +-2.000000 13.300000 18.965286 +-2.000000 13.400000 19.695318 +-2.000000 13.500000 20.445351 +-2.000000 13.600000 21.215383 +-2.000000 13.700000 22.005416 +-2.000000 13.800000 22.815449 +-2.000000 13.900000 23.645481 +-2.000000 14.000000 24.495514 +-2.000000 14.100000 25.365547 +-2.000000 14.200000 26.255579 +-2.000000 14.300000 27.165612 +-2.000000 14.400000 28.095644 +-2.000000 14.500000 29.045677 +-2.000000 14.600000 30.015710 +-2.000000 14.700000 31.005742 +-2.000000 14.800000 32.015775 +-2.000000 14.900000 33.045807 +-2.000000 15.000000 34.095840 + +-1.900000 -5.000000 216.864531 +-1.900000 -4.900000 213.976471 +-1.900000 -4.800000 211.108411 +-1.900000 -4.700000 208.260351 +-1.900000 -4.600000 205.432291 +-1.900000 -4.500000 202.624231 +-1.900000 -4.400000 199.836171 +-1.900000 -4.300000 197.068111 +-1.900000 -4.200000 194.320051 +-1.900000 -4.100000 191.591991 +-1.900000 -4.000000 188.883931 +-1.900000 -3.900000 186.195871 +-1.900000 -3.800000 183.527811 +-1.900000 -3.700000 180.879751 +-1.900000 -3.600000 178.251691 +-1.900000 -3.500000 175.643631 +-1.900000 -3.400000 173.055571 +-1.900000 -3.300000 170.487511 +-1.900000 -3.200000 167.939451 +-1.900000 -3.100000 165.411391 +-1.900000 -3.000000 162.903331 +-1.900000 -2.900000 160.415271 +-1.900000 -2.800000 157.947211 +-1.900000 -2.700000 155.499151 +-1.900000 -2.600000 153.071091 +-1.900000 -2.500000 150.663031 +-1.900000 -2.400000 148.274971 +-1.900000 -2.300000 145.906911 +-1.900000 -2.200000 143.558851 +-1.900000 -2.100000 141.230791 +-1.900000 -2.000000 138.922731 +-1.900000 -1.900000 136.634671 +-1.900000 -1.800000 134.366611 +-1.900000 -1.700000 132.118551 +-1.900000 -1.600000 129.890491 +-1.900000 -1.500000 127.682431 +-1.900000 -1.400000 125.494371 +-1.900000 -1.300000 123.326311 +-1.900000 -1.200000 121.178251 +-1.900000 -1.100000 119.050191 +-1.900000 -1.000000 116.942131 +-1.900000 -0.900000 114.854071 +-1.900000 -0.800000 112.786011 +-1.900000 -0.700000 110.737951 +-1.900000 -0.600000 108.709891 +-1.900000 -0.500000 106.701831 +-1.900000 -0.400000 104.713771 +-1.900000 -0.300000 102.745711 +-1.900000 -0.200000 100.797651 +-1.900000 -0.100000 98.869591 +-1.900000 -0.000000 96.961531 +-1.900000 0.100000 95.073471 +-1.900000 0.200000 93.205411 +-1.900000 0.300000 91.357351 +-1.900000 0.400000 89.529291 +-1.900000 0.500000 87.721231 +-1.900000 0.600000 85.933171 +-1.900000 0.700000 84.165111 +-1.900000 0.800000 82.417051 +-1.900000 0.900000 80.688991 +-1.900000 1.000000 78.980931 +-1.900000 1.100000 77.292871 +-1.900000 1.200000 75.624811 +-1.900000 1.300000 73.976751 +-1.900000 1.400000 72.348691 +-1.900000 1.500000 70.740631 +-1.900000 1.600000 69.152571 +-1.900000 1.700000 67.584511 +-1.900000 1.800000 66.036451 +-1.900000 1.900000 64.508391 +-1.900000 2.000000 63.000331 +-1.900000 2.100000 61.512271 +-1.900000 2.200000 60.044211 +-1.900000 2.300000 58.596151 +-1.900000 2.400000 57.168091 +-1.900000 2.500000 55.760031 +-1.900000 2.600000 54.371971 +-1.900000 2.700000 53.003911 +-1.900000 2.800000 51.655851 +-1.900000 2.900000 50.327791 +-1.900000 3.000000 49.019731 +-1.900000 3.100000 47.731671 +-1.900000 3.200000 46.463611 +-1.900000 3.300000 45.215551 +-1.900000 3.400000 43.987491 +-1.900000 3.500000 42.779431 +-1.900000 3.600000 41.591371 +-1.900000 3.700000 40.423311 +-1.900000 3.800000 39.275251 +-1.900000 3.900000 38.147191 +-1.900000 4.000000 37.039131 +-1.900000 4.100000 35.951071 +-1.900000 4.200000 34.883011 +-1.900000 4.300000 33.834951 +-1.900000 4.400000 32.806891 +-1.900000 4.500000 31.798831 +-1.900000 4.600000 30.810771 +-1.900000 4.700000 29.842711 +-1.900000 4.800000 28.894651 +-1.900000 4.900000 27.966591 +-1.900000 5.000000 27.058531 +-1.900000 5.100000 26.170471 +-1.900000 5.200000 25.302411 +-1.900000 5.300000 24.454351 +-1.900000 5.400000 23.626291 +-1.900000 5.500000 22.818231 +-1.900000 5.600000 22.030171 +-1.900000 5.700000 21.262111 +-1.900000 5.800000 20.514051 +-1.900000 5.900000 19.785991 +-1.900000 6.000000 19.077931 +-1.900000 6.100000 18.389871 +-1.900000 6.200000 17.721811 +-1.900000 6.300000 17.073751 +-1.900000 6.400000 16.445691 +-1.900000 6.500000 15.837631 +-1.900000 6.600000 15.249571 +-1.900000 6.700000 14.681511 +-1.900000 6.800000 14.133451 +-1.900000 6.900000 13.605391 +-1.900000 7.000000 13.097331 +-1.900000 7.100000 12.609271 +-1.900000 7.200000 12.141211 +-1.900000 7.300000 11.693151 +-1.900000 7.400000 11.265091 +-1.900000 7.500000 10.857031 +-1.900000 7.600000 10.468971 +-1.900000 7.700000 10.100911 +-1.900000 7.800000 9.752851 +-1.900000 7.900000 9.424791 +-1.900000 8.000000 9.116731 +-1.900000 8.100000 8.828671 +-1.900000 8.200000 8.560611 +-1.900000 8.300000 8.312551 +-1.900000 8.400000 8.084491 +-1.900000 8.500000 7.876431 +-1.900000 8.600000 7.688371 +-1.900000 8.700000 7.520311 +-1.900000 8.800000 7.372251 +-1.900000 8.900000 7.244191 +-1.900000 9.000000 7.136131 +-1.900000 9.100000 7.048071 +-1.900000 9.200000 6.980011 +-1.900000 9.300000 6.931951 +-1.900000 9.400000 6.903891 +-1.900000 9.500000 6.895831 +-1.900000 9.600000 6.907771 +-1.900000 9.700000 6.939711 +-1.900000 9.800000 6.991651 +-1.900000 9.900000 7.063591 +-1.900000 10.000000 7.155531 +-1.900000 10.100000 7.267471 +-1.900000 10.200000 7.399411 +-1.900000 10.300000 7.551351 +-1.900000 10.400000 7.723291 +-1.900000 10.500000 7.915231 +-1.900000 10.600000 8.127171 +-1.900000 10.700000 8.359111 +-1.900000 10.800000 8.611051 +-1.900000 10.900000 8.882991 +-1.900000 11.000000 9.174931 +-1.900000 11.100000 9.486871 +-1.900000 11.200000 9.818811 +-1.900000 11.300000 10.170751 +-1.900000 11.400000 10.542691 +-1.900000 11.500000 10.934631 +-1.900000 11.600000 11.346571 +-1.900000 11.700000 11.778511 +-1.900000 11.800000 12.230451 +-1.900000 11.900000 12.702391 +-1.900000 12.000000 13.194331 +-1.900000 12.100000 13.706271 +-1.900000 12.200000 14.238211 +-1.900000 12.300000 14.790151 +-1.900000 12.400000 15.362091 +-1.900000 12.500000 15.954031 +-1.900000 12.600000 16.565971 +-1.900000 12.700000 17.197911 +-1.900000 12.800000 17.849851 +-1.900000 12.900000 18.521791 +-1.900000 13.000000 19.213731 +-1.900000 13.100000 19.925671 +-1.900000 13.200000 20.657611 +-1.900000 13.300000 21.409551 +-1.900000 13.400000 22.181491 +-1.900000 13.500000 22.973431 +-1.900000 13.600000 23.785371 +-1.900000 13.700000 24.617311 +-1.900000 13.800000 25.469251 +-1.900000 13.900000 26.341191 +-1.900000 14.000000 27.233131 +-1.900000 14.100000 28.145071 +-1.900000 14.200000 29.077011 +-1.900000 14.300000 30.028951 +-1.900000 14.400000 31.000891 +-1.900000 14.500000 31.992831 +-1.900000 14.600000 33.004771 +-1.900000 14.700000 34.036711 +-1.900000 14.800000 35.088651 +-1.900000 14.900000 36.160591 +-1.900000 15.000000 37.252531 + +-1.800000 -5.000000 211.832375 +-1.800000 -4.900000 208.985706 +-1.800000 -4.800000 206.159037 +-1.800000 -4.700000 203.352367 +-1.800000 -4.600000 200.565698 +-1.800000 -4.500000 197.799028 +-1.800000 -4.400000 195.052359 +-1.800000 -4.300000 192.325690 +-1.800000 -4.200000 189.619020 +-1.800000 -4.100000 186.932351 +-1.800000 -4.000000 184.265682 +-1.800000 -3.900000 181.619012 +-1.800000 -3.800000 178.992343 +-1.800000 -3.700000 176.385674 +-1.800000 -3.600000 173.799004 +-1.800000 -3.500000 171.232335 +-1.800000 -3.400000 168.685666 +-1.800000 -3.300000 166.158996 +-1.800000 -3.200000 163.652327 +-1.800000 -3.100000 161.165657 +-1.800000 -3.000000 158.698988 +-1.800000 -2.900000 156.252319 +-1.800000 -2.800000 153.825649 +-1.800000 -2.700000 151.418980 +-1.800000 -2.600000 149.032311 +-1.800000 -2.500000 146.665641 +-1.800000 -2.400000 144.318972 +-1.800000 -2.300000 141.992303 +-1.800000 -2.200000 139.685633 +-1.800000 -2.100000 137.398964 +-1.800000 -2.000000 135.132295 +-1.800000 -1.900000 132.885625 +-1.800000 -1.800000 130.658956 +-1.800000 -1.700000 128.452286 +-1.800000 -1.600000 126.265617 +-1.800000 -1.500000 124.098948 +-1.800000 -1.400000 121.952278 +-1.800000 -1.300000 119.825609 +-1.800000 -1.200000 117.718940 +-1.800000 -1.100000 115.632270 +-1.800000 -1.000000 113.565601 +-1.800000 -0.900000 111.518932 +-1.800000 -0.800000 109.492262 +-1.800000 -0.700000 107.485593 +-1.800000 -0.600000 105.498924 +-1.800000 -0.500000 103.532254 +-1.800000 -0.400000 101.585585 +-1.800000 -0.300000 99.658916 +-1.800000 -0.200000 97.752246 +-1.800000 -0.100000 95.865577 +-1.800000 -0.000000 93.998907 +-1.800000 0.100000 92.152238 +-1.800000 0.200000 90.325569 +-1.800000 0.300000 88.518899 +-1.800000 0.400000 86.732230 +-1.800000 0.500000 84.965561 +-1.800000 0.600000 83.218891 +-1.800000 0.700000 81.492222 +-1.800000 0.800000 79.785553 +-1.800000 0.900000 78.098883 +-1.800000 1.000000 76.432214 +-1.800000 1.100000 74.785545 +-1.800000 1.200000 73.158875 +-1.800000 1.300000 71.552206 +-1.800000 1.400000 69.965536 +-1.800000 1.500000 68.398867 +-1.800000 1.600000 66.852198 +-1.800000 1.700000 65.325528 +-1.800000 1.800000 63.818859 +-1.800000 1.900000 62.332190 +-1.800000 2.000000 60.865520 +-1.800000 2.100000 59.418851 +-1.800000 2.200000 57.992182 +-1.800000 2.300000 56.585512 +-1.800000 2.400000 55.198843 +-1.800000 2.500000 53.832174 +-1.800000 2.600000 52.485504 +-1.800000 2.700000 51.158835 +-1.800000 2.800000 49.852165 +-1.800000 2.900000 48.565496 +-1.800000 3.000000 47.298827 +-1.800000 3.100000 46.052157 +-1.800000 3.200000 44.825488 +-1.800000 3.300000 43.618819 +-1.800000 3.400000 42.432149 +-1.800000 3.500000 41.265480 +-1.800000 3.600000 40.118811 +-1.800000 3.700000 38.992141 +-1.800000 3.800000 37.885472 +-1.800000 3.900000 36.798803 +-1.800000 4.000000 35.732133 +-1.800000 4.100000 34.685464 +-1.800000 4.200000 33.658794 +-1.800000 4.300000 32.652125 +-1.800000 4.400000 31.665456 +-1.800000 4.500000 30.698786 +-1.800000 4.600000 29.752117 +-1.800000 4.700000 28.825448 +-1.800000 4.800000 27.918778 +-1.800000 4.900000 27.032109 +-1.800000 5.000000 26.165440 +-1.800000 5.100000 25.318770 +-1.800000 5.200000 24.492101 +-1.800000 5.300000 23.685432 +-1.800000 5.400000 22.898762 +-1.800000 5.500000 22.132093 +-1.800000 5.600000 21.385423 +-1.800000 5.700000 20.658754 +-1.800000 5.800000 19.952085 +-1.800000 5.900000 19.265415 +-1.800000 6.000000 18.598746 +-1.800000 6.100000 17.952077 +-1.800000 6.200000 17.325407 +-1.800000 6.300000 16.718738 +-1.800000 6.400000 16.132069 +-1.800000 6.500000 15.565399 +-1.800000 6.600000 15.018730 +-1.800000 6.700000 14.492061 +-1.800000 6.800000 13.985391 +-1.800000 6.900000 13.498722 +-1.800000 7.000000 13.032052 +-1.800000 7.100000 12.585383 +-1.800000 7.200000 12.158714 +-1.800000 7.300000 11.752044 +-1.800000 7.400000 11.365375 +-1.800000 7.500000 10.998706 +-1.800000 7.600000 10.652036 +-1.800000 7.700000 10.325367 +-1.800000 7.800000 10.018698 +-1.800000 7.900000 9.732028 +-1.800000 8.000000 9.465359 +-1.800000 8.100000 9.218690 +-1.800000 8.200000 8.992020 +-1.800000 8.300000 8.785351 +-1.800000 8.400000 8.598681 +-1.800000 8.500000 8.432012 +-1.800000 8.600000 8.285343 +-1.800000 8.700000 8.158673 +-1.800000 8.800000 8.052004 +-1.800000 8.900000 7.965335 +-1.800000 9.000000 7.898665 +-1.800000 9.100000 7.851996 +-1.800000 9.200000 7.825327 +-1.800000 9.300000 7.818657 +-1.800000 9.400000 7.831988 +-1.800000 9.500000 7.865319 +-1.800000 9.600000 7.918649 +-1.800000 9.700000 7.991980 +-1.800000 9.800000 8.085310 +-1.800000 9.900000 8.198641 +-1.800000 10.000000 8.331972 +-1.800000 10.100000 8.485302 +-1.800000 10.200000 8.658633 +-1.800000 10.300000 8.851964 +-1.800000 10.400000 9.065294 +-1.800000 10.500000 9.298625 +-1.800000 10.600000 9.551956 +-1.800000 10.700000 9.825286 +-1.800000 10.800000 10.118617 +-1.800000 10.900000 10.431948 +-1.800000 11.000000 10.765278 +-1.800000 11.100000 11.118609 +-1.800000 11.200000 11.491939 +-1.800000 11.300000 11.885270 +-1.800000 11.400000 12.298601 +-1.800000 11.500000 12.731931 +-1.800000 11.600000 13.185262 +-1.800000 11.700000 13.658593 +-1.800000 11.800000 14.151923 +-1.800000 11.900000 14.665254 +-1.800000 12.000000 15.198585 +-1.800000 12.100000 15.751915 +-1.800000 12.200000 16.325246 +-1.800000 12.300000 16.918577 +-1.800000 12.400000 17.531907 +-1.800000 12.500000 18.165238 +-1.800000 12.600000 18.818568 +-1.800000 12.700000 19.491899 +-1.800000 12.800000 20.185230 +-1.800000 12.900000 20.898560 +-1.800000 13.000000 21.631891 +-1.800000 13.100000 22.385222 +-1.800000 13.200000 23.158552 +-1.800000 13.300000 23.951883 +-1.800000 13.400000 24.765214 +-1.800000 13.500000 25.598544 +-1.800000 13.600000 26.451875 +-1.800000 13.700000 27.325206 +-1.800000 13.800000 28.218536 +-1.800000 13.900000 29.131867 +-1.800000 14.000000 30.065197 +-1.800000 14.100000 31.018528 +-1.800000 14.200000 31.991859 +-1.800000 14.300000 32.985189 +-1.800000 14.400000 33.998520 +-1.800000 14.500000 35.031851 +-1.800000 14.600000 36.085181 +-1.800000 14.700000 37.158512 +-1.800000 14.800000 38.251843 +-1.800000 14.900000 39.365173 +-1.800000 15.000000 40.498504 + +-1.700000 -5.000000 206.980421 +-1.700000 -4.900000 204.174626 +-1.700000 -4.800000 201.388831 +-1.700000 -4.700000 198.623035 +-1.700000 -4.600000 195.877240 +-1.700000 -4.500000 193.151444 +-1.700000 -4.400000 190.445649 +-1.700000 -4.300000 187.759853 +-1.700000 -4.200000 185.094058 +-1.700000 -4.100000 182.448262 +-1.700000 -4.000000 179.822467 +-1.700000 -3.900000 177.216671 +-1.700000 -3.800000 174.630876 +-1.700000 -3.700000 172.065081 +-1.700000 -3.600000 169.519285 +-1.700000 -3.500000 166.993490 +-1.700000 -3.400000 164.487694 +-1.700000 -3.300000 162.001899 +-1.700000 -3.200000 159.536103 +-1.700000 -3.100000 157.090308 +-1.700000 -3.000000 154.664512 +-1.700000 -2.900000 152.258717 +-1.700000 -2.800000 149.872921 +-1.700000 -2.700000 147.507126 +-1.700000 -2.600000 145.161331 +-1.700000 -2.500000 142.835535 +-1.700000 -2.400000 140.529740 +-1.700000 -2.300000 138.243944 +-1.700000 -2.200000 135.978149 +-1.700000 -2.100000 133.732353 +-1.700000 -2.000000 131.506558 +-1.700000 -1.900000 129.300762 +-1.700000 -1.800000 127.114967 +-1.700000 -1.700000 124.949172 +-1.700000 -1.600000 122.803376 +-1.700000 -1.500000 120.677581 +-1.700000 -1.400000 118.571785 +-1.700000 -1.300000 116.485990 +-1.700000 -1.200000 114.420194 +-1.700000 -1.100000 112.374399 +-1.700000 -1.000000 110.348603 +-1.700000 -0.900000 108.342808 +-1.700000 -0.800000 106.357012 +-1.700000 -0.700000 104.391217 +-1.700000 -0.600000 102.445422 +-1.700000 -0.500000 100.519626 +-1.700000 -0.400000 98.613831 +-1.700000 -0.300000 96.728035 +-1.700000 -0.200000 94.862240 +-1.700000 -0.100000 93.016444 +-1.700000 -0.000000 91.190649 +-1.700000 0.100000 89.384853 +-1.700000 0.200000 87.599058 +-1.700000 0.300000 85.833262 +-1.700000 0.400000 84.087467 +-1.700000 0.500000 82.361672 +-1.700000 0.600000 80.655876 +-1.700000 0.700000 78.970081 +-1.700000 0.800000 77.304285 +-1.700000 0.900000 75.658490 +-1.700000 1.000000 74.032694 +-1.700000 1.100000 72.426899 +-1.700000 1.200000 70.841103 +-1.700000 1.300000 69.275308 +-1.700000 1.400000 67.729512 +-1.700000 1.500000 66.203717 +-1.700000 1.600000 64.697922 +-1.700000 1.700000 63.212126 +-1.700000 1.800000 61.746331 +-1.700000 1.900000 60.300535 +-1.700000 2.000000 58.874740 +-1.700000 2.100000 57.468944 +-1.700000 2.200000 56.083149 +-1.700000 2.300000 54.717353 +-1.700000 2.400000 53.371558 +-1.700000 2.500000 52.045762 +-1.700000 2.600000 50.739967 +-1.700000 2.700000 49.454172 +-1.700000 2.800000 48.188376 +-1.700000 2.900000 46.942581 +-1.700000 3.000000 45.716785 +-1.700000 3.100000 44.510990 +-1.700000 3.200000 43.325194 +-1.700000 3.300000 42.159399 +-1.700000 3.400000 41.013603 +-1.700000 3.500000 39.887808 +-1.700000 3.600000 38.782013 +-1.700000 3.700000 37.696217 +-1.700000 3.800000 36.630422 +-1.700000 3.900000 35.584626 +-1.700000 4.000000 34.558831 +-1.700000 4.100000 33.553035 +-1.700000 4.200000 32.567240 +-1.700000 4.300000 31.601444 +-1.700000 4.400000 30.655649 +-1.700000 4.500000 29.729853 +-1.700000 4.600000 28.824058 +-1.700000 4.700000 27.938263 +-1.700000 4.800000 27.072467 +-1.700000 4.900000 26.226672 +-1.700000 5.000000 25.400876 +-1.700000 5.100000 24.595081 +-1.700000 5.200000 23.809285 +-1.700000 5.300000 23.043490 +-1.700000 5.400000 22.297694 +-1.700000 5.500000 21.571899 +-1.700000 5.600000 20.866103 +-1.700000 5.700000 20.180308 +-1.700000 5.800000 19.514513 +-1.700000 5.900000 18.868717 +-1.700000 6.000000 18.242922 +-1.700000 6.100000 17.637126 +-1.700000 6.200000 17.051331 +-1.700000 6.300000 16.485535 +-1.700000 6.400000 15.939740 +-1.700000 6.500000 15.413944 +-1.700000 6.600000 14.908149 +-1.700000 6.700000 14.422353 +-1.700000 6.800000 13.956558 +-1.700000 6.900000 13.510763 +-1.700000 7.000000 13.084967 +-1.700000 7.100000 12.679172 +-1.700000 7.200000 12.293376 +-1.700000 7.300000 11.927581 +-1.700000 7.400000 11.581785 +-1.700000 7.500000 11.255990 +-1.700000 7.600000 10.950194 +-1.700000 7.700000 10.664399 +-1.700000 7.800000 10.398603 +-1.700000 7.900000 10.152808 +-1.700000 8.000000 9.927013 +-1.700000 8.100000 9.721217 +-1.700000 8.200000 9.535422 +-1.700000 8.300000 9.369626 +-1.700000 8.400000 9.223831 +-1.700000 8.500000 9.098035 +-1.700000 8.600000 8.992240 +-1.700000 8.700000 8.906444 +-1.700000 8.800000 8.840649 +-1.700000 8.900000 8.794854 +-1.700000 9.000000 8.769058 +-1.700000 9.100000 8.763263 +-1.700000 9.200000 8.777467 +-1.700000 9.300000 8.811672 +-1.700000 9.400000 8.865876 +-1.700000 9.500000 8.940081 +-1.700000 9.600000 9.034285 +-1.700000 9.700000 9.148490 +-1.700000 9.800000 9.282694 +-1.700000 9.900000 9.436899 +-1.700000 10.000000 9.611104 +-1.700000 10.100000 9.805308 +-1.700000 10.200000 10.019513 +-1.700000 10.300000 10.253717 +-1.700000 10.400000 10.507922 +-1.700000 10.500000 10.782126 +-1.700000 10.600000 11.076331 +-1.700000 10.700000 11.390535 +-1.700000 10.800000 11.724740 +-1.700000 10.900000 12.078944 +-1.700000 11.000000 12.453149 +-1.700000 11.100000 12.847354 +-1.700000 11.200000 13.261558 +-1.700000 11.300000 13.695763 +-1.700000 11.400000 14.149967 +-1.700000 11.500000 14.624172 +-1.700000 11.600000 15.118376 +-1.700000 11.700000 15.632581 +-1.700000 11.800000 16.166785 +-1.700000 11.900000 16.720990 +-1.700000 12.000000 17.295194 +-1.700000 12.100000 17.889399 +-1.700000 12.200000 18.503604 +-1.700000 12.300000 19.137808 +-1.700000 12.400000 19.792013 +-1.700000 12.500000 20.466217 +-1.700000 12.600000 21.160422 +-1.700000 12.700000 21.874626 +-1.700000 12.800000 22.608831 +-1.700000 12.900000 23.363035 +-1.700000 13.000000 24.137240 +-1.700000 13.100000 24.931444 +-1.700000 13.200000 25.745649 +-1.700000 13.300000 26.579854 +-1.700000 13.400000 27.434058 +-1.700000 13.500000 28.308263 +-1.700000 13.600000 29.202467 +-1.700000 13.700000 30.116672 +-1.700000 13.800000 31.050876 +-1.700000 13.900000 32.005081 +-1.700000 14.000000 32.979285 +-1.700000 14.100000 33.973490 +-1.700000 14.200000 34.987695 +-1.700000 14.300000 36.021899 +-1.700000 14.400000 37.076104 +-1.700000 14.500000 38.150308 +-1.700000 14.600000 39.244513 +-1.700000 14.700000 40.358717 +-1.700000 14.800000 41.492922 +-1.700000 14.900000 42.647126 +-1.700000 15.000000 43.821331 + +-1.600000 -5.000000 202.296065 +-1.600000 -4.900000 199.530627 +-1.600000 -4.800000 196.785188 +-1.600000 -4.700000 194.059750 +-1.600000 -4.600000 191.354312 +-1.600000 -4.500000 188.668874 +-1.600000 -4.400000 186.003435 +-1.600000 -4.300000 183.357997 +-1.600000 -4.200000 180.732559 +-1.600000 -4.100000 178.127120 +-1.600000 -4.000000 175.541682 +-1.600000 -3.900000 172.976244 +-1.600000 -3.800000 170.430806 +-1.600000 -3.700000 167.905367 +-1.600000 -3.600000 165.399929 +-1.600000 -3.500000 162.914491 +-1.600000 -3.400000 160.449052 +-1.600000 -3.300000 158.003614 +-1.600000 -3.200000 155.578176 +-1.600000 -3.100000 153.172738 +-1.600000 -3.000000 150.787299 +-1.600000 -2.900000 148.421861 +-1.600000 -2.800000 146.076423 +-1.600000 -2.700000 143.750984 +-1.600000 -2.600000 141.445546 +-1.600000 -2.500000 139.160108 +-1.600000 -2.400000 136.894670 +-1.600000 -2.300000 134.649231 +-1.600000 -2.200000 132.423793 +-1.600000 -2.100000 130.218355 +-1.600000 -2.000000 128.032916 +-1.600000 -1.900000 125.867478 +-1.600000 -1.800000 123.722040 +-1.600000 -1.700000 121.596602 +-1.600000 -1.600000 119.491163 +-1.600000 -1.500000 117.405725 +-1.600000 -1.400000 115.340287 +-1.600000 -1.300000 113.294848 +-1.600000 -1.200000 111.269410 +-1.600000 -1.100000 109.263972 +-1.600000 -1.000000 107.278533 +-1.600000 -0.900000 105.313095 +-1.600000 -0.800000 103.367657 +-1.600000 -0.700000 101.442219 +-1.600000 -0.600000 99.536780 +-1.600000 -0.500000 97.651342 +-1.600000 -0.400000 95.785904 +-1.600000 -0.300000 93.940465 +-1.600000 -0.200000 92.115027 +-1.600000 -0.100000 90.309589 +-1.600000 -0.000000 88.524151 +-1.600000 0.100000 86.758712 +-1.600000 0.200000 85.013274 +-1.600000 0.300000 83.287836 +-1.600000 0.400000 81.582397 +-1.600000 0.500000 79.896959 +-1.600000 0.600000 78.231521 +-1.600000 0.700000 76.586083 +-1.600000 0.800000 74.960644 +-1.600000 0.900000 73.355206 +-1.600000 1.000000 71.769768 +-1.600000 1.100000 70.204329 +-1.600000 1.200000 68.658891 +-1.600000 1.300000 67.133453 +-1.600000 1.400000 65.628015 +-1.600000 1.500000 64.142576 +-1.600000 1.600000 62.677138 +-1.600000 1.700000 61.231700 +-1.600000 1.800000 59.806261 +-1.600000 1.900000 58.400823 +-1.600000 2.000000 57.015385 +-1.600000 2.100000 55.649947 +-1.600000 2.200000 54.304508 +-1.600000 2.300000 52.979070 +-1.600000 2.400000 51.673632 +-1.600000 2.500000 50.388193 +-1.600000 2.600000 49.122755 +-1.600000 2.700000 47.877317 +-1.600000 2.800000 46.651879 +-1.600000 2.900000 45.446440 +-1.600000 3.000000 44.261002 +-1.600000 3.100000 43.095564 +-1.600000 3.200000 41.950125 +-1.600000 3.300000 40.824687 +-1.600000 3.400000 39.719249 +-1.600000 3.500000 38.633811 +-1.600000 3.600000 37.568372 +-1.600000 3.700000 36.522934 +-1.600000 3.800000 35.497496 +-1.600000 3.900000 34.492057 +-1.600000 4.000000 33.506619 +-1.600000 4.100000 32.541181 +-1.600000 4.200000 31.595743 +-1.600000 4.300000 30.670304 +-1.600000 4.400000 29.764866 +-1.600000 4.500000 28.879428 +-1.600000 4.600000 28.013989 +-1.600000 4.700000 27.168551 +-1.600000 4.800000 26.343113 +-1.600000 4.900000 25.537675 +-1.600000 5.000000 24.752236 +-1.600000 5.100000 23.986798 +-1.600000 5.200000 23.241360 +-1.600000 5.300000 22.515921 +-1.600000 5.400000 21.810483 +-1.600000 5.500000 21.125045 +-1.600000 5.600000 20.459607 +-1.600000 5.700000 19.814168 +-1.600000 5.800000 19.188730 +-1.600000 5.900000 18.583292 +-1.600000 6.000000 17.997853 +-1.600000 6.100000 17.432415 +-1.600000 6.200000 16.886977 +-1.600000 6.300000 16.361539 +-1.600000 6.400000 15.856100 +-1.600000 6.500000 15.370662 +-1.600000 6.600000 14.905224 +-1.600000 6.700000 14.459785 +-1.600000 6.800000 14.034347 +-1.600000 6.900000 13.628909 +-1.600000 7.000000 13.243471 +-1.600000 7.100000 12.878032 +-1.600000 7.200000 12.532594 +-1.600000 7.300000 12.207156 +-1.600000 7.400000 11.901717 +-1.600000 7.500000 11.616279 +-1.600000 7.600000 11.350841 +-1.600000 7.700000 11.105403 +-1.600000 7.800000 10.879964 +-1.600000 7.900000 10.674526 +-1.600000 8.000000 10.489088 +-1.600000 8.100000 10.323649 +-1.600000 8.200000 10.178211 +-1.600000 8.300000 10.052773 +-1.600000 8.400000 9.947335 +-1.600000 8.500000 9.861896 +-1.600000 8.600000 9.796458 +-1.600000 8.700000 9.751020 +-1.600000 8.800000 9.725581 +-1.600000 8.900000 9.720143 +-1.600000 9.000000 9.734705 +-1.600000 9.100000 9.769267 +-1.600000 9.200000 9.823828 +-1.600000 9.300000 9.898390 +-1.600000 9.400000 9.992952 +-1.600000 9.500000 10.107513 +-1.600000 9.600000 10.242075 +-1.600000 9.700000 10.396637 +-1.600000 9.800000 10.571199 +-1.600000 9.900000 10.765760 +-1.600000 10.000000 10.980322 +-1.600000 10.100000 11.214884 +-1.600000 10.200000 11.469445 +-1.600000 10.300000 11.744007 +-1.600000 10.400000 12.038569 +-1.600000 10.500000 12.353131 +-1.600000 10.600000 12.687692 +-1.600000 10.700000 13.042254 +-1.600000 10.800000 13.416816 +-1.600000 10.900000 13.811377 +-1.600000 11.000000 14.225939 +-1.600000 11.100000 14.660501 +-1.600000 11.200000 15.115063 +-1.600000 11.300000 15.589624 +-1.600000 11.400000 16.084186 +-1.600000 11.500000 16.598748 +-1.600000 11.600000 17.133309 +-1.600000 11.700000 17.687871 +-1.600000 11.800000 18.262433 +-1.600000 11.900000 18.856995 +-1.600000 12.000000 19.471556 +-1.600000 12.100000 20.106118 +-1.600000 12.200000 20.760680 +-1.600000 12.300000 21.435241 +-1.600000 12.400000 22.129803 +-1.600000 12.500000 22.844365 +-1.600000 12.600000 23.578927 +-1.600000 12.700000 24.333488 +-1.600000 12.800000 25.108050 +-1.600000 12.900000 25.902612 +-1.600000 13.000000 26.717173 +-1.600000 13.100000 27.551735 +-1.600000 13.200000 28.406297 +-1.600000 13.300000 29.280859 +-1.600000 13.400000 30.175420 +-1.600000 13.500000 31.089982 +-1.600000 13.600000 32.024544 +-1.600000 13.700000 32.979105 +-1.600000 13.800000 33.953667 +-1.600000 13.900000 34.948229 +-1.600000 14.000000 35.962791 +-1.600000 14.100000 36.997352 +-1.600000 14.200000 38.051914 +-1.600000 14.300000 39.126476 +-1.600000 14.400000 40.221037 +-1.600000 14.500000 41.335599 +-1.600000 14.600000 42.470161 +-1.600000 14.700000 43.624723 +-1.600000 14.800000 44.799284 +-1.600000 14.900000 45.993846 +-1.600000 15.000000 47.208408 + +-1.500000 -5.000000 197.766618 +-1.500000 -4.900000 195.041020 +-1.500000 -4.800000 192.335422 +-1.500000 -4.700000 189.649824 +-1.500000 -4.600000 186.984226 +-1.500000 -4.500000 184.338628 +-1.500000 -4.400000 181.713030 +-1.500000 -4.300000 179.107433 +-1.500000 -4.200000 176.521835 +-1.500000 -4.100000 173.956237 +-1.500000 -4.000000 171.410639 +-1.500000 -3.900000 168.885041 +-1.500000 -3.800000 166.379443 +-1.500000 -3.700000 163.893845 +-1.500000 -3.600000 161.428248 +-1.500000 -3.500000 158.982650 +-1.500000 -3.400000 156.557052 +-1.500000 -3.300000 154.151454 +-1.500000 -3.200000 151.765856 +-1.500000 -3.100000 149.400258 +-1.500000 -3.000000 147.054660 +-1.500000 -2.900000 144.729063 +-1.500000 -2.800000 142.423465 +-1.500000 -2.700000 140.137867 +-1.500000 -2.600000 137.872269 +-1.500000 -2.500000 135.626671 +-1.500000 -2.400000 133.401073 +-1.500000 -2.300000 131.195475 +-1.500000 -2.200000 129.009878 +-1.500000 -2.100000 126.844280 +-1.500000 -2.000000 124.698682 +-1.500000 -1.900000 122.573084 +-1.500000 -1.800000 120.467486 +-1.500000 -1.700000 118.381888 +-1.500000 -1.600000 116.316290 +-1.500000 -1.500000 114.270693 +-1.500000 -1.400000 112.245095 +-1.500000 -1.300000 110.239497 +-1.500000 -1.200000 108.253899 +-1.500000 -1.100000 106.288301 +-1.500000 -1.000000 104.342703 +-1.500000 -0.900000 102.417105 +-1.500000 -0.800000 100.511508 +-1.500000 -0.700000 98.625910 +-1.500000 -0.600000 96.760312 +-1.500000 -0.500000 94.914714 +-1.500000 -0.400000 93.089116 +-1.500000 -0.300000 91.283518 +-1.500000 -0.200000 89.497920 +-1.500000 -0.100000 87.732323 +-1.500000 -0.000000 85.986725 +-1.500000 0.100000 84.261127 +-1.500000 0.200000 82.555529 +-1.500000 0.300000 80.869931 +-1.500000 0.400000 79.204333 +-1.500000 0.500000 77.558735 +-1.500000 0.600000 75.933138 +-1.500000 0.700000 74.327540 +-1.500000 0.800000 72.741942 +-1.500000 0.900000 71.176344 +-1.500000 1.000000 69.630746 +-1.500000 1.100000 68.105148 +-1.500000 1.200000 66.599550 +-1.500000 1.300000 65.113953 +-1.500000 1.400000 63.648355 +-1.500000 1.500000 62.202757 +-1.500000 1.600000 60.777159 +-1.500000 1.700000 59.371561 +-1.500000 1.800000 57.985963 +-1.500000 1.900000 56.620365 +-1.500000 2.000000 55.274768 +-1.500000 2.100000 53.949170 +-1.500000 2.200000 52.643572 +-1.500000 2.300000 51.357974 +-1.500000 2.400000 50.092376 +-1.500000 2.500000 48.846778 +-1.500000 2.600000 47.621180 +-1.500000 2.700000 46.415583 +-1.500000 2.800000 45.229985 +-1.500000 2.900000 44.064387 +-1.500000 3.000000 42.918789 +-1.500000 3.100000 41.793191 +-1.500000 3.200000 40.687593 +-1.500000 3.300000 39.601995 +-1.500000 3.400000 38.536398 +-1.500000 3.500000 37.490800 +-1.500000 3.600000 36.465202 +-1.500000 3.700000 35.459604 +-1.500000 3.800000 34.474006 +-1.500000 3.900000 33.508408 +-1.500000 4.000000 32.562810 +-1.500000 4.100000 31.637213 +-1.500000 4.200000 30.731615 +-1.500000 4.300000 29.846017 +-1.500000 4.400000 28.980419 +-1.500000 4.500000 28.134821 +-1.500000 4.600000 27.309223 +-1.500000 4.700000 26.503625 +-1.500000 4.800000 25.718028 +-1.500000 4.900000 24.952430 +-1.500000 5.000000 24.206832 +-1.500000 5.100000 23.481234 +-1.500000 5.200000 22.775636 +-1.500000 5.300000 22.090038 +-1.500000 5.400000 21.424440 +-1.500000 5.500000 20.778843 +-1.500000 5.600000 20.153245 +-1.500000 5.700000 19.547647 +-1.500000 5.800000 18.962049 +-1.500000 5.900000 18.396451 +-1.500000 6.000000 17.850853 +-1.500000 6.100000 17.325255 +-1.500000 6.200000 16.819658 +-1.500000 6.300000 16.334060 +-1.500000 6.400000 15.868462 +-1.500000 6.500000 15.422864 +-1.500000 6.600000 14.997266 +-1.500000 6.700000 14.591668 +-1.500000 6.800000 14.206070 +-1.500000 6.900000 13.840473 +-1.500000 7.000000 13.494875 +-1.500000 7.100000 13.169277 +-1.500000 7.200000 12.863679 +-1.500000 7.300000 12.578081 +-1.500000 7.400000 12.312483 +-1.500000 7.500000 12.066885 +-1.500000 7.600000 11.841287 +-1.500000 7.700000 11.635690 +-1.500000 7.800000 11.450092 +-1.500000 7.900000 11.284494 +-1.500000 8.000000 11.138896 +-1.500000 8.100000 11.013298 +-1.500000 8.200000 10.907700 +-1.500000 8.300000 10.822102 +-1.500000 8.400000 10.756505 +-1.500000 8.500000 10.710907 +-1.500000 8.600000 10.685309 +-1.500000 8.700000 10.679711 +-1.500000 8.800000 10.694113 +-1.500000 8.900000 10.728515 +-1.500000 9.000000 10.782917 +-1.500000 9.100000 10.857320 +-1.500000 9.200000 10.951722 +-1.500000 9.300000 11.066124 +-1.500000 9.400000 11.200526 +-1.500000 9.500000 11.354928 +-1.500000 9.600000 11.529330 +-1.500000 9.700000 11.723732 +-1.500000 9.800000 11.938135 +-1.500000 9.900000 12.172537 +-1.500000 10.000000 12.426939 +-1.500000 10.100000 12.701341 +-1.500000 10.200000 12.995743 +-1.500000 10.300000 13.310145 +-1.500000 10.400000 13.644547 +-1.500000 10.500000 13.998950 +-1.500000 10.600000 14.373352 +-1.500000 10.700000 14.767754 +-1.500000 10.800000 15.182156 +-1.500000 10.900000 15.616558 +-1.500000 11.000000 16.070960 +-1.500000 11.100000 16.545362 +-1.500000 11.200000 17.039765 +-1.500000 11.300000 17.554167 +-1.500000 11.400000 18.088569 +-1.500000 11.500000 18.642971 +-1.500000 11.600000 19.217373 +-1.500000 11.700000 19.811775 +-1.500000 11.800000 20.426177 +-1.500000 11.900000 21.060580 +-1.500000 12.000000 21.714982 +-1.500000 12.100000 22.389384 +-1.500000 12.200000 23.083786 +-1.500000 12.300000 23.798188 +-1.500000 12.400000 24.532590 +-1.500000 12.500000 25.286992 +-1.500000 12.600000 26.061395 +-1.500000 12.700000 26.855797 +-1.500000 12.800000 27.670199 +-1.500000 12.900000 28.504601 +-1.500000 13.000000 29.359003 +-1.500000 13.100000 30.233405 +-1.500000 13.200000 31.127807 +-1.500000 13.300000 32.042210 +-1.500000 13.400000 32.976612 +-1.500000 13.500000 33.931014 +-1.500000 13.600000 34.905416 +-1.500000 13.700000 35.899818 +-1.500000 13.800000 36.914220 +-1.500000 13.900000 37.948622 +-1.500000 14.000000 39.003025 +-1.500000 14.100000 40.077427 +-1.500000 14.200000 41.171829 +-1.500000 14.300000 42.286231 +-1.500000 14.400000 43.420633 +-1.500000 14.500000 44.575035 +-1.500000 14.600000 45.749437 +-1.500000 14.700000 46.943840 +-1.500000 14.800000 48.158242 +-1.500000 14.900000 49.392644 +-1.500000 15.000000 50.647046 + +-1.400000 -5.000000 193.379403 +-1.400000 -4.900000 190.693129 +-1.400000 -4.800000 188.026855 +-1.400000 -4.700000 185.380581 +-1.400000 -4.600000 182.754307 +-1.400000 -4.500000 180.148033 +-1.400000 -4.400000 177.561758 +-1.400000 -4.300000 174.995484 +-1.400000 -4.200000 172.449210 +-1.400000 -4.100000 169.922936 +-1.400000 -4.000000 167.416662 +-1.400000 -3.900000 164.930388 +-1.400000 -3.800000 162.464113 +-1.400000 -3.700000 160.017839 +-1.400000 -3.600000 157.591565 +-1.400000 -3.500000 155.185291 +-1.400000 -3.400000 152.799017 +-1.400000 -3.300000 150.432743 +-1.400000 -3.200000 148.086468 +-1.400000 -3.100000 145.760194 +-1.400000 -3.000000 143.453920 +-1.400000 -2.900000 141.167646 +-1.400000 -2.800000 138.901372 +-1.400000 -2.700000 136.655098 +-1.400000 -2.600000 134.428823 +-1.400000 -2.500000 132.222549 +-1.400000 -2.400000 130.036275 +-1.400000 -2.300000 127.870001 +-1.400000 -2.200000 125.723727 +-1.400000 -2.100000 123.597453 +-1.400000 -2.000000 121.491178 +-1.400000 -1.900000 119.404904 +-1.400000 -1.800000 117.338630 +-1.400000 -1.700000 115.292356 +-1.400000 -1.600000 113.266082 +-1.400000 -1.500000 111.259808 +-1.400000 -1.400000 109.273533 +-1.400000 -1.300000 107.307259 +-1.400000 -1.200000 105.360985 +-1.400000 -1.100000 103.434711 +-1.400000 -1.000000 101.528437 +-1.400000 -0.900000 99.642163 +-1.400000 -0.800000 97.775888 +-1.400000 -0.700000 95.929614 +-1.400000 -0.600000 94.103340 +-1.400000 -0.500000 92.297066 +-1.400000 -0.400000 90.510792 +-1.400000 -0.300000 88.744518 +-1.400000 -0.200000 86.998243 +-1.400000 -0.100000 85.271969 +-1.400000 -0.000000 83.565695 +-1.400000 0.100000 81.879421 +-1.400000 0.200000 80.213147 +-1.400000 0.300000 78.566872 +-1.400000 0.400000 76.940598 +-1.400000 0.500000 75.334324 +-1.400000 0.600000 73.748050 +-1.400000 0.700000 72.181776 +-1.400000 0.800000 70.635502 +-1.400000 0.900000 69.109227 +-1.400000 1.000000 67.602953 +-1.400000 1.100000 66.116679 +-1.400000 1.200000 64.650405 +-1.400000 1.300000 63.204131 +-1.400000 1.400000 61.777857 +-1.400000 1.500000 60.371582 +-1.400000 1.600000 58.985308 +-1.400000 1.700000 57.619034 +-1.400000 1.800000 56.272760 +-1.400000 1.900000 54.946486 +-1.400000 2.000000 53.640212 +-1.400000 2.100000 52.353937 +-1.400000 2.200000 51.087663 +-1.400000 2.300000 49.841389 +-1.400000 2.400000 48.615115 +-1.400000 2.500000 47.408841 +-1.400000 2.600000 46.222567 +-1.400000 2.700000 45.056292 +-1.400000 2.800000 43.910018 +-1.400000 2.900000 42.783744 +-1.400000 3.000000 41.677470 +-1.400000 3.100000 40.591196 +-1.400000 3.200000 39.524922 +-1.400000 3.300000 38.478647 +-1.400000 3.400000 37.452373 +-1.400000 3.500000 36.446099 +-1.400000 3.600000 35.459825 +-1.400000 3.700000 34.493551 +-1.400000 3.800000 33.547277 +-1.400000 3.900000 32.621002 +-1.400000 4.000000 31.714728 +-1.400000 4.100000 30.828454 +-1.400000 4.200000 29.962180 +-1.400000 4.300000 29.115906 +-1.400000 4.400000 28.289632 +-1.400000 4.500000 27.483357 +-1.400000 4.600000 26.697083 +-1.400000 4.700000 25.930809 +-1.400000 4.800000 25.184535 +-1.400000 4.900000 24.458261 +-1.400000 5.000000 23.751987 +-1.400000 5.100000 23.065712 +-1.400000 5.200000 22.399438 +-1.400000 5.300000 21.753164 +-1.400000 5.400000 21.126890 +-1.400000 5.500000 20.520616 +-1.400000 5.600000 19.934342 +-1.400000 5.700000 19.368067 +-1.400000 5.800000 18.821793 +-1.400000 5.900000 18.295519 +-1.400000 6.000000 17.789245 +-1.400000 6.100000 17.302971 +-1.400000 6.200000 16.836697 +-1.400000 6.300000 16.390422 +-1.400000 6.400000 15.964148 +-1.400000 6.500000 15.557874 +-1.400000 6.600000 15.171600 +-1.400000 6.700000 14.805326 +-1.400000 6.800000 14.459052 +-1.400000 6.900000 14.132777 +-1.400000 7.000000 13.826503 +-1.400000 7.100000 13.540229 +-1.400000 7.200000 13.273955 +-1.400000 7.300000 13.027681 +-1.400000 7.400000 12.801407 +-1.400000 7.500000 12.595132 +-1.400000 7.600000 12.408858 +-1.400000 7.700000 12.242584 +-1.400000 7.800000 12.096310 +-1.400000 7.900000 11.970036 +-1.400000 8.000000 11.863762 +-1.400000 8.100000 11.777487 +-1.400000 8.200000 11.711213 +-1.400000 8.300000 11.664939 +-1.400000 8.400000 11.638665 +-1.400000 8.500000 11.632391 +-1.400000 8.600000 11.646117 +-1.400000 8.700000 11.679842 +-1.400000 8.800000 11.733568 +-1.400000 8.900000 11.807294 +-1.400000 9.000000 11.901020 +-1.400000 9.100000 12.014746 +-1.400000 9.200000 12.148472 +-1.400000 9.300000 12.302197 +-1.400000 9.400000 12.475923 +-1.400000 9.500000 12.669649 +-1.400000 9.600000 12.883375 +-1.400000 9.700000 13.117101 +-1.400000 9.800000 13.370827 +-1.400000 9.900000 13.644552 +-1.400000 10.000000 13.938278 +-1.400000 10.100000 14.252004 +-1.400000 10.200000 14.585730 +-1.400000 10.300000 14.939456 +-1.400000 10.400000 15.313182 +-1.400000 10.500000 15.706907 +-1.400000 10.600000 16.120633 +-1.400000 10.700000 16.554359 +-1.400000 10.800000 17.008085 +-1.400000 10.900000 17.481811 +-1.400000 11.000000 17.975536 +-1.400000 11.100000 18.489262 +-1.400000 11.200000 19.022988 +-1.400000 11.300000 19.576714 +-1.400000 11.400000 20.150440 +-1.400000 11.500000 20.744166 +-1.400000 11.600000 21.357891 +-1.400000 11.700000 21.991617 +-1.400000 11.800000 22.645343 +-1.400000 11.900000 23.319069 +-1.400000 12.000000 24.012795 +-1.400000 12.100000 24.726521 +-1.400000 12.200000 25.460246 +-1.400000 12.300000 26.213972 +-1.400000 12.400000 26.987698 +-1.400000 12.500000 27.781424 +-1.400000 12.600000 28.595150 +-1.400000 12.700000 29.428876 +-1.400000 12.800000 30.282601 +-1.400000 12.900000 31.156327 +-1.400000 13.000000 32.050053 +-1.400000 13.100000 32.963779 +-1.400000 13.200000 33.897505 +-1.400000 13.300000 34.851231 +-1.400000 13.400000 35.824956 +-1.400000 13.500000 36.818682 +-1.400000 13.600000 37.832408 +-1.400000 13.700000 38.866134 +-1.400000 13.800000 39.919860 +-1.400000 13.900000 40.993586 +-1.400000 14.000000 42.087311 +-1.400000 14.100000 43.201037 +-1.400000 14.200000 44.334763 +-1.400000 14.300000 45.488489 +-1.400000 14.400000 46.662215 +-1.400000 14.500000 47.855941 +-1.400000 14.600000 49.069666 +-1.400000 14.700000 50.303392 +-1.400000 14.800000 51.557118 +-1.400000 14.900000 52.830844 +-1.400000 15.000000 54.124570 + +-1.300000 -5.000000 189.121854 +-1.300000 -4.900000 186.474387 +-1.300000 -4.800000 183.846920 +-1.300000 -4.700000 181.239452 +-1.300000 -4.600000 178.651985 +-1.300000 -4.500000 176.084518 +-1.300000 -4.400000 173.537051 +-1.300000 -4.300000 171.009583 +-1.300000 -4.200000 168.502116 +-1.300000 -4.100000 166.014649 +-1.300000 -4.000000 163.547182 +-1.300000 -3.900000 161.099715 +-1.300000 -3.800000 158.672247 +-1.300000 -3.700000 156.264780 +-1.300000 -3.600000 153.877313 +-1.300000 -3.500000 151.509846 +-1.300000 -3.400000 149.162379 +-1.300000 -3.300000 146.834911 +-1.300000 -3.200000 144.527444 +-1.300000 -3.100000 142.239977 +-1.300000 -3.000000 139.972510 +-1.300000 -2.900000 137.725042 +-1.300000 -2.800000 135.497575 +-1.300000 -2.700000 133.290108 +-1.300000 -2.600000 131.102641 +-1.300000 -2.500000 128.935174 +-1.300000 -2.400000 126.787706 +-1.300000 -2.300000 124.660239 +-1.300000 -2.200000 122.552772 +-1.300000 -2.100000 120.465305 +-1.300000 -2.000000 118.397838 +-1.300000 -1.900000 116.350370 +-1.300000 -1.800000 114.322903 +-1.300000 -1.700000 112.315436 +-1.300000 -1.600000 110.327969 +-1.300000 -1.500000 108.360501 +-1.300000 -1.400000 106.413034 +-1.300000 -1.300000 104.485567 +-1.300000 -1.200000 102.578100 +-1.300000 -1.100000 100.690633 +-1.300000 -1.000000 98.823165 +-1.300000 -0.900000 96.975698 +-1.300000 -0.800000 95.148231 +-1.300000 -0.700000 93.340764 +-1.300000 -0.600000 91.553296 +-1.300000 -0.500000 89.785829 +-1.300000 -0.400000 88.038362 +-1.300000 -0.300000 86.310895 +-1.300000 -0.200000 84.603428 +-1.300000 -0.100000 82.915960 +-1.300000 -0.000000 81.248493 +-1.300000 0.100000 79.601026 +-1.300000 0.200000 77.973559 +-1.300000 0.300000 76.366092 +-1.300000 0.400000 74.778624 +-1.300000 0.500000 73.211157 +-1.300000 0.600000 71.663690 +-1.300000 0.700000 70.136223 +-1.300000 0.800000 68.628755 +-1.300000 0.900000 67.141288 +-1.300000 1.000000 65.673821 +-1.300000 1.100000 64.226354 +-1.300000 1.200000 62.798887 +-1.300000 1.300000 61.391419 +-1.300000 1.400000 60.003952 +-1.300000 1.500000 58.636485 +-1.300000 1.600000 57.289018 +-1.300000 1.700000 55.961551 +-1.300000 1.800000 54.654083 +-1.300000 1.900000 53.366616 +-1.300000 2.000000 52.099149 +-1.300000 2.100000 50.851682 +-1.300000 2.200000 49.624214 +-1.300000 2.300000 48.416747 +-1.300000 2.400000 47.229280 +-1.300000 2.500000 46.061813 +-1.300000 2.600000 44.914346 +-1.300000 2.700000 43.786878 +-1.300000 2.800000 42.679411 +-1.300000 2.900000 41.591944 +-1.300000 3.000000 40.524477 +-1.300000 3.100000 39.477009 +-1.300000 3.200000 38.449542 +-1.300000 3.300000 37.442075 +-1.300000 3.400000 36.454608 +-1.300000 3.500000 35.487141 +-1.300000 3.600000 34.539673 +-1.300000 3.700000 33.612206 +-1.300000 3.800000 32.704739 +-1.300000 3.900000 31.817272 +-1.300000 4.000000 30.949805 +-1.300000 4.100000 30.102337 +-1.300000 4.200000 29.274870 +-1.300000 4.300000 28.467403 +-1.300000 4.400000 27.679936 +-1.300000 4.500000 26.912468 +-1.300000 4.600000 26.165001 +-1.300000 4.700000 25.437534 +-1.300000 4.800000 24.730067 +-1.300000 4.900000 24.042600 +-1.300000 5.000000 23.375132 +-1.300000 5.100000 22.727665 +-1.300000 5.200000 22.100198 +-1.300000 5.300000 21.492731 +-1.300000 5.400000 20.905264 +-1.300000 5.500000 20.337796 +-1.300000 5.600000 19.790329 +-1.300000 5.700000 19.262862 +-1.300000 5.800000 18.755395 +-1.300000 5.900000 18.267927 +-1.300000 6.000000 17.800460 +-1.300000 6.100000 17.352993 +-1.300000 6.200000 16.925526 +-1.300000 6.300000 16.518059 +-1.300000 6.400000 16.130591 +-1.300000 6.500000 15.763124 +-1.300000 6.600000 15.415657 +-1.300000 6.700000 15.088190 +-1.300000 6.800000 14.780723 +-1.300000 6.900000 14.493255 +-1.300000 7.000000 14.225788 +-1.300000 7.100000 13.978321 +-1.300000 7.200000 13.750854 +-1.300000 7.300000 13.543386 +-1.300000 7.400000 13.355919 +-1.300000 7.500000 13.188452 +-1.300000 7.600000 13.040985 +-1.300000 7.700000 12.913518 +-1.300000 7.800000 12.806050 +-1.300000 7.900000 12.718583 +-1.300000 8.000000 12.651116 +-1.300000 8.100000 12.603649 +-1.300000 8.200000 12.576181 +-1.300000 8.300000 12.568714 +-1.300000 8.400000 12.581247 +-1.300000 8.500000 12.613780 +-1.300000 8.600000 12.666313 +-1.300000 8.700000 12.738845 +-1.300000 8.800000 12.831378 +-1.300000 8.900000 12.943911 +-1.300000 9.000000 13.076444 +-1.300000 9.100000 13.228977 +-1.300000 9.200000 13.401509 +-1.300000 9.300000 13.594042 +-1.300000 9.400000 13.806575 +-1.300000 9.500000 14.039108 +-1.300000 9.600000 14.291640 +-1.300000 9.700000 14.564173 +-1.300000 9.800000 14.856706 +-1.300000 9.900000 15.169239 +-1.300000 10.000000 15.501772 +-1.300000 10.100000 15.854304 +-1.300000 10.200000 16.226837 +-1.300000 10.300000 16.619370 +-1.300000 10.400000 17.031903 +-1.300000 10.500000 17.464436 +-1.300000 10.600000 17.916968 +-1.300000 10.700000 18.389501 +-1.300000 10.800000 18.882034 +-1.300000 10.900000 19.394567 +-1.300000 11.000000 19.927099 +-1.300000 11.100000 20.479632 +-1.300000 11.200000 21.052165 +-1.300000 11.300000 21.644698 +-1.300000 11.400000 22.257231 +-1.300000 11.500000 22.889763 +-1.300000 11.600000 23.542296 +-1.300000 11.700000 24.214829 +-1.300000 11.800000 24.907362 +-1.300000 11.900000 25.619894 +-1.300000 12.000000 26.352427 +-1.300000 12.100000 27.104960 +-1.300000 12.200000 27.877493 +-1.300000 12.300000 28.670026 +-1.300000 12.400000 29.482558 +-1.300000 12.500000 30.315091 +-1.300000 12.600000 31.167624 +-1.300000 12.700000 32.040157 +-1.300000 12.800000 32.932690 +-1.300000 12.900000 33.845222 +-1.300000 13.000000 34.777755 +-1.300000 13.100000 35.730288 +-1.300000 13.200000 36.702821 +-1.300000 13.300000 37.695353 +-1.300000 13.400000 38.707886 +-1.300000 13.500000 39.740419 +-1.300000 13.600000 40.792952 +-1.300000 13.700000 41.865485 +-1.300000 13.800000 42.958017 +-1.300000 13.900000 44.070550 +-1.300000 14.000000 45.203083 +-1.300000 14.100000 46.355616 +-1.300000 14.200000 47.528149 +-1.300000 14.300000 48.720681 +-1.300000 14.400000 49.933214 +-1.300000 14.500000 51.165747 +-1.300000 14.600000 52.418280 +-1.300000 14.700000 53.690812 +-1.300000 14.800000 54.983345 +-1.300000 14.900000 56.295878 +-1.300000 15.000000 57.628411 + +-1.200000 -5.000000 184.981604 +-1.200000 -4.900000 182.372427 +-1.200000 -4.800000 179.783250 +-1.200000 -4.700000 177.214073 +-1.200000 -4.600000 174.664896 +-1.200000 -4.500000 172.135719 +-1.200000 -4.400000 169.626542 +-1.200000 -4.300000 167.137365 +-1.200000 -4.200000 164.668188 +-1.200000 -4.100000 162.219011 +-1.200000 -4.000000 159.789834 +-1.200000 -3.900000 157.380657 +-1.200000 -3.800000 154.991480 +-1.200000 -3.700000 152.622303 +-1.200000 -3.600000 150.273126 +-1.200000 -3.500000 147.943949 +-1.200000 -3.400000 145.634772 +-1.200000 -3.300000 143.345595 +-1.200000 -3.200000 141.076418 +-1.200000 -3.100000 138.827241 +-1.200000 -3.000000 136.598064 +-1.200000 -2.900000 134.388887 +-1.200000 -2.800000 132.199710 +-1.200000 -2.700000 130.030533 +-1.200000 -2.600000 127.881356 +-1.200000 -2.500000 125.752179 +-1.200000 -2.400000 123.643002 +-1.200000 -2.300000 121.553825 +-1.200000 -2.200000 119.484648 +-1.200000 -2.100000 117.435471 +-1.200000 -2.000000 115.406294 +-1.200000 -1.900000 113.397117 +-1.200000 -1.800000 111.407940 +-1.200000 -1.700000 109.438763 +-1.200000 -1.600000 107.489586 +-1.200000 -1.500000 105.560409 +-1.200000 -1.400000 103.651232 +-1.200000 -1.300000 101.762055 +-1.200000 -1.200000 99.892878 +-1.200000 -1.100000 98.043701 +-1.200000 -1.000000 96.214524 +-1.200000 -0.900000 94.405347 +-1.200000 -0.800000 92.616170 +-1.200000 -0.700000 90.846993 +-1.200000 -0.600000 89.097816 +-1.200000 -0.500000 87.368639 +-1.200000 -0.400000 85.659462 +-1.200000 -0.300000 83.970285 +-1.200000 -0.200000 82.301108 +-1.200000 -0.100000 80.651931 +-1.200000 -0.000000 79.022754 +-1.200000 0.100000 77.413577 +-1.200000 0.200000 75.824400 +-1.200000 0.300000 74.255223 +-1.200000 0.400000 72.706046 +-1.200000 0.500000 71.176869 +-1.200000 0.600000 69.667692 +-1.200000 0.700000 68.178515 +-1.200000 0.800000 66.709338 +-1.200000 0.900000 65.260161 +-1.200000 1.000000 63.830984 +-1.200000 1.100000 62.421807 +-1.200000 1.200000 61.032630 +-1.200000 1.300000 59.663453 +-1.200000 1.400000 58.314276 +-1.200000 1.500000 56.985099 +-1.200000 1.600000 55.675922 +-1.200000 1.700000 54.386745 +-1.200000 1.800000 53.117568 +-1.200000 1.900000 51.868391 +-1.200000 2.000000 50.639214 +-1.200000 2.100000 49.430037 +-1.200000 2.200000 48.240860 +-1.200000 2.300000 47.071683 +-1.200000 2.400000 45.922506 +-1.200000 2.500000 44.793329 +-1.200000 2.600000 43.684152 +-1.200000 2.700000 42.594975 +-1.200000 2.800000 41.525798 +-1.200000 2.900000 40.476621 +-1.200000 3.000000 39.447444 +-1.200000 3.100000 38.438267 +-1.200000 3.200000 37.449090 +-1.200000 3.300000 36.479913 +-1.200000 3.400000 35.530736 +-1.200000 3.500000 34.601559 +-1.200000 3.600000 33.692382 +-1.200000 3.700000 32.803205 +-1.200000 3.800000 31.934028 +-1.200000 3.900000 31.084851 +-1.200000 4.000000 30.255674 +-1.200000 4.100000 29.446497 +-1.200000 4.200000 28.657320 +-1.200000 4.300000 27.888143 +-1.200000 4.400000 27.138966 +-1.200000 4.500000 26.409789 +-1.200000 4.600000 25.700612 +-1.200000 4.700000 25.011435 +-1.200000 4.800000 24.342258 +-1.200000 4.900000 23.693081 +-1.200000 5.000000 23.063904 +-1.200000 5.100000 22.454727 +-1.200000 5.200000 21.865550 +-1.200000 5.300000 21.296373 +-1.200000 5.400000 20.747196 +-1.200000 5.500000 20.218019 +-1.200000 5.600000 19.708842 +-1.200000 5.700000 19.219665 +-1.200000 5.800000 18.750488 +-1.200000 5.900000 18.301311 +-1.200000 6.000000 17.872134 +-1.200000 6.100000 17.462957 +-1.200000 6.200000 17.073780 +-1.200000 6.300000 16.704603 +-1.200000 6.400000 16.355426 +-1.200000 6.500000 16.026249 +-1.200000 6.600000 15.717072 +-1.200000 6.700000 15.427895 +-1.200000 6.800000 15.158718 +-1.200000 6.900000 14.909541 +-1.200000 7.000000 14.680364 +-1.200000 7.100000 14.471187 +-1.200000 7.200000 14.282010 +-1.200000 7.300000 14.112833 +-1.200000 7.400000 13.963656 +-1.200000 7.500000 13.834479 +-1.200000 7.600000 13.725302 +-1.200000 7.700000 13.636125 +-1.200000 7.800000 13.566948 +-1.200000 7.900000 13.517771 +-1.200000 8.000000 13.488594 +-1.200000 8.100000 13.479417 +-1.200000 8.200000 13.490240 +-1.200000 8.300000 13.521063 +-1.200000 8.400000 13.571886 +-1.200000 8.500000 13.642709 +-1.200000 8.600000 13.733532 +-1.200000 8.700000 13.844355 +-1.200000 8.800000 13.975178 +-1.200000 8.900000 14.126001 +-1.200000 9.000000 14.296824 +-1.200000 9.100000 14.487647 +-1.200000 9.200000 14.698470 +-1.200000 9.300000 14.929293 +-1.200000 9.400000 15.180116 +-1.200000 9.500000 15.450939 +-1.200000 9.600000 15.741762 +-1.200000 9.700000 16.052585 +-1.200000 9.800000 16.383408 +-1.200000 9.900000 16.734231 +-1.200000 10.000000 17.105054 +-1.200000 10.100000 17.495877 +-1.200000 10.200000 17.906700 +-1.200000 10.300000 18.337523 +-1.200000 10.400000 18.788346 +-1.200000 10.500000 19.259169 +-1.200000 10.600000 19.749992 +-1.200000 10.700000 20.260815 +-1.200000 10.800000 20.791638 +-1.200000 10.900000 21.342461 +-1.200000 11.000000 21.913284 +-1.200000 11.100000 22.504107 +-1.200000 11.200000 23.114930 +-1.200000 11.300000 23.745753 +-1.200000 11.400000 24.396576 +-1.200000 11.500000 25.067399 +-1.200000 11.600000 25.758222 +-1.200000 11.700000 26.469045 +-1.200000 11.800000 27.199868 +-1.200000 11.900000 27.950691 +-1.200000 12.000000 28.721514 +-1.200000 12.100000 29.512337 +-1.200000 12.200000 30.323160 +-1.200000 12.300000 31.153983 +-1.200000 12.400000 32.004806 +-1.200000 12.500000 32.875629 +-1.200000 12.600000 33.766452 +-1.200000 12.700000 34.677275 +-1.200000 12.800000 35.608098 +-1.200000 12.900000 36.558921 +-1.200000 13.000000 37.529744 +-1.200000 13.100000 38.520567 +-1.200000 13.200000 39.531390 +-1.200000 13.300000 40.562213 +-1.200000 13.400000 41.613036 +-1.200000 13.500000 42.683859 +-1.200000 13.600000 43.774682 +-1.200000 13.700000 44.885505 +-1.200000 13.800000 46.016328 +-1.200000 13.900000 47.167151 +-1.200000 14.000000 48.337974 +-1.200000 14.100000 49.528797 +-1.200000 14.200000 50.739620 +-1.200000 14.300000 51.970443 +-1.200000 14.400000 53.221266 +-1.200000 14.500000 54.492089 +-1.200000 14.600000 55.782912 +-1.200000 14.700000 57.093735 +-1.200000 14.800000 58.424558 +-1.200000 14.900000 59.775381 +-1.200000 15.000000 61.146204 + +-1.100000 -5.000000 180.946585 +-1.100000 -4.900000 178.375182 +-1.100000 -4.800000 175.823778 +-1.100000 -4.700000 173.292375 +-1.100000 -4.600000 170.780971 +-1.100000 -4.500000 168.289568 +-1.100000 -4.400000 165.818164 +-1.100000 -4.300000 163.366760 +-1.100000 -4.200000 160.935357 +-1.100000 -4.100000 158.523953 +-1.100000 -4.000000 156.132550 +-1.100000 -3.900000 153.761146 +-1.100000 -3.800000 151.409743 +-1.100000 -3.700000 149.078339 +-1.100000 -3.600000 146.766936 +-1.100000 -3.500000 144.475532 +-1.100000 -3.400000 142.204129 +-1.100000 -3.300000 139.952725 +-1.100000 -3.200000 137.721322 +-1.100000 -3.100000 135.509918 +-1.100000 -3.000000 133.318515 +-1.100000 -2.900000 131.147111 +-1.100000 -2.800000 128.995708 +-1.100000 -2.700000 126.864304 +-1.100000 -2.600000 124.752901 +-1.100000 -2.500000 122.661497 +-1.100000 -2.400000 120.590093 +-1.100000 -2.300000 118.538690 +-1.100000 -2.200000 116.507286 +-1.100000 -2.100000 114.495883 +-1.100000 -2.000000 112.504479 +-1.100000 -1.900000 110.533076 +-1.100000 -1.800000 108.581672 +-1.100000 -1.700000 106.650269 +-1.100000 -1.600000 104.738865 +-1.100000 -1.500000 102.847462 +-1.100000 -1.400000 100.976058 +-1.100000 -1.300000 99.124655 +-1.100000 -1.200000 97.293251 +-1.100000 -1.100000 95.481848 +-1.100000 -1.000000 93.690444 +-1.100000 -0.900000 91.919041 +-1.100000 -0.800000 90.167637 +-1.100000 -0.700000 88.436234 +-1.100000 -0.600000 86.724830 +-1.100000 -0.500000 85.033426 +-1.100000 -0.400000 83.362023 +-1.100000 -0.300000 81.710619 +-1.100000 -0.200000 80.079216 +-1.100000 -0.100000 78.467812 +-1.100000 -0.000000 76.876409 +-1.100000 0.100000 75.305005 +-1.100000 0.200000 73.753602 +-1.100000 0.300000 72.222198 +-1.100000 0.400000 70.710795 +-1.100000 0.500000 69.219391 +-1.100000 0.600000 67.747988 +-1.100000 0.700000 66.296584 +-1.100000 0.800000 64.865181 +-1.100000 0.900000 63.453777 +-1.100000 1.000000 62.062374 +-1.100000 1.100000 60.690970 +-1.100000 1.200000 59.339567 +-1.100000 1.300000 58.008163 +-1.100000 1.400000 56.696759 +-1.100000 1.500000 55.405356 +-1.100000 1.600000 54.133952 +-1.100000 1.700000 52.882549 +-1.100000 1.800000 51.651145 +-1.100000 1.900000 50.439742 +-1.100000 2.000000 49.248338 +-1.100000 2.100000 48.076935 +-1.100000 2.200000 46.925531 +-1.100000 2.300000 45.794128 +-1.100000 2.400000 44.682724 +-1.100000 2.500000 43.591321 +-1.100000 2.600000 42.519917 +-1.100000 2.700000 41.468514 +-1.100000 2.800000 40.437110 +-1.100000 2.900000 39.425707 +-1.100000 3.000000 38.434303 +-1.100000 3.100000 37.462900 +-1.100000 3.200000 36.511496 +-1.100000 3.300000 35.580092 +-1.100000 3.400000 34.668689 +-1.100000 3.500000 33.777285 +-1.100000 3.600000 32.905882 +-1.100000 3.700000 32.054478 +-1.100000 3.800000 31.223075 +-1.100000 3.900000 30.411671 +-1.100000 4.000000 29.620268 +-1.100000 4.100000 28.848864 +-1.100000 4.200000 28.097461 +-1.100000 4.300000 27.366057 +-1.100000 4.400000 26.654654 +-1.100000 4.500000 25.963250 +-1.100000 4.600000 25.291847 +-1.100000 4.700000 24.640443 +-1.100000 4.800000 24.009040 +-1.100000 4.900000 23.397636 +-1.100000 5.000000 22.806233 +-1.100000 5.100000 22.234829 +-1.100000 5.200000 21.683426 +-1.100000 5.300000 21.152022 +-1.100000 5.400000 20.640618 +-1.100000 5.500000 20.149215 +-1.100000 5.600000 19.677811 +-1.100000 5.700000 19.226408 +-1.100000 5.800000 18.795004 +-1.100000 5.900000 18.383601 +-1.100000 6.000000 17.992197 +-1.100000 6.100000 17.620794 +-1.100000 6.200000 17.269390 +-1.100000 6.300000 16.937987 +-1.100000 6.400000 16.626583 +-1.100000 6.500000 16.335180 +-1.100000 6.600000 16.063776 +-1.100000 6.700000 15.812373 +-1.100000 6.800000 15.580969 +-1.100000 6.900000 15.369566 +-1.100000 7.000000 15.178162 +-1.100000 7.100000 15.006759 +-1.100000 7.200000 14.855355 +-1.100000 7.300000 14.723951 +-1.100000 7.400000 14.612548 +-1.100000 7.500000 14.521144 +-1.100000 7.600000 14.449741 +-1.100000 7.700000 14.398337 +-1.100000 7.800000 14.366934 +-1.100000 7.900000 14.355530 +-1.100000 8.000000 14.364127 +-1.100000 8.100000 14.392723 +-1.100000 8.200000 14.441320 +-1.100000 8.300000 14.509916 +-1.100000 8.400000 14.598513 +-1.100000 8.500000 14.707109 +-1.100000 8.600000 14.835706 +-1.100000 8.700000 14.984302 +-1.100000 8.800000 15.152899 +-1.100000 8.900000 15.341495 +-1.100000 9.000000 15.550092 +-1.100000 9.100000 15.778688 +-1.100000 9.200000 16.027284 +-1.100000 9.300000 16.295881 +-1.100000 9.400000 16.584477 +-1.100000 9.500000 16.893074 +-1.100000 9.600000 17.221670 +-1.100000 9.700000 17.570267 +-1.100000 9.800000 17.938863 +-1.100000 9.900000 18.327460 +-1.100000 10.000000 18.736056 +-1.100000 10.100000 19.164653 +-1.100000 10.200000 19.613249 +-1.100000 10.300000 20.081846 +-1.100000 10.400000 20.570442 +-1.100000 10.500000 21.079039 +-1.100000 10.600000 21.607635 +-1.100000 10.700000 22.156232 +-1.100000 10.800000 22.724828 +-1.100000 10.900000 23.313425 +-1.100000 11.000000 23.922021 +-1.100000 11.100000 24.550617 +-1.100000 11.200000 25.199214 +-1.100000 11.300000 25.867810 +-1.100000 11.400000 26.556407 +-1.100000 11.500000 27.265003 +-1.100000 11.600000 27.993600 +-1.100000 11.700000 28.742196 +-1.100000 11.800000 29.510793 +-1.100000 11.900000 30.299389 +-1.100000 12.000000 31.107986 +-1.100000 12.100000 31.936582 +-1.100000 12.200000 32.785179 +-1.100000 12.300000 33.653775 +-1.100000 12.400000 34.542372 +-1.100000 12.500000 35.450968 +-1.100000 12.600000 36.379565 +-1.100000 12.700000 37.328161 +-1.100000 12.800000 38.296758 +-1.100000 12.900000 39.285354 +-1.100000 13.000000 40.293950 +-1.100000 13.100000 41.322547 +-1.100000 13.200000 42.371143 +-1.100000 13.300000 43.439740 +-1.100000 13.400000 44.528336 +-1.100000 13.500000 45.636933 +-1.100000 13.600000 46.765529 +-1.100000 13.700000 47.914126 +-1.100000 13.800000 49.082722 +-1.100000 13.900000 50.271319 +-1.100000 14.000000 51.479915 +-1.100000 14.100000 52.708512 +-1.100000 14.200000 53.957108 +-1.100000 14.300000 55.225705 +-1.100000 14.400000 56.514301 +-1.100000 14.500000 57.822898 +-1.100000 14.600000 59.151494 +-1.100000 14.700000 60.500091 +-1.100000 14.800000 61.868687 +-1.100000 14.900000 63.257283 +-1.100000 15.000000 64.665880 + +-1.000000 -5.000000 177.005116 +-1.000000 -4.900000 174.470969 +-1.000000 -4.800000 171.956822 +-1.000000 -4.700000 169.462675 +-1.000000 -4.600000 166.988528 +-1.000000 -4.500000 164.534382 +-1.000000 -4.400000 162.100235 +-1.000000 -4.300000 159.686088 +-1.000000 -4.200000 157.291941 +-1.000000 -4.100000 154.917794 +-1.000000 -4.000000 152.563648 +-1.000000 -3.900000 150.229501 +-1.000000 -3.800000 147.915354 +-1.000000 -3.700000 145.621207 +-1.000000 -3.600000 143.347061 +-1.000000 -3.500000 141.092914 +-1.000000 -3.400000 138.858767 +-1.000000 -3.300000 136.644620 +-1.000000 -3.200000 134.450473 +-1.000000 -3.100000 132.276327 +-1.000000 -3.000000 130.122180 +-1.000000 -2.900000 127.988033 +-1.000000 -2.800000 125.873886 +-1.000000 -2.700000 123.779739 +-1.000000 -2.600000 121.705593 +-1.000000 -2.500000 119.651446 +-1.000000 -2.400000 117.617299 +-1.000000 -2.300000 115.603152 +-1.000000 -2.200000 113.609006 +-1.000000 -2.100000 111.634859 +-1.000000 -2.000000 109.680712 +-1.000000 -1.900000 107.746565 +-1.000000 -1.800000 105.832418 +-1.000000 -1.700000 103.938272 +-1.000000 -1.600000 102.064125 +-1.000000 -1.500000 100.209978 +-1.000000 -1.400000 98.375831 +-1.000000 -1.300000 96.561684 +-1.000000 -1.200000 94.767538 +-1.000000 -1.100000 92.993391 +-1.000000 -1.000000 91.239244 +-1.000000 -0.900000 89.505097 +-1.000000 -0.800000 87.790950 +-1.000000 -0.700000 86.096804 +-1.000000 -0.600000 84.422657 +-1.000000 -0.500000 82.768510 +-1.000000 -0.400000 81.134363 +-1.000000 -0.300000 79.520217 +-1.000000 -0.200000 77.926070 +-1.000000 -0.100000 76.351923 +-1.000000 -0.000000 74.797776 +-1.000000 0.100000 73.263629 +-1.000000 0.200000 71.749483 +-1.000000 0.300000 70.255336 +-1.000000 0.400000 68.781189 +-1.000000 0.500000 67.327042 +-1.000000 0.600000 65.892895 +-1.000000 0.700000 64.478749 +-1.000000 0.800000 63.084602 +-1.000000 0.900000 61.710455 +-1.000000 1.000000 60.356308 +-1.000000 1.100000 59.022162 +-1.000000 1.200000 57.708015 +-1.000000 1.300000 56.413868 +-1.000000 1.400000 55.139721 +-1.000000 1.500000 53.885574 +-1.000000 1.600000 52.651428 +-1.000000 1.700000 51.437281 +-1.000000 1.800000 50.243134 +-1.000000 1.900000 49.068987 +-1.000000 2.000000 47.914840 +-1.000000 2.100000 46.780694 +-1.000000 2.200000 45.666547 +-1.000000 2.300000 44.572400 +-1.000000 2.400000 43.498253 +-1.000000 2.500000 42.444106 +-1.000000 2.600000 41.409960 +-1.000000 2.700000 40.395813 +-1.000000 2.800000 39.401666 +-1.000000 2.900000 38.427519 +-1.000000 3.000000 37.473373 +-1.000000 3.100000 36.539226 +-1.000000 3.200000 35.625079 +-1.000000 3.300000 34.730932 +-1.000000 3.400000 33.856785 +-1.000000 3.500000 33.002639 +-1.000000 3.600000 32.168492 +-1.000000 3.700000 31.354345 +-1.000000 3.800000 30.560198 +-1.000000 3.900000 29.786051 +-1.000000 4.000000 29.031905 +-1.000000 4.100000 28.297758 +-1.000000 4.200000 27.583611 +-1.000000 4.300000 26.889464 +-1.000000 4.400000 26.215318 +-1.000000 4.500000 25.561171 +-1.000000 4.600000 24.927024 +-1.000000 4.700000 24.312877 +-1.000000 4.800000 23.718730 +-1.000000 4.900000 23.144584 +-1.000000 5.000000 22.590437 +-1.000000 5.100000 22.056290 +-1.000000 5.200000 21.542143 +-1.000000 5.300000 21.047996 +-1.000000 5.400000 20.573850 +-1.000000 5.500000 20.119703 +-1.000000 5.600000 19.685556 +-1.000000 5.700000 19.271409 +-1.000000 5.800000 18.877262 +-1.000000 5.900000 18.503116 +-1.000000 6.000000 18.148969 +-1.000000 6.100000 17.814822 +-1.000000 6.200000 17.500675 +-1.000000 6.300000 17.206529 +-1.000000 6.400000 16.932382 +-1.000000 6.500000 16.678235 +-1.000000 6.600000 16.444088 +-1.000000 6.700000 16.229941 +-1.000000 6.800000 16.035795 +-1.000000 6.900000 15.861648 +-1.000000 7.000000 15.707501 +-1.000000 7.100000 15.573354 +-1.000000 7.200000 15.459207 +-1.000000 7.300000 15.365061 +-1.000000 7.400000 15.290914 +-1.000000 7.500000 15.236767 +-1.000000 7.600000 15.202620 +-1.000000 7.700000 15.188473 +-1.000000 7.800000 15.194327 +-1.000000 7.900000 15.220180 +-1.000000 8.000000 15.266033 +-1.000000 8.100000 15.331886 +-1.000000 8.200000 15.417740 +-1.000000 8.300000 15.523593 +-1.000000 8.400000 15.649446 +-1.000000 8.500000 15.795299 +-1.000000 8.600000 15.961152 +-1.000000 8.700000 16.147006 +-1.000000 8.800000 16.352859 +-1.000000 8.900000 16.578712 +-1.000000 9.000000 16.824565 +-1.000000 9.100000 17.090418 +-1.000000 9.200000 17.376272 +-1.000000 9.300000 17.682125 +-1.000000 9.400000 18.007978 +-1.000000 9.500000 18.353831 +-1.000000 9.600000 18.719685 +-1.000000 9.700000 19.105538 +-1.000000 9.800000 19.511391 +-1.000000 9.900000 19.937244 +-1.000000 10.000000 20.383097 +-1.000000 10.100000 20.848951 +-1.000000 10.200000 21.334804 +-1.000000 10.300000 21.840657 +-1.000000 10.400000 22.366510 +-1.000000 10.500000 22.912363 +-1.000000 10.600000 23.478217 +-1.000000 10.700000 24.064070 +-1.000000 10.800000 24.669923 +-1.000000 10.900000 25.295776 +-1.000000 11.000000 25.941629 +-1.000000 11.100000 26.607483 +-1.000000 11.200000 27.293336 +-1.000000 11.300000 27.999189 +-1.000000 11.400000 28.725042 +-1.000000 11.500000 29.470896 +-1.000000 11.600000 30.236749 +-1.000000 11.700000 31.022602 +-1.000000 11.800000 31.828455 +-1.000000 11.900000 32.654308 +-1.000000 12.000000 33.500162 +-1.000000 12.100000 34.366015 +-1.000000 12.200000 35.251868 +-1.000000 12.300000 36.157721 +-1.000000 12.400000 37.083574 +-1.000000 12.500000 38.029428 +-1.000000 12.600000 38.995281 +-1.000000 12.700000 39.981134 +-1.000000 12.800000 40.986987 +-1.000000 12.900000 42.012841 +-1.000000 13.000000 43.058694 +-1.000000 13.100000 44.124547 +-1.000000 13.200000 45.210400 +-1.000000 13.300000 46.316253 +-1.000000 13.400000 47.442107 +-1.000000 13.500000 48.587960 +-1.000000 13.600000 49.753813 +-1.000000 13.700000 50.939666 +-1.000000 13.800000 52.145519 +-1.000000 13.900000 53.371373 +-1.000000 14.000000 54.617226 +-1.000000 14.100000 55.883079 +-1.000000 14.200000 57.168932 +-1.000000 14.300000 58.474785 +-1.000000 14.400000 59.800639 +-1.000000 14.500000 61.146492 +-1.000000 14.600000 62.512345 +-1.000000 14.700000 63.898198 +-1.000000 14.800000 65.304052 +-1.000000 14.900000 66.729905 +-1.000000 15.000000 68.175758 + +-0.900000 -5.000000 173.145989 +-0.900000 -4.900000 170.648582 +-0.900000 -4.800000 168.171175 +-0.900000 -4.700000 165.713769 +-0.900000 -4.600000 163.276362 +-0.900000 -4.500000 160.858955 +-0.900000 -4.400000 158.461548 +-0.900000 -4.300000 156.084141 +-0.900000 -4.200000 153.726735 +-0.900000 -4.100000 151.389328 +-0.900000 -4.000000 149.071921 +-0.900000 -3.900000 146.774514 +-0.900000 -3.800000 144.497107 +-0.900000 -3.700000 142.239701 +-0.900000 -3.600000 140.002294 +-0.900000 -3.500000 137.784887 +-0.900000 -3.400000 135.587480 +-0.900000 -3.300000 133.410074 +-0.900000 -3.200000 131.252667 +-0.900000 -3.100000 129.115260 +-0.900000 -3.000000 126.997853 +-0.900000 -2.900000 124.900446 +-0.900000 -2.800000 122.823040 +-0.900000 -2.700000 120.765633 +-0.900000 -2.600000 118.728226 +-0.900000 -2.500000 116.710819 +-0.900000 -2.400000 114.713412 +-0.900000 -2.300000 112.736006 +-0.900000 -2.200000 110.778599 +-0.900000 -2.100000 108.841192 +-0.900000 -2.000000 106.923785 +-0.900000 -1.900000 105.026379 +-0.900000 -1.800000 103.148972 +-0.900000 -1.700000 101.291565 +-0.900000 -1.600000 99.454158 +-0.900000 -1.500000 97.636751 +-0.900000 -1.400000 95.839345 +-0.900000 -1.300000 94.061938 +-0.900000 -1.200000 92.304531 +-0.900000 -1.100000 90.567124 +-0.900000 -1.000000 88.849717 +-0.900000 -0.900000 87.152311 +-0.900000 -0.800000 85.474904 +-0.900000 -0.700000 83.817497 +-0.900000 -0.600000 82.180090 +-0.900000 -0.500000 80.562683 +-0.900000 -0.400000 78.965277 +-0.900000 -0.300000 77.387870 +-0.900000 -0.200000 75.830463 +-0.900000 -0.100000 74.293056 +-0.900000 -0.000000 72.775650 +-0.900000 0.100000 71.278243 +-0.900000 0.200000 69.800836 +-0.900000 0.300000 68.343429 +-0.900000 0.400000 66.906022 +-0.900000 0.500000 65.488616 +-0.900000 0.600000 64.091209 +-0.900000 0.700000 62.713802 +-0.900000 0.800000 61.356395 +-0.900000 0.900000 60.018988 +-0.900000 1.000000 58.701582 +-0.900000 1.100000 57.404175 +-0.900000 1.200000 56.126768 +-0.900000 1.300000 54.869361 +-0.900000 1.400000 53.631955 +-0.900000 1.500000 52.414548 +-0.900000 1.600000 51.217141 +-0.900000 1.700000 50.039734 +-0.900000 1.800000 48.882327 +-0.900000 1.900000 47.744921 +-0.900000 2.000000 46.627514 +-0.900000 2.100000 45.530107 +-0.900000 2.200000 44.452700 +-0.900000 2.300000 43.395293 +-0.900000 2.400000 42.357887 +-0.900000 2.500000 41.340480 +-0.900000 2.600000 40.343073 +-0.900000 2.700000 39.365666 +-0.900000 2.800000 38.408259 +-0.900000 2.900000 37.470853 +-0.900000 3.000000 36.553446 +-0.900000 3.100000 35.656039 +-0.900000 3.200000 34.778632 +-0.900000 3.300000 33.921226 +-0.900000 3.400000 33.083819 +-0.900000 3.500000 32.266412 +-0.900000 3.600000 31.469005 +-0.900000 3.700000 30.691598 +-0.900000 3.800000 29.934192 +-0.900000 3.900000 29.196785 +-0.900000 4.000000 28.479378 +-0.900000 4.100000 27.781971 +-0.900000 4.200000 27.104564 +-0.900000 4.300000 26.447158 +-0.900000 4.400000 25.809751 +-0.900000 4.500000 25.192344 +-0.900000 4.600000 24.594937 +-0.900000 4.700000 24.017531 +-0.900000 4.800000 23.460124 +-0.900000 4.900000 22.922717 +-0.900000 5.000000 22.405310 +-0.900000 5.100000 21.907903 +-0.900000 5.200000 21.430497 +-0.900000 5.300000 20.973090 +-0.900000 5.400000 20.535683 +-0.900000 5.500000 20.118276 +-0.900000 5.600000 19.720869 +-0.900000 5.700000 19.343463 +-0.900000 5.800000 18.986056 +-0.900000 5.900000 18.648649 +-0.900000 6.000000 18.331242 +-0.900000 6.100000 18.033835 +-0.900000 6.200000 17.756429 +-0.900000 6.300000 17.499022 +-0.900000 6.400000 17.261615 +-0.900000 6.500000 17.044208 +-0.900000 6.600000 16.846802 +-0.900000 6.700000 16.669395 +-0.900000 6.800000 16.511988 +-0.900000 6.900000 16.374581 +-0.900000 7.000000 16.257174 +-0.900000 7.100000 16.159768 +-0.900000 7.200000 16.082361 +-0.900000 7.300000 16.024954 +-0.900000 7.400000 15.987547 +-0.900000 7.500000 15.970140 +-0.900000 7.600000 15.972734 +-0.900000 7.700000 15.995327 +-0.900000 7.800000 16.037920 +-0.900000 7.900000 16.100513 +-0.900000 8.000000 16.183107 +-0.900000 8.100000 16.285700 +-0.900000 8.200000 16.408293 +-0.900000 8.300000 16.550886 +-0.900000 8.400000 16.713479 +-0.900000 8.500000 16.896073 +-0.900000 8.600000 17.098666 +-0.900000 8.700000 17.321259 +-0.900000 8.800000 17.563852 +-0.900000 8.900000 17.826445 +-0.900000 9.000000 18.109039 +-0.900000 9.100000 18.411632 +-0.900000 9.200000 18.734225 +-0.900000 9.300000 19.076818 +-0.900000 9.400000 19.439411 +-0.900000 9.500000 19.822005 +-0.900000 9.600000 20.224598 +-0.900000 9.700000 20.647191 +-0.900000 9.800000 21.089784 +-0.900000 9.900000 21.552378 +-0.900000 10.000000 22.034971 +-0.900000 10.100000 22.537564 +-0.900000 10.200000 23.060157 +-0.900000 10.300000 23.602750 +-0.900000 10.400000 24.165344 +-0.900000 10.500000 24.747937 +-0.900000 10.600000 25.350530 +-0.900000 10.700000 25.973123 +-0.900000 10.800000 26.615716 +-0.900000 10.900000 27.278310 +-0.900000 11.000000 27.960903 +-0.900000 11.100000 28.663496 +-0.900000 11.200000 29.386089 +-0.900000 11.300000 30.128683 +-0.900000 11.400000 30.891276 +-0.900000 11.500000 31.673869 +-0.900000 11.600000 32.476462 +-0.900000 11.700000 33.299055 +-0.900000 11.800000 34.141649 +-0.900000 11.900000 35.004242 +-0.900000 12.000000 35.886835 +-0.900000 12.100000 36.789428 +-0.900000 12.200000 37.712021 +-0.900000 12.300000 38.654615 +-0.900000 12.400000 39.617208 +-0.900000 12.500000 40.599801 +-0.900000 12.600000 41.602394 +-0.900000 12.700000 42.624987 +-0.900000 12.800000 43.667581 +-0.900000 12.900000 44.730174 +-0.900000 13.000000 45.812767 +-0.900000 13.100000 46.915360 +-0.900000 13.200000 48.037954 +-0.900000 13.300000 49.180547 +-0.900000 13.400000 50.343140 +-0.900000 13.500000 51.525733 +-0.900000 13.600000 52.728326 +-0.900000 13.700000 53.950920 +-0.900000 13.800000 55.193513 +-0.900000 13.900000 56.456106 +-0.900000 14.000000 57.738699 +-0.900000 14.100000 59.041292 +-0.900000 14.200000 60.363886 +-0.900000 14.300000 61.706479 +-0.900000 14.400000 63.069072 +-0.900000 14.500000 64.451665 +-0.900000 14.600000 65.854258 +-0.900000 14.700000 67.276852 +-0.900000 14.800000 68.719445 +-0.900000 14.900000 70.182038 +-0.900000 15.000000 71.664631 + +-0.800000 -5.000000 169.358557 +-0.800000 -4.900000 166.897373 +-0.800000 -4.800000 164.456190 +-0.800000 -4.700000 162.035006 +-0.800000 -4.600000 159.633823 +-0.800000 -4.500000 157.252639 +-0.800000 -4.400000 154.891456 +-0.800000 -4.300000 152.550272 +-0.800000 -4.200000 150.229089 +-0.800000 -4.100000 147.927905 +-0.800000 -4.000000 145.646722 +-0.800000 -3.900000 143.385538 +-0.800000 -3.800000 141.144354 +-0.800000 -3.700000 138.923171 +-0.800000 -3.600000 136.721987 +-0.800000 -3.500000 134.540804 +-0.800000 -3.400000 132.379620 +-0.800000 -3.300000 130.238437 +-0.800000 -3.200000 128.117253 +-0.800000 -3.100000 126.016070 +-0.800000 -3.000000 123.934886 +-0.800000 -2.900000 121.873703 +-0.800000 -2.800000 119.832519 +-0.800000 -2.700000 117.811336 +-0.800000 -2.600000 115.810152 +-0.800000 -2.500000 113.828969 +-0.800000 -2.400000 111.867785 +-0.800000 -2.300000 109.926602 +-0.800000 -2.200000 108.005418 +-0.800000 -2.100000 106.104235 +-0.800000 -2.000000 104.223051 +-0.800000 -1.900000 102.361867 +-0.800000 -1.800000 100.520684 +-0.800000 -1.700000 98.699500 +-0.800000 -1.600000 96.898317 +-0.800000 -1.500000 95.117133 +-0.800000 -1.400000 93.355950 +-0.800000 -1.300000 91.614766 +-0.800000 -1.200000 89.893583 +-0.800000 -1.100000 88.192399 +-0.800000 -1.000000 86.511216 +-0.800000 -0.900000 84.850032 +-0.800000 -0.800000 83.208849 +-0.800000 -0.700000 81.587665 +-0.800000 -0.600000 79.986482 +-0.800000 -0.500000 78.405298 +-0.800000 -0.400000 76.844115 +-0.800000 -0.300000 75.302931 +-0.800000 -0.200000 73.781748 +-0.800000 -0.100000 72.280564 +-0.800000 -0.000000 70.799380 +-0.800000 0.100000 69.338197 +-0.800000 0.200000 67.897013 +-0.800000 0.300000 66.475830 +-0.800000 0.400000 65.074646 +-0.800000 0.500000 63.693463 +-0.800000 0.600000 62.332279 +-0.800000 0.700000 60.991096 +-0.800000 0.800000 59.669912 +-0.800000 0.900000 58.368729 +-0.800000 1.000000 57.087545 +-0.800000 1.100000 55.826362 +-0.800000 1.200000 54.585178 +-0.800000 1.300000 53.363995 +-0.800000 1.400000 52.162811 +-0.800000 1.500000 50.981628 +-0.800000 1.600000 49.820444 +-0.800000 1.700000 48.679261 +-0.800000 1.800000 47.558077 +-0.800000 1.900000 46.456893 +-0.800000 2.000000 45.375710 +-0.800000 2.100000 44.314526 +-0.800000 2.200000 43.273343 +-0.800000 2.300000 42.252159 +-0.800000 2.400000 41.250976 +-0.800000 2.500000 40.269792 +-0.800000 2.600000 39.308609 +-0.800000 2.700000 38.367425 +-0.800000 2.800000 37.446242 +-0.800000 2.900000 36.545058 +-0.800000 3.000000 35.663875 +-0.800000 3.100000 34.802691 +-0.800000 3.200000 33.961508 +-0.800000 3.300000 33.140324 +-0.800000 3.400000 32.339141 +-0.800000 3.500000 31.557957 +-0.800000 3.600000 30.796774 +-0.800000 3.700000 30.055590 +-0.800000 3.800000 29.334406 +-0.800000 3.900000 28.633223 +-0.800000 4.000000 27.952039 +-0.800000 4.100000 27.290856 +-0.800000 4.200000 26.649672 +-0.800000 4.300000 26.028489 +-0.800000 4.400000 25.427305 +-0.800000 4.500000 24.846122 +-0.800000 4.600000 24.284938 +-0.800000 4.700000 23.743755 +-0.800000 4.800000 23.222571 +-0.800000 4.900000 22.721388 +-0.800000 5.000000 22.240204 +-0.800000 5.100000 21.779021 +-0.800000 5.200000 21.337837 +-0.800000 5.300000 20.916654 +-0.800000 5.400000 20.515470 +-0.800000 5.500000 20.134287 +-0.800000 5.600000 19.773103 +-0.800000 5.700000 19.431920 +-0.800000 5.800000 19.110736 +-0.800000 5.900000 18.809552 +-0.800000 6.000000 18.528369 +-0.800000 6.100000 18.267185 +-0.800000 6.200000 18.026002 +-0.800000 6.300000 17.804818 +-0.800000 6.400000 17.603635 +-0.800000 6.500000 17.422451 +-0.800000 6.600000 17.261268 +-0.800000 6.700000 17.120084 +-0.800000 6.800000 16.998901 +-0.800000 6.900000 16.897717 +-0.800000 7.000000 16.816534 +-0.800000 7.100000 16.755350 +-0.800000 7.200000 16.714167 +-0.800000 7.300000 16.692983 +-0.800000 7.400000 16.691800 +-0.800000 7.500000 16.710616 +-0.800000 7.600000 16.749433 +-0.800000 7.700000 16.808249 +-0.800000 7.800000 16.887065 +-0.800000 7.900000 16.985882 +-0.800000 8.000000 17.104698 +-0.800000 8.100000 17.243515 +-0.800000 8.200000 17.402331 +-0.800000 8.300000 17.581148 +-0.800000 8.400000 17.779964 +-0.800000 8.500000 17.998781 +-0.800000 8.600000 18.237597 +-0.800000 8.700000 18.496414 +-0.800000 8.800000 18.775230 +-0.800000 8.900000 19.074047 +-0.800000 9.000000 19.392863 +-0.800000 9.100000 19.731680 +-0.800000 9.200000 20.090496 +-0.800000 9.300000 20.469313 +-0.800000 9.400000 20.868129 +-0.800000 9.500000 21.286946 +-0.800000 9.600000 21.725762 +-0.800000 9.700000 22.184578 +-0.800000 9.800000 22.663395 +-0.800000 9.900000 23.162211 +-0.800000 10.000000 23.681028 +-0.800000 10.100000 24.219844 +-0.800000 10.200000 24.778661 +-0.800000 10.300000 25.357477 +-0.800000 10.400000 25.956294 +-0.800000 10.500000 26.575110 +-0.800000 10.600000 27.213927 +-0.800000 10.700000 27.872743 +-0.800000 10.800000 28.551560 +-0.800000 10.900000 29.250376 +-0.800000 11.000000 29.969193 +-0.800000 11.100000 30.708009 +-0.800000 11.200000 31.466826 +-0.800000 11.300000 32.245642 +-0.800000 11.400000 33.044459 +-0.800000 11.500000 33.863275 +-0.800000 11.600000 34.702091 +-0.800000 11.700000 35.560908 +-0.800000 11.800000 36.439724 +-0.800000 11.900000 37.338541 +-0.800000 12.000000 38.257357 +-0.800000 12.100000 39.196174 +-0.800000 12.200000 40.154990 +-0.800000 12.300000 41.133807 +-0.800000 12.400000 42.132623 +-0.800000 12.500000 43.151440 +-0.800000 12.600000 44.190256 +-0.800000 12.700000 45.249073 +-0.800000 12.800000 46.327889 +-0.800000 12.900000 47.426706 +-0.800000 13.000000 48.545522 +-0.800000 13.100000 49.684339 +-0.800000 13.200000 50.843155 +-0.800000 13.300000 52.021972 +-0.800000 13.400000 53.220788 +-0.800000 13.500000 54.439604 +-0.800000 13.600000 55.678421 +-0.800000 13.700000 56.937237 +-0.800000 13.800000 58.216054 +-0.800000 13.900000 59.514870 +-0.800000 14.000000 60.833687 +-0.800000 14.100000 62.172503 +-0.800000 14.200000 63.531320 +-0.800000 14.300000 64.910136 +-0.800000 14.400000 66.308953 +-0.800000 14.500000 67.727769 +-0.800000 14.600000 69.166586 +-0.800000 14.700000 70.625402 +-0.800000 14.800000 72.104219 +-0.800000 14.900000 73.603035 +-0.800000 15.000000 75.121852 + +-0.700000 -5.000000 165.632807 +-0.700000 -4.900000 163.207330 +-0.700000 -4.800000 160.801853 +-0.700000 -4.700000 158.416376 +-0.700000 -4.600000 156.050899 +-0.700000 -4.500000 153.705422 +-0.700000 -4.400000 151.379945 +-0.700000 -4.300000 149.074468 +-0.700000 -4.200000 146.788991 +-0.700000 -4.100000 144.523514 +-0.700000 -4.000000 142.278037 +-0.700000 -3.900000 140.052560 +-0.700000 -3.800000 137.847083 +-0.700000 -3.700000 135.661606 +-0.700000 -3.600000 133.496129 +-0.700000 -3.500000 131.350652 +-0.700000 -3.400000 129.225175 +-0.700000 -3.300000 127.119698 +-0.700000 -3.200000 125.034221 +-0.700000 -3.100000 122.968744 +-0.700000 -3.000000 120.923267 +-0.700000 -2.900000 118.897789 +-0.700000 -2.800000 116.892312 +-0.700000 -2.700000 114.906835 +-0.700000 -2.600000 112.941358 +-0.700000 -2.500000 110.995881 +-0.700000 -2.400000 109.070404 +-0.700000 -2.300000 107.164927 +-0.700000 -2.200000 105.279450 +-0.700000 -2.100000 103.413973 +-0.700000 -2.000000 101.568496 +-0.700000 -1.900000 99.743019 +-0.700000 -1.800000 97.937542 +-0.700000 -1.700000 96.152065 +-0.700000 -1.600000 94.386588 +-0.700000 -1.500000 92.641111 +-0.700000 -1.400000 90.915634 +-0.700000 -1.300000 89.210157 +-0.700000 -1.200000 87.524680 +-0.700000 -1.100000 85.859203 +-0.700000 -1.000000 84.213726 +-0.700000 -0.900000 82.588249 +-0.700000 -0.800000 80.982772 +-0.700000 -0.700000 79.397295 +-0.700000 -0.600000 77.831818 +-0.700000 -0.500000 76.286341 +-0.700000 -0.400000 74.760864 +-0.700000 -0.300000 73.255387 +-0.700000 -0.200000 71.769910 +-0.700000 -0.100000 70.304433 +-0.700000 -0.000000 68.858956 +-0.700000 0.100000 67.433479 +-0.700000 0.200000 66.028002 +-0.700000 0.300000 64.642525 +-0.700000 0.400000 63.277048 +-0.700000 0.500000 61.931571 +-0.700000 0.600000 60.606094 +-0.700000 0.700000 59.300617 +-0.700000 0.800000 58.015140 +-0.700000 0.900000 56.749663 +-0.700000 1.000000 55.504186 +-0.700000 1.100000 54.278709 +-0.700000 1.200000 53.073232 +-0.700000 1.300000 51.887755 +-0.700000 1.400000 50.722278 +-0.700000 1.500000 49.576801 +-0.700000 1.600000 48.451324 +-0.700000 1.700000 47.345847 +-0.700000 1.800000 46.260370 +-0.700000 1.900000 45.194893 +-0.700000 2.000000 44.149416 +-0.700000 2.100000 43.123939 +-0.700000 2.200000 42.118462 +-0.700000 2.300000 41.132985 +-0.700000 2.400000 40.167508 +-0.700000 2.500000 39.222031 +-0.700000 2.600000 38.296554 +-0.700000 2.700000 37.391077 +-0.700000 2.800000 36.505600 +-0.700000 2.900000 35.640123 +-0.700000 3.000000 34.794646 +-0.700000 3.100000 33.969169 +-0.700000 3.200000 33.163692 +-0.700000 3.300000 32.378215 +-0.700000 3.400000 31.612738 +-0.700000 3.500000 30.867261 +-0.700000 3.600000 30.141784 +-0.700000 3.700000 29.436307 +-0.700000 3.800000 28.750830 +-0.700000 3.900000 28.085353 +-0.700000 4.000000 27.439876 +-0.700000 4.100000 26.814399 +-0.700000 4.200000 26.208922 +-0.700000 4.300000 25.623445 +-0.700000 4.400000 25.057968 +-0.700000 4.500000 24.512491 +-0.700000 4.600000 23.987014 +-0.700000 4.700000 23.481537 +-0.700000 4.800000 22.996060 +-0.700000 4.900000 22.530583 +-0.700000 5.000000 22.085106 +-0.700000 5.100000 21.659629 +-0.700000 5.200000 21.254152 +-0.700000 5.300000 20.868675 +-0.700000 5.400000 20.503198 +-0.700000 5.500000 20.157721 +-0.700000 5.600000 19.832244 +-0.700000 5.700000 19.526767 +-0.700000 5.800000 19.241290 +-0.700000 5.900000 18.975813 +-0.700000 6.000000 18.730336 +-0.700000 6.100000 18.504859 +-0.700000 6.200000 18.299382 +-0.700000 6.300000 18.113905 +-0.700000 6.400000 17.948428 +-0.700000 6.500000 17.802951 +-0.700000 6.600000 17.677474 +-0.700000 6.700000 17.571997 +-0.700000 6.800000 17.486520 +-0.700000 6.900000 17.421043 +-0.700000 7.000000 17.375566 +-0.700000 7.100000 17.350089 +-0.700000 7.200000 17.344612 +-0.700000 7.300000 17.359135 +-0.700000 7.400000 17.393658 +-0.700000 7.500000 17.448181 +-0.700000 7.600000 17.522704 +-0.700000 7.700000 17.617227 +-0.700000 7.800000 17.731750 +-0.700000 7.900000 17.866273 +-0.700000 8.000000 18.020796 +-0.700000 8.100000 18.195319 +-0.700000 8.200000 18.389842 +-0.700000 8.300000 18.604365 +-0.700000 8.400000 18.838888 +-0.700000 8.500000 19.093411 +-0.700000 8.600000 19.367934 +-0.700000 8.700000 19.662457 +-0.700000 8.800000 19.976980 +-0.700000 8.900000 20.311503 +-0.700000 9.000000 20.666026 +-0.700000 9.100000 21.040549 +-0.700000 9.200000 21.435072 +-0.700000 9.300000 21.849595 +-0.700000 9.400000 22.284118 +-0.700000 9.500000 22.738641 +-0.700000 9.600000 23.213164 +-0.700000 9.700000 23.707687 +-0.700000 9.800000 24.222210 +-0.700000 9.900000 24.756733 +-0.700000 10.000000 25.311256 +-0.700000 10.100000 25.885779 +-0.700000 10.200000 26.480302 +-0.700000 10.300000 27.094825 +-0.700000 10.400000 27.729348 +-0.700000 10.500000 28.383871 +-0.700000 10.600000 29.058394 +-0.700000 10.700000 29.752917 +-0.700000 10.800000 30.467440 +-0.700000 10.900000 31.201963 +-0.700000 11.000000 31.956486 +-0.700000 11.100000 32.731009 +-0.700000 11.200000 33.525532 +-0.700000 11.300000 34.340055 +-0.700000 11.400000 35.174578 +-0.700000 11.500000 36.029101 +-0.700000 11.600000 36.903624 +-0.700000 11.700000 37.798147 +-0.700000 11.800000 38.712670 +-0.700000 11.900000 39.647193 +-0.700000 12.000000 40.601716 +-0.700000 12.100000 41.576239 +-0.700000 12.200000 42.570762 +-0.700000 12.300000 43.585285 +-0.700000 12.400000 44.619808 +-0.700000 12.500000 45.674331 +-0.700000 12.600000 46.748854 +-0.700000 12.700000 47.843377 +-0.700000 12.800000 48.957900 +-0.700000 12.900000 50.092423 +-0.700000 13.000000 51.246946 +-0.700000 13.100000 52.421469 +-0.700000 13.200000 53.615992 +-0.700000 13.300000 54.830515 +-0.700000 13.400000 56.065038 +-0.700000 13.500000 57.319561 +-0.700000 13.600000 58.594084 +-0.700000 13.700000 59.888607 +-0.700000 13.800000 61.203130 +-0.700000 13.900000 62.537653 +-0.700000 14.000000 63.892176 +-0.700000 14.100000 65.266699 +-0.700000 14.200000 66.661222 +-0.700000 14.300000 68.075745 +-0.700000 14.400000 69.510268 +-0.700000 14.500000 70.964791 +-0.700000 14.600000 72.439314 +-0.700000 14.700000 73.933837 +-0.700000 14.800000 75.448360 +-0.700000 14.900000 76.982883 +-0.700000 15.000000 78.537406 + +-0.600000 -5.000000 161.959434 +-0.600000 -4.900000 159.569146 +-0.600000 -4.800000 157.198859 +-0.600000 -4.700000 154.848572 +-0.600000 -4.600000 152.518285 +-0.600000 -4.500000 150.207997 +-0.600000 -4.400000 147.917710 +-0.600000 -4.300000 145.647423 +-0.600000 -4.200000 143.397136 +-0.600000 -4.100000 141.166849 +-0.600000 -4.000000 138.956561 +-0.600000 -3.900000 136.766274 +-0.600000 -3.800000 134.595987 +-0.600000 -3.700000 132.445700 +-0.600000 -3.600000 130.315413 +-0.600000 -3.500000 128.205125 +-0.600000 -3.400000 126.114838 +-0.600000 -3.300000 124.044551 +-0.600000 -3.200000 121.994264 +-0.600000 -3.100000 119.963976 +-0.600000 -3.000000 117.953689 +-0.600000 -2.900000 115.963402 +-0.600000 -2.800000 113.993115 +-0.600000 -2.700000 112.042828 +-0.600000 -2.600000 110.112540 +-0.600000 -2.500000 108.202253 +-0.600000 -2.400000 106.311966 +-0.600000 -2.300000 104.441679 +-0.600000 -2.200000 102.591392 +-0.600000 -2.100000 100.761104 +-0.600000 -2.000000 98.950817 +-0.600000 -1.900000 97.160530 +-0.600000 -1.800000 95.390243 +-0.600000 -1.700000 93.639955 +-0.600000 -1.600000 91.909668 +-0.600000 -1.500000 90.199381 +-0.600000 -1.400000 88.509094 +-0.600000 -1.300000 86.838807 +-0.600000 -1.200000 85.188519 +-0.600000 -1.100000 83.558232 +-0.600000 -1.000000 81.947945 +-0.600000 -0.900000 80.357658 +-0.600000 -0.800000 78.787370 +-0.600000 -0.700000 77.237083 +-0.600000 -0.600000 75.706796 +-0.600000 -0.500000 74.196509 +-0.600000 -0.400000 72.706222 +-0.600000 -0.300000 71.235934 +-0.600000 -0.200000 69.785647 +-0.600000 -0.100000 68.355360 +-0.600000 -0.000000 66.945073 +-0.600000 0.100000 65.554786 +-0.600000 0.200000 64.184498 +-0.600000 0.300000 62.834211 +-0.600000 0.400000 61.503924 +-0.600000 0.500000 60.193637 +-0.600000 0.600000 58.903349 +-0.600000 0.700000 57.633062 +-0.600000 0.800000 56.382775 +-0.600000 0.900000 55.152488 +-0.600000 1.000000 53.942201 +-0.600000 1.100000 52.751913 +-0.600000 1.200000 51.581626 +-0.600000 1.300000 50.431339 +-0.600000 1.400000 49.301052 +-0.600000 1.500000 48.190765 +-0.600000 1.600000 47.100477 +-0.600000 1.700000 46.030190 +-0.600000 1.800000 44.979903 +-0.600000 1.900000 43.949616 +-0.600000 2.000000 42.939328 +-0.600000 2.100000 41.949041 +-0.600000 2.200000 40.978754 +-0.600000 2.300000 40.028467 +-0.600000 2.400000 39.098180 +-0.600000 2.500000 38.187892 +-0.600000 2.600000 37.297605 +-0.600000 2.700000 36.427318 +-0.600000 2.800000 35.577031 +-0.600000 2.900000 34.746743 +-0.600000 3.000000 33.936456 +-0.600000 3.100000 33.146169 +-0.600000 3.200000 32.375882 +-0.600000 3.300000 31.625595 +-0.600000 3.400000 30.895307 +-0.600000 3.500000 30.185020 +-0.600000 3.600000 29.494733 +-0.600000 3.700000 28.824446 +-0.600000 3.800000 28.174159 +-0.600000 3.900000 27.543871 +-0.600000 4.000000 26.933584 +-0.600000 4.100000 26.343297 +-0.600000 4.200000 25.773010 +-0.600000 4.300000 25.222722 +-0.600000 4.400000 24.692435 +-0.600000 4.500000 24.182148 +-0.600000 4.600000 23.691861 +-0.600000 4.700000 23.221574 +-0.600000 4.800000 22.771286 +-0.600000 4.900000 22.340999 +-0.600000 5.000000 21.930712 +-0.600000 5.100000 21.540425 +-0.600000 5.200000 21.170137 +-0.600000 5.300000 20.819850 +-0.600000 5.400000 20.489563 +-0.600000 5.500000 20.179276 +-0.600000 5.600000 19.888989 +-0.600000 5.700000 19.618701 +-0.600000 5.800000 19.368414 +-0.600000 5.900000 19.138127 +-0.600000 6.000000 18.927840 +-0.600000 6.100000 18.737553 +-0.600000 6.200000 18.567265 +-0.600000 6.300000 18.416978 +-0.600000 6.400000 18.286691 +-0.600000 6.500000 18.176404 +-0.600000 6.600000 18.086116 +-0.600000 6.700000 18.015829 +-0.600000 6.800000 17.965542 +-0.600000 6.900000 17.935255 +-0.600000 7.000000 17.924968 +-0.600000 7.100000 17.934680 +-0.600000 7.200000 17.964393 +-0.600000 7.300000 18.014106 +-0.600000 7.400000 18.083819 +-0.600000 7.500000 18.173532 +-0.600000 7.600000 18.283244 +-0.600000 7.700000 18.412957 +-0.600000 7.800000 18.562670 +-0.600000 7.900000 18.732383 +-0.600000 8.000000 18.922095 +-0.600000 8.100000 19.131808 +-0.600000 8.200000 19.361521 +-0.600000 8.300000 19.611234 +-0.600000 8.400000 19.880947 +-0.600000 8.500000 20.170659 +-0.600000 8.600000 20.480372 +-0.600000 8.700000 20.810085 +-0.600000 8.800000 21.159798 +-0.600000 8.900000 21.529510 +-0.600000 9.000000 21.919223 +-0.600000 9.100000 22.328936 +-0.600000 9.200000 22.758649 +-0.600000 9.300000 23.208362 +-0.600000 9.400000 23.678074 +-0.600000 9.500000 24.167787 +-0.600000 9.600000 24.677500 +-0.600000 9.700000 25.207213 +-0.600000 9.800000 25.756926 +-0.600000 9.900000 26.326638 +-0.600000 10.000000 26.916351 +-0.600000 10.100000 27.526064 +-0.600000 10.200000 28.155777 +-0.600000 10.300000 28.805489 +-0.600000 10.400000 29.475202 +-0.600000 10.500000 30.164915 +-0.600000 10.600000 30.874628 +-0.600000 10.700000 31.604341 +-0.600000 10.800000 32.354053 +-0.600000 10.900000 33.123766 +-0.600000 11.000000 33.913479 +-0.600000 11.100000 34.723192 +-0.600000 11.200000 35.552905 +-0.600000 11.300000 36.402617 +-0.600000 11.400000 37.272330 +-0.600000 11.500000 38.162043 +-0.600000 11.600000 39.071756 +-0.600000 11.700000 40.001468 +-0.600000 11.800000 40.951181 +-0.600000 11.900000 41.920894 +-0.600000 12.000000 42.910607 +-0.600000 12.100000 43.920320 +-0.600000 12.200000 44.950032 +-0.600000 12.300000 45.999745 +-0.600000 12.400000 47.069458 +-0.600000 12.500000 48.159171 +-0.600000 12.600000 49.268883 +-0.600000 12.700000 50.398596 +-0.600000 12.800000 51.548309 +-0.600000 12.900000 52.718022 +-0.600000 13.000000 53.907735 +-0.600000 13.100000 55.117447 +-0.600000 13.200000 56.347160 +-0.600000 13.300000 57.596873 +-0.600000 13.400000 58.866586 +-0.600000 13.500000 60.156299 +-0.600000 13.600000 61.466011 +-0.600000 13.700000 62.795724 +-0.600000 13.800000 64.145437 +-0.600000 13.900000 65.515150 +-0.600000 14.000000 66.904862 +-0.600000 14.100000 68.314575 +-0.600000 14.200000 69.744288 +-0.600000 14.300000 71.194001 +-0.600000 14.400000 72.663714 +-0.600000 14.500000 74.153426 +-0.600000 14.600000 75.663139 +-0.600000 14.700000 77.192852 +-0.600000 14.800000 78.742565 +-0.600000 14.900000 80.312278 +-0.600000 15.000000 81.901990 + +-0.500000 -5.000000 158.329906 +-0.500000 -4.900000 155.974292 +-0.500000 -4.800000 153.638678 +-0.500000 -4.700000 151.323064 +-0.500000 -4.600000 149.027450 +-0.500000 -4.500000 146.751836 +-0.500000 -4.400000 144.496221 +-0.500000 -4.300000 142.260607 +-0.500000 -4.200000 140.044993 +-0.500000 -4.100000 137.849379 +-0.500000 -4.000000 135.673765 +-0.500000 -3.900000 133.518151 +-0.500000 -3.800000 131.382536 +-0.500000 -3.700000 129.266922 +-0.500000 -3.600000 127.171308 +-0.500000 -3.500000 125.095694 +-0.500000 -3.400000 123.040080 +-0.500000 -3.300000 121.004466 +-0.500000 -3.200000 118.988851 +-0.500000 -3.100000 116.993237 +-0.500000 -3.000000 115.017623 +-0.500000 -2.900000 113.062009 +-0.500000 -2.800000 111.126395 +-0.500000 -2.700000 109.210781 +-0.500000 -2.600000 107.315166 +-0.500000 -2.500000 105.439552 +-0.500000 -2.400000 103.583938 +-0.500000 -2.300000 101.748324 +-0.500000 -2.200000 99.932710 +-0.500000 -2.100000 98.137096 +-0.500000 -2.000000 96.361481 +-0.500000 -1.900000 94.605867 +-0.500000 -1.800000 92.870253 +-0.500000 -1.700000 91.154639 +-0.500000 -1.600000 89.459025 +-0.500000 -1.500000 87.783411 +-0.500000 -1.400000 86.127796 +-0.500000 -1.300000 84.492182 +-0.500000 -1.200000 82.876568 +-0.500000 -1.100000 81.280954 +-0.500000 -1.000000 79.705340 +-0.500000 -0.900000 78.149726 +-0.500000 -0.800000 76.614111 +-0.500000 -0.700000 75.098497 +-0.500000 -0.600000 73.602883 +-0.500000 -0.500000 72.127269 +-0.500000 -0.400000 70.671655 +-0.500000 -0.300000 69.236041 +-0.500000 -0.200000 67.820426 +-0.500000 -0.100000 66.424812 +-0.500000 -0.000000 65.049198 +-0.500000 0.100000 63.693584 +-0.500000 0.200000 62.357970 +-0.500000 0.300000 61.042356 +-0.500000 0.400000 59.746741 +-0.500000 0.500000 58.471127 +-0.500000 0.600000 57.215513 +-0.500000 0.700000 55.979899 +-0.500000 0.800000 54.764285 +-0.500000 0.900000 53.568671 +-0.500000 1.000000 52.393056 +-0.500000 1.100000 51.237442 +-0.500000 1.200000 50.101828 +-0.500000 1.300000 48.986214 +-0.500000 1.400000 47.890600 +-0.500000 1.500000 46.814986 +-0.500000 1.600000 45.759371 +-0.500000 1.700000 44.723757 +-0.500000 1.800000 43.708143 +-0.500000 1.900000 42.712529 +-0.500000 2.000000 41.736915 +-0.500000 2.100000 40.781301 +-0.500000 2.200000 39.845686 +-0.500000 2.300000 38.930072 +-0.500000 2.400000 38.034458 +-0.500000 2.500000 37.158844 +-0.500000 2.600000 36.303230 +-0.500000 2.700000 35.467615 +-0.500000 2.800000 34.652001 +-0.500000 2.900000 33.856387 +-0.500000 3.000000 33.080773 +-0.500000 3.100000 32.325159 +-0.500000 3.200000 31.589545 +-0.500000 3.300000 30.873930 +-0.500000 3.400000 30.178316 +-0.500000 3.500000 29.502702 +-0.500000 3.600000 28.847088 +-0.500000 3.700000 28.211474 +-0.500000 3.800000 27.595860 +-0.500000 3.900000 27.000245 +-0.500000 4.000000 26.424631 +-0.500000 4.100000 25.869017 +-0.500000 4.200000 25.333403 +-0.500000 4.300000 24.817789 +-0.500000 4.400000 24.322175 +-0.500000 4.500000 23.846560 +-0.500000 4.600000 23.390946 +-0.500000 4.700000 22.955332 +-0.500000 4.800000 22.539718 +-0.500000 4.900000 22.144104 +-0.500000 5.000000 21.768490 +-0.500000 5.100000 21.412875 +-0.500000 5.200000 21.077261 +-0.500000 5.300000 20.761647 +-0.500000 5.400000 20.466033 +-0.500000 5.500000 20.190419 +-0.500000 5.600000 19.934805 +-0.500000 5.700000 19.699190 +-0.500000 5.800000 19.483576 +-0.500000 5.900000 19.287962 +-0.500000 6.000000 19.112348 +-0.500000 6.100000 18.956734 +-0.500000 6.200000 18.821120 +-0.500000 6.300000 18.705505 +-0.500000 6.400000 18.609891 +-0.500000 6.500000 18.534277 +-0.500000 6.600000 18.478663 +-0.500000 6.700000 18.443049 +-0.500000 6.800000 18.427435 +-0.500000 6.900000 18.431820 +-0.500000 7.000000 18.456206 +-0.500000 7.100000 18.500592 +-0.500000 7.200000 18.564978 +-0.500000 7.300000 18.649364 +-0.500000 7.400000 18.753750 +-0.500000 7.500000 18.878135 +-0.500000 7.600000 19.022521 +-0.500000 7.700000 19.186907 +-0.500000 7.800000 19.371293 +-0.500000 7.900000 19.575679 +-0.500000 8.000000 19.800065 +-0.500000 8.100000 20.044450 +-0.500000 8.200000 20.308836 +-0.500000 8.300000 20.593222 +-0.500000 8.400000 20.897608 +-0.500000 8.500000 21.221994 +-0.500000 8.600000 21.566380 +-0.500000 8.700000 21.930765 +-0.500000 8.800000 22.315151 +-0.500000 8.900000 22.719537 +-0.500000 9.000000 23.143923 +-0.500000 9.100000 23.588309 +-0.500000 9.200000 24.052695 +-0.500000 9.300000 24.537080 +-0.500000 9.400000 25.041466 +-0.500000 9.500000 25.565852 +-0.500000 9.600000 26.110238 +-0.500000 9.700000 26.674624 +-0.500000 9.800000 27.259010 +-0.500000 9.900000 27.863395 +-0.500000 10.000000 28.487781 +-0.500000 10.100000 29.132167 +-0.500000 10.200000 29.796553 +-0.500000 10.300000 30.480939 +-0.500000 10.400000 31.185325 +-0.500000 10.500000 31.909710 +-0.500000 10.600000 32.654096 +-0.500000 10.700000 33.418482 +-0.500000 10.800000 34.202868 +-0.500000 10.900000 35.007254 +-0.500000 11.000000 35.831640 +-0.500000 11.100000 36.676025 +-0.500000 11.200000 37.540411 +-0.500000 11.300000 38.424797 +-0.500000 11.400000 39.329183 +-0.500000 11.500000 40.253569 +-0.500000 11.600000 41.197954 +-0.500000 11.700000 42.162340 +-0.500000 11.800000 43.146726 +-0.500000 11.900000 44.151112 +-0.500000 12.000000 45.175498 +-0.500000 12.100000 46.219884 +-0.500000 12.200000 47.284269 +-0.500000 12.300000 48.368655 +-0.500000 12.400000 49.473041 +-0.500000 12.500000 50.597427 +-0.500000 12.600000 51.741813 +-0.500000 12.700000 52.906199 +-0.500000 12.800000 54.090584 +-0.500000 12.900000 55.294970 +-0.500000 13.000000 56.519356 +-0.500000 13.100000 57.763742 +-0.500000 13.200000 59.028128 +-0.500000 13.300000 60.312514 +-0.500000 13.400000 61.616899 +-0.500000 13.500000 62.941285 +-0.500000 13.600000 64.285671 +-0.500000 13.700000 65.650057 +-0.500000 13.800000 67.034443 +-0.500000 13.900000 68.438829 +-0.500000 14.000000 69.863214 +-0.500000 14.100000 71.307600 +-0.500000 14.200000 72.771986 +-0.500000 14.300000 74.256372 +-0.500000 14.400000 75.760758 +-0.500000 14.500000 77.285144 +-0.500000 14.600000 78.829529 +-0.500000 14.700000 80.393915 +-0.500000 14.800000 81.978301 +-0.500000 14.900000 83.582687 +-0.500000 15.000000 85.207073 + +-0.400000 -5.000000 154.736525 +-0.400000 -4.900000 152.415067 +-0.400000 -4.800000 150.113609 +-0.400000 -4.700000 147.832152 +-0.400000 -4.600000 145.570694 +-0.400000 -4.500000 143.329236 +-0.400000 -4.400000 141.107778 +-0.400000 -4.300000 138.906320 +-0.400000 -4.200000 136.724862 +-0.400000 -4.100000 134.563404 +-0.400000 -4.000000 132.421947 +-0.400000 -3.900000 130.300489 +-0.400000 -3.800000 128.199031 +-0.400000 -3.700000 126.117573 +-0.400000 -3.600000 124.056115 +-0.400000 -3.500000 122.014657 +-0.400000 -3.400000 119.993199 +-0.400000 -3.300000 117.991741 +-0.400000 -3.200000 116.010284 +-0.400000 -3.100000 114.048826 +-0.400000 -3.000000 112.107368 +-0.400000 -2.900000 110.185910 +-0.400000 -2.800000 108.284452 +-0.400000 -2.700000 106.402994 +-0.400000 -2.600000 104.541536 +-0.400000 -2.500000 102.700079 +-0.400000 -2.400000 100.878621 +-0.400000 -2.300000 99.077163 +-0.400000 -2.200000 97.295705 +-0.400000 -2.100000 95.534247 +-0.400000 -2.000000 93.792789 +-0.400000 -1.900000 92.071331 +-0.400000 -1.800000 90.369874 +-0.400000 -1.700000 88.688416 +-0.400000 -1.600000 87.026958 +-0.400000 -1.500000 85.385500 +-0.400000 -1.400000 83.764042 +-0.400000 -1.300000 82.162584 +-0.400000 -1.200000 80.581126 +-0.400000 -1.100000 79.019669 +-0.400000 -1.000000 77.478211 +-0.400000 -0.900000 75.956753 +-0.400000 -0.800000 74.455295 +-0.400000 -0.700000 72.973837 +-0.400000 -0.600000 71.512379 +-0.400000 -0.500000 70.070921 +-0.400000 -0.400000 68.649464 +-0.400000 -0.300000 67.248006 +-0.400000 -0.200000 65.866548 +-0.400000 -0.100000 64.505090 +-0.400000 -0.000000 63.163632 +-0.400000 0.100000 61.842174 +-0.400000 0.200000 60.540716 +-0.400000 0.300000 59.259259 +-0.400000 0.400000 57.997801 +-0.400000 0.500000 56.756343 +-0.400000 0.600000 55.534885 +-0.400000 0.700000 54.333427 +-0.400000 0.800000 53.151969 +-0.400000 0.900000 51.990511 +-0.400000 1.000000 50.849054 +-0.400000 1.100000 49.727596 +-0.400000 1.200000 48.626138 +-0.400000 1.300000 47.544680 +-0.400000 1.400000 46.483222 +-0.400000 1.500000 45.441764 +-0.400000 1.600000 44.420306 +-0.400000 1.700000 43.418849 +-0.400000 1.800000 42.437391 +-0.400000 1.900000 41.475933 +-0.400000 2.000000 40.534475 +-0.400000 2.100000 39.613017 +-0.400000 2.200000 38.711559 +-0.400000 2.300000 37.830101 +-0.400000 2.400000 36.968644 +-0.400000 2.500000 36.127186 +-0.400000 2.600000 35.305728 +-0.400000 2.700000 34.504270 +-0.400000 2.800000 33.722812 +-0.400000 2.900000 32.961354 +-0.400000 3.000000 32.219896 +-0.400000 3.100000 31.498439 +-0.400000 3.200000 30.796981 +-0.400000 3.300000 30.115523 +-0.400000 3.400000 29.454065 +-0.400000 3.500000 28.812607 +-0.400000 3.600000 28.191149 +-0.400000 3.700000 27.589691 +-0.400000 3.800000 27.008234 +-0.400000 3.900000 26.446776 +-0.400000 4.000000 25.905318 +-0.400000 4.100000 25.383860 +-0.400000 4.200000 24.882402 +-0.400000 4.300000 24.400944 +-0.400000 4.400000 23.939486 +-0.400000 4.500000 23.498029 +-0.400000 4.600000 23.076571 +-0.400000 4.700000 22.675113 +-0.400000 4.800000 22.293655 +-0.400000 4.900000 21.932197 +-0.400000 5.000000 21.590739 +-0.400000 5.100000 21.269281 +-0.400000 5.200000 20.967824 +-0.400000 5.300000 20.686366 +-0.400000 5.400000 20.424908 +-0.400000 5.500000 20.183450 +-0.400000 5.600000 19.961992 +-0.400000 5.700000 19.760534 +-0.400000 5.800000 19.579076 +-0.400000 5.900000 19.417618 +-0.400000 6.000000 19.276161 +-0.400000 6.100000 19.154703 +-0.400000 6.200000 19.053245 +-0.400000 6.300000 18.971787 +-0.400000 6.400000 18.910329 +-0.400000 6.500000 18.868871 +-0.400000 6.600000 18.847413 +-0.400000 6.700000 18.845956 +-0.400000 6.800000 18.864498 +-0.400000 6.900000 18.903040 +-0.400000 7.000000 18.961582 +-0.400000 7.100000 19.040124 +-0.400000 7.200000 19.138666 +-0.400000 7.300000 19.257208 +-0.400000 7.400000 19.395751 +-0.400000 7.500000 19.554293 +-0.400000 7.600000 19.732835 +-0.400000 7.700000 19.931377 +-0.400000 7.800000 20.149919 +-0.400000 7.900000 20.388461 +-0.400000 8.000000 20.647003 +-0.400000 8.100000 20.925546 +-0.400000 8.200000 21.224088 +-0.400000 8.300000 21.542630 +-0.400000 8.400000 21.881172 +-0.400000 8.500000 22.239714 +-0.400000 8.600000 22.618256 +-0.400000 8.700000 23.016798 +-0.400000 8.800000 23.435341 +-0.400000 8.900000 23.873883 +-0.400000 9.000000 24.332425 +-0.400000 9.100000 24.810967 +-0.400000 9.200000 25.309509 +-0.400000 9.300000 25.828051 +-0.400000 9.400000 26.366593 +-0.400000 9.500000 26.925136 +-0.400000 9.600000 27.503678 +-0.400000 9.700000 28.102220 +-0.400000 9.800000 28.720762 +-0.400000 9.900000 29.359304 +-0.400000 10.000000 30.017846 +-0.400000 10.100000 30.696388 +-0.400000 10.200000 31.394931 +-0.400000 10.300000 32.113473 +-0.400000 10.400000 32.852015 +-0.400000 10.500000 33.610557 +-0.400000 10.600000 34.389099 +-0.400000 10.700000 35.187641 +-0.400000 10.800000 36.006183 +-0.400000 10.900000 36.844726 +-0.400000 11.000000 37.703268 +-0.400000 11.100000 38.581810 +-0.400000 11.200000 39.480352 +-0.400000 11.300000 40.398894 +-0.400000 11.400000 41.337436 +-0.400000 11.500000 42.295978 +-0.400000 11.600000 43.274521 +-0.400000 11.700000 44.273063 +-0.400000 11.800000 45.291605 +-0.400000 11.900000 46.330147 +-0.400000 12.000000 47.388689 +-0.400000 12.100000 48.467231 +-0.400000 12.200000 49.565773 +-0.400000 12.300000 50.684316 +-0.400000 12.400000 51.822858 +-0.400000 12.500000 52.981400 +-0.400000 12.600000 54.159942 +-0.400000 12.700000 55.358484 +-0.400000 12.800000 56.577026 +-0.400000 12.900000 57.815568 +-0.400000 13.000000 59.074111 +-0.400000 13.100000 60.352653 +-0.400000 13.200000 61.651195 +-0.400000 13.300000 62.969737 +-0.400000 13.400000 64.308279 +-0.400000 13.500000 65.666821 +-0.400000 13.600000 67.045363 +-0.400000 13.700000 68.443906 +-0.400000 13.800000 69.862448 +-0.400000 13.900000 71.300990 +-0.400000 14.000000 72.759532 +-0.400000 14.100000 74.238074 +-0.400000 14.200000 75.736616 +-0.400000 14.300000 77.255158 +-0.400000 14.400000 78.793700 +-0.400000 14.500000 80.352243 +-0.400000 14.600000 81.930785 +-0.400000 14.700000 83.529327 +-0.400000 14.800000 85.147869 +-0.400000 14.900000 86.786411 +-0.400000 15.000000 88.444953 + +-0.300000 -5.000000 151.172471 +-0.300000 -4.900000 148.884652 +-0.300000 -4.800000 146.616834 +-0.300000 -4.700000 144.369016 +-0.300000 -4.600000 142.141197 +-0.300000 -4.500000 139.933379 +-0.300000 -4.400000 137.745561 +-0.300000 -4.300000 135.577743 +-0.300000 -4.200000 133.429924 +-0.300000 -4.100000 131.302106 +-0.300000 -4.000000 129.194288 +-0.300000 -3.900000 127.106469 +-0.300000 -3.800000 125.038651 +-0.300000 -3.700000 122.990833 +-0.300000 -3.600000 120.963015 +-0.300000 -3.500000 118.955196 +-0.300000 -3.400000 116.967378 +-0.300000 -3.300000 114.999560 +-0.300000 -3.200000 113.051741 +-0.300000 -3.100000 111.123923 +-0.300000 -3.000000 109.216105 +-0.300000 -2.900000 107.328287 +-0.300000 -2.800000 105.460468 +-0.300000 -2.700000 103.612650 +-0.300000 -2.600000 101.784832 +-0.300000 -2.500000 99.977013 +-0.300000 -2.400000 98.189195 +-0.300000 -2.300000 96.421377 +-0.300000 -2.200000 94.673559 +-0.300000 -2.100000 92.945740 +-0.300000 -2.000000 91.237922 +-0.300000 -1.900000 89.550104 +-0.300000 -1.800000 87.882285 +-0.300000 -1.700000 86.234467 +-0.300000 -1.600000 84.606649 +-0.300000 -1.500000 82.998831 +-0.300000 -1.400000 81.411012 +-0.300000 -1.300000 79.843194 +-0.300000 -1.200000 78.295376 +-0.300000 -1.100000 76.767557 +-0.300000 -1.000000 75.259739 +-0.300000 -0.900000 73.771921 +-0.300000 -0.800000 72.304103 +-0.300000 -0.700000 70.856284 +-0.300000 -0.600000 69.428466 +-0.300000 -0.500000 68.020648 +-0.300000 -0.400000 66.632829 +-0.300000 -0.300000 65.265011 +-0.300000 -0.200000 63.917193 +-0.300000 -0.100000 62.589375 +-0.300000 -0.000000 61.281556 +-0.300000 0.100000 59.993738 +-0.300000 0.200000 58.725920 +-0.300000 0.300000 57.478101 +-0.300000 0.400000 56.250283 +-0.300000 0.500000 55.042465 +-0.300000 0.600000 53.854647 +-0.300000 0.700000 52.686828 +-0.300000 0.800000 51.539010 +-0.300000 0.900000 50.411192 +-0.300000 1.000000 49.303373 +-0.300000 1.100000 48.215555 +-0.300000 1.200000 47.147737 +-0.300000 1.300000 46.099919 +-0.300000 1.400000 45.072100 +-0.300000 1.500000 44.064282 +-0.300000 1.600000 43.076464 +-0.300000 1.700000 42.108645 +-0.300000 1.800000 41.160827 +-0.300000 1.900000 40.233009 +-0.300000 2.000000 39.325190 +-0.300000 2.100000 38.437372 +-0.300000 2.200000 37.569554 +-0.300000 2.300000 36.721736 +-0.300000 2.400000 35.893917 +-0.300000 2.500000 35.086099 +-0.300000 2.600000 34.298281 +-0.300000 2.700000 33.530462 +-0.300000 2.800000 32.782644 +-0.300000 2.900000 32.054826 +-0.300000 3.000000 31.347008 +-0.300000 3.100000 30.659189 +-0.300000 3.200000 29.991371 +-0.300000 3.300000 29.343553 +-0.300000 3.400000 28.715734 +-0.300000 3.500000 28.107916 +-0.300000 3.600000 27.520098 +-0.300000 3.700000 26.952280 +-0.300000 3.800000 26.404461 +-0.300000 3.900000 25.876643 +-0.300000 4.000000 25.368825 +-0.300000 4.100000 24.881006 +-0.300000 4.200000 24.413188 +-0.300000 4.300000 23.965370 +-0.300000 4.400000 23.537552 +-0.300000 4.500000 23.129733 +-0.300000 4.600000 22.741915 +-0.300000 4.700000 22.374097 +-0.300000 4.800000 22.026278 +-0.300000 4.900000 21.698460 +-0.300000 5.000000 21.390642 +-0.300000 5.100000 21.102824 +-0.300000 5.200000 20.835005 +-0.300000 5.300000 20.587187 +-0.300000 5.400000 20.359369 +-0.300000 5.500000 20.151550 +-0.300000 5.600000 19.963732 +-0.300000 5.700000 19.795914 +-0.300000 5.800000 19.648096 +-0.300000 5.900000 19.520277 +-0.300000 6.000000 19.412459 +-0.300000 6.100000 19.324641 +-0.300000 6.200000 19.256822 +-0.300000 6.300000 19.209004 +-0.300000 6.400000 19.181186 +-0.300000 6.500000 19.173368 +-0.300000 6.600000 19.185549 +-0.300000 6.700000 19.217731 +-0.300000 6.800000 19.269913 +-0.300000 6.900000 19.342094 +-0.300000 7.000000 19.434276 +-0.300000 7.100000 19.546458 +-0.300000 7.200000 19.678640 +-0.300000 7.300000 19.830821 +-0.300000 7.400000 20.003003 +-0.300000 7.500000 20.195185 +-0.300000 7.600000 20.407366 +-0.300000 7.700000 20.639548 +-0.300000 7.800000 20.891730 +-0.300000 7.900000 21.163912 +-0.300000 8.000000 21.456093 +-0.300000 8.100000 21.768275 +-0.300000 8.200000 22.100457 +-0.300000 8.300000 22.452638 +-0.300000 8.400000 22.824820 +-0.300000 8.500000 23.217002 +-0.300000 8.600000 23.629184 +-0.300000 8.700000 24.061365 +-0.300000 8.800000 24.513547 +-0.300000 8.900000 24.985729 +-0.300000 9.000000 25.477910 +-0.300000 9.100000 25.990092 +-0.300000 9.200000 26.522274 +-0.300000 9.300000 27.074456 +-0.300000 9.400000 27.646637 +-0.300000 9.500000 28.238819 +-0.300000 9.600000 28.851001 +-0.300000 9.700000 29.483182 +-0.300000 9.800000 30.135364 +-0.300000 9.900000 30.807546 +-0.300000 10.000000 31.499728 +-0.300000 10.100000 32.211909 +-0.300000 10.200000 32.944091 +-0.300000 10.300000 33.696273 +-0.300000 10.400000 34.468454 +-0.300000 10.500000 35.260636 +-0.300000 10.600000 36.072818 +-0.300000 10.700000 36.905000 +-0.300000 10.800000 37.757181 +-0.300000 10.900000 38.629363 +-0.300000 11.000000 39.521545 +-0.300000 11.100000 40.433726 +-0.300000 11.200000 41.365908 +-0.300000 11.300000 42.318090 +-0.300000 11.400000 43.290272 +-0.300000 11.500000 44.282453 +-0.300000 11.600000 45.294635 +-0.300000 11.700000 46.326817 +-0.300000 11.800000 47.378998 +-0.300000 11.900000 48.451180 +-0.300000 12.000000 49.543362 +-0.300000 12.100000 50.655544 +-0.300000 12.200000 51.787725 +-0.300000 12.300000 52.939907 +-0.300000 12.400000 54.112089 +-0.300000 12.500000 55.304270 +-0.300000 12.600000 56.516452 +-0.300000 12.700000 57.748634 +-0.300000 12.800000 59.000815 +-0.300000 12.900000 60.272997 +-0.300000 13.000000 61.565179 +-0.300000 13.100000 62.877361 +-0.300000 13.200000 64.209542 +-0.300000 13.300000 65.561724 +-0.300000 13.400000 66.933906 +-0.300000 13.500000 68.326087 +-0.300000 13.600000 69.738269 +-0.300000 13.700000 71.170451 +-0.300000 13.800000 72.622633 +-0.300000 13.900000 74.094814 +-0.300000 14.000000 75.586996 +-0.300000 14.100000 77.099178 +-0.300000 14.200000 78.631359 +-0.300000 14.300000 80.183541 +-0.300000 14.400000 81.755723 +-0.300000 14.500000 83.347905 +-0.300000 14.600000 84.960086 +-0.300000 14.700000 86.592268 +-0.300000 14.800000 88.244450 +-0.300000 14.900000 89.916631 +-0.300000 15.000000 91.608813 + +-0.200000 -5.000000 147.631847 +-0.200000 -4.900000 145.377152 +-0.200000 -4.800000 143.142456 +-0.200000 -4.700000 140.927761 +-0.200000 -4.600000 138.733065 +-0.200000 -4.500000 136.558370 +-0.200000 -4.400000 134.403674 +-0.200000 -4.300000 132.268979 +-0.200000 -4.200000 130.154283 +-0.200000 -4.100000 128.059588 +-0.200000 -4.000000 125.984893 +-0.200000 -3.900000 123.930197 +-0.200000 -3.800000 121.895502 +-0.200000 -3.700000 119.880806 +-0.200000 -3.600000 117.886111 +-0.200000 -3.500000 115.911415 +-0.200000 -3.400000 113.956720 +-0.200000 -3.300000 112.022024 +-0.200000 -3.200000 110.107329 +-0.200000 -3.100000 108.212633 +-0.200000 -3.000000 106.337938 +-0.200000 -2.900000 104.483243 +-0.200000 -2.800000 102.648547 +-0.200000 -2.700000 100.833852 +-0.200000 -2.600000 99.039156 +-0.200000 -2.500000 97.264461 +-0.200000 -2.400000 95.509765 +-0.200000 -2.300000 93.775070 +-0.200000 -2.200000 92.060374 +-0.200000 -2.100000 90.365679 +-0.200000 -2.000000 88.690983 +-0.200000 -1.900000 87.036288 +-0.200000 -1.800000 85.401593 +-0.200000 -1.700000 83.786897 +-0.200000 -1.600000 82.192202 +-0.200000 -1.500000 80.617506 +-0.200000 -1.400000 79.062811 +-0.200000 -1.300000 77.528115 +-0.200000 -1.200000 76.013420 +-0.200000 -1.100000 74.518724 +-0.200000 -1.000000 73.044029 +-0.200000 -0.900000 71.589333 +-0.200000 -0.800000 70.154638 +-0.200000 -0.700000 68.739943 +-0.200000 -0.600000 67.345247 +-0.200000 -0.500000 65.970552 +-0.200000 -0.400000 64.615856 +-0.200000 -0.300000 63.281161 +-0.200000 -0.200000 61.966465 +-0.200000 -0.100000 60.671770 +-0.200000 -0.000000 59.397074 +-0.200000 0.100000 58.142379 +-0.200000 0.200000 56.907684 +-0.200000 0.300000 55.692988 +-0.200000 0.400000 54.498293 +-0.200000 0.500000 53.323597 +-0.200000 0.600000 52.168902 +-0.200000 0.700000 51.034206 +-0.200000 0.800000 49.919511 +-0.200000 0.900000 48.824815 +-0.200000 1.000000 47.750120 +-0.200000 1.100000 46.695424 +-0.200000 1.200000 45.660729 +-0.200000 1.300000 44.646034 +-0.200000 1.400000 43.651338 +-0.200000 1.500000 42.676643 +-0.200000 1.600000 41.721947 +-0.200000 1.700000 40.787252 +-0.200000 1.800000 39.872556 +-0.200000 1.900000 38.977861 +-0.200000 2.000000 38.103165 +-0.200000 2.100000 37.248470 +-0.200000 2.200000 36.413774 +-0.200000 2.300000 35.599079 +-0.200000 2.400000 34.804384 +-0.200000 2.500000 34.029688 +-0.200000 2.600000 33.274993 +-0.200000 2.700000 32.540297 +-0.200000 2.800000 31.825602 +-0.200000 2.900000 31.130906 +-0.200000 3.000000 30.456211 +-0.200000 3.100000 29.801515 +-0.200000 3.200000 29.166820 +-0.200000 3.300000 28.552124 +-0.200000 3.400000 27.957429 +-0.200000 3.500000 27.382734 +-0.200000 3.600000 26.828038 +-0.200000 3.700000 26.293343 +-0.200000 3.800000 25.778647 +-0.200000 3.900000 25.283952 +-0.200000 4.000000 24.809256 +-0.200000 4.100000 24.354561 +-0.200000 4.200000 23.919865 +-0.200000 4.300000 23.505170 +-0.200000 4.400000 23.110474 +-0.200000 4.500000 22.735779 +-0.200000 4.600000 22.381084 +-0.200000 4.700000 22.046388 +-0.200000 4.800000 21.731693 +-0.200000 4.900000 21.436997 +-0.200000 5.000000 21.162302 +-0.200000 5.100000 20.907606 +-0.200000 5.200000 20.672911 +-0.200000 5.300000 20.458215 +-0.200000 5.400000 20.263520 +-0.200000 5.500000 20.088824 +-0.200000 5.600000 19.934129 +-0.200000 5.700000 19.799434 +-0.200000 5.800000 19.684738 +-0.200000 5.900000 19.590043 +-0.200000 6.000000 19.515347 +-0.200000 6.100000 19.460652 +-0.200000 6.200000 19.425956 +-0.200000 6.300000 19.411261 +-0.200000 6.400000 19.416565 +-0.200000 6.500000 19.441870 +-0.200000 6.600000 19.487174 +-0.200000 6.700000 19.552479 +-0.200000 6.800000 19.637784 +-0.200000 6.900000 19.743088 +-0.200000 7.000000 19.868393 +-0.200000 7.100000 20.013697 +-0.200000 7.200000 20.179002 +-0.200000 7.300000 20.364306 +-0.200000 7.400000 20.569611 +-0.200000 7.500000 20.794915 +-0.200000 7.600000 21.040220 +-0.200000 7.700000 21.305525 +-0.200000 7.800000 21.590829 +-0.200000 7.900000 21.896134 +-0.200000 8.000000 22.221438 +-0.200000 8.100000 22.566743 +-0.200000 8.200000 22.932047 +-0.200000 8.300000 23.317352 +-0.200000 8.400000 23.722656 +-0.200000 8.500000 24.147961 +-0.200000 8.600000 24.593265 +-0.200000 8.700000 25.058570 +-0.200000 8.800000 25.543875 +-0.200000 8.900000 26.049179 +-0.200000 9.000000 26.574484 +-0.200000 9.100000 27.119788 +-0.200000 9.200000 27.685093 +-0.200000 9.300000 28.270397 +-0.200000 9.400000 28.875702 +-0.200000 9.500000 29.501006 +-0.200000 9.600000 30.146311 +-0.200000 9.700000 30.811615 +-0.200000 9.800000 31.496920 +-0.200000 9.900000 32.202225 +-0.200000 10.000000 32.927529 +-0.200000 10.100000 33.672834 +-0.200000 10.200000 34.438138 +-0.200000 10.300000 35.223443 +-0.200000 10.400000 36.028747 +-0.200000 10.500000 36.854052 +-0.200000 10.600000 37.699356 +-0.200000 10.700000 38.564661 +-0.200000 10.800000 39.449965 +-0.200000 10.900000 40.355270 +-0.200000 11.000000 41.280575 +-0.200000 11.100000 42.225879 +-0.200000 11.200000 43.191184 +-0.200000 11.300000 44.176488 +-0.200000 11.400000 45.181793 +-0.200000 11.500000 46.207097 +-0.200000 11.600000 47.252402 +-0.200000 11.700000 48.317706 +-0.200000 11.800000 49.403011 +-0.200000 11.900000 50.508315 +-0.200000 12.000000 51.633620 +-0.200000 12.100000 52.778925 +-0.200000 12.200000 53.944229 +-0.200000 12.300000 55.129534 +-0.200000 12.400000 56.334838 +-0.200000 12.500000 57.560143 +-0.200000 12.600000 58.805447 +-0.200000 12.700000 60.070752 +-0.200000 12.800000 61.356056 +-0.200000 12.900000 62.661361 +-0.200000 13.000000 63.986665 +-0.200000 13.100000 65.331970 +-0.200000 13.200000 66.697275 +-0.200000 13.300000 68.082579 +-0.200000 13.400000 69.487884 +-0.200000 13.500000 70.913188 +-0.200000 13.600000 72.358493 +-0.200000 13.700000 73.823797 +-0.200000 13.800000 75.309102 +-0.200000 13.900000 76.814406 +-0.200000 14.000000 78.339711 +-0.200000 14.100000 79.885016 +-0.200000 14.200000 81.450320 +-0.200000 14.300000 83.035625 +-0.200000 14.400000 84.640929 +-0.200000 14.500000 86.266234 +-0.200000 14.600000 87.911538 +-0.200000 14.700000 89.576843 +-0.200000 14.800000 91.262147 +-0.200000 14.900000 92.967452 +-0.200000 15.000000 94.692756 + +-0.100000 -5.000000 144.109715 +-0.100000 -4.900000 141.887625 +-0.100000 -4.800000 139.685536 +-0.100000 -4.700000 137.503447 +-0.100000 -4.600000 135.341357 +-0.100000 -4.500000 133.199268 +-0.100000 -4.400000 131.077178 +-0.100000 -4.300000 128.975089 +-0.100000 -4.200000 126.893000 +-0.100000 -4.100000 124.830910 +-0.100000 -4.000000 122.788821 +-0.100000 -3.900000 120.766732 +-0.100000 -3.800000 118.764642 +-0.100000 -3.700000 116.782553 +-0.100000 -3.600000 114.820464 +-0.100000 -3.500000 112.878374 +-0.100000 -3.400000 110.956285 +-0.100000 -3.300000 109.054196 +-0.100000 -3.200000 107.172106 +-0.100000 -3.100000 105.310017 +-0.100000 -3.000000 103.467927 +-0.100000 -2.900000 101.645838 +-0.100000 -2.800000 99.843749 +-0.100000 -2.700000 98.061659 +-0.100000 -2.600000 96.299570 +-0.100000 -2.500000 94.557481 +-0.100000 -2.400000 92.835391 +-0.100000 -2.300000 91.133302 +-0.100000 -2.200000 89.451213 +-0.100000 -2.100000 87.789123 +-0.100000 -2.000000 86.147034 +-0.100000 -1.900000 84.524944 +-0.100000 -1.800000 82.922855 +-0.100000 -1.700000 81.340766 +-0.100000 -1.600000 79.778676 +-0.100000 -1.500000 78.236587 +-0.100000 -1.400000 76.714498 +-0.100000 -1.300000 75.212408 +-0.100000 -1.200000 73.730319 +-0.100000 -1.100000 72.268230 +-0.100000 -1.000000 70.826140 +-0.100000 -0.900000 69.404051 +-0.100000 -0.800000 68.001962 +-0.100000 -0.700000 66.619872 +-0.100000 -0.600000 65.257783 +-0.100000 -0.500000 63.915693 +-0.100000 -0.400000 62.593604 +-0.100000 -0.300000 61.291515 +-0.100000 -0.200000 60.009425 +-0.100000 -0.100000 58.747336 +-0.100000 -0.000000 57.505247 +-0.100000 0.100000 56.283157 +-0.100000 0.200000 55.081068 +-0.100000 0.300000 53.898979 +-0.100000 0.400000 52.736889 +-0.100000 0.500000 51.594800 +-0.100000 0.600000 50.472711 +-0.100000 0.700000 49.370621 +-0.100000 0.800000 48.288532 +-0.100000 0.900000 47.226442 +-0.100000 1.000000 46.184353 +-0.100000 1.100000 45.162264 +-0.100000 1.200000 44.160174 +-0.100000 1.300000 43.178085 +-0.100000 1.400000 42.215996 +-0.100000 1.500000 41.273906 +-0.100000 1.600000 40.351817 +-0.100000 1.700000 39.449728 +-0.100000 1.800000 38.567638 +-0.100000 1.900000 37.705549 +-0.100000 2.000000 36.863460 +-0.100000 2.100000 36.041370 +-0.100000 2.200000 35.239281 +-0.100000 2.300000 34.457191 +-0.100000 2.400000 33.695102 +-0.100000 2.500000 32.953013 +-0.100000 2.600000 32.230923 +-0.100000 2.700000 31.528834 +-0.100000 2.800000 30.846745 +-0.100000 2.900000 30.184655 +-0.100000 3.000000 29.542566 +-0.100000 3.100000 28.920477 +-0.100000 3.200000 28.318387 +-0.100000 3.300000 27.736298 +-0.100000 3.400000 27.174209 +-0.100000 3.500000 26.632119 +-0.100000 3.600000 26.110030 +-0.100000 3.700000 25.607940 +-0.100000 3.800000 25.125851 +-0.100000 3.900000 24.663762 +-0.100000 4.000000 24.221672 +-0.100000 4.100000 23.799583 +-0.100000 4.200000 23.397494 +-0.100000 4.300000 23.015404 +-0.100000 4.400000 22.653315 +-0.100000 4.500000 22.311226 +-0.100000 4.600000 21.989136 +-0.100000 4.700000 21.687047 +-0.100000 4.800000 21.404958 +-0.100000 4.900000 21.142868 +-0.100000 5.000000 20.900779 +-0.100000 5.100000 20.678689 +-0.100000 5.200000 20.476600 +-0.100000 5.300000 20.294511 +-0.100000 5.400000 20.132421 +-0.100000 5.500000 19.990332 +-0.100000 5.600000 19.868243 +-0.100000 5.700000 19.766153 +-0.100000 5.800000 19.684064 +-0.100000 5.900000 19.621975 +-0.100000 6.000000 19.579885 +-0.100000 6.100000 19.557796 +-0.100000 6.200000 19.555707 +-0.100000 6.300000 19.573617 +-0.100000 6.400000 19.611528 +-0.100000 6.500000 19.669438 +-0.100000 6.600000 19.747349 +-0.100000 6.700000 19.845260 +-0.100000 6.800000 19.963170 +-0.100000 6.900000 20.101081 +-0.100000 7.000000 20.258992 +-0.100000 7.100000 20.436902 +-0.100000 7.200000 20.634813 +-0.100000 7.300000 20.852724 +-0.100000 7.400000 21.090634 +-0.100000 7.500000 21.348545 +-0.100000 7.600000 21.626456 +-0.100000 7.700000 21.924366 +-0.100000 7.800000 22.242277 +-0.100000 7.900000 22.580187 +-0.100000 8.000000 22.938098 +-0.100000 8.100000 23.316009 +-0.100000 8.200000 23.713919 +-0.100000 8.300000 24.131830 +-0.100000 8.400000 24.569741 +-0.100000 8.500000 25.027651 +-0.100000 8.600000 25.505562 +-0.100000 8.700000 26.003473 +-0.100000 8.800000 26.521383 +-0.100000 8.900000 27.059294 +-0.100000 9.000000 27.617205 +-0.100000 9.100000 28.195115 +-0.100000 9.200000 28.793026 +-0.100000 9.300000 29.410936 +-0.100000 9.400000 30.048847 +-0.100000 9.500000 30.706758 +-0.100000 9.600000 31.384668 +-0.100000 9.700000 32.082579 +-0.100000 9.800000 32.800490 +-0.100000 9.900000 33.538400 +-0.100000 10.000000 34.296311 +-0.100000 10.100000 35.074222 +-0.100000 10.200000 35.872132 +-0.100000 10.300000 36.690043 +-0.100000 10.400000 37.527954 +-0.100000 10.500000 38.385864 +-0.100000 10.600000 39.263775 +-0.100000 10.700000 40.161685 +-0.100000 10.800000 41.079596 +-0.100000 10.900000 42.017507 +-0.100000 11.000000 42.975417 +-0.100000 11.100000 43.953328 +-0.100000 11.200000 44.951239 +-0.100000 11.300000 45.969149 +-0.100000 11.400000 47.007060 +-0.100000 11.500000 48.064971 +-0.100000 11.600000 49.142881 +-0.100000 11.700000 50.240792 +-0.100000 11.800000 51.358703 +-0.100000 11.900000 52.496613 +-0.100000 12.000000 53.654524 +-0.100000 12.100000 54.832434 +-0.100000 12.200000 56.030345 +-0.100000 12.300000 57.248256 +-0.100000 12.400000 58.486166 +-0.100000 12.500000 59.744077 +-0.100000 12.600000 61.021988 +-0.100000 12.700000 62.319898 +-0.100000 12.800000 63.637809 +-0.100000 12.900000 64.975720 +-0.100000 13.000000 66.333630 +-0.100000 13.100000 67.711541 +-0.100000 13.200000 69.109451 +-0.100000 13.300000 70.527362 +-0.100000 13.400000 71.965273 +-0.100000 13.500000 73.423183 +-0.100000 13.600000 74.901094 +-0.100000 13.700000 76.399005 +-0.100000 13.800000 77.916915 +-0.100000 13.900000 79.454826 +-0.100000 14.000000 81.012737 +-0.100000 14.100000 82.590647 +-0.100000 14.200000 84.188558 +-0.100000 14.300000 85.806469 +-0.100000 14.400000 87.444379 +-0.100000 14.500000 89.102290 +-0.100000 14.600000 90.780200 +-0.100000 14.700000 92.478111 +-0.100000 14.800000 94.196022 +-0.100000 14.900000 95.933932 +-0.100000 15.000000 97.691843 + +-0.000000 -5.000000 140.602113 +-0.000000 -4.900000 138.412113 +-0.000000 -4.800000 136.242113 +-0.000000 -4.700000 134.092113 +-0.000000 -4.600000 131.962113 +-0.000000 -4.500000 129.852113 +-0.000000 -4.400000 127.762113 +-0.000000 -4.300000 125.692113 +-0.000000 -4.200000 123.642113 +-0.000000 -4.100000 121.612113 +-0.000000 -4.000000 119.602113 +-0.000000 -3.900000 117.612113 +-0.000000 -3.800000 115.642113 +-0.000000 -3.700000 113.692113 +-0.000000 -3.600000 111.762113 +-0.000000 -3.500000 109.852113 +-0.000000 -3.400000 107.962113 +-0.000000 -3.300000 106.092113 +-0.000000 -3.200000 104.242113 +-0.000000 -3.100000 102.412113 +-0.000000 -3.000000 100.602113 +-0.000000 -2.900000 98.812113 +-0.000000 -2.800000 97.042113 +-0.000000 -2.700000 95.292113 +-0.000000 -2.600000 93.562113 +-0.000000 -2.500000 91.852113 +-0.000000 -2.400000 90.162113 +-0.000000 -2.300000 88.492113 +-0.000000 -2.200000 86.842113 +-0.000000 -2.100000 85.212113 +-0.000000 -2.000000 83.602113 +-0.000000 -1.900000 82.012113 +-0.000000 -1.800000 80.442113 +-0.000000 -1.700000 78.892113 +-0.000000 -1.600000 77.362113 +-0.000000 -1.500000 75.852113 +-0.000000 -1.400000 74.362113 +-0.000000 -1.300000 72.892113 +-0.000000 -1.200000 71.442113 +-0.000000 -1.100000 70.012113 +-0.000000 -1.000000 68.602113 +-0.000000 -0.900000 67.212113 +-0.000000 -0.800000 65.842113 +-0.000000 -0.700000 64.492113 +-0.000000 -0.600000 63.162113 +-0.000000 -0.500000 61.852113 +-0.000000 -0.400000 60.562113 +-0.000000 -0.300000 59.292113 +-0.000000 -0.200000 58.042113 +-0.000000 -0.100000 56.812113 +-0.000000 -0.000000 55.602113 +-0.000000 0.100000 54.412113 +-0.000000 0.200000 53.242113 +-0.000000 0.300000 52.092113 +-0.000000 0.400000 50.962113 +-0.000000 0.500000 49.852113 +-0.000000 0.600000 48.762113 +-0.000000 0.700000 47.692113 +-0.000000 0.800000 46.642113 +-0.000000 0.900000 45.612113 +-0.000000 1.000000 44.602113 +-0.000000 1.100000 43.612113 +-0.000000 1.200000 42.642113 +-0.000000 1.300000 41.692113 +-0.000000 1.400000 40.762113 +-0.000000 1.500000 39.852113 +-0.000000 1.600000 38.962113 +-0.000000 1.700000 38.092113 +-0.000000 1.800000 37.242113 +-0.000000 1.900000 36.412113 +-0.000000 2.000000 35.602113 +-0.000000 2.100000 34.812113 +-0.000000 2.200000 34.042113 +-0.000000 2.300000 33.292113 +-0.000000 2.400000 32.562113 +-0.000000 2.500000 31.852113 +-0.000000 2.600000 31.162113 +-0.000000 2.700000 30.492113 +-0.000000 2.800000 29.842113 +-0.000000 2.900000 29.212113 +-0.000000 3.000000 28.602113 +-0.000000 3.100000 28.012113 +-0.000000 3.200000 27.442113 +-0.000000 3.300000 26.892113 +-0.000000 3.400000 26.362113 +-0.000000 3.500000 25.852113 +-0.000000 3.600000 25.362113 +-0.000000 3.700000 24.892113 +-0.000000 3.800000 24.442113 +-0.000000 3.900000 24.012113 +-0.000000 4.000000 23.602113 +-0.000000 4.100000 23.212113 +-0.000000 4.200000 22.842113 +-0.000000 4.300000 22.492113 +-0.000000 4.400000 22.162113 +-0.000000 4.500000 21.852113 +-0.000000 4.600000 21.562113 +-0.000000 4.700000 21.292113 +-0.000000 4.800000 21.042113 +-0.000000 4.900000 20.812113 +-0.000000 5.000000 20.602113 +-0.000000 5.100000 20.412113 +-0.000000 5.200000 20.242113 +-0.000000 5.300000 20.092113 +-0.000000 5.400000 19.962113 +-0.000000 5.500000 19.852113 +-0.000000 5.600000 19.762113 +-0.000000 5.700000 19.692113 +-0.000000 5.800000 19.642113 +-0.000000 5.900000 19.612113 +-0.000000 6.000000 19.602113 +-0.000000 6.100000 19.612113 +-0.000000 6.200000 19.642113 +-0.000000 6.300000 19.692113 +-0.000000 6.400000 19.762113 +-0.000000 6.500000 19.852113 +-0.000000 6.600000 19.962113 +-0.000000 6.700000 20.092113 +-0.000000 6.800000 20.242113 +-0.000000 6.900000 20.412113 +-0.000000 7.000000 20.602113 +-0.000000 7.100000 20.812113 +-0.000000 7.200000 21.042113 +-0.000000 7.300000 21.292113 +-0.000000 7.400000 21.562113 +-0.000000 7.500000 21.852113 +-0.000000 7.600000 22.162113 +-0.000000 7.700000 22.492113 +-0.000000 7.800000 22.842113 +-0.000000 7.900000 23.212113 +-0.000000 8.000000 23.602113 +-0.000000 8.100000 24.012113 +-0.000000 8.200000 24.442113 +-0.000000 8.300000 24.892113 +-0.000000 8.400000 25.362113 +-0.000000 8.500000 25.852113 +-0.000000 8.600000 26.362113 +-0.000000 8.700000 26.892113 +-0.000000 8.800000 27.442113 +-0.000000 8.900000 28.012113 +-0.000000 9.000000 28.602113 +-0.000000 9.100000 29.212113 +-0.000000 9.200000 29.842113 +-0.000000 9.300000 30.492113 +-0.000000 9.400000 31.162113 +-0.000000 9.500000 31.852113 +-0.000000 9.600000 32.562113 +-0.000000 9.700000 33.292113 +-0.000000 9.800000 34.042113 +-0.000000 9.900000 34.812113 +-0.000000 10.000000 35.602113 +-0.000000 10.100000 36.412113 +-0.000000 10.200000 37.242113 +-0.000000 10.300000 38.092113 +-0.000000 10.400000 38.962113 +-0.000000 10.500000 39.852113 +-0.000000 10.600000 40.762113 +-0.000000 10.700000 41.692113 +-0.000000 10.800000 42.642113 +-0.000000 10.900000 43.612113 +-0.000000 11.000000 44.602113 +-0.000000 11.100000 45.612113 +-0.000000 11.200000 46.642113 +-0.000000 11.300000 47.692113 +-0.000000 11.400000 48.762113 +-0.000000 11.500000 49.852113 +-0.000000 11.600000 50.962113 +-0.000000 11.700000 52.092113 +-0.000000 11.800000 53.242113 +-0.000000 11.900000 54.412113 +-0.000000 12.000000 55.602113 +-0.000000 12.100000 56.812113 +-0.000000 12.200000 58.042113 +-0.000000 12.300000 59.292113 +-0.000000 12.400000 60.562113 +-0.000000 12.500000 61.852113 +-0.000000 12.600000 63.162113 +-0.000000 12.700000 64.492113 +-0.000000 12.800000 65.842113 +-0.000000 12.900000 67.212113 +-0.000000 13.000000 68.602113 +-0.000000 13.100000 70.012113 +-0.000000 13.200000 71.442113 +-0.000000 13.300000 72.892113 +-0.000000 13.400000 74.362113 +-0.000000 13.500000 75.852113 +-0.000000 13.600000 77.362113 +-0.000000 13.700000 78.892113 +-0.000000 13.800000 80.442113 +-0.000000 13.900000 82.012113 +-0.000000 14.000000 83.602113 +-0.000000 14.100000 85.212113 +-0.000000 14.200000 86.842113 +-0.000000 14.300000 88.492113 +-0.000000 14.400000 90.162113 +-0.000000 14.500000 91.852113 +-0.000000 14.600000 93.562113 +-0.000000 14.700000 95.292113 +-0.000000 14.800000 97.042113 +-0.000000 14.900000 98.812113 +-0.000000 15.000000 100.602113 + +0.100000 -5.000000 137.106075 +0.100000 -4.900000 134.947647 +0.100000 -4.800000 132.809220 +0.100000 -4.700000 130.690793 +0.100000 -4.600000 128.592365 +0.100000 -4.500000 126.513938 +0.100000 -4.400000 124.455510 +0.100000 -4.300000 122.417083 +0.100000 -4.200000 120.398656 +0.100000 -4.100000 118.400228 +0.100000 -4.000000 116.421801 +0.100000 -3.900000 114.463373 +0.100000 -3.800000 112.524946 +0.100000 -3.700000 110.606519 +0.100000 -3.600000 108.708091 +0.100000 -3.500000 106.829664 +0.100000 -3.400000 104.971237 +0.100000 -3.300000 103.132809 +0.100000 -3.200000 101.314382 +0.100000 -3.100000 99.515954 +0.100000 -3.000000 97.737527 +0.100000 -2.900000 95.979100 +0.100000 -2.800000 94.240672 +0.100000 -2.700000 92.522245 +0.100000 -2.600000 90.823818 +0.100000 -2.500000 89.145390 +0.100000 -2.400000 87.486963 +0.100000 -2.300000 85.848535 +0.100000 -2.200000 84.230108 +0.100000 -2.100000 82.631681 +0.100000 -2.000000 81.053253 +0.100000 -1.900000 79.494826 +0.100000 -1.800000 77.956399 +0.100000 -1.700000 76.437971 +0.100000 -1.600000 74.939544 +0.100000 -1.500000 73.461116 +0.100000 -1.400000 72.002689 +0.100000 -1.300000 70.564262 +0.100000 -1.200000 69.145834 +0.100000 -1.100000 67.747407 +0.100000 -1.000000 66.368979 +0.100000 -0.900000 65.010552 +0.100000 -0.800000 63.672125 +0.100000 -0.700000 62.353697 +0.100000 -0.600000 61.055270 +0.100000 -0.500000 59.776843 +0.100000 -0.400000 58.518415 +0.100000 -0.300000 57.279988 +0.100000 -0.200000 56.061560 +0.100000 -0.100000 54.863133 +0.100000 -0.000000 53.684706 +0.100000 0.100000 52.526278 +0.100000 0.200000 51.387851 +0.100000 0.300000 50.269424 +0.100000 0.400000 49.170996 +0.100000 0.500000 48.092569 +0.100000 0.600000 47.034141 +0.100000 0.700000 45.995714 +0.100000 0.800000 44.977287 +0.100000 0.900000 43.978859 +0.100000 1.000000 43.000432 +0.100000 1.100000 42.042004 +0.100000 1.200000 41.103577 +0.100000 1.300000 40.185150 +0.100000 1.400000 39.286722 +0.100000 1.500000 38.408295 +0.100000 1.600000 37.549868 +0.100000 1.700000 36.711440 +0.100000 1.800000 35.893013 +0.100000 1.900000 35.094585 +0.100000 2.000000 34.316158 +0.100000 2.100000 33.557731 +0.100000 2.200000 32.819303 +0.100000 2.300000 32.100876 +0.100000 2.400000 31.402449 +0.100000 2.500000 30.724021 +0.100000 2.600000 30.065594 +0.100000 2.700000 29.427166 +0.100000 2.800000 28.808739 +0.100000 2.900000 28.210312 +0.100000 3.000000 27.631884 +0.100000 3.100000 27.073457 +0.100000 3.200000 26.535029 +0.100000 3.300000 26.016602 +0.100000 3.400000 25.518175 +0.100000 3.500000 25.039747 +0.100000 3.600000 24.581320 +0.100000 3.700000 24.142893 +0.100000 3.800000 23.724465 +0.100000 3.900000 23.326038 +0.100000 4.000000 22.947610 +0.100000 4.100000 22.589183 +0.100000 4.200000 22.250756 +0.100000 4.300000 21.932328 +0.100000 4.400000 21.633901 +0.100000 4.500000 21.355474 +0.100000 4.600000 21.097046 +0.100000 4.700000 20.858619 +0.100000 4.800000 20.640191 +0.100000 4.900000 20.441764 +0.100000 5.000000 20.263337 +0.100000 5.100000 20.104909 +0.100000 5.200000 19.966482 +0.100000 5.300000 19.848054 +0.100000 5.400000 19.749627 +0.100000 5.500000 19.671200 +0.100000 5.600000 19.612772 +0.100000 5.700000 19.574345 +0.100000 5.800000 19.555918 +0.100000 5.900000 19.557490 +0.100000 6.000000 19.579063 +0.100000 6.100000 19.620635 +0.100000 6.200000 19.682208 +0.100000 6.300000 19.763781 +0.100000 6.400000 19.865353 +0.100000 6.500000 19.986926 +0.100000 6.600000 20.128499 +0.100000 6.700000 20.290071 +0.100000 6.800000 20.471644 +0.100000 6.900000 20.673216 +0.100000 7.000000 20.894789 +0.100000 7.100000 21.136362 +0.100000 7.200000 21.397934 +0.100000 7.300000 21.679507 +0.100000 7.400000 21.981080 +0.100000 7.500000 22.302652 +0.100000 7.600000 22.644225 +0.100000 7.700000 23.005797 +0.100000 7.800000 23.387370 +0.100000 7.900000 23.788943 +0.100000 8.000000 24.210515 +0.100000 8.100000 24.652088 +0.100000 8.200000 25.113660 +0.100000 8.300000 25.595233 +0.100000 8.400000 26.096806 +0.100000 8.500000 26.618378 +0.100000 8.600000 27.159951 +0.100000 8.700000 27.721524 +0.100000 8.800000 28.303096 +0.100000 8.900000 28.904669 +0.100000 9.000000 29.526241 +0.100000 9.100000 30.167814 +0.100000 9.200000 30.829387 +0.100000 9.300000 31.510959 +0.100000 9.400000 32.212532 +0.100000 9.500000 32.934105 +0.100000 9.600000 33.675677 +0.100000 9.700000 34.437250 +0.100000 9.800000 35.218822 +0.100000 9.900000 36.020395 +0.100000 10.000000 36.841968 +0.100000 10.100000 37.683540 +0.100000 10.200000 38.545113 +0.100000 10.300000 39.426685 +0.100000 10.400000 40.328258 +0.100000 10.500000 41.249831 +0.100000 10.600000 42.191403 +0.100000 10.700000 43.152976 +0.100000 10.800000 44.134549 +0.100000 10.900000 45.136121 +0.100000 11.000000 46.157694 +0.100000 11.100000 47.199266 +0.100000 11.200000 48.260839 +0.100000 11.300000 49.342412 +0.100000 11.400000 50.443984 +0.100000 11.500000 51.565557 +0.100000 11.600000 52.707130 +0.100000 11.700000 53.868702 +0.100000 11.800000 55.050275 +0.100000 11.900000 56.251847 +0.100000 12.000000 57.473420 +0.100000 12.100000 58.714993 +0.100000 12.200000 59.976565 +0.100000 12.300000 61.258138 +0.100000 12.400000 62.559710 +0.100000 12.500000 63.881283 +0.100000 12.600000 65.222856 +0.100000 12.700000 66.584428 +0.100000 12.800000 67.966001 +0.100000 12.900000 69.367574 +0.100000 13.000000 70.789146 +0.100000 13.100000 72.230719 +0.100000 13.200000 73.692291 +0.100000 13.300000 75.173864 +0.100000 13.400000 76.675437 +0.100000 13.500000 78.197009 +0.100000 13.600000 79.738582 +0.100000 13.700000 81.300155 +0.100000 13.800000 82.881727 +0.100000 13.900000 84.483300 +0.100000 14.000000 86.104872 +0.100000 14.100000 87.746445 +0.100000 14.200000 89.408018 +0.100000 14.300000 91.089590 +0.100000 14.400000 92.791163 +0.100000 14.500000 94.512735 +0.100000 14.600000 96.254308 +0.100000 14.700000 98.015881 +0.100000 14.800000 99.797453 +0.100000 14.900000 101.599026 +0.100000 15.000000 103.420599 + +0.200000 -5.000000 133.619633 +0.200000 -4.900000 131.492261 +0.200000 -4.800000 129.384890 +0.200000 -4.700000 127.297518 +0.200000 -4.600000 125.230147 +0.200000 -4.500000 123.182775 +0.200000 -4.400000 121.155404 +0.200000 -4.300000 119.148032 +0.200000 -4.200000 117.160661 +0.200000 -4.100000 115.193289 +0.200000 -4.000000 113.245918 +0.200000 -3.900000 111.318546 +0.200000 -3.800000 109.411175 +0.200000 -3.700000 107.523803 +0.200000 -3.600000 105.656432 +0.200000 -3.500000 103.809060 +0.200000 -3.400000 101.981689 +0.200000 -3.300000 100.174317 +0.200000 -3.200000 98.386946 +0.200000 -3.100000 96.619574 +0.200000 -3.000000 94.872203 +0.200000 -2.900000 93.144831 +0.200000 -2.800000 91.437460 +0.200000 -2.700000 89.750088 +0.200000 -2.600000 88.082717 +0.200000 -2.500000 86.435345 +0.200000 -2.400000 84.807974 +0.200000 -2.300000 83.200602 +0.200000 -2.200000 81.613231 +0.200000 -2.100000 80.045859 +0.200000 -2.000000 78.498488 +0.200000 -1.900000 76.971116 +0.200000 -1.800000 75.463745 +0.200000 -1.700000 73.976373 +0.200000 -1.600000 72.509002 +0.200000 -1.500000 71.061630 +0.200000 -1.400000 69.634259 +0.200000 -1.300000 68.226887 +0.200000 -1.200000 66.839516 +0.200000 -1.100000 65.472144 +0.200000 -1.000000 64.124773 +0.200000 -0.900000 62.797401 +0.200000 -0.800000 61.490030 +0.200000 -0.700000 60.202658 +0.200000 -0.600000 58.935287 +0.200000 -0.500000 57.687915 +0.200000 -0.400000 56.460544 +0.200000 -0.300000 55.253172 +0.200000 -0.200000 54.065801 +0.200000 -0.100000 52.898429 +0.200000 -0.000000 51.751058 +0.200000 0.100000 50.623686 +0.200000 0.200000 49.516315 +0.200000 0.300000 48.428943 +0.200000 0.400000 47.361572 +0.200000 0.500000 46.314200 +0.200000 0.600000 45.286829 +0.200000 0.700000 44.279457 +0.200000 0.800000 43.292086 +0.200000 0.900000 42.324714 +0.200000 1.000000 41.377343 +0.200000 1.100000 40.449971 +0.200000 1.200000 39.542600 +0.200000 1.300000 38.655228 +0.200000 1.400000 37.787857 +0.200000 1.500000 36.940485 +0.200000 1.600000 36.113114 +0.200000 1.700000 35.305742 +0.200000 1.800000 34.518371 +0.200000 1.900000 33.750999 +0.200000 2.000000 33.003628 +0.200000 2.100000 32.276256 +0.200000 2.200000 31.568885 +0.200000 2.300000 30.881513 +0.200000 2.400000 30.214142 +0.200000 2.500000 29.566770 +0.200000 2.600000 28.939399 +0.200000 2.700000 28.332027 +0.200000 2.800000 27.744656 +0.200000 2.900000 27.177284 +0.200000 3.000000 26.629913 +0.200000 3.100000 26.102541 +0.200000 3.200000 25.595170 +0.200000 3.300000 25.107798 +0.200000 3.400000 24.640427 +0.200000 3.500000 24.193055 +0.200000 3.600000 23.765684 +0.200000 3.700000 23.358312 +0.200000 3.800000 22.970941 +0.200000 3.900000 22.603569 +0.200000 4.000000 22.256198 +0.200000 4.100000 21.928826 +0.200000 4.200000 21.621455 +0.200000 4.300000 21.334083 +0.200000 4.400000 21.066712 +0.200000 4.500000 20.819340 +0.200000 4.600000 20.591969 +0.200000 4.700000 20.384597 +0.200000 4.800000 20.197226 +0.200000 4.900000 20.029854 +0.200000 5.000000 19.882483 +0.200000 5.100000 19.755111 +0.200000 5.200000 19.647740 +0.200000 5.300000 19.560368 +0.200000 5.400000 19.492997 +0.200000 5.500000 19.445625 +0.200000 5.600000 19.418254 +0.200000 5.700000 19.410882 +0.200000 5.800000 19.423511 +0.200000 5.900000 19.456139 +0.200000 6.000000 19.508768 +0.200000 6.100000 19.581396 +0.200000 6.200000 19.674025 +0.200000 6.300000 19.786653 +0.200000 6.400000 19.919282 +0.200000 6.500000 20.071910 +0.200000 6.600000 20.244539 +0.200000 6.700000 20.437167 +0.200000 6.800000 20.649796 +0.200000 6.900000 20.882424 +0.200000 7.000000 21.135053 +0.200000 7.100000 21.407681 +0.200000 7.200000 21.700310 +0.200000 7.300000 22.012938 +0.200000 7.400000 22.345567 +0.200000 7.500000 22.698195 +0.200000 7.600000 23.070824 +0.200000 7.700000 23.463452 +0.200000 7.800000 23.876081 +0.200000 7.900000 24.308709 +0.200000 8.000000 24.761338 +0.200000 8.100000 25.233966 +0.200000 8.200000 25.726595 +0.200000 8.300000 26.239223 +0.200000 8.400000 26.771852 +0.200000 8.500000 27.324480 +0.200000 8.600000 27.897109 +0.200000 8.700000 28.489737 +0.200000 8.800000 29.102366 +0.200000 8.900000 29.734994 +0.200000 9.000000 30.387623 +0.200000 9.100000 31.060251 +0.200000 9.200000 31.752880 +0.200000 9.300000 32.465508 +0.200000 9.400000 33.198137 +0.200000 9.500000 33.950765 +0.200000 9.600000 34.723394 +0.200000 9.700000 35.516022 +0.200000 9.800000 36.328651 +0.200000 9.900000 37.161279 +0.200000 10.000000 38.013908 +0.200000 10.100000 38.886536 +0.200000 10.200000 39.779165 +0.200000 10.300000 40.691793 +0.200000 10.400000 41.624422 +0.200000 10.500000 42.577050 +0.200000 10.600000 43.549679 +0.200000 10.700000 44.542307 +0.200000 10.800000 45.554936 +0.200000 10.900000 46.587564 +0.200000 11.000000 47.640193 +0.200000 11.100000 48.712821 +0.200000 11.200000 49.805450 +0.200000 11.300000 50.918078 +0.200000 11.400000 52.050707 +0.200000 11.500000 53.203335 +0.200000 11.600000 54.375964 +0.200000 11.700000 55.568592 +0.200000 11.800000 56.781221 +0.200000 11.900000 58.013849 +0.200000 12.000000 59.266478 +0.200000 12.100000 60.539106 +0.200000 12.200000 61.831735 +0.200000 12.300000 63.144363 +0.200000 12.400000 64.476992 +0.200000 12.500000 65.829620 +0.200000 12.600000 67.202249 +0.200000 12.700000 68.594877 +0.200000 12.800000 70.007506 +0.200000 12.900000 71.440134 +0.200000 13.000000 72.892763 +0.200000 13.100000 74.365391 +0.200000 13.200000 75.858020 +0.200000 13.300000 77.370648 +0.200000 13.400000 78.903277 +0.200000 13.500000 80.455905 +0.200000 13.600000 82.028534 +0.200000 13.700000 83.621162 +0.200000 13.800000 85.233791 +0.200000 13.900000 86.866419 +0.200000 14.000000 88.519048 +0.200000 14.100000 90.191677 +0.200000 14.200000 91.884305 +0.200000 14.300000 93.596934 +0.200000 14.400000 95.329562 +0.200000 14.500000 97.082191 +0.200000 14.600000 98.854819 +0.200000 14.700000 100.647448 +0.200000 14.800000 102.460076 +0.200000 14.900000 104.292705 +0.200000 15.000000 106.145333 + +0.300000 -5.000000 130.141813 +0.300000 -4.900000 128.044981 +0.300000 -4.800000 125.968148 +0.300000 -4.700000 123.911316 +0.300000 -4.600000 121.874483 +0.300000 -4.500000 119.857651 +0.300000 -4.400000 117.860819 +0.300000 -4.300000 115.883986 +0.300000 -4.200000 113.927154 +0.300000 -4.100000 111.990322 +0.300000 -4.000000 110.073489 +0.300000 -3.900000 108.176657 +0.300000 -3.800000 106.299825 +0.300000 -3.700000 104.442992 +0.300000 -3.600000 102.606160 +0.300000 -3.500000 100.789328 +0.300000 -3.400000 98.992495 +0.300000 -3.300000 97.215663 +0.300000 -3.200000 95.458831 +0.300000 -3.100000 93.721998 +0.300000 -3.000000 92.005166 +0.300000 -2.900000 90.308333 +0.300000 -2.800000 88.631501 +0.300000 -2.700000 86.974669 +0.300000 -2.600000 85.337836 +0.300000 -2.500000 83.721004 +0.300000 -2.400000 82.124172 +0.300000 -2.300000 80.547339 +0.300000 -2.200000 78.990507 +0.300000 -2.100000 77.453675 +0.300000 -2.000000 75.936842 +0.300000 -1.900000 74.440010 +0.300000 -1.800000 72.963178 +0.300000 -1.700000 71.506345 +0.300000 -1.600000 70.069513 +0.300000 -1.500000 68.652680 +0.300000 -1.400000 67.255848 +0.300000 -1.300000 65.879016 +0.300000 -1.200000 64.522183 +0.300000 -1.100000 63.185351 +0.300000 -1.000000 61.868519 +0.300000 -0.900000 60.571686 +0.300000 -0.800000 59.294854 +0.300000 -0.700000 58.038022 +0.300000 -0.600000 56.801189 +0.300000 -0.500000 55.584357 +0.300000 -0.400000 54.387525 +0.300000 -0.300000 53.210692 +0.300000 -0.200000 52.053860 +0.300000 -0.100000 50.917028 +0.300000 -0.000000 49.800195 +0.300000 0.100000 48.703363 +0.300000 0.200000 47.626530 +0.300000 0.300000 46.569698 +0.300000 0.400000 45.532866 +0.300000 0.500000 44.516033 +0.300000 0.600000 43.519201 +0.300000 0.700000 42.542369 +0.300000 0.800000 41.585536 +0.300000 0.900000 40.648704 +0.300000 1.000000 39.731872 +0.300000 1.100000 38.835039 +0.300000 1.200000 37.958207 +0.300000 1.300000 37.101375 +0.300000 1.400000 36.264542 +0.300000 1.500000 35.447710 +0.300000 1.600000 34.650877 +0.300000 1.700000 33.874045 +0.300000 1.800000 33.117213 +0.300000 1.900000 32.380380 +0.300000 2.000000 31.663548 +0.300000 2.100000 30.966716 +0.300000 2.200000 30.289883 +0.300000 2.300000 29.633051 +0.300000 2.400000 28.996219 +0.300000 2.500000 28.379386 +0.300000 2.600000 27.782554 +0.300000 2.700000 27.205722 +0.300000 2.800000 26.648889 +0.300000 2.900000 26.112057 +0.300000 3.000000 25.595224 +0.300000 3.100000 25.098392 +0.300000 3.200000 24.621560 +0.300000 3.300000 24.164727 +0.300000 3.400000 23.727895 +0.300000 3.500000 23.311063 +0.300000 3.600000 22.914230 +0.300000 3.700000 22.537398 +0.300000 3.800000 22.180566 +0.300000 3.900000 21.843733 +0.300000 4.000000 21.526901 +0.300000 4.100000 21.230069 +0.300000 4.200000 20.953236 +0.300000 4.300000 20.696404 +0.300000 4.400000 20.459572 +0.300000 4.500000 20.242739 +0.300000 4.600000 20.045907 +0.300000 4.700000 19.869074 +0.300000 4.800000 19.712242 +0.300000 4.900000 19.575410 +0.300000 5.000000 19.458577 +0.300000 5.100000 19.361745 +0.300000 5.200000 19.284913 +0.300000 5.300000 19.228080 +0.300000 5.400000 19.191248 +0.300000 5.500000 19.174416 +0.300000 5.600000 19.177583 +0.300000 5.700000 19.200751 +0.300000 5.800000 19.243919 +0.300000 5.900000 19.307086 +0.300000 6.000000 19.390254 +0.300000 6.100000 19.493421 +0.300000 6.200000 19.616589 +0.300000 6.300000 19.759757 +0.300000 6.400000 19.922924 +0.300000 6.500000 20.106092 +0.300000 6.600000 20.309260 +0.300000 6.700000 20.532427 +0.300000 6.800000 20.775595 +0.300000 6.900000 21.038763 +0.300000 7.000000 21.321930 +0.300000 7.100000 21.625098 +0.300000 7.200000 21.948266 +0.300000 7.300000 22.291433 +0.300000 7.400000 22.654601 +0.300000 7.500000 23.037769 +0.300000 7.600000 23.440936 +0.300000 7.700000 23.864104 +0.300000 7.800000 24.307271 +0.300000 7.900000 24.770439 +0.300000 8.000000 25.253607 +0.300000 8.100000 25.756774 +0.300000 8.200000 26.279942 +0.300000 8.300000 26.823110 +0.300000 8.400000 27.386277 +0.300000 8.500000 27.969445 +0.300000 8.600000 28.572613 +0.300000 8.700000 29.195780 +0.300000 8.800000 29.838948 +0.300000 8.900000 30.502116 +0.300000 9.000000 31.185283 +0.300000 9.100000 31.888451 +0.300000 9.200000 32.611618 +0.300000 9.300000 33.354786 +0.300000 9.400000 34.117954 +0.300000 9.500000 34.901121 +0.300000 9.600000 35.704289 +0.300000 9.700000 36.527457 +0.300000 9.800000 37.370624 +0.300000 9.900000 38.233792 +0.300000 10.000000 39.116960 +0.300000 10.100000 40.020127 +0.300000 10.200000 40.943295 +0.300000 10.300000 41.886463 +0.300000 10.400000 42.849630 +0.300000 10.500000 43.832798 +0.300000 10.600000 44.835965 +0.300000 10.700000 45.859133 +0.300000 10.800000 46.902301 +0.300000 10.900000 47.965468 +0.300000 11.000000 49.048636 +0.300000 11.100000 50.151804 +0.300000 11.200000 51.274971 +0.300000 11.300000 52.418139 +0.300000 11.400000 53.581307 +0.300000 11.500000 54.764474 +0.300000 11.600000 55.967642 +0.300000 11.700000 57.190810 +0.300000 11.800000 58.433977 +0.300000 11.900000 59.697145 +0.300000 12.000000 60.980313 +0.300000 12.100000 62.283480 +0.300000 12.200000 63.606648 +0.300000 12.300000 64.949815 +0.300000 12.400000 66.312983 +0.300000 12.500000 67.696151 +0.300000 12.600000 69.099318 +0.300000 12.700000 70.522486 +0.300000 12.800000 71.965654 +0.300000 12.900000 73.428821 +0.300000 13.000000 74.911989 +0.300000 13.100000 76.415157 +0.300000 13.200000 77.938324 +0.300000 13.300000 79.481492 +0.300000 13.400000 81.044660 +0.300000 13.500000 82.627827 +0.300000 13.600000 84.230995 +0.300000 13.700000 85.854162 +0.300000 13.800000 87.497330 +0.300000 13.900000 89.160498 +0.300000 14.000000 90.843665 +0.300000 14.100000 92.546833 +0.300000 14.200000 94.270001 +0.300000 14.300000 96.013168 +0.300000 14.400000 97.776336 +0.300000 14.500000 99.559504 +0.300000 14.600000 101.362671 +0.300000 14.700000 103.185839 +0.300000 14.800000 105.029007 +0.300000 14.900000 106.892174 +0.300000 15.000000 108.775342 + +0.400000 -5.000000 126.672621 +0.400000 -4.900000 124.605811 +0.400000 -4.800000 122.559001 +0.400000 -4.700000 120.532191 +0.400000 -4.600000 118.525381 +0.400000 -4.500000 116.538571 +0.400000 -4.400000 114.571761 +0.400000 -4.300000 112.624951 +0.400000 -4.200000 110.698141 +0.400000 -4.100000 108.791331 +0.400000 -4.000000 106.904521 +0.400000 -3.900000 105.037711 +0.400000 -3.800000 103.190901 +0.400000 -3.700000 101.364091 +0.400000 -3.600000 99.557281 +0.400000 -3.500000 97.770471 +0.400000 -3.400000 96.003661 +0.400000 -3.300000 94.256851 +0.400000 -3.200000 92.530042 +0.400000 -3.100000 90.823232 +0.400000 -3.000000 89.136422 +0.400000 -2.900000 87.469612 +0.400000 -2.800000 85.822802 +0.400000 -2.700000 84.195992 +0.400000 -2.600000 82.589182 +0.400000 -2.500000 81.002372 +0.400000 -2.400000 79.435562 +0.400000 -2.300000 77.888752 +0.400000 -2.200000 76.361942 +0.400000 -2.100000 74.855132 +0.400000 -2.000000 73.368322 +0.400000 -1.900000 71.901512 +0.400000 -1.800000 70.454702 +0.400000 -1.700000 69.027892 +0.400000 -1.600000 67.621082 +0.400000 -1.500000 66.234272 +0.400000 -1.400000 64.867462 +0.400000 -1.300000 63.520652 +0.400000 -1.200000 62.193843 +0.400000 -1.100000 60.887033 +0.400000 -1.000000 59.600223 +0.400000 -0.900000 58.333413 +0.400000 -0.800000 57.086603 +0.400000 -0.700000 55.859793 +0.400000 -0.600000 54.652983 +0.400000 -0.500000 53.466173 +0.400000 -0.400000 52.299363 +0.400000 -0.300000 51.152553 +0.400000 -0.200000 50.025743 +0.400000 -0.100000 48.918933 +0.400000 -0.000000 47.832123 +0.400000 0.100000 46.765313 +0.400000 0.200000 45.718503 +0.400000 0.300000 44.691693 +0.400000 0.400000 43.684883 +0.400000 0.500000 42.698073 +0.400000 0.600000 41.731263 +0.400000 0.700000 40.784453 +0.400000 0.800000 39.857644 +0.400000 0.900000 38.950834 +0.400000 1.000000 38.064024 +0.400000 1.100000 37.197214 +0.400000 1.200000 36.350404 +0.400000 1.300000 35.523594 +0.400000 1.400000 34.716784 +0.400000 1.500000 33.929974 +0.400000 1.600000 33.163164 +0.400000 1.700000 32.416354 +0.400000 1.800000 31.689544 +0.400000 1.900000 30.982734 +0.400000 2.000000 30.295924 +0.400000 2.100000 29.629114 +0.400000 2.200000 28.982304 +0.400000 2.300000 28.355494 +0.400000 2.400000 27.748684 +0.400000 2.500000 27.161874 +0.400000 2.600000 26.595064 +0.400000 2.700000 26.048254 +0.400000 2.800000 25.521445 +0.400000 2.900000 25.014635 +0.400000 3.000000 24.527825 +0.400000 3.100000 24.061015 +0.400000 3.200000 23.614205 +0.400000 3.300000 23.187395 +0.400000 3.400000 22.780585 +0.400000 3.500000 22.393775 +0.400000 3.600000 22.026965 +0.400000 3.700000 21.680155 +0.400000 3.800000 21.353345 +0.400000 3.900000 21.046535 +0.400000 4.000000 20.759725 +0.400000 4.100000 20.492915 +0.400000 4.200000 20.246105 +0.400000 4.300000 20.019295 +0.400000 4.400000 19.812485 +0.400000 4.500000 19.625675 +0.400000 4.600000 19.458865 +0.400000 4.700000 19.312055 +0.400000 4.800000 19.185246 +0.400000 4.900000 19.078436 +0.400000 5.000000 18.991626 +0.400000 5.100000 18.924816 +0.400000 5.200000 18.878006 +0.400000 5.300000 18.851196 +0.400000 5.400000 18.844386 +0.400000 5.500000 18.857576 +0.400000 5.600000 18.890766 +0.400000 5.700000 18.943956 +0.400000 5.800000 19.017146 +0.400000 5.900000 19.110336 +0.400000 6.000000 19.223526 +0.400000 6.100000 19.356716 +0.400000 6.200000 19.509906 +0.400000 6.300000 19.683096 +0.400000 6.400000 19.876286 +0.400000 6.500000 20.089476 +0.400000 6.600000 20.322666 +0.400000 6.700000 20.575856 +0.400000 6.800000 20.849047 +0.400000 6.900000 21.142237 +0.400000 7.000000 21.455427 +0.400000 7.100000 21.788617 +0.400000 7.200000 22.141807 +0.400000 7.300000 22.514997 +0.400000 7.400000 22.908187 +0.400000 7.500000 23.321377 +0.400000 7.600000 23.754567 +0.400000 7.700000 24.207757 +0.400000 7.800000 24.680947 +0.400000 7.900000 25.174137 +0.400000 8.000000 25.687327 +0.400000 8.100000 26.220517 +0.400000 8.200000 26.773707 +0.400000 8.300000 27.346897 +0.400000 8.400000 27.940087 +0.400000 8.500000 28.553277 +0.400000 8.600000 29.186467 +0.400000 8.700000 29.839657 +0.400000 8.800000 30.512848 +0.400000 8.900000 31.206038 +0.400000 9.000000 31.919228 +0.400000 9.100000 32.652418 +0.400000 9.200000 33.405608 +0.400000 9.300000 34.178798 +0.400000 9.400000 34.971988 +0.400000 9.500000 35.785178 +0.400000 9.600000 36.618368 +0.400000 9.700000 37.471558 +0.400000 9.800000 38.344748 +0.400000 9.900000 39.237938 +0.400000 10.000000 40.151128 +0.400000 10.100000 41.084318 +0.400000 10.200000 42.037508 +0.400000 10.300000 43.010698 +0.400000 10.400000 44.003888 +0.400000 10.500000 45.017078 +0.400000 10.600000 46.050268 +0.400000 10.700000 47.103458 +0.400000 10.800000 48.176649 +0.400000 10.900000 49.269839 +0.400000 11.000000 50.383029 +0.400000 11.100000 51.516219 +0.400000 11.200000 52.669409 +0.400000 11.300000 53.842599 +0.400000 11.400000 55.035789 +0.400000 11.500000 56.248979 +0.400000 11.600000 57.482169 +0.400000 11.700000 58.735359 +0.400000 11.800000 60.008549 +0.400000 11.900000 61.301739 +0.400000 12.000000 62.614929 +0.400000 12.100000 63.948119 +0.400000 12.200000 65.301309 +0.400000 12.300000 66.674499 +0.400000 12.400000 68.067689 +0.400000 12.500000 69.480879 +0.400000 12.600000 70.914069 +0.400000 12.700000 72.367259 +0.400000 12.800000 73.840450 +0.400000 12.900000 75.333640 +0.400000 13.000000 76.846830 +0.400000 13.100000 78.380020 +0.400000 13.200000 79.933210 +0.400000 13.300000 81.506400 +0.400000 13.400000 83.099590 +0.400000 13.500000 84.712780 +0.400000 13.600000 86.345970 +0.400000 13.700000 87.999160 +0.400000 13.800000 89.672350 +0.400000 13.900000 91.365540 +0.400000 14.000000 93.078730 +0.400000 14.100000 94.811920 +0.400000 14.200000 96.565110 +0.400000 14.300000 98.338300 +0.400000 14.400000 100.131490 +0.400000 14.500000 101.944680 +0.400000 14.600000 103.777870 +0.400000 14.700000 105.631060 +0.400000 14.800000 107.504251 +0.400000 14.900000 109.397441 +0.400000 15.000000 111.310631 + +0.500000 -5.000000 123.213017 +0.500000 -4.900000 121.175713 +0.500000 -4.800000 119.158409 +0.500000 -4.700000 117.161104 +0.500000 -4.600000 115.183800 +0.500000 -4.500000 113.226496 +0.500000 -4.400000 111.289192 +0.500000 -4.300000 109.371887 +0.500000 -4.200000 107.474583 +0.500000 -4.100000 105.597279 +0.500000 -4.000000 103.739974 +0.500000 -3.900000 101.902670 +0.500000 -3.800000 100.085366 +0.500000 -3.700000 98.288062 +0.500000 -3.600000 96.510757 +0.500000 -3.500000 94.753453 +0.500000 -3.400000 93.016149 +0.500000 -3.300000 91.298844 +0.500000 -3.200000 89.601540 +0.500000 -3.100000 87.924236 +0.500000 -3.000000 86.266932 +0.500000 -2.900000 84.629627 +0.500000 -2.800000 83.012323 +0.500000 -2.700000 81.415019 +0.500000 -2.600000 79.837714 +0.500000 -2.500000 78.280410 +0.500000 -2.400000 76.743106 +0.500000 -2.300000 75.225802 +0.500000 -2.200000 73.728497 +0.500000 -2.100000 72.251193 +0.500000 -2.000000 70.793889 +0.500000 -1.900000 69.356584 +0.500000 -1.800000 67.939280 +0.500000 -1.700000 66.541976 +0.500000 -1.600000 65.164672 +0.500000 -1.500000 63.807367 +0.500000 -1.400000 62.470063 +0.500000 -1.300000 61.152759 +0.500000 -1.200000 59.855454 +0.500000 -1.100000 58.578150 +0.500000 -1.000000 57.320846 +0.500000 -0.900000 56.083542 +0.500000 -0.800000 54.866237 +0.500000 -0.700000 53.668933 +0.500000 -0.600000 52.491629 +0.500000 -0.500000 51.334325 +0.500000 -0.400000 50.197020 +0.500000 -0.300000 49.079716 +0.500000 -0.200000 47.982412 +0.500000 -0.100000 46.905107 +0.500000 -0.000000 45.847803 +0.500000 0.100000 44.810499 +0.500000 0.200000 43.793195 +0.500000 0.300000 42.795890 +0.500000 0.400000 41.818586 +0.500000 0.500000 40.861282 +0.500000 0.600000 39.923977 +0.500000 0.700000 39.006673 +0.500000 0.800000 38.109369 +0.500000 0.900000 37.232065 +0.500000 1.000000 36.374760 +0.500000 1.100000 35.537456 +0.500000 1.200000 34.720152 +0.500000 1.300000 33.922847 +0.500000 1.400000 33.145543 +0.500000 1.500000 32.388239 +0.500000 1.600000 31.650935 +0.500000 1.700000 30.933630 +0.500000 1.800000 30.236326 +0.500000 1.900000 29.559022 +0.500000 2.000000 28.901717 +0.500000 2.100000 28.264413 +0.500000 2.200000 27.647109 +0.500000 2.300000 27.049805 +0.500000 2.400000 26.472500 +0.500000 2.500000 25.915196 +0.500000 2.600000 25.377892 +0.500000 2.700000 24.860587 +0.500000 2.800000 24.363283 +0.500000 2.900000 23.885979 +0.500000 3.000000 23.428675 +0.500000 3.100000 22.991370 +0.500000 3.200000 22.574066 +0.500000 3.300000 22.176762 +0.500000 3.400000 21.799458 +0.500000 3.500000 21.442153 +0.500000 3.600000 21.104849 +0.500000 3.700000 20.787545 +0.500000 3.800000 20.490240 +0.500000 3.900000 20.212936 +0.500000 4.000000 19.955632 +0.500000 4.100000 19.718328 +0.500000 4.200000 19.501023 +0.500000 4.300000 19.303719 +0.500000 4.400000 19.126415 +0.500000 4.500000 18.969110 +0.500000 4.600000 18.831806 +0.500000 4.700000 18.714502 +0.500000 4.800000 18.617198 +0.500000 4.900000 18.539893 +0.500000 5.000000 18.482589 +0.500000 5.100000 18.445285 +0.500000 5.200000 18.427980 +0.500000 5.300000 18.430676 +0.500000 5.400000 18.453372 +0.500000 5.500000 18.496068 +0.500000 5.600000 18.558763 +0.500000 5.700000 18.641459 +0.500000 5.800000 18.744155 +0.500000 5.900000 18.866850 +0.500000 6.000000 19.009546 +0.500000 6.100000 19.172242 +0.500000 6.200000 19.354938 +0.500000 6.300000 19.557633 +0.500000 6.400000 19.780329 +0.500000 6.500000 20.023025 +0.500000 6.600000 20.285720 +0.500000 6.700000 20.568416 +0.500000 6.800000 20.871112 +0.500000 6.900000 21.193808 +0.500000 7.000000 21.536503 +0.500000 7.100000 21.899199 +0.500000 7.200000 22.281895 +0.500000 7.300000 22.684590 +0.500000 7.400000 23.107286 +0.500000 7.500000 23.549982 +0.500000 7.600000 24.012678 +0.500000 7.700000 24.495373 +0.500000 7.800000 24.998069 +0.500000 7.900000 25.520765 +0.500000 8.000000 26.063461 +0.500000 8.100000 26.626156 +0.500000 8.200000 27.208852 +0.500000 8.300000 27.811548 +0.500000 8.400000 28.434243 +0.500000 8.500000 29.076939 +0.500000 8.600000 29.739635 +0.500000 8.700000 30.422331 +0.500000 8.800000 31.125026 +0.500000 8.900000 31.847722 +0.500000 9.000000 32.590418 +0.500000 9.100000 33.353113 +0.500000 9.200000 34.135809 +0.500000 9.300000 34.938505 +0.500000 9.400000 35.761201 +0.500000 9.500000 36.603896 +0.500000 9.600000 37.466592 +0.500000 9.700000 38.349288 +0.500000 9.800000 39.251983 +0.500000 9.900000 40.174679 +0.500000 10.000000 41.117375 +0.500000 10.100000 42.080071 +0.500000 10.200000 43.062766 +0.500000 10.300000 44.065462 +0.500000 10.400000 45.088158 +0.500000 10.500000 46.130853 +0.500000 10.600000 47.193549 +0.500000 10.700000 48.276245 +0.500000 10.800000 49.378941 +0.500000 10.900000 50.501636 +0.500000 11.000000 51.644332 +0.500000 11.100000 52.807028 +0.500000 11.200000 53.989723 +0.500000 11.300000 55.192419 +0.500000 11.400000 56.415115 +0.500000 11.500000 57.657811 +0.500000 11.600000 58.920506 +0.500000 11.700000 60.203202 +0.500000 11.800000 61.505898 +0.500000 11.900000 62.828594 +0.500000 12.000000 64.171289 +0.500000 12.100000 65.533985 +0.500000 12.200000 66.916681 +0.500000 12.300000 68.319376 +0.500000 12.400000 69.742072 +0.500000 12.500000 71.184768 +0.500000 12.600000 72.647464 +0.500000 12.700000 74.130159 +0.500000 12.800000 75.632855 +0.500000 12.900000 77.155551 +0.500000 13.000000 78.698246 +0.500000 13.100000 80.260942 +0.500000 13.200000 81.843638 +0.500000 13.300000 83.446334 +0.500000 13.400000 85.069029 +0.500000 13.500000 86.711725 +0.500000 13.600000 88.374421 +0.500000 13.700000 90.057116 +0.500000 13.800000 91.759812 +0.500000 13.900000 93.482508 +0.500000 14.000000 95.225204 +0.500000 14.100000 96.987899 +0.500000 14.200000 98.770595 +0.500000 14.300000 100.573291 +0.500000 14.400000 102.395986 +0.500000 14.500000 104.238682 +0.500000 14.600000 106.101378 +0.500000 14.700000 107.984074 +0.500000 14.800000 109.886769 +0.500000 14.900000 111.809465 +0.500000 15.000000 113.752161 + +0.600000 -5.000000 119.764887 +0.600000 -4.900000 117.756572 +0.600000 -4.800000 115.768256 +0.600000 -4.700000 113.799941 +0.600000 -4.600000 111.851626 +0.600000 -4.500000 109.923310 +0.600000 -4.400000 108.014995 +0.600000 -4.300000 106.126680 +0.600000 -4.200000 104.258364 +0.600000 -4.100000 102.410049 +0.600000 -4.000000 100.581734 +0.600000 -3.900000 98.773418 +0.600000 -3.800000 96.985103 +0.600000 -3.700000 95.216788 +0.600000 -3.600000 93.468472 +0.600000 -3.500000 91.740157 +0.600000 -3.400000 90.031841 +0.600000 -3.300000 88.343526 +0.600000 -3.200000 86.675211 +0.600000 -3.100000 85.026895 +0.600000 -3.000000 83.398580 +0.600000 -2.900000 81.790265 +0.600000 -2.800000 80.201949 +0.600000 -2.700000 78.633634 +0.600000 -2.600000 77.085319 +0.600000 -2.500000 75.557003 +0.600000 -2.400000 74.048688 +0.600000 -2.300000 72.560373 +0.600000 -2.200000 71.092057 +0.600000 -2.100000 69.643742 +0.600000 -2.000000 68.215427 +0.600000 -1.900000 66.807111 +0.600000 -1.800000 65.418796 +0.600000 -1.700000 64.050480 +0.600000 -1.600000 62.702165 +0.600000 -1.500000 61.373850 +0.600000 -1.400000 60.065534 +0.600000 -1.300000 58.777219 +0.600000 -1.200000 57.508904 +0.600000 -1.100000 56.260588 +0.600000 -1.000000 55.032273 +0.600000 -0.900000 53.823958 +0.600000 -0.800000 52.635642 +0.600000 -0.700000 51.467327 +0.600000 -0.600000 50.319012 +0.600000 -0.500000 49.190696 +0.600000 -0.400000 48.082381 +0.600000 -0.300000 46.994066 +0.600000 -0.200000 45.925750 +0.600000 -0.100000 44.877435 +0.600000 -0.000000 43.849119 +0.600000 0.100000 42.840804 +0.600000 0.200000 41.852489 +0.600000 0.300000 40.884173 +0.600000 0.400000 39.935858 +0.600000 0.500000 39.007543 +0.600000 0.600000 38.099227 +0.600000 0.700000 37.210912 +0.600000 0.800000 36.342597 +0.600000 0.900000 35.494281 +0.600000 1.000000 34.665966 +0.600000 1.100000 33.857651 +0.600000 1.200000 33.069335 +0.600000 1.300000 32.301020 +0.600000 1.400000 31.552705 +0.600000 1.500000 30.824389 +0.600000 1.600000 30.116074 +0.600000 1.700000 29.427758 +0.600000 1.800000 28.759443 +0.600000 1.900000 28.111128 +0.600000 2.000000 27.482812 +0.600000 2.100000 26.874497 +0.600000 2.200000 26.286182 +0.600000 2.300000 25.717866 +0.600000 2.400000 25.169551 +0.600000 2.500000 24.641236 +0.600000 2.600000 24.132920 +0.600000 2.700000 23.644605 +0.600000 2.800000 23.176290 +0.600000 2.900000 22.727974 +0.600000 3.000000 22.299659 +0.600000 3.100000 21.891344 +0.600000 3.200000 21.503028 +0.600000 3.300000 21.134713 +0.600000 3.400000 20.786397 +0.600000 3.500000 20.458082 +0.600000 3.600000 20.149767 +0.600000 3.700000 19.861451 +0.600000 3.800000 19.593136 +0.600000 3.900000 19.344821 +0.600000 4.000000 19.116505 +0.600000 4.100000 18.908190 +0.600000 4.200000 18.719875 +0.600000 4.300000 18.551559 +0.600000 4.400000 18.403244 +0.600000 4.500000 18.274929 +0.600000 4.600000 18.166613 +0.600000 4.700000 18.078298 +0.600000 4.800000 18.009983 +0.600000 4.900000 17.961667 +0.600000 5.000000 17.933352 +0.600000 5.100000 17.925036 +0.600000 5.200000 17.936721 +0.600000 5.300000 17.968406 +0.600000 5.400000 18.020090 +0.600000 5.500000 18.091775 +0.600000 5.600000 18.183460 +0.600000 5.700000 18.295144 +0.600000 5.800000 18.426829 +0.600000 5.900000 18.578514 +0.600000 6.000000 18.750198 +0.600000 6.100000 18.941883 +0.600000 6.200000 19.153568 +0.600000 6.300000 19.385252 +0.600000 6.400000 19.636937 +0.600000 6.500000 19.908622 +0.600000 6.600000 20.200306 +0.600000 6.700000 20.511991 +0.600000 6.800000 20.843675 +0.600000 6.900000 21.195360 +0.600000 7.000000 21.567045 +0.600000 7.100000 21.958729 +0.600000 7.200000 22.370414 +0.600000 7.300000 22.802099 +0.600000 7.400000 23.253783 +0.600000 7.500000 23.725468 +0.600000 7.600000 24.217153 +0.600000 7.700000 24.728837 +0.600000 7.800000 25.260522 +0.600000 7.900000 25.812207 +0.600000 8.000000 26.383891 +0.600000 8.100000 26.975576 +0.600000 8.200000 27.587261 +0.600000 8.300000 28.218945 +0.600000 8.400000 28.870630 +0.600000 8.500000 29.542314 +0.600000 8.600000 30.233999 +0.600000 8.700000 30.945684 +0.600000 8.800000 31.677368 +0.600000 8.900000 32.429053 +0.600000 9.000000 33.200738 +0.600000 9.100000 33.992422 +0.600000 9.200000 34.804107 +0.600000 9.300000 35.635792 +0.600000 9.400000 36.487476 +0.600000 9.500000 37.359161 +0.600000 9.600000 38.250846 +0.600000 9.700000 39.162530 +0.600000 9.800000 40.094215 +0.600000 9.900000 41.045900 +0.600000 10.000000 42.017584 +0.600000 10.100000 43.009269 +0.600000 10.200000 44.020953 +0.600000 10.300000 45.052638 +0.600000 10.400000 46.104323 +0.600000 10.500000 47.176007 +0.600000 10.600000 48.267692 +0.600000 10.700000 49.379377 +0.600000 10.800000 50.511061 +0.600000 10.900000 51.662746 +0.600000 11.000000 52.834431 +0.600000 11.100000 54.026115 +0.600000 11.200000 55.237800 +0.600000 11.300000 56.469485 +0.600000 11.400000 57.721169 +0.600000 11.500000 58.992854 +0.600000 11.600000 60.284539 +0.600000 11.700000 61.596223 +0.600000 11.800000 62.927908 +0.600000 11.900000 64.279592 +0.600000 12.000000 65.651277 +0.600000 12.100000 67.042962 +0.600000 12.200000 68.454646 +0.600000 12.300000 69.886331 +0.600000 12.400000 71.338016 +0.600000 12.500000 72.809700 +0.600000 12.600000 74.301385 +0.600000 12.700000 75.813070 +0.600000 12.800000 77.344754 +0.600000 12.900000 78.896439 +0.600000 13.000000 80.468124 +0.600000 13.100000 82.059808 +0.600000 13.200000 83.671493 +0.600000 13.300000 85.303178 +0.600000 13.400000 86.954862 +0.600000 13.500000 88.626547 +0.600000 13.600000 90.318231 +0.600000 13.700000 92.029916 +0.600000 13.800000 93.761601 +0.600000 13.900000 95.513285 +0.600000 14.000000 97.284970 +0.600000 14.100000 99.076655 +0.600000 14.200000 100.888339 +0.600000 14.300000 102.720024 +0.600000 14.400000 104.571709 +0.600000 14.500000 106.443393 +0.600000 14.600000 108.335078 +0.600000 14.700000 110.246763 +0.600000 14.800000 112.178447 +0.600000 14.900000 114.130132 +0.600000 15.000000 116.101817 + +0.700000 -5.000000 116.330996 +0.700000 -4.900000 114.351153 +0.700000 -4.800000 112.391310 +0.700000 -4.700000 110.451467 +0.700000 -4.600000 108.531623 +0.700000 -4.500000 106.631780 +0.700000 -4.400000 104.751937 +0.700000 -4.300000 102.892094 +0.700000 -4.200000 101.052251 +0.700000 -4.100000 99.232408 +0.700000 -4.000000 97.432564 +0.700000 -3.900000 95.652721 +0.700000 -3.800000 93.892878 +0.700000 -3.700000 92.153035 +0.700000 -3.600000 90.433192 +0.700000 -3.500000 88.733349 +0.700000 -3.400000 87.053505 +0.700000 -3.300000 85.393662 +0.700000 -3.200000 83.753819 +0.700000 -3.100000 82.133976 +0.700000 -3.000000 80.534133 +0.700000 -2.900000 78.954290 +0.700000 -2.800000 77.394446 +0.700000 -2.700000 75.854603 +0.700000 -2.600000 74.334760 +0.700000 -2.500000 72.834917 +0.700000 -2.400000 71.355074 +0.700000 -2.300000 69.895231 +0.700000 -2.200000 68.455388 +0.700000 -2.100000 67.035544 +0.700000 -2.000000 65.635701 +0.700000 -1.900000 64.255858 +0.700000 -1.800000 62.896015 +0.700000 -1.700000 61.556172 +0.700000 -1.600000 60.236329 +0.700000 -1.500000 58.936485 +0.700000 -1.400000 57.656642 +0.700000 -1.300000 56.396799 +0.700000 -1.200000 55.156956 +0.700000 -1.100000 53.937113 +0.700000 -1.000000 52.737270 +0.700000 -0.900000 51.557426 +0.700000 -0.800000 50.397583 +0.700000 -0.700000 49.257740 +0.700000 -0.600000 48.137897 +0.700000 -0.500000 47.038054 +0.700000 -0.400000 45.958211 +0.700000 -0.300000 44.898367 +0.700000 -0.200000 43.858524 +0.700000 -0.100000 42.838681 +0.700000 -0.000000 41.838838 +0.700000 0.100000 40.858995 +0.700000 0.200000 39.899152 +0.700000 0.300000 38.959308 +0.700000 0.400000 38.039465 +0.700000 0.500000 37.139622 +0.700000 0.600000 36.259779 +0.700000 0.700000 35.399936 +0.700000 0.800000 34.560093 +0.700000 0.900000 33.740249 +0.700000 1.000000 32.940406 +0.700000 1.100000 32.160563 +0.700000 1.200000 31.400720 +0.700000 1.300000 30.660877 +0.700000 1.400000 29.941034 +0.700000 1.500000 29.241191 +0.700000 1.600000 28.561347 +0.700000 1.700000 27.901504 +0.700000 1.800000 27.261661 +0.700000 1.900000 26.641818 +0.700000 2.000000 26.041975 +0.700000 2.100000 25.462132 +0.700000 2.200000 24.902288 +0.700000 2.300000 24.362445 +0.700000 2.400000 23.842602 +0.700000 2.500000 23.342759 +0.700000 2.600000 22.862916 +0.700000 2.700000 22.403073 +0.700000 2.800000 21.963229 +0.700000 2.900000 21.543386 +0.700000 3.000000 21.143543 +0.700000 3.100000 20.763700 +0.700000 3.200000 20.403857 +0.700000 3.300000 20.064014 +0.700000 3.400000 19.744170 +0.700000 3.500000 19.444327 +0.700000 3.600000 19.164484 +0.700000 3.700000 18.904641 +0.700000 3.800000 18.664798 +0.700000 3.900000 18.444955 +0.700000 4.000000 18.245111 +0.700000 4.100000 18.065268 +0.700000 4.200000 17.905425 +0.700000 4.300000 17.765582 +0.700000 4.400000 17.645739 +0.700000 4.500000 17.545896 +0.700000 4.600000 17.466053 +0.700000 4.700000 17.406209 +0.700000 4.800000 17.366366 +0.700000 4.900000 17.346523 +0.700000 5.000000 17.346680 +0.700000 5.100000 17.366837 +0.700000 5.200000 17.406994 +0.700000 5.300000 17.467150 +0.700000 5.400000 17.547307 +0.700000 5.500000 17.647464 +0.700000 5.600000 17.767621 +0.700000 5.700000 17.907778 +0.700000 5.800000 18.067935 +0.700000 5.900000 18.248091 +0.700000 6.000000 18.448248 +0.700000 6.100000 18.668405 +0.700000 6.200000 18.908562 +0.700000 6.300000 19.168719 +0.700000 6.400000 19.448876 +0.700000 6.500000 19.749032 +0.700000 6.600000 20.069189 +0.700000 6.700000 20.409346 +0.700000 6.800000 20.769503 +0.700000 6.900000 21.149660 +0.700000 7.000000 21.549817 +0.700000 7.100000 21.969973 +0.700000 7.200000 22.410130 +0.700000 7.300000 22.870287 +0.700000 7.400000 23.350444 +0.700000 7.500000 23.850601 +0.700000 7.600000 24.370758 +0.700000 7.700000 24.910915 +0.700000 7.800000 25.471071 +0.700000 7.900000 26.051228 +0.700000 8.000000 26.651385 +0.700000 8.100000 27.271542 +0.700000 8.200000 27.911699 +0.700000 8.300000 28.571856 +0.700000 8.400000 29.252012 +0.700000 8.500000 29.952169 +0.700000 8.600000 30.672326 +0.700000 8.700000 31.412483 +0.700000 8.800000 32.172640 +0.700000 8.900000 32.952797 +0.700000 9.000000 33.752953 +0.700000 9.100000 34.573110 +0.700000 9.200000 35.413267 +0.700000 9.300000 36.273424 +0.700000 9.400000 37.153581 +0.700000 9.500000 38.053738 +0.700000 9.600000 38.973894 +0.700000 9.700000 39.914051 +0.700000 9.800000 40.874208 +0.700000 9.900000 41.854365 +0.700000 10.000000 42.854522 +0.700000 10.100000 43.874679 +0.700000 10.200000 44.914835 +0.700000 10.300000 45.974992 +0.700000 10.400000 47.055149 +0.700000 10.500000 48.155306 +0.700000 10.600000 49.275463 +0.700000 10.700000 50.415620 +0.700000 10.800000 51.575776 +0.700000 10.900000 52.755933 +0.700000 11.000000 53.956090 +0.700000 11.100000 55.176247 +0.700000 11.200000 56.416404 +0.700000 11.300000 57.676561 +0.700000 11.400000 58.956718 +0.700000 11.500000 60.256874 +0.700000 11.600000 61.577031 +0.700000 11.700000 62.917188 +0.700000 11.800000 64.277345 +0.700000 11.900000 65.657502 +0.700000 12.000000 67.057659 +0.700000 12.100000 68.477815 +0.700000 12.200000 69.917972 +0.700000 12.300000 71.378129 +0.700000 12.400000 72.858286 +0.700000 12.500000 74.358443 +0.700000 12.600000 75.878600 +0.700000 12.700000 77.418756 +0.700000 12.800000 78.978913 +0.700000 12.900000 80.559070 +0.700000 13.000000 82.159227 +0.700000 13.100000 83.779384 +0.700000 13.200000 85.419541 +0.700000 13.300000 87.079697 +0.700000 13.400000 88.759854 +0.700000 13.500000 90.460011 +0.700000 13.600000 92.180168 +0.700000 13.700000 93.920325 +0.700000 13.800000 95.680482 +0.700000 13.900000 97.460638 +0.700000 14.000000 99.260795 +0.700000 14.100000 101.080952 +0.700000 14.200000 102.921109 +0.700000 14.300000 104.781266 +0.700000 14.400000 106.661423 +0.700000 14.500000 108.561580 +0.700000 14.600000 110.481736 +0.700000 14.700000 112.421893 +0.700000 14.800000 114.382050 +0.700000 14.900000 116.362207 +0.700000 15.000000 118.362364 + +0.800000 -5.000000 112.914941 +0.800000 -4.900000 110.963053 +0.800000 -4.800000 109.031165 +0.800000 -4.700000 107.119278 +0.800000 -4.600000 105.227390 +0.800000 -4.500000 103.355502 +0.800000 -4.400000 101.503615 +0.800000 -4.300000 99.671727 +0.800000 -4.200000 97.859839 +0.800000 -4.100000 96.067951 +0.800000 -4.000000 94.296064 +0.800000 -3.900000 92.544176 +0.800000 -3.800000 90.812288 +0.800000 -3.700000 89.100401 +0.800000 -3.600000 87.408513 +0.800000 -3.500000 85.736625 +0.800000 -3.400000 84.084737 +0.800000 -3.300000 82.452850 +0.800000 -3.200000 80.840962 +0.800000 -3.100000 79.249074 +0.800000 -3.000000 77.677187 +0.800000 -2.900000 76.125299 +0.800000 -2.800000 74.593411 +0.800000 -2.700000 73.081524 +0.800000 -2.600000 71.589636 +0.800000 -2.500000 70.117748 +0.800000 -2.400000 68.665860 +0.800000 -2.300000 67.233973 +0.800000 -2.200000 65.822085 +0.800000 -2.100000 64.430197 +0.800000 -2.000000 63.058310 +0.800000 -1.900000 61.706422 +0.800000 -1.800000 60.374534 +0.800000 -1.700000 59.062646 +0.800000 -1.600000 57.770759 +0.800000 -1.500000 56.498871 +0.800000 -1.400000 55.246983 +0.800000 -1.300000 54.015096 +0.800000 -1.200000 52.803208 +0.800000 -1.100000 51.611320 +0.800000 -1.000000 50.439432 +0.800000 -0.900000 49.287545 +0.800000 -0.800000 48.155657 +0.800000 -0.700000 47.043769 +0.800000 -0.600000 45.951882 +0.800000 -0.500000 44.879994 +0.800000 -0.400000 43.828106 +0.800000 -0.300000 42.796219 +0.800000 -0.200000 41.784331 +0.800000 -0.100000 40.792443 +0.800000 -0.000000 39.820555 +0.800000 0.100000 38.868668 +0.800000 0.200000 37.936780 +0.800000 0.300000 37.024892 +0.800000 0.400000 36.133005 +0.800000 0.500000 35.261117 +0.800000 0.600000 34.409229 +0.800000 0.700000 33.577341 +0.800000 0.800000 32.765454 +0.800000 0.900000 31.973566 +0.800000 1.000000 31.201678 +0.800000 1.100000 30.449791 +0.800000 1.200000 29.717903 +0.800000 1.300000 29.006015 +0.800000 1.400000 28.314127 +0.800000 1.500000 27.642240 +0.800000 1.600000 26.990352 +0.800000 1.700000 26.358464 +0.800000 1.800000 25.746577 +0.800000 1.900000 25.154689 +0.800000 2.000000 24.582801 +0.800000 2.100000 24.030914 +0.800000 2.200000 23.499026 +0.800000 2.300000 22.987138 +0.800000 2.400000 22.495250 +0.800000 2.500000 22.023363 +0.800000 2.600000 21.571475 +0.800000 2.700000 21.139587 +0.800000 2.800000 20.727700 +0.800000 2.900000 20.335812 +0.800000 3.000000 19.963924 +0.800000 3.100000 19.612036 +0.800000 3.200000 19.280149 +0.800000 3.300000 18.968261 +0.800000 3.400000 18.676373 +0.800000 3.500000 18.404486 +0.800000 3.600000 18.152598 +0.800000 3.700000 17.920710 +0.800000 3.800000 17.708822 +0.800000 3.900000 17.516935 +0.800000 4.000000 17.345047 +0.800000 4.100000 17.193159 +0.800000 4.200000 17.061272 +0.800000 4.300000 16.949384 +0.800000 4.400000 16.857496 +0.800000 4.500000 16.785609 +0.800000 4.600000 16.733721 +0.800000 4.700000 16.701833 +0.800000 4.800000 16.689945 +0.800000 4.900000 16.698058 +0.800000 5.000000 16.726170 +0.800000 5.100000 16.774282 +0.800000 5.200000 16.842395 +0.800000 5.300000 16.930507 +0.800000 5.400000 17.038619 +0.800000 5.500000 17.166731 +0.800000 5.600000 17.314844 +0.800000 5.700000 17.482956 +0.800000 5.800000 17.671068 +0.800000 5.900000 17.879181 +0.800000 6.000000 18.107293 +0.800000 6.100000 18.355405 +0.800000 6.200000 18.623517 +0.800000 6.300000 18.911630 +0.800000 6.400000 19.219742 +0.800000 6.500000 19.547854 +0.800000 6.600000 19.895967 +0.800000 6.700000 20.264079 +0.800000 6.800000 20.652191 +0.800000 6.900000 21.060304 +0.800000 7.000000 21.488416 +0.800000 7.100000 21.936528 +0.800000 7.200000 22.404640 +0.800000 7.300000 22.892753 +0.800000 7.400000 23.400865 +0.800000 7.500000 23.928977 +0.800000 7.600000 24.477090 +0.800000 7.700000 25.045202 +0.800000 7.800000 25.633314 +0.800000 7.900000 26.241426 +0.800000 8.000000 26.869539 +0.800000 8.100000 27.517651 +0.800000 8.200000 28.185763 +0.800000 8.300000 28.873876 +0.800000 8.400000 29.581988 +0.800000 8.500000 30.310100 +0.800000 8.600000 31.058212 +0.800000 8.700000 31.826325 +0.800000 8.800000 32.614437 +0.800000 8.900000 33.422549 +0.800000 9.000000 34.250662 +0.800000 9.100000 35.098774 +0.800000 9.200000 35.966886 +0.800000 9.300000 36.854999 +0.800000 9.400000 37.763111 +0.800000 9.500000 38.691223 +0.800000 9.600000 39.639335 +0.800000 9.700000 40.607448 +0.800000 9.800000 41.595560 +0.800000 9.900000 42.603672 +0.800000 10.000000 43.631785 +0.800000 10.100000 44.679897 +0.800000 10.200000 45.748009 +0.800000 10.300000 46.836121 +0.800000 10.400000 47.944234 +0.800000 10.500000 49.072346 +0.800000 10.600000 50.220458 +0.800000 10.700000 51.388571 +0.800000 10.800000 52.576683 +0.800000 10.900000 53.784795 +0.800000 11.000000 55.012907 +0.800000 11.100000 56.261020 +0.800000 11.200000 57.529132 +0.800000 11.300000 58.817244 +0.800000 11.400000 60.125357 +0.800000 11.500000 61.453469 +0.800000 11.600000 62.801581 +0.800000 11.700000 64.169694 +0.800000 11.800000 65.557806 +0.800000 11.900000 66.965918 +0.800000 12.000000 68.394030 +0.800000 12.100000 69.842143 +0.800000 12.200000 71.310255 +0.800000 12.300000 72.798367 +0.800000 12.400000 74.306480 +0.800000 12.500000 75.834592 +0.800000 12.600000 77.382704 +0.800000 12.700000 78.950816 +0.800000 12.800000 80.538929 +0.800000 12.900000 82.147041 +0.800000 13.000000 83.775153 +0.800000 13.100000 85.423266 +0.800000 13.200000 87.091378 +0.800000 13.300000 88.779490 +0.800000 13.400000 90.487602 +0.800000 13.500000 92.215715 +0.800000 13.600000 93.963827 +0.800000 13.700000 95.731939 +0.800000 13.800000 97.520052 +0.800000 13.900000 99.328164 +0.800000 14.000000 101.156276 +0.800000 14.100000 103.004389 +0.800000 14.200000 104.872501 +0.800000 14.300000 106.760613 +0.800000 14.400000 108.668725 +0.800000 14.500000 110.596838 +0.800000 14.600000 112.544950 +0.800000 14.700000 114.513062 +0.800000 14.800000 116.501175 +0.800000 14.900000 118.509287 +0.800000 15.000000 120.537399 + +0.900000 -5.000000 109.521092 +0.900000 -4.900000 107.596643 +0.900000 -4.800000 105.692194 +0.900000 -4.700000 103.807745 +0.900000 -4.600000 101.943296 +0.900000 -4.500000 100.098847 +0.900000 -4.400000 98.274398 +0.900000 -4.300000 96.469949 +0.900000 -4.200000 94.685500 +0.900000 -4.100000 92.921051 +0.900000 -4.000000 91.176602 +0.900000 -3.900000 89.452153 +0.900000 -3.800000 87.747704 +0.900000 -3.700000 86.063255 +0.900000 -3.600000 84.398806 +0.900000 -3.500000 82.754357 +0.900000 -3.400000 81.129908 +0.900000 -3.300000 79.525459 +0.900000 -3.200000 77.941010 +0.900000 -3.100000 76.376561 +0.900000 -3.000000 74.832112 +0.900000 -2.900000 73.307663 +0.900000 -2.800000 71.803214 +0.900000 -2.700000 70.318765 +0.900000 -2.600000 68.854316 +0.900000 -2.500000 67.409867 +0.900000 -2.400000 65.985418 +0.900000 -2.300000 64.580969 +0.900000 -2.200000 63.196520 +0.900000 -2.100000 61.832071 +0.900000 -2.000000 60.487622 +0.900000 -1.900000 59.163173 +0.900000 -1.800000 57.858724 +0.900000 -1.700000 56.574275 +0.900000 -1.600000 55.309826 +0.900000 -1.500000 54.065377 +0.900000 -1.400000 52.840928 +0.900000 -1.300000 51.636479 +0.900000 -1.200000 50.452030 +0.900000 -1.100000 49.287581 +0.900000 -1.000000 48.143132 +0.900000 -0.900000 47.018683 +0.900000 -0.800000 45.914234 +0.900000 -0.700000 44.829785 +0.900000 -0.600000 43.765336 +0.900000 -0.500000 42.720887 +0.900000 -0.400000 41.696438 +0.900000 -0.300000 40.691989 +0.900000 -0.200000 39.707540 +0.900000 -0.100000 38.743091 +0.900000 -0.000000 37.798642 +0.900000 0.100000 36.874193 +0.900000 0.200000 35.969744 +0.900000 0.300000 35.085295 +0.900000 0.400000 34.220846 +0.900000 0.500000 33.376397 +0.900000 0.600000 32.551948 +0.900000 0.700000 31.747499 +0.900000 0.800000 30.963050 +0.900000 0.900000 30.198601 +0.900000 1.000000 29.454152 +0.900000 1.100000 28.729703 +0.900000 1.200000 28.025254 +0.900000 1.300000 27.340805 +0.900000 1.400000 26.676356 +0.900000 1.500000 26.031907 +0.900000 1.600000 25.407458 +0.900000 1.700000 24.803009 +0.900000 1.800000 24.218560 +0.900000 1.900000 23.654111 +0.900000 2.000000 23.109662 +0.900000 2.100000 22.585213 +0.900000 2.200000 22.080764 +0.900000 2.300000 21.596315 +0.900000 2.400000 21.131866 +0.900000 2.500000 20.687417 +0.900000 2.600000 20.262968 +0.900000 2.700000 19.858519 +0.900000 2.800000 19.474070 +0.900000 2.900000 19.109621 +0.900000 3.000000 18.765172 +0.900000 3.100000 18.440723 +0.900000 3.200000 18.136274 +0.900000 3.300000 17.851825 +0.900000 3.400000 17.587376 +0.900000 3.500000 17.342927 +0.900000 3.600000 17.118478 +0.900000 3.700000 16.914029 +0.900000 3.800000 16.729580 +0.900000 3.900000 16.565131 +0.900000 4.000000 16.420682 +0.900000 4.100000 16.296233 +0.900000 4.200000 16.191784 +0.900000 4.300000 16.107335 +0.900000 4.400000 16.042886 +0.900000 4.500000 15.998437 +0.900000 4.600000 15.973988 +0.900000 4.700000 15.969539 +0.900000 4.800000 15.985090 +0.900000 4.900000 16.020641 +0.900000 5.000000 16.076192 +0.900000 5.100000 16.151743 +0.900000 5.200000 16.247294 +0.900000 5.300000 16.362845 +0.900000 5.400000 16.498396 +0.900000 5.500000 16.653947 +0.900000 5.600000 16.829498 +0.900000 5.700000 17.025049 +0.900000 5.800000 17.240600 +0.900000 5.900000 17.476151 +0.900000 6.000000 17.731702 +0.900000 6.100000 18.007253 +0.900000 6.200000 18.302804 +0.900000 6.300000 18.618355 +0.900000 6.400000 18.953906 +0.900000 6.500000 19.309457 +0.900000 6.600000 19.685008 +0.900000 6.700000 20.080559 +0.900000 6.800000 20.496110 +0.900000 6.900000 20.931661 +0.900000 7.000000 21.387212 +0.900000 7.100000 21.862763 +0.900000 7.200000 22.358314 +0.900000 7.300000 22.873865 +0.900000 7.400000 23.409416 +0.900000 7.500000 23.964967 +0.900000 7.600000 24.540518 +0.900000 7.700000 25.136069 +0.900000 7.800000 25.751620 +0.900000 7.900000 26.387172 +0.900000 8.000000 27.042723 +0.900000 8.100000 27.718274 +0.900000 8.200000 28.413825 +0.900000 8.300000 29.129376 +0.900000 8.400000 29.864927 +0.900000 8.500000 30.620478 +0.900000 8.600000 31.396029 +0.900000 8.700000 32.191580 +0.900000 8.800000 33.007131 +0.900000 8.900000 33.842682 +0.900000 9.000000 34.698233 +0.900000 9.100000 35.573784 +0.900000 9.200000 36.469335 +0.900000 9.300000 37.384886 +0.900000 9.400000 38.320437 +0.900000 9.500000 39.275988 +0.900000 9.600000 40.251539 +0.900000 9.700000 41.247090 +0.900000 9.800000 42.262641 +0.900000 9.900000 43.298192 +0.900000 10.000000 44.353743 +0.900000 10.100000 45.429294 +0.900000 10.200000 46.524845 +0.900000 10.300000 47.640396 +0.900000 10.400000 48.775947 +0.900000 10.500000 49.931498 +0.900000 10.600000 51.107049 +0.900000 10.700000 52.302600 +0.900000 10.800000 53.518151 +0.900000 10.900000 54.753702 +0.900000 11.000000 56.009253 +0.900000 11.100000 57.284804 +0.900000 11.200000 58.580355 +0.900000 11.300000 59.895906 +0.900000 11.400000 61.231457 +0.900000 11.500000 62.587008 +0.900000 11.600000 63.962559 +0.900000 11.700000 65.358110 +0.900000 11.800000 66.773661 +0.900000 11.900000 68.209212 +0.900000 12.000000 69.664763 +0.900000 12.100000 71.140314 +0.900000 12.200000 72.635865 +0.900000 12.300000 74.151416 +0.900000 12.400000 75.686967 +0.900000 12.500000 77.242518 +0.900000 12.600000 78.818069 +0.900000 12.700000 80.413620 +0.900000 12.800000 82.029171 +0.900000 12.900000 83.664722 +0.900000 13.000000 85.320273 +0.900000 13.100000 86.995824 +0.900000 13.200000 88.691375 +0.900000 13.300000 90.406926 +0.900000 13.400000 92.142477 +0.900000 13.500000 93.898028 +0.900000 13.600000 95.673579 +0.900000 13.700000 97.469130 +0.900000 13.800000 99.284681 +0.900000 13.900000 101.120232 +0.900000 14.000000 102.975783 +0.900000 14.100000 104.851334 +0.900000 14.200000 106.746885 +0.900000 14.300000 108.662436 +0.900000 14.400000 110.597987 +0.900000 14.500000 112.553538 +0.900000 14.600000 114.529089 +0.900000 14.700000 116.524640 +0.900000 14.800000 118.540191 +0.900000 14.900000 120.575742 +0.900000 15.000000 122.631293 + +1.000000 -5.000000 106.154526 +1.000000 -4.900000 104.256999 +1.000000 -4.800000 102.379472 +1.000000 -4.700000 100.521945 +1.000000 -4.600000 98.684418 +1.000000 -4.500000 96.866891 +1.000000 -4.400000 95.069364 +1.000000 -4.300000 93.291837 +1.000000 -4.200000 91.534310 +1.000000 -4.100000 89.796783 +1.000000 -4.000000 88.079256 +1.000000 -3.900000 86.381729 +1.000000 -3.800000 84.704202 +1.000000 -3.700000 83.046675 +1.000000 -3.600000 81.409148 +1.000000 -3.500000 79.791621 +1.000000 -3.400000 78.194094 +1.000000 -3.300000 76.616567 +1.000000 -3.200000 75.059040 +1.000000 -3.100000 73.521513 +1.000000 -3.000000 72.003986 +1.000000 -2.900000 70.506459 +1.000000 -2.800000 69.028932 +1.000000 -2.700000 67.571405 +1.000000 -2.600000 66.133878 +1.000000 -2.500000 64.716351 +1.000000 -2.400000 63.318824 +1.000000 -2.300000 61.941297 +1.000000 -2.200000 60.583770 +1.000000 -2.100000 59.246243 +1.000000 -2.000000 57.928716 +1.000000 -1.900000 56.631189 +1.000000 -1.800000 55.353662 +1.000000 -1.700000 54.096135 +1.000000 -1.600000 52.858608 +1.000000 -1.500000 51.641081 +1.000000 -1.400000 50.443554 +1.000000 -1.300000 49.266027 +1.000000 -1.200000 48.108500 +1.000000 -1.100000 46.970973 +1.000000 -1.000000 45.853446 +1.000000 -0.900000 44.755919 +1.000000 -0.800000 43.678392 +1.000000 -0.700000 42.620865 +1.000000 -0.600000 41.583338 +1.000000 -0.500000 40.565811 +1.000000 -0.400000 39.568284 +1.000000 -0.300000 38.590757 +1.000000 -0.200000 37.633230 +1.000000 -0.100000 36.695703 +1.000000 -0.000000 35.778176 +1.000000 0.100000 34.880649 +1.000000 0.200000 34.003122 +1.000000 0.300000 33.145595 +1.000000 0.400000 32.308068 +1.000000 0.500000 31.490541 +1.000000 0.600000 30.693014 +1.000000 0.700000 29.915487 +1.000000 0.800000 29.157960 +1.000000 0.900000 28.420433 +1.000000 1.000000 27.702906 +1.000000 1.100000 27.005379 +1.000000 1.200000 26.327852 +1.000000 1.300000 25.670325 +1.000000 1.400000 25.032797 +1.000000 1.500000 24.415270 +1.000000 1.600000 23.817743 +1.000000 1.700000 23.240216 +1.000000 1.800000 22.682689 +1.000000 1.900000 22.145162 +1.000000 2.000000 21.627635 +1.000000 2.100000 21.130108 +1.000000 2.200000 20.652581 +1.000000 2.300000 20.195054 +1.000000 2.400000 19.757527 +1.000000 2.500000 19.340000 +1.000000 2.600000 18.942473 +1.000000 2.700000 18.564946 +1.000000 2.800000 18.207419 +1.000000 2.900000 17.869892 +1.000000 3.000000 17.552365 +1.000000 3.100000 17.254838 +1.000000 3.200000 16.977311 +1.000000 3.300000 16.719784 +1.000000 3.400000 16.482257 +1.000000 3.500000 16.264730 +1.000000 3.600000 16.067203 +1.000000 3.700000 15.889676 +1.000000 3.800000 15.732149 +1.000000 3.900000 15.594622 +1.000000 4.000000 15.477095 +1.000000 4.100000 15.379568 +1.000000 4.200000 15.302041 +1.000000 4.300000 15.244514 +1.000000 4.400000 15.206987 +1.000000 4.500000 15.189460 +1.000000 4.600000 15.191933 +1.000000 4.700000 15.214406 +1.000000 4.800000 15.256879 +1.000000 4.900000 15.319352 +1.000000 5.000000 15.401825 +1.000000 5.100000 15.504298 +1.000000 5.200000 15.626771 +1.000000 5.300000 15.769244 +1.000000 5.400000 15.931717 +1.000000 5.500000 16.114190 +1.000000 5.600000 16.316663 +1.000000 5.700000 16.539136 +1.000000 5.800000 16.781609 +1.000000 5.900000 17.044082 +1.000000 6.000000 17.326555 +1.000000 6.100000 17.629028 +1.000000 6.200000 17.951501 +1.000000 6.300000 18.293974 +1.000000 6.400000 18.656447 +1.000000 6.500000 19.038920 +1.000000 6.600000 19.441393 +1.000000 6.700000 19.863866 +1.000000 6.800000 20.306339 +1.000000 6.900000 20.768812 +1.000000 7.000000 21.251285 +1.000000 7.100000 21.753758 +1.000000 7.200000 22.276231 +1.000000 7.300000 22.818704 +1.000000 7.400000 23.381177 +1.000000 7.500000 23.963650 +1.000000 7.600000 24.566123 +1.000000 7.700000 25.188596 +1.000000 7.800000 25.831068 +1.000000 7.900000 26.493541 +1.000000 8.000000 27.176014 +1.000000 8.100000 27.878487 +1.000000 8.200000 28.600960 +1.000000 8.300000 29.343433 +1.000000 8.400000 30.105906 +1.000000 8.500000 30.888379 +1.000000 8.600000 31.690852 +1.000000 8.700000 32.513325 +1.000000 8.800000 33.355798 +1.000000 8.900000 34.218271 +1.000000 9.000000 35.100744 +1.000000 9.100000 36.003217 +1.000000 9.200000 36.925690 +1.000000 9.300000 37.868163 +1.000000 9.400000 38.830636 +1.000000 9.500000 39.813109 +1.000000 9.600000 40.815582 +1.000000 9.700000 41.838055 +1.000000 9.800000 42.880528 +1.000000 9.900000 43.943001 +1.000000 10.000000 45.025474 +1.000000 10.100000 46.127947 +1.000000 10.200000 47.250420 +1.000000 10.300000 48.392893 +1.000000 10.400000 49.555366 +1.000000 10.500000 50.737839 +1.000000 10.600000 51.940312 +1.000000 10.700000 53.162785 +1.000000 10.800000 54.405258 +1.000000 10.900000 55.667731 +1.000000 11.000000 56.950204 +1.000000 11.100000 58.252677 +1.000000 11.200000 59.575150 +1.000000 11.300000 60.917623 +1.000000 11.400000 62.280096 +1.000000 11.500000 63.662569 +1.000000 11.600000 65.065042 +1.000000 11.700000 66.487515 +1.000000 11.800000 67.929988 +1.000000 11.900000 69.392461 +1.000000 12.000000 70.874934 +1.000000 12.100000 72.377407 +1.000000 12.200000 73.899880 +1.000000 12.300000 75.442353 +1.000000 12.400000 77.004826 +1.000000 12.500000 78.587299 +1.000000 12.600000 80.189772 +1.000000 12.700000 81.812245 +1.000000 12.800000 83.454718 +1.000000 12.900000 85.117191 +1.000000 13.000000 86.799664 +1.000000 13.100000 88.502137 +1.000000 13.200000 90.224610 +1.000000 13.300000 91.967083 +1.000000 13.400000 93.729556 +1.000000 13.500000 95.512029 +1.000000 13.600000 97.314502 +1.000000 13.700000 99.136975 +1.000000 13.800000 100.979448 +1.000000 13.900000 102.841921 +1.000000 14.000000 104.724394 +1.000000 14.100000 106.626866 +1.000000 14.200000 108.549339 +1.000000 14.300000 110.491812 +1.000000 14.400000 112.454285 +1.000000 14.500000 114.436758 +1.000000 14.600000 116.439231 +1.000000 14.700000 118.461704 +1.000000 14.800000 120.504177 +1.000000 14.900000 122.566650 +1.000000 15.000000 124.649123 + +1.100000 -5.000000 102.820959 +1.100000 -4.900000 100.949838 +1.100000 -4.800000 99.098716 +1.100000 -4.700000 97.267594 +1.100000 -4.600000 95.456472 +1.100000 -4.500000 93.665351 +1.100000 -4.400000 91.894229 +1.100000 -4.300000 90.143107 +1.100000 -4.200000 88.411985 +1.100000 -4.100000 86.700864 +1.100000 -4.000000 85.009742 +1.100000 -3.900000 83.338620 +1.100000 -3.800000 81.687498 +1.100000 -3.700000 80.056376 +1.100000 -3.600000 78.445255 +1.100000 -3.500000 76.854133 +1.100000 -3.400000 75.283011 +1.100000 -3.300000 73.731889 +1.100000 -3.200000 72.200768 +1.100000 -3.100000 70.689646 +1.100000 -3.000000 69.198524 +1.100000 -2.900000 67.727402 +1.100000 -2.800000 66.276280 +1.100000 -2.700000 64.845159 +1.100000 -2.600000 63.434037 +1.100000 -2.500000 62.042915 +1.100000 -2.400000 60.671793 +1.100000 -2.300000 59.320672 +1.100000 -2.200000 57.989550 +1.100000 -2.100000 56.678428 +1.100000 -2.000000 55.387306 +1.100000 -1.900000 54.116184 +1.100000 -1.800000 52.865063 +1.100000 -1.700000 51.633941 +1.100000 -1.600000 50.422819 +1.100000 -1.500000 49.231697 +1.100000 -1.400000 48.060576 +1.100000 -1.300000 46.909454 +1.100000 -1.200000 45.778332 +1.100000 -1.100000 44.667210 +1.100000 -1.000000 43.576088 +1.100000 -0.900000 42.504967 +1.100000 -0.800000 41.453845 +1.100000 -0.700000 40.422723 +1.100000 -0.600000 39.411601 +1.100000 -0.500000 38.420480 +1.100000 -0.400000 37.449358 +1.100000 -0.300000 36.498236 +1.100000 -0.200000 35.567114 +1.100000 -0.100000 34.655992 +1.100000 -0.000000 33.764871 +1.100000 0.100000 32.893749 +1.100000 0.200000 32.042627 +1.100000 0.300000 31.211505 +1.100000 0.400000 30.400384 +1.100000 0.500000 29.609262 +1.100000 0.600000 28.838140 +1.100000 0.700000 28.087018 +1.100000 0.800000 27.355896 +1.100000 0.900000 26.644775 +1.100000 1.000000 25.953653 +1.100000 1.100000 25.282531 +1.100000 1.200000 24.631409 +1.100000 1.300000 24.000288 +1.100000 1.400000 23.389166 +1.100000 1.500000 22.798044 +1.100000 1.600000 22.226922 +1.100000 1.700000 21.675800 +1.100000 1.800000 21.144679 +1.100000 1.900000 20.633557 +1.100000 2.000000 20.142435 +1.100000 2.100000 19.671313 +1.100000 2.200000 19.220192 +1.100000 2.300000 18.789070 +1.100000 2.400000 18.377948 +1.100000 2.500000 17.986826 +1.100000 2.600000 17.615704 +1.100000 2.700000 17.264583 +1.100000 2.800000 16.933461 +1.100000 2.900000 16.622339 +1.100000 3.000000 16.331217 +1.100000 3.100000 16.060096 +1.100000 3.200000 15.808974 +1.100000 3.300000 15.577852 +1.100000 3.400000 15.366730 +1.100000 3.500000 15.175608 +1.100000 3.600000 15.004487 +1.100000 3.700000 14.853365 +1.100000 3.800000 14.722243 +1.100000 3.900000 14.611121 +1.100000 4.000000 14.520000 +1.100000 4.100000 14.448878 +1.100000 4.200000 14.397756 +1.100000 4.300000 14.366634 +1.100000 4.400000 14.355513 +1.100000 4.500000 14.364391 +1.100000 4.600000 14.393269 +1.100000 4.700000 14.442147 +1.100000 4.800000 14.511025 +1.100000 4.900000 14.599904 +1.100000 5.000000 14.708782 +1.100000 5.100000 14.837660 +1.100000 5.200000 14.986538 +1.100000 5.300000 15.155417 +1.100000 5.400000 15.344295 +1.100000 5.500000 15.553173 +1.100000 5.600000 15.782051 +1.100000 5.700000 16.030929 +1.100000 5.800000 16.299808 +1.100000 5.900000 16.588686 +1.100000 6.000000 16.897564 +1.100000 6.100000 17.226442 +1.100000 6.200000 17.575321 +1.100000 6.300000 17.944199 +1.100000 6.400000 18.333077 +1.100000 6.500000 18.741955 +1.100000 6.600000 19.170833 +1.100000 6.700000 19.619712 +1.100000 6.800000 20.088590 +1.100000 6.900000 20.577468 +1.100000 7.000000 21.086346 +1.100000 7.100000 21.615225 +1.100000 7.200000 22.164103 +1.100000 7.300000 22.732981 +1.100000 7.400000 23.321859 +1.100000 7.500000 23.930737 +1.100000 7.600000 24.559616 +1.100000 7.700000 25.208494 +1.100000 7.800000 25.877372 +1.100000 7.900000 26.566250 +1.100000 8.000000 27.275129 +1.100000 8.100000 28.004007 +1.100000 8.200000 28.752885 +1.100000 8.300000 29.521763 +1.100000 8.400000 30.310641 +1.100000 8.500000 31.119520 +1.100000 8.600000 31.948398 +1.100000 8.700000 32.797276 +1.100000 8.800000 33.666154 +1.100000 8.900000 34.555033 +1.100000 9.000000 35.463911 +1.100000 9.100000 36.392789 +1.100000 9.200000 37.341667 +1.100000 9.300000 38.310545 +1.100000 9.400000 39.299424 +1.100000 9.500000 40.308302 +1.100000 9.600000 41.337180 +1.100000 9.700000 42.386058 +1.100000 9.800000 43.454937 +1.100000 9.900000 44.543815 +1.100000 10.000000 45.652693 +1.100000 10.100000 46.781571 +1.100000 10.200000 47.930449 +1.100000 10.300000 49.099328 +1.100000 10.400000 50.288206 +1.100000 10.500000 51.497084 +1.100000 10.600000 52.725962 +1.100000 10.700000 53.974841 +1.100000 10.800000 55.243719 +1.100000 10.900000 56.532597 +1.100000 11.000000 57.841475 +1.100000 11.100000 59.170353 +1.100000 11.200000 60.519232 +1.100000 11.300000 61.888110 +1.100000 11.400000 63.276988 +1.100000 11.500000 64.685866 +1.100000 11.600000 66.114745 +1.100000 11.700000 67.563623 +1.100000 11.800000 69.032501 +1.100000 11.900000 70.521379 +1.100000 12.000000 72.030258 +1.100000 12.100000 73.559136 +1.100000 12.200000 75.108014 +1.100000 12.300000 76.676892 +1.100000 12.400000 78.265770 +1.100000 12.500000 79.874649 +1.100000 12.600000 81.503527 +1.100000 12.700000 83.152405 +1.100000 12.800000 84.821283 +1.100000 12.900000 86.510162 +1.100000 13.000000 88.219040 +1.100000 13.100000 89.947918 +1.100000 13.200000 91.696796 +1.100000 13.300000 93.465674 +1.100000 13.400000 95.254553 +1.100000 13.500000 97.063431 +1.100000 13.600000 98.892309 +1.100000 13.700000 100.741187 +1.100000 13.800000 102.610066 +1.100000 13.900000 104.498944 +1.100000 14.000000 106.407822 +1.100000 14.100000 108.336700 +1.100000 14.200000 110.285578 +1.100000 14.300000 112.254457 +1.100000 14.400000 114.243335 +1.100000 14.500000 116.252213 +1.100000 14.600000 118.281091 +1.100000 14.700000 120.329970 +1.100000 14.800000 122.398848 +1.100000 14.900000 124.487726 +1.100000 15.000000 126.596604 + +1.200000 -5.000000 99.526663 +1.200000 -4.900000 97.681429 +1.200000 -4.800000 95.856196 +1.200000 -4.700000 94.050963 +1.200000 -4.600000 92.265730 +1.200000 -4.500000 90.500496 +1.200000 -4.400000 88.755263 +1.200000 -4.300000 87.030030 +1.200000 -4.200000 85.324796 +1.200000 -4.100000 83.639563 +1.200000 -4.000000 81.974330 +1.200000 -3.900000 80.329097 +1.200000 -3.800000 78.703863 +1.200000 -3.700000 77.098630 +1.200000 -3.600000 75.513397 +1.200000 -3.500000 73.948163 +1.200000 -3.400000 72.402930 +1.200000 -3.300000 70.877697 +1.200000 -3.200000 69.372464 +1.200000 -3.100000 67.887230 +1.200000 -3.000000 66.421997 +1.200000 -2.900000 64.976764 +1.200000 -2.800000 63.551531 +1.200000 -2.700000 62.146297 +1.200000 -2.600000 60.761064 +1.200000 -2.500000 59.395831 +1.200000 -2.400000 58.050597 +1.200000 -2.300000 56.725364 +1.200000 -2.200000 55.420131 +1.200000 -2.100000 54.134898 +1.200000 -2.000000 52.869664 +1.200000 -1.900000 51.624431 +1.200000 -1.800000 50.399198 +1.200000 -1.700000 49.193965 +1.200000 -1.600000 48.008731 +1.200000 -1.500000 46.843498 +1.200000 -1.400000 45.698265 +1.200000 -1.300000 44.573031 +1.200000 -1.200000 43.467798 +1.200000 -1.100000 42.382565 +1.200000 -1.000000 41.317332 +1.200000 -0.900000 40.272098 +1.200000 -0.800000 39.246865 +1.200000 -0.700000 38.241632 +1.200000 -0.600000 37.256399 +1.200000 -0.500000 36.291165 +1.200000 -0.400000 35.345932 +1.200000 -0.300000 34.420699 +1.200000 -0.200000 33.515465 +1.200000 -0.100000 32.630232 +1.200000 -0.000000 31.764999 +1.200000 0.100000 30.919766 +1.200000 0.200000 30.094532 +1.200000 0.300000 29.289299 +1.200000 0.400000 28.504066 +1.200000 0.500000 27.738832 +1.200000 0.600000 26.993599 +1.200000 0.700000 26.268366 +1.200000 0.800000 25.563133 +1.200000 0.900000 24.877899 +1.200000 1.000000 24.212666 +1.200000 1.100000 23.567433 +1.200000 1.200000 22.942200 +1.200000 1.300000 22.336966 +1.200000 1.400000 21.751733 +1.200000 1.500000 21.186500 +1.200000 1.600000 20.641266 +1.200000 1.700000 20.116033 +1.200000 1.800000 19.610800 +1.200000 1.900000 19.125567 +1.200000 2.000000 18.660333 +1.200000 2.100000 18.215100 +1.200000 2.200000 17.789867 +1.200000 2.300000 17.384634 +1.200000 2.400000 16.999400 +1.200000 2.500000 16.634167 +1.200000 2.600000 16.288934 +1.200000 2.700000 15.963700 +1.200000 2.800000 15.658467 +1.200000 2.900000 15.373234 +1.200000 3.000000 15.108001 +1.200000 3.100000 14.862767 +1.200000 3.200000 14.637534 +1.200000 3.300000 14.432301 +1.200000 3.400000 14.247067 +1.200000 3.500000 14.081834 +1.200000 3.600000 13.936601 +1.200000 3.700000 13.811368 +1.200000 3.800000 13.706134 +1.200000 3.900000 13.620901 +1.200000 4.000000 13.555668 +1.200000 4.100000 13.510435 +1.200000 4.200000 13.485201 +1.200000 4.300000 13.479968 +1.200000 4.400000 13.494735 +1.200000 4.500000 13.529501 +1.200000 4.600000 13.584268 +1.200000 4.700000 13.659035 +1.200000 4.800000 13.753802 +1.200000 4.900000 13.868568 +1.200000 5.000000 14.003335 +1.200000 5.100000 14.158102 +1.200000 5.200000 14.332869 +1.200000 5.300000 14.527635 +1.200000 5.400000 14.742402 +1.200000 5.500000 14.977169 +1.200000 5.600000 15.231935 +1.200000 5.700000 15.506702 +1.200000 5.800000 15.801469 +1.200000 5.900000 16.116236 +1.200000 6.000000 16.451002 +1.200000 6.100000 16.805769 +1.200000 6.200000 17.180536 +1.200000 6.300000 17.575303 +1.200000 6.400000 17.990069 +1.200000 6.500000 18.424836 +1.200000 6.600000 18.879603 +1.200000 6.700000 19.354369 +1.200000 6.800000 19.849136 +1.200000 6.900000 20.363903 +1.200000 7.000000 20.898670 +1.200000 7.100000 21.453436 +1.200000 7.200000 22.028203 +1.200000 7.300000 22.622970 +1.200000 7.400000 23.237736 +1.200000 7.500000 23.872503 +1.200000 7.600000 24.527270 +1.200000 7.700000 25.202037 +1.200000 7.800000 25.896803 +1.200000 7.900000 26.611570 +1.200000 8.000000 27.346337 +1.200000 8.100000 28.101104 +1.200000 8.200000 28.875870 +1.200000 8.300000 29.670637 +1.200000 8.400000 30.485404 +1.200000 8.500000 31.320170 +1.200000 8.600000 32.174937 +1.200000 8.700000 33.049704 +1.200000 8.800000 33.944471 +1.200000 8.900000 34.859237 +1.200000 9.000000 35.794004 +1.200000 9.100000 36.748771 +1.200000 9.200000 37.723538 +1.200000 9.300000 38.718304 +1.200000 9.400000 39.733071 +1.200000 9.500000 40.767838 +1.200000 9.600000 41.822604 +1.200000 9.700000 42.897371 +1.200000 9.800000 43.992138 +1.200000 9.900000 45.106905 +1.200000 10.000000 46.241671 +1.200000 10.100000 47.396438 +1.200000 10.200000 48.571205 +1.200000 10.300000 49.765972 +1.200000 10.400000 50.980738 +1.200000 10.500000 52.215505 +1.200000 10.600000 53.470272 +1.200000 10.700000 54.745038 +1.200000 10.800000 56.039805 +1.200000 10.900000 57.354572 +1.200000 11.000000 58.689339 +1.200000 11.100000 60.044105 +1.200000 11.200000 61.418872 +1.200000 11.300000 62.813639 +1.200000 11.400000 64.228405 +1.200000 11.500000 65.663172 +1.200000 11.600000 67.117939 +1.200000 11.700000 68.592706 +1.200000 11.800000 70.087472 +1.200000 11.900000 71.602239 +1.200000 12.000000 73.137006 +1.200000 12.100000 74.691773 +1.200000 12.200000 76.266539 +1.200000 12.300000 77.861306 +1.200000 12.400000 79.476073 +1.200000 12.500000 81.110839 +1.200000 12.600000 82.765606 +1.200000 12.700000 84.440373 +1.200000 12.800000 86.135140 +1.200000 12.900000 87.849906 +1.200000 13.000000 89.584673 +1.200000 13.100000 91.339440 +1.200000 13.200000 93.114207 +1.200000 13.300000 94.908973 +1.200000 13.400000 96.723740 +1.200000 13.500000 98.558507 +1.200000 13.600000 100.413273 +1.200000 13.700000 102.288040 +1.200000 13.800000 104.182807 +1.200000 13.900000 106.097574 +1.200000 14.000000 108.032340 +1.200000 14.100000 109.987107 +1.200000 14.200000 111.961874 +1.200000 14.300000 113.956640 +1.200000 14.400000 115.971407 +1.200000 14.500000 118.006174 +1.200000 14.600000 120.060941 +1.200000 14.700000 122.135707 +1.200000 14.800000 124.230474 +1.200000 14.900000 126.345241 +1.200000 15.000000 128.480008 + +1.300000 -5.000000 96.278383 +1.300000 -4.900000 94.458521 +1.300000 -4.800000 92.658660 +1.300000 -4.700000 90.878798 +1.300000 -4.600000 89.118937 +1.300000 -4.500000 87.379075 +1.300000 -4.400000 85.659214 +1.300000 -4.300000 83.959352 +1.300000 -4.200000 82.279491 +1.300000 -4.100000 80.619629 +1.300000 -4.000000 78.979768 +1.300000 -3.900000 77.359906 +1.300000 -3.800000 75.760045 +1.300000 -3.700000 74.180183 +1.300000 -3.600000 72.620322 +1.300000 -3.500000 71.080460 +1.300000 -3.400000 69.560599 +1.300000 -3.300000 68.060737 +1.300000 -3.200000 66.580875 +1.300000 -3.100000 65.121014 +1.300000 -3.000000 63.681152 +1.300000 -2.900000 62.261291 +1.300000 -2.800000 60.861429 +1.300000 -2.700000 59.481568 +1.300000 -2.600000 58.121706 +1.300000 -2.500000 56.781845 +1.300000 -2.400000 55.461983 +1.300000 -2.300000 54.162122 +1.300000 -2.200000 52.882260 +1.300000 -2.100000 51.622399 +1.300000 -2.000000 50.382537 +1.300000 -1.900000 49.162676 +1.300000 -1.800000 47.962814 +1.300000 -1.700000 46.782953 +1.300000 -1.600000 45.623091 +1.300000 -1.500000 44.483230 +1.300000 -1.400000 43.363368 +1.300000 -1.300000 42.263507 +1.300000 -1.200000 41.183645 +1.300000 -1.100000 40.123784 +1.300000 -1.000000 39.083922 +1.300000 -0.900000 38.064061 +1.300000 -0.800000 37.064199 +1.300000 -0.700000 36.084338 +1.300000 -0.600000 35.124476 +1.300000 -0.500000 34.184615 +1.300000 -0.400000 33.264753 +1.300000 -0.300000 32.364892 +1.300000 -0.200000 31.485030 +1.300000 -0.100000 30.625169 +1.300000 -0.000000 29.785307 +1.300000 0.100000 28.965446 +1.300000 0.200000 28.165584 +1.300000 0.300000 27.385723 +1.300000 0.400000 26.625861 +1.300000 0.500000 25.886000 +1.300000 0.600000 25.166138 +1.300000 0.700000 24.466277 +1.300000 0.800000 23.786415 +1.300000 0.900000 23.126554 +1.300000 1.000000 22.486692 +1.300000 1.100000 21.866830 +1.300000 1.200000 21.266969 +1.300000 1.300000 20.687107 +1.300000 1.400000 20.127246 +1.300000 1.500000 19.587384 +1.300000 1.600000 19.067523 +1.300000 1.700000 18.567661 +1.300000 1.800000 18.087800 +1.300000 1.900000 17.627938 +1.300000 2.000000 17.188077 +1.300000 2.100000 16.768215 +1.300000 2.200000 16.368354 +1.300000 2.300000 15.988492 +1.300000 2.400000 15.628631 +1.300000 2.500000 15.288769 +1.300000 2.600000 14.968908 +1.300000 2.700000 14.669046 +1.300000 2.800000 14.389185 +1.300000 2.900000 14.129323 +1.300000 3.000000 13.889462 +1.300000 3.100000 13.669600 +1.300000 3.200000 13.469739 +1.300000 3.300000 13.289877 +1.300000 3.400000 13.130016 +1.300000 3.500000 12.990154 +1.300000 3.600000 12.870293 +1.300000 3.700000 12.770431 +1.300000 3.800000 12.690570 +1.300000 3.900000 12.630708 +1.300000 4.000000 12.590847 +1.300000 4.100000 12.570985 +1.300000 4.200000 12.571124 +1.300000 4.300000 12.591262 +1.300000 4.400000 12.631401 +1.300000 4.500000 12.691539 +1.300000 4.600000 12.771678 +1.300000 4.700000 12.871816 +1.300000 4.800000 12.991955 +1.300000 4.900000 13.132093 +1.300000 5.000000 13.292232 +1.300000 5.100000 13.472370 +1.300000 5.200000 13.672508 +1.300000 5.300000 13.892647 +1.300000 5.400000 14.132785 +1.300000 5.500000 14.392924 +1.300000 5.600000 14.673062 +1.300000 5.700000 14.973201 +1.300000 5.800000 15.293339 +1.300000 5.900000 15.633478 +1.300000 6.000000 15.993616 +1.300000 6.100000 16.373755 +1.300000 6.200000 16.773893 +1.300000 6.300000 17.194032 +1.300000 6.400000 17.634170 +1.300000 6.500000 18.094309 +1.300000 6.600000 18.574447 +1.300000 6.700000 19.074586 +1.300000 6.800000 19.594724 +1.300000 6.900000 20.134863 +1.300000 7.000000 20.695001 +1.300000 7.100000 21.275140 +1.300000 7.200000 21.875278 +1.300000 7.300000 22.495417 +1.300000 7.400000 23.135555 +1.300000 7.500000 23.795694 +1.300000 7.600000 24.475832 +1.300000 7.700000 25.175971 +1.300000 7.800000 25.896109 +1.300000 7.900000 26.636248 +1.300000 8.000000 27.396386 +1.300000 8.100000 28.176525 +1.300000 8.200000 28.976663 +1.300000 8.300000 29.796802 +1.300000 8.400000 30.636940 +1.300000 8.500000 31.497079 +1.300000 8.600000 32.377217 +1.300000 8.700000 33.277356 +1.300000 8.800000 34.197494 +1.300000 8.900000 35.137633 +1.300000 9.000000 36.097771 +1.300000 9.100000 37.077910 +1.300000 9.200000 38.078048 +1.300000 9.300000 39.098186 +1.300000 9.400000 40.138325 +1.300000 9.500000 41.198463 +1.300000 9.600000 42.278602 +1.300000 9.700000 43.378740 +1.300000 9.800000 44.498879 +1.300000 9.900000 45.639017 +1.300000 10.000000 46.799156 +1.300000 10.100000 47.979294 +1.300000 10.200000 49.179433 +1.300000 10.300000 50.399571 +1.300000 10.400000 51.639710 +1.300000 10.500000 52.899848 +1.300000 10.600000 54.179987 +1.300000 10.700000 55.480125 +1.300000 10.800000 56.800264 +1.300000 10.900000 58.140402 +1.300000 11.000000 59.500541 +1.300000 11.100000 60.880679 +1.300000 11.200000 62.280818 +1.300000 11.300000 63.700956 +1.300000 11.400000 65.141095 +1.300000 11.500000 66.601233 +1.300000 11.600000 68.081372 +1.300000 11.700000 69.581510 +1.300000 11.800000 71.101649 +1.300000 11.900000 72.641787 +1.300000 12.000000 74.201926 +1.300000 12.100000 75.782064 +1.300000 12.200000 77.382203 +1.300000 12.300000 79.002341 +1.300000 12.400000 80.642480 +1.300000 12.500000 82.302618 +1.300000 12.600000 83.982757 +1.300000 12.700000 85.682895 +1.300000 12.800000 87.403034 +1.300000 12.900000 89.143172 +1.300000 13.000000 90.903311 +1.300000 13.100000 92.683449 +1.300000 13.200000 94.483588 +1.300000 13.300000 96.303726 +1.300000 13.400000 98.143864 +1.300000 13.500000 100.004003 +1.300000 13.600000 101.884141 +1.300000 13.700000 103.784280 +1.300000 13.800000 105.704418 +1.300000 13.900000 107.644557 +1.300000 14.000000 109.604695 +1.300000 14.100000 111.584834 +1.300000 14.200000 113.584972 +1.300000 14.300000 115.605111 +1.300000 14.400000 117.645249 +1.300000 14.500000 119.705388 +1.300000 14.600000 121.785526 +1.300000 14.700000 123.885665 +1.300000 14.800000 126.005803 +1.300000 14.900000 128.145942 +1.300000 15.000000 130.306080 + +1.400000 -5.000000 93.083254 +1.400000 -4.900000 91.288248 +1.400000 -4.800000 89.513241 +1.400000 -4.700000 87.758235 +1.400000 -4.600000 86.023228 +1.400000 -4.500000 84.308222 +1.400000 -4.400000 82.613215 +1.400000 -4.300000 80.938209 +1.400000 -4.200000 79.283202 +1.400000 -4.100000 77.648196 +1.400000 -4.000000 76.033189 +1.400000 -3.900000 74.438183 +1.400000 -3.800000 72.863176 +1.400000 -3.700000 71.308170 +1.400000 -3.600000 69.773163 +1.400000 -3.500000 68.258157 +1.400000 -3.400000 66.763150 +1.400000 -3.300000 65.288144 +1.400000 -3.200000 63.833137 +1.400000 -3.100000 62.398131 +1.400000 -3.000000 60.983124 +1.400000 -2.900000 59.588118 +1.400000 -2.800000 58.213111 +1.400000 -2.700000 56.858105 +1.400000 -2.600000 55.523098 +1.400000 -2.500000 54.208092 +1.400000 -2.400000 52.913085 +1.400000 -2.300000 51.638079 +1.400000 -2.200000 50.383072 +1.400000 -2.100000 49.148066 +1.400000 -2.000000 47.933059 +1.400000 -1.900000 46.738053 +1.400000 -1.800000 45.563047 +1.400000 -1.700000 44.408040 +1.400000 -1.600000 43.273034 +1.400000 -1.500000 42.158027 +1.400000 -1.400000 41.063021 +1.400000 -1.300000 39.988014 +1.400000 -1.200000 38.933008 +1.400000 -1.100000 37.898001 +1.400000 -1.000000 36.882995 +1.400000 -0.900000 35.887988 +1.400000 -0.800000 34.912982 +1.400000 -0.700000 33.957975 +1.400000 -0.600000 33.022969 +1.400000 -0.500000 32.107962 +1.400000 -0.400000 31.212956 +1.400000 -0.300000 30.337949 +1.400000 -0.200000 29.482943 +1.400000 -0.100000 28.647936 +1.400000 -0.000000 27.832930 +1.400000 0.100000 27.037923 +1.400000 0.200000 26.262917 +1.400000 0.300000 25.507910 +1.400000 0.400000 24.772904 +1.400000 0.500000 24.057897 +1.400000 0.600000 23.362891 +1.400000 0.700000 22.687884 +1.400000 0.800000 22.032878 +1.400000 0.900000 21.397871 +1.400000 1.000000 20.782865 +1.400000 1.100000 20.187858 +1.400000 1.200000 19.612852 +1.400000 1.300000 19.057845 +1.400000 1.400000 18.522839 +1.400000 1.500000 18.007832 +1.400000 1.600000 17.512826 +1.400000 1.700000 17.037819 +1.400000 1.800000 16.582813 +1.400000 1.900000 16.147806 +1.400000 2.000000 15.732800 +1.400000 2.100000 15.337794 +1.400000 2.200000 14.962787 +1.400000 2.300000 14.607781 +1.400000 2.400000 14.272774 +1.400000 2.500000 13.957768 +1.400000 2.600000 13.662761 +1.400000 2.700000 13.387755 +1.400000 2.800000 13.132748 +1.400000 2.900000 12.897742 +1.400000 3.000000 12.682735 +1.400000 3.100000 12.487729 +1.400000 3.200000 12.312722 +1.400000 3.300000 12.157716 +1.400000 3.400000 12.022709 +1.400000 3.500000 11.907703 +1.400000 3.600000 11.812696 +1.400000 3.700000 11.737690 +1.400000 3.800000 11.682683 +1.400000 3.900000 11.647677 +1.400000 4.000000 11.632670 +1.400000 4.100000 11.637664 +1.400000 4.200000 11.662657 +1.400000 4.300000 11.707651 +1.400000 4.400000 11.772644 +1.400000 4.500000 11.857638 +1.400000 4.600000 11.962631 +1.400000 4.700000 12.087625 +1.400000 4.800000 12.232618 +1.400000 4.900000 12.397612 +1.400000 5.000000 12.582605 +1.400000 5.100000 12.787599 +1.400000 5.200000 13.012592 +1.400000 5.300000 13.257586 +1.400000 5.400000 13.522579 +1.400000 5.500000 13.807573 +1.400000 5.600000 14.112566 +1.400000 5.700000 14.437560 +1.400000 5.800000 14.782554 +1.400000 5.900000 15.147547 +1.400000 6.000000 15.532541 +1.400000 6.100000 15.937534 +1.400000 6.200000 16.362528 +1.400000 6.300000 16.807521 +1.400000 6.400000 17.272515 +1.400000 6.500000 17.757508 +1.400000 6.600000 18.262502 +1.400000 6.700000 18.787495 +1.400000 6.800000 19.332489 +1.400000 6.900000 19.897482 +1.400000 7.000000 20.482476 +1.400000 7.100000 21.087469 +1.400000 7.200000 21.712463 +1.400000 7.300000 22.357456 +1.400000 7.400000 23.022450 +1.400000 7.500000 23.707443 +1.400000 7.600000 24.412437 +1.400000 7.700000 25.137430 +1.400000 7.800000 25.882424 +1.400000 7.900000 26.647417 +1.400000 8.000000 27.432411 +1.400000 8.100000 28.237404 +1.400000 8.200000 29.062398 +1.400000 8.300000 29.907391 +1.400000 8.400000 30.772385 +1.400000 8.500000 31.657378 +1.400000 8.600000 32.562372 +1.400000 8.700000 33.487365 +1.400000 8.800000 34.432359 +1.400000 8.900000 35.397352 +1.400000 9.000000 36.382346 +1.400000 9.100000 37.387339 +1.400000 9.200000 38.412333 +1.400000 9.300000 39.457326 +1.400000 9.400000 40.522320 +1.400000 9.500000 41.607313 +1.400000 9.600000 42.712307 +1.400000 9.700000 43.837301 +1.400000 9.800000 44.982294 +1.400000 9.900000 46.147288 +1.400000 10.000000 47.332281 +1.400000 10.100000 48.537275 +1.400000 10.200000 49.762268 +1.400000 10.300000 51.007262 +1.400000 10.400000 52.272255 +1.400000 10.500000 53.557249 +1.400000 10.600000 54.862242 +1.400000 10.700000 56.187236 +1.400000 10.800000 57.532229 +1.400000 10.900000 58.897223 +1.400000 11.000000 60.282216 +1.400000 11.100000 61.687210 +1.400000 11.200000 63.112203 +1.400000 11.300000 64.557197 +1.400000 11.400000 66.022190 +1.400000 11.500000 67.507184 +1.400000 11.600000 69.012177 +1.400000 11.700000 70.537171 +1.400000 11.800000 72.082164 +1.400000 11.900000 73.647158 +1.400000 12.000000 75.232151 +1.400000 12.100000 76.837145 +1.400000 12.200000 78.462138 +1.400000 12.300000 80.107132 +1.400000 12.400000 81.772125 +1.400000 12.500000 83.457119 +1.400000 12.600000 85.162112 +1.400000 12.700000 86.887106 +1.400000 12.800000 88.632099 +1.400000 12.900000 90.397093 +1.400000 13.000000 92.182086 +1.400000 13.100000 93.987080 +1.400000 13.200000 95.812073 +1.400000 13.300000 97.657067 +1.400000 13.400000 99.522061 +1.400000 13.500000 101.407054 +1.400000 13.600000 103.312048 +1.400000 13.700000 105.237041 +1.400000 13.800000 107.182035 +1.400000 13.900000 109.147028 +1.400000 14.000000 111.132022 +1.400000 14.100000 113.137015 +1.400000 14.200000 115.162009 +1.400000 14.300000 117.207002 +1.400000 14.400000 119.271996 +1.400000 14.500000 121.356989 +1.400000 14.600000 123.461983 +1.400000 14.700000 125.586976 +1.400000 14.800000 127.731970 +1.400000 14.900000 129.896963 +1.400000 15.000000 132.081957 + +1.500000 -5.000000 89.948708 +1.500000 -4.900000 88.178039 +1.500000 -4.800000 86.427371 +1.500000 -4.700000 84.696703 +1.500000 -4.600000 82.986035 +1.500000 -4.500000 81.295367 +1.500000 -4.400000 79.624698 +1.500000 -4.300000 77.974030 +1.500000 -4.200000 76.343362 +1.500000 -4.100000 74.732694 +1.500000 -4.000000 73.142026 +1.500000 -3.900000 71.571357 +1.500000 -3.800000 70.020689 +1.500000 -3.700000 68.490021 +1.500000 -3.600000 66.979353 +1.500000 -3.500000 65.488685 +1.500000 -3.400000 64.018016 +1.500000 -3.300000 62.567348 +1.500000 -3.200000 61.136680 +1.500000 -3.100000 59.726012 +1.500000 -3.000000 58.335344 +1.500000 -2.900000 56.964675 +1.500000 -2.800000 55.614007 +1.500000 -2.700000 54.283339 +1.500000 -2.600000 52.972671 +1.500000 -2.500000 51.682003 +1.500000 -2.400000 50.411334 +1.500000 -2.300000 49.160666 +1.500000 -2.200000 47.929998 +1.500000 -2.100000 46.719330 +1.500000 -2.000000 45.528662 +1.500000 -1.900000 44.357993 +1.500000 -1.800000 43.207325 +1.500000 -1.700000 42.076657 +1.500000 -1.600000 40.965989 +1.500000 -1.500000 39.875321 +1.500000 -1.400000 38.804652 +1.500000 -1.300000 37.753984 +1.500000 -1.200000 36.723316 +1.500000 -1.100000 35.712648 +1.500000 -1.000000 34.721980 +1.500000 -0.900000 33.751311 +1.500000 -0.800000 32.800643 +1.500000 -0.700000 31.869975 +1.500000 -0.600000 30.959307 +1.500000 -0.500000 30.068639 +1.500000 -0.400000 29.197970 +1.500000 -0.300000 28.347302 +1.500000 -0.200000 27.516634 +1.500000 -0.100000 26.705966 +1.500000 -0.000000 25.915298 +1.500000 0.100000 25.144629 +1.500000 0.200000 24.393961 +1.500000 0.300000 23.663293 +1.500000 0.400000 22.952625 +1.500000 0.500000 22.261957 +1.500000 0.600000 21.591288 +1.500000 0.700000 20.940620 +1.500000 0.800000 20.309952 +1.500000 0.900000 19.699284 +1.500000 1.000000 19.108616 +1.500000 1.100000 18.537947 +1.500000 1.200000 17.987279 +1.500000 1.300000 17.456611 +1.500000 1.400000 16.945943 +1.500000 1.500000 16.455275 +1.500000 1.600000 15.984606 +1.500000 1.700000 15.533938 +1.500000 1.800000 15.103270 +1.500000 1.900000 14.692602 +1.500000 2.000000 14.301934 +1.500000 2.100000 13.931265 +1.500000 2.200000 13.580597 +1.500000 2.300000 13.249929 +1.500000 2.400000 12.939261 +1.500000 2.500000 12.648593 +1.500000 2.600000 12.377924 +1.500000 2.700000 12.127256 +1.500000 2.800000 11.896588 +1.500000 2.900000 11.685920 +1.500000 3.000000 11.495252 +1.500000 3.100000 11.324583 +1.500000 3.200000 11.173915 +1.500000 3.300000 11.043247 +1.500000 3.400000 10.932579 +1.500000 3.500000 10.841911 +1.500000 3.600000 10.771242 +1.500000 3.700000 10.720574 +1.500000 3.800000 10.689906 +1.500000 3.900000 10.679238 +1.500000 4.000000 10.688570 +1.500000 4.100000 10.717901 +1.500000 4.200000 10.767233 +1.500000 4.300000 10.836565 +1.500000 4.400000 10.925897 +1.500000 4.500000 11.035229 +1.500000 4.600000 11.164560 +1.500000 4.700000 11.313892 +1.500000 4.800000 11.483224 +1.500000 4.900000 11.672556 +1.500000 5.000000 11.881888 +1.500000 5.100000 12.111219 +1.500000 5.200000 12.360551 +1.500000 5.300000 12.629883 +1.500000 5.400000 12.919215 +1.500000 5.500000 13.228547 +1.500000 5.600000 13.557878 +1.500000 5.700000 13.907210 +1.500000 5.800000 14.276542 +1.500000 5.900000 14.665874 +1.500000 6.000000 15.075206 +1.500000 6.100000 15.504537 +1.500000 6.200000 15.953869 +1.500000 6.300000 16.423201 +1.500000 6.400000 16.912533 +1.500000 6.500000 17.421865 +1.500000 6.600000 17.951196 +1.500000 6.700000 18.500528 +1.500000 6.800000 19.069860 +1.500000 6.900000 19.659192 +1.500000 7.000000 20.268524 +1.500000 7.100000 20.897855 +1.500000 7.200000 21.547187 +1.500000 7.300000 22.216519 +1.500000 7.400000 22.905851 +1.500000 7.500000 23.615183 +1.500000 7.600000 24.344514 +1.500000 7.700000 25.093846 +1.500000 7.800000 25.863178 +1.500000 7.900000 26.652510 +1.500000 8.000000 27.461842 +1.500000 8.100000 28.291173 +1.500000 8.200000 29.140505 +1.500000 8.300000 30.009837 +1.500000 8.400000 30.899169 +1.500000 8.500000 31.808501 +1.500000 8.600000 32.737832 +1.500000 8.700000 33.687164 +1.500000 8.800000 34.656496 +1.500000 8.900000 35.645828 +1.500000 9.000000 36.655160 +1.500000 9.100000 37.684491 +1.500000 9.200000 38.733823 +1.500000 9.300000 39.803155 +1.500000 9.400000 40.892487 +1.500000 9.500000 42.001819 +1.500000 9.600000 43.131150 +1.500000 9.700000 44.280482 +1.500000 9.800000 45.449814 +1.500000 9.900000 46.639146 +1.500000 10.000000 47.848478 +1.500000 10.100000 49.077809 +1.500000 10.200000 50.327141 +1.500000 10.300000 51.596473 +1.500000 10.400000 52.885805 +1.500000 10.500000 54.195137 +1.500000 10.600000 55.524468 +1.500000 10.700000 56.873800 +1.500000 10.800000 58.243132 +1.500000 10.900000 59.632464 +1.500000 11.000000 61.041796 +1.500000 11.100000 62.471127 +1.500000 11.200000 63.920459 +1.500000 11.300000 65.389791 +1.500000 11.400000 66.879123 +1.500000 11.500000 68.388455 +1.500000 11.600000 69.917786 +1.500000 11.700000 71.467118 +1.500000 11.800000 73.036450 +1.500000 11.900000 74.625782 +1.500000 12.000000 76.235114 +1.500000 12.100000 77.864445 +1.500000 12.200000 79.513777 +1.500000 12.300000 81.183109 +1.500000 12.400000 82.872441 +1.500000 12.500000 84.581773 +1.500000 12.600000 86.311104 +1.500000 12.700000 88.060436 +1.500000 12.800000 89.829768 +1.500000 12.900000 91.619100 +1.500000 13.000000 93.428432 +1.500000 13.100000 95.257763 +1.500000 13.200000 97.107095 +1.500000 13.300000 98.976427 +1.500000 13.400000 100.865759 +1.500000 13.500000 102.775091 +1.500000 13.600000 104.704422 +1.500000 13.700000 106.653754 +1.500000 13.800000 108.623086 +1.500000 13.900000 110.612418 +1.500000 14.000000 112.621750 +1.500000 14.100000 114.651081 +1.500000 14.200000 116.700413 +1.500000 14.300000 118.769745 +1.500000 14.400000 120.859077 +1.500000 14.500000 122.968409 +1.500000 14.600000 125.097740 +1.500000 14.700000 127.247072 +1.500000 14.800000 129.416404 +1.500000 14.900000 131.605736 +1.500000 15.000000 133.815068 + +1.600000 -5.000000 86.882377 +1.600000 -4.900000 85.135530 +1.600000 -4.800000 83.408683 +1.600000 -4.700000 81.701837 +1.600000 -4.600000 80.014990 +1.600000 -4.500000 78.348144 +1.600000 -4.400000 76.701297 +1.600000 -4.300000 75.074450 +1.600000 -4.200000 73.467604 +1.600000 -4.100000 71.880757 +1.600000 -4.000000 70.313910 +1.600000 -3.900000 68.767064 +1.600000 -3.800000 67.240217 +1.600000 -3.700000 65.733370 +1.600000 -3.600000 64.246524 +1.600000 -3.500000 62.779677 +1.600000 -3.400000 61.332830 +1.600000 -3.300000 59.905984 +1.600000 -3.200000 58.499137 +1.600000 -3.100000 57.112290 +1.600000 -3.000000 55.745444 +1.600000 -2.900000 54.398597 +1.600000 -2.800000 53.071750 +1.600000 -2.700000 51.764904 +1.600000 -2.600000 50.478057 +1.600000 -2.500000 49.211210 +1.600000 -2.400000 47.964364 +1.600000 -2.300000 46.737517 +1.600000 -2.200000 45.530671 +1.600000 -2.100000 44.343824 +1.600000 -2.000000 43.176977 +1.600000 -1.900000 42.030131 +1.600000 -1.800000 40.903284 +1.600000 -1.700000 39.796437 +1.600000 -1.600000 38.709591 +1.600000 -1.500000 37.642744 +1.600000 -1.400000 36.595897 +1.600000 -1.300000 35.569051 +1.600000 -1.200000 34.562204 +1.600000 -1.100000 33.575357 +1.600000 -1.000000 32.608511 +1.600000 -0.900000 31.661664 +1.600000 -0.800000 30.734817 +1.600000 -0.700000 29.827971 +1.600000 -0.600000 28.941124 +1.600000 -0.500000 28.074277 +1.600000 -0.400000 27.227431 +1.600000 -0.300000 26.400584 +1.600000 -0.200000 25.593738 +1.600000 -0.100000 24.806891 +1.600000 -0.000000 24.040044 +1.600000 0.100000 23.293198 +1.600000 0.200000 22.566351 +1.600000 0.300000 21.859504 +1.600000 0.400000 21.172658 +1.600000 0.500000 20.505811 +1.600000 0.600000 19.858964 +1.600000 0.700000 19.232118 +1.600000 0.800000 18.625271 +1.600000 0.900000 18.038424 +1.600000 1.000000 17.471578 +1.600000 1.100000 16.924731 +1.600000 1.200000 16.397884 +1.600000 1.300000 15.891038 +1.600000 1.400000 15.404191 +1.600000 1.500000 14.937344 +1.600000 1.600000 14.490498 +1.600000 1.700000 14.063651 +1.600000 1.800000 13.656805 +1.600000 1.900000 13.269958 +1.600000 2.000000 12.903111 +1.600000 2.100000 12.556265 +1.600000 2.200000 12.229418 +1.600000 2.300000 11.922571 +1.600000 2.400000 11.635725 +1.600000 2.500000 11.368878 +1.600000 2.600000 11.122031 +1.600000 2.700000 10.895185 +1.600000 2.800000 10.688338 +1.600000 2.900000 10.501491 +1.600000 3.000000 10.334645 +1.600000 3.100000 10.187798 +1.600000 3.200000 10.060951 +1.600000 3.300000 9.954105 +1.600000 3.400000 9.867258 +1.600000 3.500000 9.800411 +1.600000 3.600000 9.753565 +1.600000 3.700000 9.726718 +1.600000 3.800000 9.719871 +1.600000 3.900000 9.733025 +1.600000 4.000000 9.766178 +1.600000 4.100000 9.819332 +1.600000 4.200000 9.892485 +1.600000 4.300000 9.985638 +1.600000 4.400000 10.098792 +1.600000 4.500000 10.231945 +1.600000 4.600000 10.385098 +1.600000 4.700000 10.558252 +1.600000 4.800000 10.751405 +1.600000 4.900000 10.964558 +1.600000 5.000000 11.197712 +1.600000 5.100000 11.450865 +1.600000 5.200000 11.724018 +1.600000 5.300000 12.017172 +1.600000 5.400000 12.330325 +1.600000 5.500000 12.663478 +1.600000 5.600000 13.016632 +1.600000 5.700000 13.389785 +1.600000 5.800000 13.782938 +1.600000 5.900000 14.196092 +1.600000 6.000000 14.629245 +1.600000 6.100000 15.082399 +1.600000 6.200000 15.555552 +1.600000 6.300000 16.048705 +1.600000 6.400000 16.561859 +1.600000 6.500000 17.095012 +1.600000 6.600000 17.648165 +1.600000 6.700000 18.221319 +1.600000 6.800000 18.814472 +1.600000 6.900000 19.427625 +1.600000 7.000000 20.060779 +1.600000 7.100000 20.713932 +1.600000 7.200000 21.387085 +1.600000 7.300000 22.080239 +1.600000 7.400000 22.793392 +1.600000 7.500000 23.526545 +1.600000 7.600000 24.279699 +1.600000 7.700000 25.052852 +1.600000 7.800000 25.846005 +1.600000 7.900000 26.659159 +1.600000 8.000000 27.492312 +1.600000 8.100000 28.345466 +1.600000 8.200000 29.218619 +1.600000 8.300000 30.111772 +1.600000 8.400000 31.024926 +1.600000 8.500000 31.958079 +1.600000 8.600000 32.911232 +1.600000 8.700000 33.884386 +1.600000 8.800000 34.877539 +1.600000 8.900000 35.890692 +1.600000 9.000000 36.923846 +1.600000 9.100000 37.976999 +1.600000 9.200000 39.050152 +1.600000 9.300000 40.143306 +1.600000 9.400000 41.256459 +1.600000 9.500000 42.389612 +1.600000 9.600000 43.542766 +1.600000 9.700000 44.715919 +1.600000 9.800000 45.909072 +1.600000 9.900000 47.122226 +1.600000 10.000000 48.355379 +1.600000 10.100000 49.608532 +1.600000 10.200000 50.881686 +1.600000 10.300000 52.174839 +1.600000 10.400000 53.487993 +1.600000 10.500000 54.821146 +1.600000 10.600000 56.174299 +1.600000 10.700000 57.547453 +1.600000 10.800000 58.940606 +1.600000 10.900000 60.353759 +1.600000 11.000000 61.786913 +1.600000 11.100000 63.240066 +1.600000 11.200000 64.713219 +1.600000 11.300000 66.206373 +1.600000 11.400000 67.719526 +1.600000 11.500000 69.252679 +1.600000 11.600000 70.805833 +1.600000 11.700000 72.378986 +1.600000 11.800000 73.972139 +1.600000 11.900000 75.585293 +1.600000 12.000000 77.218446 +1.600000 12.100000 78.871599 +1.600000 12.200000 80.544753 +1.600000 12.300000 82.237906 +1.600000 12.400000 83.951060 +1.600000 12.500000 85.684213 +1.600000 12.600000 87.437366 +1.600000 12.700000 89.210520 +1.600000 12.800000 91.003673 +1.600000 12.900000 92.816826 +1.600000 13.000000 94.649980 +1.600000 13.100000 96.503133 +1.600000 13.200000 98.376286 +1.600000 13.300000 100.269440 +1.600000 13.400000 102.182593 +1.600000 13.500000 104.115746 +1.600000 13.600000 106.068900 +1.600000 13.700000 108.042053 +1.600000 13.800000 110.035206 +1.600000 13.900000 112.048360 +1.600000 14.000000 114.081513 +1.600000 14.100000 116.134666 +1.600000 14.200000 118.207820 +1.600000 14.300000 120.300973 +1.600000 14.400000 122.414127 +1.600000 14.500000 124.547280 +1.600000 14.600000 126.700433 +1.600000 14.700000 128.873587 +1.600000 14.800000 131.066740 +1.600000 14.900000 133.279893 +1.600000 15.000000 135.513047 + +1.700000 -5.000000 83.892003 +1.700000 -4.900000 82.168462 +1.700000 -4.800000 80.464920 +1.700000 -4.700000 78.781378 +1.700000 -4.600000 77.117836 +1.700000 -4.500000 75.474294 +1.700000 -4.400000 73.850752 +1.700000 -4.300000 72.247211 +1.700000 -4.200000 70.663669 +1.700000 -4.100000 69.100127 +1.700000 -4.000000 67.556585 +1.700000 -3.900000 66.033043 +1.700000 -3.800000 64.529501 +1.700000 -3.700000 63.045959 +1.700000 -3.600000 61.582418 +1.700000 -3.500000 60.138876 +1.700000 -3.400000 58.715334 +1.700000 -3.300000 57.311792 +1.700000 -3.200000 55.928250 +1.700000 -3.100000 54.564708 +1.700000 -3.000000 53.221167 +1.700000 -2.900000 51.897625 +1.700000 -2.800000 50.594083 +1.700000 -2.700000 49.310541 +1.700000 -2.600000 48.046999 +1.700000 -2.500000 46.803457 +1.700000 -2.400000 45.579916 +1.700000 -2.300000 44.376374 +1.700000 -2.200000 43.192832 +1.700000 -2.100000 42.029290 +1.700000 -2.000000 40.885748 +1.700000 -1.900000 39.762206 +1.700000 -1.800000 38.658665 +1.700000 -1.700000 37.575123 +1.700000 -1.600000 36.511581 +1.700000 -1.500000 35.468039 +1.700000 -1.400000 34.444497 +1.700000 -1.300000 33.440955 +1.700000 -1.200000 32.457413 +1.700000 -1.100000 31.493872 +1.700000 -1.000000 30.550330 +1.700000 -0.900000 29.626788 +1.700000 -0.800000 28.723246 +1.700000 -0.700000 27.839704 +1.700000 -0.600000 26.976162 +1.700000 -0.500000 26.132621 +1.700000 -0.400000 25.309079 +1.700000 -0.300000 24.505537 +1.700000 -0.200000 23.721995 +1.700000 -0.100000 22.958453 +1.700000 -0.000000 22.214911 +1.700000 0.100000 21.491370 +1.700000 0.200000 20.787828 +1.700000 0.300000 20.104286 +1.700000 0.400000 19.440744 +1.700000 0.500000 18.797202 +1.700000 0.600000 18.173660 +1.700000 0.700000 17.570119 +1.700000 0.800000 16.986577 +1.700000 0.900000 16.423035 +1.700000 1.000000 15.879493 +1.700000 1.100000 15.355951 +1.700000 1.200000 14.852409 +1.700000 1.300000 14.368868 +1.700000 1.400000 13.905326 +1.700000 1.500000 13.461784 +1.700000 1.600000 13.038242 +1.700000 1.700000 12.634700 +1.700000 1.800000 12.251158 +1.700000 1.900000 11.887616 +1.700000 2.000000 11.544075 +1.700000 2.100000 11.220533 +1.700000 2.200000 10.916991 +1.700000 2.300000 10.633449 +1.700000 2.400000 10.369907 +1.700000 2.500000 10.126365 +1.700000 2.600000 9.902824 +1.700000 2.700000 9.699282 +1.700000 2.800000 9.515740 +1.700000 2.900000 9.352198 +1.700000 3.000000 9.208656 +1.700000 3.100000 9.085114 +1.700000 3.200000 8.981573 +1.700000 3.300000 8.898031 +1.700000 3.400000 8.834489 +1.700000 3.500000 8.790947 +1.700000 3.600000 8.767405 +1.700000 3.700000 8.763863 +1.700000 3.800000 8.780322 +1.700000 3.900000 8.816780 +1.700000 4.000000 8.873238 +1.700000 4.100000 8.949696 +1.700000 4.200000 9.046154 +1.700000 4.300000 9.162612 +1.700000 4.400000 9.299070 +1.700000 4.500000 9.455529 +1.700000 4.600000 9.631987 +1.700000 4.700000 9.828445 +1.700000 4.800000 10.044903 +1.700000 4.900000 10.281361 +1.700000 5.000000 10.537819 +1.700000 5.100000 10.814278 +1.700000 5.200000 11.110736 +1.700000 5.300000 11.427194 +1.700000 5.400000 11.763652 +1.700000 5.500000 12.120110 +1.700000 5.600000 12.496568 +1.700000 5.700000 12.893027 +1.700000 5.800000 13.309485 +1.700000 5.900000 13.745943 +1.700000 6.000000 14.202401 +1.700000 6.100000 14.678859 +1.700000 6.200000 15.175317 +1.700000 6.300000 15.691776 +1.700000 6.400000 16.228234 +1.700000 6.500000 16.784692 +1.700000 6.600000 17.361150 +1.700000 6.700000 17.957608 +1.700000 6.800000 18.574066 +1.700000 6.900000 19.210524 +1.700000 7.000000 19.866983 +1.700000 7.100000 20.543441 +1.700000 7.200000 21.239899 +1.700000 7.300000 21.956357 +1.700000 7.400000 22.692815 +1.700000 7.500000 23.449273 +1.700000 7.600000 24.225732 +1.700000 7.700000 25.022190 +1.700000 7.800000 25.838648 +1.700000 7.900000 26.675106 +1.700000 8.000000 27.531564 +1.700000 8.100000 28.408022 +1.700000 8.200000 29.304481 +1.700000 8.300000 30.220939 +1.700000 8.400000 31.157397 +1.700000 8.500000 32.113855 +1.700000 8.600000 33.090313 +1.700000 8.700000 34.086771 +1.700000 8.800000 35.103230 +1.700000 8.900000 36.139688 +1.700000 9.000000 37.196146 +1.700000 9.100000 38.272604 +1.700000 9.200000 39.369062 +1.700000 9.300000 40.485520 +1.700000 9.400000 41.621978 +1.700000 9.500000 42.778437 +1.700000 9.600000 43.954895 +1.700000 9.700000 45.151353 +1.700000 9.800000 46.367811 +1.700000 9.900000 47.604269 +1.700000 10.000000 48.860727 +1.700000 10.100000 50.137186 +1.700000 10.200000 51.433644 +1.700000 10.300000 52.750102 +1.700000 10.400000 54.086560 +1.700000 10.500000 55.443018 +1.700000 10.600000 56.819476 +1.700000 10.700000 58.215935 +1.700000 10.800000 59.632393 +1.700000 10.900000 61.068851 +1.700000 11.000000 62.525309 +1.700000 11.100000 64.001767 +1.700000 11.200000 65.498225 +1.700000 11.300000 67.014684 +1.700000 11.400000 68.551142 +1.700000 11.500000 70.107600 +1.700000 11.600000 71.684058 +1.700000 11.700000 73.280516 +1.700000 11.800000 74.896974 +1.700000 11.900000 76.533432 +1.700000 12.000000 78.189891 +1.700000 12.100000 79.866349 +1.700000 12.200000 81.562807 +1.700000 12.300000 83.279265 +1.700000 12.400000 85.015723 +1.700000 12.500000 86.772181 +1.700000 12.600000 88.548640 +1.700000 12.700000 90.345098 +1.700000 12.800000 92.161556 +1.700000 12.900000 93.998014 +1.700000 13.000000 95.854472 +1.700000 13.100000 97.730930 +1.700000 13.200000 99.627389 +1.700000 13.300000 101.543847 +1.700000 13.400000 103.480305 +1.700000 13.500000 105.436763 +1.700000 13.600000 107.413221 +1.700000 13.700000 109.409679 +1.700000 13.800000 111.426138 +1.700000 13.900000 113.462596 +1.700000 14.000000 115.519054 +1.700000 14.100000 117.595512 +1.700000 14.200000 119.691970 +1.700000 14.300000 121.808428 +1.700000 14.400000 123.944886 +1.700000 14.500000 126.101345 +1.700000 14.600000 128.277803 +1.700000 14.700000 130.474261 +1.700000 14.800000 132.690719 +1.700000 14.900000 134.927177 +1.700000 15.000000 137.183635 + +1.800000 -5.000000 80.985341 +1.800000 -4.900000 79.284587 +1.800000 -4.800000 77.603834 +1.800000 -4.700000 75.943080 +1.800000 -4.600000 74.302326 +1.800000 -4.500000 72.681572 +1.800000 -4.400000 71.080819 +1.800000 -4.300000 69.500065 +1.800000 -4.200000 67.939311 +1.800000 -4.100000 66.398557 +1.800000 -4.000000 64.877803 +1.800000 -3.900000 63.377050 +1.800000 -3.800000 61.896296 +1.800000 -3.700000 60.435542 +1.800000 -3.600000 58.994788 +1.800000 -3.500000 57.574035 +1.800000 -3.400000 56.173281 +1.800000 -3.300000 54.792527 +1.800000 -3.200000 53.431773 +1.800000 -3.100000 52.091020 +1.800000 -3.000000 50.770266 +1.800000 -2.900000 49.469512 +1.800000 -2.800000 48.188758 +1.800000 -2.700000 46.928005 +1.800000 -2.600000 45.687251 +1.800000 -2.500000 44.466497 +1.800000 -2.400000 43.265743 +1.800000 -2.300000 42.084989 +1.800000 -2.200000 40.924236 +1.800000 -2.100000 39.783482 +1.800000 -2.000000 38.662728 +1.800000 -1.900000 37.561974 +1.800000 -1.800000 36.481221 +1.800000 -1.700000 35.420467 +1.800000 -1.600000 34.379713 +1.800000 -1.500000 33.358959 +1.800000 -1.400000 32.358206 +1.800000 -1.300000 31.377452 +1.800000 -1.200000 30.416698 +1.800000 -1.100000 29.475944 +1.800000 -1.000000 28.555190 +1.800000 -0.900000 27.654437 +1.800000 -0.800000 26.773683 +1.800000 -0.700000 25.912929 +1.800000 -0.600000 25.072175 +1.800000 -0.500000 24.251422 +1.800000 -0.400000 23.450668 +1.800000 -0.300000 22.669914 +1.800000 -0.200000 21.909160 +1.800000 -0.100000 21.168407 +1.800000 -0.000000 20.447653 +1.800000 0.100000 19.746899 +1.800000 0.200000 19.066145 +1.800000 0.300000 18.405392 +1.800000 0.400000 17.764638 +1.800000 0.500000 17.143884 +1.800000 0.600000 16.543130 +1.800000 0.700000 15.962376 +1.800000 0.800000 15.401623 +1.800000 0.900000 14.860869 +1.800000 1.000000 14.340115 +1.800000 1.100000 13.839361 +1.800000 1.200000 13.358608 +1.800000 1.300000 12.897854 +1.800000 1.400000 12.457100 +1.800000 1.500000 12.036346 +1.800000 1.600000 11.635593 +1.800000 1.700000 11.254839 +1.800000 1.800000 10.894085 +1.800000 1.900000 10.553331 +1.800000 2.000000 10.232577 +1.800000 2.100000 9.931824 +1.800000 2.200000 9.651070 +1.800000 2.300000 9.390316 +1.800000 2.400000 9.149562 +1.800000 2.500000 8.928809 +1.800000 2.600000 8.728055 +1.800000 2.700000 8.547301 +1.800000 2.800000 8.386547 +1.800000 2.900000 8.245794 +1.800000 3.000000 8.125040 +1.800000 3.100000 8.024286 +1.800000 3.200000 7.943532 +1.800000 3.300000 7.882779 +1.800000 3.400000 7.842025 +1.800000 3.500000 7.821271 +1.800000 3.600000 7.820517 +1.800000 3.700000 7.839763 +1.800000 3.800000 7.879010 +1.800000 3.900000 7.938256 +1.800000 4.000000 8.017502 +1.800000 4.100000 8.116748 +1.800000 4.200000 8.235995 +1.800000 4.300000 8.375241 +1.800000 4.400000 8.534487 +1.800000 4.500000 8.713733 +1.800000 4.600000 8.912980 +1.800000 4.700000 9.132226 +1.800000 4.800000 9.371472 +1.800000 4.900000 9.630718 +1.800000 5.000000 9.909964 +1.800000 5.100000 10.209211 +1.800000 5.200000 10.528457 +1.800000 5.300000 10.867703 +1.800000 5.400000 11.226949 +1.800000 5.500000 11.606196 +1.800000 5.600000 12.005442 +1.800000 5.700000 12.424688 +1.800000 5.800000 12.863934 +1.800000 5.900000 13.323181 +1.800000 6.000000 13.802427 +1.800000 6.100000 14.301673 +1.800000 6.200000 14.820919 +1.800000 6.300000 15.360166 +1.800000 6.400000 15.919412 +1.800000 6.500000 16.498658 +1.800000 6.600000 17.097904 +1.800000 6.700000 17.717150 +1.800000 6.800000 18.356397 +1.800000 6.900000 19.015643 +1.800000 7.000000 19.694889 +1.800000 7.100000 20.394135 +1.800000 7.200000 21.113382 +1.800000 7.300000 21.852628 +1.800000 7.400000 22.611874 +1.800000 7.500000 23.391120 +1.800000 7.600000 24.190367 +1.800000 7.700000 25.009613 +1.800000 7.800000 25.848859 +1.800000 7.900000 26.708105 +1.800000 8.000000 27.587351 +1.800000 8.100000 28.486598 +1.800000 8.200000 29.405844 +1.800000 8.300000 30.345090 +1.800000 8.400000 31.304336 +1.800000 8.500000 32.283583 +1.800000 8.600000 33.282829 +1.800000 8.700000 34.302075 +1.800000 8.800000 35.341321 +1.800000 8.900000 36.400568 +1.800000 9.000000 37.479814 +1.800000 9.100000 38.579060 +1.800000 9.200000 39.698306 +1.800000 9.300000 40.837553 +1.800000 9.400000 41.996799 +1.800000 9.500000 43.176045 +1.800000 9.600000 44.375291 +1.800000 9.700000 45.594537 +1.800000 9.800000 46.833784 +1.800000 9.900000 48.093030 +1.800000 10.000000 49.372276 +1.800000 10.100000 50.671522 +1.800000 10.200000 51.990769 +1.800000 10.300000 53.330015 +1.800000 10.400000 54.689261 +1.800000 10.500000 56.068507 +1.800000 10.600000 57.467754 +1.800000 10.700000 58.887000 +1.800000 10.800000 60.326246 +1.800000 10.900000 61.785492 +1.800000 11.000000 63.264738 +1.800000 11.100000 64.763985 +1.800000 11.200000 66.283231 +1.800000 11.300000 67.822477 +1.800000 11.400000 69.381723 +1.800000 11.500000 70.960970 +1.800000 11.600000 72.560216 +1.800000 11.700000 74.179462 +1.800000 11.800000 75.818708 +1.800000 11.900000 77.477955 +1.800000 12.000000 79.157201 +1.800000 12.100000 80.856447 +1.800000 12.200000 82.575693 +1.800000 12.300000 84.314940 +1.800000 12.400000 86.074186 +1.800000 12.500000 87.853432 +1.800000 12.600000 89.652678 +1.800000 12.700000 91.471924 +1.800000 12.800000 93.311171 +1.800000 12.900000 95.170417 +1.800000 13.000000 97.049663 +1.800000 13.100000 98.948909 +1.800000 13.200000 100.868156 +1.800000 13.300000 102.807402 +1.800000 13.400000 104.766648 +1.800000 13.500000 106.745894 +1.800000 13.600000 108.745141 +1.800000 13.700000 110.764387 +1.800000 13.800000 112.803633 +1.800000 13.900000 114.862879 +1.800000 14.000000 116.942125 +1.800000 14.100000 119.041372 +1.800000 14.200000 121.160618 +1.800000 14.300000 123.299864 +1.800000 14.400000 125.459110 +1.800000 14.500000 127.638357 +1.800000 14.600000 129.837603 +1.800000 14.700000 132.056849 +1.800000 14.800000 134.296095 +1.800000 14.900000 136.555342 +1.800000 15.000000 138.834588 + +1.900000 -5.000000 78.170060 +1.900000 -4.900000 76.491578 +1.900000 -4.800000 74.833095 +1.900000 -4.700000 73.194613 +1.900000 -4.600000 71.576131 +1.900000 -4.500000 69.977648 +1.900000 -4.400000 68.399166 +1.900000 -4.300000 66.840683 +1.900000 -4.200000 65.302201 +1.900000 -4.100000 63.783718 +1.900000 -4.000000 62.285236 +1.900000 -3.900000 60.806753 +1.900000 -3.800000 59.348271 +1.900000 -3.700000 57.909789 +1.900000 -3.600000 56.491306 +1.900000 -3.500000 55.092824 +1.900000 -3.400000 53.714341 +1.900000 -3.300000 52.355859 +1.900000 -3.200000 51.017376 +1.900000 -3.100000 49.698894 +1.900000 -3.000000 48.400412 +1.900000 -2.900000 47.121929 +1.900000 -2.800000 45.863447 +1.900000 -2.700000 44.624964 +1.900000 -2.600000 43.406482 +1.900000 -2.500000 42.207999 +1.900000 -2.400000 41.029517 +1.900000 -2.300000 39.871035 +1.900000 -2.200000 38.732552 +1.900000 -2.100000 37.614070 +1.900000 -2.000000 36.515587 +1.900000 -1.900000 35.437105 +1.900000 -1.800000 34.378622 +1.900000 -1.700000 33.340140 +1.900000 -1.600000 32.321658 +1.900000 -1.500000 31.323175 +1.900000 -1.400000 30.344693 +1.900000 -1.300000 29.386210 +1.900000 -1.200000 28.447728 +1.900000 -1.100000 27.529245 +1.900000 -1.000000 26.630763 +1.900000 -0.900000 25.752281 +1.900000 -0.800000 24.893798 +1.900000 -0.700000 24.055316 +1.900000 -0.600000 23.236833 +1.900000 -0.500000 22.438351 +1.900000 -0.400000 21.659868 +1.900000 -0.300000 20.901386 +1.900000 -0.200000 20.162904 +1.900000 -0.100000 19.444421 +1.900000 -0.000000 18.745939 +1.900000 0.100000 18.067456 +1.900000 0.200000 17.408974 +1.900000 0.300000 16.770491 +1.900000 0.400000 16.152009 +1.900000 0.500000 15.553526 +1.900000 0.600000 14.975044 +1.900000 0.700000 14.416562 +1.900000 0.800000 13.878079 +1.900000 0.900000 13.359597 +1.900000 1.000000 12.861114 +1.900000 1.100000 12.382632 +1.900000 1.200000 11.924149 +1.900000 1.300000 11.485667 +1.900000 1.400000 11.067185 +1.900000 1.500000 10.668702 +1.900000 1.600000 10.290220 +1.900000 1.700000 9.931737 +1.900000 1.800000 9.593255 +1.900000 1.900000 9.274772 +1.900000 2.000000 8.976290 +1.900000 2.100000 8.697808 +1.900000 2.200000 8.439325 +1.900000 2.300000 8.200843 +1.900000 2.400000 7.982360 +1.900000 2.500000 7.783878 +1.900000 2.600000 7.605395 +1.900000 2.700000 7.446913 +1.900000 2.800000 7.308431 +1.900000 2.900000 7.189948 +1.900000 3.000000 7.091466 +1.900000 3.100000 7.012983 +1.900000 3.200000 6.954501 +1.900000 3.300000 6.916018 +1.900000 3.400000 6.897536 +1.900000 3.500000 6.899054 +1.900000 3.600000 6.920571 +1.900000 3.700000 6.962089 +1.900000 3.800000 7.023606 +1.900000 3.900000 7.105124 +1.900000 4.000000 7.206641 +1.900000 4.100000 7.328159 +1.900000 4.200000 7.469676 +1.900000 4.300000 7.631194 +1.900000 4.400000 7.812712 +1.900000 4.500000 8.014229 +1.900000 4.600000 8.235747 +1.900000 4.700000 8.477264 +1.900000 4.800000 8.738782 +1.900000 4.900000 9.020299 +1.900000 5.000000 9.321817 +1.900000 5.100000 9.643335 +1.900000 5.200000 9.984852 +1.900000 5.300000 10.346370 +1.900000 5.400000 10.727887 +1.900000 5.500000 11.129405 +1.900000 5.600000 11.550922 +1.900000 5.700000 11.992440 +1.900000 5.800000 12.453958 +1.900000 5.900000 12.935475 +1.900000 6.000000 13.436993 +1.900000 6.100000 13.958510 +1.900000 6.200000 14.500028 +1.900000 6.300000 15.061545 +1.900000 6.400000 15.643063 +1.900000 6.500000 16.244581 +1.900000 6.600000 16.866098 +1.900000 6.700000 17.507616 +1.900000 6.800000 18.169133 +1.900000 6.900000 18.850651 +1.900000 7.000000 19.552168 +1.900000 7.100000 20.273686 +1.900000 7.200000 21.015204 +1.900000 7.300000 21.776721 +1.900000 7.400000 22.558239 +1.900000 7.500000 23.359756 +1.900000 7.600000 24.181274 +1.900000 7.700000 25.022791 +1.900000 7.800000 25.884309 +1.900000 7.900000 26.765827 +1.900000 8.000000 27.667344 +1.900000 8.100000 28.588862 +1.900000 8.200000 29.530379 +1.900000 8.300000 30.491897 +1.900000 8.400000 31.473414 +1.900000 8.500000 32.474932 +1.900000 8.600000 33.496449 +1.900000 8.700000 34.537967 +1.900000 8.800000 35.599485 +1.900000 8.900000 36.681002 +1.900000 9.000000 37.782520 +1.900000 9.100000 38.904037 +1.900000 9.200000 40.045555 +1.900000 9.300000 41.207072 +1.900000 9.400000 42.388590 +1.900000 9.500000 43.590108 +1.900000 9.600000 44.811625 +1.900000 9.700000 46.053143 +1.900000 9.800000 47.314660 +1.900000 9.900000 48.596178 +1.900000 10.000000 49.897695 +1.900000 10.100000 51.219213 +1.900000 10.200000 52.560731 +1.900000 10.300000 53.922248 +1.900000 10.400000 55.303766 +1.900000 10.500000 56.705283 +1.900000 10.600000 58.126801 +1.900000 10.700000 59.568318 +1.900000 10.800000 61.029836 +1.900000 10.900000 62.511354 +1.900000 11.000000 64.012871 +1.900000 11.100000 65.534389 +1.900000 11.200000 67.075906 +1.900000 11.300000 68.637424 +1.900000 11.400000 70.218941 +1.900000 11.500000 71.820459 +1.900000 11.600000 73.441977 +1.900000 11.700000 75.083494 +1.900000 11.800000 76.745012 +1.900000 11.900000 78.426529 +1.900000 12.000000 80.128047 +1.900000 12.100000 81.849564 +1.900000 12.200000 83.591082 +1.900000 12.300000 85.352600 +1.900000 12.400000 87.134117 +1.900000 12.500000 88.935635 +1.900000 12.600000 90.757152 +1.900000 12.700000 92.598670 +1.900000 12.800000 94.460187 +1.900000 12.900000 96.341705 +1.900000 13.000000 98.243222 +1.900000 13.100000 100.164740 +1.900000 13.200000 102.106258 +1.900000 13.300000 104.067775 +1.900000 13.400000 106.049293 +1.900000 13.500000 108.050810 +1.900000 13.600000 110.072328 +1.900000 13.700000 112.113845 +1.900000 13.800000 114.175363 +1.900000 13.900000 116.256881 +1.900000 14.000000 118.358398 +1.900000 14.100000 120.479916 +1.900000 14.200000 122.621433 +1.900000 14.300000 124.782951 +1.900000 14.400000 126.964468 +1.900000 14.500000 129.165986 +1.900000 14.600000 131.387504 +1.900000 14.700000 133.629021 +1.900000 14.800000 135.890539 +1.900000 14.900000 138.172056 +1.900000 15.000000 140.473574 + +2.000000 -5.000000 75.453653 +2.000000 -4.900000 73.796925 +2.000000 -4.800000 72.160197 +2.000000 -4.700000 70.543470 +2.000000 -4.600000 68.946742 +2.000000 -4.500000 67.370014 +2.000000 -4.400000 65.813286 +2.000000 -4.300000 64.276558 +2.000000 -4.200000 62.759830 +2.000000 -4.100000 61.263103 +2.000000 -4.000000 59.786375 +2.000000 -3.900000 58.329647 +2.000000 -3.800000 56.892919 +2.000000 -3.700000 55.476191 +2.000000 -3.600000 54.079463 +2.000000 -3.500000 52.702736 +2.000000 -3.400000 51.346008 +2.000000 -3.300000 50.009280 +2.000000 -3.200000 48.692552 +2.000000 -3.100000 47.395824 +2.000000 -3.000000 46.119096 +2.000000 -2.900000 44.862369 +2.000000 -2.800000 43.625641 +2.000000 -2.700000 42.408913 +2.000000 -2.600000 41.212185 +2.000000 -2.500000 40.035457 +2.000000 -2.400000 38.878729 +2.000000 -2.300000 37.742002 +2.000000 -2.200000 36.625274 +2.000000 -2.100000 35.528546 +2.000000 -2.000000 34.451818 +2.000000 -1.900000 33.395090 +2.000000 -1.800000 32.358362 +2.000000 -1.700000 31.341635 +2.000000 -1.600000 30.344907 +2.000000 -1.500000 29.368179 +2.000000 -1.400000 28.411451 +2.000000 -1.300000 27.474723 +2.000000 -1.200000 26.557995 +2.000000 -1.100000 25.661268 +2.000000 -1.000000 24.784540 +2.000000 -0.900000 23.927812 +2.000000 -0.800000 23.091084 +2.000000 -0.700000 22.274356 +2.000000 -0.600000 21.477628 +2.000000 -0.500000 20.700901 +2.000000 -0.400000 19.944173 +2.000000 -0.300000 19.207445 +2.000000 -0.200000 18.490717 +2.000000 -0.100000 17.793989 +2.000000 -0.000000 17.117261 +2.000000 0.100000 16.460534 +2.000000 0.200000 15.823806 +2.000000 0.300000 15.207078 +2.000000 0.400000 14.610350 +2.000000 0.500000 14.033622 +2.000000 0.600000 13.476894 +2.000000 0.700000 12.940167 +2.000000 0.800000 12.423439 +2.000000 0.900000 11.926711 +2.000000 1.000000 11.449983 +2.000000 1.100000 10.993255 +2.000000 1.200000 10.556527 +2.000000 1.300000 10.139799 +2.000000 1.400000 9.743072 +2.000000 1.500000 9.366344 +2.000000 1.600000 9.009616 +2.000000 1.700000 8.672888 +2.000000 1.800000 8.356160 +2.000000 1.900000 8.059432 +2.000000 2.000000 7.782705 +2.000000 2.100000 7.525977 +2.000000 2.200000 7.289249 +2.000000 2.300000 7.072521 +2.000000 2.400000 6.875793 +2.000000 2.500000 6.699065 +2.000000 2.600000 6.542338 +2.000000 2.700000 6.405610 +2.000000 2.800000 6.288882 +2.000000 2.900000 6.192154 +2.000000 3.000000 6.115426 +2.000000 3.100000 6.058698 +2.000000 3.200000 6.021971 +2.000000 3.300000 6.005243 +2.000000 3.400000 6.008515 +2.000000 3.500000 6.031787 +2.000000 3.600000 6.075059 +2.000000 3.700000 6.138331 +2.000000 3.800000 6.221604 +2.000000 3.900000 6.324876 +2.000000 4.000000 6.448148 +2.000000 4.100000 6.591420 +2.000000 4.200000 6.754692 +2.000000 4.300000 6.937964 +2.000000 4.400000 7.141237 +2.000000 4.500000 7.364509 +2.000000 4.600000 7.607781 +2.000000 4.700000 7.871053 +2.000000 4.800000 8.154325 +2.000000 4.900000 8.457597 +2.000000 5.000000 8.780870 +2.000000 5.100000 9.124142 +2.000000 5.200000 9.487414 +2.000000 5.300000 9.870686 +2.000000 5.400000 10.273958 +2.000000 5.500000 10.697230 +2.000000 5.600000 11.140503 +2.000000 5.700000 11.603775 +2.000000 5.800000 12.087047 +2.000000 5.900000 12.590319 +2.000000 6.000000 13.113591 +2.000000 6.100000 13.656863 +2.000000 6.200000 14.220136 +2.000000 6.300000 14.803408 +2.000000 6.400000 15.406680 +2.000000 6.500000 16.029952 +2.000000 6.600000 16.673224 +2.000000 6.700000 17.336496 +2.000000 6.800000 18.019769 +2.000000 6.900000 18.723041 +2.000000 7.000000 19.446313 +2.000000 7.100000 20.189585 +2.000000 7.200000 20.952857 +2.000000 7.300000 21.736129 +2.000000 7.400000 22.539402 +2.000000 7.500000 23.362674 +2.000000 7.600000 24.205946 +2.000000 7.700000 25.069218 +2.000000 7.800000 25.952490 +2.000000 7.900000 26.855762 +2.000000 8.000000 27.779035 +2.000000 8.100000 28.722307 +2.000000 8.200000 29.685579 +2.000000 8.300000 30.668851 +2.000000 8.400000 31.672123 +2.000000 8.500000 32.695395 +2.000000 8.600000 33.738668 +2.000000 8.700000 34.801940 +2.000000 8.800000 35.885212 +2.000000 8.900000 36.988484 +2.000000 9.000000 38.111756 +2.000000 9.100000 39.255028 +2.000000 9.200000 40.418301 +2.000000 9.300000 41.601573 +2.000000 9.400000 42.804845 +2.000000 9.500000 44.028117 +2.000000 9.600000 45.271389 +2.000000 9.700000 46.534661 +2.000000 9.800000 47.817934 +2.000000 9.900000 49.121206 +2.000000 10.000000 50.444478 +2.000000 10.100000 51.787750 +2.000000 10.200000 53.151022 +2.000000 10.300000 54.534294 +2.000000 10.400000 55.937567 +2.000000 10.500000 57.360839 +2.000000 10.600000 58.804111 +2.000000 10.700000 60.267383 +2.000000 10.800000 61.750655 +2.000000 10.900000 63.253927 +2.000000 11.000000 64.777200 +2.000000 11.100000 66.320472 +2.000000 11.200000 67.883744 +2.000000 11.300000 69.467016 +2.000000 11.400000 71.070288 +2.000000 11.500000 72.693560 +2.000000 11.600000 74.336832 +2.000000 11.700000 76.000105 +2.000000 11.800000 77.683377 +2.000000 11.900000 79.386649 +2.000000 12.000000 81.109921 +2.000000 12.100000 82.853193 +2.000000 12.200000 84.616465 +2.000000 12.300000 86.399738 +2.000000 12.400000 88.203010 +2.000000 12.500000 90.026282 +2.000000 12.600000 91.869554 +2.000000 12.700000 93.732826 +2.000000 12.800000 95.616098 +2.000000 12.900000 97.519371 +2.000000 13.000000 99.442643 +2.000000 13.100000 101.385915 +2.000000 13.200000 103.349187 +2.000000 13.300000 105.332459 +2.000000 13.400000 107.335731 +2.000000 13.500000 109.359004 +2.000000 13.600000 111.402276 +2.000000 13.700000 113.465548 +2.000000 13.800000 115.548820 +2.000000 13.900000 117.652092 +2.000000 14.000000 119.775364 +2.000000 14.100000 121.918637 +2.000000 14.200000 124.081909 +2.000000 14.300000 126.265181 +2.000000 14.400000 128.468453 +2.000000 14.500000 130.691725 +2.000000 14.600000 132.934997 +2.000000 14.700000 135.198270 +2.000000 14.800000 137.481542 +2.000000 14.900000 139.784814 +2.000000 15.000000 142.108086 + +2.100000 -5.000000 72.843342 +2.100000 -4.900000 71.207852 +2.100000 -4.800000 69.592362 +2.100000 -4.700000 67.996872 +2.100000 -4.600000 66.421382 +2.100000 -4.500000 64.865892 +2.100000 -4.400000 63.330403 +2.100000 -4.300000 61.814913 +2.100000 -4.200000 60.319423 +2.100000 -4.100000 58.843933 +2.100000 -4.000000 57.388443 +2.100000 -3.900000 55.952953 +2.100000 -3.800000 54.537463 +2.100000 -3.700000 53.141973 +2.100000 -3.600000 51.766483 +2.100000 -3.500000 50.410993 +2.100000 -3.400000 49.075503 +2.100000 -3.300000 47.760013 +2.100000 -3.200000 46.464523 +2.100000 -3.100000 45.189033 +2.100000 -3.000000 43.933543 +2.100000 -2.900000 42.698053 +2.100000 -2.800000 41.482563 +2.100000 -2.700000 40.287073 +2.100000 -2.600000 39.111583 +2.100000 -2.500000 37.956093 +2.100000 -2.400000 36.820603 +2.100000 -2.300000 35.705113 +2.100000 -2.200000 34.609623 +2.100000 -2.100000 33.534133 +2.100000 -2.000000 32.478643 +2.100000 -1.900000 31.443153 +2.100000 -1.800000 30.427663 +2.100000 -1.700000 29.432173 +2.100000 -1.600000 28.456683 +2.100000 -1.500000 27.501193 +2.100000 -1.400000 26.565703 +2.100000 -1.300000 25.650213 +2.100000 -1.200000 24.754723 +2.100000 -1.100000 23.879233 +2.100000 -1.000000 23.023743 +2.100000 -0.900000 22.188253 +2.100000 -0.800000 21.372763 +2.100000 -0.700000 20.577273 +2.100000 -0.600000 19.801783 +2.100000 -0.500000 19.046293 +2.100000 -0.400000 18.310803 +2.100000 -0.300000 17.595313 +2.100000 -0.200000 16.899824 +2.100000 -0.100000 16.224334 +2.100000 -0.000000 15.568844 +2.100000 0.100000 14.933354 +2.100000 0.200000 14.317864 +2.100000 0.300000 13.722374 +2.100000 0.400000 13.146884 +2.100000 0.500000 12.591394 +2.100000 0.600000 12.055904 +2.100000 0.700000 11.540414 +2.100000 0.800000 11.044924 +2.100000 0.900000 10.569434 +2.100000 1.000000 10.113944 +2.100000 1.100000 9.678454 +2.100000 1.200000 9.262964 +2.100000 1.300000 8.867474 +2.100000 1.400000 8.491984 +2.100000 1.500000 8.136494 +2.100000 1.600000 7.801004 +2.100000 1.700000 7.485514 +2.100000 1.800000 7.190024 +2.100000 1.900000 6.914534 +2.100000 2.000000 6.659044 +2.100000 2.100000 6.423554 +2.100000 2.200000 6.208064 +2.100000 2.300000 6.012574 +2.100000 2.400000 5.837084 +2.100000 2.500000 5.681594 +2.100000 2.600000 5.546104 +2.100000 2.700000 5.430614 +2.100000 2.800000 5.335124 +2.100000 2.900000 5.259634 +2.100000 3.000000 5.204144 +2.100000 3.100000 5.168654 +2.100000 3.200000 5.153164 +2.100000 3.300000 5.157674 +2.100000 3.400000 5.182184 +2.100000 3.500000 5.226694 +2.100000 3.600000 5.291204 +2.100000 3.700000 5.375714 +2.100000 3.800000 5.480224 +2.100000 3.900000 5.604735 +2.100000 4.000000 5.749245 +2.100000 4.100000 5.913755 +2.100000 4.200000 6.098265 +2.100000 4.300000 6.302775 +2.100000 4.400000 6.527285 +2.100000 4.500000 6.771795 +2.100000 4.600000 7.036305 +2.100000 4.700000 7.320815 +2.100000 4.800000 7.625325 +2.100000 4.900000 7.949835 +2.100000 5.000000 8.294345 +2.100000 5.100000 8.658855 +2.100000 5.200000 9.043365 +2.100000 5.300000 9.447875 +2.100000 5.400000 9.872385 +2.100000 5.500000 10.316895 +2.100000 5.600000 10.781405 +2.100000 5.700000 11.265915 +2.100000 5.800000 11.770425 +2.100000 5.900000 12.294935 +2.100000 6.000000 12.839445 +2.100000 6.100000 13.403955 +2.100000 6.200000 13.988465 +2.100000 6.300000 14.592975 +2.100000 6.400000 15.217485 +2.100000 6.500000 15.861995 +2.100000 6.600000 16.526505 +2.100000 6.700000 17.211015 +2.100000 6.800000 17.915525 +2.100000 6.900000 18.640035 +2.100000 7.000000 19.384545 +2.100000 7.100000 20.149055 +2.100000 7.200000 20.933565 +2.100000 7.300000 21.738075 +2.100000 7.400000 22.562585 +2.100000 7.500000 23.407095 +2.100000 7.600000 24.271605 +2.100000 7.700000 25.156115 +2.100000 7.800000 26.060625 +2.100000 7.900000 26.985135 +2.100000 8.000000 27.929645 +2.100000 8.100000 28.894156 +2.100000 8.200000 29.878666 +2.100000 8.300000 30.883176 +2.100000 8.400000 31.907686 +2.100000 8.500000 32.952196 +2.100000 8.600000 34.016706 +2.100000 8.700000 35.101216 +2.100000 8.800000 36.205726 +2.100000 8.900000 37.330236 +2.100000 9.000000 38.474746 +2.100000 9.100000 39.639256 +2.100000 9.200000 40.823766 +2.100000 9.300000 42.028276 +2.100000 9.400000 43.252786 +2.100000 9.500000 44.497296 +2.100000 9.600000 45.761806 +2.100000 9.700000 47.046316 +2.100000 9.800000 48.350826 +2.100000 9.900000 49.675336 +2.100000 10.000000 51.019846 +2.100000 10.100000 52.384356 +2.100000 10.200000 53.768866 +2.100000 10.300000 55.173376 +2.100000 10.400000 56.597886 +2.100000 10.500000 58.042396 +2.100000 10.600000 59.506906 +2.100000 10.700000 60.991416 +2.100000 10.800000 62.495926 +2.100000 10.900000 64.020436 +2.100000 11.000000 65.564946 +2.100000 11.100000 67.129456 +2.100000 11.200000 68.713966 +2.100000 11.300000 70.318476 +2.100000 11.400000 71.942986 +2.100000 11.500000 73.587496 +2.100000 11.600000 75.252006 +2.100000 11.700000 76.936516 +2.100000 11.800000 78.641026 +2.100000 11.900000 80.365536 +2.100000 12.000000 82.110046 +2.100000 12.100000 83.874556 +2.100000 12.200000 85.659066 +2.100000 12.300000 87.463577 +2.100000 12.400000 89.288087 +2.100000 12.500000 91.132597 +2.100000 12.600000 92.997107 +2.100000 12.700000 94.881617 +2.100000 12.800000 96.786127 +2.100000 12.900000 98.710637 +2.100000 13.000000 100.655147 +2.100000 13.100000 102.619657 +2.100000 13.200000 104.604167 +2.100000 13.300000 106.608677 +2.100000 13.400000 108.633187 +2.100000 13.500000 110.677697 +2.100000 13.600000 112.742207 +2.100000 13.700000 114.826717 +2.100000 13.800000 116.931227 +2.100000 13.900000 119.055737 +2.100000 14.000000 121.200247 +2.100000 14.100000 123.364757 +2.100000 14.200000 125.549267 +2.100000 14.300000 127.753777 +2.100000 14.400000 129.978287 +2.100000 14.500000 132.222797 +2.100000 14.600000 134.487307 +2.100000 14.700000 136.771817 +2.100000 14.800000 139.076327 +2.100000 14.900000 141.400837 +2.100000 15.000000 143.745347 + +2.200000 -5.000000 70.345992 +2.200000 -4.900000 68.731223 +2.200000 -4.800000 67.136454 +2.200000 -4.700000 65.561685 +2.200000 -4.600000 64.006916 +2.200000 -4.500000 62.472148 +2.200000 -4.400000 60.957379 +2.200000 -4.300000 59.462610 +2.200000 -4.200000 57.987841 +2.200000 -4.100000 56.533072 +2.200000 -4.000000 55.098303 +2.200000 -3.900000 53.683534 +2.200000 -3.800000 52.288766 +2.200000 -3.700000 50.913997 +2.200000 -3.600000 49.559228 +2.200000 -3.500000 48.224459 +2.200000 -3.400000 46.909690 +2.200000 -3.300000 45.614921 +2.200000 -3.200000 44.340152 +2.200000 -3.100000 43.085384 +2.200000 -3.000000 41.850615 +2.200000 -2.900000 40.635846 +2.200000 -2.800000 39.441077 +2.200000 -2.700000 38.266308 +2.200000 -2.600000 37.111539 +2.200000 -2.500000 35.976770 +2.200000 -2.400000 34.862002 +2.200000 -2.300000 33.767233 +2.200000 -2.200000 32.692464 +2.200000 -2.100000 31.637695 +2.200000 -2.000000 30.602926 +2.200000 -1.900000 29.588157 +2.200000 -1.800000 28.593388 +2.200000 -1.700000 27.618620 +2.200000 -1.600000 26.663851 +2.200000 -1.500000 25.729082 +2.200000 -1.400000 24.814313 +2.200000 -1.300000 23.919544 +2.200000 -1.200000 23.044775 +2.200000 -1.100000 22.190006 +2.200000 -1.000000 21.355238 +2.200000 -0.900000 20.540469 +2.200000 -0.800000 19.745700 +2.200000 -0.700000 18.970931 +2.200000 -0.600000 18.216162 +2.200000 -0.500000 17.481393 +2.200000 -0.400000 16.766624 +2.200000 -0.300000 16.071856 +2.200000 -0.200000 15.397087 +2.200000 -0.100000 14.742318 +2.200000 -0.000000 14.107549 +2.200000 0.100000 13.492780 +2.200000 0.200000 12.898011 +2.200000 0.300000 12.323242 +2.200000 0.400000 11.768474 +2.200000 0.500000 11.233705 +2.200000 0.600000 10.718936 +2.200000 0.700000 10.224167 +2.200000 0.800000 9.749398 +2.200000 0.900000 9.294629 +2.200000 1.000000 8.859860 +2.200000 1.100000 8.445092 +2.200000 1.200000 8.050323 +2.200000 1.300000 7.675554 +2.200000 1.400000 7.320785 +2.200000 1.500000 6.986016 +2.200000 1.600000 6.671247 +2.200000 1.700000 6.376479 +2.200000 1.800000 6.101710 +2.200000 1.900000 5.846941 +2.200000 2.000000 5.612172 +2.200000 2.100000 5.397403 +2.200000 2.200000 5.202634 +2.200000 2.300000 5.027865 +2.200000 2.400000 4.873097 +2.200000 2.500000 4.738328 +2.200000 2.600000 4.623559 +2.200000 2.700000 4.528790 +2.200000 2.800000 4.454021 +2.200000 2.900000 4.399252 +2.200000 3.000000 4.364483 +2.200000 3.100000 4.349715 +2.200000 3.200000 4.354946 +2.200000 3.300000 4.380177 +2.200000 3.400000 4.425408 +2.200000 3.500000 4.490639 +2.200000 3.600000 4.575870 +2.200000 3.700000 4.681101 +2.200000 3.800000 4.806333 +2.200000 3.900000 4.951564 +2.200000 4.000000 5.116795 +2.200000 4.100000 5.302026 +2.200000 4.200000 5.507257 +2.200000 4.300000 5.732488 +2.200000 4.400000 5.977719 +2.200000 4.500000 6.242951 +2.200000 4.600000 6.528182 +2.200000 4.700000 6.833413 +2.200000 4.800000 7.158644 +2.200000 4.900000 7.503875 +2.200000 5.000000 7.869106 +2.200000 5.100000 8.254337 +2.200000 5.200000 8.659569 +2.200000 5.300000 9.084800 +2.200000 5.400000 9.530031 +2.200000 5.500000 9.995262 +2.200000 5.600000 10.480493 +2.200000 5.700000 10.985724 +2.200000 5.800000 11.510955 +2.200000 5.900000 12.056187 +2.200000 6.000000 12.621418 +2.200000 6.100000 13.206649 +2.200000 6.200000 13.811880 +2.200000 6.300000 14.437111 +2.200000 6.400000 15.082342 +2.200000 6.500000 15.747573 +2.200000 6.600000 16.432805 +2.200000 6.700000 17.138036 +2.200000 6.800000 17.863267 +2.200000 6.900000 18.608498 +2.200000 7.000000 19.373729 +2.200000 7.100000 20.158960 +2.200000 7.200000 20.964191 +2.200000 7.300000 21.789423 +2.200000 7.400000 22.634654 +2.200000 7.500000 23.499885 +2.200000 7.600000 24.385116 +2.200000 7.700000 25.290347 +2.200000 7.800000 26.215578 +2.200000 7.900000 27.160809 +2.200000 8.000000 28.126041 +2.200000 8.100000 29.111272 +2.200000 8.200000 30.116503 +2.200000 8.300000 31.141734 +2.200000 8.400000 32.186965 +2.200000 8.500000 33.252196 +2.200000 8.600000 34.337427 +2.200000 8.700000 35.442659 +2.200000 8.800000 36.567890 +2.200000 8.900000 37.713121 +2.200000 9.000000 38.878352 +2.200000 9.100000 40.063583 +2.200000 9.200000 41.268814 +2.200000 9.300000 42.494046 +2.200000 9.400000 43.739277 +2.200000 9.500000 45.004508 +2.200000 9.600000 46.289739 +2.200000 9.700000 47.594970 +2.200000 9.800000 48.920201 +2.200000 9.900000 50.265432 +2.200000 10.000000 51.630664 +2.200000 10.100000 53.015895 +2.200000 10.200000 54.421126 +2.200000 10.300000 55.846357 +2.200000 10.400000 57.291588 +2.200000 10.500000 58.756819 +2.200000 10.600000 60.242050 +2.200000 10.700000 61.747282 +2.200000 10.800000 63.272513 +2.200000 10.900000 64.817744 +2.200000 11.000000 66.382975 +2.200000 11.100000 67.968206 +2.200000 11.200000 69.573437 +2.200000 11.300000 71.198668 +2.200000 11.400000 72.843900 +2.200000 11.500000 74.509131 +2.200000 11.600000 76.194362 +2.200000 11.700000 77.899593 +2.200000 11.800000 79.624824 +2.200000 11.900000 81.370055 +2.200000 12.000000 83.135286 +2.200000 12.100000 84.920518 +2.200000 12.200000 86.725749 +2.200000 12.300000 88.550980 +2.200000 12.400000 90.396211 +2.200000 12.500000 92.261442 +2.200000 12.600000 94.146673 +2.200000 12.700000 96.051904 +2.200000 12.800000 97.977136 +2.200000 12.900000 99.922367 +2.200000 13.000000 101.887598 +2.200000 13.100000 103.872829 +2.200000 13.200000 105.878060 +2.200000 13.300000 107.903291 +2.200000 13.400000 109.948522 +2.200000 13.500000 112.013754 +2.200000 13.600000 114.098985 +2.200000 13.700000 116.204216 +2.200000 13.800000 118.329447 +2.200000 13.900000 120.474678 +2.200000 14.000000 122.639909 +2.200000 14.100000 124.825140 +2.200000 14.200000 127.030372 +2.200000 14.300000 129.255603 +2.200000 14.400000 131.500834 +2.200000 14.500000 133.766065 +2.200000 14.600000 136.051296 +2.200000 14.700000 138.356527 +2.200000 14.800000 140.681758 +2.200000 14.900000 143.026990 +2.200000 15.000000 145.392221 + +2.300000 -5.000000 67.968021 +2.300000 -4.900000 66.373457 +2.300000 -4.800000 64.798892 +2.300000 -4.700000 63.244328 +2.300000 -4.600000 61.709763 +2.300000 -4.500000 60.195199 +2.300000 -4.400000 58.700634 +2.300000 -4.300000 57.226070 +2.300000 -4.200000 55.771505 +2.300000 -4.100000 54.336941 +2.300000 -4.000000 52.922377 +2.300000 -3.900000 51.527812 +2.300000 -3.800000 50.153248 +2.300000 -3.700000 48.798683 +2.300000 -3.600000 47.464119 +2.300000 -3.500000 46.149554 +2.300000 -3.400000 44.854990 +2.300000 -3.300000 43.580425 +2.300000 -3.200000 42.325861 +2.300000 -3.100000 41.091296 +2.300000 -3.000000 39.876732 +2.300000 -2.900000 38.682167 +2.300000 -2.800000 37.507603 +2.300000 -2.700000 36.353038 +2.300000 -2.600000 35.218474 +2.300000 -2.500000 34.103909 +2.300000 -2.400000 33.009345 +2.300000 -2.300000 31.934780 +2.300000 -2.200000 30.880216 +2.300000 -2.100000 29.845652 +2.300000 -2.000000 28.831087 +2.300000 -1.900000 27.836523 +2.300000 -1.800000 26.861958 +2.300000 -1.700000 25.907394 +2.300000 -1.600000 24.972829 +2.300000 -1.500000 24.058265 +2.300000 -1.400000 23.163700 +2.300000 -1.300000 22.289136 +2.300000 -1.200000 21.434571 +2.300000 -1.100000 20.600007 +2.300000 -1.000000 19.785442 +2.300000 -0.900000 18.990878 +2.300000 -0.800000 18.216313 +2.300000 -0.700000 17.461749 +2.300000 -0.600000 16.727184 +2.300000 -0.500000 16.012620 +2.300000 -0.400000 15.318056 +2.300000 -0.300000 14.643491 +2.300000 -0.200000 13.988927 +2.300000 -0.100000 13.354362 +2.300000 -0.000000 12.739798 +2.300000 0.100000 12.145233 +2.300000 0.200000 11.570669 +2.300000 0.300000 11.016104 +2.300000 0.400000 10.481540 +2.300000 0.500000 9.966975 +2.300000 0.600000 9.472411 +2.300000 0.700000 8.997846 +2.300000 0.800000 8.543282 +2.300000 0.900000 8.108717 +2.300000 1.000000 7.694153 +2.300000 1.100000 7.299588 +2.300000 1.200000 6.925024 +2.300000 1.300000 6.570459 +2.300000 1.400000 6.235895 +2.300000 1.500000 5.921331 +2.300000 1.600000 5.626766 +2.300000 1.700000 5.352202 +2.300000 1.800000 5.097637 +2.300000 1.900000 4.863073 +2.300000 2.000000 4.648508 +2.300000 2.100000 4.453944 +2.300000 2.200000 4.279379 +2.300000 2.300000 4.124815 +2.300000 2.400000 3.990250 +2.300000 2.500000 3.875686 +2.300000 2.600000 3.781121 +2.300000 2.700000 3.706557 +2.300000 2.800000 3.651992 +2.300000 2.900000 3.617428 +2.300000 3.000000 3.602863 +2.300000 3.100000 3.608299 +2.300000 3.200000 3.633735 +2.300000 3.300000 3.679170 +2.300000 3.400000 3.744606 +2.300000 3.500000 3.830041 +2.300000 3.600000 3.935477 +2.300000 3.700000 4.060912 +2.300000 3.800000 4.206348 +2.300000 3.900000 4.371783 +2.300000 4.000000 4.557219 +2.300000 4.100000 4.762654 +2.300000 4.200000 4.988090 +2.300000 4.300000 5.233525 +2.300000 4.400000 5.498961 +2.300000 4.500000 5.784396 +2.300000 4.600000 6.089832 +2.300000 4.700000 6.415267 +2.300000 4.800000 6.760703 +2.300000 4.900000 7.126138 +2.300000 5.000000 7.511574 +2.300000 5.100000 7.917010 +2.300000 5.200000 8.342445 +2.300000 5.300000 8.787881 +2.300000 5.400000 9.253316 +2.300000 5.500000 9.738752 +2.300000 5.600000 10.244187 +2.300000 5.700000 10.769623 +2.300000 5.800000 11.315058 +2.300000 5.900000 11.880494 +2.300000 6.000000 12.465929 +2.300000 6.100000 13.071365 +2.300000 6.200000 13.696800 +2.300000 6.300000 14.342236 +2.300000 6.400000 15.007671 +2.300000 6.500000 15.693107 +2.300000 6.600000 16.398542 +2.300000 6.700000 17.123978 +2.300000 6.800000 17.869413 +2.300000 6.900000 18.634849 +2.300000 7.000000 19.420285 +2.300000 7.100000 20.225720 +2.300000 7.200000 21.051156 +2.300000 7.300000 21.896591 +2.300000 7.400000 22.762027 +2.300000 7.500000 23.647462 +2.300000 7.600000 24.552898 +2.300000 7.700000 25.478333 +2.300000 7.800000 26.423769 +2.300000 7.900000 27.389204 +2.300000 8.000000 28.374640 +2.300000 8.100000 29.380075 +2.300000 8.200000 30.405511 +2.300000 8.300000 31.450946 +2.300000 8.400000 32.516382 +2.300000 8.500000 33.601817 +2.300000 8.600000 34.707253 +2.300000 8.700000 35.832689 +2.300000 8.800000 36.978124 +2.300000 8.900000 38.143560 +2.300000 9.000000 39.328995 +2.300000 9.100000 40.534431 +2.300000 9.200000 41.759866 +2.300000 9.300000 43.005302 +2.300000 9.400000 44.270737 +2.300000 9.500000 45.556173 +2.300000 9.600000 46.861608 +2.300000 9.700000 48.187044 +2.300000 9.800000 49.532479 +2.300000 9.900000 50.897915 +2.300000 10.000000 52.283350 +2.300000 10.100000 53.688786 +2.300000 10.200000 55.114221 +2.300000 10.300000 56.559657 +2.300000 10.400000 58.025092 +2.300000 10.500000 59.510528 +2.300000 10.600000 61.015964 +2.300000 10.700000 62.541399 +2.300000 10.800000 64.086835 +2.300000 10.900000 65.652270 +2.300000 11.000000 67.237706 +2.300000 11.100000 68.843141 +2.300000 11.200000 70.468577 +2.300000 11.300000 72.114012 +2.300000 11.400000 73.779448 +2.300000 11.500000 75.464883 +2.300000 11.600000 77.170319 +2.300000 11.700000 78.895754 +2.300000 11.800000 80.641190 +2.300000 11.900000 82.406625 +2.300000 12.000000 84.192061 +2.300000 12.100000 85.997496 +2.300000 12.200000 87.822932 +2.300000 12.300000 89.668368 +2.300000 12.400000 91.533803 +2.300000 12.500000 93.419239 +2.300000 12.600000 95.324674 +2.300000 12.700000 97.250110 +2.300000 12.800000 99.195545 +2.300000 12.900000 101.160981 +2.300000 13.000000 103.146416 +2.300000 13.100000 105.151852 +2.300000 13.200000 107.177287 +2.300000 13.300000 109.222723 +2.300000 13.400000 111.288158 +2.300000 13.500000 113.373594 +2.300000 13.600000 115.479029 +2.300000 13.700000 117.604465 +2.300000 13.800000 119.749900 +2.300000 13.900000 121.915336 +2.300000 14.000000 124.100771 +2.300000 14.100000 126.306207 +2.300000 14.200000 128.531643 +2.300000 14.300000 130.777078 +2.300000 14.400000 133.042514 +2.300000 14.500000 135.327949 +2.300000 14.600000 137.633385 +2.300000 14.700000 139.958820 +2.300000 14.800000 142.304256 +2.300000 14.900000 144.669691 +2.300000 15.000000 147.055127 + +2.400000 -5.000000 65.715326 +2.400000 -4.900000 64.140450 +2.400000 -4.800000 62.585573 +2.400000 -4.700000 61.050696 +2.400000 -4.600000 59.535819 +2.400000 -4.500000 58.040942 +2.400000 -4.400000 56.566065 +2.400000 -4.300000 55.111189 +2.400000 -4.200000 53.676312 +2.400000 -4.100000 52.261435 +2.400000 -4.000000 50.866558 +2.400000 -3.900000 49.491681 +2.400000 -3.800000 48.136805 +2.400000 -3.700000 46.801928 +2.400000 -3.600000 45.487051 +2.400000 -3.500000 44.192174 +2.400000 -3.400000 42.917297 +2.400000 -3.300000 41.662420 +2.400000 -3.200000 40.427544 +2.400000 -3.100000 39.212667 +2.400000 -3.000000 38.017790 +2.400000 -2.900000 36.842913 +2.400000 -2.800000 35.688036 +2.400000 -2.700000 34.553159 +2.400000 -2.600000 33.438283 +2.400000 -2.500000 32.343406 +2.400000 -2.400000 31.268529 +2.400000 -2.300000 30.213652 +2.400000 -2.200000 29.178775 +2.400000 -2.100000 28.163898 +2.400000 -2.000000 27.169022 +2.400000 -1.900000 26.194145 +2.400000 -1.800000 25.239268 +2.400000 -1.700000 24.304391 +2.400000 -1.600000 23.389514 +2.400000 -1.500000 22.494637 +2.400000 -1.400000 21.619761 +2.400000 -1.300000 20.764884 +2.400000 -1.200000 19.930007 +2.400000 -1.100000 19.115130 +2.400000 -1.000000 18.320253 +2.400000 -0.900000 17.545377 +2.400000 -0.800000 16.790500 +2.400000 -0.700000 16.055623 +2.400000 -0.600000 15.340746 +2.400000 -0.500000 14.645869 +2.400000 -0.400000 13.970992 +2.400000 -0.300000 13.316116 +2.400000 -0.200000 12.681239 +2.400000 -0.100000 12.066362 +2.400000 -0.000000 11.471485 +2.400000 0.100000 10.896608 +2.400000 0.200000 10.341731 +2.400000 0.300000 9.806855 +2.400000 0.400000 9.291978 +2.400000 0.500000 8.797101 +2.400000 0.600000 8.322224 +2.400000 0.700000 7.867347 +2.400000 0.800000 7.432470 +2.400000 0.900000 7.017594 +2.400000 1.000000 6.622717 +2.400000 1.100000 6.247840 +2.400000 1.200000 5.892963 +2.400000 1.300000 5.558086 +2.400000 1.400000 5.243209 +2.400000 1.500000 4.948333 +2.400000 1.600000 4.673456 +2.400000 1.700000 4.418579 +2.400000 1.800000 4.183702 +2.400000 1.900000 3.968825 +2.400000 2.000000 3.773949 +2.400000 2.100000 3.599072 +2.400000 2.200000 3.444195 +2.400000 2.300000 3.309318 +2.400000 2.400000 3.194441 +2.400000 2.500000 3.099564 +2.400000 2.600000 3.024688 +2.400000 2.700000 2.969811 +2.400000 2.800000 2.934934 +2.400000 2.900000 2.920057 +2.400000 3.000000 2.925180 +2.400000 3.100000 2.950303 +2.400000 3.200000 2.995427 +2.400000 3.300000 3.060550 +2.400000 3.400000 3.145673 +2.400000 3.500000 3.250796 +2.400000 3.600000 3.375919 +2.400000 3.700000 3.521042 +2.400000 3.800000 3.686166 +2.400000 3.900000 3.871289 +2.400000 4.000000 4.076412 +2.400000 4.100000 4.301535 +2.400000 4.200000 4.546658 +2.400000 4.300000 4.811781 +2.400000 4.400000 5.096905 +2.400000 4.500000 5.402028 +2.400000 4.600000 5.727151 +2.400000 4.700000 6.072274 +2.400000 4.800000 6.437397 +2.400000 4.900000 6.822521 +2.400000 5.000000 7.227644 +2.400000 5.100000 7.652767 +2.400000 5.200000 8.097890 +2.400000 5.300000 8.563013 +2.400000 5.400000 9.048136 +2.400000 5.500000 9.553260 +2.400000 5.600000 10.078383 +2.400000 5.700000 10.623506 +2.400000 5.800000 11.188629 +2.400000 5.900000 11.773752 +2.400000 6.000000 12.378875 +2.400000 6.100000 13.003999 +2.400000 6.200000 13.649122 +2.400000 6.300000 14.314245 +2.400000 6.400000 14.999368 +2.400000 6.500000 15.704491 +2.400000 6.600000 16.429614 +2.400000 6.700000 17.174738 +2.400000 6.800000 17.939861 +2.400000 6.900000 18.724984 +2.400000 7.000000 19.530107 +2.400000 7.100000 20.355230 +2.400000 7.200000 21.200353 +2.400000 7.300000 22.065477 +2.400000 7.400000 22.950600 +2.400000 7.500000 23.855723 +2.400000 7.600000 24.780846 +2.400000 7.700000 25.725969 +2.400000 7.800000 26.691093 +2.400000 7.900000 27.676216 +2.400000 8.000000 28.681339 +2.400000 8.100000 29.706462 +2.400000 8.200000 30.751585 +2.400000 8.300000 31.816708 +2.400000 8.400000 32.901832 +2.400000 8.500000 34.006955 +2.400000 8.600000 35.132078 +2.400000 8.700000 36.277201 +2.400000 8.800000 37.442324 +2.400000 8.900000 38.627447 +2.400000 9.000000 39.832571 +2.400000 9.100000 41.057694 +2.400000 9.200000 42.302817 +2.400000 9.300000 43.567940 +2.400000 9.400000 44.853063 +2.400000 9.500000 46.158186 +2.400000 9.600000 47.483310 +2.400000 9.700000 48.828433 +2.400000 9.800000 50.193556 +2.400000 9.900000 51.578679 +2.400000 10.000000 52.983802 +2.400000 10.100000 54.408925 +2.400000 10.200000 55.854049 +2.400000 10.300000 57.319172 +2.400000 10.400000 58.804295 +2.400000 10.500000 60.309418 +2.400000 10.600000 61.834541 +2.400000 10.700000 63.379665 +2.400000 10.800000 64.944788 +2.400000 10.900000 66.529911 +2.400000 11.000000 68.135034 +2.400000 11.100000 69.760157 +2.400000 11.200000 71.405280 +2.400000 11.300000 73.070404 +2.400000 11.400000 74.755527 +2.400000 11.500000 76.460650 +2.400000 11.600000 78.185773 +2.400000 11.700000 79.930896 +2.400000 11.800000 81.696019 +2.400000 11.900000 83.481143 +2.400000 12.000000 85.286266 +2.400000 12.100000 87.111389 +2.400000 12.200000 88.956512 +2.400000 12.300000 90.821635 +2.400000 12.400000 92.706758 +2.400000 12.500000 94.611882 +2.400000 12.600000 96.537005 +2.400000 12.700000 98.482128 +2.400000 12.800000 100.447251 +2.400000 12.900000 102.432374 +2.400000 13.000000 104.437497 +2.400000 13.100000 106.462621 +2.400000 13.200000 108.507744 +2.400000 13.300000 110.572867 +2.400000 13.400000 112.657990 +2.400000 13.500000 114.763113 +2.400000 13.600000 116.888237 +2.400000 13.700000 119.033360 +2.400000 13.800000 121.198483 +2.400000 13.900000 123.383606 +2.400000 14.000000 125.588729 +2.400000 14.100000 127.813852 +2.400000 14.200000 130.058976 +2.400000 14.300000 132.324099 +2.400000 14.400000 134.609222 +2.400000 14.500000 136.914345 +2.400000 14.600000 139.239468 +2.400000 14.700000 141.584591 +2.400000 14.800000 143.949715 +2.400000 14.900000 146.334838 +2.400000 15.000000 148.739961 + +2.500000 -5.000000 63.593205 +2.500000 -4.900000 62.037499 +2.500000 -4.800000 60.501793 +2.500000 -4.700000 58.986087 +2.500000 -4.600000 57.490381 +2.500000 -4.500000 56.014675 +2.500000 -4.400000 54.558969 +2.500000 -4.300000 53.123263 +2.500000 -4.200000 51.707557 +2.500000 -4.100000 50.311851 +2.500000 -4.000000 48.936145 +2.500000 -3.900000 47.580439 +2.500000 -3.800000 46.244733 +2.500000 -3.700000 44.929028 +2.500000 -3.600000 43.633322 +2.500000 -3.500000 42.357616 +2.500000 -3.400000 41.101910 +2.500000 -3.300000 39.866204 +2.500000 -3.200000 38.650498 +2.500000 -3.100000 37.454792 +2.500000 -3.000000 36.279086 +2.500000 -2.900000 35.123380 +2.500000 -2.800000 33.987674 +2.500000 -2.700000 32.871968 +2.500000 -2.600000 31.776262 +2.500000 -2.500000 30.700557 +2.500000 -2.400000 29.644851 +2.500000 -2.300000 28.609145 +2.500000 -2.200000 27.593439 +2.500000 -2.100000 26.597733 +2.500000 -2.000000 25.622027 +2.500000 -1.900000 24.666321 +2.500000 -1.800000 23.730615 +2.500000 -1.700000 22.814909 +2.500000 -1.600000 21.919203 +2.500000 -1.500000 21.043497 +2.500000 -1.400000 20.187791 +2.500000 -1.300000 19.352085 +2.500000 -1.200000 18.536380 +2.500000 -1.100000 17.740674 +2.500000 -1.000000 16.964968 +2.500000 -0.900000 16.209262 +2.500000 -0.800000 15.473556 +2.500000 -0.700000 14.757850 +2.500000 -0.600000 14.062144 +2.500000 -0.500000 13.386438 +2.500000 -0.400000 12.730732 +2.500000 -0.300000 12.095026 +2.500000 -0.200000 11.479320 +2.500000 -0.100000 10.883614 +2.500000 -0.000000 10.307908 +2.500000 0.100000 9.752203 +2.500000 0.200000 9.216497 +2.500000 0.300000 8.700791 +2.500000 0.400000 8.205085 +2.500000 0.500000 7.729379 +2.500000 0.600000 7.273673 +2.500000 0.700000 6.837967 +2.500000 0.800000 6.422261 +2.500000 0.900000 6.026555 +2.500000 1.000000 5.650849 +2.500000 1.100000 5.295143 +2.500000 1.200000 4.959437 +2.500000 1.300000 4.643732 +2.500000 1.400000 4.348026 +2.500000 1.500000 4.072320 +2.500000 1.600000 3.816614 +2.500000 1.700000 3.580908 +2.500000 1.800000 3.365202 +2.500000 1.900000 3.169496 +2.500000 2.000000 2.993790 +2.500000 2.100000 2.838084 +2.500000 2.200000 2.702378 +2.500000 2.300000 2.586672 +2.500000 2.400000 2.490966 +2.500000 2.500000 2.415260 +2.500000 2.600000 2.359555 +2.500000 2.700000 2.323849 +2.500000 2.800000 2.308143 +2.500000 2.900000 2.312437 +2.500000 3.000000 2.336731 +2.500000 3.100000 2.381025 +2.500000 3.200000 2.445319 +2.500000 3.300000 2.529613 +2.500000 3.400000 2.633907 +2.500000 3.500000 2.758201 +2.500000 3.600000 2.902495 +2.500000 3.700000 3.066789 +2.500000 3.800000 3.251083 +2.500000 3.900000 3.455378 +2.500000 4.000000 3.679672 +2.500000 4.100000 3.923966 +2.500000 4.200000 4.188260 +2.500000 4.300000 4.472554 +2.500000 4.400000 4.776848 +2.500000 4.500000 5.101142 +2.500000 4.600000 5.445436 +2.500000 4.700000 5.809730 +2.500000 4.800000 6.194024 +2.500000 4.900000 6.598318 +2.500000 5.000000 7.022612 +2.500000 5.100000 7.466907 +2.500000 5.200000 7.931201 +2.500000 5.300000 8.415495 +2.500000 5.400000 8.919789 +2.500000 5.500000 9.444083 +2.500000 5.600000 9.988377 +2.500000 5.700000 10.552671 +2.500000 5.800000 11.136965 +2.500000 5.900000 11.741259 +2.500000 6.000000 12.365553 +2.500000 6.100000 13.009847 +2.500000 6.200000 13.674141 +2.500000 6.300000 14.358435 +2.500000 6.400000 15.062730 +2.500000 6.500000 15.787024 +2.500000 6.600000 16.531318 +2.500000 6.700000 17.295612 +2.500000 6.800000 18.079906 +2.500000 6.900000 18.884200 +2.500000 7.000000 19.708494 +2.500000 7.100000 20.552788 +2.500000 7.200000 21.417082 +2.500000 7.300000 22.301376 +2.500000 7.400000 23.205670 +2.500000 7.500000 24.129964 +2.500000 7.600000 25.074258 +2.500000 7.700000 26.038553 +2.500000 7.800000 27.022847 +2.500000 7.900000 28.027141 +2.500000 8.000000 29.051435 +2.500000 8.100000 30.095729 +2.500000 8.200000 31.160023 +2.500000 8.300000 32.244317 +2.500000 8.400000 33.348611 +2.500000 8.500000 34.472905 +2.500000 8.600000 35.617199 +2.500000 8.700000 36.781493 +2.500000 8.800000 37.965787 +2.500000 8.900000 39.170082 +2.500000 9.000000 40.394376 +2.500000 9.100000 41.638670 +2.500000 9.200000 42.902964 +2.500000 9.300000 44.187258 +2.500000 9.400000 45.491552 +2.500000 9.500000 46.815846 +2.500000 9.600000 48.160140 +2.500000 9.700000 49.524434 +2.500000 9.800000 50.908728 +2.500000 9.900000 52.313022 +2.500000 10.000000 53.737316 +2.500000 10.100000 55.181610 +2.500000 10.200000 56.645905 +2.500000 10.300000 58.130199 +2.500000 10.400000 59.634493 +2.500000 10.500000 61.158787 +2.500000 10.600000 62.703081 +2.500000 10.700000 64.267375 +2.500000 10.800000 65.851669 +2.500000 10.900000 67.455963 +2.500000 11.000000 69.080257 +2.500000 11.100000 70.724551 +2.500000 11.200000 72.388845 +2.500000 11.300000 74.073139 +2.500000 11.400000 75.777433 +2.500000 11.500000 77.501728 +2.500000 11.600000 79.246022 +2.500000 11.700000 81.010316 +2.500000 11.800000 82.794610 +2.500000 11.900000 84.598904 +2.500000 12.000000 86.423198 +2.500000 12.100000 88.267492 +2.500000 12.200000 90.131786 +2.500000 12.300000 92.016080 +2.500000 12.400000 93.920374 +2.500000 12.500000 95.844668 +2.500000 12.600000 97.788962 +2.500000 12.700000 99.753257 +2.500000 12.800000 101.737551 +2.500000 12.900000 103.741845 +2.500000 13.000000 105.766139 +2.500000 13.100000 107.810433 +2.500000 13.200000 109.874727 +2.500000 13.300000 111.959021 +2.500000 13.400000 114.063315 +2.500000 13.500000 116.187609 +2.500000 13.600000 118.331903 +2.500000 13.700000 120.496197 +2.500000 13.800000 122.680491 +2.500000 13.900000 124.884785 +2.500000 14.000000 127.109080 +2.500000 14.100000 129.353374 +2.500000 14.200000 131.617668 +2.500000 14.300000 133.901962 +2.500000 14.400000 136.206256 +2.500000 14.500000 138.530550 +2.500000 14.600000 140.874844 +2.500000 14.700000 143.239138 +2.500000 14.800000 145.623432 +2.500000 14.900000 148.027726 +2.500000 15.000000 150.452020 + +2.600000 -5.000000 61.606286 +2.600000 -4.900000 60.069234 +2.600000 -4.800000 58.552182 +2.600000 -4.700000 57.055131 +2.600000 -4.600000 55.578079 +2.600000 -4.500000 54.121027 +2.600000 -4.400000 52.683975 +2.600000 -4.300000 51.266924 +2.600000 -4.200000 49.869872 +2.600000 -4.100000 48.492820 +2.600000 -4.000000 47.135768 +2.600000 -3.900000 45.798716 +2.600000 -3.800000 44.481665 +2.600000 -3.700000 43.184613 +2.600000 -3.600000 41.907561 +2.600000 -3.500000 40.650509 +2.600000 -3.400000 39.413458 +2.600000 -3.300000 38.196406 +2.600000 -3.200000 36.999354 +2.600000 -3.100000 35.822302 +2.600000 -3.000000 34.665251 +2.600000 -2.900000 33.528199 +2.600000 -2.800000 32.411147 +2.600000 -2.700000 31.314095 +2.600000 -2.600000 30.237044 +2.600000 -2.500000 29.179992 +2.600000 -2.400000 28.142940 +2.600000 -2.300000 27.125888 +2.600000 -2.200000 26.128837 +2.600000 -2.100000 25.151785 +2.600000 -2.000000 24.194733 +2.600000 -1.900000 23.257681 +2.600000 -1.800000 22.340630 +2.600000 -1.700000 21.443578 +2.600000 -1.600000 20.566526 +2.600000 -1.500000 19.709474 +2.600000 -1.400000 18.872423 +2.600000 -1.300000 18.055371 +2.600000 -1.200000 17.258319 +2.600000 -1.100000 16.481267 +2.600000 -1.000000 15.724216 +2.600000 -0.900000 14.987164 +2.600000 -0.800000 14.270112 +2.600000 -0.700000 13.573060 +2.600000 -0.600000 12.896009 +2.600000 -0.500000 12.238957 +2.600000 -0.400000 11.601905 +2.600000 -0.300000 10.984853 +2.600000 -0.200000 10.387802 +2.600000 -0.100000 9.810750 +2.600000 -0.000000 9.253698 +2.600000 0.100000 8.716646 +2.600000 0.200000 8.199595 +2.600000 0.300000 7.702543 +2.600000 0.400000 7.225491 +2.600000 0.500000 6.768439 +2.600000 0.600000 6.331388 +2.600000 0.700000 5.914336 +2.600000 0.800000 5.517284 +2.600000 0.900000 5.140232 +2.600000 1.000000 4.783181 +2.600000 1.100000 4.446129 +2.600000 1.200000 4.129077 +2.600000 1.300000 3.832025 +2.600000 1.400000 3.554974 +2.600000 1.500000 3.297922 +2.600000 1.600000 3.060870 +2.600000 1.700000 2.843818 +2.600000 1.800000 2.646767 +2.600000 1.900000 2.469715 +2.600000 2.000000 2.312663 +2.600000 2.100000 2.175611 +2.600000 2.200000 2.058560 +2.600000 2.300000 1.961508 +2.600000 2.400000 1.884456 +2.600000 2.500000 1.827404 +2.600000 2.600000 1.790353 +2.600000 2.700000 1.773301 +2.600000 2.800000 1.776249 +2.600000 2.900000 1.799197 +2.600000 3.000000 1.842146 +2.600000 3.100000 1.905094 +2.600000 3.200000 1.988042 +2.600000 3.300000 2.090990 +2.600000 3.400000 2.213939 +2.600000 3.500000 2.356887 +2.600000 3.600000 2.519835 +2.600000 3.700000 2.702783 +2.600000 3.800000 2.905732 +2.600000 3.900000 3.128680 +2.600000 4.000000 3.371628 +2.600000 4.100000 3.634576 +2.600000 4.200000 3.917525 +2.600000 4.300000 4.220473 +2.600000 4.400000 4.543421 +2.600000 4.500000 4.886369 +2.600000 4.600000 5.249318 +2.600000 4.700000 5.632266 +2.600000 4.800000 6.035214 +2.600000 4.900000 6.458162 +2.600000 5.000000 6.901111 +2.600000 5.100000 7.364059 +2.600000 5.200000 7.847007 +2.600000 5.300000 8.349955 +2.600000 5.400000 8.872904 +2.600000 5.500000 9.415852 +2.600000 5.600000 9.978800 +2.600000 5.700000 10.561748 +2.600000 5.800000 11.164697 +2.600000 5.900000 11.787645 +2.600000 6.000000 12.430593 +2.600000 6.100000 13.093541 +2.600000 6.200000 13.776490 +2.600000 6.300000 14.479438 +2.600000 6.400000 15.202386 +2.600000 6.500000 15.945334 +2.600000 6.600000 16.708283 +2.600000 6.700000 17.491231 +2.600000 6.800000 18.294179 +2.600000 6.900000 19.117127 +2.600000 7.000000 19.960076 +2.600000 7.100000 20.823024 +2.600000 7.200000 21.705972 +2.600000 7.300000 22.608920 +2.600000 7.400000 23.531868 +2.600000 7.500000 24.474817 +2.600000 7.600000 25.437765 +2.600000 7.700000 26.420713 +2.600000 7.800000 27.423661 +2.600000 7.900000 28.446610 +2.600000 8.000000 29.489558 +2.600000 8.100000 30.552506 +2.600000 8.200000 31.635454 +2.600000 8.300000 32.738403 +2.600000 8.400000 33.861351 +2.600000 8.500000 35.004299 +2.600000 8.600000 36.167247 +2.600000 8.700000 37.350196 +2.600000 8.800000 38.553144 +2.600000 8.900000 39.776092 +2.600000 9.000000 41.019040 +2.600000 9.100000 42.281989 +2.600000 9.200000 43.564937 +2.600000 9.300000 44.867885 +2.600000 9.400000 46.190833 +2.600000 9.500000 47.533782 +2.600000 9.600000 48.896730 +2.600000 9.700000 50.279678 +2.600000 9.800000 51.682626 +2.600000 9.900000 53.105575 +2.600000 10.000000 54.548523 +2.600000 10.100000 56.011471 +2.600000 10.200000 57.494419 +2.600000 10.300000 58.997368 +2.600000 10.400000 60.520316 +2.600000 10.500000 62.063264 +2.600000 10.600000 63.626212 +2.600000 10.700000 65.209161 +2.600000 10.800000 66.812109 +2.600000 10.900000 68.435057 +2.600000 11.000000 70.078005 +2.600000 11.100000 71.740954 +2.600000 11.200000 73.423902 +2.600000 11.300000 75.126850 +2.600000 11.400000 76.849798 +2.600000 11.500000 78.592747 +2.600000 11.600000 80.355695 +2.600000 11.700000 82.138643 +2.600000 11.800000 83.941591 +2.600000 11.900000 85.764540 +2.600000 12.000000 87.607488 +2.600000 12.100000 89.470436 +2.600000 12.200000 91.353384 +2.600000 12.300000 93.256333 +2.600000 12.400000 95.179281 +2.600000 12.500000 97.122229 +2.600000 12.600000 99.085177 +2.600000 12.700000 101.068126 +2.600000 12.800000 103.071074 +2.600000 12.900000 105.094022 +2.600000 13.000000 107.136970 +2.600000 13.100000 109.199919 +2.600000 13.200000 111.282867 +2.600000 13.300000 113.385815 +2.600000 13.400000 115.508763 +2.600000 13.500000 117.651712 +2.600000 13.600000 119.814660 +2.600000 13.700000 121.997608 +2.600000 13.800000 124.200556 +2.600000 13.900000 126.423505 +2.600000 14.000000 128.666453 +2.600000 14.100000 130.929401 +2.600000 14.200000 133.212349 +2.600000 14.300000 135.515298 +2.600000 14.400000 137.838246 +2.600000 14.500000 140.181194 +2.600000 14.600000 142.544142 +2.600000 14.700000 144.927091 +2.600000 14.800000 147.330039 +2.600000 14.900000 149.752987 +2.600000 15.000000 152.195935 + +2.700000 -5.000000 59.758473 +2.700000 -4.900000 58.239558 +2.700000 -4.800000 56.740644 +2.700000 -4.700000 55.261730 +2.700000 -4.600000 53.802815 +2.700000 -4.500000 52.363901 +2.700000 -4.400000 50.944987 +2.700000 -4.300000 49.546072 +2.700000 -4.200000 48.167158 +2.700000 -4.100000 46.808244 +2.700000 -4.000000 45.469329 +2.700000 -3.900000 44.150415 +2.700000 -3.800000 42.851501 +2.700000 -3.700000 41.572586 +2.700000 -3.600000 40.313672 +2.700000 -3.500000 39.074758 +2.700000 -3.400000 37.855843 +2.700000 -3.300000 36.656929 +2.700000 -3.200000 35.478015 +2.700000 -3.100000 34.319100 +2.700000 -3.000000 33.180186 +2.700000 -2.900000 32.061272 +2.700000 -2.800000 30.962357 +2.700000 -2.700000 29.883443 +2.700000 -2.600000 28.824529 +2.700000 -2.500000 27.785614 +2.700000 -2.400000 26.766700 +2.700000 -2.300000 25.767786 +2.700000 -2.200000 24.788872 +2.700000 -2.100000 23.829957 +2.700000 -2.000000 22.891043 +2.700000 -1.900000 21.972129 +2.700000 -1.800000 21.073214 +2.700000 -1.700000 20.194300 +2.700000 -1.600000 19.335386 +2.700000 -1.500000 18.496471 +2.700000 -1.400000 17.677557 +2.700000 -1.300000 16.878643 +2.700000 -1.200000 16.099728 +2.700000 -1.100000 15.340814 +2.700000 -1.000000 14.601900 +2.700000 -0.900000 13.882985 +2.700000 -0.800000 13.184071 +2.700000 -0.700000 12.505157 +2.700000 -0.600000 11.846242 +2.700000 -0.500000 11.207328 +2.700000 -0.400000 10.588414 +2.700000 -0.300000 9.989499 +2.700000 -0.200000 9.410585 +2.700000 -0.100000 8.851671 +2.700000 -0.000000 8.312756 +2.700000 0.100000 7.793842 +2.700000 0.200000 7.294928 +2.700000 0.300000 6.816013 +2.700000 0.400000 6.357099 +2.700000 0.500000 5.918185 +2.700000 0.600000 5.499271 +2.700000 0.700000 5.100356 +2.700000 0.800000 4.721442 +2.700000 0.900000 4.362528 +2.700000 1.000000 4.023613 +2.700000 1.100000 3.704699 +2.700000 1.200000 3.405785 +2.700000 1.300000 3.126870 +2.700000 1.400000 2.867956 +2.700000 1.500000 2.629042 +2.700000 1.600000 2.410127 +2.700000 1.700000 2.211213 +2.700000 1.800000 2.032299 +2.700000 1.900000 1.873384 +2.700000 2.000000 1.734470 +2.700000 2.100000 1.615556 +2.700000 2.200000 1.516641 +2.700000 2.300000 1.437727 +2.700000 2.400000 1.378813 +2.700000 2.500000 1.339898 +2.700000 2.600000 1.320984 +2.700000 2.700000 1.322070 +2.700000 2.800000 1.343155 +2.700000 2.900000 1.384241 +2.700000 3.000000 1.445327 +2.700000 3.100000 1.526412 +2.700000 3.200000 1.627498 +2.700000 3.300000 1.748584 +2.700000 3.400000 1.889670 +2.700000 3.500000 2.050755 +2.700000 3.600000 2.231841 +2.700000 3.700000 2.432927 +2.700000 3.800000 2.654012 +2.700000 3.900000 2.895098 +2.700000 4.000000 3.156184 +2.700000 4.100000 3.437269 +2.700000 4.200000 3.738355 +2.700000 4.300000 4.059441 +2.700000 4.400000 4.400526 +2.700000 4.500000 4.761612 +2.700000 4.600000 5.142698 +2.700000 4.700000 5.543783 +2.700000 4.800000 5.964869 +2.700000 4.900000 6.405955 +2.700000 5.000000 6.867040 +2.700000 5.100000 7.348126 +2.700000 5.200000 7.849212 +2.700000 5.300000 8.370297 +2.700000 5.400000 8.911383 +2.700000 5.500000 9.472469 +2.700000 5.600000 10.053554 +2.700000 5.700000 10.654640 +2.700000 5.800000 11.275726 +2.700000 5.900000 11.916811 +2.700000 6.000000 12.577897 +2.700000 6.100000 13.258983 +2.700000 6.200000 13.960069 +2.700000 6.300000 14.681154 +2.700000 6.400000 15.422240 +2.700000 6.500000 16.183326 +2.700000 6.600000 16.964411 +2.700000 6.700000 17.765497 +2.700000 6.800000 18.586583 +2.700000 6.900000 19.427668 +2.700000 7.000000 20.288754 +2.700000 7.100000 21.169840 +2.700000 7.200000 22.070925 +2.700000 7.300000 22.992011 +2.700000 7.400000 23.933097 +2.700000 7.500000 24.894182 +2.700000 7.600000 25.875268 +2.700000 7.700000 26.876354 +2.700000 7.800000 27.897439 +2.700000 7.900000 28.938525 +2.700000 8.000000 29.999611 +2.700000 8.100000 31.080696 +2.700000 8.200000 32.181782 +2.700000 8.300000 33.302868 +2.700000 8.400000 34.443953 +2.700000 8.500000 35.605039 +2.700000 8.600000 36.786125 +2.700000 8.700000 37.987210 +2.700000 8.800000 39.208296 +2.700000 8.900000 40.449382 +2.700000 9.000000 41.710467 +2.700000 9.100000 42.991553 +2.700000 9.200000 44.292639 +2.700000 9.300000 45.613725 +2.700000 9.400000 46.954810 +2.700000 9.500000 48.315896 +2.700000 9.600000 49.696982 +2.700000 9.700000 51.098067 +2.700000 9.800000 52.519153 +2.700000 9.900000 53.960239 +2.700000 10.000000 55.421324 +2.700000 10.100000 56.902410 +2.700000 10.200000 58.403496 +2.700000 10.300000 59.924581 +2.700000 10.400000 61.465667 +2.700000 10.500000 63.026753 +2.700000 10.600000 64.607838 +2.700000 10.700000 66.208924 +2.700000 10.800000 67.830010 +2.700000 10.900000 69.471095 +2.700000 11.000000 71.132181 +2.700000 11.100000 72.813267 +2.700000 11.200000 74.514352 +2.700000 11.300000 76.235438 +2.700000 11.400000 77.976524 +2.700000 11.500000 79.737609 +2.700000 11.600000 81.518695 +2.700000 11.700000 83.319781 +2.700000 11.800000 85.140866 +2.700000 11.900000 86.981952 +2.700000 12.000000 88.843038 +2.700000 12.100000 90.724124 +2.700000 12.200000 92.625209 +2.700000 12.300000 94.546295 +2.700000 12.400000 96.487381 +2.700000 12.500000 98.448466 +2.700000 12.600000 100.429552 +2.700000 12.700000 102.430638 +2.700000 12.800000 104.451723 +2.700000 12.900000 106.492809 +2.700000 13.000000 108.553895 +2.700000 13.100000 110.634980 +2.700000 13.200000 112.736066 +2.700000 13.300000 114.857152 +2.700000 13.400000 116.998237 +2.700000 13.500000 119.159323 +2.700000 13.600000 121.340409 +2.700000 13.700000 123.541494 +2.700000 13.800000 125.762580 +2.700000 13.900000 128.003666 +2.700000 14.000000 130.264751 +2.700000 14.100000 132.545837 +2.700000 14.200000 134.846923 +2.700000 14.300000 137.168008 +2.700000 14.400000 139.509094 +2.700000 14.500000 141.870180 +2.700000 14.600000 144.251265 +2.700000 14.700000 146.652351 +2.700000 14.800000 149.073437 +2.700000 14.900000 151.514523 +2.700000 15.000000 153.975608 + +2.800000 -5.000000 58.052886 +2.800000 -4.900000 56.551592 +2.800000 -4.800000 55.070299 +2.800000 -4.700000 53.609005 +2.800000 -4.600000 52.167711 +2.800000 -4.500000 50.746418 +2.800000 -4.400000 49.345124 +2.800000 -4.300000 47.963830 +2.800000 -4.200000 46.602537 +2.800000 -4.100000 45.261243 +2.800000 -4.000000 43.939949 +2.800000 -3.900000 42.638656 +2.800000 -3.800000 41.357362 +2.800000 -3.700000 40.096069 +2.800000 -3.600000 38.854775 +2.800000 -3.500000 37.633481 +2.800000 -3.400000 36.432188 +2.800000 -3.300000 35.250894 +2.800000 -3.200000 34.089600 +2.800000 -3.100000 32.948307 +2.800000 -3.000000 31.827013 +2.800000 -2.900000 30.725720 +2.800000 -2.800000 29.644426 +2.800000 -2.700000 28.583132 +2.800000 -2.600000 27.541839 +2.800000 -2.500000 26.520545 +2.800000 -2.400000 25.519251 +2.800000 -2.300000 24.537958 +2.800000 -2.200000 23.576664 +2.800000 -2.100000 22.635371 +2.800000 -2.000000 21.714077 +2.800000 -1.900000 20.812783 +2.800000 -1.800000 19.931490 +2.800000 -1.700000 19.070196 +2.800000 -1.600000 18.228902 +2.800000 -1.500000 17.407609 +2.800000 -1.400000 16.606315 +2.800000 -1.300000 15.825022 +2.800000 -1.200000 15.063728 +2.800000 -1.100000 14.322434 +2.800000 -1.000000 13.601141 +2.800000 -0.900000 12.899847 +2.800000 -0.800000 12.218553 +2.800000 -0.700000 11.557260 +2.800000 -0.600000 10.915966 +2.800000 -0.500000 10.294672 +2.800000 -0.400000 9.693379 +2.800000 -0.300000 9.112085 +2.800000 -0.200000 8.550792 +2.800000 -0.100000 8.009498 +2.800000 -0.000000 7.488204 +2.800000 0.100000 6.986911 +2.800000 0.200000 6.505617 +2.800000 0.300000 6.044323 +2.800000 0.400000 5.603030 +2.800000 0.500000 5.181736 +2.800000 0.600000 4.780443 +2.800000 0.700000 4.399149 +2.800000 0.800000 4.037855 +2.800000 0.900000 3.696562 +2.800000 1.000000 3.375268 +2.800000 1.100000 3.073974 +2.800000 1.200000 2.792681 +2.800000 1.300000 2.531387 +2.800000 1.400000 2.290094 +2.800000 1.500000 2.068800 +2.800000 1.600000 1.867506 +2.800000 1.700000 1.686213 +2.800000 1.800000 1.524919 +2.800000 1.900000 1.383625 +2.800000 2.000000 1.262332 +2.800000 2.100000 1.161038 +2.800000 2.200000 1.079744 +2.800000 2.300000 1.018451 +2.800000 2.400000 0.977157 +2.800000 2.500000 0.955864 +2.800000 2.600000 0.954570 +2.800000 2.700000 0.973276 +2.800000 2.800000 1.011983 +2.800000 2.900000 1.070689 +2.800000 3.000000 1.149395 +2.800000 3.100000 1.248102 +2.800000 3.200000 1.366808 +2.800000 3.300000 1.505515 +2.800000 3.400000 1.664221 +2.800000 3.500000 1.842927 +2.800000 3.600000 2.041634 +2.800000 3.700000 2.260340 +2.800000 3.800000 2.499046 +2.800000 3.900000 2.757753 +2.800000 4.000000 3.036459 +2.800000 4.100000 3.335166 +2.800000 4.200000 3.653872 +2.800000 4.300000 3.992578 +2.800000 4.400000 4.351285 +2.800000 4.500000 4.729991 +2.800000 4.600000 5.128697 +2.800000 4.700000 5.547404 +2.800000 4.800000 5.986110 +2.800000 4.900000 6.444817 +2.800000 5.000000 6.923523 +2.800000 5.100000 7.422229 +2.800000 5.200000 7.940936 +2.800000 5.300000 8.479642 +2.800000 5.400000 9.038348 +2.800000 5.500000 9.617055 +2.800000 5.600000 10.215761 +2.800000 5.700000 10.834467 +2.800000 5.800000 11.473174 +2.800000 5.900000 12.131880 +2.800000 6.000000 12.810587 +2.800000 6.100000 13.509293 +2.800000 6.200000 14.227999 +2.800000 6.300000 14.966706 +2.800000 6.400000 15.725412 +2.800000 6.500000 16.504118 +2.800000 6.600000 17.302825 +2.800000 6.700000 18.121531 +2.800000 6.800000 18.960238 +2.800000 6.900000 19.818944 +2.800000 7.000000 20.697650 +2.800000 7.100000 21.596357 +2.800000 7.200000 22.515063 +2.800000 7.300000 23.453769 +2.800000 7.400000 24.412476 +2.800000 7.500000 25.391182 +2.800000 7.600000 26.389889 +2.800000 7.700000 27.408595 +2.800000 7.800000 28.447301 +2.800000 7.900000 29.506008 +2.800000 8.000000 30.584714 +2.800000 8.100000 31.683420 +2.800000 8.200000 32.802127 +2.800000 8.300000 33.940833 +2.800000 8.400000 35.099539 +2.800000 8.500000 36.278246 +2.800000 8.600000 37.476952 +2.800000 8.700000 38.695659 +2.800000 8.800000 39.934365 +2.800000 8.900000 41.193071 +2.800000 9.000000 42.471778 +2.800000 9.100000 43.770484 +2.800000 9.200000 45.089190 +2.800000 9.300000 46.427897 +2.800000 9.400000 47.786603 +2.800000 9.500000 49.165310 +2.800000 9.600000 50.564016 +2.800000 9.700000 51.982722 +2.800000 9.800000 53.421429 +2.800000 9.900000 54.880135 +2.800000 10.000000 56.358841 +2.800000 10.100000 57.857548 +2.800000 10.200000 59.376254 +2.800000 10.300000 60.914961 +2.800000 10.400000 62.473667 +2.800000 10.500000 64.052373 +2.800000 10.600000 65.651080 +2.800000 10.700000 67.269786 +2.800000 10.800000 68.908492 +2.800000 10.900000 70.567199 +2.800000 11.000000 72.245905 +2.800000 11.100000 73.944612 +2.800000 11.200000 75.663318 +2.800000 11.300000 77.402024 +2.800000 11.400000 79.160731 +2.800000 11.500000 80.939437 +2.800000 11.600000 82.738143 +2.800000 11.700000 84.556850 +2.800000 11.800000 86.395556 +2.800000 11.900000 88.254262 +2.800000 12.000000 90.132969 +2.800000 12.100000 92.031675 +2.800000 12.200000 93.950382 +2.800000 12.300000 95.889088 +2.800000 12.400000 97.847794 +2.800000 12.500000 99.826501 +2.800000 12.600000 101.825207 +2.800000 12.700000 103.843913 +2.800000 12.800000 105.882620 +2.800000 12.900000 107.941326 +2.800000 13.000000 110.020033 +2.800000 13.100000 112.118739 +2.800000 13.200000 114.237445 +2.800000 13.300000 116.376152 +2.800000 13.400000 118.534858 +2.800000 13.500000 120.713564 +2.800000 13.600000 122.912271 +2.800000 13.700000 125.130977 +2.800000 13.800000 127.369684 +2.800000 13.900000 129.628390 +2.800000 14.000000 131.907096 +2.800000 14.100000 134.205803 +2.800000 14.200000 136.524509 +2.800000 14.300000 138.863215 +2.800000 14.400000 141.221922 +2.800000 14.500000 143.600628 +2.800000 14.600000 145.999334 +2.800000 14.700000 148.418041 +2.800000 14.800000 150.856747 +2.800000 14.900000 153.315454 +2.800000 15.000000 155.794160 + +2.900000 -5.000000 56.491820 +2.900000 -4.900000 55.007630 +2.900000 -4.800000 53.543441 +2.900000 -4.700000 52.099251 +2.900000 -4.600000 50.675061 +2.900000 -4.500000 49.270872 +2.900000 -4.400000 47.886682 +2.900000 -4.300000 46.522492 +2.900000 -4.200000 45.178303 +2.900000 -4.100000 43.854113 +2.900000 -4.000000 42.549923 +2.900000 -3.900000 41.265733 +2.900000 -3.800000 40.001544 +2.900000 -3.700000 38.757354 +2.900000 -3.600000 37.533164 +2.900000 -3.500000 36.328975 +2.900000 -3.400000 35.144785 +2.900000 -3.300000 33.980595 +2.900000 -3.200000 32.836406 +2.900000 -3.100000 31.712216 +2.900000 -3.000000 30.608026 +2.900000 -2.900000 29.523837 +2.900000 -2.800000 28.459647 +2.900000 -2.700000 27.415457 +2.900000 -2.600000 26.391268 +2.900000 -2.500000 25.387078 +2.900000 -2.400000 24.402888 +2.900000 -2.300000 23.438699 +2.900000 -2.200000 22.494509 +2.900000 -2.100000 21.570319 +2.900000 -2.000000 20.666130 +2.900000 -1.900000 19.781940 +2.900000 -1.800000 18.917750 +2.900000 -1.700000 18.073561 +2.900000 -1.600000 17.249371 +2.900000 -1.500000 16.445181 +2.900000 -1.400000 15.660992 +2.900000 -1.300000 14.896802 +2.900000 -1.200000 14.152612 +2.900000 -1.100000 13.428423 +2.900000 -1.000000 12.724233 +2.900000 -0.900000 12.040043 +2.900000 -0.800000 11.375854 +2.900000 -0.700000 10.731664 +2.900000 -0.600000 10.107474 +2.900000 -0.500000 9.503285 +2.900000 -0.400000 8.919095 +2.900000 -0.300000 8.354905 +2.900000 -0.200000 7.810716 +2.900000 -0.100000 7.286526 +2.900000 -0.000000 6.782336 +2.900000 0.100000 6.298147 +2.900000 0.200000 5.833957 +2.900000 0.300000 5.389767 +2.900000 0.400000 4.965577 +2.900000 0.500000 4.561388 +2.900000 0.600000 4.177198 +2.900000 0.700000 3.813008 +2.900000 0.800000 3.468819 +2.900000 0.900000 3.144629 +2.900000 1.000000 2.840439 +2.900000 1.100000 2.556250 +2.900000 1.200000 2.292060 +2.900000 1.300000 2.047870 +2.900000 1.400000 1.823681 +2.900000 1.500000 1.619491 +2.900000 1.600000 1.435301 +2.900000 1.700000 1.271112 +2.900000 1.800000 1.126922 +2.900000 1.900000 1.002732 +2.900000 2.000000 0.898543 +2.900000 2.100000 0.814353 +2.900000 2.200000 0.750163 +2.900000 2.300000 0.705974 +2.900000 2.400000 0.681784 +2.900000 2.500000 0.677594 +2.900000 2.600000 0.693405 +2.900000 2.700000 0.729215 +2.900000 2.800000 0.785025 +2.900000 2.900000 0.860836 +2.900000 3.000000 0.956646 +2.900000 3.100000 1.072456 +2.900000 3.200000 1.208267 +2.900000 3.300000 1.364077 +2.900000 3.400000 1.539887 +2.900000 3.500000 1.735698 +2.900000 3.600000 1.951508 +2.900000 3.700000 2.187318 +2.900000 3.800000 2.443129 +2.900000 3.900000 2.718939 +2.900000 4.000000 3.014749 +2.900000 4.100000 3.330560 +2.900000 4.200000 3.666370 +2.900000 4.300000 4.022180 +2.900000 4.400000 4.397991 +2.900000 4.500000 4.793801 +2.900000 4.600000 5.209611 +2.900000 4.700000 5.645421 +2.900000 4.800000 6.101232 +2.900000 4.900000 6.577042 +2.900000 5.000000 7.072852 +2.900000 5.100000 7.588663 +2.900000 5.200000 8.124473 +2.900000 5.300000 8.680283 +2.900000 5.400000 9.256094 +2.900000 5.500000 9.851904 +2.900000 5.600000 10.467714 +2.900000 5.700000 11.103525 +2.900000 5.800000 11.759335 +2.900000 5.900000 12.435145 +2.900000 6.000000 13.130956 +2.900000 6.100000 13.846766 +2.900000 6.200000 14.582576 +2.900000 6.300000 15.338387 +2.900000 6.400000 16.114197 +2.900000 6.500000 16.910007 +2.900000 6.600000 17.725818 +2.900000 6.700000 18.561628 +2.900000 6.800000 19.417438 +2.900000 6.900000 20.293249 +2.900000 7.000000 21.189059 +2.900000 7.100000 22.104869 +2.900000 7.200000 23.040680 +2.900000 7.300000 23.996490 +2.900000 7.400000 24.972300 +2.900000 7.500000 25.968111 +2.900000 7.600000 26.983921 +2.900000 7.700000 28.019731 +2.900000 7.800000 29.075542 +2.900000 7.900000 30.151352 +2.900000 8.000000 31.247162 +2.900000 8.100000 32.362973 +2.900000 8.200000 33.498783 +2.900000 8.300000 34.654593 +2.900000 8.400000 35.830404 +2.900000 8.500000 37.026214 +2.900000 8.600000 38.242024 +2.900000 8.700000 39.477835 +2.900000 8.800000 40.733645 +2.900000 8.900000 42.009455 +2.900000 9.000000 43.305265 +2.900000 9.100000 44.621076 +2.900000 9.200000 45.956886 +2.900000 9.300000 47.312696 +2.900000 9.400000 48.688507 +2.900000 9.500000 50.084317 +2.900000 9.600000 51.500127 +2.900000 9.700000 52.935938 +2.900000 9.800000 54.391748 +2.900000 9.900000 55.867558 +2.900000 10.000000 57.363369 +2.900000 10.100000 58.879179 +2.900000 10.200000 60.414989 +2.900000 10.300000 61.970800 +2.900000 10.400000 63.546610 +2.900000 10.500000 65.142420 +2.900000 10.600000 66.758231 +2.900000 10.700000 68.394041 +2.900000 10.800000 70.049851 +2.900000 10.900000 71.725662 +2.900000 11.000000 73.421472 +2.900000 11.100000 75.137282 +2.900000 11.200000 76.873093 +2.900000 11.300000 78.628903 +2.900000 11.400000 80.404713 +2.900000 11.500000 82.200524 +2.900000 11.600000 84.016334 +2.900000 11.700000 85.852144 +2.900000 11.800000 87.707955 +2.900000 11.900000 89.583765 +2.900000 12.000000 91.479575 +2.900000 12.100000 93.395386 +2.900000 12.200000 95.331196 +2.900000 12.300000 97.287006 +2.900000 12.400000 99.262817 +2.900000 12.500000 101.258627 +2.900000 12.600000 103.274437 +2.900000 12.700000 105.310248 +2.900000 12.800000 107.366058 +2.900000 12.900000 109.441868 +2.900000 13.000000 111.537679 +2.900000 13.100000 113.653489 +2.900000 13.200000 115.789299 +2.900000 13.300000 117.945109 +2.900000 13.400000 120.120920 +2.900000 13.500000 122.316730 +2.900000 13.600000 124.532540 +2.900000 13.700000 126.768351 +2.900000 13.800000 129.024161 +2.900000 13.900000 131.299971 +2.900000 14.000000 133.595782 +2.900000 14.100000 135.911592 +2.900000 14.200000 138.247402 +2.900000 14.300000 140.603213 +2.900000 14.400000 142.979023 +2.900000 14.500000 145.374833 +2.900000 14.600000 147.790644 +2.900000 14.700000 150.226454 +2.900000 14.800000 152.682264 +2.900000 14.900000 155.158075 +2.900000 15.000000 157.653885 + +3.000000 -5.000000 55.076706 +3.000000 -4.900000 53.609104 +3.000000 -4.800000 52.161501 +3.000000 -4.700000 50.733899 +3.000000 -4.600000 49.326296 +3.000000 -4.500000 47.938694 +3.000000 -4.400000 46.571091 +3.000000 -4.300000 45.223489 +3.000000 -4.200000 43.895886 +3.000000 -4.100000 42.588284 +3.000000 -4.000000 41.300682 +3.000000 -3.900000 40.033079 +3.000000 -3.800000 38.785477 +3.000000 -3.700000 37.557874 +3.000000 -3.600000 36.350272 +3.000000 -3.500000 35.162669 +3.000000 -3.400000 33.995067 +3.000000 -3.300000 32.847464 +3.000000 -3.200000 31.719862 +3.000000 -3.100000 30.612259 +3.000000 -3.000000 29.524657 +3.000000 -2.900000 28.457055 +3.000000 -2.800000 27.409452 +3.000000 -2.700000 26.381850 +3.000000 -2.600000 25.374247 +3.000000 -2.500000 24.386645 +3.000000 -2.400000 23.419042 +3.000000 -2.300000 22.471440 +3.000000 -2.200000 21.543837 +3.000000 -2.100000 20.636235 +3.000000 -2.000000 19.748632 +3.000000 -1.900000 18.881030 +3.000000 -1.800000 18.033427 +3.000000 -1.700000 17.205825 +3.000000 -1.600000 16.398223 +3.000000 -1.500000 15.610620 +3.000000 -1.400000 14.843018 +3.000000 -1.300000 14.095415 +3.000000 -1.200000 13.367813 +3.000000 -1.100000 12.660210 +3.000000 -1.000000 11.972608 +3.000000 -0.900000 11.305005 +3.000000 -0.800000 10.657403 +3.000000 -0.700000 10.029800 +3.000000 -0.600000 9.422198 +3.000000 -0.500000 8.834596 +3.000000 -0.400000 8.266993 +3.000000 -0.300000 7.719391 +3.000000 -0.200000 7.191788 +3.000000 -0.100000 6.684186 +3.000000 -0.000000 6.196583 +3.000000 0.100000 5.728981 +3.000000 0.200000 5.281378 +3.000000 0.300000 4.853776 +3.000000 0.400000 4.446173 +3.000000 0.500000 4.058571 +3.000000 0.600000 3.690968 +3.000000 0.700000 3.343366 +3.000000 0.800000 3.015764 +3.000000 0.900000 2.708161 +3.000000 1.000000 2.420559 +3.000000 1.100000 2.152956 +3.000000 1.200000 1.905354 +3.000000 1.300000 1.677751 +3.000000 1.400000 1.470149 +3.000000 1.500000 1.282546 +3.000000 1.600000 1.114944 +3.000000 1.700000 0.967341 +3.000000 1.800000 0.839739 +3.000000 1.900000 0.732137 +3.000000 2.000000 0.644534 +3.000000 2.100000 0.576932 +3.000000 2.200000 0.529329 +3.000000 2.300000 0.501727 +3.000000 2.400000 0.494124 +3.000000 2.500000 0.506522 +3.000000 2.600000 0.538919 +3.000000 2.700000 0.591317 +3.000000 2.800000 0.663714 +3.000000 2.900000 0.756112 +3.000000 3.000000 0.868509 +3.000000 3.100000 1.000907 +3.000000 3.200000 1.153305 +3.000000 3.300000 1.325702 +3.000000 3.400000 1.518100 +3.000000 3.500000 1.730497 +3.000000 3.600000 1.962895 +3.000000 3.700000 2.215292 +3.000000 3.800000 2.487690 +3.000000 3.900000 2.780087 +3.000000 4.000000 3.092485 +3.000000 4.100000 3.424882 +3.000000 4.200000 3.777280 +3.000000 4.300000 4.149678 +3.000000 4.400000 4.542075 +3.000000 4.500000 4.954473 +3.000000 4.600000 5.386870 +3.000000 4.700000 5.839268 +3.000000 4.800000 6.311665 +3.000000 4.900000 6.804063 +3.000000 5.000000 7.316460 +3.000000 5.100000 7.848858 +3.000000 5.200000 8.401255 +3.000000 5.300000 8.973653 +3.000000 5.400000 9.566051 +3.000000 5.500000 10.178448 +3.000000 5.600000 10.810846 +3.000000 5.700000 11.463243 +3.000000 5.800000 12.135641 +3.000000 5.900000 12.828038 +3.000000 6.000000 13.540436 +3.000000 6.100000 14.272833 +3.000000 6.200000 15.025231 +3.000000 6.300000 15.797628 +3.000000 6.400000 16.590026 +3.000000 6.500000 17.402423 +3.000000 6.600000 18.234821 +3.000000 6.700000 19.087219 +3.000000 6.800000 19.959616 +3.000000 6.900000 20.852014 +3.000000 7.000000 21.764411 +3.000000 7.100000 22.696809 +3.000000 7.200000 23.649206 +3.000000 7.300000 24.621604 +3.000000 7.400000 25.614001 +3.000000 7.500000 26.626399 +3.000000 7.600000 27.658796 +3.000000 7.700000 28.711194 +3.000000 7.800000 29.783592 +3.000000 7.900000 30.875989 +3.000000 8.000000 31.988387 +3.000000 8.100000 33.120784 +3.000000 8.200000 34.273182 +3.000000 8.300000 35.445579 +3.000000 8.400000 36.637977 +3.000000 8.500000 37.850374 +3.000000 8.600000 39.082772 +3.000000 8.700000 40.335169 +3.000000 8.800000 41.607567 +3.000000 8.900000 42.899964 +3.000000 9.000000 44.212362 +3.000000 9.100000 45.544760 +3.000000 9.200000 46.897157 +3.000000 9.300000 48.269555 +3.000000 9.400000 49.661952 +3.000000 9.500000 51.074350 +3.000000 9.600000 52.506747 +3.000000 9.700000 53.959145 +3.000000 9.800000 55.431542 +3.000000 9.900000 56.923940 +3.000000 10.000000 58.436337 +3.000000 10.100000 59.968735 +3.000000 10.200000 61.521133 +3.000000 10.300000 63.093530 +3.000000 10.400000 64.685928 +3.000000 10.500000 66.298325 +3.000000 10.600000 67.930723 +3.000000 10.700000 69.583120 +3.000000 10.800000 71.255518 +3.000000 10.900000 72.947915 +3.000000 11.000000 74.660313 +3.000000 11.100000 76.392710 +3.000000 11.200000 78.145108 +3.000000 11.300000 79.917505 +3.000000 11.400000 81.709903 +3.000000 11.500000 83.522301 +3.000000 11.600000 85.354698 +3.000000 11.700000 87.207096 +3.000000 11.800000 89.079493 +3.000000 11.900000 90.971891 +3.000000 12.000000 92.884288 +3.000000 12.100000 94.816686 +3.000000 12.200000 96.769083 +3.000000 12.300000 98.741481 +3.000000 12.400000 100.733878 +3.000000 12.500000 102.746276 +3.000000 12.600000 104.778674 +3.000000 12.700000 106.831071 +3.000000 12.800000 108.903469 +3.000000 12.900000 110.995866 +3.000000 13.000000 113.108264 +3.000000 13.100000 115.240661 +3.000000 13.200000 117.393059 +3.000000 13.300000 119.565456 +3.000000 13.400000 121.757854 +3.000000 13.500000 123.970251 +3.000000 13.600000 126.202649 +3.000000 13.700000 128.455046 +3.000000 13.800000 130.727444 +3.000000 13.900000 133.019842 +3.000000 14.000000 135.332239 +3.000000 14.100000 137.664637 +3.000000 14.200000 140.017034 +3.000000 14.300000 142.389432 +3.000000 14.400000 144.781829 +3.000000 14.500000 147.194227 +3.000000 14.600000 149.626624 +3.000000 14.700000 152.079022 +3.000000 14.800000 154.551419 +3.000000 14.900000 157.043817 +3.000000 15.000000 159.556215 + +3.100000 -5.000000 53.808085 +3.100000 -4.900000 52.356553 +3.100000 -4.800000 50.925021 +3.100000 -4.700000 49.513489 +3.100000 -4.600000 48.121957 +3.100000 -4.500000 46.750425 +3.100000 -4.400000 45.398893 +3.100000 -4.300000 44.067361 +3.100000 -4.200000 42.755829 +3.100000 -4.100000 41.464297 +3.100000 -4.000000 40.192765 +3.100000 -3.900000 38.941233 +3.100000 -3.800000 37.709701 +3.100000 -3.700000 36.498169 +3.100000 -3.600000 35.306637 +3.100000 -3.500000 34.135105 +3.100000 -3.400000 32.983573 +3.100000 -3.300000 31.852041 +3.100000 -3.200000 30.740509 +3.100000 -3.100000 29.648977 +3.100000 -3.000000 28.577445 +3.100000 -2.900000 27.525913 +3.100000 -2.800000 26.494381 +3.100000 -2.700000 25.482849 +3.100000 -2.600000 24.491317 +3.100000 -2.500000 23.519785 +3.100000 -2.400000 22.568253 +3.100000 -2.300000 21.636721 +3.100000 -2.200000 20.725189 +3.100000 -2.100000 19.833658 +3.100000 -2.000000 18.962126 +3.100000 -1.900000 18.110594 +3.100000 -1.800000 17.279062 +3.100000 -1.700000 16.467530 +3.100000 -1.600000 15.675998 +3.100000 -1.500000 14.904466 +3.100000 -1.400000 14.152934 +3.100000 -1.300000 13.421402 +3.100000 -1.200000 12.709870 +3.100000 -1.100000 12.018338 +3.100000 -1.000000 11.346806 +3.100000 -0.900000 10.695274 +3.100000 -0.800000 10.063742 +3.100000 -0.700000 9.452210 +3.100000 -0.600000 8.860678 +3.100000 -0.500000 8.289146 +3.100000 -0.400000 7.737614 +3.100000 -0.300000 7.206082 +3.100000 -0.200000 6.694550 +3.100000 -0.100000 6.203018 +3.100000 -0.000000 5.731486 +3.100000 0.100000 5.279954 +3.100000 0.200000 4.848422 +3.100000 0.300000 4.436890 +3.100000 0.400000 4.045358 +3.100000 0.500000 3.673826 +3.100000 0.600000 3.322294 +3.100000 0.700000 2.990762 +3.100000 0.800000 2.679230 +3.100000 0.900000 2.387698 +3.100000 1.000000 2.116166 +3.100000 1.100000 1.864634 +3.100000 1.200000 1.633102 +3.100000 1.300000 1.421570 +3.100000 1.400000 1.230038 +3.100000 1.500000 1.058506 +3.100000 1.600000 0.906974 +3.100000 1.700000 0.775442 +3.100000 1.800000 0.663910 +3.100000 1.900000 0.572378 +3.100000 2.000000 0.500846 +3.100000 2.100000 0.449314 +3.100000 2.200000 0.417782 +3.100000 2.300000 0.406250 +3.100000 2.400000 0.414718 +3.100000 2.500000 0.443186 +3.100000 2.600000 0.491654 +3.100000 2.700000 0.560122 +3.100000 2.800000 0.648591 +3.100000 2.900000 0.757059 +3.100000 3.000000 0.885527 +3.100000 3.100000 1.033995 +3.100000 3.200000 1.202463 +3.100000 3.300000 1.390931 +3.100000 3.400000 1.599399 +3.100000 3.500000 1.827867 +3.100000 3.600000 2.076335 +3.100000 3.700000 2.344803 +3.100000 3.800000 2.633271 +3.100000 3.900000 2.941739 +3.100000 4.000000 3.270207 +3.100000 4.100000 3.618675 +3.100000 4.200000 3.987143 +3.100000 4.300000 4.375611 +3.100000 4.400000 4.784079 +3.100000 4.500000 5.212547 +3.100000 4.600000 5.661015 +3.100000 4.700000 6.129483 +3.100000 4.800000 6.617951 +3.100000 4.900000 7.126419 +3.100000 5.000000 7.654887 +3.100000 5.100000 8.203355 +3.100000 5.200000 8.771823 +3.100000 5.300000 9.360291 +3.100000 5.400000 9.968759 +3.100000 5.500000 10.597227 +3.100000 5.600000 11.245695 +3.100000 5.700000 11.914163 +3.100000 5.800000 12.602631 +3.100000 5.900000 13.311099 +3.100000 6.000000 14.039567 +3.100000 6.100000 14.788035 +3.100000 6.200000 15.556503 +3.100000 6.300000 16.344971 +3.100000 6.400000 17.153439 +3.100000 6.500000 17.981907 +3.100000 6.600000 18.830375 +3.100000 6.700000 19.698843 +3.100000 6.800000 20.587311 +3.100000 6.900000 21.495779 +3.100000 7.000000 22.424247 +3.100000 7.100000 23.372715 +3.100000 7.200000 24.341183 +3.100000 7.300000 25.329651 +3.100000 7.400000 26.338119 +3.100000 7.500000 27.366587 +3.100000 7.600000 28.415056 +3.100000 7.700000 29.483524 +3.100000 7.800000 30.571992 +3.100000 7.900000 31.680460 +3.100000 8.000000 32.808928 +3.100000 8.100000 33.957396 +3.100000 8.200000 35.125864 +3.100000 8.300000 36.314332 +3.100000 8.400000 37.522800 +3.100000 8.500000 38.751268 +3.100000 8.600000 39.999736 +3.100000 8.700000 41.268204 +3.100000 8.800000 42.556672 +3.100000 8.900000 43.865140 +3.100000 9.000000 45.193608 +3.100000 9.100000 46.542076 +3.100000 9.200000 47.910544 +3.100000 9.300000 49.299012 +3.100000 9.400000 50.707480 +3.100000 9.500000 52.135948 +3.100000 9.600000 53.584416 +3.100000 9.700000 55.052884 +3.100000 9.800000 56.541352 +3.100000 9.900000 58.049820 +3.100000 10.000000 59.578288 +3.100000 10.100000 61.126756 +3.100000 10.200000 62.695224 +3.100000 10.300000 64.283692 +3.100000 10.400000 65.892160 +3.100000 10.500000 67.520628 +3.100000 10.600000 69.169096 +3.100000 10.700000 70.837564 +3.100000 10.800000 72.526032 +3.100000 10.900000 74.234500 +3.100000 11.000000 75.962968 +3.100000 11.100000 77.711436 +3.100000 11.200000 79.479904 +3.100000 11.300000 81.268372 +3.100000 11.400000 83.076840 +3.100000 11.500000 84.905308 +3.100000 11.600000 86.753776 +3.100000 11.700000 88.622244 +3.100000 11.800000 90.510712 +3.100000 11.900000 92.419180 +3.100000 12.000000 94.347648 +3.100000 12.100000 96.296116 +3.100000 12.200000 98.264584 +3.100000 12.300000 100.253052 +3.100000 12.400000 102.261520 +3.100000 12.500000 104.289989 +3.100000 12.600000 106.338457 +3.100000 12.700000 108.406925 +3.100000 12.800000 110.495393 +3.100000 12.900000 112.603861 +3.100000 13.000000 114.732329 +3.100000 13.100000 116.880797 +3.100000 13.200000 119.049265 +3.100000 13.300000 121.237733 +3.100000 13.400000 123.446201 +3.100000 13.500000 125.674669 +3.100000 13.600000 127.923137 +3.100000 13.700000 130.191605 +3.100000 13.800000 132.480073 +3.100000 13.900000 134.788541 +3.100000 14.000000 137.117009 +3.100000 14.100000 139.465477 +3.100000 14.200000 141.833945 +3.100000 14.300000 144.222413 +3.100000 14.400000 146.630881 +3.100000 14.500000 149.059349 +3.100000 14.600000 151.507817 +3.100000 14.700000 153.976285 +3.100000 14.800000 156.464753 +3.100000 14.900000 158.973221 +3.100000 15.000000 161.501689 + +3.200000 -5.000000 52.685588 +3.200000 -4.900000 51.249610 +3.200000 -4.800000 49.833631 +3.200000 -4.700000 48.437653 +3.200000 -4.600000 47.061675 +3.200000 -4.500000 45.705697 +3.200000 -4.400000 44.369718 +3.200000 -4.300000 43.053740 +3.200000 -4.200000 41.757762 +3.200000 -4.100000 40.481784 +3.200000 -4.000000 39.225805 +3.200000 -3.900000 37.989827 +3.200000 -3.800000 36.773849 +3.200000 -3.700000 35.577871 +3.200000 -3.600000 34.401892 +3.200000 -3.500000 33.245914 +3.200000 -3.400000 32.109936 +3.200000 -3.300000 30.993958 +3.200000 -3.200000 29.897979 +3.200000 -3.100000 28.822001 +3.200000 -3.000000 27.766023 +3.200000 -2.900000 26.730045 +3.200000 -2.800000 25.714067 +3.200000 -2.700000 24.718088 +3.200000 -2.600000 23.742110 +3.200000 -2.500000 22.786132 +3.200000 -2.400000 21.850154 +3.200000 -2.300000 20.934175 +3.200000 -2.200000 20.038197 +3.200000 -2.100000 19.162219 +3.200000 -2.000000 18.306241 +3.200000 -1.900000 17.470262 +3.200000 -1.800000 16.654284 +3.200000 -1.700000 15.858306 +3.200000 -1.600000 15.082328 +3.200000 -1.500000 14.326349 +3.200000 -1.400000 13.590371 +3.200000 -1.300000 12.874393 +3.200000 -1.200000 12.178415 +3.200000 -1.100000 11.502436 +3.200000 -1.000000 10.846458 +3.200000 -0.900000 10.210480 +3.200000 -0.800000 9.594502 +3.200000 -0.700000 8.998524 +3.200000 -0.600000 8.422545 +3.200000 -0.500000 7.866567 +3.200000 -0.400000 7.330589 +3.200000 -0.300000 6.814611 +3.200000 -0.200000 6.318632 +3.200000 -0.100000 5.842654 +3.200000 -0.000000 5.386676 +3.200000 0.100000 4.950698 +3.200000 0.200000 4.534719 +3.200000 0.300000 4.138741 +3.200000 0.400000 3.762763 +3.200000 0.500000 3.406785 +3.200000 0.600000 3.070806 +3.200000 0.700000 2.754828 +3.200000 0.800000 2.458850 +3.200000 0.900000 2.182872 +3.200000 1.000000 1.926893 +3.200000 1.100000 1.690915 +3.200000 1.200000 1.474937 +3.200000 1.300000 1.278959 +3.200000 1.400000 1.102981 +3.200000 1.500000 0.947002 +3.200000 1.600000 0.811024 +3.200000 1.700000 0.695046 +3.200000 1.800000 0.599068 +3.200000 1.900000 0.523089 +3.200000 2.000000 0.467111 +3.200000 2.100000 0.431133 +3.200000 2.200000 0.415155 +3.200000 2.300000 0.419176 +3.200000 2.400000 0.443198 +3.200000 2.500000 0.487220 +3.200000 2.600000 0.551242 +3.200000 2.700000 0.635263 +3.200000 2.800000 0.739285 +3.200000 2.900000 0.863307 +3.200000 3.000000 1.007329 +3.200000 3.100000 1.171350 +3.200000 3.200000 1.355372 +3.200000 3.300000 1.559394 +3.200000 3.400000 1.783416 +3.200000 3.500000 2.027437 +3.200000 3.600000 2.291459 +3.200000 3.700000 2.575481 +3.200000 3.800000 2.879503 +3.200000 3.900000 3.203525 +3.200000 4.000000 3.547546 +3.200000 4.100000 3.911568 +3.200000 4.200000 4.295590 +3.200000 4.300000 4.699612 +3.200000 4.400000 5.123633 +3.200000 4.500000 5.567655 +3.200000 4.600000 6.031677 +3.200000 4.700000 6.515699 +3.200000 4.800000 7.019720 +3.200000 4.900000 7.543742 +3.200000 5.000000 8.087764 +3.200000 5.100000 8.651786 +3.200000 5.200000 9.235807 +3.200000 5.300000 9.839829 +3.200000 5.400000 10.463851 +3.200000 5.500000 11.107873 +3.200000 5.600000 11.771894 +3.200000 5.700000 12.455916 +3.200000 5.800000 13.159938 +3.200000 5.900000 13.883960 +3.200000 6.000000 14.627982 +3.200000 6.100000 15.392003 +3.200000 6.200000 16.176025 +3.200000 6.300000 16.980047 +3.200000 6.400000 17.804069 +3.200000 6.500000 18.648090 +3.200000 6.600000 19.512112 +3.200000 6.700000 20.396134 +3.200000 6.800000 21.300156 +3.200000 6.900000 22.224177 +3.200000 7.000000 23.168199 +3.200000 7.100000 24.132221 +3.200000 7.200000 25.116243 +3.200000 7.300000 26.120264 +3.200000 7.400000 27.144286 +3.200000 7.500000 28.188308 +3.200000 7.600000 29.252330 +3.200000 7.700000 30.336351 +3.200000 7.800000 31.440373 +3.200000 7.900000 32.564395 +3.200000 8.000000 33.708417 +3.200000 8.100000 34.872438 +3.200000 8.200000 36.056460 +3.200000 8.300000 37.260482 +3.200000 8.400000 38.484504 +3.200000 8.500000 39.728526 +3.200000 8.600000 40.992547 +3.200000 8.700000 42.276569 +3.200000 8.800000 43.580591 +3.200000 8.900000 44.904613 +3.200000 9.000000 46.248634 +3.200000 9.100000 47.612656 +3.200000 9.200000 48.996678 +3.200000 9.300000 50.400700 +3.200000 9.400000 51.824721 +3.200000 9.500000 53.268743 +3.200000 9.600000 54.732765 +3.200000 9.700000 56.216787 +3.200000 9.800000 57.720808 +3.200000 9.900000 59.244830 +3.200000 10.000000 60.788852 +3.200000 10.100000 62.352874 +3.200000 10.200000 63.936895 +3.200000 10.300000 65.540917 +3.200000 10.400000 67.164939 +3.200000 10.500000 68.808961 +3.200000 10.600000 70.472983 +3.200000 10.700000 72.157004 +3.200000 10.800000 73.861026 +3.200000 10.900000 75.585048 +3.200000 11.000000 77.329070 +3.200000 11.100000 79.093091 +3.200000 11.200000 80.877113 +3.200000 11.300000 82.681135 +3.200000 11.400000 84.505157 +3.200000 11.500000 86.349178 +3.200000 11.600000 88.213200 +3.200000 11.700000 90.097222 +3.200000 11.800000 92.001244 +3.200000 11.900000 93.925265 +3.200000 12.000000 95.869287 +3.200000 12.100000 97.833309 +3.200000 12.200000 99.817331 +3.200000 12.300000 101.821352 +3.200000 12.400000 103.845374 +3.200000 12.500000 105.889396 +3.200000 12.600000 107.953418 +3.200000 12.700000 110.037440 +3.200000 12.800000 112.141461 +3.200000 12.900000 114.265483 +3.200000 13.000000 116.409505 +3.200000 13.100000 118.573527 +3.200000 13.200000 120.757548 +3.200000 13.300000 122.961570 +3.200000 13.400000 125.185592 +3.200000 13.500000 127.429614 +3.200000 13.600000 129.693635 +3.200000 13.700000 131.977657 +3.200000 13.800000 134.281679 +3.200000 13.900000 136.605701 +3.200000 14.000000 138.949722 +3.200000 14.100000 141.313744 +3.200000 14.200000 143.697766 +3.200000 14.300000 146.101788 +3.200000 14.400000 148.525809 +3.200000 14.500000 150.969831 +3.200000 14.600000 153.433853 +3.200000 14.700000 155.917875 +3.200000 14.800000 158.421896 +3.200000 14.900000 160.945918 +3.200000 15.000000 163.489940 + +3.300000 -5.000000 51.707929 +3.300000 -4.900000 50.286987 +3.300000 -4.800000 48.886046 +3.300000 -4.700000 47.505105 +3.300000 -4.600000 46.144164 +3.300000 -4.500000 44.803222 +3.300000 -4.400000 43.482281 +3.300000 -4.300000 42.181340 +3.300000 -4.200000 40.900399 +3.300000 -4.100000 39.639457 +3.300000 -4.000000 38.398516 +3.300000 -3.900000 37.177575 +3.300000 -3.800000 35.976634 +3.300000 -3.700000 34.795693 +3.300000 -3.600000 33.634751 +3.300000 -3.500000 32.493810 +3.300000 -3.400000 31.372869 +3.300000 -3.300000 30.271928 +3.300000 -3.200000 29.190986 +3.300000 -3.100000 28.130045 +3.300000 -3.000000 27.089104 +3.300000 -2.900000 26.068163 +3.300000 -2.800000 25.067221 +3.300000 -2.700000 24.086280 +3.300000 -2.600000 23.125339 +3.300000 -2.500000 22.184398 +3.300000 -2.400000 21.263456 +3.300000 -2.300000 20.362515 +3.300000 -2.200000 19.481574 +3.300000 -2.100000 18.620633 +3.300000 -2.000000 17.779691 +3.300000 -1.900000 16.958750 +3.300000 -1.800000 16.157809 +3.300000 -1.700000 15.376868 +3.300000 -1.600000 14.615927 +3.300000 -1.500000 13.874985 +3.300000 -1.400000 13.154044 +3.300000 -1.300000 12.453103 +3.300000 -1.200000 11.772162 +3.300000 -1.100000 11.111220 +3.300000 -1.000000 10.470279 +3.300000 -0.900000 9.849338 +3.300000 -0.800000 9.248397 +3.300000 -0.700000 8.667455 +3.300000 -0.600000 8.106514 +3.300000 -0.500000 7.565573 +3.300000 -0.400000 7.044632 +3.300000 -0.300000 6.543690 +3.300000 -0.200000 6.062749 +3.300000 -0.100000 5.601808 +3.300000 -0.000000 5.160867 +3.300000 0.100000 4.739926 +3.300000 0.200000 4.338984 +3.300000 0.300000 3.958043 +3.300000 0.400000 3.597102 +3.300000 0.500000 3.256161 +3.300000 0.600000 2.935219 +3.300000 0.700000 2.634278 +3.300000 0.800000 2.353337 +3.300000 0.900000 2.092396 +3.300000 1.000000 1.851454 +3.300000 1.100000 1.630513 +3.300000 1.200000 1.429572 +3.300000 1.300000 1.248631 +3.300000 1.400000 1.087689 +3.300000 1.500000 0.946748 +3.300000 1.600000 0.825807 +3.300000 1.700000 0.724866 +3.300000 1.800000 0.643924 +3.300000 1.900000 0.582983 +3.300000 2.000000 0.542042 +3.300000 2.100000 0.521101 +3.300000 2.200000 0.520160 +3.300000 2.300000 0.539218 +3.300000 2.400000 0.578277 +3.300000 2.500000 0.637336 +3.300000 2.600000 0.716395 +3.300000 2.700000 0.815453 +3.300000 2.800000 0.934512 +3.300000 2.900000 1.073571 +3.300000 3.000000 1.232630 +3.300000 3.100000 1.411688 +3.300000 3.200000 1.610747 +3.300000 3.300000 1.829806 +3.300000 3.400000 2.068865 +3.300000 3.500000 2.327923 +3.300000 3.600000 2.606982 +3.300000 3.700000 2.906041 +3.300000 3.800000 3.225100 +3.300000 3.900000 3.564159 +3.300000 4.000000 3.923217 +3.300000 4.100000 4.302276 +3.300000 4.200000 4.701335 +3.300000 4.300000 5.120394 +3.300000 4.400000 5.559452 +3.300000 4.500000 6.018511 +3.300000 4.600000 6.497570 +3.300000 4.700000 6.996629 +3.300000 4.800000 7.515687 +3.300000 4.900000 8.054746 +3.300000 5.000000 8.613805 +3.300000 5.100000 9.192864 +3.300000 5.200000 9.791922 +3.300000 5.300000 10.410981 +3.300000 5.400000 11.050040 +3.300000 5.500000 11.709099 +3.300000 5.600000 12.388158 +3.300000 5.700000 13.087216 +3.300000 5.800000 13.806275 +3.300000 5.900000 14.545334 +3.300000 6.000000 15.304393 +3.300000 6.100000 16.083451 +3.300000 6.200000 16.882510 +3.300000 6.300000 17.701569 +3.300000 6.400000 18.540628 +3.300000 6.500000 19.399686 +3.300000 6.600000 20.278745 +3.300000 6.700000 21.177804 +3.300000 6.800000 22.096863 +3.300000 6.900000 23.035921 +3.300000 7.000000 23.994980 +3.300000 7.100000 24.974039 +3.300000 7.200000 25.973098 +3.300000 7.300000 26.992156 +3.300000 7.400000 28.031215 +3.300000 7.500000 29.090274 +3.300000 7.600000 30.169333 +3.300000 7.700000 31.268392 +3.300000 7.800000 32.387450 +3.300000 7.900000 33.526509 +3.300000 8.000000 34.685568 +3.300000 8.100000 35.864627 +3.300000 8.200000 37.063685 +3.300000 8.300000 38.282744 +3.300000 8.400000 39.521803 +3.300000 8.500000 40.780862 +3.300000 8.600000 42.059920 +3.300000 8.700000 43.358979 +3.300000 8.800000 44.678038 +3.300000 8.900000 46.017097 +3.300000 9.000000 47.376155 +3.300000 9.100000 48.755214 +3.300000 9.200000 50.154273 +3.300000 9.300000 51.573332 +3.300000 9.400000 53.012391 +3.300000 9.500000 54.471449 +3.300000 9.600000 55.950508 +3.300000 9.700000 57.449567 +3.300000 9.800000 58.968626 +3.300000 9.900000 60.507684 +3.300000 10.000000 62.066743 +3.300000 10.100000 63.645802 +3.300000 10.200000 65.244861 +3.300000 10.300000 66.863919 +3.300000 10.400000 68.502978 +3.300000 10.500000 70.162037 +3.300000 10.600000 71.841096 +3.300000 10.700000 73.540154 +3.300000 10.800000 75.259213 +3.300000 10.900000 76.998272 +3.300000 11.000000 78.757331 +3.300000 11.100000 80.536389 +3.300000 11.200000 82.335448 +3.300000 11.300000 84.154507 +3.300000 11.400000 85.993566 +3.300000 11.500000 87.852625 +3.300000 11.600000 89.731683 +3.300000 11.700000 91.630742 +3.300000 11.800000 93.549801 +3.300000 11.900000 95.488860 +3.300000 12.000000 97.447918 +3.300000 12.100000 99.426977 +3.300000 12.200000 101.426036 +3.300000 12.300000 103.445095 +3.300000 12.400000 105.484153 +3.300000 12.500000 107.543212 +3.300000 12.600000 109.622271 +3.300000 12.700000 111.721330 +3.300000 12.800000 113.840388 +3.300000 12.900000 115.979447 +3.300000 13.000000 118.138506 +3.300000 13.100000 120.317565 +3.300000 13.200000 122.516624 +3.300000 13.300000 124.735682 +3.300000 13.400000 126.974741 +3.300000 13.500000 129.233800 +3.300000 13.600000 131.512859 +3.300000 13.700000 133.811917 +3.300000 13.800000 136.130976 +3.300000 13.900000 138.470035 +3.300000 14.000000 140.829094 +3.300000 14.100000 143.208152 +3.300000 14.200000 145.607211 +3.300000 14.300000 148.026270 +3.300000 14.400000 150.465329 +3.300000 14.500000 152.924387 +3.300000 14.600000 155.403446 +3.300000 14.700000 157.902505 +3.300000 14.800000 160.421564 +3.300000 14.900000 162.960623 +3.300000 15.000000 165.519681 + +3.400000 -5.000000 50.872904 +3.400000 -4.900000 49.466483 +3.400000 -4.800000 48.080062 +3.400000 -4.700000 46.713641 +3.400000 -4.600000 45.367220 +3.400000 -4.500000 44.040799 +3.400000 -4.400000 42.734378 +3.400000 -4.300000 41.447957 +3.400000 -4.200000 40.181536 +3.400000 -4.100000 38.935115 +3.400000 -4.000000 37.708694 +3.400000 -3.900000 36.502273 +3.400000 -3.800000 35.315852 +3.400000 -3.700000 34.149431 +3.400000 -3.600000 33.003010 +3.400000 -3.500000 31.876590 +3.400000 -3.400000 30.770169 +3.400000 -3.300000 29.683748 +3.400000 -3.200000 28.617327 +3.400000 -3.100000 27.570906 +3.400000 -3.000000 26.544485 +3.400000 -2.900000 25.538064 +3.400000 -2.800000 24.551643 +3.400000 -2.700000 23.585222 +3.400000 -2.600000 22.638801 +3.400000 -2.500000 21.712380 +3.400000 -2.400000 20.805959 +3.400000 -2.300000 19.919538 +3.400000 -2.200000 19.053117 +3.400000 -2.100000 18.206696 +3.400000 -2.000000 17.380275 +3.400000 -1.900000 16.573854 +3.400000 -1.800000 15.787433 +3.400000 -1.700000 15.021012 +3.400000 -1.600000 14.274591 +3.400000 -1.500000 13.548170 +3.400000 -1.400000 12.841749 +3.400000 -1.300000 12.155328 +3.400000 -1.200000 11.488907 +3.400000 -1.100000 10.842486 +3.400000 -1.000000 10.216065 +3.400000 -0.900000 9.609644 +3.400000 -0.800000 9.023223 +3.400000 -0.700000 8.456802 +3.400000 -0.600000 7.910381 +3.400000 -0.500000 7.383960 +3.400000 -0.400000 6.877539 +3.400000 -0.300000 6.391118 +3.400000 -0.200000 5.924697 +3.400000 -0.100000 5.478276 +3.400000 -0.000000 5.051856 +3.400000 0.100000 4.645435 +3.400000 0.200000 4.259014 +3.400000 0.300000 3.892593 +3.400000 0.400000 3.546172 +3.400000 0.500000 3.219751 +3.400000 0.600000 2.913330 +3.400000 0.700000 2.626909 +3.400000 0.800000 2.360488 +3.400000 0.900000 2.114067 +3.400000 1.000000 1.887646 +3.400000 1.100000 1.681225 +3.400000 1.200000 1.494804 +3.400000 1.300000 1.328383 +3.400000 1.400000 1.181962 +3.400000 1.500000 1.055541 +3.400000 1.600000 0.949120 +3.400000 1.700000 0.862699 +3.400000 1.800000 0.796278 +3.400000 1.900000 0.749857 +3.400000 2.000000 0.723436 +3.400000 2.100000 0.717015 +3.400000 2.200000 0.730594 +3.400000 2.300000 0.764173 +3.400000 2.400000 0.817752 +3.400000 2.500000 0.891331 +3.400000 2.600000 0.984910 +3.400000 2.700000 1.098489 +3.400000 2.800000 1.232068 +3.400000 2.900000 1.385647 +3.400000 3.000000 1.559226 +3.400000 3.100000 1.752805 +3.400000 3.200000 1.966384 +3.400000 3.300000 2.199963 +3.400000 3.400000 2.453542 +3.400000 3.500000 2.727121 +3.400000 3.600000 3.020701 +3.400000 3.700000 3.334280 +3.400000 3.800000 3.667859 +3.400000 3.900000 4.021438 +3.400000 4.000000 4.395017 +3.400000 4.100000 4.788596 +3.400000 4.200000 5.202175 +3.400000 4.300000 5.635754 +3.400000 4.400000 6.089333 +3.400000 4.500000 6.562912 +3.400000 4.600000 7.056491 +3.400000 4.700000 7.570070 +3.400000 4.800000 8.103649 +3.400000 4.900000 8.657228 +3.400000 5.000000 9.230807 +3.400000 5.100000 9.824386 +3.400000 5.200000 10.437965 +3.400000 5.300000 11.071544 +3.400000 5.400000 11.725123 +3.400000 5.500000 12.398702 +3.400000 5.600000 13.092281 +3.400000 5.700000 13.805860 +3.400000 5.800000 14.539439 +3.400000 5.900000 15.293018 +3.400000 6.000000 16.066597 +3.400000 6.100000 16.860176 +3.400000 6.200000 17.673755 +3.400000 6.300000 18.507334 +3.400000 6.400000 19.360913 +3.400000 6.500000 20.234492 +3.400000 6.600000 21.128071 +3.400000 6.700000 22.041650 +3.400000 6.800000 22.975229 +3.400000 6.900000 23.928808 +3.400000 7.000000 24.902387 +3.400000 7.100000 25.895966 +3.400000 7.200000 26.909546 +3.400000 7.300000 27.943125 +3.400000 7.400000 28.996704 +3.400000 7.500000 30.070283 +3.400000 7.600000 31.163862 +3.400000 7.700000 32.277441 +3.400000 7.800000 33.411020 +3.400000 7.900000 34.564599 +3.400000 8.000000 35.738178 +3.400000 8.100000 36.931757 +3.400000 8.200000 38.145336 +3.400000 8.300000 39.378915 +3.400000 8.400000 40.632494 +3.400000 8.500000 41.906073 +3.400000 8.600000 43.199652 +3.400000 8.700000 44.513231 +3.400000 8.800000 45.846810 +3.400000 8.900000 47.200389 +3.400000 9.000000 48.573968 +3.400000 9.100000 49.967547 +3.400000 9.200000 51.381126 +3.400000 9.300000 52.814705 +3.400000 9.400000 54.268284 +3.400000 9.500000 55.741863 +3.400000 9.600000 57.235442 +3.400000 9.700000 58.749021 +3.400000 9.800000 60.282600 +3.400000 9.900000 61.836179 +3.400000 10.000000 63.409758 +3.400000 10.100000 65.003337 +3.400000 10.200000 66.616916 +3.400000 10.300000 68.250495 +3.400000 10.400000 69.904074 +3.400000 10.500000 71.577653 +3.400000 10.600000 73.271232 +3.400000 10.700000 74.984811 +3.400000 10.800000 76.718391 +3.400000 10.900000 78.471970 +3.400000 11.000000 80.245549 +3.400000 11.100000 82.039128 +3.400000 11.200000 83.852707 +3.400000 11.300000 85.686286 +3.400000 11.400000 87.539865 +3.400000 11.500000 89.413444 +3.400000 11.600000 91.307023 +3.400000 11.700000 93.220602 +3.400000 11.800000 95.154181 +3.400000 11.900000 97.107760 +3.400000 12.000000 99.081339 +3.400000 12.100000 101.074918 +3.400000 12.200000 103.088497 +3.400000 12.300000 105.122076 +3.400000 12.400000 107.175655 +3.400000 12.500000 109.249234 +3.400000 12.600000 111.342813 +3.400000 12.700000 113.456392 +3.400000 12.800000 115.589971 +3.400000 12.900000 117.743550 +3.400000 13.000000 119.917129 +3.400000 13.100000 122.110708 +3.400000 13.200000 124.324287 +3.400000 13.300000 126.557866 +3.400000 13.400000 128.811445 +3.400000 13.500000 131.085024 +3.400000 13.600000 133.378603 +3.400000 13.700000 135.692182 +3.400000 13.800000 138.025761 +3.400000 13.900000 140.379340 +3.400000 14.000000 142.752919 +3.400000 14.100000 145.146498 +3.400000 14.200000 147.560077 +3.400000 14.300000 149.993656 +3.400000 14.400000 152.447236 +3.400000 14.500000 154.920815 +3.400000 14.600000 157.414394 +3.400000 14.700000 159.927973 +3.400000 14.800000 162.461552 +3.400000 14.900000 165.015131 +3.400000 15.000000 167.588710 + +3.500000 -5.000000 50.177405 +3.500000 -4.900000 48.784987 +3.500000 -4.800000 47.412570 +3.500000 -4.700000 46.060152 +3.500000 -4.600000 44.727735 +3.500000 -4.500000 43.415317 +3.500000 -4.400000 42.122900 +3.500000 -4.300000 40.850483 +3.500000 -4.200000 39.598065 +3.500000 -4.100000 38.365648 +3.500000 -4.000000 37.153230 +3.500000 -3.900000 35.960813 +3.500000 -3.800000 34.788395 +3.500000 -3.700000 33.635978 +3.500000 -3.600000 32.503560 +3.500000 -3.500000 31.391143 +3.500000 -3.400000 30.298726 +3.500000 -3.300000 29.226308 +3.500000 -3.200000 28.173891 +3.500000 -3.100000 27.141473 +3.500000 -3.000000 26.129056 +3.500000 -2.900000 25.136638 +3.500000 -2.800000 24.164221 +3.500000 -2.700000 23.211803 +3.500000 -2.600000 22.279386 +3.500000 -2.500000 21.366969 +3.500000 -2.400000 20.474551 +3.500000 -2.300000 19.602134 +3.500000 -2.200000 18.749716 +3.500000 -2.100000 17.917299 +3.500000 -2.000000 17.104881 +3.500000 -1.900000 16.312464 +3.500000 -1.800000 15.540046 +3.500000 -1.700000 14.787629 +3.500000 -1.600000 14.055212 +3.500000 -1.500000 13.342794 +3.500000 -1.400000 12.650377 +3.500000 -1.300000 11.977959 +3.500000 -1.200000 11.325542 +3.500000 -1.100000 10.693124 +3.500000 -1.000000 10.080707 +3.500000 -0.900000 9.488289 +3.500000 -0.800000 8.915872 +3.500000 -0.700000 8.363455 +3.500000 -0.600000 7.831037 +3.500000 -0.500000 7.318620 +3.500000 -0.400000 6.826202 +3.500000 -0.300000 6.353785 +3.500000 -0.200000 5.901367 +3.500000 -0.100000 5.468950 +3.500000 -0.000000 5.056532 +3.500000 0.100000 4.664115 +3.500000 0.200000 4.291698 +3.500000 0.300000 3.939280 +3.500000 0.400000 3.606863 +3.500000 0.500000 3.294445 +3.500000 0.600000 3.002028 +3.500000 0.700000 2.729610 +3.500000 0.800000 2.477193 +3.500000 0.900000 2.244775 +3.500000 1.000000 2.032358 +3.500000 1.100000 1.839941 +3.500000 1.200000 1.667523 +3.500000 1.300000 1.515106 +3.500000 1.400000 1.382688 +3.500000 1.500000 1.270271 +3.500000 1.600000 1.177853 +3.500000 1.700000 1.105436 +3.500000 1.800000 1.053018 +3.500000 1.900000 1.020601 +3.500000 2.000000 1.008184 +3.500000 2.100000 1.015766 +3.500000 2.200000 1.043349 +3.500000 2.300000 1.090931 +3.500000 2.400000 1.158514 +3.500000 2.500000 1.246096 +3.500000 2.600000 1.353679 +3.500000 2.700000 1.481261 +3.500000 2.800000 1.628844 +3.500000 2.900000 1.796426 +3.500000 3.000000 1.984009 +3.500000 3.100000 2.191592 +3.500000 3.200000 2.419174 +3.500000 3.300000 2.666757 +3.500000 3.400000 2.934339 +3.500000 3.500000 3.221922 +3.500000 3.600000 3.529504 +3.500000 3.700000 3.857087 +3.500000 3.800000 4.204669 +3.500000 3.900000 4.572252 +3.500000 4.000000 4.959835 +3.500000 4.100000 5.367417 +3.500000 4.200000 5.795000 +3.500000 4.300000 6.242582 +3.500000 4.400000 6.710165 +3.500000 4.500000 7.197747 +3.500000 4.600000 7.705330 +3.500000 4.700000 8.232912 +3.500000 4.800000 8.780495 +3.500000 4.900000 9.348078 +3.500000 5.000000 9.935660 +3.500000 5.100000 10.543243 +3.500000 5.200000 11.170825 +3.500000 5.300000 11.818408 +3.500000 5.400000 12.485990 +3.500000 5.500000 13.173573 +3.500000 5.600000 13.881155 +3.500000 5.700000 14.608738 +3.500000 5.800000 15.356321 +3.500000 5.900000 16.123903 +3.500000 6.000000 16.911486 +3.500000 6.100000 17.719068 +3.500000 6.200000 18.546651 +3.500000 6.300000 19.394233 +3.500000 6.400000 20.261816 +3.500000 6.500000 21.149398 +3.500000 6.600000 22.056981 +3.500000 6.700000 22.984564 +3.500000 6.800000 23.932146 +3.500000 6.900000 24.899729 +3.500000 7.000000 25.887311 +3.500000 7.100000 26.894894 +3.500000 7.200000 27.922476 +3.500000 7.300000 28.970059 +3.500000 7.400000 30.037641 +3.500000 7.500000 31.125224 +3.500000 7.600000 32.232807 +3.500000 7.700000 33.360389 +3.500000 7.800000 34.507972 +3.500000 7.900000 35.675554 +3.500000 8.000000 36.863137 +3.500000 8.100000 38.070719 +3.500000 8.200000 39.298302 +3.500000 8.300000 40.545884 +3.500000 8.400000 41.813467 +3.500000 8.500000 43.101050 +3.500000 8.600000 44.408632 +3.500000 8.700000 45.736215 +3.500000 8.800000 47.083797 +3.500000 8.900000 48.451380 +3.500000 9.000000 49.838962 +3.500000 9.100000 51.246545 +3.500000 9.200000 52.674127 +3.500000 9.300000 54.121710 +3.500000 9.400000 55.589293 +3.500000 9.500000 57.076875 +3.500000 9.600000 58.584458 +3.500000 9.700000 60.112040 +3.500000 9.800000 61.659623 +3.500000 9.900000 63.227205 +3.500000 10.000000 64.814788 +3.500000 10.100000 66.422370 +3.500000 10.200000 68.049953 +3.500000 10.300000 69.697536 +3.500000 10.400000 71.365118 +3.500000 10.500000 73.052701 +3.500000 10.600000 74.760283 +3.500000 10.700000 76.487866 +3.500000 10.800000 78.235448 +3.500000 10.900000 80.003031 +3.500000 11.000000 81.790613 +3.500000 11.100000 83.598196 +3.500000 11.200000 85.425778 +3.500000 11.300000 87.273361 +3.500000 11.400000 89.140944 +3.500000 11.500000 91.028526 +3.500000 11.600000 92.936109 +3.500000 11.700000 94.863691 +3.500000 11.800000 96.811274 +3.500000 11.900000 98.778856 +3.500000 12.000000 100.766439 +3.500000 12.100000 102.774021 +3.500000 12.200000 104.801604 +3.500000 12.300000 106.849187 +3.500000 12.400000 108.916769 +3.500000 12.500000 111.004352 +3.500000 12.600000 113.111934 +3.500000 12.700000 115.239517 +3.500000 12.800000 117.387099 +3.500000 12.900000 119.554682 +3.500000 13.000000 121.742264 +3.500000 13.100000 123.949847 +3.500000 13.200000 126.177430 +3.500000 13.300000 128.425012 +3.500000 13.400000 130.692595 +3.500000 13.500000 132.980177 +3.500000 13.600000 135.287760 +3.500000 13.700000 137.615342 +3.500000 13.800000 139.962925 +3.500000 13.900000 142.330507 +3.500000 14.000000 144.718090 +3.500000 14.100000 147.125673 +3.500000 14.200000 149.553255 +3.500000 14.300000 152.000838 +3.500000 14.400000 154.468420 +3.500000 14.500000 156.956003 +3.500000 14.600000 159.463585 +3.500000 14.700000 161.991168 +3.500000 14.800000 164.538750 +3.500000 14.900000 167.106333 +3.500000 15.000000 169.693916 + +3.600000 -5.000000 49.617434 +3.600000 -4.900000 48.238503 +3.600000 -4.800000 46.879573 +3.600000 -4.700000 45.540642 +3.600000 -4.600000 44.221711 +3.600000 -4.500000 42.922781 +3.600000 -4.400000 41.643850 +3.600000 -4.300000 40.384919 +3.600000 -4.200000 39.145989 +3.600000 -4.100000 37.927058 +3.600000 -4.000000 36.728127 +3.600000 -3.900000 35.549197 +3.600000 -3.800000 34.390266 +3.600000 -3.700000 33.251335 +3.600000 -3.600000 32.132405 +3.600000 -3.500000 31.033474 +3.600000 -3.400000 29.954543 +3.600000 -3.300000 28.895613 +3.600000 -3.200000 27.856682 +3.600000 -3.100000 26.837751 +3.600000 -3.000000 25.838821 +3.600000 -2.900000 24.859890 +3.600000 -2.800000 23.900959 +3.600000 -2.700000 22.962029 +3.600000 -2.600000 22.043098 +3.600000 -2.500000 21.144168 +3.600000 -2.400000 20.265237 +3.600000 -2.300000 19.406306 +3.600000 -2.200000 18.567376 +3.600000 -2.100000 17.748445 +3.600000 -2.000000 16.949514 +3.600000 -1.900000 16.170584 +3.600000 -1.800000 15.411653 +3.600000 -1.700000 14.672722 +3.600000 -1.600000 13.953792 +3.600000 -1.500000 13.254861 +3.600000 -1.400000 12.575930 +3.600000 -1.300000 11.917000 +3.600000 -1.200000 11.278069 +3.600000 -1.100000 10.659138 +3.600000 -1.000000 10.060208 +3.600000 -0.900000 9.481277 +3.600000 -0.800000 8.922346 +3.600000 -0.700000 8.383416 +3.600000 -0.600000 7.864485 +3.600000 -0.500000 7.365554 +3.600000 -0.400000 6.886624 +3.600000 -0.300000 6.427693 +3.600000 -0.200000 5.988762 +3.600000 -0.100000 5.569832 +3.600000 -0.000000 5.170901 +3.600000 0.100000 4.791970 +3.600000 0.200000 4.433040 +3.600000 0.300000 4.094109 +3.600000 0.400000 3.775178 +3.600000 0.500000 3.476248 +3.600000 0.600000 3.197317 +3.600000 0.700000 2.938386 +3.600000 0.800000 2.699456 +3.600000 0.900000 2.480525 +3.600000 1.000000 2.281595 +3.600000 1.100000 2.102664 +3.600000 1.200000 1.943733 +3.600000 1.300000 1.804803 +3.600000 1.400000 1.685872 +3.600000 1.500000 1.586941 +3.600000 1.600000 1.508011 +3.600000 1.700000 1.449080 +3.600000 1.800000 1.410149 +3.600000 1.900000 1.391219 +3.600000 2.000000 1.392288 +3.600000 2.100000 1.413357 +3.600000 2.200000 1.454427 +3.600000 2.300000 1.515496 +3.600000 2.400000 1.596565 +3.600000 2.500000 1.697635 +3.600000 2.600000 1.818704 +3.600000 2.700000 1.959773 +3.600000 2.800000 2.120843 +3.600000 2.900000 2.301912 +3.600000 3.000000 2.502981 +3.600000 3.100000 2.724051 +3.600000 3.200000 2.965120 +3.600000 3.300000 3.226189 +3.600000 3.400000 3.507259 +3.600000 3.500000 3.808328 +3.600000 3.600000 4.129397 +3.600000 3.700000 4.470467 +3.600000 3.800000 4.831536 +3.600000 3.900000 5.212605 +3.600000 4.000000 5.613675 +3.600000 4.100000 6.034744 +3.600000 4.200000 6.475813 +3.600000 4.300000 6.936883 +3.600000 4.400000 7.417952 +3.600000 4.500000 7.919021 +3.600000 4.600000 8.440091 +3.600000 4.700000 8.981160 +3.600000 4.800000 9.542230 +3.600000 4.900000 10.123299 +3.600000 5.000000 10.724368 +3.600000 5.100000 11.345438 +3.600000 5.200000 11.986507 +3.600000 5.300000 12.647576 +3.600000 5.400000 13.328646 +3.600000 5.500000 14.029715 +3.600000 5.600000 14.750784 +3.600000 5.700000 15.491854 +3.600000 5.800000 16.252923 +3.600000 5.900000 17.033992 +3.600000 6.000000 17.835062 +3.600000 6.100000 18.656131 +3.600000 6.200000 19.497200 +3.600000 6.300000 20.358270 +3.600000 6.400000 21.239339 +3.600000 6.500000 22.140408 +3.600000 6.600000 23.061478 +3.600000 6.700000 24.002547 +3.600000 6.800000 24.963616 +3.600000 6.900000 25.944686 +3.600000 7.000000 26.945755 +3.600000 7.100000 27.966824 +3.600000 7.200000 29.007894 +3.600000 7.300000 30.068963 +3.600000 7.400000 31.150032 +3.600000 7.500000 32.251102 +3.600000 7.600000 33.372171 +3.600000 7.700000 34.513240 +3.600000 7.800000 35.674310 +3.600000 7.900000 36.855379 +3.600000 8.000000 38.056448 +3.600000 8.100000 39.277518 +3.600000 8.200000 40.518587 +3.600000 8.300000 41.779657 +3.600000 8.400000 43.060726 +3.600000 8.500000 44.361795 +3.600000 8.600000 45.682865 +3.600000 8.700000 47.023934 +3.600000 8.800000 48.385003 +3.600000 8.900000 49.766073 +3.600000 9.000000 51.167142 +3.600000 9.100000 52.588211 +3.600000 9.200000 54.029281 +3.600000 9.300000 55.490350 +3.600000 9.400000 56.971419 +3.600000 9.500000 58.472489 +3.600000 9.600000 59.993558 +3.600000 9.700000 61.534627 +3.600000 9.800000 63.095697 +3.600000 9.900000 64.676766 +3.600000 10.000000 66.277835 +3.600000 10.100000 67.898905 +3.600000 10.200000 69.539974 +3.600000 10.300000 71.201043 +3.600000 10.400000 72.882113 +3.600000 10.500000 74.583182 +3.600000 10.600000 76.304251 +3.600000 10.700000 78.045321 +3.600000 10.800000 79.806390 +3.600000 10.900000 81.587459 +3.600000 11.000000 83.388529 +3.600000 11.100000 85.209598 +3.600000 11.200000 87.050667 +3.600000 11.300000 88.911737 +3.600000 11.400000 90.792806 +3.600000 11.500000 92.693875 +3.600000 11.600000 94.614945 +3.600000 11.700000 96.556014 +3.600000 11.800000 98.517084 +3.600000 11.900000 100.498153 +3.600000 12.000000 102.499222 +3.600000 12.100000 104.520292 +3.600000 12.200000 106.561361 +3.600000 12.300000 108.622430 +3.600000 12.400000 110.703500 +3.600000 12.500000 112.804569 +3.600000 12.600000 114.925638 +3.600000 12.700000 117.066708 +3.600000 12.800000 119.227777 +3.600000 12.900000 121.408846 +3.600000 13.000000 123.609916 +3.600000 13.100000 125.830985 +3.600000 13.200000 128.072054 +3.600000 13.300000 130.333124 +3.600000 13.400000 132.614193 +3.600000 13.500000 134.915262 +3.600000 13.600000 137.236332 +3.600000 13.700000 139.577401 +3.600000 13.800000 141.938470 +3.600000 13.900000 144.319540 +3.600000 14.000000 146.720609 +3.600000 14.100000 149.141678 +3.600000 14.200000 151.582748 +3.600000 14.300000 154.043817 +3.600000 14.400000 156.524886 +3.600000 14.500000 159.025956 +3.600000 14.600000 161.547025 +3.600000 14.700000 164.088094 +3.600000 14.800000 166.649164 +3.600000 14.900000 169.230233 +3.600000 15.000000 171.831302 + +3.700000 -5.000000 49.188138 +3.700000 -4.900000 47.822177 +3.700000 -4.800000 46.476217 +3.700000 -4.700000 45.150256 +3.700000 -4.600000 43.844295 +3.700000 -4.500000 42.558335 +3.700000 -4.400000 41.292374 +3.700000 -4.300000 40.046414 +3.700000 -4.200000 38.820453 +3.700000 -4.100000 37.614492 +3.700000 -4.000000 36.428532 +3.700000 -3.900000 35.262571 +3.700000 -3.800000 34.116610 +3.700000 -3.700000 32.990650 +3.700000 -3.600000 31.884689 +3.700000 -3.500000 30.798729 +3.700000 -3.400000 29.732768 +3.700000 -3.300000 28.686807 +3.700000 -3.200000 27.660847 +3.700000 -3.100000 26.654886 +3.700000 -3.000000 25.668926 +3.700000 -2.900000 24.702965 +3.700000 -2.800000 23.757004 +3.700000 -2.700000 22.831044 +3.700000 -2.600000 21.925083 +3.700000 -2.500000 21.039123 +3.700000 -2.400000 20.173162 +3.700000 -2.300000 19.327201 +3.700000 -2.200000 18.501241 +3.700000 -2.100000 17.695280 +3.700000 -2.000000 16.909320 +3.700000 -1.900000 16.143359 +3.700000 -1.800000 15.397398 +3.700000 -1.700000 14.671438 +3.700000 -1.600000 13.965477 +3.700000 -1.500000 13.279517 +3.700000 -1.400000 12.613556 +3.700000 -1.300000 11.967595 +3.700000 -1.200000 11.341635 +3.700000 -1.100000 10.735674 +3.700000 -1.000000 10.149713 +3.700000 -0.900000 9.583753 +3.700000 -0.800000 9.037792 +3.700000 -0.700000 8.511832 +3.700000 -0.600000 8.005871 +3.700000 -0.500000 7.519910 +3.700000 -0.400000 7.053950 +3.700000 -0.300000 6.607989 +3.700000 -0.200000 6.182029 +3.700000 -0.100000 5.776068 +3.700000 -0.000000 5.390107 +3.700000 0.100000 5.024147 +3.700000 0.200000 4.678186 +3.700000 0.300000 4.352226 +3.700000 0.400000 4.046265 +3.700000 0.500000 3.760304 +3.700000 0.600000 3.494344 +3.700000 0.700000 3.248383 +3.700000 0.800000 3.022423 +3.700000 0.900000 2.816462 +3.700000 1.000000 2.630501 +3.700000 1.100000 2.464541 +3.700000 1.200000 2.318580 +3.700000 1.300000 2.192620 +3.700000 1.400000 2.086659 +3.700000 1.500000 2.000698 +3.700000 1.600000 1.934738 +3.700000 1.700000 1.888777 +3.700000 1.800000 1.862816 +3.700000 1.900000 1.856856 +3.700000 2.000000 1.870895 +3.700000 2.100000 1.904935 +3.700000 2.200000 1.958974 +3.700000 2.300000 2.033013 +3.700000 2.400000 2.127053 +3.700000 2.500000 2.241092 +3.700000 2.600000 2.375132 +3.700000 2.700000 2.529171 +3.700000 2.800000 2.703210 +3.700000 2.900000 2.897250 +3.700000 3.000000 3.111289 +3.700000 3.100000 3.345329 +3.700000 3.200000 3.599368 +3.700000 3.300000 3.873407 +3.700000 3.400000 4.167447 +3.700000 3.500000 4.481486 +3.700000 3.600000 4.815526 +3.700000 3.700000 5.169565 +3.700000 3.800000 5.543604 +3.700000 3.900000 5.937644 +3.700000 4.000000 6.351683 +3.700000 4.100000 6.785723 +3.700000 4.200000 7.239762 +3.700000 4.300000 7.713801 +3.700000 4.400000 8.207841 +3.700000 4.500000 8.721880 +3.700000 4.600000 9.255919 +3.700000 4.700000 9.809959 +3.700000 4.800000 10.383998 +3.700000 4.900000 10.978038 +3.700000 5.000000 11.592077 +3.700000 5.100000 12.226116 +3.700000 5.200000 12.880156 +3.700000 5.300000 13.554195 +3.700000 5.400000 14.248235 +3.700000 5.500000 14.962274 +3.700000 5.600000 15.696313 +3.700000 5.700000 16.450353 +3.700000 5.800000 17.224392 +3.700000 5.900000 18.018432 +3.700000 6.000000 18.832471 +3.700000 6.100000 19.666510 +3.700000 6.200000 20.520550 +3.700000 6.300000 21.394589 +3.700000 6.400000 22.288629 +3.700000 6.500000 23.202668 +3.700000 6.600000 24.136707 +3.700000 6.700000 25.090747 +3.700000 6.800000 26.064786 +3.700000 6.900000 27.058826 +3.700000 7.000000 28.072865 +3.700000 7.100000 29.106904 +3.700000 7.200000 30.160944 +3.700000 7.300000 31.234983 +3.700000 7.400000 32.329022 +3.700000 7.500000 33.443062 +3.700000 7.600000 34.577101 +3.700000 7.700000 35.731141 +3.700000 7.800000 36.905180 +3.700000 7.900000 38.099219 +3.700000 8.000000 39.313259 +3.700000 8.100000 40.547298 +3.700000 8.200000 41.801338 +3.700000 8.300000 43.075377 +3.700000 8.400000 44.369416 +3.700000 8.500000 45.683456 +3.700000 8.600000 47.017495 +3.700000 8.700000 48.371535 +3.700000 8.800000 49.745574 +3.700000 8.900000 51.139613 +3.700000 9.000000 52.553653 +3.700000 9.100000 53.987692 +3.700000 9.200000 55.441732 +3.700000 9.300000 56.915771 +3.700000 9.400000 58.409810 +3.700000 9.500000 59.923850 +3.700000 9.600000 61.457889 +3.700000 9.700000 63.011929 +3.700000 9.800000 64.585968 +3.700000 9.900000 66.180007 +3.700000 10.000000 67.794047 +3.700000 10.100000 69.428086 +3.700000 10.200000 71.082125 +3.700000 10.300000 72.756165 +3.700000 10.400000 74.450204 +3.700000 10.500000 76.164244 +3.700000 10.600000 77.898283 +3.700000 10.700000 79.652322 +3.700000 10.800000 81.426362 +3.700000 10.900000 83.220401 +3.700000 11.000000 85.034441 +3.700000 11.100000 86.868480 +3.700000 11.200000 88.722519 +3.700000 11.300000 90.596559 +3.700000 11.400000 92.490598 +3.700000 11.500000 94.404638 +3.700000 11.600000 96.338677 +3.700000 11.700000 98.292716 +3.700000 11.800000 100.266756 +3.700000 11.900000 102.260795 +3.700000 12.000000 104.274835 +3.700000 12.100000 106.308874 +3.700000 12.200000 108.362913 +3.700000 12.300000 110.436953 +3.700000 12.400000 112.530992 +3.700000 12.500000 114.645032 +3.700000 12.600000 116.779071 +3.700000 12.700000 118.933110 +3.700000 12.800000 121.107150 +3.700000 12.900000 123.301189 +3.700000 13.000000 125.515228 +3.700000 13.100000 127.749268 +3.700000 13.200000 130.003307 +3.700000 13.300000 132.277347 +3.700000 13.400000 134.571386 +3.700000 13.500000 136.885425 +3.700000 13.600000 139.219465 +3.700000 13.700000 141.573504 +3.700000 13.800000 143.947544 +3.700000 13.900000 146.341583 +3.700000 14.000000 148.755622 +3.700000 14.100000 151.189662 +3.700000 14.200000 153.643701 +3.700000 14.300000 156.117741 +3.700000 14.400000 158.611780 +3.700000 14.500000 161.125819 +3.700000 14.600000 163.659859 +3.700000 14.700000 166.213898 +3.700000 14.800000 168.787938 +3.700000 14.900000 171.381977 +3.700000 15.000000 173.996016 + +3.800000 -5.000000 48.883843 +3.800000 -4.900000 47.530335 +3.800000 -4.800000 46.196828 +3.800000 -4.700000 44.883321 +3.800000 -4.600000 43.589813 +3.800000 -4.500000 42.316306 +3.800000 -4.400000 41.062799 +3.800000 -4.300000 39.829291 +3.800000 -4.200000 38.615784 +3.800000 -4.100000 37.422277 +3.800000 -4.000000 36.248770 +3.800000 -3.900000 35.095262 +3.800000 -3.800000 33.961755 +3.800000 -3.700000 32.848248 +3.800000 -3.600000 31.754740 +3.800000 -3.500000 30.681233 +3.800000 -3.400000 29.627726 +3.800000 -3.300000 28.594219 +3.800000 -3.200000 27.580711 +3.800000 -3.100000 26.587204 +3.800000 -3.000000 25.613697 +3.800000 -2.900000 24.660189 +3.800000 -2.800000 23.726682 +3.800000 -2.700000 22.813175 +3.800000 -2.600000 21.919667 +3.800000 -2.500000 21.046160 +3.800000 -2.400000 20.192653 +3.800000 -2.300000 19.359146 +3.800000 -2.200000 18.545638 +3.800000 -2.100000 17.752131 +3.800000 -2.000000 16.978624 +3.800000 -1.900000 16.225116 +3.800000 -1.800000 15.491609 +3.800000 -1.700000 14.778102 +3.800000 -1.600000 14.084594 +3.800000 -1.500000 13.411087 +3.800000 -1.400000 12.757580 +3.800000 -1.300000 12.124073 +3.800000 -1.200000 11.510565 +3.800000 -1.100000 10.917058 +3.800000 -1.000000 10.343551 +3.800000 -0.900000 9.790043 +3.800000 -0.800000 9.256536 +3.800000 -0.700000 8.743029 +3.800000 -0.600000 8.249522 +3.800000 -0.500000 7.776014 +3.800000 -0.400000 7.322507 +3.800000 -0.300000 6.889000 +3.800000 -0.200000 6.475492 +3.800000 -0.100000 6.081985 +3.800000 -0.000000 5.708478 +3.800000 0.100000 5.354970 +3.800000 0.200000 5.021463 +3.800000 0.300000 4.707956 +3.800000 0.400000 4.414449 +3.800000 0.500000 4.140941 +3.800000 0.600000 3.887434 +3.800000 0.700000 3.653927 +3.800000 0.800000 3.440419 +3.800000 0.900000 3.246912 +3.800000 1.000000 3.073405 +3.800000 1.100000 2.919898 +3.800000 1.200000 2.786390 +3.800000 1.300000 2.672883 +3.800000 1.400000 2.579376 +3.800000 1.500000 2.505868 +3.800000 1.600000 2.452361 +3.800000 1.700000 2.418854 +3.800000 1.800000 2.405346 +3.800000 1.900000 2.411839 +3.800000 2.000000 2.438332 +3.800000 2.100000 2.484825 +3.800000 2.200000 2.551317 +3.800000 2.300000 2.637810 +3.800000 2.400000 2.744303 +3.800000 2.500000 2.870795 +3.800000 2.600000 3.017288 +3.800000 2.700000 3.183781 +3.800000 2.800000 3.370274 +3.800000 2.900000 3.576766 +3.800000 3.000000 3.803259 +3.800000 3.100000 4.049752 +3.800000 3.200000 4.316244 +3.800000 3.300000 4.602737 +3.800000 3.400000 4.909230 +3.800000 3.500000 5.235722 +3.800000 3.600000 5.582215 +3.800000 3.700000 5.948708 +3.800000 3.800000 6.335201 +3.800000 3.900000 6.741693 +3.800000 4.000000 7.168186 +3.800000 4.100000 7.614679 +3.800000 4.200000 8.081171 +3.800000 4.300000 8.567664 +3.800000 4.400000 9.074157 +3.800000 4.500000 9.600649 +3.800000 4.600000 10.147142 +3.800000 4.700000 10.713635 +3.800000 4.800000 11.300128 +3.800000 4.900000 11.906620 +3.800000 5.000000 12.533113 +3.800000 5.100000 13.179606 +3.800000 5.200000 13.846098 +3.800000 5.300000 14.532591 +3.800000 5.400000 15.239084 +3.800000 5.500000 15.965577 +3.800000 5.600000 16.712069 +3.800000 5.700000 17.478562 +3.800000 5.800000 18.265055 +3.800000 5.900000 19.071547 +3.800000 6.000000 19.898040 +3.800000 6.100000 20.744533 +3.800000 6.200000 21.611025 +3.800000 6.300000 22.497518 +3.800000 6.400000 23.404011 +3.800000 6.500000 24.330504 +3.800000 6.600000 25.276996 +3.800000 6.700000 26.243489 +3.800000 6.800000 27.229982 +3.800000 6.900000 28.236474 +3.800000 7.000000 29.262967 +3.800000 7.100000 30.309460 +3.800000 7.200000 31.375953 +3.800000 7.300000 32.462445 +3.800000 7.400000 33.568938 +3.800000 7.500000 34.695431 +3.800000 7.600000 35.841923 +3.800000 7.700000 37.008416 +3.800000 7.800000 38.194909 +3.800000 7.900000 39.401401 +3.800000 8.000000 40.627894 +3.800000 8.100000 41.874387 +3.800000 8.200000 43.140880 +3.800000 8.300000 44.427372 +3.800000 8.400000 45.733865 +3.800000 8.500000 47.060358 +3.800000 8.600000 48.406850 +3.800000 8.700000 49.773343 +3.800000 8.800000 51.159836 +3.800000 8.900000 52.566329 +3.800000 9.000000 53.992821 +3.800000 9.100000 55.439314 +3.800000 9.200000 56.905807 +3.800000 9.300000 58.392299 +3.800000 9.400000 59.898792 +3.800000 9.500000 61.425285 +3.800000 9.600000 62.971777 +3.800000 9.700000 64.538270 +3.800000 9.800000 66.124763 +3.800000 9.900000 67.731256 +3.800000 10.000000 69.357748 +3.800000 10.100000 71.004241 +3.800000 10.200000 72.670734 +3.800000 10.300000 74.357226 +3.800000 10.400000 76.063719 +3.800000 10.500000 77.790212 +3.800000 10.600000 79.536705 +3.800000 10.700000 81.303197 +3.800000 10.800000 83.089690 +3.800000 10.900000 84.896183 +3.800000 11.000000 86.722675 +3.800000 11.100000 88.569168 +3.800000 11.200000 90.435661 +3.800000 11.300000 92.322153 +3.800000 11.400000 94.228646 +3.800000 11.500000 96.155139 +3.800000 11.600000 98.101632 +3.800000 11.700000 100.068124 +3.800000 11.800000 102.054617 +3.800000 11.900000 104.061110 +3.800000 12.000000 106.087602 +3.800000 12.100000 108.134095 +3.800000 12.200000 110.200588 +3.800000 12.300000 112.287080 +3.800000 12.400000 114.393573 +3.800000 12.500000 116.520066 +3.800000 12.600000 118.666559 +3.800000 12.700000 120.833051 +3.800000 12.800000 123.019544 +3.800000 12.900000 125.226037 +3.800000 13.000000 127.452529 +3.800000 13.100000 129.699022 +3.800000 13.200000 131.965515 +3.800000 13.300000 134.252008 +3.800000 13.400000 136.558500 +3.800000 13.500000 138.884993 +3.800000 13.600000 141.231486 +3.800000 13.700000 143.597978 +3.800000 13.800000 145.984471 +3.800000 13.900000 148.390964 +3.800000 14.000000 150.817456 +3.800000 14.100000 153.263949 +3.800000 14.200000 155.730442 +3.800000 14.300000 158.216935 +3.800000 14.400000 160.723427 +3.800000 14.500000 163.249920 +3.800000 14.600000 165.796413 +3.800000 14.700000 168.362905 +3.800000 14.800000 170.949398 +3.800000 14.900000 173.555891 +3.800000 15.000000 176.182384 + +3.900000 -5.000000 48.698102 +3.900000 -4.900000 47.356531 +3.900000 -4.800000 46.034960 +3.900000 -4.700000 44.733389 +3.900000 -4.600000 43.451819 +3.900000 -4.500000 42.190248 +3.900000 -4.400000 40.948677 +3.900000 -4.300000 39.727107 +3.900000 -4.200000 38.525536 +3.900000 -4.100000 37.343965 +3.900000 -4.000000 36.182394 +3.900000 -3.900000 35.040824 +3.900000 -3.800000 33.919253 +3.900000 -3.700000 32.817682 +3.900000 -3.600000 31.736111 +3.900000 -3.500000 30.674541 +3.900000 -3.400000 29.632970 +3.900000 -3.300000 28.611399 +3.900000 -3.200000 27.609829 +3.900000 -3.100000 26.628258 +3.900000 -3.000000 25.666687 +3.900000 -2.900000 24.725116 +3.900000 -2.800000 23.803546 +3.900000 -2.700000 22.901975 +3.900000 -2.600000 22.020404 +3.900000 -2.500000 21.158834 +3.900000 -2.400000 20.317263 +3.900000 -2.300000 19.495692 +3.900000 -2.200000 18.694121 +3.900000 -2.100000 17.912551 +3.900000 -2.000000 17.150980 +3.900000 -1.900000 16.409409 +3.900000 -1.800000 15.687839 +3.900000 -1.700000 14.986268 +3.900000 -1.600000 14.304697 +3.900000 -1.500000 13.643126 +3.900000 -1.400000 13.001556 +3.900000 -1.300000 12.379985 +3.900000 -1.200000 11.778414 +3.900000 -1.100000 11.196843 +3.900000 -1.000000 10.635273 +3.900000 -0.900000 10.093702 +3.900000 -0.800000 9.572131 +3.900000 -0.700000 9.070561 +3.900000 -0.600000 8.588990 +3.900000 -0.500000 8.127419 +3.900000 -0.400000 7.685848 +3.900000 -0.300000 7.264278 +3.900000 -0.200000 6.862707 +3.900000 -0.100000 6.481136 +3.900000 -0.000000 6.119566 +3.900000 0.100000 5.777995 +3.900000 0.200000 5.456424 +3.900000 0.300000 5.154853 +3.900000 0.400000 4.873283 +3.900000 0.500000 4.611712 +3.900000 0.600000 4.370141 +3.900000 0.700000 4.148570 +3.900000 0.800000 3.947000 +3.900000 0.900000 3.765429 +3.900000 1.000000 3.603858 +3.900000 1.100000 3.462288 +3.900000 1.200000 3.340717 +3.900000 1.300000 3.239146 +3.900000 1.400000 3.157575 +3.900000 1.500000 3.096005 +3.900000 1.600000 3.054434 +3.900000 1.700000 3.032863 +3.900000 1.800000 3.031293 +3.900000 1.900000 3.049722 +3.900000 2.000000 3.088151 +3.900000 2.100000 3.146580 +3.900000 2.200000 3.225010 +3.900000 2.300000 3.323439 +3.900000 2.400000 3.441868 +3.900000 2.500000 3.580298 +3.900000 2.600000 3.738727 +3.900000 2.700000 3.917156 +3.900000 2.800000 4.115585 +3.900000 2.900000 4.334015 +3.900000 3.000000 4.572444 +3.900000 3.100000 4.830873 +3.900000 3.200000 5.109302 +3.900000 3.300000 5.407732 +3.900000 3.400000 5.726161 +3.900000 3.500000 6.064590 +3.900000 3.600000 6.423020 +3.900000 3.700000 6.801449 +3.900000 3.800000 7.199878 +3.900000 3.900000 7.618307 +3.900000 4.000000 8.056737 +3.900000 4.100000 8.515166 +3.900000 4.200000 8.993595 +3.900000 4.300000 9.492025 +3.900000 4.400000 10.010454 +3.900000 4.500000 10.548883 +3.900000 4.600000 11.107312 +3.900000 4.700000 11.685742 +3.900000 4.800000 12.284171 +3.900000 4.900000 12.902600 +3.900000 5.000000 13.541030 +3.900000 5.100000 14.199459 +3.900000 5.200000 14.877888 +3.900000 5.300000 15.576317 +3.900000 5.400000 16.294747 +3.900000 5.500000 17.033176 +3.900000 5.600000 17.791605 +3.900000 5.700000 18.570034 +3.900000 5.800000 19.368464 +3.900000 5.900000 20.186893 +3.900000 6.000000 21.025322 +3.900000 6.100000 21.883752 +3.900000 6.200000 22.762181 +3.900000 6.300000 23.660610 +3.900000 6.400000 24.579039 +3.900000 6.500000 25.517469 +3.900000 6.600000 26.475898 +3.900000 6.700000 27.454327 +3.900000 6.800000 28.452757 +3.900000 6.900000 29.471186 +3.900000 7.000000 30.509615 +3.900000 7.100000 31.568044 +3.900000 7.200000 32.646474 +3.900000 7.300000 33.744903 +3.900000 7.400000 34.863332 +3.900000 7.500000 36.001761 +3.900000 7.600000 37.160191 +3.900000 7.700000 38.338620 +3.900000 7.800000 39.537049 +3.900000 7.900000 40.755479 +3.900000 8.000000 41.993908 +3.900000 8.100000 43.252337 +3.900000 8.200000 44.530766 +3.900000 8.300000 45.829196 +3.900000 8.400000 47.147625 +3.900000 8.500000 48.486054 +3.900000 8.600000 49.844484 +3.900000 8.700000 51.222913 +3.900000 8.800000 52.621342 +3.900000 8.900000 54.039771 +3.900000 9.000000 55.478201 +3.900000 9.100000 56.936630 +3.900000 9.200000 58.415059 +3.900000 9.300000 59.913489 +3.900000 9.400000 61.431918 +3.900000 9.500000 62.970347 +3.900000 9.600000 64.528776 +3.900000 9.700000 66.107206 +3.900000 9.800000 67.705635 +3.900000 9.900000 69.324064 +3.900000 10.000000 70.962493 +3.900000 10.100000 72.620923 +3.900000 10.200000 74.299352 +3.900000 10.300000 75.997781 +3.900000 10.400000 77.716211 +3.900000 10.500000 79.454640 +3.900000 10.600000 81.213069 +3.900000 10.700000 82.991498 +3.900000 10.800000 84.789928 +3.900000 10.900000 86.608357 +3.900000 11.000000 88.446786 +3.900000 11.100000 90.305216 +3.900000 11.200000 92.183645 +3.900000 11.300000 94.082074 +3.900000 11.400000 96.000503 +3.900000 11.500000 97.938933 +3.900000 11.600000 99.897362 +3.900000 11.700000 101.875791 +3.900000 11.800000 103.874220 +3.900000 11.900000 105.892650 +3.900000 12.000000 107.931079 +3.900000 12.100000 109.989508 +3.900000 12.200000 112.067938 +3.900000 12.300000 114.166367 +3.900000 12.400000 116.284796 +3.900000 12.500000 118.423225 +3.900000 12.600000 120.581655 +3.900000 12.700000 122.760084 +3.900000 12.800000 124.958513 +3.900000 12.900000 127.176943 +3.900000 13.000000 129.415372 +3.900000 13.100000 131.673801 +3.900000 13.200000 133.952230 +3.900000 13.300000 136.250660 +3.900000 13.400000 138.569089 +3.900000 13.500000 140.907518 +3.900000 13.600000 143.265948 +3.900000 13.700000 145.644377 +3.900000 13.800000 148.042806 +3.900000 13.900000 150.461235 +3.900000 14.000000 152.899665 +3.900000 14.100000 155.358094 +3.900000 14.200000 157.836523 +3.900000 14.300000 160.334952 +3.900000 14.400000 162.853382 +3.900000 14.500000 165.391811 +3.900000 14.600000 167.950240 +3.900000 14.700000 170.528670 +3.900000 14.800000 173.127099 +3.900000 14.900000 175.745528 +3.900000 15.000000 178.383957 + +4.000000 -5.000000 48.623750 +4.000000 -4.900000 47.293599 +4.000000 -4.800000 45.983448 +4.000000 -4.700000 44.693298 +4.000000 -4.600000 43.423147 +4.000000 -4.500000 42.172996 +4.000000 -4.400000 40.942845 +4.000000 -4.300000 39.732694 +4.000000 -4.200000 38.542543 +4.000000 -4.100000 37.372392 +4.000000 -4.000000 36.222241 +4.000000 -3.900000 35.092090 +4.000000 -3.800000 33.981940 +4.000000 -3.700000 32.891789 +4.000000 -3.600000 31.821638 +4.000000 -3.500000 30.771487 +4.000000 -3.400000 29.741336 +4.000000 -3.300000 28.731185 +4.000000 -3.200000 27.741034 +4.000000 -3.100000 26.770883 +4.000000 -3.000000 25.820732 +4.000000 -2.900000 24.890582 +4.000000 -2.800000 23.980431 +4.000000 -2.700000 23.090280 +4.000000 -2.600000 22.220129 +4.000000 -2.500000 21.369978 +4.000000 -2.400000 20.539827 +4.000000 -2.300000 19.729676 +4.000000 -2.200000 18.939525 +4.000000 -2.100000 18.169375 +4.000000 -2.000000 17.419224 +4.000000 -1.900000 16.689073 +4.000000 -1.800000 15.978922 +4.000000 -1.700000 15.288771 +4.000000 -1.600000 14.618620 +4.000000 -1.500000 13.968469 +4.000000 -1.400000 13.338318 +4.000000 -1.300000 12.728167 +4.000000 -1.200000 12.138017 +4.000000 -1.100000 11.567866 +4.000000 -1.000000 11.017715 +4.000000 -0.900000 10.487564 +4.000000 -0.800000 9.977413 +4.000000 -0.700000 9.487262 +4.000000 -0.600000 9.017111 +4.000000 -0.500000 8.566960 +4.000000 -0.400000 8.136809 +4.000000 -0.300000 7.726659 +4.000000 -0.200000 7.336508 +4.000000 -0.100000 6.966357 +4.000000 -0.000000 6.616206 +4.000000 0.100000 6.286055 +4.000000 0.200000 5.975904 +4.000000 0.300000 5.685753 +4.000000 0.400000 5.415602 +4.000000 0.500000 5.165452 +4.000000 0.600000 4.935301 +4.000000 0.700000 4.725150 +4.000000 0.800000 4.534999 +4.000000 0.900000 4.364848 +4.000000 1.000000 4.214697 +4.000000 1.100000 4.084546 +4.000000 1.200000 3.974395 +4.000000 1.300000 3.884244 +4.000000 1.400000 3.814094 +4.000000 1.500000 3.763943 +4.000000 1.600000 3.733792 +4.000000 1.700000 3.723641 +4.000000 1.800000 3.733490 +4.000000 1.900000 3.763339 +4.000000 2.000000 3.813188 +4.000000 2.100000 3.883037 +4.000000 2.200000 3.972886 +4.000000 2.300000 4.082736 +4.000000 2.400000 4.212585 +4.000000 2.500000 4.362434 +4.000000 2.600000 4.532283 +4.000000 2.700000 4.722132 +4.000000 2.800000 4.931981 +4.000000 2.900000 5.161830 +4.000000 3.000000 5.411679 +4.000000 3.100000 5.681529 +4.000000 3.200000 5.971378 +4.000000 3.300000 6.281227 +4.000000 3.400000 6.611076 +4.000000 3.500000 6.960925 +4.000000 3.600000 7.330774 +4.000000 3.700000 7.720623 +4.000000 3.800000 8.130472 +4.000000 3.900000 8.560321 +4.000000 4.000000 9.010171 +4.000000 4.100000 9.480020 +4.000000 4.200000 9.969869 +4.000000 4.300000 10.479718 +4.000000 4.400000 11.009567 +4.000000 4.500000 11.559416 +4.000000 4.600000 12.129265 +4.000000 4.700000 12.719114 +4.000000 4.800000 13.328963 +4.000000 4.900000 13.958813 +4.000000 5.000000 14.608662 +4.000000 5.100000 15.278511 +4.000000 5.200000 15.968360 +4.000000 5.300000 16.678209 +4.000000 5.400000 17.408058 +4.000000 5.500000 18.157907 +4.000000 5.600000 18.927756 +4.000000 5.700000 19.717606 +4.000000 5.800000 20.527455 +4.000000 5.900000 21.357304 +4.000000 6.000000 22.207153 +4.000000 6.100000 23.077002 +4.000000 6.200000 23.966851 +4.000000 6.300000 24.876700 +4.000000 6.400000 25.806549 +4.000000 6.500000 26.756398 +4.000000 6.600000 27.726248 +4.000000 6.700000 28.716097 +4.000000 6.800000 29.725946 +4.000000 6.900000 30.755795 +4.000000 7.000000 31.805644 +4.000000 7.100000 32.875493 +4.000000 7.200000 33.965342 +4.000000 7.300000 35.075191 +4.000000 7.400000 36.205040 +4.000000 7.500000 37.354890 +4.000000 7.600000 38.524739 +4.000000 7.700000 39.714588 +4.000000 7.800000 40.924437 +4.000000 7.900000 42.154286 +4.000000 8.000000 43.404135 +4.000000 8.100000 44.673984 +4.000000 8.200000 45.963833 +4.000000 8.300000 47.273683 +4.000000 8.400000 48.603532 +4.000000 8.500000 49.953381 +4.000000 8.600000 51.323230 +4.000000 8.700000 52.713079 +4.000000 8.800000 54.122928 +4.000000 8.900000 55.552777 +4.000000 9.000000 57.002626 +4.000000 9.100000 58.472475 +4.000000 9.200000 59.962325 +4.000000 9.300000 61.472174 +4.000000 9.400000 63.002023 +4.000000 9.500000 64.551872 +4.000000 9.600000 66.121721 +4.000000 9.700000 67.711570 +4.000000 9.800000 69.321419 +4.000000 9.900000 70.951268 +4.000000 10.000000 72.601117 +4.000000 10.100000 74.270967 +4.000000 10.200000 75.960816 +4.000000 10.300000 77.670665 +4.000000 10.400000 79.400514 +4.000000 10.500000 81.150363 +4.000000 10.600000 82.920212 +4.000000 10.700000 84.710061 +4.000000 10.800000 86.519910 +4.000000 10.900000 88.349760 +4.000000 11.000000 90.199609 +4.000000 11.100000 92.069458 +4.000000 11.200000 93.959307 +4.000000 11.300000 95.869156 +4.000000 11.400000 97.799005 +4.000000 11.500000 99.748854 +4.000000 11.600000 101.718703 +4.000000 11.700000 103.708552 +4.000000 11.800000 105.718402 +4.000000 11.900000 107.748251 +4.000000 12.000000 109.798100 +4.000000 12.100000 111.867949 +4.000000 12.200000 113.957798 +4.000000 12.300000 116.067647 +4.000000 12.400000 118.197496 +4.000000 12.500000 120.347345 +4.000000 12.600000 122.517194 +4.000000 12.700000 124.707044 +4.000000 12.800000 126.916893 +4.000000 12.900000 129.146742 +4.000000 13.000000 131.396591 +4.000000 13.100000 133.666440 +4.000000 13.200000 135.956289 +4.000000 13.300000 138.266138 +4.000000 13.400000 140.595987 +4.000000 13.500000 142.945837 +4.000000 13.600000 145.315686 +4.000000 13.700000 147.705535 +4.000000 13.800000 150.115384 +4.000000 13.900000 152.545233 +4.000000 14.000000 154.995082 +4.000000 14.100000 157.464931 +4.000000 14.200000 159.954780 +4.000000 14.300000 162.464629 +4.000000 14.400000 164.994479 +4.000000 14.500000 167.544328 +4.000000 14.600000 170.114177 +4.000000 14.700000 172.704026 +4.000000 14.800000 175.313875 +4.000000 14.900000 177.943724 +4.000000 15.000000 180.593573 + +4.100000 -5.000000 48.652968 +4.100000 -4.900000 47.333720 +4.100000 -4.800000 46.034472 +4.100000 -4.700000 44.755224 +4.100000 -4.600000 43.495977 +4.100000 -4.500000 42.256729 +4.100000 -4.400000 41.037481 +4.100000 -4.300000 39.838233 +4.100000 -4.200000 38.658985 +4.100000 -4.100000 37.499738 +4.100000 -4.000000 36.360490 +4.100000 -3.900000 35.241242 +4.100000 -3.800000 34.141994 +4.100000 -3.700000 33.062746 +4.100000 -3.600000 32.003499 +4.100000 -3.500000 30.964251 +4.100000 -3.400000 29.945003 +4.100000 -3.300000 28.945755 +4.100000 -3.200000 27.966508 +4.100000 -3.100000 27.007260 +4.100000 -3.000000 26.068012 +4.100000 -2.900000 25.148764 +4.100000 -2.800000 24.249516 +4.100000 -2.700000 23.370269 +4.100000 -2.600000 22.511021 +4.100000 -2.500000 21.671773 +4.100000 -2.400000 20.852525 +4.100000 -2.300000 20.053277 +4.100000 -2.200000 19.274030 +4.100000 -2.100000 18.514782 +4.100000 -2.000000 17.775534 +4.100000 -1.900000 17.056286 +4.100000 -1.800000 16.357038 +4.100000 -1.700000 15.677791 +4.100000 -1.600000 15.018543 +4.100000 -1.500000 14.379295 +4.100000 -1.400000 13.760047 +4.100000 -1.300000 13.160800 +4.100000 -1.200000 12.581552 +4.100000 -1.100000 12.022304 +4.100000 -1.000000 11.483056 +4.100000 -0.900000 10.963808 +4.100000 -0.800000 10.464561 +4.100000 -0.700000 9.985313 +4.100000 -0.600000 9.526065 +4.100000 -0.500000 9.086817 +4.100000 -0.400000 8.667569 +4.100000 -0.300000 8.268322 +4.100000 -0.200000 7.889074 +4.100000 -0.100000 7.529826 +4.100000 -0.000000 7.190578 +4.100000 0.100000 6.871331 +4.100000 0.200000 6.572083 +4.100000 0.300000 6.292835 +4.100000 0.400000 6.033587 +4.100000 0.500000 5.794339 +4.100000 0.600000 5.575092 +4.100000 0.700000 5.375844 +4.100000 0.800000 5.196596 +4.100000 0.900000 5.037348 +4.100000 1.000000 4.898100 +4.100000 1.100000 4.778853 +4.100000 1.200000 4.679605 +4.100000 1.300000 4.600357 +4.100000 1.400000 4.541109 +4.100000 1.500000 4.501862 +4.100000 1.600000 4.482614 +4.100000 1.700000 4.483366 +4.100000 1.800000 4.504118 +4.100000 1.900000 4.544870 +4.100000 2.000000 4.605623 +4.100000 2.100000 4.686375 +4.100000 2.200000 4.787127 +4.100000 2.300000 4.907879 +4.100000 2.400000 5.048631 +4.100000 2.500000 5.209384 +4.100000 2.600000 5.390136 +4.100000 2.700000 5.590888 +4.100000 2.800000 5.811640 +4.100000 2.900000 6.052393 +4.100000 3.000000 6.313145 +4.100000 3.100000 6.593897 +4.100000 3.200000 6.894649 +4.100000 3.300000 7.215401 +4.100000 3.400000 7.556154 +4.100000 3.500000 7.916906 +4.100000 3.600000 8.297658 +4.100000 3.700000 8.698410 +4.100000 3.800000 9.119162 +4.100000 3.900000 9.559915 +4.100000 4.000000 10.020667 +4.100000 4.100000 10.501419 +4.100000 4.200000 11.002171 +4.100000 4.300000 11.522924 +4.100000 4.400000 12.063676 +4.100000 4.500000 12.624428 +4.100000 4.600000 13.205180 +4.100000 4.700000 13.805932 +4.100000 4.800000 14.426685 +4.100000 4.900000 15.067437 +4.100000 5.000000 15.728189 +4.100000 5.100000 16.408941 +4.100000 5.200000 17.109693 +4.100000 5.300000 17.830446 +4.100000 5.400000 18.571198 +4.100000 5.500000 19.331950 +4.100000 5.600000 20.112702 +4.100000 5.700000 20.913455 +4.100000 5.800000 21.734207 +4.100000 5.900000 22.574959 +4.100000 6.000000 23.435711 +4.100000 6.100000 24.316463 +4.100000 6.200000 25.217216 +4.100000 6.300000 26.137968 +4.100000 6.400000 27.078720 +4.100000 6.500000 28.039472 +4.100000 6.600000 29.020224 +4.100000 6.700000 30.020977 +4.100000 6.800000 31.041729 +4.100000 6.900000 32.082481 +4.100000 7.000000 33.143233 +4.100000 7.100000 34.223986 +4.100000 7.200000 35.324738 +4.100000 7.300000 36.445490 +4.100000 7.400000 37.586242 +4.100000 7.500000 38.746994 +4.100000 7.600000 39.927747 +4.100000 7.700000 41.128499 +4.100000 7.800000 42.349251 +4.100000 7.900000 43.590003 +4.100000 8.000000 44.850755 +4.100000 8.100000 46.131508 +4.100000 8.200000 47.432260 +4.100000 8.300000 48.753012 +4.100000 8.400000 50.093764 +4.100000 8.500000 51.454516 +4.100000 8.600000 52.835269 +4.100000 8.700000 54.236021 +4.100000 8.800000 55.656773 +4.100000 8.900000 57.097525 +4.100000 9.000000 58.558278 +4.100000 9.100000 60.039030 +4.100000 9.200000 61.539782 +4.100000 9.300000 63.060534 +4.100000 9.400000 64.601286 +4.100000 9.500000 66.162039 +4.100000 9.600000 67.742791 +4.100000 9.700000 69.343543 +4.100000 9.800000 70.964295 +4.100000 9.900000 72.605047 +4.100000 10.000000 74.265800 +4.100000 10.100000 75.946552 +4.100000 10.200000 77.647304 +4.100000 10.300000 79.368056 +4.100000 10.400000 81.108809 +4.100000 10.500000 82.869561 +4.100000 10.600000 84.650313 +4.100000 10.700000 86.451065 +4.100000 10.800000 88.271817 +4.100000 10.900000 90.112570 +4.100000 11.000000 91.973322 +4.100000 11.100000 93.854074 +4.100000 11.200000 95.754826 +4.100000 11.300000 97.675578 +4.100000 11.400000 99.616331 +4.100000 11.500000 101.577083 +4.100000 11.600000 103.557835 +4.100000 11.700000 105.558587 +4.100000 11.800000 107.579340 +4.100000 11.900000 109.620092 +4.100000 12.000000 111.680844 +4.100000 12.100000 113.761596 +4.100000 12.200000 115.862348 +4.100000 12.300000 117.983101 +4.100000 12.400000 120.123853 +4.100000 12.500000 122.284605 +4.100000 12.600000 124.465357 +4.100000 12.700000 126.666109 +4.100000 12.800000 128.886862 +4.100000 12.900000 131.127614 +4.100000 13.000000 133.388366 +4.100000 13.100000 135.669118 +4.100000 13.200000 137.969871 +4.100000 13.300000 140.290623 +4.100000 13.400000 142.631375 +4.100000 13.500000 144.992127 +4.100000 13.600000 147.372879 +4.100000 13.700000 149.773632 +4.100000 13.800000 152.194384 +4.100000 13.900000 154.635136 +4.100000 14.000000 157.095888 +4.100000 14.100000 159.576640 +4.100000 14.200000 162.077393 +4.100000 14.300000 164.598145 +4.100000 14.400000 167.138897 +4.100000 14.500000 169.699649 +4.100000 14.600000 172.280402 +4.100000 14.700000 174.881154 +4.100000 14.800000 177.501906 +4.100000 14.900000 180.142658 +4.100000 15.000000 182.803410 + +4.200000 -5.000000 48.777347 +4.200000 -4.900000 47.468485 +4.200000 -4.800000 46.179624 +4.200000 -4.700000 44.910763 +4.200000 -4.600000 43.661901 +4.200000 -4.500000 42.433040 +4.200000 -4.400000 41.224178 +4.200000 -4.300000 40.035317 +4.200000 -4.200000 38.866456 +4.200000 -4.100000 37.717594 +4.200000 -4.000000 36.588733 +4.200000 -3.900000 35.479871 +4.200000 -3.800000 34.391010 +4.200000 -3.700000 33.322148 +4.200000 -3.600000 32.273287 +4.200000 -3.500000 31.244426 +4.200000 -3.400000 30.235564 +4.200000 -3.300000 29.246703 +4.200000 -3.200000 28.277841 +4.200000 -3.100000 27.328980 +4.200000 -3.000000 26.400118 +4.200000 -2.900000 25.491257 +4.200000 -2.800000 24.602396 +4.200000 -2.700000 23.733534 +4.200000 -2.600000 22.884673 +4.200000 -2.500000 22.055811 +4.200000 -2.400000 21.246950 +4.200000 -2.300000 20.458088 +4.200000 -2.200000 19.689227 +4.200000 -2.100000 18.940366 +4.200000 -2.000000 18.211504 +4.200000 -1.900000 17.502643 +4.200000 -1.800000 16.813781 +4.200000 -1.700000 16.144920 +4.200000 -1.600000 15.496058 +4.200000 -1.500000 14.867197 +4.200000 -1.400000 14.258336 +4.200000 -1.300000 13.669474 +4.200000 -1.200000 13.100613 +4.200000 -1.100000 12.551751 +4.200000 -1.000000 12.022890 +4.200000 -0.900000 11.514028 +4.200000 -0.800000 11.025167 +4.200000 -0.700000 10.556306 +4.200000 -0.600000 10.107444 +4.200000 -0.500000 9.678583 +4.200000 -0.400000 9.269721 +4.200000 -0.300000 8.880860 +4.200000 -0.200000 8.511998 +4.200000 -0.100000 8.163137 +4.200000 -0.000000 7.834276 +4.200000 0.100000 7.525414 +4.200000 0.200000 7.236553 +4.200000 0.300000 6.967691 +4.200000 0.400000 6.718830 +4.200000 0.500000 6.489968 +4.200000 0.600000 6.281107 +4.200000 0.700000 6.092246 +4.200000 0.800000 5.923384 +4.200000 0.900000 5.774523 +4.200000 1.000000 5.645661 +4.200000 1.100000 5.536800 +4.200000 1.200000 5.447938 +4.200000 1.300000 5.379077 +4.200000 1.400000 5.330216 +4.200000 1.500000 5.301354 +4.200000 1.600000 5.292493 +4.200000 1.700000 5.303631 +4.200000 1.800000 5.334770 +4.200000 1.900000 5.385908 +4.200000 2.000000 5.457047 +4.200000 2.100000 5.548186 +4.200000 2.200000 5.659324 +4.200000 2.300000 5.790463 +4.200000 2.400000 5.941601 +4.200000 2.500000 6.112740 +4.200000 2.600000 6.303879 +4.200000 2.700000 6.515017 +4.200000 2.800000 6.746156 +4.200000 2.900000 6.997294 +4.200000 3.000000 7.268433 +4.200000 3.100000 7.559571 +4.200000 3.200000 7.870710 +4.200000 3.300000 8.201849 +4.200000 3.400000 8.552987 +4.200000 3.500000 8.924126 +4.200000 3.600000 9.315264 +4.200000 3.700000 9.726403 +4.200000 3.800000 10.157541 +4.200000 3.900000 10.608680 +4.200000 4.000000 11.079819 +4.200000 4.100000 11.570957 +4.200000 4.200000 12.082096 +4.200000 4.300000 12.613234 +4.200000 4.400000 13.164373 +4.200000 4.500000 13.735511 +4.200000 4.600000 14.326650 +4.200000 4.700000 14.937789 +4.200000 4.800000 15.568927 +4.200000 4.900000 16.220066 +4.200000 5.000000 16.891204 +4.200000 5.100000 17.582343 +4.200000 5.200000 18.293481 +4.200000 5.300000 19.024620 +4.200000 5.400000 19.775759 +4.200000 5.500000 20.546897 +4.200000 5.600000 21.338036 +4.200000 5.700000 22.149174 +4.200000 5.800000 22.980313 +4.200000 5.900000 23.831451 +4.200000 6.000000 24.702590 +4.200000 6.100000 25.593729 +4.200000 6.200000 26.504867 +4.200000 6.300000 27.436006 +4.200000 6.400000 28.387144 +4.200000 6.500000 29.358283 +4.200000 6.600000 30.349421 +4.200000 6.700000 31.360560 +4.200000 6.800000 32.391699 +4.200000 6.900000 33.442837 +4.200000 7.000000 34.513976 +4.200000 7.100000 35.605114 +4.200000 7.200000 36.716253 +4.200000 7.300000 37.847391 +4.200000 7.400000 38.998530 +4.200000 7.500000 40.169669 +4.200000 7.600000 41.360807 +4.200000 7.700000 42.571946 +4.200000 7.800000 43.803084 +4.200000 7.900000 45.054223 +4.200000 8.000000 46.325361 +4.200000 8.100000 47.616500 +4.200000 8.200000 48.927639 +4.200000 8.300000 50.258777 +4.200000 8.400000 51.609916 +4.200000 8.500000 52.981054 +4.200000 8.600000 54.372193 +4.200000 8.700000 55.783332 +4.200000 8.800000 57.214470 +4.200000 8.900000 58.665609 +4.200000 9.000000 60.136747 +4.200000 9.100000 61.627886 +4.200000 9.200000 63.139024 +4.200000 9.300000 64.670163 +4.200000 9.400000 66.221302 +4.200000 9.500000 67.792440 +4.200000 9.600000 69.383579 +4.200000 9.700000 70.994717 +4.200000 9.800000 72.625856 +4.200000 9.900000 74.276994 +4.200000 10.000000 75.948133 +4.200000 10.100000 77.639272 +4.200000 10.200000 79.350410 +4.200000 10.300000 81.081549 +4.200000 10.400000 82.832687 +4.200000 10.500000 84.603826 +4.200000 10.600000 86.394964 +4.200000 10.700000 88.206103 +4.200000 10.800000 90.037242 +4.200000 10.900000 91.888380 +4.200000 11.000000 93.759519 +4.200000 11.100000 95.650657 +4.200000 11.200000 97.561796 +4.200000 11.300000 99.492934 +4.200000 11.400000 101.444073 +4.200000 11.500000 103.415212 +4.200000 11.600000 105.406350 +4.200000 11.700000 107.417489 +4.200000 11.800000 109.448627 +4.200000 11.900000 111.499766 +4.200000 12.000000 113.570904 +4.200000 12.100000 115.662043 +4.200000 12.200000 117.773182 +4.200000 12.300000 119.904320 +4.200000 12.400000 122.055459 +4.200000 12.500000 124.226597 +4.200000 12.600000 126.417736 +4.200000 12.700000 128.628874 +4.200000 12.800000 130.860013 +4.200000 12.900000 133.111152 +4.200000 13.000000 135.382290 +4.200000 13.100000 137.673429 +4.200000 13.200000 139.984567 +4.200000 13.300000 142.315706 +4.200000 13.400000 144.666844 +4.200000 13.500000 147.037983 +4.200000 13.600000 149.429122 +4.200000 13.700000 151.840260 +4.200000 13.800000 154.271399 +4.200000 13.900000 156.722537 +4.200000 14.000000 159.193676 +4.200000 14.100000 161.684814 +4.200000 14.200000 164.195953 +4.200000 14.300000 166.727092 +4.200000 14.400000 169.278230 +4.200000 14.500000 171.849369 +4.200000 14.600000 174.440507 +4.200000 14.700000 177.051646 +4.200000 14.800000 179.682785 +4.200000 14.900000 182.333923 +4.200000 15.000000 185.005062 + +4.300000 -5.000000 48.987970 +4.300000 -4.900000 47.688978 +4.300000 -4.800000 46.409986 +4.300000 -4.700000 45.150994 +4.300000 -4.600000 43.912003 +4.300000 -4.500000 42.693011 +4.300000 -4.400000 41.494019 +4.300000 -4.300000 40.315027 +4.300000 -4.200000 39.156035 +4.300000 -4.100000 38.017044 +4.300000 -4.000000 36.898052 +4.300000 -3.900000 35.799060 +4.300000 -3.800000 34.720068 +4.300000 -3.700000 33.661076 +4.300000 -3.600000 32.622085 +4.300000 -3.500000 31.603093 +4.300000 -3.400000 30.604101 +4.300000 -3.300000 29.625109 +4.300000 -3.200000 28.666117 +4.300000 -3.100000 27.727126 +4.300000 -3.000000 26.808134 +4.300000 -2.900000 25.909142 +4.300000 -2.800000 25.030150 +4.300000 -2.700000 24.171158 +4.300000 -2.600000 23.332166 +4.300000 -2.500000 22.513175 +4.300000 -2.400000 21.714183 +4.300000 -2.300000 20.935191 +4.300000 -2.200000 20.176199 +4.300000 -2.100000 19.437207 +4.300000 -2.000000 18.718216 +4.300000 -1.900000 18.019224 +4.300000 -1.800000 17.340232 +4.300000 -1.700000 16.681240 +4.300000 -1.600000 16.042248 +4.300000 -1.500000 15.423257 +4.300000 -1.400000 14.824265 +4.300000 -1.300000 14.245273 +4.300000 -1.200000 13.686281 +4.300000 -1.100000 13.147289 +4.300000 -1.000000 12.628298 +4.300000 -0.900000 12.129306 +4.300000 -0.800000 11.650314 +4.300000 -0.700000 11.191322 +4.300000 -0.600000 10.752330 +4.300000 -0.500000 10.333339 +4.300000 -0.400000 9.934347 +4.300000 -0.300000 9.555355 +4.300000 -0.200000 9.196363 +4.300000 -0.100000 8.857371 +4.300000 -0.000000 8.538380 +4.300000 0.100000 8.239388 +4.300000 0.200000 7.960396 +4.300000 0.300000 7.701404 +4.300000 0.400000 7.462412 +4.300000 0.500000 7.243421 +4.300000 0.600000 7.044429 +4.300000 0.700000 6.865437 +4.300000 0.800000 6.706445 +4.300000 0.900000 6.567453 +4.300000 1.000000 6.448462 +4.300000 1.100000 6.349470 +4.300000 1.200000 6.270478 +4.300000 1.300000 6.211486 +4.300000 1.400000 6.172494 +4.300000 1.500000 6.153503 +4.300000 1.600000 6.154511 +4.300000 1.700000 6.175519 +4.300000 1.800000 6.216527 +4.300000 1.900000 6.277535 +4.300000 2.000000 6.358543 +4.300000 2.100000 6.459552 +4.300000 2.200000 6.580560 +4.300000 2.300000 6.721568 +4.300000 2.400000 6.882576 +4.300000 2.500000 7.063584 +4.300000 2.600000 7.264593 +4.300000 2.700000 7.485601 +4.300000 2.800000 7.726609 +4.300000 2.900000 7.987617 +4.300000 3.000000 8.268625 +4.300000 3.100000 8.569634 +4.300000 3.200000 8.890642 +4.300000 3.300000 9.231650 +4.300000 3.400000 9.592658 +4.300000 3.500000 9.973666 +4.300000 3.600000 10.374675 +4.300000 3.700000 10.795683 +4.300000 3.800000 11.236691 +4.300000 3.900000 11.697699 +4.300000 4.000000 12.178707 +4.300000 4.100000 12.679716 +4.300000 4.200000 13.200724 +4.300000 4.300000 13.741732 +4.300000 4.400000 14.302740 +4.300000 4.500000 14.883748 +4.300000 4.600000 15.484757 +4.300000 4.700000 16.105765 +4.300000 4.800000 16.746773 +4.300000 4.900000 17.407781 +4.300000 5.000000 18.088789 +4.300000 5.100000 18.789798 +4.300000 5.200000 19.510806 +4.300000 5.300000 20.251814 +4.300000 5.400000 21.012822 +4.300000 5.500000 21.793830 +4.300000 5.600000 22.594839 +4.300000 5.700000 23.415847 +4.300000 5.800000 24.256855 +4.300000 5.900000 25.117863 +4.300000 6.000000 25.998871 +4.300000 6.100000 26.899880 +4.300000 6.200000 27.820888 +4.300000 6.300000 28.761896 +4.300000 6.400000 29.722904 +4.300000 6.500000 30.703912 +4.300000 6.600000 31.704921 +4.300000 6.700000 32.725929 +4.300000 6.800000 33.766937 +4.300000 6.900000 34.827945 +4.300000 7.000000 35.908953 +4.300000 7.100000 37.009961 +4.300000 7.200000 38.130970 +4.300000 7.300000 39.271978 +4.300000 7.400000 40.432986 +4.300000 7.500000 41.613994 +4.300000 7.600000 42.815002 +4.300000 7.700000 44.036011 +4.300000 7.800000 45.277019 +4.300000 7.900000 46.538027 +4.300000 8.000000 47.819035 +4.300000 8.100000 49.120043 +4.300000 8.200000 50.441052 +4.300000 8.300000 51.782060 +4.300000 8.400000 53.143068 +4.300000 8.500000 54.524076 +4.300000 8.600000 55.925084 +4.300000 8.700000 57.346093 +4.300000 8.800000 58.787101 +4.300000 8.900000 60.248109 +4.300000 9.000000 61.729117 +4.300000 9.100000 63.230125 +4.300000 9.200000 64.751134 +4.300000 9.300000 66.292142 +4.300000 9.400000 67.853150 +4.300000 9.500000 69.434158 +4.300000 9.600000 71.035166 +4.300000 9.700000 72.656175 +4.300000 9.800000 74.297183 +4.300000 9.900000 75.958191 +4.300000 10.000000 77.639199 +4.300000 10.100000 79.340207 +4.300000 10.200000 81.061216 +4.300000 10.300000 82.802224 +4.300000 10.400000 84.563232 +4.300000 10.500000 86.344240 +4.300000 10.600000 88.145248 +4.300000 10.700000 89.966257 +4.300000 10.800000 91.807265 +4.300000 10.900000 93.668273 +4.300000 11.000000 95.549281 +4.300000 11.100000 97.450289 +4.300000 11.200000 99.371298 +4.300000 11.300000 101.312306 +4.300000 11.400000 103.273314 +4.300000 11.500000 105.254322 +4.300000 11.600000 107.255330 +4.300000 11.700000 109.276338 +4.300000 11.800000 111.317347 +4.300000 11.900000 113.378355 +4.300000 12.000000 115.459363 +4.300000 12.100000 117.560371 +4.300000 12.200000 119.681379 +4.300000 12.300000 121.822388 +4.300000 12.400000 123.983396 +4.300000 12.500000 126.164404 +4.300000 12.600000 128.365412 +4.300000 12.700000 130.586420 +4.300000 12.800000 132.827429 +4.300000 12.900000 135.088437 +4.300000 13.000000 137.369445 +4.300000 13.100000 139.670453 +4.300000 13.200000 141.991461 +4.300000 13.300000 144.332470 +4.300000 13.400000 146.693478 +4.300000 13.500000 149.074486 +4.300000 13.600000 151.475494 +4.300000 13.700000 153.896502 +4.300000 13.800000 156.337511 +4.300000 13.900000 158.798519 +4.300000 14.000000 161.279527 +4.300000 14.100000 163.780535 +4.300000 14.200000 166.301543 +4.300000 14.300000 168.842552 +4.300000 14.400000 171.403560 +4.300000 14.500000 173.984568 +4.300000 14.600000 176.585576 +4.300000 14.700000 179.206584 +4.300000 14.800000 181.847593 +4.300000 14.900000 184.508601 +4.300000 15.000000 187.189609 + +4.400000 -5.000000 49.275488 +4.400000 -4.900000 47.985849 +4.400000 -4.800000 46.716210 +4.400000 -4.700000 45.466571 +4.400000 -4.600000 44.236933 +4.400000 -4.500000 43.027294 +4.400000 -4.400000 41.837655 +4.400000 -4.300000 40.668016 +4.400000 -4.200000 39.518377 +4.400000 -4.100000 38.388738 +4.400000 -4.000000 37.279099 +4.400000 -3.900000 36.189460 +4.400000 -3.800000 35.119821 +4.400000 -3.700000 34.070182 +4.400000 -3.600000 33.040543 +4.400000 -3.500000 32.030904 +4.400000 -3.400000 31.041266 +4.400000 -3.300000 30.071627 +4.400000 -3.200000 29.121988 +4.400000 -3.100000 28.192349 +4.400000 -3.000000 27.282710 +4.400000 -2.900000 26.393071 +4.400000 -2.800000 25.523432 +4.400000 -2.700000 24.673793 +4.400000 -2.600000 23.844154 +4.400000 -2.500000 23.034515 +4.400000 -2.400000 22.244876 +4.400000 -2.300000 21.475237 +4.400000 -2.200000 20.725598 +4.400000 -2.100000 19.995960 +4.400000 -2.000000 19.286321 +4.400000 -1.900000 18.596682 +4.400000 -1.800000 17.927043 +4.400000 -1.700000 17.277404 +4.400000 -1.600000 16.647765 +4.400000 -1.500000 16.038126 +4.400000 -1.400000 15.448487 +4.400000 -1.300000 14.878848 +4.400000 -1.200000 14.329209 +4.400000 -1.100000 13.799570 +4.400000 -1.000000 13.289931 +4.400000 -0.900000 12.800293 +4.400000 -0.800000 12.330654 +4.400000 -0.700000 11.881015 +4.400000 -0.600000 11.451376 +4.400000 -0.500000 11.041737 +4.400000 -0.400000 10.652098 +4.400000 -0.300000 10.282459 +4.400000 -0.200000 9.932820 +4.400000 -0.100000 9.603181 +4.400000 -0.000000 9.293542 +4.400000 0.100000 9.003903 +4.400000 0.200000 8.734264 +4.400000 0.300000 8.484625 +4.400000 0.400000 8.254987 +4.400000 0.500000 8.045348 +4.400000 0.600000 7.855709 +4.400000 0.700000 7.686070 +4.400000 0.800000 7.536431 +4.400000 0.900000 7.406792 +4.400000 1.000000 7.297153 +4.400000 1.100000 7.207514 +4.400000 1.200000 7.137875 +4.400000 1.300000 7.088236 +4.400000 1.400000 7.058597 +4.400000 1.500000 7.048958 +4.400000 1.600000 7.059320 +4.400000 1.700000 7.089681 +4.400000 1.800000 7.140042 +4.400000 1.900000 7.210403 +4.400000 2.000000 7.300764 +4.400000 2.100000 7.411125 +4.400000 2.200000 7.541486 +4.400000 2.300000 7.691847 +4.400000 2.400000 7.862208 +4.400000 2.500000 8.052569 +4.400000 2.600000 8.262930 +4.400000 2.700000 8.493291 +4.400000 2.800000 8.743652 +4.400000 2.900000 9.014014 +4.400000 3.000000 9.304375 +4.400000 3.100000 9.614736 +4.400000 3.200000 9.945097 +4.400000 3.300000 10.295458 +4.400000 3.400000 10.665819 +4.400000 3.500000 11.056180 +4.400000 3.600000 11.466541 +4.400000 3.700000 11.896902 +4.400000 3.800000 12.347263 +4.400000 3.900000 12.817624 +4.400000 4.000000 13.307985 +4.400000 4.100000 13.818346 +4.400000 4.200000 14.348708 +4.400000 4.300000 14.899069 +4.400000 4.400000 15.469430 +4.400000 4.500000 16.059791 +4.400000 4.600000 16.670152 +4.400000 4.700000 17.300513 +4.400000 4.800000 17.950874 +4.400000 4.900000 18.621235 +4.400000 5.000000 19.311596 +4.400000 5.100000 20.021957 +4.400000 5.200000 20.752318 +4.400000 5.300000 21.502679 +4.400000 5.400000 22.273041 +4.400000 5.500000 23.063402 +4.400000 5.600000 23.873763 +4.400000 5.700000 24.704124 +4.400000 5.800000 25.554485 +4.400000 5.900000 26.424846 +4.400000 6.000000 27.315207 +4.400000 6.100000 28.225568 +4.400000 6.200000 29.155929 +4.400000 6.300000 30.106290 +4.400000 6.400000 31.076651 +4.400000 6.500000 32.067012 +4.400000 6.600000 33.077373 +4.400000 6.700000 34.107735 +4.400000 6.800000 35.158096 +4.400000 6.900000 36.228457 +4.400000 7.000000 37.318818 +4.400000 7.100000 38.429179 +4.400000 7.200000 39.559540 +4.400000 7.300000 40.709901 +4.400000 7.400000 41.880262 +4.400000 7.500000 43.070623 +4.400000 7.600000 44.280984 +4.400000 7.700000 45.511345 +4.400000 7.800000 46.761706 +4.400000 7.900000 48.032068 +4.400000 8.000000 49.322429 +4.400000 8.100000 50.632790 +4.400000 8.200000 51.963151 +4.400000 8.300000 53.313512 +4.400000 8.400000 54.683873 +4.400000 8.500000 56.074234 +4.400000 8.600000 57.484595 +4.400000 8.700000 58.914956 +4.400000 8.800000 60.365317 +4.400000 8.900000 61.835678 +4.400000 9.000000 63.326039 +4.400000 9.100000 64.836400 +4.400000 9.200000 66.366762 +4.400000 9.300000 67.917123 +4.400000 9.400000 69.487484 +4.400000 9.500000 71.077845 +4.400000 9.600000 72.688206 +4.400000 9.700000 74.318567 +4.400000 9.800000 75.968928 +4.400000 9.900000 77.639289 +4.400000 10.000000 79.329650 +4.400000 10.100000 81.040011 +4.400000 10.200000 82.770372 +4.400000 10.300000 84.520733 +4.400000 10.400000 86.291095 +4.400000 10.500000 88.081456 +4.400000 10.600000 89.891817 +4.400000 10.700000 91.722178 +4.400000 10.800000 93.572539 +4.400000 10.900000 95.442900 +4.400000 11.000000 97.333261 +4.400000 11.100000 99.243622 +4.400000 11.200000 101.173983 +4.400000 11.300000 103.124344 +4.400000 11.400000 105.094705 +4.400000 11.500000 107.085066 +4.400000 11.600000 109.095427 +4.400000 11.700000 111.125789 +4.400000 11.800000 113.176150 +4.400000 11.900000 115.246511 +4.400000 12.000000 117.336872 +4.400000 12.100000 119.447233 +4.400000 12.200000 121.577594 +4.400000 12.300000 123.727955 +4.400000 12.400000 125.898316 +4.400000 12.500000 128.088677 +4.400000 12.600000 130.299038 +4.400000 12.700000 132.529399 +4.400000 12.800000 134.779760 +4.400000 12.900000 137.050122 +4.400000 13.000000 139.340483 +4.400000 13.100000 141.650844 +4.400000 13.200000 143.981205 +4.400000 13.300000 146.331566 +4.400000 13.400000 148.701927 +4.400000 13.500000 151.092288 +4.400000 13.600000 153.502649 +4.400000 13.700000 155.933010 +4.400000 13.800000 158.383371 +4.400000 13.900000 160.853732 +4.400000 14.000000 163.344093 +4.400000 14.100000 165.854454 +4.400000 14.200000 168.384816 +4.400000 14.300000 170.935177 +4.400000 14.400000 173.505538 +4.400000 14.500000 176.095899 +4.400000 14.600000 178.706260 +4.400000 14.700000 181.336621 +4.400000 14.800000 183.986982 +4.400000 14.900000 186.657343 +4.400000 15.000000 189.347704 + +4.500000 -5.000000 49.630210 +4.500000 -4.900000 48.349407 +4.500000 -4.800000 47.088604 +4.500000 -4.700000 45.847802 +4.500000 -4.600000 44.626999 +4.500000 -4.500000 43.426196 +4.500000 -4.400000 42.245393 +4.500000 -4.300000 41.084591 +4.500000 -4.200000 39.943788 +4.500000 -4.100000 38.822985 +4.500000 -4.000000 37.722182 +4.500000 -3.900000 36.641380 +4.500000 -3.800000 35.580577 +4.500000 -3.700000 34.539774 +4.500000 -3.600000 33.518971 +4.500000 -3.500000 32.518168 +4.500000 -3.400000 31.537366 +4.500000 -3.300000 30.576563 +4.500000 -3.200000 29.635760 +4.500000 -3.100000 28.714957 +4.500000 -3.000000 27.814155 +4.500000 -2.900000 26.933352 +4.500000 -2.800000 26.072549 +4.500000 -2.700000 25.231746 +4.500000 -2.600000 24.410943 +4.500000 -2.500000 23.610141 +4.500000 -2.400000 22.829338 +4.500000 -2.300000 22.068535 +4.500000 -2.200000 21.327732 +4.500000 -2.100000 20.606930 +4.500000 -2.000000 19.906127 +4.500000 -1.900000 19.225324 +4.500000 -1.800000 18.564521 +4.500000 -1.700000 17.923718 +4.500000 -1.600000 17.302916 +4.500000 -1.500000 16.702113 +4.500000 -1.400000 16.121310 +4.500000 -1.300000 15.560507 +4.500000 -1.200000 15.019705 +4.500000 -1.100000 14.498902 +4.500000 -1.000000 13.998099 +4.500000 -0.900000 13.517296 +4.500000 -0.800000 13.056494 +4.500000 -0.700000 12.615691 +4.500000 -0.600000 12.194888 +4.500000 -0.500000 11.794085 +4.500000 -0.400000 11.413282 +4.500000 -0.300000 11.052480 +4.500000 -0.200000 10.711677 +4.500000 -0.100000 10.390874 +4.500000 -0.000000 10.090071 +4.500000 0.100000 9.809269 +4.500000 0.200000 9.548466 +4.500000 0.300000 9.307663 +4.500000 0.400000 9.086860 +4.500000 0.500000 8.886057 +4.500000 0.600000 8.705255 +4.500000 0.700000 8.544452 +4.500000 0.800000 8.403649 +4.500000 0.900000 8.282846 +4.500000 1.000000 8.182044 +4.500000 1.100000 8.101241 +4.500000 1.200000 8.040438 +4.500000 1.300000 7.999635 +4.500000 1.400000 7.978832 +4.500000 1.500000 7.978030 +4.500000 1.600000 7.997227 +4.500000 1.700000 8.036424 +4.500000 1.800000 8.095621 +4.500000 1.900000 8.174819 +4.500000 2.000000 8.274016 +4.500000 2.100000 8.393213 +4.500000 2.200000 8.532410 +4.500000 2.300000 8.691608 +4.500000 2.400000 8.870805 +4.500000 2.500000 9.070002 +4.500000 2.600000 9.289199 +4.500000 2.700000 9.528396 +4.500000 2.800000 9.787594 +4.500000 2.900000 10.066791 +4.500000 3.000000 10.365988 +4.500000 3.100000 10.685185 +4.500000 3.200000 11.024383 +4.500000 3.300000 11.383580 +4.500000 3.400000 11.762777 +4.500000 3.500000 12.161974 +4.500000 3.600000 12.581171 +4.500000 3.700000 13.020369 +4.500000 3.800000 13.479566 +4.500000 3.900000 13.958763 +4.500000 4.000000 14.457960 +4.500000 4.100000 14.977158 +4.500000 4.200000 15.516355 +4.500000 4.300000 16.075552 +4.500000 4.400000 16.654749 +4.500000 4.500000 17.253946 +4.500000 4.600000 17.873144 +4.500000 4.700000 18.512341 +4.500000 4.800000 19.171538 +4.500000 4.900000 19.850735 +4.500000 5.000000 20.549933 +4.500000 5.100000 21.269130 +4.500000 5.200000 22.008327 +4.500000 5.300000 22.767524 +4.500000 5.400000 23.546722 +4.500000 5.500000 24.345919 +4.500000 5.600000 25.165116 +4.500000 5.700000 26.004313 +4.500000 5.800000 26.863510 +4.500000 5.900000 27.742708 +4.500000 6.000000 28.641905 +4.500000 6.100000 29.561102 +4.500000 6.200000 30.500299 +4.500000 6.300000 31.459497 +4.500000 6.400000 32.438694 +4.500000 6.500000 33.437891 +4.500000 6.600000 34.457088 +4.500000 6.700000 35.496285 +4.500000 6.800000 36.555483 +4.500000 6.900000 37.634680 +4.500000 7.000000 38.733877 +4.500000 7.100000 39.853074 +4.500000 7.200000 40.992272 +4.500000 7.300000 42.151469 +4.500000 7.400000 43.330666 +4.500000 7.500000 44.529863 +4.500000 7.600000 45.749060 +4.500000 7.700000 46.988258 +4.500000 7.800000 48.247455 +4.500000 7.900000 49.526652 +4.500000 8.000000 50.825849 +4.500000 8.100000 52.145047 +4.500000 8.200000 53.484244 +4.500000 8.300000 54.843441 +4.500000 8.400000 56.222638 +4.500000 8.500000 57.621836 +4.500000 8.600000 59.041033 +4.500000 8.700000 60.480230 +4.500000 8.800000 61.939427 +4.500000 8.900000 63.418624 +4.500000 9.000000 64.917822 +4.500000 9.100000 66.437019 +4.500000 9.200000 67.976216 +4.500000 9.300000 69.535413 +4.500000 9.400000 71.114611 +4.500000 9.500000 72.713808 +4.500000 9.600000 74.333005 +4.500000 9.700000 75.972202 +4.500000 9.800000 77.631399 +4.500000 9.900000 79.310597 +4.500000 10.000000 81.009794 +4.500000 10.100000 82.728991 +4.500000 10.200000 84.468188 +4.500000 10.300000 86.227386 +4.500000 10.400000 88.006583 +4.500000 10.500000 89.805780 +4.500000 10.600000 91.624977 +4.500000 10.700000 93.464174 +4.500000 10.800000 95.323372 +4.500000 10.900000 97.202569 +4.500000 11.000000 99.101766 +4.500000 11.100000 101.020963 +4.500000 11.200000 102.960161 +4.500000 11.300000 104.919358 +4.500000 11.400000 106.898555 +4.500000 11.500000 108.897752 +4.500000 11.600000 110.916950 +4.500000 11.700000 112.956147 +4.500000 11.800000 115.015344 +4.500000 11.900000 117.094541 +4.500000 12.000000 119.193738 +4.500000 12.100000 121.312936 +4.500000 12.200000 123.452133 +4.500000 12.300000 125.611330 +4.500000 12.400000 127.790527 +4.500000 12.500000 129.989725 +4.500000 12.600000 132.208922 +4.500000 12.700000 134.448119 +4.500000 12.800000 136.707316 +4.500000 12.900000 138.986513 +4.500000 13.000000 141.285711 +4.500000 13.100000 143.604908 +4.500000 13.200000 145.944105 +4.500000 13.300000 148.303302 +4.500000 13.400000 150.682500 +4.500000 13.500000 153.081697 +4.500000 13.600000 155.500894 +4.500000 13.700000 157.940091 +4.500000 13.800000 160.399288 +4.500000 13.900000 162.878486 +4.500000 14.000000 165.377683 +4.500000 14.100000 167.896880 +4.500000 14.200000 170.436077 +4.500000 14.300000 172.995275 +4.500000 14.400000 175.574472 +4.500000 14.500000 178.173669 +4.500000 14.600000 180.792866 +4.500000 14.700000 183.432064 +4.500000 14.800000 186.091261 +4.500000 14.900000 188.770458 +4.500000 15.000000 191.469655 + +4.600000 -5.000000 50.042188 +4.600000 -4.900000 48.769705 +4.600000 -4.800000 47.517222 +4.600000 -4.700000 46.284738 +4.600000 -4.600000 45.072255 +4.600000 -4.500000 43.879772 +4.600000 -4.400000 42.707288 +4.600000 -4.300000 41.554805 +4.600000 -4.200000 40.422321 +4.600000 -4.100000 39.309838 +4.600000 -4.000000 38.217355 +4.600000 -3.900000 37.144871 +4.600000 -3.800000 36.092388 +4.600000 -3.700000 35.059905 +4.600000 -3.600000 34.047421 +4.600000 -3.500000 33.054938 +4.600000 -3.400000 32.082455 +4.600000 -3.300000 31.129971 +4.600000 -3.200000 30.197488 +4.600000 -3.100000 29.285004 +4.600000 -3.000000 28.392521 +4.600000 -2.900000 27.520038 +4.600000 -2.800000 26.667554 +4.600000 -2.700000 25.835071 +4.600000 -2.600000 25.022588 +4.600000 -2.500000 24.230104 +4.600000 -2.400000 23.457621 +4.600000 -2.300000 22.705138 +4.600000 -2.200000 21.972654 +4.600000 -2.100000 21.260171 +4.600000 -2.000000 20.567687 +4.600000 -1.900000 19.895204 +4.600000 -1.800000 19.242721 +4.600000 -1.700000 18.610237 +4.600000 -1.600000 17.997754 +4.600000 -1.500000 17.405271 +4.600000 -1.400000 16.832787 +4.600000 -1.300000 16.280304 +4.600000 -1.200000 15.747821 +4.600000 -1.100000 15.235337 +4.600000 -1.000000 14.742854 +4.600000 -0.900000 14.270370 +4.600000 -0.800000 13.817887 +4.600000 -0.700000 13.385404 +4.600000 -0.600000 12.972920 +4.600000 -0.500000 12.580437 +4.600000 -0.400000 12.207954 +4.600000 -0.300000 11.855470 +4.600000 -0.200000 11.522987 +4.600000 -0.100000 11.210503 +4.600000 -0.000000 10.918020 +4.600000 0.100000 10.645537 +4.600000 0.200000 10.393053 +4.600000 0.300000 10.160570 +4.600000 0.400000 9.948087 +4.600000 0.500000 9.755603 +4.600000 0.600000 9.583120 +4.600000 0.700000 9.430637 +4.600000 0.800000 9.298153 +4.600000 0.900000 9.185670 +4.600000 1.000000 9.093186 +4.600000 1.100000 9.020703 +4.600000 1.200000 8.968220 +4.600000 1.300000 8.935736 +4.600000 1.400000 8.923253 +4.600000 1.500000 8.930770 +4.600000 1.600000 8.958286 +4.600000 1.700000 9.005803 +4.600000 1.800000 9.073320 +4.600000 1.900000 9.160836 +4.600000 2.000000 9.268353 +4.600000 2.100000 9.395869 +4.600000 2.200000 9.543386 +4.600000 2.300000 9.710903 +4.600000 2.400000 9.898419 +4.600000 2.500000 10.105936 +4.600000 2.600000 10.333453 +4.600000 2.700000 10.580969 +4.600000 2.800000 10.848486 +4.600000 2.900000 11.136002 +4.600000 3.000000 11.443519 +4.600000 3.100000 11.771036 +4.600000 3.200000 12.118552 +4.600000 3.300000 12.486069 +4.600000 3.400000 12.873586 +4.600000 3.500000 13.281102 +4.600000 3.600000 13.708619 +4.600000 3.700000 14.156136 +4.600000 3.800000 14.623652 +4.600000 3.900000 15.111169 +4.600000 4.000000 15.618685 +4.600000 4.100000 16.146202 +4.600000 4.200000 16.693719 +4.600000 4.300000 17.261235 +4.600000 4.400000 17.848752 +4.600000 4.500000 18.456269 +4.600000 4.600000 19.083785 +4.600000 4.700000 19.731302 +4.600000 4.800000 20.398819 +4.600000 4.900000 21.086335 +4.600000 5.000000 21.793852 +4.600000 5.100000 22.521368 +4.600000 5.200000 23.268885 +4.600000 5.300000 24.036402 +4.600000 5.400000 24.823918 +4.600000 5.500000 25.631435 +4.600000 5.600000 26.458952 +4.600000 5.700000 27.306468 +4.600000 5.800000 28.173985 +4.600000 5.900000 29.061501 +4.600000 6.000000 29.969018 +4.600000 6.100000 30.896535 +4.600000 6.200000 31.844051 +4.600000 6.300000 32.811568 +4.600000 6.400000 33.799085 +4.600000 6.500000 34.806601 +4.600000 6.600000 35.834118 +4.600000 6.700000 36.881635 +4.600000 6.800000 37.949151 +4.600000 6.900000 39.036668 +4.600000 7.000000 40.144184 +4.600000 7.100000 41.271701 +4.600000 7.200000 42.419218 +4.600000 7.300000 43.586734 +4.600000 7.400000 44.774251 +4.600000 7.500000 45.981768 +4.600000 7.600000 47.209284 +4.600000 7.700000 48.456801 +4.600000 7.800000 49.724318 +4.600000 7.900000 51.011834 +4.600000 8.000000 52.319351 +4.600000 8.100000 53.646867 +4.600000 8.200000 54.994384 +4.600000 8.300000 56.361901 +4.600000 8.400000 57.749417 +4.600000 8.500000 59.156934 +4.600000 8.600000 60.584451 +4.600000 8.700000 62.031967 +4.600000 8.800000 63.499484 +4.600000 8.900000 64.987001 +4.600000 9.000000 66.494517 +4.600000 9.100000 68.022034 +4.600000 9.200000 69.569550 +4.600000 9.300000 71.137067 +4.600000 9.400000 72.724584 +4.600000 9.500000 74.332100 +4.600000 9.600000 75.959617 +4.600000 9.700000 77.607134 +4.600000 9.800000 79.274650 +4.600000 9.900000 80.962167 +4.600000 10.000000 82.669683 +4.600000 10.100000 84.397200 +4.600000 10.200000 86.144717 +4.600000 10.300000 87.912233 +4.600000 10.400000 89.699750 +4.600000 10.500000 91.507267 +4.600000 10.600000 93.334783 +4.600000 10.700000 95.182300 +4.600000 10.800000 97.049817 +4.600000 10.900000 98.937333 +4.600000 11.000000 100.844850 +4.600000 11.100000 102.772366 +4.600000 11.200000 104.719883 +4.600000 11.300000 106.687400 +4.600000 11.400000 108.674916 +4.600000 11.500000 110.682433 +4.600000 11.600000 112.709950 +4.600000 11.700000 114.757466 +4.600000 11.800000 116.824983 +4.600000 11.900000 118.912500 +4.600000 12.000000 121.020016 +4.600000 12.100000 123.147533 +4.600000 12.200000 125.295049 +4.600000 12.300000 127.462566 +4.600000 12.400000 129.650083 +4.600000 12.500000 131.857599 +4.600000 12.600000 134.085116 +4.600000 12.700000 136.332633 +4.600000 12.800000 138.600149 +4.600000 12.900000 140.887666 +4.600000 13.000000 143.195182 +4.600000 13.100000 145.522699 +4.600000 13.200000 147.870216 +4.600000 13.300000 150.237732 +4.600000 13.400000 152.625249 +4.600000 13.500000 155.032766 +4.600000 13.600000 157.460282 +4.600000 13.700000 159.907799 +4.600000 13.800000 162.375316 +4.600000 13.900000 164.862832 +4.600000 14.000000 167.370349 +4.600000 14.100000 169.897865 +4.600000 14.200000 172.445382 +4.600000 14.300000 175.012899 +4.600000 14.400000 177.600415 +4.600000 14.500000 180.207932 +4.600000 14.600000 182.835449 +4.600000 14.700000 185.482965 +4.600000 14.800000 188.150482 +4.600000 14.900000 190.837999 +4.600000 15.000000 193.545515 + +4.700000 -5.000000 50.501315 +4.700000 -4.900000 49.236634 +4.700000 -4.800000 47.991953 +4.700000 -4.700000 46.767273 +4.700000 -4.600000 45.562592 +4.700000 -4.500000 44.377911 +4.700000 -4.400000 43.213230 +4.700000 -4.300000 42.068550 +4.700000 -4.200000 40.943869 +4.700000 -4.100000 39.839188 +4.700000 -4.000000 38.754508 +4.700000 -3.900000 37.689827 +4.700000 -3.800000 36.645146 +4.700000 -3.700000 35.620466 +4.700000 -3.600000 34.615785 +4.700000 -3.500000 33.631104 +4.700000 -3.400000 32.666423 +4.700000 -3.300000 31.721743 +4.700000 -3.200000 30.797062 +4.700000 -3.100000 29.892381 +4.700000 -3.000000 29.007701 +4.700000 -2.900000 28.143020 +4.700000 -2.800000 27.298339 +4.700000 -2.700000 26.473659 +4.700000 -2.600000 25.668978 +4.700000 -2.500000 24.884297 +4.700000 -2.400000 24.119616 +4.700000 -2.300000 23.374936 +4.700000 -2.200000 22.650255 +4.700000 -2.100000 21.945574 +4.700000 -2.000000 21.260894 +4.700000 -1.900000 20.596213 +4.700000 -1.800000 19.951532 +4.700000 -1.700000 19.326852 +4.700000 -1.600000 18.722171 +4.700000 -1.500000 18.137490 +4.700000 -1.400000 17.572810 +4.700000 -1.300000 17.028129 +4.700000 -1.200000 16.503448 +4.700000 -1.100000 15.998767 +4.700000 -1.000000 15.514087 +4.700000 -0.900000 15.049406 +4.700000 -0.800000 14.604725 +4.700000 -0.700000 14.180045 +4.700000 -0.600000 13.775364 +4.700000 -0.500000 13.390683 +4.700000 -0.400000 13.026003 +4.700000 -0.300000 12.681322 +4.700000 -0.200000 12.356641 +4.700000 -0.100000 12.051960 +4.700000 -0.000000 11.767280 +4.700000 0.100000 11.502599 +4.700000 0.200000 11.257918 +4.700000 0.300000 11.033238 +4.700000 0.400000 10.828557 +4.700000 0.500000 10.643876 +4.700000 0.600000 10.479196 +4.700000 0.700000 10.334515 +4.700000 0.800000 10.209834 +4.700000 0.900000 10.105154 +4.700000 1.000000 10.020473 +4.700000 1.100000 9.955792 +4.700000 1.200000 9.911111 +4.700000 1.300000 9.886431 +4.700000 1.400000 9.881750 +4.700000 1.500000 9.897069 +4.700000 1.600000 9.932389 +4.700000 1.700000 9.987708 +4.700000 1.800000 10.063027 +4.700000 1.900000 10.158347 +4.700000 2.000000 10.273666 +4.700000 2.100000 10.408985 +4.700000 2.200000 10.564304 +4.700000 2.300000 10.739624 +4.700000 2.400000 10.934943 +4.700000 2.500000 11.150262 +4.700000 2.600000 11.385582 +4.700000 2.700000 11.640901 +4.700000 2.800000 11.916220 +4.700000 2.900000 12.211540 +4.700000 3.000000 12.526859 +4.700000 3.100000 12.862178 +4.700000 3.200000 13.217497 +4.700000 3.300000 13.592817 +4.700000 3.400000 13.988136 +4.700000 3.500000 14.403455 +4.700000 3.600000 14.838775 +4.700000 3.700000 15.294094 +4.700000 3.800000 15.769413 +4.700000 3.900000 16.264733 +4.700000 4.000000 16.780052 +4.700000 4.100000 17.315371 +4.700000 4.200000 17.870691 +4.700000 4.300000 18.446010 +4.700000 4.400000 19.041329 +4.700000 4.500000 19.656648 +4.700000 4.600000 20.291968 +4.700000 4.700000 20.947287 +4.700000 4.800000 21.622606 +4.700000 4.900000 22.317926 +4.700000 5.000000 23.033245 +4.700000 5.100000 23.768564 +4.700000 5.200000 24.523884 +4.700000 5.300000 25.299203 +4.700000 5.400000 26.094522 +4.700000 5.500000 26.909841 +4.700000 5.600000 27.745161 +4.700000 5.700000 28.600480 +4.700000 5.800000 29.475799 +4.700000 5.900000 30.371119 +4.700000 6.000000 31.286438 +4.700000 6.100000 32.221757 +4.700000 6.200000 33.177077 +4.700000 6.300000 34.152396 +4.700000 6.400000 35.147715 +4.700000 6.500000 36.163035 +4.700000 6.600000 37.198354 +4.700000 6.700000 38.253673 +4.700000 6.800000 39.328992 +4.700000 6.900000 40.424312 +4.700000 7.000000 41.539631 +4.700000 7.100000 42.674950 +4.700000 7.200000 43.830270 +4.700000 7.300000 45.005589 +4.700000 7.400000 46.200908 +4.700000 7.500000 47.416228 +4.700000 7.600000 48.651547 +4.700000 7.700000 49.906866 +4.700000 7.800000 51.182185 +4.700000 7.900000 52.477505 +4.700000 8.000000 53.792824 +4.700000 8.100000 55.128143 +4.700000 8.200000 56.483463 +4.700000 8.300000 57.858782 +4.700000 8.400000 59.254101 +4.700000 8.500000 60.669421 +4.700000 8.600000 62.104740 +4.700000 8.700000 63.560059 +4.700000 8.800000 65.035379 +4.700000 8.900000 66.530698 +4.700000 9.000000 68.046017 +4.700000 9.100000 69.581336 +4.700000 9.200000 71.136656 +4.700000 9.300000 72.711975 +4.700000 9.400000 74.307294 +4.700000 9.500000 75.922614 +4.700000 9.600000 77.557933 +4.700000 9.700000 79.213252 +4.700000 9.800000 80.888572 +4.700000 9.900000 82.583891 +4.700000 10.000000 84.299210 +4.700000 10.100000 86.034529 +4.700000 10.200000 87.789849 +4.700000 10.300000 89.565168 +4.700000 10.400000 91.360487 +4.700000 10.500000 93.175807 +4.700000 10.600000 95.011126 +4.700000 10.700000 96.866445 +4.700000 10.800000 98.741765 +4.700000 10.900000 100.637084 +4.700000 11.000000 102.552403 +4.700000 11.100000 104.487722 +4.700000 11.200000 106.443042 +4.700000 11.300000 108.418361 +4.700000 11.400000 110.413680 +4.700000 11.500000 112.429000 +4.700000 11.600000 114.464319 +4.700000 11.700000 116.519638 +4.700000 11.800000 118.594958 +4.700000 11.900000 120.690277 +4.700000 12.000000 122.805596 +4.700000 12.100000 124.940916 +4.700000 12.200000 127.096235 +4.700000 12.300000 129.271554 +4.700000 12.400000 131.466873 +4.700000 12.500000 133.682193 +4.700000 12.600000 135.917512 +4.700000 12.700000 138.172831 +4.700000 12.800000 140.448151 +4.700000 12.900000 142.743470 +4.700000 13.000000 145.058789 +4.700000 13.100000 147.394109 +4.700000 13.200000 149.749428 +4.700000 13.300000 152.124747 +4.700000 13.400000 154.520066 +4.700000 13.500000 156.935386 +4.700000 13.600000 159.370705 +4.700000 13.700000 161.826024 +4.700000 13.800000 164.301344 +4.700000 13.900000 166.796663 +4.700000 14.000000 169.311982 +4.700000 14.100000 171.847302 +4.700000 14.200000 174.402621 +4.700000 14.300000 176.977940 +4.700000 14.400000 179.573260 +4.700000 14.500000 182.188579 +4.700000 14.600000 184.823898 +4.700000 14.700000 187.479217 +4.700000 14.800000 190.154537 +4.700000 14.900000 192.849856 +4.700000 15.000000 195.565175 + +4.800000 -5.000000 50.997412 +4.800000 -4.900000 49.740018 +4.800000 -4.800000 48.502623 +4.800000 -4.700000 47.285228 +4.800000 -4.600000 46.087833 +4.800000 -4.500000 44.910438 +4.800000 -4.400000 43.753044 +4.800000 -4.300000 42.615649 +4.800000 -4.200000 41.498254 +4.800000 -4.100000 40.400859 +4.800000 -4.000000 39.323465 +4.800000 -3.900000 38.266070 +4.800000 -3.800000 37.228675 +4.800000 -3.700000 36.211280 +4.800000 -3.600000 35.213886 +4.800000 -3.500000 34.236491 +4.800000 -3.400000 33.279096 +4.800000 -3.300000 32.341701 +4.800000 -3.200000 31.424307 +4.800000 -3.100000 30.526912 +4.800000 -3.000000 29.649517 +4.800000 -2.900000 28.792122 +4.800000 -2.800000 27.954728 +4.800000 -2.700000 27.137333 +4.800000 -2.600000 26.339938 +4.800000 -2.500000 25.562543 +4.800000 -2.400000 24.805148 +4.800000 -2.300000 24.067754 +4.800000 -2.200000 23.350359 +4.800000 -2.100000 22.652964 +4.800000 -2.000000 21.975569 +4.800000 -1.900000 21.318175 +4.800000 -1.800000 20.680780 +4.800000 -1.700000 20.063385 +4.800000 -1.600000 19.465990 +4.800000 -1.500000 18.888596 +4.800000 -1.400000 18.331201 +4.800000 -1.300000 17.793806 +4.800000 -1.200000 17.276411 +4.800000 -1.100000 16.779017 +4.800000 -1.000000 16.301622 +4.800000 -0.900000 15.844227 +4.800000 -0.800000 15.406832 +4.800000 -0.700000 14.989437 +4.800000 -0.600000 14.592043 +4.800000 -0.500000 14.214648 +4.800000 -0.400000 13.857253 +4.800000 -0.300000 13.519858 +4.800000 -0.200000 13.202464 +4.800000 -0.100000 12.905069 +4.800000 -0.000000 12.627674 +4.800000 0.100000 12.370279 +4.800000 0.200000 12.132885 +4.800000 0.300000 11.915490 +4.800000 0.400000 11.718095 +4.800000 0.500000 11.540700 +4.800000 0.600000 11.383306 +4.800000 0.700000 11.245911 +4.800000 0.800000 11.128516 +4.800000 0.900000 11.031121 +4.800000 1.000000 10.953726 +4.800000 1.100000 10.896332 +4.800000 1.200000 10.858937 +4.800000 1.300000 10.841542 +4.800000 1.400000 10.844147 +4.800000 1.500000 10.866753 +4.800000 1.600000 10.909358 +4.800000 1.700000 10.971963 +4.800000 1.800000 11.054568 +4.800000 1.900000 11.157174 +4.800000 2.000000 11.279779 +4.800000 2.100000 11.422384 +4.800000 2.200000 11.584989 +4.800000 2.300000 11.767595 +4.800000 2.400000 11.970200 +4.800000 2.500000 12.192805 +4.800000 2.600000 12.435410 +4.800000 2.700000 12.698015 +4.800000 2.800000 12.980621 +4.800000 2.900000 13.283226 +4.800000 3.000000 13.605831 +4.800000 3.100000 13.948436 +4.800000 3.200000 14.311042 +4.800000 3.300000 14.693647 +4.800000 3.400000 15.096252 +4.800000 3.500000 15.518857 +4.800000 3.600000 15.961463 +4.800000 3.700000 16.424068 +4.800000 3.800000 16.906673 +4.800000 3.900000 17.409278 +4.800000 4.000000 17.931884 +4.800000 4.100000 18.474489 +4.800000 4.200000 19.037094 +4.800000 4.300000 19.619699 +4.800000 4.400000 20.222304 +4.800000 4.500000 20.844910 +4.800000 4.600000 21.487515 +4.800000 4.700000 22.150120 +4.800000 4.800000 22.832725 +4.800000 4.900000 23.535331 +4.800000 5.000000 24.257936 +4.800000 5.100000 25.000541 +4.800000 5.200000 25.763146 +4.800000 5.300000 26.545752 +4.800000 5.400000 27.348357 +4.800000 5.500000 28.170962 +4.800000 5.600000 29.013567 +4.800000 5.700000 29.876173 +4.800000 5.800000 30.758778 +4.800000 5.900000 31.661383 +4.800000 6.000000 32.583988 +4.800000 6.100000 33.526593 +4.800000 6.200000 34.489199 +4.800000 6.300000 35.471804 +4.800000 6.400000 36.474409 +4.800000 6.500000 37.497014 +4.800000 6.600000 38.539620 +4.800000 6.700000 39.602225 +4.800000 6.800000 40.684830 +4.800000 6.900000 41.787435 +4.800000 7.000000 42.910041 +4.800000 7.100000 44.052646 +4.800000 7.200000 45.215251 +4.800000 7.300000 46.397856 +4.800000 7.400000 47.600462 +4.800000 7.500000 48.823067 +4.800000 7.600000 50.065672 +4.800000 7.700000 51.328277 +4.800000 7.800000 52.610882 +4.800000 7.900000 53.913488 +4.800000 8.000000 55.236093 +4.800000 8.100000 56.578698 +4.800000 8.200000 57.941303 +4.800000 8.300000 59.323909 +4.800000 8.400000 60.726514 +4.800000 8.500000 62.149119 +4.800000 8.600000 63.591724 +4.800000 8.700000 65.054330 +4.800000 8.800000 66.536935 +4.800000 8.900000 68.039540 +4.800000 9.000000 69.562145 +4.800000 9.100000 71.104751 +4.800000 9.200000 72.667356 +4.800000 9.300000 74.249961 +4.800000 9.400000 75.852566 +4.800000 9.500000 77.475171 +4.800000 9.600000 79.117777 +4.800000 9.700000 80.780382 +4.800000 9.800000 82.462987 +4.800000 9.900000 84.165592 +4.800000 10.000000 85.888198 +4.800000 10.100000 87.630803 +4.800000 10.200000 89.393408 +4.800000 10.300000 91.176013 +4.800000 10.400000 92.978619 +4.800000 10.500000 94.801224 +4.800000 10.600000 96.643829 +4.800000 10.700000 98.506434 +4.800000 10.800000 100.389040 +4.800000 10.900000 102.291645 +4.800000 11.000000 104.214250 +4.800000 11.100000 106.156855 +4.800000 11.200000 108.119460 +4.800000 11.300000 110.102066 +4.800000 11.400000 112.104671 +4.800000 11.500000 114.127276 +4.800000 11.600000 116.169881 +4.800000 11.700000 118.232487 +4.800000 11.800000 120.315092 +4.800000 11.900000 122.417697 +4.800000 12.000000 124.540302 +4.800000 12.100000 126.682908 +4.800000 12.200000 128.845513 +4.800000 12.300000 131.028118 +4.800000 12.400000 133.230723 +4.800000 12.500000 135.453329 +4.800000 12.600000 137.695934 +4.800000 12.700000 139.958539 +4.800000 12.800000 142.241144 +4.800000 12.900000 144.543749 +4.800000 13.000000 146.866355 +4.800000 13.100000 149.208960 +4.800000 13.200000 151.571565 +4.800000 13.300000 153.954170 +4.800000 13.400000 156.356776 +4.800000 13.500000 158.779381 +4.800000 13.600000 161.221986 +4.800000 13.700000 163.684591 +4.800000 13.800000 166.167197 +4.800000 13.900000 168.669802 +4.800000 14.000000 171.192407 +4.800000 14.100000 173.735012 +4.800000 14.200000 176.297618 +4.800000 14.300000 178.880223 +4.800000 14.400000 181.482828 +4.800000 14.500000 184.105433 +4.800000 14.600000 186.748038 +4.800000 14.700000 189.410644 +4.800000 14.800000 192.093249 +4.800000 14.900000 194.795854 +4.800000 15.000000 197.518459 + +4.900000 -5.000000 51.520334 +4.900000 -4.900000 50.269708 +4.900000 -4.800000 49.039082 +4.900000 -4.700000 47.828457 +4.900000 -4.600000 46.637831 +4.900000 -4.500000 45.467206 +4.900000 -4.400000 44.316580 +4.900000 -4.300000 43.185955 +4.900000 -4.200000 42.075329 +4.900000 -4.100000 40.984703 +4.900000 -4.000000 39.914078 +4.900000 -3.900000 38.863452 +4.900000 -3.800000 37.832827 +4.900000 -3.700000 36.822201 +4.900000 -3.600000 35.831576 +4.900000 -3.500000 34.860950 +4.900000 -3.400000 33.910324 +4.900000 -3.300000 32.979699 +4.900000 -3.200000 32.069073 +4.900000 -3.100000 31.178448 +4.900000 -3.000000 30.307822 +4.900000 -2.900000 29.457197 +4.900000 -2.800000 28.626571 +4.900000 -2.700000 27.815945 +4.900000 -2.600000 27.025320 +4.900000 -2.500000 26.254694 +4.900000 -2.400000 25.504069 +4.900000 -2.300000 24.773443 +4.900000 -2.200000 24.062818 +4.900000 -2.100000 23.372192 +4.900000 -2.000000 22.701566 +4.900000 -1.900000 22.050941 +4.900000 -1.800000 21.420315 +4.900000 -1.700000 20.809690 +4.900000 -1.600000 20.219064 +4.900000 -1.500000 19.648439 +4.900000 -1.400000 19.097813 +4.900000 -1.300000 18.567187 +4.900000 -1.200000 18.056562 +4.900000 -1.100000 17.565936 +4.900000 -1.000000 17.095311 +4.900000 -0.900000 16.644685 +4.900000 -0.800000 16.214060 +4.900000 -0.700000 15.803434 +4.900000 -0.600000 15.412808 +4.900000 -0.500000 15.042183 +4.900000 -0.400000 14.691557 +4.900000 -0.300000 14.360932 +4.900000 -0.200000 14.050306 +4.900000 -0.100000 13.759681 +4.900000 -0.000000 13.489055 +4.900000 0.100000 13.238429 +4.900000 0.200000 13.007804 +4.900000 0.300000 12.797178 +4.900000 0.400000 12.606553 +4.900000 0.500000 12.435927 +4.900000 0.600000 12.285302 +4.900000 0.700000 12.154676 +4.900000 0.800000 12.044050 +4.900000 0.900000 11.953425 +4.900000 1.000000 11.882799 +4.900000 1.100000 11.832174 +4.900000 1.200000 11.801548 +4.900000 1.300000 11.790923 +4.900000 1.400000 11.800297 +4.900000 1.500000 11.829671 +4.900000 1.600000 11.879046 +4.900000 1.700000 11.948420 +4.900000 1.800000 12.037795 +4.900000 1.900000 12.147169 +4.900000 2.000000 12.276544 +4.900000 2.100000 12.425918 +4.900000 2.200000 12.595292 +4.900000 2.300000 12.784667 +4.900000 2.400000 12.994041 +4.900000 2.500000 13.223416 +4.900000 2.600000 13.472790 +4.900000 2.700000 13.742165 +4.900000 2.800000 14.031539 +4.900000 2.900000 14.340913 +4.900000 3.000000 14.670288 +4.900000 3.100000 15.019662 +4.900000 3.200000 15.389037 +4.900000 3.300000 15.778411 +4.900000 3.400000 16.187786 +4.900000 3.500000 16.617160 +4.900000 3.600000 17.066534 +4.900000 3.700000 17.535909 +4.900000 3.800000 18.025283 +4.900000 3.900000 18.534658 +4.900000 4.000000 19.064032 +4.900000 4.100000 19.613407 +4.900000 4.200000 20.182781 +4.900000 4.300000 20.772155 +4.900000 4.400000 21.381530 +4.900000 4.500000 22.010904 +4.900000 4.600000 22.660279 +4.900000 4.700000 23.329653 +4.900000 4.800000 24.019028 +4.900000 4.900000 24.728402 +4.900000 5.000000 25.457776 +4.900000 5.100000 26.207151 +4.900000 5.200000 26.976525 +4.900000 5.300000 27.765900 +4.900000 5.400000 28.575274 +4.900000 5.500000 29.404649 +4.900000 5.600000 30.254023 +4.900000 5.700000 31.123397 +4.900000 5.800000 32.012772 +4.900000 5.900000 32.922146 +4.900000 6.000000 33.851521 +4.900000 6.100000 34.800895 +4.900000 6.200000 35.770270 +4.900000 6.300000 36.759644 +4.900000 6.400000 37.769018 +4.900000 6.500000 38.798393 +4.900000 6.600000 39.847767 +4.900000 6.700000 40.917142 +4.900000 6.800000 42.006516 +4.900000 6.900000 43.115891 +4.900000 7.000000 44.245265 +4.900000 7.100000 45.394639 +4.900000 7.200000 46.564014 +4.900000 7.300000 47.753388 +4.900000 7.400000 48.962763 +4.900000 7.500000 50.192137 +4.900000 7.600000 51.441512 +4.900000 7.700000 52.710886 +4.900000 7.800000 54.000260 +4.900000 7.900000 55.309635 +4.900000 8.000000 56.639009 +4.900000 8.100000 57.988384 +4.900000 8.200000 59.357758 +4.900000 8.300000 60.747133 +4.900000 8.400000 62.156507 +4.900000 8.500000 63.585881 +4.900000 8.600000 65.035256 +4.900000 8.700000 66.504630 +4.900000 8.800000 67.994005 +4.900000 8.900000 69.503379 +4.900000 9.000000 71.032754 +4.900000 9.100000 72.582128 +4.900000 9.200000 74.151502 +4.900000 9.300000 75.740877 +4.900000 9.400000 77.350251 +4.900000 9.500000 78.979626 +4.900000 9.600000 80.629000 +4.900000 9.700000 82.298375 +4.900000 9.800000 83.987749 +4.900000 9.900000 85.697123 +4.900000 10.000000 87.426498 +4.900000 10.100000 89.175872 +4.900000 10.200000 90.945247 +4.900000 10.300000 92.734621 +4.900000 10.400000 94.543996 +4.900000 10.500000 96.373370 +4.900000 10.600000 98.222744 +4.900000 10.700000 100.092119 +4.900000 10.800000 101.981493 +4.900000 10.900000 103.890868 +4.900000 11.000000 105.820242 +4.900000 11.100000 107.769617 +4.900000 11.200000 109.738991 +4.900000 11.300000 111.728366 +4.900000 11.400000 113.737740 +4.900000 11.500000 115.767114 +4.900000 11.600000 117.816489 +4.900000 11.700000 119.885863 +4.900000 11.800000 121.975238 +4.900000 11.900000 124.084612 +4.900000 12.000000 126.213987 +4.900000 12.100000 128.363361 +4.900000 12.200000 130.532735 +4.900000 12.300000 132.722110 +4.900000 12.400000 134.931484 +4.900000 12.500000 137.160859 +4.900000 12.600000 139.410233 +4.900000 12.700000 141.679608 +4.900000 12.800000 143.968982 +4.900000 12.900000 146.278356 +4.900000 13.000000 148.607731 +4.900000 13.100000 150.957105 +4.900000 13.200000 153.326480 +4.900000 13.300000 155.715854 +4.900000 13.400000 158.125229 +4.900000 13.500000 160.554603 +4.900000 13.600000 163.003977 +4.900000 13.700000 165.473352 +4.900000 13.800000 167.962726 +4.900000 13.900000 170.472101 +4.900000 14.000000 173.001475 +4.900000 14.100000 175.550850 +4.900000 14.200000 178.120224 +4.900000 14.300000 180.709598 +4.900000 14.400000 183.318973 +4.900000 14.500000 185.948347 +4.900000 14.600000 188.597722 +4.900000 14.700000 191.267096 +4.900000 14.800000 193.956471 +4.900000 14.900000 196.665845 +4.900000 15.000000 199.395219 + +5.000000 -5.000000 52.060054 +5.000000 -4.900000 50.815681 +5.000000 -4.800000 49.591308 +5.000000 -4.700000 48.386935 +5.000000 -4.600000 47.202562 +5.000000 -4.500000 46.038188 +5.000000 -4.400000 44.893815 +5.000000 -4.300000 43.769442 +5.000000 -4.200000 42.665069 +5.000000 -4.100000 41.580696 +5.000000 -4.000000 40.516323 +5.000000 -3.900000 39.471950 +5.000000 -3.800000 38.447577 +5.000000 -3.700000 37.443204 +5.000000 -3.600000 36.458830 +5.000000 -3.500000 35.494457 +5.000000 -3.400000 34.550084 +5.000000 -3.300000 33.625711 +5.000000 -3.200000 32.721338 +5.000000 -3.100000 31.836965 +5.000000 -3.000000 30.972592 +5.000000 -2.900000 30.128219 +5.000000 -2.800000 29.303846 +5.000000 -2.700000 28.499472 +5.000000 -2.600000 27.715099 +5.000000 -2.500000 26.950726 +5.000000 -2.400000 26.206353 +5.000000 -2.300000 25.481980 +5.000000 -2.200000 24.777607 +5.000000 -2.100000 24.093234 +5.000000 -2.000000 23.428861 +5.000000 -1.900000 22.784487 +5.000000 -1.800000 22.160114 +5.000000 -1.700000 21.555741 +5.000000 -1.600000 20.971368 +5.000000 -1.500000 20.406995 +5.000000 -1.400000 19.862622 +5.000000 -1.300000 19.338249 +5.000000 -1.200000 18.833876 +5.000000 -1.100000 18.349503 +5.000000 -1.000000 17.885129 +5.000000 -0.900000 17.440756 +5.000000 -0.800000 17.016383 +5.000000 -0.700000 16.612010 +5.000000 -0.600000 16.227637 +5.000000 -0.500000 15.863264 +5.000000 -0.400000 15.518891 +5.000000 -0.300000 15.194518 +5.000000 -0.200000 14.890145 +5.000000 -0.100000 14.605771 +5.000000 -0.000000 14.341398 +5.000000 0.100000 14.097025 +5.000000 0.200000 13.872652 +5.000000 0.300000 13.668279 +5.000000 0.400000 13.483906 +5.000000 0.500000 13.319533 +5.000000 0.600000 13.175160 +5.000000 0.700000 13.050786 +5.000000 0.800000 12.946413 +5.000000 0.900000 12.862040 +5.000000 1.000000 12.797667 +5.000000 1.100000 12.753294 +5.000000 1.200000 12.728921 +5.000000 1.300000 12.724548 +5.000000 1.400000 12.740175 +5.000000 1.500000 12.775802 +5.000000 1.600000 12.831428 +5.000000 1.700000 12.907055 +5.000000 1.800000 13.002682 +5.000000 1.900000 13.118309 +5.000000 2.000000 13.253936 +5.000000 2.100000 13.409563 +5.000000 2.200000 13.585190 +5.000000 2.300000 13.780817 +5.000000 2.400000 13.996444 +5.000000 2.500000 14.232070 +5.000000 2.600000 14.487697 +5.000000 2.700000 14.763324 +5.000000 2.800000 15.058951 +5.000000 2.900000 15.374578 +5.000000 3.000000 15.710205 +5.000000 3.100000 16.065832 +5.000000 3.200000 16.441459 +5.000000 3.300000 16.837086 +5.000000 3.400000 17.252712 +5.000000 3.500000 17.688339 +5.000000 3.600000 18.143966 +5.000000 3.700000 18.619593 +5.000000 3.800000 19.115220 +5.000000 3.900000 19.630847 +5.000000 4.000000 20.166474 +5.000000 4.100000 20.722101 +5.000000 4.200000 21.297727 +5.000000 4.300000 21.893354 +5.000000 4.400000 22.508981 +5.000000 4.500000 23.144608 +5.000000 4.600000 23.800235 +5.000000 4.700000 24.475862 +5.000000 4.800000 25.171489 +5.000000 4.900000 25.887116 +5.000000 5.000000 26.622743 +5.000000 5.100000 27.378369 +5.000000 5.200000 28.153996 +5.000000 5.300000 28.949623 +5.000000 5.400000 29.765250 +5.000000 5.500000 30.600877 +5.000000 5.600000 31.456504 +5.000000 5.700000 32.332131 +5.000000 5.800000 33.227758 +5.000000 5.900000 34.143385 +5.000000 6.000000 35.079011 +5.000000 6.100000 36.034638 +5.000000 6.200000 37.010265 +5.000000 6.300000 38.005892 +5.000000 6.400000 39.021519 +5.000000 6.500000 40.057146 +5.000000 6.600000 41.112773 +5.000000 6.700000 42.188400 +5.000000 6.800000 43.284026 +5.000000 6.900000 44.399653 +5.000000 7.000000 45.535280 +5.000000 7.100000 46.690907 +5.000000 7.200000 47.866534 +5.000000 7.300000 49.062161 +5.000000 7.400000 50.277788 +5.000000 7.500000 51.513415 +5.000000 7.600000 52.769042 +5.000000 7.700000 54.044668 +5.000000 7.800000 55.340295 +5.000000 7.900000 56.655922 +5.000000 8.000000 57.991549 +5.000000 8.100000 59.347176 +5.000000 8.200000 60.722803 +5.000000 8.300000 62.118430 +5.000000 8.400000 63.534057 +5.000000 8.500000 64.969684 +5.000000 8.600000 66.425310 +5.000000 8.700000 67.900937 +5.000000 8.800000 69.396564 +5.000000 8.900000 70.912191 +5.000000 9.000000 72.447818 +5.000000 9.100000 74.003445 +5.000000 9.200000 75.579072 +5.000000 9.300000 77.174699 +5.000000 9.400000 78.790326 +5.000000 9.500000 80.425952 +5.000000 9.600000 82.081579 +5.000000 9.700000 83.757206 +5.000000 9.800000 85.452833 +5.000000 9.900000 87.168460 +5.000000 10.000000 88.904087 +5.000000 10.100000 90.659714 +5.000000 10.200000 92.435341 +5.000000 10.300000 94.230967 +5.000000 10.400000 96.046594 +5.000000 10.500000 97.882221 +5.000000 10.600000 99.737848 +5.000000 10.700000 101.613475 +5.000000 10.800000 103.509102 +5.000000 10.900000 105.424729 +5.000000 11.000000 107.360356 +5.000000 11.100000 109.315983 +5.000000 11.200000 111.291609 +5.000000 11.300000 113.287236 +5.000000 11.400000 115.302863 +5.000000 11.500000 117.338490 +5.000000 11.600000 119.394117 +5.000000 11.700000 121.469744 +5.000000 11.800000 123.565371 +5.000000 11.900000 125.680998 +5.000000 12.000000 127.816625 +5.000000 12.100000 129.972251 +5.000000 12.200000 132.147878 +5.000000 12.300000 134.343505 +5.000000 12.400000 136.559132 +5.000000 12.500000 138.794759 +5.000000 12.600000 141.050386 +5.000000 12.700000 143.326013 +5.000000 12.800000 145.621640 +5.000000 12.900000 147.937266 +5.000000 13.000000 150.272893 +5.000000 13.100000 152.628520 +5.000000 13.200000 155.004147 +5.000000 13.300000 157.399774 +5.000000 13.400000 159.815401 +5.000000 13.500000 162.251028 +5.000000 13.600000 164.706655 +5.000000 13.700000 167.182282 +5.000000 13.800000 169.677908 +5.000000 13.900000 172.193535 +5.000000 14.000000 174.729162 +5.000000 14.100000 177.284789 +5.000000 14.200000 179.860416 +5.000000 14.300000 182.456043 +5.000000 14.400000 185.071670 +5.000000 14.500000 187.707297 +5.000000 14.600000 190.362924 +5.000000 14.700000 193.038550 +5.000000 14.800000 195.734177 +5.000000 14.900000 198.449804 +5.000000 15.000000 201.185431 + +5.100000 -5.000000 52.606769 +5.100000 -4.900000 51.368131 +5.100000 -4.800000 50.149494 +5.100000 -4.700000 48.950856 +5.100000 -4.600000 47.772219 +5.100000 -4.500000 46.613582 +5.100000 -4.400000 45.474944 +5.100000 -4.300000 44.356307 +5.100000 -4.200000 43.257669 +5.100000 -4.100000 42.179032 +5.100000 -4.000000 41.120395 +5.100000 -3.900000 40.081757 +5.100000 -3.800000 39.063120 +5.100000 -3.700000 38.064482 +5.100000 -3.600000 37.085845 +5.100000 -3.500000 36.127208 +5.100000 -3.400000 35.188570 +5.100000 -3.300000 34.269933 +5.100000 -3.200000 33.371295 +5.100000 -3.100000 32.492658 +5.100000 -3.000000 31.634021 +5.100000 -2.900000 30.795383 +5.100000 -2.800000 29.976746 +5.100000 -2.700000 29.178108 +5.100000 -2.600000 28.399471 +5.100000 -2.500000 27.640834 +5.100000 -2.400000 26.902196 +5.100000 -2.300000 26.183559 +5.100000 -2.200000 25.484921 +5.100000 -2.100000 24.806284 +5.100000 -2.000000 24.147647 +5.100000 -1.900000 23.509009 +5.100000 -1.800000 22.890372 +5.100000 -1.700000 22.291734 +5.100000 -1.600000 21.713097 +5.100000 -1.500000 21.154460 +5.100000 -1.400000 20.615822 +5.100000 -1.300000 20.097185 +5.100000 -1.200000 19.598548 +5.100000 -1.100000 19.119910 +5.100000 -1.000000 18.661273 +5.100000 -0.900000 18.222635 +5.100000 -0.800000 17.803998 +5.100000 -0.700000 17.405361 +5.100000 -0.600000 17.026723 +5.100000 -0.500000 16.668086 +5.100000 -0.400000 16.329448 +5.100000 -0.300000 16.010811 +5.100000 -0.200000 15.712174 +5.100000 -0.100000 15.433536 +5.100000 -0.000000 15.174899 +5.100000 0.100000 14.936261 +5.100000 0.200000 14.717624 +5.100000 0.300000 14.518987 +5.100000 0.400000 14.340349 +5.100000 0.500000 14.181712 +5.100000 0.600000 14.043074 +5.100000 0.700000 13.924437 +5.100000 0.800000 13.825800 +5.100000 0.900000 13.747162 +5.100000 1.000000 13.688525 +5.100000 1.100000 13.649887 +5.100000 1.200000 13.631250 +5.100000 1.300000 13.632613 +5.100000 1.400000 13.653975 +5.100000 1.500000 13.695338 +5.100000 1.600000 13.756700 +5.100000 1.700000 13.838063 +5.100000 1.800000 13.939426 +5.100000 1.900000 14.060788 +5.100000 2.000000 14.202151 +5.100000 2.100000 14.363513 +5.100000 2.200000 14.544876 +5.100000 2.300000 14.746239 +5.100000 2.400000 14.967601 +5.100000 2.500000 15.208964 +5.100000 2.600000 15.470326 +5.100000 2.700000 15.751689 +5.100000 2.800000 16.053052 +5.100000 2.900000 16.374414 +5.100000 3.000000 16.715777 +5.100000 3.100000 17.077139 +5.100000 3.200000 17.458502 +5.100000 3.300000 17.859865 +5.100000 3.400000 18.281227 +5.100000 3.500000 18.722590 +5.100000 3.600000 19.183952 +5.100000 3.700000 19.665315 +5.100000 3.800000 20.166678 +5.100000 3.900000 20.688040 +5.100000 4.000000 21.229403 +5.100000 4.100000 21.790765 +5.100000 4.200000 22.372128 +5.100000 4.300000 22.973491 +5.100000 4.400000 23.594853 +5.100000 4.500000 24.236216 +5.100000 4.600000 24.897578 +5.100000 4.700000 25.578941 +5.100000 4.800000 26.280304 +5.100000 4.900000 27.001666 +5.100000 5.000000 27.743029 +5.100000 5.100000 28.504391 +5.100000 5.200000 29.285754 +5.100000 5.300000 30.087117 +5.100000 5.400000 30.908479 +5.100000 5.500000 31.749842 +5.100000 5.600000 32.611205 +5.100000 5.700000 33.492567 +5.100000 5.800000 34.393930 +5.100000 5.900000 35.315292 +5.100000 6.000000 36.256655 +5.100000 6.100000 37.218018 +5.100000 6.200000 38.199380 +5.100000 6.300000 39.200743 +5.100000 6.400000 40.222105 +5.100000 6.500000 41.263468 +5.100000 6.600000 42.324831 +5.100000 6.700000 43.406193 +5.100000 6.800000 44.507556 +5.100000 6.900000 45.628918 +5.100000 7.000000 46.770281 +5.100000 7.100000 47.931644 +5.100000 7.200000 49.113006 +5.100000 7.300000 50.314369 +5.100000 7.400000 51.535731 +5.100000 7.500000 52.777094 +5.100000 7.600000 54.038457 +5.100000 7.700000 55.319819 +5.100000 7.800000 56.621182 +5.100000 7.900000 57.942544 +5.100000 8.000000 59.283907 +5.100000 8.100000 60.645270 +5.100000 8.200000 62.026632 +5.100000 8.300000 63.427995 +5.100000 8.400000 64.849357 +5.100000 8.500000 66.290720 +5.100000 8.600000 67.752083 +5.100000 8.700000 69.233445 +5.100000 8.800000 70.734808 +5.100000 8.900000 72.256170 +5.100000 9.000000 73.797533 +5.100000 9.100000 75.358896 +5.100000 9.200000 76.940258 +5.100000 9.300000 78.541621 +5.100000 9.400000 80.162983 +5.100000 9.500000 81.804346 +5.100000 9.600000 83.465709 +5.100000 9.700000 85.147071 +5.100000 9.800000 86.848434 +5.100000 9.900000 88.569796 +5.100000 10.000000 90.311159 +5.100000 10.100000 92.072522 +5.100000 10.200000 93.853884 +5.100000 10.300000 95.655247 +5.100000 10.400000 97.476609 +5.100000 10.500000 99.317972 +5.100000 10.600000 101.179335 +5.100000 10.700000 103.060697 +5.100000 10.800000 104.962060 +5.100000 10.900000 106.883422 +5.100000 11.000000 108.824785 +5.100000 11.100000 110.786148 +5.100000 11.200000 112.767510 +5.100000 11.300000 114.768873 +5.100000 11.400000 116.790235 +5.100000 11.500000 118.831598 +5.100000 11.600000 120.892961 +5.100000 11.700000 122.974323 +5.100000 11.800000 125.075686 +5.100000 11.900000 127.197048 +5.100000 12.000000 129.338411 +5.100000 12.100000 131.499774 +5.100000 12.200000 133.681136 +5.100000 12.300000 135.882499 +5.100000 12.400000 138.103862 +5.100000 12.500000 140.345224 +5.100000 12.600000 142.606587 +5.100000 12.700000 144.887949 +5.100000 12.800000 147.189312 +5.100000 12.900000 149.510675 +5.100000 13.000000 151.852037 +5.100000 13.100000 154.213400 +5.100000 13.200000 156.594762 +5.100000 13.300000 158.996125 +5.100000 13.400000 161.417488 +5.100000 13.500000 163.858850 +5.100000 13.600000 166.320213 +5.100000 13.700000 168.801575 +5.100000 13.800000 171.302938 +5.100000 13.900000 173.824301 +5.100000 14.000000 176.365663 +5.100000 14.100000 178.927026 +5.100000 14.200000 181.508388 +5.100000 14.300000 184.109751 +5.100000 14.400000 186.731114 +5.100000 14.500000 189.372476 +5.100000 14.600000 192.033839 +5.100000 14.700000 194.715201 +5.100000 14.800000 197.416564 +5.100000 14.900000 200.137927 +5.100000 15.000000 202.879289 + +5.200000 -5.000000 53.150984 +5.200000 -4.900000 51.917565 +5.200000 -4.800000 50.704147 +5.200000 -4.700000 49.510729 +5.200000 -4.600000 48.337310 +5.200000 -4.500000 47.183892 +5.200000 -4.400000 46.050473 +5.200000 -4.300000 44.937055 +5.200000 -4.200000 43.843637 +5.200000 -4.100000 42.770218 +5.200000 -4.000000 41.716800 +5.200000 -3.900000 40.683381 +5.200000 -3.800000 39.669963 +5.200000 -3.700000 38.676544 +5.200000 -3.600000 37.703126 +5.200000 -3.500000 36.749708 +5.200000 -3.400000 35.816289 +5.200000 -3.300000 34.902871 +5.200000 -3.200000 34.009452 +5.200000 -3.100000 33.136034 +5.200000 -3.000000 32.282616 +5.200000 -2.900000 31.449197 +5.200000 -2.800000 30.635779 +5.200000 -2.700000 29.842360 +5.200000 -2.600000 29.068942 +5.200000 -2.500000 28.315523 +5.200000 -2.400000 27.582105 +5.200000 -2.300000 26.868687 +5.200000 -2.200000 26.175268 +5.200000 -2.100000 25.501850 +5.200000 -2.000000 24.848431 +5.200000 -1.900000 24.215013 +5.200000 -1.800000 23.601595 +5.200000 -1.700000 23.008176 +5.200000 -1.600000 22.434758 +5.200000 -1.500000 21.881339 +5.200000 -1.400000 21.347921 +5.200000 -1.300000 20.834502 +5.200000 -1.200000 20.341084 +5.200000 -1.100000 19.867666 +5.200000 -1.000000 19.414247 +5.200000 -0.900000 18.980829 +5.200000 -0.800000 18.567410 +5.200000 -0.700000 18.173992 +5.200000 -0.600000 17.800574 +5.200000 -0.500000 17.447155 +5.200000 -0.400000 17.113737 +5.200000 -0.300000 16.800318 +5.200000 -0.200000 16.506900 +5.200000 -0.100000 16.233481 +5.200000 -0.000000 15.980063 +5.200000 0.100000 15.746645 +5.200000 0.200000 15.533226 +5.200000 0.300000 15.339808 +5.200000 0.400000 15.166389 +5.200000 0.500000 15.012971 +5.200000 0.600000 14.879552 +5.200000 0.700000 14.766134 +5.200000 0.800000 14.672716 +5.200000 0.900000 14.599297 +5.200000 1.000000 14.545879 +5.200000 1.100000 14.512460 +5.200000 1.200000 14.499042 +5.200000 1.300000 14.505624 +5.200000 1.400000 14.532205 +5.200000 1.500000 14.578787 +5.200000 1.600000 14.645368 +5.200000 1.700000 14.731950 +5.200000 1.800000 14.838531 +5.200000 1.900000 14.965113 +5.200000 2.000000 15.111695 +5.200000 2.100000 15.278276 +5.200000 2.200000 15.464858 +5.200000 2.300000 15.671439 +5.200000 2.400000 15.898021 +5.200000 2.500000 16.144603 +5.200000 2.600000 16.411184 +5.200000 2.700000 16.697766 +5.200000 2.800000 17.004347 +5.200000 2.900000 17.330929 +5.200000 3.000000 17.677510 +5.200000 3.100000 18.044092 +5.200000 3.200000 18.430674 +5.200000 3.300000 18.837255 +5.200000 3.400000 19.263837 +5.200000 3.500000 19.710418 +5.200000 3.600000 20.177000 +5.200000 3.700000 20.663582 +5.200000 3.800000 21.170163 +5.200000 3.900000 21.696745 +5.200000 4.000000 22.243326 +5.200000 4.100000 22.809908 +5.200000 4.200000 23.396489 +5.200000 4.300000 24.003071 +5.200000 4.400000 24.629653 +5.200000 4.500000 25.276234 +5.200000 4.600000 25.942816 +5.200000 4.700000 26.629397 +5.200000 4.800000 27.335979 +5.200000 4.900000 28.062561 +5.200000 5.000000 28.809142 +5.200000 5.100000 29.575724 +5.200000 5.200000 30.362305 +5.200000 5.300000 31.168887 +5.200000 5.400000 31.995468 +5.200000 5.500000 32.842050 +5.200000 5.600000 33.708632 +5.200000 5.700000 34.595213 +5.200000 5.800000 35.501795 +5.200000 5.900000 36.428376 +5.200000 6.000000 37.374958 +5.200000 6.100000 38.341540 +5.200000 6.200000 39.328121 +5.200000 6.300000 40.334703 +5.200000 6.400000 41.361284 +5.200000 6.500000 42.407866 +5.200000 6.600000 43.474447 +5.200000 6.700000 44.561029 +5.200000 6.800000 45.667611 +5.200000 6.900000 46.794192 +5.200000 7.000000 47.940774 +5.200000 7.100000 49.107355 +5.200000 7.200000 50.293937 +5.200000 7.300000 51.500519 +5.200000 7.400000 52.727100 +5.200000 7.500000 53.973682 +5.200000 7.600000 55.240263 +5.200000 7.700000 56.526845 +5.200000 7.800000 57.833426 +5.200000 7.900000 59.160008 +5.200000 8.000000 60.506590 +5.200000 8.100000 61.873171 +5.200000 8.200000 63.259753 +5.200000 8.300000 64.666334 +5.200000 8.400000 66.092916 +5.200000 8.500000 67.539498 +5.200000 8.600000 69.006079 +5.200000 8.700000 70.492661 +5.200000 8.800000 71.999242 +5.200000 8.900000 73.525824 +5.200000 9.000000 75.072405 +5.200000 9.100000 76.638987 +5.200000 9.200000 78.225569 +5.200000 9.300000 79.832150 +5.200000 9.400000 81.458732 +5.200000 9.500000 83.105313 +5.200000 9.600000 84.771895 +5.200000 9.700000 86.458477 +5.200000 9.800000 88.165058 +5.200000 9.900000 89.891640 +5.200000 10.000000 91.638221 +5.200000 10.100000 93.404803 +5.200000 10.200000 95.191384 +5.200000 10.300000 96.997966 +5.200000 10.400000 98.824548 +5.200000 10.500000 100.671129 +5.200000 10.600000 102.537711 +5.200000 10.700000 104.424292 +5.200000 10.800000 106.330874 +5.200000 10.900000 108.257456 +5.200000 11.000000 110.204037 +5.200000 11.100000 112.170619 +5.200000 11.200000 114.157200 +5.200000 11.300000 116.163782 +5.200000 11.400000 118.190363 +5.200000 11.500000 120.236945 +5.200000 11.600000 122.303527 +5.200000 11.700000 124.390108 +5.200000 11.800000 126.496690 +5.200000 11.900000 128.623271 +5.200000 12.000000 130.769853 +5.200000 12.100000 132.936435 +5.200000 12.200000 135.123016 +5.200000 12.300000 137.329598 +5.200000 12.400000 139.556179 +5.200000 12.500000 141.802761 +5.200000 12.600000 144.069342 +5.200000 12.700000 146.355924 +5.200000 12.800000 148.662506 +5.200000 12.900000 150.989087 +5.200000 13.000000 153.335669 +5.200000 13.100000 155.702250 +5.200000 13.200000 158.088832 +5.200000 13.300000 160.495413 +5.200000 13.400000 162.921995 +5.200000 13.500000 165.368577 +5.200000 13.600000 167.835158 +5.200000 13.700000 170.321740 +5.200000 13.800000 172.828321 +5.200000 13.900000 175.354903 +5.200000 14.000000 177.901485 +5.200000 14.100000 180.468066 +5.200000 14.200000 183.054648 +5.200000 14.300000 185.661229 +5.200000 14.400000 188.287811 +5.200000 14.500000 190.934392 +5.200000 14.600000 193.600974 +5.200000 14.700000 196.287556 +5.200000 14.800000 198.994137 +5.200000 14.900000 201.720719 +5.200000 15.000000 204.467300 + +5.300000 -5.000000 53.683609 +5.300000 -4.900000 52.454893 +5.300000 -4.800000 51.246177 +5.300000 -4.700000 50.057460 +5.300000 -4.600000 48.888744 +5.300000 -4.500000 47.740028 +5.300000 -4.400000 46.611312 +5.300000 -4.300000 45.502596 +5.300000 -4.200000 44.413880 +5.300000 -4.100000 43.345163 +5.300000 -4.000000 42.296447 +5.300000 -3.900000 41.267731 +5.300000 -3.800000 40.259015 +5.300000 -3.700000 39.270299 +5.300000 -3.600000 38.301582 +5.300000 -3.500000 37.352866 +5.300000 -3.400000 36.424150 +5.300000 -3.300000 35.515434 +5.300000 -3.200000 34.626718 +5.300000 -3.100000 33.758002 +5.300000 -3.000000 32.909285 +5.300000 -2.900000 32.080569 +5.300000 -2.800000 31.271853 +5.300000 -2.700000 30.483137 +5.300000 -2.600000 29.714421 +5.300000 -2.500000 28.965705 +5.300000 -2.400000 28.236988 +5.300000 -2.300000 27.528272 +5.300000 -2.200000 26.839556 +5.300000 -2.100000 26.170840 +5.300000 -2.000000 25.522124 +5.300000 -1.900000 24.893407 +5.300000 -1.800000 24.284691 +5.300000 -1.700000 23.695975 +5.300000 -1.600000 23.127259 +5.300000 -1.500000 22.578543 +5.300000 -1.400000 22.049827 +5.300000 -1.300000 21.541110 +5.300000 -1.200000 21.052394 +5.300000 -1.100000 20.583678 +5.300000 -1.000000 20.134962 +5.300000 -0.900000 19.706246 +5.300000 -0.800000 19.297530 +5.300000 -0.700000 18.908813 +5.300000 -0.600000 18.540097 +5.300000 -0.500000 18.191381 +5.300000 -0.400000 17.862665 +5.300000 -0.300000 17.553949 +5.300000 -0.200000 17.265232 +5.300000 -0.100000 16.996516 +5.300000 -0.000000 16.747800 +5.300000 0.100000 16.519084 +5.300000 0.200000 16.310368 +5.300000 0.300000 16.121652 +5.300000 0.400000 15.952935 +5.300000 0.500000 15.804219 +5.300000 0.600000 15.675503 +5.300000 0.700000 15.566787 +5.300000 0.800000 15.478071 +5.300000 0.900000 15.409355 +5.300000 1.000000 15.360638 +5.300000 1.100000 15.331922 +5.300000 1.200000 15.323206 +5.300000 1.300000 15.334490 +5.300000 1.400000 15.365774 +5.300000 1.500000 15.417058 +5.300000 1.600000 15.488341 +5.300000 1.700000 15.579625 +5.300000 1.800000 15.690909 +5.300000 1.900000 15.822193 +5.300000 2.000000 15.973477 +5.300000 2.100000 16.144760 +5.300000 2.200000 16.336044 +5.300000 2.300000 16.547328 +5.300000 2.400000 16.778612 +5.300000 2.500000 17.029896 +5.300000 2.600000 17.301180 +5.300000 2.700000 17.592463 +5.300000 2.800000 17.903747 +5.300000 2.900000 18.235031 +5.300000 3.000000 18.586315 +5.300000 3.100000 18.957599 +5.300000 3.200000 19.348883 +5.300000 3.300000 19.760166 +5.300000 3.400000 20.191450 +5.300000 3.500000 20.642734 +5.300000 3.600000 21.114018 +5.300000 3.700000 21.605302 +5.300000 3.800000 22.116585 +5.300000 3.900000 22.647869 +5.300000 4.000000 23.199153 +5.300000 4.100000 23.770437 +5.300000 4.200000 24.361721 +5.300000 4.300000 24.973005 +5.300000 4.400000 25.604288 +5.300000 4.500000 26.255572 +5.300000 4.600000 26.926856 +5.300000 4.700000 27.618140 +5.300000 4.800000 28.329424 +5.300000 4.900000 29.060708 +5.300000 5.000000 29.811991 +5.300000 5.100000 30.583275 +5.300000 5.200000 31.374559 +5.300000 5.300000 32.185843 +5.300000 5.400000 33.017127 +5.300000 5.500000 33.868410 +5.300000 5.600000 34.739694 +5.300000 5.700000 35.630978 +5.300000 5.800000 36.542262 +5.300000 5.900000 37.473546 +5.300000 6.000000 38.424830 +5.300000 6.100000 39.396113 +5.300000 6.200000 40.387397 +5.300000 6.300000 41.398681 +5.300000 6.400000 42.429965 +5.300000 6.500000 43.481249 +5.300000 6.600000 44.552533 +5.300000 6.700000 45.643816 +5.300000 6.800000 46.755100 +5.300000 6.900000 47.886384 +5.300000 7.000000 49.037668 +5.300000 7.100000 50.208952 +5.300000 7.200000 51.400235 +5.300000 7.300000 52.611519 +5.300000 7.400000 53.842803 +5.300000 7.500000 55.094087 +5.300000 7.600000 56.365371 +5.300000 7.700000 57.656655 +5.300000 7.800000 58.967938 +5.300000 7.900000 60.299222 +5.300000 8.000000 61.650506 +5.300000 8.100000 63.021790 +5.300000 8.200000 64.413074 +5.300000 8.300000 65.824358 +5.300000 8.400000 67.255641 +5.300000 8.500000 68.706925 +5.300000 8.600000 70.178209 +5.300000 8.700000 71.669493 +5.300000 8.800000 73.180777 +5.300000 8.900000 74.712061 +5.300000 9.000000 76.263344 +5.300000 9.100000 77.834628 +5.300000 9.200000 79.425912 +5.300000 9.300000 81.037196 +5.300000 9.400000 82.668480 +5.300000 9.500000 84.319763 +5.300000 9.600000 85.991047 +5.300000 9.700000 87.682331 +5.300000 9.800000 89.393615 +5.300000 9.900000 91.124899 +5.300000 10.000000 92.876183 +5.300000 10.100000 94.647466 +5.300000 10.200000 96.438750 +5.300000 10.300000 98.250034 +5.300000 10.400000 100.081318 +5.300000 10.500000 101.932602 +5.300000 10.600000 103.803886 +5.300000 10.700000 105.695169 +5.300000 10.800000 107.606453 +5.300000 10.900000 109.537737 +5.300000 11.000000 111.489021 +5.300000 11.100000 113.460305 +5.300000 11.200000 115.451588 +5.300000 11.300000 117.462872 +5.300000 11.400000 119.494156 +5.300000 11.500000 121.545440 +5.300000 11.600000 123.616724 +5.300000 11.700000 125.708008 +5.300000 11.800000 127.819291 +5.300000 11.900000 129.950575 +5.300000 12.000000 132.101859 +5.300000 12.100000 134.273143 +5.300000 12.200000 136.464427 +5.300000 12.300000 138.675711 +5.300000 12.400000 140.906994 +5.300000 12.500000 143.158278 +5.300000 12.600000 145.429562 +5.300000 12.700000 147.720846 +5.300000 12.800000 150.032130 +5.300000 12.900000 152.363413 +5.300000 13.000000 154.714697 +5.300000 13.100000 157.085981 +5.300000 13.200000 159.477265 +5.300000 13.300000 161.888549 +5.300000 13.400000 164.319833 +5.300000 13.500000 166.771116 +5.300000 13.600000 169.242400 +5.300000 13.700000 171.733684 +5.300000 13.800000 174.244968 +5.300000 13.900000 176.776252 +5.300000 14.000000 179.327536 +5.300000 14.100000 181.898819 +5.300000 14.200000 184.490103 +5.300000 14.300000 187.101387 +5.300000 14.400000 189.732671 +5.300000 14.500000 192.383955 +5.300000 14.600000 195.055238 +5.300000 14.700000 197.746522 +5.300000 14.800000 200.457806 +5.300000 14.900000 203.189090 +5.300000 15.000000 205.940374 + +5.400000 -5.000000 54.196042 +5.400000 -4.900000 52.971511 +5.400000 -4.800000 51.766981 +5.400000 -4.700000 50.582450 +5.400000 -4.600000 49.417919 +5.400000 -4.500000 48.273389 +5.400000 -4.400000 47.148858 +5.400000 -4.300000 46.044327 +5.400000 -4.200000 44.959797 +5.400000 -4.100000 43.895266 +5.400000 -4.000000 42.850735 +5.400000 -3.900000 41.826205 +5.400000 -3.800000 40.821674 +5.400000 -3.700000 39.837143 +5.400000 -3.600000 38.872613 +5.400000 -3.500000 37.928082 +5.400000 -3.400000 37.003551 +5.400000 -3.300000 36.099021 +5.400000 -3.200000 35.214490 +5.400000 -3.100000 34.349959 +5.400000 -3.000000 33.505429 +5.400000 -2.900000 32.680898 +5.400000 -2.800000 31.876367 +5.400000 -2.700000 31.091837 +5.400000 -2.600000 30.327306 +5.400000 -2.500000 29.582775 +5.400000 -2.400000 28.858245 +5.400000 -2.300000 28.153714 +5.400000 -2.200000 27.469183 +5.400000 -2.100000 26.804653 +5.400000 -2.000000 26.160122 +5.400000 -1.900000 25.535591 +5.400000 -1.800000 24.931060 +5.400000 -1.700000 24.346530 +5.400000 -1.600000 23.781999 +5.400000 -1.500000 23.237468 +5.400000 -1.400000 22.712938 +5.400000 -1.300000 22.208407 +5.400000 -1.200000 21.723876 +5.400000 -1.100000 21.259346 +5.400000 -1.000000 20.814815 +5.400000 -0.900000 20.390284 +5.400000 -0.800000 19.985754 +5.400000 -0.700000 19.601223 +5.400000 -0.600000 19.236692 +5.400000 -0.500000 18.892162 +5.400000 -0.400000 18.567631 +5.400000 -0.300000 18.263100 +5.400000 -0.200000 17.978570 +5.400000 -0.100000 17.714039 +5.400000 -0.000000 17.469508 +5.400000 0.100000 17.244978 +5.400000 0.200000 17.040447 +5.400000 0.300000 16.855916 +5.400000 0.400000 16.691386 +5.400000 0.500000 16.546855 +5.400000 0.600000 16.422324 +5.400000 0.700000 16.317794 +5.400000 0.800000 16.233263 +5.400000 0.900000 16.168732 +5.400000 1.000000 16.124202 +5.400000 1.100000 16.099671 +5.400000 1.200000 16.095140 +5.400000 1.300000 16.110610 +5.400000 1.400000 16.146079 +5.400000 1.500000 16.201548 +5.400000 1.600000 16.277018 +5.400000 1.700000 16.372487 +5.400000 1.800000 16.487956 +5.400000 1.900000 16.623426 +5.400000 2.000000 16.778895 +5.400000 2.100000 16.954364 +5.400000 2.200000 17.149834 +5.400000 2.300000 17.365303 +5.400000 2.400000 17.600772 +5.400000 2.500000 17.856242 +5.400000 2.600000 18.131711 +5.400000 2.700000 18.427180 +5.400000 2.800000 18.742650 +5.400000 2.900000 19.078119 +5.400000 3.000000 19.433588 +5.400000 3.100000 19.809058 +5.400000 3.200000 20.204527 +5.400000 3.300000 20.619996 +5.400000 3.400000 21.055466 +5.400000 3.500000 21.510935 +5.400000 3.600000 21.986404 +5.400000 3.700000 22.481874 +5.400000 3.800000 22.997343 +5.400000 3.900000 23.532812 +5.400000 4.000000 24.088282 +5.400000 4.100000 24.663751 +5.400000 4.200000 25.259220 +5.400000 4.300000 25.874689 +5.400000 4.400000 26.510159 +5.400000 4.500000 27.165628 +5.400000 4.600000 27.841097 +5.400000 4.700000 28.536567 +5.400000 4.800000 29.252036 +5.400000 4.900000 29.987505 +5.400000 5.000000 30.742975 +5.400000 5.100000 31.518444 +5.400000 5.200000 32.313913 +5.400000 5.300000 33.129383 +5.400000 5.400000 33.964852 +5.400000 5.500000 34.820321 +5.400000 5.600000 35.695791 +5.400000 5.700000 36.591260 +5.400000 5.800000 37.506729 +5.400000 5.900000 38.442199 +5.400000 6.000000 39.397668 +5.400000 6.100000 40.373137 +5.400000 6.200000 41.368607 +5.400000 6.300000 42.384076 +5.400000 6.400000 43.419545 +5.400000 6.500000 44.475015 +5.400000 6.600000 45.550484 +5.400000 6.700000 46.645953 +5.400000 6.800000 47.761423 +5.400000 6.900000 48.896892 +5.400000 7.000000 50.052361 +5.400000 7.100000 51.227831 +5.400000 7.200000 52.423300 +5.400000 7.300000 53.638769 +5.400000 7.400000 54.874239 +5.400000 7.500000 56.129708 +5.400000 7.600000 57.405177 +5.400000 7.700000 58.700647 +5.400000 7.800000 60.016116 +5.400000 7.900000 61.351585 +5.400000 8.000000 62.707055 +5.400000 8.100000 64.082524 +5.400000 8.200000 65.477993 +5.400000 8.300000 66.893463 +5.400000 8.400000 68.328932 +5.400000 8.500000 69.784401 +5.400000 8.600000 71.259871 +5.400000 8.700000 72.755340 +5.400000 8.800000 74.270809 +5.400000 8.900000 75.806279 +5.400000 9.000000 77.361748 +5.400000 9.100000 78.937217 +5.400000 9.200000 80.532687 +5.400000 9.300000 82.148156 +5.400000 9.400000 83.783625 +5.400000 9.500000 85.439095 +5.400000 9.600000 87.114564 +5.400000 9.700000 88.810033 +5.400000 9.800000 90.525503 +5.400000 9.900000 92.260972 +5.400000 10.000000 94.016441 +5.400000 10.100000 95.791911 +5.400000 10.200000 97.587380 +5.400000 10.300000 99.402849 +5.400000 10.400000 101.238319 +5.400000 10.500000 103.093788 +5.400000 10.600000 104.969257 +5.400000 10.700000 106.864726 +5.400000 10.800000 108.780196 +5.400000 10.900000 110.715665 +5.400000 11.000000 112.671134 +5.400000 11.100000 114.646604 +5.400000 11.200000 116.642073 +5.400000 11.300000 118.657542 +5.400000 11.400000 120.693012 +5.400000 11.500000 122.748481 +5.400000 11.600000 124.823950 +5.400000 11.700000 126.919420 +5.400000 11.800000 129.034889 +5.400000 11.900000 131.170358 +5.400000 12.000000 133.325828 +5.400000 12.100000 135.501297 +5.400000 12.200000 137.696766 +5.400000 12.300000 139.912236 +5.400000 12.400000 142.147705 +5.400000 12.500000 144.403174 +5.400000 12.600000 146.678644 +5.400000 12.700000 148.974113 +5.400000 12.800000 151.289582 +5.400000 12.900000 153.625052 +5.400000 13.000000 155.980521 +5.400000 13.100000 158.355990 +5.400000 13.200000 160.751460 +5.400000 13.300000 163.166929 +5.400000 13.400000 165.602398 +5.400000 13.500000 168.057868 +5.400000 13.600000 170.533337 +5.400000 13.700000 173.028806 +5.400000 13.800000 175.544276 +5.400000 13.900000 178.079745 +5.400000 14.000000 180.635214 +5.400000 14.100000 183.210684 +5.400000 14.200000 185.806153 +5.400000 14.300000 188.421622 +5.400000 14.400000 191.057092 +5.400000 14.500000 193.712561 +5.400000 14.600000 196.388030 +5.400000 14.700000 199.083500 +5.400000 14.800000 201.798969 +5.400000 14.900000 204.534438 +5.400000 15.000000 207.289908 + +5.500000 -5.000000 54.680253 +5.500000 -4.900000 53.459391 +5.500000 -4.800000 52.258529 +5.500000 -4.700000 51.077667 +5.500000 -4.600000 49.916805 +5.500000 -4.500000 48.775943 +5.500000 -4.400000 47.655081 +5.500000 -4.300000 46.554219 +5.500000 -4.200000 45.473358 +5.500000 -4.100000 44.412496 +5.500000 -4.000000 43.371634 +5.500000 -3.900000 42.350772 +5.500000 -3.800000 41.349910 +5.500000 -3.700000 40.369048 +5.500000 -3.600000 39.408186 +5.500000 -3.500000 38.467324 +5.500000 -3.400000 37.546462 +5.500000 -3.300000 36.645600 +5.500000 -3.200000 35.764738 +5.500000 -3.100000 34.903877 +5.500000 -3.000000 34.063015 +5.500000 -2.900000 33.242153 +5.500000 -2.800000 32.441291 +5.500000 -2.700000 31.660429 +5.500000 -2.600000 30.899567 +5.500000 -2.500000 30.158705 +5.500000 -2.400000 29.437843 +5.500000 -2.300000 28.736981 +5.500000 -2.200000 28.056119 +5.500000 -2.100000 27.395258 +5.500000 -2.000000 26.754396 +5.500000 -1.900000 26.133534 +5.500000 -1.800000 25.532672 +5.500000 -1.700000 24.951810 +5.500000 -1.600000 24.390948 +5.500000 -1.500000 23.850086 +5.500000 -1.400000 23.329224 +5.500000 -1.300000 22.828362 +5.500000 -1.200000 22.347500 +5.500000 -1.100000 21.886638 +5.500000 -1.000000 21.445777 +5.500000 -0.900000 21.024915 +5.500000 -0.800000 20.624053 +5.500000 -0.700000 20.243191 +5.500000 -0.600000 19.882329 +5.500000 -0.500000 19.541467 +5.500000 -0.400000 19.220605 +5.500000 -0.300000 18.919743 +5.500000 -0.200000 18.638881 +5.500000 -0.100000 18.378019 +5.500000 -0.000000 18.137157 +5.500000 0.100000 17.916296 +5.500000 0.200000 17.715434 +5.500000 0.300000 17.534572 +5.500000 0.400000 17.373710 +5.500000 0.500000 17.232848 +5.500000 0.600000 17.111986 +5.500000 0.700000 17.011124 +5.500000 0.800000 16.930262 +5.500000 0.900000 16.869400 +5.500000 1.000000 16.828538 +5.500000 1.100000 16.807677 +5.500000 1.200000 16.806815 +5.500000 1.300000 16.825953 +5.500000 1.400000 16.865091 +5.500000 1.500000 16.924229 +5.500000 1.600000 17.003367 +5.500000 1.700000 17.102505 +5.500000 1.800000 17.221643 +5.500000 1.900000 17.360781 +5.500000 2.000000 17.519919 +5.500000 2.100000 17.699057 +5.500000 2.200000 17.898196 +5.500000 2.300000 18.117334 +5.500000 2.400000 18.356472 +5.500000 2.500000 18.615610 +5.500000 2.600000 18.894748 +5.500000 2.700000 19.193886 +5.500000 2.800000 19.513024 +5.500000 2.900000 19.852162 +5.500000 3.000000 20.211300 +5.500000 3.100000 20.590438 +5.500000 3.200000 20.989576 +5.500000 3.300000 21.408715 +5.500000 3.400000 21.847853 +5.500000 3.500000 22.306991 +5.500000 3.600000 22.786129 +5.500000 3.700000 23.285267 +5.500000 3.800000 23.804405 +5.500000 3.900000 24.343543 +5.500000 4.000000 24.902681 +5.500000 4.100000 25.481819 +5.500000 4.200000 26.080957 +5.500000 4.300000 26.700096 +5.500000 4.400000 27.339234 +5.500000 4.500000 27.998372 +5.500000 4.600000 28.677510 +5.500000 4.700000 29.376648 +5.500000 4.800000 30.095786 +5.500000 4.900000 30.834924 +5.500000 5.000000 31.594062 +5.500000 5.100000 32.373200 +5.500000 5.200000 33.172338 +5.500000 5.300000 33.991476 +5.500000 5.400000 34.830615 +5.500000 5.500000 35.689753 +5.500000 5.600000 36.568891 +5.500000 5.700000 37.468029 +5.500000 5.800000 38.387167 +5.500000 5.900000 39.326305 +5.500000 6.000000 40.285443 +5.500000 6.100000 41.264581 +5.500000 6.200000 42.263719 +5.500000 6.300000 43.282857 +5.500000 6.400000 44.321995 +5.500000 6.500000 45.381134 +5.500000 6.600000 46.460272 +5.500000 6.700000 47.559410 +5.500000 6.800000 48.678548 +5.500000 6.900000 49.817686 +5.500000 7.000000 50.976824 +5.500000 7.100000 52.155962 +5.500000 7.200000 53.355100 +5.500000 7.300000 54.574238 +5.500000 7.400000 55.813376 +5.500000 7.500000 57.072515 +5.500000 7.600000 58.351653 +5.500000 7.700000 59.650791 +5.500000 7.800000 60.969929 +5.500000 7.900000 62.309067 +5.500000 8.000000 63.668205 +5.500000 8.100000 65.047343 +5.500000 8.200000 66.446481 +5.500000 8.300000 67.865619 +5.500000 8.400000 69.304757 +5.500000 8.500000 70.763895 +5.500000 8.600000 72.243034 +5.500000 8.700000 73.742172 +5.500000 8.800000 75.261310 +5.500000 8.900000 76.800448 +5.500000 9.000000 78.359586 +5.500000 9.100000 79.938724 +5.500000 9.200000 81.537862 +5.500000 9.300000 83.157000 +5.500000 9.400000 84.796138 +5.500000 9.500000 86.455276 +5.500000 9.600000 88.134414 +5.500000 9.700000 89.833553 +5.500000 9.800000 91.552691 +5.500000 9.900000 93.291829 +5.500000 10.000000 95.050967 +5.500000 10.100000 96.830105 +5.500000 10.200000 98.629243 +5.500000 10.300000 100.448381 +5.500000 10.400000 102.287519 +5.500000 10.500000 104.146657 +5.500000 10.600000 106.025795 +5.500000 10.700000 107.924934 +5.500000 10.800000 109.844072 +5.500000 10.900000 111.783210 +5.500000 11.000000 113.742348 +5.500000 11.100000 115.721486 +5.500000 11.200000 117.720624 +5.500000 11.300000 119.739762 +5.500000 11.400000 121.778900 +5.500000 11.500000 123.838038 +5.500000 11.600000 125.917176 +5.500000 11.700000 128.016314 +5.500000 11.800000 130.135453 +5.500000 11.900000 132.274591 +5.500000 12.000000 134.433729 +5.500000 12.100000 136.612867 +5.500000 12.200000 138.812005 +5.500000 12.300000 141.031143 +5.500000 12.400000 143.270281 +5.500000 12.500000 145.529419 +5.500000 12.600000 147.808557 +5.500000 12.700000 150.107695 +5.500000 12.800000 152.426833 +5.500000 12.900000 154.765972 +5.500000 13.000000 157.125110 +5.500000 13.100000 159.504248 +5.500000 13.200000 161.903386 +5.500000 13.300000 164.322524 +5.500000 13.400000 166.761662 +5.500000 13.500000 169.220800 +5.500000 13.600000 171.699938 +5.500000 13.700000 174.199076 +5.500000 13.800000 176.718214 +5.500000 13.900000 179.257353 +5.500000 14.000000 181.816491 +5.500000 14.100000 184.395629 +5.500000 14.200000 186.994767 +5.500000 14.300000 189.613905 +5.500000 14.400000 192.253043 +5.500000 14.500000 194.912181 +5.500000 14.600000 197.591319 +5.500000 14.700000 200.290457 +5.500000 14.800000 203.009595 +5.500000 14.900000 205.748733 +5.500000 15.000000 208.507872 + +5.600000 -5.000000 55.128860 +5.600000 -4.900000 53.911150 +5.600000 -4.800000 52.713440 +5.600000 -4.700000 51.535730 +5.600000 -4.600000 50.378020 +5.600000 -4.500000 49.240310 +5.600000 -4.400000 48.122600 +5.600000 -4.300000 47.024890 +5.600000 -4.200000 45.947181 +5.600000 -4.100000 44.889471 +5.600000 -4.000000 43.851761 +5.600000 -3.900000 42.834051 +5.600000 -3.800000 41.836341 +5.600000 -3.700000 40.858631 +5.600000 -3.600000 39.900921 +5.600000 -3.500000 38.963211 +5.600000 -3.400000 38.045502 +5.600000 -3.300000 37.147792 +5.600000 -3.200000 36.270082 +5.600000 -3.100000 35.412372 +5.600000 -3.000000 34.574662 +5.600000 -2.900000 33.756952 +5.600000 -2.800000 32.959242 +5.600000 -2.700000 32.181532 +5.600000 -2.600000 31.423822 +5.600000 -2.500000 30.686113 +5.600000 -2.400000 29.968403 +5.600000 -2.300000 29.270693 +5.600000 -2.200000 28.592983 +5.600000 -2.100000 27.935273 +5.600000 -2.000000 27.297563 +5.600000 -1.900000 26.679853 +5.600000 -1.800000 26.082143 +5.600000 -1.700000 25.504434 +5.600000 -1.600000 24.946724 +5.600000 -1.500000 24.409014 +5.600000 -1.400000 23.891304 +5.600000 -1.300000 23.393594 +5.600000 -1.200000 22.915884 +5.600000 -1.100000 22.458174 +5.600000 -1.000000 22.020464 +5.600000 -0.900000 21.602755 +5.600000 -0.800000 21.205045 +5.600000 -0.700000 20.827335 +5.600000 -0.600000 20.469625 +5.600000 -0.500000 20.131915 +5.600000 -0.400000 19.814205 +5.600000 -0.300000 19.516495 +5.600000 -0.200000 19.238785 +5.600000 -0.100000 18.981076 +5.600000 -0.000000 18.743366 +5.600000 0.100000 18.525656 +5.600000 0.200000 18.327946 +5.600000 0.300000 18.150236 +5.600000 0.400000 17.992526 +5.600000 0.500000 17.854816 +5.600000 0.600000 17.737106 +5.600000 0.700000 17.639396 +5.600000 0.800000 17.561687 +5.600000 0.900000 17.503977 +5.600000 1.000000 17.466267 +5.600000 1.100000 17.448557 +5.600000 1.200000 17.450847 +5.600000 1.300000 17.473137 +5.600000 1.400000 17.515427 +5.600000 1.500000 17.577717 +5.600000 1.600000 17.660008 +5.600000 1.700000 17.762298 +5.600000 1.800000 17.884588 +5.600000 1.900000 18.026878 +5.600000 2.000000 18.189168 +5.600000 2.100000 18.371458 +5.600000 2.200000 18.573748 +5.600000 2.300000 18.796038 +5.600000 2.400000 19.038329 +5.600000 2.500000 19.300619 +5.600000 2.600000 19.582909 +5.600000 2.700000 19.885199 +5.600000 2.800000 20.207489 +5.600000 2.900000 20.549779 +5.600000 3.000000 20.912069 +5.600000 3.100000 21.294359 +5.600000 3.200000 21.696650 +5.600000 3.300000 22.118940 +5.600000 3.400000 22.561230 +5.600000 3.500000 23.023520 +5.600000 3.600000 23.505810 +5.600000 3.700000 24.008100 +5.600000 3.800000 24.530390 +5.600000 3.900000 25.072680 +5.600000 4.000000 25.634970 +5.600000 4.100000 26.217261 +5.600000 4.200000 26.819551 +5.600000 4.300000 27.441841 +5.600000 4.400000 28.084131 +5.600000 4.500000 28.746421 +5.600000 4.600000 29.428711 +5.600000 4.700000 30.131001 +5.600000 4.800000 30.853291 +5.600000 4.900000 31.595582 +5.600000 5.000000 32.357872 +5.600000 5.100000 33.140162 +5.600000 5.200000 33.942452 +5.600000 5.300000 34.764742 +5.600000 5.400000 35.607032 +5.600000 5.500000 36.469322 +5.600000 5.600000 37.351612 +5.600000 5.700000 38.253903 +5.600000 5.800000 39.176193 +5.600000 5.900000 40.118483 +5.600000 6.000000 41.080773 +5.600000 6.100000 42.063063 +5.600000 6.200000 43.065353 +5.600000 6.300000 44.087643 +5.600000 6.400000 45.129933 +5.600000 6.500000 46.192224 +5.600000 6.600000 47.274514 +5.600000 6.700000 48.376804 +5.600000 6.800000 49.499094 +5.600000 6.900000 50.641384 +5.600000 7.000000 51.803674 +5.600000 7.100000 52.985964 +5.600000 7.200000 54.188254 +5.600000 7.300000 55.410545 +5.600000 7.400000 56.652835 +5.600000 7.500000 57.915125 +5.600000 7.600000 59.197415 +5.600000 7.700000 60.499705 +5.600000 7.800000 61.821995 +5.600000 7.900000 63.164285 +5.600000 8.000000 64.526575 +5.600000 8.100000 65.908865 +5.600000 8.200000 67.311156 +5.600000 8.300000 68.733446 +5.600000 8.400000 70.175736 +5.600000 8.500000 71.638026 +5.600000 8.600000 73.120316 +5.600000 8.700000 74.622606 +5.600000 8.800000 76.144896 +5.600000 8.900000 77.687186 +5.600000 9.000000 79.249477 +5.600000 9.100000 80.831767 +5.600000 9.200000 82.434057 +5.600000 9.300000 84.056347 +5.600000 9.400000 85.698637 +5.600000 9.500000 87.360927 +5.600000 9.600000 89.043217 +5.600000 9.700000 90.745507 +5.600000 9.800000 92.467798 +5.600000 9.900000 94.210088 +5.600000 10.000000 95.972378 +5.600000 10.100000 97.754668 +5.600000 10.200000 99.556958 +5.600000 10.300000 101.379248 +5.600000 10.400000 103.221538 +5.600000 10.500000 105.083828 +5.600000 10.600000 106.966119 +5.600000 10.700000 108.868409 +5.600000 10.800000 110.790699 +5.600000 10.900000 112.732989 +5.600000 11.000000 114.695279 +5.600000 11.100000 116.677569 +5.600000 11.200000 118.679859 +5.600000 11.300000 120.702149 +5.600000 11.400000 122.744439 +5.600000 11.500000 124.806730 +5.600000 11.600000 126.889020 +5.600000 11.700000 128.991310 +5.600000 11.800000 131.113600 +5.600000 11.900000 133.255890 +5.600000 12.000000 135.418180 +5.600000 12.100000 137.600470 +5.600000 12.200000 139.802760 +5.600000 12.300000 142.025051 +5.600000 12.400000 144.267341 +5.600000 12.500000 146.529631 +5.600000 12.600000 148.811921 +5.600000 12.700000 151.114211 +5.600000 12.800000 153.436501 +5.600000 12.900000 155.778791 +5.600000 13.000000 158.141081 +5.600000 13.100000 160.523372 +5.600000 13.200000 162.925662 +5.600000 13.300000 165.347952 +5.600000 13.400000 167.790242 +5.600000 13.500000 170.252532 +5.600000 13.600000 172.734822 +5.600000 13.700000 175.237112 +5.600000 13.800000 177.759402 +5.600000 13.900000 180.301693 +5.600000 14.000000 182.863983 +5.600000 14.100000 185.446273 +5.600000 14.200000 188.048563 +5.600000 14.300000 190.670853 +5.600000 14.400000 193.313143 +5.600000 14.500000 195.975433 +5.600000 14.600000 198.657723 +5.600000 14.700000 201.360013 +5.600000 14.800000 204.082304 +5.600000 14.900000 206.824594 +5.600000 15.000000 209.586884 + +5.700000 -5.000000 55.535200 +5.700000 -4.900000 54.320125 +5.700000 -4.800000 53.125051 +5.700000 -4.700000 51.949976 +5.700000 -4.600000 50.794902 +5.700000 -4.500000 49.659827 +5.700000 -4.400000 48.544752 +5.700000 -4.300000 47.449678 +5.700000 -4.200000 46.374603 +5.700000 -4.100000 45.319529 +5.700000 -4.000000 44.284454 +5.700000 -3.900000 43.269379 +5.700000 -3.800000 42.274305 +5.700000 -3.700000 41.299230 +5.700000 -3.600000 40.344156 +5.700000 -3.500000 39.409081 +5.700000 -3.400000 38.494006 +5.700000 -3.300000 37.598932 +5.700000 -3.200000 36.723857 +5.700000 -3.100000 35.868783 +5.700000 -3.000000 35.033708 +5.700000 -2.900000 34.218634 +5.700000 -2.800000 33.423559 +5.700000 -2.700000 32.648484 +5.700000 -2.600000 31.893410 +5.700000 -2.500000 31.158335 +5.700000 -2.400000 30.443261 +5.700000 -2.300000 29.748186 +5.700000 -2.200000 29.073111 +5.700000 -2.100000 28.418037 +5.700000 -2.000000 27.782962 +5.700000 -1.900000 27.167888 +5.700000 -1.800000 26.572813 +5.700000 -1.700000 25.997738 +5.700000 -1.600000 25.442664 +5.700000 -1.500000 24.907589 +5.700000 -1.400000 24.392515 +5.700000 -1.300000 23.897440 +5.700000 -1.200000 23.422366 +5.700000 -1.100000 22.967291 +5.700000 -1.000000 22.532216 +5.700000 -0.900000 22.117142 +5.700000 -0.800000 21.722067 +5.700000 -0.700000 21.346993 +5.700000 -0.600000 20.991918 +5.700000 -0.500000 20.656843 +5.700000 -0.400000 20.341769 +5.700000 -0.300000 20.046694 +5.700000 -0.200000 19.771620 +5.700000 -0.100000 19.516545 +5.700000 -0.000000 19.281470 +5.700000 0.100000 19.066396 +5.700000 0.200000 18.871321 +5.700000 0.300000 18.696247 +5.700000 0.400000 18.541172 +5.700000 0.500000 18.406098 +5.700000 0.600000 18.291023 +5.700000 0.700000 18.195948 +5.700000 0.800000 18.120874 +5.700000 0.900000 18.065799 +5.700000 1.000000 18.030725 +5.700000 1.100000 18.015650 +5.700000 1.200000 18.020575 +5.700000 1.300000 18.045501 +5.700000 1.400000 18.090426 +5.700000 1.500000 18.155352 +5.700000 1.600000 18.240277 +5.700000 1.700000 18.345202 +5.700000 1.800000 18.470128 +5.700000 1.900000 18.615053 +5.700000 2.000000 18.779979 +5.700000 2.100000 18.964904 +5.700000 2.200000 19.169829 +5.700000 2.300000 19.394755 +5.700000 2.400000 19.639680 +5.700000 2.500000 19.904606 +5.700000 2.600000 20.189531 +5.700000 2.700000 20.494457 +5.700000 2.800000 20.819382 +5.700000 2.900000 21.164307 +5.700000 3.000000 21.529233 +5.700000 3.100000 21.914158 +5.700000 3.200000 22.319084 +5.700000 3.300000 22.744009 +5.700000 3.400000 23.188934 +5.700000 3.500000 23.653860 +5.700000 3.600000 24.138785 +5.700000 3.700000 24.643711 +5.700000 3.800000 25.168636 +5.700000 3.900000 25.713561 +5.700000 4.000000 26.278487 +5.700000 4.100000 26.863412 +5.700000 4.200000 27.468338 +5.700000 4.300000 28.093263 +5.700000 4.400000 28.738189 +5.700000 4.500000 29.403114 +5.700000 4.600000 30.088039 +5.700000 4.700000 30.792965 +5.700000 4.800000 31.517890 +5.700000 4.900000 32.262816 +5.700000 5.000000 33.027741 +5.700000 5.100000 33.812666 +5.700000 5.200000 34.617592 +5.700000 5.300000 35.442517 +5.700000 5.400000 36.287443 +5.700000 5.500000 37.152368 +5.700000 5.600000 38.037293 +5.700000 5.700000 38.942219 +5.700000 5.800000 39.867144 +5.700000 5.900000 40.812070 +5.700000 6.000000 41.776995 +5.700000 6.100000 42.761921 +5.700000 6.200000 43.766846 +5.700000 6.300000 44.791771 +5.700000 6.400000 45.836697 +5.700000 6.500000 46.901622 +5.700000 6.600000 47.986548 +5.700000 6.700000 49.091473 +5.700000 6.800000 50.216398 +5.700000 6.900000 51.361324 +5.700000 7.000000 52.526249 +5.700000 7.100000 53.711175 +5.700000 7.200000 54.916100 +5.700000 7.300000 56.141025 +5.700000 7.400000 57.385951 +5.700000 7.500000 58.650876 +5.700000 7.600000 59.935802 +5.700000 7.700000 61.240727 +5.700000 7.800000 62.565652 +5.700000 7.900000 63.910578 +5.700000 8.000000 65.275503 +5.700000 8.100000 66.660429 +5.700000 8.200000 68.065354 +5.700000 8.300000 69.490280 +5.700000 8.400000 70.935205 +5.700000 8.500000 72.400130 +5.700000 8.600000 73.885056 +5.700000 8.700000 75.389981 +5.700000 8.800000 76.914907 +5.700000 8.900000 78.459832 +5.700000 9.000000 80.024757 +5.700000 9.100000 81.609683 +5.700000 9.200000 83.214608 +5.700000 9.300000 84.839534 +5.700000 9.400000 86.484459 +5.700000 9.500000 88.149384 +5.700000 9.600000 89.834310 +5.700000 9.700000 91.539235 +5.700000 9.800000 93.264161 +5.700000 9.900000 95.009086 +5.700000 10.000000 96.774012 +5.700000 10.100000 98.558937 +5.700000 10.200000 100.363862 +5.700000 10.300000 102.188788 +5.700000 10.400000 104.033713 +5.700000 10.500000 105.898639 +5.700000 10.600000 107.783564 +5.700000 10.700000 109.688489 +5.700000 10.800000 111.613415 +5.700000 10.900000 113.558340 +5.700000 11.000000 115.523266 +5.700000 11.100000 117.508191 +5.700000 11.200000 119.513116 +5.700000 11.300000 121.538042 +5.700000 11.400000 123.582967 +5.700000 11.500000 125.647893 +5.700000 11.600000 127.732818 +5.700000 11.700000 129.837744 +5.700000 11.800000 131.962669 +5.700000 11.900000 134.107594 +5.700000 12.000000 136.272520 +5.700000 12.100000 138.457445 +5.700000 12.200000 140.662371 +5.700000 12.300000 142.887296 +5.700000 12.400000 145.132221 +5.700000 12.500000 147.397147 +5.700000 12.600000 149.682072 +5.700000 12.700000 151.986998 +5.700000 12.800000 154.311923 +5.700000 12.900000 156.656848 +5.700000 13.000000 159.021774 +5.700000 13.100000 161.406699 +5.700000 13.200000 163.811625 +5.700000 13.300000 166.236550 +5.700000 13.400000 168.681476 +5.700000 13.500000 171.146401 +5.700000 13.600000 173.631326 +5.700000 13.700000 176.136252 +5.700000 13.800000 178.661177 +5.700000 13.900000 181.206103 +5.700000 14.000000 183.771028 +5.700000 14.100000 186.355953 +5.700000 14.200000 188.960879 +5.700000 14.300000 191.585804 +5.700000 14.400000 194.230730 +5.700000 14.500000 196.895655 +5.700000 14.600000 199.580580 +5.700000 14.700000 202.285506 +5.700000 14.800000 205.010431 +5.700000 14.900000 207.755357 +5.700000 15.000000 210.520282 + +5.800000 -5.000000 55.893395 +5.800000 -4.900000 54.680439 +5.800000 -4.800000 53.487483 +5.800000 -4.700000 52.314527 +5.800000 -4.600000 51.161571 +5.800000 -4.500000 50.028615 +5.800000 -4.400000 48.915659 +5.800000 -4.300000 47.822703 +5.800000 -4.200000 46.749747 +5.800000 -4.100000 45.696791 +5.800000 -4.000000 44.663835 +5.800000 -3.900000 43.650878 +5.800000 -3.800000 42.657922 +5.800000 -3.700000 41.684966 +5.800000 -3.600000 40.732010 +5.800000 -3.500000 39.799054 +5.800000 -3.400000 38.886098 +5.800000 -3.300000 37.993142 +5.800000 -3.200000 37.120186 +5.800000 -3.100000 36.267230 +5.800000 -3.000000 35.434274 +5.800000 -2.900000 34.621318 +5.800000 -2.800000 33.828362 +5.800000 -2.700000 33.055406 +5.800000 -2.600000 32.302450 +5.800000 -2.500000 31.569494 +5.800000 -2.400000 30.856538 +5.800000 -2.300000 30.163582 +5.800000 -2.200000 29.490626 +5.800000 -2.100000 28.837670 +5.800000 -2.000000 28.204714 +5.800000 -1.900000 27.591758 +5.800000 -1.800000 26.998802 +5.800000 -1.700000 26.425846 +5.800000 -1.600000 25.872890 +5.800000 -1.500000 25.339934 +5.800000 -1.400000 24.826978 +5.800000 -1.300000 24.334022 +5.800000 -1.200000 23.861065 +5.800000 -1.100000 23.408109 +5.800000 -1.000000 22.975153 +5.800000 -0.900000 22.562197 +5.800000 -0.800000 22.169241 +5.800000 -0.700000 21.796285 +5.800000 -0.600000 21.443329 +5.800000 -0.500000 21.110373 +5.800000 -0.400000 20.797417 +5.800000 -0.300000 20.504461 +5.800000 -0.200000 20.231505 +5.800000 -0.100000 19.978549 +5.800000 -0.000000 19.745593 +5.800000 0.100000 19.532637 +5.800000 0.200000 19.339681 +5.800000 0.300000 19.166725 +5.800000 0.400000 19.013769 +5.800000 0.500000 18.880813 +5.800000 0.600000 18.767857 +5.800000 0.700000 18.674901 +5.800000 0.800000 18.601945 +5.800000 0.900000 18.548989 +5.800000 1.000000 18.516033 +5.800000 1.100000 18.503077 +5.800000 1.200000 18.510121 +5.800000 1.300000 18.537165 +5.800000 1.400000 18.584208 +5.800000 1.500000 18.651252 +5.800000 1.600000 18.738296 +5.800000 1.700000 18.845340 +5.800000 1.800000 18.972384 +5.800000 1.900000 19.119428 +5.800000 2.000000 19.286472 +5.800000 2.100000 19.473516 +5.800000 2.200000 19.680560 +5.800000 2.300000 19.907604 +5.800000 2.400000 20.154648 +5.800000 2.500000 20.421692 +5.800000 2.600000 20.708736 +5.800000 2.700000 21.015780 +5.800000 2.800000 21.342824 +5.800000 2.900000 21.689868 +5.800000 3.000000 22.056912 +5.800000 3.100000 22.443956 +5.800000 3.200000 22.851000 +5.800000 3.300000 23.278044 +5.800000 3.400000 23.725088 +5.800000 3.500000 24.192132 +5.800000 3.600000 24.679176 +5.800000 3.700000 25.186220 +5.800000 3.800000 25.713264 +5.800000 3.900000 26.260308 +5.800000 4.000000 26.827352 +5.800000 4.100000 27.414395 +5.800000 4.200000 28.021439 +5.800000 4.300000 28.648483 +5.800000 4.400000 29.295527 +5.800000 4.500000 29.962571 +5.800000 4.600000 30.649615 +5.800000 4.700000 31.356659 +5.800000 4.800000 32.083703 +5.800000 4.900000 32.830747 +5.800000 5.000000 33.597791 +5.800000 5.100000 34.384835 +5.800000 5.200000 35.191879 +5.800000 5.300000 36.018923 +5.800000 5.400000 36.865967 +5.800000 5.500000 37.733011 +5.800000 5.600000 38.620055 +5.800000 5.700000 39.527099 +5.800000 5.800000 40.454143 +5.800000 5.900000 41.401187 +5.800000 6.000000 42.368231 +5.800000 6.100000 43.355275 +5.800000 6.200000 44.362319 +5.800000 6.300000 45.389363 +5.800000 6.400000 46.436407 +5.800000 6.500000 47.503451 +5.800000 6.600000 48.590495 +5.800000 6.700000 49.697538 +5.800000 6.800000 50.824582 +5.800000 6.900000 51.971626 +5.800000 7.000000 53.138670 +5.800000 7.100000 54.325714 +5.800000 7.200000 55.532758 +5.800000 7.300000 56.759802 +5.800000 7.400000 58.006846 +5.800000 7.500000 59.273890 +5.800000 7.600000 60.560934 +5.800000 7.700000 61.867978 +5.800000 7.800000 63.195022 +5.800000 7.900000 64.542066 +5.800000 8.000000 65.909110 +5.800000 8.100000 67.296154 +5.800000 8.200000 68.703198 +5.800000 8.300000 70.130242 +5.800000 8.400000 71.577286 +5.800000 8.500000 73.044330 +5.800000 8.600000 74.531374 +5.800000 8.700000 76.038418 +5.800000 8.800000 77.565462 +5.800000 8.900000 79.112506 +5.800000 9.000000 80.679550 +5.800000 9.100000 82.266594 +5.800000 9.200000 83.873638 +5.800000 9.300000 85.500682 +5.800000 9.400000 87.147725 +5.800000 9.500000 88.814769 +5.800000 9.600000 90.501813 +5.800000 9.700000 92.208857 +5.800000 9.800000 93.935901 +5.800000 9.900000 95.682945 +5.800000 10.000000 97.449989 +5.800000 10.100000 99.237033 +5.800000 10.200000 101.044077 +5.800000 10.300000 102.871121 +5.800000 10.400000 104.718165 +5.800000 10.500000 106.585209 +5.800000 10.600000 108.472253 +5.800000 10.700000 110.379297 +5.800000 10.800000 112.306341 +5.800000 10.900000 114.253385 +5.800000 11.000000 116.220429 +5.800000 11.100000 118.207473 +5.800000 11.200000 120.214517 +5.800000 11.300000 122.241561 +5.800000 11.400000 124.288605 +5.800000 11.500000 126.355649 +5.800000 11.600000 128.442693 +5.800000 11.700000 130.549737 +5.800000 11.800000 132.676781 +5.800000 11.900000 134.823825 +5.800000 12.000000 136.990868 +5.800000 12.100000 139.177912 +5.800000 12.200000 141.384956 +5.800000 12.300000 143.612000 +5.800000 12.400000 145.859044 +5.800000 12.500000 148.126088 +5.800000 12.600000 150.413132 +5.800000 12.700000 152.720176 +5.800000 12.800000 155.047220 +5.800000 12.900000 157.394264 +5.800000 13.000000 159.761308 +5.800000 13.100000 162.148352 +5.800000 13.200000 164.555396 +5.800000 13.300000 166.982440 +5.800000 13.400000 169.429484 +5.800000 13.500000 171.896528 +5.800000 13.600000 174.383572 +5.800000 13.700000 176.890616 +5.800000 13.800000 179.417660 +5.800000 13.900000 181.964704 +5.800000 14.000000 184.531748 +5.800000 14.100000 187.118792 +5.800000 14.200000 189.725836 +5.800000 14.300000 192.352880 +5.800000 14.400000 194.999924 +5.800000 14.500000 197.666968 +5.800000 14.600000 200.354012 +5.800000 14.700000 203.061055 +5.800000 14.800000 205.788099 +5.800000 14.900000 208.535143 +5.800000 15.000000 211.302187 + +5.900000 -5.000000 56.198406 +5.900000 -4.900000 54.987052 +5.900000 -4.800000 53.795697 +5.900000 -4.700000 52.624343 +5.900000 -4.600000 51.472989 +5.900000 -4.500000 50.341635 +5.900000 -4.400000 49.230281 +5.900000 -4.300000 48.138926 +5.900000 -4.200000 47.067572 +5.900000 -4.100000 46.016218 +5.900000 -4.000000 44.984864 +5.900000 -3.900000 43.973509 +5.900000 -3.800000 42.982155 +5.900000 -3.700000 42.010801 +5.900000 -3.600000 41.059447 +5.900000 -3.500000 40.128093 +5.900000 -3.400000 39.216738 +5.900000 -3.300000 38.325384 +5.900000 -3.200000 37.454030 +5.900000 -3.100000 36.602676 +5.900000 -3.000000 35.771321 +5.900000 -2.900000 34.959967 +5.900000 -2.800000 34.168613 +5.900000 -2.700000 33.397259 +5.900000 -2.600000 32.645905 +5.900000 -2.500000 31.914550 +5.900000 -2.400000 31.203196 +5.900000 -2.300000 30.511842 +5.900000 -2.200000 29.840488 +5.900000 -2.100000 29.189133 +5.900000 -2.000000 28.557779 +5.900000 -1.900000 27.946425 +5.900000 -1.800000 27.355071 +5.900000 -1.700000 26.783716 +5.900000 -1.600000 26.232362 +5.900000 -1.500000 25.701008 +5.900000 -1.400000 25.189654 +5.900000 -1.300000 24.698300 +5.900000 -1.200000 24.226945 +5.900000 -1.100000 23.775591 +5.900000 -1.000000 23.344237 +5.900000 -0.900000 22.932883 +5.900000 -0.800000 22.541528 +5.900000 -0.700000 22.170174 +5.900000 -0.600000 21.818820 +5.900000 -0.500000 21.487466 +5.900000 -0.400000 21.176112 +5.900000 -0.300000 20.884757 +5.900000 -0.200000 20.613403 +5.900000 -0.100000 20.362049 +5.900000 -0.000000 20.130695 +5.900000 0.100000 19.919340 +5.900000 0.200000 19.727986 +5.900000 0.300000 19.556632 +5.900000 0.400000 19.405278 +5.900000 0.500000 19.273924 +5.900000 0.600000 19.162569 +5.900000 0.700000 19.071215 +5.900000 0.800000 18.999861 +5.900000 0.900000 18.948507 +5.900000 1.000000 18.917152 +5.900000 1.100000 18.905798 +5.900000 1.200000 18.914444 +5.900000 1.300000 18.943090 +5.900000 1.400000 18.991736 +5.900000 1.500000 19.060381 +5.900000 1.600000 19.149027 +5.900000 1.700000 19.257673 +5.900000 1.800000 19.386319 +5.900000 1.900000 19.534964 +5.900000 2.000000 19.703610 +5.900000 2.100000 19.892256 +5.900000 2.200000 20.100902 +5.900000 2.300000 20.329548 +5.900000 2.400000 20.578193 +5.900000 2.500000 20.846839 +5.900000 2.600000 21.135485 +5.900000 2.700000 21.444131 +5.900000 2.800000 21.772776 +5.900000 2.900000 22.121422 +5.900000 3.000000 22.490068 +5.900000 3.100000 22.878714 +5.900000 3.200000 23.287360 +5.900000 3.300000 23.716005 +5.900000 3.400000 24.164651 +5.900000 3.500000 24.633297 +5.900000 3.600000 25.121943 +5.900000 3.700000 25.630588 +5.900000 3.800000 26.159234 +5.900000 3.900000 26.707880 +5.900000 4.000000 27.276526 +5.900000 4.100000 27.865171 +5.900000 4.200000 28.473817 +5.900000 4.300000 29.102463 +5.900000 4.400000 29.751109 +5.900000 4.500000 30.419755 +5.900000 4.600000 31.108400 +5.900000 4.700000 31.817046 +5.900000 4.800000 32.545692 +5.900000 4.900000 33.294338 +5.900000 5.000000 34.062983 +5.900000 5.100000 34.851629 +5.900000 5.200000 35.660275 +5.900000 5.300000 36.488921 +5.900000 5.400000 37.337567 +5.900000 5.500000 38.206212 +5.900000 5.600000 39.094858 +5.900000 5.700000 40.003504 +5.900000 5.800000 40.932150 +5.900000 5.900000 41.880795 +5.900000 6.000000 42.849441 +5.900000 6.100000 43.838087 +5.900000 6.200000 44.846733 +5.900000 6.300000 45.875379 +5.900000 6.400000 46.924024 +5.900000 6.500000 47.992670 +5.900000 6.600000 49.081316 +5.900000 6.700000 50.189962 +5.900000 6.800000 51.318607 +5.900000 6.900000 52.467253 +5.900000 7.000000 53.635899 +5.900000 7.100000 54.824545 +5.900000 7.200000 56.033191 +5.900000 7.300000 57.261836 +5.900000 7.400000 58.510482 +5.900000 7.500000 59.779128 +5.900000 7.600000 61.067774 +5.900000 7.700000 62.376419 +5.900000 7.800000 63.705065 +5.900000 7.900000 65.053711 +5.900000 8.000000 66.422357 +5.900000 8.100000 67.811003 +5.900000 8.200000 69.219648 +5.900000 8.300000 70.648294 +5.900000 8.400000 72.096940 +5.900000 8.500000 73.565586 +5.900000 8.600000 75.054231 +5.900000 8.700000 76.562877 +5.900000 8.800000 78.091523 +5.900000 8.900000 79.640169 +5.900000 9.000000 81.208815 +5.900000 9.100000 82.797460 +5.900000 9.200000 84.406106 +5.900000 9.300000 86.034752 +5.900000 9.400000 87.683398 +5.900000 9.500000 89.352043 +5.900000 9.600000 91.040689 +5.900000 9.700000 92.749335 +5.900000 9.800000 94.477981 +5.900000 9.900000 96.226626 +5.900000 10.000000 97.995272 +5.900000 10.100000 99.783918 +5.900000 10.200000 101.592564 +5.900000 10.300000 103.421210 +5.900000 10.400000 105.269855 +5.900000 10.500000 107.138501 +5.900000 10.600000 109.027147 +5.900000 10.700000 110.935793 +5.900000 10.800000 112.864438 +5.900000 10.900000 114.813084 +5.900000 11.000000 116.781730 +5.900000 11.100000 118.770376 +5.900000 11.200000 120.779022 +5.900000 11.300000 122.807667 +5.900000 11.400000 124.856313 +5.900000 11.500000 126.924959 +5.900000 11.600000 129.013605 +5.900000 11.700000 131.122250 +5.900000 11.800000 133.250896 +5.900000 11.900000 135.399542 +5.900000 12.000000 137.568188 +5.900000 12.100000 139.756834 +5.900000 12.200000 141.965479 +5.900000 12.300000 144.194125 +5.900000 12.400000 146.442771 +5.900000 12.500000 148.711417 +5.900000 12.600000 151.000062 +5.900000 12.700000 153.308708 +5.900000 12.800000 155.637354 +5.900000 12.900000 157.986000 +5.900000 13.000000 160.354646 +5.900000 13.100000 162.743291 +5.900000 13.200000 165.151937 +5.900000 13.300000 167.580583 +5.900000 13.400000 170.029229 +5.900000 13.500000 172.497874 +5.900000 13.600000 174.986520 +5.900000 13.700000 177.495166 +5.900000 13.800000 180.023812 +5.900000 13.900000 182.572458 +5.900000 14.000000 185.141103 +5.900000 14.100000 187.729749 +5.900000 14.200000 190.338395 +5.900000 14.300000 192.967041 +5.900000 14.400000 195.615686 +5.900000 14.500000 198.284332 +5.900000 14.600000 200.972978 +5.900000 14.700000 203.681624 +5.900000 14.800000 206.410270 +5.900000 14.900000 209.158915 +5.900000 15.000000 211.927561 + +6.000000 -5.000000 56.446083 +6.000000 -4.900000 55.235814 +6.000000 -4.800000 54.045545 +6.000000 -4.700000 52.875276 +6.000000 -4.600000 51.725007 +6.000000 -4.500000 50.594737 +6.000000 -4.400000 49.484468 +6.000000 -4.300000 48.394199 +6.000000 -4.200000 47.323930 +6.000000 -4.100000 46.273661 +6.000000 -4.000000 45.243392 +6.000000 -3.900000 44.233122 +6.000000 -3.800000 43.242853 +6.000000 -3.700000 42.272584 +6.000000 -3.600000 41.322315 +6.000000 -3.500000 40.392046 +6.000000 -3.400000 39.481777 +6.000000 -3.300000 38.591508 +6.000000 -3.200000 37.721238 +6.000000 -3.100000 36.870969 +6.000000 -3.000000 36.040700 +6.000000 -2.900000 35.230431 +6.000000 -2.800000 34.440162 +6.000000 -2.700000 33.669893 +6.000000 -2.600000 32.919624 +6.000000 -2.500000 32.189354 +6.000000 -2.400000 31.479085 +6.000000 -2.300000 30.788816 +6.000000 -2.200000 30.118547 +6.000000 -2.100000 29.468278 +6.000000 -2.000000 28.838009 +6.000000 -1.900000 28.227740 +6.000000 -1.800000 27.637470 +6.000000 -1.700000 27.067201 +6.000000 -1.600000 26.516932 +6.000000 -1.500000 25.986663 +6.000000 -1.400000 25.476394 +6.000000 -1.300000 24.986125 +6.000000 -1.200000 24.515855 +6.000000 -1.100000 24.065586 +6.000000 -1.000000 23.635317 +6.000000 -0.900000 23.225048 +6.000000 -0.800000 22.834779 +6.000000 -0.700000 22.464510 +6.000000 -0.600000 22.114241 +6.000000 -0.500000 21.783971 +6.000000 -0.400000 21.473702 +6.000000 -0.300000 21.183433 +6.000000 -0.200000 20.913164 +6.000000 -0.100000 20.662895 +6.000000 -0.000000 20.432626 +6.000000 0.100000 20.222357 +6.000000 0.200000 20.032087 +6.000000 0.300000 19.861818 +6.000000 0.400000 19.711549 +6.000000 0.500000 19.581280 +6.000000 0.600000 19.471011 +6.000000 0.700000 19.380742 +6.000000 0.800000 19.310473 +6.000000 0.900000 19.260203 +6.000000 1.000000 19.229934 +6.000000 1.100000 19.219665 +6.000000 1.200000 19.229396 +6.000000 1.300000 19.259127 +6.000000 1.400000 19.308858 +6.000000 1.500000 19.378588 +6.000000 1.600000 19.468319 +6.000000 1.700000 19.578050 +6.000000 1.800000 19.707781 +6.000000 1.900000 19.857512 +6.000000 2.000000 20.027243 +6.000000 2.100000 20.216974 +6.000000 2.200000 20.426704 +6.000000 2.300000 20.656435 +6.000000 2.400000 20.906166 +6.000000 2.500000 21.175897 +6.000000 2.600000 21.465628 +6.000000 2.700000 21.775359 +6.000000 2.800000 22.105090 +6.000000 2.900000 22.454820 +6.000000 3.000000 22.824551 +6.000000 3.100000 23.214282 +6.000000 3.200000 23.624013 +6.000000 3.300000 24.053744 +6.000000 3.400000 24.503475 +6.000000 3.500000 24.973205 +6.000000 3.600000 25.462936 +6.000000 3.700000 25.972667 +6.000000 3.800000 26.502398 +6.000000 3.900000 27.052129 +6.000000 4.000000 27.621860 +6.000000 4.100000 28.211591 +6.000000 4.200000 28.821321 +6.000000 4.300000 29.451052 +6.000000 4.400000 30.100783 +6.000000 4.500000 30.770514 +6.000000 4.600000 31.460245 +6.000000 4.700000 32.169976 +6.000000 4.800000 32.899707 +6.000000 4.900000 33.649437 +6.000000 5.000000 34.419168 +6.000000 5.100000 35.208899 +6.000000 5.200000 36.018630 +6.000000 5.300000 36.848361 +6.000000 5.400000 37.698092 +6.000000 5.500000 38.567823 +6.000000 5.600000 39.457553 +6.000000 5.700000 40.367284 +6.000000 5.800000 41.297015 +6.000000 5.900000 42.246746 +6.000000 6.000000 43.216477 +6.000000 6.100000 44.206208 +6.000000 6.200000 45.215938 +6.000000 6.300000 46.245669 +6.000000 6.400000 47.295400 +6.000000 6.500000 48.365131 +6.000000 6.600000 49.454862 +6.000000 6.700000 50.564593 +6.000000 6.800000 51.694324 +6.000000 6.900000 52.844054 +6.000000 7.000000 54.013785 +6.000000 7.100000 55.203516 +6.000000 7.200000 56.413247 +6.000000 7.300000 57.642978 +6.000000 7.400000 58.892709 +6.000000 7.500000 60.162440 +6.000000 7.600000 61.452170 +6.000000 7.700000 62.761901 +6.000000 7.800000 64.091632 +6.000000 7.900000 65.441363 +6.000000 8.000000 66.811094 +6.000000 8.100000 68.200825 +6.000000 8.200000 69.610555 +6.000000 8.300000 71.040286 +6.000000 8.400000 72.490017 +6.000000 8.500000 73.959748 +6.000000 8.600000 75.449479 +6.000000 8.700000 76.959210 +6.000000 8.800000 78.488941 +6.000000 8.900000 80.038671 +6.000000 9.000000 81.608402 +6.000000 9.100000 83.198133 +6.000000 9.200000 84.807864 +6.000000 9.300000 86.437595 +6.000000 9.400000 88.087326 +6.000000 9.500000 89.757057 +6.000000 9.600000 91.446787 +6.000000 9.700000 93.156518 +6.000000 9.800000 94.886249 +6.000000 9.900000 96.635980 +6.000000 10.000000 98.405711 +6.000000 10.100000 100.195442 +6.000000 10.200000 102.005173 +6.000000 10.300000 103.834903 +6.000000 10.400000 105.684634 +6.000000 10.500000 107.554365 +6.000000 10.600000 109.444096 +6.000000 10.700000 111.353827 +6.000000 10.800000 113.283558 +6.000000 10.900000 115.233288 +6.000000 11.000000 117.203019 +6.000000 11.100000 119.192750 +6.000000 11.200000 121.202481 +6.000000 11.300000 123.232212 +6.000000 11.400000 125.281943 +6.000000 11.500000 127.351674 +6.000000 11.600000 129.441404 +6.000000 11.700000 131.551135 +6.000000 11.800000 133.680866 +6.000000 11.900000 135.830597 +6.000000 12.000000 138.000328 +6.000000 12.100000 140.190059 +6.000000 12.200000 142.399790 +6.000000 12.300000 144.629520 +6.000000 12.400000 146.879251 +6.000000 12.500000 149.148982 +6.000000 12.600000 151.438713 +6.000000 12.700000 153.748444 +6.000000 12.800000 156.078175 +6.000000 12.900000 158.427906 +6.000000 13.000000 160.797636 +6.000000 13.100000 163.187367 +6.000000 13.200000 165.597098 +6.000000 13.300000 168.026829 +6.000000 13.400000 170.476560 +6.000000 13.500000 172.946291 +6.000000 13.600000 175.436021 +6.000000 13.700000 177.945752 +6.000000 13.800000 180.475483 +6.000000 13.900000 183.025214 +6.000000 14.000000 185.594945 +6.000000 14.100000 188.184676 +6.000000 14.200000 190.794407 +6.000000 14.300000 193.424137 +6.000000 14.400000 196.073868 +6.000000 14.500000 198.743599 +6.000000 14.600000 201.433330 +6.000000 14.700000 204.143061 +6.000000 14.800000 206.872792 +6.000000 14.900000 209.622523 +6.000000 15.000000 212.392253 + +6.100000 -5.000000 56.633206 +6.100000 -4.900000 55.423505 +6.100000 -4.800000 54.233804 +6.100000 -4.700000 53.064104 +6.100000 -4.600000 51.914403 +6.100000 -4.500000 50.784702 +6.100000 -4.400000 49.675001 +6.100000 -4.300000 48.585300 +6.100000 -4.200000 47.515600 +6.100000 -4.100000 46.465899 +6.100000 -4.000000 45.436198 +6.100000 -3.900000 44.426497 +6.100000 -3.800000 43.436796 +6.100000 -3.700000 42.467095 +6.100000 -3.600000 41.517395 +6.100000 -3.500000 40.587694 +6.100000 -3.400000 39.677993 +6.100000 -3.300000 38.788292 +6.100000 -3.200000 37.918591 +6.100000 -3.100000 37.068891 +6.100000 -3.000000 36.239190 +6.100000 -2.900000 35.429489 +6.100000 -2.800000 34.639788 +6.100000 -2.700000 33.870087 +6.100000 -2.600000 33.120387 +6.100000 -2.500000 32.390686 +6.100000 -2.400000 31.680985 +6.100000 -2.300000 30.991284 +6.100000 -2.200000 30.321583 +6.100000 -2.100000 29.671883 +6.100000 -2.000000 29.042182 +6.100000 -1.900000 28.432481 +6.100000 -1.800000 27.842780 +6.100000 -1.700000 27.273079 +6.100000 -1.600000 26.723378 +6.100000 -1.500000 26.193678 +6.100000 -1.400000 25.683977 +6.100000 -1.300000 25.194276 +6.100000 -1.200000 24.724575 +6.100000 -1.100000 24.274874 +6.100000 -1.000000 23.845174 +6.100000 -0.900000 23.435473 +6.100000 -0.800000 23.045772 +6.100000 -0.700000 22.676071 +6.100000 -0.600000 22.326370 +6.100000 -0.500000 21.996670 +6.100000 -0.400000 21.686969 +6.100000 -0.300000 21.397268 +6.100000 -0.200000 21.127567 +6.100000 -0.100000 20.877866 +6.100000 -0.000000 20.648165 +6.100000 0.100000 20.438465 +6.100000 0.200000 20.248764 +6.100000 0.300000 20.079063 +6.100000 0.400000 19.929362 +6.100000 0.500000 19.799661 +6.100000 0.600000 19.689961 +6.100000 0.700000 19.600260 +6.100000 0.800000 19.530559 +6.100000 0.900000 19.480858 +6.100000 1.000000 19.451157 +6.100000 1.100000 19.441457 +6.100000 1.200000 19.451756 +6.100000 1.300000 19.482055 +6.100000 1.400000 19.532354 +6.100000 1.500000 19.602653 +6.100000 1.600000 19.692952 +6.100000 1.700000 19.803252 +6.100000 1.800000 19.933551 +6.100000 1.900000 20.083850 +6.100000 2.000000 20.254149 +6.100000 2.100000 20.444448 +6.100000 2.200000 20.654748 +6.100000 2.300000 20.885047 +6.100000 2.400000 21.135346 +6.100000 2.500000 21.405645 +6.100000 2.600000 21.695944 +6.100000 2.700000 22.006244 +6.100000 2.800000 22.336543 +6.100000 2.900000 22.686842 +6.100000 3.000000 23.057141 +6.100000 3.100000 23.447440 +6.100000 3.200000 23.857740 +6.100000 3.300000 24.288039 +6.100000 3.400000 24.738338 +6.100000 3.500000 25.208637 +6.100000 3.600000 25.698936 +6.100000 3.700000 26.209235 +6.100000 3.800000 26.739535 +6.100000 3.900000 27.289834 +6.100000 4.000000 27.860133 +6.100000 4.100000 28.450432 +6.100000 4.200000 29.060731 +6.100000 4.300000 29.691031 +6.100000 4.400000 30.341330 +6.100000 4.500000 31.011629 +6.100000 4.600000 31.701928 +6.100000 4.700000 32.412227 +6.100000 4.800000 33.142527 +6.100000 4.900000 33.892826 +6.100000 5.000000 34.663125 +6.100000 5.100000 35.453424 +6.100000 5.200000 36.263723 +6.100000 5.300000 37.094022 +6.100000 5.400000 37.944322 +6.100000 5.500000 38.814621 +6.100000 5.600000 39.704920 +6.100000 5.700000 40.615219 +6.100000 5.800000 41.545518 +6.100000 5.900000 42.495818 +6.100000 6.000000 43.466117 +6.100000 6.100000 44.456416 +6.100000 6.200000 45.466715 +6.100000 6.300000 46.497014 +6.100000 6.400000 47.547314 +6.100000 6.500000 48.617613 +6.100000 6.600000 49.707912 +6.100000 6.700000 50.818211 +6.100000 6.800000 51.948510 +6.100000 6.900000 53.098809 +6.100000 7.000000 54.269109 +6.100000 7.100000 55.459408 +6.100000 7.200000 56.669707 +6.100000 7.300000 57.900006 +6.100000 7.400000 59.150305 +6.100000 7.500000 60.420605 +6.100000 7.600000 61.710904 +6.100000 7.700000 63.021203 +6.100000 7.800000 64.351502 +6.100000 7.900000 65.701801 +6.100000 8.000000 67.072101 +6.100000 8.100000 68.462400 +6.100000 8.200000 69.872699 +6.100000 8.300000 71.302998 +6.100000 8.400000 72.753297 +6.100000 8.500000 74.223597 +6.100000 8.600000 75.713896 +6.100000 8.700000 77.224195 +6.100000 8.800000 78.754494 +6.100000 8.900000 80.304793 +6.100000 9.000000 81.875092 +6.100000 9.100000 83.465392 +6.100000 9.200000 85.075691 +6.100000 9.300000 86.705990 +6.100000 9.400000 88.356289 +6.100000 9.500000 90.026588 +6.100000 9.600000 91.716888 +6.100000 9.700000 93.427187 +6.100000 9.800000 95.157486 +6.100000 9.900000 96.907785 +6.100000 10.000000 98.678084 +6.100000 10.100000 100.468384 +6.100000 10.200000 102.278683 +6.100000 10.300000 104.108982 +6.100000 10.400000 105.959281 +6.100000 10.500000 107.829580 +6.100000 10.600000 109.719879 +6.100000 10.700000 111.630179 +6.100000 10.800000 113.560478 +6.100000 10.900000 115.510777 +6.100000 11.000000 117.481076 +6.100000 11.100000 119.471375 +6.100000 11.200000 121.481675 +6.100000 11.300000 123.511974 +6.100000 11.400000 125.562273 +6.100000 11.500000 127.632572 +6.100000 11.600000 129.722871 +6.100000 11.700000 131.833171 +6.100000 11.800000 133.963470 +6.100000 11.900000 136.113769 +6.100000 12.000000 138.284068 +6.100000 12.100000 140.474367 +6.100000 12.200000 142.684666 +6.100000 12.300000 144.914966 +6.100000 12.400000 147.165265 +6.100000 12.500000 149.435564 +6.100000 12.600000 151.725863 +6.100000 12.700000 154.036162 +6.100000 12.800000 156.366462 +6.100000 12.900000 158.716761 +6.100000 13.000000 161.087060 +6.100000 13.100000 163.477359 +6.100000 13.200000 165.887658 +6.100000 13.300000 168.317958 +6.100000 13.400000 170.768257 +6.100000 13.500000 173.238556 +6.100000 13.600000 175.728855 +6.100000 13.700000 178.239154 +6.100000 13.800000 180.769454 +6.100000 13.900000 183.319753 +6.100000 14.000000 185.890052 +6.100000 14.100000 188.480351 +6.100000 14.200000 191.090650 +6.100000 14.300000 193.720949 +6.100000 14.400000 196.371249 +6.100000 14.500000 199.041548 +6.100000 14.600000 201.731847 +6.100000 14.700000 204.442146 +6.100000 14.800000 207.172445 +6.100000 14.900000 209.922745 +6.100000 15.000000 212.693044 + +6.200000 -5.000000 56.757514 +6.200000 -4.900000 55.547865 +6.200000 -4.800000 54.358216 +6.200000 -4.700000 53.188567 +6.200000 -4.600000 52.038918 +6.200000 -4.500000 50.909268 +6.200000 -4.400000 49.799619 +6.200000 -4.300000 48.709970 +6.200000 -4.200000 47.640321 +6.200000 -4.100000 46.590672 +6.200000 -4.000000 45.561022 +6.200000 -3.900000 44.551373 +6.200000 -3.800000 43.561724 +6.200000 -3.700000 42.592075 +6.200000 -3.600000 41.642426 +6.200000 -3.500000 40.712776 +6.200000 -3.400000 39.803127 +6.200000 -3.300000 38.913478 +6.200000 -3.200000 38.043829 +6.200000 -3.100000 37.194179 +6.200000 -3.000000 36.364530 +6.200000 -2.900000 35.554881 +6.200000 -2.800000 34.765232 +6.200000 -2.700000 33.995583 +6.200000 -2.600000 33.245933 +6.200000 -2.500000 32.516284 +6.200000 -2.400000 31.806635 +6.200000 -2.300000 31.116986 +6.200000 -2.200000 30.447337 +6.200000 -2.100000 29.797687 +6.200000 -2.000000 29.168038 +6.200000 -1.900000 28.558389 +6.200000 -1.800000 27.968740 +6.200000 -1.700000 27.399090 +6.200000 -1.600000 26.849441 +6.200000 -1.500000 26.319792 +6.200000 -1.400000 25.810143 +6.200000 -1.300000 25.320494 +6.200000 -1.200000 24.850844 +6.200000 -1.100000 24.401195 +6.200000 -1.000000 23.971546 +6.200000 -0.900000 23.561897 +6.200000 -0.800000 23.172248 +6.200000 -0.700000 22.802598 +6.200000 -0.600000 22.452949 +6.200000 -0.500000 22.123300 +6.200000 -0.400000 21.813651 +6.200000 -0.300000 21.524002 +6.200000 -0.200000 21.254352 +6.200000 -0.100000 21.004703 +6.200000 -0.000000 20.775054 +6.200000 0.100000 20.565405 +6.200000 0.200000 20.375755 +6.200000 0.300000 20.206106 +6.200000 0.400000 20.056457 +6.200000 0.500000 19.926808 +6.200000 0.600000 19.817159 +6.200000 0.700000 19.727509 +6.200000 0.800000 19.657860 +6.200000 0.900000 19.608211 +6.200000 1.000000 19.578562 +6.200000 1.100000 19.568913 +6.200000 1.200000 19.579263 +6.200000 1.300000 19.609614 +6.200000 1.400000 19.659965 +6.200000 1.500000 19.730316 +6.200000 1.600000 19.820666 +6.200000 1.700000 19.931017 +6.200000 1.800000 20.061368 +6.200000 1.900000 20.211719 +6.200000 2.000000 20.382070 +6.200000 2.100000 20.572420 +6.200000 2.200000 20.782771 +6.200000 2.300000 21.013122 +6.200000 2.400000 21.263473 +6.200000 2.500000 21.533824 +6.200000 2.600000 21.824174 +6.200000 2.700000 22.134525 +6.200000 2.800000 22.464876 +6.200000 2.900000 22.815227 +6.200000 3.000000 23.185578 +6.200000 3.100000 23.575928 +6.200000 3.200000 23.986279 +6.200000 3.300000 24.416630 +6.200000 3.400000 24.866981 +6.200000 3.500000 25.337331 +6.200000 3.600000 25.827682 +6.200000 3.700000 26.338033 +6.200000 3.800000 26.868384 +6.200000 3.900000 27.418735 +6.200000 4.000000 27.989085 +6.200000 4.100000 28.579436 +6.200000 4.200000 29.189787 +6.200000 4.300000 29.820138 +6.200000 4.400000 30.470489 +6.200000 4.500000 31.140839 +6.200000 4.600000 31.831190 +6.200000 4.700000 32.541541 +6.200000 4.800000 33.271892 +6.200000 4.900000 34.022242 +6.200000 5.000000 34.792593 +6.200000 5.100000 35.582944 +6.200000 5.200000 36.393295 +6.200000 5.300000 37.223646 +6.200000 5.400000 38.073996 +6.200000 5.500000 38.944347 +6.200000 5.600000 39.834698 +6.200000 5.700000 40.745049 +6.200000 5.800000 41.675400 +6.200000 5.900000 42.625750 +6.200000 6.000000 43.596101 +6.200000 6.100000 44.586452 +6.200000 6.200000 45.596803 +6.200000 6.300000 46.627154 +6.200000 6.400000 47.677504 +6.200000 6.500000 48.747855 +6.200000 6.600000 49.838206 +6.200000 6.700000 50.948557 +6.200000 6.800000 52.078907 +6.200000 6.900000 53.229258 +6.200000 7.000000 54.399609 +6.200000 7.100000 55.589960 +6.200000 7.200000 56.800311 +6.200000 7.300000 58.030661 +6.200000 7.400000 59.281012 +6.200000 7.500000 60.551363 +6.200000 7.600000 61.841714 +6.200000 7.700000 63.152065 +6.200000 7.800000 64.482415 +6.200000 7.900000 65.832766 +6.200000 8.000000 67.203117 +6.200000 8.100000 68.593468 +6.200000 8.200000 70.003818 +6.200000 8.300000 71.434169 +6.200000 8.400000 72.884520 +6.200000 8.500000 74.354871 +6.200000 8.600000 75.845222 +6.200000 8.700000 77.355572 +6.200000 8.800000 78.885923 +6.200000 8.900000 80.436274 +6.200000 9.000000 82.006625 +6.200000 9.100000 83.596976 +6.200000 9.200000 85.207326 +6.200000 9.300000 86.837677 +6.200000 9.400000 88.488028 +6.200000 9.500000 90.158379 +6.200000 9.600000 91.848730 +6.200000 9.700000 93.559080 +6.200000 9.800000 95.289431 +6.200000 9.900000 97.039782 +6.200000 10.000000 98.810133 +6.200000 10.100000 100.600483 +6.200000 10.200000 102.410834 +6.200000 10.300000 104.241185 +6.200000 10.400000 106.091536 +6.200000 10.500000 107.961887 +6.200000 10.600000 109.852237 +6.200000 10.700000 111.762588 +6.200000 10.800000 113.692939 +6.200000 10.900000 115.643290 +6.200000 11.000000 117.613641 +6.200000 11.100000 119.603991 +6.200000 11.200000 121.614342 +6.200000 11.300000 123.644693 +6.200000 11.400000 125.695044 +6.200000 11.500000 127.765395 +6.200000 11.600000 129.855745 +6.200000 11.700000 131.966096 +6.200000 11.800000 134.096447 +6.200000 11.900000 136.246798 +6.200000 12.000000 138.417148 +6.200000 12.100000 140.607499 +6.200000 12.200000 142.817850 +6.200000 12.300000 145.048201 +6.200000 12.400000 147.298552 +6.200000 12.500000 149.568902 +6.200000 12.600000 151.859253 +6.200000 12.700000 154.169604 +6.200000 12.800000 156.499955 +6.200000 12.900000 158.850306 +6.200000 13.000000 161.220656 +6.200000 13.100000 163.611007 +6.200000 13.200000 166.021358 +6.200000 13.300000 168.451709 +6.200000 13.400000 170.902059 +6.200000 13.500000 173.372410 +6.200000 13.600000 175.862761 +6.200000 13.700000 178.373112 +6.200000 13.800000 180.903463 +6.200000 13.900000 183.453813 +6.200000 14.000000 186.024164 +6.200000 14.100000 188.614515 +6.200000 14.200000 191.224866 +6.200000 14.300000 193.855217 +6.200000 14.400000 196.505567 +6.200000 14.500000 199.175918 +6.200000 14.600000 201.866269 +6.200000 14.700000 204.576620 +6.200000 14.800000 207.306971 +6.200000 14.900000 210.057321 +6.200000 15.000000 212.827672 + +6.300000 -5.000000 56.817731 +6.300000 -4.900000 55.607617 +6.300000 -4.800000 54.417502 +6.300000 -4.700000 53.247388 +6.300000 -4.600000 52.097274 +6.300000 -4.500000 50.967159 +6.300000 -4.400000 49.857045 +6.300000 -4.300000 48.766931 +6.300000 -4.200000 47.696816 +6.300000 -4.100000 46.646702 +6.300000 -4.000000 45.616587 +6.300000 -3.900000 44.606473 +6.300000 -3.800000 43.616359 +6.300000 -3.700000 42.646244 +6.300000 -3.600000 41.696130 +6.300000 -3.500000 40.766016 +6.300000 -3.400000 39.855901 +6.300000 -3.300000 38.965787 +6.300000 -3.200000 38.095673 +6.300000 -3.100000 37.245558 +6.300000 -3.000000 36.415444 +6.300000 -2.900000 35.605330 +6.300000 -2.800000 34.815215 +6.300000 -2.700000 34.045101 +6.300000 -2.600000 33.294987 +6.300000 -2.500000 32.564872 +6.300000 -2.400000 31.854758 +6.300000 -2.300000 31.164644 +6.300000 -2.200000 30.494529 +6.300000 -2.100000 29.844415 +6.300000 -2.000000 29.214300 +6.300000 -1.900000 28.604186 +6.300000 -1.800000 28.014072 +6.300000 -1.700000 27.443957 +6.300000 -1.600000 26.893843 +6.300000 -1.500000 26.363729 +6.300000 -1.400000 25.853614 +6.300000 -1.300000 25.363500 +6.300000 -1.200000 24.893386 +6.300000 -1.100000 24.443271 +6.300000 -1.000000 24.013157 +6.300000 -0.900000 23.603043 +6.300000 -0.800000 23.212928 +6.300000 -0.700000 22.842814 +6.300000 -0.600000 22.492700 +6.300000 -0.500000 22.162585 +6.300000 -0.400000 21.852471 +6.300000 -0.300000 21.562356 +6.300000 -0.200000 21.292242 +6.300000 -0.100000 21.042128 +6.300000 -0.000000 20.812013 +6.300000 0.100000 20.601899 +6.300000 0.200000 20.411785 +6.300000 0.300000 20.241670 +6.300000 0.400000 20.091556 +6.300000 0.500000 19.961442 +6.300000 0.600000 19.851327 +6.300000 0.700000 19.761213 +6.300000 0.800000 19.691099 +6.300000 0.900000 19.640984 +6.300000 1.000000 19.610870 +6.300000 1.100000 19.600756 +6.300000 1.200000 19.610641 +6.300000 1.300000 19.640527 +6.300000 1.400000 19.690413 +6.300000 1.500000 19.760298 +6.300000 1.600000 19.850184 +6.300000 1.700000 19.960069 +6.300000 1.800000 20.089955 +6.300000 1.900000 20.239841 +6.300000 2.000000 20.409726 +6.300000 2.100000 20.599612 +6.300000 2.200000 20.809498 +6.300000 2.300000 21.039383 +6.300000 2.400000 21.289269 +6.300000 2.500000 21.559155 +6.300000 2.600000 21.849040 +6.300000 2.700000 22.158926 +6.300000 2.800000 22.488812 +6.300000 2.900000 22.838697 +6.300000 3.000000 23.208583 +6.300000 3.100000 23.598469 +6.300000 3.200000 24.008354 +6.300000 3.300000 24.438240 +6.300000 3.400000 24.888126 +6.300000 3.500000 25.358011 +6.300000 3.600000 25.847897 +6.300000 3.700000 26.357782 +6.300000 3.800000 26.887668 +6.300000 3.900000 27.437554 +6.300000 4.000000 28.007439 +6.300000 4.100000 28.597325 +6.300000 4.200000 29.207211 +6.300000 4.300000 29.837096 +6.300000 4.400000 30.486982 +6.300000 4.500000 31.156868 +6.300000 4.600000 31.846753 +6.300000 4.700000 32.556639 +6.300000 4.800000 33.286525 +6.300000 4.900000 34.036410 +6.300000 5.000000 34.806296 +6.300000 5.100000 35.596182 +6.300000 5.200000 36.406067 +6.300000 5.300000 37.235953 +6.300000 5.400000 38.085839 +6.300000 5.500000 38.955724 +6.300000 5.600000 39.845610 +6.300000 5.700000 40.755495 +6.300000 5.800000 41.685381 +6.300000 5.900000 42.635267 +6.300000 6.000000 43.605152 +6.300000 6.100000 44.595038 +6.300000 6.200000 45.604924 +6.300000 6.300000 46.634809 +6.300000 6.400000 47.684695 +6.300000 6.500000 48.754581 +6.300000 6.600000 49.844466 +6.300000 6.700000 50.954352 +6.300000 6.800000 52.084238 +6.300000 6.900000 53.234123 +6.300000 7.000000 54.404009 +6.300000 7.100000 55.593895 +6.300000 7.200000 56.803780 +6.300000 7.300000 58.033666 +6.300000 7.400000 59.283551 +6.300000 7.500000 60.553437 +6.300000 7.600000 61.843323 +6.300000 7.700000 63.153208 +6.300000 7.800000 64.483094 +6.300000 7.900000 65.832980 +6.300000 8.000000 67.202865 +6.300000 8.100000 68.592751 +6.300000 8.200000 70.002637 +6.300000 8.300000 71.432522 +6.300000 8.400000 72.882408 +6.300000 8.500000 74.352294 +6.300000 8.600000 75.842179 +6.300000 8.700000 77.352065 +6.300000 8.800000 78.881951 +6.300000 8.900000 80.431836 +6.300000 9.000000 82.001722 +6.300000 9.100000 83.591608 +6.300000 9.200000 85.201493 +6.300000 9.300000 86.831379 +6.300000 9.400000 88.481264 +6.300000 9.500000 90.151150 +6.300000 9.600000 91.841036 +6.300000 9.700000 93.550921 +6.300000 9.800000 95.280807 +6.300000 9.900000 97.030693 +6.300000 10.000000 98.800578 +6.300000 10.100000 100.590464 +6.300000 10.200000 102.400350 +6.300000 10.300000 104.230235 +6.300000 10.400000 106.080121 +6.300000 10.500000 107.950007 +6.300000 10.600000 109.839892 +6.300000 10.700000 111.749778 +6.300000 10.800000 113.679664 +6.300000 10.900000 115.629549 +6.300000 11.000000 117.599435 +6.300000 11.100000 119.589321 +6.300000 11.200000 121.599206 +6.300000 11.300000 123.629092 +6.300000 11.400000 125.678977 +6.300000 11.500000 127.748863 +6.300000 11.600000 129.838749 +6.300000 11.700000 131.948634 +6.300000 11.800000 134.078520 +6.300000 11.900000 136.228406 +6.300000 12.000000 138.398291 +6.300000 12.100000 140.588177 +6.300000 12.200000 142.798063 +6.300000 12.300000 145.027948 +6.300000 12.400000 147.277834 +6.300000 12.500000 149.547720 +6.300000 12.600000 151.837605 +6.300000 12.700000 154.147491 +6.300000 12.800000 156.477377 +6.300000 12.900000 158.827262 +6.300000 13.000000 161.197148 +6.300000 13.100000 163.587034 +6.300000 13.200000 165.996919 +6.300000 13.300000 168.426805 +6.300000 13.400000 170.876690 +6.300000 13.500000 173.346576 +6.300000 13.600000 175.836462 +6.300000 13.700000 178.346347 +6.300000 13.800000 180.876233 +6.300000 13.900000 183.426119 +6.300000 14.000000 185.996004 +6.300000 14.100000 188.585890 +6.300000 14.200000 191.195776 +6.300000 14.300000 193.825661 +6.300000 14.400000 196.475547 +6.300000 14.500000 199.145433 +6.300000 14.600000 201.835318 +6.300000 14.700000 204.545204 +6.300000 14.800000 207.275090 +6.300000 14.900000 210.024975 +6.300000 15.000000 212.794861 + +6.400000 -5.000000 56.813573 +6.400000 -4.900000 55.602477 +6.400000 -4.800000 54.411381 +6.400000 -4.700000 53.240285 +6.400000 -4.600000 52.089188 +6.400000 -4.500000 50.958092 +6.400000 -4.400000 49.846996 +6.400000 -4.300000 48.755900 +6.400000 -4.200000 47.684804 +6.400000 -4.100000 46.633707 +6.400000 -4.000000 45.602611 +6.400000 -3.900000 44.591515 +6.400000 -3.800000 43.600419 +6.400000 -3.700000 42.629322 +6.400000 -3.600000 41.678226 +6.400000 -3.500000 40.747130 +6.400000 -3.400000 39.836034 +6.400000 -3.300000 38.944938 +6.400000 -3.200000 38.073841 +6.400000 -3.100000 37.222745 +6.400000 -3.000000 36.391649 +6.400000 -2.900000 35.580553 +6.400000 -2.800000 34.789456 +6.400000 -2.700000 34.018360 +6.400000 -2.600000 33.267264 +6.400000 -2.500000 32.536168 +6.400000 -2.400000 31.825071 +6.400000 -2.300000 31.133975 +6.400000 -2.200000 30.462879 +6.400000 -2.100000 29.811783 +6.400000 -2.000000 29.180687 +6.400000 -1.900000 28.569590 +6.400000 -1.800000 27.978494 +6.400000 -1.700000 27.407398 +6.400000 -1.600000 26.856302 +6.400000 -1.500000 26.325205 +6.400000 -1.400000 25.814109 +6.400000 -1.300000 25.323013 +6.400000 -1.200000 24.851917 +6.400000 -1.100000 24.400821 +6.400000 -1.000000 23.969724 +6.400000 -0.900000 23.558628 +6.400000 -0.800000 23.167532 +6.400000 -0.700000 22.796436 +6.400000 -0.600000 22.445339 +6.400000 -0.500000 22.114243 +6.400000 -0.400000 21.803147 +6.400000 -0.300000 21.512051 +6.400000 -0.200000 21.240954 +6.400000 -0.100000 20.989858 +6.400000 -0.000000 20.758762 +6.400000 0.100000 20.547666 +6.400000 0.200000 20.356570 +6.400000 0.300000 20.185473 +6.400000 0.400000 20.034377 +6.400000 0.500000 19.903281 +6.400000 0.600000 19.792185 +6.400000 0.700000 19.701088 +6.400000 0.800000 19.629992 +6.400000 0.900000 19.578896 +6.400000 1.000000 19.547800 +6.400000 1.100000 19.536704 +6.400000 1.200000 19.545607 +6.400000 1.300000 19.574511 +6.400000 1.400000 19.623415 +6.400000 1.500000 19.692319 +6.400000 1.600000 19.781222 +6.400000 1.700000 19.890126 +6.400000 1.800000 20.019030 +6.400000 1.900000 20.167934 +6.400000 2.000000 20.336837 +6.400000 2.100000 20.525741 +6.400000 2.200000 20.734645 +6.400000 2.300000 20.963549 +6.400000 2.400000 21.212453 +6.400000 2.500000 21.481356 +6.400000 2.600000 21.770260 +6.400000 2.700000 22.079164 +6.400000 2.800000 22.408068 +6.400000 2.900000 22.756971 +6.400000 3.000000 23.125875 +6.400000 3.100000 23.514779 +6.400000 3.200000 23.923683 +6.400000 3.300000 24.352587 +6.400000 3.400000 24.801490 +6.400000 3.500000 25.270394 +6.400000 3.600000 25.759298 +6.400000 3.700000 26.268202 +6.400000 3.800000 26.797105 +6.400000 3.900000 27.346009 +6.400000 4.000000 27.914913 +6.400000 4.100000 28.503817 +6.400000 4.200000 29.112720 +6.400000 4.300000 29.741624 +6.400000 4.400000 30.390528 +6.400000 4.500000 31.059432 +6.400000 4.600000 31.748336 +6.400000 4.700000 32.457239 +6.400000 4.800000 33.186143 +6.400000 4.900000 33.935047 +6.400000 5.000000 34.703951 +6.400000 5.100000 35.492854 +6.400000 5.200000 36.301758 +6.400000 5.300000 37.130662 +6.400000 5.400000 37.979566 +6.400000 5.500000 38.848470 +6.400000 5.600000 39.737373 +6.400000 5.700000 40.646277 +6.400000 5.800000 41.575181 +6.400000 5.900000 42.524085 +6.400000 6.000000 43.492988 +6.400000 6.100000 44.481892 +6.400000 6.200000 45.490796 +6.400000 6.300000 46.519700 +6.400000 6.400000 47.568603 +6.400000 6.500000 48.637507 +6.400000 6.600000 49.726411 +6.400000 6.700000 50.835315 +6.400000 6.800000 51.964219 +6.400000 6.900000 53.113122 +6.400000 7.000000 54.282026 +6.400000 7.100000 55.470930 +6.400000 7.200000 56.679834 +6.400000 7.300000 57.908737 +6.400000 7.400000 59.157641 +6.400000 7.500000 60.426545 +6.400000 7.600000 61.715449 +6.400000 7.700000 63.024353 +6.400000 7.800000 64.353256 +6.400000 7.900000 65.702160 +6.400000 8.000000 67.071064 +6.400000 8.100000 68.459968 +6.400000 8.200000 69.868871 +6.400000 8.300000 71.297775 +6.400000 8.400000 72.746679 +6.400000 8.500000 74.215583 +6.400000 8.600000 75.704486 +6.400000 8.700000 77.213390 +6.400000 8.800000 78.742294 +6.400000 8.900000 80.291198 +6.400000 9.000000 81.860102 +6.400000 9.100000 83.449005 +6.400000 9.200000 85.057909 +6.400000 9.300000 86.686813 +6.400000 9.400000 88.335717 +6.400000 9.500000 90.004620 +6.400000 9.600000 91.693524 +6.400000 9.700000 93.402428 +6.400000 9.800000 95.131332 +6.400000 9.900000 96.880236 +6.400000 10.000000 98.649139 +6.400000 10.100000 100.438043 +6.400000 10.200000 102.246947 +6.400000 10.300000 104.075851 +6.400000 10.400000 105.924754 +6.400000 10.500000 107.793658 +6.400000 10.600000 109.682562 +6.400000 10.700000 111.591466 +6.400000 10.800000 113.520369 +6.400000 10.900000 115.469273 +6.400000 11.000000 117.438177 +6.400000 11.100000 119.427081 +6.400000 11.200000 121.435985 +6.400000 11.300000 123.464888 +6.400000 11.400000 125.513792 +6.400000 11.500000 127.582696 +6.400000 11.600000 129.671600 +6.400000 11.700000 131.780503 +6.400000 11.800000 133.909407 +6.400000 11.900000 136.058311 +6.400000 12.000000 138.227215 +6.400000 12.100000 140.416119 +6.400000 12.200000 142.625022 +6.400000 12.300000 144.853926 +6.400000 12.400000 147.102830 +6.400000 12.500000 149.371734 +6.400000 12.600000 151.660637 +6.400000 12.700000 153.969541 +6.400000 12.800000 156.298445 +6.400000 12.900000 158.647349 +6.400000 13.000000 161.016252 +6.400000 13.100000 163.405156 +6.400000 13.200000 165.814060 +6.400000 13.300000 168.242964 +6.400000 13.400000 170.691868 +6.400000 13.500000 173.160771 +6.400000 13.600000 175.649675 +6.400000 13.700000 178.158579 +6.400000 13.800000 180.687483 +6.400000 13.900000 183.236386 +6.400000 14.000000 185.805290 +6.400000 14.100000 188.394194 +6.400000 14.200000 191.003098 +6.400000 14.300000 193.632001 +6.400000 14.400000 196.280905 +6.400000 14.500000 198.949809 +6.400000 14.600000 201.638713 +6.400000 14.700000 204.347617 +6.400000 14.800000 207.076520 +6.400000 14.900000 209.825424 +6.400000 15.000000 212.594328 + +6.500000 -5.000000 56.745758 +6.500000 -4.900000 55.533163 +6.500000 -4.800000 54.340568 +6.500000 -4.700000 53.167974 +6.500000 -4.600000 52.015379 +6.500000 -4.500000 50.882784 +6.500000 -4.400000 49.770189 +6.500000 -4.300000 48.677594 +6.500000 -4.200000 47.604999 +6.500000 -4.100000 46.552405 +6.500000 -4.000000 45.519810 +6.500000 -3.900000 44.507215 +6.500000 -3.800000 43.514620 +6.500000 -3.700000 42.542025 +6.500000 -3.600000 41.589430 +6.500000 -3.500000 40.656835 +6.500000 -3.400000 39.744241 +6.500000 -3.300000 38.851646 +6.500000 -3.200000 37.979051 +6.500000 -3.100000 37.126456 +6.500000 -3.000000 36.293861 +6.500000 -2.900000 35.481266 +6.500000 -2.800000 34.688672 +6.500000 -2.700000 33.916077 +6.500000 -2.600000 33.163482 +6.500000 -2.500000 32.430887 +6.500000 -2.400000 31.718292 +6.500000 -2.300000 31.025697 +6.500000 -2.200000 30.353103 +6.500000 -2.100000 29.700508 +6.500000 -2.000000 29.067913 +6.500000 -1.900000 28.455318 +6.500000 -1.800000 27.862723 +6.500000 -1.700000 27.290128 +6.500000 -1.600000 26.737533 +6.500000 -1.500000 26.204939 +6.500000 -1.400000 25.692344 +6.500000 -1.300000 25.199749 +6.500000 -1.200000 24.727154 +6.500000 -1.100000 24.274559 +6.500000 -1.000000 23.841964 +6.500000 -0.900000 23.429370 +6.500000 -0.800000 23.036775 +6.500000 -0.700000 22.664180 +6.500000 -0.600000 22.311585 +6.500000 -0.500000 21.978990 +6.500000 -0.400000 21.666395 +6.500000 -0.300000 21.373801 +6.500000 -0.200000 21.101206 +6.500000 -0.100000 20.848611 +6.500000 -0.000000 20.616016 +6.500000 0.100000 20.403421 +6.500000 0.200000 20.210826 +6.500000 0.300000 20.038231 +6.500000 0.400000 19.885637 +6.500000 0.500000 19.753042 +6.500000 0.600000 19.640447 +6.500000 0.700000 19.547852 +6.500000 0.800000 19.475257 +6.500000 0.900000 19.422662 +6.500000 1.000000 19.390068 +6.500000 1.100000 19.377473 +6.500000 1.200000 19.384878 +6.500000 1.300000 19.412283 +6.500000 1.400000 19.459688 +6.500000 1.500000 19.527093 +6.500000 1.600000 19.614499 +6.500000 1.700000 19.721904 +6.500000 1.800000 19.849309 +6.500000 1.900000 19.996714 +6.500000 2.000000 20.164119 +6.500000 2.100000 20.351524 +6.500000 2.200000 20.558929 +6.500000 2.300000 20.786335 +6.500000 2.400000 21.033740 +6.500000 2.500000 21.301145 +6.500000 2.600000 21.588550 +6.500000 2.700000 21.895955 +6.500000 2.800000 22.223360 +6.500000 2.900000 22.570766 +6.500000 3.000000 22.938171 +6.500000 3.100000 23.325576 +6.500000 3.200000 23.732981 +6.500000 3.300000 24.160386 +6.500000 3.400000 24.607791 +6.500000 3.500000 25.075197 +6.500000 3.600000 25.562602 +6.500000 3.700000 26.070007 +6.500000 3.800000 26.597412 +6.500000 3.900000 27.144817 +6.500000 4.000000 27.712222 +6.500000 4.100000 28.299627 +6.500000 4.200000 28.907033 +6.500000 4.300000 29.534438 +6.500000 4.400000 30.181843 +6.500000 4.500000 30.849248 +6.500000 4.600000 31.536653 +6.500000 4.700000 32.244058 +6.500000 4.800000 32.971464 +6.500000 4.900000 33.718869 +6.500000 5.000000 34.486274 +6.500000 5.100000 35.273679 +6.500000 5.200000 36.081084 +6.500000 5.300000 36.908489 +6.500000 5.400000 37.755895 +6.500000 5.500000 38.623300 +6.500000 5.600000 39.510705 +6.500000 5.700000 40.418110 +6.500000 5.800000 41.345515 +6.500000 5.900000 42.292920 +6.500000 6.000000 43.260325 +6.500000 6.100000 44.247731 +6.500000 6.200000 45.255136 +6.500000 6.300000 46.282541 +6.500000 6.400000 47.329946 +6.500000 6.500000 48.397351 +6.500000 6.600000 49.484756 +6.500000 6.700000 50.592162 +6.500000 6.800000 51.719567 +6.500000 6.900000 52.866972 +6.500000 7.000000 54.034377 +6.500000 7.100000 55.221782 +6.500000 7.200000 56.429187 +6.500000 7.300000 57.656593 +6.500000 7.400000 58.903998 +6.500000 7.500000 60.171403 +6.500000 7.600000 61.458808 +6.500000 7.700000 62.766213 +6.500000 7.800000 64.093618 +6.500000 7.900000 65.441023 +6.500000 8.000000 66.808429 +6.500000 8.100000 68.195834 +6.500000 8.200000 69.603239 +6.500000 8.300000 71.030644 +6.500000 8.400000 72.478049 +6.500000 8.500000 73.945454 +6.500000 8.600000 75.432860 +6.500000 8.700000 76.940265 +6.500000 8.800000 78.467670 +6.500000 8.900000 80.015075 +6.500000 9.000000 81.582480 +6.500000 9.100000 83.169885 +6.500000 9.200000 84.777291 +6.500000 9.300000 86.404696 +6.500000 9.400000 88.052101 +6.500000 9.500000 89.719506 +6.500000 9.600000 91.406911 +6.500000 9.700000 93.114316 +6.500000 9.800000 94.841721 +6.500000 9.900000 96.589127 +6.500000 10.000000 98.356532 +6.500000 10.100000 100.143937 +6.500000 10.200000 101.951342 +6.500000 10.300000 103.778747 +6.500000 10.400000 105.626152 +6.500000 10.500000 107.493558 +6.500000 10.600000 109.380963 +6.500000 10.700000 111.288368 +6.500000 10.800000 113.215773 +6.500000 10.900000 115.163178 +6.500000 11.000000 117.130583 +6.500000 11.100000 119.117989 +6.500000 11.200000 121.125394 +6.500000 11.300000 123.152799 +6.500000 11.400000 125.200204 +6.500000 11.500000 127.267609 +6.500000 11.600000 129.355014 +6.500000 11.700000 131.462419 +6.500000 11.800000 133.589825 +6.500000 11.900000 135.737230 +6.500000 12.000000 137.904635 +6.500000 12.100000 140.092040 +6.500000 12.200000 142.299445 +6.500000 12.300000 144.526850 +6.500000 12.400000 146.774256 +6.500000 12.500000 149.041661 +6.500000 12.600000 151.329066 +6.500000 12.700000 153.636471 +6.500000 12.800000 155.963876 +6.500000 12.900000 158.311281 +6.500000 13.000000 160.678687 +6.500000 13.100000 163.066092 +6.500000 13.200000 165.473497 +6.500000 13.300000 167.900902 +6.500000 13.400000 170.348307 +6.500000 13.500000 172.815712 +6.500000 13.600000 175.303117 +6.500000 13.700000 177.810523 +6.500000 13.800000 180.337928 +6.500000 13.900000 182.885333 +6.500000 14.000000 185.452738 +6.500000 14.100000 188.040143 +6.500000 14.200000 190.647548 +6.500000 14.300000 193.274954 +6.500000 14.400000 195.922359 +6.500000 14.500000 198.589764 +6.500000 14.600000 201.277169 +6.500000 14.700000 203.984574 +6.500000 14.800000 206.711979 +6.500000 14.900000 209.459385 +6.500000 15.000000 212.226790 + +6.600000 -5.000000 56.615994 +6.600000 -4.900000 55.401383 +6.600000 -4.800000 54.206773 +6.600000 -4.700000 53.032163 +6.600000 -4.600000 51.877553 +6.600000 -4.500000 50.742943 +6.600000 -4.400000 49.628332 +6.600000 -4.300000 48.533722 +6.600000 -4.200000 47.459112 +6.600000 -4.100000 46.404502 +6.600000 -4.000000 45.369892 +6.600000 -3.900000 44.355281 +6.600000 -3.800000 43.360671 +6.600000 -3.700000 42.386061 +6.600000 -3.600000 41.431451 +6.600000 -3.500000 40.496841 +6.600000 -3.400000 39.582230 +6.600000 -3.300000 38.687620 +6.600000 -3.200000 37.813010 +6.600000 -3.100000 36.958400 +6.600000 -3.000000 36.123790 +6.600000 -2.900000 35.309180 +6.600000 -2.800000 34.514569 +6.600000 -2.700000 33.739959 +6.600000 -2.600000 32.985349 +6.600000 -2.500000 32.250739 +6.600000 -2.400000 31.536129 +6.600000 -2.300000 30.841518 +6.600000 -2.200000 30.166908 +6.600000 -2.100000 29.512298 +6.600000 -2.000000 28.877688 +6.600000 -1.900000 28.263078 +6.600000 -1.800000 27.668467 +6.600000 -1.700000 27.093857 +6.600000 -1.600000 26.539247 +6.600000 -1.500000 26.004637 +6.600000 -1.400000 25.490027 +6.600000 -1.300000 24.995416 +6.600000 -1.200000 24.520806 +6.600000 -1.100000 24.066196 +6.600000 -1.000000 23.631586 +6.600000 -0.900000 23.216976 +6.600000 -0.800000 22.822365 +6.600000 -0.700000 22.447755 +6.600000 -0.600000 22.093145 +6.600000 -0.500000 21.758535 +6.600000 -0.400000 21.443925 +6.600000 -0.300000 21.149314 +6.600000 -0.200000 20.874704 +6.600000 -0.100000 20.620094 +6.600000 -0.000000 20.385484 +6.600000 0.100000 20.170874 +6.600000 0.200000 19.976263 +6.600000 0.300000 19.801653 +6.600000 0.400000 19.647043 +6.600000 0.500000 19.512433 +6.600000 0.600000 19.397823 +6.600000 0.700000 19.303213 +6.600000 0.800000 19.228602 +6.600000 0.900000 19.173992 +6.600000 1.000000 19.139382 +6.600000 1.100000 19.124772 +6.600000 1.200000 19.130162 +6.600000 1.300000 19.155551 +6.600000 1.400000 19.200941 +6.600000 1.500000 19.266331 +6.600000 1.600000 19.351721 +6.600000 1.700000 19.457111 +6.600000 1.800000 19.582500 +6.600000 1.900000 19.727890 +6.600000 2.000000 19.893280 +6.600000 2.100000 20.078670 +6.600000 2.200000 20.284060 +6.600000 2.300000 20.509449 +6.600000 2.400000 20.754839 +6.600000 2.500000 21.020229 +6.600000 2.600000 21.305619 +6.600000 2.700000 21.611009 +6.600000 2.800000 21.936398 +6.600000 2.900000 22.281788 +6.600000 3.000000 22.647178 +6.600000 3.100000 23.032568 +6.600000 3.200000 23.437958 +6.600000 3.300000 23.863347 +6.600000 3.400000 24.308737 +6.600000 3.500000 24.774127 +6.600000 3.600000 25.259517 +6.600000 3.700000 25.764907 +6.600000 3.800000 26.290296 +6.600000 3.900000 26.835686 +6.600000 4.000000 27.401076 +6.600000 4.100000 27.986466 +6.600000 4.200000 28.591856 +6.600000 4.300000 29.217245 +6.600000 4.400000 29.862635 +6.600000 4.500000 30.528025 +6.600000 4.600000 31.213415 +6.600000 4.700000 31.918805 +6.600000 4.800000 32.644195 +6.600000 4.900000 33.389584 +6.600000 5.000000 34.154974 +6.600000 5.100000 34.940364 +6.600000 5.200000 35.745754 +6.600000 5.300000 36.571144 +6.600000 5.400000 37.416533 +6.600000 5.500000 38.281923 +6.600000 5.600000 39.167313 +6.600000 5.700000 40.072703 +6.600000 5.800000 40.998093 +6.600000 5.900000 41.943482 +6.600000 6.000000 42.908872 +6.600000 6.100000 43.894262 +6.600000 6.200000 44.899652 +6.600000 6.300000 45.925042 +6.600000 6.400000 46.970431 +6.600000 6.500000 48.035821 +6.600000 6.600000 49.121211 +6.600000 6.700000 50.226601 +6.600000 6.800000 51.351991 +6.600000 6.900000 52.497380 +6.600000 7.000000 53.662770 +6.600000 7.100000 54.848160 +6.600000 7.200000 56.053550 +6.600000 7.300000 57.278940 +6.600000 7.400000 58.524329 +6.600000 7.500000 59.789719 +6.600000 7.600000 61.075109 +6.600000 7.700000 62.380499 +6.600000 7.800000 63.705889 +6.600000 7.900000 65.051278 +6.600000 8.000000 66.416668 +6.600000 8.100000 67.802058 +6.600000 8.200000 69.207448 +6.600000 8.300000 70.632838 +6.600000 8.400000 72.078228 +6.600000 8.500000 73.543617 +6.600000 8.600000 75.029007 +6.600000 8.700000 76.534397 +6.600000 8.800000 78.059787 +6.600000 8.900000 79.605177 +6.600000 9.000000 81.170566 +6.600000 9.100000 82.755956 +6.600000 9.200000 84.361346 +6.600000 9.300000 85.986736 +6.600000 9.400000 87.632126 +6.600000 9.500000 89.297515 +6.600000 9.600000 90.982905 +6.600000 9.700000 92.688295 +6.600000 9.800000 94.413685 +6.600000 9.900000 96.159075 +6.600000 10.000000 97.924464 +6.600000 10.100000 99.709854 +6.600000 10.200000 101.515244 +6.600000 10.300000 103.340634 +6.600000 10.400000 105.186024 +6.600000 10.500000 107.051413 +6.600000 10.600000 108.936803 +6.600000 10.700000 110.842193 +6.600000 10.800000 112.767583 +6.600000 10.900000 114.712973 +6.600000 11.000000 116.678362 +6.600000 11.100000 118.663752 +6.600000 11.200000 120.669142 +6.600000 11.300000 122.694532 +6.600000 11.400000 124.739922 +6.600000 11.500000 126.805311 +6.600000 11.600000 128.890701 +6.600000 11.700000 130.996091 +6.600000 11.800000 133.121481 +6.600000 11.900000 135.266871 +6.600000 12.000000 137.432260 +6.600000 12.100000 139.617650 +6.600000 12.200000 141.823040 +6.600000 12.300000 144.048430 +6.600000 12.400000 146.293820 +6.600000 12.500000 148.559210 +6.600000 12.600000 150.844599 +6.600000 12.700000 153.149989 +6.600000 12.800000 155.475379 +6.600000 12.900000 157.820769 +6.600000 13.000000 160.186159 +6.600000 13.100000 162.571548 +6.600000 13.200000 164.976938 +6.600000 13.300000 167.402328 +6.600000 13.400000 169.847718 +6.600000 13.500000 172.313108 +6.600000 13.600000 174.798497 +6.600000 13.700000 177.303887 +6.600000 13.800000 179.829277 +6.600000 13.900000 182.374667 +6.600000 14.000000 184.940057 +6.600000 14.100000 187.525446 +6.600000 14.200000 190.130836 +6.600000 14.300000 192.756226 +6.600000 14.400000 195.401616 +6.600000 14.500000 198.067006 +6.600000 14.600000 200.752395 +6.600000 14.700000 203.457785 +6.600000 14.800000 206.183175 +6.600000 14.900000 208.928565 +6.600000 15.000000 211.693955 + +6.700000 -5.000000 56.426965 +6.700000 -4.900000 55.209822 +6.700000 -4.800000 54.012680 +6.700000 -4.700000 52.835538 +6.700000 -4.600000 51.678396 +6.700000 -4.500000 50.541253 +6.700000 -4.400000 49.424111 +6.700000 -4.300000 48.326969 +6.700000 -4.200000 47.249826 +6.700000 -4.100000 46.192684 +6.700000 -4.000000 45.155542 +6.700000 -3.900000 44.138400 +6.700000 -3.800000 43.141257 +6.700000 -3.700000 42.164115 +6.700000 -3.600000 41.206973 +6.700000 -3.500000 40.269830 +6.700000 -3.400000 39.352688 +6.700000 -3.300000 38.455546 +6.700000 -3.200000 37.578404 +6.700000 -3.100000 36.721261 +6.700000 -3.000000 35.884119 +6.700000 -2.900000 35.066977 +6.700000 -2.800000 34.269834 +6.700000 -2.700000 33.492692 +6.700000 -2.600000 32.735550 +6.700000 -2.500000 31.998408 +6.700000 -2.400000 31.281265 +6.700000 -2.300000 30.584123 +6.700000 -2.200000 29.906981 +6.700000 -2.100000 29.249838 +6.700000 -2.000000 28.612696 +6.700000 -1.900000 27.995554 +6.700000 -1.800000 27.398412 +6.700000 -1.700000 26.821269 +6.700000 -1.600000 26.264127 +6.700000 -1.500000 25.726985 +6.700000 -1.400000 25.209842 +6.700000 -1.300000 24.712700 +6.700000 -1.200000 24.235558 +6.700000 -1.100000 23.778416 +6.700000 -1.000000 23.341273 +6.700000 -0.900000 22.924131 +6.700000 -0.800000 22.526989 +6.700000 -0.700000 22.149846 +6.700000 -0.600000 21.792704 +6.700000 -0.500000 21.455562 +6.700000 -0.400000 21.138420 +6.700000 -0.300000 20.841277 +6.700000 -0.200000 20.564135 +6.700000 -0.100000 20.306993 +6.700000 -0.000000 20.069850 +6.700000 0.100000 19.852708 +6.700000 0.200000 19.655566 +6.700000 0.300000 19.478424 +6.700000 0.400000 19.321281 +6.700000 0.500000 19.184139 +6.700000 0.600000 19.066997 +6.700000 0.700000 18.969854 +6.700000 0.800000 18.892712 +6.700000 0.900000 18.835570 +6.700000 1.000000 18.798428 +6.700000 1.100000 18.781285 +6.700000 1.200000 18.784143 +6.700000 1.300000 18.807001 +6.700000 1.400000 18.849858 +6.700000 1.500000 18.912716 +6.700000 1.600000 18.995574 +6.700000 1.700000 19.098432 +6.700000 1.800000 19.221289 +6.700000 1.900000 19.364147 +6.700000 2.000000 19.527005 +6.700000 2.100000 19.709862 +6.700000 2.200000 19.912720 +6.700000 2.300000 20.135578 +6.700000 2.400000 20.378436 +6.700000 2.500000 20.641293 +6.700000 2.600000 20.924151 +6.700000 2.700000 21.227009 +6.700000 2.800000 21.549866 +6.700000 2.900000 21.892724 +6.700000 3.000000 22.255582 +6.700000 3.100000 22.638440 +6.700000 3.200000 23.041297 +6.700000 3.300000 23.464155 +6.700000 3.400000 23.907013 +6.700000 3.500000 24.369870 +6.700000 3.600000 24.852728 +6.700000 3.700000 25.355586 +6.700000 3.800000 25.878444 +6.700000 3.900000 26.421301 +6.700000 4.000000 26.984159 +6.700000 4.100000 27.567017 +6.700000 4.200000 28.169874 +6.700000 4.300000 28.792732 +6.700000 4.400000 29.435590 +6.700000 4.500000 30.098448 +6.700000 4.600000 30.781305 +6.700000 4.700000 31.484163 +6.700000 4.800000 32.207021 +6.700000 4.900000 32.949878 +6.700000 5.000000 33.712736 +6.700000 5.100000 34.495594 +6.700000 5.200000 35.298452 +6.700000 5.300000 36.121309 +6.700000 5.400000 36.964167 +6.700000 5.500000 37.827025 +6.700000 5.600000 38.709882 +6.700000 5.700000 39.612740 +6.700000 5.800000 40.535598 +6.700000 5.900000 41.478456 +6.700000 6.000000 42.441313 +6.700000 6.100000 43.424171 +6.700000 6.200000 44.427029 +6.700000 6.300000 45.449886 +6.700000 6.400000 46.492744 +6.700000 6.500000 47.555602 +6.700000 6.600000 48.638460 +6.700000 6.700000 49.741317 +6.700000 6.800000 50.864175 +6.700000 6.900000 52.007033 +6.700000 7.000000 53.169890 +6.700000 7.100000 54.352748 +6.700000 7.200000 55.555606 +6.700000 7.300000 56.778464 +6.700000 7.400000 58.021321 +6.700000 7.500000 59.284179 +6.700000 7.600000 60.567037 +6.700000 7.700000 61.869894 +6.700000 7.800000 63.192752 +6.700000 7.900000 64.535610 +6.700000 8.000000 65.898468 +6.700000 8.100000 67.281325 +6.700000 8.200000 68.684183 +6.700000 8.300000 70.107041 +6.700000 8.400000 71.549898 +6.700000 8.500000 73.012756 +6.700000 8.600000 74.495614 +6.700000 8.700000 75.998472 +6.700000 8.800000 77.521329 +6.700000 8.900000 79.064187 +6.700000 9.000000 80.627045 +6.700000 9.100000 82.209902 +6.700000 9.200000 83.812760 +6.700000 9.300000 85.435618 +6.700000 9.400000 87.078476 +6.700000 9.500000 88.741333 +6.700000 9.600000 90.424191 +6.700000 9.700000 92.127049 +6.700000 9.800000 93.849906 +6.700000 9.900000 95.592764 +6.700000 10.000000 97.355622 +6.700000 10.100000 99.138480 +6.700000 10.200000 100.941337 +6.700000 10.300000 102.764195 +6.700000 10.400000 104.607053 +6.700000 10.500000 106.469910 +6.700000 10.600000 108.352768 +6.700000 10.700000 110.255626 +6.700000 10.800000 112.178484 +6.700000 10.900000 114.121341 +6.700000 11.000000 116.084199 +6.700000 11.100000 118.067057 +6.700000 11.200000 120.069914 +6.700000 11.300000 122.092772 +6.700000 11.400000 124.135630 +6.700000 11.500000 126.198488 +6.700000 11.600000 128.281345 +6.700000 11.700000 130.384203 +6.700000 11.800000 132.507061 +6.700000 11.900000 134.649918 +6.700000 12.000000 136.812776 +6.700000 12.100000 138.995634 +6.700000 12.200000 141.198492 +6.700000 12.300000 143.421349 +6.700000 12.400000 145.664207 +6.700000 12.500000 147.927065 +6.700000 12.600000 150.209922 +6.700000 12.700000 152.512780 +6.700000 12.800000 154.835638 +6.700000 12.900000 157.178496 +6.700000 13.000000 159.541353 +6.700000 13.100000 161.924211 +6.700000 13.200000 164.327069 +6.700000 13.300000 166.749926 +6.700000 13.400000 169.192784 +6.700000 13.500000 171.655642 +6.700000 13.600000 174.138500 +6.700000 13.700000 176.641357 +6.700000 13.800000 179.164215 +6.700000 13.900000 181.707073 +6.700000 14.000000 184.269930 +6.700000 14.100000 186.852788 +6.700000 14.200000 189.455646 +6.700000 14.300000 192.078504 +6.700000 14.400000 194.721361 +6.700000 14.500000 197.384219 +6.700000 14.600000 200.067077 +6.700000 14.700000 202.769934 +6.700000 14.800000 205.492792 +6.700000 14.900000 208.235650 +6.700000 15.000000 210.998508 + +6.800000 -5.000000 56.182307 +6.800000 -4.900000 54.962116 +6.800000 -4.800000 53.761925 +6.800000 -4.700000 52.581734 +6.800000 -4.600000 51.421543 +6.800000 -4.500000 50.281352 +6.800000 -4.400000 49.161160 +6.800000 -4.300000 48.060969 +6.800000 -4.200000 46.980778 +6.800000 -4.100000 45.920587 +6.800000 -4.000000 44.880396 +6.800000 -3.900000 43.860205 +6.800000 -3.800000 42.860014 +6.800000 -3.700000 41.879823 +6.800000 -3.600000 40.919631 +6.800000 -3.500000 39.979440 +6.800000 -3.400000 39.059249 +6.800000 -3.300000 38.159058 +6.800000 -3.200000 37.278867 +6.800000 -3.100000 36.418676 +6.800000 -3.000000 35.578485 +6.800000 -2.900000 34.758294 +6.800000 -2.800000 33.958103 +6.800000 -2.700000 33.177911 +6.800000 -2.600000 32.417720 +6.800000 -2.500000 31.677529 +6.800000 -2.400000 30.957338 +6.800000 -2.300000 30.257147 +6.800000 -2.200000 29.576956 +6.800000 -2.100000 28.916765 +6.800000 -2.000000 28.276574 +6.800000 -1.900000 27.656383 +6.800000 -1.800000 27.056191 +6.800000 -1.700000 26.476000 +6.800000 -1.600000 25.915809 +6.800000 -1.500000 25.375618 +6.800000 -1.400000 24.855427 +6.800000 -1.300000 24.355236 +6.800000 -1.200000 23.875045 +6.800000 -1.100000 23.414854 +6.800000 -1.000000 22.974663 +6.800000 -0.900000 22.554471 +6.800000 -0.800000 22.154280 +6.800000 -0.700000 21.774089 +6.800000 -0.600000 21.413898 +6.800000 -0.500000 21.073707 +6.800000 -0.400000 20.753516 +6.800000 -0.300000 20.453325 +6.800000 -0.200000 20.173134 +6.800000 -0.100000 19.912942 +6.800000 -0.000000 19.672751 +6.800000 0.100000 19.452560 +6.800000 0.200000 19.252369 +6.800000 0.300000 19.072178 +6.800000 0.400000 18.911987 +6.800000 0.500000 18.771796 +6.800000 0.600000 18.651605 +6.800000 0.700000 18.551414 +6.800000 0.800000 18.471222 +6.800000 0.900000 18.411031 +6.800000 1.000000 18.370840 +6.800000 1.100000 18.350649 +6.800000 1.200000 18.350458 +6.800000 1.300000 18.370267 +6.800000 1.400000 18.410076 +6.800000 1.500000 18.469885 +6.800000 1.600000 18.549694 +6.800000 1.700000 18.649502 +6.800000 1.800000 18.769311 +6.800000 1.900000 18.909120 +6.800000 2.000000 19.068929 +6.800000 2.100000 19.248738 +6.800000 2.200000 19.448547 +6.800000 2.300000 19.668356 +6.800000 2.400000 19.908165 +6.800000 2.500000 20.167974 +6.800000 2.600000 20.447782 +6.800000 2.700000 20.747591 +6.800000 2.800000 21.067400 +6.800000 2.900000 21.407209 +6.800000 3.000000 21.767018 +6.800000 3.100000 22.146827 +6.800000 3.200000 22.546636 +6.800000 3.300000 22.966445 +6.800000 3.400000 23.406253 +6.800000 3.500000 23.866062 +6.800000 3.600000 24.345871 +6.800000 3.700000 24.845680 +6.800000 3.800000 25.365489 +6.800000 3.900000 25.905298 +6.800000 4.000000 26.465107 +6.800000 4.100000 27.044916 +6.800000 4.200000 27.644725 +6.800000 4.300000 28.264533 +6.800000 4.400000 28.904342 +6.800000 4.500000 29.564151 +6.800000 4.600000 30.243960 +6.800000 4.700000 30.943769 +6.800000 4.800000 31.663578 +6.800000 4.900000 32.403387 +6.800000 5.000000 33.163196 +6.800000 5.100000 33.943005 +6.800000 5.200000 34.742813 +6.800000 5.300000 35.562622 +6.800000 5.400000 36.402431 +6.800000 5.500000 37.262240 +6.800000 5.600000 38.142049 +6.800000 5.700000 39.041858 +6.800000 5.800000 39.961667 +6.800000 5.900000 40.901476 +6.800000 6.000000 41.861284 +6.800000 6.100000 42.841093 +6.800000 6.200000 43.840902 +6.800000 6.300000 44.860711 +6.800000 6.400000 45.900520 +6.800000 6.500000 46.960329 +6.800000 6.600000 48.040138 +6.800000 6.700000 49.139947 +6.800000 6.800000 50.259756 +6.800000 6.900000 51.399564 +6.800000 7.000000 52.559373 +6.800000 7.100000 53.739182 +6.800000 7.200000 54.938991 +6.800000 7.300000 56.158800 +6.800000 7.400000 57.398609 +6.800000 7.500000 58.658418 +6.800000 7.600000 59.938227 +6.800000 7.700000 61.238036 +6.800000 7.800000 62.557844 +6.800000 7.900000 63.897653 +6.800000 8.000000 65.257462 +6.800000 8.100000 66.637271 +6.800000 8.200000 68.037080 +6.800000 8.300000 69.456889 +6.800000 8.400000 70.896698 +6.800000 8.500000 72.356507 +6.800000 8.600000 73.836316 +6.800000 8.700000 75.336124 +6.800000 8.800000 76.855933 +6.800000 8.900000 78.395742 +6.800000 9.000000 79.955551 +6.800000 9.100000 81.535360 +6.800000 9.200000 83.135169 +6.800000 9.300000 84.754978 +6.800000 9.400000 86.394787 +6.800000 9.500000 88.054595 +6.800000 9.600000 89.734404 +6.800000 9.700000 91.434213 +6.800000 9.800000 93.154022 +6.800000 9.900000 94.893831 +6.800000 10.000000 96.653640 +6.800000 10.100000 98.433449 +6.800000 10.200000 100.233258 +6.800000 10.300000 102.053067 +6.800000 10.400000 103.892875 +6.800000 10.500000 105.752684 +6.800000 10.600000 107.632493 +6.800000 10.700000 109.532302 +6.800000 10.800000 111.452111 +6.800000 10.900000 113.391920 +6.800000 11.000000 115.351729 +6.800000 11.100000 117.331538 +6.800000 11.200000 119.331347 +6.800000 11.300000 121.351155 +6.800000 11.400000 123.390964 +6.800000 11.500000 125.450773 +6.800000 11.600000 127.530582 +6.800000 11.700000 129.630391 +6.800000 11.800000 131.750200 +6.800000 11.900000 133.890009 +6.800000 12.000000 136.049818 +6.800000 12.100000 138.229627 +6.800000 12.200000 140.429435 +6.800000 12.300000 142.649244 +6.800000 12.400000 144.889053 +6.800000 12.500000 147.148862 +6.800000 12.600000 149.428671 +6.800000 12.700000 151.728480 +6.800000 12.800000 154.048289 +6.800000 12.900000 156.388098 +6.800000 13.000000 158.747906 +6.800000 13.100000 161.127715 +6.800000 13.200000 163.527524 +6.800000 13.300000 165.947333 +6.800000 13.400000 168.387142 +6.800000 13.500000 170.846951 +6.800000 13.600000 173.326760 +6.800000 13.700000 175.826569 +6.800000 13.800000 178.346378 +6.800000 13.900000 180.886186 +6.800000 14.000000 183.445995 +6.800000 14.100000 186.025804 +6.800000 14.200000 188.625613 +6.800000 14.300000 191.245422 +6.800000 14.400000 193.885231 +6.800000 14.500000 196.545040 +6.800000 14.600000 199.224849 +6.800000 14.700000 201.924658 +6.800000 14.800000 204.644466 +6.800000 14.900000 207.384275 +6.800000 15.000000 210.144084 + +6.900000 -5.000000 55.886573 +6.900000 -4.900000 54.662816 +6.900000 -4.800000 53.459060 +6.900000 -4.700000 52.275303 +6.900000 -4.600000 51.111546 +6.900000 -4.500000 49.967790 +6.900000 -4.400000 48.844033 +6.900000 -4.300000 47.740276 +6.900000 -4.200000 46.656520 +6.900000 -4.100000 45.592763 +6.900000 -4.000000 44.549006 +6.900000 -3.900000 43.525250 +6.900000 -3.800000 42.521493 +6.900000 -3.700000 41.537736 +6.900000 -3.600000 40.573979 +6.900000 -3.500000 39.630223 +6.900000 -3.400000 38.706466 +6.900000 -3.300000 37.802709 +6.900000 -3.200000 36.918953 +6.900000 -3.100000 36.055196 +6.900000 -3.000000 35.211439 +6.900000 -2.900000 34.387683 +6.900000 -2.800000 33.583926 +6.900000 -2.700000 32.800169 +6.900000 -2.600000 32.036413 +6.900000 -2.500000 31.292656 +6.900000 -2.400000 30.568899 +6.900000 -2.300000 29.865143 +6.900000 -2.200000 29.181386 +6.900000 -2.100000 28.517629 +6.900000 -2.000000 27.873873 +6.900000 -1.900000 27.250116 +6.900000 -1.800000 26.646359 +6.900000 -1.700000 26.062603 +6.900000 -1.600000 25.498846 +6.900000 -1.500000 24.955089 +6.900000 -1.400000 24.431332 +6.900000 -1.300000 23.927576 +6.900000 -1.200000 23.443819 +6.900000 -1.100000 22.980062 +6.900000 -1.000000 22.536306 +6.900000 -0.900000 22.112549 +6.900000 -0.800000 21.708792 +6.900000 -0.700000 21.325036 +6.900000 -0.600000 20.961279 +6.900000 -0.500000 20.617522 +6.900000 -0.400000 20.293766 +6.900000 -0.300000 19.990009 +6.900000 -0.200000 19.706252 +6.900000 -0.100000 19.442496 +6.900000 -0.000000 19.198739 +6.900000 0.100000 18.974982 +6.900000 0.200000 18.771226 +6.900000 0.300000 18.587469 +6.900000 0.400000 18.423712 +6.900000 0.500000 18.279956 +6.900000 0.600000 18.156199 +6.900000 0.700000 18.052442 +6.900000 0.800000 17.968685 +6.900000 0.900000 17.904929 +6.900000 1.000000 17.861172 +6.900000 1.100000 17.837415 +6.900000 1.200000 17.833659 +6.900000 1.300000 17.849902 +6.900000 1.400000 17.886145 +6.900000 1.500000 17.942389 +6.900000 1.600000 18.018632 +6.900000 1.700000 18.114875 +6.900000 1.800000 18.231119 +6.900000 1.900000 18.367362 +6.900000 2.000000 18.523605 +6.900000 2.100000 18.699849 +6.900000 2.200000 18.896092 +6.900000 2.300000 19.112335 +6.900000 2.400000 19.348579 +6.900000 2.500000 19.604822 +6.900000 2.600000 19.881065 +6.900000 2.700000 20.177309 +6.900000 2.800000 20.493552 +6.900000 2.900000 20.829795 +6.900000 3.000000 21.186039 +6.900000 3.100000 21.562282 +6.900000 3.200000 21.958525 +6.900000 3.300000 22.374768 +6.900000 3.400000 22.811012 +6.900000 3.500000 23.267255 +6.900000 3.600000 23.743498 +6.900000 3.700000 24.239742 +6.900000 3.800000 24.755985 +6.900000 3.900000 25.292228 +6.900000 4.000000 25.848472 +6.900000 4.100000 26.424715 +6.900000 4.200000 27.020958 +6.900000 4.300000 27.637202 +6.900000 4.400000 28.273445 +6.900000 4.500000 28.929688 +6.900000 4.600000 29.605932 +6.900000 4.700000 30.302175 +6.900000 4.800000 31.018418 +6.900000 4.900000 31.754662 +6.900000 5.000000 32.510905 +6.900000 5.100000 33.287148 +6.900000 5.200000 34.083392 +6.900000 5.300000 34.899635 +6.900000 5.400000 35.735878 +6.900000 5.500000 36.592121 +6.900000 5.600000 37.468365 +6.900000 5.700000 38.364608 +6.900000 5.800000 39.280851 +6.900000 5.900000 40.217095 +6.900000 6.000000 41.173338 +6.900000 6.100000 42.149581 +6.900000 6.200000 43.145825 +6.900000 6.300000 44.162068 +6.900000 6.400000 45.198311 +6.900000 6.500000 46.254555 +6.900000 6.600000 47.330798 +6.900000 6.700000 48.427041 +6.900000 6.800000 49.543285 +6.900000 6.900000 50.679528 +6.900000 7.000000 51.835771 +6.900000 7.100000 53.012015 +6.900000 7.200000 54.208258 +6.900000 7.300000 55.424501 +6.900000 7.400000 56.660745 +6.900000 7.500000 57.916988 +6.900000 7.600000 59.193231 +6.900000 7.700000 60.489474 +6.900000 7.800000 61.805718 +6.900000 7.900000 63.141961 +6.900000 8.000000 64.498204 +6.900000 8.100000 65.874448 +6.900000 8.200000 67.270691 +6.900000 8.300000 68.686934 +6.900000 8.400000 70.123178 +6.900000 8.500000 71.579421 +6.900000 8.600000 73.055664 +6.900000 8.700000 74.551908 +6.900000 8.800000 76.068151 +6.900000 8.900000 77.604394 +6.900000 9.000000 79.160638 +6.900000 9.100000 80.736881 +6.900000 9.200000 82.333124 +6.900000 9.300000 83.949368 +6.900000 9.400000 85.585611 +6.900000 9.500000 87.241854 +6.900000 9.600000 88.918098 +6.900000 9.700000 90.614341 +6.900000 9.800000 92.330584 +6.900000 9.900000 94.066827 +6.900000 10.000000 95.823071 +6.900000 10.100000 97.599314 +6.900000 10.200000 99.395557 +6.900000 10.300000 101.211801 +6.900000 10.400000 103.048044 +6.900000 10.500000 104.904287 +6.900000 10.600000 106.780531 +6.900000 10.700000 108.676774 +6.900000 10.800000 110.593017 +6.900000 10.900000 112.529261 +6.900000 11.000000 114.485504 +6.900000 11.100000 116.461747 +6.900000 11.200000 118.457991 +6.900000 11.300000 120.474234 +6.900000 11.400000 122.510477 +6.900000 11.500000 124.566721 +6.900000 11.600000 126.642964 +6.900000 11.700000 128.739207 +6.900000 11.800000 130.855451 +6.900000 11.900000 132.991694 +6.900000 12.000000 135.147937 +6.900000 12.100000 137.324180 +6.900000 12.200000 139.520424 +6.900000 12.300000 141.736667 +6.900000 12.400000 143.972910 +6.900000 12.500000 146.229154 +6.900000 12.600000 148.505397 +6.900000 12.700000 150.801640 +6.900000 12.800000 153.117884 +6.900000 12.900000 155.454127 +6.900000 13.000000 157.810370 +6.900000 13.100000 160.186614 +6.900000 13.200000 162.582857 +6.900000 13.300000 164.999100 +6.900000 13.400000 167.435344 +6.900000 13.500000 169.891587 +6.900000 13.600000 172.367830 +6.900000 13.700000 174.864074 +6.900000 13.800000 177.380317 +6.900000 13.900000 179.916560 +6.900000 14.000000 182.472804 +6.900000 14.100000 185.049047 +6.900000 14.200000 187.645290 +6.900000 14.300000 190.261534 +6.900000 14.400000 192.897777 +6.900000 14.500000 195.554020 +6.900000 14.600000 198.230263 +6.900000 14.700000 200.926507 +6.900000 14.800000 203.642750 +6.900000 14.900000 206.378993 +6.900000 15.000000 209.135237 + +7.000000 -5.000000 55.545188 +7.000000 -4.900000 54.317349 +7.000000 -4.800000 53.109510 +7.000000 -4.700000 51.921671 +7.000000 -4.600000 50.753832 +7.000000 -4.500000 49.605993 +7.000000 -4.400000 48.478154 +7.000000 -4.300000 47.370315 +7.000000 -4.200000 46.282476 +7.000000 -4.100000 45.214637 +7.000000 -4.000000 44.166798 +7.000000 -3.900000 43.138959 +7.000000 -3.800000 42.131120 +7.000000 -3.700000 41.143281 +7.000000 -3.600000 40.175442 +7.000000 -3.500000 39.227603 +7.000000 -3.400000 38.299764 +7.000000 -3.300000 37.391926 +7.000000 -3.200000 36.504087 +7.000000 -3.100000 35.636248 +7.000000 -3.000000 34.788409 +7.000000 -2.900000 33.960570 +7.000000 -2.800000 33.152731 +7.000000 -2.700000 32.364892 +7.000000 -2.600000 31.597053 +7.000000 -2.500000 30.849214 +7.000000 -2.400000 30.121375 +7.000000 -2.300000 29.413536 +7.000000 -2.200000 28.725697 +7.000000 -2.100000 28.057858 +7.000000 -2.000000 27.410019 +7.000000 -1.900000 26.782180 +7.000000 -1.800000 26.174341 +7.000000 -1.700000 25.586502 +7.000000 -1.600000 25.018663 +7.000000 -1.500000 24.470824 +7.000000 -1.400000 23.942985 +7.000000 -1.300000 23.435146 +7.000000 -1.200000 22.947307 +7.000000 -1.100000 22.479468 +7.000000 -1.000000 22.031629 +7.000000 -0.900000 21.603790 +7.000000 -0.800000 21.195951 +7.000000 -0.700000 20.808112 +7.000000 -0.600000 20.440273 +7.000000 -0.500000 20.092434 +7.000000 -0.400000 19.764595 +7.000000 -0.300000 19.456756 +7.000000 -0.200000 19.168917 +7.000000 -0.100000 18.901078 +7.000000 -0.000000 18.653239 +7.000000 0.100000 18.425400 +7.000000 0.200000 18.217561 +7.000000 0.300000 18.029722 +7.000000 0.400000 17.861883 +7.000000 0.500000 17.714044 +7.000000 0.600000 17.586205 +7.000000 0.700000 17.478366 +7.000000 0.800000 17.390527 +7.000000 0.900000 17.322688 +7.000000 1.000000 17.274849 +7.000000 1.100000 17.247010 +7.000000 1.200000 17.239171 +7.000000 1.300000 17.251332 +7.000000 1.400000 17.283493 +7.000000 1.500000 17.335654 +7.000000 1.600000 17.407815 +7.000000 1.700000 17.499976 +7.000000 1.800000 17.612137 +7.000000 1.900000 17.744298 +7.000000 2.000000 17.896459 +7.000000 2.100000 18.068620 +7.000000 2.200000 18.260781 +7.000000 2.300000 18.472942 +7.000000 2.400000 18.705103 +7.000000 2.500000 18.957264 +7.000000 2.600000 19.229425 +7.000000 2.700000 19.521586 +7.000000 2.800000 19.833747 +7.000000 2.900000 20.165908 +7.000000 3.000000 20.518069 +7.000000 3.100000 20.890230 +7.000000 3.200000 21.282391 +7.000000 3.300000 21.694552 +7.000000 3.400000 22.126713 +7.000000 3.500000 22.578874 +7.000000 3.600000 23.051035 +7.000000 3.700000 23.543196 +7.000000 3.800000 24.055357 +7.000000 3.900000 24.587518 +7.000000 4.000000 25.139679 +7.000000 4.100000 25.711841 +7.000000 4.200000 26.304002 +7.000000 4.300000 26.916163 +7.000000 4.400000 27.548324 +7.000000 4.500000 28.200485 +7.000000 4.600000 28.872646 +7.000000 4.700000 29.564807 +7.000000 4.800000 30.276968 +7.000000 4.900000 31.009129 +7.000000 5.000000 31.761290 +7.000000 5.100000 32.533451 +7.000000 5.200000 33.325612 +7.000000 5.300000 34.137773 +7.000000 5.400000 34.969934 +7.000000 5.500000 35.822095 +7.000000 5.600000 36.694256 +7.000000 5.700000 37.586417 +7.000000 5.800000 38.498578 +7.000000 5.900000 39.430739 +7.000000 6.000000 40.382900 +7.000000 6.100000 41.355061 +7.000000 6.200000 42.347222 +7.000000 6.300000 43.359383 +7.000000 6.400000 44.391544 +7.000000 6.500000 45.443705 +7.000000 6.600000 46.515866 +7.000000 6.700000 47.608027 +7.000000 6.800000 48.720188 +7.000000 6.900000 49.852349 +7.000000 7.000000 51.004510 +7.000000 7.100000 52.176671 +7.000000 7.200000 53.368832 +7.000000 7.300000 54.580993 +7.000000 7.400000 55.813154 +7.000000 7.500000 57.065315 +7.000000 7.600000 58.337476 +7.000000 7.700000 59.629637 +7.000000 7.800000 60.941798 +7.000000 7.900000 62.273959 +7.000000 8.000000 63.626120 +7.000000 8.100000 64.998281 +7.000000 8.200000 66.390442 +7.000000 8.300000 67.802603 +7.000000 8.400000 69.234764 +7.000000 8.500000 70.686925 +7.000000 8.600000 72.159086 +7.000000 8.700000 73.651247 +7.000000 8.800000 75.163408 +7.000000 8.900000 76.695569 +7.000000 9.000000 78.247730 +7.000000 9.100000 79.819891 +7.000000 9.200000 81.412052 +7.000000 9.300000 83.024213 +7.000000 9.400000 84.656374 +7.000000 9.500000 86.308535 +7.000000 9.600000 87.980696 +7.000000 9.700000 89.672857 +7.000000 9.800000 91.385018 +7.000000 9.900000 93.117179 +7.000000 10.000000 94.869340 +7.000000 10.100000 96.641501 +7.000000 10.200000 98.433662 +7.000000 10.300000 100.245823 +7.000000 10.400000 102.077984 +7.000000 10.500000 103.930145 +7.000000 10.600000 105.802306 +7.000000 10.700000 107.694467 +7.000000 10.800000 109.606628 +7.000000 10.900000 111.538789 +7.000000 11.000000 113.490950 +7.000000 11.100000 115.463111 +7.000000 11.200000 117.455272 +7.000000 11.300000 119.467433 +7.000000 11.400000 121.499595 +7.000000 11.500000 123.551756 +7.000000 11.600000 125.623917 +7.000000 11.700000 127.716078 +7.000000 11.800000 129.828239 +7.000000 11.900000 131.960400 +7.000000 12.000000 134.112561 +7.000000 12.100000 136.284722 +7.000000 12.200000 138.476883 +7.000000 12.300000 140.689044 +7.000000 12.400000 142.921205 +7.000000 12.500000 145.173366 +7.000000 12.600000 147.445527 +7.000000 12.700000 149.737688 +7.000000 12.800000 152.049849 +7.000000 12.900000 154.382010 +7.000000 13.000000 156.734171 +7.000000 13.100000 159.106332 +7.000000 13.200000 161.498493 +7.000000 13.300000 163.910654 +7.000000 13.400000 166.342815 +7.000000 13.500000 168.794976 +7.000000 13.600000 171.267137 +7.000000 13.700000 173.759298 +7.000000 13.800000 176.271459 +7.000000 13.900000 178.803620 +7.000000 14.000000 181.355781 +7.000000 14.100000 183.927942 +7.000000 14.200000 186.520103 +7.000000 14.300000 189.132264 +7.000000 14.400000 191.764425 +7.000000 14.500000 194.416586 +7.000000 14.600000 197.088747 +7.000000 14.700000 199.780908 +7.000000 14.800000 202.493069 +7.000000 14.900000 205.225230 +7.000000 15.000000 207.977391 + +7.100000 -5.000000 55.164401 +7.100000 -4.900000 53.931963 +7.100000 -4.800000 52.719525 +7.100000 -4.700000 51.527087 +7.100000 -4.600000 50.354648 +7.100000 -4.500000 49.202210 +7.100000 -4.400000 48.069772 +7.100000 -4.300000 46.957334 +7.100000 -4.200000 45.864896 +7.100000 -4.100000 44.792458 +7.100000 -4.000000 43.740020 +7.100000 -3.900000 42.707582 +7.100000 -3.800000 41.695144 +7.100000 -3.700000 40.702706 +7.100000 -3.600000 39.730268 +7.100000 -3.500000 38.777830 +7.100000 -3.400000 37.845392 +7.100000 -3.300000 36.932954 +7.100000 -3.200000 36.040516 +7.100000 -3.100000 35.168078 +7.100000 -3.000000 34.315640 +7.100000 -2.900000 33.483202 +7.100000 -2.800000 32.670764 +7.100000 -2.700000 31.878326 +7.100000 -2.600000 31.105888 +7.100000 -2.500000 30.353450 +7.100000 -2.400000 29.621012 +7.100000 -2.300000 28.908574 +7.100000 -2.200000 28.216136 +7.100000 -2.100000 27.543698 +7.100000 -2.000000 26.891260 +7.100000 -1.900000 26.258822 +7.100000 -1.800000 25.646384 +7.100000 -1.700000 25.053946 +7.100000 -1.600000 24.481508 +7.100000 -1.500000 23.929070 +7.100000 -1.400000 23.396632 +7.100000 -1.300000 22.884194 +7.100000 -1.200000 22.391756 +7.100000 -1.100000 21.919317 +7.100000 -1.000000 21.466879 +7.100000 -0.900000 21.034441 +7.100000 -0.800000 20.622003 +7.100000 -0.700000 20.229565 +7.100000 -0.600000 19.857127 +7.100000 -0.500000 19.504689 +7.100000 -0.400000 19.172251 +7.100000 -0.300000 18.859813 +7.100000 -0.200000 18.567375 +7.100000 -0.100000 18.294937 +7.100000 -0.000000 18.042499 +7.100000 0.100000 17.810061 +7.100000 0.200000 17.597623 +7.100000 0.300000 17.405185 +7.100000 0.400000 17.232747 +7.100000 0.500000 17.080309 +7.100000 0.600000 16.947871 +7.100000 0.700000 16.835433 +7.100000 0.800000 16.742995 +7.100000 0.900000 16.670557 +7.100000 1.000000 16.618119 +7.100000 1.100000 16.585681 +7.100000 1.200000 16.573243 +7.100000 1.300000 16.580805 +7.100000 1.400000 16.608367 +7.100000 1.500000 16.655929 +7.100000 1.600000 16.723491 +7.100000 1.700000 16.811053 +7.100000 1.800000 16.918615 +7.100000 1.900000 17.046177 +7.100000 2.000000 17.193739 +7.100000 2.100000 17.361301 +7.100000 2.200000 17.548863 +7.100000 2.300000 17.756424 +7.100000 2.400000 17.983986 +7.100000 2.500000 18.231548 +7.100000 2.600000 18.499110 +7.100000 2.700000 18.786672 +7.100000 2.800000 19.094234 +7.100000 2.900000 19.421796 +7.100000 3.000000 19.769358 +7.100000 3.100000 20.136920 +7.100000 3.200000 20.524482 +7.100000 3.300000 20.932044 +7.100000 3.400000 21.359606 +7.100000 3.500000 21.807168 +7.100000 3.600000 22.274730 +7.100000 3.700000 22.762292 +7.100000 3.800000 23.269854 +7.100000 3.900000 23.797416 +7.100000 4.000000 24.344978 +7.100000 4.100000 24.912540 +7.100000 4.200000 25.500102 +7.100000 4.300000 26.107664 +7.100000 4.400000 26.735226 +7.100000 4.500000 27.382788 +7.100000 4.600000 28.050350 +7.100000 4.700000 28.737912 +7.100000 4.800000 29.445474 +7.100000 4.900000 30.173036 +7.100000 5.000000 30.920598 +7.100000 5.100000 31.688160 +7.100000 5.200000 32.475722 +7.100000 5.300000 33.283284 +7.100000 5.400000 34.110846 +7.100000 5.500000 34.958408 +7.100000 5.600000 35.825970 +7.100000 5.700000 36.713531 +7.100000 5.800000 37.621093 +7.100000 5.900000 38.548655 +7.100000 6.000000 39.496217 +7.100000 6.100000 40.463779 +7.100000 6.200000 41.451341 +7.100000 6.300000 42.458903 +7.100000 6.400000 43.486465 +7.100000 6.500000 44.534027 +7.100000 6.600000 45.601589 +7.100000 6.700000 46.689151 +7.100000 6.800000 47.796713 +7.100000 6.900000 48.924275 +7.100000 7.000000 50.071837 +7.100000 7.100000 51.239399 +7.100000 7.200000 52.426961 +7.100000 7.300000 53.634523 +7.100000 7.400000 54.862085 +7.100000 7.500000 56.109647 +7.100000 7.600000 57.377209 +7.100000 7.700000 58.664771 +7.100000 7.800000 59.972333 +7.100000 7.900000 61.299895 +7.100000 8.000000 62.647457 +7.100000 8.100000 64.015019 +7.100000 8.200000 65.402581 +7.100000 8.300000 66.810143 +7.100000 8.400000 68.237705 +7.100000 8.500000 69.685267 +7.100000 8.600000 71.152829 +7.100000 8.700000 72.640391 +7.100000 8.800000 74.147953 +7.100000 8.900000 75.675515 +7.100000 9.000000 77.223077 +7.100000 9.100000 78.790638 +7.100000 9.200000 80.378200 +7.100000 9.300000 81.985762 +7.100000 9.400000 83.613324 +7.100000 9.500000 85.260886 +7.100000 9.600000 86.928448 +7.100000 9.700000 88.616010 +7.100000 9.800000 90.323572 +7.100000 9.900000 92.051134 +7.100000 10.000000 93.798696 +7.100000 10.100000 95.566258 +7.100000 10.200000 97.353820 +7.100000 10.300000 99.161382 +7.100000 10.400000 100.988944 +7.100000 10.500000 102.836506 +7.100000 10.600000 104.704068 +7.100000 10.700000 106.591630 +7.100000 10.800000 108.499192 +7.100000 10.900000 110.426754 +7.100000 11.000000 112.374316 +7.100000 11.100000 114.341878 +7.100000 11.200000 116.329440 +7.100000 11.300000 118.337002 +7.100000 11.400000 120.364564 +7.100000 11.500000 122.412126 +7.100000 11.600000 124.479688 +7.100000 11.700000 126.567250 +7.100000 11.800000 128.674812 +7.100000 11.900000 130.802374 +7.100000 12.000000 132.949936 +7.100000 12.100000 135.117498 +7.100000 12.200000 137.305060 +7.100000 12.300000 139.512622 +7.100000 12.400000 141.740184 +7.100000 12.500000 143.987745 +7.100000 12.600000 146.255307 +7.100000 12.700000 148.542869 +7.100000 12.800000 150.850431 +7.100000 12.900000 153.177993 +7.100000 13.000000 155.525555 +7.100000 13.100000 157.893117 +7.100000 13.200000 160.280679 +7.100000 13.300000 162.688241 +7.100000 13.400000 165.115803 +7.100000 13.500000 167.563365 +7.100000 13.600000 170.030927 +7.100000 13.700000 172.518489 +7.100000 13.800000 175.026051 +7.100000 13.900000 177.553613 +7.100000 14.000000 180.101175 +7.100000 14.100000 182.668737 +7.100000 14.200000 185.256299 +7.100000 14.300000 187.863861 +7.100000 14.400000 190.491423 +7.100000 14.500000 193.138985 +7.100000 14.600000 195.806547 +7.100000 14.700000 198.494109 +7.100000 14.800000 201.201671 +7.100000 14.900000 203.929233 +7.100000 15.000000 206.676795 + +7.200000 -5.000000 54.751221 +7.200000 -4.900000 53.513667 +7.200000 -4.800000 52.296113 +7.200000 -4.700000 51.098559 +7.200000 -4.600000 49.921005 +7.200000 -4.500000 48.763452 +7.200000 -4.400000 47.625898 +7.200000 -4.300000 46.508344 +7.200000 -4.200000 45.410790 +7.200000 -4.100000 44.333236 +7.200000 -4.000000 43.275682 +7.200000 -3.900000 42.238129 +7.200000 -3.800000 41.220575 +7.200000 -3.700000 40.223021 +7.200000 -3.600000 39.245467 +7.200000 -3.500000 38.287913 +7.200000 -3.400000 37.350360 +7.200000 -3.300000 36.432806 +7.200000 -3.200000 35.535252 +7.200000 -3.100000 34.657698 +7.200000 -3.000000 33.800144 +7.200000 -2.900000 32.962591 +7.200000 -2.800000 32.145037 +7.200000 -2.700000 31.347483 +7.200000 -2.600000 30.569929 +7.200000 -2.500000 29.812375 +7.200000 -2.400000 29.074822 +7.200000 -2.300000 28.357268 +7.200000 -2.200000 27.659714 +7.200000 -2.100000 26.982160 +7.200000 -2.000000 26.324606 +7.200000 -1.900000 25.687052 +7.200000 -1.800000 25.069499 +7.200000 -1.700000 24.471945 +7.200000 -1.600000 23.894391 +7.200000 -1.500000 23.336837 +7.200000 -1.400000 22.799283 +7.200000 -1.300000 22.281730 +7.200000 -1.200000 21.784176 +7.200000 -1.100000 21.306622 +7.200000 -1.000000 20.849068 +7.200000 -0.900000 20.411514 +7.200000 -0.800000 19.993961 +7.200000 -0.700000 19.596407 +7.200000 -0.600000 19.218853 +7.200000 -0.500000 18.861299 +7.200000 -0.400000 18.523745 +7.200000 -0.300000 18.206192 +7.200000 -0.200000 17.908638 +7.200000 -0.100000 17.631084 +7.200000 -0.000000 17.373530 +7.200000 0.100000 17.135976 +7.200000 0.200000 16.918422 +7.200000 0.300000 16.720869 +7.200000 0.400000 16.543315 +7.200000 0.500000 16.385761 +7.200000 0.600000 16.248207 +7.200000 0.700000 16.130653 +7.200000 0.800000 16.033100 +7.200000 0.900000 15.955546 +7.200000 1.000000 15.897992 +7.200000 1.100000 15.860438 +7.200000 1.200000 15.842884 +7.200000 1.300000 15.845331 +7.200000 1.400000 15.867777 +7.200000 1.500000 15.910223 +7.200000 1.600000 15.972669 +7.200000 1.700000 16.055115 +7.200000 1.800000 16.157561 +7.200000 1.900000 16.280008 +7.200000 2.000000 16.422454 +7.200000 2.100000 16.584900 +7.200000 2.200000 16.767346 +7.200000 2.300000 16.969792 +7.200000 2.400000 17.192239 +7.200000 2.500000 17.434685 +7.200000 2.600000 17.697131 +7.200000 2.700000 17.979577 +7.200000 2.800000 18.282023 +7.200000 2.900000 18.604470 +7.200000 3.000000 18.946916 +7.200000 3.100000 19.309362 +7.200000 3.200000 19.691808 +7.200000 3.300000 20.094254 +7.200000 3.400000 20.516701 +7.200000 3.500000 20.959147 +7.200000 3.600000 21.421593 +7.200000 3.700000 21.904039 +7.200000 3.800000 22.406485 +7.200000 3.900000 22.928931 +7.200000 4.000000 23.471378 +7.200000 4.100000 24.033824 +7.200000 4.200000 24.616270 +7.200000 4.300000 25.218716 +7.200000 4.400000 25.841162 +7.200000 4.500000 26.483609 +7.200000 4.600000 27.146055 +7.200000 4.700000 27.828501 +7.200000 4.800000 28.530947 +7.200000 4.900000 29.253393 +7.200000 5.000000 29.995840 +7.200000 5.100000 30.758286 +7.200000 5.200000 31.540732 +7.200000 5.300000 32.343178 +7.200000 5.400000 33.165624 +7.200000 5.500000 34.008071 +7.200000 5.600000 34.870517 +7.200000 5.700000 35.752963 +7.200000 5.800000 36.655409 +7.200000 5.900000 37.577855 +7.200000 6.000000 38.520301 +7.200000 6.100000 39.482748 +7.200000 6.200000 40.465194 +7.200000 6.300000 41.467640 +7.200000 6.400000 42.490086 +7.200000 6.500000 43.532532 +7.200000 6.600000 44.594979 +7.200000 6.700000 45.677425 +7.200000 6.800000 46.779871 +7.200000 6.900000 47.902317 +7.200000 7.000000 49.044763 +7.200000 7.100000 50.207210 +7.200000 7.200000 51.389656 +7.200000 7.300000 52.592102 +7.200000 7.400000 53.814548 +7.200000 7.500000 55.056994 +7.200000 7.600000 56.319440 +7.200000 7.700000 57.601887 +7.200000 7.800000 58.904333 +7.200000 7.900000 60.226779 +7.200000 8.000000 61.569225 +7.200000 8.100000 62.931671 +7.200000 8.200000 64.314118 +7.200000 8.300000 65.716564 +7.200000 8.400000 67.139010 +7.200000 8.500000 68.581456 +7.200000 8.600000 70.043902 +7.200000 8.700000 71.526349 +7.200000 8.800000 73.028795 +7.200000 8.900000 74.551241 +7.200000 9.000000 76.093687 +7.200000 9.100000 77.656133 +7.200000 9.200000 79.238580 +7.200000 9.300000 80.841026 +7.200000 9.400000 82.463472 +7.200000 9.500000 84.105918 +7.200000 9.600000 85.768364 +7.200000 9.700000 87.450810 +7.200000 9.800000 89.153257 +7.200000 9.900000 90.875703 +7.200000 10.000000 92.618149 +7.200000 10.100000 94.380595 +7.200000 10.200000 96.163041 +7.200000 10.300000 97.965488 +7.200000 10.400000 99.787934 +7.200000 10.500000 101.630380 +7.200000 10.600000 103.492826 +7.200000 10.700000 105.375272 +7.200000 10.800000 107.277719 +7.200000 10.900000 109.200165 +7.200000 11.000000 111.142611 +7.200000 11.100000 113.105057 +7.200000 11.200000 115.087503 +7.200000 11.300000 117.089950 +7.200000 11.400000 119.112396 +7.200000 11.500000 121.154842 +7.200000 11.600000 123.217288 +7.200000 11.700000 125.299734 +7.200000 11.800000 127.402180 +7.200000 11.900000 129.524627 +7.200000 12.000000 131.667073 +7.200000 12.100000 133.829519 +7.200000 12.200000 136.011965 +7.200000 12.300000 138.214411 +7.200000 12.400000 140.436858 +7.200000 12.500000 142.679304 +7.200000 12.600000 144.941750 +7.200000 12.700000 147.224196 +7.200000 12.800000 149.526642 +7.200000 12.900000 151.849089 +7.200000 13.000000 154.191535 +7.200000 13.100000 156.553981 +7.200000 13.200000 158.936427 +7.200000 13.300000 161.338873 +7.200000 13.400000 163.761319 +7.200000 13.500000 166.203766 +7.200000 13.600000 168.666212 +7.200000 13.700000 171.148658 +7.200000 13.800000 173.651104 +7.200000 13.900000 176.173550 +7.200000 14.000000 178.715997 +7.200000 14.100000 181.278443 +7.200000 14.200000 183.860889 +7.200000 14.300000 186.463335 +7.200000 14.400000 189.085781 +7.200000 14.500000 191.728228 +7.200000 14.600000 194.390674 +7.200000 14.700000 197.073120 +7.200000 14.800000 199.775566 +7.200000 14.900000 202.498012 +7.200000 15.000000 205.240459 + +7.300000 -5.000000 54.313355 +7.300000 -4.900000 53.070169 +7.300000 -4.800000 51.846982 +7.300000 -4.700000 50.643796 +7.300000 -4.600000 49.460610 +7.300000 -4.500000 48.297423 +7.300000 -4.400000 47.154237 +7.300000 -4.300000 46.031051 +7.300000 -4.200000 44.927864 +7.300000 -4.100000 43.844678 +7.300000 -4.000000 42.781492 +7.300000 -3.900000 41.738305 +7.300000 -3.800000 40.715119 +7.300000 -3.700000 39.711933 +7.300000 -3.600000 38.728746 +7.300000 -3.500000 37.765560 +7.300000 -3.400000 36.822374 +7.300000 -3.300000 35.899187 +7.300000 -3.200000 34.996001 +7.300000 -3.100000 34.112815 +7.300000 -3.000000 33.249628 +7.300000 -2.900000 32.406442 +7.300000 -2.800000 31.583256 +7.300000 -2.700000 30.780069 +7.300000 -2.600000 29.996883 +7.300000 -2.500000 29.233697 +7.300000 -2.400000 28.490510 +7.300000 -2.300000 27.767324 +7.300000 -2.200000 27.064138 +7.300000 -2.100000 26.380951 +7.300000 -2.000000 25.717765 +7.300000 -1.900000 25.074579 +7.300000 -1.800000 24.451392 +7.300000 -1.700000 23.848206 +7.300000 -1.600000 23.265020 +7.300000 -1.500000 22.701833 +7.300000 -1.400000 22.158647 +7.300000 -1.300000 21.635461 +7.300000 -1.200000 21.132274 +7.300000 -1.100000 20.649088 +7.300000 -1.000000 20.185902 +7.300000 -0.900000 19.742715 +7.300000 -0.800000 19.319529 +7.300000 -0.700000 18.916343 +7.300000 -0.600000 18.533156 +7.300000 -0.500000 18.169970 +7.300000 -0.400000 17.826784 +7.300000 -0.300000 17.503598 +7.300000 -0.200000 17.200411 +7.300000 -0.100000 16.917225 +7.300000 -0.000000 16.654039 +7.300000 0.100000 16.410852 +7.300000 0.200000 16.187666 +7.300000 0.300000 15.984480 +7.300000 0.400000 15.801293 +7.300000 0.500000 15.638107 +7.300000 0.600000 15.494921 +7.300000 0.700000 15.371734 +7.300000 0.800000 15.268548 +7.300000 0.900000 15.185362 +7.300000 1.000000 15.122175 +7.300000 1.100000 15.078989 +7.300000 1.200000 15.055803 +7.300000 1.300000 15.052616 +7.300000 1.400000 15.069430 +7.300000 1.500000 15.106244 +7.300000 1.600000 15.163057 +7.300000 1.700000 15.239871 +7.300000 1.800000 15.336685 +7.300000 1.900000 15.453498 +7.300000 2.000000 15.590312 +7.300000 2.100000 15.747126 +7.300000 2.200000 15.923939 +7.300000 2.300000 16.120753 +7.300000 2.400000 16.337567 +7.300000 2.500000 16.574380 +7.300000 2.600000 16.831194 +7.300000 2.700000 17.108008 +7.300000 2.800000 17.404821 +7.300000 2.900000 17.721635 +7.300000 3.000000 18.058449 +7.300000 3.100000 18.415262 +7.300000 3.200000 18.792076 +7.300000 3.300000 19.188890 +7.300000 3.400000 19.605703 +7.300000 3.500000 20.042517 +7.300000 3.600000 20.499331 +7.300000 3.700000 20.976144 +7.300000 3.800000 21.472958 +7.300000 3.900000 21.989772 +7.300000 4.000000 22.526585 +7.300000 4.100000 23.083399 +7.300000 4.200000 23.660213 +7.300000 4.300000 24.257026 +7.300000 4.400000 24.873840 +7.300000 4.500000 25.510654 +7.300000 4.600000 26.167467 +7.300000 4.700000 26.844281 +7.300000 4.800000 27.541095 +7.300000 4.900000 28.257908 +7.300000 5.000000 28.994722 +7.300000 5.100000 29.751536 +7.300000 5.200000 30.528349 +7.300000 5.300000 31.325163 +7.300000 5.400000 32.141977 +7.300000 5.500000 32.978790 +7.300000 5.600000 33.835604 +7.300000 5.700000 34.712418 +7.300000 5.800000 35.609231 +7.300000 5.900000 36.526045 +7.300000 6.000000 37.462859 +7.300000 6.100000 38.419672 +7.300000 6.200000 39.396486 +7.300000 6.300000 40.393300 +7.300000 6.400000 41.410113 +7.300000 6.500000 42.446927 +7.300000 6.600000 43.503741 +7.300000 6.700000 44.580554 +7.300000 6.800000 45.677368 +7.300000 6.900000 46.794182 +7.300000 7.000000 47.930995 +7.300000 7.100000 49.087809 +7.300000 7.200000 50.264623 +7.300000 7.300000 51.461436 +7.300000 7.400000 52.678250 +7.300000 7.500000 53.915064 +7.300000 7.600000 55.171877 +7.300000 7.700000 56.448691 +7.300000 7.800000 57.745505 +7.300000 7.900000 59.062318 +7.300000 8.000000 60.399132 +7.300000 8.100000 61.755946 +7.300000 8.200000 63.132760 +7.300000 8.300000 64.529573 +7.300000 8.400000 65.946387 +7.300000 8.500000 67.383201 +7.300000 8.600000 68.840014 +7.300000 8.700000 70.316828 +7.300000 8.800000 71.813642 +7.300000 8.900000 73.330455 +7.300000 9.000000 74.867269 +7.300000 9.100000 76.424083 +7.300000 9.200000 78.000896 +7.300000 9.300000 79.597710 +7.300000 9.400000 81.214524 +7.300000 9.500000 82.851337 +7.300000 9.600000 84.508151 +7.300000 9.700000 86.184965 +7.300000 9.800000 87.881778 +7.300000 9.900000 89.598592 +7.300000 10.000000 91.335406 +7.300000 10.100000 93.092219 +7.300000 10.200000 94.869033 +7.300000 10.300000 96.665847 +7.300000 10.400000 98.482660 +7.300000 10.500000 100.319474 +7.300000 10.600000 102.176288 +7.300000 10.700000 104.053101 +7.300000 10.800000 105.949915 +7.300000 10.900000 107.866729 +7.300000 11.000000 109.803542 +7.300000 11.100000 111.760356 +7.300000 11.200000 113.737170 +7.300000 11.300000 115.733983 +7.300000 11.400000 117.750797 +7.300000 11.500000 119.787611 +7.300000 11.600000 121.844424 +7.300000 11.700000 123.921238 +7.300000 11.800000 126.018052 +7.300000 11.900000 128.134865 +7.300000 12.000000 130.271679 +7.300000 12.100000 132.428493 +7.300000 12.200000 134.605306 +7.300000 12.300000 136.802120 +7.300000 12.400000 139.018934 +7.300000 12.500000 141.255747 +7.300000 12.600000 143.512561 +7.300000 12.700000 145.789375 +7.300000 12.800000 148.086188 +7.300000 12.900000 150.403002 +7.300000 13.000000 152.739816 +7.300000 13.100000 155.096629 +7.300000 13.200000 157.473443 +7.300000 13.300000 159.870257 +7.300000 13.400000 162.287070 +7.300000 13.500000 164.723884 +7.300000 13.600000 167.180698 +7.300000 13.700000 169.657511 +7.300000 13.800000 172.154325 +7.300000 13.900000 174.671139 +7.300000 14.000000 177.207952 +7.300000 14.100000 179.764766 +7.300000 14.200000 182.341580 +7.300000 14.300000 184.938393 +7.300000 14.400000 187.555207 +7.300000 14.500000 190.192021 +7.300000 14.600000 192.848834 +7.300000 14.700000 195.525648 +7.300000 14.800000 198.222462 +7.300000 14.900000 200.939275 +7.300000 15.000000 203.676089 + +7.400000 -5.000000 53.859134 +7.400000 -4.900000 52.609798 +7.400000 -4.800000 51.380463 +7.400000 -4.700000 50.171127 +7.400000 -4.600000 48.981791 +7.400000 -4.500000 47.812456 +7.400000 -4.400000 46.663120 +7.400000 -4.300000 45.533785 +7.400000 -4.200000 44.424449 +7.400000 -4.100000 43.335114 +7.400000 -4.000000 42.265778 +7.400000 -3.900000 41.216442 +7.400000 -3.800000 40.187107 +7.400000 -3.700000 39.177771 +7.400000 -3.600000 38.188436 +7.400000 -3.500000 37.219100 +7.400000 -3.400000 36.269764 +7.400000 -3.300000 35.340429 +7.400000 -3.200000 34.431093 +7.400000 -3.100000 33.541758 +7.400000 -3.000000 32.672422 +7.400000 -2.900000 31.823087 +7.400000 -2.800000 30.993751 +7.400000 -2.700000 30.184415 +7.400000 -2.600000 29.395080 +7.400000 -2.500000 28.625744 +7.400000 -2.400000 27.876409 +7.400000 -2.300000 27.147073 +7.400000 -2.200000 26.437737 +7.400000 -2.100000 25.748402 +7.400000 -2.000000 25.079066 +7.400000 -1.900000 24.429731 +7.400000 -1.800000 23.800395 +7.400000 -1.700000 23.191059 +7.400000 -1.600000 22.601724 +7.400000 -1.500000 22.032388 +7.400000 -1.400000 21.483053 +7.400000 -1.300000 20.953717 +7.400000 -1.200000 20.444382 +7.400000 -1.100000 19.955046 +7.400000 -1.000000 19.485710 +7.400000 -0.900000 19.036375 +7.400000 -0.800000 18.607039 +7.400000 -0.700000 18.197704 +7.400000 -0.600000 17.808368 +7.400000 -0.500000 17.439032 +7.400000 -0.400000 17.089697 +7.400000 -0.300000 16.760361 +7.400000 -0.200000 16.451026 +7.400000 -0.100000 16.161690 +7.400000 -0.000000 15.892354 +7.400000 0.100000 15.643019 +7.400000 0.200000 15.413683 +7.400000 0.300000 15.204348 +7.400000 0.400000 15.015012 +7.400000 0.500000 14.845677 +7.400000 0.600000 14.696341 +7.400000 0.700000 14.567005 +7.400000 0.800000 14.457670 +7.400000 0.900000 14.368334 +7.400000 1.000000 14.298999 +7.400000 1.100000 14.249663 +7.400000 1.200000 14.220327 +7.400000 1.300000 14.210992 +7.400000 1.400000 14.221656 +7.400000 1.500000 14.252321 +7.400000 1.600000 14.302985 +7.400000 1.700000 14.373650 +7.400000 1.800000 14.464314 +7.400000 1.900000 14.574978 +7.400000 2.000000 14.705643 +7.400000 2.100000 14.856307 +7.400000 2.200000 15.026972 +7.400000 2.300000 15.217636 +7.400000 2.400000 15.428300 +7.400000 2.500000 15.658965 +7.400000 2.600000 15.909629 +7.400000 2.700000 16.180294 +7.400000 2.800000 16.470958 +7.400000 2.900000 16.781622 +7.400000 3.000000 17.112287 +7.400000 3.100000 17.462951 +7.400000 3.200000 17.833616 +7.400000 3.300000 18.224280 +7.400000 3.400000 18.634945 +7.400000 3.500000 19.065609 +7.400000 3.600000 19.516273 +7.400000 3.700000 19.986938 +7.400000 3.800000 20.477602 +7.400000 3.900000 20.988267 +7.400000 4.000000 21.518931 +7.400000 4.100000 22.069595 +7.400000 4.200000 22.640260 +7.400000 4.300000 23.230924 +7.400000 4.400000 23.841589 +7.400000 4.500000 24.472253 +7.400000 4.600000 25.122918 +7.400000 4.700000 25.793582 +7.400000 4.800000 26.484246 +7.400000 4.900000 27.194911 +7.400000 5.000000 27.925575 +7.400000 5.100000 28.676240 +7.400000 5.200000 29.446904 +7.400000 5.300000 30.237568 +7.400000 5.400000 31.048233 +7.400000 5.500000 31.878897 +7.400000 5.600000 32.729562 +7.400000 5.700000 33.600226 +7.400000 5.800000 34.490890 +7.400000 5.900000 35.401555 +7.400000 6.000000 36.332219 +7.400000 6.100000 37.282884 +7.400000 6.200000 38.253548 +7.400000 6.300000 39.244213 +7.400000 6.400000 40.254877 +7.400000 6.500000 41.285541 +7.400000 6.600000 42.336206 +7.400000 6.700000 43.406870 +7.400000 6.800000 44.497535 +7.400000 6.900000 45.608199 +7.400000 7.000000 46.738863 +7.400000 7.100000 47.889528 +7.400000 7.200000 49.060192 +7.400000 7.300000 50.250857 +7.400000 7.400000 51.461521 +7.400000 7.500000 52.692186 +7.400000 7.600000 53.942850 +7.400000 7.700000 55.213514 +7.400000 7.800000 56.504179 +7.400000 7.900000 57.814843 +7.400000 8.000000 59.145508 +7.400000 8.100000 60.496172 +7.400000 8.200000 61.866836 +7.400000 8.300000 63.257501 +7.400000 8.400000 64.668165 +7.400000 8.500000 66.098830 +7.400000 8.600000 67.549494 +7.400000 8.700000 69.020158 +7.400000 8.800000 70.510823 +7.400000 8.900000 72.021487 +7.400000 9.000000 73.552152 +7.400000 9.100000 75.102816 +7.400000 9.200000 76.673481 +7.400000 9.300000 78.264145 +7.400000 9.400000 79.874809 +7.400000 9.500000 81.505474 +7.400000 9.600000 83.156138 +7.400000 9.700000 84.826803 +7.400000 9.800000 86.517467 +7.400000 9.900000 88.228131 +7.400000 10.000000 89.958796 +7.400000 10.100000 91.709460 +7.400000 10.200000 93.480125 +7.400000 10.300000 95.270789 +7.400000 10.400000 97.081454 +7.400000 10.500000 98.912118 +7.400000 10.600000 100.762782 +7.400000 10.700000 102.633447 +7.400000 10.800000 104.524111 +7.400000 10.900000 106.434776 +7.400000 11.000000 108.365440 +7.400000 11.100000 110.316104 +7.400000 11.200000 112.286769 +7.400000 11.300000 114.277433 +7.400000 11.400000 116.288098 +7.400000 11.500000 118.318762 +7.400000 11.600000 120.369426 +7.400000 11.700000 122.440091 +7.400000 11.800000 124.530755 +7.400000 11.900000 126.641420 +7.400000 12.000000 128.772084 +7.400000 12.100000 130.922749 +7.400000 12.200000 133.093413 +7.400000 12.300000 135.284077 +7.400000 12.400000 137.494742 +7.400000 12.500000 139.725406 +7.400000 12.600000 141.976071 +7.400000 12.700000 144.246735 +7.400000 12.800000 146.537399 +7.400000 12.900000 148.848064 +7.400000 13.000000 151.178728 +7.400000 13.100000 153.529393 +7.400000 13.200000 155.900057 +7.400000 13.300000 158.290722 +7.400000 13.400000 160.701386 +7.400000 13.500000 163.132050 +7.400000 13.600000 165.582715 +7.400000 13.700000 168.053379 +7.400000 13.800000 170.544044 +7.400000 13.900000 173.054708 +7.400000 14.000000 175.585372 +7.400000 14.100000 178.136037 +7.400000 14.200000 180.706701 +7.400000 14.300000 183.297366 +7.400000 14.400000 185.908030 +7.400000 14.500000 188.538694 +7.400000 14.600000 191.189359 +7.400000 14.700000 193.860023 +7.400000 14.800000 196.550688 +7.400000 14.900000 199.261352 +7.400000 15.000000 201.992017 + +7.500000 -5.000000 53.397431 +7.500000 -4.900000 52.141430 +7.500000 -4.800000 50.905428 +7.500000 -4.700000 49.689427 +7.500000 -4.600000 48.493425 +7.500000 -4.500000 47.317424 +7.500000 -4.400000 46.161422 +7.500000 -4.300000 45.025420 +7.500000 -4.200000 43.909419 +7.500000 -4.100000 42.813417 +7.500000 -4.000000 41.737416 +7.500000 -3.900000 40.681414 +7.500000 -3.800000 39.645412 +7.500000 -3.700000 38.629411 +7.500000 -3.600000 37.633409 +7.500000 -3.500000 36.657408 +7.500000 -3.400000 35.701406 +7.500000 -3.300000 34.765405 +7.500000 -3.200000 33.849403 +7.500000 -3.100000 32.953401 +7.500000 -3.000000 32.077400 +7.500000 -2.900000 31.221398 +7.500000 -2.800000 30.385397 +7.500000 -2.700000 29.569395 +7.500000 -2.600000 28.773394 +7.500000 -2.500000 27.997392 +7.500000 -2.400000 27.241390 +7.500000 -2.300000 26.505389 +7.500000 -2.200000 25.789387 +7.500000 -2.100000 25.093386 +7.500000 -2.000000 24.417384 +7.500000 -1.900000 23.761382 +7.500000 -1.800000 23.125381 +7.500000 -1.700000 22.509379 +7.500000 -1.600000 21.913378 +7.500000 -1.500000 21.337376 +7.500000 -1.400000 20.781375 +7.500000 -1.300000 20.245373 +7.500000 -1.200000 19.729371 +7.500000 -1.100000 19.233370 +7.500000 -1.000000 18.757368 +7.500000 -0.900000 18.301367 +7.500000 -0.800000 17.865365 +7.500000 -0.700000 17.449363 +7.500000 -0.600000 17.053362 +7.500000 -0.500000 16.677360 +7.500000 -0.400000 16.321359 +7.500000 -0.300000 15.985357 +7.500000 -0.200000 15.669356 +7.500000 -0.100000 15.373354 +7.500000 -0.000000 15.097352 +7.500000 0.100000 14.841351 +7.500000 0.200000 14.605349 +7.500000 0.300000 14.389348 +7.500000 0.400000 14.193346 +7.500000 0.500000 14.017344 +7.500000 0.600000 13.861343 +7.500000 0.700000 13.725341 +7.500000 0.800000 13.609340 +7.500000 0.900000 13.513338 +7.500000 1.000000 13.437337 +7.500000 1.100000 13.381335 +7.500000 1.200000 13.345333 +7.500000 1.300000 13.329332 +7.500000 1.400000 13.333330 +7.500000 1.500000 13.357329 +7.500000 1.600000 13.401327 +7.500000 1.700000 13.465326 +7.500000 1.800000 13.549324 +7.500000 1.900000 13.653322 +7.500000 2.000000 13.777321 +7.500000 2.100000 13.921319 +7.500000 2.200000 14.085318 +7.500000 2.300000 14.269316 +7.500000 2.400000 14.473314 +7.500000 2.500000 14.697313 +7.500000 2.600000 14.941311 +7.500000 2.700000 15.205310 +7.500000 2.800000 15.489308 +7.500000 2.900000 15.793307 +7.500000 3.000000 16.117305 +7.500000 3.100000 16.461303 +7.500000 3.200000 16.825302 +7.500000 3.300000 17.209300 +7.500000 3.400000 17.613299 +7.500000 3.500000 18.037297 +7.500000 3.600000 18.481295 +7.500000 3.700000 18.945294 +7.500000 3.800000 19.429292 +7.500000 3.900000 19.933291 +7.500000 4.000000 20.457289 +7.500000 4.100000 21.001288 +7.500000 4.200000 21.565286 +7.500000 4.300000 22.149284 +7.500000 4.400000 22.753283 +7.500000 4.500000 23.377281 +7.500000 4.600000 24.021280 +7.500000 4.700000 24.685278 +7.500000 4.800000 25.369276 +7.500000 4.900000 26.073275 +7.500000 5.000000 26.797273 +7.500000 5.100000 27.541272 +7.500000 5.200000 28.305270 +7.500000 5.300000 29.089269 +7.500000 5.400000 29.893267 +7.500000 5.500000 30.717265 +7.500000 5.600000 31.561264 +7.500000 5.700000 32.425262 +7.500000 5.800000 33.309261 +7.500000 5.900000 34.213259 +7.500000 6.000000 35.137258 +7.500000 6.100000 36.081256 +7.500000 6.200000 37.045254 +7.500000 6.300000 38.029253 +7.500000 6.400000 39.033251 +7.500000 6.500000 40.057250 +7.500000 6.600000 41.101248 +7.500000 6.700000 42.165246 +7.500000 6.800000 43.249245 +7.500000 6.900000 44.353243 +7.500000 7.000000 45.477242 +7.500000 7.100000 46.621240 +7.500000 7.200000 47.785239 +7.500000 7.300000 48.969237 +7.500000 7.400000 50.173235 +7.500000 7.500000 51.397234 +7.500000 7.600000 52.641232 +7.500000 7.700000 53.905231 +7.500000 7.800000 55.189229 +7.500000 7.900000 56.493227 +7.500000 8.000000 57.817226 +7.500000 8.100000 59.161224 +7.500000 8.200000 60.525223 +7.500000 8.300000 61.909221 +7.500000 8.400000 63.313220 +7.500000 8.500000 64.737218 +7.500000 8.600000 66.181216 +7.500000 8.700000 67.645215 +7.500000 8.800000 69.129213 +7.500000 8.900000 70.633212 +7.500000 9.000000 72.157210 +7.500000 9.100000 73.701208 +7.500000 9.200000 75.265207 +7.500000 9.300000 76.849205 +7.500000 9.400000 78.453204 +7.500000 9.500000 80.077202 +7.500000 9.600000 81.721201 +7.500000 9.700000 83.385199 +7.500000 9.800000 85.069197 +7.500000 9.900000 86.773196 +7.500000 10.000000 88.497194 +7.500000 10.100000 90.241193 +7.500000 10.200000 92.005191 +7.500000 10.300000 93.789190 +7.500000 10.400000 95.593188 +7.500000 10.500000 97.417186 +7.500000 10.600000 99.261185 +7.500000 10.700000 101.125183 +7.500000 10.800000 103.009182 +7.500000 10.900000 104.913180 +7.500000 11.000000 106.837178 +7.500000 11.100000 108.781177 +7.500000 11.200000 110.745175 +7.500000 11.300000 112.729174 +7.500000 11.400000 114.733172 +7.500000 11.500000 116.757171 +7.500000 11.600000 118.801169 +7.500000 11.700000 120.865167 +7.500000 11.800000 122.949166 +7.500000 11.900000 125.053164 +7.500000 12.000000 127.177163 +7.500000 12.100000 129.321161 +7.500000 12.200000 131.485159 +7.500000 12.300000 133.669158 +7.500000 12.400000 135.873156 +7.500000 12.500000 138.097155 +7.500000 12.600000 140.341153 +7.500000 12.700000 142.605152 +7.500000 12.800000 144.889150 +7.500000 12.900000 147.193148 +7.500000 13.000000 149.517147 +7.500000 13.100000 151.861145 +7.500000 13.200000 154.225144 +7.500000 13.300000 156.609142 +7.500000 13.400000 159.013140 +7.500000 13.500000 161.437139 +7.500000 13.600000 163.881137 +7.500000 13.700000 166.345136 +7.500000 13.800000 168.829134 +7.500000 13.900000 171.333133 +7.500000 14.000000 173.857131 +7.500000 14.100000 176.401129 +7.500000 14.200000 178.965128 +7.500000 14.300000 181.549126 +7.500000 14.400000 184.153125 +7.500000 14.500000 186.777123 +7.500000 14.600000 189.421122 +7.500000 14.700000 192.085120 +7.500000 14.800000 194.769118 +7.500000 14.900000 197.473117 +7.500000 15.000000 200.197115 + +7.600000 -5.000000 52.937583 +7.600000 -4.900000 51.674398 +7.600000 -4.800000 50.431214 +7.600000 -4.700000 49.208030 +7.600000 -4.600000 48.004846 +7.600000 -4.500000 46.821661 +7.600000 -4.400000 45.658477 +7.600000 -4.300000 44.515293 +7.600000 -4.200000 43.392108 +7.600000 -4.100000 42.288924 +7.600000 -4.000000 41.205740 +7.600000 -3.900000 40.142555 +7.600000 -3.800000 39.099371 +7.600000 -3.700000 38.076187 +7.600000 -3.600000 37.073002 +7.600000 -3.500000 36.089818 +7.600000 -3.400000 35.126634 +7.600000 -3.300000 34.183449 +7.600000 -3.200000 33.260265 +7.600000 -3.100000 32.357081 +7.600000 -3.000000 31.473896 +7.600000 -2.900000 30.610712 +7.600000 -2.800000 29.767528 +7.600000 -2.700000 28.944344 +7.600000 -2.600000 28.141159 +7.600000 -2.500000 27.357975 +7.600000 -2.400000 26.594791 +7.600000 -2.300000 25.851606 +7.600000 -2.200000 25.128422 +7.600000 -2.100000 24.425238 +7.600000 -2.000000 23.742053 +7.600000 -1.900000 23.078869 +7.600000 -1.800000 22.435685 +7.600000 -1.700000 21.812500 +7.600000 -1.600000 21.209316 +7.600000 -1.500000 20.626132 +7.600000 -1.400000 20.062947 +7.600000 -1.300000 19.519763 +7.600000 -1.200000 18.996579 +7.600000 -1.100000 18.493395 +7.600000 -1.000000 18.010210 +7.600000 -0.900000 17.547026 +7.600000 -0.800000 17.103842 +7.600000 -0.700000 16.680657 +7.600000 -0.600000 16.277473 +7.600000 -0.500000 15.894289 +7.600000 -0.400000 15.531104 +7.600000 -0.300000 15.187920 +7.600000 -0.200000 14.864736 +7.600000 -0.100000 14.561551 +7.600000 -0.000000 14.278367 +7.600000 0.100000 14.015183 +7.600000 0.200000 13.771998 +7.600000 0.300000 13.548814 +7.600000 0.400000 13.345630 +7.600000 0.500000 13.162445 +7.600000 0.600000 12.999261 +7.600000 0.700000 12.856077 +7.600000 0.800000 12.732893 +7.600000 0.900000 12.629708 +7.600000 1.000000 12.546524 +7.600000 1.100000 12.483340 +7.600000 1.200000 12.440155 +7.600000 1.300000 12.416971 +7.600000 1.400000 12.413787 +7.600000 1.500000 12.430602 +7.600000 1.600000 12.467418 +7.600000 1.700000 12.524234 +7.600000 1.800000 12.601049 +7.600000 1.900000 12.697865 +7.600000 2.000000 12.814681 +7.600000 2.100000 12.951496 +7.600000 2.200000 13.108312 +7.600000 2.300000 13.285128 +7.600000 2.400000 13.481944 +7.600000 2.500000 13.698759 +7.600000 2.600000 13.935575 +7.600000 2.700000 14.192391 +7.600000 2.800000 14.469206 +7.600000 2.900000 14.766022 +7.600000 3.000000 15.082838 +7.600000 3.100000 15.419653 +7.600000 3.200000 15.776469 +7.600000 3.300000 16.153285 +7.600000 3.400000 16.550100 +7.600000 3.500000 16.966916 +7.600000 3.600000 17.403732 +7.600000 3.700000 17.860547 +7.600000 3.800000 18.337363 +7.600000 3.900000 18.834179 +7.600000 4.000000 19.350994 +7.600000 4.100000 19.887810 +7.600000 4.200000 20.444626 +7.600000 4.300000 21.021442 +7.600000 4.400000 21.618257 +7.600000 4.500000 22.235073 +7.600000 4.600000 22.871889 +7.600000 4.700000 23.528704 +7.600000 4.800000 24.205520 +7.600000 4.900000 24.902336 +7.600000 5.000000 25.619151 +7.600000 5.100000 26.355967 +7.600000 5.200000 27.112783 +7.600000 5.300000 27.889598 +7.600000 5.400000 28.686414 +7.600000 5.500000 29.503230 +7.600000 5.600000 30.340045 +7.600000 5.700000 31.196861 +7.600000 5.800000 32.073677 +7.600000 5.900000 32.970492 +7.600000 6.000000 33.887308 +7.600000 6.100000 34.824124 +7.600000 6.200000 35.780940 +7.600000 6.300000 36.757755 +7.600000 6.400000 37.754571 +7.600000 6.500000 38.771387 +7.600000 6.600000 39.808202 +7.600000 6.700000 40.865018 +7.600000 6.800000 41.941834 +7.600000 6.900000 43.038649 +7.600000 7.000000 44.155465 +7.600000 7.100000 45.292281 +7.600000 7.200000 46.449096 +7.600000 7.300000 47.625912 +7.600000 7.400000 48.822728 +7.600000 7.500000 50.039543 +7.600000 7.600000 51.276359 +7.600000 7.700000 52.533175 +7.600000 7.800000 53.809991 +7.600000 7.900000 55.106806 +7.600000 8.000000 56.423622 +7.600000 8.100000 57.760438 +7.600000 8.200000 59.117253 +7.600000 8.300000 60.494069 +7.600000 8.400000 61.890885 +7.600000 8.500000 63.307700 +7.600000 8.600000 64.744516 +7.600000 8.700000 66.201332 +7.600000 8.800000 67.678147 +7.600000 8.900000 69.174963 +7.600000 9.000000 70.691779 +7.600000 9.100000 72.228594 +7.600000 9.200000 73.785410 +7.600000 9.300000 75.362226 +7.600000 9.400000 76.959041 +7.600000 9.500000 78.575857 +7.600000 9.600000 80.212673 +7.600000 9.700000 81.869489 +7.600000 9.800000 83.546304 +7.600000 9.900000 85.243120 +7.600000 10.000000 86.959936 +7.600000 10.100000 88.696751 +7.600000 10.200000 90.453567 +7.600000 10.300000 92.230383 +7.600000 10.400000 94.027198 +7.600000 10.500000 95.844014 +7.600000 10.600000 97.680830 +7.600000 10.700000 99.537645 +7.600000 10.800000 101.414461 +7.600000 10.900000 103.311277 +7.600000 11.000000 105.228092 +7.600000 11.100000 107.164908 +7.600000 11.200000 109.121724 +7.600000 11.300000 111.098540 +7.600000 11.400000 113.095355 +7.600000 11.500000 115.112171 +7.600000 11.600000 117.148987 +7.600000 11.700000 119.205802 +7.600000 11.800000 121.282618 +7.600000 11.900000 123.379434 +7.600000 12.000000 125.496249 +7.600000 12.100000 127.633065 +7.600000 12.200000 129.789881 +7.600000 12.300000 131.966696 +7.600000 12.400000 134.163512 +7.600000 12.500000 136.380328 +7.600000 12.600000 138.617143 +7.600000 12.700000 140.873959 +7.600000 12.800000 143.150775 +7.600000 12.900000 145.447590 +7.600000 13.000000 147.764406 +7.600000 13.100000 150.101222 +7.600000 13.200000 152.458038 +7.600000 13.300000 154.834853 +7.600000 13.400000 157.231669 +7.600000 13.500000 159.648485 +7.600000 13.600000 162.085300 +7.600000 13.700000 164.542116 +7.600000 13.800000 167.018932 +7.600000 13.900000 169.515747 +7.600000 14.000000 172.032563 +7.600000 14.100000 174.569379 +7.600000 14.200000 177.126194 +7.600000 14.300000 179.703010 +7.600000 14.400000 182.299826 +7.600000 14.500000 184.916641 +7.600000 14.600000 187.553457 +7.600000 14.700000 190.210273 +7.600000 14.800000 192.887088 +7.600000 14.900000 195.583904 +7.600000 15.000000 198.300720 + +7.700000 -5.000000 52.489295 +7.700000 -4.900000 51.218411 +7.700000 -4.800000 49.967527 +7.700000 -4.700000 48.736644 +7.700000 -4.600000 47.525760 +7.700000 -4.500000 46.334876 +7.700000 -4.400000 45.163992 +7.700000 -4.300000 44.013108 +7.700000 -4.200000 42.882225 +7.700000 -4.100000 41.771341 +7.700000 -4.000000 40.680457 +7.700000 -3.900000 39.609573 +7.700000 -3.800000 38.558689 +7.700000 -3.700000 37.527806 +7.700000 -3.600000 36.516922 +7.700000 -3.500000 35.526038 +7.700000 -3.400000 34.555154 +7.700000 -3.300000 33.604271 +7.700000 -3.200000 32.673387 +7.700000 -3.100000 31.762503 +7.700000 -3.000000 30.871619 +7.700000 -2.900000 30.000735 +7.700000 -2.800000 29.149852 +7.700000 -2.700000 28.318968 +7.700000 -2.600000 27.508084 +7.700000 -2.500000 26.717200 +7.700000 -2.400000 25.946316 +7.700000 -2.300000 25.195433 +7.700000 -2.200000 24.464549 +7.700000 -2.100000 23.753665 +7.700000 -2.000000 23.062781 +7.700000 -1.900000 22.391898 +7.700000 -1.800000 21.741014 +7.700000 -1.700000 21.110130 +7.700000 -1.600000 20.499246 +7.700000 -1.500000 19.908362 +7.700000 -1.400000 19.337479 +7.700000 -1.300000 18.786595 +7.700000 -1.200000 18.255711 +7.700000 -1.100000 17.744827 +7.700000 -1.000000 17.253943 +7.700000 -0.900000 16.783060 +7.700000 -0.800000 16.332176 +7.700000 -0.700000 15.901292 +7.700000 -0.600000 15.490408 +7.700000 -0.500000 15.099525 +7.700000 -0.400000 14.728641 +7.700000 -0.300000 14.377757 +7.700000 -0.200000 14.046873 +7.700000 -0.100000 13.735989 +7.700000 -0.000000 13.445106 +7.700000 0.100000 13.174222 +7.700000 0.200000 12.923338 +7.700000 0.300000 12.692454 +7.700000 0.400000 12.481570 +7.700000 0.500000 12.290687 +7.700000 0.600000 12.119803 +7.700000 0.700000 11.968919 +7.700000 0.800000 11.838035 +7.700000 0.900000 11.727152 +7.700000 1.000000 11.636268 +7.700000 1.100000 11.565384 +7.700000 1.200000 11.514500 +7.700000 1.300000 11.483616 +7.700000 1.400000 11.472733 +7.700000 1.500000 11.481849 +7.700000 1.600000 11.510965 +7.700000 1.700000 11.560081 +7.700000 1.800000 11.629197 +7.700000 1.900000 11.718314 +7.700000 2.000000 11.827430 +7.700000 2.100000 11.956546 +7.700000 2.200000 12.105662 +7.700000 2.300000 12.274779 +7.700000 2.400000 12.463895 +7.700000 2.500000 12.673011 +7.700000 2.600000 12.902127 +7.700000 2.700000 13.151243 +7.700000 2.800000 13.420360 +7.700000 2.900000 13.709476 +7.700000 3.000000 14.018592 +7.700000 3.100000 14.347708 +7.700000 3.200000 14.696824 +7.700000 3.300000 15.065941 +7.700000 3.400000 15.455057 +7.700000 3.500000 15.864173 +7.700000 3.600000 16.293289 +7.700000 3.700000 16.742406 +7.700000 3.800000 17.211522 +7.700000 3.900000 17.700638 +7.700000 4.000000 18.209754 +7.700000 4.100000 18.738870 +7.700000 4.200000 19.287987 +7.700000 4.300000 19.857103 +7.700000 4.400000 20.446219 +7.700000 4.500000 21.055335 +7.700000 4.600000 21.684451 +7.700000 4.700000 22.333568 +7.700000 4.800000 23.002684 +7.700000 4.900000 23.691800 +7.700000 5.000000 24.400916 +7.700000 5.100000 25.130033 +7.700000 5.200000 25.879149 +7.700000 5.300000 26.648265 +7.700000 5.400000 27.437381 +7.700000 5.500000 28.246497 +7.700000 5.600000 29.075614 +7.700000 5.700000 29.924730 +7.700000 5.800000 30.793846 +7.700000 5.900000 31.682962 +7.700000 6.000000 32.592078 +7.700000 6.100000 33.521195 +7.700000 6.200000 34.470311 +7.700000 6.300000 35.439427 +7.700000 6.400000 36.428543 +7.700000 6.500000 37.437660 +7.700000 6.600000 38.466776 +7.700000 6.700000 39.515892 +7.700000 6.800000 40.585008 +7.700000 6.900000 41.674124 +7.700000 7.000000 42.783241 +7.700000 7.100000 43.912357 +7.700000 7.200000 45.061473 +7.700000 7.300000 46.230589 +7.700000 7.400000 47.419705 +7.700000 7.500000 48.628822 +7.700000 7.600000 49.857938 +7.700000 7.700000 51.107054 +7.700000 7.800000 52.376170 +7.700000 7.900000 53.665287 +7.700000 8.000000 54.974403 +7.700000 8.100000 56.303519 +7.700000 8.200000 57.652635 +7.700000 8.300000 59.021751 +7.700000 8.400000 60.410868 +7.700000 8.500000 61.819984 +7.700000 8.600000 63.249100 +7.700000 8.700000 64.698216 +7.700000 8.800000 66.167332 +7.700000 8.900000 67.656449 +7.700000 9.000000 69.165565 +7.700000 9.100000 70.694681 +7.700000 9.200000 72.243797 +7.700000 9.300000 73.812914 +7.700000 9.400000 75.402030 +7.700000 9.500000 77.011146 +7.700000 9.600000 78.640262 +7.700000 9.700000 80.289378 +7.700000 9.800000 81.958495 +7.700000 9.900000 83.647611 +7.700000 10.000000 85.356727 +7.700000 10.100000 87.085843 +7.700000 10.200000 88.834959 +7.700000 10.300000 90.604076 +7.700000 10.400000 92.393192 +7.700000 10.500000 94.202308 +7.700000 10.600000 96.031424 +7.700000 10.700000 97.880541 +7.700000 10.800000 99.749657 +7.700000 10.900000 101.638773 +7.700000 11.000000 103.547889 +7.700000 11.100000 105.477005 +7.700000 11.200000 107.426122 +7.700000 11.300000 109.395238 +7.700000 11.400000 111.384354 +7.700000 11.500000 113.393470 +7.700000 11.600000 115.422586 +7.700000 11.700000 117.471703 +7.700000 11.800000 119.540819 +7.700000 11.900000 121.629935 +7.700000 12.000000 123.739051 +7.700000 12.100000 125.868168 +7.700000 12.200000 128.017284 +7.700000 12.300000 130.186400 +7.700000 12.400000 132.375516 +7.700000 12.500000 134.584632 +7.700000 12.600000 136.813749 +7.700000 12.700000 139.062865 +7.700000 12.800000 141.331981 +7.700000 12.900000 143.621097 +7.700000 13.000000 145.930213 +7.700000 13.100000 148.259330 +7.700000 13.200000 150.608446 +7.700000 13.300000 152.977562 +7.700000 13.400000 155.366678 +7.700000 13.500000 157.775795 +7.700000 13.600000 160.204911 +7.700000 13.700000 162.654027 +7.700000 13.800000 165.123143 +7.700000 13.900000 167.612259 +7.700000 14.000000 170.121376 +7.700000 14.100000 172.650492 +7.700000 14.200000 175.199608 +7.700000 14.300000 177.768724 +7.700000 14.400000 180.357840 +7.700000 14.500000 182.966957 +7.700000 14.600000 185.596073 +7.700000 14.700000 188.245189 +7.700000 14.800000 190.914305 +7.700000 14.900000 193.603422 +7.700000 15.000000 196.312538 + +7.800000 -5.000000 52.062556 +7.800000 -4.900000 50.783456 +7.800000 -4.800000 49.524356 +7.800000 -4.700000 48.285256 +7.800000 -4.600000 47.066156 +7.800000 -4.500000 45.867056 +7.800000 -4.400000 44.687956 +7.800000 -4.300000 43.528856 +7.800000 -4.200000 42.389756 +7.800000 -4.100000 41.270656 +7.800000 -4.000000 40.171556 +7.800000 -3.900000 39.092456 +7.800000 -3.800000 38.033356 +7.800000 -3.700000 36.994256 +7.800000 -3.600000 35.975156 +7.800000 -3.500000 34.976056 +7.800000 -3.400000 33.996956 +7.800000 -3.300000 33.037856 +7.800000 -3.200000 32.098756 +7.800000 -3.100000 31.179656 +7.800000 -3.000000 30.280556 +7.800000 -2.900000 29.401456 +7.800000 -2.800000 28.542356 +7.800000 -2.700000 27.703256 +7.800000 -2.600000 26.884156 +7.800000 -2.500000 26.085056 +7.800000 -2.400000 25.305956 +7.800000 -2.300000 24.546856 +7.800000 -2.200000 23.807756 +7.800000 -2.100000 23.088656 +7.800000 -2.000000 22.389556 +7.800000 -1.900000 21.710456 +7.800000 -1.800000 21.051356 +7.800000 -1.700000 20.412256 +7.800000 -1.600000 19.793156 +7.800000 -1.500000 19.194056 +7.800000 -1.400000 18.614956 +7.800000 -1.300000 18.055856 +7.800000 -1.200000 17.516756 +7.800000 -1.100000 16.997656 +7.800000 -1.000000 16.498556 +7.800000 -0.900000 16.019456 +7.800000 -0.800000 15.560356 +7.800000 -0.700000 15.121256 +7.800000 -0.600000 14.702156 +7.800000 -0.500000 14.303056 +7.800000 -0.400000 13.923956 +7.800000 -0.300000 13.564856 +7.800000 -0.200000 13.225756 +7.800000 -0.100000 12.906656 +7.800000 -0.000000 12.607556 +7.800000 0.100000 12.328456 +7.800000 0.200000 12.069356 +7.800000 0.300000 11.830256 +7.800000 0.400000 11.611156 +7.800000 0.500000 11.412056 +7.800000 0.600000 11.232956 +7.800000 0.700000 11.073856 +7.800000 0.800000 10.934756 +7.800000 0.900000 10.815656 +7.800000 1.000000 10.716556 +7.800000 1.100000 10.637456 +7.800000 1.200000 10.578356 +7.800000 1.300000 10.539256 +7.800000 1.400000 10.520156 +7.800000 1.500000 10.521056 +7.800000 1.600000 10.541956 +7.800000 1.700000 10.582856 +7.800000 1.800000 10.643756 +7.800000 1.900000 10.724656 +7.800000 2.000000 10.825556 +7.800000 2.100000 10.946456 +7.800000 2.200000 11.087356 +7.800000 2.300000 11.248256 +7.800000 2.400000 11.429156 +7.800000 2.500000 11.630056 +7.800000 2.600000 11.850956 +7.800000 2.700000 12.091856 +7.800000 2.800000 12.352756 +7.800000 2.900000 12.633656 +7.800000 3.000000 12.934556 +7.800000 3.100000 13.255456 +7.800000 3.200000 13.596356 +7.800000 3.300000 13.957256 +7.800000 3.400000 14.338156 +7.800000 3.500000 14.739056 +7.800000 3.600000 15.159956 +7.800000 3.700000 15.600856 +7.800000 3.800000 16.061756 +7.800000 3.900000 16.542656 +7.800000 4.000000 17.043556 +7.800000 4.100000 17.564456 +7.800000 4.200000 18.105356 +7.800000 4.300000 18.666256 +7.800000 4.400000 19.247156 +7.800000 4.500000 19.848056 +7.800000 4.600000 20.468956 +7.800000 4.700000 21.109856 +7.800000 4.800000 21.770756 +7.800000 4.900000 22.451656 +7.800000 5.000000 23.152556 +7.800000 5.100000 23.873456 +7.800000 5.200000 24.614356 +7.800000 5.300000 25.375256 +7.800000 5.400000 26.156156 +7.800000 5.500000 26.957056 +7.800000 5.600000 27.777956 +7.800000 5.700000 28.618856 +7.800000 5.800000 29.479756 +7.800000 5.900000 30.360656 +7.800000 6.000000 31.261557 +7.800000 6.100000 32.182457 +7.800000 6.200000 33.123357 +7.800000 6.300000 34.084257 +7.800000 6.400000 35.065157 +7.800000 6.500000 36.066057 +7.800000 6.600000 37.086957 +7.800000 6.700000 38.127857 +7.800000 6.800000 39.188757 +7.800000 6.900000 40.269657 +7.800000 7.000000 41.370557 +7.800000 7.100000 42.491457 +7.800000 7.200000 43.632357 +7.800000 7.300000 44.793257 +7.800000 7.400000 45.974157 +7.800000 7.500000 47.175057 +7.800000 7.600000 48.395957 +7.800000 7.700000 49.636857 +7.800000 7.800000 50.897757 +7.800000 7.900000 52.178657 +7.800000 8.000000 53.479557 +7.800000 8.100000 54.800457 +7.800000 8.200000 56.141357 +7.800000 8.300000 57.502257 +7.800000 8.400000 58.883157 +7.800000 8.500000 60.284057 +7.800000 8.600000 61.704957 +7.800000 8.700000 63.145857 +7.800000 8.800000 64.606757 +7.800000 8.900000 66.087657 +7.800000 9.000000 67.588557 +7.800000 9.100000 69.109457 +7.800000 9.200000 70.650357 +7.800000 9.300000 72.211257 +7.800000 9.400000 73.792157 +7.800000 9.500000 75.393057 +7.800000 9.600000 77.013957 +7.800000 9.700000 78.654857 +7.800000 9.800000 80.315757 +7.800000 9.900000 81.996657 +7.800000 10.000000 83.697557 +7.800000 10.100000 85.418457 +7.800000 10.200000 87.159357 +7.800000 10.300000 88.920257 +7.800000 10.400000 90.701157 +7.800000 10.500000 92.502057 +7.800000 10.600000 94.322957 +7.800000 10.700000 96.163857 +7.800000 10.800000 98.024757 +7.800000 10.900000 99.905657 +7.800000 11.000000 101.806557 +7.800000 11.100000 103.727457 +7.800000 11.200000 105.668357 +7.800000 11.300000 107.629257 +7.800000 11.400000 109.610157 +7.800000 11.500000 111.611057 +7.800000 11.600000 113.631957 +7.800000 11.700000 115.672857 +7.800000 11.800000 117.733757 +7.800000 11.900000 119.814657 +7.800000 12.000000 121.915557 +7.800000 12.100000 124.036457 +7.800000 12.200000 126.177357 +7.800000 12.300000 128.338257 +7.800000 12.400000 130.519157 +7.800000 12.500000 132.720057 +7.800000 12.600000 134.940957 +7.800000 12.700000 137.181857 +7.800000 12.800000 139.442757 +7.800000 12.900000 141.723657 +7.800000 13.000000 144.024557 +7.800000 13.100000 146.345457 +7.800000 13.200000 148.686357 +7.800000 13.300000 151.047257 +7.800000 13.400000 153.428157 +7.800000 13.500000 155.829057 +7.800000 13.600000 158.249957 +7.800000 13.700000 160.690857 +7.800000 13.800000 163.151757 +7.800000 13.900000 165.632657 +7.800000 14.000000 168.133557 +7.800000 14.100000 170.654457 +7.800000 14.200000 173.195357 +7.800000 14.300000 175.756257 +7.800000 14.400000 178.337157 +7.800000 14.500000 180.938057 +7.800000 14.600000 183.558957 +7.800000 14.700000 186.199857 +7.800000 14.800000 188.860757 +7.800000 14.900000 191.541657 +7.800000 15.000000 194.242557 + +7.900000 -5.000000 51.667541 +7.900000 -4.900000 50.379708 +7.900000 -4.800000 49.111875 +7.900000 -4.700000 47.864042 +7.900000 -4.600000 46.636209 +7.900000 -4.500000 45.428376 +7.900000 -4.400000 44.240543 +7.900000 -4.300000 43.072710 +7.900000 -4.200000 41.924878 +7.900000 -4.100000 40.797045 +7.900000 -4.000000 39.689212 +7.900000 -3.900000 38.601379 +7.900000 -3.800000 37.533546 +7.900000 -3.700000 36.485713 +7.900000 -3.600000 35.457880 +7.900000 -3.500000 34.450047 +7.900000 -3.400000 33.462214 +7.900000 -3.300000 32.494381 +7.900000 -3.200000 31.546548 +7.900000 -3.100000 30.618715 +7.900000 -3.000000 29.710882 +7.900000 -2.900000 28.823049 +7.900000 -2.800000 27.955216 +7.900000 -2.700000 27.107383 +7.900000 -2.600000 26.279550 +7.900000 -2.500000 25.471718 +7.900000 -2.400000 24.683885 +7.900000 -2.300000 23.916052 +7.900000 -2.200000 23.168219 +7.900000 -2.100000 22.440386 +7.900000 -2.000000 21.732553 +7.900000 -1.900000 21.044720 +7.900000 -1.800000 20.376887 +7.900000 -1.700000 19.729054 +7.900000 -1.600000 19.101221 +7.900000 -1.500000 18.493388 +7.900000 -1.400000 17.905555 +7.900000 -1.300000 17.337722 +7.900000 -1.200000 16.789889 +7.900000 -1.100000 16.262056 +7.900000 -1.000000 15.754223 +7.900000 -0.900000 15.266390 +7.900000 -0.800000 14.798557 +7.900000 -0.700000 14.350725 +7.900000 -0.600000 13.922892 +7.900000 -0.500000 13.515059 +7.900000 -0.400000 13.127226 +7.900000 -0.300000 12.759393 +7.900000 -0.200000 12.411560 +7.900000 -0.100000 12.083727 +7.900000 -0.000000 11.775894 +7.900000 0.100000 11.488061 +7.900000 0.200000 11.220228 +7.900000 0.300000 10.972395 +7.900000 0.400000 10.744562 +7.900000 0.500000 10.536729 +7.900000 0.600000 10.348896 +7.900000 0.700000 10.181063 +7.900000 0.800000 10.033230 +7.900000 0.900000 9.905397 +7.900000 1.000000 9.797565 +7.900000 1.100000 9.709732 +7.900000 1.200000 9.641899 +7.900000 1.300000 9.594066 +7.900000 1.400000 9.566233 +7.900000 1.500000 9.558400 +7.900000 1.600000 9.570567 +7.900000 1.700000 9.602734 +7.900000 1.800000 9.654901 +7.900000 1.900000 9.727068 +7.900000 2.000000 9.819235 +7.900000 2.100000 9.931402 +7.900000 2.200000 10.063569 +7.900000 2.300000 10.215736 +7.900000 2.400000 10.387903 +7.900000 2.500000 10.580070 +7.900000 2.600000 10.792237 +7.900000 2.700000 11.024405 +7.900000 2.800000 11.276572 +7.900000 2.900000 11.548739 +7.900000 3.000000 11.840906 +7.900000 3.100000 12.153073 +7.900000 3.200000 12.485240 +7.900000 3.300000 12.837407 +7.900000 3.400000 13.209574 +7.900000 3.500000 13.601741 +7.900000 3.600000 14.013908 +7.900000 3.700000 14.446075 +7.900000 3.800000 14.898242 +7.900000 3.900000 15.370409 +7.900000 4.000000 15.862576 +7.900000 4.100000 16.374743 +7.900000 4.200000 16.906910 +7.900000 4.300000 17.459077 +7.900000 4.400000 18.031244 +7.900000 4.500000 18.623412 +7.900000 4.600000 19.235579 +7.900000 4.700000 19.867746 +7.900000 4.800000 20.519913 +7.900000 4.900000 21.192080 +7.900000 5.000000 21.884247 +7.900000 5.100000 22.596414 +7.900000 5.200000 23.328581 +7.900000 5.300000 24.080748 +7.900000 5.400000 24.852915 +7.900000 5.500000 25.645082 +7.900000 5.600000 26.457249 +7.900000 5.700000 27.289416 +7.900000 5.800000 28.141583 +7.900000 5.900000 29.013750 +7.900000 6.000000 29.905917 +7.900000 6.100000 30.818084 +7.900000 6.200000 31.750252 +7.900000 6.300000 32.702419 +7.900000 6.400000 33.674586 +7.900000 6.500000 34.666753 +7.900000 6.600000 35.678920 +7.900000 6.700000 36.711087 +7.900000 6.800000 37.763254 +7.900000 6.900000 38.835421 +7.900000 7.000000 39.927588 +7.900000 7.100000 41.039755 +7.900000 7.200000 42.171922 +7.900000 7.300000 43.324089 +7.900000 7.400000 44.496256 +7.900000 7.500000 45.688423 +7.900000 7.600000 46.900590 +7.900000 7.700000 48.132757 +7.900000 7.800000 49.384924 +7.900000 7.900000 50.657092 +7.900000 8.000000 51.949259 +7.900000 8.100000 53.261426 +7.900000 8.200000 54.593593 +7.900000 8.300000 55.945760 +7.900000 8.400000 57.317927 +7.900000 8.500000 58.710094 +7.900000 8.600000 60.122261 +7.900000 8.700000 61.554428 +7.900000 8.800000 63.006595 +7.900000 8.900000 64.478762 +7.900000 9.000000 65.970929 +7.900000 9.100000 67.483096 +7.900000 9.200000 69.015263 +7.900000 9.300000 70.567430 +7.900000 9.400000 72.139597 +7.900000 9.500000 73.731764 +7.900000 9.600000 75.343931 +7.900000 9.700000 76.976099 +7.900000 9.800000 78.628266 +7.900000 9.900000 80.300433 +7.900000 10.000000 81.992600 +7.900000 10.100000 83.704767 +7.900000 10.200000 85.436934 +7.900000 10.300000 87.189101 +7.900000 10.400000 88.961268 +7.900000 10.500000 90.753435 +7.900000 10.600000 92.565602 +7.900000 10.700000 94.397769 +7.900000 10.800000 96.249936 +7.900000 10.900000 98.122103 +7.900000 11.000000 100.014270 +7.900000 11.100000 101.926437 +7.900000 11.200000 103.858604 +7.900000 11.300000 105.810771 +7.900000 11.400000 107.782939 +7.900000 11.500000 109.775106 +7.900000 11.600000 111.787273 +7.900000 11.700000 113.819440 +7.900000 11.800000 115.871607 +7.900000 11.900000 117.943774 +7.900000 12.000000 120.035941 +7.900000 12.100000 122.148108 +7.900000 12.200000 124.280275 +7.900000 12.300000 126.432442 +7.900000 12.400000 128.604609 +7.900000 12.500000 130.796776 +7.900000 12.600000 133.008943 +7.900000 12.700000 135.241110 +7.900000 12.800000 137.493277 +7.900000 12.900000 139.765444 +7.900000 13.000000 142.057611 +7.900000 13.100000 144.369779 +7.900000 13.200000 146.701946 +7.900000 13.300000 149.054113 +7.900000 13.400000 151.426280 +7.900000 13.500000 153.818447 +7.900000 13.600000 156.230614 +7.900000 13.700000 158.662781 +7.900000 13.800000 161.114948 +7.900000 13.900000 163.587115 +7.900000 14.000000 166.079282 +7.900000 14.100000 168.591449 +7.900000 14.200000 171.123616 +7.900000 14.300000 173.675783 +7.900000 14.400000 176.247950 +7.900000 14.500000 178.840117 +7.900000 14.600000 181.452284 +7.900000 14.700000 184.084451 +7.900000 14.800000 186.736618 +7.900000 14.900000 189.408786 +7.900000 15.000000 192.100953 + +8.000000 -5.000000 51.314517 +8.000000 -4.900000 50.017435 +8.000000 -4.800000 48.740352 +8.000000 -4.700000 47.483269 +8.000000 -4.600000 46.246187 +8.000000 -4.500000 45.029104 +8.000000 -4.400000 43.832021 +8.000000 -4.300000 42.654939 +8.000000 -4.200000 41.497856 +8.000000 -4.100000 40.360774 +8.000000 -4.000000 39.243691 +8.000000 -3.900000 38.146608 +8.000000 -3.800000 37.069526 +8.000000 -3.700000 36.012443 +8.000000 -3.600000 34.975360 +8.000000 -3.500000 33.958278 +8.000000 -3.400000 32.961195 +8.000000 -3.300000 31.984112 +8.000000 -3.200000 31.027030 +8.000000 -3.100000 30.089947 +8.000000 -3.000000 29.172865 +8.000000 -2.900000 28.275782 +8.000000 -2.800000 27.398699 +8.000000 -2.700000 26.541617 +8.000000 -2.600000 25.704534 +8.000000 -2.500000 24.887451 +8.000000 -2.400000 24.090369 +8.000000 -2.300000 23.313286 +8.000000 -2.200000 22.556204 +8.000000 -2.100000 21.819121 +8.000000 -2.000000 21.102038 +8.000000 -1.900000 20.404956 +8.000000 -1.800000 19.727873 +8.000000 -1.700000 19.070790 +8.000000 -1.600000 18.433708 +8.000000 -1.500000 17.816625 +8.000000 -1.400000 17.219543 +8.000000 -1.300000 16.642460 +8.000000 -1.200000 16.085377 +8.000000 -1.100000 15.548295 +8.000000 -1.000000 15.031212 +8.000000 -0.900000 14.534129 +8.000000 -0.800000 14.057047 +8.000000 -0.700000 13.599964 +8.000000 -0.600000 13.162882 +8.000000 -0.500000 12.745799 +8.000000 -0.400000 12.348716 +8.000000 -0.300000 11.971634 +8.000000 -0.200000 11.614551 +8.000000 -0.100000 11.277468 +8.000000 -0.000000 10.960386 +8.000000 0.100000 10.663303 +8.000000 0.200000 10.386221 +8.000000 0.300000 10.129138 +8.000000 0.400000 9.892055 +8.000000 0.500000 9.674973 +8.000000 0.600000 9.477890 +8.000000 0.700000 9.300807 +8.000000 0.800000 9.143725 +8.000000 0.900000 9.006642 +8.000000 1.000000 8.889560 +8.000000 1.100000 8.792477 +8.000000 1.200000 8.715394 +8.000000 1.300000 8.658312 +8.000000 1.400000 8.621229 +8.000000 1.500000 8.604146 +8.000000 1.600000 8.607064 +8.000000 1.700000 8.629981 +8.000000 1.800000 8.672898 +8.000000 1.900000 8.735816 +8.000000 2.000000 8.818733 +8.000000 2.100000 8.921651 +8.000000 2.200000 9.044568 +8.000000 2.300000 9.187485 +8.000000 2.400000 9.350403 +8.000000 2.500000 9.533320 +8.000000 2.600000 9.736237 +8.000000 2.700000 9.959155 +8.000000 2.800000 10.202072 +8.000000 2.900000 10.464990 +8.000000 3.000000 10.747907 +8.000000 3.100000 11.050824 +8.000000 3.200000 11.373742 +8.000000 3.300000 11.716659 +8.000000 3.400000 12.079576 +8.000000 3.500000 12.462494 +8.000000 3.600000 12.865411 +8.000000 3.700000 13.288329 +8.000000 3.800000 13.731246 +8.000000 3.900000 14.194163 +8.000000 4.000000 14.677081 +8.000000 4.100000 15.179998 +8.000000 4.200000 15.702915 +8.000000 4.300000 16.245833 +8.000000 4.400000 16.808750 +8.000000 4.500000 17.391668 +8.000000 4.600000 17.994585 +8.000000 4.700000 18.617502 +8.000000 4.800000 19.260420 +8.000000 4.900000 19.923337 +8.000000 5.000000 20.606254 +8.000000 5.100000 21.309172 +8.000000 5.200000 22.032089 +8.000000 5.300000 22.775007 +8.000000 5.400000 23.537924 +8.000000 5.500000 24.320841 +8.000000 5.600000 25.123759 +8.000000 5.700000 25.946676 +8.000000 5.800000 26.789593 +8.000000 5.900000 27.652511 +8.000000 6.000000 28.535428 +8.000000 6.100000 29.438346 +8.000000 6.200000 30.361263 +8.000000 6.300000 31.304180 +8.000000 6.400000 32.267098 +8.000000 6.500000 33.250015 +8.000000 6.600000 34.252932 +8.000000 6.700000 35.275850 +8.000000 6.800000 36.318767 +8.000000 6.900000 37.381684 +8.000000 7.000000 38.464602 +8.000000 7.100000 39.567519 +8.000000 7.200000 40.690437 +8.000000 7.300000 41.833354 +8.000000 7.400000 42.996271 +8.000000 7.500000 44.179189 +8.000000 7.600000 45.382106 +8.000000 7.700000 46.605023 +8.000000 7.800000 47.847941 +8.000000 7.900000 49.110858 +8.000000 8.000000 50.393776 +8.000000 8.100000 51.696693 +8.000000 8.200000 53.019610 +8.000000 8.300000 54.362528 +8.000000 8.400000 55.725445 +8.000000 8.500000 57.108362 +8.000000 8.600000 58.511280 +8.000000 8.700000 59.934197 +8.000000 8.800000 61.377115 +8.000000 8.900000 62.840032 +8.000000 9.000000 64.322949 +8.000000 9.100000 65.825867 +8.000000 9.200000 67.348784 +8.000000 9.300000 68.891701 +8.000000 9.400000 70.454619 +8.000000 9.500000 72.037536 +8.000000 9.600000 73.640454 +8.000000 9.700000 75.263371 +8.000000 9.800000 76.906288 +8.000000 9.900000 78.569206 +8.000000 10.000000 80.252123 +8.000000 10.100000 81.955040 +8.000000 10.200000 83.677958 +8.000000 10.300000 85.420875 +8.000000 10.400000 87.183793 +8.000000 10.500000 88.966710 +8.000000 10.600000 90.769627 +8.000000 10.700000 92.592545 +8.000000 10.800000 94.435462 +8.000000 10.900000 96.298379 +8.000000 11.000000 98.181297 +8.000000 11.100000 100.084214 +8.000000 11.200000 102.007132 +8.000000 11.300000 103.950049 +8.000000 11.400000 105.912966 +8.000000 11.500000 107.895884 +8.000000 11.600000 109.898801 +8.000000 11.700000 111.921718 +8.000000 11.800000 113.964636 +8.000000 11.900000 116.027553 +8.000000 12.000000 118.110470 +8.000000 12.100000 120.213388 +8.000000 12.200000 122.336305 +8.000000 12.300000 124.479223 +8.000000 12.400000 126.642140 +8.000000 12.500000 128.825057 +8.000000 12.600000 131.027975 +8.000000 12.700000 133.250892 +8.000000 12.800000 135.493809 +8.000000 12.900000 137.756727 +8.000000 13.000000 140.039644 +8.000000 13.100000 142.342562 +8.000000 13.200000 144.665479 +8.000000 13.300000 147.008396 +8.000000 13.400000 149.371314 +8.000000 13.500000 151.754231 +8.000000 13.600000 154.157148 +8.000000 13.700000 156.580066 +8.000000 13.800000 159.022983 +8.000000 13.900000 161.485901 +8.000000 14.000000 163.968818 +8.000000 14.100000 166.471735 +8.000000 14.200000 168.994653 +8.000000 14.300000 171.537570 +8.000000 14.400000 174.100487 +8.000000 14.500000 176.683405 +8.000000 14.600000 179.286322 +8.000000 14.700000 181.909240 +8.000000 14.800000 184.552157 +8.000000 14.900000 187.215074 +8.000000 15.000000 189.897992 + +8.100000 -5.000000 51.013747 +8.100000 -4.900000 49.706898 +8.100000 -4.800000 48.420049 +8.100000 -4.700000 47.153200 +8.100000 -4.600000 45.906351 +8.100000 -4.500000 44.679502 +8.100000 -4.400000 43.472653 +8.100000 -4.300000 42.285804 +8.100000 -4.200000 41.118955 +8.100000 -4.100000 39.972106 +8.100000 -4.000000 38.845257 +8.100000 -3.900000 37.738408 +8.100000 -3.800000 36.651559 +8.100000 -3.700000 35.584710 +8.100000 -3.600000 34.537860 +8.100000 -3.500000 33.511011 +8.100000 -3.400000 32.504162 +8.100000 -3.300000 31.517313 +8.100000 -3.200000 30.550464 +8.100000 -3.100000 29.603615 +8.100000 -3.000000 28.676766 +8.100000 -2.900000 27.769917 +8.100000 -2.800000 26.883068 +8.100000 -2.700000 26.016219 +8.100000 -2.600000 25.169370 +8.100000 -2.500000 24.342521 +8.100000 -2.400000 23.535672 +8.100000 -2.300000 22.748823 +8.100000 -2.200000 21.981974 +8.100000 -2.100000 21.235125 +8.100000 -2.000000 20.508276 +8.100000 -1.900000 19.801427 +8.100000 -1.800000 19.114578 +8.100000 -1.700000 18.447728 +8.100000 -1.600000 17.800879 +8.100000 -1.500000 17.174030 +8.100000 -1.400000 16.567181 +8.100000 -1.300000 15.980332 +8.100000 -1.200000 15.413483 +8.100000 -1.100000 14.866634 +8.100000 -1.000000 14.339785 +8.100000 -0.900000 13.832936 +8.100000 -0.800000 13.346087 +8.100000 -0.700000 12.879238 +8.100000 -0.600000 12.432389 +8.100000 -0.500000 12.005540 +8.100000 -0.400000 11.598691 +8.100000 -0.300000 11.211842 +8.100000 -0.200000 10.844993 +8.100000 -0.100000 10.498144 +8.100000 -0.000000 10.171295 +8.100000 0.100000 9.864446 +8.100000 0.200000 9.577597 +8.100000 0.300000 9.310747 +8.100000 0.400000 9.063898 +8.100000 0.500000 8.837049 +8.100000 0.600000 8.630200 +8.100000 0.700000 8.443351 +8.100000 0.800000 8.276502 +8.100000 0.900000 8.129653 +8.100000 1.000000 8.002804 +8.100000 1.100000 7.895955 +8.100000 1.200000 7.809106 +8.100000 1.300000 7.742257 +8.100000 1.400000 7.695408 +8.100000 1.500000 7.668559 +8.100000 1.600000 7.661710 +8.100000 1.700000 7.674861 +8.100000 1.800000 7.708012 +8.100000 1.900000 7.761163 +8.100000 2.000000 7.834314 +8.100000 2.100000 7.927465 +8.100000 2.200000 8.040616 +8.100000 2.300000 8.173766 +8.100000 2.400000 8.326917 +8.100000 2.500000 8.500068 +8.100000 2.600000 8.693219 +8.100000 2.700000 8.906370 +8.100000 2.800000 9.139521 +8.100000 2.900000 9.392672 +8.100000 3.000000 9.665823 +8.100000 3.100000 9.958974 +8.100000 3.200000 10.272125 +8.100000 3.300000 10.605276 +8.100000 3.400000 10.958427 +8.100000 3.500000 11.331578 +8.100000 3.600000 11.724729 +8.100000 3.700000 12.137880 +8.100000 3.800000 12.571031 +8.100000 3.900000 13.024182 +8.100000 4.000000 13.497333 +8.100000 4.100000 13.990484 +8.100000 4.200000 14.503634 +8.100000 4.300000 15.036785 +8.100000 4.400000 15.589936 +8.100000 4.500000 16.163087 +8.100000 4.600000 16.756238 +8.100000 4.700000 17.369389 +8.100000 4.800000 18.002540 +8.100000 4.900000 18.655691 +8.100000 5.000000 19.328842 +8.100000 5.100000 20.021993 +8.100000 5.200000 20.735144 +8.100000 5.300000 21.468295 +8.100000 5.400000 22.221446 +8.100000 5.500000 22.994597 +8.100000 5.600000 23.787748 +8.100000 5.700000 24.600899 +8.100000 5.800000 25.434050 +8.100000 5.900000 26.287201 +8.100000 6.000000 27.160352 +8.100000 6.100000 28.053503 +8.100000 6.200000 28.966653 +8.100000 6.300000 29.899804 +8.100000 6.400000 30.852955 +8.100000 6.500000 31.826106 +8.100000 6.600000 32.819257 +8.100000 6.700000 33.832408 +8.100000 6.800000 34.865559 +8.100000 6.900000 35.918710 +8.100000 7.000000 36.991861 +8.100000 7.100000 38.085012 +8.100000 7.200000 39.198163 +8.100000 7.300000 40.331314 +8.100000 7.400000 41.484465 +8.100000 7.500000 42.657616 +8.100000 7.600000 43.850767 +8.100000 7.700000 45.063918 +8.100000 7.800000 46.297069 +8.100000 7.900000 47.550220 +8.100000 8.000000 48.823371 +8.100000 8.100000 50.116522 +8.100000 8.200000 51.429672 +8.100000 8.300000 52.762823 +8.100000 8.400000 54.115974 +8.100000 8.500000 55.489125 +8.100000 8.600000 56.882276 +8.100000 8.700000 58.295427 +8.100000 8.800000 59.728578 +8.100000 8.900000 61.181729 +8.100000 9.000000 62.654880 +8.100000 9.100000 64.148031 +8.100000 9.200000 65.661182 +8.100000 9.300000 67.194333 +8.100000 9.400000 68.747484 +8.100000 9.500000 70.320635 +8.100000 9.600000 71.913786 +8.100000 9.700000 73.526937 +8.100000 9.800000 75.160088 +8.100000 9.900000 76.813239 +8.100000 10.000000 78.486390 +8.100000 10.100000 80.179540 +8.100000 10.200000 81.892691 +8.100000 10.300000 83.625842 +8.100000 10.400000 85.378993 +8.100000 10.500000 87.152144 +8.100000 10.600000 88.945295 +8.100000 10.700000 90.758446 +8.100000 10.800000 92.591597 +8.100000 10.900000 94.444748 +8.100000 11.000000 96.317899 +8.100000 11.100000 98.211050 +8.100000 11.200000 100.124201 +8.100000 11.300000 102.057352 +8.100000 11.400000 104.010503 +8.100000 11.500000 105.983654 +8.100000 11.600000 107.976805 +8.100000 11.700000 109.989956 +8.100000 11.800000 112.023107 +8.100000 11.900000 114.076258 +8.100000 12.000000 116.149409 +8.100000 12.100000 118.242559 +8.100000 12.200000 120.355710 +8.100000 12.300000 122.488861 +8.100000 12.400000 124.642012 +8.100000 12.500000 126.815163 +8.100000 12.600000 129.008314 +8.100000 12.700000 131.221465 +8.100000 12.800000 133.454616 +8.100000 12.900000 135.707767 +8.100000 13.000000 137.980918 +8.100000 13.100000 140.274069 +8.100000 13.200000 142.587220 +8.100000 13.300000 144.920371 +8.100000 13.400000 147.273522 +8.100000 13.500000 149.646673 +8.100000 13.600000 152.039824 +8.100000 13.700000 154.452975 +8.100000 13.800000 156.886126 +8.100000 13.900000 159.339277 +8.100000 14.000000 161.812428 +8.100000 14.100000 164.305578 +8.100000 14.200000 166.818729 +8.100000 14.300000 169.351880 +8.100000 14.400000 171.905031 +8.100000 14.500000 174.478182 +8.100000 14.600000 177.071333 +8.100000 14.700000 179.684484 +8.100000 14.800000 182.317635 +8.100000 14.900000 184.970786 +8.100000 15.000000 187.643937 + +8.200000 -5.000000 50.775395 +8.200000 -4.900000 49.458262 +8.200000 -4.800000 48.161130 +8.200000 -4.700000 46.883998 +8.200000 -4.600000 45.626866 +8.200000 -4.500000 44.389733 +8.200000 -4.400000 43.172601 +8.200000 -4.300000 41.975469 +8.200000 -4.200000 40.798337 +8.200000 -4.100000 39.641205 +8.200000 -4.000000 38.504072 +8.200000 -3.900000 37.386940 +8.200000 -3.800000 36.289808 +8.200000 -3.700000 35.212676 +8.200000 -3.600000 34.155544 +8.200000 -3.500000 33.118411 +8.200000 -3.400000 32.101279 +8.200000 -3.300000 31.104147 +8.200000 -3.200000 30.127015 +8.200000 -3.100000 29.169883 +8.200000 -3.000000 28.232750 +8.200000 -2.900000 27.315618 +8.200000 -2.800000 26.418486 +8.200000 -2.700000 25.541354 +8.200000 -2.600000 24.684221 +8.200000 -2.500000 23.847089 +8.200000 -2.400000 23.029957 +8.200000 -2.300000 22.232825 +8.200000 -2.200000 21.455693 +8.200000 -2.100000 20.698560 +8.200000 -2.000000 19.961428 +8.200000 -1.900000 19.244296 +8.200000 -1.800000 18.547164 +8.200000 -1.700000 17.870032 +8.200000 -1.600000 17.212899 +8.200000 -1.500000 16.575767 +8.200000 -1.400000 15.958635 +8.200000 -1.300000 15.361503 +8.200000 -1.200000 14.784370 +8.200000 -1.100000 14.227238 +8.200000 -1.000000 13.690106 +8.200000 -0.900000 13.172974 +8.200000 -0.800000 12.675842 +8.200000 -0.700000 12.198709 +8.200000 -0.600000 11.741577 +8.200000 -0.500000 11.304445 +8.200000 -0.400000 10.887313 +8.200000 -0.300000 10.490181 +8.200000 -0.200000 10.113048 +8.200000 -0.100000 9.755916 +8.200000 -0.000000 9.418784 +8.200000 0.100000 9.101652 +8.200000 0.200000 8.804520 +8.200000 0.300000 8.527387 +8.200000 0.400000 8.270255 +8.200000 0.500000 8.033123 +8.200000 0.600000 7.815991 +8.200000 0.700000 7.618858 +8.200000 0.800000 7.441726 +8.200000 0.900000 7.284594 +8.200000 1.000000 7.147462 +8.200000 1.100000 7.030330 +8.200000 1.200000 6.933197 +8.200000 1.300000 6.856065 +8.200000 1.400000 6.798933 +8.200000 1.500000 6.761801 +8.200000 1.600000 6.744669 +8.200000 1.700000 6.747536 +8.200000 1.800000 6.770404 +8.200000 1.900000 6.813272 +8.200000 2.000000 6.876140 +8.200000 2.100000 6.959007 +8.200000 2.200000 7.061875 +8.200000 2.300000 7.184743 +8.200000 2.400000 7.327611 +8.200000 2.500000 7.490479 +8.200000 2.600000 7.673346 +8.200000 2.700000 7.876214 +8.200000 2.800000 8.099082 +8.200000 2.900000 8.341950 +8.200000 3.000000 8.604818 +8.200000 3.100000 8.887685 +8.200000 3.200000 9.190553 +8.200000 3.300000 9.513421 +8.200000 3.400000 9.856289 +8.200000 3.500000 10.219156 +8.200000 3.600000 10.602024 +8.200000 3.700000 11.004892 +8.200000 3.800000 11.427760 +8.200000 3.900000 11.870628 +8.200000 4.000000 12.333495 +8.200000 4.100000 12.816363 +8.200000 4.200000 13.319231 +8.200000 4.300000 13.842099 +8.200000 4.400000 14.384967 +8.200000 4.500000 14.947834 +8.200000 4.600000 15.530702 +8.200000 4.700000 16.133570 +8.200000 4.800000 16.756438 +8.200000 4.900000 17.399306 +8.200000 5.000000 18.062173 +8.200000 5.100000 18.745041 +8.200000 5.200000 19.447909 +8.200000 5.300000 20.170777 +8.200000 5.400000 20.913644 +8.200000 5.500000 21.676512 +8.200000 5.600000 22.459380 +8.200000 5.700000 23.262248 +8.200000 5.800000 24.085116 +8.200000 5.900000 24.927983 +8.200000 6.000000 25.790851 +8.200000 6.100000 26.673719 +8.200000 6.200000 27.576587 +8.200000 6.300000 28.499455 +8.200000 6.400000 29.442322 +8.200000 6.500000 30.405190 +8.200000 6.600000 31.388058 +8.200000 6.700000 32.390926 +8.200000 6.800000 33.413793 +8.200000 6.900000 34.456661 +8.200000 7.000000 35.519529 +8.200000 7.100000 36.602397 +8.200000 7.200000 37.705265 +8.200000 7.300000 38.828132 +8.200000 7.400000 39.971000 +8.200000 7.500000 41.133868 +8.200000 7.600000 42.316736 +8.200000 7.700000 43.519604 +8.200000 7.800000 44.742471 +8.200000 7.900000 45.985339 +8.200000 8.000000 47.248207 +8.200000 8.100000 48.531075 +8.200000 8.200000 49.833943 +8.200000 8.300000 51.156810 +8.200000 8.400000 52.499678 +8.200000 8.500000 53.862546 +8.200000 8.600000 55.245414 +8.200000 8.700000 56.648281 +8.200000 8.800000 58.071149 +8.200000 8.900000 59.514017 +8.200000 9.000000 60.976885 +8.200000 9.100000 62.459753 +8.200000 9.200000 63.962620 +8.200000 9.300000 65.485488 +8.200000 9.400000 67.028356 +8.200000 9.500000 68.591224 +8.200000 9.600000 70.174092 +8.200000 9.700000 71.776959 +8.200000 9.800000 73.399827 +8.200000 9.900000 75.042695 +8.200000 10.000000 76.705563 +8.200000 10.100000 78.388430 +8.200000 10.200000 80.091298 +8.200000 10.300000 81.814166 +8.200000 10.400000 83.557034 +8.200000 10.500000 85.319902 +8.200000 10.600000 87.102769 +8.200000 10.700000 88.905637 +8.200000 10.800000 90.728505 +8.200000 10.900000 92.571373 +8.200000 11.000000 94.434241 +8.200000 11.100000 96.317108 +8.200000 11.200000 98.219976 +8.200000 11.300000 100.142844 +8.200000 11.400000 102.085712 +8.200000 11.500000 104.048580 +8.200000 11.600000 106.031447 +8.200000 11.700000 108.034315 +8.200000 11.800000 110.057183 +8.200000 11.900000 112.100051 +8.200000 12.000000 114.162918 +8.200000 12.100000 116.245786 +8.200000 12.200000 118.348654 +8.200000 12.300000 120.471522 +8.200000 12.400000 122.614390 +8.200000 12.500000 124.777257 +8.200000 12.600000 126.960125 +8.200000 12.700000 129.162993 +8.200000 12.800000 131.385861 +8.200000 12.900000 133.628729 +8.200000 13.000000 135.891596 +8.200000 13.100000 138.174464 +8.200000 13.200000 140.477332 +8.200000 13.300000 142.800200 +8.200000 13.400000 145.143067 +8.200000 13.500000 147.505935 +8.200000 13.600000 149.888803 +8.200000 13.700000 152.291671 +8.200000 13.800000 154.714539 +8.200000 13.900000 157.157406 +8.200000 14.000000 159.620274 +8.200000 14.100000 162.103142 +8.200000 14.200000 164.606010 +8.200000 14.300000 167.128878 +8.200000 14.400000 169.671745 +8.200000 14.500000 172.234613 +8.200000 14.600000 174.817481 +8.200000 14.700000 177.420349 +8.200000 14.800000 180.043217 +8.200000 14.900000 182.686084 +8.200000 15.000000 185.348952 + +8.300000 -5.000000 50.609429 +8.300000 -4.900000 49.281497 +8.300000 -4.800000 47.973565 +8.300000 -4.700000 46.685633 +8.300000 -4.600000 45.417701 +8.300000 -4.500000 44.169769 +8.300000 -4.400000 42.941837 +8.300000 -4.300000 41.733905 +8.300000 -4.200000 40.545972 +8.300000 -4.100000 39.378040 +8.300000 -4.000000 38.230108 +8.300000 -3.900000 37.102176 +8.300000 -3.800000 35.994244 +8.300000 -3.700000 34.906312 +8.300000 -3.600000 33.838380 +8.300000 -3.500000 32.790448 +8.300000 -3.400000 31.762516 +8.300000 -3.300000 30.754583 +8.300000 -3.200000 29.766651 +8.300000 -3.100000 28.798719 +8.300000 -3.000000 27.850787 +8.300000 -2.900000 26.922855 +8.300000 -2.800000 26.014923 +8.300000 -2.700000 25.126991 +8.300000 -2.600000 24.259059 +8.300000 -2.500000 23.411127 +8.300000 -2.400000 22.583194 +8.300000 -2.300000 21.775262 +8.300000 -2.200000 20.987330 +8.300000 -2.100000 20.219398 +8.300000 -2.000000 19.471466 +8.300000 -1.900000 18.743534 +8.300000 -1.800000 18.035602 +8.300000 -1.700000 17.347670 +8.300000 -1.600000 16.679738 +8.300000 -1.500000 16.031805 +8.300000 -1.400000 15.403873 +8.300000 -1.300000 14.795941 +8.300000 -1.200000 14.208009 +8.300000 -1.100000 13.640077 +8.300000 -1.000000 13.092145 +8.300000 -0.900000 12.564213 +8.300000 -0.800000 12.056281 +8.300000 -0.700000 11.568349 +8.300000 -0.600000 11.100416 +8.300000 -0.500000 10.652484 +8.300000 -0.400000 10.224552 +8.300000 -0.300000 9.816620 +8.300000 -0.200000 9.428688 +8.300000 -0.100000 9.060756 +8.300000 -0.000000 8.712824 +8.300000 0.100000 8.384892 +8.300000 0.200000 8.076960 +8.300000 0.300000 7.789027 +8.300000 0.400000 7.521095 +8.300000 0.500000 7.273163 +8.300000 0.600000 7.045231 +8.300000 0.700000 6.837299 +8.300000 0.800000 6.649367 +8.300000 0.900000 6.481435 +8.300000 1.000000 6.333503 +8.300000 1.100000 6.205571 +8.300000 1.200000 6.097638 +8.300000 1.300000 6.009706 +8.300000 1.400000 5.941774 +8.300000 1.500000 5.893842 +8.300000 1.600000 5.865910 +8.300000 1.700000 5.857978 +8.300000 1.800000 5.870046 +8.300000 1.900000 5.902114 +8.300000 2.000000 5.954182 +8.300000 2.100000 6.026249 +8.300000 2.200000 6.118317 +8.300000 2.300000 6.230385 +8.300000 2.400000 6.362453 +8.300000 2.500000 6.514521 +8.300000 2.600000 6.686589 +8.300000 2.700000 6.878657 +8.300000 2.800000 7.090725 +8.300000 2.900000 7.322793 +8.300000 3.000000 7.574860 +8.300000 3.100000 7.846928 +8.300000 3.200000 8.138996 +8.300000 3.300000 8.451064 +8.300000 3.400000 8.783132 +8.300000 3.500000 9.135200 +8.300000 3.600000 9.507268 +8.300000 3.700000 9.899336 +8.300000 3.800000 10.311404 +8.300000 3.900000 10.743471 +8.300000 4.000000 11.195539 +8.300000 4.100000 11.667607 +8.300000 4.200000 12.159675 +8.300000 4.300000 12.671743 +8.300000 4.400000 13.203811 +8.300000 4.500000 13.755879 +8.300000 4.600000 14.327947 +8.300000 4.700000 14.920014 +8.300000 4.800000 15.532082 +8.300000 4.900000 16.164150 +8.300000 5.000000 16.816218 +8.300000 5.100000 17.488286 +8.300000 5.200000 18.180354 +8.300000 5.300000 18.892422 +8.300000 5.400000 19.624490 +8.300000 5.500000 20.376558 +8.300000 5.600000 21.148625 +8.300000 5.700000 21.940693 +8.300000 5.800000 22.752761 +8.300000 5.900000 23.584829 +8.300000 6.000000 24.436897 +8.300000 6.100000 25.308965 +8.300000 6.200000 26.201033 +8.300000 6.300000 27.113101 +8.300000 6.400000 28.045169 +8.300000 6.500000 28.997236 +8.300000 6.600000 29.969304 +8.300000 6.700000 30.961372 +8.300000 6.800000 31.973440 +8.300000 6.900000 33.005508 +8.300000 7.000000 34.057576 +8.300000 7.100000 35.129644 +8.300000 7.200000 36.221712 +8.300000 7.300000 37.333780 +8.300000 7.400000 38.465847 +8.300000 7.500000 39.617915 +8.300000 7.600000 40.789983 +8.300000 7.700000 41.982051 +8.300000 7.800000 43.194119 +8.300000 7.900000 44.426187 +8.300000 8.000000 45.678255 +8.300000 8.100000 46.950323 +8.300000 8.200000 48.242391 +8.300000 8.300000 49.554458 +8.300000 8.400000 50.886526 +8.300000 8.500000 52.238594 +8.300000 8.600000 53.610662 +8.300000 8.700000 55.002730 +8.300000 8.800000 56.414798 +8.300000 8.900000 57.846866 +8.300000 9.000000 59.298934 +8.300000 9.100000 60.771002 +8.300000 9.200000 62.263069 +8.300000 9.300000 63.775137 +8.300000 9.400000 65.307205 +8.300000 9.500000 66.859273 +8.300000 9.600000 68.431341 +8.300000 9.700000 70.023409 +8.300000 9.800000 71.635477 +8.300000 9.900000 73.267545 +8.300000 10.000000 74.919613 +8.300000 10.100000 76.591680 +8.300000 10.200000 78.283748 +8.300000 10.300000 79.995816 +8.300000 10.400000 81.727884 +8.300000 10.500000 83.479952 +8.300000 10.600000 85.252020 +8.300000 10.700000 87.044088 +8.300000 10.800000 88.856156 +8.300000 10.900000 90.688224 +8.300000 11.000000 92.540291 +8.300000 11.100000 94.412359 +8.300000 11.200000 96.304427 +8.300000 11.300000 98.216495 +8.300000 11.400000 100.148563 +8.300000 11.500000 102.100631 +8.300000 11.600000 104.072699 +8.300000 11.700000 106.064767 +8.300000 11.800000 108.076835 +8.300000 11.900000 110.108902 +8.300000 12.000000 112.160970 +8.300000 12.100000 114.233038 +8.300000 12.200000 116.325106 +8.300000 12.300000 118.437174 +8.300000 12.400000 120.569242 +8.300000 12.500000 122.721310 +8.300000 12.600000 124.893378 +8.300000 12.700000 127.085446 +8.300000 12.800000 129.297513 +8.300000 12.900000 131.529581 +8.300000 13.000000 133.781649 +8.300000 13.100000 136.053717 +8.300000 13.200000 138.345785 +8.300000 13.300000 140.657853 +8.300000 13.400000 142.989921 +8.300000 13.500000 145.341989 +8.300000 13.600000 147.714057 +8.300000 13.700000 150.106124 +8.300000 13.800000 152.518192 +8.300000 13.900000 154.950260 +8.300000 14.000000 157.402328 +8.300000 14.100000 159.874396 +8.300000 14.200000 162.366464 +8.300000 14.300000 164.878532 +8.300000 14.400000 167.410600 +8.300000 14.500000 169.962668 +8.300000 14.600000 172.534735 +8.300000 14.700000 175.126803 +8.300000 14.800000 177.738871 +8.300000 14.900000 180.370939 +8.300000 15.000000 183.023007 + +8.400000 -5.000000 50.525537 +8.400000 -4.900000 49.186288 +8.400000 -4.800000 47.867039 +8.400000 -4.700000 46.567790 +8.400000 -4.600000 45.288542 +8.400000 -4.500000 44.029293 +8.400000 -4.400000 42.790044 +8.400000 -4.300000 41.570795 +8.400000 -4.200000 40.371547 +8.400000 -4.100000 39.192298 +8.400000 -4.000000 38.033049 +8.400000 -3.900000 36.893800 +8.400000 -3.800000 35.774552 +8.400000 -3.700000 34.675303 +8.400000 -3.600000 33.596054 +8.400000 -3.500000 32.536805 +8.400000 -3.400000 31.497557 +8.400000 -3.300000 30.478308 +8.400000 -3.200000 29.479059 +8.400000 -3.100000 28.499810 +8.400000 -3.000000 27.540562 +8.400000 -2.900000 26.601313 +8.400000 -2.800000 25.682064 +8.400000 -2.700000 24.782815 +8.400000 -2.600000 23.903567 +8.400000 -2.500000 23.044318 +8.400000 -2.400000 22.205069 +8.400000 -2.300000 21.385820 +8.400000 -2.200000 20.586572 +8.400000 -2.100000 19.807323 +8.400000 -2.000000 19.048074 +8.400000 -1.900000 18.308825 +8.400000 -1.800000 17.589577 +8.400000 -1.700000 16.890328 +8.400000 -1.600000 16.211079 +8.400000 -1.500000 15.551830 +8.400000 -1.400000 14.912582 +8.400000 -1.300000 14.293333 +8.400000 -1.200000 13.694084 +8.400000 -1.100000 13.114835 +8.400000 -1.000000 12.555587 +8.400000 -0.900000 12.016338 +8.400000 -0.800000 11.497089 +8.400000 -0.700000 10.997840 +8.400000 -0.600000 10.518592 +8.400000 -0.500000 10.059343 +8.400000 -0.400000 9.620094 +8.400000 -0.300000 9.200845 +8.400000 -0.200000 8.801597 +8.400000 -0.100000 8.422348 +8.400000 -0.000000 8.063099 +8.400000 0.100000 7.723850 +8.400000 0.200000 7.404602 +8.400000 0.300000 7.105353 +8.400000 0.400000 6.826104 +8.400000 0.500000 6.566855 +8.400000 0.600000 6.327607 +8.400000 0.700000 6.108358 +8.400000 0.800000 5.909109 +8.400000 0.900000 5.729860 +8.400000 1.000000 5.570612 +8.400000 1.100000 5.431363 +8.400000 1.200000 5.312114 +8.400000 1.300000 5.212865 +8.400000 1.400000 5.133617 +8.400000 1.500000 5.074368 +8.400000 1.600000 5.035119 +8.400000 1.700000 5.015870 +8.400000 1.800000 5.016622 +8.400000 1.900000 5.037373 +8.400000 2.000000 5.078124 +8.400000 2.100000 5.138875 +8.400000 2.200000 5.219627 +8.400000 2.300000 5.320378 +8.400000 2.400000 5.441129 +8.400000 2.500000 5.581880 +8.400000 2.600000 5.742632 +8.400000 2.700000 5.923383 +8.400000 2.800000 6.124134 +8.400000 2.900000 6.344885 +8.400000 3.000000 6.585637 +8.400000 3.100000 6.846388 +8.400000 3.200000 7.127139 +8.400000 3.300000 7.427890 +8.400000 3.400000 7.748642 +8.400000 3.500000 8.089393 +8.400000 3.600000 8.450144 +8.400000 3.700000 8.830895 +8.400000 3.800000 9.231647 +8.400000 3.900000 9.652398 +8.400000 4.000000 10.093149 +8.400000 4.100000 10.553900 +8.400000 4.200000 11.034652 +8.400000 4.300000 11.535403 +8.400000 4.400000 12.056154 +8.400000 4.500000 12.596905 +8.400000 4.600000 13.157657 +8.400000 4.700000 13.738408 +8.400000 4.800000 14.339159 +8.400000 4.900000 14.959910 +8.400000 5.000000 15.600662 +8.400000 5.100000 16.261413 +8.400000 5.200000 16.942164 +8.400000 5.300000 17.642915 +8.400000 5.400000 18.363667 +8.400000 5.500000 19.104418 +8.400000 5.600000 19.865169 +8.400000 5.700000 20.645920 +8.400000 5.800000 21.446672 +8.400000 5.900000 22.267423 +8.400000 6.000000 23.108174 +8.400000 6.100000 23.968925 +8.400000 6.200000 24.849677 +8.400000 6.300000 25.750428 +8.400000 6.400000 26.671179 +8.400000 6.500000 27.611930 +8.400000 6.600000 28.572682 +8.400000 6.700000 29.553433 +8.400000 6.800000 30.554184 +8.400000 6.900000 31.574935 +8.400000 7.000000 32.615687 +8.400000 7.100000 33.676438 +8.400000 7.200000 34.757189 +8.400000 7.300000 35.857940 +8.400000 7.400000 36.978692 +8.400000 7.500000 38.119443 +8.400000 7.600000 39.280194 +8.400000 7.700000 40.460945 +8.400000 7.800000 41.661697 +8.400000 7.900000 42.882448 +8.400000 8.000000 44.123199 +8.400000 8.100000 45.383950 +8.400000 8.200000 46.664702 +8.400000 8.300000 47.965453 +8.400000 8.400000 49.286204 +8.400000 8.500000 50.626955 +8.400000 8.600000 51.987707 +8.400000 8.700000 53.368458 +8.400000 8.800000 54.769209 +8.400000 8.900000 56.189960 +8.400000 9.000000 57.630712 +8.400000 9.100000 59.091463 +8.400000 9.200000 60.572214 +8.400000 9.300000 62.072965 +8.400000 9.400000 63.593717 +8.400000 9.500000 65.134468 +8.400000 9.600000 66.695219 +8.400000 9.700000 68.275970 +8.400000 9.800000 69.876722 +8.400000 9.900000 71.497473 +8.400000 10.000000 73.138224 +8.400000 10.100000 74.798975 +8.400000 10.200000 76.479727 +8.400000 10.300000 78.180478 +8.400000 10.400000 79.901229 +8.400000 10.500000 81.641980 +8.400000 10.600000 83.402732 +8.400000 10.700000 85.183483 +8.400000 10.800000 86.984234 +8.400000 10.900000 88.804985 +8.400000 11.000000 90.645737 +8.400000 11.100000 92.506488 +8.400000 11.200000 94.387239 +8.400000 11.300000 96.287990 +8.400000 11.400000 98.208742 +8.400000 11.500000 100.149493 +8.400000 11.600000 102.110244 +8.400000 11.700000 104.090995 +8.400000 11.800000 106.091747 +8.400000 11.900000 108.112498 +8.400000 12.000000 110.153249 +8.400000 12.100000 112.214000 +8.400000 12.200000 114.294752 +8.400000 12.300000 116.395503 +8.400000 12.400000 118.516254 +8.400000 12.500000 120.657005 +8.400000 12.600000 122.817757 +8.400000 12.700000 124.998508 +8.400000 12.800000 127.199259 +8.400000 12.900000 129.420010 +8.400000 13.000000 131.660762 +8.400000 13.100000 133.921513 +8.400000 13.200000 136.202264 +8.400000 13.300000 138.503015 +8.400000 13.400000 140.823767 +8.400000 13.500000 143.164518 +8.400000 13.600000 145.525269 +8.400000 13.700000 147.906020 +8.400000 13.800000 150.306772 +8.400000 13.900000 152.727523 +8.400000 14.000000 155.168274 +8.400000 14.100000 157.629025 +8.400000 14.200000 160.109777 +8.400000 14.300000 162.610528 +8.400000 14.400000 165.131279 +8.400000 14.500000 167.672030 +8.400000 14.600000 170.232782 +8.400000 14.700000 172.813533 +8.400000 14.800000 175.414284 +8.400000 14.900000 178.035035 +8.400000 15.000000 180.675787 + +8.500000 -5.000000 50.533028 +8.500000 -4.900000 49.181946 +8.500000 -4.800000 47.850863 +8.500000 -4.700000 46.539781 +8.500000 -4.600000 45.248699 +8.500000 -4.500000 43.977617 +8.500000 -4.400000 42.726535 +8.500000 -4.300000 41.495453 +8.500000 -4.200000 40.284371 +8.500000 -4.100000 39.093289 +8.500000 -4.000000 37.922206 +8.500000 -3.900000 36.771124 +8.500000 -3.800000 35.640042 +8.500000 -3.700000 34.528960 +8.500000 -3.600000 33.437878 +8.500000 -3.500000 32.366796 +8.500000 -3.400000 31.315714 +8.500000 -3.300000 30.284632 +8.500000 -3.200000 29.273549 +8.500000 -3.100000 28.282467 +8.500000 -3.000000 27.311385 +8.500000 -2.900000 26.360303 +8.500000 -2.800000 25.429221 +8.500000 -2.700000 24.518139 +8.500000 -2.600000 23.627057 +8.500000 -2.500000 22.755975 +8.500000 -2.400000 21.904892 +8.500000 -2.300000 21.073810 +8.500000 -2.200000 20.262728 +8.500000 -2.100000 19.471646 +8.500000 -2.000000 18.700564 +8.500000 -1.900000 17.949482 +8.500000 -1.800000 17.218400 +8.500000 -1.700000 16.507318 +8.500000 -1.600000 15.816235 +8.500000 -1.500000 15.145153 +8.500000 -1.400000 14.494071 +8.500000 -1.300000 13.862989 +8.500000 -1.200000 13.251907 +8.500000 -1.100000 12.660825 +8.500000 -1.000000 12.089743 +8.500000 -0.900000 11.538661 +8.500000 -0.800000 11.007578 +8.500000 -0.700000 10.496496 +8.500000 -0.600000 10.005414 +8.500000 -0.500000 9.534332 +8.500000 -0.400000 9.083250 +8.500000 -0.300000 8.652168 +8.500000 -0.200000 8.241086 +8.500000 -0.100000 7.850004 +8.500000 -0.000000 7.478921 +8.500000 0.100000 7.127839 +8.500000 0.200000 6.796757 +8.500000 0.300000 6.485675 +8.500000 0.400000 6.194593 +8.500000 0.500000 5.923511 +8.500000 0.600000 5.672429 +8.500000 0.700000 5.441347 +8.500000 0.800000 5.230264 +8.500000 0.900000 5.039182 +8.500000 1.000000 4.868100 +8.500000 1.100000 4.717018 +8.500000 1.200000 4.585936 +8.500000 1.300000 4.474854 +8.500000 1.400000 4.383772 +8.500000 1.500000 4.312690 +8.500000 1.600000 4.261607 +8.500000 1.700000 4.230525 +8.500000 1.800000 4.219443 +8.500000 1.900000 4.228361 +8.500000 2.000000 4.257279 +8.500000 2.100000 4.306197 +8.500000 2.200000 4.375115 +8.500000 2.300000 4.464033 +8.500000 2.400000 4.572950 +8.500000 2.500000 4.701868 +8.500000 2.600000 4.850786 +8.500000 2.700000 5.019704 +8.500000 2.800000 5.208622 +8.500000 2.900000 5.417540 +8.500000 3.000000 5.646458 +8.500000 3.100000 5.895376 +8.500000 3.200000 6.164293 +8.500000 3.300000 6.453211 +8.500000 3.400000 6.762129 +8.500000 3.500000 7.091047 +8.500000 3.600000 7.439965 +8.500000 3.700000 7.808883 +8.500000 3.800000 8.197801 +8.500000 3.900000 8.606719 +8.500000 4.000000 9.035636 +8.500000 4.100000 9.484554 +8.500000 4.200000 9.953472 +8.500000 4.300000 10.442390 +8.500000 4.400000 10.951308 +8.500000 4.500000 11.480226 +8.500000 4.600000 12.029144 +8.500000 4.700000 12.598062 +8.500000 4.800000 13.186979 +8.500000 4.900000 13.795897 +8.500000 5.000000 14.424815 +8.500000 5.100000 15.073733 +8.500000 5.200000 15.742651 +8.500000 5.300000 16.431569 +8.500000 5.400000 17.140487 +8.500000 5.500000 17.869405 +8.500000 5.600000 18.618322 +8.500000 5.700000 19.387240 +8.500000 5.800000 20.176158 +8.500000 5.900000 20.985076 +8.500000 6.000000 21.813994 +8.500000 6.100000 22.662912 +8.500000 6.200000 23.531830 +8.500000 6.300000 24.420748 +8.500000 6.400000 25.329665 +8.500000 6.500000 26.258583 +8.500000 6.600000 27.207501 +8.500000 6.700000 28.176419 +8.500000 6.800000 29.165337 +8.500000 6.900000 30.174255 +8.500000 7.000000 31.203173 +8.500000 7.100000 32.252091 +8.500000 7.200000 33.321008 +8.500000 7.300000 34.409926 +8.500000 7.400000 35.518844 +8.500000 7.500000 36.647762 +8.500000 7.600000 37.796680 +8.500000 7.700000 38.965598 +8.500000 7.800000 40.154516 +8.500000 7.900000 41.363434 +8.500000 8.000000 42.592351 +8.500000 8.100000 43.841269 +8.500000 8.200000 45.110187 +8.500000 8.300000 46.399105 +8.500000 8.400000 47.708023 +8.500000 8.500000 49.036941 +8.500000 8.600000 50.385859 +8.500000 8.700000 51.754777 +8.500000 8.800000 53.143694 +8.500000 8.900000 54.552612 +8.500000 9.000000 55.981530 +8.500000 9.100000 57.430448 +8.500000 9.200000 58.899366 +8.500000 9.300000 60.388284 +8.500000 9.400000 61.897202 +8.500000 9.500000 63.426120 +8.500000 9.600000 64.975037 +8.500000 9.700000 66.543955 +8.500000 9.800000 68.132873 +8.500000 9.900000 69.741791 +8.500000 10.000000 71.370709 +8.500000 10.100000 73.019627 +8.500000 10.200000 74.688545 +8.500000 10.300000 76.377463 +8.500000 10.400000 78.086380 +8.500000 10.500000 79.815298 +8.500000 10.600000 81.564216 +8.500000 10.700000 83.333134 +8.500000 10.800000 85.122052 +8.500000 10.900000 86.930970 +8.500000 11.000000 88.759888 +8.500000 11.100000 90.608806 +8.500000 11.200000 92.477723 +8.500000 11.300000 94.366641 +8.500000 11.400000 96.275559 +8.500000 11.500000 98.204477 +8.500000 11.600000 100.153395 +8.500000 11.700000 102.122313 +8.500000 11.800000 104.111231 +8.500000 11.900000 106.120149 +8.500000 12.000000 108.149066 +8.500000 12.100000 110.197984 +8.500000 12.200000 112.266902 +8.500000 12.300000 114.355820 +8.500000 12.400000 116.464738 +8.500000 12.500000 118.593656 +8.500000 12.600000 120.742574 +8.500000 12.700000 122.911492 +8.500000 12.800000 125.100409 +8.500000 12.900000 127.309327 +8.500000 13.000000 129.538245 +8.500000 13.100000 131.787163 +8.500000 13.200000 134.056081 +8.500000 13.300000 136.344999 +8.500000 13.400000 138.653917 +8.500000 13.500000 140.982835 +8.500000 13.600000 143.331752 +8.500000 13.700000 145.700670 +8.500000 13.800000 148.089588 +8.500000 13.900000 150.498506 +8.500000 14.000000 152.927424 +8.500000 14.100000 155.376342 +8.500000 14.200000 157.845260 +8.500000 14.300000 160.334178 +8.500000 14.400000 162.843095 +8.500000 14.500000 165.372013 +8.500000 14.600000 167.920931 +8.500000 14.700000 170.489849 +8.500000 14.800000 173.078767 +8.500000 14.900000 175.687685 +8.500000 15.000000 178.316603 + +8.600000 -5.000000 50.640756 +8.600000 -4.900000 49.277324 +8.600000 -4.800000 47.933892 +8.600000 -4.700000 46.610460 +8.600000 -4.600000 45.307028 +8.600000 -4.500000 44.023595 +8.600000 -4.400000 42.760163 +8.600000 -4.300000 41.516731 +8.600000 -4.200000 40.293299 +8.600000 -4.100000 39.089866 +8.600000 -4.000000 37.906434 +8.600000 -3.900000 36.743002 +8.600000 -3.800000 35.599570 +8.600000 -3.700000 34.476137 +8.600000 -3.600000 33.372705 +8.600000 -3.500000 32.289273 +8.600000 -3.400000 31.225841 +8.600000 -3.300000 30.182408 +8.600000 -3.200000 29.158976 +8.600000 -3.100000 28.155544 +8.600000 -3.000000 27.172112 +8.600000 -2.900000 26.208679 +8.600000 -2.800000 25.265247 +8.600000 -2.700000 24.341815 +8.600000 -2.600000 23.438383 +8.600000 -2.500000 22.554951 +8.600000 -2.400000 21.691518 +8.600000 -2.300000 20.848086 +8.600000 -2.200000 20.024654 +8.600000 -2.100000 19.221222 +8.600000 -2.000000 18.437789 +8.600000 -1.900000 17.674357 +8.600000 -1.800000 16.930925 +8.600000 -1.700000 16.207493 +8.600000 -1.600000 15.504060 +8.600000 -1.500000 14.820628 +8.600000 -1.400000 14.157196 +8.600000 -1.300000 13.513764 +8.600000 -1.200000 12.890331 +8.600000 -1.100000 12.286899 +8.600000 -1.000000 11.703467 +8.600000 -0.900000 11.140035 +8.600000 -0.800000 10.596602 +8.600000 -0.700000 10.073170 +8.600000 -0.600000 9.569738 +8.600000 -0.500000 9.086306 +8.600000 -0.400000 8.622874 +8.600000 -0.300000 8.179441 +8.600000 -0.200000 7.756009 +8.600000 -0.100000 7.352577 +8.600000 -0.000000 6.969145 +8.600000 0.100000 6.605712 +8.600000 0.200000 6.262280 +8.600000 0.300000 5.938848 +8.600000 0.400000 5.635416 +8.600000 0.500000 5.351983 +8.600000 0.600000 5.088551 +8.600000 0.700000 4.845119 +8.600000 0.800000 4.621687 +8.600000 0.900000 4.418254 +8.600000 1.000000 4.234822 +8.600000 1.100000 4.071390 +8.600000 1.200000 3.927958 +8.600000 1.300000 3.804525 +8.600000 1.400000 3.701093 +8.600000 1.500000 3.617661 +8.600000 1.600000 3.554229 +8.600000 1.700000 3.510797 +8.600000 1.800000 3.487364 +8.600000 1.900000 3.483932 +8.600000 2.000000 3.500500 +8.600000 2.100000 3.537068 +8.600000 2.200000 3.593635 +8.600000 2.300000 3.670203 +8.600000 2.400000 3.766771 +8.600000 2.500000 3.883339 +8.600000 2.600000 4.019906 +8.600000 2.700000 4.176474 +8.600000 2.800000 4.353042 +8.600000 2.900000 4.549610 +8.600000 3.000000 4.766177 +8.600000 3.100000 5.002745 +8.600000 3.200000 5.259313 +8.600000 3.300000 5.535881 +8.600000 3.400000 5.832448 +8.600000 3.500000 6.149016 +8.600000 3.600000 6.485584 +8.600000 3.700000 6.842152 +8.600000 3.800000 7.218720 +8.600000 3.900000 7.615287 +8.600000 4.000000 8.031855 +8.600000 4.100000 8.468423 +8.600000 4.200000 8.924991 +8.600000 4.300000 9.401558 +8.600000 4.400000 9.898126 +8.600000 4.500000 10.414694 +8.600000 4.600000 10.951262 +8.600000 4.700000 11.507829 +8.600000 4.800000 12.084397 +8.600000 4.900000 12.680965 +8.600000 5.000000 13.297533 +8.600000 5.100000 13.934100 +8.600000 5.200000 14.590668 +8.600000 5.300000 15.267236 +8.600000 5.400000 15.963804 +8.600000 5.500000 16.680371 +8.600000 5.600000 17.416939 +8.600000 5.700000 18.173507 +8.600000 5.800000 18.950075 +8.600000 5.900000 19.746643 +8.600000 6.000000 20.563210 +8.600000 6.100000 21.399778 +8.600000 6.200000 22.256346 +8.600000 6.300000 23.132914 +8.600000 6.400000 24.029481 +8.600000 6.500000 24.946049 +8.600000 6.600000 25.882617 +8.600000 6.700000 26.839185 +8.600000 6.800000 27.815752 +8.600000 6.900000 28.812320 +8.600000 7.000000 29.828888 +8.600000 7.100000 30.865456 +8.600000 7.200000 31.922023 +8.600000 7.300000 32.998591 +8.600000 7.400000 34.095159 +8.600000 7.500000 35.211727 +8.600000 7.600000 36.348294 +8.600000 7.700000 37.504862 +8.600000 7.800000 38.681430 +8.600000 7.900000 39.877998 +8.600000 8.000000 41.094566 +8.600000 8.100000 42.331133 +8.600000 8.200000 43.587701 +8.600000 8.300000 44.864269 +8.600000 8.400000 46.160837 +8.600000 8.500000 47.477404 +8.600000 8.600000 48.813972 +8.600000 8.700000 50.170540 +8.600000 8.800000 51.547108 +8.600000 8.900000 52.943675 +8.600000 9.000000 54.360243 +8.600000 9.100000 55.796811 +8.600000 9.200000 57.253379 +8.600000 9.300000 58.729946 +8.600000 9.400000 60.226514 +8.600000 9.500000 61.743082 +8.600000 9.600000 63.279650 +8.600000 9.700000 64.836217 +8.600000 9.800000 66.412785 +8.600000 9.900000 68.009353 +8.600000 10.000000 69.625921 +8.600000 10.100000 71.262489 +8.600000 10.200000 72.919056 +8.600000 10.300000 74.595624 +8.600000 10.400000 76.292192 +8.600000 10.500000 78.008760 +8.600000 10.600000 79.745327 +8.600000 10.700000 81.501895 +8.600000 10.800000 83.278463 +8.600000 10.900000 85.075031 +8.600000 11.000000 86.891598 +8.600000 11.100000 88.728166 +8.600000 11.200000 90.584734 +8.600000 11.300000 92.461302 +8.600000 11.400000 94.357869 +8.600000 11.500000 96.274437 +8.600000 11.600000 98.211005 +8.600000 11.700000 100.167573 +8.600000 11.800000 102.144140 +8.600000 11.900000 104.140708 +8.600000 12.000000 106.157276 +8.600000 12.100000 108.193844 +8.600000 12.200000 110.250412 +8.600000 12.300000 112.326979 +8.600000 12.400000 114.423547 +8.600000 12.500000 116.540115 +8.600000 12.600000 118.676683 +8.600000 12.700000 120.833250 +8.600000 12.800000 123.009818 +8.600000 12.900000 125.206386 +8.600000 13.000000 127.422954 +8.600000 13.100000 129.659521 +8.600000 13.200000 131.916089 +8.600000 13.300000 134.192657 +8.600000 13.400000 136.489225 +8.600000 13.500000 138.805792 +8.600000 13.600000 141.142360 +8.600000 13.700000 143.498928 +8.600000 13.800000 145.875496 +8.600000 13.900000 148.272063 +8.600000 14.000000 150.688631 +8.600000 14.100000 153.125199 +8.600000 14.200000 155.581767 +8.600000 14.300000 158.058335 +8.600000 14.400000 160.554902 +8.600000 14.500000 163.071470 +8.600000 14.600000 165.608038 +8.600000 14.700000 168.164606 +8.600000 14.800000 170.741173 +8.600000 14.900000 173.337741 +8.600000 15.000000 175.954309 + +8.700000 -5.000000 50.857040 +8.700000 -4.900000 49.480741 +8.700000 -4.800000 48.124442 +8.700000 -4.700000 46.788142 +8.700000 -4.600000 45.471843 +8.700000 -4.500000 44.175544 +8.700000 -4.400000 42.899245 +8.700000 -4.300000 41.642946 +8.700000 -4.200000 40.406647 +8.700000 -4.100000 39.190348 +8.700000 -4.000000 37.994049 +8.700000 -3.900000 36.817750 +8.700000 -3.800000 35.661451 +8.700000 -3.700000 34.525152 +8.700000 -3.600000 33.408852 +8.700000 -3.500000 32.312553 +8.700000 -3.400000 31.236254 +8.700000 -3.300000 30.179955 +8.700000 -3.200000 29.143656 +8.700000 -3.100000 28.127357 +8.700000 -3.000000 27.131058 +8.700000 -2.900000 26.154759 +8.700000 -2.800000 25.198460 +8.700000 -2.700000 24.262161 +8.700000 -2.600000 23.345862 +8.700000 -2.500000 22.449562 +8.700000 -2.400000 21.573263 +8.700000 -2.300000 20.716964 +8.700000 -2.200000 19.880665 +8.700000 -2.100000 19.064366 +8.700000 -2.000000 18.268067 +8.700000 -1.900000 17.491768 +8.700000 -1.800000 16.735469 +8.700000 -1.700000 15.999170 +8.700000 -1.600000 15.282871 +8.700000 -1.500000 14.586572 +8.700000 -1.400000 13.910273 +8.700000 -1.300000 13.253973 +8.700000 -1.200000 12.617674 +8.700000 -1.100000 12.001375 +8.700000 -1.000000 11.405076 +8.700000 -0.900000 10.828777 +8.700000 -0.800000 10.272478 +8.700000 -0.700000 9.736179 +8.700000 -0.600000 9.219880 +8.700000 -0.500000 8.723581 +8.700000 -0.400000 8.247282 +8.700000 -0.300000 7.790983 +8.700000 -0.200000 7.354683 +8.700000 -0.100000 6.938384 +8.700000 -0.000000 6.542085 +8.700000 0.100000 6.165786 +8.700000 0.200000 5.809487 +8.700000 0.300000 5.473188 +8.700000 0.400000 5.156889 +8.700000 0.500000 4.860590 +8.700000 0.600000 4.584291 +8.700000 0.700000 4.327992 +8.700000 0.800000 4.091693 +8.700000 0.900000 3.875393 +8.700000 1.000000 3.679094 +8.700000 1.100000 3.502795 +8.700000 1.200000 3.346496 +8.700000 1.300000 3.210197 +8.700000 1.400000 3.093898 +8.700000 1.500000 2.997599 +8.700000 1.600000 2.921300 +8.700000 1.700000 2.865001 +8.700000 1.800000 2.828702 +8.700000 1.900000 2.812403 +8.700000 2.000000 2.816103 +8.700000 2.100000 2.839804 +8.700000 2.200000 2.883505 +8.700000 2.300000 2.947206 +8.700000 2.400000 3.030907 +8.700000 2.500000 3.134608 +8.700000 2.600000 3.258309 +8.700000 2.700000 3.402010 +8.700000 2.800000 3.565711 +8.700000 2.900000 3.749412 +8.700000 3.000000 3.953113 +8.700000 3.100000 4.176813 +8.700000 3.200000 4.420514 +8.700000 3.300000 4.684215 +8.700000 3.400000 4.967916 +8.700000 3.500000 5.271617 +8.700000 3.600000 5.595318 +8.700000 3.700000 5.939019 +8.700000 3.800000 6.302720 +8.700000 3.900000 6.686421 +8.700000 4.000000 7.090122 +8.700000 4.100000 7.513823 +8.700000 4.200000 7.957523 +8.700000 4.300000 8.421224 +8.700000 4.400000 8.904925 +8.700000 4.500000 9.408626 +8.700000 4.600000 9.932327 +8.700000 4.700000 10.476028 +8.700000 4.800000 11.039729 +8.700000 4.900000 11.623430 +8.700000 5.000000 12.227131 +8.700000 5.100000 12.850832 +8.700000 5.200000 13.494533 +8.700000 5.300000 14.158233 +8.700000 5.400000 14.841934 +8.700000 5.500000 15.545635 +8.700000 5.600000 16.269336 +8.700000 5.700000 17.013037 +8.700000 5.800000 17.776738 +8.700000 5.900000 18.560439 +8.700000 6.000000 19.364140 +8.700000 6.100000 20.187841 +8.700000 6.200000 21.031542 +8.700000 6.300000 21.895243 +8.700000 6.400000 22.778944 +8.700000 6.500000 23.682644 +8.700000 6.600000 24.606345 +8.700000 6.700000 25.550046 +8.700000 6.800000 26.513747 +8.700000 6.900000 27.497448 +8.700000 7.000000 28.501149 +8.700000 7.100000 29.524850 +8.700000 7.200000 30.568551 +8.700000 7.300000 31.632252 +8.700000 7.400000 32.715953 +8.700000 7.500000 33.819654 +8.700000 7.600000 34.943354 +8.700000 7.700000 36.087055 +8.700000 7.800000 37.250756 +8.700000 7.900000 38.434457 +8.700000 8.000000 39.638158 +8.700000 8.100000 40.861859 +8.700000 8.200000 42.105560 +8.700000 8.300000 43.369261 +8.700000 8.400000 44.652962 +8.700000 8.500000 45.956663 +8.700000 8.600000 47.280364 +8.700000 8.700000 48.624064 +8.700000 8.800000 49.987765 +8.700000 8.900000 51.371466 +8.700000 9.000000 52.775167 +8.700000 9.100000 54.198868 +8.700000 9.200000 55.642569 +8.700000 9.300000 57.106270 +8.700000 9.400000 58.589971 +8.700000 9.500000 60.093672 +8.700000 9.600000 61.617373 +8.700000 9.700000 63.161074 +8.700000 9.800000 64.724774 +8.700000 9.900000 66.308475 +8.700000 10.000000 67.912176 +8.700000 10.100000 69.535877 +8.700000 10.200000 71.179578 +8.700000 10.300000 72.843279 +8.700000 10.400000 74.526980 +8.700000 10.500000 76.230681 +8.700000 10.600000 77.954382 +8.700000 10.700000 79.698083 +8.700000 10.800000 81.461784 +8.700000 10.900000 83.245484 +8.700000 11.000000 85.049185 +8.700000 11.100000 86.872886 +8.700000 11.200000 88.716587 +8.700000 11.300000 90.580288 +8.700000 11.400000 92.463989 +8.700000 11.500000 94.367690 +8.700000 11.600000 96.291391 +8.700000 11.700000 98.235092 +8.700000 11.800000 100.198793 +8.700000 11.900000 102.182494 +8.700000 12.000000 104.186194 +8.700000 12.100000 106.209895 +8.700000 12.200000 108.253596 +8.700000 12.300000 110.317297 +8.700000 12.400000 112.400998 +8.700000 12.500000 114.504699 +8.700000 12.600000 116.628400 +8.700000 12.700000 118.772101 +8.700000 12.800000 120.935802 +8.700000 12.900000 123.119503 +8.700000 13.000000 125.323204 +8.700000 13.100000 127.546905 +8.700000 13.200000 129.790605 +8.700000 13.300000 132.054306 +8.700000 13.400000 134.338007 +8.700000 13.500000 136.641708 +8.700000 13.600000 138.965409 +8.700000 13.700000 141.309110 +8.700000 13.800000 143.672811 +8.700000 13.900000 146.056512 +8.700000 14.000000 148.460213 +8.700000 14.100000 150.883914 +8.700000 14.200000 153.327615 +8.700000 14.300000 155.791315 +8.700000 14.400000 158.275016 +8.700000 14.500000 160.778717 +8.700000 14.600000 163.302418 +8.700000 14.700000 165.846119 +8.700000 14.800000 168.409820 +8.700000 14.900000 170.993521 +8.700000 15.000000 173.597222 + +8.800000 -5.000000 51.189584 +8.800000 -4.900000 49.799901 +8.800000 -4.800000 48.430218 +8.800000 -4.700000 47.080536 +8.800000 -4.600000 45.750853 +8.800000 -4.500000 44.441170 +8.800000 -4.400000 43.151488 +8.800000 -4.300000 41.881805 +8.800000 -4.200000 40.632122 +8.800000 -4.100000 39.402439 +8.800000 -4.000000 38.192757 +8.800000 -3.900000 37.003074 +8.800000 -3.800000 35.833391 +8.800000 -3.700000 34.683709 +8.800000 -3.600000 33.554026 +8.800000 -3.500000 32.444343 +8.800000 -3.400000 31.354661 +8.800000 -3.300000 30.284978 +8.800000 -3.200000 29.235295 +8.800000 -3.100000 28.205613 +8.800000 -3.000000 27.195930 +8.800000 -2.900000 26.206247 +8.800000 -2.800000 25.236565 +8.800000 -2.700000 24.286882 +8.800000 -2.600000 23.357199 +8.800000 -2.500000 22.447517 +8.800000 -2.400000 21.557834 +8.800000 -2.300000 20.688151 +8.800000 -2.200000 19.838469 +8.800000 -2.100000 19.008786 +8.800000 -2.000000 18.199103 +8.800000 -1.900000 17.409421 +8.800000 -1.800000 16.639738 +8.800000 -1.700000 15.890055 +8.800000 -1.600000 15.160372 +8.800000 -1.500000 14.450690 +8.800000 -1.400000 13.761007 +8.800000 -1.300000 13.091324 +8.800000 -1.200000 12.441642 +8.800000 -1.100000 11.811959 +8.800000 -1.000000 11.202276 +8.800000 -0.900000 10.612594 +8.800000 -0.800000 10.042911 +8.800000 -0.700000 9.493228 +8.800000 -0.600000 8.963546 +8.800000 -0.500000 8.453863 +8.800000 -0.400000 7.964180 +8.800000 -0.300000 7.494498 +8.800000 -0.200000 7.044815 +8.800000 -0.100000 6.615132 +8.800000 -0.000000 6.205450 +8.800000 0.100000 5.815767 +8.800000 0.200000 5.446084 +8.800000 0.300000 5.096402 +8.800000 0.400000 4.766719 +8.800000 0.500000 4.457036 +8.800000 0.600000 4.167354 +8.800000 0.700000 3.897671 +8.800000 0.800000 3.647988 +8.800000 0.900000 3.418306 +8.800000 1.000000 3.208623 +8.800000 1.100000 3.018940 +8.800000 1.200000 2.849257 +8.800000 1.300000 2.699575 +8.800000 1.400000 2.569892 +8.800000 1.500000 2.460209 +8.800000 1.600000 2.370527 +8.800000 1.700000 2.300844 +8.800000 1.800000 2.251161 +8.800000 1.900000 2.221479 +8.800000 2.000000 2.211796 +8.800000 2.100000 2.222113 +8.800000 2.200000 2.252431 +8.800000 2.300000 2.302748 +8.800000 2.400000 2.373065 +8.800000 2.500000 2.463383 +8.800000 2.600000 2.573700 +8.800000 2.700000 2.704017 +8.800000 2.800000 2.854335 +8.800000 2.900000 3.024652 +8.800000 3.000000 3.214969 +8.800000 3.100000 3.425287 +8.800000 3.200000 3.655604 +8.800000 3.300000 3.905921 +8.800000 3.400000 4.176239 +8.800000 3.500000 4.466556 +8.800000 3.600000 4.776873 +8.800000 3.700000 5.107190 +8.800000 3.800000 5.457508 +8.800000 3.900000 5.827825 +8.800000 4.000000 6.218142 +8.800000 4.100000 6.628460 +8.800000 4.200000 7.058777 +8.800000 4.300000 7.509094 +8.800000 4.400000 7.979412 +8.800000 4.500000 8.469729 +8.800000 4.600000 8.980046 +8.800000 4.700000 9.510364 +8.800000 4.800000 10.060681 +8.800000 4.900000 10.630998 +8.800000 5.000000 11.221316 +8.800000 5.100000 11.831633 +8.800000 5.200000 12.461950 +8.800000 5.300000 13.112268 +8.800000 5.400000 13.782585 +8.800000 5.500000 14.472902 +8.800000 5.600000 15.183220 +8.800000 5.700000 15.913537 +8.800000 5.800000 16.663854 +8.800000 5.900000 17.434172 +8.800000 6.000000 18.224489 +8.800000 6.100000 19.034806 +8.800000 6.200000 19.865124 +8.800000 6.300000 20.715441 +8.800000 6.400000 21.585758 +8.800000 6.500000 22.476075 +8.800000 6.600000 23.386393 +8.800000 6.700000 24.316710 +8.800000 6.800000 25.267027 +8.800000 6.900000 26.237345 +8.800000 7.000000 27.227662 +8.800000 7.100000 28.237979 +8.800000 7.200000 29.268297 +8.800000 7.300000 30.318614 +8.800000 7.400000 31.388931 +8.800000 7.500000 32.479249 +8.800000 7.600000 33.589566 +8.800000 7.700000 34.719883 +8.800000 7.800000 35.870201 +8.800000 7.900000 37.040518 +8.800000 8.000000 38.230835 +8.800000 8.100000 39.441153 +8.800000 8.200000 40.671470 +8.800000 8.300000 41.921787 +8.800000 8.400000 43.192105 +8.800000 8.500000 44.482422 +8.800000 8.600000 45.792739 +8.800000 8.700000 47.123057 +8.800000 8.800000 48.473374 +8.800000 8.900000 49.843691 +8.800000 9.000000 51.234008 +8.800000 9.100000 52.644326 +8.800000 9.200000 54.074643 +8.800000 9.300000 55.524960 +8.800000 9.400000 56.995278 +8.800000 9.500000 58.485595 +8.800000 9.600000 59.995912 +8.800000 9.700000 61.526230 +8.800000 9.800000 63.076547 +8.800000 9.900000 64.646864 +8.800000 10.000000 66.237182 +8.800000 10.100000 67.847499 +8.800000 10.200000 69.477816 +8.800000 10.300000 71.128134 +8.800000 10.400000 72.798451 +8.800000 10.500000 74.488768 +8.800000 10.600000 76.199086 +8.800000 10.700000 77.929403 +8.800000 10.800000 79.679720 +8.800000 10.900000 81.450038 +8.800000 11.000000 83.240355 +8.800000 11.100000 85.050672 +8.800000 11.200000 86.880990 +8.800000 11.300000 88.731307 +8.800000 11.400000 90.601624 +8.800000 11.500000 92.491942 +8.800000 11.600000 94.402259 +8.800000 11.700000 96.332576 +8.800000 11.800000 98.282893 +8.800000 11.900000 100.253211 +8.800000 12.000000 102.243528 +8.800000 12.100000 104.253845 +8.800000 12.200000 106.284163 +8.800000 12.300000 108.334480 +8.800000 12.400000 110.404797 +8.800000 12.500000 112.495115 +8.800000 12.600000 114.605432 +8.800000 12.700000 116.735749 +8.800000 12.800000 118.886067 +8.800000 12.900000 121.056384 +8.800000 13.000000 123.246701 +8.800000 13.100000 125.457019 +8.800000 13.200000 127.687336 +8.800000 13.300000 129.937653 +8.800000 13.400000 132.207971 +8.800000 13.500000 134.498288 +8.800000 13.600000 136.808605 +8.800000 13.700000 139.138923 +8.800000 13.800000 141.489240 +8.800000 13.900000 143.859557 +8.800000 14.000000 146.249875 +8.800000 14.100000 148.660192 +8.800000 14.200000 151.090509 +8.800000 14.300000 153.540826 +8.800000 14.400000 156.011144 +8.800000 14.500000 158.501461 +8.800000 14.600000 161.011778 +8.800000 14.700000 163.542096 +8.800000 14.800000 166.092413 +8.800000 14.900000 168.662730 +8.800000 15.000000 171.253048 + +8.900000 -5.000000 51.645417 +8.900000 -4.900000 50.241834 +8.900000 -4.800000 48.858251 +8.900000 -4.700000 47.494668 +8.900000 -4.600000 46.151085 +8.900000 -4.500000 44.827502 +8.900000 -4.400000 43.523919 +8.900000 -4.300000 42.240336 +8.900000 -4.200000 40.976753 +8.900000 -4.100000 39.733170 +8.900000 -4.000000 38.509586 +8.900000 -3.900000 37.306003 +8.900000 -3.800000 36.122420 +8.900000 -3.700000 34.958837 +8.900000 -3.600000 33.815254 +8.900000 -3.500000 32.691671 +8.900000 -3.400000 31.588088 +8.900000 -3.300000 30.504505 +8.900000 -3.200000 29.440922 +8.900000 -3.100000 28.397339 +8.900000 -3.000000 27.373756 +8.900000 -2.900000 26.370173 +8.900000 -2.800000 25.386590 +8.900000 -2.700000 24.423007 +8.900000 -2.600000 23.479424 +8.900000 -2.500000 22.555841 +8.900000 -2.400000 21.652258 +8.900000 -2.300000 20.768675 +8.900000 -2.200000 19.905092 +8.900000 -2.100000 19.061509 +8.900000 -2.000000 18.237926 +8.900000 -1.900000 17.434343 +8.900000 -1.800000 16.650760 +8.900000 -1.700000 15.887177 +8.900000 -1.600000 15.143594 +8.900000 -1.500000 14.420011 +8.900000 -1.400000 13.716428 +8.900000 -1.300000 13.032845 +8.900000 -1.200000 12.369262 +8.900000 -1.100000 11.725679 +8.900000 -1.000000 11.102096 +8.900000 -0.900000 10.498513 +8.900000 -0.800000 9.914930 +8.900000 -0.700000 9.351347 +8.900000 -0.600000 8.807764 +8.900000 -0.500000 8.284181 +8.900000 -0.400000 7.780598 +8.900000 -0.300000 7.297015 +8.900000 -0.200000 6.833432 +8.900000 -0.100000 6.389849 +8.900000 -0.000000 5.966266 +8.900000 0.100000 5.562683 +8.900000 0.200000 5.179100 +8.900000 0.300000 4.815517 +8.900000 0.400000 4.471934 +8.900000 0.500000 4.148351 +8.900000 0.600000 3.844768 +8.900000 0.700000 3.561185 +8.900000 0.800000 3.297602 +8.900000 0.900000 3.054019 +8.900000 1.000000 2.830436 +8.900000 1.100000 2.626853 +8.900000 1.200000 2.443270 +8.900000 1.300000 2.279687 +8.900000 1.400000 2.136104 +8.900000 1.500000 2.012521 +8.900000 1.600000 1.908938 +8.900000 1.700000 1.825355 +8.900000 1.800000 1.761772 +8.900000 1.900000 1.718189 +8.900000 2.000000 1.694606 +8.900000 2.100000 1.691023 +8.900000 2.200000 1.707440 +8.900000 2.300000 1.743857 +8.900000 2.400000 1.800274 +8.900000 2.500000 1.876691 +8.900000 2.600000 1.973108 +8.900000 2.700000 2.089525 +8.900000 2.800000 2.225942 +8.900000 2.900000 2.382359 +8.900000 3.000000 2.558776 +8.900000 3.100000 2.755193 +8.900000 3.200000 2.971610 +8.900000 3.300000 3.208027 +8.900000 3.400000 3.464444 +8.900000 3.500000 3.740861 +8.900000 3.600000 4.037278 +8.900000 3.700000 4.353695 +8.900000 3.800000 4.690112 +8.900000 3.900000 5.046529 +8.900000 4.000000 5.422946 +8.900000 4.100000 5.819363 +8.900000 4.200000 6.235780 +8.900000 4.300000 6.672197 +8.900000 4.400000 7.128614 +8.900000 4.500000 7.605031 +8.900000 4.600000 8.101448 +8.900000 4.700000 8.617865 +8.900000 4.800000 9.154282 +8.900000 4.900000 9.710699 +8.900000 5.000000 10.287116 +8.900000 5.100000 10.883533 +8.900000 5.200000 11.499950 +8.900000 5.300000 12.136367 +8.900000 5.400000 12.792784 +8.900000 5.500000 13.469201 +8.900000 5.600000 14.165618 +8.900000 5.700000 14.882035 +8.900000 5.800000 15.618452 +8.900000 5.900000 16.374869 +8.900000 6.000000 17.151286 +8.900000 6.100000 17.947703 +8.900000 6.200000 18.764120 +8.900000 6.300000 19.600537 +8.900000 6.400000 20.456954 +8.900000 6.500000 21.333371 +8.900000 6.600000 22.229788 +8.900000 6.700000 23.146205 +8.900000 6.800000 24.082622 +8.900000 6.900000 25.039039 +8.900000 7.000000 26.015456 +8.900000 7.100000 27.011873 +8.900000 7.200000 28.028290 +8.900000 7.300000 29.064707 +8.900000 7.400000 30.121124 +8.900000 7.500000 31.197541 +8.900000 7.600000 32.293958 +8.900000 7.700000 33.410375 +8.900000 7.800000 34.546792 +8.900000 7.900000 35.703209 +8.900000 8.000000 36.879626 +8.900000 8.100000 38.076043 +8.900000 8.200000 39.292460 +8.900000 8.300000 40.528877 +8.900000 8.400000 41.785294 +8.900000 8.500000 43.061711 +8.900000 8.600000 44.358128 +8.900000 8.700000 45.674545 +8.900000 8.800000 47.010962 +8.900000 8.900000 48.367379 +8.900000 9.000000 49.743796 +8.900000 9.100000 51.140213 +8.900000 9.200000 52.556630 +8.900000 9.300000 53.993047 +8.900000 9.400000 55.449464 +8.900000 9.500000 56.925881 +8.900000 9.600000 58.422298 +8.900000 9.700000 59.938715 +8.900000 9.800000 61.475132 +8.900000 9.900000 63.031549 +8.900000 10.000000 64.607966 +8.900000 10.100000 66.204383 +8.900000 10.200000 67.820800 +8.900000 10.300000 69.457217 +8.900000 10.400000 71.113634 +8.900000 10.500000 72.790051 +8.900000 10.600000 74.486468 +8.900000 10.700000 76.202884 +8.900000 10.800000 77.939301 +8.900000 10.900000 79.695718 +8.900000 11.000000 81.472135 +8.900000 11.100000 83.268552 +8.900000 11.200000 85.084969 +8.900000 11.300000 86.921386 +8.900000 11.400000 88.777803 +8.900000 11.500000 90.654220 +8.900000 11.600000 92.550637 +8.900000 11.700000 94.467054 +8.900000 11.800000 96.403471 +8.900000 11.900000 98.359888 +8.900000 12.000000 100.336305 +8.900000 12.100000 102.332722 +8.900000 12.200000 104.349139 +8.900000 12.300000 106.385556 +8.900000 12.400000 108.441973 +8.900000 12.500000 110.518390 +8.900000 12.600000 112.614807 +8.900000 12.700000 114.731224 +8.900000 12.800000 116.867641 +8.900000 12.900000 119.024058 +8.900000 13.000000 121.200475 +8.900000 13.100000 123.396892 +8.900000 13.200000 125.613309 +8.900000 13.300000 127.849726 +8.900000 13.400000 130.106143 +8.900000 13.500000 132.382560 +8.900000 13.600000 134.678977 +8.900000 13.700000 136.995394 +8.900000 13.800000 139.331811 +8.900000 13.900000 141.688228 +8.900000 14.000000 144.064645 +8.900000 14.100000 146.461062 +8.900000 14.200000 148.877479 +8.900000 14.300000 151.313896 +8.900000 14.400000 153.770313 +8.900000 14.500000 156.246730 +8.900000 14.600000 158.743147 +8.900000 14.700000 161.259564 +8.900000 14.800000 163.795981 +8.900000 14.900000 166.352398 +8.900000 15.000000 168.928815 + +9.000000 -5.000000 52.230830 +9.000000 -4.900000 50.812830 +9.000000 -4.800000 49.414830 +9.000000 -4.700000 48.036830 +9.000000 -4.600000 46.678829 +9.000000 -4.500000 45.340829 +9.000000 -4.400000 44.022829 +9.000000 -4.300000 42.724829 +9.000000 -4.200000 41.446829 +9.000000 -4.100000 40.188829 +9.000000 -4.000000 38.950829 +9.000000 -3.900000 37.732829 +9.000000 -3.800000 36.534829 +9.000000 -3.700000 35.356829 +9.000000 -3.600000 34.198829 +9.000000 -3.500000 33.060829 +9.000000 -3.400000 31.942829 +9.000000 -3.300000 30.844829 +9.000000 -3.200000 29.766828 +9.000000 -3.100000 28.708828 +9.000000 -3.000000 27.670828 +9.000000 -2.900000 26.652828 +9.000000 -2.800000 25.654828 +9.000000 -2.700000 24.676828 +9.000000 -2.600000 23.718828 +9.000000 -2.500000 22.780828 +9.000000 -2.400000 21.862828 +9.000000 -2.300000 20.964828 +9.000000 -2.200000 20.086828 +9.000000 -2.100000 19.228828 +9.000000 -2.000000 18.390828 +9.000000 -1.900000 17.572828 +9.000000 -1.800000 16.774827 +9.000000 -1.700000 15.996827 +9.000000 -1.600000 15.238827 +9.000000 -1.500000 14.500827 +9.000000 -1.400000 13.782827 +9.000000 -1.300000 13.084827 +9.000000 -1.200000 12.406827 +9.000000 -1.100000 11.748827 +9.000000 -1.000000 11.110827 +9.000000 -0.900000 10.492827 +9.000000 -0.800000 9.894827 +9.000000 -0.700000 9.316827 +9.000000 -0.600000 8.758827 +9.000000 -0.500000 8.220827 +9.000000 -0.400000 7.702826 +9.000000 -0.300000 7.204826 +9.000000 -0.200000 6.726826 +9.000000 -0.100000 6.268826 +9.000000 -0.000000 5.830826 +9.000000 0.100000 5.412826 +9.000000 0.200000 5.014826 +9.000000 0.300000 4.636826 +9.000000 0.400000 4.278826 +9.000000 0.500000 3.940826 +9.000000 0.600000 3.622826 +9.000000 0.700000 3.324826 +9.000000 0.800000 3.046826 +9.000000 0.900000 2.788825 +9.000000 1.000000 2.550825 +9.000000 1.100000 2.332825 +9.000000 1.200000 2.134825 +9.000000 1.300000 1.956825 +9.000000 1.400000 1.798825 +9.000000 1.500000 1.660825 +9.000000 1.600000 1.542825 +9.000000 1.700000 1.444825 +9.000000 1.800000 1.366825 +9.000000 1.900000 1.308825 +9.000000 2.000000 1.270825 +9.000000 2.100000 1.252825 +9.000000 2.200000 1.254825 +9.000000 2.300000 1.276824 +9.000000 2.400000 1.318824 +9.000000 2.500000 1.380824 +9.000000 2.600000 1.462824 +9.000000 2.700000 1.564824 +9.000000 2.800000 1.686824 +9.000000 2.900000 1.828824 +9.000000 3.000000 1.990824 +9.000000 3.100000 2.172824 +9.000000 3.200000 2.374824 +9.000000 3.300000 2.596824 +9.000000 3.400000 2.838824 +9.000000 3.500000 3.100824 +9.000000 3.600000 3.382824 +9.000000 3.700000 3.684823 +9.000000 3.800000 4.006823 +9.000000 3.900000 4.348823 +9.000000 4.000000 4.710823 +9.000000 4.100000 5.092823 +9.000000 4.200000 5.494823 +9.000000 4.300000 5.916823 +9.000000 4.400000 6.358823 +9.000000 4.500000 6.820823 +9.000000 4.600000 7.302823 +9.000000 4.700000 7.804823 +9.000000 4.800000 8.326823 +9.000000 4.900000 8.868823 +9.000000 5.000000 9.430823 +9.000000 5.100000 10.012822 +9.000000 5.200000 10.614822 +9.000000 5.300000 11.236822 +9.000000 5.400000 11.878822 +9.000000 5.500000 12.540822 +9.000000 5.600000 13.222822 +9.000000 5.700000 13.924822 +9.000000 5.800000 14.646822 +9.000000 5.900000 15.388822 +9.000000 6.000000 16.150822 +9.000000 6.100000 16.932822 +9.000000 6.200000 17.734822 +9.000000 6.300000 18.556822 +9.000000 6.400000 19.398822 +9.000000 6.500000 20.260821 +9.000000 6.600000 21.142821 +9.000000 6.700000 22.044821 +9.000000 6.800000 22.966821 +9.000000 6.900000 23.908821 +9.000000 7.000000 24.870821 +9.000000 7.100000 25.852821 +9.000000 7.200000 26.854821 +9.000000 7.300000 27.876821 +9.000000 7.400000 28.918821 +9.000000 7.500000 29.980821 +9.000000 7.600000 31.062821 +9.000000 7.700000 32.164821 +9.000000 7.800000 33.286820 +9.000000 7.900000 34.428820 +9.000000 8.000000 35.590820 +9.000000 8.100000 36.772820 +9.000000 8.200000 37.974820 +9.000000 8.300000 39.196820 +9.000000 8.400000 40.438820 +9.000000 8.500000 41.700820 +9.000000 8.600000 42.982820 +9.000000 8.700000 44.284820 +9.000000 8.800000 45.606820 +9.000000 8.900000 46.948820 +9.000000 9.000000 48.310820 +9.000000 9.100000 49.692820 +9.000000 9.200000 51.094819 +9.000000 9.300000 52.516819 +9.000000 9.400000 53.958819 +9.000000 9.500000 55.420819 +9.000000 9.600000 56.902819 +9.000000 9.700000 58.404819 +9.000000 9.800000 59.926819 +9.000000 9.900000 61.468819 +9.000000 10.000000 63.030819 +9.000000 10.100000 64.612819 +9.000000 10.200000 66.214819 +9.000000 10.300000 67.836819 +9.000000 10.400000 69.478819 +9.000000 10.500000 71.140819 +9.000000 10.600000 72.822818 +9.000000 10.700000 74.524818 +9.000000 10.800000 76.246818 +9.000000 10.900000 77.988818 +9.000000 11.000000 79.750818 +9.000000 11.100000 81.532818 +9.000000 11.200000 83.334818 +9.000000 11.300000 85.156818 +9.000000 11.400000 86.998818 +9.000000 11.500000 88.860818 +9.000000 11.600000 90.742818 +9.000000 11.700000 92.644818 +9.000000 11.800000 94.566818 +9.000000 11.900000 96.508818 +9.000000 12.000000 98.470817 +9.000000 12.100000 100.452817 +9.000000 12.200000 102.454817 +9.000000 12.300000 104.476817 +9.000000 12.400000 106.518817 +9.000000 12.500000 108.580817 +9.000000 12.600000 110.662817 +9.000000 12.700000 112.764817 +9.000000 12.800000 114.886817 +9.000000 12.900000 117.028817 +9.000000 13.000000 119.190817 +9.000000 13.100000 121.372817 +9.000000 13.200000 123.574817 +9.000000 13.300000 125.796817 +9.000000 13.400000 128.038816 +9.000000 13.500000 130.300816 +9.000000 13.600000 132.582816 +9.000000 13.700000 134.884816 +9.000000 13.800000 137.206816 +9.000000 13.900000 139.548816 +9.000000 14.000000 141.910816 +9.000000 14.100000 144.292816 +9.000000 14.200000 146.694816 +9.000000 14.300000 149.116816 +9.000000 14.400000 151.558816 +9.000000 14.500000 154.020816 +9.000000 14.600000 156.502816 +9.000000 14.700000 159.004815 +9.000000 14.800000 161.526815 +9.000000 14.900000 164.068815 +9.000000 15.000000 166.630815 + +9.100000 -5.000000 52.951325 +9.100000 -4.900000 51.518391 +9.100000 -4.800000 50.105457 +9.100000 -4.700000 48.712523 +9.100000 -4.600000 47.339589 +9.100000 -4.500000 45.986655 +9.100000 -4.400000 44.653721 +9.100000 -4.300000 43.340788 +9.100000 -4.200000 42.047854 +9.100000 -4.100000 40.774920 +9.100000 -4.000000 39.521986 +9.100000 -3.900000 38.289052 +9.100000 -3.800000 37.076118 +9.100000 -3.700000 35.883184 +9.100000 -3.600000 34.710250 +9.100000 -3.500000 33.557317 +9.100000 -3.400000 32.424383 +9.100000 -3.300000 31.311449 +9.100000 -3.200000 30.218515 +9.100000 -3.100000 29.145581 +9.100000 -3.000000 28.092647 +9.100000 -2.900000 27.059713 +9.100000 -2.800000 26.046779 +9.100000 -2.700000 25.053846 +9.100000 -2.600000 24.080912 +9.100000 -2.500000 23.127978 +9.100000 -2.400000 22.195044 +9.100000 -2.300000 21.282110 +9.100000 -2.200000 20.389176 +9.100000 -2.100000 19.516242 +9.100000 -2.000000 18.663308 +9.100000 -1.900000 17.830375 +9.100000 -1.800000 17.017441 +9.100000 -1.700000 16.224507 +9.100000 -1.600000 15.451573 +9.100000 -1.500000 14.698639 +9.100000 -1.400000 13.965705 +9.100000 -1.300000 13.252771 +9.100000 -1.200000 12.559837 +9.100000 -1.100000 11.886904 +9.100000 -1.000000 11.233970 +9.100000 -0.900000 10.601036 +9.100000 -0.800000 9.988102 +9.100000 -0.700000 9.395168 +9.100000 -0.600000 8.822234 +9.100000 -0.500000 8.269300 +9.100000 -0.400000 7.736366 +9.100000 -0.300000 7.223433 +9.100000 -0.200000 6.730499 +9.100000 -0.100000 6.257565 +9.100000 -0.000000 5.804631 +9.100000 0.100000 5.371697 +9.100000 0.200000 4.958763 +9.100000 0.300000 4.565829 +9.100000 0.400000 4.192895 +9.100000 0.500000 3.839962 +9.100000 0.600000 3.507028 +9.100000 0.700000 3.194094 +9.100000 0.800000 2.901160 +9.100000 0.900000 2.628226 +9.100000 1.000000 2.375292 +9.100000 1.100000 2.142358 +9.100000 1.200000 1.929424 +9.100000 1.300000 1.736490 +9.100000 1.400000 1.563557 +9.100000 1.500000 1.410623 +9.100000 1.600000 1.277689 +9.100000 1.700000 1.164755 +9.100000 1.800000 1.071821 +9.100000 1.900000 0.998887 +9.100000 2.000000 0.945953 +9.100000 2.100000 0.913019 +9.100000 2.200000 0.900086 +9.100000 2.300000 0.907152 +9.100000 2.400000 0.934218 +9.100000 2.500000 0.981284 +9.100000 2.600000 1.048350 +9.100000 2.700000 1.135416 +9.100000 2.800000 1.242482 +9.100000 2.900000 1.369548 +9.100000 3.000000 1.516615 +9.100000 3.100000 1.683681 +9.100000 3.200000 1.870747 +9.100000 3.300000 2.077813 +9.100000 3.400000 2.304879 +9.100000 3.500000 2.551945 +9.100000 3.600000 2.819011 +9.100000 3.700000 3.106077 +9.100000 3.800000 3.413144 +9.100000 3.900000 3.740210 +9.100000 4.000000 4.087276 +9.100000 4.100000 4.454342 +9.100000 4.200000 4.841408 +9.100000 4.300000 5.248474 +9.100000 4.400000 5.675540 +9.100000 4.500000 6.122606 +9.100000 4.600000 6.589673 +9.100000 4.700000 7.076739 +9.100000 4.800000 7.583805 +9.100000 4.900000 8.110871 +9.100000 5.000000 8.657937 +9.100000 5.100000 9.225003 +9.100000 5.200000 9.812069 +9.100000 5.300000 10.419135 +9.100000 5.400000 11.046202 +9.100000 5.500000 11.693268 +9.100000 5.600000 12.360334 +9.100000 5.700000 13.047400 +9.100000 5.800000 13.754466 +9.100000 5.900000 14.481532 +9.100000 6.000000 15.228598 +9.100000 6.100000 15.995664 +9.100000 6.200000 16.782731 +9.100000 6.300000 17.589797 +9.100000 6.400000 18.416863 +9.100000 6.500000 19.263929 +9.100000 6.600000 20.130995 +9.100000 6.700000 21.018061 +9.100000 6.800000 21.925127 +9.100000 6.900000 22.852193 +9.100000 7.000000 23.799260 +9.100000 7.100000 24.766326 +9.100000 7.200000 25.753392 +9.100000 7.300000 26.760458 +9.100000 7.400000 27.787524 +9.100000 7.500000 28.834590 +9.100000 7.600000 29.901656 +9.100000 7.700000 30.988722 +9.100000 7.800000 32.095789 +9.100000 7.900000 33.222855 +9.100000 8.000000 34.369921 +9.100000 8.100000 35.536987 +9.100000 8.200000 36.724053 +9.100000 8.300000 37.931119 +9.100000 8.400000 39.158185 +9.100000 8.500000 40.405251 +9.100000 8.600000 41.672318 +9.100000 8.700000 42.959384 +9.100000 8.800000 44.266450 +9.100000 8.900000 45.593516 +9.100000 9.000000 46.940582 +9.100000 9.100000 48.307648 +9.100000 9.200000 49.694714 +9.100000 9.300000 51.101780 +9.100000 9.400000 52.528847 +9.100000 9.500000 53.975913 +9.100000 9.600000 55.442979 +9.100000 9.700000 56.930045 +9.100000 9.800000 58.437111 +9.100000 9.900000 59.964177 +9.100000 10.000000 61.511243 +9.100000 10.100000 63.078309 +9.100000 10.200000 64.665376 +9.100000 10.300000 66.272442 +9.100000 10.400000 67.899508 +9.100000 10.500000 69.546574 +9.100000 10.600000 71.213640 +9.100000 10.700000 72.900706 +9.100000 10.800000 74.607772 +9.100000 10.900000 76.334838 +9.100000 11.000000 78.081905 +9.100000 11.100000 79.848971 +9.100000 11.200000 81.636037 +9.100000 11.300000 83.443103 +9.100000 11.400000 85.270169 +9.100000 11.500000 87.117235 +9.100000 11.600000 88.984301 +9.100000 11.700000 90.871367 +9.100000 11.800000 92.778434 +9.100000 11.900000 94.705500 +9.100000 12.000000 96.652566 +9.100000 12.100000 98.619632 +9.100000 12.200000 100.606698 +9.100000 12.300000 102.613764 +9.100000 12.400000 104.640830 +9.100000 12.500000 106.687896 +9.100000 12.600000 108.754962 +9.100000 12.700000 110.842029 +9.100000 12.800000 112.949095 +9.100000 12.900000 115.076161 +9.100000 13.000000 117.223227 +9.100000 13.100000 119.390293 +9.100000 13.200000 121.577359 +9.100000 13.300000 123.784425 +9.100000 13.400000 126.011491 +9.100000 13.500000 128.258558 +9.100000 13.600000 130.525624 +9.100000 13.700000 132.812690 +9.100000 13.800000 135.119756 +9.100000 13.900000 137.446822 +9.100000 14.000000 139.793888 +9.100000 14.100000 142.160954 +9.100000 14.200000 144.548020 +9.100000 14.300000 146.955087 +9.100000 14.400000 149.382153 +9.100000 14.500000 151.829219 +9.100000 14.600000 154.296285 +9.100000 14.700000 156.783351 +9.100000 14.800000 159.290417 +9.100000 14.900000 161.817483 +9.100000 15.000000 164.364549 + +9.200000 -5.000000 53.811569 +9.200000 -4.900000 52.363185 +9.200000 -4.800000 50.934801 +9.200000 -4.700000 49.526416 +9.200000 -4.600000 48.138032 +9.200000 -4.500000 46.769647 +9.200000 -4.400000 45.421263 +9.200000 -4.300000 44.092879 +9.200000 -4.200000 42.784494 +9.200000 -4.100000 41.496110 +9.200000 -4.000000 40.227725 +9.200000 -3.900000 38.979341 +9.200000 -3.800000 37.750956 +9.200000 -3.700000 36.542572 +9.200000 -3.600000 35.354188 +9.200000 -3.500000 34.185803 +9.200000 -3.400000 33.037419 +9.200000 -3.300000 31.909034 +9.200000 -3.200000 30.800650 +9.200000 -3.100000 29.712266 +9.200000 -3.000000 28.643881 +9.200000 -2.900000 27.595497 +9.200000 -2.800000 26.567112 +9.200000 -2.700000 25.558728 +9.200000 -2.600000 24.570343 +9.200000 -2.500000 23.601959 +9.200000 -2.400000 22.653575 +9.200000 -2.300000 21.725190 +9.200000 -2.200000 20.816806 +9.200000 -2.100000 19.928421 +9.200000 -2.000000 19.060037 +9.200000 -1.900000 18.211653 +9.200000 -1.800000 17.383268 +9.200000 -1.700000 16.574884 +9.200000 -1.600000 15.786499 +9.200000 -1.500000 15.018115 +9.200000 -1.400000 14.269730 +9.200000 -1.300000 13.541346 +9.200000 -1.200000 12.832962 +9.200000 -1.100000 12.144577 +9.200000 -1.000000 11.476193 +9.200000 -0.900000 10.827808 +9.200000 -0.800000 10.199424 +9.200000 -0.700000 9.591040 +9.200000 -0.600000 9.002655 +9.200000 -0.500000 8.434271 +9.200000 -0.400000 7.885886 +9.200000 -0.300000 7.357502 +9.200000 -0.200000 6.849117 +9.200000 -0.100000 6.360733 +9.200000 -0.000000 5.892349 +9.200000 0.100000 5.443964 +9.200000 0.200000 5.015580 +9.200000 0.300000 4.607195 +9.200000 0.400000 4.218811 +9.200000 0.500000 3.850427 +9.200000 0.600000 3.502042 +9.200000 0.700000 3.173658 +9.200000 0.800000 2.865273 +9.200000 0.900000 2.576889 +9.200000 1.000000 2.308504 +9.200000 1.100000 2.060120 +9.200000 1.200000 1.831736 +9.200000 1.300000 1.623351 +9.200000 1.400000 1.434967 +9.200000 1.500000 1.266582 +9.200000 1.600000 1.118198 +9.200000 1.700000 0.989813 +9.200000 1.800000 0.881429 +9.200000 1.900000 0.793045 +9.200000 2.000000 0.724660 +9.200000 2.100000 0.676276 +9.200000 2.200000 0.647891 +9.200000 2.300000 0.639507 +9.200000 2.400000 0.651123 +9.200000 2.500000 0.682738 +9.200000 2.600000 0.734354 +9.200000 2.700000 0.805969 +9.200000 2.800000 0.897585 +9.200000 2.900000 1.009200 +9.200000 3.000000 1.140816 +9.200000 3.100000 1.292432 +9.200000 3.200000 1.464047 +9.200000 3.300000 1.655663 +9.200000 3.400000 1.867278 +9.200000 3.500000 2.098894 +9.200000 3.600000 2.350510 +9.200000 3.700000 2.622125 +9.200000 3.800000 2.913741 +9.200000 3.900000 3.225356 +9.200000 4.000000 3.556972 +9.200000 4.100000 3.908587 +9.200000 4.200000 4.280203 +9.200000 4.300000 4.671819 +9.200000 4.400000 5.083434 +9.200000 4.500000 5.515050 +9.200000 4.600000 5.966665 +9.200000 4.700000 6.438281 +9.200000 4.800000 6.929897 +9.200000 4.900000 7.441512 +9.200000 5.000000 7.973128 +9.200000 5.100000 8.524743 +9.200000 5.200000 9.096359 +9.200000 5.300000 9.687974 +9.200000 5.400000 10.299590 +9.200000 5.500000 10.931206 +9.200000 5.600000 11.582821 +9.200000 5.700000 12.254437 +9.200000 5.800000 12.946052 +9.200000 5.900000 13.657668 +9.200000 6.000000 14.389284 +9.200000 6.100000 15.140899 +9.200000 6.200000 15.912515 +9.200000 6.300000 16.704130 +9.200000 6.400000 17.515746 +9.200000 6.500000 18.347361 +9.200000 6.600000 19.198977 +9.200000 6.700000 20.070593 +9.200000 6.800000 20.962208 +9.200000 6.900000 21.873824 +9.200000 7.000000 22.805439 +9.200000 7.100000 23.757055 +9.200000 7.200000 24.728671 +9.200000 7.300000 25.720286 +9.200000 7.400000 26.731902 +9.200000 7.500000 27.763517 +9.200000 7.600000 28.815133 +9.200000 7.700000 29.886748 +9.200000 7.800000 30.978364 +9.200000 7.900000 32.089980 +9.200000 8.000000 33.221595 +9.200000 8.100000 34.373211 +9.200000 8.200000 35.544826 +9.200000 8.300000 36.736442 +9.200000 8.400000 37.948057 +9.200000 8.500000 39.179673 +9.200000 8.600000 40.431289 +9.200000 8.700000 41.702904 +9.200000 8.800000 42.994520 +9.200000 8.900000 44.306135 +9.200000 9.000000 45.637751 +9.200000 9.100000 46.989367 +9.200000 9.200000 48.360982 +9.200000 9.300000 49.752598 +9.200000 9.400000 51.164213 +9.200000 9.500000 52.595829 +9.200000 9.600000 54.047444 +9.200000 9.700000 55.519060 +9.200000 9.800000 57.010676 +9.200000 9.900000 58.522291 +9.200000 10.000000 60.053907 +9.200000 10.100000 61.605522 +9.200000 10.200000 63.177138 +9.200000 10.300000 64.768754 +9.200000 10.400000 66.380369 +9.200000 10.500000 68.011985 +9.200000 10.600000 69.663600 +9.200000 10.700000 71.335216 +9.200000 10.800000 73.026831 +9.200000 10.900000 74.738447 +9.200000 11.000000 76.470063 +9.200000 11.100000 78.221678 +9.200000 11.200000 79.993294 +9.200000 11.300000 81.784909 +9.200000 11.400000 83.596525 +9.200000 11.500000 85.428141 +9.200000 11.600000 87.279756 +9.200000 11.700000 89.151372 +9.200000 11.800000 91.042987 +9.200000 11.900000 92.954603 +9.200000 12.000000 94.886218 +9.200000 12.100000 96.837834 +9.200000 12.200000 98.809450 +9.200000 12.300000 100.801065 +9.200000 12.400000 102.812681 +9.200000 12.500000 104.844296 +9.200000 12.600000 106.895912 +9.200000 12.700000 108.967528 +9.200000 12.800000 111.059143 +9.200000 12.900000 113.170759 +9.200000 13.000000 115.302374 +9.200000 13.100000 117.453990 +9.200000 13.200000 119.625605 +9.200000 13.300000 121.817221 +9.200000 13.400000 124.028837 +9.200000 13.500000 126.260452 +9.200000 13.600000 128.512068 +9.200000 13.700000 130.783683 +9.200000 13.800000 133.075299 +9.200000 13.900000 135.386915 +9.200000 14.000000 137.718530 +9.200000 14.100000 140.070146 +9.200000 14.200000 142.441761 +9.200000 14.300000 144.833377 +9.200000 14.400000 147.244992 +9.200000 14.500000 149.676608 +9.200000 14.600000 152.128224 +9.200000 14.700000 154.599839 +9.200000 14.800000 157.091455 +9.200000 14.900000 159.603070 +9.200000 15.000000 162.134686 + +9.300000 -5.000000 54.815364 +9.300000 -4.900000 53.351012 +9.300000 -4.800000 51.906660 +9.300000 -4.700000 50.482309 +9.300000 -4.600000 49.077957 +9.300000 -4.500000 47.693605 +9.300000 -4.400000 46.329254 +9.300000 -4.300000 44.984902 +9.300000 -4.200000 43.660550 +9.300000 -4.100000 42.356199 +9.300000 -4.000000 41.071847 +9.300000 -3.900000 39.807495 +9.300000 -3.800000 38.563143 +9.300000 -3.700000 37.338792 +9.300000 -3.600000 36.134440 +9.300000 -3.500000 34.950088 +9.300000 -3.400000 33.785737 +9.300000 -3.300000 32.641385 +9.300000 -3.200000 31.517033 +9.300000 -3.100000 30.412682 +9.300000 -3.000000 29.328330 +9.300000 -2.900000 28.263978 +9.300000 -2.800000 27.219627 +9.300000 -2.700000 26.195275 +9.300000 -2.600000 25.190923 +9.300000 -2.500000 24.206571 +9.300000 -2.400000 23.242220 +9.300000 -2.300000 22.297868 +9.300000 -2.200000 21.373516 +9.300000 -2.100000 20.469165 +9.300000 -2.000000 19.584813 +9.300000 -1.900000 18.720461 +9.300000 -1.800000 17.876110 +9.300000 -1.700000 17.051758 +9.300000 -1.600000 16.247406 +9.300000 -1.500000 15.463054 +9.300000 -1.400000 14.698703 +9.300000 -1.300000 13.954351 +9.300000 -1.200000 13.229999 +9.300000 -1.100000 12.525648 +9.300000 -1.000000 11.841296 +9.300000 -0.900000 11.176944 +9.300000 -0.800000 10.532593 +9.300000 -0.700000 9.908241 +9.300000 -0.600000 9.303889 +9.300000 -0.500000 8.719537 +9.300000 -0.400000 8.155186 +9.300000 -0.300000 7.610834 +9.300000 -0.200000 7.086482 +9.300000 -0.100000 6.582131 +9.300000 -0.000000 6.097779 +9.300000 0.100000 5.633427 +9.300000 0.200000 5.189076 +9.300000 0.300000 4.764724 +9.300000 0.400000 4.360372 +9.300000 0.500000 3.976020 +9.300000 0.600000 3.611669 +9.300000 0.700000 3.267317 +9.300000 0.800000 2.942965 +9.300000 0.900000 2.638614 +9.300000 1.000000 2.354262 +9.300000 1.100000 2.089910 +9.300000 1.200000 1.845559 +9.300000 1.300000 1.621207 +9.300000 1.400000 1.416855 +9.300000 1.500000 1.232504 +9.300000 1.600000 1.068152 +9.300000 1.700000 0.923800 +9.300000 1.800000 0.799448 +9.300000 1.900000 0.695097 +9.300000 2.000000 0.610745 +9.300000 2.100000 0.546393 +9.300000 2.200000 0.502042 +9.300000 2.300000 0.477690 +9.300000 2.400000 0.473338 +9.300000 2.500000 0.488987 +9.300000 2.600000 0.524635 +9.300000 2.700000 0.580283 +9.300000 2.800000 0.655931 +9.300000 2.900000 0.751580 +9.300000 3.000000 0.867228 +9.300000 3.100000 1.002876 +9.300000 3.200000 1.158525 +9.300000 3.300000 1.334173 +9.300000 3.400000 1.529821 +9.300000 3.500000 1.745470 +9.300000 3.600000 1.981118 +9.300000 3.700000 2.236766 +9.300000 3.800000 2.512414 +9.300000 3.900000 2.808063 +9.300000 4.000000 3.123711 +9.300000 4.100000 3.459359 +9.300000 4.200000 3.815008 +9.300000 4.300000 4.190656 +9.300000 4.400000 4.586304 +9.300000 4.500000 5.001953 +9.300000 4.600000 5.437601 +9.300000 4.700000 5.893249 +9.300000 4.800000 6.368897 +9.300000 4.900000 6.864546 +9.300000 5.000000 7.380194 +9.300000 5.100000 7.915842 +9.300000 5.200000 8.471491 +9.300000 5.300000 9.047139 +9.300000 5.400000 9.642787 +9.300000 5.500000 10.258436 +9.300000 5.600000 10.894084 +9.300000 5.700000 11.549732 +9.300000 5.800000 12.225381 +9.300000 5.900000 12.921029 +9.300000 6.000000 13.636677 +9.300000 6.100000 14.372325 +9.300000 6.200000 15.127974 +9.300000 6.300000 15.903622 +9.300000 6.400000 16.699270 +9.300000 6.500000 17.514919 +9.300000 6.600000 18.350567 +9.300000 6.700000 19.206215 +9.300000 6.800000 20.081864 +9.300000 6.900000 20.977512 +9.300000 7.000000 21.893160 +9.300000 7.100000 22.828808 +9.300000 7.200000 23.784457 +9.300000 7.300000 24.760105 +9.300000 7.400000 25.755753 +9.300000 7.500000 26.771402 +9.300000 7.600000 27.807050 +9.300000 7.700000 28.862698 +9.300000 7.800000 29.938347 +9.300000 7.900000 31.033995 +9.300000 8.000000 32.149643 +9.300000 8.100000 33.285291 +9.300000 8.200000 34.440940 +9.300000 8.300000 35.616588 +9.300000 8.400000 36.812236 +9.300000 8.500000 38.027885 +9.300000 8.600000 39.263533 +9.300000 8.700000 40.519181 +9.300000 8.800000 41.794830 +9.300000 8.900000 43.090478 +9.300000 9.000000 44.406126 +9.300000 9.100000 45.741774 +9.300000 9.200000 47.097423 +9.300000 9.300000 48.473071 +9.300000 9.400000 49.868719 +9.300000 9.500000 51.284368 +9.300000 9.600000 52.720016 +9.300000 9.700000 54.175664 +9.300000 9.800000 55.651313 +9.300000 9.900000 57.146961 +9.300000 10.000000 58.662609 +9.300000 10.100000 60.198258 +9.300000 10.200000 61.753906 +9.300000 10.300000 63.329554 +9.300000 10.400000 64.925202 +9.300000 10.500000 66.540851 +9.300000 10.600000 68.176499 +9.300000 10.700000 69.832147 +9.300000 10.800000 71.507796 +9.300000 10.900000 73.203444 +9.300000 11.000000 74.919092 +9.300000 11.100000 76.654741 +9.300000 11.200000 78.410389 +9.300000 11.300000 80.186037 +9.300000 11.400000 81.981685 +9.300000 11.500000 83.797334 +9.300000 11.600000 85.632982 +9.300000 11.700000 87.488630 +9.300000 11.800000 89.364279 +9.300000 11.900000 91.259927 +9.300000 12.000000 93.175575 +9.300000 12.100000 95.111224 +9.300000 12.200000 97.066872 +9.300000 12.300000 99.042520 +9.300000 12.400000 101.038168 +9.300000 12.500000 103.053817 +9.300000 12.600000 105.089465 +9.300000 12.700000 107.145113 +9.300000 12.800000 109.220762 +9.300000 12.900000 111.316410 +9.300000 13.000000 113.432058 +9.300000 13.100000 115.567707 +9.300000 13.200000 117.723355 +9.300000 13.300000 119.899003 +9.300000 13.400000 122.094651 +9.300000 13.500000 124.310300 +9.300000 13.600000 126.545948 +9.300000 13.700000 128.801596 +9.300000 13.800000 131.077245 +9.300000 13.900000 133.372893 +9.300000 14.000000 135.688541 +9.300000 14.100000 138.024190 +9.300000 14.200000 140.379838 +9.300000 14.300000 142.755486 +9.300000 14.400000 145.151135 +9.300000 14.500000 147.566783 +9.300000 14.600000 150.002431 +9.300000 14.700000 152.458079 +9.300000 14.800000 154.933728 +9.300000 14.900000 157.429376 +9.300000 15.000000 159.945024 + +9.400000 -5.000000 55.965613 +9.400000 -4.900000 54.484777 +9.400000 -4.800000 53.023942 +9.400000 -4.700000 51.583106 +9.400000 -4.600000 50.162270 +9.400000 -4.500000 48.761434 +9.400000 -4.400000 47.380599 +9.400000 -4.300000 46.019763 +9.400000 -4.200000 44.678927 +9.400000 -4.100000 43.358092 +9.400000 -4.000000 42.057256 +9.400000 -3.900000 40.776420 +9.400000 -3.800000 39.515584 +9.400000 -3.700000 38.274749 +9.400000 -3.600000 37.053913 +9.400000 -3.500000 35.853077 +9.400000 -3.400000 34.672242 +9.400000 -3.300000 33.511406 +9.400000 -3.200000 32.370570 +9.400000 -3.100000 31.249734 +9.400000 -3.000000 30.148899 +9.400000 -2.900000 29.068063 +9.400000 -2.800000 28.007227 +9.400000 -2.700000 26.966392 +9.400000 -2.600000 25.945556 +9.400000 -2.500000 24.944720 +9.400000 -2.400000 23.963884 +9.400000 -2.300000 23.003049 +9.400000 -2.200000 22.062213 +9.400000 -2.100000 21.141377 +9.400000 -2.000000 20.240542 +9.400000 -1.900000 19.359706 +9.400000 -1.800000 18.498870 +9.400000 -1.700000 17.658034 +9.400000 -1.600000 16.837199 +9.400000 -1.500000 16.036363 +9.400000 -1.400000 15.255527 +9.400000 -1.300000 14.494692 +9.400000 -1.200000 13.753856 +9.400000 -1.100000 13.033020 +9.400000 -1.000000 12.332184 +9.400000 -0.900000 11.651349 +9.400000 -0.800000 10.990513 +9.400000 -0.700000 10.349677 +9.400000 -0.600000 9.728842 +9.400000 -0.500000 9.128006 +9.400000 -0.400000 8.547170 +9.400000 -0.300000 7.986334 +9.400000 -0.200000 7.445499 +9.400000 -0.100000 6.924663 +9.400000 -0.000000 6.423827 +9.400000 0.100000 5.942992 +9.400000 0.200000 5.482156 +9.400000 0.300000 5.041320 +9.400000 0.400000 4.620484 +9.400000 0.500000 4.219649 +9.400000 0.600000 3.838813 +9.400000 0.700000 3.477977 +9.400000 0.800000 3.137142 +9.400000 0.900000 2.816306 +9.400000 1.000000 2.515470 +9.400000 1.100000 2.234634 +9.400000 1.200000 1.973799 +9.400000 1.300000 1.732963 +9.400000 1.400000 1.512127 +9.400000 1.500000 1.311292 +9.400000 1.600000 1.130456 +9.400000 1.700000 0.969620 +9.400000 1.800000 0.828784 +9.400000 1.900000 0.707949 +9.400000 2.000000 0.607113 +9.400000 2.100000 0.526277 +9.400000 2.200000 0.465442 +9.400000 2.300000 0.424606 +9.400000 2.400000 0.403770 +9.400000 2.500000 0.402934 +9.400000 2.600000 0.422099 +9.400000 2.700000 0.461263 +9.400000 2.800000 0.520427 +9.400000 2.900000 0.599592 +9.400000 3.000000 0.698756 +9.400000 3.100000 0.817920 +9.400000 3.200000 0.957084 +9.400000 3.300000 1.116249 +9.400000 3.400000 1.295413 +9.400000 3.500000 1.494577 +9.400000 3.600000 1.713742 +9.400000 3.700000 1.952906 +9.400000 3.800000 2.212070 +9.400000 3.900000 2.491234 +9.400000 4.000000 2.790399 +9.400000 4.100000 3.109563 +9.400000 4.200000 3.448727 +9.400000 4.300000 3.807892 +9.400000 4.400000 4.187056 +9.400000 4.500000 4.586220 +9.400000 4.600000 5.005384 +9.400000 4.700000 5.444549 +9.400000 4.800000 5.903713 +9.400000 4.900000 6.382877 +9.400000 5.000000 6.882042 +9.400000 5.100000 7.401206 +9.400000 5.200000 7.940370 +9.400000 5.300000 8.499534 +9.400000 5.400000 9.078699 +9.400000 5.500000 9.677863 +9.400000 5.600000 10.297027 +9.400000 5.700000 10.936192 +9.400000 5.800000 11.595356 +9.400000 5.900000 12.274520 +9.400000 6.000000 12.973684 +9.400000 6.100000 13.692849 +9.400000 6.200000 14.432013 +9.400000 6.300000 15.191177 +9.400000 6.400000 15.970342 +9.400000 6.500000 16.769506 +9.400000 6.600000 17.588670 +9.400000 6.700000 18.427834 +9.400000 6.800000 19.286999 +9.400000 6.900000 20.166163 +9.400000 7.000000 21.065327 +9.400000 7.100000 21.984491 +9.400000 7.200000 22.923656 +9.400000 7.300000 23.882820 +9.400000 7.400000 24.861984 +9.400000 7.500000 25.861149 +9.400000 7.600000 26.880313 +9.400000 7.700000 27.919477 +9.400000 7.800000 28.978641 +9.400000 7.900000 30.057806 +9.400000 8.000000 31.156970 +9.400000 8.100000 32.276134 +9.400000 8.200000 33.415299 +9.400000 8.300000 34.574463 +9.400000 8.400000 35.753627 +9.400000 8.500000 36.952791 +9.400000 8.600000 38.171956 +9.400000 8.700000 39.411120 +9.400000 8.800000 40.670284 +9.400000 8.900000 41.949449 +9.400000 9.000000 43.248613 +9.400000 9.100000 44.567777 +9.400000 9.200000 45.906941 +9.400000 9.300000 47.266106 +9.400000 9.400000 48.645270 +9.400000 9.500000 50.044434 +9.400000 9.600000 51.463599 +9.400000 9.700000 52.902763 +9.400000 9.800000 54.361927 +9.400000 9.900000 55.841091 +9.400000 10.000000 57.340256 +9.400000 10.100000 58.859420 +9.400000 10.200000 60.398584 +9.400000 10.300000 61.957749 +9.400000 10.400000 63.536913 +9.400000 10.500000 65.136077 +9.400000 10.600000 66.755241 +9.400000 10.700000 68.394406 +9.400000 10.800000 70.053570 +9.400000 10.900000 71.732734 +9.400000 11.000000 73.431899 +9.400000 11.100000 75.151063 +9.400000 11.200000 76.890227 +9.400000 11.300000 78.649391 +9.400000 11.400000 80.428556 +9.400000 11.500000 82.227720 +9.400000 11.600000 84.046884 +9.400000 11.700000 85.886049 +9.400000 11.800000 87.745213 +9.400000 11.900000 89.624377 +9.400000 12.000000 91.523541 +9.400000 12.100000 93.442706 +9.400000 12.200000 95.381870 +9.400000 12.300000 97.341034 +9.400000 12.400000 99.320199 +9.400000 12.500000 101.319363 +9.400000 12.600000 103.338527 +9.400000 12.700000 105.377691 +9.400000 12.800000 107.436856 +9.400000 12.900000 109.516020 +9.400000 13.000000 111.615184 +9.400000 13.100000 113.734349 +9.400000 13.200000 115.873513 +9.400000 13.300000 118.032677 +9.400000 13.400000 120.211841 +9.400000 13.500000 122.411006 +9.400000 13.600000 124.630170 +9.400000 13.700000 126.869334 +9.400000 13.800000 129.128499 +9.400000 13.900000 131.407663 +9.400000 14.000000 133.706827 +9.400000 14.100000 136.025991 +9.400000 14.200000 138.365156 +9.400000 14.300000 140.724320 +9.400000 14.400000 143.103484 +9.400000 14.500000 145.502649 +9.400000 14.600000 147.921813 +9.400000 14.700000 150.360977 +9.400000 14.800000 152.820141 +9.400000 14.900000 155.299306 +9.400000 15.000000 157.798470 + +9.500000 -5.000000 57.264311 +9.500000 -4.900000 55.766475 +9.500000 -4.800000 54.288638 +9.500000 -4.700000 52.830802 +9.500000 -4.600000 51.392965 +9.500000 -4.500000 49.975129 +9.500000 -4.400000 48.577292 +9.500000 -4.300000 47.199456 +9.500000 -4.200000 45.841619 +9.500000 -4.100000 44.503783 +9.500000 -4.000000 43.185947 +9.500000 -3.900000 41.888110 +9.500000 -3.800000 40.610274 +9.500000 -3.700000 39.352437 +9.500000 -3.600000 38.114601 +9.500000 -3.500000 36.896764 +9.500000 -3.400000 35.698928 +9.500000 -3.300000 34.521091 +9.500000 -3.200000 33.363255 +9.500000 -3.100000 32.225418 +9.500000 -3.000000 31.107582 +9.500000 -2.900000 30.009745 +9.500000 -2.800000 28.931909 +9.500000 -2.700000 27.874072 +9.500000 -2.600000 26.836236 +9.500000 -2.500000 25.818399 +9.500000 -2.400000 24.820563 +9.500000 -2.300000 23.842727 +9.500000 -2.200000 22.884890 +9.500000 -2.100000 21.947054 +9.500000 -2.000000 21.029217 +9.500000 -1.900000 20.131381 +9.500000 -1.800000 19.253544 +9.500000 -1.700000 18.395708 +9.500000 -1.600000 17.557871 +9.500000 -1.500000 16.740035 +9.500000 -1.400000 15.942198 +9.500000 -1.300000 15.164362 +9.500000 -1.200000 14.406525 +9.500000 -1.100000 13.668689 +9.500000 -1.000000 12.950852 +9.500000 -0.900000 12.253016 +9.500000 -0.800000 11.575179 +9.500000 -0.700000 10.917343 +9.500000 -0.600000 10.279506 +9.500000 -0.500000 9.661670 +9.500000 -0.400000 9.063834 +9.500000 -0.300000 8.485997 +9.500000 -0.200000 7.928161 +9.500000 -0.100000 7.390324 +9.500000 -0.000000 6.872488 +9.500000 0.100000 6.374651 +9.500000 0.200000 5.896815 +9.500000 0.300000 5.438978 +9.500000 0.400000 5.001142 +9.500000 0.500000 4.583305 +9.500000 0.600000 4.185469 +9.500000 0.700000 3.807632 +9.500000 0.800000 3.449796 +9.500000 0.900000 3.111959 +9.500000 1.000000 2.794123 +9.500000 1.100000 2.496286 +9.500000 1.200000 2.218450 +9.500000 1.300000 1.960614 +9.500000 1.400000 1.722777 +9.500000 1.500000 1.504941 +9.500000 1.600000 1.307104 +9.500000 1.700000 1.129268 +9.500000 1.800000 0.971431 +9.500000 1.900000 0.833595 +9.500000 2.000000 0.715758 +9.500000 2.100000 0.617922 +9.500000 2.200000 0.540085 +9.500000 2.300000 0.482249 +9.500000 2.400000 0.444412 +9.500000 2.500000 0.426576 +9.500000 2.600000 0.428739 +9.500000 2.700000 0.450903 +9.500000 2.800000 0.493066 +9.500000 2.900000 0.555230 +9.500000 3.000000 0.637394 +9.500000 3.100000 0.739557 +9.500000 3.200000 0.861721 +9.500000 3.300000 1.003884 +9.500000 3.400000 1.166048 +9.500000 3.500000 1.348211 +9.500000 3.600000 1.550375 +9.500000 3.700000 1.772538 +9.500000 3.800000 2.014702 +9.500000 3.900000 2.276865 +9.500000 4.000000 2.559029 +9.500000 4.100000 2.861192 +9.500000 4.200000 3.183356 +9.500000 4.300000 3.525519 +9.500000 4.400000 3.887683 +9.500000 4.500000 4.269846 +9.500000 4.600000 4.672010 +9.500000 4.700000 5.094174 +9.500000 4.800000 5.536337 +9.500000 4.900000 5.998501 +9.500000 5.000000 6.480664 +9.500000 5.100000 6.982828 +9.500000 5.200000 7.504991 +9.500000 5.300000 8.047155 +9.500000 5.400000 8.609318 +9.500000 5.500000 9.191482 +9.500000 5.600000 9.793645 +9.500000 5.700000 10.415809 +9.500000 5.800000 11.057972 +9.500000 5.900000 11.720136 +9.500000 6.000000 12.402299 +9.500000 6.100000 13.104463 +9.500000 6.200000 13.826626 +9.500000 6.300000 14.568790 +9.500000 6.400000 15.330954 +9.500000 6.500000 16.113117 +9.500000 6.600000 16.915281 +9.500000 6.700000 17.737444 +9.500000 6.800000 18.579608 +9.500000 6.900000 19.441771 +9.500000 7.000000 20.323935 +9.500000 7.100000 21.226098 +9.500000 7.200000 22.148262 +9.500000 7.300000 23.090425 +9.500000 7.400000 24.052589 +9.500000 7.500000 25.034752 +9.500000 7.600000 26.036916 +9.500000 7.700000 27.059079 +9.500000 7.800000 28.101243 +9.500000 7.900000 29.163406 +9.500000 8.000000 30.245570 +9.500000 8.100000 31.347733 +9.500000 8.200000 32.469897 +9.500000 8.300000 33.612061 +9.500000 8.400000 34.774224 +9.500000 8.500000 35.956388 +9.500000 8.600000 37.158551 +9.500000 8.700000 38.380715 +9.500000 8.800000 39.622878 +9.500000 8.900000 40.885042 +9.500000 9.000000 42.167205 +9.500000 9.100000 43.469369 +9.500000 9.200000 44.791532 +9.500000 9.300000 46.133696 +9.500000 9.400000 47.495859 +9.500000 9.500000 48.878023 +9.500000 9.600000 50.280186 +9.500000 9.700000 51.702350 +9.500000 9.800000 53.144513 +9.500000 9.900000 54.606677 +9.500000 10.000000 56.088841 +9.500000 10.100000 57.591004 +9.500000 10.200000 59.113168 +9.500000 10.300000 60.655331 +9.500000 10.400000 62.217495 +9.500000 10.500000 63.799658 +9.500000 10.600000 65.401822 +9.500000 10.700000 67.023985 +9.500000 10.800000 68.666149 +9.500000 10.900000 70.328312 +9.500000 11.000000 72.010476 +9.500000 11.100000 73.712639 +9.500000 11.200000 75.434803 +9.500000 11.300000 77.176966 +9.500000 11.400000 78.939130 +9.500000 11.500000 80.721293 +9.500000 11.600000 82.523457 +9.500000 11.700000 84.345621 +9.500000 11.800000 86.187784 +9.500000 11.900000 88.049948 +9.500000 12.000000 89.932111 +9.500000 12.100000 91.834275 +9.500000 12.200000 93.756438 +9.500000 12.300000 95.698602 +9.500000 12.400000 97.660765 +9.500000 12.500000 99.642929 +9.500000 12.600000 101.645092 +9.500000 12.700000 103.667256 +9.500000 12.800000 105.709419 +9.500000 12.900000 107.771583 +9.500000 13.000000 109.853746 +9.500000 13.100000 111.955910 +9.500000 13.200000 114.078073 +9.500000 13.300000 116.220237 +9.500000 13.400000 118.382401 +9.500000 13.500000 120.564564 +9.500000 13.600000 122.766728 +9.500000 13.700000 124.988891 +9.500000 13.800000 127.231055 +9.500000 13.900000 129.493218 +9.500000 14.000000 131.775382 +9.500000 14.100000 134.077545 +9.500000 14.200000 136.399709 +9.500000 14.300000 138.741872 +9.500000 14.400000 141.104036 +9.500000 14.500000 143.486199 +9.500000 14.600000 145.888363 +9.500000 14.700000 148.310526 +9.500000 14.800000 150.752690 +9.500000 14.900000 153.214853 +9.500000 15.000000 155.697017 + +9.600000 -5.000000 58.712534 +9.600000 -4.900000 57.197180 +9.600000 -4.800000 55.701826 +9.600000 -4.700000 54.226472 +9.600000 -4.600000 52.771118 +9.600000 -4.500000 51.335764 +9.600000 -4.400000 49.920410 +9.600000 -4.300000 48.525057 +9.600000 -4.200000 47.149703 +9.600000 -4.100000 45.794349 +9.600000 -4.000000 44.458995 +9.600000 -3.900000 43.143641 +9.600000 -3.800000 41.848287 +9.600000 -3.700000 40.572933 +9.600000 -3.600000 39.317579 +9.600000 -3.500000 38.082225 +9.600000 -3.400000 36.866871 +9.600000 -3.300000 35.671517 +9.600000 -3.200000 34.496163 +9.600000 -3.100000 33.340809 +9.600000 -3.000000 32.205455 +9.600000 -2.900000 31.090101 +9.600000 -2.800000 29.994747 +9.600000 -2.700000 28.919393 +9.600000 -2.600000 27.864039 +9.600000 -2.500000 26.828685 +9.600000 -2.400000 25.813331 +9.600000 -2.300000 24.817977 +9.600000 -2.200000 23.842623 +9.600000 -2.100000 22.887269 +9.600000 -2.000000 21.951915 +9.600000 -1.900000 21.036561 +9.600000 -1.800000 20.141207 +9.600000 -1.700000 19.265853 +9.600000 -1.600000 18.410499 +9.600000 -1.500000 17.575145 +9.600000 -1.400000 16.759792 +9.600000 -1.300000 15.964438 +9.600000 -1.200000 15.189084 +9.600000 -1.100000 14.433730 +9.600000 -1.000000 13.698376 +9.600000 -0.900000 12.983022 +9.600000 -0.800000 12.287668 +9.600000 -0.700000 11.612314 +9.600000 -0.600000 10.956960 +9.600000 -0.500000 10.321606 +9.600000 -0.400000 9.706252 +9.600000 -0.300000 9.110898 +9.600000 -0.200000 8.535544 +9.600000 -0.100000 7.980190 +9.600000 -0.000000 7.444836 +9.600000 0.100000 6.929482 +9.600000 0.200000 6.434128 +9.600000 0.300000 5.958774 +9.600000 0.400000 5.503420 +9.600000 0.500000 5.068066 +9.600000 0.600000 4.652712 +9.600000 0.700000 4.257358 +9.600000 0.800000 3.882004 +9.600000 0.900000 3.526650 +9.600000 1.000000 3.191296 +9.600000 1.100000 2.875942 +9.600000 1.200000 2.580588 +9.600000 1.300000 2.305234 +9.600000 1.400000 2.049880 +9.600000 1.500000 1.814527 +9.600000 1.600000 1.599173 +9.600000 1.700000 1.403819 +9.600000 1.800000 1.228465 +9.600000 1.900000 1.073111 +9.600000 2.000000 0.937757 +9.600000 2.100000 0.822403 +9.600000 2.200000 0.727049 +9.600000 2.300000 0.651695 +9.600000 2.400000 0.596341 +9.600000 2.500000 0.560987 +9.600000 2.600000 0.545633 +9.600000 2.700000 0.550279 +9.600000 2.800000 0.574925 +9.600000 2.900000 0.619571 +9.600000 3.000000 0.684217 +9.600000 3.100000 0.768863 +9.600000 3.200000 0.873509 +9.600000 3.300000 0.998155 +9.600000 3.400000 1.142801 +9.600000 3.500000 1.307447 +9.600000 3.600000 1.492093 +9.600000 3.700000 1.696739 +9.600000 3.800000 1.921385 +9.600000 3.900000 2.166031 +9.600000 4.000000 2.430677 +9.600000 4.100000 2.715323 +9.600000 4.200000 3.019969 +9.600000 4.300000 3.344616 +9.600000 4.400000 3.689262 +9.600000 4.500000 4.053908 +9.600000 4.600000 4.438554 +9.600000 4.700000 4.843200 +9.600000 4.800000 5.267846 +9.600000 4.900000 5.712492 +9.600000 5.000000 6.177138 +9.600000 5.100000 6.661784 +9.600000 5.200000 7.166430 +9.600000 5.300000 7.691076 +9.600000 5.400000 8.235722 +9.600000 5.500000 8.800368 +9.600000 5.600000 9.385014 +9.600000 5.700000 9.989660 +9.600000 5.800000 10.614306 +9.600000 5.900000 11.258952 +9.600000 6.000000 11.923598 +9.600000 6.100000 12.608244 +9.600000 6.200000 13.312890 +9.600000 6.300000 14.037536 +9.600000 6.400000 14.782182 +9.600000 6.500000 15.546828 +9.600000 6.600000 16.331474 +9.600000 6.700000 17.136120 +9.600000 6.800000 17.960766 +9.600000 6.900000 18.805412 +9.600000 7.000000 19.670058 +9.600000 7.100000 20.554704 +9.600000 7.200000 21.459351 +9.600000 7.300000 22.383997 +9.600000 7.400000 23.328643 +9.600000 7.500000 24.293289 +9.600000 7.600000 25.277935 +9.600000 7.700000 26.282581 +9.600000 7.800000 27.307227 +9.600000 7.900000 28.351873 +9.600000 8.000000 29.416519 +9.600000 8.100000 30.501165 +9.600000 8.200000 31.605811 +9.600000 8.300000 32.730457 +9.600000 8.400000 33.875103 +9.600000 8.500000 35.039749 +9.600000 8.600000 36.224395 +9.600000 8.700000 37.429041 +9.600000 8.800000 38.653687 +9.600000 8.900000 39.898333 +9.600000 9.000000 41.162979 +9.600000 9.100000 42.447625 +9.600000 9.200000 43.752271 +9.600000 9.300000 45.076917 +9.600000 9.400000 46.421563 +9.600000 9.500000 47.786209 +9.600000 9.600000 49.170855 +9.600000 9.700000 50.575501 +9.600000 9.800000 52.000147 +9.600000 9.900000 53.444793 +9.600000 10.000000 54.909439 +9.600000 10.100000 56.394086 +9.600000 10.200000 57.898732 +9.600000 10.300000 59.423378 +9.600000 10.400000 60.968024 +9.600000 10.500000 62.532670 +9.600000 10.600000 64.117316 +9.600000 10.700000 65.721962 +9.600000 10.800000 67.346608 +9.600000 10.900000 68.991254 +9.600000 11.000000 70.655900 +9.600000 11.100000 72.340546 +9.600000 11.200000 74.045192 +9.600000 11.300000 75.769838 +9.600000 11.400000 77.514484 +9.600000 11.500000 79.279130 +9.600000 11.600000 81.063776 +9.600000 11.700000 82.868422 +9.600000 11.800000 84.693068 +9.600000 11.900000 86.537714 +9.600000 12.000000 88.402360 +9.600000 12.100000 90.287006 +9.600000 12.200000 92.191652 +9.600000 12.300000 94.116298 +9.600000 12.400000 96.060944 +9.600000 12.500000 98.025590 +9.600000 12.600000 100.010236 +9.600000 12.700000 102.014882 +9.600000 12.800000 104.039528 +9.600000 12.900000 106.084175 +9.600000 13.000000 108.148821 +9.600000 13.100000 110.233467 +9.600000 13.200000 112.338113 +9.600000 13.300000 114.462759 +9.600000 13.400000 116.607405 +9.600000 13.500000 118.772051 +9.600000 13.600000 120.956697 +9.600000 13.700000 123.161343 +9.600000 13.800000 125.385989 +9.600000 13.900000 127.630635 +9.600000 14.000000 129.895281 +9.600000 14.100000 132.179927 +9.600000 14.200000 134.484573 +9.600000 14.300000 136.809219 +9.600000 14.400000 139.153865 +9.600000 14.500000 141.518511 +9.600000 14.600000 143.903157 +9.600000 14.700000 146.307803 +9.600000 14.800000 148.732449 +9.600000 14.900000 151.177095 +9.600000 15.000000 153.641741 + +9.700000 -5.000000 60.310442 +9.700000 -4.900000 58.777054 +9.700000 -4.800000 57.263666 +9.700000 -4.700000 55.770278 +9.700000 -4.600000 54.296889 +9.700000 -4.500000 52.843501 +9.700000 -4.400000 51.410113 +9.700000 -4.300000 49.996725 +9.700000 -4.200000 48.603337 +9.700000 -4.100000 47.229948 +9.700000 -4.000000 45.876560 +9.700000 -3.900000 44.543172 +9.700000 -3.800000 43.229784 +9.700000 -3.700000 41.936396 +9.700000 -3.600000 40.663007 +9.700000 -3.500000 39.409619 +9.700000 -3.400000 38.176231 +9.700000 -3.300000 36.962843 +9.700000 -3.200000 35.769455 +9.700000 -3.100000 34.596066 +9.700000 -3.000000 33.442678 +9.700000 -2.900000 32.309290 +9.700000 -2.800000 31.195902 +9.700000 -2.700000 30.102514 +9.700000 -2.600000 29.029125 +9.700000 -2.500000 27.975737 +9.700000 -2.400000 26.942349 +9.700000 -2.300000 25.928961 +9.700000 -2.200000 24.935573 +9.700000 -2.100000 23.962184 +9.700000 -2.000000 23.008796 +9.700000 -1.900000 22.075408 +9.700000 -1.800000 21.162020 +9.700000 -1.700000 20.268632 +9.700000 -1.600000 19.395243 +9.700000 -1.500000 18.541855 +9.700000 -1.400000 17.708467 +9.700000 -1.300000 16.895079 +9.700000 -1.200000 16.101691 +9.700000 -1.100000 15.328303 +9.700000 -1.000000 14.574914 +9.700000 -0.900000 13.841526 +9.700000 -0.800000 13.128138 +9.700000 -0.700000 12.434750 +9.700000 -0.600000 11.761362 +9.700000 -0.500000 11.107973 +9.700000 -0.400000 10.474585 +9.700000 -0.300000 9.861197 +9.700000 -0.200000 9.267809 +9.700000 -0.100000 8.694421 +9.700000 -0.000000 8.141032 +9.700000 0.100000 7.607644 +9.700000 0.200000 7.094256 +9.700000 0.300000 6.600868 +9.700000 0.400000 6.127480 +9.700000 0.500000 5.674091 +9.700000 0.600000 5.240703 +9.700000 0.700000 4.827315 +9.700000 0.800000 4.433927 +9.700000 0.900000 4.060539 +9.700000 1.000000 3.707150 +9.700000 1.100000 3.373762 +9.700000 1.200000 3.060374 +9.700000 1.300000 2.766986 +9.700000 1.400000 2.493598 +9.700000 1.500000 2.240209 +9.700000 1.600000 2.006821 +9.700000 1.700000 1.793433 +9.700000 1.800000 1.600045 +9.700000 1.900000 1.426657 +9.700000 2.000000 1.273268 +9.700000 2.100000 1.139880 +9.700000 2.200000 1.026492 +9.700000 2.300000 0.933104 +9.700000 2.400000 0.859716 +9.700000 2.500000 0.806327 +9.700000 2.600000 0.772939 +9.700000 2.700000 0.759551 +9.700000 2.800000 0.766163 +9.700000 2.900000 0.792775 +9.700000 3.000000 0.839386 +9.700000 3.100000 0.905998 +9.700000 3.200000 0.992610 +9.700000 3.300000 1.099222 +9.700000 3.400000 1.225834 +9.700000 3.500000 1.372445 +9.700000 3.600000 1.539057 +9.700000 3.700000 1.725669 +9.700000 3.800000 1.932281 +9.700000 3.900000 2.158893 +9.700000 4.000000 2.405504 +9.700000 4.100000 2.672116 +9.700000 4.200000 2.958728 +9.700000 4.300000 3.265340 +9.700000 4.400000 3.591952 +9.700000 4.500000 3.938563 +9.700000 4.600000 4.305175 +9.700000 4.700000 4.691787 +9.700000 4.800000 5.098399 +9.700000 4.900000 5.525011 +9.700000 5.000000 5.971622 +9.700000 5.100000 6.438234 +9.700000 5.200000 6.924846 +9.700000 5.300000 7.431458 +9.700000 5.400000 7.958070 +9.700000 5.500000 8.504681 +9.700000 5.600000 9.071293 +9.700000 5.700000 9.657905 +9.700000 5.800000 10.264517 +9.700000 5.900000 10.891129 +9.700000 6.000000 11.537741 +9.700000 6.100000 12.204352 +9.700000 6.200000 12.890964 +9.700000 6.300000 13.597576 +9.700000 6.400000 14.324188 +9.700000 6.500000 15.070800 +9.700000 6.600000 15.837411 +9.700000 6.700000 16.624023 +9.700000 6.800000 17.430635 +9.700000 6.900000 18.257247 +9.700000 7.000000 19.103859 +9.700000 7.100000 19.970470 +9.700000 7.200000 20.857082 +9.700000 7.300000 21.763694 +9.700000 7.400000 22.690306 +9.700000 7.500000 23.636918 +9.700000 7.600000 24.603529 +9.700000 7.700000 25.590141 +9.700000 7.800000 26.596753 +9.700000 7.900000 27.623365 +9.700000 8.000000 28.669977 +9.700000 8.100000 29.736588 +9.700000 8.200000 30.823200 +9.700000 8.300000 31.929812 +9.700000 8.400000 33.056424 +9.700000 8.500000 34.203036 +9.700000 8.600000 35.369647 +9.700000 8.700000 36.556259 +9.700000 8.800000 37.762871 +9.700000 8.900000 38.989483 +9.700000 9.000000 40.236095 +9.700000 9.100000 41.502706 +9.700000 9.200000 42.789318 +9.700000 9.300000 44.095930 +9.700000 9.400000 45.422542 +9.700000 9.500000 46.769154 +9.700000 9.600000 48.135765 +9.700000 9.700000 49.522377 +9.700000 9.800000 50.928989 +9.700000 9.900000 52.355601 +9.700000 10.000000 53.802213 +9.700000 10.100000 55.268824 +9.700000 10.200000 56.755436 +9.700000 10.300000 58.262048 +9.700000 10.400000 59.788660 +9.700000 10.500000 61.335272 +9.700000 10.600000 62.901883 +9.700000 10.700000 64.488495 +9.700000 10.800000 66.095107 +9.700000 10.900000 67.721719 +9.700000 11.000000 69.368331 +9.700000 11.100000 71.034942 +9.700000 11.200000 72.721554 +9.700000 11.300000 74.428166 +9.700000 11.400000 76.154778 +9.700000 11.500000 77.901390 +9.700000 11.600000 79.668001 +9.700000 11.700000 81.454613 +9.700000 11.800000 83.261225 +9.700000 11.900000 85.087837 +9.700000 12.000000 86.934449 +9.700000 12.100000 88.801060 +9.700000 12.200000 90.687672 +9.700000 12.300000 92.594284 +9.700000 12.400000 94.520896 +9.700000 12.500000 96.467508 +9.700000 12.600000 98.434120 +9.700000 12.700000 100.420731 +9.700000 12.800000 102.427343 +9.700000 12.900000 104.453955 +9.700000 13.000000 106.500567 +9.700000 13.100000 108.567179 +9.700000 13.200000 110.653790 +9.700000 13.300000 112.760402 +9.700000 13.400000 114.887014 +9.700000 13.500000 117.033626 +9.700000 13.600000 119.200238 +9.700000 13.700000 121.386849 +9.700000 13.800000 123.593461 +9.700000 13.900000 125.820073 +9.700000 14.000000 128.066685 +9.700000 14.100000 130.333297 +9.700000 14.200000 132.619908 +9.700000 14.300000 134.926520 +9.700000 14.400000 137.253132 +9.700000 14.500000 139.599744 +9.700000 14.600000 141.966356 +9.700000 14.700000 144.352967 +9.700000 14.800000 146.759579 +9.700000 14.900000 149.186191 +9.700000 15.000000 151.632803 + +9.800000 -5.000000 62.057291 +9.800000 -4.900000 60.505352 +9.800000 -4.800000 58.973413 +9.800000 -4.700000 57.461474 +9.800000 -4.600000 55.969534 +9.800000 -4.500000 54.497595 +9.800000 -4.400000 53.045656 +9.800000 -4.300000 51.613717 +9.800000 -4.200000 50.201778 +9.800000 -4.100000 48.809839 +9.800000 -4.000000 47.437899 +9.800000 -3.900000 46.085960 +9.800000 -3.800000 44.754021 +9.800000 -3.700000 43.442082 +9.800000 -3.600000 42.150143 +9.800000 -3.500000 40.878204 +9.800000 -3.400000 39.626264 +9.800000 -3.300000 38.394325 +9.800000 -3.200000 37.182386 +9.800000 -3.100000 35.990447 +9.800000 -3.000000 34.818508 +9.800000 -2.900000 33.666569 +9.800000 -2.800000 32.534629 +9.800000 -2.700000 31.422690 +9.800000 -2.600000 30.330751 +9.800000 -2.500000 29.258812 +9.800000 -2.400000 28.206873 +9.800000 -2.300000 27.174934 +9.800000 -2.200000 26.162994 +9.800000 -2.100000 25.171055 +9.800000 -2.000000 24.199116 +9.800000 -1.900000 23.247177 +9.800000 -1.800000 22.315238 +9.800000 -1.700000 21.403299 +9.800000 -1.600000 20.511359 +9.800000 -1.500000 19.639420 +9.800000 -1.400000 18.787481 +9.800000 -1.300000 17.955542 +9.800000 -1.200000 17.143603 +9.800000 -1.100000 16.351664 +9.800000 -1.000000 15.579724 +9.800000 -0.900000 14.827785 +9.800000 -0.800000 14.095846 +9.800000 -0.700000 13.383907 +9.800000 -0.600000 12.691968 +9.800000 -0.500000 12.020029 +9.800000 -0.400000 11.368089 +9.800000 -0.300000 10.736150 +9.800000 -0.200000 10.124211 +9.800000 -0.100000 9.532272 +9.800000 -0.000000 8.960333 +9.800000 0.100000 8.408394 +9.800000 0.200000 7.876454 +9.800000 0.300000 7.364515 +9.800000 0.400000 6.872576 +9.800000 0.500000 6.400637 +9.800000 0.600000 5.948698 +9.800000 0.700000 5.516759 +9.800000 0.800000 5.104819 +9.800000 0.900000 4.712880 +9.800000 1.000000 4.340941 +9.800000 1.100000 3.989002 +9.800000 1.200000 3.657063 +9.800000 1.300000 3.345124 +9.800000 1.400000 3.053184 +9.800000 1.500000 2.781245 +9.800000 1.600000 2.529306 +9.800000 1.700000 2.297367 +9.800000 1.800000 2.085428 +9.800000 1.900000 1.893489 +9.800000 2.000000 1.721549 +9.800000 2.100000 1.569610 +9.800000 2.200000 1.437671 +9.800000 2.300000 1.325732 +9.800000 2.400000 1.233793 +9.800000 2.500000 1.161854 +9.800000 2.600000 1.109914 +9.800000 2.700000 1.077975 +9.800000 2.800000 1.066036 +9.800000 2.900000 1.074097 +9.800000 3.000000 1.102158 +9.800000 3.100000 1.150219 +9.800000 3.200000 1.218279 +9.800000 3.300000 1.306340 +9.800000 3.400000 1.414401 +9.800000 3.500000 1.542462 +9.800000 3.600000 1.690523 +9.800000 3.700000 1.858584 +9.800000 3.800000 2.046644 +9.800000 3.900000 2.254705 +9.800000 4.000000 2.482766 +9.800000 4.100000 2.730827 +9.800000 4.200000 2.998888 +9.800000 4.300000 3.286949 +9.800000 4.400000 3.595009 +9.800000 4.500000 3.923070 +9.800000 4.600000 4.271131 +9.800000 4.700000 4.639192 +9.800000 4.800000 5.027253 +9.800000 4.900000 5.435314 +9.800000 5.000000 5.863374 +9.800000 5.100000 6.311435 +9.800000 5.200000 6.779496 +9.800000 5.300000 7.267557 +9.800000 5.400000 7.775618 +9.800000 5.500000 8.303679 +9.800000 5.600000 8.851739 +9.800000 5.700000 9.419800 +9.800000 5.800000 10.007861 +9.800000 5.900000 10.615922 +9.800000 6.000000 11.243983 +9.800000 6.100000 11.892044 +9.800000 6.200000 12.560104 +9.800000 6.300000 13.248165 +9.800000 6.400000 13.956226 +9.800000 6.500000 14.684287 +9.800000 6.600000 15.432348 +9.800000 6.700000 16.200409 +9.800000 6.800000 16.988469 +9.800000 6.900000 17.796530 +9.800000 7.000000 18.624591 +9.800000 7.100000 19.472652 +9.800000 7.200000 20.340713 +9.800000 7.300000 21.228774 +9.800000 7.400000 22.136834 +9.800000 7.500000 23.064895 +9.800000 7.600000 24.012956 +9.800000 7.700000 24.981017 +9.800000 7.800000 25.969078 +9.800000 7.900000 26.977139 +9.800000 8.000000 28.005199 +9.800000 8.100000 29.053260 +9.800000 8.200000 30.121321 +9.800000 8.300000 31.209382 +9.800000 8.400000 32.317443 +9.800000 8.500000 33.445504 +9.800000 8.600000 34.593564 +9.800000 8.700000 35.761625 +9.800000 8.800000 36.949686 +9.800000 8.900000 38.157747 +9.800000 9.000000 39.385808 +9.800000 9.100000 40.633869 +9.800000 9.200000 41.901929 +9.800000 9.300000 43.189990 +9.800000 9.400000 44.498051 +9.800000 9.500000 45.826112 +9.800000 9.600000 47.174173 +9.800000 9.700000 48.542234 +9.800000 9.800000 49.930294 +9.800000 9.900000 51.338355 +9.800000 10.000000 52.766416 +9.800000 10.100000 54.214477 +9.800000 10.200000 55.682538 +9.800000 10.300000 57.170599 +9.800000 10.400000 58.678659 +9.800000 10.500000 60.206720 +9.800000 10.600000 61.754781 +9.800000 10.700000 63.322842 +9.800000 10.800000 64.910903 +9.800000 10.900000 66.518964 +9.800000 11.000000 68.147024 +9.800000 11.100000 69.795085 +9.800000 11.200000 71.463146 +9.800000 11.300000 73.151207 +9.800000 11.400000 74.859268 +9.800000 11.500000 76.587329 +9.800000 11.600000 78.335389 +9.800000 11.700000 80.103450 +9.800000 11.800000 81.891511 +9.800000 11.900000 83.699572 +9.800000 12.000000 85.527633 +9.800000 12.100000 87.375694 +9.800000 12.200000 89.243754 +9.800000 12.300000 91.131815 +9.800000 12.400000 93.039876 +9.800000 12.500000 94.967937 +9.800000 12.600000 96.915998 +9.800000 12.700000 98.884059 +9.800000 12.800000 100.872119 +9.800000 12.900000 102.880180 +9.800000 13.000000 104.908241 +9.800000 13.100000 106.956302 +9.800000 13.200000 109.024363 +9.800000 13.300000 111.112424 +9.800000 13.400000 113.220484 +9.800000 13.500000 115.348545 +9.800000 13.600000 117.496606 +9.800000 13.700000 119.664667 +9.800000 13.800000 121.852728 +9.800000 13.900000 124.060789 +9.800000 14.000000 126.288849 +9.800000 14.100000 128.536910 +9.800000 14.200000 130.804971 +9.800000 14.300000 133.093032 +9.800000 14.400000 135.401093 +9.800000 14.500000 137.729154 +9.800000 14.600000 140.077214 +9.800000 14.700000 142.445275 +9.800000 14.800000 144.833336 +9.800000 14.900000 147.241397 +9.800000 15.000000 149.669458 + +9.900000 -5.000000 63.951455 +9.900000 -4.900000 62.380448 +9.900000 -4.800000 60.829441 +9.900000 -4.700000 59.298434 +9.900000 -4.600000 57.787427 +9.900000 -4.500000 56.296420 +9.900000 -4.400000 54.825414 +9.900000 -4.300000 53.374407 +9.900000 -4.200000 51.943400 +9.900000 -4.100000 50.532393 +9.900000 -4.000000 49.141386 +9.900000 -3.900000 47.770379 +9.900000 -3.800000 46.419372 +9.900000 -3.700000 45.088365 +9.900000 -3.600000 43.777359 +9.900000 -3.500000 42.486352 +9.900000 -3.400000 41.215345 +9.900000 -3.300000 39.964338 +9.900000 -3.200000 38.733331 +9.900000 -3.100000 37.522324 +9.900000 -3.000000 36.331317 +9.900000 -2.900000 35.160310 +9.900000 -2.800000 34.009304 +9.900000 -2.700000 32.878297 +9.900000 -2.600000 31.767290 +9.900000 -2.500000 30.676283 +9.900000 -2.400000 29.605276 +9.900000 -2.300000 28.554269 +9.900000 -2.200000 27.523262 +9.900000 -2.100000 26.512255 +9.900000 -2.000000 25.521249 +9.900000 -1.900000 24.550242 +9.900000 -1.800000 23.599235 +9.900000 -1.700000 22.668228 +9.900000 -1.600000 21.757221 +9.900000 -1.500000 20.866214 +9.900000 -1.400000 19.995207 +9.900000 -1.300000 19.144200 +9.900000 -1.200000 18.313194 +9.900000 -1.100000 17.502187 +9.900000 -1.000000 16.711180 +9.900000 -0.900000 15.940173 +9.900000 -0.800000 15.189166 +9.900000 -0.700000 14.458159 +9.900000 -0.600000 13.747152 +9.900000 -0.500000 13.056145 +9.900000 -0.400000 12.385139 +9.900000 -0.300000 11.734132 +9.900000 -0.200000 11.103125 +9.900000 -0.100000 10.492118 +9.900000 -0.000000 9.901111 +9.900000 0.100000 9.330104 +9.900000 0.200000 8.779097 +9.900000 0.300000 8.248090 +9.900000 0.400000 7.737084 +9.900000 0.500000 7.246077 +9.900000 0.600000 6.775070 +9.900000 0.700000 6.324063 +9.900000 0.800000 5.893056 +9.900000 0.900000 5.482049 +9.900000 1.000000 5.091042 +9.900000 1.100000 4.720035 +9.900000 1.200000 4.369029 +9.900000 1.300000 4.038022 +9.900000 1.400000 3.727015 +9.900000 1.500000 3.436008 +9.900000 1.600000 3.165001 +9.900000 1.700000 2.913994 +9.900000 1.800000 2.682987 +9.900000 1.900000 2.471980 +9.900000 2.000000 2.280974 +9.900000 2.100000 2.109967 +9.900000 2.200000 1.958960 +9.900000 2.300000 1.827953 +9.900000 2.400000 1.716946 +9.900000 2.500000 1.625939 +9.900000 2.600000 1.554932 +9.900000 2.700000 1.503925 +9.900000 2.800000 1.472919 +9.900000 2.900000 1.461912 +9.900000 3.000000 1.470905 +9.900000 3.100000 1.499898 +9.900000 3.200000 1.548891 +9.900000 3.300000 1.617884 +9.900000 3.400000 1.706877 +9.900000 3.500000 1.815870 +9.900000 3.600000 1.944864 +9.900000 3.700000 2.093857 +9.900000 3.800000 2.262850 +9.900000 3.900000 2.451843 +9.900000 4.000000 2.660836 +9.900000 4.100000 2.889829 +9.900000 4.200000 3.138822 +9.900000 4.300000 3.407815 +9.900000 4.400000 3.696809 +9.900000 4.500000 4.005802 +9.900000 4.600000 4.334795 +9.900000 4.700000 4.683788 +9.900000 4.800000 5.052781 +9.900000 4.900000 5.441774 +9.900000 5.000000 5.850767 +9.900000 5.100000 6.279760 +9.900000 5.200000 6.728754 +9.900000 5.300000 7.197747 +9.900000 5.400000 7.686740 +9.900000 5.500000 8.195733 +9.900000 5.600000 8.724726 +9.900000 5.700000 9.273719 +9.900000 5.800000 9.842712 +9.900000 5.900000 10.431705 +9.900000 6.000000 11.040699 +9.900000 6.100000 11.669692 +9.900000 6.200000 12.318685 +9.900000 6.300000 12.987678 +9.900000 6.400000 13.676671 +9.900000 6.500000 14.385664 +9.900000 6.600000 15.114657 +9.900000 6.700000 15.863650 +9.900000 6.800000 16.632644 +9.900000 6.900000 17.421637 +9.900000 7.000000 18.230630 +9.900000 7.100000 19.059623 +9.900000 7.200000 19.908616 +9.900000 7.300000 20.777609 +9.900000 7.400000 21.666602 +9.900000 7.500000 22.575595 +9.900000 7.600000 23.504589 +9.900000 7.700000 24.453582 +9.900000 7.800000 25.422575 +9.900000 7.900000 26.411568 +9.900000 8.000000 27.420561 +9.900000 8.100000 28.449554 +9.900000 8.200000 29.498547 +9.900000 8.300000 30.567540 +9.900000 8.400000 31.656534 +9.900000 8.500000 32.765527 +9.900000 8.600000 33.894520 +9.900000 8.700000 35.043513 +9.900000 8.800000 36.212506 +9.900000 8.900000 37.401499 +9.900000 9.000000 38.610492 +9.900000 9.100000 39.839485 +9.900000 9.200000 41.088479 +9.900000 9.300000 42.357472 +9.900000 9.400000 43.646465 +9.900000 9.500000 44.955458 +9.900000 9.600000 46.284451 +9.900000 9.700000 47.633444 +9.900000 9.800000 49.002437 +9.900000 9.900000 50.391430 +9.900000 10.000000 51.800424 +9.900000 10.100000 53.229417 +9.900000 10.200000 54.678410 +9.900000 10.300000 56.147403 +9.900000 10.400000 57.636396 +9.900000 10.500000 59.145389 +9.900000 10.600000 60.674382 +9.900000 10.700000 62.223375 +9.900000 10.800000 63.792369 +9.900000 10.900000 65.381362 +9.900000 11.000000 66.990355 +9.900000 11.100000 68.619348 +9.900000 11.200000 70.268341 +9.900000 11.300000 71.937334 +9.900000 11.400000 73.626327 +9.900000 11.500000 75.335320 +9.900000 11.600000 77.064314 +9.900000 11.700000 78.813307 +9.900000 11.800000 80.582300 +9.900000 11.900000 82.371293 +9.900000 12.000000 84.180286 +9.900000 12.100000 86.009279 +9.900000 12.200000 87.858272 +9.900000 12.300000 89.727265 +9.900000 12.400000 91.616259 +9.900000 12.500000 93.525252 +9.900000 12.600000 95.454245 +9.900000 12.700000 97.403238 +9.900000 12.800000 99.372231 +9.900000 12.900000 101.361224 +9.900000 13.000000 103.370217 +9.900000 13.100000 105.399210 +9.900000 13.200000 107.448204 +9.900000 13.300000 109.517197 +9.900000 13.400000 111.606190 +9.900000 13.500000 113.715183 +9.900000 13.600000 115.844176 +9.900000 13.700000 117.993169 +9.900000 13.800000 120.162162 +9.900000 13.900000 122.351155 +9.900000 14.000000 124.560149 +9.900000 14.100000 126.789142 +9.900000 14.200000 129.038135 +9.900000 14.300000 131.307128 +9.900000 14.400000 133.596121 +9.900000 14.500000 135.905114 +9.900000 14.600000 138.234107 +9.900000 14.700000 140.583100 +9.900000 14.800000 142.952094 +9.900000 14.900000 145.341087 +9.900000 15.000000 147.750080 + +10.000000 -5.000000 65.990455 +10.000000 -4.900000 64.399864 +10.000000 -4.800000 62.829272 +10.000000 -4.700000 61.278681 +10.000000 -4.600000 59.748090 +10.000000 -4.500000 58.237498 +10.000000 -4.400000 56.746907 +10.000000 -4.300000 55.276316 +10.000000 -4.200000 53.825725 +10.000000 -4.100000 52.395133 +10.000000 -4.000000 50.984542 +10.000000 -3.900000 49.593951 +10.000000 -3.800000 48.223359 +10.000000 -3.700000 46.872768 +10.000000 -3.600000 45.542177 +10.000000 -3.500000 44.231585 +10.000000 -3.400000 42.940994 +10.000000 -3.300000 41.670403 +10.000000 -3.200000 40.419811 +10.000000 -3.100000 39.189220 +10.000000 -3.000000 37.978629 +10.000000 -2.900000 36.788037 +10.000000 -2.800000 35.617446 +10.000000 -2.700000 34.466855 +10.000000 -2.600000 33.336263 +10.000000 -2.500000 32.225672 +10.000000 -2.400000 31.135081 +10.000000 -2.300000 30.064489 +10.000000 -2.200000 29.013898 +10.000000 -2.100000 27.983307 +10.000000 -2.000000 26.972715 +10.000000 -1.900000 25.982124 +10.000000 -1.800000 25.011533 +10.000000 -1.700000 24.060941 +10.000000 -1.600000 23.130350 +10.000000 -1.500000 22.219759 +10.000000 -1.400000 21.329168 +10.000000 -1.300000 20.458576 +10.000000 -1.200000 19.607985 +10.000000 -1.100000 18.777394 +10.000000 -1.000000 17.966802 +10.000000 -0.900000 17.176211 +10.000000 -0.800000 16.405620 +10.000000 -0.700000 15.655028 +10.000000 -0.600000 14.924437 +10.000000 -0.500000 14.213846 +10.000000 -0.400000 13.523254 +10.000000 -0.300000 12.852663 +10.000000 -0.200000 12.202072 +10.000000 -0.100000 11.571480 +10.000000 -0.000000 10.960889 +10.000000 0.100000 10.370298 +10.000000 0.200000 9.799706 +10.000000 0.300000 9.249115 +10.000000 0.400000 8.718524 +10.000000 0.500000 8.207932 +10.000000 0.600000 7.717341 +10.000000 0.700000 7.246750 +10.000000 0.800000 6.796158 +10.000000 0.900000 6.365567 +10.000000 1.000000 5.954976 +10.000000 1.100000 5.564385 +10.000000 1.200000 5.193793 +10.000000 1.300000 4.843202 +10.000000 1.400000 4.512611 +10.000000 1.500000 4.202019 +10.000000 1.600000 3.911428 +10.000000 1.700000 3.640837 +10.000000 1.800000 3.390245 +10.000000 1.900000 3.159654 +10.000000 2.000000 2.949063 +10.000000 2.100000 2.758471 +10.000000 2.200000 2.587880 +10.000000 2.300000 2.437289 +10.000000 2.400000 2.306697 +10.000000 2.500000 2.196106 +10.000000 2.600000 2.105515 +10.000000 2.700000 2.034923 +10.000000 2.800000 1.984332 +10.000000 2.900000 1.953741 +10.000000 3.000000 1.943149 +10.000000 3.100000 1.952558 +10.000000 3.200000 1.981967 +10.000000 3.300000 2.031375 +10.000000 3.400000 2.100784 +10.000000 3.500000 2.190193 +10.000000 3.600000 2.299601 +10.000000 3.700000 2.429010 +10.000000 3.800000 2.578419 +10.000000 3.900000 2.747828 +10.000000 4.000000 2.937236 +10.000000 4.100000 3.146645 +10.000000 4.200000 3.376054 +10.000000 4.300000 3.625462 +10.000000 4.400000 3.894871 +10.000000 4.500000 4.184280 +10.000000 4.600000 4.493688 +10.000000 4.700000 4.823097 +10.000000 4.800000 5.172506 +10.000000 4.900000 5.541914 +10.000000 5.000000 5.931323 +10.000000 5.100000 6.340732 +10.000000 5.200000 6.770140 +10.000000 5.300000 7.219549 +10.000000 5.400000 7.688958 +10.000000 5.500000 8.178366 +10.000000 5.600000 8.687775 +10.000000 5.700000 9.217184 +10.000000 5.800000 9.766592 +10.000000 5.900000 10.336001 +10.000000 6.000000 10.925410 +10.000000 6.100000 11.534818 +10.000000 6.200000 12.164227 +10.000000 6.300000 12.813636 +10.000000 6.400000 13.483044 +10.000000 6.500000 14.172453 +10.000000 6.600000 14.881862 +10.000000 6.700000 15.611271 +10.000000 6.800000 16.360679 +10.000000 6.900000 17.130088 +10.000000 7.000000 17.919497 +10.000000 7.100000 18.728905 +10.000000 7.200000 19.558314 +10.000000 7.300000 20.407723 +10.000000 7.400000 21.277131 +10.000000 7.500000 22.166540 +10.000000 7.600000 23.075949 +10.000000 7.700000 24.005357 +10.000000 7.800000 24.954766 +10.000000 7.900000 25.924175 +10.000000 8.000000 26.913583 +10.000000 8.100000 27.922992 +10.000000 8.200000 28.952401 +10.000000 8.300000 30.001809 +10.000000 8.400000 31.071218 +10.000000 8.500000 32.160627 +10.000000 8.600000 33.270035 +10.000000 8.700000 34.399444 +10.000000 8.800000 35.548853 +10.000000 8.900000 36.718261 +10.000000 9.000000 37.907670 +10.000000 9.100000 39.117079 +10.000000 9.200000 40.346487 +10.000000 9.300000 41.595896 +10.000000 9.400000 42.865305 +10.000000 9.500000 44.154714 +10.000000 9.600000 45.464122 +10.000000 9.700000 46.793531 +10.000000 9.800000 48.142940 +10.000000 9.900000 49.512348 +10.000000 10.000000 50.901757 +10.000000 10.100000 52.311166 +10.000000 10.200000 53.740574 +10.000000 10.300000 55.189983 +10.000000 10.400000 56.659392 +10.000000 10.500000 58.148800 +10.000000 10.600000 59.658209 +10.000000 10.700000 61.187618 +10.000000 10.800000 62.737026 +10.000000 10.900000 64.306435 +10.000000 11.000000 65.895844 +10.000000 11.100000 67.505252 +10.000000 11.200000 69.134661 +10.000000 11.300000 70.784070 +10.000000 11.400000 72.453478 +10.000000 11.500000 74.142887 +10.000000 11.600000 75.852296 +10.000000 11.700000 77.581704 +10.000000 11.800000 79.331113 +10.000000 11.900000 81.100522 +10.000000 12.000000 82.889931 +10.000000 12.100000 84.699339 +10.000000 12.200000 86.528748 +10.000000 12.300000 88.378157 +10.000000 12.400000 90.247565 +10.000000 12.500000 92.136974 +10.000000 12.600000 94.046383 +10.000000 12.700000 95.975791 +10.000000 12.800000 97.925200 +10.000000 12.900000 99.894609 +10.000000 13.000000 101.884017 +10.000000 13.100000 103.893426 +10.000000 13.200000 105.922835 +10.000000 13.300000 107.972243 +10.000000 13.400000 110.041652 +10.000000 13.500000 112.131061 +10.000000 13.600000 114.240469 +10.000000 13.700000 116.369878 +10.000000 13.800000 118.519287 +10.000000 13.900000 120.688695 +10.000000 14.000000 122.878104 +10.000000 14.100000 125.087513 +10.000000 14.200000 127.316921 +10.000000 14.300000 129.566330 +10.000000 14.400000 131.835739 +10.000000 14.500000 134.125147 +10.000000 14.600000 136.434556 +10.000000 14.700000 138.763965 +10.000000 14.800000 141.113374 +10.000000 14.900000 143.482782 +10.000000 15.000000 145.872191 + +10.100000 -5.000000 68.171001 +10.100000 -4.900000 66.560309 +10.100000 -4.800000 64.969616 +10.100000 -4.700000 63.398924 +10.100000 -4.600000 61.848231 +10.100000 -4.500000 60.317539 +10.100000 -4.400000 58.806846 +10.100000 -4.300000 57.316154 +10.100000 -4.200000 55.845461 +10.100000 -4.100000 54.394769 +10.100000 -4.000000 52.964076 +10.100000 -3.900000 51.553384 +10.100000 -3.800000 50.162691 +10.100000 -3.700000 48.791999 +10.100000 -3.600000 47.441306 +10.100000 -3.500000 46.110614 +10.100000 -3.400000 44.799921 +10.100000 -3.300000 43.509229 +10.100000 -3.200000 42.238536 +10.100000 -3.100000 40.987844 +10.100000 -3.000000 39.757151 +10.100000 -2.900000 38.546459 +10.100000 -2.800000 37.355766 +10.100000 -2.700000 36.185074 +10.100000 -2.600000 35.034381 +10.100000 -2.500000 33.903689 +10.100000 -2.400000 32.792996 +10.100000 -2.300000 31.702304 +10.100000 -2.200000 30.631611 +10.100000 -2.100000 29.580919 +10.100000 -2.000000 28.550226 +10.100000 -1.900000 27.539534 +10.100000 -1.800000 26.548841 +10.100000 -1.700000 25.578149 +10.100000 -1.600000 24.627456 +10.100000 -1.500000 23.696764 +10.100000 -1.400000 22.786071 +10.100000 -1.300000 21.895379 +10.100000 -1.200000 21.024686 +10.100000 -1.100000 20.173994 +10.100000 -1.000000 19.343301 +10.100000 -0.900000 18.532609 +10.100000 -0.800000 17.741916 +10.100000 -0.700000 16.971224 +10.100000 -0.600000 16.220531 +10.100000 -0.500000 15.489839 +10.100000 -0.400000 14.779146 +10.100000 -0.300000 14.088454 +10.100000 -0.200000 13.417761 +10.100000 -0.100000 12.767069 +10.100000 -0.000000 12.136376 +10.100000 0.100000 11.525684 +10.100000 0.200000 10.934991 +10.100000 0.300000 10.364299 +10.100000 0.400000 9.813606 +10.100000 0.500000 9.282914 +10.100000 0.600000 8.772221 +10.100000 0.700000 8.281529 +10.100000 0.800000 7.810836 +10.100000 0.900000 7.360144 +10.100000 1.000000 6.929451 +10.100000 1.100000 6.518759 +10.100000 1.200000 6.128066 +10.100000 1.300000 5.757373 +10.100000 1.400000 5.406681 +10.100000 1.500000 5.075988 +10.100000 1.600000 4.765296 +10.100000 1.700000 4.474603 +10.100000 1.800000 4.203911 +10.100000 1.900000 3.953218 +10.100000 2.000000 3.722526 +10.100000 2.100000 3.511833 +10.100000 2.200000 3.321141 +10.100000 2.300000 3.150448 +10.100000 2.400000 2.999756 +10.100000 2.500000 2.869063 +10.100000 2.600000 2.758371 +10.100000 2.700000 2.667678 +10.100000 2.800000 2.596986 +10.100000 2.900000 2.546293 +10.100000 3.000000 2.515601 +10.100000 3.100000 2.504908 +10.100000 3.200000 2.514216 +10.100000 3.300000 2.543523 +10.100000 3.400000 2.592831 +10.100000 3.500000 2.662138 +10.100000 3.600000 2.751446 +10.100000 3.700000 2.860753 +10.100000 3.800000 2.990061 +10.100000 3.900000 3.139368 +10.100000 4.000000 3.308676 +10.100000 4.100000 3.497983 +10.100000 4.200000 3.707291 +10.100000 4.300000 3.936598 +10.100000 4.400000 4.185906 +10.100000 4.500000 4.455213 +10.100000 4.600000 4.744521 +10.100000 4.700000 5.053828 +10.100000 4.800000 5.383136 +10.100000 4.900000 5.732443 +10.100000 5.000000 6.101751 +10.100000 5.100000 6.491058 +10.100000 5.200000 6.900366 +10.100000 5.300000 7.329673 +10.100000 5.400000 7.778981 +10.100000 5.500000 8.248288 +10.100000 5.600000 8.737596 +10.100000 5.700000 9.246903 +10.100000 5.800000 9.776211 +10.100000 5.900000 10.325518 +10.100000 6.000000 10.894826 +10.100000 6.100000 11.484133 +10.100000 6.200000 12.093441 +10.100000 6.300000 12.722748 +10.100000 6.400000 13.372056 +10.100000 6.500000 14.041363 +10.100000 6.600000 14.730671 +10.100000 6.700000 15.439978 +10.100000 6.800000 16.169286 +10.100000 6.900000 16.918593 +10.100000 7.000000 17.687901 +10.100000 7.100000 18.477208 +10.100000 7.200000 19.286516 +10.100000 7.300000 20.115823 +10.100000 7.400000 20.965131 +10.100000 7.500000 21.834438 +10.100000 7.600000 22.723746 +10.100000 7.700000 23.633053 +10.100000 7.800000 24.562361 +10.100000 7.900000 25.511668 +10.100000 8.000000 26.480976 +10.100000 8.100000 27.470283 +10.100000 8.200000 28.479591 +10.100000 8.300000 29.508898 +10.100000 8.400000 30.558206 +10.100000 8.500000 31.627513 +10.100000 8.600000 32.716821 +10.100000 8.700000 33.826128 +10.100000 8.800000 34.955436 +10.100000 8.900000 36.104743 +10.100000 9.000000 37.274051 +10.100000 9.100000 38.463358 +10.100000 9.200000 39.672666 +10.100000 9.300000 40.901973 +10.100000 9.400000 42.151281 +10.100000 9.500000 43.420588 +10.100000 9.600000 44.709896 +10.100000 9.700000 46.019203 +10.100000 9.800000 47.348511 +10.100000 9.900000 48.697818 +10.100000 10.000000 50.067126 +10.100000 10.100000 51.456433 +10.100000 10.200000 52.865741 +10.100000 10.300000 54.295048 +10.100000 10.400000 55.744356 +10.100000 10.500000 57.213663 +10.100000 10.600000 58.702971 +10.100000 10.700000 60.212278 +10.100000 10.800000 61.741586 +10.100000 10.900000 63.290893 +10.100000 11.000000 64.860200 +10.100000 11.100000 66.449508 +10.100000 11.200000 68.058815 +10.100000 11.300000 69.688123 +10.100000 11.400000 71.337430 +10.100000 11.500000 73.006738 +10.100000 11.600000 74.696045 +10.100000 11.700000 76.405353 +10.100000 11.800000 78.134660 +10.100000 11.900000 79.883968 +10.100000 12.000000 81.653275 +10.100000 12.100000 83.442583 +10.100000 12.200000 85.251890 +10.100000 12.300000 87.081198 +10.100000 12.400000 88.930505 +10.100000 12.500000 90.799813 +10.100000 12.600000 92.689120 +10.100000 12.700000 94.598428 +10.100000 12.800000 96.527735 +10.100000 12.900000 98.477043 +10.100000 13.000000 100.446350 +10.100000 13.100000 102.435658 +10.100000 13.200000 104.444965 +10.100000 13.300000 106.474273 +10.100000 13.400000 108.523580 +10.100000 13.500000 110.592888 +10.100000 13.600000 112.682195 +10.100000 13.700000 114.791503 +10.100000 13.800000 116.920810 +10.100000 13.900000 119.070118 +10.100000 14.000000 121.239425 +10.100000 14.100000 123.428733 +10.100000 14.200000 125.638040 +10.100000 14.300000 127.867348 +10.100000 14.400000 130.116655 +10.100000 14.500000 132.385963 +10.100000 14.600000 134.675270 +10.100000 14.700000 136.984578 +10.100000 14.800000 139.313885 +10.100000 14.900000 141.663193 +10.100000 15.000000 144.032500 + +10.200000 -5.000000 70.489039 +10.200000 -4.900000 68.857728 +10.200000 -4.800000 67.246418 +10.200000 -4.700000 65.655107 +10.200000 -4.600000 64.083797 +10.200000 -4.500000 62.532487 +10.200000 -4.400000 61.001176 +10.200000 -4.300000 59.489866 +10.200000 -4.200000 57.998555 +10.200000 -4.100000 56.527245 +10.200000 -4.000000 55.075934 +10.200000 -3.900000 53.644624 +10.200000 -3.800000 52.233314 +10.200000 -3.700000 50.842003 +10.200000 -3.600000 49.470693 +10.200000 -3.500000 48.119382 +10.200000 -3.400000 46.788072 +10.200000 -3.300000 45.476761 +10.200000 -3.200000 44.185451 +10.200000 -3.100000 42.914141 +10.200000 -3.000000 41.662830 +10.200000 -2.900000 40.431520 +10.200000 -2.800000 39.220209 +10.200000 -2.700000 38.028899 +10.200000 -2.600000 36.857588 +10.200000 -2.500000 35.706278 +10.200000 -2.400000 34.574968 +10.200000 -2.300000 33.463657 +10.200000 -2.200000 32.372347 +10.200000 -2.100000 31.301036 +10.200000 -2.000000 30.249726 +10.200000 -1.900000 29.218415 +10.200000 -1.800000 28.207105 +10.200000 -1.700000 27.215795 +10.200000 -1.600000 26.244484 +10.200000 -1.500000 25.293174 +10.200000 -1.400000 24.361863 +10.200000 -1.300000 23.450553 +10.200000 -1.200000 22.559242 +10.200000 -1.100000 21.687932 +10.200000 -1.000000 20.836622 +10.200000 -0.900000 20.005311 +10.200000 -0.800000 19.194001 +10.200000 -0.700000 18.402690 +10.200000 -0.600000 17.631380 +10.200000 -0.500000 16.880069 +10.200000 -0.400000 16.148759 +10.200000 -0.300000 15.437449 +10.200000 -0.200000 14.746138 +10.200000 -0.100000 14.074828 +10.200000 -0.000000 13.423517 +10.200000 0.100000 12.792207 +10.200000 0.200000 12.180896 +10.200000 0.300000 11.589586 +10.200000 0.400000 11.018276 +10.200000 0.500000 10.466965 +10.200000 0.600000 9.935655 +10.200000 0.700000 9.424344 +10.200000 0.800000 8.933034 +10.200000 0.900000 8.461724 +10.200000 1.000000 8.010413 +10.200000 1.100000 7.579103 +10.200000 1.200000 7.167792 +10.200000 1.300000 6.776482 +10.200000 1.400000 6.405171 +10.200000 1.500000 6.053861 +10.200000 1.600000 5.722551 +10.200000 1.700000 5.411240 +10.200000 1.800000 5.119930 +10.200000 1.900000 4.848619 +10.200000 2.000000 4.597309 +10.200000 2.100000 4.365998 +10.200000 2.200000 4.154688 +10.200000 2.300000 3.963378 +10.200000 2.400000 3.792067 +10.200000 2.500000 3.640757 +10.200000 2.600000 3.509446 +10.200000 2.700000 3.398136 +10.200000 2.800000 3.306825 +10.200000 2.900000 3.235515 +10.200000 3.000000 3.184205 +10.200000 3.100000 3.152894 +10.200000 3.200000 3.141584 +10.200000 3.300000 3.150273 +10.200000 3.400000 3.178963 +10.200000 3.500000 3.227652 +10.200000 3.600000 3.296342 +10.200000 3.700000 3.385032 +10.200000 3.800000 3.493721 +10.200000 3.900000 3.622411 +10.200000 4.000000 3.771100 +10.200000 4.100000 3.939790 +10.200000 4.200000 4.128479 +10.200000 4.300000 4.337169 +10.200000 4.400000 4.565859 +10.200000 4.500000 4.814548 +10.200000 4.600000 5.083238 +10.200000 4.700000 5.371927 +10.200000 4.800000 5.680617 +10.200000 4.900000 6.009306 +10.200000 5.000000 6.357996 +10.200000 5.100000 6.726686 +10.200000 5.200000 7.115375 +10.200000 5.300000 7.524065 +10.200000 5.400000 7.952754 +10.200000 5.500000 8.401444 +10.200000 5.600000 8.870133 +10.200000 5.700000 9.358823 +10.200000 5.800000 9.867513 +10.200000 5.900000 10.396202 +10.200000 6.000000 10.944892 +10.200000 6.100000 11.513581 +10.200000 6.200000 12.102271 +10.200000 6.300000 12.710960 +10.200000 6.400000 13.339650 +10.200000 6.500000 13.988340 +10.200000 6.600000 14.657029 +10.200000 6.700000 15.345719 +10.200000 6.800000 16.054408 +10.200000 6.900000 16.783098 +10.200000 7.000000 17.531787 +10.200000 7.100000 18.300477 +10.200000 7.200000 19.089167 +10.200000 7.300000 19.897856 +10.200000 7.400000 20.726546 +10.200000 7.500000 21.575235 +10.200000 7.600000 22.443925 +10.200000 7.700000 23.332614 +10.200000 7.800000 24.241304 +10.200000 7.900000 25.169994 +10.200000 8.000000 26.118683 +10.200000 8.100000 27.087373 +10.200000 8.200000 28.076062 +10.200000 8.300000 29.084752 +10.200000 8.400000 30.113441 +10.200000 8.500000 31.162131 +10.200000 8.600000 32.230821 +10.200000 8.700000 33.319510 +10.200000 8.800000 34.428200 +10.200000 8.900000 35.556889 +10.200000 9.000000 36.705579 +10.200000 9.100000 37.874268 +10.200000 9.200000 39.062958 +10.200000 9.300000 40.271648 +10.200000 9.400000 41.500337 +10.200000 9.500000 42.749027 +10.200000 9.600000 44.017716 +10.200000 9.700000 45.306406 +10.200000 9.800000 46.615095 +10.200000 9.900000 47.943785 +10.200000 10.000000 49.292475 +10.200000 10.100000 50.661164 +10.200000 10.200000 52.049854 +10.200000 10.300000 53.458543 +10.200000 10.400000 54.887233 +10.200000 10.500000 56.335922 +10.200000 10.600000 57.804612 +10.200000 10.700000 59.293302 +10.200000 10.800000 60.801991 +10.200000 10.900000 62.330681 +10.200000 11.000000 63.879370 +10.200000 11.100000 65.448060 +10.200000 11.200000 67.036750 +10.200000 11.300000 68.645439 +10.200000 11.400000 70.274129 +10.200000 11.500000 71.922818 +10.200000 11.600000 73.591508 +10.200000 11.700000 75.280197 +10.200000 11.800000 76.988887 +10.200000 11.900000 78.717577 +10.200000 12.000000 80.466266 +10.200000 12.100000 82.234956 +10.200000 12.200000 84.023645 +10.200000 12.300000 85.832335 +10.200000 12.400000 87.661024 +10.200000 12.500000 89.509714 +10.200000 12.600000 91.378404 +10.200000 12.700000 93.267093 +10.200000 12.800000 95.175783 +10.200000 12.900000 97.104472 +10.200000 13.000000 99.053162 +10.200000 13.100000 101.021851 +10.200000 13.200000 103.010541 +10.200000 13.300000 105.019231 +10.200000 13.400000 107.047920 +10.200000 13.500000 109.096610 +10.200000 13.600000 111.165299 +10.200000 13.700000 113.253989 +10.200000 13.800000 115.362678 +10.200000 13.900000 117.491368 +10.200000 14.000000 119.640058 +10.200000 14.100000 121.808747 +10.200000 14.200000 123.997437 +10.200000 14.300000 126.206126 +10.200000 14.400000 128.434816 +10.200000 14.500000 130.683505 +10.200000 14.600000 132.952195 +10.200000 14.700000 135.240885 +10.200000 14.800000 137.549574 +10.200000 14.900000 139.878264 +10.200000 15.000000 142.226953 + +10.300000 -5.000000 72.939804 +10.300000 -4.900000 71.287359 +10.300000 -4.800000 69.654914 +10.300000 -4.700000 68.042469 +10.300000 -4.600000 66.450024 +10.300000 -4.500000 64.877579 +10.300000 -4.400000 63.325134 +10.300000 -4.300000 61.792689 +10.300000 -4.200000 60.280244 +10.300000 -4.100000 58.787798 +10.300000 -4.000000 57.315353 +10.300000 -3.900000 55.862908 +10.300000 -3.800000 54.430463 +10.300000 -3.700000 53.018018 +10.300000 -3.600000 51.625573 +10.300000 -3.500000 50.253128 +10.300000 -3.400000 48.900683 +10.300000 -3.300000 47.568238 +10.300000 -3.200000 46.255793 +10.300000 -3.100000 44.963348 +10.300000 -3.000000 43.690903 +10.300000 -2.900000 42.438457 +10.300000 -2.800000 41.206012 +10.300000 -2.700000 39.993567 +10.300000 -2.600000 38.801122 +10.300000 -2.500000 37.628677 +10.300000 -2.400000 36.476232 +10.300000 -2.300000 35.343787 +10.300000 -2.200000 34.231342 +10.300000 -2.100000 33.138897 +10.300000 -2.000000 32.066452 +10.300000 -1.900000 31.014007 +10.300000 -1.800000 29.981561 +10.300000 -1.700000 28.969116 +10.300000 -1.600000 27.976671 +10.300000 -1.500000 27.004226 +10.300000 -1.400000 26.051781 +10.300000 -1.300000 25.119336 +10.300000 -1.200000 24.206891 +10.300000 -1.100000 23.314446 +10.300000 -1.000000 22.442001 +10.300000 -0.900000 21.589556 +10.300000 -0.800000 20.757111 +10.300000 -0.700000 19.944666 +10.300000 -0.600000 19.152220 +10.300000 -0.500000 18.379775 +10.300000 -0.400000 17.627330 +10.300000 -0.300000 16.894885 +10.300000 -0.200000 16.182440 +10.300000 -0.100000 15.489995 +10.300000 -0.000000 14.817550 +10.300000 0.100000 14.165105 +10.300000 0.200000 13.532660 +10.300000 0.300000 12.920215 +10.300000 0.400000 12.327770 +10.300000 0.500000 11.755324 +10.300000 0.600000 11.202879 +10.300000 0.700000 10.670434 +10.300000 0.800000 10.157989 +10.300000 0.900000 9.665544 +10.300000 1.000000 9.193099 +10.300000 1.100000 8.740654 +10.300000 1.200000 8.308209 +10.300000 1.300000 7.895764 +10.300000 1.400000 7.503319 +10.300000 1.500000 7.130874 +10.300000 1.600000 6.778428 +10.300000 1.700000 6.445983 +10.300000 1.800000 6.133538 +10.300000 1.900000 5.841093 +10.300000 2.000000 5.568648 +10.300000 2.100000 5.316203 +10.300000 2.200000 5.083758 +10.300000 2.300000 4.871313 +10.300000 2.400000 4.678868 +10.300000 2.500000 4.506423 +10.300000 2.600000 4.353978 +10.300000 2.700000 4.221533 +10.300000 2.800000 4.109087 +10.300000 2.900000 4.016642 +10.300000 3.000000 3.944197 +10.300000 3.100000 3.891752 +10.300000 3.200000 3.859307 +10.300000 3.300000 3.846862 +10.300000 3.400000 3.854417 +10.300000 3.500000 3.881972 +10.300000 3.600000 3.929527 +10.300000 3.700000 3.997082 +10.300000 3.800000 4.084637 +10.300000 3.900000 4.192191 +10.300000 4.000000 4.319746 +10.300000 4.100000 4.467301 +10.300000 4.200000 4.634856 +10.300000 4.300000 4.822411 +10.300000 4.400000 5.029966 +10.300000 4.500000 5.257521 +10.300000 4.600000 5.505076 +10.300000 4.700000 5.772631 +10.300000 4.800000 6.060186 +10.300000 4.900000 6.367741 +10.300000 5.000000 6.695296 +10.300000 5.100000 7.042850 +10.300000 5.200000 7.410405 +10.300000 5.300000 7.797960 +10.300000 5.400000 8.205515 +10.300000 5.500000 8.633070 +10.300000 5.600000 9.080625 +10.300000 5.700000 9.548180 +10.300000 5.800000 10.035735 +10.300000 5.900000 10.543290 +10.300000 6.000000 11.070845 +10.300000 6.100000 11.618400 +10.300000 6.200000 12.185954 +10.300000 6.300000 12.773509 +10.300000 6.400000 13.381064 +10.300000 6.500000 14.008619 +10.300000 6.600000 14.656174 +10.300000 6.700000 15.323729 +10.300000 6.800000 16.011284 +10.300000 6.900000 16.718839 +10.300000 7.000000 17.446394 +10.300000 7.100000 18.193949 +10.300000 7.200000 18.961504 +10.300000 7.300000 19.749059 +10.300000 7.400000 20.556613 +10.300000 7.500000 21.384168 +10.300000 7.600000 22.231723 +10.300000 7.700000 23.099278 +10.300000 7.800000 23.986833 +10.300000 7.900000 24.894388 +10.300000 8.000000 25.821943 +10.300000 8.100000 26.769498 +10.300000 8.200000 27.737053 +10.300000 8.300000 28.724608 +10.300000 8.400000 29.732163 +10.300000 8.500000 30.759717 +10.300000 8.600000 31.807272 +10.300000 8.700000 32.874827 +10.300000 8.800000 33.962382 +10.300000 8.900000 35.069937 +10.300000 9.000000 36.197492 +10.300000 9.100000 37.345047 +10.300000 9.200000 38.512602 +10.300000 9.300000 39.700157 +10.300000 9.400000 40.907712 +10.300000 9.500000 42.135267 +10.300000 9.600000 43.382822 +10.300000 9.700000 44.650376 +10.300000 9.800000 45.937931 +10.300000 9.900000 47.245486 +10.300000 10.000000 48.573041 +10.300000 10.100000 49.920596 +10.300000 10.200000 51.288151 +10.300000 10.300000 52.675706 +10.300000 10.400000 54.083261 +10.300000 10.500000 55.510816 +10.300000 10.600000 56.958371 +10.300000 10.700000 58.425926 +10.300000 10.800000 59.913480 +10.300000 10.900000 61.421035 +10.300000 11.000000 62.948590 +10.300000 11.100000 64.496145 +10.300000 11.200000 66.063700 +10.300000 11.300000 67.651255 +10.300000 11.400000 69.258810 +10.300000 11.500000 70.886365 +10.300000 11.600000 72.533920 +10.300000 11.700000 74.201475 +10.300000 11.800000 75.889030 +10.300000 11.900000 77.596585 +10.300000 12.000000 79.324139 +10.300000 12.100000 81.071694 +10.300000 12.200000 82.839249 +10.300000 12.300000 84.626804 +10.300000 12.400000 86.434359 +10.300000 12.500000 88.261914 +10.300000 12.600000 90.109469 +10.300000 12.700000 91.977024 +10.300000 12.800000 93.864579 +10.300000 12.900000 95.772134 +10.300000 13.000000 97.699689 +10.300000 13.100000 99.647243 +10.300000 13.200000 101.614798 +10.300000 13.300000 103.602353 +10.300000 13.400000 105.609908 +10.300000 13.500000 107.637463 +10.300000 13.600000 109.685018 +10.300000 13.700000 111.752573 +10.300000 13.800000 113.840128 +10.300000 13.900000 115.947683 +10.300000 14.000000 118.075238 +10.300000 14.100000 120.222793 +10.300000 14.200000 122.390347 +10.300000 14.300000 124.577902 +10.300000 14.400000 126.785457 +10.300000 14.500000 129.013012 +10.300000 14.600000 131.260567 +10.300000 14.700000 133.528122 +10.300000 14.800000 135.815677 +10.300000 14.900000 138.123232 +10.300000 15.000000 140.450787 + +10.400000 -5.000000 75.517890 +10.400000 -4.900000 73.843794 +10.400000 -4.800000 72.189697 +10.400000 -4.700000 70.555601 +10.400000 -4.600000 68.941504 +10.400000 -4.500000 67.347408 +10.400000 -4.400000 65.773311 +10.400000 -4.300000 64.219215 +10.400000 -4.200000 62.685118 +10.400000 -4.100000 61.171022 +10.400000 -4.000000 59.676925 +10.400000 -3.900000 58.202829 +10.400000 -3.800000 56.748732 +10.400000 -3.700000 55.314636 +10.400000 -3.600000 53.900539 +10.400000 -3.500000 52.506443 +10.400000 -3.400000 51.132347 +10.400000 -3.300000 49.778250 +10.400000 -3.200000 48.444154 +10.400000 -3.100000 47.130057 +10.400000 -3.000000 45.835961 +10.400000 -2.900000 44.561864 +10.400000 -2.800000 43.307768 +10.400000 -2.700000 42.073671 +10.400000 -2.600000 40.859575 +10.400000 -2.500000 39.665478 +10.400000 -2.400000 38.491382 +10.400000 -2.300000 37.337285 +10.400000 -2.200000 36.203189 +10.400000 -2.100000 35.089092 +10.400000 -2.000000 33.994996 +10.400000 -1.900000 32.920899 +10.400000 -1.800000 31.866803 +10.400000 -1.700000 30.832706 +10.400000 -1.600000 29.818610 +10.400000 -1.500000 28.824513 +10.400000 -1.400000 27.850417 +10.400000 -1.300000 26.896320 +10.400000 -1.200000 25.962224 +10.400000 -1.100000 25.048127 +10.400000 -1.000000 24.154031 +10.400000 -0.900000 23.279934 +10.400000 -0.800000 22.425838 +10.400000 -0.700000 21.591741 +10.400000 -0.600000 20.777645 +10.400000 -0.500000 19.983548 +10.400000 -0.400000 19.209452 +10.400000 -0.300000 18.455355 +10.400000 -0.200000 17.721259 +10.400000 -0.100000 17.007162 +10.400000 -0.000000 16.313066 +10.400000 0.100000 15.638970 +10.400000 0.200000 14.984873 +10.400000 0.300000 14.350777 +10.400000 0.400000 13.736680 +10.400000 0.500000 13.142584 +10.400000 0.600000 12.568487 +10.400000 0.700000 12.014391 +10.400000 0.800000 11.480294 +10.400000 0.900000 10.966198 +10.400000 1.000000 10.472101 +10.400000 1.100000 9.998005 +10.400000 1.200000 9.543908 +10.400000 1.300000 9.109812 +10.400000 1.400000 8.695715 +10.400000 1.500000 8.301619 +10.400000 1.600000 7.927522 +10.400000 1.700000 7.573426 +10.400000 1.800000 7.239329 +10.400000 1.900000 6.925233 +10.400000 2.000000 6.631136 +10.400000 2.100000 6.357040 +10.400000 2.200000 6.102943 +10.400000 2.300000 5.868847 +10.400000 2.400000 5.654750 +10.400000 2.500000 5.460654 +10.400000 2.600000 5.286557 +10.400000 2.700000 5.132461 +10.400000 2.800000 4.998364 +10.400000 2.900000 4.884268 +10.400000 3.000000 4.790171 +10.400000 3.100000 4.716075 +10.400000 3.200000 4.661978 +10.400000 3.300000 4.627882 +10.400000 3.400000 4.613785 +10.400000 3.500000 4.619689 +10.400000 3.600000 4.645593 +10.400000 3.700000 4.691496 +10.400000 3.800000 4.757400 +10.400000 3.900000 4.843303 +10.400000 4.000000 4.949207 +10.400000 4.100000 5.075110 +10.400000 4.200000 5.221014 +10.400000 4.300000 5.386917 +10.400000 4.400000 5.572821 +10.400000 4.500000 5.778724 +10.400000 4.600000 6.004628 +10.400000 4.700000 6.250531 +10.400000 4.800000 6.516435 +10.400000 4.900000 6.802338 +10.400000 5.000000 7.108242 +10.400000 5.100000 7.434145 +10.400000 5.200000 7.780049 +10.400000 5.300000 8.145952 +10.400000 5.400000 8.531856 +10.400000 5.500000 8.937759 +10.400000 5.600000 9.363663 +10.400000 5.700000 9.809566 +10.400000 5.800000 10.275470 +10.400000 5.900000 10.761373 +10.400000 6.000000 11.267277 +10.400000 6.100000 11.793180 +10.400000 6.200000 12.339084 +10.400000 6.300000 12.904987 +10.400000 6.400000 13.490891 +10.400000 6.500000 14.096794 +10.400000 6.600000 14.722698 +10.400000 6.700000 15.368601 +10.400000 6.800000 16.034505 +10.400000 6.900000 16.720409 +10.400000 7.000000 17.426312 +10.400000 7.100000 18.152216 +10.400000 7.200000 18.898119 +10.400000 7.300000 19.664023 +10.400000 7.400000 20.449926 +10.400000 7.500000 21.255830 +10.400000 7.600000 22.081733 +10.400000 7.700000 22.927637 +10.400000 7.800000 23.793540 +10.400000 7.900000 24.679444 +10.400000 8.000000 25.585347 +10.400000 8.100000 26.511251 +10.400000 8.200000 27.457154 +10.400000 8.300000 28.423058 +10.400000 8.400000 29.408961 +10.400000 8.500000 30.414865 +10.400000 8.600000 31.440768 +10.400000 8.700000 32.486672 +10.400000 8.800000 33.552575 +10.400000 8.900000 34.638479 +10.400000 9.000000 35.744382 +10.400000 9.100000 36.870286 +10.400000 9.200000 38.016189 +10.400000 9.300000 39.182093 +10.400000 9.400000 40.367996 +10.400000 9.500000 41.573900 +10.400000 9.600000 42.799803 +10.400000 9.700000 44.045707 +10.400000 9.800000 45.311610 +10.400000 9.900000 46.597514 +10.400000 10.000000 47.903417 +10.400000 10.100000 49.229321 +10.400000 10.200000 50.575224 +10.400000 10.300000 51.941128 +10.400000 10.400000 53.327032 +10.400000 10.500000 54.732935 +10.400000 10.600000 56.158839 +10.400000 10.700000 57.604742 +10.400000 10.800000 59.070646 +10.400000 10.900000 60.556549 +10.400000 11.000000 62.062453 +10.400000 11.100000 63.588356 +10.400000 11.200000 65.134260 +10.400000 11.300000 66.700163 +10.400000 11.400000 68.286067 +10.400000 11.500000 69.891970 +10.400000 11.600000 71.517874 +10.400000 11.700000 73.163777 +10.400000 11.800000 74.829681 +10.400000 11.900000 76.515584 +10.400000 12.000000 78.221488 +10.400000 12.100000 79.947391 +10.400000 12.200000 81.693295 +10.400000 12.300000 83.459198 +10.400000 12.400000 85.245102 +10.400000 12.500000 87.051005 +10.400000 12.600000 88.876909 +10.400000 12.700000 90.722812 +10.400000 12.800000 92.588716 +10.400000 12.900000 94.474619 +10.400000 13.000000 96.380523 +10.400000 13.100000 98.306426 +10.400000 13.200000 100.252330 +10.400000 13.300000 102.218233 +10.400000 13.400000 104.204137 +10.400000 13.500000 106.210040 +10.400000 13.600000 108.235944 +10.400000 13.700000 110.281847 +10.400000 13.800000 112.347751 +10.400000 13.900000 114.433655 +10.400000 14.000000 116.539558 +10.400000 14.100000 118.665462 +10.400000 14.200000 120.811365 +10.400000 14.300000 122.977269 +10.400000 14.400000 125.163172 +10.400000 14.500000 127.369076 +10.400000 14.600000 129.594979 +10.400000 14.700000 131.840883 +10.400000 14.800000 134.106786 +10.400000 14.900000 136.392690 +10.400000 15.000000 138.698593 + +10.500000 -5.000000 78.217315 +10.500000 -4.900000 76.521050 +10.500000 -4.800000 74.844786 +10.500000 -4.700000 73.188521 +10.500000 -4.600000 71.552256 +10.500000 -4.500000 69.935992 +10.500000 -4.400000 68.339727 +10.500000 -4.300000 66.763462 +10.500000 -4.200000 65.207198 +10.500000 -4.100000 63.670933 +10.500000 -4.000000 62.154669 +10.500000 -3.900000 60.658404 +10.500000 -3.800000 59.182139 +10.500000 -3.700000 57.725875 +10.500000 -3.600000 56.289610 +10.500000 -3.500000 54.873346 +10.500000 -3.400000 53.477081 +10.500000 -3.300000 52.100816 +10.500000 -3.200000 50.744552 +10.500000 -3.100000 49.408287 +10.500000 -3.000000 48.092022 +10.500000 -2.900000 46.795758 +10.500000 -2.800000 45.519493 +10.500000 -2.700000 44.263229 +10.500000 -2.600000 43.026964 +10.500000 -2.500000 41.810699 +10.500000 -2.400000 40.614435 +10.500000 -2.300000 39.438170 +10.500000 -2.200000 38.281905 +10.500000 -2.100000 37.145641 +10.500000 -2.000000 36.029376 +10.500000 -1.900000 34.933112 +10.500000 -1.800000 33.856847 +10.500000 -1.700000 32.800582 +10.500000 -1.600000 31.764318 +10.500000 -1.500000 30.748053 +10.500000 -1.400000 29.751788 +10.500000 -1.300000 28.775524 +10.500000 -1.200000 27.819259 +10.500000 -1.100000 26.882995 +10.500000 -1.000000 25.966730 +10.500000 -0.900000 25.070465 +10.500000 -0.800000 24.194201 +10.500000 -0.700000 23.337936 +10.500000 -0.600000 22.501671 +10.500000 -0.500000 21.685407 +10.500000 -0.400000 20.889142 +10.500000 -0.300000 20.112878 +10.500000 -0.200000 19.356613 +10.500000 -0.100000 18.620348 +10.500000 -0.000000 17.904084 +10.500000 0.100000 17.207819 +10.500000 0.200000 16.531555 +10.500000 0.300000 15.875290 +10.500000 0.400000 15.239025 +10.500000 0.500000 14.622761 +10.500000 0.600000 14.026496 +10.500000 0.700000 13.450231 +10.500000 0.800000 12.893967 +10.500000 0.900000 12.357702 +10.500000 1.000000 11.841438 +10.500000 1.100000 11.345173 +10.500000 1.200000 10.868908 +10.500000 1.300000 10.412644 +10.500000 1.400000 9.976379 +10.500000 1.500000 9.560114 +10.500000 1.600000 9.163850 +10.500000 1.700000 8.787585 +10.500000 1.800000 8.431321 +10.500000 1.900000 8.095056 +10.500000 2.000000 7.778791 +10.500000 2.100000 7.482527 +10.500000 2.200000 7.206262 +10.500000 2.300000 6.949997 +10.500000 2.400000 6.713733 +10.500000 2.500000 6.497468 +10.500000 2.600000 6.301204 +10.500000 2.700000 6.124939 +10.500000 2.800000 5.968674 +10.500000 2.900000 5.832410 +10.500000 3.000000 5.716145 +10.500000 3.100000 5.619880 +10.500000 3.200000 5.543616 +10.500000 3.300000 5.487351 +10.500000 3.400000 5.451087 +10.500000 3.500000 5.434822 +10.500000 3.600000 5.438557 +10.500000 3.700000 5.462293 +10.500000 3.800000 5.506028 +10.500000 3.900000 5.569764 +10.500000 4.000000 5.653499 +10.500000 4.100000 5.757234 +10.500000 4.200000 5.880970 +10.500000 4.300000 6.024705 +10.500000 4.400000 6.188440 +10.500000 4.500000 6.372176 +10.500000 4.600000 6.575911 +10.500000 4.700000 6.799647 +10.500000 4.800000 7.043382 +10.500000 4.900000 7.307117 +10.500000 5.000000 7.590853 +10.500000 5.100000 7.894588 +10.500000 5.200000 8.218323 +10.500000 5.300000 8.562059 +10.500000 5.400000 8.925794 +10.500000 5.500000 9.309530 +10.500000 5.600000 9.713265 +10.500000 5.700000 10.137000 +10.500000 5.800000 10.580736 +10.500000 5.900000 11.044471 +10.500000 6.000000 11.528206 +10.500000 6.100000 12.031942 +10.500000 6.200000 12.555677 +10.500000 6.300000 13.099413 +10.500000 6.400000 13.663148 +10.500000 6.500000 14.246883 +10.500000 6.600000 14.850619 +10.500000 6.700000 15.474354 +10.500000 6.800000 16.118089 +10.500000 6.900000 16.781825 +10.500000 7.000000 17.465560 +10.500000 7.100000 18.169296 +10.500000 7.200000 18.893031 +10.500000 7.300000 19.636766 +10.500000 7.400000 20.400502 +10.500000 7.500000 21.184237 +10.500000 7.600000 21.987972 +10.500000 7.700000 22.811708 +10.500000 7.800000 23.655443 +10.500000 7.900000 24.519179 +10.500000 8.000000 25.402914 +10.500000 8.100000 26.306649 +10.500000 8.200000 27.230385 +10.500000 8.300000 28.174120 +10.500000 8.400000 29.137856 +10.500000 8.500000 30.121591 +10.500000 8.600000 31.125326 +10.500000 8.700000 32.149062 +10.500000 8.800000 33.192797 +10.500000 8.900000 34.256532 +10.500000 9.000000 35.340268 +10.500000 9.100000 36.444003 +10.500000 9.200000 37.567739 +10.500000 9.300000 38.711474 +10.500000 9.400000 39.875209 +10.500000 9.500000 41.058945 +10.500000 9.600000 42.262680 +10.500000 9.700000 43.486415 +10.500000 9.800000 44.730151 +10.500000 9.900000 45.993886 +10.500000 10.000000 47.277622 +10.500000 10.100000 48.581357 +10.500000 10.200000 49.905092 +10.500000 10.300000 51.248828 +10.500000 10.400000 52.612563 +10.500000 10.500000 53.996298 +10.500000 10.600000 55.400034 +10.500000 10.700000 56.823769 +10.500000 10.800000 58.267505 +10.500000 10.900000 59.731240 +10.500000 11.000000 61.214975 +10.500000 11.100000 62.718711 +10.500000 11.200000 64.242446 +10.500000 11.300000 65.786181 +10.500000 11.400000 67.349917 +10.500000 11.500000 68.933652 +10.500000 11.600000 70.537388 +10.500000 11.700000 72.161123 +10.500000 11.800000 73.804858 +10.500000 11.900000 75.468594 +10.500000 12.000000 77.152329 +10.500000 12.100000 78.856065 +10.500000 12.200000 80.579800 +10.500000 12.300000 82.323535 +10.500000 12.400000 84.087271 +10.500000 12.500000 85.871006 +10.500000 12.600000 87.674741 +10.500000 12.700000 89.498477 +10.500000 12.800000 91.342212 +10.500000 12.900000 93.205948 +10.500000 13.000000 95.089683 +10.500000 13.100000 96.993418 +10.500000 13.200000 98.917154 +10.500000 13.300000 100.860889 +10.500000 13.400000 102.824624 +10.500000 13.500000 104.808360 +10.500000 13.600000 106.812095 +10.500000 13.700000 108.835831 +10.500000 13.800000 110.879566 +10.500000 13.900000 112.943301 +10.500000 14.000000 115.027037 +10.500000 14.100000 117.130772 +10.500000 14.200000 119.254507 +10.500000 14.300000 121.398243 +10.500000 14.400000 123.561978 +10.500000 14.500000 125.745714 +10.500000 14.600000 127.949449 +10.500000 14.700000 130.173184 +10.500000 14.800000 132.416920 +10.500000 14.900000 134.680655 +10.500000 15.000000 136.964390 + +10.600000 -5.000000 81.031598 +10.600000 -4.900000 79.312649 +10.600000 -4.800000 77.613699 +10.600000 -4.700000 75.934750 +10.600000 -4.600000 74.275800 +10.600000 -4.500000 72.636851 +10.600000 -4.400000 71.017901 +10.600000 -4.300000 69.418952 +10.600000 -4.200000 67.840002 +10.600000 -4.100000 66.281053 +10.600000 -4.000000 64.742103 +10.600000 -3.900000 63.223154 +10.600000 -3.800000 61.724204 +10.600000 -3.700000 60.245255 +10.600000 -3.600000 58.786305 +10.600000 -3.500000 57.347356 +10.600000 -3.400000 55.928406 +10.600000 -3.300000 54.529457 +10.600000 -3.200000 53.150507 +10.600000 -3.100000 51.791558 +10.600000 -3.000000 50.452608 +10.600000 -2.900000 49.133659 +10.600000 -2.800000 47.834709 +10.600000 -2.700000 46.555760 +10.600000 -2.600000 45.296810 +10.600000 -2.500000 44.057861 +10.600000 -2.400000 42.838911 +10.600000 -2.300000 41.639962 +10.600000 -2.200000 40.461012 +10.600000 -2.100000 39.302063 +10.600000 -2.000000 38.163113 +10.600000 -1.900000 37.044164 +10.600000 -1.800000 35.945214 +10.600000 -1.700000 34.866265 +10.600000 -1.600000 33.807315 +10.600000 -1.500000 32.768366 +10.600000 -1.400000 31.749416 +10.600000 -1.300000 30.750467 +10.600000 -1.200000 29.771517 +10.600000 -1.100000 28.812568 +10.600000 -1.000000 27.873618 +10.600000 -0.900000 26.954669 +10.600000 -0.800000 26.055719 +10.600000 -0.700000 25.176770 +10.600000 -0.600000 24.317820 +10.600000 -0.500000 23.478871 +10.600000 -0.400000 22.659921 +10.600000 -0.300000 21.860972 +10.600000 -0.200000 21.082022 +10.600000 -0.100000 20.323073 +10.600000 -0.000000 19.584123 +10.600000 0.100000 18.865174 +10.600000 0.200000 18.166224 +10.600000 0.300000 17.487275 +10.600000 0.400000 16.828325 +10.600000 0.500000 16.189376 +10.600000 0.600000 15.570427 +10.600000 0.700000 14.971477 +10.600000 0.800000 14.392528 +10.600000 0.900000 13.833578 +10.600000 1.000000 13.294629 +10.600000 1.100000 12.775679 +10.600000 1.200000 12.276730 +10.600000 1.300000 11.797780 +10.600000 1.400000 11.338831 +10.600000 1.500000 10.899881 +10.600000 1.600000 10.480932 +10.600000 1.700000 10.081982 +10.600000 1.800000 9.703033 +10.600000 1.900000 9.344083 +10.600000 2.000000 9.005134 +10.600000 2.100000 8.686184 +10.600000 2.200000 8.387235 +10.600000 2.300000 8.108285 +10.600000 2.400000 7.849336 +10.600000 2.500000 7.610386 +10.600000 2.600000 7.391437 +10.600000 2.700000 7.192487 +10.600000 2.800000 7.013538 +10.600000 2.900000 6.854588 +10.600000 3.000000 6.715639 +10.600000 3.100000 6.596689 +10.600000 3.200000 6.497740 +10.600000 3.300000 6.418790 +10.600000 3.400000 6.359841 +10.600000 3.500000 6.320891 +10.600000 3.600000 6.301942 +10.600000 3.700000 6.302992 +10.600000 3.800000 6.324043 +10.600000 3.900000 6.365093 +10.600000 4.000000 6.426144 +10.600000 4.100000 6.507194 +10.600000 4.200000 6.608245 +10.600000 4.300000 6.729295 +10.600000 4.400000 6.870346 +10.600000 4.500000 7.031396 +10.600000 4.600000 7.212447 +10.600000 4.700000 7.413497 +10.600000 4.800000 7.634548 +10.600000 4.900000 7.875598 +10.600000 5.000000 8.136649 +10.600000 5.100000 8.417699 +10.600000 5.200000 8.718750 +10.600000 5.300000 9.039800 +10.600000 5.400000 9.380851 +10.600000 5.500000 9.741901 +10.600000 5.600000 10.122952 +10.600000 5.700000 10.524002 +10.600000 5.800000 10.945053 +10.600000 5.900000 11.386103 +10.600000 6.000000 11.847154 +10.600000 6.100000 12.328204 +10.600000 6.200000 12.829255 +10.600000 6.300000 13.350305 +10.600000 6.400000 13.891356 +10.600000 6.500000 14.452406 +10.600000 6.600000 15.033457 +10.600000 6.700000 15.634507 +10.600000 6.800000 16.255558 +10.600000 6.900000 16.896608 +10.600000 7.000000 17.557659 +10.600000 7.100000 18.238709 +10.600000 7.200000 18.939760 +10.600000 7.300000 19.660810 +10.600000 7.400000 20.401861 +10.600000 7.500000 21.162911 +10.600000 7.600000 21.943962 +10.600000 7.700000 22.745012 +10.600000 7.800000 23.566063 +10.600000 7.900000 24.407113 +10.600000 8.000000 25.268164 +10.600000 8.100000 26.149214 +10.600000 8.200000 27.050265 +10.600000 8.300000 27.971315 +10.600000 8.400000 28.912366 +10.600000 8.500000 29.873416 +10.600000 8.600000 30.854467 +10.600000 8.700000 31.855517 +10.600000 8.800000 32.876568 +10.600000 8.900000 33.917618 +10.600000 9.000000 34.978669 +10.600000 9.100000 36.059719 +10.600000 9.200000 37.160770 +10.600000 9.300000 38.281820 +10.600000 9.400000 39.422871 +10.600000 9.500000 40.583921 +10.600000 9.600000 41.764972 +10.600000 9.700000 42.966022 +10.600000 9.800000 44.187073 +10.600000 9.900000 45.428123 +10.600000 10.000000 46.689174 +10.600000 10.100000 47.970224 +10.600000 10.200000 49.271275 +10.600000 10.300000 50.592325 +10.600000 10.400000 51.933376 +10.600000 10.500000 53.294426 +10.600000 10.600000 54.675477 +10.600000 10.700000 56.076527 +10.600000 10.800000 57.497578 +10.600000 10.900000 58.938628 +10.600000 11.000000 60.399679 +10.600000 11.100000 61.880729 +10.600000 11.200000 63.381780 +10.600000 11.300000 64.902830 +10.600000 11.400000 66.443881 +10.600000 11.500000 68.004931 +10.600000 11.600000 69.585982 +10.600000 11.700000 71.187032 +10.600000 11.800000 72.808083 +10.600000 11.900000 74.449133 +10.600000 12.000000 76.110184 +10.600000 12.100000 77.791234 +10.600000 12.200000 79.492285 +10.600000 12.300000 81.213335 +10.600000 12.400000 82.954386 +10.600000 12.500000 84.715436 +10.600000 12.600000 86.496487 +10.600000 12.700000 88.297537 +10.600000 12.800000 90.118588 +10.600000 12.900000 91.959639 +10.600000 13.000000 93.820689 +10.600000 13.100000 95.701740 +10.600000 13.200000 97.602790 +10.600000 13.300000 99.523841 +10.600000 13.400000 101.464891 +10.600000 13.500000 103.425942 +10.600000 13.600000 105.406992 +10.600000 13.700000 107.408043 +10.600000 13.800000 109.429093 +10.600000 13.900000 111.470144 +10.600000 14.000000 113.531194 +10.600000 14.100000 115.612245 +10.600000 14.200000 117.713295 +10.600000 14.300000 119.834346 +10.600000 14.400000 121.975396 +10.600000 14.500000 124.136447 +10.600000 14.600000 126.317497 +10.600000 14.700000 128.518548 +10.600000 14.800000 130.739598 +10.600000 14.900000 132.980649 +10.600000 15.000000 135.241699 + +10.700000 -5.000000 83.953845 +10.700000 -4.900000 82.211694 +10.700000 -4.800000 80.489543 +10.700000 -4.700000 78.787392 +10.700000 -4.600000 77.105241 +10.700000 -4.500000 75.443090 +10.700000 -4.400000 73.800939 +10.700000 -4.300000 72.178787 +10.700000 -4.200000 70.576636 +10.700000 -4.100000 68.994485 +10.700000 -4.000000 67.432334 +10.700000 -3.900000 65.890183 +10.700000 -3.800000 64.368032 +10.700000 -3.700000 62.865881 +10.700000 -3.600000 61.383730 +10.700000 -3.500000 59.921579 +10.700000 -3.400000 58.479427 +10.700000 -3.300000 57.057276 +10.700000 -3.200000 55.655125 +10.700000 -3.100000 54.272974 +10.700000 -3.000000 52.910823 +10.700000 -2.900000 51.568672 +10.700000 -2.800000 50.246521 +10.700000 -2.700000 48.944370 +10.700000 -2.600000 47.662219 +10.700000 -2.500000 46.400067 +10.700000 -2.400000 45.157916 +10.700000 -2.300000 43.935765 +10.700000 -2.200000 42.733614 +10.700000 -2.100000 41.551463 +10.700000 -2.000000 40.389312 +10.700000 -1.900000 39.247161 +10.700000 -1.800000 38.125010 +10.700000 -1.700000 37.022859 +10.700000 -1.600000 35.940707 +10.700000 -1.500000 34.878556 +10.700000 -1.400000 33.836405 +10.700000 -1.300000 32.814254 +10.700000 -1.200000 31.812103 +10.700000 -1.100000 30.829952 +10.700000 -1.000000 29.867801 +10.700000 -0.900000 28.925650 +10.700000 -0.800000 28.003499 +10.700000 -0.700000 27.101348 +10.700000 -0.600000 26.219196 +10.700000 -0.500000 25.357045 +10.700000 -0.400000 24.514894 +10.700000 -0.300000 23.692743 +10.700000 -0.200000 22.890592 +10.700000 -0.100000 22.108441 +10.700000 -0.000000 21.346290 +10.700000 0.100000 20.604139 +10.700000 0.200000 19.881988 +10.700000 0.300000 19.179836 +10.700000 0.400000 18.497685 +10.700000 0.500000 17.835534 +10.700000 0.600000 17.193383 +10.700000 0.700000 16.571232 +10.700000 0.800000 15.969081 +10.700000 0.900000 15.386930 +10.700000 1.000000 14.824779 +10.700000 1.100000 14.282628 +10.700000 1.200000 13.760476 +10.700000 1.300000 13.258325 +10.700000 1.400000 12.776174 +10.700000 1.500000 12.314023 +10.700000 1.600000 11.871872 +10.700000 1.700000 11.449721 +10.700000 1.800000 11.047570 +10.700000 1.900000 10.665419 +10.700000 2.000000 10.303268 +10.700000 2.100000 9.961116 +10.700000 2.200000 9.638965 +10.700000 2.300000 9.336814 +10.700000 2.400000 9.054663 +10.700000 2.500000 8.792512 +10.700000 2.600000 8.550361 +10.700000 2.700000 8.328210 +10.700000 2.800000 8.126059 +10.700000 2.900000 7.943908 +10.700000 3.000000 7.781756 +10.700000 3.100000 7.639605 +10.700000 3.200000 7.517454 +10.700000 3.300000 7.415303 +10.700000 3.400000 7.333152 +10.700000 3.500000 7.271001 +10.700000 3.600000 7.228850 +10.700000 3.700000 7.206699 +10.700000 3.800000 7.204548 +10.700000 3.900000 7.222397 +10.700000 4.000000 7.260245 +10.700000 4.100000 7.318094 +10.700000 4.200000 7.395943 +10.700000 4.300000 7.493792 +10.700000 4.400000 7.611641 +10.700000 4.500000 7.749490 +10.700000 4.600000 7.907339 +10.700000 4.700000 8.085188 +10.700000 4.800000 8.283037 +10.700000 4.900000 8.500885 +10.700000 5.000000 8.738734 +10.700000 5.100000 8.996583 +10.700000 5.200000 9.274432 +10.700000 5.300000 9.572281 +10.700000 5.400000 9.890130 +10.700000 5.500000 10.227979 +10.700000 5.600000 10.585828 +10.700000 5.700000 10.963677 +10.700000 5.800000 11.361525 +10.700000 5.900000 11.779374 +10.700000 6.000000 12.217223 +10.700000 6.100000 12.675072 +10.700000 6.200000 13.152921 +10.700000 6.300000 13.650770 +10.700000 6.400000 14.168619 +10.700000 6.500000 14.706468 +10.700000 6.600000 15.264317 +10.700000 6.700000 15.842165 +10.700000 6.800000 16.440014 +10.700000 6.900000 17.057863 +10.700000 7.000000 17.695712 +10.700000 7.100000 18.353561 +10.700000 7.200000 19.031410 +10.700000 7.300000 19.729259 +10.700000 7.400000 20.447108 +10.700000 7.500000 21.184957 +10.700000 7.600000 21.942806 +10.700000 7.700000 22.720654 +10.700000 7.800000 23.518503 +10.700000 7.900000 24.336352 +10.700000 8.000000 25.174201 +10.700000 8.100000 26.032050 +10.700000 8.200000 26.909899 +10.700000 8.300000 27.807748 +10.700000 8.400000 28.725597 +10.700000 8.500000 29.663446 +10.700000 8.600000 30.621294 +10.700000 8.700000 31.599143 +10.700000 8.800000 32.596992 +10.700000 8.900000 33.614841 +10.700000 9.000000 34.652690 +10.700000 9.100000 35.710539 +10.700000 9.200000 36.788388 +10.700000 9.300000 37.886237 +10.700000 9.400000 39.004086 +10.700000 9.500000 40.141934 +10.700000 9.600000 41.299783 +10.700000 9.700000 42.477632 +10.700000 9.800000 43.675481 +10.700000 9.900000 44.893330 +10.700000 10.000000 46.131179 +10.700000 10.100000 47.389028 +10.700000 10.200000 48.666877 +10.700000 10.300000 49.964726 +10.700000 10.400000 51.282574 +10.700000 10.500000 52.620423 +10.700000 10.600000 53.978272 +10.700000 10.700000 55.356121 +10.700000 10.800000 56.753970 +10.700000 10.900000 58.171819 +10.700000 11.000000 59.609668 +10.700000 11.100000 61.067517 +10.700000 11.200000 62.545366 +10.700000 11.300000 64.043215 +10.700000 11.400000 65.561063 +10.700000 11.500000 67.098912 +10.700000 11.600000 68.656761 +10.700000 11.700000 70.234610 +10.700000 11.800000 71.832459 +10.700000 11.900000 73.450308 +10.700000 12.000000 75.088157 +10.700000 12.100000 76.746006 +10.700000 12.200000 78.423855 +10.700000 12.300000 80.121703 +10.700000 12.400000 81.839552 +10.700000 12.500000 83.577401 +10.700000 12.600000 85.335250 +10.700000 12.700000 87.113099 +10.700000 12.800000 88.910948 +10.700000 12.900000 90.728797 +10.700000 13.000000 92.566646 +10.700000 13.100000 94.424495 +10.700000 13.200000 96.302343 +10.700000 13.300000 98.200192 +10.700000 13.400000 100.118041 +10.700000 13.500000 102.055890 +10.700000 13.600000 104.013739 +10.700000 13.700000 105.991588 +10.700000 13.800000 107.989437 +10.700000 13.900000 110.007286 +10.700000 14.000000 112.045135 +10.700000 14.100000 114.102983 +10.700000 14.200000 116.180832 +10.700000 14.300000 118.278681 +10.700000 14.400000 120.396530 +10.700000 14.500000 122.534379 +10.700000 14.600000 124.692228 +10.700000 14.700000 126.870077 +10.700000 14.800000 129.067926 +10.700000 14.900000 131.285775 +10.700000 15.000000 133.523624 + +10.800000 -5.000000 86.976831 +10.800000 -4.900000 85.210961 +10.800000 -4.800000 83.465092 +10.800000 -4.700000 81.739222 +10.800000 -4.600000 80.033353 +10.800000 -4.500000 78.347483 +10.800000 -4.400000 76.681614 +10.800000 -4.300000 75.035744 +10.800000 -4.200000 73.409875 +10.800000 -4.100000 71.804006 +10.800000 -4.000000 70.218136 +10.800000 -3.900000 68.652267 +10.800000 -3.800000 67.106397 +10.800000 -3.700000 65.580528 +10.800000 -3.600000 64.074658 +10.800000 -3.500000 62.588789 +10.800000 -3.400000 61.122919 +10.800000 -3.300000 59.677050 +10.800000 -3.200000 58.251180 +10.800000 -3.100000 56.845311 +10.800000 -3.000000 55.459442 +10.800000 -2.900000 54.093572 +10.800000 -2.800000 52.747703 +10.800000 -2.700000 51.421833 +10.800000 -2.600000 50.115964 +10.800000 -2.500000 48.830094 +10.800000 -2.400000 47.564225 +10.800000 -2.300000 46.318355 +10.800000 -2.200000 45.092486 +10.800000 -2.100000 43.886616 +10.800000 -2.000000 42.700747 +10.800000 -1.900000 41.534877 +10.800000 -1.800000 40.389008 +10.800000 -1.700000 39.263139 +10.800000 -1.600000 38.157269 +10.800000 -1.500000 37.071400 +10.800000 -1.400000 36.005530 +10.800000 -1.300000 34.959661 +10.800000 -1.200000 33.933791 +10.800000 -1.100000 32.927922 +10.800000 -1.000000 31.942052 +10.800000 -0.900000 30.976183 +10.800000 -0.800000 30.030313 +10.800000 -0.700000 29.104444 +10.800000 -0.600000 28.198575 +10.800000 -0.500000 27.312705 +10.800000 -0.400000 26.446836 +10.800000 -0.300000 25.600966 +10.800000 -0.200000 24.775097 +10.800000 -0.100000 23.969227 +10.800000 -0.000000 23.183358 +10.800000 0.100000 22.417488 +10.800000 0.200000 21.671619 +10.800000 0.300000 20.945749 +10.800000 0.400000 20.239880 +10.800000 0.500000 19.554010 +10.800000 0.600000 18.888141 +10.800000 0.700000 18.242272 +10.800000 0.800000 17.616402 +10.800000 0.900000 17.010533 +10.800000 1.000000 16.424663 +10.800000 1.100000 15.858794 +10.800000 1.200000 15.312924 +10.800000 1.300000 14.787055 +10.800000 1.400000 14.281185 +10.800000 1.500000 13.795316 +10.800000 1.600000 13.329446 +10.800000 1.700000 12.883577 +10.800000 1.800000 12.457708 +10.800000 1.900000 12.051838 +10.800000 2.000000 11.665969 +10.800000 2.100000 11.300099 +10.800000 2.200000 10.954230 +10.800000 2.300000 10.628360 +10.800000 2.400000 10.322491 +10.800000 2.500000 10.036621 +10.800000 2.600000 9.770752 +10.800000 2.700000 9.524882 +10.800000 2.800000 9.299013 +10.800000 2.900000 9.093143 +10.800000 3.000000 8.907274 +10.800000 3.100000 8.741405 +10.800000 3.200000 8.595535 +10.800000 3.300000 8.469666 +10.800000 3.400000 8.363796 +10.800000 3.500000 8.277927 +10.800000 3.600000 8.212057 +10.800000 3.700000 8.166188 +10.800000 3.800000 8.140318 +10.800000 3.900000 8.134449 +10.800000 4.000000 8.148579 +10.800000 4.100000 8.182710 +10.800000 4.200000 8.236841 +10.800000 4.300000 8.310971 +10.800000 4.400000 8.405102 +10.800000 4.500000 8.519232 +10.800000 4.600000 8.653363 +10.800000 4.700000 8.807493 +10.800000 4.800000 8.981624 +10.800000 4.900000 9.175754 +10.800000 5.000000 9.389885 +10.800000 5.100000 9.624015 +10.800000 5.200000 9.878146 +10.800000 5.300000 10.152276 +10.800000 5.400000 10.446407 +10.800000 5.500000 10.760538 +10.800000 5.600000 11.094668 +10.800000 5.700000 11.448799 +10.800000 5.800000 11.822929 +10.800000 5.900000 12.217060 +10.800000 6.000000 12.631190 +10.800000 6.100000 13.065321 +10.800000 6.200000 13.519451 +10.800000 6.300000 13.993582 +10.800000 6.400000 14.487712 +10.800000 6.500000 15.001843 +10.800000 6.600000 15.535974 +10.800000 6.700000 16.090104 +10.800000 6.800000 16.664235 +10.800000 6.900000 17.258365 +10.800000 7.000000 17.872496 +10.800000 7.100000 18.506626 +10.800000 7.200000 19.160757 +10.800000 7.300000 19.834887 +10.800000 7.400000 20.529018 +10.800000 7.500000 21.243148 +10.800000 7.600000 21.977279 +10.800000 7.700000 22.731409 +10.800000 7.800000 23.505540 +10.800000 7.900000 24.299671 +10.800000 8.000000 25.113801 +10.800000 8.100000 25.947932 +10.800000 8.200000 26.802062 +10.800000 8.300000 27.676193 +10.800000 8.400000 28.570323 +10.800000 8.500000 29.484454 +10.800000 8.600000 30.418584 +10.800000 8.700000 31.372715 +10.800000 8.800000 32.346845 +10.800000 8.900000 33.340976 +10.800000 9.000000 34.355106 +10.800000 9.100000 35.389237 +10.800000 9.200000 36.443368 +10.800000 9.300000 37.517498 +10.800000 9.400000 38.611629 +10.800000 9.500000 39.725759 +10.800000 9.600000 40.859890 +10.800000 9.700000 42.014020 +10.800000 9.800000 43.188151 +10.800000 9.900000 44.382281 +10.800000 10.000000 45.596412 +10.800000 10.100000 46.830542 +10.800000 10.200000 48.084673 +10.800000 10.300000 49.358804 +10.800000 10.400000 50.652934 +10.800000 10.500000 51.967065 +10.800000 10.600000 53.301195 +10.800000 10.700000 54.655326 +10.800000 10.800000 56.029456 +10.800000 10.900000 57.423587 +10.800000 11.000000 58.837717 +10.800000 11.100000 60.271848 +10.800000 11.200000 61.725978 +10.800000 11.300000 63.200109 +10.800000 11.400000 64.694239 +10.800000 11.500000 66.208370 +10.800000 11.600000 67.742501 +10.800000 11.700000 69.296631 +10.800000 11.800000 70.870762 +10.800000 11.900000 72.464892 +10.800000 12.000000 74.079023 +10.800000 12.100000 75.713153 +10.800000 12.200000 77.367284 +10.800000 12.300000 79.041414 +10.800000 12.400000 80.735545 +10.800000 12.500000 82.449675 +10.800000 12.600000 84.183806 +10.800000 12.700000 85.937937 +10.800000 12.800000 87.712067 +10.800000 12.900000 89.506198 +10.800000 13.000000 91.320328 +10.800000 13.100000 93.154459 +10.800000 13.200000 95.008589 +10.800000 13.300000 96.882720 +10.800000 13.400000 98.776850 +10.800000 13.500000 100.690981 +10.800000 13.600000 102.625111 +10.800000 13.700000 104.579242 +10.800000 13.800000 106.553372 +10.800000 13.900000 108.547503 +10.800000 14.000000 110.561634 +10.800000 14.100000 112.595764 +10.800000 14.200000 114.649895 +10.800000 14.300000 116.724025 +10.800000 14.400000 118.818156 +10.800000 14.500000 120.932286 +10.800000 14.600000 123.066417 +10.800000 14.700000 125.220547 +10.800000 14.800000 127.394678 +10.800000 14.900000 129.588808 +10.800000 15.000000 131.802939 + +10.900000 -5.000000 90.093091 +10.900000 -4.900000 88.302986 +10.900000 -4.800000 86.532882 +10.900000 -4.700000 84.782777 +10.900000 -4.600000 83.052673 +10.900000 -4.500000 81.342568 +10.900000 -4.400000 79.652464 +10.900000 -4.300000 77.982359 +10.900000 -4.200000 76.332255 +10.900000 -4.100000 74.702150 +10.900000 -4.000000 73.092045 +10.900000 -3.900000 71.501941 +10.900000 -3.800000 69.931836 +10.900000 -3.700000 68.381732 +10.900000 -3.600000 66.851627 +10.900000 -3.500000 65.341523 +10.900000 -3.400000 63.851418 +10.900000 -3.300000 62.381314 +10.900000 -3.200000 60.931209 +10.900000 -3.100000 59.501105 +10.900000 -3.000000 58.091000 +10.900000 -2.900000 56.700895 +10.900000 -2.800000 55.330791 +10.900000 -2.700000 53.980686 +10.900000 -2.600000 52.650582 +10.900000 -2.500000 51.340477 +10.900000 -2.400000 50.050373 +10.900000 -2.300000 48.780268 +10.900000 -2.200000 47.530164 +10.900000 -2.100000 46.300059 +10.900000 -2.000000 45.089955 +10.900000 -1.900000 43.899850 +10.900000 -1.800000 42.729745 +10.900000 -1.700000 41.579641 +10.900000 -1.600000 40.449536 +10.900000 -1.500000 39.339432 +10.900000 -1.400000 38.249327 +10.900000 -1.300000 37.179223 +10.900000 -1.200000 36.129118 +10.900000 -1.100000 35.099014 +10.900000 -1.000000 34.088909 +10.900000 -0.900000 33.098804 +10.900000 -0.800000 32.128700 +10.900000 -0.700000 31.178595 +10.900000 -0.600000 30.248491 +10.900000 -0.500000 29.338386 +10.900000 -0.400000 28.448282 +10.900000 -0.300000 27.578177 +10.900000 -0.200000 26.728073 +10.900000 -0.100000 25.897968 +10.900000 -0.000000 25.087864 +10.900000 0.100000 24.297759 +10.900000 0.200000 23.527654 +10.900000 0.300000 22.777550 +10.900000 0.400000 22.047445 +10.900000 0.500000 21.337341 +10.900000 0.600000 20.647236 +10.900000 0.700000 19.977132 +10.900000 0.800000 19.327027 +10.900000 0.900000 18.696923 +10.900000 1.000000 18.086818 +10.900000 1.100000 17.496714 +10.900000 1.200000 16.926609 +10.900000 1.300000 16.376504 +10.900000 1.400000 15.846400 +10.900000 1.500000 15.336295 +10.900000 1.600000 14.846191 +10.900000 1.700000 14.376086 +10.900000 1.800000 13.925982 +10.900000 1.900000 13.495877 +10.900000 2.000000 13.085773 +10.900000 2.100000 12.695668 +10.900000 2.200000 12.325564 +10.900000 2.300000 11.975459 +10.900000 2.400000 11.645354 +10.900000 2.500000 11.335250 +10.900000 2.600000 11.045145 +10.900000 2.700000 10.775041 +10.900000 2.800000 10.524936 +10.900000 2.900000 10.294832 +10.900000 3.000000 10.084727 +10.900000 3.100000 9.894623 +10.900000 3.200000 9.724518 +10.900000 3.300000 9.574414 +10.900000 3.400000 9.444309 +10.900000 3.500000 9.334204 +10.900000 3.600000 9.244100 +10.900000 3.700000 9.173995 +10.900000 3.800000 9.123891 +10.900000 3.900000 9.093786 +10.900000 4.000000 9.083682 +10.900000 4.100000 9.093577 +10.900000 4.200000 9.123473 +10.900000 4.300000 9.173368 +10.900000 4.400000 9.243264 +10.900000 4.500000 9.333159 +10.900000 4.600000 9.443054 +10.900000 4.700000 9.572950 +10.900000 4.800000 9.722845 +10.900000 4.900000 9.892741 +10.900000 5.000000 10.082636 +10.900000 5.100000 10.292532 +10.900000 5.200000 10.522427 +10.900000 5.300000 10.772323 +10.900000 5.400000 11.042218 +10.900000 5.500000 11.332113 +10.900000 5.600000 11.642009 +10.900000 5.700000 11.971904 +10.900000 5.800000 12.321800 +10.900000 5.900000 12.691695 +10.900000 6.000000 13.081591 +10.900000 6.100000 13.491486 +10.900000 6.200000 13.921382 +10.900000 6.300000 14.371277 +10.900000 6.400000 14.841173 +10.900000 6.500000 15.331068 +10.900000 6.600000 15.840963 +10.900000 6.700000 16.370859 +10.900000 6.800000 16.920754 +10.900000 6.900000 17.490650 +10.900000 7.000000 18.080545 +10.900000 7.100000 18.690441 +10.900000 7.200000 19.320336 +10.900000 7.300000 19.970232 +10.900000 7.400000 20.640127 +10.900000 7.500000 21.330023 +10.900000 7.600000 22.039918 +10.900000 7.700000 22.769813 +10.900000 7.800000 23.519709 +10.900000 7.900000 24.289604 +10.900000 8.000000 25.079500 +10.900000 8.100000 25.889395 +10.900000 8.200000 26.719291 +10.900000 8.300000 27.569186 +10.900000 8.400000 28.439082 +10.900000 8.500000 29.328977 +10.900000 8.600000 30.238873 +10.900000 8.700000 31.168768 +10.900000 8.800000 32.118663 +10.900000 8.900000 33.088559 +10.900000 9.000000 34.078454 +10.900000 9.100000 35.088350 +10.900000 9.200000 36.118245 +10.900000 9.300000 37.168141 +10.900000 9.400000 38.238036 +10.900000 9.500000 39.327932 +10.900000 9.600000 40.437827 +10.900000 9.700000 41.567723 +10.900000 9.800000 42.717618 +10.900000 9.900000 43.887513 +10.900000 10.000000 45.077409 +10.900000 10.100000 46.287304 +10.900000 10.200000 47.517200 +10.900000 10.300000 48.767095 +10.900000 10.400000 50.036991 +10.900000 10.500000 51.326886 +10.900000 10.600000 52.636782 +10.900000 10.700000 53.966677 +10.900000 10.800000 55.316573 +10.900000 10.900000 56.686468 +10.900000 11.000000 58.076363 +10.900000 11.100000 59.486259 +10.900000 11.200000 60.916154 +10.900000 11.300000 62.366050 +10.900000 11.400000 63.835945 +10.900000 11.500000 65.325841 +10.900000 11.600000 66.835736 +10.900000 11.700000 68.365632 +10.900000 11.800000 69.915527 +10.900000 11.900000 71.485422 +10.900000 12.000000 73.075318 +10.900000 12.100000 74.685213 +10.900000 12.200000 76.315109 +10.900000 12.300000 77.965004 +10.900000 12.400000 79.634900 +10.900000 12.500000 81.324795 +10.900000 12.600000 83.034691 +10.900000 12.700000 84.764586 +10.900000 12.800000 86.514482 +10.900000 12.900000 88.284377 +10.900000 13.000000 90.074272 +10.900000 13.100000 91.884168 +10.900000 13.200000 93.714063 +10.900000 13.300000 95.563959 +10.900000 13.400000 97.433854 +10.900000 13.500000 99.323750 +10.900000 13.600000 101.233645 +10.900000 13.700000 103.163541 +10.900000 13.800000 105.113436 +10.900000 13.900000 107.083332 +10.900000 14.000000 109.073227 +10.900000 14.100000 111.083122 +10.900000 14.200000 113.113018 +10.900000 14.300000 115.162913 +10.900000 14.400000 117.232809 +10.900000 14.500000 119.322704 +10.900000 14.600000 121.432600 +10.900000 14.700000 123.562495 +10.900000 14.800000 125.712391 +10.900000 14.900000 127.882286 +10.900000 15.000000 130.072182 + +11.000000 -5.000000 93.295016 +11.000000 -4.900000 91.480159 +11.000000 -4.800000 89.685303 +11.000000 -4.700000 87.910447 +11.000000 -4.600000 86.155590 +11.000000 -4.500000 84.420734 +11.000000 -4.400000 82.705877 +11.000000 -4.300000 81.011021 +11.000000 -4.200000 79.336165 +11.000000 -4.100000 77.681308 +11.000000 -4.000000 76.046452 +11.000000 -3.900000 74.431596 +11.000000 -3.800000 72.836739 +11.000000 -3.700000 71.261883 +11.000000 -3.600000 69.707026 +11.000000 -3.500000 68.172170 +11.000000 -3.400000 66.657314 +11.000000 -3.300000 65.162457 +11.000000 -3.200000 63.687601 +11.000000 -3.100000 62.232745 +11.000000 -3.000000 60.797888 +11.000000 -2.900000 59.383032 +11.000000 -2.800000 57.988175 +11.000000 -2.700000 56.613319 +11.000000 -2.600000 55.258463 +11.000000 -2.500000 53.923606 +11.000000 -2.400000 52.608750 +11.000000 -2.300000 51.313894 +11.000000 -2.200000 50.039037 +11.000000 -2.100000 48.784181 +11.000000 -2.000000 47.549324 +11.000000 -1.900000 46.334468 +11.000000 -1.800000 45.139612 +11.000000 -1.700000 43.964755 +11.000000 -1.600000 42.809899 +11.000000 -1.500000 41.675043 +11.000000 -1.400000 40.560186 +11.000000 -1.300000 39.465330 +11.000000 -1.200000 38.390473 +11.000000 -1.100000 37.335617 +11.000000 -1.000000 36.300761 +11.000000 -0.900000 35.285904 +11.000000 -0.800000 34.291048 +11.000000 -0.700000 33.316192 +11.000000 -0.600000 32.361335 +11.000000 -0.500000 31.426479 +11.000000 -0.400000 30.511622 +11.000000 -0.300000 29.616766 +11.000000 -0.200000 28.741910 +11.000000 -0.100000 27.887053 +11.000000 -0.000000 27.052197 +11.000000 0.100000 26.237341 +11.000000 0.200000 25.442484 +11.000000 0.300000 24.667628 +11.000000 0.400000 23.912771 +11.000000 0.500000 23.177915 +11.000000 0.600000 22.463059 +11.000000 0.700000 21.768202 +11.000000 0.800000 21.093346 +11.000000 0.900000 20.438490 +11.000000 1.000000 19.803633 +11.000000 1.100000 19.188777 +11.000000 1.200000 18.593920 +11.000000 1.300000 18.019064 +11.000000 1.400000 17.464208 +11.000000 1.500000 16.929351 +11.000000 1.600000 16.414495 +11.000000 1.700000 15.919639 +11.000000 1.800000 15.444782 +11.000000 1.900000 14.989926 +11.000000 2.000000 14.555069 +11.000000 2.100000 14.140213 +11.000000 2.200000 13.745357 +11.000000 2.300000 13.370500 +11.000000 2.400000 13.015644 +11.000000 2.500000 12.680788 +11.000000 2.600000 12.365931 +11.000000 2.700000 12.071075 +11.000000 2.800000 11.796219 +11.000000 2.900000 11.541362 +11.000000 3.000000 11.306506 +11.000000 3.100000 11.091649 +11.000000 3.200000 10.896793 +11.000000 3.300000 10.721937 +11.000000 3.400000 10.567080 +11.000000 3.500000 10.432224 +11.000000 3.600000 10.317368 +11.000000 3.700000 10.222511 +11.000000 3.800000 10.147655 +11.000000 3.900000 10.092798 +11.000000 4.000000 10.057942 +11.000000 4.100000 10.043086 +11.000000 4.200000 10.048229 +11.000000 4.300000 10.073373 +11.000000 4.400000 10.118517 +11.000000 4.500000 10.183660 +11.000000 4.600000 10.268804 +11.000000 4.700000 10.373947 +11.000000 4.800000 10.499091 +11.000000 4.900000 10.644235 +11.000000 5.000000 10.809378 +11.000000 5.100000 10.994522 +11.000000 5.200000 11.199666 +11.000000 5.300000 11.424809 +11.000000 5.400000 11.669953 +11.000000 5.500000 11.935096 +11.000000 5.600000 12.220240 +11.000000 5.700000 12.525384 +11.000000 5.800000 12.850527 +11.000000 5.900000 13.195671 +11.000000 6.000000 13.560815 +11.000000 6.100000 13.945958 +11.000000 6.200000 14.351102 +11.000000 6.300000 14.776245 +11.000000 6.400000 15.221389 +11.000000 6.500000 15.686533 +11.000000 6.600000 16.171676 +11.000000 6.700000 16.676820 +11.000000 6.800000 17.201964 +11.000000 6.900000 17.747107 +11.000000 7.000000 18.312251 +11.000000 7.100000 18.897394 +11.000000 7.200000 19.502538 +11.000000 7.300000 20.127682 +11.000000 7.400000 20.772825 +11.000000 7.500000 21.437969 +11.000000 7.600000 22.123113 +11.000000 7.700000 22.828256 +11.000000 7.800000 23.553400 +11.000000 7.900000 24.298543 +11.000000 8.000000 25.063687 +11.000000 8.100000 25.848831 +11.000000 8.200000 26.653974 +11.000000 8.300000 27.479118 +11.000000 8.400000 28.324262 +11.000000 8.500000 29.189405 +11.000000 8.600000 30.074549 +11.000000 8.700000 30.979692 +11.000000 8.800000 31.904836 +11.000000 8.900000 32.849980 +11.000000 9.000000 33.815123 +11.000000 9.100000 34.800267 +11.000000 9.200000 35.805411 +11.000000 9.300000 36.830554 +11.000000 9.400000 37.875698 +11.000000 9.500000 38.940842 +11.000000 9.600000 40.025985 +11.000000 9.700000 41.131129 +11.000000 9.800000 42.256272 +11.000000 9.900000 43.401416 +11.000000 10.000000 44.566560 +11.000000 10.100000 45.751703 +11.000000 10.200000 46.956847 +11.000000 10.300000 48.181991 +11.000000 10.400000 49.427134 +11.000000 10.500000 50.692278 +11.000000 10.600000 51.977421 +11.000000 10.700000 53.282565 +11.000000 10.800000 54.607709 +11.000000 10.900000 55.952852 +11.000000 11.000000 57.317996 +11.000000 11.100000 58.703140 +11.000000 11.200000 60.108283 +11.000000 11.300000 61.533427 +11.000000 11.400000 62.978570 +11.000000 11.500000 64.443714 +11.000000 11.600000 65.928858 +11.000000 11.700000 67.434001 +11.000000 11.800000 68.959145 +11.000000 11.900000 70.504289 +11.000000 12.000000 72.069432 +11.000000 12.100000 73.654576 +11.000000 12.200000 75.259719 +11.000000 12.300000 76.884863 +11.000000 12.400000 78.530007 +11.000000 12.500000 80.195150 +11.000000 12.600000 81.880294 +11.000000 12.700000 83.585438 +11.000000 12.800000 85.310581 +11.000000 12.900000 87.055725 +11.000000 13.000000 88.820868 +11.000000 13.100000 90.606012 +11.000000 13.200000 92.411156 +11.000000 13.300000 94.236299 +11.000000 13.400000 96.081443 +11.000000 13.500000 97.946587 +11.000000 13.600000 99.831730 +11.000000 13.700000 101.736874 +11.000000 13.800000 103.662017 +11.000000 13.900000 105.607161 +11.000000 14.000000 107.572305 +11.000000 14.100000 109.557448 +11.000000 14.200000 111.562592 +11.000000 14.300000 113.587736 +11.000000 14.400000 115.632879 +11.000000 14.500000 117.698023 +11.000000 14.600000 119.783166 +11.000000 14.700000 121.888310 +11.000000 14.800000 124.013454 +11.000000 14.900000 126.158597 +11.000000 15.000000 128.323741 + +11.100000 -5.000000 96.574943 +11.100000 -4.900000 94.734818 +11.100000 -4.800000 92.914693 +11.100000 -4.700000 91.114568 +11.100000 -4.600000 89.334443 +11.100000 -4.500000 87.574319 +11.100000 -4.400000 85.834194 +11.100000 -4.300000 84.114069 +11.100000 -4.200000 82.413944 +11.100000 -4.100000 80.733819 +11.100000 -4.000000 79.073694 +11.100000 -3.900000 77.433569 +11.100000 -3.800000 75.813444 +11.100000 -3.700000 74.213319 +11.100000 -3.600000 72.633194 +11.100000 -3.500000 71.073069 +11.100000 -3.400000 69.532944 +11.100000 -3.300000 68.012819 +11.100000 -3.200000 66.512694 +11.100000 -3.100000 65.032569 +11.100000 -3.000000 63.572444 +11.100000 -2.900000 62.132320 +11.100000 -2.800000 60.712195 +11.100000 -2.700000 59.312070 +11.100000 -2.600000 57.931945 +11.100000 -2.500000 56.571820 +11.100000 -2.400000 55.231695 +11.100000 -2.300000 53.911570 +11.100000 -2.200000 52.611445 +11.100000 -2.100000 51.331320 +11.100000 -2.000000 50.071195 +11.100000 -1.900000 48.831070 +11.100000 -1.800000 47.610945 +11.100000 -1.700000 46.410820 +11.100000 -1.600000 45.230695 +11.100000 -1.500000 44.070570 +11.100000 -1.400000 42.930445 +11.100000 -1.300000 41.810321 +11.100000 -1.200000 40.710196 +11.100000 -1.100000 39.630071 +11.100000 -1.000000 38.569946 +11.100000 -0.900000 37.529821 +11.100000 -0.800000 36.509696 +11.100000 -0.700000 35.509571 +11.100000 -0.600000 34.529446 +11.100000 -0.500000 33.569321 +11.100000 -0.400000 32.629196 +11.100000 -0.300000 31.709071 +11.100000 -0.200000 30.808946 +11.100000 -0.100000 29.928821 +11.100000 -0.000000 29.068696 +11.100000 0.100000 28.228571 +11.100000 0.200000 27.408446 +11.100000 0.300000 26.608322 +11.100000 0.400000 25.828197 +11.100000 0.500000 25.068072 +11.100000 0.600000 24.327947 +11.100000 0.700000 23.607822 +11.100000 0.800000 22.907697 +11.100000 0.900000 22.227572 +11.100000 1.000000 21.567447 +11.100000 1.100000 20.927322 +11.100000 1.200000 20.307197 +11.100000 1.300000 19.707072 +11.100000 1.400000 19.126947 +11.100000 1.500000 18.566822 +11.100000 1.600000 18.026697 +11.100000 1.700000 17.506572 +11.100000 1.800000 17.006447 +11.100000 1.900000 16.526322 +11.100000 2.000000 16.066198 +11.100000 2.100000 15.626073 +11.100000 2.200000 15.205948 +11.100000 2.300000 14.805823 +11.100000 2.400000 14.425698 +11.100000 2.500000 14.065573 +11.100000 2.600000 13.725448 +11.100000 2.700000 13.405323 +11.100000 2.800000 13.105198 +11.100000 2.900000 12.825073 +11.100000 3.000000 12.564948 +11.100000 3.100000 12.324823 +11.100000 3.200000 12.104698 +11.100000 3.300000 11.904573 +11.100000 3.400000 11.724448 +11.100000 3.500000 11.564323 +11.100000 3.600000 11.424199 +11.100000 3.700000 11.304074 +11.100000 3.800000 11.203949 +11.100000 3.900000 11.123824 +11.100000 4.000000 11.063699 +11.100000 4.100000 11.023574 +11.100000 4.200000 11.003449 +11.100000 4.300000 11.003324 +11.100000 4.400000 11.023199 +11.100000 4.500000 11.063074 +11.100000 4.600000 11.122949 +11.100000 4.700000 11.202824 +11.100000 4.800000 11.302699 +11.100000 4.900000 11.422574 +11.100000 5.000000 11.562449 +11.100000 5.100000 11.722324 +11.100000 5.200000 11.902200 +11.100000 5.300000 12.102075 +11.100000 5.400000 12.321950 +11.100000 5.500000 12.561825 +11.100000 5.600000 12.821700 +11.100000 5.700000 13.101575 +11.100000 5.800000 13.401450 +11.100000 5.900000 13.721325 +11.100000 6.000000 14.061200 +11.100000 6.100000 14.421075 +11.100000 6.200000 14.800950 +11.100000 6.300000 15.200825 +11.100000 6.400000 15.620700 +11.100000 6.500000 16.060575 +11.100000 6.600000 16.520450 +11.100000 6.700000 17.000325 +11.100000 6.800000 17.500201 +11.100000 6.900000 18.020076 +11.100000 7.000000 18.559951 +11.100000 7.100000 19.119826 +11.100000 7.200000 19.699701 +11.100000 7.300000 20.299576 +11.100000 7.400000 20.919451 +11.100000 7.500000 21.559326 +11.100000 7.600000 22.219201 +11.100000 7.700000 22.899076 +11.100000 7.800000 23.598951 +11.100000 7.900000 24.318826 +11.100000 8.000000 25.058701 +11.100000 8.100000 25.818576 +11.100000 8.200000 26.598451 +11.100000 8.300000 27.398326 +11.100000 8.400000 28.218202 +11.100000 8.500000 29.058077 +11.100000 8.600000 29.917952 +11.100000 8.700000 30.797827 +11.100000 8.800000 31.697702 +11.100000 8.900000 32.617577 +11.100000 9.000000 33.557452 +11.100000 9.100000 34.517327 +11.100000 9.200000 35.497202 +11.100000 9.300000 36.497077 +11.100000 9.400000 37.516952 +11.100000 9.500000 38.556827 +11.100000 9.600000 39.616702 +11.100000 9.700000 40.696577 +11.100000 9.800000 41.796452 +11.100000 9.900000 42.916327 +11.100000 10.000000 44.056203 +11.100000 10.100000 45.216078 +11.100000 10.200000 46.395953 +11.100000 10.300000 47.595828 +11.100000 10.400000 48.815703 +11.100000 10.500000 50.055578 +11.100000 10.600000 51.315453 +11.100000 10.700000 52.595328 +11.100000 10.800000 53.895203 +11.100000 10.900000 55.215078 +11.100000 11.000000 56.554953 +11.100000 11.100000 57.914828 +11.100000 11.200000 59.294703 +11.100000 11.300000 60.694578 +11.100000 11.400000 62.114453 +11.100000 11.500000 63.554328 +11.100000 11.600000 65.014204 +11.100000 11.700000 66.494079 +11.100000 11.800000 67.993954 +11.100000 11.900000 69.513829 +11.100000 12.000000 71.053704 +11.100000 12.100000 72.613579 +11.100000 12.200000 74.193454 +11.100000 12.300000 75.793329 +11.100000 12.400000 77.413204 +11.100000 12.500000 79.053079 +11.100000 12.600000 80.712954 +11.100000 12.700000 82.392829 +11.100000 12.800000 84.092704 +11.100000 12.900000 85.812579 +11.100000 13.000000 87.552454 +11.100000 13.100000 89.312329 +11.100000 13.200000 91.092205 +11.100000 13.300000 92.892080 +11.100000 13.400000 94.711955 +11.100000 13.500000 96.551830 +11.100000 13.600000 98.411705 +11.100000 13.700000 100.291580 +11.100000 13.800000 102.191455 +11.100000 13.900000 104.111330 +11.100000 14.000000 106.051205 +11.100000 14.100000 108.011080 +11.100000 14.200000 109.990955 +11.100000 14.300000 111.990830 +11.100000 14.400000 114.010705 +11.100000 14.500000 116.050580 +11.100000 14.600000 118.110455 +11.100000 14.700000 120.190330 +11.100000 14.800000 122.290206 +11.100000 14.900000 124.410081 +11.100000 15.000000 126.549956 + +11.200000 -5.000000 99.925256 +11.200000 -4.900000 98.059346 +11.200000 -4.800000 96.213436 +11.200000 -4.700000 94.387526 +11.200000 -4.600000 92.581615 +11.200000 -4.500000 90.795705 +11.200000 -4.400000 89.029795 +11.200000 -4.300000 87.283885 +11.200000 -4.200000 85.557974 +11.200000 -4.100000 83.852064 +11.200000 -4.000000 82.166154 +11.200000 -3.900000 80.500244 +11.200000 -3.800000 78.854333 +11.200000 -3.700000 77.228423 +11.200000 -3.600000 75.622513 +11.200000 -3.500000 74.036603 +11.200000 -3.400000 72.470692 +11.200000 -3.300000 70.924782 +11.200000 -3.200000 69.398872 +11.200000 -3.100000 67.892962 +11.200000 -3.000000 66.407051 +11.200000 -2.900000 64.941141 +11.200000 -2.800000 63.495231 +11.200000 -2.700000 62.069321 +11.200000 -2.600000 60.663411 +11.200000 -2.500000 59.277500 +11.200000 -2.400000 57.911590 +11.200000 -2.300000 56.565680 +11.200000 -2.200000 55.239770 +11.200000 -2.100000 53.933859 +11.200000 -2.000000 52.647949 +11.200000 -1.900000 51.382039 +11.200000 -1.800000 50.136129 +11.200000 -1.700000 48.910218 +11.200000 -1.600000 47.704308 +11.200000 -1.500000 46.518398 +11.200000 -1.400000 45.352488 +11.200000 -1.300000 44.206577 +11.200000 -1.200000 43.080667 +11.200000 -1.100000 41.974757 +11.200000 -1.000000 40.888847 +11.200000 -0.900000 39.822936 +11.200000 -0.800000 38.777026 +11.200000 -0.700000 37.751116 +11.200000 -0.600000 36.745206 +11.200000 -0.500000 35.759295 +11.200000 -0.400000 34.793385 +11.200000 -0.300000 33.847475 +11.200000 -0.200000 32.921565 +11.200000 -0.100000 32.015655 +11.200000 -0.000000 31.129744 +11.200000 0.100000 30.263834 +11.200000 0.200000 29.417924 +11.200000 0.300000 28.592014 +11.200000 0.400000 27.786103 +11.200000 0.500000 27.000193 +11.200000 0.600000 26.234283 +11.200000 0.700000 25.488373 +11.200000 0.800000 24.762462 +11.200000 0.900000 24.056552 +11.200000 1.000000 23.370642 +11.200000 1.100000 22.704732 +11.200000 1.200000 22.058821 +11.200000 1.300000 21.432911 +11.200000 1.400000 20.827001 +11.200000 1.500000 20.241091 +11.200000 1.600000 19.675180 +11.200000 1.700000 19.129270 +11.200000 1.800000 18.603360 +11.200000 1.900000 18.097450 +11.200000 2.000000 17.611539 +11.200000 2.100000 17.145629 +11.200000 2.200000 16.699719 +11.200000 2.300000 16.273809 +11.200000 2.400000 15.867899 +11.200000 2.500000 15.481988 +11.200000 2.600000 15.116078 +11.200000 2.700000 14.770168 +11.200000 2.800000 14.444258 +11.200000 2.900000 14.138347 +11.200000 3.000000 13.852437 +11.200000 3.100000 13.586527 +11.200000 3.200000 13.340617 +11.200000 3.300000 13.114706 +11.200000 3.400000 12.908796 +11.200000 3.500000 12.722886 +11.200000 3.600000 12.556976 +11.200000 3.700000 12.411065 +11.200000 3.800000 12.285155 +11.200000 3.900000 12.179245 +11.200000 4.000000 12.093335 +11.200000 4.100000 12.027424 +11.200000 4.200000 11.981514 +11.200000 4.300000 11.955604 +11.200000 4.400000 11.949694 +11.200000 4.500000 11.963783 +11.200000 4.600000 11.997873 +11.200000 4.700000 12.051963 +11.200000 4.800000 12.126053 +11.200000 4.900000 12.220143 +11.200000 5.000000 12.334232 +11.200000 5.100000 12.468322 +11.200000 5.200000 12.622412 +11.200000 5.300000 12.796502 +11.200000 5.400000 12.990591 +11.200000 5.500000 13.204681 +11.200000 5.600000 13.438771 +11.200000 5.700000 13.692861 +11.200000 5.800000 13.966950 +11.200000 5.900000 14.261040 +11.200000 6.000000 14.575130 +11.200000 6.100000 14.909220 +11.200000 6.200000 15.263309 +11.200000 6.300000 15.637399 +11.200000 6.400000 16.031489 +11.200000 6.500000 16.445579 +11.200000 6.600000 16.879668 +11.200000 6.700000 17.333758 +11.200000 6.800000 17.807848 +11.200000 6.900000 18.301938 +11.200000 7.000000 18.816027 +11.200000 7.100000 19.350117 +11.200000 7.200000 19.904207 +11.200000 7.300000 20.478297 +11.200000 7.400000 21.072387 +11.200000 7.500000 21.686476 +11.200000 7.600000 22.320566 +11.200000 7.700000 22.974656 +11.200000 7.800000 23.648746 +11.200000 7.900000 24.342835 +11.200000 8.000000 25.056925 +11.200000 8.100000 25.791015 +11.200000 8.200000 26.545105 +11.200000 8.300000 27.319194 +11.200000 8.400000 28.113284 +11.200000 8.500000 28.927374 +11.200000 8.600000 29.761464 +11.200000 8.700000 30.615553 +11.200000 8.800000 31.489643 +11.200000 8.900000 32.383733 +11.200000 9.000000 33.297823 +11.200000 9.100000 34.231912 +11.200000 9.200000 35.186002 +11.200000 9.300000 36.160092 +11.200000 9.400000 37.154182 +11.200000 9.500000 38.168271 +11.200000 9.600000 39.202361 +11.200000 9.700000 40.256451 +11.200000 9.800000 41.330541 +11.200000 9.900000 42.424631 +11.200000 10.000000 43.538720 +11.200000 10.100000 44.672810 +11.200000 10.200000 45.826900 +11.200000 10.300000 47.000990 +11.200000 10.400000 48.195079 +11.200000 10.500000 49.409169 +11.200000 10.600000 50.643259 +11.200000 10.700000 51.897349 +11.200000 10.800000 53.171438 +11.200000 10.900000 54.465528 +11.200000 11.000000 55.779618 +11.200000 11.100000 57.113708 +11.200000 11.200000 58.467797 +11.200000 11.300000 59.841887 +11.200000 11.400000 61.235977 +11.200000 11.500000 62.650067 +11.200000 11.600000 64.084156 +11.200000 11.700000 65.538246 +11.200000 11.800000 67.012336 +11.200000 11.900000 68.506426 +11.200000 12.000000 70.020515 +11.200000 12.100000 71.554605 +11.200000 12.200000 73.108695 +11.200000 12.300000 74.682785 +11.200000 12.400000 76.276875 +11.200000 12.500000 77.890964 +11.200000 12.600000 79.525054 +11.200000 12.700000 81.179144 +11.200000 12.800000 82.853234 +11.200000 12.900000 84.547323 +11.200000 13.000000 86.261413 +11.200000 13.100000 87.995503 +11.200000 13.200000 89.749593 +11.200000 13.300000 91.523682 +11.200000 13.400000 93.317772 +11.200000 13.500000 95.131862 +11.200000 13.600000 96.965952 +11.200000 13.700000 98.820041 +11.200000 13.800000 100.694131 +11.200000 13.900000 102.588221 +11.200000 14.000000 104.502311 +11.200000 14.100000 106.436400 +11.200000 14.200000 108.390490 +11.200000 14.300000 110.364580 +11.200000 14.400000 112.358670 +11.200000 14.500000 114.372759 +11.200000 14.600000 116.406849 +11.200000 14.700000 118.460939 +11.200000 14.800000 120.535029 +11.200000 14.900000 122.629119 +11.200000 15.000000 124.743208 + +11.300000 -5.000000 103.338478 +11.300000 -4.900000 101.446265 +11.300000 -4.800000 99.574053 +11.300000 -4.700000 97.721841 +11.300000 -4.600000 95.889628 +11.300000 -4.500000 94.077416 +11.300000 -4.400000 92.285204 +11.300000 -4.300000 90.512992 +11.300000 -4.200000 88.760779 +11.300000 -4.100000 87.028567 +11.300000 -4.000000 85.316355 +11.300000 -3.900000 83.624142 +11.300000 -3.800000 81.951930 +11.300000 -3.700000 80.299718 +11.300000 -3.600000 78.667506 +11.300000 -3.500000 77.055293 +11.300000 -3.400000 75.463081 +11.300000 -3.300000 73.890869 +11.300000 -3.200000 72.338657 +11.300000 -3.100000 70.806444 +11.300000 -3.000000 69.294232 +11.300000 -2.900000 67.802020 +11.300000 -2.800000 66.329807 +11.300000 -2.700000 64.877595 +11.300000 -2.600000 63.445383 +11.300000 -2.500000 62.033171 +11.300000 -2.400000 60.640958 +11.300000 -2.300000 59.268746 +11.300000 -2.200000 57.916534 +11.300000 -2.100000 56.584321 +11.300000 -2.000000 55.272109 +11.300000 -1.900000 53.979897 +11.300000 -1.800000 52.707685 +11.300000 -1.700000 51.455472 +11.300000 -1.600000 50.223260 +11.300000 -1.500000 49.011048 +11.300000 -1.400000 47.818835 +11.300000 -1.300000 46.646623 +11.300000 -1.200000 45.494411 +11.300000 -1.100000 44.362199 +11.300000 -1.000000 43.249986 +11.300000 -0.900000 42.157774 +11.300000 -0.800000 41.085562 +11.300000 -0.700000 40.033349 +11.300000 -0.600000 39.001137 +11.300000 -0.500000 37.988925 +11.300000 -0.400000 36.996713 +11.300000 -0.300000 36.024500 +11.300000 -0.200000 35.072288 +11.300000 -0.100000 34.140076 +11.300000 -0.000000 33.227864 +11.300000 0.100000 32.335651 +11.300000 0.200000 31.463439 +11.300000 0.300000 30.611227 +11.300000 0.400000 29.779014 +11.300000 0.500000 28.966802 +11.300000 0.600000 28.174590 +11.300000 0.700000 27.402378 +11.300000 0.800000 26.650165 +11.300000 0.900000 25.917953 +11.300000 1.000000 25.205741 +11.300000 1.100000 24.513528 +11.300000 1.200000 23.841316 +11.300000 1.300000 23.189104 +11.300000 1.400000 22.556892 +11.300000 1.500000 21.944679 +11.300000 1.600000 21.352467 +11.300000 1.700000 20.780255 +11.300000 1.800000 20.228042 +11.300000 1.900000 19.695830 +11.300000 2.000000 19.183618 +11.300000 2.100000 18.691406 +11.300000 2.200000 18.219193 +11.300000 2.300000 17.766981 +11.300000 2.400000 17.334769 +11.300000 2.500000 16.922557 +11.300000 2.600000 16.530344 +11.300000 2.700000 16.158132 +11.300000 2.800000 15.805920 +11.300000 2.900000 15.473707 +11.300000 3.000000 15.161495 +11.300000 3.100000 14.869283 +11.300000 3.200000 14.597071 +11.300000 3.300000 14.344858 +11.300000 3.400000 14.112646 +11.300000 3.500000 13.900434 +11.300000 3.600000 13.708221 +11.300000 3.700000 13.536009 +11.300000 3.800000 13.383797 +11.300000 3.900000 13.251585 +11.300000 4.000000 13.139372 +11.300000 4.100000 13.047160 +11.300000 4.200000 12.974948 +11.300000 4.300000 12.922735 +11.300000 4.400000 12.890523 +11.300000 4.500000 12.878311 +11.300000 4.600000 12.886099 +11.300000 4.700000 12.913886 +11.300000 4.800000 12.961674 +11.300000 4.900000 13.029462 +11.300000 5.000000 13.117250 +11.300000 5.100000 13.225037 +11.300000 5.200000 13.352825 +11.300000 5.300000 13.500613 +11.300000 5.400000 13.668400 +11.300000 5.500000 13.856188 +11.300000 5.600000 14.063976 +11.300000 5.700000 14.291764 +11.300000 5.800000 14.539551 +11.300000 5.900000 14.807339 +11.300000 6.000000 15.095127 +11.300000 6.100000 15.402914 +11.300000 6.200000 15.730702 +11.300000 6.300000 16.078490 +11.300000 6.400000 16.446278 +11.300000 6.500000 16.834065 +11.300000 6.600000 17.241853 +11.300000 6.700000 17.669641 +11.300000 6.800000 18.117428 +11.300000 6.900000 18.585216 +11.300000 7.000000 19.073004 +11.300000 7.100000 19.580792 +11.300000 7.200000 20.108579 +11.300000 7.300000 20.656367 +11.300000 7.400000 21.224155 +11.300000 7.500000 21.811942 +11.300000 7.600000 22.419730 +11.300000 7.700000 23.047518 +11.300000 7.800000 23.695306 +11.300000 7.900000 24.363093 +11.300000 8.000000 25.050881 +11.300000 8.100000 25.758669 +11.300000 8.200000 26.486457 +11.300000 8.300000 27.234244 +11.300000 8.400000 28.002032 +11.300000 8.500000 28.789820 +11.300000 8.600000 29.597607 +11.300000 8.700000 30.425395 +11.300000 8.800000 31.273183 +11.300000 8.900000 32.140971 +11.300000 9.000000 33.028758 +11.300000 9.100000 33.936546 +11.300000 9.200000 34.864334 +11.300000 9.300000 35.812121 +11.300000 9.400000 36.779909 +11.300000 9.500000 37.767697 +11.300000 9.600000 38.775485 +11.300000 9.700000 39.803272 +11.300000 9.800000 40.851060 +11.300000 9.900000 41.918848 +11.300000 10.000000 43.006635 +11.300000 10.100000 44.114423 +11.300000 10.200000 45.242211 +11.300000 10.300000 46.389999 +11.300000 10.400000 47.557786 +11.300000 10.500000 48.745574 +11.300000 10.600000 49.953362 +11.300000 10.700000 51.181150 +11.300000 10.800000 52.428937 +11.300000 10.900000 53.696725 +11.300000 11.000000 54.984513 +11.300000 11.100000 56.292300 +11.300000 11.200000 57.620088 +11.300000 11.300000 58.967876 +11.300000 11.400000 60.335664 +11.300000 11.500000 61.723451 +11.300000 11.600000 63.131239 +11.300000 11.700000 64.559027 +11.300000 11.800000 66.006814 +11.300000 11.900000 67.474602 +11.300000 12.000000 68.962390 +11.300000 12.100000 70.470178 +11.300000 12.200000 71.997965 +11.300000 12.300000 73.545753 +11.300000 12.400000 75.113541 +11.300000 12.500000 76.701328 +11.300000 12.600000 78.309116 +11.300000 12.700000 79.936904 +11.300000 12.800000 81.584692 +11.300000 12.900000 83.252479 +11.300000 13.000000 84.940267 +11.300000 13.100000 86.648055 +11.300000 13.200000 88.375842 +11.300000 13.300000 90.123630 +11.300000 13.400000 91.891418 +11.300000 13.500000 93.679206 +11.300000 13.600000 95.486993 +11.300000 13.700000 97.314781 +11.300000 13.800000 99.162569 +11.300000 13.900000 101.030357 +11.300000 14.000000 102.918144 +11.300000 14.100000 104.825932 +11.300000 14.200000 106.753720 +11.300000 14.300000 108.701507 +11.300000 14.400000 110.669295 +11.300000 14.500000 112.657083 +11.300000 14.600000 114.664871 +11.300000 14.700000 116.692658 +11.300000 14.800000 118.740446 +11.300000 14.900000 120.808234 +11.300000 15.000000 122.896021 + +11.400000 -5.000000 106.807364 +11.400000 -4.900000 104.888333 +11.400000 -4.800000 102.989302 +11.400000 -4.700000 101.110271 +11.400000 -4.600000 99.251240 +11.400000 -4.500000 97.412209 +11.400000 -4.400000 95.593178 +11.400000 -4.300000 93.794147 +11.400000 -4.200000 92.015116 +11.400000 -4.100000 90.256085 +11.400000 -4.000000 88.517054 +11.400000 -3.900000 86.798023 +11.400000 -3.800000 85.098992 +11.400000 -3.700000 83.419961 +11.400000 -3.600000 81.760929 +11.400000 -3.500000 80.121898 +11.400000 -3.400000 78.502867 +11.400000 -3.300000 76.903836 +11.400000 -3.200000 75.324805 +11.400000 -3.100000 73.765774 +11.400000 -3.000000 72.226743 +11.400000 -2.900000 70.707712 +11.400000 -2.800000 69.208681 +11.400000 -2.700000 67.729650 +11.400000 -2.600000 66.270619 +11.400000 -2.500000 64.831588 +11.400000 -2.400000 63.412557 +11.400000 -2.300000 62.013526 +11.400000 -2.200000 60.634495 +11.400000 -2.100000 59.275464 +11.400000 -2.000000 57.936433 +11.400000 -1.900000 56.617401 +11.400000 -1.800000 55.318370 +11.400000 -1.700000 54.039339 +11.400000 -1.600000 52.780308 +11.400000 -1.500000 51.541277 +11.400000 -1.400000 50.322246 +11.400000 -1.300000 49.123215 +11.400000 -1.200000 47.944184 +11.400000 -1.100000 46.785153 +11.400000 -1.000000 45.646122 +11.400000 -0.900000 44.527091 +11.400000 -0.800000 43.428060 +11.400000 -0.700000 42.349029 +11.400000 -0.600000 41.289998 +11.400000 -0.500000 40.250967 +11.400000 -0.400000 39.231936 +11.400000 -0.300000 38.232905 +11.400000 -0.200000 37.253873 +11.400000 -0.100000 36.294842 +11.400000 -0.000000 35.355811 +11.400000 0.100000 34.436780 +11.400000 0.200000 33.537749 +11.400000 0.300000 32.658718 +11.400000 0.400000 31.799687 +11.400000 0.500000 30.960656 +11.400000 0.600000 30.141625 +11.400000 0.700000 29.342594 +11.400000 0.800000 28.563563 +11.400000 0.900000 27.804532 +11.400000 1.000000 27.065501 +11.400000 1.100000 26.346470 +11.400000 1.200000 25.647439 +11.400000 1.300000 24.968408 +11.400000 1.400000 24.309377 +11.400000 1.500000 23.670345 +11.400000 1.600000 23.051314 +11.400000 1.700000 22.452283 +11.400000 1.800000 21.873252 +11.400000 1.900000 21.314221 +11.400000 2.000000 20.775190 +11.400000 2.100000 20.256159 +11.400000 2.200000 19.757128 +11.400000 2.300000 19.278097 +11.400000 2.400000 18.819066 +11.400000 2.500000 18.380035 +11.400000 2.600000 17.961004 +11.400000 2.700000 17.561973 +11.400000 2.800000 17.182942 +11.400000 2.900000 16.823911 +11.400000 3.000000 16.484880 +11.400000 3.100000 16.165849 +11.400000 3.200000 15.866817 +11.400000 3.300000 15.587786 +11.400000 3.400000 15.328755 +11.400000 3.500000 15.089724 +11.400000 3.600000 14.870693 +11.400000 3.700000 14.671662 +11.400000 3.800000 14.492631 +11.400000 3.900000 14.333600 +11.400000 4.000000 14.194569 +11.400000 4.100000 14.075538 +11.400000 4.200000 13.976507 +11.400000 4.300000 13.897476 +11.400000 4.400000 13.838445 +11.400000 4.500000 13.799414 +11.400000 4.600000 13.780383 +11.400000 4.700000 13.781352 +11.400000 4.800000 13.802321 +11.400000 4.900000 13.843289 +11.400000 5.000000 13.904258 +11.400000 5.100000 13.985227 +11.400000 5.200000 14.086196 +11.400000 5.300000 14.207165 +11.400000 5.400000 14.348134 +11.400000 5.500000 14.509103 +11.400000 5.600000 14.690072 +11.400000 5.700000 14.891041 +11.400000 5.800000 15.112010 +11.400000 5.900000 15.352979 +11.400000 6.000000 15.613948 +11.400000 6.100000 15.894917 +11.400000 6.200000 16.195886 +11.400000 6.300000 16.516855 +11.400000 6.400000 16.857824 +11.400000 6.500000 17.218792 +11.400000 6.600000 17.599761 +11.400000 6.700000 18.000730 +11.400000 6.800000 18.421699 +11.400000 6.900000 18.862668 +11.400000 7.000000 19.323637 +11.400000 7.100000 19.804606 +11.400000 7.200000 20.305575 +11.400000 7.300000 20.826544 +11.400000 7.400000 21.367513 +11.400000 7.500000 21.928482 +11.400000 7.600000 22.509451 +11.400000 7.700000 23.110420 +11.400000 7.800000 23.731389 +11.400000 7.900000 24.372358 +11.400000 8.000000 25.033327 +11.400000 8.100000 25.714296 +11.400000 8.200000 26.415264 +11.400000 8.300000 27.136233 +11.400000 8.400000 27.877202 +11.400000 8.500000 28.638171 +11.400000 8.600000 29.419140 +11.400000 8.700000 30.220109 +11.400000 8.800000 31.041078 +11.400000 8.900000 31.882047 +11.400000 9.000000 32.743016 +11.400000 9.100000 33.623985 +11.400000 9.200000 34.524954 +11.400000 9.300000 35.445923 +11.400000 9.400000 36.386892 +11.400000 9.500000 37.347861 +11.400000 9.600000 38.328830 +11.400000 9.700000 39.329799 +11.400000 9.800000 40.350768 +11.400000 9.900000 41.391736 +11.400000 10.000000 42.452705 +11.400000 10.100000 43.533674 +11.400000 10.200000 44.634643 +11.400000 10.300000 45.755612 +11.400000 10.400000 46.896581 +11.400000 10.500000 48.057550 +11.400000 10.600000 49.238519 +11.400000 10.700000 50.439488 +11.400000 10.800000 51.660457 +11.400000 10.900000 52.901426 +11.400000 11.000000 54.162395 +11.400000 11.100000 55.443364 +11.400000 11.200000 56.744333 +11.400000 11.300000 58.065302 +11.400000 11.400000 59.406271 +11.400000 11.500000 60.767240 +11.400000 11.600000 62.148208 +11.400000 11.700000 63.549177 +11.400000 11.800000 64.970146 +11.400000 11.900000 66.411115 +11.400000 12.000000 67.872084 +11.400000 12.100000 69.353053 +11.400000 12.200000 70.854022 +11.400000 12.300000 72.374991 +11.400000 12.400000 73.915960 +11.400000 12.500000 75.476929 +11.400000 12.600000 77.057898 +11.400000 12.700000 78.658867 +11.400000 12.800000 80.279836 +11.400000 12.900000 81.920805 +11.400000 13.000000 83.581774 +11.400000 13.100000 85.262743 +11.400000 13.200000 86.963712 +11.400000 13.300000 88.684680 +11.400000 13.400000 90.425649 +11.400000 13.500000 92.186618 +11.400000 13.600000 93.967587 +11.400000 13.700000 95.768556 +11.400000 13.800000 97.589525 +11.400000 13.900000 99.430494 +11.400000 14.000000 101.291463 +11.400000 14.100000 103.172432 +11.400000 14.200000 105.073401 +11.400000 14.300000 106.994370 +11.400000 14.400000 108.935339 +11.400000 14.500000 110.896308 +11.400000 14.600000 112.877277 +11.400000 14.700000 114.878246 +11.400000 14.800000 116.899215 +11.400000 14.900000 118.940184 +11.400000 15.000000 121.001152 + +11.500000 -5.000000 110.325001 +11.500000 -4.900000 108.378635 +11.500000 -4.800000 106.452268 +11.500000 -4.700000 104.545901 +11.500000 -4.600000 102.659535 +11.500000 -4.500000 100.793168 +11.500000 -4.400000 98.946802 +11.500000 -4.300000 97.120435 +11.500000 -4.200000 95.314069 +11.500000 -4.100000 93.527702 +11.500000 -4.000000 91.761335 +11.500000 -3.900000 90.014969 +11.500000 -3.800000 88.288602 +11.500000 -3.700000 86.582236 +11.500000 -3.600000 84.895869 +11.500000 -3.500000 83.229503 +11.500000 -3.400000 81.583136 +11.500000 -3.300000 79.956769 +11.500000 -3.200000 78.350403 +11.500000 -3.100000 76.764036 +11.500000 -3.000000 75.197670 +11.500000 -2.900000 73.651303 +11.500000 -2.800000 72.124937 +11.500000 -2.700000 70.618570 +11.500000 -2.600000 69.132203 +11.500000 -2.500000 67.665837 +11.500000 -2.400000 66.219470 +11.500000 -2.300000 64.793104 +11.500000 -2.200000 63.386737 +11.500000 -2.100000 62.000371 +11.500000 -2.000000 60.634004 +11.500000 -1.900000 59.287637 +11.500000 -1.800000 57.961271 +11.500000 -1.700000 56.654904 +11.500000 -1.600000 55.368538 +11.500000 -1.500000 54.102171 +11.500000 -1.400000 52.855804 +11.500000 -1.300000 51.629438 +11.500000 -1.200000 50.423071 +11.500000 -1.100000 49.236705 +11.500000 -1.000000 48.070338 +11.500000 -0.900000 46.923972 +11.500000 -0.800000 45.797605 +11.500000 -0.700000 44.691238 +11.500000 -0.600000 43.604872 +11.500000 -0.500000 42.538505 +11.500000 -0.400000 41.492139 +11.500000 -0.300000 40.465772 +11.500000 -0.200000 39.459406 +11.500000 -0.100000 38.473039 +11.500000 -0.000000 37.506672 +11.500000 0.100000 36.560306 +11.500000 0.200000 35.633939 +11.500000 0.300000 34.727573 +11.500000 0.400000 33.841206 +11.500000 0.500000 32.974840 +11.500000 0.600000 32.128473 +11.500000 0.700000 31.302106 +11.500000 0.800000 30.495740 +11.500000 0.900000 29.709373 +11.500000 1.000000 28.943007 +11.500000 1.100000 28.196640 +11.500000 1.200000 27.470274 +11.500000 1.300000 26.763907 +11.500000 1.400000 26.077540 +11.500000 1.500000 25.411174 +11.500000 1.600000 24.764807 +11.500000 1.700000 24.138441 +11.500000 1.800000 23.532074 +11.500000 1.900000 22.945707 +11.500000 2.000000 22.379341 +11.500000 2.100000 21.832974 +11.500000 2.200000 21.306608 +11.500000 2.300000 20.800241 +11.500000 2.400000 20.313875 +11.500000 2.500000 19.847508 +11.500000 2.600000 19.401141 +11.500000 2.700000 18.974775 +11.500000 2.800000 18.568408 +11.500000 2.900000 18.182042 +11.500000 3.000000 17.815675 +11.500000 3.100000 17.469309 +11.500000 3.200000 17.142942 +11.500000 3.300000 16.836575 +11.500000 3.400000 16.550209 +11.500000 3.500000 16.283842 +11.500000 3.600000 16.037476 +11.500000 3.700000 15.811109 +11.500000 3.800000 15.604743 +11.500000 3.900000 15.418376 +11.500000 4.000000 15.252009 +11.500000 4.100000 15.105643 +11.500000 4.200000 14.979276 +11.500000 4.300000 14.872910 +11.500000 4.400000 14.786543 +11.500000 4.500000 14.720177 +11.500000 4.600000 14.673810 +11.500000 4.700000 14.647443 +11.500000 4.800000 14.641077 +11.500000 4.900000 14.654710 +11.500000 5.000000 14.688344 +11.500000 5.100000 14.741977 +11.500000 5.200000 14.815610 +11.500000 5.300000 14.909244 +11.500000 5.400000 15.022877 +11.500000 5.500000 15.156511 +11.500000 5.600000 15.310144 +11.500000 5.700000 15.483778 +11.500000 5.800000 15.677411 +11.500000 5.900000 15.891044 +11.500000 6.000000 16.124678 +11.500000 6.100000 16.378311 +11.500000 6.200000 16.651945 +11.500000 6.300000 16.945578 +11.500000 6.400000 17.259212 +11.500000 6.500000 17.592845 +11.500000 6.600000 17.946478 +11.500000 6.700000 18.320112 +11.500000 6.800000 18.713745 +11.500000 6.900000 19.127379 +11.500000 7.000000 19.561012 +11.500000 7.100000 20.014646 +11.500000 7.200000 20.488279 +11.500000 7.300000 20.981912 +11.500000 7.400000 21.495546 +11.500000 7.500000 22.029179 +11.500000 7.600000 22.582813 +11.500000 7.700000 23.156446 +11.500000 7.800000 23.750080 +11.500000 7.900000 24.363713 +11.500000 8.000000 24.997346 +11.500000 8.100000 25.650980 +11.500000 8.200000 26.324613 +11.500000 8.300000 27.018247 +11.500000 8.400000 27.731880 +11.500000 8.500000 28.465513 +11.500000 8.600000 29.219147 +11.500000 8.700000 29.992780 +11.500000 8.800000 30.786414 +11.500000 8.900000 31.600047 +11.500000 9.000000 32.433681 +11.500000 9.100000 33.287314 +11.500000 9.200000 34.160947 +11.500000 9.300000 35.054581 +11.500000 9.400000 35.968214 +11.500000 9.500000 36.901848 +11.500000 9.600000 37.855481 +11.500000 9.700000 38.829115 +11.500000 9.800000 39.822748 +11.500000 9.900000 40.836381 +11.500000 10.000000 41.870015 +11.500000 10.100000 42.923648 +11.500000 10.200000 43.997282 +11.500000 10.300000 45.090915 +11.500000 10.400000 46.204549 +11.500000 10.500000 47.338182 +11.500000 10.600000 48.491815 +11.500000 10.700000 49.665449 +11.500000 10.800000 50.859082 +11.500000 10.900000 52.072716 +11.500000 11.000000 53.306349 +11.500000 11.100000 54.559983 +11.500000 11.200000 55.833616 +11.500000 11.300000 57.127249 +11.500000 11.400000 58.440883 +11.500000 11.500000 59.774516 +11.500000 11.600000 61.128150 +11.500000 11.700000 62.501783 +11.500000 11.800000 63.895416 +11.500000 11.900000 65.309050 +11.500000 12.000000 66.742683 +11.500000 12.100000 68.196317 +11.500000 12.200000 69.669950 +11.500000 12.300000 71.163584 +11.500000 12.400000 72.677217 +11.500000 12.500000 74.210850 +11.500000 12.600000 75.764484 +11.500000 12.700000 77.338117 +11.500000 12.800000 78.931751 +11.500000 12.900000 80.545384 +11.500000 13.000000 82.179018 +11.500000 13.100000 83.832651 +11.500000 13.200000 85.506284 +11.500000 13.300000 87.199918 +11.500000 13.400000 88.913551 +11.500000 13.500000 90.647185 +11.500000 13.600000 92.400818 +11.500000 13.700000 94.174452 +11.500000 13.800000 95.968085 +11.500000 13.900000 97.781718 +11.500000 14.000000 99.615352 +11.500000 14.100000 101.468985 +11.500000 14.200000 103.342619 +11.500000 14.300000 105.236252 +11.500000 14.400000 107.149886 +11.500000 14.500000 109.083519 +11.500000 14.600000 111.037152 +11.500000 14.700000 113.010786 +11.500000 14.800000 115.004419 +11.500000 14.900000 117.018053 +11.500000 15.000000 119.051686 + +11.600000 -5.000000 113.884890 +11.600000 -4.900000 111.910671 +11.600000 -4.800000 109.956453 +11.600000 -4.700000 108.022234 +11.600000 -4.600000 106.108015 +11.600000 -4.500000 104.213796 +11.600000 -4.400000 102.339577 +11.600000 -4.300000 100.485358 +11.600000 -4.200000 98.651140 +11.600000 -4.100000 96.836921 +11.600000 -4.000000 95.042702 +11.600000 -3.900000 93.268483 +11.600000 -3.800000 91.514264 +11.600000 -3.700000 89.780045 +11.600000 -3.600000 88.065827 +11.600000 -3.500000 86.371608 +11.600000 -3.400000 84.697389 +11.600000 -3.300000 83.043170 +11.600000 -3.200000 81.408951 +11.600000 -3.100000 79.794732 +11.600000 -3.000000 78.200514 +11.600000 -2.900000 76.626295 +11.600000 -2.800000 75.072076 +11.600000 -2.700000 73.537857 +11.600000 -2.600000 72.023638 +11.600000 -2.500000 70.529419 +11.600000 -2.400000 69.055201 +11.600000 -2.300000 67.600982 +11.600000 -2.200000 66.166763 +11.600000 -2.100000 64.752544 +11.600000 -2.000000 63.358325 +11.600000 -1.900000 61.984106 +11.600000 -1.800000 60.629888 +11.600000 -1.700000 59.295669 +11.600000 -1.600000 57.981450 +11.600000 -1.500000 56.687231 +11.600000 -1.400000 55.413012 +11.600000 -1.300000 54.158793 +11.600000 -1.200000 52.924575 +11.600000 -1.100000 51.710356 +11.600000 -1.000000 50.516137 +11.600000 -0.900000 49.341918 +11.600000 -0.800000 48.187699 +11.600000 -0.700000 47.053481 +11.600000 -0.600000 45.939262 +11.600000 -0.500000 44.845043 +11.600000 -0.400000 43.770824 +11.600000 -0.300000 42.716605 +11.600000 -0.200000 41.682386 +11.600000 -0.100000 40.668168 +11.600000 -0.000000 39.673949 +11.600000 0.100000 38.699730 +11.600000 0.200000 37.745511 +11.600000 0.300000 36.811292 +11.600000 0.400000 35.897073 +11.600000 0.500000 35.002855 +11.600000 0.600000 34.128636 +11.600000 0.700000 33.274417 +11.600000 0.800000 32.440198 +11.600000 0.900000 31.625979 +11.600000 1.000000 30.831760 +11.600000 1.100000 30.057542 +11.600000 1.200000 29.303323 +11.600000 1.300000 28.569104 +11.600000 1.400000 27.854885 +11.600000 1.500000 27.160666 +11.600000 1.600000 26.486447 +11.600000 1.700000 25.832229 +11.600000 1.800000 25.198010 +11.600000 1.900000 24.583791 +11.600000 2.000000 23.989572 +11.600000 2.100000 23.415353 +11.600000 2.200000 22.861134 +11.600000 2.300000 22.326916 +11.600000 2.400000 21.812697 +11.600000 2.500000 21.318478 +11.600000 2.600000 20.844259 +11.600000 2.700000 20.390040 +11.600000 2.800000 19.955821 +11.600000 2.900000 19.541603 +11.600000 3.000000 19.147384 +11.600000 3.100000 18.773165 +11.600000 3.200000 18.418946 +11.600000 3.300000 18.084727 +11.600000 3.400000 17.770508 +11.600000 3.500000 17.476290 +11.600000 3.600000 17.202071 +11.600000 3.700000 16.947852 +11.600000 3.800000 16.713633 +11.600000 3.900000 16.499414 +11.600000 4.000000 16.305195 +11.600000 4.100000 16.130977 +11.600000 4.200000 15.976758 +11.600000 4.300000 15.842539 +11.600000 4.400000 15.728320 +11.600000 4.500000 15.634101 +11.600000 4.600000 15.559882 +11.600000 4.700000 15.505664 +11.600000 4.800000 15.471445 +11.600000 4.900000 15.457226 +11.600000 5.000000 15.463007 +11.600000 5.100000 15.488788 +11.600000 5.200000 15.534570 +11.600000 5.300000 15.600351 +11.600000 5.400000 15.686132 +11.600000 5.500000 15.791913 +11.600000 5.600000 15.917694 +11.600000 5.700000 16.063475 +11.600000 5.800000 16.229257 +11.600000 5.900000 16.415038 +11.600000 6.000000 16.620819 +11.600000 6.100000 16.846600 +11.600000 6.200000 17.092381 +11.600000 6.300000 17.358162 +11.600000 6.400000 17.643944 +11.600000 6.500000 17.949725 +11.600000 6.600000 18.275506 +11.600000 6.700000 18.621287 +11.600000 6.800000 18.987068 +11.600000 6.900000 19.372849 +11.600000 7.000000 19.778631 +11.600000 7.100000 20.204412 +11.600000 7.200000 20.650193 +11.600000 7.300000 21.115974 +11.600000 7.400000 21.601755 +11.600000 7.500000 22.107536 +11.600000 7.600000 22.633318 +11.600000 7.700000 23.179099 +11.600000 7.800000 23.744880 +11.600000 7.900000 24.330661 +11.600000 8.000000 24.936442 +11.600000 8.100000 25.562223 +11.600000 8.200000 26.208005 +11.600000 8.300000 26.873786 +11.600000 8.400000 27.559567 +11.600000 8.500000 28.265348 +11.600000 8.600000 28.991129 +11.600000 8.700000 29.736910 +11.600000 8.800000 30.502692 +11.600000 8.900000 31.288473 +11.600000 9.000000 32.094254 +11.600000 9.100000 32.920035 +11.600000 9.200000 33.765816 +11.600000 9.300000 34.631597 +11.600000 9.400000 35.517379 +11.600000 9.500000 36.423160 +11.600000 9.600000 37.348941 +11.600000 9.700000 38.294722 +11.600000 9.800000 39.260503 +11.600000 9.900000 40.246284 +11.600000 10.000000 41.252066 +11.600000 10.100000 42.277847 +11.600000 10.200000 43.323628 +11.600000 10.300000 44.389409 +11.600000 10.400000 45.475190 +11.600000 10.500000 46.580972 +11.600000 10.600000 47.706753 +11.600000 10.700000 48.852534 +11.600000 10.800000 50.018315 +11.600000 10.900000 51.204096 +11.600000 11.000000 52.409877 +11.600000 11.100000 53.635659 +11.600000 11.200000 54.881440 +11.600000 11.300000 56.147221 +11.600000 11.400000 57.433002 +11.600000 11.500000 58.738783 +11.600000 11.600000 60.064564 +11.600000 11.700000 61.410346 +11.600000 11.800000 62.776127 +11.600000 11.900000 64.161908 +11.600000 12.000000 65.567689 +11.600000 12.100000 66.993470 +11.600000 12.200000 68.439251 +11.600000 12.300000 69.905033 +11.600000 12.400000 71.390814 +11.600000 12.500000 72.896595 +11.600000 12.600000 74.422376 +11.600000 12.700000 75.968157 +11.600000 12.800000 77.533938 +11.600000 12.900000 79.119720 +11.600000 13.000000 80.725501 +11.600000 13.100000 82.351282 +11.600000 13.200000 83.997063 +11.600000 13.300000 85.662844 +11.600000 13.400000 87.348625 +11.600000 13.500000 89.054407 +11.600000 13.600000 90.780188 +11.600000 13.700000 92.525969 +11.600000 13.800000 94.291750 +11.600000 13.900000 96.077531 +11.600000 14.000000 97.883312 +11.600000 14.100000 99.709094 +11.600000 14.200000 101.554875 +11.600000 14.300000 103.420656 +11.600000 14.400000 105.306437 +11.600000 14.500000 107.212218 +11.600000 14.600000 109.137999 +11.600000 14.700000 111.083781 +11.600000 14.800000 113.049562 +11.600000 14.900000 115.035343 +11.600000 15.000000 117.041124 + +11.700000 -5.000000 117.481037 +11.700000 -4.900000 115.478449 +11.700000 -4.800000 113.495861 +11.700000 -4.700000 111.533273 +11.700000 -4.600000 109.590685 +11.700000 -4.500000 107.668098 +11.700000 -4.400000 105.765510 +11.700000 -4.300000 103.882922 +11.700000 -4.200000 102.020334 +11.700000 -4.100000 100.177746 +11.700000 -4.000000 98.355158 +11.700000 -3.900000 96.552571 +11.700000 -3.800000 94.769983 +11.700000 -3.700000 93.007395 +11.700000 -3.600000 91.264807 +11.700000 -3.500000 89.542219 +11.700000 -3.400000 87.839631 +11.700000 -3.300000 86.157044 +11.700000 -3.200000 84.494456 +11.700000 -3.100000 82.851868 +11.700000 -3.000000 81.229280 +11.700000 -2.900000 79.626692 +11.700000 -2.800000 78.044105 +11.700000 -2.700000 76.481517 +11.700000 -2.600000 74.938929 +11.700000 -2.500000 73.416341 +11.700000 -2.400000 71.913753 +11.700000 -2.300000 70.431165 +11.700000 -2.200000 68.968578 +11.700000 -2.100000 67.525990 +11.700000 -2.000000 66.103402 +11.700000 -1.900000 64.700814 +11.700000 -1.800000 63.318226 +11.700000 -1.700000 61.955638 +11.700000 -1.600000 60.613051 +11.700000 -1.500000 59.290463 +11.700000 -1.400000 57.987875 +11.700000 -1.300000 56.705287 +11.700000 -1.200000 55.442699 +11.700000 -1.100000 54.200112 +11.700000 -1.000000 52.977524 +11.700000 -0.900000 51.774936 +11.700000 -0.800000 50.592348 +11.700000 -0.700000 49.429760 +11.700000 -0.600000 48.287172 +11.700000 -0.500000 47.164585 +11.700000 -0.400000 46.061997 +11.700000 -0.300000 44.979409 +11.700000 -0.200000 43.916821 +11.700000 -0.100000 42.874233 +11.700000 -0.000000 41.851645 +11.700000 0.100000 40.849058 +11.700000 0.200000 39.866470 +11.700000 0.300000 38.903882 +11.700000 0.400000 37.961294 +11.700000 0.500000 37.038706 +11.700000 0.600000 36.136119 +11.700000 0.700000 35.253531 +11.700000 0.800000 34.390943 +11.700000 0.900000 33.548355 +11.700000 1.000000 32.725767 +11.700000 1.100000 31.923179 +11.700000 1.200000 31.140592 +11.700000 1.300000 30.378004 +11.700000 1.400000 29.635416 +11.700000 1.500000 28.912828 +11.700000 1.600000 28.210240 +11.700000 1.700000 27.527652 +11.700000 1.800000 26.865065 +11.700000 1.900000 26.222477 +11.700000 2.000000 25.599889 +11.700000 2.100000 24.997301 +11.700000 2.200000 24.414713 +11.700000 2.300000 23.852126 +11.700000 2.400000 23.309538 +11.700000 2.500000 22.786950 +11.700000 2.600000 22.284362 +11.700000 2.700000 21.801774 +11.700000 2.800000 21.339186 +11.700000 2.900000 20.896599 +11.700000 3.000000 20.474011 +11.700000 3.100000 20.071423 +11.700000 3.200000 19.688835 +11.700000 3.300000 19.326247 +11.700000 3.400000 18.983659 +11.700000 3.500000 18.661072 +11.700000 3.600000 18.358484 +11.700000 3.700000 18.075896 +11.700000 3.800000 17.813308 +11.700000 3.900000 17.570720 +11.700000 4.000000 17.348133 +11.700000 4.100000 17.145545 +11.700000 4.200000 16.962957 +11.700000 4.300000 16.800369 +11.700000 4.400000 16.657781 +11.700000 4.500000 16.535193 +11.700000 4.600000 16.432606 +11.700000 4.700000 16.350018 +11.700000 4.800000 16.287430 +11.700000 4.900000 16.244842 +11.700000 5.000000 16.222254 +11.700000 5.100000 16.219666 +11.700000 5.200000 16.237079 +11.700000 5.300000 16.274491 +11.700000 5.400000 16.331903 +11.700000 5.500000 16.409315 +11.700000 5.600000 16.506727 +11.700000 5.700000 16.624140 +11.700000 5.800000 16.761552 +11.700000 5.900000 16.918964 +11.700000 6.000000 17.096376 +11.700000 6.100000 17.293788 +11.700000 6.200000 17.511200 +11.700000 6.300000 17.748613 +11.700000 6.400000 18.006025 +11.700000 6.500000 18.283437 +11.700000 6.600000 18.580849 +11.700000 6.700000 18.898261 +11.700000 6.800000 19.235674 +11.700000 6.900000 19.593086 +11.700000 7.000000 19.970498 +11.700000 7.100000 20.367910 +11.700000 7.200000 20.785322 +11.700000 7.300000 21.222734 +11.700000 7.400000 21.680147 +11.700000 7.500000 22.157559 +11.700000 7.600000 22.654971 +11.700000 7.700000 23.172383 +11.700000 7.800000 23.709795 +11.700000 7.900000 24.267207 +11.700000 8.000000 24.844620 +11.700000 8.100000 25.442032 +11.700000 8.200000 26.059444 +11.700000 8.300000 26.696856 +11.700000 8.400000 27.354268 +11.700000 8.500000 28.031681 +11.700000 8.600000 28.729093 +11.700000 8.700000 29.446505 +11.700000 8.800000 30.183917 +11.700000 8.900000 30.941329 +11.700000 9.000000 31.718741 +11.700000 9.100000 32.516154 +11.700000 9.200000 33.333566 +11.700000 9.300000 34.170978 +11.700000 9.400000 35.028390 +11.700000 9.500000 35.905802 +11.700000 9.600000 36.803214 +11.700000 9.700000 37.720627 +11.700000 9.800000 38.658039 +11.700000 9.900000 39.615451 +11.700000 10.000000 40.592863 +11.700000 10.100000 41.590275 +11.700000 10.200000 42.607688 +11.700000 10.300000 43.645100 +11.700000 10.400000 44.702512 +11.700000 10.500000 45.779924 +11.700000 10.600000 46.877336 +11.700000 10.700000 47.994748 +11.700000 10.800000 49.132161 +11.700000 10.900000 50.289573 +11.700000 11.000000 51.466985 +11.700000 11.100000 52.664397 +11.700000 11.200000 53.881809 +11.700000 11.300000 55.119221 +11.700000 11.400000 56.376634 +11.700000 11.500000 57.654046 +11.700000 11.600000 58.951458 +11.700000 11.700000 60.268870 +11.700000 11.800000 61.606282 +11.700000 11.900000 62.963695 +11.700000 12.000000 64.341107 +11.700000 12.100000 65.738519 +11.700000 12.200000 67.155931 +11.700000 12.300000 68.593343 +11.700000 12.400000 70.050755 +11.700000 12.500000 71.528168 +11.700000 12.600000 73.025580 +11.700000 12.700000 74.542992 +11.700000 12.800000 76.080404 +11.700000 12.900000 77.637816 +11.700000 13.000000 79.215228 +11.700000 13.100000 80.812641 +11.700000 13.200000 82.430053 +11.700000 13.300000 84.067465 +11.700000 13.400000 85.724877 +11.700000 13.500000 87.402289 +11.700000 13.600000 89.099702 +11.700000 13.700000 90.817114 +11.700000 13.800000 92.554526 +11.700000 13.900000 94.311938 +11.700000 14.000000 96.089350 +11.700000 14.100000 97.886762 +11.700000 14.200000 99.704175 +11.700000 14.300000 101.541587 +11.700000 14.400000 103.398999 +11.700000 14.500000 105.276411 +11.700000 14.600000 107.173823 +11.700000 14.700000 109.091235 +11.700000 14.800000 111.028648 +11.700000 14.900000 112.986060 +11.700000 15.000000 114.963472 + +11.800000 -5.000000 121.108031 +11.800000 -4.900000 119.076557 +11.800000 -4.800000 117.065083 +11.800000 -4.700000 115.073610 +11.800000 -4.600000 113.102136 +11.800000 -4.500000 111.150663 +11.800000 -4.400000 109.219189 +11.800000 -4.300000 107.307716 +11.800000 -4.200000 105.416242 +11.800000 -4.100000 103.544769 +11.800000 -4.000000 101.693295 +11.800000 -3.900000 99.861821 +11.800000 -3.800000 98.050348 +11.800000 -3.700000 96.258874 +11.800000 -3.600000 94.487401 +11.800000 -3.500000 92.735927 +11.800000 -3.400000 91.004454 +11.800000 -3.300000 89.292980 +11.800000 -3.200000 87.601507 +11.800000 -3.100000 85.930033 +11.800000 -3.000000 84.278559 +11.800000 -2.900000 82.647086 +11.800000 -2.800000 81.035612 +11.800000 -2.700000 79.444139 +11.800000 -2.600000 77.872665 +11.800000 -2.500000 76.321192 +11.800000 -2.400000 74.789718 +11.800000 -2.300000 73.278245 +11.800000 -2.200000 71.786771 +11.800000 -2.100000 70.315298 +11.800000 -2.000000 68.863824 +11.800000 -1.900000 67.432350 +11.800000 -1.800000 66.020877 +11.800000 -1.700000 64.629403 +11.800000 -1.600000 63.257930 +11.800000 -1.500000 61.906456 +11.800000 -1.400000 60.574983 +11.800000 -1.300000 59.263509 +11.800000 -1.200000 57.972036 +11.800000 -1.100000 56.700562 +11.800000 -1.000000 55.449088 +11.800000 -0.900000 54.217615 +11.800000 -0.800000 53.006141 +11.800000 -0.700000 51.814668 +11.800000 -0.600000 50.643194 +11.800000 -0.500000 49.491721 +11.800000 -0.400000 48.360247 +11.800000 -0.300000 47.248774 +11.800000 -0.200000 46.157300 +11.800000 -0.100000 45.085826 +11.800000 -0.000000 44.034353 +11.800000 0.100000 43.002879 +11.800000 0.200000 41.991406 +11.800000 0.300000 40.999932 +11.800000 0.400000 40.028459 +11.800000 0.500000 39.076985 +11.800000 0.600000 38.145512 +11.800000 0.700000 37.234038 +11.800000 0.800000 36.342564 +11.800000 0.900000 35.471091 +11.800000 1.000000 34.619617 +11.800000 1.100000 33.788144 +11.800000 1.200000 32.976670 +11.800000 1.300000 32.185197 +11.800000 1.400000 31.413723 +11.800000 1.500000 30.662250 +11.800000 1.600000 29.930776 +11.800000 1.700000 29.219302 +11.800000 1.800000 28.527829 +11.800000 1.900000 27.856355 +11.800000 2.000000 27.204882 +11.800000 2.100000 26.573408 +11.800000 2.200000 25.961935 +11.800000 2.300000 25.370461 +11.800000 2.400000 24.798988 +11.800000 2.500000 24.247514 +11.800000 2.600000 23.716040 +11.800000 2.700000 23.204567 +11.800000 2.800000 22.713093 +11.800000 2.900000 22.241620 +11.800000 3.000000 21.790146 +11.800000 3.100000 21.358673 +11.800000 3.200000 20.947199 +11.800000 3.300000 20.555726 +11.800000 3.400000 20.184252 +11.800000 3.500000 19.832779 +11.800000 3.600000 19.501305 +11.800000 3.700000 19.189831 +11.800000 3.800000 18.898358 +11.800000 3.900000 18.626884 +11.800000 4.000000 18.375411 +11.800000 4.100000 18.143937 +11.800000 4.200000 17.932464 +11.800000 4.300000 17.740990 +11.800000 4.400000 17.569517 +11.800000 4.500000 17.418043 +11.800000 4.600000 17.286569 +11.800000 4.700000 17.175096 +11.800000 4.800000 17.083622 +11.800000 4.900000 17.012149 +11.800000 5.000000 16.960675 +11.800000 5.100000 16.929202 +11.800000 5.200000 16.917728 +11.800000 5.300000 16.926255 +11.800000 5.400000 16.954781 +11.800000 5.500000 17.003307 +11.800000 5.600000 17.071834 +11.800000 5.700000 17.160360 +11.800000 5.800000 17.268887 +11.800000 5.900000 17.397413 +11.800000 6.000000 17.545940 +11.800000 6.100000 17.714466 +11.800000 6.200000 17.902993 +11.800000 6.300000 18.111519 +11.800000 6.400000 18.340045 +11.800000 6.500000 18.588572 +11.800000 6.600000 18.857098 +11.800000 6.700000 19.145625 +11.800000 6.800000 19.454151 +11.800000 6.900000 19.782678 +11.800000 7.000000 20.131204 +11.800000 7.100000 20.499731 +11.800000 7.200000 20.888257 +11.800000 7.300000 21.296783 +11.800000 7.400000 21.725310 +11.800000 7.500000 22.173836 +11.800000 7.600000 22.642363 +11.800000 7.700000 23.130889 +11.800000 7.800000 23.639416 +11.800000 7.900000 24.167942 +11.800000 8.000000 24.716469 +11.800000 8.100000 25.284995 +11.800000 8.200000 25.873521 +11.800000 8.300000 26.482048 +11.800000 8.400000 27.110574 +11.800000 8.500000 27.759101 +11.800000 8.600000 28.427627 +11.800000 8.700000 29.116154 +11.800000 8.800000 29.824680 +11.800000 8.900000 30.553207 +11.800000 9.000000 31.301733 +11.800000 9.100000 32.070260 +11.800000 9.200000 32.858786 +11.800000 9.300000 33.667312 +11.800000 9.400000 34.495839 +11.800000 9.500000 35.344365 +11.800000 9.600000 36.212892 +11.800000 9.700000 37.101418 +11.800000 9.800000 38.009945 +11.800000 9.900000 38.938471 +11.800000 10.000000 39.886998 +11.800000 10.100000 40.855524 +11.800000 10.200000 41.844050 +11.800000 10.300000 42.852577 +11.800000 10.400000 43.881103 +11.800000 10.500000 44.929630 +11.800000 10.600000 45.998156 +11.800000 10.700000 47.086683 +11.800000 10.800000 48.195209 +11.800000 10.900000 49.323736 +11.800000 11.000000 50.472262 +11.800000 11.100000 51.640788 +11.800000 11.200000 52.829315 +11.800000 11.300000 54.037841 +11.800000 11.400000 55.266368 +11.800000 11.500000 56.514894 +11.800000 11.600000 57.783421 +11.800000 11.700000 59.071947 +11.800000 11.800000 60.380474 +11.800000 11.900000 61.709000 +11.800000 12.000000 63.057526 +11.800000 12.100000 64.426053 +11.800000 12.200000 65.814579 +11.800000 12.300000 67.223106 +11.800000 12.400000 68.651632 +11.800000 12.500000 70.100159 +11.800000 12.600000 71.568685 +11.800000 12.700000 73.057212 +11.800000 12.800000 74.565738 +11.800000 12.900000 76.094264 +11.800000 13.000000 77.642791 +11.800000 13.100000 79.211317 +11.800000 13.200000 80.799844 +11.800000 13.300000 82.408370 +11.800000 13.400000 84.036897 +11.800000 13.500000 85.685423 +11.800000 13.600000 87.353950 +11.800000 13.700000 89.042476 +11.800000 13.800000 90.751002 +11.800000 13.900000 92.479529 +11.800000 14.000000 94.228055 +11.800000 14.100000 95.996582 +11.800000 14.200000 97.785108 +11.800000 14.300000 99.593635 +11.800000 14.400000 101.422161 +11.800000 14.500000 103.270688 +11.800000 14.600000 105.139214 +11.800000 14.700000 107.027740 +11.800000 14.800000 108.936267 +11.800000 14.900000 110.864793 +11.800000 15.000000 112.813320 + +11.900000 -5.000000 124.761123 +11.900000 -4.900000 122.700247 +11.900000 -4.800000 120.659371 +11.900000 -4.700000 118.638495 +11.900000 -4.600000 116.637619 +11.900000 -4.500000 114.656743 +11.900000 -4.400000 112.695867 +11.900000 -4.300000 110.754991 +11.900000 -4.200000 108.834115 +11.900000 -4.100000 106.933239 +11.900000 -4.000000 105.052363 +11.900000 -3.900000 103.191487 +11.900000 -3.800000 101.350611 +11.900000 -3.700000 99.529735 +11.900000 -3.600000 97.728859 +11.900000 -3.500000 95.947983 +11.900000 -3.400000 94.187107 +11.900000 -3.300000 92.446231 +11.900000 -3.200000 90.725355 +11.900000 -3.100000 89.024479 +11.900000 -3.000000 87.343603 +11.900000 -2.900000 85.682727 +11.900000 -2.800000 84.041851 +11.900000 -2.700000 82.420975 +11.900000 -2.600000 80.820098 +11.900000 -2.500000 79.239222 +11.900000 -2.400000 77.678346 +11.900000 -2.300000 76.137470 +11.900000 -2.200000 74.616594 +11.900000 -2.100000 73.115718 +11.900000 -2.000000 71.634842 +11.900000 -1.900000 70.173966 +11.900000 -1.800000 68.733090 +11.900000 -1.700000 67.312214 +11.900000 -1.600000 65.911338 +11.900000 -1.500000 64.530462 +11.900000 -1.400000 63.169586 +11.900000 -1.300000 61.828710 +11.900000 -1.200000 60.507834 +11.900000 -1.100000 59.206958 +11.900000 -1.000000 57.926082 +11.900000 -0.900000 56.665206 +11.900000 -0.800000 55.424330 +11.900000 -0.700000 54.203454 +11.900000 -0.600000 53.002578 +11.900000 -0.500000 51.821702 +11.900000 -0.400000 50.660826 +11.900000 -0.300000 49.519950 +11.900000 -0.200000 48.399074 +11.900000 -0.100000 47.298198 +11.900000 -0.000000 46.217322 +11.900000 0.100000 45.156446 +11.900000 0.200000 44.115570 +11.900000 0.300000 43.094694 +11.900000 0.400000 42.093818 +11.900000 0.500000 41.112942 +11.900000 0.600000 40.152066 +11.900000 0.700000 39.211190 +11.900000 0.800000 38.290314 +11.900000 0.900000 37.389438 +11.900000 1.000000 36.508562 +11.900000 1.100000 35.647686 +11.900000 1.200000 34.806810 +11.900000 1.300000 33.985934 +11.900000 1.400000 33.185058 +11.900000 1.500000 32.404182 +11.900000 1.600000 31.643306 +11.900000 1.700000 30.902430 +11.900000 1.800000 30.181554 +11.900000 1.900000 29.480677 +11.900000 2.000000 28.799801 +11.900000 2.100000 28.138925 +11.900000 2.200000 27.498049 +11.900000 2.300000 26.877173 +11.900000 2.400000 26.276297 +11.900000 2.500000 25.695421 +11.900000 2.600000 25.134545 +11.900000 2.700000 24.593669 +11.900000 2.800000 24.072793 +11.900000 2.900000 23.571917 +11.900000 3.000000 23.091041 +11.900000 3.100000 22.630165 +11.900000 3.200000 22.189289 +11.900000 3.300000 21.768413 +11.900000 3.400000 21.367537 +11.900000 3.500000 20.986661 +11.900000 3.600000 20.625785 +11.900000 3.700000 20.284909 +11.900000 3.800000 19.964033 +11.900000 3.900000 19.663157 +11.900000 4.000000 19.382281 +11.900000 4.100000 19.121405 +11.900000 4.200000 18.880529 +11.900000 4.300000 18.659653 +11.900000 4.400000 18.458777 +11.900000 4.500000 18.277901 +11.900000 4.600000 18.117025 +11.900000 4.700000 17.976149 +11.900000 4.800000 17.855273 +11.900000 4.900000 17.754397 +11.900000 5.000000 17.673521 +11.900000 5.100000 17.612645 +11.900000 5.200000 17.571769 +11.900000 5.300000 17.550893 +11.900000 5.400000 17.550017 +11.900000 5.500000 17.569141 +11.900000 5.600000 17.608265 +11.900000 5.700000 17.667389 +11.900000 5.800000 17.746513 +11.900000 5.900000 17.845637 +11.900000 6.000000 17.964761 +11.900000 6.100000 18.103885 +11.900000 6.200000 18.263009 +11.900000 6.300000 18.442133 +11.900000 6.400000 18.641256 +11.900000 6.500000 18.860380 +11.900000 6.600000 19.099504 +11.900000 6.700000 19.358628 +11.900000 6.800000 19.637752 +11.900000 6.900000 19.936876 +11.900000 7.000000 20.256000 +11.900000 7.100000 20.595124 +11.900000 7.200000 20.954248 +11.900000 7.300000 21.333372 +11.900000 7.400000 21.732496 +11.900000 7.500000 22.151620 +11.900000 7.600000 22.590744 +11.900000 7.700000 23.049868 +11.900000 7.800000 23.528992 +11.900000 7.900000 24.028116 +11.900000 8.000000 24.547240 +11.900000 8.100000 25.086364 +11.900000 8.200000 25.645488 +11.900000 8.300000 26.224612 +11.900000 8.400000 26.823736 +11.900000 8.500000 27.442860 +11.900000 8.600000 28.081984 +11.900000 8.700000 28.741108 +11.900000 8.800000 29.420232 +11.900000 8.900000 30.119356 +11.900000 9.000000 30.838480 +11.900000 9.100000 31.577604 +11.900000 9.200000 32.336728 +11.900000 9.300000 33.115852 +11.900000 9.400000 33.914976 +11.900000 9.500000 34.734100 +11.900000 9.600000 35.573224 +11.900000 9.700000 36.432348 +11.900000 9.800000 37.311472 +11.900000 9.900000 38.210596 +11.900000 10.000000 39.129720 +11.900000 10.100000 40.068844 +11.900000 10.200000 41.027968 +11.900000 10.300000 42.007092 +11.900000 10.400000 43.006216 +11.900000 10.500000 44.025340 +11.900000 10.600000 45.064464 +11.900000 10.700000 46.123588 +11.900000 10.800000 47.202711 +11.900000 10.900000 48.301835 +11.900000 11.000000 49.420959 +11.900000 11.100000 50.560083 +11.900000 11.200000 51.719207 +11.900000 11.300000 52.898331 +11.900000 11.400000 54.097455 +11.900000 11.500000 55.316579 +11.900000 11.600000 56.555703 +11.900000 11.700000 57.814827 +11.900000 11.800000 59.093951 +11.900000 11.900000 60.393075 +11.900000 12.000000 61.712199 +11.900000 12.100000 63.051323 +11.900000 12.200000 64.410447 +11.900000 12.300000 65.789571 +11.900000 12.400000 67.188695 +11.900000 12.500000 68.607819 +11.900000 12.600000 70.046943 +11.900000 12.700000 71.506067 +11.900000 12.800000 72.985191 +11.900000 12.900000 74.484315 +11.900000 13.000000 76.003439 +11.900000 13.100000 77.542563 +11.900000 13.200000 79.101687 +11.900000 13.300000 80.680811 +11.900000 13.400000 82.279935 +11.900000 13.500000 83.899059 +11.900000 13.600000 85.538183 +11.900000 13.700000 87.197307 +11.900000 13.800000 88.876431 +11.900000 13.900000 90.575555 +11.900000 14.000000 92.294679 +11.900000 14.100000 94.033803 +11.900000 14.200000 95.792927 +11.900000 14.300000 97.572051 +11.900000 14.400000 99.371175 +11.900000 14.500000 101.190299 +11.900000 14.600000 103.029423 +11.900000 14.700000 104.888547 +11.900000 14.800000 106.767671 +11.900000 14.900000 108.666795 +11.900000 15.000000 110.585919 + +12.000000 -5.000000 128.436296 +12.000000 -4.900000 126.345500 +12.000000 -4.800000 124.274705 +12.000000 -4.700000 122.223910 +12.000000 -4.600000 120.193115 +12.000000 -4.500000 118.182319 +12.000000 -4.400000 116.191524 +12.000000 -4.300000 114.220729 +12.000000 -4.200000 112.269934 +12.000000 -4.100000 110.339139 +12.000000 -4.000000 108.428343 +12.000000 -3.900000 106.537548 +12.000000 -3.800000 104.666753 +12.000000 -3.700000 102.815958 +12.000000 -3.600000 100.985162 +12.000000 -3.500000 99.174367 +12.000000 -3.400000 97.383572 +12.000000 -3.300000 95.612777 +12.000000 -3.200000 93.861982 +12.000000 -3.100000 92.131186 +12.000000 -3.000000 90.420391 +12.000000 -2.900000 88.729596 +12.000000 -2.800000 87.058801 +12.000000 -2.700000 85.408005 +12.000000 -2.600000 83.777210 +12.000000 -2.500000 82.166415 +12.000000 -2.400000 80.575620 +12.000000 -2.300000 79.004824 +12.000000 -2.200000 77.454029 +12.000000 -2.100000 75.923234 +12.000000 -2.000000 74.412439 +12.000000 -1.900000 72.921644 +12.000000 -1.800000 71.450848 +12.000000 -1.700000 70.000053 +12.000000 -1.600000 68.569258 +12.000000 -1.500000 67.158463 +12.000000 -1.400000 65.767667 +12.000000 -1.300000 64.396872 +12.000000 -1.200000 63.046077 +12.000000 -1.100000 61.715282 +12.000000 -1.000000 60.404486 +12.000000 -0.900000 59.113691 +12.000000 -0.800000 57.842896 +12.000000 -0.700000 56.592101 +12.000000 -0.600000 55.361306 +12.000000 -0.500000 54.150510 +12.000000 -0.400000 52.959715 +12.000000 -0.300000 51.788920 +12.000000 -0.200000 50.638125 +12.000000 -0.100000 49.507329 +12.000000 -0.000000 48.396534 +12.000000 0.100000 47.305739 +12.000000 0.200000 46.234944 +12.000000 0.300000 45.184148 +12.000000 0.400000 44.153353 +12.000000 0.500000 43.142558 +12.000000 0.600000 42.151763 +12.000000 0.700000 41.180968 +12.000000 0.800000 40.230172 +12.000000 0.900000 39.299377 +12.000000 1.000000 38.388582 +12.000000 1.100000 37.497787 +12.000000 1.200000 36.626991 +12.000000 1.300000 35.776196 +12.000000 1.400000 34.945401 +12.000000 1.500000 34.134606 +12.000000 1.600000 33.343811 +12.000000 1.700000 32.573015 +12.000000 1.800000 31.822220 +12.000000 1.900000 31.091425 +12.000000 2.000000 30.380630 +12.000000 2.100000 29.689834 +12.000000 2.200000 29.019039 +12.000000 2.300000 28.368244 +12.000000 2.400000 27.737449 +12.000000 2.500000 27.126653 +12.000000 2.600000 26.535858 +12.000000 2.700000 25.965063 +12.000000 2.800000 25.414268 +12.000000 2.900000 24.883473 +12.000000 3.000000 24.372677 +12.000000 3.100000 23.881882 +12.000000 3.200000 23.411087 +12.000000 3.300000 22.960292 +12.000000 3.400000 22.529496 +12.000000 3.500000 22.118701 +12.000000 3.600000 21.727906 +12.000000 3.700000 21.357111 +12.000000 3.800000 21.006315 +12.000000 3.900000 20.675520 +12.000000 4.000000 20.364725 +12.000000 4.100000 20.073930 +12.000000 4.200000 19.803135 +12.000000 4.300000 19.552339 +12.000000 4.400000 19.321544 +12.000000 4.500000 19.110749 +12.000000 4.600000 18.919954 +12.000000 4.700000 18.749158 +12.000000 4.800000 18.598363 +12.000000 4.900000 18.467568 +12.000000 5.000000 18.356773 +12.000000 5.100000 18.265977 +12.000000 5.200000 18.195182 +12.000000 5.300000 18.144387 +12.000000 5.400000 18.113592 +12.000000 5.500000 18.102797 +12.000000 5.600000 18.112001 +12.000000 5.700000 18.141206 +12.000000 5.800000 18.190411 +12.000000 5.900000 18.259616 +12.000000 6.000000 18.348820 +12.000000 6.100000 18.458025 +12.000000 6.200000 18.587230 +12.000000 6.300000 18.736435 +12.000000 6.400000 18.905640 +12.000000 6.500000 19.094844 +12.000000 6.600000 19.304049 +12.000000 6.700000 19.533254 +12.000000 6.800000 19.782459 +12.000000 6.900000 20.051663 +12.000000 7.000000 20.340868 +12.000000 7.100000 20.650073 +12.000000 7.200000 20.979278 +12.000000 7.300000 21.328482 +12.000000 7.400000 21.697687 +12.000000 7.500000 22.086892 +12.000000 7.600000 22.496097 +12.000000 7.700000 22.925302 +12.000000 7.800000 23.374506 +12.000000 7.900000 23.843711 +12.000000 8.000000 24.332916 +12.000000 8.100000 24.842121 +12.000000 8.200000 25.371325 +12.000000 8.300000 25.920530 +12.000000 8.400000 26.489735 +12.000000 8.500000 27.078940 +12.000000 8.600000 27.688144 +12.000000 8.700000 28.317349 +12.000000 8.800000 28.966554 +12.000000 8.900000 29.635759 +12.000000 9.000000 30.324964 +12.000000 9.100000 31.034168 +12.000000 9.200000 31.763373 +12.000000 9.300000 32.512578 +12.000000 9.400000 33.281783 +12.000000 9.500000 34.070987 +12.000000 9.600000 34.880192 +12.000000 9.700000 35.709397 +12.000000 9.800000 36.558602 +12.000000 9.900000 37.427806 +12.000000 10.000000 38.317011 +12.000000 10.100000 39.226216 +12.000000 10.200000 40.155421 +12.000000 10.300000 41.104626 +12.000000 10.400000 42.073830 +12.000000 10.500000 43.063035 +12.000000 10.600000 44.072240 +12.000000 10.700000 45.101445 +12.000000 10.800000 46.150649 +12.000000 10.900000 47.219854 +12.000000 11.000000 48.309059 +12.000000 11.100000 49.418264 +12.000000 11.200000 50.547469 +12.000000 11.300000 51.696673 +12.000000 11.400000 52.865878 +12.000000 11.500000 54.055083 +12.000000 11.600000 55.264288 +12.000000 11.700000 56.493492 +12.000000 11.800000 57.742697 +12.000000 11.900000 59.011902 +12.000000 12.000000 60.301107 +12.000000 12.100000 61.610311 +12.000000 12.200000 62.939516 +12.000000 12.300000 64.288721 +12.000000 12.400000 65.657926 +12.000000 12.500000 67.047131 +12.000000 12.600000 68.456335 +12.000000 12.700000 69.885540 +12.000000 12.800000 71.334745 +12.000000 12.900000 72.803950 +12.000000 13.000000 74.293154 +12.000000 13.100000 75.802359 +12.000000 13.200000 77.331564 +12.000000 13.300000 78.880769 +12.000000 13.400000 80.449973 +12.000000 13.500000 82.039178 +12.000000 13.600000 83.648383 +12.000000 13.700000 85.277588 +12.000000 13.800000 86.926793 +12.000000 13.900000 88.595997 +12.000000 14.000000 90.285202 +12.000000 14.100000 91.994407 +12.000000 14.200000 93.723612 +12.000000 14.300000 95.472816 +12.000000 14.400000 97.242021 +12.000000 14.500000 99.031226 +12.000000 14.600000 100.840431 +12.000000 14.700000 102.669635 +12.000000 14.800000 104.518840 +12.000000 14.900000 106.388045 +12.000000 15.000000 108.277250 + +12.100000 -5.000000 132.130324 +12.100000 -4.900000 130.009092 +12.100000 -4.800000 127.907861 +12.100000 -4.700000 125.826630 +12.100000 -4.600000 123.765399 +12.100000 -4.500000 121.724168 +12.100000 -4.400000 119.702937 +12.100000 -4.300000 117.701705 +12.100000 -4.200000 115.720474 +12.100000 -4.100000 113.759243 +12.100000 -4.000000 111.818012 +12.100000 -3.900000 109.896781 +12.100000 -3.800000 107.995550 +12.100000 -3.700000 106.114318 +12.100000 -3.600000 104.253087 +12.100000 -3.500000 102.411856 +12.100000 -3.400000 100.590625 +12.100000 -3.300000 98.789394 +12.100000 -3.200000 97.008162 +12.100000 -3.100000 95.246931 +12.100000 -3.000000 93.505700 +12.100000 -2.900000 91.784469 +12.100000 -2.800000 90.083238 +12.100000 -2.700000 88.402007 +12.100000 -2.600000 86.740775 +12.100000 -2.500000 85.099544 +12.100000 -2.400000 83.478313 +12.100000 -2.300000 81.877082 +12.100000 -2.200000 80.295851 +12.100000 -2.100000 78.734620 +12.100000 -2.000000 77.193388 +12.100000 -1.900000 75.672157 +12.100000 -1.800000 74.170926 +12.100000 -1.700000 72.689695 +12.100000 -1.600000 71.228464 +12.100000 -1.500000 69.787233 +12.100000 -1.400000 68.366001 +12.100000 -1.300000 66.964770 +12.100000 -1.200000 65.583539 +12.100000 -1.100000 64.222308 +12.100000 -1.000000 62.881077 +12.100000 -0.900000 61.559845 +12.100000 -0.800000 60.258614 +12.100000 -0.700000 58.977383 +12.100000 -0.600000 57.716152 +12.100000 -0.500000 56.474921 +12.100000 -0.400000 55.253690 +12.100000 -0.300000 54.052458 +12.100000 -0.200000 52.871227 +12.100000 -0.100000 51.709996 +12.100000 -0.000000 50.568765 +12.100000 0.100000 49.447534 +12.100000 0.200000 48.346303 +12.100000 0.300000 47.265071 +12.100000 0.400000 46.203840 +12.100000 0.500000 45.162609 +12.100000 0.600000 44.141378 +12.100000 0.700000 43.140147 +12.100000 0.800000 42.158916 +12.100000 0.900000 41.197684 +12.100000 1.000000 40.256453 +12.100000 1.100000 39.335222 +12.100000 1.200000 38.433991 +12.100000 1.300000 37.552760 +12.100000 1.400000 36.691528 +12.100000 1.500000 35.850297 +12.100000 1.600000 35.029066 +12.100000 1.700000 34.227835 +12.100000 1.800000 33.446604 +12.100000 1.900000 32.685373 +12.100000 2.000000 31.944141 +12.100000 2.100000 31.222910 +12.100000 2.200000 30.521679 +12.100000 2.300000 29.840448 +12.100000 2.400000 29.179217 +12.100000 2.500000 28.537986 +12.100000 2.600000 27.916754 +12.100000 2.700000 27.315523 +12.100000 2.800000 26.734292 +12.100000 2.900000 26.173061 +12.100000 3.000000 25.631830 +12.100000 3.100000 25.110599 +12.100000 3.200000 24.609367 +12.100000 3.300000 24.128136 +12.100000 3.400000 23.666905 +12.100000 3.500000 23.225674 +12.100000 3.600000 22.804443 +12.100000 3.700000 22.403211 +12.100000 3.800000 22.021980 +12.100000 3.900000 21.660749 +12.100000 4.000000 21.319518 +12.100000 4.100000 20.998287 +12.100000 4.200000 20.697056 +12.100000 4.300000 20.415824 +12.100000 4.400000 20.154593 +12.100000 4.500000 19.913362 +12.100000 4.600000 19.692131 +12.100000 4.700000 19.490900 +12.100000 4.800000 19.309669 +12.100000 4.900000 19.148437 +12.100000 5.000000 19.007206 +12.100000 5.100000 18.885975 +12.100000 5.200000 18.784744 +12.100000 5.300000 18.703513 +12.100000 5.400000 18.642282 +12.100000 5.500000 18.601050 +12.100000 5.600000 18.579819 +12.100000 5.700000 18.578588 +12.100000 5.800000 18.597357 +12.100000 5.900000 18.636126 +12.100000 6.000000 18.694894 +12.100000 6.100000 18.773663 +12.100000 6.200000 18.872432 +12.100000 6.300000 18.991201 +12.100000 6.400000 19.129970 +12.100000 6.500000 19.288739 +12.100000 6.600000 19.467507 +12.100000 6.700000 19.666276 +12.100000 6.800000 19.885045 +12.100000 6.900000 20.123814 +12.100000 7.000000 20.382583 +12.100000 7.100000 20.661352 +12.100000 7.200000 20.960120 +12.100000 7.300000 21.278889 +12.100000 7.400000 21.617658 +12.100000 7.500000 21.976427 +12.100000 7.600000 22.355196 +12.100000 7.700000 22.753965 +12.100000 7.800000 23.172733 +12.100000 7.900000 23.611502 +12.100000 8.000000 24.070271 +12.100000 8.100000 24.549040 +12.100000 8.200000 25.047809 +12.100000 8.300000 25.566577 +12.100000 8.400000 26.105346 +12.100000 8.500000 26.664115 +12.100000 8.600000 27.242884 +12.100000 8.700000 27.841653 +12.100000 8.800000 28.460422 +12.100000 8.900000 29.099190 +12.100000 9.000000 29.757959 +12.100000 9.100000 30.436728 +12.100000 9.200000 31.135497 +12.100000 9.300000 31.854266 +12.100000 9.400000 32.593035 +12.100000 9.500000 33.351803 +12.100000 9.600000 34.130572 +12.100000 9.700000 34.929341 +12.100000 9.800000 35.748110 +12.100000 9.900000 36.586879 +12.100000 10.000000 37.445648 +12.100000 10.100000 38.324416 +12.100000 10.200000 39.223185 +12.100000 10.300000 40.141954 +12.100000 10.400000 41.080723 +12.100000 10.500000 42.039492 +12.100000 10.600000 43.018260 +12.100000 10.700000 44.017029 +12.100000 10.800000 45.035798 +12.100000 10.900000 46.074567 +12.100000 11.000000 47.133336 +12.100000 11.100000 48.212105 +12.100000 11.200000 49.310873 +12.100000 11.300000 50.429642 +12.100000 11.400000 51.568411 +12.100000 11.500000 52.727180 +12.100000 11.600000 53.905949 +12.100000 11.700000 55.104718 +12.100000 11.800000 56.323486 +12.100000 11.900000 57.562255 +12.100000 12.000000 58.821024 +12.100000 12.100000 60.099793 +12.100000 12.200000 61.398562 +12.100000 12.300000 62.717331 +12.100000 12.400000 64.056099 +12.100000 12.500000 65.414868 +12.100000 12.600000 66.793637 +12.100000 12.700000 68.192406 +12.100000 12.800000 69.611175 +12.100000 12.900000 71.049943 +12.100000 13.000000 72.508712 +12.100000 13.100000 73.987481 +12.100000 13.200000 75.486250 +12.100000 13.300000 77.005019 +12.100000 13.400000 78.543788 +12.100000 13.500000 80.102556 +12.100000 13.600000 81.681325 +12.100000 13.700000 83.280094 +12.100000 13.800000 84.898863 +12.100000 13.900000 86.537632 +12.100000 14.000000 88.196401 +12.100000 14.100000 89.875169 +12.100000 14.200000 91.573938 +12.100000 14.300000 93.292707 +12.100000 14.400000 95.031476 +12.100000 14.500000 96.790245 +12.100000 14.600000 98.569014 +12.100000 14.700000 100.367782 +12.100000 14.800000 102.186551 +12.100000 14.900000 104.025320 +12.100000 15.000000 105.884089 + +12.200000 -5.000000 135.840831 +12.200000 -4.900000 133.688647 +12.200000 -4.800000 131.556463 +12.200000 -4.700000 129.444280 +12.200000 -4.600000 127.352096 +12.200000 -4.500000 125.279912 +12.200000 -4.400000 123.227728 +12.200000 -4.300000 121.195544 +12.200000 -4.200000 119.183360 +12.200000 -4.100000 117.191176 +12.200000 -4.000000 115.218993 +12.200000 -3.900000 113.266809 +12.200000 -3.800000 111.334625 +12.200000 -3.700000 109.422441 +12.200000 -3.600000 107.530257 +12.200000 -3.500000 105.658073 +12.200000 -3.400000 103.805889 +12.200000 -3.300000 101.973706 +12.200000 -3.200000 100.161522 +12.200000 -3.100000 98.369338 +12.200000 -3.000000 96.597154 +12.200000 -2.900000 94.844970 +12.200000 -2.800000 93.112786 +12.200000 -2.700000 91.400602 +12.200000 -2.600000 89.708419 +12.200000 -2.500000 88.036235 +12.200000 -2.400000 86.384051 +12.200000 -2.300000 84.751867 +12.200000 -2.200000 83.139683 +12.200000 -2.100000 81.547499 +12.200000 -2.000000 79.975315 +12.200000 -1.900000 78.423132 +12.200000 -1.800000 76.890948 +12.200000 -1.700000 75.378764 +12.200000 -1.600000 73.886580 +12.200000 -1.500000 72.414396 +12.200000 -1.400000 70.962212 +12.200000 -1.300000 69.530028 +12.200000 -1.200000 68.117845 +12.200000 -1.100000 66.725661 +12.200000 -1.000000 65.353477 +12.200000 -0.900000 64.001293 +12.200000 -0.800000 62.669109 +12.200000 -0.700000 61.356925 +12.200000 -0.600000 60.064741 +12.200000 -0.500000 58.792558 +12.200000 -0.400000 57.540374 +12.200000 -0.300000 56.308190 +12.200000 -0.200000 55.096006 +12.200000 -0.100000 53.903822 +12.200000 -0.000000 52.731638 +12.200000 0.100000 51.579454 +12.200000 0.200000 50.447271 +12.200000 0.300000 49.335087 +12.200000 0.400000 48.242903 +12.200000 0.500000 47.170719 +12.200000 0.600000 46.118535 +12.200000 0.700000 45.086351 +12.200000 0.800000 44.074167 +12.200000 0.900000 43.081984 +12.200000 1.000000 42.109800 +12.200000 1.100000 41.157616 +12.200000 1.200000 40.225432 +12.200000 1.300000 39.313248 +12.200000 1.400000 38.421064 +12.200000 1.500000 37.548880 +12.200000 1.600000 36.696697 +12.200000 1.700000 35.864513 +12.200000 1.800000 35.052329 +12.200000 1.900000 34.260145 +12.200000 2.000000 33.487961 +12.200000 2.100000 32.735777 +12.200000 2.200000 32.003593 +12.200000 2.300000 31.291410 +12.200000 2.400000 30.599226 +12.200000 2.500000 29.927042 +12.200000 2.600000 29.274858 +12.200000 2.700000 28.642674 +12.200000 2.800000 28.030490 +12.200000 2.900000 27.438306 +12.200000 3.000000 26.866123 +12.200000 3.100000 26.313939 +12.200000 3.200000 25.781755 +12.200000 3.300000 25.269571 +12.200000 3.400000 24.777387 +12.200000 3.500000 24.305203 +12.200000 3.600000 23.853019 +12.200000 3.700000 23.420836 +12.200000 3.800000 23.008652 +12.200000 3.900000 22.616468 +12.200000 4.000000 22.244284 +12.200000 4.100000 21.892100 +12.200000 4.200000 21.559916 +12.200000 4.300000 21.247732 +12.200000 4.400000 20.955549 +12.200000 4.500000 20.683365 +12.200000 4.600000 20.431181 +12.200000 4.700000 20.198997 +12.200000 4.800000 19.986813 +12.200000 4.900000 19.794629 +12.200000 5.000000 19.622446 +12.200000 5.100000 19.470262 +12.200000 5.200000 19.338078 +12.200000 5.300000 19.225894 +12.200000 5.400000 19.133710 +12.200000 5.500000 19.061526 +12.200000 5.600000 19.009342 +12.200000 5.700000 18.977159 +12.200000 5.800000 18.964975 +12.200000 5.900000 18.972791 +12.200000 6.000000 19.000607 +12.200000 6.100000 19.048423 +12.200000 6.200000 19.116239 +12.200000 6.300000 19.204055 +12.200000 6.400000 19.311872 +12.200000 6.500000 19.439688 +12.200000 6.600000 19.587504 +12.200000 6.700000 19.755320 +12.200000 6.800000 19.943136 +12.200000 6.900000 20.150952 +12.200000 7.000000 20.378768 +12.200000 7.100000 20.626585 +12.200000 7.200000 20.894401 +12.200000 7.300000 21.182217 +12.200000 7.400000 21.490033 +12.200000 7.500000 21.817849 +12.200000 7.600000 22.165665 +12.200000 7.700000 22.533481 +12.200000 7.800000 22.921298 +12.200000 7.900000 23.329114 +12.200000 8.000000 23.756930 +12.200000 8.100000 24.204746 +12.200000 8.200000 24.672562 +12.200000 8.300000 25.160378 +12.200000 8.400000 25.668194 +12.200000 8.500000 26.196011 +12.200000 8.600000 26.743827 +12.200000 8.700000 27.311643 +12.200000 8.800000 27.899459 +12.200000 8.900000 28.507275 +12.200000 9.000000 29.135091 +12.200000 9.100000 29.782907 +12.200000 9.200000 30.450724 +12.200000 9.300000 31.138540 +12.200000 9.400000 31.846356 +12.200000 9.500000 32.574172 +12.200000 9.600000 33.321988 +12.200000 9.700000 34.089804 +12.200000 9.800000 34.877620 +12.200000 9.900000 35.685437 +12.200000 10.000000 36.513253 +12.200000 10.100000 37.361069 +12.200000 10.200000 38.228885 +12.200000 10.300000 39.116701 +12.200000 10.400000 40.024517 +12.200000 10.500000 40.952333 +12.200000 10.600000 41.900150 +12.200000 10.700000 42.867966 +12.200000 10.800000 43.855782 +12.200000 10.900000 44.863598 +12.200000 11.000000 45.891414 +12.200000 11.100000 46.939230 +12.200000 11.200000 48.007046 +12.200000 11.300000 49.094863 +12.200000 11.400000 50.202679 +12.200000 11.500000 51.330495 +12.200000 11.600000 52.478311 +12.200000 11.700000 53.646127 +12.200000 11.800000 54.833943 +12.200000 11.900000 56.041759 +12.200000 12.000000 57.269576 +12.200000 12.100000 58.517392 +12.200000 12.200000 59.785208 +12.200000 12.300000 61.073024 +12.200000 12.400000 62.380840 +12.200000 12.500000 63.708656 +12.200000 12.600000 65.056472 +12.200000 12.700000 66.424289 +12.200000 12.800000 67.812105 +12.200000 12.900000 69.219921 +12.200000 13.000000 70.647737 +12.200000 13.100000 72.095553 +12.200000 13.200000 73.563369 +12.200000 13.300000 75.051185 +12.200000 13.400000 76.559002 +12.200000 13.500000 78.086818 +12.200000 13.600000 79.634634 +12.200000 13.700000 81.202450 +12.200000 13.800000 82.790266 +12.200000 13.900000 84.398082 +12.200000 14.000000 86.025898 +12.200000 14.100000 87.673715 +12.200000 14.200000 89.341531 +12.200000 14.300000 91.029347 +12.200000 14.400000 92.737163 +12.200000 14.500000 94.464979 +12.200000 14.600000 96.212795 +12.200000 14.700000 97.980611 +12.200000 14.800000 99.768428 +12.200000 14.900000 101.576244 +12.200000 15.000000 103.404060 + +12.300000 -5.000000 139.566339 +12.300000 -4.900000 137.382686 +12.300000 -4.800000 135.219032 +12.300000 -4.700000 133.075379 +12.300000 -4.600000 130.951726 +12.300000 -4.500000 128.848072 +12.300000 -4.400000 126.764419 +12.300000 -4.300000 124.700766 +12.300000 -4.200000 122.657113 +12.300000 -4.100000 120.633459 +12.300000 -4.000000 118.629806 +12.300000 -3.900000 116.646153 +12.300000 -3.800000 114.682499 +12.300000 -3.700000 112.738846 +12.300000 -3.600000 110.815193 +12.300000 -3.500000 108.911540 +12.300000 -3.400000 107.027886 +12.300000 -3.300000 105.164233 +12.300000 -3.200000 103.320580 +12.300000 -3.100000 101.496927 +12.300000 -3.000000 99.693273 +12.300000 -2.900000 97.909620 +12.300000 -2.800000 96.145967 +12.300000 -2.700000 94.402313 +12.300000 -2.600000 92.678660 +12.300000 -2.500000 90.975007 +12.300000 -2.400000 89.291354 +12.300000 -2.300000 87.627700 +12.300000 -2.200000 85.984047 +12.300000 -2.100000 84.360394 +12.300000 -2.000000 82.756740 +12.300000 -1.900000 81.173087 +12.300000 -1.800000 79.609434 +12.300000 -1.700000 78.065781 +12.300000 -1.600000 76.542127 +12.300000 -1.500000 75.038474 +12.300000 -1.400000 73.554821 +12.300000 -1.300000 72.091168 +12.300000 -1.200000 70.647514 +12.300000 -1.100000 69.223861 +12.300000 -1.000000 67.820208 +12.300000 -0.900000 66.436554 +12.300000 -0.800000 65.072901 +12.300000 -0.700000 63.729248 +12.300000 -0.600000 62.405595 +12.300000 -0.500000 61.101941 +12.300000 -0.400000 59.818288 +12.300000 -0.300000 58.554635 +12.300000 -0.200000 57.310982 +12.300000 -0.100000 56.087328 +12.300000 -0.000000 54.883675 +12.300000 0.100000 53.700022 +12.300000 0.200000 52.536368 +12.300000 0.300000 51.392715 +12.300000 0.400000 50.269062 +12.300000 0.500000 49.165409 +12.300000 0.600000 48.081755 +12.300000 0.700000 47.018102 +12.300000 0.800000 45.974449 +12.300000 0.900000 44.950795 +12.300000 1.000000 43.947142 +12.300000 1.100000 42.963489 +12.300000 1.200000 41.999836 +12.300000 1.300000 41.056182 +12.300000 1.400000 40.132529 +12.300000 1.500000 39.228876 +12.300000 1.600000 38.345223 +12.300000 1.700000 37.481569 +12.300000 1.800000 36.637916 +12.300000 1.900000 35.814263 +12.300000 2.000000 35.010609 +12.300000 2.100000 34.226956 +12.300000 2.200000 33.463303 +12.300000 2.300000 32.719650 +12.300000 2.400000 31.995996 +12.300000 2.500000 31.292343 +12.300000 2.600000 30.608690 +12.300000 2.700000 29.945036 +12.300000 2.800000 29.301383 +12.300000 2.900000 28.677730 +12.300000 3.000000 28.074077 +12.300000 3.100000 27.490423 +12.300000 3.200000 26.926770 +12.300000 3.300000 26.383117 +12.300000 3.400000 25.859464 +12.300000 3.500000 25.355810 +12.300000 3.600000 24.872157 +12.300000 3.700000 24.408504 +12.300000 3.800000 23.964850 +12.300000 3.900000 23.541197 +12.300000 4.000000 23.137544 +12.300000 4.100000 22.753891 +12.300000 4.200000 22.390237 +12.300000 4.300000 22.046584 +12.300000 4.400000 21.722931 +12.300000 4.500000 21.419277 +12.300000 4.600000 21.135624 +12.300000 4.700000 20.871971 +12.300000 4.800000 20.628318 +12.300000 4.900000 20.404664 +12.300000 5.000000 20.201011 +12.300000 5.100000 20.017358 +12.300000 5.200000 19.853705 +12.300000 5.300000 19.710051 +12.300000 5.400000 19.586398 +12.300000 5.500000 19.482745 +12.300000 5.600000 19.399091 +12.300000 5.700000 19.335438 +12.300000 5.800000 19.291785 +12.300000 5.900000 19.268132 +12.300000 6.000000 19.264478 +12.300000 6.100000 19.280825 +12.300000 6.200000 19.317172 +12.300000 6.300000 19.373518 +12.300000 6.400000 19.449865 +12.300000 6.500000 19.546212 +12.300000 6.600000 19.662559 +12.300000 6.700000 19.798905 +12.300000 6.800000 19.955252 +12.300000 6.900000 20.131599 +12.300000 7.000000 20.327946 +12.300000 7.100000 20.544292 +12.300000 7.200000 20.780639 +12.300000 7.300000 21.036986 +12.300000 7.400000 21.313332 +12.300000 7.500000 21.609679 +12.300000 7.600000 21.926026 +12.300000 7.700000 22.262373 +12.300000 7.800000 22.618719 +12.300000 7.900000 22.995066 +12.300000 8.000000 23.391413 +12.300000 8.100000 23.807759 +12.300000 8.200000 24.244106 +12.300000 8.300000 24.700453 +12.300000 8.400000 25.176800 +12.300000 8.500000 25.673146 +12.300000 8.600000 26.189493 +12.300000 8.700000 26.725840 +12.300000 8.800000 27.282187 +12.300000 8.900000 27.858533 +12.300000 9.000000 28.454880 +12.300000 9.100000 29.071227 +12.300000 9.200000 29.707573 +12.300000 9.300000 30.363920 +12.300000 9.400000 31.040267 +12.300000 9.500000 31.736614 +12.300000 9.600000 32.452960 +12.300000 9.700000 33.189307 +12.300000 9.800000 33.945654 +12.300000 9.900000 34.722000 +12.300000 10.000000 35.518347 +12.300000 10.100000 36.334694 +12.300000 10.200000 37.171041 +12.300000 10.300000 38.027387 +12.300000 10.400000 38.903734 +12.300000 10.500000 39.800081 +12.300000 10.600000 40.716428 +12.300000 10.700000 41.652774 +12.300000 10.800000 42.609121 +12.300000 10.900000 43.585468 +12.300000 11.000000 44.581814 +12.300000 11.100000 45.598161 +12.300000 11.200000 46.634508 +12.300000 11.300000 47.690855 +12.300000 11.400000 48.767201 +12.300000 11.500000 49.863548 +12.300000 11.600000 50.979895 +12.300000 11.700000 52.116241 +12.300000 11.800000 53.272588 +12.300000 11.900000 54.448935 +12.300000 12.000000 55.645282 +12.300000 12.100000 56.861628 +12.300000 12.200000 58.097975 +12.300000 12.300000 59.354322 +12.300000 12.400000 60.630669 +12.300000 12.500000 61.927015 +12.300000 12.600000 63.243362 +12.300000 12.700000 64.579709 +12.300000 12.800000 65.936055 +12.300000 12.900000 67.312402 +12.300000 13.000000 68.708749 +12.300000 13.100000 70.125096 +12.300000 13.200000 71.561442 +12.300000 13.300000 73.017789 +12.300000 13.400000 74.494136 +12.300000 13.500000 75.990482 +12.300000 13.600000 77.506829 +12.300000 13.700000 79.043176 +12.300000 13.800000 80.599523 +12.300000 13.900000 82.175869 +12.300000 14.000000 83.772216 +12.300000 14.100000 85.388563 +12.300000 14.200000 87.024910 +12.300000 14.300000 88.681256 +12.300000 14.400000 90.357603 +12.300000 14.500000 92.053950 +12.300000 14.600000 93.770296 +12.300000 14.700000 95.506643 +12.300000 14.800000 97.262990 +12.300000 14.900000 99.039337 +12.300000 15.000000 100.835683 + +12.400000 -5.000000 143.306302 +12.400000 -4.900000 141.090663 +12.400000 -4.800000 138.895023 +12.400000 -4.700000 136.719384 +12.400000 -4.600000 134.563744 +12.400000 -4.500000 132.428105 +12.400000 -4.400000 130.312465 +12.400000 -4.300000 128.216826 +12.400000 -4.200000 126.141187 +12.400000 -4.100000 124.085547 +12.400000 -4.000000 122.049908 +12.400000 -3.900000 120.034268 +12.400000 -3.800000 118.038629 +12.400000 -3.700000 116.062989 +12.400000 -3.600000 114.107350 +12.400000 -3.500000 112.171711 +12.400000 -3.400000 110.256071 +12.400000 -3.300000 108.360432 +12.400000 -3.200000 106.484792 +12.400000 -3.100000 104.629153 +12.400000 -3.000000 102.793513 +12.400000 -2.900000 100.977874 +12.400000 -2.800000 99.182235 +12.400000 -2.700000 97.406595 +12.400000 -2.600000 95.650956 +12.400000 -2.500000 93.915316 +12.400000 -2.400000 92.199677 +12.400000 -2.300000 90.504037 +12.400000 -2.200000 88.828398 +12.400000 -2.100000 87.172758 +12.400000 -2.000000 85.537119 +12.400000 -1.900000 83.921480 +12.400000 -1.800000 82.325840 +12.400000 -1.700000 80.750201 +12.400000 -1.600000 79.194561 +12.400000 -1.500000 77.658922 +12.400000 -1.400000 76.143282 +12.400000 -1.300000 74.647643 +12.400000 -1.200000 73.172004 +12.400000 -1.100000 71.716364 +12.400000 -1.000000 70.280725 +12.400000 -0.900000 68.865085 +12.400000 -0.800000 67.469446 +12.400000 -0.700000 66.093806 +12.400000 -0.600000 64.738167 +12.400000 -0.500000 63.402527 +12.400000 -0.400000 62.086888 +12.400000 -0.300000 60.791249 +12.400000 -0.200000 59.515609 +12.400000 -0.100000 58.259970 +12.400000 -0.000000 57.024330 +12.400000 0.100000 55.808691 +12.400000 0.200000 54.613051 +12.400000 0.300000 53.437412 +12.400000 0.400000 52.281773 +12.400000 0.500000 51.146133 +12.400000 0.600000 50.030494 +12.400000 0.700000 48.934854 +12.400000 0.800000 47.859215 +12.400000 0.900000 46.803575 +12.400000 1.000000 45.767936 +12.400000 1.100000 44.752296 +12.400000 1.200000 43.756657 +12.400000 1.300000 42.781018 +12.400000 1.400000 41.825378 +12.400000 1.500000 40.889739 +12.400000 1.600000 39.974099 +12.400000 1.700000 39.078460 +12.400000 1.800000 38.202820 +12.400000 1.900000 37.347181 +12.400000 2.000000 36.511542 +12.400000 2.100000 35.695902 +12.400000 2.200000 34.900263 +12.400000 2.300000 34.124623 +12.400000 2.400000 33.368984 +12.400000 2.500000 32.633344 +12.400000 2.600000 31.917705 +12.400000 2.700000 31.222065 +12.400000 2.800000 30.546426 +12.400000 2.900000 29.890787 +12.400000 3.000000 29.255147 +12.400000 3.100000 28.639508 +12.400000 3.200000 28.043868 +12.400000 3.300000 27.468229 +12.400000 3.400000 26.912589 +12.400000 3.500000 26.376950 +12.400000 3.600000 25.861311 +12.400000 3.700000 25.365671 +12.400000 3.800000 24.890032 +12.400000 3.900000 24.434392 +12.400000 4.000000 23.998753 +12.400000 4.100000 23.583113 +12.400000 4.200000 23.187474 +12.400000 4.300000 22.811835 +12.400000 4.400000 22.456195 +12.400000 4.500000 22.120556 +12.400000 4.600000 21.804916 +12.400000 4.700000 21.509277 +12.400000 4.800000 21.233637 +12.400000 4.900000 20.977998 +12.400000 5.000000 20.742358 +12.400000 5.100000 20.526719 +12.400000 5.200000 20.331080 +12.400000 5.300000 20.155440 +12.400000 5.400000 19.999801 +12.400000 5.500000 19.864161 +12.400000 5.600000 19.748522 +12.400000 5.700000 19.652882 +12.400000 5.800000 19.577243 +12.400000 5.900000 19.521604 +12.400000 6.000000 19.485964 +12.400000 6.100000 19.470325 +12.400000 6.200000 19.474685 +12.400000 6.300000 19.499046 +12.400000 6.400000 19.543406 +12.400000 6.500000 19.607767 +12.400000 6.600000 19.692127 +12.400000 6.700000 19.796488 +12.400000 6.800000 19.920849 +12.400000 6.900000 20.065209 +12.400000 7.000000 20.229570 +12.400000 7.100000 20.413930 +12.400000 7.200000 20.618291 +12.400000 7.300000 20.842651 +12.400000 7.400000 21.087012 +12.400000 7.500000 21.351373 +12.400000 7.600000 21.635733 +12.400000 7.700000 21.940094 +12.400000 7.800000 22.264454 +12.400000 7.900000 22.608815 +12.400000 8.000000 22.973175 +12.400000 8.100000 23.357536 +12.400000 8.200000 23.761896 +12.400000 8.300000 24.186257 +12.400000 8.400000 24.630618 +12.400000 8.500000 25.094978 +12.400000 8.600000 25.579339 +12.400000 8.700000 26.083699 +12.400000 8.800000 26.608060 +12.400000 8.900000 27.152420 +12.400000 9.000000 27.716781 +12.400000 9.100000 28.301142 +12.400000 9.200000 28.905502 +12.400000 9.300000 29.529863 +12.400000 9.400000 30.174223 +12.400000 9.500000 30.838584 +12.400000 9.600000 31.522944 +12.400000 9.700000 32.227305 +12.400000 9.800000 32.951666 +12.400000 9.900000 33.696026 +12.400000 10.000000 34.460387 +12.400000 10.100000 35.244747 +12.400000 10.200000 36.049108 +12.400000 10.300000 36.873468 +12.400000 10.400000 37.717829 +12.400000 10.500000 38.582189 +12.400000 10.600000 39.466550 +12.400000 10.700000 40.370911 +12.400000 10.800000 41.295271 +12.400000 10.900000 42.239632 +12.400000 11.000000 43.203992 +12.400000 11.100000 44.188353 +12.400000 11.200000 45.192713 +12.400000 11.300000 46.217074 +12.400000 11.400000 47.261435 +12.400000 11.500000 48.325795 +12.400000 11.600000 49.410156 +12.400000 11.700000 50.514516 +12.400000 11.800000 51.638877 +12.400000 11.900000 52.783237 +12.400000 12.000000 53.947598 +12.400000 12.100000 55.131958 +12.400000 12.200000 56.336319 +12.400000 12.300000 57.560680 +12.400000 12.400000 58.805040 +12.400000 12.500000 60.069401 +12.400000 12.600000 61.353761 +12.400000 12.700000 62.658122 +12.400000 12.800000 63.982482 +12.400000 12.900000 65.326843 +12.400000 13.000000 66.691204 +12.400000 13.100000 68.075564 +12.400000 13.200000 69.479925 +12.400000 13.300000 70.904285 +12.400000 13.400000 72.348646 +12.400000 13.500000 73.813006 +12.400000 13.600000 75.297367 +12.400000 13.700000 76.801727 +12.400000 13.800000 78.326088 +12.400000 13.900000 79.870449 +12.400000 14.000000 81.434809 +12.400000 14.100000 83.019170 +12.400000 14.200000 84.623530 +12.400000 14.300000 86.247891 +12.400000 14.400000 87.892251 +12.400000 14.500000 89.556612 +12.400000 14.600000 91.240973 +12.400000 14.700000 92.945333 +12.400000 14.800000 94.669694 +12.400000 14.900000 96.414054 +12.400000 15.000000 98.178415 + +12.500000 -5.000000 147.061141 +12.500000 -4.900000 144.812999 +12.500000 -4.800000 142.584857 +12.500000 -4.700000 140.376714 +12.500000 -4.600000 138.188572 +12.500000 -4.500000 136.020430 +12.500000 -4.400000 133.872287 +12.500000 -4.300000 131.744145 +12.500000 -4.200000 129.636003 +12.500000 -4.100000 127.547860 +12.500000 -4.000000 125.479718 +12.500000 -3.900000 123.431576 +12.500000 -3.800000 121.403433 +12.500000 -3.700000 119.395291 +12.500000 -3.600000 117.407149 +12.500000 -3.500000 115.439006 +12.500000 -3.400000 113.490864 +12.500000 -3.300000 111.562722 +12.500000 -3.200000 109.654579 +12.500000 -3.100000 107.766437 +12.500000 -3.000000 105.898295 +12.500000 -2.900000 104.050152 +12.500000 -2.800000 102.222010 +12.500000 -2.700000 100.413868 +12.500000 -2.600000 98.625725 +12.500000 -2.500000 96.857583 +12.500000 -2.400000 95.109441 +12.500000 -2.300000 93.381298 +12.500000 -2.200000 91.673156 +12.500000 -2.100000 89.985014 +12.500000 -2.000000 88.316871 +12.500000 -1.900000 86.668729 +12.500000 -1.800000 85.040587 +12.500000 -1.700000 83.432444 +12.500000 -1.600000 81.844302 +12.500000 -1.500000 80.276160 +12.500000 -1.400000 78.728017 +12.500000 -1.300000 77.199875 +12.500000 -1.200000 75.691733 +12.500000 -1.100000 74.203590 +12.500000 -1.000000 72.735448 +12.500000 -0.900000 71.287306 +12.500000 -0.800000 69.859163 +12.500000 -0.700000 68.451021 +12.500000 -0.600000 67.062879 +12.500000 -0.500000 65.694736 +12.500000 -0.400000 64.346594 +12.500000 -0.300000 63.018452 +12.500000 -0.200000 61.710309 +12.500000 -0.100000 60.422167 +12.500000 -0.000000 59.154025 +12.500000 0.100000 57.905882 +12.500000 0.200000 56.677740 +12.500000 0.300000 55.469598 +12.500000 0.400000 54.281455 +12.500000 0.500000 53.113313 +12.500000 0.600000 51.965171 +12.500000 0.700000 50.837028 +12.500000 0.800000 49.728886 +12.500000 0.900000 48.640744 +12.500000 1.000000 47.572601 +12.500000 1.100000 46.524459 +12.500000 1.200000 45.496317 +12.500000 1.300000 44.488174 +12.500000 1.400000 43.500032 +12.500000 1.500000 42.531890 +12.500000 1.600000 41.583747 +12.500000 1.700000 40.655605 +12.500000 1.800000 39.747463 +12.500000 1.900000 38.859320 +12.500000 2.000000 37.991178 +12.500000 2.100000 37.143036 +12.500000 2.200000 36.314893 +12.500000 2.300000 35.506751 +12.500000 2.400000 34.718609 +12.500000 2.500000 33.950466 +12.500000 2.600000 33.202324 +12.500000 2.700000 32.474182 +12.500000 2.800000 31.766039 +12.500000 2.900000 31.077897 +12.500000 3.000000 30.409755 +12.500000 3.100000 29.761612 +12.500000 3.200000 29.133470 +12.500000 3.300000 28.525328 +12.500000 3.400000 27.937185 +12.500000 3.500000 27.369043 +12.500000 3.600000 26.820901 +12.500000 3.700000 26.292758 +12.500000 3.800000 25.784616 +12.500000 3.900000 25.296474 +12.500000 4.000000 24.828331 +12.500000 4.100000 24.380189 +12.500000 4.200000 23.952047 +12.500000 4.300000 23.543904 +12.500000 4.400000 23.155762 +12.500000 4.500000 22.787620 +12.500000 4.600000 22.439477 +12.500000 4.700000 22.111335 +12.500000 4.800000 21.803193 +12.500000 4.900000 21.515050 +12.500000 5.000000 21.246908 +12.500000 5.100000 20.998766 +12.500000 5.200000 20.770623 +12.500000 5.300000 20.562481 +12.500000 5.400000 20.374339 +12.500000 5.500000 20.206196 +12.500000 5.600000 20.058054 +12.500000 5.700000 19.929912 +12.500000 5.800000 19.821769 +12.500000 5.900000 19.733627 +12.500000 6.000000 19.665485 +12.500000 6.100000 19.617342 +12.500000 6.200000 19.589200 +12.500000 6.300000 19.581058 +12.500000 6.400000 19.592915 +12.500000 6.500000 19.624773 +12.500000 6.600000 19.676631 +12.500000 6.700000 19.748488 +12.500000 6.800000 19.840346 +12.500000 6.900000 19.952204 +12.500000 7.000000 20.084061 +12.500000 7.100000 20.235919 +12.500000 7.200000 20.407777 +12.500000 7.300000 20.599634 +12.500000 7.400000 20.811492 +12.500000 7.500000 21.043350 +12.500000 7.600000 21.295207 +12.500000 7.700000 21.567065 +12.500000 7.800000 21.858923 +12.500000 7.900000 22.170780 +12.500000 8.000000 22.502638 +12.500000 8.100000 22.854496 +12.500000 8.200000 23.226353 +12.500000 8.300000 23.618211 +12.500000 8.400000 24.030069 +12.500000 8.500000 24.461926 +12.500000 8.600000 24.913784 +12.500000 8.700000 25.385642 +12.500000 8.800000 25.877499 +12.500000 8.900000 26.389357 +12.500000 9.000000 26.921215 +12.500000 9.100000 27.473072 +12.500000 9.200000 28.044930 +12.500000 9.300000 28.636788 +12.500000 9.400000 29.248645 +12.500000 9.500000 29.880503 +12.500000 9.600000 30.532361 +12.500000 9.700000 31.204218 +12.500000 9.800000 31.896076 +12.500000 9.900000 32.607934 +12.500000 10.000000 33.339791 +12.500000 10.100000 34.091649 +12.500000 10.200000 34.863507 +12.500000 10.300000 35.655364 +12.500000 10.400000 36.467222 +12.500000 10.500000 37.299080 +12.500000 10.600000 38.150937 +12.500000 10.700000 39.022795 +12.500000 10.800000 39.914653 +12.500000 10.900000 40.826510 +12.500000 11.000000 41.758368 +12.500000 11.100000 42.710226 +12.500000 11.200000 43.682083 +12.500000 11.300000 44.673941 +12.500000 11.400000 45.685799 +12.500000 11.500000 46.717656 +12.500000 11.600000 47.769514 +12.500000 11.700000 48.841372 +12.500000 11.800000 49.933229 +12.500000 11.900000 51.045087 +12.500000 12.000000 52.176945 +12.500000 12.100000 53.328802 +12.500000 12.200000 54.500660 +12.500000 12.300000 55.692518 +12.500000 12.400000 56.904375 +12.500000 12.500000 58.136233 +12.500000 12.600000 59.388091 +12.500000 12.700000 60.659948 +12.500000 12.800000 61.951806 +12.500000 12.900000 63.263664 +12.500000 13.000000 64.595521 +12.500000 13.100000 65.947379 +12.500000 13.200000 67.319237 +12.500000 13.300000 68.711094 +12.500000 13.400000 70.122952 +12.500000 13.500000 71.554810 +12.500000 13.600000 73.006667 +12.500000 13.700000 74.478525 +12.500000 13.800000 75.970383 +12.500000 13.900000 77.482240 +12.500000 14.000000 79.014098 +12.500000 14.100000 80.565956 +12.500000 14.200000 82.137813 +12.500000 14.300000 83.729671 +12.500000 14.400000 85.341529 +12.500000 14.500000 86.973386 +12.500000 14.600000 88.625244 +12.500000 14.700000 90.297102 +12.500000 14.800000 91.988959 +12.500000 14.900000 93.700817 +12.500000 15.000000 95.432675 + +12.600000 -5.000000 150.832263 +12.600000 -4.900000 148.551101 +12.600000 -4.800000 146.289939 +12.600000 -4.700000 144.048777 +12.600000 -4.600000 141.827615 +12.600000 -4.500000 139.626453 +12.600000 -4.400000 137.445291 +12.600000 -4.300000 135.284129 +12.600000 -4.200000 133.142967 +12.600000 -4.100000 131.021805 +12.600000 -4.000000 128.920643 +12.600000 -3.900000 126.839481 +12.600000 -3.800000 124.778319 +12.600000 -3.700000 122.737157 +12.600000 -3.600000 120.715995 +12.600000 -3.500000 118.714833 +12.600000 -3.400000 116.733671 +12.600000 -3.300000 114.772509 +12.600000 -3.200000 112.831347 +12.600000 -3.100000 110.910185 +12.600000 -3.000000 109.009023 +12.600000 -2.900000 107.127861 +12.600000 -2.800000 105.266699 +12.600000 -2.700000 103.425537 +12.600000 -2.600000 101.604375 +12.600000 -2.500000 99.803213 +12.600000 -2.400000 98.022051 +12.600000 -2.300000 96.260889 +12.600000 -2.200000 94.519727 +12.600000 -2.100000 92.798566 +12.600000 -2.000000 91.097404 +12.600000 -1.900000 89.416242 +12.600000 -1.800000 87.755080 +12.600000 -1.700000 86.113918 +12.600000 -1.600000 84.492756 +12.600000 -1.500000 82.891594 +12.600000 -1.400000 81.310432 +12.600000 -1.300000 79.749270 +12.600000 -1.200000 78.208108 +12.600000 -1.100000 76.686946 +12.600000 -1.000000 75.185784 +12.600000 -0.900000 73.704622 +12.600000 -0.800000 72.243460 +12.600000 -0.700000 70.802298 +12.600000 -0.600000 69.381136 +12.600000 -0.500000 67.979974 +12.600000 -0.400000 66.598812 +12.600000 -0.300000 65.237650 +12.600000 -0.200000 63.896488 +12.600000 -0.100000 62.575326 +12.600000 -0.000000 61.274164 +12.600000 0.100000 59.993002 +12.600000 0.200000 58.731840 +12.600000 0.300000 57.490678 +12.600000 0.400000 56.269516 +12.600000 0.500000 55.068354 +12.600000 0.600000 53.887192 +12.600000 0.700000 52.726030 +12.600000 0.800000 51.584868 +12.600000 0.900000 50.463706 +12.600000 1.000000 49.362545 +12.600000 1.100000 48.281383 +12.600000 1.200000 47.220221 +12.600000 1.300000 46.179059 +12.600000 1.400000 45.157897 +12.600000 1.500000 44.156735 +12.600000 1.600000 43.175573 +12.600000 1.700000 42.214411 +12.600000 1.800000 41.273249 +12.600000 1.900000 40.352087 +12.600000 2.000000 39.450925 +12.600000 2.100000 38.569763 +12.600000 2.200000 37.708601 +12.600000 2.300000 36.867439 +12.600000 2.400000 36.046277 +12.600000 2.500000 35.245115 +12.600000 2.600000 34.463953 +12.600000 2.700000 33.702791 +12.600000 2.800000 32.961629 +12.600000 2.900000 32.240467 +12.600000 3.000000 31.539305 +12.600000 3.100000 30.858143 +12.600000 3.200000 30.196981 +12.600000 3.300000 29.555819 +12.600000 3.400000 28.934657 +12.600000 3.500000 28.333495 +12.600000 3.600000 27.752333 +12.600000 3.700000 27.191171 +12.600000 3.800000 26.650009 +12.600000 3.900000 26.128847 +12.600000 4.000000 25.627685 +12.600000 4.100000 25.146523 +12.600000 4.200000 24.685362 +12.600000 4.300000 24.244200 +12.600000 4.400000 23.823038 +12.600000 4.500000 23.421876 +12.600000 4.600000 23.040714 +12.600000 4.700000 22.679552 +12.600000 4.800000 22.338390 +12.600000 4.900000 22.017228 +12.600000 5.000000 21.716066 +12.600000 5.100000 21.434904 +12.600000 5.200000 21.173742 +12.600000 5.300000 20.932580 +12.600000 5.400000 20.711418 +12.600000 5.500000 20.510256 +12.600000 5.600000 20.329094 +12.600000 5.700000 20.167932 +12.600000 5.800000 20.026770 +12.600000 5.900000 19.905608 +12.600000 6.000000 19.804446 +12.600000 6.100000 19.723284 +12.600000 6.200000 19.662122 +12.600000 6.300000 19.620960 +12.600000 6.400000 19.599798 +12.600000 6.500000 19.598636 +12.600000 6.600000 19.617474 +12.600000 6.700000 19.656312 +12.600000 6.800000 19.715150 +12.600000 6.900000 19.793988 +12.600000 7.000000 19.892826 +12.600000 7.100000 20.011664 +12.600000 7.200000 20.150502 +12.600000 7.300000 20.309340 +12.600000 7.400000 20.488179 +12.600000 7.500000 20.687017 +12.600000 7.600000 20.905855 +12.600000 7.700000 21.144693 +12.600000 7.800000 21.403531 +12.600000 7.900000 21.682369 +12.600000 8.000000 21.981207 +12.600000 8.100000 22.300045 +12.600000 8.200000 22.638883 +12.600000 8.300000 22.997721 +12.600000 8.400000 23.376559 +12.600000 8.500000 23.775397 +12.600000 8.600000 24.194235 +12.600000 8.700000 24.633073 +12.600000 8.800000 25.091911 +12.600000 8.900000 25.570749 +12.600000 9.000000 26.069587 +12.600000 9.100000 26.588425 +12.600000 9.200000 27.127263 +12.600000 9.300000 27.686101 +12.600000 9.400000 28.264939 +12.600000 9.500000 28.863777 +12.600000 9.600000 29.482615 +12.600000 9.700000 30.121453 +12.600000 9.800000 30.780291 +12.600000 9.900000 31.459129 +12.600000 10.000000 32.157967 +12.600000 10.100000 32.876805 +12.600000 10.200000 33.615643 +12.600000 10.300000 34.374481 +12.600000 10.400000 35.153319 +12.600000 10.500000 35.952158 +12.600000 10.600000 36.770996 +12.600000 10.700000 37.609834 +12.600000 10.800000 38.468672 +12.600000 10.900000 39.347510 +12.600000 11.000000 40.246348 +12.600000 11.100000 41.165186 +12.600000 11.200000 42.104024 +12.600000 11.300000 43.062862 +12.600000 11.400000 44.041700 +12.600000 11.500000 45.040538 +12.600000 11.600000 46.059376 +12.600000 11.700000 47.098214 +12.600000 11.800000 48.157052 +12.600000 11.900000 49.235890 +12.600000 12.000000 50.334728 +12.600000 12.100000 51.453566 +12.600000 12.200000 52.592404 +12.600000 12.300000 53.751242 +12.600000 12.400000 54.930080 +12.600000 12.500000 56.128918 +12.600000 12.600000 57.347756 +12.600000 12.700000 58.586594 +12.600000 12.800000 59.845432 +12.600000 12.900000 61.124270 +12.600000 13.000000 62.423108 +12.600000 13.100000 63.741946 +12.600000 13.200000 65.080784 +12.600000 13.300000 66.439622 +12.600000 13.400000 67.818460 +12.600000 13.500000 69.217298 +12.600000 13.600000 70.636136 +12.600000 13.700000 72.074975 +12.600000 13.800000 73.533813 +12.600000 13.900000 75.012651 +12.600000 14.000000 76.511489 +12.600000 14.100000 78.030327 +12.600000 14.200000 79.569165 +12.600000 14.300000 81.128003 +12.600000 14.400000 82.706841 +12.600000 14.500000 84.305679 +12.600000 14.600000 85.924517 +12.600000 14.700000 87.563355 +12.600000 14.800000 89.222193 +12.600000 14.900000 90.901031 +12.600000 15.000000 92.599869 + +12.700000 -5.000000 154.622068 +12.700000 -4.900000 152.307370 +12.700000 -4.800000 150.012671 +12.700000 -4.700000 147.737973 +12.700000 -4.600000 145.483275 +12.700000 -4.500000 143.248576 +12.700000 -4.400000 141.033878 +12.700000 -4.300000 138.839180 +12.700000 -4.200000 136.664481 +12.700000 -4.100000 134.509783 +12.700000 -4.000000 132.375085 +12.700000 -3.900000 130.260386 +12.700000 -3.800000 128.165688 +12.700000 -3.700000 126.090990 +12.700000 -3.600000 124.036291 +12.700000 -3.500000 122.001593 +12.700000 -3.400000 119.986895 +12.700000 -3.300000 117.992196 +12.700000 -3.200000 116.017498 +12.700000 -3.100000 114.062800 +12.700000 -3.000000 112.128101 +12.700000 -2.900000 110.213403 +12.700000 -2.800000 108.318705 +12.700000 -2.700000 106.444006 +12.700000 -2.600000 104.589308 +12.700000 -2.500000 102.754610 +12.700000 -2.400000 100.939911 +12.700000 -2.300000 99.145213 +12.700000 -2.200000 97.370514 +12.700000 -2.100000 95.615816 +12.700000 -2.000000 93.881118 +12.700000 -1.900000 92.166419 +12.700000 -1.800000 90.471721 +12.700000 -1.700000 88.797023 +12.700000 -1.600000 87.142324 +12.700000 -1.500000 85.507626 +12.700000 -1.400000 83.892928 +12.700000 -1.300000 82.298229 +12.700000 -1.200000 80.723531 +12.700000 -1.100000 79.168833 +12.700000 -1.000000 77.634134 +12.700000 -0.900000 76.119436 +12.700000 -0.800000 74.624738 +12.700000 -0.700000 73.150039 +12.700000 -0.600000 71.695341 +12.700000 -0.500000 70.260643 +12.700000 -0.400000 68.845944 +12.700000 -0.300000 67.451246 +12.700000 -0.200000 66.076548 +12.700000 -0.100000 64.721849 +12.700000 -0.000000 63.387151 +12.700000 0.100000 62.072453 +12.700000 0.200000 60.777754 +12.700000 0.300000 59.503056 +12.700000 0.400000 58.248358 +12.700000 0.500000 57.013659 +12.700000 0.600000 55.798961 +12.700000 0.700000 54.604263 +12.700000 0.800000 53.429564 +12.700000 0.900000 52.274866 +12.700000 1.000000 51.140168 +12.700000 1.100000 50.025469 +12.700000 1.200000 48.930771 +12.700000 1.300000 47.856073 +12.700000 1.400000 46.801374 +12.700000 1.500000 45.766676 +12.700000 1.600000 44.751978 +12.700000 1.700000 43.757279 +12.700000 1.800000 42.782581 +12.700000 1.900000 41.827882 +12.700000 2.000000 40.893184 +12.700000 2.100000 39.978486 +12.700000 2.200000 39.083787 +12.700000 2.300000 38.209089 +12.700000 2.400000 37.354391 +12.700000 2.500000 36.519692 +12.700000 2.600000 35.704994 +12.700000 2.700000 34.910296 +12.700000 2.800000 34.135597 +12.700000 2.900000 33.380899 +12.700000 3.000000 32.646201 +12.700000 3.100000 31.931502 +12.700000 3.200000 31.236804 +12.700000 3.300000 30.562106 +12.700000 3.400000 29.907407 +12.700000 3.500000 29.272709 +12.700000 3.600000 28.658011 +12.700000 3.700000 28.063312 +12.700000 3.800000 27.488614 +12.700000 3.900000 26.933916 +12.700000 4.000000 26.399217 +12.700000 4.100000 25.884519 +12.700000 4.200000 25.389821 +12.700000 4.300000 24.915122 +12.700000 4.400000 24.460424 +12.700000 4.500000 24.025726 +12.700000 4.600000 23.611027 +12.700000 4.700000 23.216329 +12.700000 4.800000 22.841631 +12.700000 4.900000 22.486932 +12.700000 5.000000 22.152234 +12.700000 5.100000 21.837536 +12.700000 5.200000 21.542837 +12.700000 5.300000 21.268139 +12.700000 5.400000 21.013441 +12.700000 5.500000 20.778742 +12.700000 5.600000 20.564044 +12.700000 5.700000 20.369346 +12.700000 5.800000 20.194647 +12.700000 5.900000 20.039949 +12.700000 6.000000 19.905250 +12.700000 6.100000 19.790552 +12.700000 6.200000 19.695854 +12.700000 6.300000 19.621155 +12.700000 6.400000 19.566457 +12.700000 6.500000 19.531759 +12.700000 6.600000 19.517060 +12.700000 6.700000 19.522362 +12.700000 6.800000 19.547664 +12.700000 6.900000 19.592965 +12.700000 7.000000 19.658267 +12.700000 7.100000 19.743569 +12.700000 7.200000 19.848870 +12.700000 7.300000 19.974172 +12.700000 7.400000 20.119474 +12.700000 7.500000 20.284775 +12.700000 7.600000 20.470077 +12.700000 7.700000 20.675379 +12.700000 7.800000 20.900680 +12.700000 7.900000 21.145982 +12.700000 8.000000 21.411284 +12.700000 8.100000 21.696585 +12.700000 8.200000 22.001887 +12.700000 8.300000 22.327189 +12.700000 8.400000 22.672490 +12.700000 8.500000 23.037792 +12.700000 8.600000 23.423094 +12.700000 8.700000 23.828395 +12.700000 8.800000 24.253697 +12.700000 8.900000 24.698999 +12.700000 9.000000 25.164300 +12.700000 9.100000 25.649602 +12.700000 9.200000 26.154904 +12.700000 9.300000 26.680205 +12.700000 9.400000 27.225507 +12.700000 9.500000 27.790809 +12.700000 9.600000 28.376110 +12.700000 9.700000 28.981412 +12.700000 9.800000 29.606714 +12.700000 9.900000 30.252015 +12.700000 10.000000 30.917317 +12.700000 10.100000 31.602618 +12.700000 10.200000 32.307920 +12.700000 10.300000 33.033222 +12.700000 10.400000 33.778523 +12.700000 10.500000 34.543825 +12.700000 10.600000 35.329127 +12.700000 10.700000 36.134428 +12.700000 10.800000 36.959730 +12.700000 10.900000 37.805032 +12.700000 11.000000 38.670333 +12.700000 11.100000 39.555635 +12.700000 11.200000 40.460937 +12.700000 11.300000 41.386238 +12.700000 11.400000 42.331540 +12.700000 11.500000 43.296842 +12.700000 11.600000 44.282143 +12.700000 11.700000 45.287445 +12.700000 11.800000 46.312747 +12.700000 11.900000 47.358048 +12.700000 12.000000 48.423350 +12.700000 12.100000 49.508652 +12.700000 12.200000 50.613953 +12.700000 12.300000 51.739255 +12.700000 12.400000 52.884557 +12.700000 12.500000 54.049858 +12.700000 12.600000 55.235160 +12.700000 12.700000 56.440462 +12.700000 12.800000 57.665763 +12.700000 12.900000 58.911065 +12.700000 13.000000 60.176367 +12.700000 13.100000 61.461668 +12.700000 13.200000 62.766970 +12.700000 13.300000 64.092272 +12.700000 13.400000 65.437573 +12.700000 13.500000 66.802875 +12.700000 13.600000 68.188177 +12.700000 13.700000 69.593478 +12.700000 13.800000 71.018780 +12.700000 13.900000 72.464082 +12.700000 14.000000 73.929383 +12.700000 14.100000 75.414685 +12.700000 14.200000 76.919986 +12.700000 14.300000 78.445288 +12.700000 14.400000 79.990590 +12.700000 14.500000 81.555891 +12.700000 14.600000 83.141193 +12.700000 14.700000 84.746495 +12.700000 14.800000 86.371796 +12.700000 14.900000 88.017098 +12.700000 15.000000 89.682400 + +12.800000 -5.000000 158.433958 +12.800000 -4.900000 156.085207 +12.800000 -4.800000 153.756455 +12.800000 -4.700000 151.447704 +12.800000 -4.600000 149.158952 +12.800000 -4.500000 146.890201 +12.800000 -4.400000 144.641450 +12.800000 -4.300000 142.412698 +12.800000 -4.200000 140.203947 +12.800000 -4.100000 138.015195 +12.800000 -4.000000 135.846444 +12.800000 -3.900000 133.697692 +12.800000 -3.800000 131.568941 +12.800000 -3.700000 129.460189 +12.800000 -3.600000 127.371438 +12.800000 -3.500000 125.302686 +12.800000 -3.400000 123.253935 +12.800000 -3.300000 121.225184 +12.800000 -3.200000 119.216432 +12.800000 -3.100000 117.227681 +12.800000 -3.000000 115.258929 +12.800000 -2.900000 113.310178 +12.800000 -2.800000 111.381426 +12.800000 -2.700000 109.472675 +12.800000 -2.600000 107.583923 +12.800000 -2.500000 105.715172 +12.800000 -2.400000 103.866420 +12.800000 -2.300000 102.037669 +12.800000 -2.200000 100.228918 +12.800000 -2.100000 98.440166 +12.800000 -2.000000 96.671415 +12.800000 -1.900000 94.922663 +12.800000 -1.800000 93.193912 +12.800000 -1.700000 91.485160 +12.800000 -1.600000 89.796409 +12.800000 -1.500000 88.127657 +12.800000 -1.400000 86.478906 +12.800000 -1.300000 84.850155 +12.800000 -1.200000 83.241403 +12.800000 -1.100000 81.652652 +12.800000 -1.000000 80.083900 +12.800000 -0.900000 78.535149 +12.800000 -0.800000 77.006397 +12.800000 -0.700000 75.497646 +12.800000 -0.600000 74.008894 +12.800000 -0.500000 72.540143 +12.800000 -0.400000 71.091391 +12.800000 -0.300000 69.662640 +12.800000 -0.200000 68.253889 +12.800000 -0.100000 66.865137 +12.800000 -0.000000 65.496386 +12.800000 0.100000 64.147634 +12.800000 0.200000 62.818883 +12.800000 0.300000 61.510131 +12.800000 0.400000 60.221380 +12.800000 0.500000 58.952628 +12.800000 0.600000 57.703877 +12.800000 0.700000 56.475125 +12.800000 0.800000 55.266374 +12.800000 0.900000 54.077623 +12.800000 1.000000 52.908871 +12.800000 1.100000 51.760120 +12.800000 1.200000 50.631368 +12.800000 1.300000 49.522617 +12.800000 1.400000 48.433865 +12.800000 1.500000 47.365114 +12.800000 1.600000 46.316362 +12.800000 1.700000 45.287611 +12.800000 1.800000 44.278859 +12.800000 1.900000 43.290108 +12.800000 2.000000 42.321357 +12.800000 2.100000 41.372605 +12.800000 2.200000 40.443854 +12.800000 2.300000 39.535102 +12.800000 2.400000 38.646351 +12.800000 2.500000 37.777599 +12.800000 2.600000 36.928848 +12.800000 2.700000 36.100096 +12.800000 2.800000 35.291345 +12.800000 2.900000 34.502593 +12.800000 3.000000 33.733842 +12.800000 3.100000 32.985091 +12.800000 3.200000 32.256339 +12.800000 3.300000 31.547588 +12.800000 3.400000 30.858836 +12.800000 3.500000 30.190085 +12.800000 3.600000 29.541333 +12.800000 3.700000 28.912582 +12.800000 3.800000 28.303830 +12.800000 3.900000 27.715079 +12.800000 4.000000 27.146328 +12.800000 4.100000 26.597576 +12.800000 4.200000 26.068825 +12.800000 4.300000 25.560073 +12.800000 4.400000 25.071322 +12.800000 4.500000 24.602570 +12.800000 4.600000 24.153819 +12.800000 4.700000 23.725067 +12.800000 4.800000 23.316316 +12.800000 4.900000 22.927564 +12.800000 5.000000 22.558813 +12.800000 5.100000 22.210062 +12.800000 5.200000 21.881310 +12.800000 5.300000 21.572559 +12.800000 5.400000 21.283807 +12.800000 5.500000 21.015056 +12.800000 5.600000 20.766304 +12.800000 5.700000 20.537553 +12.800000 5.800000 20.328801 +12.800000 5.900000 20.140050 +12.800000 6.000000 19.971298 +12.800000 6.100000 19.822547 +12.800000 6.200000 19.693796 +12.800000 6.300000 19.585044 +12.800000 6.400000 19.496293 +12.800000 6.500000 19.427541 +12.800000 6.600000 19.378790 +12.800000 6.700000 19.350038 +12.800000 6.800000 19.341287 +12.800000 6.900000 19.352535 +12.800000 7.000000 19.383784 +12.800000 7.100000 19.435032 +12.800000 7.200000 19.506281 +12.800000 7.300000 19.597530 +12.800000 7.400000 19.708778 +12.800000 7.500000 19.840027 +12.800000 7.600000 19.991275 +12.800000 7.700000 20.162524 +12.800000 7.800000 20.353772 +12.800000 7.900000 20.565021 +12.800000 8.000000 20.796269 +12.800000 8.100000 21.047518 +12.800000 8.200000 21.318767 +12.800000 8.300000 21.610015 +12.800000 8.400000 21.921264 +12.800000 8.500000 22.252512 +12.800000 8.600000 22.603761 +12.800000 8.700000 22.975009 +12.800000 8.800000 23.366258 +12.800000 8.900000 23.777506 +12.800000 9.000000 24.208755 +12.800000 9.100000 24.660003 +12.800000 9.200000 25.131252 +12.800000 9.300000 25.622501 +12.800000 9.400000 26.133749 +12.800000 9.500000 26.664998 +12.800000 9.600000 27.216246 +12.800000 9.700000 27.787495 +12.800000 9.800000 28.378743 +12.800000 9.900000 28.989992 +12.800000 10.000000 29.621240 +12.800000 10.100000 30.272489 +12.800000 10.200000 30.943737 +12.800000 10.300000 31.634986 +12.800000 10.400000 32.346235 +12.800000 10.500000 33.077483 +12.800000 10.600000 33.828732 +12.800000 10.700000 34.599980 +12.800000 10.800000 35.391229 +12.800000 10.900000 36.202477 +12.800000 11.000000 37.033726 +12.800000 11.100000 37.884974 +12.800000 11.200000 38.756223 +12.800000 11.300000 39.647471 +12.800000 11.400000 40.558720 +12.800000 11.500000 41.489969 +12.800000 11.600000 42.441217 +12.800000 11.700000 43.412466 +12.800000 11.800000 44.403714 +12.800000 11.900000 45.414963 +12.800000 12.000000 46.446211 +12.800000 12.100000 47.497460 +12.800000 12.200000 48.568708 +12.800000 12.300000 49.659957 +12.800000 12.400000 50.771206 +12.800000 12.500000 51.902454 +12.800000 12.600000 53.053703 +12.800000 12.700000 54.224951 +12.800000 12.800000 55.416200 +12.800000 12.900000 56.627448 +12.800000 13.000000 57.858697 +12.800000 13.100000 59.109945 +12.800000 13.200000 60.381194 +12.800000 13.300000 61.672442 +12.800000 13.400000 62.983691 +12.800000 13.500000 64.314940 +12.800000 13.600000 65.666188 +12.800000 13.700000 67.037437 +12.800000 13.800000 68.428685 +12.800000 13.900000 69.839934 +12.800000 14.000000 71.271182 +12.800000 14.100000 72.722431 +12.800000 14.200000 74.193679 +12.800000 14.300000 75.684928 +12.800000 14.400000 77.196176 +12.800000 14.500000 78.727425 +12.800000 14.600000 80.278674 +12.800000 14.700000 81.849922 +12.800000 14.800000 83.441171 +12.800000 14.900000 85.052419 +12.800000 15.000000 86.683668 + +12.900000 -5.000000 162.272324 +12.900000 -4.900000 159.889003 +12.900000 -4.800000 157.525681 +12.900000 -4.700000 155.182360 +12.900000 -4.600000 152.859039 +12.900000 -4.500000 150.555717 +12.900000 -4.400000 148.272396 +12.900000 -4.300000 146.009075 +12.900000 -4.200000 143.765753 +12.900000 -4.100000 141.542432 +12.900000 -4.000000 139.339111 +12.900000 -3.900000 137.155790 +12.900000 -3.800000 134.992468 +12.900000 -3.700000 132.849147 +12.900000 -3.600000 130.725826 +12.900000 -3.500000 128.622504 +12.900000 -3.400000 126.539183 +12.900000 -3.300000 124.475862 +12.900000 -3.200000 122.432540 +12.900000 -3.100000 120.409219 +12.900000 -3.000000 118.405898 +12.900000 -2.900000 116.422576 +12.900000 -2.800000 114.459255 +12.900000 -2.700000 112.515934 +12.900000 -2.600000 110.592613 +12.900000 -2.500000 108.689291 +12.900000 -2.400000 106.805970 +12.900000 -2.300000 104.942649 +12.900000 -2.200000 103.099327 +12.900000 -2.100000 101.276006 +12.900000 -2.000000 99.472685 +12.900000 -1.900000 97.689363 +12.900000 -1.800000 95.926042 +12.900000 -1.700000 94.182721 +12.900000 -1.600000 92.459400 +12.900000 -1.500000 90.756078 +12.900000 -1.400000 89.072757 +12.900000 -1.300000 87.409436 +12.900000 -1.200000 85.766114 +12.900000 -1.100000 84.142793 +12.900000 -1.000000 82.539472 +12.900000 -0.900000 80.956150 +12.900000 -0.800000 79.392829 +12.900000 -0.700000 77.849508 +12.900000 -0.600000 76.326187 +12.900000 -0.500000 74.822865 +12.900000 -0.400000 73.339544 +12.900000 -0.300000 71.876223 +12.900000 -0.200000 70.432901 +12.900000 -0.100000 69.009580 +12.900000 -0.000000 67.606259 +12.900000 0.100000 66.222937 +12.900000 0.200000 64.859616 +12.900000 0.300000 63.516295 +12.900000 0.400000 62.192974 +12.900000 0.500000 60.889652 +12.900000 0.600000 59.606331 +12.900000 0.700000 58.343010 +12.900000 0.800000 57.099688 +12.900000 0.900000 55.876367 +12.900000 1.000000 54.673046 +12.900000 1.100000 53.489724 +12.900000 1.200000 52.326403 +12.900000 1.300000 51.183082 +12.900000 1.400000 50.059761 +12.900000 1.500000 48.956439 +12.900000 1.600000 47.873118 +12.900000 1.700000 46.809797 +12.900000 1.800000 45.766475 +12.900000 1.900000 44.743154 +12.900000 2.000000 43.739833 +12.900000 2.100000 42.756511 +12.900000 2.200000 41.793190 +12.900000 2.300000 40.849869 +12.900000 2.400000 39.926548 +12.900000 2.500000 39.023226 +12.900000 2.600000 38.139905 +12.900000 2.700000 37.276584 +12.900000 2.800000 36.433262 +12.900000 2.900000 35.609941 +12.900000 3.000000 34.806620 +12.900000 3.100000 34.023298 +12.900000 3.200000 33.259977 +12.900000 3.300000 32.516656 +12.900000 3.400000 31.793334 +12.900000 3.500000 31.090013 +12.900000 3.600000 30.406692 +12.900000 3.700000 29.743371 +12.900000 3.800000 29.100049 +12.900000 3.900000 28.476728 +12.900000 4.000000 27.873407 +12.900000 4.100000 27.290085 +12.900000 4.200000 26.726764 +12.900000 4.300000 26.183443 +12.900000 4.400000 25.660121 +12.900000 4.500000 25.156800 +12.900000 4.600000 24.673479 +12.900000 4.700000 24.210158 +12.900000 4.800000 23.766836 +12.900000 4.900000 23.343515 +12.900000 5.000000 22.940194 +12.900000 5.100000 22.556872 +12.900000 5.200000 22.193551 +12.900000 5.300000 21.850230 +12.900000 5.400000 21.526908 +12.900000 5.500000 21.223587 +12.900000 5.600000 20.940266 +12.900000 5.700000 20.676945 +12.900000 5.800000 20.433623 +12.900000 5.900000 20.210302 +12.900000 6.000000 20.006981 +12.900000 6.100000 19.823659 +12.900000 6.200000 19.660338 +12.900000 6.300000 19.517017 +12.900000 6.400000 19.393695 +12.900000 6.500000 19.290374 +12.900000 6.600000 19.207053 +12.900000 6.700000 19.143732 +12.900000 6.800000 19.100410 +12.900000 6.900000 19.077089 +12.900000 7.000000 19.073768 +12.900000 7.100000 19.090446 +12.900000 7.200000 19.127125 +12.900000 7.300000 19.183804 +12.900000 7.400000 19.260482 +12.900000 7.500000 19.357161 +12.900000 7.600000 19.473840 +12.900000 7.700000 19.610519 +12.900000 7.800000 19.767197 +12.900000 7.900000 19.943876 +12.900000 8.000000 20.140555 +12.900000 8.100000 20.357233 +12.900000 8.200000 20.593912 +12.900000 8.300000 20.850591 +12.900000 8.400000 21.127269 +12.900000 8.500000 21.423948 +12.900000 8.600000 21.740627 +12.900000 8.700000 22.077306 +12.900000 8.800000 22.433984 +12.900000 8.900000 22.810663 +12.900000 9.000000 23.207342 +12.900000 9.100000 23.624020 +12.900000 9.200000 24.060699 +12.900000 9.300000 24.517378 +12.900000 9.400000 24.994056 +12.900000 9.500000 25.490735 +12.900000 9.600000 26.007414 +12.900000 9.700000 26.544093 +12.900000 9.800000 27.100771 +12.900000 9.900000 27.677450 +12.900000 10.000000 28.274129 +12.900000 10.100000 28.890807 +12.900000 10.200000 29.527486 +12.900000 10.300000 30.184165 +12.900000 10.400000 30.860843 +12.900000 10.500000 31.557522 +12.900000 10.600000 32.274201 +12.900000 10.700000 33.010879 +12.900000 10.800000 33.767558 +12.900000 10.900000 34.544237 +12.900000 11.000000 35.340916 +12.900000 11.100000 36.157594 +12.900000 11.200000 36.994273 +12.900000 11.300000 37.850952 +12.900000 11.400000 38.727630 +12.900000 11.500000 39.624309 +12.900000 11.600000 40.540988 +12.900000 11.700000 41.477666 +12.900000 11.800000 42.434345 +12.900000 11.900000 43.411024 +12.900000 12.000000 44.407703 +12.900000 12.100000 45.424381 +12.900000 12.200000 46.461060 +12.900000 12.300000 47.517739 +12.900000 12.400000 48.594417 +12.900000 12.500000 49.691096 +12.900000 12.600000 50.807775 +12.900000 12.700000 51.944453 +12.900000 12.800000 53.101132 +12.900000 12.900000 54.277811 +12.900000 13.000000 55.474490 +12.900000 13.100000 56.691168 +12.900000 13.200000 57.927847 +12.900000 13.300000 59.184526 +12.900000 13.400000 60.461204 +12.900000 13.500000 61.757883 +12.900000 13.600000 63.074562 +12.900000 13.700000 64.411240 +12.900000 13.800000 65.767919 +12.900000 13.900000 67.144598 +12.900000 14.000000 68.541277 +12.900000 14.100000 69.957955 +12.900000 14.200000 71.394634 +12.900000 14.300000 72.851313 +12.900000 14.400000 74.327991 +12.900000 14.500000 75.824670 +12.900000 14.600000 77.341349 +12.900000 14.700000 78.878027 +12.900000 14.800000 80.434706 +12.900000 14.900000 82.011385 +12.900000 15.000000 83.608064 + +13.000000 -5.000000 166.142528 +13.000000 -4.900000 163.724120 +13.000000 -4.800000 161.325712 +13.000000 -4.700000 158.947304 +13.000000 -4.600000 156.588897 +13.000000 -4.500000 154.250489 +13.000000 -4.400000 151.932081 +13.000000 -4.300000 149.633673 +13.000000 -4.200000 147.355265 +13.000000 -4.100000 145.096857 +13.000000 -4.000000 142.858449 +13.000000 -3.900000 140.640041 +13.000000 -3.800000 138.441633 +13.000000 -3.700000 136.263226 +13.000000 -3.600000 134.104818 +13.000000 -3.500000 131.966410 +13.000000 -3.400000 129.848002 +13.000000 -3.300000 127.749594 +13.000000 -3.200000 125.671186 +13.000000 -3.100000 123.612778 +13.000000 -3.000000 121.574370 +13.000000 -2.900000 119.555962 +13.000000 -2.800000 117.557555 +13.000000 -2.700000 115.579147 +13.000000 -2.600000 113.620739 +13.000000 -2.500000 111.682331 +13.000000 -2.400000 109.763923 +13.000000 -2.300000 107.865515 +13.000000 -2.200000 105.987107 +13.000000 -2.100000 104.128699 +13.000000 -2.000000 102.290291 +13.000000 -1.900000 100.471884 +13.000000 -1.800000 98.673476 +13.000000 -1.700000 96.895068 +13.000000 -1.600000 95.136660 +13.000000 -1.500000 93.398252 +13.000000 -1.400000 91.679844 +13.000000 -1.300000 89.981436 +13.000000 -1.200000 88.303028 +13.000000 -1.100000 86.644620 +13.000000 -1.000000 85.006213 +13.000000 -0.900000 83.387805 +13.000000 -0.800000 81.789397 +13.000000 -0.700000 80.210989 +13.000000 -0.600000 78.652581 +13.000000 -0.500000 77.114173 +13.000000 -0.400000 75.595765 +13.000000 -0.300000 74.097357 +13.000000 -0.200000 72.618949 +13.000000 -0.100000 71.160542 +13.000000 -0.000000 69.722134 +13.000000 0.100000 68.303726 +13.000000 0.200000 66.905318 +13.000000 0.300000 65.526910 +13.000000 0.400000 64.168502 +13.000000 0.500000 62.830094 +13.000000 0.600000 61.511686 +13.000000 0.700000 60.213278 +13.000000 0.800000 58.934871 +13.000000 0.900000 57.676463 +13.000000 1.000000 56.438055 +13.000000 1.100000 55.219647 +13.000000 1.200000 54.021239 +13.000000 1.300000 52.842831 +13.000000 1.400000 51.684423 +13.000000 1.500000 50.546015 +13.000000 1.600000 49.427607 +13.000000 1.700000 48.329200 +13.000000 1.800000 47.250792 +13.000000 1.900000 46.192384 +13.000000 2.000000 45.153976 +13.000000 2.100000 44.135568 +13.000000 2.200000 43.137160 +13.000000 2.300000 42.158752 +13.000000 2.400000 41.200344 +13.000000 2.500000 40.261936 +13.000000 2.600000 39.343529 +13.000000 2.700000 38.445121 +13.000000 2.800000 37.566713 +13.000000 2.900000 36.708305 +13.000000 3.000000 35.869897 +13.000000 3.100000 35.051489 +13.000000 3.200000 34.253081 +13.000000 3.300000 33.474673 +13.000000 3.400000 32.716265 +13.000000 3.500000 31.977858 +13.000000 3.600000 31.259450 +13.000000 3.700000 30.561042 +13.000000 3.800000 29.882634 +13.000000 3.900000 29.224226 +13.000000 4.000000 28.585818 +13.000000 4.100000 27.967410 +13.000000 4.200000 27.369002 +13.000000 4.300000 26.790594 +13.000000 4.400000 26.232187 +13.000000 4.500000 25.693779 +13.000000 4.600000 25.175371 +13.000000 4.700000 24.676963 +13.000000 4.800000 24.198555 +13.000000 4.900000 23.740147 +13.000000 5.000000 23.301739 +13.000000 5.100000 22.883331 +13.000000 5.200000 22.484923 +13.000000 5.300000 22.106516 +13.000000 5.400000 21.748108 +13.000000 5.500000 21.409700 +13.000000 5.600000 21.091292 +13.000000 5.700000 20.792884 +13.000000 5.800000 20.514476 +13.000000 5.900000 20.256068 +13.000000 6.000000 20.017660 +13.000000 6.100000 19.799252 +13.000000 6.200000 19.600845 +13.000000 6.300000 19.422437 +13.000000 6.400000 19.264029 +13.000000 6.500000 19.125621 +13.000000 6.600000 19.007213 +13.000000 6.700000 18.908805 +13.000000 6.800000 18.830397 +13.000000 6.900000 18.771989 +13.000000 7.000000 18.733581 +13.000000 7.100000 18.715174 +13.000000 7.200000 18.716766 +13.000000 7.300000 18.738358 +13.000000 7.400000 18.779950 +13.000000 7.500000 18.841542 +13.000000 7.600000 18.923134 +13.000000 7.700000 19.024726 +13.000000 7.800000 19.146318 +13.000000 7.900000 19.287910 +13.000000 8.000000 19.449503 +13.000000 8.100000 19.631095 +13.000000 8.200000 19.832687 +13.000000 8.300000 20.054279 +13.000000 8.400000 20.295871 +13.000000 8.500000 20.557463 +13.000000 8.600000 20.839055 +13.000000 8.700000 21.140647 +13.000000 8.800000 21.462239 +13.000000 8.900000 21.803832 +13.000000 9.000000 22.165424 +13.000000 9.100000 22.547016 +13.000000 9.200000 22.948608 +13.000000 9.300000 23.370200 +13.000000 9.400000 23.811792 +13.000000 9.500000 24.273384 +13.000000 9.600000 24.754976 +13.000000 9.700000 25.256568 +13.000000 9.800000 25.778161 +13.000000 9.900000 26.319753 +13.000000 10.000000 26.881345 +13.000000 10.100000 27.462937 +13.000000 10.200000 28.064529 +13.000000 10.300000 28.686121 +13.000000 10.400000 29.327713 +13.000000 10.500000 29.989305 +13.000000 10.600000 30.670897 +13.000000 10.700000 31.372490 +13.000000 10.800000 32.094082 +13.000000 10.900000 32.835674 +13.000000 11.000000 33.597266 +13.000000 11.100000 34.378858 +13.000000 11.200000 35.180450 +13.000000 11.300000 36.002042 +13.000000 11.400000 36.843634 +13.000000 11.500000 37.705226 +13.000000 11.600000 38.586819 +13.000000 11.700000 39.488411 +13.000000 11.800000 40.410003 +13.000000 11.900000 41.351595 +13.000000 12.000000 42.313187 +13.000000 12.100000 43.294779 +13.000000 12.200000 44.296371 +13.000000 12.300000 45.317963 +13.000000 12.400000 46.359555 +13.000000 12.500000 47.421148 +13.000000 12.600000 48.502740 +13.000000 12.700000 49.604332 +13.000000 12.800000 50.725924 +13.000000 12.900000 51.867516 +13.000000 13.000000 53.029108 +13.000000 13.100000 54.210700 +13.000000 13.200000 55.412292 +13.000000 13.300000 56.633884 +13.000000 13.400000 57.875477 +13.000000 13.500000 59.137069 +13.000000 13.600000 60.418661 +13.000000 13.700000 61.720253 +13.000000 13.800000 63.041845 +13.000000 13.900000 64.383437 +13.000000 14.000000 65.745029 +13.000000 14.100000 67.126621 +13.000000 14.200000 68.528213 +13.000000 14.300000 69.949806 +13.000000 14.400000 71.391398 +13.000000 14.500000 72.852990 +13.000000 14.600000 74.334582 +13.000000 14.700000 75.836174 +13.000000 14.800000 77.357766 +13.000000 14.900000 78.899358 +13.000000 15.000000 80.460950 + +13.100000 -5.000000 170.050880 +13.100000 -4.900000 167.596869 +13.100000 -4.800000 165.162858 +13.100000 -4.700000 162.748846 +13.100000 -4.600000 160.354835 +13.100000 -4.500000 157.980824 +13.100000 -4.400000 155.626813 +13.100000 -4.300000 153.292801 +13.100000 -4.200000 150.978790 +13.100000 -4.100000 148.684779 +13.100000 -4.000000 146.410768 +13.100000 -3.900000 144.156757 +13.100000 -3.800000 141.922745 +13.100000 -3.700000 139.708734 +13.100000 -3.600000 137.514723 +13.100000 -3.500000 135.340712 +13.100000 -3.400000 133.186701 +13.100000 -3.300000 131.052689 +13.100000 -3.200000 128.938678 +13.100000 -3.100000 126.844667 +13.100000 -3.000000 124.770656 +13.100000 -2.900000 122.716644 +13.100000 -2.800000 120.682633 +13.100000 -2.700000 118.668622 +13.100000 -2.600000 116.674611 +13.100000 -2.500000 114.700600 +13.100000 -2.400000 112.746588 +13.100000 -2.300000 110.812577 +13.100000 -2.200000 108.898566 +13.100000 -2.100000 107.004555 +13.100000 -2.000000 105.130544 +13.100000 -1.900000 103.276532 +13.100000 -1.800000 101.442521 +13.100000 -1.700000 99.628510 +13.100000 -1.600000 97.834499 +13.100000 -1.500000 96.060487 +13.100000 -1.400000 94.306476 +13.100000 -1.300000 92.572465 +13.100000 -1.200000 90.858454 +13.100000 -1.100000 89.164443 +13.100000 -1.000000 87.490431 +13.100000 -0.900000 85.836420 +13.100000 -0.800000 84.202409 +13.100000 -0.700000 82.588398 +13.100000 -0.600000 80.994387 +13.100000 -0.500000 79.420375 +13.100000 -0.400000 77.866364 +13.100000 -0.300000 76.332353 +13.100000 -0.200000 74.818342 +13.100000 -0.100000 73.324331 +13.100000 -0.000000 71.850319 +13.100000 0.100000 70.396308 +13.100000 0.200000 68.962297 +13.100000 0.300000 67.548286 +13.100000 0.400000 66.154274 +13.100000 0.500000 64.780263 +13.100000 0.600000 63.426252 +13.100000 0.700000 62.092241 +13.100000 0.800000 60.778230 +13.100000 0.900000 59.484218 +13.100000 1.000000 58.210207 +13.100000 1.100000 56.956196 +13.100000 1.200000 55.722185 +13.100000 1.300000 54.508174 +13.100000 1.400000 53.314162 +13.100000 1.500000 52.140151 +13.100000 1.600000 50.986140 +13.100000 1.700000 49.852129 +13.100000 1.800000 48.738117 +13.100000 1.900000 47.644106 +13.100000 2.000000 46.570095 +13.100000 2.100000 45.516084 +13.100000 2.200000 44.482073 +13.100000 2.300000 43.468061 +13.100000 2.400000 42.474050 +13.100000 2.500000 41.500039 +13.100000 2.600000 40.546028 +13.100000 2.700000 39.612017 +13.100000 2.800000 38.698005 +13.100000 2.900000 37.803994 +13.100000 3.000000 36.929983 +13.100000 3.100000 36.075972 +13.100000 3.200000 35.241960 +13.100000 3.300000 34.427949 +13.100000 3.400000 33.633938 +13.100000 3.500000 32.859927 +13.100000 3.600000 32.105916 +13.100000 3.700000 31.371904 +13.100000 3.800000 30.657893 +13.100000 3.900000 29.963882 +13.100000 4.000000 29.289871 +13.100000 4.100000 28.635860 +13.100000 4.200000 28.001848 +13.100000 4.300000 27.387837 +13.100000 4.400000 26.793826 +13.100000 4.500000 26.219815 +13.100000 4.600000 25.665803 +13.100000 4.700000 25.131792 +13.100000 4.800000 24.617781 +13.100000 4.900000 24.123770 +13.100000 5.000000 23.649759 +13.100000 5.100000 23.195747 +13.100000 5.200000 22.761736 +13.100000 5.300000 22.347725 +13.100000 5.400000 21.953714 +13.100000 5.500000 21.579703 +13.100000 5.600000 21.225691 +13.100000 5.700000 20.891680 +13.100000 5.800000 20.577669 +13.100000 5.900000 20.283658 +13.100000 6.000000 20.009646 +13.100000 6.100000 19.755635 +13.100000 6.200000 19.521624 +13.100000 6.300000 19.307613 +13.100000 6.400000 19.113602 +13.100000 6.500000 18.939590 +13.100000 6.600000 18.785579 +13.100000 6.700000 18.651568 +13.100000 6.800000 18.537557 +13.100000 6.900000 18.443546 +13.100000 7.000000 18.369534 +13.100000 7.100000 18.315523 +13.100000 7.200000 18.281512 +13.100000 7.300000 18.267501 +13.100000 7.400000 18.273489 +13.100000 7.500000 18.299478 +13.100000 7.600000 18.345467 +13.100000 7.700000 18.411456 +13.100000 7.800000 18.497445 +13.100000 7.900000 18.603433 +13.100000 8.000000 18.729422 +13.100000 8.100000 18.875411 +13.100000 8.200000 19.041400 +13.100000 8.300000 19.227389 +13.100000 8.400000 19.433377 +13.100000 8.500000 19.659366 +13.100000 8.600000 19.905355 +13.100000 8.700000 20.171344 +13.100000 8.800000 20.457332 +13.100000 8.900000 20.763321 +13.100000 9.000000 21.089310 +13.100000 9.100000 21.435299 +13.100000 9.200000 21.801288 +13.100000 9.300000 22.187276 +13.100000 9.400000 22.593265 +13.100000 9.500000 23.019254 +13.100000 9.600000 23.465243 +13.100000 9.700000 23.931232 +13.100000 9.800000 24.417220 +13.100000 9.900000 24.923209 +13.100000 10.000000 25.449198 +13.100000 10.100000 25.995187 +13.100000 10.200000 26.561175 +13.100000 10.300000 27.147164 +13.100000 10.400000 27.753153 +13.100000 10.500000 28.379142 +13.100000 10.600000 29.025131 +13.100000 10.700000 29.691119 +13.100000 10.800000 30.377108 +13.100000 10.900000 31.083097 +13.100000 11.000000 31.809086 +13.100000 11.100000 32.555075 +13.100000 11.200000 33.321063 +13.100000 11.300000 34.107052 +13.100000 11.400000 34.913041 +13.100000 11.500000 35.739030 +13.100000 11.600000 36.585018 +13.100000 11.700000 37.451007 +13.100000 11.800000 38.336996 +13.100000 11.900000 39.242985 +13.100000 12.000000 40.168974 +13.100000 12.100000 41.114962 +13.100000 12.200000 42.080951 +13.100000 12.300000 43.066940 +13.100000 12.400000 44.072929 +13.100000 12.500000 45.098918 +13.100000 12.600000 46.144906 +13.100000 12.700000 47.210895 +13.100000 12.800000 48.296884 +13.100000 12.900000 49.402873 +13.100000 13.000000 50.528861 +13.100000 13.100000 51.674850 +13.100000 13.200000 52.840839 +13.100000 13.300000 54.026828 +13.100000 13.400000 55.232817 +13.100000 13.500000 56.458805 +13.100000 13.600000 57.704794 +13.100000 13.700000 58.970783 +13.100000 13.800000 60.256772 +13.100000 13.900000 61.562761 +13.100000 14.000000 62.888749 +13.100000 14.100000 64.234738 +13.100000 14.200000 65.600727 +13.100000 14.300000 66.986716 +13.100000 14.400000 68.392704 +13.100000 14.500000 69.818693 +13.100000 14.600000 71.264682 +13.100000 14.700000 72.730671 +13.100000 14.800000 74.216660 +13.100000 14.900000 75.722648 +13.100000 15.000000 77.248637 + +13.200000 -5.000000 174.004599 +13.200000 -4.900000 171.514467 +13.200000 -4.800000 169.044336 +13.200000 -4.700000 166.594205 +13.200000 -4.600000 164.164073 +13.200000 -4.500000 161.753942 +13.200000 -4.400000 159.363811 +13.200000 -4.300000 156.993680 +13.200000 -4.200000 154.643548 +13.200000 -4.100000 152.313417 +13.200000 -4.000000 150.003286 +13.200000 -3.900000 147.713155 +13.200000 -3.800000 145.443023 +13.200000 -3.700000 143.192892 +13.200000 -3.600000 140.962761 +13.200000 -3.500000 138.752629 +13.200000 -3.400000 136.562498 +13.200000 -3.300000 134.392367 +13.200000 -3.200000 132.242236 +13.200000 -3.100000 130.112104 +13.200000 -3.000000 128.001973 +13.200000 -2.900000 125.911842 +13.200000 -2.800000 123.841711 +13.200000 -2.700000 121.791579 +13.200000 -2.600000 119.761448 +13.200000 -2.500000 117.751317 +13.200000 -2.400000 115.761185 +13.200000 -2.300000 113.791054 +13.200000 -2.200000 111.840923 +13.200000 -2.100000 109.910792 +13.200000 -2.000000 108.000660 +13.200000 -1.900000 106.110529 +13.200000 -1.800000 104.240398 +13.200000 -1.700000 102.390266 +13.200000 -1.600000 100.560135 +13.200000 -1.500000 98.750004 +13.200000 -1.400000 96.959873 +13.200000 -1.300000 95.189741 +13.200000 -1.200000 93.439610 +13.200000 -1.100000 91.709479 +13.200000 -1.000000 89.999348 +13.200000 -0.900000 88.309216 +13.200000 -0.800000 86.639085 +13.200000 -0.700000 84.988954 +13.200000 -0.600000 83.358822 +13.200000 -0.500000 81.748691 +13.200000 -0.400000 80.158560 +13.200000 -0.300000 78.588429 +13.200000 -0.200000 77.038297 +13.200000 -0.100000 75.508166 +13.200000 -0.000000 73.998035 +13.200000 0.100000 72.507903 +13.200000 0.200000 71.037772 +13.200000 0.300000 69.587641 +13.200000 0.400000 68.157510 +13.200000 0.500000 66.747378 +13.200000 0.600000 65.357247 +13.200000 0.700000 63.987116 +13.200000 0.800000 62.636985 +13.200000 0.900000 61.306853 +13.200000 1.000000 59.996722 +13.200000 1.100000 58.706591 +13.200000 1.200000 57.436459 +13.200000 1.300000 56.186328 +13.200000 1.400000 54.956197 +13.200000 1.500000 53.746066 +13.200000 1.600000 52.555934 +13.200000 1.700000 51.385803 +13.200000 1.800000 50.235672 +13.200000 1.900000 49.105540 +13.200000 2.000000 47.995409 +13.200000 2.100000 46.905278 +13.200000 2.200000 45.835147 +13.200000 2.300000 44.785015 +13.200000 2.400000 43.754884 +13.200000 2.500000 42.744753 +13.200000 2.600000 41.754622 +13.200000 2.700000 40.784490 +13.200000 2.800000 39.834359 +13.200000 2.900000 38.904228 +13.200000 3.000000 37.994096 +13.200000 3.100000 37.103965 +13.200000 3.200000 36.233834 +13.200000 3.300000 35.383703 +13.200000 3.400000 34.553571 +13.200000 3.500000 33.743440 +13.200000 3.600000 32.953309 +13.200000 3.700000 32.183177 +13.200000 3.800000 31.433046 +13.200000 3.900000 30.702915 +13.200000 4.000000 29.992784 +13.200000 4.100000 29.302652 +13.200000 4.200000 28.632521 +13.200000 4.300000 27.982390 +13.200000 4.400000 27.352259 +13.200000 4.500000 26.742127 +13.200000 4.600000 26.151996 +13.200000 4.700000 25.581865 +13.200000 4.800000 25.031733 +13.200000 4.900000 24.501602 +13.200000 5.000000 23.991471 +13.200000 5.100000 23.501340 +13.200000 5.200000 23.031208 +13.200000 5.300000 22.581077 +13.200000 5.400000 22.150946 +13.200000 5.500000 21.740815 +13.200000 5.600000 21.350683 +13.200000 5.700000 20.980552 +13.200000 5.800000 20.630421 +13.200000 5.900000 20.300289 +13.200000 6.000000 19.990158 +13.200000 6.100000 19.700027 +13.200000 6.200000 19.429896 +13.200000 6.300000 19.179764 +13.200000 6.400000 18.949633 +13.200000 6.500000 18.739502 +13.200000 6.600000 18.549370 +13.200000 6.700000 18.379239 +13.200000 6.800000 18.229108 +13.200000 6.900000 18.098977 +13.200000 7.000000 17.988845 +13.200000 7.100000 17.898714 +13.200000 7.200000 17.828583 +13.200000 7.300000 17.778452 +13.200000 7.400000 17.748320 +13.200000 7.500000 17.738189 +13.200000 7.600000 17.748058 +13.200000 7.700000 17.777926 +13.200000 7.800000 17.827795 +13.200000 7.900000 17.897664 +13.200000 8.000000 17.987533 +13.200000 8.100000 18.097401 +13.200000 8.200000 18.227270 +13.200000 8.300000 18.377139 +13.200000 8.400000 18.547007 +13.200000 8.500000 18.736876 +13.200000 8.600000 18.946745 +13.200000 8.700000 19.176614 +13.200000 8.800000 19.426482 +13.200000 8.900000 19.696351 +13.200000 9.000000 19.986220 +13.200000 9.100000 20.296089 +13.200000 9.200000 20.625957 +13.200000 9.300000 20.975826 +13.200000 9.400000 21.345695 +13.200000 9.500000 21.735563 +13.200000 9.600000 22.145432 +13.200000 9.700000 22.575301 +13.200000 9.800000 23.025170 +13.200000 9.900000 23.495038 +13.200000 10.000000 23.984907 +13.200000 10.100000 24.494776 +13.200000 10.200000 25.024644 +13.200000 10.300000 25.574513 +13.200000 10.400000 26.144382 +13.200000 10.500000 26.734251 +13.200000 10.600000 27.344119 +13.200000 10.700000 27.973988 +13.200000 10.800000 28.623857 +13.200000 10.900000 29.293726 +13.200000 11.000000 29.983594 +13.200000 11.100000 30.693463 +13.200000 11.200000 31.423332 +13.200000 11.300000 32.173200 +13.200000 11.400000 32.943069 +13.200000 11.500000 33.732938 +13.200000 11.600000 34.542807 +13.200000 11.700000 35.372675 +13.200000 11.800000 36.222544 +13.200000 11.900000 37.092413 +13.200000 12.000000 37.982282 +13.200000 12.100000 38.892150 +13.200000 12.200000 39.822019 +13.200000 12.300000 40.771888 +13.200000 12.400000 41.741756 +13.200000 12.500000 42.731625 +13.200000 12.600000 43.741494 +13.200000 12.700000 44.771363 +13.200000 12.800000 45.821231 +13.200000 12.900000 46.891100 +13.200000 13.000000 47.980969 +13.200000 13.100000 49.090837 +13.200000 13.200000 50.220706 +13.200000 13.300000 51.370575 +13.200000 13.400000 52.540444 +13.200000 13.500000 53.730312 +13.200000 13.600000 54.940181 +13.200000 13.700000 56.170050 +13.200000 13.800000 57.419919 +13.200000 13.900000 58.689787 +13.200000 14.000000 59.979656 +13.200000 14.100000 61.289525 +13.200000 14.200000 62.619393 +13.200000 14.300000 63.969262 +13.200000 14.400000 65.339131 +13.200000 14.500000 66.729000 +13.200000 14.600000 68.138868 +13.200000 14.700000 69.568737 +13.200000 14.800000 71.018606 +13.200000 14.900000 72.488474 +13.200000 15.000000 73.978343 + +13.300000 -5.000000 178.011768 +13.300000 -4.900000 175.485000 +13.300000 -4.800000 172.978232 +13.300000 -4.700000 170.491464 +13.300000 -4.600000 168.024696 +13.300000 -4.500000 165.577928 +13.300000 -4.400000 163.151160 +13.300000 -4.300000 160.744392 +13.300000 -4.200000 158.357624 +13.300000 -4.100000 155.990856 +13.300000 -4.000000 153.644088 +13.300000 -3.900000 151.317319 +13.300000 -3.800000 149.010551 +13.300000 -3.700000 146.723783 +13.300000 -3.600000 144.457015 +13.300000 -3.500000 142.210247 +13.300000 -3.400000 139.983479 +13.300000 -3.300000 137.776711 +13.300000 -3.200000 135.589943 +13.300000 -3.100000 133.423175 +13.300000 -3.000000 131.276407 +13.300000 -2.900000 129.149639 +13.300000 -2.800000 127.042871 +13.300000 -2.700000 124.956102 +13.300000 -2.600000 122.889334 +13.300000 -2.500000 120.842566 +13.300000 -2.400000 118.815798 +13.300000 -2.300000 116.809030 +13.300000 -2.200000 114.822262 +13.300000 -2.100000 112.855494 +13.300000 -2.000000 110.908726 +13.300000 -1.900000 108.981958 +13.300000 -1.800000 107.075190 +13.300000 -1.700000 105.188422 +13.300000 -1.600000 103.321654 +13.300000 -1.500000 101.474886 +13.300000 -1.400000 99.648117 +13.300000 -1.300000 97.841349 +13.300000 -1.200000 96.054581 +13.300000 -1.100000 94.287813 +13.300000 -1.000000 92.541045 +13.300000 -0.900000 90.814277 +13.300000 -0.800000 89.107509 +13.300000 -0.700000 87.420741 +13.300000 -0.600000 85.753973 +13.300000 -0.500000 84.107205 +13.300000 -0.400000 82.480437 +13.300000 -0.300000 80.873669 +13.300000 -0.200000 79.286901 +13.300000 -0.100000 77.720132 +13.300000 -0.000000 76.173364 +13.300000 0.100000 74.646596 +13.300000 0.200000 73.139828 +13.300000 0.300000 71.653060 +13.300000 0.400000 70.186292 +13.300000 0.500000 68.739524 +13.300000 0.600000 67.312756 +13.300000 0.700000 65.905988 +13.300000 0.800000 64.519220 +13.300000 0.900000 63.152452 +13.300000 1.000000 61.805684 +13.300000 1.100000 60.478916 +13.300000 1.200000 59.172147 +13.300000 1.300000 57.885379 +13.300000 1.400000 56.618611 +13.300000 1.500000 55.371843 +13.300000 1.600000 54.145075 +13.300000 1.700000 52.938307 +13.300000 1.800000 51.751539 +13.300000 1.900000 50.584771 +13.300000 2.000000 49.438003 +13.300000 2.100000 48.311235 +13.300000 2.200000 47.204467 +13.300000 2.300000 46.117699 +13.300000 2.400000 45.050931 +13.300000 2.500000 44.004162 +13.300000 2.600000 42.977394 +13.300000 2.700000 41.970626 +13.300000 2.800000 40.983858 +13.300000 2.900000 40.017090 +13.300000 3.000000 39.070322 +13.300000 3.100000 38.143554 +13.300000 3.200000 37.236786 +13.300000 3.300000 36.350018 +13.300000 3.400000 35.483250 +13.300000 3.500000 34.636482 +13.300000 3.600000 33.809714 +13.300000 3.700000 33.002945 +13.300000 3.800000 32.216177 +13.300000 3.900000 31.449409 +13.300000 4.000000 30.702641 +13.300000 4.100000 29.975873 +13.300000 4.200000 29.269105 +13.300000 4.300000 28.582337 +13.300000 4.400000 27.915569 +13.300000 4.500000 27.268801 +13.300000 4.600000 26.642033 +13.300000 4.700000 26.035265 +13.300000 4.800000 25.448497 +13.300000 4.900000 24.881729 +13.300000 5.000000 24.334960 +13.300000 5.100000 23.808192 +13.300000 5.200000 23.301424 +13.300000 5.300000 22.814656 +13.300000 5.400000 22.347888 +13.300000 5.500000 21.901120 +13.300000 5.600000 21.474352 +13.300000 5.700000 21.067584 +13.300000 5.800000 20.680816 +13.300000 5.900000 20.314048 +13.300000 6.000000 19.967280 +13.300000 6.100000 19.640512 +13.300000 6.200000 19.333744 +13.300000 6.300000 19.046975 +13.300000 6.400000 18.780207 +13.300000 6.500000 18.533439 +13.300000 6.600000 18.306671 +13.300000 6.700000 18.099903 +13.300000 6.800000 17.913135 +13.300000 6.900000 17.746367 +13.300000 7.000000 17.599599 +13.300000 7.100000 17.472831 +13.300000 7.200000 17.366063 +13.300000 7.300000 17.279295 +13.300000 7.400000 17.212527 +13.300000 7.500000 17.165759 +13.300000 7.600000 17.138990 +13.300000 7.700000 17.132222 +13.300000 7.800000 17.145454 +13.300000 7.900000 17.178686 +13.300000 8.000000 17.231918 +13.300000 8.100000 17.305150 +13.300000 8.200000 17.398382 +13.300000 8.300000 17.511614 +13.300000 8.400000 17.644846 +13.300000 8.500000 17.798078 +13.300000 8.600000 17.971310 +13.300000 8.700000 18.164542 +13.300000 8.800000 18.377773 +13.300000 8.900000 18.611005 +13.300000 9.000000 18.864237 +13.300000 9.100000 19.137469 +13.300000 9.200000 19.430701 +13.300000 9.300000 19.743933 +13.300000 9.400000 20.077165 +13.300000 9.500000 20.430397 +13.300000 9.600000 20.803629 +13.300000 9.700000 21.196861 +13.300000 9.800000 21.610093 +13.300000 9.900000 22.043325 +13.300000 10.000000 22.496557 +13.300000 10.100000 22.969788 +13.300000 10.200000 23.463020 +13.300000 10.300000 23.976252 +13.300000 10.400000 24.509484 +13.300000 10.500000 25.062716 +13.300000 10.600000 25.635948 +13.300000 10.700000 26.229180 +13.300000 10.800000 26.842412 +13.300000 10.900000 27.475644 +13.300000 11.000000 28.128876 +13.300000 11.100000 28.802108 +13.300000 11.200000 29.495340 +13.300000 11.300000 30.208572 +13.300000 11.400000 30.941803 +13.300000 11.500000 31.695035 +13.300000 11.600000 32.468267 +13.300000 11.700000 33.261499 +13.300000 11.800000 34.074731 +13.300000 11.900000 34.907963 +13.300000 12.000000 35.761195 +13.300000 12.100000 36.634427 +13.300000 12.200000 37.527659 +13.300000 12.300000 38.440891 +13.300000 12.400000 39.374123 +13.300000 12.500000 40.327355 +13.300000 12.600000 41.300587 +13.300000 12.700000 42.293818 +13.300000 12.800000 43.307050 +13.300000 12.900000 44.340282 +13.300000 13.000000 45.393514 +13.300000 13.100000 46.466746 +13.300000 13.200000 47.559978 +13.300000 13.300000 48.673210 +13.300000 13.400000 49.806442 +13.300000 13.500000 50.959674 +13.300000 13.600000 52.132906 +13.300000 13.700000 53.326138 +13.300000 13.800000 54.539370 +13.300000 13.900000 55.772602 +13.300000 14.000000 57.025833 +13.300000 14.100000 58.299065 +13.300000 14.200000 59.592297 +13.300000 14.300000 60.905529 +13.300000 14.400000 62.238761 +13.300000 14.500000 63.591993 +13.300000 14.600000 64.965225 +13.300000 14.700000 66.358457 +13.300000 14.800000 67.771689 +13.300000 14.900000 69.204921 +13.300000 15.000000 70.658153 + +13.400000 -5.000000 182.081286 +13.400000 -4.900000 179.517364 +13.400000 -4.800000 176.973443 +13.400000 -4.700000 174.449521 +13.400000 -4.600000 171.945600 +13.400000 -4.500000 169.461678 +13.400000 -4.400000 166.997756 +13.400000 -4.300000 164.553835 +13.400000 -4.200000 162.129913 +13.400000 -4.100000 159.725991 +13.400000 -4.000000 157.342070 +13.400000 -3.900000 154.978148 +13.400000 -3.800000 152.634227 +13.400000 -3.700000 150.310305 +13.400000 -3.600000 148.006383 +13.400000 -3.500000 145.722462 +13.400000 -3.400000 143.458540 +13.400000 -3.300000 141.214619 +13.400000 -3.200000 138.990697 +13.400000 -3.100000 136.786775 +13.400000 -3.000000 134.602854 +13.400000 -2.900000 132.438932 +13.400000 -2.800000 130.295010 +13.400000 -2.700000 128.171089 +13.400000 -2.600000 126.067167 +13.400000 -2.500000 123.983246 +13.400000 -2.400000 121.919324 +13.400000 -2.300000 119.875402 +13.400000 -2.200000 117.851481 +13.400000 -2.100000 115.847559 +13.400000 -2.000000 113.863638 +13.400000 -1.900000 111.899716 +13.400000 -1.800000 109.955794 +13.400000 -1.700000 108.031873 +13.400000 -1.600000 106.127951 +13.400000 -1.500000 104.244029 +13.400000 -1.400000 102.380108 +13.400000 -1.300000 100.536186 +13.400000 -1.200000 98.712265 +13.400000 -1.100000 96.908343 +13.400000 -1.000000 95.124421 +13.400000 -0.900000 93.360500 +13.400000 -0.800000 91.616578 +13.400000 -0.700000 89.892656 +13.400000 -0.600000 88.188735 +13.400000 -0.500000 86.504813 +13.400000 -0.400000 84.840892 +13.400000 -0.300000 83.196970 +13.400000 -0.200000 81.573048 +13.400000 -0.100000 79.969127 +13.400000 -0.000000 78.385205 +13.400000 0.100000 76.821284 +13.400000 0.200000 75.277362 +13.400000 0.300000 73.753440 +13.400000 0.400000 72.249519 +13.400000 0.500000 70.765597 +13.400000 0.600000 69.301675 +13.400000 0.700000 67.857754 +13.400000 0.800000 66.433832 +13.400000 0.900000 65.029911 +13.400000 1.000000 63.645989 +13.400000 1.100000 62.282067 +13.400000 1.200000 60.938146 +13.400000 1.300000 59.614224 +13.400000 1.400000 58.310303 +13.400000 1.500000 57.026381 +13.400000 1.600000 55.762459 +13.400000 1.700000 54.518538 +13.400000 1.800000 53.294616 +13.400000 1.900000 52.090694 +13.400000 2.000000 50.906773 +13.400000 2.100000 49.742851 +13.400000 2.200000 48.598930 +13.400000 2.300000 47.475008 +13.400000 2.400000 46.371086 +13.400000 2.500000 45.287165 +13.400000 2.600000 44.223243 +13.400000 2.700000 43.179321 +13.400000 2.800000 42.155400 +13.400000 2.900000 41.151478 +13.400000 3.000000 40.167557 +13.400000 3.100000 39.203635 +13.400000 3.200000 38.259713 +13.400000 3.300000 37.335792 +13.400000 3.400000 36.431870 +13.400000 3.500000 35.547949 +13.400000 3.600000 34.684027 +13.400000 3.700000 33.840105 +13.400000 3.800000 33.016184 +13.400000 3.900000 32.212262 +13.400000 4.000000 31.428340 +13.400000 4.100000 30.664419 +13.400000 4.200000 29.920497 +13.400000 4.300000 29.196576 +13.400000 4.400000 28.492654 +13.400000 4.500000 27.808732 +13.400000 4.600000 27.144811 +13.400000 4.700000 26.500889 +13.400000 4.800000 25.876968 +13.400000 4.900000 25.273046 +13.400000 5.000000 24.689124 +13.400000 5.100000 24.125203 +13.400000 5.200000 23.581281 +13.400000 5.300000 23.057359 +13.400000 5.400000 22.553438 +13.400000 5.500000 22.069516 +13.400000 5.600000 21.605595 +13.400000 5.700000 21.161673 +13.400000 5.800000 20.737751 +13.400000 5.900000 20.333830 +13.400000 6.000000 19.949908 +13.400000 6.100000 19.585986 +13.400000 6.200000 19.242065 +13.400000 6.300000 18.918143 +13.400000 6.400000 18.614222 +13.400000 6.500000 18.330300 +13.400000 6.600000 18.066378 +13.400000 6.700000 17.822457 +13.400000 6.800000 17.598535 +13.400000 6.900000 17.394614 +13.400000 7.000000 17.210692 +13.400000 7.100000 17.046770 +13.400000 7.200000 16.902849 +13.400000 7.300000 16.778927 +13.400000 7.400000 16.675005 +13.400000 7.500000 16.591084 +13.400000 7.600000 16.527162 +13.400000 7.700000 16.483241 +13.400000 7.800000 16.459319 +13.400000 7.900000 16.455397 +13.400000 8.000000 16.471476 +13.400000 8.100000 16.507554 +13.400000 8.200000 16.563633 +13.400000 8.300000 16.639711 +13.400000 8.400000 16.735789 +13.400000 8.500000 16.851868 +13.400000 8.600000 16.987946 +13.400000 8.700000 17.144024 +13.400000 8.800000 17.320103 +13.400000 8.900000 17.516181 +13.400000 9.000000 17.732260 +13.400000 9.100000 17.968338 +13.400000 9.200000 18.224416 +13.400000 9.300000 18.500495 +13.400000 9.400000 18.796573 +13.400000 9.500000 19.112651 +13.400000 9.600000 19.448730 +13.400000 9.700000 19.804808 +13.400000 9.800000 20.180887 +13.400000 9.900000 20.576965 +13.400000 10.000000 20.993043 +13.400000 10.100000 21.429122 +13.400000 10.200000 21.885200 +13.400000 10.300000 22.361279 +13.400000 10.400000 22.857357 +13.400000 10.500000 23.373435 +13.400000 10.600000 23.909514 +13.400000 10.700000 24.465592 +13.400000 10.800000 25.041670 +13.400000 10.900000 25.637749 +13.400000 11.000000 26.253827 +13.400000 11.100000 26.889906 +13.400000 11.200000 27.545984 +13.400000 11.300000 28.222062 +13.400000 11.400000 28.918141 +13.400000 11.500000 29.634219 +13.400000 11.600000 30.370298 +13.400000 11.700000 31.126376 +13.400000 11.800000 31.902454 +13.400000 11.900000 32.698533 +13.400000 12.000000 33.514611 +13.400000 12.100000 34.350689 +13.400000 12.200000 35.206768 +13.400000 12.300000 36.082846 +13.400000 12.400000 36.978925 +13.400000 12.500000 37.895003 +13.400000 12.600000 38.831081 +13.400000 12.700000 39.787160 +13.400000 12.800000 40.763238 +13.400000 12.900000 41.759316 +13.400000 13.000000 42.775395 +13.400000 13.100000 43.811473 +13.400000 13.200000 44.867552 +13.400000 13.300000 45.943630 +13.400000 13.400000 47.039708 +13.400000 13.500000 48.155787 +13.400000 13.600000 49.291865 +13.400000 13.700000 50.447944 +13.400000 13.800000 51.624022 +13.400000 13.900000 52.820100 +13.400000 14.000000 54.036179 +13.400000 14.100000 55.272257 +13.400000 14.200000 56.528335 +13.400000 14.300000 57.804414 +13.400000 14.400000 59.100492 +13.400000 14.500000 60.416571 +13.400000 14.600000 61.752649 +13.400000 14.700000 63.108727 +13.400000 14.800000 64.484806 +13.400000 14.900000 65.880884 +13.400000 15.000000 67.296963 + +13.500000 -5.000000 186.222801 +13.500000 -4.900000 183.621209 +13.500000 -4.800000 181.039617 +13.500000 -4.700000 178.478025 +13.500000 -4.600000 175.936433 +13.500000 -4.500000 173.414841 +13.500000 -4.400000 170.913249 +13.500000 -4.300000 168.431658 +13.500000 -4.200000 165.970066 +13.500000 -4.100000 163.528474 +13.500000 -4.000000 161.106882 +13.500000 -3.900000 158.705290 +13.500000 -3.800000 156.323698 +13.500000 -3.700000 153.962106 +13.500000 -3.600000 151.620514 +13.500000 -3.500000 149.298922 +13.500000 -3.400000 146.997331 +13.500000 -3.300000 144.715739 +13.500000 -3.200000 142.454147 +13.500000 -3.100000 140.212555 +13.500000 -3.000000 137.990963 +13.500000 -2.900000 135.789371 +13.500000 -2.800000 133.607779 +13.500000 -2.700000 131.446187 +13.500000 -2.600000 129.304595 +13.500000 -2.500000 127.183003 +13.500000 -2.400000 125.081412 +13.500000 -2.300000 122.999820 +13.500000 -2.200000 120.938228 +13.500000 -2.100000 118.896636 +13.500000 -2.000000 116.875044 +13.500000 -1.900000 114.873452 +13.500000 -1.800000 112.891860 +13.500000 -1.700000 110.930268 +13.500000 -1.600000 108.988676 +13.500000 -1.500000 107.067085 +13.500000 -1.400000 105.165493 +13.500000 -1.300000 103.283901 +13.500000 -1.200000 101.422309 +13.500000 -1.100000 99.580717 +13.500000 -1.000000 97.759125 +13.500000 -0.900000 95.957533 +13.500000 -0.800000 94.175941 +13.500000 -0.700000 92.414349 +13.500000 -0.600000 90.672757 +13.500000 -0.500000 88.951166 +13.500000 -0.400000 87.249574 +13.500000 -0.300000 85.567982 +13.500000 -0.200000 83.906390 +13.500000 -0.100000 82.264798 +13.500000 -0.000000 80.643206 +13.500000 0.100000 79.041614 +13.500000 0.200000 77.460022 +13.500000 0.300000 75.898430 +13.500000 0.400000 74.356839 +13.500000 0.500000 72.835247 +13.500000 0.600000 71.333655 +13.500000 0.700000 69.852063 +13.500000 0.800000 68.390471 +13.500000 0.900000 66.948879 +13.500000 1.000000 65.527287 +13.500000 1.100000 64.125695 +13.500000 1.200000 62.744103 +13.500000 1.300000 61.382511 +13.500000 1.400000 60.040920 +13.500000 1.500000 58.719328 +13.500000 1.600000 57.417736 +13.500000 1.700000 56.136144 +13.500000 1.800000 54.874552 +13.500000 1.900000 53.632960 +13.500000 2.000000 52.411368 +13.500000 2.100000 51.209776 +13.500000 2.200000 50.028184 +13.500000 2.300000 48.866593 +13.500000 2.400000 47.725001 +13.500000 2.500000 46.603409 +13.500000 2.600000 45.501817 +13.500000 2.700000 44.420225 +13.500000 2.800000 43.358633 +13.500000 2.900000 42.317041 +13.500000 3.000000 41.295449 +13.500000 3.100000 40.293857 +13.500000 3.200000 39.312265 +13.500000 3.300000 38.350674 +13.500000 3.400000 37.409082 +13.500000 3.500000 36.487490 +13.500000 3.600000 35.585898 +13.500000 3.700000 34.704306 +13.500000 3.800000 33.842714 +13.500000 3.900000 33.001122 +13.500000 4.000000 32.179530 +13.500000 4.100000 31.377938 +13.500000 4.200000 30.596347 +13.500000 4.300000 29.834755 +13.500000 4.400000 29.093163 +13.500000 4.500000 28.371571 +13.500000 4.600000 27.669979 +13.500000 4.700000 26.988387 +13.500000 4.800000 26.326795 +13.500000 4.900000 25.685203 +13.500000 5.000000 25.063611 +13.500000 5.100000 24.462019 +13.500000 5.200000 23.880428 +13.500000 5.300000 23.318836 +13.500000 5.400000 22.777244 +13.500000 5.500000 22.255652 +13.500000 5.600000 21.754060 +13.500000 5.700000 21.272468 +13.500000 5.800000 20.810876 +13.500000 5.900000 20.369284 +13.500000 6.000000 19.947692 +13.500000 6.100000 19.546101 +13.500000 6.200000 19.164509 +13.500000 6.300000 18.802917 +13.500000 6.400000 18.461325 +13.500000 6.500000 18.139733 +13.500000 6.600000 17.838141 +13.500000 6.700000 17.556549 +13.500000 6.800000 17.294957 +13.500000 6.900000 17.053365 +13.500000 7.000000 16.831773 +13.500000 7.100000 16.630182 +13.500000 7.200000 16.448590 +13.500000 7.300000 16.286998 +13.500000 7.400000 16.145406 +13.500000 7.500000 16.023814 +13.500000 7.600000 15.922222 +13.500000 7.700000 15.840630 +13.500000 7.800000 15.779038 +13.500000 7.900000 15.737446 +13.500000 8.000000 15.715855 +13.500000 8.100000 15.714263 +13.500000 8.200000 15.732671 +13.500000 8.300000 15.771079 +13.500000 8.400000 15.829487 +13.500000 8.500000 15.907895 +13.500000 8.600000 16.006303 +13.500000 8.700000 16.124711 +13.500000 8.800000 16.263119 +13.500000 8.900000 16.421527 +13.500000 9.000000 16.599936 +13.500000 9.100000 16.798344 +13.500000 9.200000 17.016752 +13.500000 9.300000 17.255160 +13.500000 9.400000 17.513568 +13.500000 9.500000 17.791976 +13.500000 9.600000 18.090384 +13.500000 9.700000 18.408792 +13.500000 9.800000 18.747200 +13.500000 9.900000 19.105609 +13.500000 10.000000 19.484017 +13.500000 10.100000 19.882425 +13.500000 10.200000 20.300833 +13.500000 10.300000 20.739241 +13.500000 10.400000 21.197649 +13.500000 10.500000 21.676057 +13.500000 10.600000 22.174465 +13.500000 10.700000 22.692873 +13.500000 10.800000 23.231281 +13.500000 10.900000 23.789690 +13.500000 11.000000 24.368098 +13.500000 11.100000 24.966506 +13.500000 11.200000 25.584914 +13.500000 11.300000 26.223322 +13.500000 11.400000 26.881730 +13.500000 11.500000 27.560138 +13.500000 11.600000 28.258546 +13.500000 11.700000 28.976954 +13.500000 11.800000 29.715363 +13.500000 11.900000 30.473771 +13.500000 12.000000 31.252179 +13.500000 12.100000 32.050587 +13.500000 12.200000 32.868995 +13.500000 12.300000 33.707403 +13.500000 12.400000 34.565811 +13.500000 12.500000 35.444219 +13.500000 12.600000 36.342627 +13.500000 12.700000 37.261035 +13.500000 12.800000 38.199444 +13.500000 12.900000 39.157852 +13.500000 13.000000 40.136260 +13.500000 13.100000 41.134668 +13.500000 13.200000 42.153076 +13.500000 13.300000 43.191484 +13.500000 13.400000 44.249892 +13.500000 13.500000 45.328300 +13.500000 13.600000 46.426708 +13.500000 13.700000 47.545117 +13.500000 13.800000 48.683525 +13.500000 13.900000 49.841933 +13.500000 14.000000 51.020341 +13.500000 14.100000 52.218749 +13.500000 14.200000 53.437157 +13.500000 14.300000 54.675565 +13.500000 14.400000 55.933973 +13.500000 14.500000 57.212381 +13.500000 14.600000 58.510789 +13.500000 14.700000 59.829198 +13.500000 14.800000 61.167606 +13.500000 14.900000 62.526014 +13.500000 15.000000 63.904422 + +13.600000 -5.000000 190.446646 +13.600000 -4.900000 187.806867 +13.600000 -4.800000 185.187088 +13.600000 -4.700000 182.587309 +13.600000 -4.600000 180.007531 +13.600000 -4.500000 177.447752 +13.600000 -4.400000 174.907973 +13.600000 -4.300000 172.388194 +13.600000 -4.200000 169.888415 +13.600000 -4.100000 167.408636 +13.600000 -4.000000 164.948857 +13.600000 -3.900000 162.509078 +13.600000 -3.800000 160.089299 +13.600000 -3.700000 157.689520 +13.600000 -3.600000 155.309741 +13.600000 -3.500000 152.949963 +13.600000 -3.400000 150.610184 +13.600000 -3.300000 148.290405 +13.600000 -3.200000 145.990626 +13.600000 -3.100000 143.710847 +13.600000 -3.000000 141.451068 +13.600000 -2.900000 139.211289 +13.600000 -2.800000 136.991510 +13.600000 -2.700000 134.791731 +13.600000 -2.600000 132.611952 +13.600000 -2.500000 130.452173 +13.600000 -2.400000 128.312395 +13.600000 -2.300000 126.192616 +13.600000 -2.200000 124.092837 +13.600000 -2.100000 122.013058 +13.600000 -2.000000 119.953279 +13.600000 -1.900000 117.913500 +13.600000 -1.800000 115.893721 +13.600000 -1.700000 113.893942 +13.600000 -1.600000 111.914163 +13.600000 -1.500000 109.954384 +13.600000 -1.400000 108.014605 +13.600000 -1.300000 106.094827 +13.600000 -1.200000 104.195048 +13.600000 -1.100000 102.315269 +13.600000 -1.000000 100.455490 +13.600000 -0.900000 98.615711 +13.600000 -0.800000 96.795932 +13.600000 -0.700000 94.996153 +13.600000 -0.600000 93.216374 +13.600000 -0.500000 91.456595 +13.600000 -0.400000 89.716816 +13.600000 -0.300000 87.997037 +13.600000 -0.200000 86.297259 +13.600000 -0.100000 84.617480 +13.600000 -0.000000 82.957701 +13.600000 0.100000 81.317922 +13.600000 0.200000 79.698143 +13.600000 0.300000 78.098364 +13.600000 0.400000 76.518585 +13.600000 0.500000 74.958806 +13.600000 0.600000 73.419027 +13.600000 0.700000 71.899248 +13.600000 0.800000 70.399469 +13.600000 0.900000 68.919690 +13.600000 1.000000 67.459912 +13.600000 1.100000 66.020133 +13.600000 1.200000 64.600354 +13.600000 1.300000 63.200575 +13.600000 1.400000 61.820796 +13.600000 1.500000 60.461017 +13.600000 1.600000 59.121238 +13.600000 1.700000 57.801459 +13.600000 1.800000 56.501680 +13.600000 1.900000 55.221901 +13.600000 2.000000 53.962122 +13.600000 2.100000 52.722344 +13.600000 2.200000 51.502565 +13.600000 2.300000 50.302786 +13.600000 2.400000 49.123007 +13.600000 2.500000 47.963228 +13.600000 2.600000 46.823449 +13.600000 2.700000 45.703670 +13.600000 2.800000 44.603891 +13.600000 2.900000 43.524112 +13.600000 3.000000 42.464333 +13.600000 3.100000 41.424554 +13.600000 3.200000 40.404776 +13.600000 3.300000 39.404997 +13.600000 3.400000 38.425218 +13.600000 3.500000 37.465439 +13.600000 3.600000 36.525660 +13.600000 3.700000 35.605881 +13.600000 3.800000 34.706102 +13.600000 3.900000 33.826323 +13.600000 4.000000 32.966544 +13.600000 4.100000 32.126765 +13.600000 4.200000 31.306986 +13.600000 4.300000 30.507208 +13.600000 4.400000 29.727429 +13.600000 4.500000 28.967650 +13.600000 4.600000 28.227871 +13.600000 4.700000 27.508092 +13.600000 4.800000 26.808313 +13.600000 4.900000 26.128534 +13.600000 5.000000 25.468755 +13.600000 5.100000 24.828976 +13.600000 5.200000 24.209197 +13.600000 5.300000 23.609418 +13.600000 5.400000 23.029640 +13.600000 5.500000 22.469861 +13.600000 5.600000 21.930082 +13.600000 5.700000 21.410303 +13.600000 5.800000 20.910524 +13.600000 5.900000 20.430745 +13.600000 6.000000 19.970966 +13.600000 6.100000 19.531187 +13.600000 6.200000 19.111408 +13.600000 6.300000 18.711629 +13.600000 6.400000 18.331850 +13.600000 6.500000 17.972072 +13.600000 6.600000 17.632293 +13.600000 6.700000 17.312514 +13.600000 6.800000 17.012735 +13.600000 6.900000 16.732956 +13.600000 7.000000 16.473177 +13.600000 7.100000 16.233398 +13.600000 7.200000 16.013619 +13.600000 7.300000 15.813840 +13.600000 7.400000 15.634061 +13.600000 7.500000 15.474282 +13.600000 7.600000 15.334504 +13.600000 7.700000 15.214725 +13.600000 7.800000 15.114946 +13.600000 7.900000 15.035167 +13.600000 8.000000 14.975388 +13.600000 8.100000 14.935609 +13.600000 8.200000 14.915830 +13.600000 8.300000 14.916051 +13.600000 8.400000 14.936272 +13.600000 8.500000 14.976493 +13.600000 8.600000 15.036714 +13.600000 8.700000 15.116936 +13.600000 8.800000 15.217157 +13.600000 8.900000 15.337378 +13.600000 9.000000 15.477599 +13.600000 9.100000 15.637820 +13.600000 9.200000 15.818041 +13.600000 9.300000 16.018262 +13.600000 9.400000 16.238483 +13.600000 9.500000 16.478704 +13.600000 9.600000 16.738925 +13.600000 9.700000 17.019146 +13.600000 9.800000 17.319367 +13.600000 9.900000 17.639589 +13.600000 10.000000 17.979810 +13.600000 10.100000 18.340031 +13.600000 10.200000 18.720252 +13.600000 10.300000 19.120473 +13.600000 10.400000 19.540694 +13.600000 10.500000 19.980915 +13.600000 10.600000 20.441136 +13.600000 10.700000 20.921357 +13.600000 10.800000 21.421578 +13.600000 10.900000 21.941799 +13.600000 11.000000 22.482021 +13.600000 11.100000 23.042242 +13.600000 11.200000 23.622463 +13.600000 11.300000 24.222684 +13.600000 11.400000 24.842905 +13.600000 11.500000 25.483126 +13.600000 11.600000 26.143347 +13.600000 11.700000 26.823568 +13.600000 11.800000 27.523789 +13.600000 11.900000 28.244010 +13.600000 12.000000 28.984231 +13.600000 12.100000 29.744453 +13.600000 12.200000 30.524674 +13.600000 12.300000 31.324895 +13.600000 12.400000 32.145116 +13.600000 12.500000 32.985337 +13.600000 12.600000 33.845558 +13.600000 12.700000 34.725779 +13.600000 12.800000 35.626000 +13.600000 12.900000 36.546221 +13.600000 13.000000 37.486442 +13.600000 13.100000 38.446663 +13.600000 13.200000 39.426885 +13.600000 13.300000 40.427106 +13.600000 13.400000 41.447327 +13.600000 13.500000 42.487548 +13.600000 13.600000 43.547769 +13.600000 13.700000 44.627990 +13.600000 13.800000 45.728211 +13.600000 13.900000 46.848432 +13.600000 14.000000 47.988653 +13.600000 14.100000 49.148874 +13.600000 14.200000 50.329095 +13.600000 14.300000 51.529317 +13.600000 14.400000 52.749538 +13.600000 14.500000 53.989759 +13.600000 14.600000 55.249980 +13.600000 14.700000 56.530201 +13.600000 14.800000 57.830422 +13.600000 14.900000 59.150643 +13.600000 15.000000 60.490864 + +13.700000 -5.000000 194.763766 +13.700000 -4.900000 192.085283 +13.700000 -4.800000 189.426801 +13.700000 -4.700000 186.788318 +13.700000 -4.600000 184.169835 +13.700000 -4.500000 181.571353 +13.700000 -4.400000 178.992870 +13.700000 -4.300000 176.434387 +13.700000 -4.200000 173.895905 +13.700000 -4.100000 171.377422 +13.700000 -4.000000 168.878939 +13.700000 -3.900000 166.400457 +13.700000 -3.800000 163.941974 +13.700000 -3.700000 161.503491 +13.700000 -3.600000 159.085009 +13.700000 -3.500000 156.686526 +13.700000 -3.400000 154.308043 +13.700000 -3.300000 151.949561 +13.700000 -3.200000 149.611078 +13.700000 -3.100000 147.292595 +13.700000 -3.000000 144.994113 +13.700000 -2.900000 142.715630 +13.700000 -2.800000 140.457147 +13.700000 -2.700000 138.218665 +13.700000 -2.600000 136.000182 +13.700000 -2.500000 133.801699 +13.700000 -2.400000 131.623217 +13.700000 -2.300000 129.464734 +13.700000 -2.200000 127.326251 +13.700000 -2.100000 125.207769 +13.700000 -2.000000 123.109286 +13.700000 -1.900000 121.030803 +13.700000 -1.800000 118.972321 +13.700000 -1.700000 116.933838 +13.700000 -1.600000 114.915355 +13.700000 -1.500000 112.916873 +13.700000 -1.400000 110.938390 +13.700000 -1.300000 108.979907 +13.700000 -1.200000 107.041425 +13.700000 -1.100000 105.122942 +13.700000 -1.000000 103.224459 +13.700000 -0.900000 101.345977 +13.700000 -0.800000 99.487494 +13.700000 -0.700000 97.649011 +13.700000 -0.600000 95.830529 +13.700000 -0.500000 94.032046 +13.700000 -0.400000 92.253563 +13.700000 -0.300000 90.495081 +13.700000 -0.200000 88.756598 +13.700000 -0.100000 87.038115 +13.700000 -0.000000 85.339633 +13.700000 0.100000 83.661150 +13.700000 0.200000 82.002667 +13.700000 0.300000 80.364185 +13.700000 0.400000 78.745702 +13.700000 0.500000 77.147219 +13.700000 0.600000 75.568737 +13.700000 0.700000 74.010254 +13.700000 0.800000 72.471771 +13.700000 0.900000 70.953289 +13.700000 1.000000 69.454806 +13.700000 1.100000 67.976323 +13.700000 1.200000 66.517841 +13.700000 1.300000 65.079358 +13.700000 1.400000 63.660875 +13.700000 1.500000 62.262393 +13.700000 1.600000 60.883910 +13.700000 1.700000 59.525427 +13.700000 1.800000 58.186945 +13.700000 1.900000 56.868462 +13.700000 2.000000 55.569979 +13.700000 2.100000 54.291497 +13.700000 2.200000 53.033014 +13.700000 2.300000 51.794531 +13.700000 2.400000 50.576049 +13.700000 2.500000 49.377566 +13.700000 2.600000 48.199083 +13.700000 2.700000 47.040601 +13.700000 2.800000 45.902118 +13.700000 2.900000 44.783635 +13.700000 3.000000 43.685153 +13.700000 3.100000 42.606670 +13.700000 3.200000 41.548187 +13.700000 3.300000 40.509705 +13.700000 3.400000 39.491222 +13.700000 3.500000 38.492739 +13.700000 3.600000 37.514257 +13.700000 3.700000 36.555774 +13.700000 3.800000 35.617291 +13.700000 3.900000 34.698809 +13.700000 4.000000 33.800326 +13.700000 4.100000 32.921843 +13.700000 4.200000 32.063361 +13.700000 4.300000 31.224878 +13.700000 4.400000 30.406395 +13.700000 4.500000 29.607913 +13.700000 4.600000 28.829430 +13.700000 4.700000 28.070948 +13.700000 4.800000 27.332465 +13.700000 4.900000 26.613982 +13.700000 5.000000 25.915500 +13.700000 5.100000 25.237017 +13.700000 5.200000 24.578534 +13.700000 5.300000 23.940052 +13.700000 5.400000 23.321569 +13.700000 5.500000 22.723086 +13.700000 5.600000 22.144604 +13.700000 5.700000 21.586121 +13.700000 5.800000 21.047638 +13.700000 5.900000 20.529156 +13.700000 6.000000 20.030673 +13.700000 6.100000 19.552190 +13.700000 6.200000 19.093708 +13.700000 6.300000 18.655225 +13.700000 6.400000 18.236742 +13.700000 6.500000 17.838260 +13.700000 6.600000 17.459777 +13.700000 6.700000 17.101294 +13.700000 6.800000 16.762812 +13.700000 6.900000 16.444329 +13.700000 7.000000 16.145846 +13.700000 7.100000 15.867364 +13.700000 7.200000 15.608881 +13.700000 7.300000 15.370398 +13.700000 7.400000 15.151916 +13.700000 7.500000 14.953433 +13.700000 7.600000 14.774950 +13.700000 7.700000 14.616468 +13.700000 7.800000 14.477985 +13.700000 7.900000 14.359502 +13.700000 8.000000 14.261020 +13.700000 8.100000 14.182537 +13.700000 8.200000 14.124054 +13.700000 8.300000 14.085572 +13.700000 8.400000 14.067089 +13.700000 8.500000 14.068606 +13.700000 8.600000 14.090124 +13.700000 8.700000 14.131641 +13.700000 8.800000 14.193158 +13.700000 8.900000 14.274676 +13.700000 9.000000 14.376193 +13.700000 9.100000 14.497710 +13.700000 9.200000 14.639228 +13.700000 9.300000 14.800745 +13.700000 9.400000 14.982262 +13.700000 9.500000 15.183780 +13.700000 9.600000 15.405297 +13.700000 9.700000 15.646814 +13.700000 9.800000 15.908332 +13.700000 9.900000 16.189849 +13.700000 10.000000 16.491366 +13.700000 10.100000 16.812884 +13.700000 10.200000 17.154401 +13.700000 10.300000 17.515918 +13.700000 10.400000 17.897436 +13.700000 10.500000 18.298953 +13.700000 10.600000 18.720470 +13.700000 10.700000 19.161988 +13.700000 10.800000 19.623505 +13.700000 10.900000 20.105022 +13.700000 11.000000 20.606540 +13.700000 11.100000 21.128057 +13.700000 11.200000 21.669574 +13.700000 11.300000 22.231092 +13.700000 11.400000 22.812609 +13.700000 11.500000 23.414126 +13.700000 11.600000 24.035644 +13.700000 11.700000 24.677161 +13.700000 11.800000 25.338678 +13.700000 11.900000 26.020196 +13.700000 12.000000 26.721713 +13.700000 12.100000 27.443230 +13.700000 12.200000 28.184748 +13.700000 12.300000 28.946265 +13.700000 12.400000 29.727782 +13.700000 12.500000 30.529300 +13.700000 12.600000 31.350817 +13.700000 12.700000 32.192334 +13.700000 12.800000 33.053852 +13.700000 12.900000 33.935369 +13.700000 13.000000 34.836886 +13.700000 13.100000 35.758404 +13.700000 13.200000 36.699921 +13.700000 13.300000 37.661438 +13.700000 13.400000 38.642956 +13.700000 13.500000 39.644473 +13.700000 13.600000 40.665990 +13.700000 13.700000 41.707508 +13.700000 13.800000 42.769025 +13.700000 13.900000 43.850542 +13.700000 14.000000 44.952060 +13.700000 14.100000 46.073577 +13.700000 14.200000 47.215094 +13.700000 14.300000 48.376612 +13.700000 14.400000 49.558129 +13.700000 14.500000 50.759646 +13.700000 14.600000 51.981164 +13.700000 14.700000 53.222681 +13.700000 14.800000 54.484198 +13.700000 14.900000 55.765716 +13.700000 15.000000 57.067233 + +13.800000 -5.000000 199.185634 +13.800000 -4.900000 196.467931 +13.800000 -4.800000 193.770228 +13.800000 -4.700000 191.092525 +13.800000 -4.600000 188.434822 +13.800000 -4.500000 185.797118 +13.800000 -4.400000 183.179415 +13.800000 -4.300000 180.581712 +13.800000 -4.200000 178.004009 +13.800000 -4.100000 175.446306 +13.800000 -4.000000 172.908603 +13.800000 -3.900000 170.390900 +13.800000 -3.800000 167.893196 +13.800000 -3.700000 165.415493 +13.800000 -3.600000 162.957790 +13.800000 -3.500000 160.520087 +13.800000 -3.400000 158.102384 +13.800000 -3.300000 155.704681 +13.800000 -3.200000 153.326977 +13.800000 -3.100000 150.969274 +13.800000 -3.000000 148.631571 +13.800000 -2.900000 146.313868 +13.800000 -2.800000 144.016165 +13.800000 -2.700000 141.738462 +13.800000 -2.600000 139.480759 +13.800000 -2.500000 137.243055 +13.800000 -2.400000 135.025352 +13.800000 -2.300000 132.827649 +13.800000 -2.200000 130.649946 +13.800000 -2.100000 128.492243 +13.800000 -2.000000 126.354540 +13.800000 -1.900000 124.236836 +13.800000 -1.800000 122.139133 +13.800000 -1.700000 120.061430 +13.800000 -1.600000 118.003727 +13.800000 -1.500000 115.966024 +13.800000 -1.400000 113.948321 +13.800000 -1.300000 111.950618 +13.800000 -1.200000 109.972914 +13.800000 -1.100000 108.015211 +13.800000 -1.000000 106.077508 +13.800000 -0.900000 104.159805 +13.800000 -0.800000 102.262102 +13.800000 -0.700000 100.384399 +13.800000 -0.600000 98.526695 +13.800000 -0.500000 96.688992 +13.800000 -0.400000 94.871289 +13.800000 -0.300000 93.073586 +13.800000 -0.200000 91.295883 +13.800000 -0.100000 89.538180 +13.800000 -0.000000 87.800477 +13.800000 0.100000 86.082773 +13.800000 0.200000 84.385070 +13.800000 0.300000 82.707367 +13.800000 0.400000 81.049664 +13.800000 0.500000 79.411961 +13.800000 0.600000 77.794258 +13.800000 0.700000 76.196554 +13.800000 0.800000 74.618851 +13.800000 0.900000 73.061148 +13.800000 1.000000 71.523445 +13.800000 1.100000 70.005742 +13.800000 1.200000 68.508039 +13.800000 1.300000 67.030335 +13.800000 1.400000 65.572632 +13.800000 1.500000 64.134929 +13.800000 1.600000 62.717226 +13.800000 1.700000 61.319523 +13.800000 1.800000 59.941820 +13.800000 1.900000 58.584117 +13.800000 2.000000 57.246413 +13.800000 2.100000 55.928710 +13.800000 2.200000 54.631007 +13.800000 2.300000 53.353304 +13.800000 2.400000 52.095601 +13.800000 2.500000 50.857898 +13.800000 2.600000 49.640194 +13.800000 2.700000 48.442491 +13.800000 2.800000 47.264788 +13.800000 2.900000 46.107085 +13.800000 3.000000 44.969382 +13.800000 3.100000 43.851679 +13.800000 3.200000 42.753976 +13.800000 3.300000 41.676272 +13.800000 3.400000 40.618569 +13.800000 3.500000 39.580866 +13.800000 3.600000 38.563163 +13.800000 3.700000 37.565460 +13.800000 3.800000 36.587757 +13.800000 3.900000 35.630053 +13.800000 4.000000 34.692350 +13.800000 4.100000 33.774647 +13.800000 4.200000 32.876944 +13.800000 4.300000 31.999241 +13.800000 4.400000 31.141538 +13.800000 4.500000 30.303835 +13.800000 4.600000 29.486131 +13.800000 4.700000 28.688428 +13.800000 4.800000 27.910725 +13.800000 4.900000 27.153022 +13.800000 5.000000 26.415319 +13.800000 5.100000 25.697616 +13.800000 5.200000 24.999912 +13.800000 5.300000 24.322209 +13.800000 5.400000 23.664506 +13.800000 5.500000 23.026803 +13.800000 5.600000 22.409100 +13.800000 5.700000 21.811397 +13.800000 5.800000 21.233694 +13.800000 5.900000 20.675990 +13.800000 6.000000 20.138287 +13.800000 6.100000 19.620584 +13.800000 6.200000 19.122881 +13.800000 6.300000 18.645178 +13.800000 6.400000 18.187475 +13.800000 6.500000 17.749771 +13.800000 6.600000 17.332068 +13.800000 6.700000 16.934365 +13.800000 6.800000 16.556662 +13.800000 6.900000 16.198959 +13.800000 7.000000 15.861256 +13.800000 7.100000 15.543553 +13.800000 7.200000 15.245849 +13.800000 7.300000 14.968146 +13.800000 7.400000 14.710443 +13.800000 7.500000 14.472740 +13.800000 7.600000 14.255037 +13.800000 7.700000 14.057334 +13.800000 7.800000 13.879630 +13.800000 7.900000 13.721927 +13.800000 8.000000 13.584224 +13.800000 8.100000 13.466521 +13.800000 8.200000 13.368818 +13.800000 8.300000 13.291115 +13.800000 8.400000 13.233411 +13.800000 8.500000 13.195708 +13.800000 8.600000 13.178005 +13.800000 8.700000 13.180302 +13.800000 8.800000 13.202599 +13.800000 8.900000 13.244896 +13.800000 9.000000 13.307193 +13.800000 9.100000 13.389489 +13.800000 9.200000 13.491786 +13.800000 9.300000 13.614083 +13.800000 9.400000 13.756380 +13.800000 9.500000 13.918677 +13.800000 9.600000 14.100974 +13.800000 9.700000 14.303270 +13.800000 9.800000 14.525567 +13.800000 9.900000 14.767864 +13.800000 10.000000 15.030161 +13.800000 10.100000 15.312458 +13.800000 10.200000 15.614755 +13.800000 10.300000 15.937052 +13.800000 10.400000 16.279348 +13.800000 10.500000 16.641645 +13.800000 10.600000 17.023942 +13.800000 10.700000 17.426239 +13.800000 10.800000 17.848536 +13.800000 10.900000 18.290833 +13.800000 11.000000 18.753129 +13.800000 11.100000 19.235426 +13.800000 11.200000 19.737723 +13.800000 11.300000 20.260020 +13.800000 11.400000 20.802317 +13.800000 11.500000 21.364614 +13.800000 11.600000 21.946911 +13.800000 11.700000 22.549207 +13.800000 11.800000 23.171504 +13.800000 11.900000 23.813801 +13.800000 12.000000 24.476098 +13.800000 12.100000 25.158395 +13.800000 12.200000 25.860692 +13.800000 12.300000 26.582988 +13.800000 12.400000 27.325285 +13.800000 12.500000 28.087582 +13.800000 12.600000 28.869879 +13.800000 12.700000 29.672176 +13.800000 12.800000 30.494473 +13.800000 12.900000 31.336770 +13.800000 13.000000 32.199066 +13.800000 13.100000 33.081363 +13.800000 13.200000 33.983660 +13.800000 13.300000 34.905957 +13.800000 13.400000 35.848254 +13.800000 13.500000 36.810551 +13.800000 13.600000 37.792847 +13.800000 13.700000 38.795144 +13.800000 13.800000 39.817441 +13.800000 13.900000 40.859738 +13.800000 14.000000 41.922035 +13.800000 14.100000 43.004332 +13.800000 14.200000 44.106629 +13.800000 14.300000 45.228925 +13.800000 14.400000 46.371222 +13.800000 14.500000 47.533519 +13.800000 14.600000 48.715816 +13.800000 14.700000 49.918113 +13.800000 14.800000 51.140410 +13.800000 14.900000 52.382706 +13.800000 15.000000 53.645003 + +13.900000 -5.000000 203.724172 +13.900000 -4.900000 200.966731 +13.900000 -4.800000 198.229291 +13.900000 -4.700000 195.511850 +13.900000 -4.600000 192.814410 +13.900000 -4.500000 190.136970 +13.900000 -4.400000 187.479529 +13.900000 -4.300000 184.842089 +13.900000 -4.200000 182.224649 +13.900000 -4.100000 179.627208 +13.900000 -4.000000 177.049768 +13.900000 -3.900000 174.492327 +13.900000 -3.800000 171.954887 +13.900000 -3.700000 169.437447 +13.900000 -3.600000 166.940006 +13.900000 -3.500000 164.462566 +13.900000 -3.400000 162.005126 +13.900000 -3.300000 159.567685 +13.900000 -3.200000 157.150245 +13.900000 -3.100000 154.752804 +13.900000 -3.000000 152.375364 +13.900000 -2.900000 150.017924 +13.900000 -2.800000 147.680483 +13.900000 -2.700000 145.363043 +13.900000 -2.600000 143.065602 +13.900000 -2.500000 140.788162 +13.900000 -2.400000 138.530722 +13.900000 -2.300000 136.293281 +13.900000 -2.200000 134.075841 +13.900000 -2.100000 131.878401 +13.900000 -2.000000 129.700960 +13.900000 -1.900000 127.543520 +13.900000 -1.800000 125.406079 +13.900000 -1.700000 123.288639 +13.900000 -1.600000 121.191199 +13.900000 -1.500000 119.113758 +13.900000 -1.400000 117.056318 +13.900000 -1.300000 115.018877 +13.900000 -1.200000 113.001437 +13.900000 -1.100000 111.003997 +13.900000 -1.000000 109.026556 +13.900000 -0.900000 107.069116 +13.900000 -0.800000 105.131676 +13.900000 -0.700000 103.214235 +13.900000 -0.600000 101.316795 +13.900000 -0.500000 99.439354 +13.900000 -0.400000 97.581914 +13.900000 -0.300000 95.744474 +13.900000 -0.200000 93.927033 +13.900000 -0.100000 92.129593 +13.900000 -0.000000 90.352152 +13.900000 0.100000 88.594712 +13.900000 0.200000 86.857272 +13.900000 0.300000 85.139831 +13.900000 0.400000 83.442391 +13.900000 0.500000 81.764951 +13.900000 0.600000 80.107510 +13.900000 0.700000 78.470070 +13.900000 0.800000 76.852629 +13.900000 0.900000 75.255189 +13.900000 1.000000 73.677749 +13.900000 1.100000 72.120308 +13.900000 1.200000 70.582868 +13.900000 1.300000 69.065427 +13.900000 1.400000 67.567987 +13.900000 1.500000 66.090547 +13.900000 1.600000 64.633106 +13.900000 1.700000 63.195666 +13.900000 1.800000 61.778226 +13.900000 1.900000 60.380785 +13.900000 2.000000 59.003345 +13.900000 2.100000 57.645904 +13.900000 2.200000 56.308464 +13.900000 2.300000 54.991024 +13.900000 2.400000 53.693583 +13.900000 2.500000 52.416143 +13.900000 2.600000 51.158702 +13.900000 2.700000 49.921262 +13.900000 2.800000 48.703822 +13.900000 2.900000 47.506381 +13.900000 3.000000 46.328941 +13.900000 3.100000 45.171501 +13.900000 3.200000 44.034060 +13.900000 3.300000 42.916620 +13.900000 3.400000 41.819179 +13.900000 3.500000 40.741739 +13.900000 3.600000 39.684299 +13.900000 3.700000 38.646858 +13.900000 3.800000 37.629418 +13.900000 3.900000 36.631977 +13.900000 4.000000 35.654537 +13.900000 4.100000 34.697097 +13.900000 4.200000 33.759656 +13.900000 4.300000 32.842216 +13.900000 4.400000 31.944776 +13.900000 4.500000 31.067335 +13.900000 4.600000 30.209895 +13.900000 4.700000 29.372454 +13.900000 4.800000 28.555014 +13.900000 4.900000 27.757574 +13.900000 5.000000 26.980133 +13.900000 5.100000 26.222693 +13.900000 5.200000 25.485252 +13.900000 5.300000 24.767812 +13.900000 5.400000 24.070372 +13.900000 5.500000 23.392931 +13.900000 5.600000 22.735491 +13.900000 5.700000 22.098051 +13.900000 5.800000 21.480610 +13.900000 5.900000 20.883170 +13.900000 6.000000 20.305729 +13.900000 6.100000 19.748289 +13.900000 6.200000 19.210849 +13.900000 6.300000 18.693408 +13.900000 6.400000 18.195968 +13.900000 6.500000 17.718527 +13.900000 6.600000 17.261087 +13.900000 6.700000 16.823647 +13.900000 6.800000 16.406206 +13.900000 6.900000 16.008766 +13.900000 7.000000 15.631326 +13.900000 7.100000 15.273885 +13.900000 7.200000 14.936445 +13.900000 7.300000 14.619004 +13.900000 7.400000 14.321564 +13.900000 7.500000 14.044124 +13.900000 7.600000 13.786683 +13.900000 7.700000 13.549243 +13.900000 7.800000 13.331802 +13.900000 7.900000 13.134362 +13.900000 8.000000 12.956922 +13.900000 8.100000 12.799481 +13.900000 8.200000 12.662041 +13.900000 8.300000 12.544601 +13.900000 8.400000 12.447160 +13.900000 8.500000 12.369720 +13.900000 8.600000 12.312279 +13.900000 8.700000 12.274839 +13.900000 8.800000 12.257399 +13.900000 8.900000 12.259958 +13.900000 9.000000 12.282518 +13.900000 9.100000 12.325077 +13.900000 9.200000 12.387637 +13.900000 9.300000 12.470197 +13.900000 9.400000 12.572756 +13.900000 9.500000 12.695316 +13.900000 9.600000 12.837876 +13.900000 9.700000 13.000435 +13.900000 9.800000 13.182995 +13.900000 9.900000 13.385554 +13.900000 10.000000 13.608114 +13.900000 10.100000 13.850674 +13.900000 10.200000 14.113233 +13.900000 10.300000 14.395793 +13.900000 10.400000 14.698352 +13.900000 10.500000 15.020912 +13.900000 10.600000 15.363472 +13.900000 10.700000 15.726031 +13.900000 10.800000 16.108591 +13.900000 10.900000 16.511151 +13.900000 11.000000 16.933710 +13.900000 11.100000 17.376270 +13.900000 11.200000 17.838829 +13.900000 11.300000 18.321389 +13.900000 11.400000 18.823949 +13.900000 11.500000 19.346508 +13.900000 11.600000 19.889068 +13.900000 11.700000 20.451627 +13.900000 11.800000 21.034187 +13.900000 11.900000 21.636747 +13.900000 12.000000 22.259306 +13.900000 12.100000 22.901866 +13.900000 12.200000 23.564426 +13.900000 12.300000 24.246985 +13.900000 12.400000 24.949545 +13.900000 12.500000 25.672104 +13.900000 12.600000 26.414664 +13.900000 12.700000 27.177224 +13.900000 12.800000 27.959783 +13.900000 12.900000 28.762343 +13.900000 13.000000 29.584902 +13.900000 13.100000 30.427462 +13.900000 13.200000 31.290022 +13.900000 13.300000 32.172581 +13.900000 13.400000 33.075141 +13.900000 13.500000 33.997701 +13.900000 13.600000 34.940260 +13.900000 13.700000 35.902820 +13.900000 13.800000 36.885379 +13.900000 13.900000 37.887939 +13.900000 14.000000 38.910499 +13.900000 14.100000 39.953058 +13.900000 14.200000 41.015618 +13.900000 14.300000 42.098177 +13.900000 14.400000 43.200737 +13.900000 14.500000 44.323297 +13.900000 14.600000 45.465856 +13.900000 14.700000 46.628416 +13.900000 14.800000 47.810976 +13.900000 14.900000 49.013535 +13.900000 15.000000 50.236095 + +14.000000 -5.000000 208.391656 +14.000000 -4.900000 205.593961 +14.000000 -4.800000 202.816267 +14.000000 -4.700000 200.058572 +14.000000 -4.600000 197.320878 +14.000000 -4.500000 194.603184 +14.000000 -4.400000 191.905489 +14.000000 -4.300000 189.227795 +14.000000 -4.200000 186.570101 +14.000000 -4.100000 183.932406 +14.000000 -4.000000 181.314712 +14.000000 -3.900000 178.717018 +14.000000 -3.800000 176.139323 +14.000000 -3.700000 173.581629 +14.000000 -3.600000 171.043935 +14.000000 -3.500000 168.526240 +14.000000 -3.400000 166.028546 +14.000000 -3.300000 163.550852 +14.000000 -3.200000 161.093157 +14.000000 -3.100000 158.655463 +14.000000 -3.000000 156.237768 +14.000000 -2.900000 153.840074 +14.000000 -2.800000 151.462380 +14.000000 -2.700000 149.104685 +14.000000 -2.600000 146.766991 +14.000000 -2.500000 144.449297 +14.000000 -2.400000 142.151602 +14.000000 -2.300000 139.873908 +14.000000 -2.200000 137.616214 +14.000000 -2.100000 135.378519 +14.000000 -2.000000 133.160825 +14.000000 -1.900000 130.963131 +14.000000 -1.800000 128.785436 +14.000000 -1.700000 126.627742 +14.000000 -1.600000 124.490048 +14.000000 -1.500000 122.372353 +14.000000 -1.400000 120.274659 +14.000000 -1.300000 118.196964 +14.000000 -1.200000 116.139270 +14.000000 -1.100000 114.101576 +14.000000 -1.000000 112.083881 +14.000000 -0.900000 110.086187 +14.000000 -0.800000 108.108493 +14.000000 -0.700000 106.150798 +14.000000 -0.600000 104.213104 +14.000000 -0.500000 102.295410 +14.000000 -0.400000 100.397715 +14.000000 -0.300000 98.520021 +14.000000 -0.200000 96.662327 +14.000000 -0.100000 94.824632 +14.000000 -0.000000 93.006938 +14.000000 0.100000 91.209244 +14.000000 0.200000 89.431549 +14.000000 0.300000 87.673855 +14.000000 0.400000 85.936161 +14.000000 0.500000 84.218466 +14.000000 0.600000 82.520772 +14.000000 0.700000 80.843077 +14.000000 0.800000 79.185383 +14.000000 0.900000 77.547689 +14.000000 1.000000 75.929994 +14.000000 1.100000 74.332300 +14.000000 1.200000 72.754606 +14.000000 1.300000 71.196911 +14.000000 1.400000 69.659217 +14.000000 1.500000 68.141523 +14.000000 1.600000 66.643828 +14.000000 1.700000 65.166134 +14.000000 1.800000 63.708440 +14.000000 1.900000 62.270745 +14.000000 2.000000 60.853051 +14.000000 2.100000 59.455357 +14.000000 2.200000 58.077662 +14.000000 2.300000 56.719968 +14.000000 2.400000 55.382273 +14.000000 2.500000 54.064579 +14.000000 2.600000 52.766885 +14.000000 2.700000 51.489190 +14.000000 2.800000 50.231496 +14.000000 2.900000 48.993802 +14.000000 3.000000 47.776107 +14.000000 3.100000 46.578413 +14.000000 3.200000 45.400719 +14.000000 3.300000 44.243024 +14.000000 3.400000 43.105330 +14.000000 3.500000 41.987636 +14.000000 3.600000 40.889941 +14.000000 3.700000 39.812247 +14.000000 3.800000 38.754553 +14.000000 3.900000 37.716858 +14.000000 4.000000 36.699164 +14.000000 4.100000 35.701469 +14.000000 4.200000 34.723775 +14.000000 4.300000 33.766081 +14.000000 4.400000 32.828386 +14.000000 4.500000 31.910692 +14.000000 4.600000 31.012998 +14.000000 4.700000 30.135303 +14.000000 4.800000 29.277609 +14.000000 4.900000 28.439915 +14.000000 5.000000 27.622220 +14.000000 5.100000 26.824526 +14.000000 5.200000 26.046832 +14.000000 5.300000 25.289137 +14.000000 5.400000 24.551443 +14.000000 5.500000 23.833749 +14.000000 5.600000 23.136054 +14.000000 5.700000 22.458360 +14.000000 5.800000 21.800666 +14.000000 5.900000 21.162971 +14.000000 6.000000 20.545277 +14.000000 6.100000 19.947582 +14.000000 6.200000 19.369888 +14.000000 6.300000 18.812194 +14.000000 6.400000 18.274499 +14.000000 6.500000 17.756805 +14.000000 6.600000 17.259111 +14.000000 6.700000 16.781416 +14.000000 6.800000 16.323722 +14.000000 6.900000 15.886028 +14.000000 7.000000 15.468333 +14.000000 7.100000 15.070639 +14.000000 7.200000 14.692945 +14.000000 7.300000 14.335250 +14.000000 7.400000 13.997556 +14.000000 7.500000 13.679862 +14.000000 7.600000 13.382167 +14.000000 7.700000 13.104473 +14.000000 7.800000 12.846778 +14.000000 7.900000 12.609084 +14.000000 8.000000 12.391390 +14.000000 8.100000 12.193695 +14.000000 8.200000 12.016001 +14.000000 8.300000 11.858307 +14.000000 8.400000 11.720612 +14.000000 8.500000 11.602918 +14.000000 8.600000 11.505224 +14.000000 8.700000 11.427529 +14.000000 8.800000 11.369835 +14.000000 8.900000 11.332141 +14.000000 9.000000 11.314446 +14.000000 9.100000 11.316752 +14.000000 9.200000 11.339058 +14.000000 9.300000 11.381363 +14.000000 9.400000 11.443669 +14.000000 9.500000 11.525974 +14.000000 9.600000 11.628280 +14.000000 9.700000 11.750586 +14.000000 9.800000 11.892891 +14.000000 9.900000 12.055197 +14.000000 10.000000 12.237503 +14.000000 10.100000 12.439808 +14.000000 10.200000 12.662114 +14.000000 10.300000 12.904420 +14.000000 10.400000 13.166725 +14.000000 10.500000 13.449031 +14.000000 10.600000 13.751337 +14.000000 10.700000 14.073642 +14.000000 10.800000 14.415948 +14.000000 10.900000 14.778254 +14.000000 11.000000 15.160559 +14.000000 11.100000 15.562865 +14.000000 11.200000 15.985171 +14.000000 11.300000 16.427476 +14.000000 11.400000 16.889782 +14.000000 11.500000 17.372087 +14.000000 11.600000 17.874393 +14.000000 11.700000 18.396699 +14.000000 11.800000 18.939004 +14.000000 11.900000 19.501310 +14.000000 12.000000 20.083616 +14.000000 12.100000 20.685921 +14.000000 12.200000 21.308227 +14.000000 12.300000 21.950533 +14.000000 12.400000 22.612838 +14.000000 12.500000 23.295144 +14.000000 12.600000 23.997450 +14.000000 12.700000 24.719755 +14.000000 12.800000 25.462061 +14.000000 12.900000 26.224367 +14.000000 13.000000 27.006672 +14.000000 13.100000 27.808978 +14.000000 13.200000 28.631283 +14.000000 13.300000 29.473589 +14.000000 13.400000 30.335895 +14.000000 13.500000 31.218200 +14.000000 13.600000 32.120506 +14.000000 13.700000 33.042812 +14.000000 13.800000 33.985117 +14.000000 13.900000 34.947423 +14.000000 14.000000 35.929729 +14.000000 14.100000 36.932034 +14.000000 14.200000 37.954340 +14.000000 14.300000 38.996646 +14.000000 14.400000 40.058951 +14.000000 14.500000 41.141257 +14.000000 14.600000 42.243563 +14.000000 14.700000 43.365868 +14.000000 14.800000 44.508174 +14.000000 14.900000 45.670479 +14.000000 15.000000 46.852785 + +14.100000 -5.000000 213.200629 +14.100000 -4.900000 210.362164 +14.100000 -4.800000 207.543698 +14.100000 -4.700000 204.745233 +14.100000 -4.600000 201.966768 +14.100000 -4.500000 199.208303 +14.100000 -4.400000 196.469838 +14.100000 -4.300000 193.751373 +14.100000 -4.200000 191.052908 +14.100000 -4.100000 188.374443 +14.100000 -4.000000 185.715978 +14.100000 -3.900000 183.077513 +14.100000 -3.800000 180.459048 +14.100000 -3.700000 177.860583 +14.100000 -3.600000 175.282118 +14.100000 -3.500000 172.723653 +14.100000 -3.400000 170.185188 +14.100000 -3.300000 167.666723 +14.100000 -3.200000 165.168258 +14.100000 -3.100000 162.689792 +14.100000 -3.000000 160.231327 +14.100000 -2.900000 157.792862 +14.100000 -2.800000 155.374397 +14.100000 -2.700000 152.975932 +14.100000 -2.600000 150.597467 +14.100000 -2.500000 148.239002 +14.100000 -2.400000 145.900537 +14.100000 -2.300000 143.582072 +14.100000 -2.200000 141.283607 +14.100000 -2.100000 139.005142 +14.100000 -2.000000 136.746677 +14.100000 -1.900000 134.508212 +14.100000 -1.800000 132.289747 +14.100000 -1.700000 130.091282 +14.100000 -1.600000 127.912817 +14.100000 -1.500000 125.754352 +14.100000 -1.400000 123.615887 +14.100000 -1.300000 121.497421 +14.100000 -1.200000 119.398956 +14.100000 -1.100000 117.320491 +14.100000 -1.000000 115.262026 +14.100000 -0.900000 113.223561 +14.100000 -0.800000 111.205096 +14.100000 -0.700000 109.206631 +14.100000 -0.600000 107.228166 +14.100000 -0.500000 105.269701 +14.100000 -0.400000 103.331236 +14.100000 -0.300000 101.412771 +14.100000 -0.200000 99.514306 +14.100000 -0.100000 97.635841 +14.100000 -0.000000 95.777376 +14.100000 0.100000 93.938911 +14.100000 0.200000 92.120446 +14.100000 0.300000 90.321981 +14.100000 0.400000 88.543515 +14.100000 0.500000 86.785050 +14.100000 0.600000 85.046585 +14.100000 0.700000 83.328120 +14.100000 0.800000 81.629655 +14.100000 0.900000 79.951190 +14.100000 1.000000 78.292725 +14.100000 1.100000 76.654260 +14.100000 1.200000 75.035795 +14.100000 1.300000 73.437330 +14.100000 1.400000 71.858865 +14.100000 1.500000 70.300400 +14.100000 1.600000 68.761935 +14.100000 1.700000 67.243470 +14.100000 1.800000 65.745005 +14.100000 1.900000 64.266540 +14.100000 2.000000 62.808075 +14.100000 2.100000 61.369610 +14.100000 2.200000 59.951144 +14.100000 2.300000 58.552679 +14.100000 2.400000 57.174214 +14.100000 2.500000 55.815749 +14.100000 2.600000 54.477284 +14.100000 2.700000 53.158819 +14.100000 2.800000 51.860354 +14.100000 2.900000 50.581889 +14.100000 3.000000 49.323424 +14.100000 3.100000 48.084959 +14.100000 3.200000 46.866494 +14.100000 3.300000 45.668029 +14.100000 3.400000 44.489564 +14.100000 3.500000 43.331099 +14.100000 3.600000 42.192634 +14.100000 3.700000 41.074169 +14.100000 3.800000 39.975704 +14.100000 3.900000 38.897238 +14.100000 4.000000 37.838773 +14.100000 4.100000 36.800308 +14.100000 4.200000 35.781843 +14.100000 4.300000 34.783378 +14.100000 4.400000 33.804913 +14.100000 4.500000 32.846448 +14.100000 4.600000 31.907983 +14.100000 4.700000 30.989518 +14.100000 4.800000 30.091053 +14.100000 4.900000 29.212588 +14.100000 5.000000 28.354123 +14.100000 5.100000 27.515658 +14.100000 5.200000 26.697193 +14.100000 5.300000 25.898728 +14.100000 5.400000 25.120263 +14.100000 5.500000 24.361798 +14.100000 5.600000 23.623332 +14.100000 5.700000 22.904867 +14.100000 5.800000 22.206402 +14.100000 5.900000 21.527937 +14.100000 6.000000 20.869472 +14.100000 6.100000 20.231007 +14.100000 6.200000 19.612542 +14.100000 6.300000 19.014077 +14.100000 6.400000 18.435612 +14.100000 6.500000 17.877147 +14.100000 6.600000 17.338682 +14.100000 6.700000 16.820217 +14.100000 6.800000 16.321752 +14.100000 6.900000 15.843287 +14.100000 7.000000 15.384822 +14.100000 7.100000 14.946357 +14.100000 7.200000 14.527892 +14.100000 7.300000 14.129427 +14.100000 7.400000 13.750961 +14.100000 7.500000 13.392496 +14.100000 7.600000 13.054031 +14.100000 7.700000 12.735566 +14.100000 7.800000 12.437101 +14.100000 7.900000 12.158636 +14.100000 8.000000 11.900171 +14.100000 8.100000 11.661706 +14.100000 8.200000 11.443241 +14.100000 8.300000 11.244776 +14.100000 8.400000 11.066311 +14.100000 8.500000 10.907846 +14.100000 8.600000 10.769381 +14.100000 8.700000 10.650916 +14.100000 8.800000 10.552451 +14.100000 8.900000 10.473986 +14.100000 9.000000 10.415521 +14.100000 9.100000 10.377055 +14.100000 9.200000 10.358590 +14.100000 9.300000 10.360125 +14.100000 9.400000 10.381660 +14.100000 9.500000 10.423195 +14.100000 9.600000 10.484730 +14.100000 9.700000 10.566265 +14.100000 9.800000 10.667800 +14.100000 9.900000 10.789335 +14.100000 10.000000 10.930870 +14.100000 10.100000 11.092405 +14.100000 10.200000 11.273940 +14.100000 10.300000 11.475475 +14.100000 10.400000 11.697010 +14.100000 10.500000 11.938545 +14.100000 10.600000 12.200080 +14.100000 10.700000 12.481615 +14.100000 10.800000 12.783150 +14.100000 10.900000 13.104684 +14.100000 11.000000 13.446219 +14.100000 11.100000 13.807754 +14.100000 11.200000 14.189289 +14.100000 11.300000 14.590824 +14.100000 11.400000 15.012359 +14.100000 11.500000 15.453894 +14.100000 11.600000 15.915429 +14.100000 11.700000 16.396964 +14.100000 11.800000 16.898499 +14.100000 11.900000 17.420034 +14.100000 12.000000 17.961569 +14.100000 12.100000 18.523104 +14.100000 12.200000 19.104639 +14.100000 12.300000 19.706174 +14.100000 12.400000 20.327709 +14.100000 12.500000 20.969244 +14.100000 12.600000 21.630778 +14.100000 12.700000 22.312313 +14.100000 12.800000 23.013848 +14.100000 12.900000 23.735383 +14.100000 13.000000 24.476918 +14.100000 13.100000 25.238453 +14.100000 13.200000 26.019988 +14.100000 13.300000 26.821523 +14.100000 13.400000 27.643058 +14.100000 13.500000 28.484593 +14.100000 13.600000 29.346128 +14.100000 13.700000 30.227663 +14.100000 13.800000 31.129198 +14.100000 13.900000 32.050733 +14.100000 14.000000 32.992268 +14.100000 14.100000 33.953803 +14.100000 14.200000 34.935338 +14.100000 14.300000 35.936872 +14.100000 14.400000 36.958407 +14.100000 14.500000 37.999942 +14.100000 14.600000 39.061477 +14.100000 14.700000 40.143012 +14.100000 14.800000 41.244547 +14.100000 14.900000 42.366082 +14.100000 15.000000 43.507617 + +14.200000 -5.000000 218.163805 +14.200000 -4.900000 215.284052 +14.200000 -4.800000 212.424300 +14.200000 -4.700000 209.584547 +14.200000 -4.600000 206.764795 +14.200000 -4.500000 203.965042 +14.200000 -4.400000 201.185290 +14.200000 -4.300000 198.425537 +14.200000 -4.200000 195.685785 +14.200000 -4.100000 192.966032 +14.200000 -4.000000 190.266280 +14.200000 -3.900000 187.586527 +14.200000 -3.800000 184.926775 +14.200000 -3.700000 182.287022 +14.200000 -3.600000 179.667270 +14.200000 -3.500000 177.067517 +14.200000 -3.400000 174.487765 +14.200000 -3.300000 171.928012 +14.200000 -3.200000 169.388260 +14.200000 -3.100000 166.868507 +14.200000 -3.000000 164.368755 +14.200000 -2.900000 161.889002 +14.200000 -2.800000 159.429250 +14.200000 -2.700000 156.989497 +14.200000 -2.600000 154.569745 +14.200000 -2.500000 152.169992 +14.200000 -2.400000 149.790240 +14.200000 -2.300000 147.430487 +14.200000 -2.200000 145.090735 +14.200000 -2.100000 142.770982 +14.200000 -2.000000 140.471230 +14.200000 -1.900000 138.191477 +14.200000 -1.800000 135.931725 +14.200000 -1.700000 133.691972 +14.200000 -1.600000 131.472220 +14.200000 -1.500000 129.272467 +14.200000 -1.400000 127.092715 +14.200000 -1.300000 124.932962 +14.200000 -1.200000 122.793210 +14.200000 -1.100000 120.673457 +14.200000 -1.000000 118.573705 +14.200000 -0.900000 116.493952 +14.200000 -0.800000 114.434200 +14.200000 -0.700000 112.394447 +14.200000 -0.600000 110.374695 +14.200000 -0.500000 108.374942 +14.200000 -0.400000 106.395190 +14.200000 -0.300000 104.435437 +14.200000 -0.200000 102.495685 +14.200000 -0.100000 100.575932 +14.200000 -0.000000 98.676180 +14.200000 0.100000 96.796427 +14.200000 0.200000 94.936675 +14.200000 0.300000 93.096922 +14.200000 0.400000 91.277170 +14.200000 0.500000 89.477417 +14.200000 0.600000 87.697665 +14.200000 0.700000 85.937912 +14.200000 0.800000 84.198160 +14.200000 0.900000 82.478407 +14.200000 1.000000 80.778655 +14.200000 1.100000 79.098902 +14.200000 1.200000 77.439150 +14.200000 1.300000 75.799397 +14.200000 1.400000 74.179645 +14.200000 1.500000 72.579892 +14.200000 1.600000 71.000140 +14.200000 1.700000 69.440387 +14.200000 1.800000 67.900635 +14.200000 1.900000 66.380882 +14.200000 2.000000 64.881130 +14.200000 2.100000 63.401377 +14.200000 2.200000 61.941625 +14.200000 2.300000 60.501872 +14.200000 2.400000 59.082120 +14.200000 2.500000 57.682367 +14.200000 2.600000 56.302615 +14.200000 2.700000 54.942862 +14.200000 2.800000 53.603110 +14.200000 2.900000 52.283357 +14.200000 3.000000 50.983605 +14.200000 3.100000 49.703852 +14.200000 3.200000 48.444100 +14.200000 3.300000 47.204347 +14.200000 3.400000 45.984595 +14.200000 3.500000 44.784842 +14.200000 3.600000 43.605090 +14.200000 3.700000 42.445337 +14.200000 3.800000 41.305585 +14.200000 3.900000 40.185832 +14.200000 4.000000 39.086080 +14.200000 4.100000 38.006327 +14.200000 4.200000 36.946575 +14.200000 4.300000 35.906822 +14.200000 4.400000 34.887070 +14.200000 4.500000 33.887317 +14.200000 4.600000 32.907565 +14.200000 4.700000 31.947812 +14.200000 4.800000 31.008060 +14.200000 4.900000 30.088307 +14.200000 5.000000 29.188555 +14.200000 5.100000 28.308802 +14.200000 5.200000 27.449050 +14.200000 5.300000 26.609297 +14.200000 5.400000 25.789545 +14.200000 5.500000 24.989792 +14.200000 5.600000 24.210040 +14.200000 5.700000 23.450287 +14.200000 5.800000 22.710535 +14.200000 5.900000 21.990782 +14.200000 6.000000 21.291030 +14.200000 6.100000 20.611277 +14.200000 6.200000 19.951525 +14.200000 6.300000 19.311772 +14.200000 6.400000 18.692020 +14.200000 6.500000 18.092267 +14.200000 6.600000 17.512515 +14.200000 6.700000 16.952762 +14.200000 6.800000 16.413010 +14.200000 6.900000 15.893257 +14.200000 7.000000 15.393505 +14.200000 7.100000 14.913752 +14.200000 7.200000 14.454000 +14.200000 7.300000 14.014247 +14.200000 7.400000 13.594495 +14.200000 7.500000 13.194742 +14.200000 7.600000 12.814990 +14.200000 7.700000 12.455237 +14.200000 7.800000 12.115485 +14.200000 7.900000 11.795732 +14.200000 8.000000 11.495980 +14.200000 8.100000 11.216227 +14.200000 8.200000 10.956475 +14.200000 8.300000 10.716722 +14.200000 8.400000 10.496970 +14.200000 8.500000 10.297217 +14.200000 8.600000 10.117465 +14.200000 8.700000 9.957712 +14.200000 8.800000 9.817960 +14.200000 8.900000 9.698207 +14.200000 9.000000 9.598455 +14.200000 9.100000 9.518702 +14.200000 9.200000 9.458950 +14.200000 9.300000 9.419197 +14.200000 9.400000 9.399445 +14.200000 9.500000 9.399692 +14.200000 9.600000 9.419940 +14.200000 9.700000 9.460187 +14.200000 9.800000 9.520435 +14.200000 9.900000 9.600682 +14.200000 10.000000 9.700930 +14.200000 10.100000 9.821177 +14.200000 10.200000 9.961425 +14.200000 10.300000 10.121672 +14.200000 10.400000 10.301920 +14.200000 10.500000 10.502167 +14.200000 10.600000 10.722415 +14.200000 10.700000 10.962662 +14.200000 10.800000 11.222910 +14.200000 10.900000 11.503157 +14.200000 11.000000 11.803405 +14.200000 11.100000 12.123652 +14.200000 11.200000 12.463900 +14.200000 11.300000 12.824147 +14.200000 11.400000 13.204395 +14.200000 11.500000 13.604642 +14.200000 11.600000 14.024890 +14.200000 11.700000 14.465137 +14.200000 11.800000 14.925385 +14.200000 11.900000 15.405632 +14.200000 12.000000 15.905880 +14.200000 12.100000 16.426127 +14.200000 12.200000 16.966375 +14.200000 12.300000 17.526622 +14.200000 12.400000 18.106870 +14.200000 12.500000 18.707117 +14.200000 12.600000 19.327365 +14.200000 12.700000 19.967612 +14.200000 12.800000 20.627860 +14.200000 12.900000 21.308107 +14.200000 13.000000 22.008355 +14.200000 13.100000 22.728602 +14.200000 13.200000 23.468850 +14.200000 13.300000 24.229097 +14.200000 13.400000 25.009345 +14.200000 13.500000 25.809592 +14.200000 13.600000 26.629840 +14.200000 13.700000 27.470087 +14.200000 13.800000 28.330335 +14.200000 13.900000 29.210582 +14.200000 14.000000 30.110830 +14.200000 14.100000 31.031077 +14.200000 14.200000 31.971325 +14.200000 14.300000 32.931572 +14.200000 14.400000 33.911820 +14.200000 14.500000 34.912067 +14.200000 14.600000 35.932315 +14.200000 14.700000 36.972562 +14.200000 14.800000 38.032810 +14.200000 14.900000 39.113057 +14.200000 15.000000 40.213305 + +14.300000 -5.000000 223.293973 +14.300000 -4.900000 220.372417 +14.300000 -4.800000 217.470860 +14.300000 -4.700000 214.589303 +14.300000 -4.600000 211.727747 +14.300000 -4.500000 208.886190 +14.300000 -4.400000 206.064633 +14.300000 -4.300000 203.263077 +14.300000 -4.200000 200.481520 +14.300000 -4.100000 197.719963 +14.300000 -4.000000 194.978407 +14.300000 -3.900000 192.256850 +14.300000 -3.800000 189.555293 +14.300000 -3.700000 186.873737 +14.300000 -3.600000 184.212180 +14.300000 -3.500000 181.570623 +14.300000 -3.400000 178.949067 +14.300000 -3.300000 176.347510 +14.300000 -3.200000 173.765953 +14.300000 -3.100000 171.204397 +14.300000 -3.000000 168.662840 +14.300000 -2.900000 166.141283 +14.300000 -2.800000 163.639726 +14.300000 -2.700000 161.158170 +14.300000 -2.600000 158.696613 +14.300000 -2.500000 156.255056 +14.300000 -2.400000 153.833500 +14.300000 -2.300000 151.431943 +14.300000 -2.200000 149.050386 +14.300000 -2.100000 146.688830 +14.300000 -2.000000 144.347273 +14.300000 -1.900000 142.025716 +14.300000 -1.800000 139.724160 +14.300000 -1.700000 137.442603 +14.300000 -1.600000 135.181046 +14.300000 -1.500000 132.939490 +14.300000 -1.400000 130.717933 +14.300000 -1.300000 128.516376 +14.300000 -1.200000 126.334820 +14.300000 -1.100000 124.173263 +14.300000 -1.000000 122.031706 +14.300000 -0.900000 119.910150 +14.300000 -0.800000 117.808593 +14.300000 -0.700000 115.727036 +14.300000 -0.600000 113.665479 +14.300000 -0.500000 111.623923 +14.300000 -0.400000 109.602366 +14.300000 -0.300000 107.600809 +14.300000 -0.200000 105.619253 +14.300000 -0.100000 103.657696 +14.300000 -0.000000 101.716139 +14.300000 0.100000 99.794583 +14.300000 0.200000 97.893026 +14.300000 0.300000 96.011469 +14.300000 0.400000 94.149913 +14.300000 0.500000 92.308356 +14.300000 0.600000 90.486799 +14.300000 0.700000 88.685243 +14.300000 0.800000 86.903686 +14.300000 0.900000 85.142129 +14.300000 1.000000 83.400573 +14.300000 1.100000 81.679016 +14.300000 1.200000 79.977459 +14.300000 1.300000 78.295902 +14.300000 1.400000 76.634346 +14.300000 1.500000 74.992789 +14.300000 1.600000 73.371232 +14.300000 1.700000 71.769676 +14.300000 1.800000 70.188119 +14.300000 1.900000 68.626562 +14.300000 2.000000 67.085006 +14.300000 2.100000 65.563449 +14.300000 2.200000 64.061892 +14.300000 2.300000 62.580336 +14.300000 2.400000 61.118779 +14.300000 2.500000 59.677222 +14.300000 2.600000 58.255666 +14.300000 2.700000 56.854109 +14.300000 2.800000 55.472552 +14.300000 2.900000 54.110996 +14.300000 3.000000 52.769439 +14.300000 3.100000 51.447882 +14.300000 3.200000 50.146326 +14.300000 3.300000 48.864769 +14.300000 3.400000 47.603212 +14.300000 3.500000 46.361655 +14.300000 3.600000 45.140099 +14.300000 3.700000 43.938542 +14.300000 3.800000 42.756985 +14.300000 3.900000 41.595429 +14.300000 4.000000 40.453872 +14.300000 4.100000 39.332315 +14.300000 4.200000 38.230759 +14.300000 4.300000 37.149202 +14.300000 4.400000 36.087645 +14.300000 4.500000 35.046089 +14.300000 4.600000 34.024532 +14.300000 4.700000 33.022975 +14.300000 4.800000 32.041419 +14.300000 4.900000 31.079862 +14.300000 5.000000 30.138305 +14.300000 5.100000 29.216749 +14.300000 5.200000 28.315192 +14.300000 5.300000 27.433635 +14.300000 5.400000 26.572079 +14.300000 5.500000 25.730522 +14.300000 5.600000 24.908965 +14.300000 5.700000 24.107408 +14.300000 5.800000 23.325852 +14.300000 5.900000 22.564295 +14.300000 6.000000 21.822738 +14.300000 6.100000 21.101182 +14.300000 6.200000 20.399625 +14.300000 6.300000 19.718068 +14.300000 6.400000 19.056512 +14.300000 6.500000 18.414955 +14.300000 6.600000 17.793398 +14.300000 6.700000 17.191842 +14.300000 6.800000 16.610285 +14.300000 6.900000 16.048728 +14.300000 7.000000 15.507172 +14.300000 7.100000 14.985615 +14.300000 7.200000 14.484058 +14.300000 7.300000 14.002502 +14.300000 7.400000 13.540945 +14.300000 7.500000 13.099388 +14.300000 7.600000 12.677831 +14.300000 7.700000 12.276275 +14.300000 7.800000 11.894718 +14.300000 7.900000 11.533161 +14.300000 8.000000 11.191605 +14.300000 8.100000 10.870048 +14.300000 8.200000 10.568491 +14.300000 8.300000 10.286935 +14.300000 8.400000 10.025378 +14.300000 8.500000 9.783821 +14.300000 8.600000 9.562265 +14.300000 8.700000 9.360708 +14.300000 8.800000 9.179151 +14.300000 8.900000 9.017595 +14.300000 9.000000 8.876038 +14.300000 9.100000 8.754481 +14.300000 9.200000 8.652925 +14.300000 9.300000 8.571368 +14.300000 9.400000 8.509811 +14.300000 9.500000 8.468255 +14.300000 9.600000 8.446698 +14.300000 9.700000 8.445141 +14.300000 9.800000 8.463584 +14.300000 9.900000 8.502028 +14.300000 10.000000 8.560471 +14.300000 10.100000 8.638914 +14.300000 10.200000 8.737358 +14.300000 10.300000 8.855801 +14.300000 10.400000 8.994244 +14.300000 10.500000 9.152688 +14.300000 10.600000 9.331131 +14.300000 10.700000 9.529574 +14.300000 10.800000 9.748018 +14.300000 10.900000 9.986461 +14.300000 11.000000 10.244904 +14.300000 11.100000 10.523348 +14.300000 11.200000 10.821791 +14.300000 11.300000 11.140234 +14.300000 11.400000 11.478678 +14.300000 11.500000 11.837121 +14.300000 11.600000 12.215564 +14.300000 11.700000 12.614008 +14.300000 11.800000 13.032451 +14.300000 11.900000 13.470894 +14.300000 12.000000 13.929337 +14.300000 12.100000 14.407781 +14.300000 12.200000 14.906224 +14.300000 12.300000 15.424667 +14.300000 12.400000 15.963111 +14.300000 12.500000 16.521554 +14.300000 12.600000 17.099997 +14.300000 12.700000 17.698441 +14.300000 12.800000 18.316884 +14.300000 12.900000 18.955327 +14.300000 13.000000 19.613771 +14.300000 13.100000 20.292214 +14.300000 13.200000 20.990657 +14.300000 13.300000 21.709101 +14.300000 13.400000 22.447544 +14.300000 13.500000 23.205987 +14.300000 13.600000 23.984431 +14.300000 13.700000 24.782874 +14.300000 13.800000 25.601317 +14.300000 13.900000 26.439760 +14.300000 14.000000 27.298204 +14.300000 14.100000 28.176647 +14.300000 14.200000 29.075090 +14.300000 14.300000 29.993534 +14.300000 14.400000 30.931977 +14.300000 14.500000 31.890420 +14.300000 14.600000 32.868864 +14.300000 14.700000 33.867307 +14.300000 14.800000 34.885750 +14.300000 14.900000 35.924194 +14.300000 15.000000 36.982637 + +14.400000 -5.000000 228.603904 +14.400000 -4.900000 225.640027 +14.400000 -4.800000 222.696149 +14.400000 -4.700000 219.772271 +14.400000 -4.600000 216.868394 +14.400000 -4.500000 213.984516 +14.400000 -4.400000 211.120639 +14.400000 -4.300000 208.276761 +14.400000 -4.200000 205.452883 +14.400000 -4.100000 202.649006 +14.400000 -4.000000 199.865128 +14.400000 -3.900000 197.101251 +14.400000 -3.800000 194.357373 +14.400000 -3.700000 191.633495 +14.400000 -3.600000 188.929618 +14.400000 -3.500000 186.245740 +14.400000 -3.400000 183.581863 +14.400000 -3.300000 180.937985 +14.400000 -3.200000 178.314107 +14.400000 -3.100000 175.710230 +14.400000 -3.000000 173.126352 +14.400000 -2.900000 170.562475 +14.400000 -2.800000 168.018597 +14.400000 -2.700000 165.494719 +14.400000 -2.600000 162.990842 +14.400000 -2.500000 160.506964 +14.400000 -2.400000 158.043087 +14.400000 -2.300000 155.599209 +14.400000 -2.200000 153.175331 +14.400000 -2.100000 150.771454 +14.400000 -2.000000 148.387576 +14.400000 -1.900000 146.023699 +14.400000 -1.800000 143.679821 +14.400000 -1.700000 141.355943 +14.400000 -1.600000 139.052066 +14.400000 -1.500000 136.768188 +14.400000 -1.400000 134.504311 +14.400000 -1.300000 132.260433 +14.400000 -1.200000 130.036555 +14.400000 -1.100000 127.832678 +14.400000 -1.000000 125.648800 +14.400000 -0.900000 123.484923 +14.400000 -0.800000 121.341045 +14.400000 -0.700000 119.217167 +14.400000 -0.600000 117.113290 +14.400000 -0.500000 115.029412 +14.400000 -0.400000 112.965535 +14.400000 -0.300000 110.921657 +14.400000 -0.200000 108.897779 +14.400000 -0.100000 106.893902 +14.400000 -0.000000 104.910024 +14.400000 0.100000 102.946147 +14.400000 0.200000 101.002269 +14.400000 0.300000 99.078391 +14.400000 0.400000 97.174514 +14.400000 0.500000 95.290636 +14.400000 0.600000 93.426759 +14.400000 0.700000 91.582881 +14.400000 0.800000 89.759003 +14.400000 0.900000 87.955126 +14.400000 1.000000 86.171248 +14.400000 1.100000 84.407371 +14.400000 1.200000 82.663493 +14.400000 1.300000 80.939615 +14.400000 1.400000 79.235738 +14.400000 1.500000 77.551860 +14.400000 1.600000 75.887983 +14.400000 1.700000 74.244105 +14.400000 1.800000 72.620227 +14.400000 1.900000 71.016350 +14.400000 2.000000 69.432472 +14.400000 2.100000 67.868595 +14.400000 2.200000 66.324717 +14.400000 2.300000 64.800839 +14.400000 2.400000 63.296962 +14.400000 2.500000 61.813084 +14.400000 2.600000 60.349207 +14.400000 2.700000 58.905329 +14.400000 2.800000 57.481451 +14.400000 2.900000 56.077574 +14.400000 3.000000 54.693696 +14.400000 3.100000 53.329819 +14.400000 3.200000 51.985941 +14.400000 3.300000 50.662063 +14.400000 3.400000 49.358186 +14.400000 3.500000 48.074308 +14.400000 3.600000 46.810431 +14.400000 3.700000 45.566553 +14.400000 3.800000 44.342675 +14.400000 3.900000 43.138798 +14.400000 4.000000 41.954920 +14.400000 4.100000 40.791042 +14.400000 4.200000 39.647165 +14.400000 4.300000 38.523287 +14.400000 4.400000 37.419410 +14.400000 4.500000 36.335532 +14.400000 4.600000 35.271654 +14.400000 4.700000 34.227777 +14.400000 4.800000 33.203899 +14.400000 4.900000 32.200022 +14.400000 5.000000 31.216144 +14.400000 5.100000 30.252266 +14.400000 5.200000 29.308389 +14.400000 5.300000 28.384511 +14.400000 5.400000 27.480634 +14.400000 5.500000 26.596756 +14.400000 5.600000 25.732878 +14.400000 5.700000 24.889001 +14.400000 5.800000 24.065123 +14.400000 5.900000 23.261246 +14.400000 6.000000 22.477368 +14.400000 6.100000 21.713490 +14.400000 6.200000 20.969613 +14.400000 6.300000 20.245735 +14.400000 6.400000 19.541858 +14.400000 6.500000 18.857980 +14.400000 6.600000 18.194102 +14.400000 6.700000 17.550225 +14.400000 6.800000 16.926347 +14.400000 6.900000 16.322470 +14.400000 7.000000 15.738592 +14.400000 7.100000 15.174714 +14.400000 7.200000 14.630837 +14.400000 7.300000 14.106959 +14.400000 7.400000 13.603082 +14.400000 7.500000 13.119204 +14.400000 7.600000 12.655326 +14.400000 7.700000 12.211449 +14.400000 7.800000 11.787571 +14.400000 7.900000 11.383694 +14.400000 8.000000 10.999816 +14.400000 8.100000 10.635938 +14.400000 8.200000 10.292061 +14.400000 8.300000 9.968183 +14.400000 8.400000 9.664306 +14.400000 8.500000 9.380428 +14.400000 8.600000 9.116550 +14.400000 8.700000 8.872673 +14.400000 8.800000 8.648795 +14.400000 8.900000 8.444918 +14.400000 9.000000 8.261040 +14.400000 9.100000 8.097162 +14.400000 9.200000 7.953285 +14.400000 9.300000 7.829407 +14.400000 9.400000 7.725530 +14.400000 9.500000 7.641652 +14.400000 9.600000 7.577774 +14.400000 9.700000 7.533897 +14.400000 9.800000 7.510019 +14.400000 9.900000 7.506142 +14.400000 10.000000 7.522264 +14.400000 10.100000 7.558386 +14.400000 10.200000 7.614509 +14.400000 10.300000 7.690631 +14.400000 10.400000 7.786754 +14.400000 10.500000 7.902876 +14.400000 10.600000 8.038998 +14.400000 10.700000 8.195121 +14.400000 10.800000 8.371243 +14.400000 10.900000 8.567366 +14.400000 11.000000 8.783488 +14.400000 11.100000 9.019610 +14.400000 11.200000 9.275733 +14.400000 11.300000 9.551855 +14.400000 11.400000 9.847978 +14.400000 11.500000 10.164100 +14.400000 11.600000 10.500222 +14.400000 11.700000 10.856345 +14.400000 11.800000 11.232467 +14.400000 11.900000 11.628590 +14.400000 12.000000 12.044712 +14.400000 12.100000 12.480834 +14.400000 12.200000 12.936957 +14.400000 12.300000 13.413079 +14.400000 12.400000 13.909202 +14.400000 12.500000 14.425324 +14.400000 12.600000 14.961446 +14.400000 12.700000 15.517569 +14.400000 12.800000 16.093691 +14.400000 12.900000 16.689814 +14.400000 13.000000 17.305936 +14.400000 13.100000 17.942058 +14.400000 13.200000 18.598181 +14.400000 13.300000 19.274303 +14.400000 13.400000 19.970425 +14.400000 13.500000 20.686548 +14.400000 13.600000 21.422670 +14.400000 13.700000 22.178793 +14.400000 13.800000 22.954915 +14.400000 13.900000 23.751037 +14.400000 14.000000 24.567160 +14.400000 14.100000 25.403282 +14.400000 14.200000 26.259405 +14.400000 14.300000 27.135527 +14.400000 14.400000 28.031649 +14.400000 14.500000 28.947772 +14.400000 14.600000 29.883894 +14.400000 14.700000 30.840017 +14.400000 14.800000 31.816139 +14.400000 14.900000 32.812261 +14.400000 15.000000 33.828384 + +14.500000 -5.000000 234.106251 +14.500000 -4.900000 231.099536 +14.500000 -4.800000 228.112821 +14.500000 -4.700000 225.146105 +14.500000 -4.600000 222.199390 +14.500000 -4.500000 219.272675 +14.500000 -4.400000 216.365960 +14.500000 -4.300000 213.479244 +14.500000 -4.200000 210.612529 +14.500000 -4.100000 207.765814 +14.500000 -4.000000 204.939099 +14.500000 -3.900000 202.132383 +14.500000 -3.800000 199.345668 +14.500000 -3.700000 196.578953 +14.500000 -3.600000 193.832238 +14.500000 -3.500000 191.105522 +14.500000 -3.400000 188.398807 +14.500000 -3.300000 185.712092 +14.500000 -3.200000 183.045377 +14.500000 -3.100000 180.398661 +14.500000 -3.000000 177.771946 +14.500000 -2.900000 175.165231 +14.500000 -2.800000 172.578515 +14.500000 -2.700000 170.011800 +14.500000 -2.600000 167.465085 +14.500000 -2.500000 164.938370 +14.500000 -2.400000 162.431654 +14.500000 -2.300000 159.944939 +14.500000 -2.200000 157.478224 +14.500000 -2.100000 155.031509 +14.500000 -2.000000 152.604793 +14.500000 -1.900000 150.198078 +14.500000 -1.800000 147.811363 +14.500000 -1.700000 145.444648 +14.500000 -1.600000 143.097932 +14.500000 -1.500000 140.771217 +14.500000 -1.400000 138.464502 +14.500000 -1.300000 136.177787 +14.500000 -1.200000 133.911071 +14.500000 -1.100000 131.664356 +14.500000 -1.000000 129.437641 +14.500000 -0.900000 127.230926 +14.500000 -0.800000 125.044210 +14.500000 -0.700000 122.877495 +14.500000 -0.600000 120.730780 +14.500000 -0.500000 118.604064 +14.500000 -0.400000 116.497349 +14.500000 -0.300000 114.410634 +14.500000 -0.200000 112.343919 +14.500000 -0.100000 110.297203 +14.500000 -0.000000 108.270488 +14.500000 0.100000 106.263773 +14.500000 0.200000 104.277058 +14.500000 0.300000 102.310342 +14.500000 0.400000 100.363627 +14.500000 0.500000 98.436912 +14.500000 0.600000 96.530197 +14.500000 0.700000 94.643481 +14.500000 0.800000 92.776766 +14.500000 0.900000 90.930051 +14.500000 1.000000 89.103336 +14.500000 1.100000 87.296620 +14.500000 1.200000 85.509905 +14.500000 1.300000 83.743190 +14.500000 1.400000 81.996475 +14.500000 1.500000 80.269759 +14.500000 1.600000 78.563044 +14.500000 1.700000 76.876329 +14.500000 1.800000 75.209614 +14.500000 1.900000 73.562898 +14.500000 2.000000 71.936183 +14.500000 2.100000 70.329468 +14.500000 2.200000 68.742752 +14.500000 2.300000 67.176037 +14.500000 2.400000 65.629322 +14.500000 2.500000 64.102607 +14.500000 2.600000 62.595891 +14.500000 2.700000 61.109176 +14.500000 2.800000 59.642461 +14.500000 2.900000 58.195746 +14.500000 3.000000 56.769030 +14.500000 3.100000 55.362315 +14.500000 3.200000 53.975600 +14.500000 3.300000 52.608885 +14.500000 3.400000 51.262169 +14.500000 3.500000 49.935454 +14.500000 3.600000 48.628739 +14.500000 3.700000 47.342024 +14.500000 3.800000 46.075308 +14.500000 3.900000 44.828593 +14.500000 4.000000 43.601878 +14.500000 4.100000 42.395163 +14.500000 4.200000 41.208447 +14.500000 4.300000 40.041732 +14.500000 4.400000 38.895017 +14.500000 4.500000 37.768301 +14.500000 4.600000 36.661586 +14.500000 4.700000 35.574871 +14.500000 4.800000 34.508156 +14.500000 4.900000 33.461440 +14.500000 5.000000 32.434725 +14.500000 5.100000 31.428010 +14.500000 5.200000 30.441295 +14.500000 5.300000 29.474579 +14.500000 5.400000 28.527864 +14.500000 5.500000 27.601149 +14.500000 5.600000 26.694434 +14.500000 5.700000 25.807718 +14.500000 5.800000 24.941003 +14.500000 5.900000 24.094288 +14.500000 6.000000 23.267573 +14.500000 6.100000 22.460857 +14.500000 6.200000 21.674142 +14.500000 6.300000 20.907427 +14.500000 6.400000 20.160712 +14.500000 6.500000 19.433996 +14.500000 6.600000 18.727281 +14.500000 6.700000 18.040566 +14.500000 6.800000 17.373851 +14.500000 6.900000 16.727135 +14.500000 7.000000 16.100420 +14.500000 7.100000 15.493705 +14.500000 7.200000 14.906989 +14.500000 7.300000 14.340274 +14.500000 7.400000 13.793559 +14.500000 7.500000 13.266844 +14.500000 7.600000 12.760128 +14.500000 7.700000 12.273413 +14.500000 7.800000 11.806698 +14.500000 7.900000 11.359983 +14.500000 8.000000 10.933267 +14.500000 8.100000 10.526552 +14.500000 8.200000 10.139837 +14.500000 8.300000 9.773122 +14.500000 8.400000 9.426406 +14.500000 8.500000 9.099691 +14.500000 8.600000 8.792976 +14.500000 8.700000 8.506261 +14.500000 8.800000 8.239545 +14.500000 8.900000 7.992830 +14.500000 9.000000 7.766115 +14.500000 9.100000 7.559400 +14.500000 9.200000 7.372684 +14.500000 9.300000 7.205969 +14.500000 9.400000 7.059254 +14.500000 9.500000 6.932539 +14.500000 9.600000 6.825823 +14.500000 9.700000 6.739108 +14.500000 9.800000 6.672393 +14.500000 9.900000 6.625677 +14.500000 10.000000 6.598962 +14.500000 10.100000 6.592247 +14.500000 10.200000 6.605532 +14.500000 10.300000 6.638816 +14.500000 10.400000 6.692101 +14.500000 10.500000 6.765386 +14.500000 10.600000 6.858671 +14.500000 10.700000 6.971955 +14.500000 10.800000 7.105240 +14.500000 10.900000 7.258525 +14.500000 11.000000 7.431810 +14.500000 11.100000 7.625094 +14.500000 11.200000 7.838379 +14.500000 11.300000 8.071664 +14.500000 11.400000 8.324949 +14.500000 11.500000 8.598233 +14.500000 11.600000 8.891518 +14.500000 11.700000 9.204803 +14.500000 11.800000 9.538088 +14.500000 11.900000 9.891372 +14.500000 12.000000 10.264657 +14.500000 12.100000 10.657942 +14.500000 12.200000 11.071226 +14.500000 12.300000 11.504511 +14.500000 12.400000 11.957796 +14.500000 12.500000 12.431081 +14.500000 12.600000 12.924365 +14.500000 12.700000 13.437650 +14.500000 12.800000 13.970935 +14.500000 12.900000 14.524220 +14.500000 13.000000 15.097504 +14.500000 13.100000 15.690789 +14.500000 13.200000 16.304074 +14.500000 13.300000 16.937359 +14.500000 13.400000 17.590643 +14.500000 13.500000 18.263928 +14.500000 13.600000 18.957213 +14.500000 13.700000 19.670498 +14.500000 13.800000 20.403782 +14.500000 13.900000 21.157067 +14.500000 14.000000 21.930352 +14.500000 14.100000 22.723637 +14.500000 14.200000 23.536921 +14.500000 14.300000 24.370206 +14.500000 14.400000 25.223491 +14.500000 14.500000 26.096776 +14.500000 14.600000 26.990060 +14.500000 14.700000 27.903345 +14.500000 14.800000 28.836630 +14.500000 14.900000 29.789914 +14.500000 15.000000 30.763199 + +14.600000 -5.000000 239.813459 +14.600000 -4.900000 236.763390 +14.600000 -4.800000 233.733320 +14.600000 -4.700000 230.723250 +14.600000 -4.600000 227.733181 +14.600000 -4.500000 224.763111 +14.600000 -4.400000 221.813041 +14.600000 -4.300000 218.882972 +14.600000 -4.200000 215.972902 +14.600000 -4.100000 213.082832 +14.600000 -4.000000 210.212763 +14.600000 -3.900000 207.362693 +14.600000 -3.800000 204.532623 +14.600000 -3.700000 201.722554 +14.600000 -3.600000 198.932484 +14.600000 -3.500000 196.162414 +14.600000 -3.400000 193.412345 +14.600000 -3.300000 190.682275 +14.600000 -3.200000 187.972205 +14.600000 -3.100000 185.282136 +14.600000 -3.000000 182.612066 +14.600000 -2.900000 179.961996 +14.600000 -2.800000 177.331927 +14.600000 -2.700000 174.721857 +14.600000 -2.600000 172.131787 +14.600000 -2.500000 169.561718 +14.600000 -2.400000 167.011648 +14.600000 -2.300000 164.481578 +14.600000 -2.200000 161.971509 +14.600000 -2.100000 159.481439 +14.600000 -2.000000 157.011370 +14.600000 -1.900000 154.561300 +14.600000 -1.800000 152.131230 +14.600000 -1.700000 149.721161 +14.600000 -1.600000 147.331091 +14.600000 -1.500000 144.961021 +14.600000 -1.400000 142.610952 +14.600000 -1.300000 140.280882 +14.600000 -1.200000 137.970812 +14.600000 -1.100000 135.680743 +14.600000 -1.000000 133.410673 +14.600000 -0.900000 131.160603 +14.600000 -0.800000 128.930534 +14.600000 -0.700000 126.720464 +14.600000 -0.600000 124.530394 +14.600000 -0.500000 122.360325 +14.600000 -0.400000 120.210255 +14.600000 -0.300000 118.080185 +14.600000 -0.200000 115.970116 +14.600000 -0.100000 113.880046 +14.600000 -0.000000 111.809976 +14.600000 0.100000 109.759907 +14.600000 0.200000 107.729837 +14.600000 0.300000 105.719767 +14.600000 0.400000 103.729698 +14.600000 0.500000 101.759628 +14.600000 0.600000 99.809558 +14.600000 0.700000 97.879489 +14.600000 0.800000 95.969419 +14.600000 0.900000 94.079350 +14.600000 1.000000 92.209280 +14.600000 1.100000 90.359210 +14.600000 1.200000 88.529141 +14.600000 1.300000 86.719071 +14.600000 1.400000 84.929001 +14.600000 1.500000 83.158932 +14.600000 1.600000 81.408862 +14.600000 1.700000 79.678792 +14.600000 1.800000 77.968723 +14.600000 1.900000 76.278653 +14.600000 2.000000 74.608583 +14.600000 2.100000 72.958514 +14.600000 2.200000 71.328444 +14.600000 2.300000 69.718374 +14.600000 2.400000 68.128305 +14.600000 2.500000 66.558235 +14.600000 2.600000 65.008165 +14.600000 2.700000 63.478096 +14.600000 2.800000 61.968026 +14.600000 2.900000 60.477956 +14.600000 3.000000 59.007887 +14.600000 3.100000 57.557817 +14.600000 3.200000 56.127747 +14.600000 3.300000 54.717678 +14.600000 3.400000 53.327608 +14.600000 3.500000 51.957538 +14.600000 3.600000 50.607469 +14.600000 3.700000 49.277399 +14.600000 3.800000 47.967330 +14.600000 3.900000 46.677260 +14.600000 4.000000 45.407190 +14.600000 4.100000 44.157121 +14.600000 4.200000 42.927051 +14.600000 4.300000 41.716981 +14.600000 4.400000 40.526912 +14.600000 4.500000 39.356842 +14.600000 4.600000 38.206772 +14.600000 4.700000 37.076703 +14.600000 4.800000 35.966633 +14.600000 4.900000 34.876563 +14.600000 5.000000 33.806494 +14.600000 5.100000 32.756424 +14.600000 5.200000 31.726354 +14.600000 5.300000 30.716285 +14.600000 5.400000 29.726215 +14.600000 5.500000 28.756145 +14.600000 5.600000 27.806076 +14.600000 5.700000 26.876006 +14.600000 5.800000 25.965936 +14.600000 5.900000 25.075867 +14.600000 6.000000 24.205797 +14.600000 6.100000 23.355727 +14.600000 6.200000 22.525658 +14.600000 6.300000 21.715588 +14.600000 6.400000 20.925518 +14.600000 6.500000 20.155449 +14.600000 6.600000 19.405379 +14.600000 6.700000 18.675310 +14.600000 6.800000 17.965240 +14.600000 6.900000 17.275170 +14.600000 7.000000 16.605101 +14.600000 7.100000 15.955031 +14.600000 7.200000 15.324961 +14.600000 7.300000 14.714892 +14.600000 7.400000 14.124822 +14.600000 7.500000 13.554752 +14.600000 7.600000 13.004683 +14.600000 7.700000 12.474613 +14.600000 7.800000 11.964543 +14.600000 7.900000 11.474474 +14.600000 8.000000 11.004404 +14.600000 8.100000 10.554334 +14.600000 8.200000 10.124265 +14.600000 8.300000 9.714195 +14.600000 8.400000 9.324125 +14.600000 8.500000 8.954056 +14.600000 8.600000 8.603986 +14.600000 8.700000 8.273916 +14.600000 8.800000 7.963847 +14.600000 8.900000 7.673777 +14.600000 9.000000 7.403707 +14.600000 9.100000 7.153638 +14.600000 9.200000 6.923568 +14.600000 9.300000 6.713498 +14.600000 9.400000 6.523429 +14.600000 9.500000 6.353359 +14.600000 9.600000 6.203289 +14.600000 9.700000 6.073220 +14.600000 9.800000 5.963150 +14.600000 9.900000 5.873081 +14.600000 10.000000 5.803011 +14.600000 10.100000 5.752941 +14.600000 10.200000 5.722872 +14.600000 10.300000 5.712802 +14.600000 10.400000 5.722732 +14.600000 10.500000 5.752663 +14.600000 10.600000 5.802593 +14.600000 10.700000 5.872523 +14.600000 10.800000 5.962454 +14.600000 10.900000 6.072384 +14.600000 11.000000 6.202314 +14.600000 11.100000 6.352245 +14.600000 11.200000 6.522175 +14.600000 11.300000 6.712105 +14.600000 11.400000 6.922036 +14.600000 11.500000 7.151966 +14.600000 11.600000 7.401896 +14.600000 11.700000 7.671827 +14.600000 11.800000 7.961757 +14.600000 11.900000 8.271687 +14.600000 12.000000 8.601618 +14.600000 12.100000 8.951548 +14.600000 12.200000 9.321478 +14.600000 12.300000 9.711409 +14.600000 12.400000 10.121339 +14.600000 12.500000 10.551269 +14.600000 12.600000 11.001200 +14.600000 12.700000 11.471130 +14.600000 12.800000 11.961061 +14.600000 12.900000 12.470991 +14.600000 13.000000 13.000921 +14.600000 13.100000 13.550852 +14.600000 13.200000 14.120782 +14.600000 13.300000 14.710712 +14.600000 13.400000 15.320643 +14.600000 13.500000 15.950573 +14.600000 13.600000 16.600503 +14.600000 13.700000 17.270434 +14.600000 13.800000 17.960364 +14.600000 13.900000 18.670294 +14.600000 14.000000 19.400225 +14.600000 14.100000 20.150155 +14.600000 14.200000 20.920085 +14.600000 14.300000 21.710016 +14.600000 14.400000 22.519946 +14.600000 14.500000 23.349876 +14.600000 14.600000 24.199807 +14.600000 14.700000 25.069737 +14.600000 14.800000 25.959667 +14.600000 14.900000 26.869598 +14.600000 15.000000 27.799528 + +14.700000 -5.000000 245.737673 +14.700000 -4.900000 242.643732 +14.700000 -4.800000 239.569792 +14.700000 -4.700000 236.515851 +14.700000 -4.600000 233.481910 +14.700000 -4.500000 230.467969 +14.700000 -4.400000 227.474028 +14.700000 -4.300000 224.500088 +14.700000 -4.200000 221.546147 +14.700000 -4.100000 218.612206 +14.700000 -4.000000 215.698265 +14.700000 -3.900000 212.804325 +14.700000 -3.800000 209.930384 +14.700000 -3.700000 207.076443 +14.700000 -3.600000 204.242502 +14.700000 -3.500000 201.428561 +14.700000 -3.400000 198.634621 +14.700000 -3.300000 195.860680 +14.700000 -3.200000 193.106739 +14.700000 -3.100000 190.372798 +14.700000 -3.000000 187.658857 +14.700000 -2.900000 184.964917 +14.700000 -2.800000 182.290976 +14.700000 -2.700000 179.637035 +14.700000 -2.600000 177.003094 +14.700000 -2.500000 174.389153 +14.700000 -2.400000 171.795213 +14.700000 -2.300000 169.221272 +14.700000 -2.200000 166.667331 +14.700000 -2.100000 164.133390 +14.700000 -2.000000 161.619450 +14.700000 -1.900000 159.125509 +14.700000 -1.800000 156.651568 +14.700000 -1.700000 154.197627 +14.700000 -1.600000 151.763686 +14.700000 -1.500000 149.349746 +14.700000 -1.400000 146.955805 +14.700000 -1.300000 144.581864 +14.700000 -1.200000 142.227923 +14.700000 -1.100000 139.893982 +14.700000 -1.000000 137.580042 +14.700000 -0.900000 135.286101 +14.700000 -0.800000 133.012160 +14.700000 -0.700000 130.758219 +14.700000 -0.600000 128.524278 +14.700000 -0.500000 126.310338 +14.700000 -0.400000 124.116397 +14.700000 -0.300000 121.942456 +14.700000 -0.200000 119.788515 +14.700000 -0.100000 117.654575 +14.700000 -0.000000 115.540634 +14.700000 0.100000 113.446693 +14.700000 0.200000 111.372752 +14.700000 0.300000 109.318811 +14.700000 0.400000 107.284871 +14.700000 0.500000 105.270930 +14.700000 0.600000 103.276989 +14.700000 0.700000 101.303048 +14.700000 0.800000 99.349107 +14.700000 0.900000 97.415167 +14.700000 1.000000 95.501226 +14.700000 1.100000 93.607285 +14.700000 1.200000 91.733344 +14.700000 1.300000 89.879403 +14.700000 1.400000 88.045463 +14.700000 1.500000 86.231522 +14.700000 1.600000 84.437581 +14.700000 1.700000 82.663640 +14.700000 1.800000 80.909700 +14.700000 1.900000 79.175759 +14.700000 2.000000 77.461818 +14.700000 2.100000 75.767877 +14.700000 2.200000 74.093936 +14.700000 2.300000 72.439996 +14.700000 2.400000 70.806055 +14.700000 2.500000 69.192114 +14.700000 2.600000 67.598173 +14.700000 2.700000 66.024232 +14.700000 2.800000 64.470292 +14.700000 2.900000 62.936351 +14.700000 3.000000 61.422410 +14.700000 3.100000 59.928469 +14.700000 3.200000 58.454528 +14.700000 3.300000 57.000588 +14.700000 3.400000 55.566647 +14.700000 3.500000 54.152706 +14.700000 3.600000 52.758765 +14.700000 3.700000 51.384825 +14.700000 3.800000 50.030884 +14.700000 3.900000 48.696943 +14.700000 4.000000 47.383002 +14.700000 4.100000 46.089061 +14.700000 4.200000 44.815121 +14.700000 4.300000 43.561180 +14.700000 4.400000 42.327239 +14.700000 4.500000 41.113298 +14.700000 4.600000 39.919357 +14.700000 4.700000 38.745417 +14.700000 4.800000 37.591476 +14.700000 4.900000 36.457535 +14.700000 5.000000 35.343594 +14.700000 5.100000 34.249653 +14.700000 5.200000 33.175713 +14.700000 5.300000 32.121772 +14.700000 5.400000 31.087831 +14.700000 5.500000 30.073890 +14.700000 5.600000 29.079950 +14.700000 5.700000 28.106009 +14.700000 5.800000 27.152068 +14.700000 5.900000 26.218127 +14.700000 6.000000 25.304186 +14.700000 6.100000 24.410246 +14.700000 6.200000 23.536305 +14.700000 6.300000 22.682364 +14.700000 6.400000 21.848423 +14.700000 6.500000 21.034482 +14.700000 6.600000 20.240542 +14.700000 6.700000 19.466601 +14.700000 6.800000 18.712660 +14.700000 6.900000 17.978719 +14.700000 7.000000 17.264778 +14.700000 7.100000 16.570838 +14.700000 7.200000 15.896897 +14.700000 7.300000 15.242956 +14.700000 7.400000 14.609015 +14.700000 7.500000 13.995075 +14.700000 7.600000 13.401134 +14.700000 7.700000 12.827193 +14.700000 7.800000 12.273252 +14.700000 7.900000 11.739311 +14.700000 8.000000 11.225371 +14.700000 8.100000 10.731430 +14.700000 8.200000 10.257489 +14.700000 8.300000 9.803548 +14.700000 8.400000 9.369607 +14.700000 8.500000 8.955667 +14.700000 8.600000 8.561726 +14.700000 8.700000 8.187785 +14.700000 8.800000 7.833844 +14.700000 8.900000 7.499903 +14.700000 9.000000 7.185963 +14.700000 9.100000 6.892022 +14.700000 9.200000 6.618081 +14.700000 9.300000 6.364140 +14.700000 9.400000 6.130200 +14.700000 9.500000 5.916259 +14.700000 9.600000 5.722318 +14.700000 9.700000 5.548377 +14.700000 9.800000 5.394436 +14.700000 9.900000 5.260496 +14.700000 10.000000 5.146555 +14.700000 10.100000 5.052614 +14.700000 10.200000 4.978673 +14.700000 10.300000 4.924732 +14.700000 10.400000 4.890792 +14.700000 10.500000 4.876851 +14.700000 10.600000 4.882910 +14.700000 10.700000 4.908969 +14.700000 10.800000 4.955028 +14.700000 10.900000 5.021088 +14.700000 11.000000 5.107147 +14.700000 11.100000 5.213206 +14.700000 11.200000 5.339265 +14.700000 11.300000 5.485325 +14.700000 11.400000 5.651384 +14.700000 11.500000 5.837443 +14.700000 11.600000 6.043502 +14.700000 11.700000 6.269561 +14.700000 11.800000 6.515621 +14.700000 11.900000 6.781680 +14.700000 12.000000 7.067739 +14.700000 12.100000 7.373798 +14.700000 12.200000 7.699857 +14.700000 12.300000 8.045917 +14.700000 12.400000 8.411976 +14.700000 12.500000 8.798035 +14.700000 12.600000 9.204094 +14.700000 12.700000 9.630153 +14.700000 12.800000 10.076213 +14.700000 12.900000 10.542272 +14.700000 13.000000 11.028331 +14.700000 13.100000 11.534390 +14.700000 13.200000 12.060450 +14.700000 13.300000 12.606509 +14.700000 13.400000 13.172568 +14.700000 13.500000 13.758627 +14.700000 13.600000 14.364686 +14.700000 13.700000 14.990746 +14.700000 13.800000 15.636805 +14.700000 13.900000 16.302864 +14.700000 14.000000 16.988923 +14.700000 14.100000 17.694982 +14.700000 14.200000 18.421042 +14.700000 14.300000 19.167101 +14.700000 14.400000 19.933160 +14.700000 14.500000 20.719219 +14.700000 14.600000 21.525279 +14.700000 14.700000 22.351338 +14.700000 14.800000 23.197397 +14.700000 14.900000 24.063456 +14.700000 15.000000 24.949515 + +14.800000 -5.000000 251.890650 +14.800000 -4.900000 248.752321 +14.800000 -4.800000 245.633993 +14.800000 -4.700000 242.535664 +14.800000 -4.600000 239.457335 +14.800000 -4.500000 236.399007 +14.800000 -4.400000 233.360678 +14.800000 -4.300000 230.342349 +14.800000 -4.200000 227.344021 +14.800000 -4.100000 224.365692 +14.800000 -4.000000 221.407363 +14.800000 -3.900000 218.469035 +14.800000 -3.800000 215.550706 +14.800000 -3.700000 212.652378 +14.800000 -3.600000 209.774049 +14.800000 -3.500000 206.915720 +14.800000 -3.400000 204.077392 +14.800000 -3.300000 201.259063 +14.800000 -3.200000 198.460734 +14.800000 -3.100000 195.682406 +14.800000 -3.000000 192.924077 +14.800000 -2.900000 190.185748 +14.800000 -2.800000 187.467420 +14.800000 -2.700000 184.769091 +14.800000 -2.600000 182.090762 +14.800000 -2.500000 179.432434 +14.800000 -2.400000 176.794105 +14.800000 -2.300000 174.175776 +14.800000 -2.200000 171.577448 +14.800000 -2.100000 168.999119 +14.800000 -2.000000 166.440790 +14.800000 -1.900000 163.902462 +14.800000 -1.800000 161.384133 +14.800000 -1.700000 158.885804 +14.800000 -1.600000 156.407476 +14.800000 -1.500000 153.949147 +14.800000 -1.400000 151.510818 +14.800000 -1.300000 149.092490 +14.800000 -1.200000 146.694161 +14.800000 -1.100000 144.315832 +14.800000 -1.000000 141.957504 +14.800000 -0.900000 139.619175 +14.800000 -0.800000 137.300846 +14.800000 -0.700000 135.002518 +14.800000 -0.600000 132.724189 +14.800000 -0.500000 130.465860 +14.800000 -0.400000 128.227532 +14.800000 -0.300000 126.009203 +14.800000 -0.200000 123.810874 +14.800000 -0.100000 121.632546 +14.800000 -0.000000 119.474217 +14.800000 0.100000 117.335888 +14.800000 0.200000 115.217560 +14.800000 0.300000 113.119231 +14.800000 0.400000 111.040902 +14.800000 0.500000 108.982574 +14.800000 0.600000 106.944245 +14.800000 0.700000 104.925916 +14.800000 0.800000 102.927588 +14.800000 0.900000 100.949259 +14.800000 1.000000 98.990930 +14.800000 1.100000 97.052602 +14.800000 1.200000 95.134273 +14.800000 1.300000 93.235944 +14.800000 1.400000 91.357616 +14.800000 1.500000 89.499287 +14.800000 1.600000 87.660958 +14.800000 1.700000 85.842630 +14.800000 1.800000 84.044301 +14.800000 1.900000 82.265972 +14.800000 2.000000 80.507644 +14.800000 2.100000 78.769315 +14.800000 2.200000 77.050986 +14.800000 2.300000 75.352658 +14.800000 2.400000 73.674329 +14.800000 2.500000 72.016001 +14.800000 2.600000 70.377672 +14.800000 2.700000 68.759343 +14.800000 2.800000 67.161015 +14.800000 2.900000 65.582686 +14.800000 3.000000 64.024357 +14.800000 3.100000 62.486029 +14.800000 3.200000 60.967700 +14.800000 3.300000 59.469371 +14.800000 3.400000 57.991043 +14.800000 3.500000 56.532714 +14.800000 3.600000 55.094385 +14.800000 3.700000 53.676057 +14.800000 3.800000 52.277728 +14.800000 3.900000 50.899399 +14.800000 4.000000 49.541071 +14.800000 4.100000 48.202742 +14.800000 4.200000 46.884413 +14.800000 4.300000 45.586085 +14.800000 4.400000 44.307756 +14.800000 4.500000 43.049427 +14.800000 4.600000 41.811099 +14.800000 4.700000 40.592770 +14.800000 4.800000 39.394441 +14.800000 4.900000 38.216113 +14.800000 5.000000 37.057784 +14.800000 5.100000 35.919455 +14.800000 5.200000 34.801127 +14.800000 5.300000 33.702798 +14.800000 5.400000 32.624469 +14.800000 5.500000 31.566141 +14.800000 5.600000 30.527812 +14.800000 5.700000 29.509483 +14.800000 5.800000 28.511155 +14.800000 5.900000 27.532826 +14.800000 6.000000 26.574497 +14.800000 6.100000 25.636169 +14.800000 6.200000 24.717840 +14.800000 6.300000 23.819511 +14.800000 6.400000 22.941183 +14.800000 6.500000 22.082854 +14.800000 6.600000 21.244525 +14.800000 6.700000 20.426197 +14.800000 6.800000 19.627868 +14.800000 6.900000 18.849539 +14.800000 7.000000 18.091211 +14.800000 7.100000 17.352882 +14.800000 7.200000 16.634553 +14.800000 7.300000 15.936225 +14.800000 7.400000 15.257896 +14.800000 7.500000 14.599567 +14.800000 7.600000 13.961239 +14.800000 7.700000 13.342910 +14.800000 7.800000 12.744581 +14.800000 7.900000 12.166253 +14.800000 8.000000 11.607924 +14.800000 8.100000 11.069595 +14.800000 8.200000 10.551267 +14.800000 8.300000 10.052938 +14.800000 8.400000 9.574610 +14.800000 8.500000 9.116281 +14.800000 8.600000 8.677952 +14.800000 8.700000 8.259624 +14.800000 8.800000 7.861295 +14.800000 8.900000 7.482966 +14.800000 9.000000 7.124638 +14.800000 9.100000 6.786309 +14.800000 9.200000 6.467980 +14.800000 9.300000 6.169652 +14.800000 9.400000 5.891323 +14.800000 9.500000 5.632994 +14.800000 9.600000 5.394666 +14.800000 9.700000 5.176337 +14.800000 9.800000 4.978008 +14.800000 9.900000 4.799680 +14.800000 10.000000 4.641351 +14.800000 10.100000 4.503022 +14.800000 10.200000 4.384694 +14.800000 10.300000 4.286365 +14.800000 10.400000 4.208036 +14.800000 10.500000 4.149708 +14.800000 10.600000 4.111379 +14.800000 10.700000 4.093050 +14.800000 10.800000 4.094722 +14.800000 10.900000 4.116393 +14.800000 11.000000 4.158064 +14.800000 11.100000 4.219736 +14.800000 11.200000 4.301407 +14.800000 11.300000 4.403078 +14.800000 11.400000 4.524750 +14.800000 11.500000 4.666421 +14.800000 11.600000 4.828092 +14.800000 11.700000 5.009764 +14.800000 11.800000 5.211435 +14.800000 11.900000 5.433106 +14.800000 12.000000 5.674778 +14.800000 12.100000 5.936449 +14.800000 12.200000 6.218120 +14.800000 12.300000 6.519792 +14.800000 12.400000 6.841463 +14.800000 12.500000 7.183134 +14.800000 12.600000 7.544806 +14.800000 12.700000 7.926477 +14.800000 12.800000 8.328148 +14.800000 12.900000 8.749820 +14.800000 13.000000 9.191491 +14.800000 13.100000 9.653162 +14.800000 13.200000 10.134834 +14.800000 13.300000 10.636505 +14.800000 13.400000 11.158176 +14.800000 13.500000 11.699848 +14.800000 13.600000 12.261519 +14.800000 13.700000 12.843190 +14.800000 13.800000 13.444862 +14.800000 13.900000 14.066533 +14.800000 14.000000 14.708204 +14.800000 14.100000 15.369876 +14.800000 14.200000 16.051547 +14.800000 14.300000 16.753219 +14.800000 14.400000 17.474890 +14.800000 14.500000 18.216561 +14.800000 14.600000 18.978233 +14.800000 14.700000 19.759904 +14.800000 14.800000 20.561575 +14.800000 14.900000 21.383247 +14.800000 15.000000 22.224918 + +14.900000 -5.000000 258.283675 +14.900000 -4.900000 255.100442 +14.900000 -4.800000 251.937209 +14.900000 -4.700000 248.793976 +14.900000 -4.600000 245.670742 +14.900000 -4.500000 242.567509 +14.900000 -4.400000 239.484276 +14.900000 -4.300000 236.421042 +14.900000 -4.200000 233.377809 +14.900000 -4.100000 230.354576 +14.900000 -4.000000 227.351343 +14.900000 -3.900000 224.368109 +14.900000 -3.800000 221.404876 +14.900000 -3.700000 218.461643 +14.900000 -3.600000 215.538410 +14.900000 -3.500000 212.635176 +14.900000 -3.400000 209.751943 +14.900000 -3.300000 206.888710 +14.900000 -3.200000 204.045476 +14.900000 -3.100000 201.222243 +14.900000 -3.000000 198.419010 +14.900000 -2.900000 195.635777 +14.900000 -2.800000 192.872543 +14.900000 -2.700000 190.129310 +14.900000 -2.600000 187.406077 +14.900000 -2.500000 184.702844 +14.900000 -2.400000 182.019610 +14.900000 -2.300000 179.356377 +14.900000 -2.200000 176.713144 +14.900000 -2.100000 174.089910 +14.900000 -2.000000 171.486677 +14.900000 -1.900000 168.903444 +14.900000 -1.800000 166.340211 +14.900000 -1.700000 163.796977 +14.900000 -1.600000 161.273744 +14.900000 -1.500000 158.770511 +14.900000 -1.400000 156.287278 +14.900000 -1.300000 153.824044 +14.900000 -1.200000 151.380811 +14.900000 -1.100000 148.957578 +14.900000 -1.000000 146.554345 +14.900000 -0.900000 144.171111 +14.900000 -0.800000 141.807878 +14.900000 -0.700000 139.464645 +14.900000 -0.600000 137.141411 +14.900000 -0.500000 134.838178 +14.900000 -0.400000 132.554945 +14.900000 -0.300000 130.291712 +14.900000 -0.200000 128.048478 +14.900000 -0.100000 125.825245 +14.900000 -0.000000 123.622012 +14.900000 0.100000 121.438779 +14.900000 0.200000 119.275545 +14.900000 0.300000 117.132312 +14.900000 0.400000 115.009079 +14.900000 0.500000 112.905845 +14.900000 0.600000 110.822612 +14.900000 0.700000 108.759379 +14.900000 0.800000 106.716146 +14.900000 0.900000 104.692912 +14.900000 1.000000 102.689679 +14.900000 1.100000 100.706446 +14.900000 1.200000 98.743213 +14.900000 1.300000 96.799979 +14.900000 1.400000 94.876746 +14.900000 1.500000 92.973513 +14.900000 1.600000 91.090279 +14.900000 1.700000 89.227046 +14.900000 1.800000 87.383813 +14.900000 1.900000 85.560580 +14.900000 2.000000 83.757346 +14.900000 2.100000 81.974113 +14.900000 2.200000 80.210880 +14.900000 2.300000 78.467647 +14.900000 2.400000 76.744413 +14.900000 2.500000 75.041180 +14.900000 2.600000 73.357947 +14.900000 2.700000 71.694713 +14.900000 2.800000 70.051480 +14.900000 2.900000 68.428247 +14.900000 3.000000 66.825014 +14.900000 3.100000 65.241780 +14.900000 3.200000 63.678547 +14.900000 3.300000 62.135314 +14.900000 3.400000 60.612081 +14.900000 3.500000 59.108847 +14.900000 3.600000 57.625614 +14.900000 3.700000 56.162381 +14.900000 3.800000 54.719148 +14.900000 3.900000 53.295914 +14.900000 4.000000 51.892681 +14.900000 4.100000 50.509448 +14.900000 4.200000 49.146214 +14.900000 4.300000 47.802981 +14.900000 4.400000 46.479748 +14.900000 4.500000 45.176515 +14.900000 4.600000 43.893281 +14.900000 4.700000 42.630048 +14.900000 4.800000 41.386815 +14.900000 4.900000 40.163582 +14.900000 5.000000 38.960348 +14.900000 5.100000 37.777115 +14.900000 5.200000 36.613882 +14.900000 5.300000 35.470648 +14.900000 5.400000 34.347415 +14.900000 5.500000 33.244182 +14.900000 5.600000 32.160949 +14.900000 5.700000 31.097715 +14.900000 5.800000 30.054482 +14.900000 5.900000 29.031249 +14.900000 6.000000 28.028016 +14.900000 6.100000 27.044782 +14.900000 6.200000 26.081549 +14.900000 6.300000 25.138316 +14.900000 6.400000 24.215082 +14.900000 6.500000 23.311849 +14.900000 6.600000 22.428616 +14.900000 6.700000 21.565383 +14.900000 6.800000 20.722149 +14.900000 6.900000 19.898916 +14.900000 7.000000 19.095683 +14.900000 7.100000 18.312450 +14.900000 7.200000 17.549216 +14.900000 7.300000 16.805983 +14.900000 7.400000 16.082750 +14.900000 7.500000 15.379516 +14.900000 7.600000 14.696283 +14.900000 7.700000 14.033050 +14.900000 7.800000 13.389817 +14.900000 7.900000 12.766583 +14.900000 8.000000 12.163350 +14.900000 8.100000 11.580117 +14.900000 8.200000 11.016884 +14.900000 8.300000 10.473650 +14.900000 8.400000 9.950417 +14.900000 8.500000 9.447184 +14.900000 8.600000 8.963951 +14.900000 8.700000 8.500717 +14.900000 8.800000 8.057484 +14.900000 8.900000 7.634251 +14.900000 9.000000 7.231017 +14.900000 9.100000 6.847784 +14.900000 9.200000 6.484551 +14.900000 9.300000 6.141318 +14.900000 9.400000 5.818084 +14.900000 9.500000 5.514851 +14.900000 9.600000 5.231618 +14.900000 9.700000 4.968385 +14.900000 9.800000 4.725151 +14.900000 9.900000 4.501918 +14.900000 10.000000 4.298685 +14.900000 10.100000 4.115451 +14.900000 10.200000 3.952218 +14.900000 10.300000 3.808985 +14.900000 10.400000 3.685752 +14.900000 10.500000 3.582518 +14.900000 10.600000 3.499285 +14.900000 10.700000 3.436052 +14.900000 10.800000 3.392819 +14.900000 10.900000 3.369585 +14.900000 11.000000 3.366352 +14.900000 11.100000 3.383119 +14.900000 11.200000 3.419885 +14.900000 11.300000 3.476652 +14.900000 11.400000 3.553419 +14.900000 11.500000 3.650186 +14.900000 11.600000 3.766952 +14.900000 11.700000 3.903719 +14.900000 11.800000 4.060486 +14.900000 11.900000 4.237253 +14.900000 12.000000 4.434019 +14.900000 12.100000 4.650786 +14.900000 12.200000 4.887553 +14.900000 12.300000 5.144319 +14.900000 12.400000 5.421086 +14.900000 12.500000 5.717853 +14.900000 12.600000 6.034620 +14.900000 12.700000 6.371386 +14.900000 12.800000 6.728153 +14.900000 12.900000 7.104920 +14.900000 13.000000 7.501687 +14.900000 13.100000 7.918453 +14.900000 13.200000 8.355220 +14.900000 13.300000 8.811987 +14.900000 13.400000 9.288754 +14.900000 13.500000 9.785520 +14.900000 13.600000 10.302287 +14.900000 13.700000 10.839054 +14.900000 13.800000 11.395820 +14.900000 13.900000 11.972587 +14.900000 14.000000 12.569354 +14.900000 14.100000 13.186121 +14.900000 14.200000 13.822887 +14.900000 14.300000 14.479654 +14.900000 14.400000 15.156421 +14.900000 14.500000 15.853188 +14.900000 14.600000 16.569954 +14.900000 14.700000 17.306721 +14.900000 14.800000 18.063488 +14.900000 14.900000 18.840254 +14.900000 15.000000 19.637021 + +15.000000 -5.000000 264.927485 +15.000000 -4.900000 261.698830 +15.000000 -4.800000 258.490175 +15.000000 -4.700000 255.301521 +15.000000 -4.600000 252.132866 +15.000000 -4.500000 248.984211 +15.000000 -4.400000 245.855557 +15.000000 -4.300000 242.746902 +15.000000 -4.200000 239.658248 +15.000000 -4.100000 236.589593 +15.000000 -4.000000 233.540938 +15.000000 -3.900000 230.512284 +15.000000 -3.800000 227.503629 +15.000000 -3.700000 224.514975 +15.000000 -3.600000 221.546320 +15.000000 -3.500000 218.597665 +15.000000 -3.400000 215.669011 +15.000000 -3.300000 212.760356 +15.000000 -3.200000 209.871701 +15.000000 -3.100000 207.003047 +15.000000 -3.000000 204.154392 +15.000000 -2.900000 201.325738 +15.000000 -2.800000 198.517083 +15.000000 -2.700000 195.728428 +15.000000 -2.600000 192.959774 +15.000000 -2.500000 190.211119 +15.000000 -2.400000 187.482464 +15.000000 -2.300000 184.773810 +15.000000 -2.200000 182.085155 +15.000000 -2.100000 179.416501 +15.000000 -2.000000 176.767846 +15.000000 -1.900000 174.139191 +15.000000 -1.800000 171.530537 +15.000000 -1.700000 168.941882 +15.000000 -1.600000 166.373228 +15.000000 -1.500000 163.824573 +15.000000 -1.400000 161.295918 +15.000000 -1.300000 158.787264 +15.000000 -1.200000 156.298609 +15.000000 -1.100000 153.829954 +15.000000 -1.000000 151.381300 +15.000000 -0.900000 148.952645 +15.000000 -0.800000 146.543991 +15.000000 -0.700000 144.155336 +15.000000 -0.600000 141.786681 +15.000000 -0.500000 139.438027 +15.000000 -0.400000 137.109372 +15.000000 -0.300000 134.800717 +15.000000 -0.200000 132.512063 +15.000000 -0.100000 130.243408 +15.000000 -0.000000 127.994754 +15.000000 0.100000 125.766099 +15.000000 0.200000 123.557444 +15.000000 0.300000 121.368790 +15.000000 0.400000 119.200135 +15.000000 0.500000 117.051481 +15.000000 0.600000 114.922826 +15.000000 0.700000 112.814171 +15.000000 0.800000 110.725517 +15.000000 0.900000 108.656862 +15.000000 1.000000 106.608207 +15.000000 1.100000 104.579553 +15.000000 1.200000 102.570898 +15.000000 1.300000 100.582244 +15.000000 1.400000 98.613589 +15.000000 1.500000 96.664934 +15.000000 1.600000 94.736280 +15.000000 1.700000 92.827625 +15.000000 1.800000 90.938970 +15.000000 1.900000 89.070316 +15.000000 2.000000 87.221661 +15.000000 2.100000 85.393007 +15.000000 2.200000 83.584352 +15.000000 2.300000 81.795697 +15.000000 2.400000 80.027043 +15.000000 2.500000 78.278388 +15.000000 2.600000 76.549734 +15.000000 2.700000 74.841079 +15.000000 2.800000 73.152424 +15.000000 2.900000 71.483770 +15.000000 3.000000 69.835115 +15.000000 3.100000 68.206460 +15.000000 3.200000 66.597806 +15.000000 3.300000 65.009151 +15.000000 3.400000 63.440497 +15.000000 3.500000 61.891842 +15.000000 3.600000 60.363187 +15.000000 3.700000 58.854533 +15.000000 3.800000 57.365878 +15.000000 3.900000 55.897224 +15.000000 4.000000 54.448569 +15.000000 4.100000 53.019914 +15.000000 4.200000 51.611260 +15.000000 4.300000 50.222605 +15.000000 4.400000 48.853950 +15.000000 4.500000 47.505296 +15.000000 4.600000 46.176641 +15.000000 4.700000 44.867987 +15.000000 4.800000 43.579332 +15.000000 4.900000 42.310677 +15.000000 5.000000 41.062023 +15.000000 5.100000 39.833368 +15.000000 5.200000 38.624713 +15.000000 5.300000 37.436059 +15.000000 5.400000 36.267404 +15.000000 5.500000 35.118750 +15.000000 5.600000 33.990095 +15.000000 5.700000 32.881440 +15.000000 5.800000 31.792786 +15.000000 5.900000 30.724131 +15.000000 6.000000 29.675477 +15.000000 6.100000 28.646822 +15.000000 6.200000 27.638167 +15.000000 6.300000 26.649513 +15.000000 6.400000 25.680858 +15.000000 6.500000 24.732203 +15.000000 6.600000 23.803549 +15.000000 6.700000 22.894894 +15.000000 6.800000 22.006240 +15.000000 6.900000 21.137585 +15.000000 7.000000 20.288930 +15.000000 7.100000 19.460276 +15.000000 7.200000 18.651621 +15.000000 7.300000 17.862966 +15.000000 7.400000 17.094312 +15.000000 7.500000 16.345657 +15.000000 7.600000 15.617003 +15.000000 7.700000 14.908348 +15.000000 7.800000 14.219693 +15.000000 7.900000 13.551039 +15.000000 8.000000 12.902384 +15.000000 8.100000 12.273730 +15.000000 8.200000 11.665075 +15.000000 8.300000 11.076420 +15.000000 8.400000 10.507766 +15.000000 8.500000 9.959111 +15.000000 8.600000 9.430456 +15.000000 8.700000 8.921802 +15.000000 8.800000 8.433147 +15.000000 8.900000 7.964493 +15.000000 9.000000 7.515838 +15.000000 9.100000 7.087183 +15.000000 9.200000 6.678529 +15.000000 9.300000 6.289874 +15.000000 9.400000 5.921219 +15.000000 9.500000 5.572565 +15.000000 9.600000 5.243910 +15.000000 9.700000 4.935256 +15.000000 9.800000 4.646601 +15.000000 9.900000 4.377946 +15.000000 10.000000 4.129292 +15.000000 10.100000 3.900637 +15.000000 10.200000 3.691983 +15.000000 10.300000 3.503328 +15.000000 10.400000 3.334673 +15.000000 10.500000 3.186019 +15.000000 10.600000 3.057364 +15.000000 10.700000 2.948709 +15.000000 10.800000 2.860055 +15.000000 10.900000 2.791400 +15.000000 11.000000 2.742746 +15.000000 11.100000 2.714091 +15.000000 11.200000 2.705436 +15.000000 11.300000 2.716782 +15.000000 11.400000 2.748127 +15.000000 11.500000 2.799472 +15.000000 11.600000 2.870818 +15.000000 11.700000 2.962163 +15.000000 11.800000 3.073509 +15.000000 11.900000 3.204854 +15.000000 12.000000 3.356199 +15.000000 12.100000 3.527545 +15.000000 12.200000 3.718890 +15.000000 12.300000 3.930236 +15.000000 12.400000 4.161581 +15.000000 12.500000 4.412926 +15.000000 12.600000 4.684272 +15.000000 12.700000 4.975617 +15.000000 12.800000 5.286962 +15.000000 12.900000 5.618308 +15.000000 13.000000 5.969653 +15.000000 13.100000 6.340999 +15.000000 13.200000 6.732344 +15.000000 13.300000 7.143689 +15.000000 13.400000 7.575035 +15.000000 13.500000 8.026380 +15.000000 13.600000 8.497725 +15.000000 13.700000 8.989071 +15.000000 13.800000 9.500416 +15.000000 13.900000 10.031762 +15.000000 14.000000 10.583107 +15.000000 14.100000 11.154452 +15.000000 14.200000 11.745798 +15.000000 14.300000 12.357143 +15.000000 14.400000 12.988489 +15.000000 14.500000 13.639834 +15.000000 14.600000 14.311179 +15.000000 14.700000 15.002525 +15.000000 14.800000 15.713870 +15.000000 14.900000 16.445215 +15.000000 15.000000 17.196561 + + + +# trust-region/levenberg-marquardt +6.000000 14.500000 +-2.440721 8.052493 +-2.649759 10.338367 +-3.079780 11.922784 +-3.207953 12.376764 +-3.113030 12.240580 +-3.156168 12.295063 +-3.135422 12.267922 +-3.144145 12.278083 +-3.140628 12.273947 +-3.141954 12.275411 +-3.141465 12.274866 +-3.141638 12.275049 +-3.141577 12.274984 +-3.141598 12.275006 +-3.141591 12.274998 +-3.141593 12.275001 +-3.141592 12.275000 +-3.141593 12.275000 +-3.141593 12.275000 +-3.141593 12.275000 + + +# trust-region/levenberg-marquardt+accel +6.000000 14.500000 +5.434266 14.105210 +4.860709 13.032737 +4.081924 10.582719 +3.243692 6.790283 +2.058201 4.197091 +2.873516 2.930922 +3.372929 2.246210 +3.036675 2.318015 +3.239950 2.237589 +3.128135 2.263146 +3.145861 2.267710 +3.141215 2.271767 +3.141969 2.273339 +3.141552 2.274340 +3.141685 2.274699 +3.141514 2.274945 +3.141678 2.274938 +3.141578 2.274977 +3.141598 2.274987 +3.141593 2.274994 +3.141593 2.274997 +3.141592 2.275000 +3.141593 2.275000 +3.141592 2.275000 +3.141593 2.275000 +3.141593 2.275000 +3.141593 2.275000 + + +# trust-region/dogleg +6.000000 14.500000 +0.084715 10.513103 +4.386135 -0.771406 +2.863958 2.202150 +3.445763 2.006013 +2.862516 2.458756 +3.367235 2.256024 +3.115028 2.153453 +3.159338 2.237666 +3.131967 2.268437 +3.146763 2.280079 +3.139564 2.273509 +3.143245 2.276490 +3.141432 2.274895 +3.141664 2.275075 +3.141552 2.274970 +3.141610 2.275017 +3.141581 2.274991 +3.141596 2.275003 +3.141592 2.275000 +3.141593 2.275000 +3.141593 2.275000 +3.141593 2.275000 +3.141593 2.275000 + + +# trust-region/double-dogleg +6.000000 14.500000 +0.084715 10.513103 +4.525217 -0.637424 +2.784094 2.178685 +3.382281 2.048555 +3.138220 2.084792 +3.163691 2.189933 +3.107123 2.326539 +3.150882 2.300348 +3.133654 2.271698 +3.144331 2.279648 +3.139620 2.273460 +3.142196 2.275844 +3.140984 2.274394 +3.141615 2.275040 +3.141578 2.274991 +3.141599 2.275008 +3.141589 2.274997 +3.141594 2.275002 +3.141592 2.274999 +3.141593 2.275000 +3.141593 2.275000 +3.141593 2.275000 +3.141593 2.275000 +3.141593 2.275000 + + +# trust-region/2D-subspace +6.000000 14.500000 +0.443880 10.464140 +4.859341 -0.766174 +2.457734 2.123629 +3.300727 2.062365 +3.096528 2.222788 +3.149836 2.246128 +3.139418 2.264724 +3.145814 2.269650 +3.139332 2.274037 +3.142734 2.274079 +3.141074 2.274870 +3.141924 2.274792 +3.141505 2.274946 +3.141610 2.274967 +3.141586 2.274990 +3.141599 2.274993 +3.141593 2.274996 +3.141592 2.275000 +3.141593 2.275000 +3.141593 2.275000 +3.141593 2.275000 +3.141593 2.275000 +3.141593 2.275000 + + diff -Nru gsl-doc-1.16/doc/examples/nlfit4.c gsl-doc-2.3/doc/examples/nlfit4.c --- gsl-doc-1.16/doc/examples/nlfit4.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/nlfit4.c 2016-09-16 22:52:48.000000000 +0000 @@ -0,0 +1,219 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* parameters for functions */ +struct model_params +{ + double alpha; + gsl_spmatrix *J; +}; + +/* penalty function */ +int +penalty_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + struct model_params *par = (struct model_params *) params; + const double sqrt_alpha = sqrt(par->alpha); + const size_t p = x->size; + size_t i; + double sum = 0.0; + + for (i = 0; i < p; ++i) + { + double xi = gsl_vector_get(x, i); + + gsl_vector_set(f, i, sqrt_alpha*(xi - 1.0)); + + sum += xi * xi; + } + + gsl_vector_set(f, p, sum - 0.25); + + return GSL_SUCCESS; +} + +int +penalty_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + struct model_params *par = (struct model_params *) params; + const size_t p = x->size; + size_t j; + + /* store 2*x in last row of J */ + for (j = 0; j < p; ++j) + { + double xj = gsl_vector_get(x, j); + gsl_spmatrix_set(par->J, p, j, 2.0 * xj); + } + + /* compute v = op(J) u */ + if (v) + gsl_spblas_dgemv(TransJ, 1.0, par->J, u, 0.0, v); + + if (JTJ) + { + gsl_vector_view diag = gsl_matrix_diagonal(JTJ); + + /* compute J^T J = [ alpha*I_p + 4 x x^T ] */ + gsl_matrix_set_zero(JTJ); + + /* store 4 x x^T in lower half of JTJ */ + gsl_blas_dsyr(CblasLower, 4.0, x, JTJ); + + /* add alpha to diag(JTJ) */ + gsl_vector_add_constant(&diag.vector, par->alpha); + } + + return GSL_SUCCESS; +} + +int +penalty_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + const size_t p = x->size; + double normv = gsl_blas_dnrm2(v); + + gsl_vector_set_zero(fvv); + gsl_vector_set(fvv, p, 2.0 * normv * normv); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +void +solve_system(const gsl_vector *x0, gsl_multilarge_nlinear_fdf *fdf, + gsl_multilarge_nlinear_parameters *params) +{ + const gsl_multilarge_nlinear_type *T = gsl_multilarge_nlinear_trust; + const size_t max_iter = 200; + const double xtol = 1.0e-8; + const double gtol = 1.0e-8; + const double ftol = 1.0e-8; + const size_t n = fdf->n; + const size_t p = fdf->p; + gsl_multilarge_nlinear_workspace *work = + gsl_multilarge_nlinear_alloc(T, params, n, p); + gsl_vector * f = gsl_multilarge_nlinear_residual(work); + gsl_vector * x = gsl_multilarge_nlinear_position(work); + int info; + double chisq0, chisq, rcond, xsq; + struct timeval tv0, tv1; + + gettimeofday(&tv0, NULL); + + /* initialize solver */ + gsl_multilarge_nlinear_init(x0, fdf, work); + + /* store initial cost */ + gsl_blas_ddot(f, f, &chisq0); + + /* iterate until convergence */ + gsl_multilarge_nlinear_driver(max_iter, xtol, gtol, ftol, + NULL, NULL, &info, work); + + gettimeofday(&tv1, NULL); + + /* store final cost */ + gsl_blas_ddot(f, f, &chisq); + + /* compute final ||x||^2 */ + gsl_blas_ddot(x, x, &xsq); + + /* store cond(J(x)) */ + gsl_multilarge_nlinear_rcond(&rcond, work); + + /* print summary */ + fprintf(stderr, "%-25s %-5zu %-4zu %-5zu %-6zu %-4zu %-10.4e %-10.4e %-7.2f %-11.4e %.2f\n", + gsl_multilarge_nlinear_trs_name(work), + gsl_multilarge_nlinear_niter(work), + fdf->nevalf, + fdf->nevaldfu, + fdf->nevaldf2, + fdf->nevalfvv, + chisq0, + chisq, + 1.0 / rcond, + xsq, + (tv1.tv_sec - tv0.tv_sec) + 1.0e-6 * (tv1.tv_usec - tv0.tv_usec)); + + gsl_multilarge_nlinear_free(work); +} + +int +main (void) +{ + const size_t p = 2000; + const size_t n = p + 1; + gsl_vector *f = gsl_vector_alloc(n); + gsl_vector *x = gsl_vector_alloc(p); + + /* allocate sparse Jacobian matrix with 2*p non-zero elements in triplet format */ + gsl_spmatrix *J = gsl_spmatrix_alloc_nzmax(n, p, 2 * p, GSL_SPMATRIX_TRIPLET); + + gsl_multilarge_nlinear_fdf fdf; + gsl_multilarge_nlinear_parameters fdf_params = + gsl_multilarge_nlinear_default_parameters(); + struct model_params params; + size_t i; + + params.alpha = 1.0e-5; + params.J = J; + + /* define function to be minimized */ + fdf.f = penalty_f; + fdf.df = penalty_df; + fdf.fvv = penalty_fvv; + fdf.n = n; + fdf.p = p; + fdf.params = ¶ms; + + for (i = 0; i < p; ++i) + { + /* starting point */ + gsl_vector_set(x, i, i + 1.0); + + /* store sqrt(alpha)*I_p in upper p-by-p block of J */ + gsl_spmatrix_set(J, i, i, sqrt(params.alpha)); + } + + fprintf(stderr, "%-25s %-4s %-4s %-5s %-6s %-4s %-10s %-10s %-7s %-11s %-10s\n", + "Method", "NITER", "NFEV", "NJUEV", "NJTJEV", "NAEV", "Init Cost", + "Final cost", "cond(J)", "Final |x|^2", "Time (s)"); + + fdf_params.scale = gsl_multilarge_nlinear_scale_levenberg; + + fdf_params.trs = gsl_multilarge_nlinear_trs_lm; + solve_system(x, &fdf, &fdf_params); + + fdf_params.trs = gsl_multilarge_nlinear_trs_lmaccel; + solve_system(x, &fdf, &fdf_params); + + fdf_params.trs = gsl_multilarge_nlinear_trs_dogleg; + solve_system(x, &fdf, &fdf_params); + + fdf_params.trs = gsl_multilarge_nlinear_trs_ddogleg; + solve_system(x, &fdf, &fdf_params); + + fdf_params.trs = gsl_multilarge_nlinear_trs_subspace2D; + solve_system(x, &fdf, &fdf_params); + + fdf_params.trs = gsl_multilarge_nlinear_trs_cgst; + solve_system(x, &fdf, &fdf_params); + + gsl_vector_free(f); + gsl_vector_free(x); + gsl_spmatrix_free(J); + + return 0; +} diff -Nru gsl-doc-1.16/doc/examples/nlfit.c gsl-doc-2.3/doc/examples/nlfit.c --- gsl-doc-1.16/doc/examples/nlfit.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/nlfit.c 2016-09-24 10:58:59.000000000 +0000 @@ -2,114 +2,193 @@ #include #include #include +#include #include #include -#include - -#include "expfit.c" +#include +/* number of data points to fit */ #define N 40 -void print_state (size_t iter, gsl_multifit_fdfsolver * s); +struct data { + size_t n; + double * y; +}; + +int +expb_f (const gsl_vector * x, void *data, + gsl_vector * f) +{ + size_t n = ((struct data *)data)->n; + double *y = ((struct data *)data)->y; + + double A = gsl_vector_get (x, 0); + double lambda = gsl_vector_get (x, 1); + double b = gsl_vector_get (x, 2); + + size_t i; + + for (i = 0; i < n; i++) + { + /* Model Yi = A * exp(-lambda * i) + b */ + double t = i; + double Yi = A * exp (-lambda * t) + b; + gsl_vector_set (f, i, Yi - y[i]); + } + + return GSL_SUCCESS; +} + +int +expb_df (const gsl_vector * x, void *data, + gsl_matrix * J) +{ + size_t n = ((struct data *)data)->n; + + double A = gsl_vector_get (x, 0); + double lambda = gsl_vector_get (x, 1); + + size_t i; + + for (i = 0; i < n; i++) + { + /* Jacobian matrix J(i,j) = dfi / dxj, */ + /* where fi = (Yi - yi)/sigma[i], */ + /* Yi = A * exp(-lambda * i) + b */ + /* and the xj are the parameters (A,lambda,b) */ + double t = i; + double e = exp(-lambda * t); + gsl_matrix_set (J, i, 0, e); + gsl_matrix_set (J, i, 1, -t * A * e); + gsl_matrix_set (J, i, 2, 1.0); + } + return GSL_SUCCESS; +} + +void +callback(const size_t iter, void *params, + const gsl_multifit_nlinear_workspace *w) +{ + gsl_vector *f = gsl_multifit_nlinear_residual(w); + gsl_vector *x = gsl_multifit_nlinear_position(w); + double rcond; + + /* compute reciprocal condition number of J(x) */ + gsl_multifit_nlinear_rcond(&rcond, w); + + fprintf(stderr, "iter %2zu: A = %.4f, lambda = %.4f, b = %.4f, cond(J) = %8.4f, |f(x)| = %.4f\n", + iter, + gsl_vector_get(x, 0), + gsl_vector_get(x, 1), + gsl_vector_get(x, 2), + 1.0 / rcond, + gsl_blas_dnrm2(f)); +} int main (void) { - const gsl_multifit_fdfsolver_type *T; - gsl_multifit_fdfsolver *s; - int status; - unsigned int i, iter = 0; + const gsl_multifit_nlinear_type *T = gsl_multifit_nlinear_trust; + gsl_multifit_nlinear_workspace *w; + gsl_multifit_nlinear_fdf fdf; + gsl_multifit_nlinear_parameters fdf_params = + gsl_multifit_nlinear_default_parameters(); const size_t n = N; const size_t p = 3; + gsl_vector *f; + gsl_matrix *J; gsl_matrix *covar = gsl_matrix_alloc (p, p); - double y[N], sigma[N]; - struct data d = { n, y, sigma}; - gsl_multifit_function_fdf f; - double x_init[3] = { 1.0, 0.0, 0.0 }; + double y[N], weights[N]; + struct data d = { n, y }; + double x_init[3] = { 1.0, 1.0, 0.0 }; /* starting values */ gsl_vector_view x = gsl_vector_view_array (x_init, p); - const gsl_rng_type * type; + gsl_vector_view wts = gsl_vector_view_array(weights, n); gsl_rng * r; + double chisq, chisq0; + int status, info; + size_t i; + + const double xtol = 1e-8; + const double gtol = 1e-8; + const double ftol = 0.0; gsl_rng_env_setup(); + r = gsl_rng_alloc(gsl_rng_default); - type = gsl_rng_default; - r = gsl_rng_alloc (type); - - f.f = &expb_f; - f.df = &expb_df; - f.fdf = &expb_fdf; - f.n = n; - f.p = p; - f.params = &d; - - /* This is the data to be fitted */ + /* define the function to be minimized */ + fdf.f = expb_f; + fdf.df = expb_df; /* set to NULL for finite-difference Jacobian */ + fdf.fvv = NULL; /* not using geodesic acceleration */ + fdf.n = n; + fdf.p = p; + fdf.params = &d; + /* this is the data to be fitted */ for (i = 0; i < n; i++) { double t = i; - y[i] = 1.0 + 5 * exp (-0.1 * t) - + gsl_ran_gaussian (r, 0.1); - sigma[i] = 0.1; - printf ("data: %u %g %g\n", i, y[i], sigma[i]); + double yi = 1.0 + 5 * exp (-0.1 * t); + double si = 0.1 * yi; + double dy = gsl_ran_gaussian(r, si); + + weights[i] = 1.0 / (si * si); + y[i] = yi + dy; + printf ("data: %zu %g %g\n", i, y[i], si); }; - T = gsl_multifit_fdfsolver_lmsder; - s = gsl_multifit_fdfsolver_alloc (T, n, p); - gsl_multifit_fdfsolver_set (s, &f, &x.vector); + /* allocate workspace with default parameters */ + w = gsl_multifit_nlinear_alloc (T, &fdf_params, n, p); - print_state (iter, s); + /* initialize solver with starting point and weights */ + gsl_multifit_nlinear_winit (&x.vector, &wts.vector, &fdf, w); - do - { - iter++; - status = gsl_multifit_fdfsolver_iterate (s); - - printf ("status = %s\n", gsl_strerror (status)); - - print_state (iter, s); + /* compute initial cost function */ + f = gsl_multifit_nlinear_residual(w); + gsl_blas_ddot(f, f, &chisq0); - if (status) - break; + /* solve the system with a maximum of 20 iterations */ + status = gsl_multifit_nlinear_driver(20, xtol, gtol, ftol, + callback, NULL, &info, w); - status = gsl_multifit_test_delta (s->dx, s->x, - 1e-4, 1e-4); - } - while (status == GSL_CONTINUE && iter < 500); + /* compute covariance of best fit parameters */ + J = gsl_multifit_nlinear_jac(w); + gsl_multifit_nlinear_covar (J, 0.0, covar); - gsl_multifit_covar (s->J, 0.0, covar); + /* compute final cost */ + gsl_blas_ddot(f, f, &chisq); -#define FIT(i) gsl_vector_get(s->x, i) +#define FIT(i) gsl_vector_get(w->x, i) #define ERR(i) sqrt(gsl_matrix_get(covar,i,i)) + fprintf(stderr, "summary from method '%s/%s'\n", + gsl_multifit_nlinear_name(w), + gsl_multifit_nlinear_trs_name(w)); + fprintf(stderr, "number of iterations: %zu\n", + gsl_multifit_nlinear_niter(w)); + fprintf(stderr, "function evaluations: %zu\n", fdf.nevalf); + fprintf(stderr, "Jacobian evaluations: %zu\n", fdf.nevaldf); + fprintf(stderr, "reason for stopping: %s\n", + (info == 1) ? "small step size" : "small gradient"); + fprintf(stderr, "initial |f(x)| = %f\n", sqrt(chisq0)); + fprintf(stderr, "final |f(x)| = %f\n", sqrt(chisq)); + { - double chi = gsl_blas_dnrm2(s->f); double dof = n - p; - double c = GSL_MAX_DBL(1, chi / sqrt(dof)); + double c = GSL_MAX_DBL(1, sqrt(chisq / dof)); - printf("chisq/dof = %g\n", pow(chi, 2.0) / dof); + fprintf(stderr, "chisq/dof = %g\n", chisq / dof); - printf ("A = %.5f +/- %.5f\n", FIT(0), c*ERR(0)); - printf ("lambda = %.5f +/- %.5f\n", FIT(1), c*ERR(1)); - printf ("b = %.5f +/- %.5f\n", FIT(2), c*ERR(2)); + fprintf (stderr, "A = %.5f +/- %.5f\n", FIT(0), c*ERR(0)); + fprintf (stderr, "lambda = %.5f +/- %.5f\n", FIT(1), c*ERR(1)); + fprintf (stderr, "b = %.5f +/- %.5f\n", FIT(2), c*ERR(2)); } - printf ("status = %s\n", gsl_strerror (status)); + fprintf (stderr, "status = %s\n", gsl_strerror (status)); - gsl_multifit_fdfsolver_free (s); + gsl_multifit_nlinear_free (w); gsl_matrix_free (covar); gsl_rng_free (r); - return 0; -} -void -print_state (size_t iter, gsl_multifit_fdfsolver * s) -{ - printf ("iter: %3u x = % 15.8f % 15.8f % 15.8f " - "|f(x)| = %g\n", - iter, - gsl_vector_get (s->x, 0), - gsl_vector_get (s->x, 1), - gsl_vector_get (s->x, 2), - gsl_blas_dnrm2 (s->f)); + return 0; } diff -Nru gsl-doc-1.16/doc/examples/nlfit.txt gsl-doc-2.3/doc/examples/nlfit.txt --- gsl-doc-1.16/doc/examples/nlfit.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/nlfit.txt 2015-11-10 19:05:33.000000000 +0000 @@ -0,0 +1,40 @@ +data: 0 6.08035 0.6 +data: 1 5.47552 0.552419 +data: 2 5.94654 0.509365 +data: 3 5.0492 0.470409 +data: 4 4.78568 0.43516 +data: 5 3.51748 0.403265 +data: 6 2.84671 0.374406 +data: 7 3.24634 0.348293 +data: 8 3.23395 0.324664 +data: 9 3.30385 0.303285 +data: 10 2.83439 0.28394 +data: 11 2.31891 0.266436 +data: 12 2.33858 0.250597 +data: 13 2.40559 0.236266 +data: 14 2.41856 0.223298 +data: 15 1.99966 0.211565 +data: 16 1.88127 0.200948 +data: 17 1.91477 0.191342 +data: 18 1.70415 0.182649 +data: 19 1.60316 0.174784 +data: 20 1.77937 0.167668 +data: 21 1.55302 0.161228 +data: 22 1.50903 0.155402 +data: 23 1.36364 0.150129 +data: 24 1.36873 0.145359 +data: 25 1.41954 0.141042 +data: 26 1.37778 0.137137 +data: 27 1.23573 0.133603 +data: 28 1.28524 0.130405 +data: 29 1.46327 0.127512 +data: 30 1.22315 0.124894 +data: 31 1.1933 0.122525 +data: 32 1.18717 0.120381 +data: 33 0.883172 0.118442 +data: 34 1.23424 0.116687 +data: 35 1.14683 0.115099 +data: 36 1.11091 0.113662 +data: 37 1.20396 0.112362 +data: 38 1.28722 0.111185 +data: 39 1.05801 0.110121 diff -Nru gsl-doc-1.16/doc/examples/nmsimplex.out gsl-doc-2.3/doc/examples/nmsimplex.out --- gsl-doc-1.16/doc/examples/nmsimplex.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/nmsimplex.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ - 1 6.500e+00 5.000e+00 f() = 512.500 size = 1.130 - 2 5.250e+00 4.000e+00 f() = 290.625 size = 1.409 - 3 5.250e+00 4.000e+00 f() = 290.625 size = 1.409 - 4 5.500e+00 1.000e+00 f() = 252.500 size = 1.409 - 5 2.625e+00 3.500e+00 f() = 101.406 size = 1.847 - 6 2.625e+00 3.500e+00 f() = 101.406 size = 1.847 - 7 0.000e+00 3.000e+00 f() = 60.000 size = 1.847 - 8 2.094e+00 1.875e+00 f() = 42.275 size = 1.321 - 9 2.578e-01 1.906e+00 f() = 35.684 size = 1.069 - 10 5.879e-01 2.445e+00 f() = 35.664 size = 0.841 - 11 1.258e+00 2.025e+00 f() = 30.680 size = 0.476 - 12 1.258e+00 2.025e+00 f() = 30.680 size = 0.367 - 13 1.093e+00 1.849e+00 f() = 30.539 size = 0.300 - 14 8.830e-01 2.004e+00 f() = 30.137 size = 0.172 - 15 8.830e-01 2.004e+00 f() = 30.137 size = 0.126 - 16 9.582e-01 2.060e+00 f() = 30.090 size = 0.106 - 17 1.022e+00 2.004e+00 f() = 30.005 size = 0.063 - 18 1.022e+00 2.004e+00 f() = 30.005 size = 0.043 - 19 1.022e+00 2.004e+00 f() = 30.005 size = 0.043 - 20 1.022e+00 2.004e+00 f() = 30.005 size = 0.027 - 21 1.022e+00 2.004e+00 f() = 30.005 size = 0.022 - 22 9.920e-01 1.997e+00 f() = 30.001 size = 0.016 - 23 9.920e-01 1.997e+00 f() = 30.001 size = 0.013 -converged to minimum at - 24 9.920e-01 1.997e+00 f() = 30.001 size = 0.008 diff -Nru gsl-doc-1.16/doc/examples/nmsimplex.txt gsl-doc-2.3/doc/examples/nmsimplex.txt --- gsl-doc-1.16/doc/examples/nmsimplex.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/nmsimplex.txt 2015-11-09 05:23:40.000000000 +0000 @@ -0,0 +1,25 @@ + 1 6.500e+00 5.000e+00 f() = 512.500 size = 1.130 + 2 5.250e+00 4.000e+00 f() = 290.625 size = 1.409 + 3 5.250e+00 4.000e+00 f() = 290.625 size = 1.409 + 4 5.500e+00 1.000e+00 f() = 252.500 size = 1.409 + 5 2.625e+00 3.500e+00 f() = 101.406 size = 1.847 + 6 2.625e+00 3.500e+00 f() = 101.406 size = 1.847 + 7 0.000e+00 3.000e+00 f() = 60.000 size = 1.847 + 8 2.094e+00 1.875e+00 f() = 42.275 size = 1.321 + 9 2.578e-01 1.906e+00 f() = 35.684 size = 1.069 + 10 5.879e-01 2.445e+00 f() = 35.664 size = 0.841 + 11 1.258e+00 2.025e+00 f() = 30.680 size = 0.476 + 12 1.258e+00 2.025e+00 f() = 30.680 size = 0.367 + 13 1.093e+00 1.849e+00 f() = 30.539 size = 0.300 + 14 8.830e-01 2.004e+00 f() = 30.137 size = 0.172 + 15 8.830e-01 2.004e+00 f() = 30.137 size = 0.126 + 16 9.582e-01 2.060e+00 f() = 30.090 size = 0.106 + 17 1.022e+00 2.004e+00 f() = 30.005 size = 0.063 + 18 1.022e+00 2.004e+00 f() = 30.005 size = 0.043 + 19 1.022e+00 2.004e+00 f() = 30.005 size = 0.043 + 20 1.022e+00 2.004e+00 f() = 30.005 size = 0.027 + 21 1.022e+00 2.004e+00 f() = 30.005 size = 0.022 + 22 9.920e-01 1.997e+00 f() = 30.001 size = 0.016 + 23 9.920e-01 1.997e+00 f() = 30.001 size = 0.013 +converged to minimum at + 24 9.920e-01 1.997e+00 f() = 30.001 size = 0.008 diff -Nru gsl-doc-1.16/doc/examples/ntupler.c gsl-doc-2.3/doc/examples/ntupler.c --- gsl-doc-1.16/doc/examples/ntupler.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/ntupler.c 2015-11-10 19:45:36.000000000 +0000 @@ -61,6 +61,7 @@ double val_func (void *ntuple_data, void *params) { + (void)(params); /* avoid unused parameter warning */ struct data * data = (struct data *) ntuple_data; double x, y, z; diff -Nru gsl-doc-1.16/doc/examples/ntuple.txt gsl-doc-2.3/doc/examples/ntuple.txt --- gsl-doc-1.16/doc/examples/ntuple.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/ntuple.txt 2015-11-10 19:11:14.000000000 +0000 @@ -0,0 +1,100 @@ +0.000000 0.100000 0.000000 +0.100000 0.200000 0.000000 +0.200000 0.300000 0.000000 +0.300000 0.400000 0.000000 +0.400000 0.500000 0.000000 +0.500000 0.600000 0.000000 +0.600000 0.700000 0.000000 +0.700000 0.800000 0.000000 +0.800000 0.900000 0.000000 +0.900000 1.000000 0.000000 +1.000000 1.100000 0.000000 +1.100000 1.200000 0.000000 +1.200000 1.300000 0.000000 +1.300000 1.400000 0.000000 +1.400000 1.500000 0.000000 +1.500000 1.600000 210.000000 +1.600000 1.700000 221.000000 +1.700000 1.800000 237.000000 +1.800000 1.900000 207.000000 +1.900000 2.000000 208.000000 +2.000000 2.100000 212.000000 +2.100000 2.200000 214.000000 +2.200000 2.300000 177.000000 +2.300000 2.400000 204.000000 +2.400000 2.500000 172.000000 +2.500000 2.600000 194.000000 +2.600000 2.700000 167.000000 +2.700000 2.800000 166.000000 +2.800000 2.900000 174.000000 +2.900000 3.000000 157.000000 +3.000000 3.100000 159.000000 +3.100000 3.200000 126.000000 +3.200000 3.300000 146.000000 +3.300000 3.400000 135.000000 +3.400000 3.500000 129.000000 +3.500000 3.600000 124.000000 +3.600000 3.700000 110.000000 +3.700000 3.800000 109.000000 +3.800000 3.900000 120.000000 +3.900000 4.000000 103.000000 +4.000000 4.100000 104.000000 +4.100000 4.200000 107.000000 +4.200000 4.300000 104.000000 +4.300000 4.400000 94.000000 +4.400000 4.500000 88.000000 +4.500000 4.600000 97.000000 +4.600000 4.700000 82.000000 +4.700000 4.800000 81.000000 +4.800000 4.900000 69.000000 +4.900000 5.000000 74.000000 +5.000000 5.100000 67.000000 +5.100000 5.200000 77.000000 +5.200000 5.300000 66.000000 +5.300000 5.400000 61.000000 +5.400000 5.500000 66.000000 +5.500000 5.600000 57.000000 +5.600000 5.700000 62.000000 +5.700000 5.800000 54.000000 +5.800000 5.900000 52.000000 +5.900000 6.000000 44.000000 +6.000000 6.100000 43.000000 +6.100000 6.200000 44.000000 +6.200000 6.300000 46.000000 +6.300000 6.400000 35.000000 +6.400000 6.500000 37.000000 +6.500000 6.600000 32.000000 +6.600000 6.700000 37.000000 +6.700000 6.800000 27.000000 +6.800000 6.900000 38.000000 +6.900000 7.000000 37.000000 +7.000000 7.100000 38.000000 +7.100000 7.200000 24.000000 +7.200000 7.300000 33.000000 +7.300000 7.400000 24.000000 +7.400000 7.500000 25.000000 +7.500000 7.600000 24.000000 +7.600000 7.700000 20.000000 +7.700000 7.800000 23.000000 +7.800000 7.900000 19.000000 +7.900000 8.000000 26.000000 +8.000000 8.100000 18.000000 +8.100000 8.200000 22.000000 +8.200000 8.300000 22.000000 +8.300000 8.400000 15.000000 +8.400000 8.500000 14.000000 +8.500000 8.600000 20.000000 +8.600000 8.700000 17.000000 +8.700000 8.800000 15.000000 +8.800000 8.900000 9.000000 +8.900000 9.000000 8.000000 +9.000000 9.100000 12.000000 +9.100000 9.200000 7.000000 +9.200000 9.300000 10.000000 +9.300000 9.400000 12.000000 +9.400000 9.500000 9.000000 +9.500000 9.600000 13.000000 +9.600000 9.700000 12.000000 +9.700000 9.800000 11.000000 +9.800000 9.900000 13.000000 +9.900000 10.000000 8.000000 diff -Nru gsl-doc-1.16/doc/examples/ode-initval.c gsl-doc-2.3/doc/examples/ode-initval.c --- gsl-doc-1.16/doc/examples/ode-initval.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/ode-initval.c 2015-11-09 19:13:41.000000000 +0000 @@ -7,6 +7,7 @@ func (double t, const double y[], double f[], void *params) { + (void)(t); /* avoid unused parameter warning */ double mu = *(double *)params; f[0] = y[1]; f[1] = -y[0] - mu*y[1]*(y[0]*y[0] - 1); @@ -17,6 +18,7 @@ jac (double t, const double y[], double *dfdy, double dfdt[], void *params) { + (void)(t); /* avoid unused parameter warning */ double mu = *(double *)params; gsl_matrix_view dfdy_mat = gsl_matrix_view_array (dfdy, 2, 2); diff -Nru gsl-doc-1.16/doc/examples/ode-initval.txt gsl-doc-2.3/doc/examples/ode-initval.txt --- gsl-doc-1.16/doc/examples/ode-initval.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/ode-initval.txt 2015-11-10 19:12:04.000000000 +0000 @@ -0,0 +1,100 @@ +1.00000e+00 -1.45686e+00 -1.15474e+01 +2.00000e+00 -1.95608e+00 6.90647e-02 +3.00000e+00 -1.88481e+00 7.36425e-02 +4.00000e+00 -1.80842e+00 7.93679e-02 +5.00000e+00 -1.72550e+00 8.68268e-02 +6.00000e+00 -1.63383e+00 9.71295e-02 +7.00000e+00 -1.52952e+00 1.12715e-01 +8.00000e+00 -1.40454e+00 1.40376e-01 +9.00000e+00 -1.23605e+00 2.10149e-01 +1.00000e+01 -8.53916e-01 9.01984e-01 +1.10000e+01 1.99274e+00 -6.69455e-02 +1.20000e+01 1.92381e+00 -7.10572e-02 +1.30000e+01 1.85032e+00 -7.61105e-02 +1.40000e+01 1.77113e+00 -8.25398e-02 +1.50000e+01 1.68453e+00 -9.11205e-02 +1.60000e+01 1.58767e+00 -1.03413e-01 +1.70000e+01 1.47528e+00 -1.23181e-01 +1.80000e+01 1.33506e+00 -1.62840e-01 +1.90000e+01 1.12079e+00 -3.05570e-01 +2.00000e+01 -1.59837e+00 -9.82301e+00 +2.10000e+01 -1.96148e+00 6.87433e-02 +2.20000e+01 -1.89057e+00 7.32476e-02 +2.30000e+01 -1.81462e+00 7.88663e-02 +2.40000e+01 -1.73228e+00 8.61590e-02 +2.50000e+01 -1.64141e+00 9.61768e-02 +2.60000e+01 -1.53829e+00 1.11197e-01 +2.70000e+01 -1.41542e+00 1.37412e-01 +2.80000e+01 -1.25215e+00 2.00819e-01 +2.90000e+01 -9.15979e-01 6.98133e-01 +3.00000e+01 1.99798e+00 -6.66422e-02 +3.10000e+01 1.92936e+00 -7.07053e-02 +3.20000e+01 1.85626e+00 -7.56719e-02 +3.30000e+01 1.77758e+00 -8.19715e-02 +3.40000e+01 1.69164e+00 -9.03420e-02 +3.50000e+01 1.59573e+00 -1.02252e-01 +3.60000e+01 1.48485e+00 -1.21185e-01 +3.70000e+01 1.34764e+00 -1.58256e-01 +3.80000e+01 1.14377e+00 -2.81644e-01 +3.90000e+01 -5.76613e-01 -1.26648e+01 +4.00000e+01 -1.96686e+00 6.84268e-02 +4.10000e+01 -1.89629e+00 7.28598e-02 +4.20000e+01 -1.82078e+00 7.83750e-02 +4.30000e+01 -1.73901e+00 8.55074e-02 +4.40000e+01 -1.64891e+00 9.52534e-02 +4.50000e+01 -1.54695e+00 1.09742e-01 +4.60000e+01 -1.42608e+00 1.34632e-01 +4.70000e+01 -1.26756e+00 1.92566e-01 +4.80000e+01 -9.65230e-01 5.67682e-01 +4.90000e+01 2.00319e+00 -6.62229e-02 +5.00000e+01 1.93489e+00 -7.03588e-02 +5.10000e+01 1.86218e+00 -7.52414e-02 +5.20000e+01 1.78398e+00 -8.14156e-02 +5.30000e+01 1.69869e+00 -8.95845e-02 +5.40000e+01 1.60370e+00 -1.01133e-01 +5.50000e+01 1.49428e+00 -1.19287e-01 +5.60000e+01 1.35987e+00 -1.54035e-01 +5.70000e+01 1.16505e+00 -2.61951e-01 +5.80000e+01 1.42891e-01 -6.13207e+00 +5.90000e+01 -1.97221e+00 6.81150e-02 +6.00000e+01 -1.90199e+00 7.24784e-02 +6.10000e+01 -1.82690e+00 7.78933e-02 +6.20000e+01 -1.74568e+00 8.48713e-02 +6.30000e+01 -1.65634e+00 9.43576e-02 +6.40000e+01 -1.55550e+00 1.08345e-01 +6.50000e+01 -1.43653e+00 1.32018e-01 +6.60000e+01 -1.28235e+00 1.85208e-01 +6.70000e+01 -1.00603e+00 4.78809e-01 +6.80000e+01 2.00833e+00 -6.45142e-02 +6.90000e+01 1.94039e+00 -7.00179e-02 +7.00000e+01 1.86806e+00 -7.48186e-02 +7.10000e+01 1.79034e+00 -8.08716e-02 +7.20000e+01 1.70568e+00 -8.88470e-02 +7.30000e+01 1.61158e+00 -1.00051e-01 +7.40000e+01 1.50355e+00 -1.17479e-01 +7.50000e+01 1.37179e+00 -1.50135e-01 +7.60000e+01 1.18491e+00 -2.45468e-01 +7.70000e+01 4.84591e-01 -3.05853e+00 +7.80000e+01 -1.97754e+00 6.78077e-02 +7.90000e+01 -1.90765e+00 7.21034e-02 +8.00000e+01 -1.83299e+00 7.74210e-02 +8.10000e+01 -1.75231e+00 8.42502e-02 +8.20000e+01 -1.66370e+00 9.34883e-02 +8.30000e+01 -1.56393e+00 1.07003e-01 +8.40000e+01 -1.44678e+00 1.29554e-01 +8.50000e+01 -1.29661e+00 1.78603e-01 +8.60000e+01 -1.04093e+00 4.15185e-01 +8.70000e+01 2.01299e+00 -4.86619e-02 +8.80000e+01 1.94586e+00 -6.96821e-02 +8.90000e+01 1.87390e+00 -7.44034e-02 +9.00000e+01 1.79665e+00 -8.03392e-02 +9.10000e+01 1.71261e+00 -8.81285e-02 +9.20000e+01 1.61938e+00 -9.90050e-02 +9.30000e+01 1.51269e+00 -1.15754e-01 +9.40000e+01 1.38341e+00 -1.46518e-01 +9.50000e+01 1.20359e+00 -2.31470e-01 +9.60000e+01 6.68012e-01 -1.79285e+00 +9.70000e+01 -1.98284e+00 6.75047e-02 +9.80000e+01 -1.91329e+00 7.17346e-02 +9.90000e+01 -1.83904e+00 7.69577e-02 +1.00000e+02 -1.75889e+00 8.36435e-02 diff -Nru gsl-doc-1.16/doc/examples/permseq.txt gsl-doc-2.3/doc/examples/permseq.txt --- gsl-doc-1.16/doc/examples/permseq.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/permseq.txt 2015-11-10 19:13:08.000000000 +0000 @@ -0,0 +1,6 @@ + 0 1 2 + 0 2 1 + 1 0 2 + 1 2 0 + 2 0 1 + 2 1 0 diff -Nru gsl-doc-1.16/doc/examples/permshuffle.txt gsl-doc-2.3/doc/examples/permshuffle.txt --- gsl-doc-1.16/doc/examples/permshuffle.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/permshuffle.txt 2015-11-10 19:14:14.000000000 +0000 @@ -0,0 +1,3 @@ +initial permutation: 0 1 2 3 4 5 6 7 8 9 + random permutation: 0 5 4 3 7 8 6 2 1 9 +inverse permutation: 0 8 7 3 2 1 6 4 5 9 diff -Nru gsl-doc-1.16/doc/examples/poisson.c gsl-doc-2.3/doc/examples/poisson.c --- gsl-doc-1.16/doc/examples/poisson.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/poisson.c 2016-07-02 23:02:41.000000000 +0000 @@ -0,0 +1,101 @@ +#include +#include +#include + +#include +#include +#include +#include + +int +main() +{ + const size_t N = 100; /* number of grid points */ + const size_t n = N - 2; /* subtract 2 to exclude boundaries */ + const double h = 1.0 / (N - 1.0); /* grid spacing */ + gsl_spmatrix *A = gsl_spmatrix_alloc(n ,n); /* triplet format */ + gsl_spmatrix *C; /* compressed format */ + gsl_vector *f = gsl_vector_alloc(n); /* right hand side vector */ + gsl_vector *u = gsl_vector_alloc(n); /* solution vector */ + size_t i; + + /* construct the sparse matrix for the finite difference equation */ + + /* construct first row */ + gsl_spmatrix_set(A, 0, 0, -2.0); + gsl_spmatrix_set(A, 0, 1, 1.0); + + /* construct rows [1:n-2] */ + for (i = 1; i < n - 1; ++i) + { + gsl_spmatrix_set(A, i, i + 1, 1.0); + gsl_spmatrix_set(A, i, i, -2.0); + gsl_spmatrix_set(A, i, i - 1, 1.0); + } + + /* construct last row */ + gsl_spmatrix_set(A, n - 1, n - 1, -2.0); + gsl_spmatrix_set(A, n - 1, n - 2, 1.0); + + /* scale by h^2 */ + gsl_spmatrix_scale(A, 1.0 / (h * h)); + + /* construct right hand side vector */ + for (i = 0; i < n; ++i) + { + double xi = (i + 1) * h; + double fi = -M_PI * M_PI * sin(M_PI * xi); + gsl_vector_set(f, i, fi); + } + + /* convert to compressed column format */ + C = gsl_spmatrix_ccs(A); + + /* now solve the system with the GMRES iterative solver */ + { + const double tol = 1.0e-6; /* solution relative tolerance */ + const size_t max_iter = 10; /* maximum iterations */ + const gsl_splinalg_itersolve_type *T = gsl_splinalg_itersolve_gmres; + gsl_splinalg_itersolve *work = + gsl_splinalg_itersolve_alloc(T, n, 0); + size_t iter = 0; + double residual; + int status; + + /* initial guess u = 0 */ + gsl_vector_set_zero(u); + + /* solve the system A u = f */ + do + { + status = gsl_splinalg_itersolve_iterate(C, f, tol, u, work); + + /* print out residual norm ||A*u - f|| */ + residual = gsl_splinalg_itersolve_normr(work); + fprintf(stderr, "iter %zu residual = %.12e\n", iter, residual); + + if (status == GSL_SUCCESS) + fprintf(stderr, "Converged\n"); + } + while (status == GSL_CONTINUE && ++iter < max_iter); + + /* output solution */ + for (i = 0; i < n; ++i) + { + double xi = (i + 1) * h; + double u_exact = sin(M_PI * xi); + double u_gsl = gsl_vector_get(u, i); + + printf("%f %.12e %.12e\n", xi, u_gsl, u_exact); + } + + gsl_splinalg_itersolve_free(work); + } + + gsl_spmatrix_free(A); + gsl_spmatrix_free(C); + gsl_vector_free(f); + gsl_vector_free(u); + + return 0; +} /* main() */ diff -Nru gsl-doc-1.16/doc/examples/poisson.txt gsl-doc-2.3/doc/examples/poisson.txt --- gsl-doc-1.16/doc/examples/poisson.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/poisson.txt 2015-11-10 19:15:21.000000000 +0000 @@ -0,0 +1,98 @@ +0.010101 3.173059613385e-02 3.172793349807e-02 +0.020202 6.342924224708e-02 6.342391965656e-02 +0.030303 9.506402049003e-02 9.505604330418e-02 +0.040404 1.266030773226e-01 1.265924535737e-01 +0.050505 1.580146555880e-01 1.580013959733e-01 +0.060606 1.892671264895e-01 1.892512443604e-01 +0.070707 2.203290214381e-01 2.203105327865e-01 +0.080808 2.511690637386e-01 2.511479871811e-01 +0.090909 2.817562000827e-01 2.817325568414e-01 +0.101010 3.120596318167e-01 3.120334456985e-01 +0.111111 3.420488459536e-01 3.420201433257e-01 +0.121212 3.716936458969e-01 3.716624556603e-01 +0.131313 4.009641818459e-01 4.009305354066e-01 +0.141414 4.298309808521e-01 4.297949120892e-01 +0.151515 4.582649764957e-01 4.582265217274e-01 +0.161616 4.862375381535e-01 4.861967361005e-01 +0.171717 5.137204998270e-01 5.136773915734e-01 +0.181818 5.406861885033e-01 5.406408174556e-01 +0.191919 5.671074520199e-01 5.670598638628e-01 +0.202020 5.929576864038e-01 5.929079290546e-01 +0.212121 6.182108626605e-01 6.181589862206e-01 +0.222222 6.428415529819e-01 6.427876096865e-01 +0.232323 6.668249563509e-01 6.667690005163e-01 +0.242424 6.901369235131e-01 6.900790114821e-01 +0.252525 7.127539812937e-01 7.126941713789e-01 +0.262626 7.346533562328e-01 7.345917086575e-01 +0.272727 7.558129975160e-01 7.557495743543e-01 +0.282828 7.762115991782e-01 7.761464642918e-01 +0.292929 7.958286215568e-01 7.957618405308e-01 +0.303030 8.146443119729e-01 8.145759520503e-01 +0.313131 8.326397246213e-01 8.325698546348e-01 +0.323232 8.497967396468e-01 8.497254299495e-01 +0.333333 8.660980813897e-01 8.660254037844e-01 +0.343434 8.815273357807e-01 8.814533634476e-01 +0.353535 8.960689668683e-01 8.959937742913e-01 +0.363636 9.097083324629e-01 9.096319953545e-01 +0.373737 9.224316988793e-01 9.223542941046e-01 +0.383838 9.342262547662e-01 9.341478602651e-01 +0.393939 9.450801240055e-01 9.450008187147e-01 +0.404040 9.549823776709e-01 9.549022414441e-01 +0.414141 9.639230450324e-01 9.638421585599e-01 +0.424242 9.718931235958e-01 9.718115683235e-01 +0.434343 9.788845881676e-01 9.788024462148e-01 +0.444444 9.848903989356e-01 9.848077530122e-01 +0.454545 9.899045085574e-01 9.898214418809e-01 +0.464646 9.939218682498e-01 9.938384644613e-01 +0.474747 9.969384328719e-01 9.968547759519e-01 +0.484848 9.989511649991e-01 9.988673391830e-01 +0.494949 9.999580379805e-01 9.998741276739e-01 +0.505051 9.999580379805e-01 9.998741276739e-01 +0.515152 9.989511649991e-01 9.988673391830e-01 +0.525253 9.969384328719e-01 9.968547759519e-01 +0.535354 9.939218682498e-01 9.938384644613e-01 +0.545455 9.899045085574e-01 9.898214418809e-01 +0.555556 9.848903989356e-01 9.848077530122e-01 +0.565657 9.788845881676e-01 9.788024462148e-01 +0.575758 9.718931235958e-01 9.718115683235e-01 +0.585859 9.639230450324e-01 9.638421585599e-01 +0.595960 9.549823776709e-01 9.549022414441e-01 +0.606061 9.450801240055e-01 9.450008187147e-01 +0.616162 9.342262547662e-01 9.341478602651e-01 +0.626263 9.224316988793e-01 9.223542941046e-01 +0.636364 9.097083324629e-01 9.096319953545e-01 +0.646465 8.960689668683e-01 8.959937742913e-01 +0.656566 8.815273357807e-01 8.814533634476e-01 +0.666667 8.660980813897e-01 8.660254037844e-01 +0.676768 8.497967396468e-01 8.497254299495e-01 +0.686869 8.326397246213e-01 8.325698546348e-01 +0.696970 8.146443119729e-01 8.145759520503e-01 +0.707071 7.958286215568e-01 7.957618405308e-01 +0.717172 7.762115991782e-01 7.761464642918e-01 +0.727273 7.558129975160e-01 7.557495743543e-01 +0.737374 7.346533562328e-01 7.345917086575e-01 +0.747475 7.127539812937e-01 7.126941713789e-01 +0.757576 6.901369235131e-01 6.900790114821e-01 +0.767677 6.668249563509e-01 6.667690005163e-01 +0.777778 6.428415529819e-01 6.427876096865e-01 +0.787879 6.182108626605e-01 6.181589862206e-01 +0.797980 5.929576864038e-01 5.929079290546e-01 +0.808081 5.671074520199e-01 5.670598638628e-01 +0.818182 5.406861885033e-01 5.406408174556e-01 +0.828283 5.137204998270e-01 5.136773915734e-01 +0.838384 4.862375381535e-01 4.861967361005e-01 +0.848485 4.582649764957e-01 4.582265217274e-01 +0.858586 4.298309808521e-01 4.297949120892e-01 +0.868687 4.009641818459e-01 4.009305354066e-01 +0.878788 3.716936458969e-01 3.716624556603e-01 +0.888889 3.420488459536e-01 3.420201433257e-01 +0.898990 3.120596318167e-01 3.120334456985e-01 +0.909091 2.817562000827e-01 2.817325568414e-01 +0.919192 2.511690637386e-01 2.511479871811e-01 +0.929293 2.203290214381e-01 2.203105327865e-01 +0.939394 1.892671264895e-01 1.892512443604e-01 +0.949495 1.580146555880e-01 1.580013959733e-01 +0.959596 1.266030773226e-01 1.265924535737e-01 +0.969697 9.506402049003e-02 9.505604330418e-02 +0.979798 6.342924224708e-02 6.342391965656e-02 +0.989899 3.173059613385e-02 3.172793349807e-02 diff -Nru gsl-doc-1.16/doc/examples/polyroots.out gsl-doc-2.3/doc/examples/polyroots.out --- gsl-doc-1.16/doc/examples/polyroots.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/polyroots.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -z0 = -0.809016994374947451 +0.587785252292473137 -z1 = -0.809016994374947451 -0.587785252292473137 -z2 = +0.309016994374947451 +0.951056516295153642 -z3 = +0.309016994374947451 -0.951056516295153642 -z4 = +1.000000000000000000 +0.000000000000000000 diff -Nru gsl-doc-1.16/doc/examples/polyroots.txt gsl-doc-2.3/doc/examples/polyroots.txt --- gsl-doc-1.16/doc/examples/polyroots.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/polyroots.txt 2015-11-10 19:16:44.000000000 +0000 @@ -0,0 +1,5 @@ +z0 = -0.809016994374947673 +0.587785252292473359 +z1 = -0.809016994374947673 -0.587785252292473359 +z2 = +0.309016994374947507 +0.951056516295152976 +z3 = +0.309016994374947507 -0.951056516295152976 +z4 = +0.999999999999999889 +0.000000000000000000 diff -Nru gsl-doc-1.16/doc/examples/qrng.txt gsl-doc-2.3/doc/examples/qrng.txt --- gsl-doc-1.16/doc/examples/qrng.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/qrng.txt 2015-11-10 19:17:00.000000000 +0000 @@ -0,0 +1,1024 @@ +0.50000 0.50000 +0.75000 0.25000 +0.25000 0.75000 +0.37500 0.37500 +0.87500 0.87500 +0.62500 0.12500 +0.12500 0.62500 +0.18750 0.31250 +0.68750 0.81250 +0.93750 0.06250 +0.43750 0.56250 +0.31250 0.18750 +0.81250 0.68750 +0.56250 0.43750 +0.06250 0.93750 +0.09375 0.46875 +0.59375 0.96875 +0.84375 0.21875 +0.34375 0.71875 +0.46875 0.09375 +0.96875 0.59375 +0.71875 0.34375 +0.21875 0.84375 +0.15625 0.15625 +0.65625 0.65625 +0.90625 0.40625 +0.40625 0.90625 +0.28125 0.28125 +0.78125 0.78125 +0.53125 0.03125 +0.03125 0.53125 +0.04688 0.26562 +0.54688 0.76562 +0.79688 0.01562 +0.29688 0.51562 +0.42188 0.14062 +0.92188 0.64062 +0.67188 0.39062 +0.17188 0.89062 +0.23438 0.07812 +0.73438 0.57812 +0.98438 0.32812 +0.48438 0.82812 +0.35938 0.45312 +0.85938 0.95312 +0.60938 0.20312 +0.10938 0.70312 +0.07812 0.23438 +0.57812 0.73438 +0.82812 0.48438 +0.32812 0.98438 +0.45312 0.35938 +0.95312 0.85938 +0.70312 0.10938 +0.20312 0.60938 +0.14062 0.42188 +0.64062 0.92188 +0.89062 0.17188 +0.39062 0.67188 +0.26562 0.04688 +0.76562 0.54688 +0.51562 0.29688 +0.01562 0.79688 +0.02344 0.39844 +0.52344 0.89844 +0.77344 0.14844 +0.27344 0.64844 +0.39844 0.02344 +0.89844 0.52344 +0.64844 0.27344 +0.14844 0.77344 +0.21094 0.21094 +0.71094 0.71094 +0.96094 0.46094 +0.46094 0.96094 +0.33594 0.33594 +0.83594 0.83594 +0.58594 0.08594 +0.08594 0.58594 +0.11719 0.11719 +0.61719 0.61719 +0.86719 0.36719 +0.36719 0.86719 +0.49219 0.49219 +0.99219 0.99219 +0.74219 0.24219 +0.24219 0.74219 +0.17969 0.30469 +0.67969 0.80469 +0.92969 0.05469 +0.42969 0.55469 +0.30469 0.17969 +0.80469 0.67969 +0.55469 0.42969 +0.05469 0.92969 +0.03906 0.13281 +0.53906 0.63281 +0.78906 0.38281 +0.28906 0.88281 +0.41406 0.25781 +0.91406 0.75781 +0.66406 0.00781 +0.16406 0.50781 +0.22656 0.44531 +0.72656 0.94531 +0.97656 0.19531 +0.47656 0.69531 +0.35156 0.07031 +0.85156 0.57031 +0.60156 0.32031 +0.10156 0.82031 +0.07031 0.35156 +0.57031 0.85156 +0.82031 0.10156 +0.32031 0.60156 +0.44531 0.22656 +0.94531 0.72656 +0.69531 0.47656 +0.19531 0.97656 +0.13281 0.03906 +0.63281 0.53906 +0.88281 0.28906 +0.38281 0.78906 +0.25781 0.41406 +0.75781 0.91406 +0.50781 0.16406 +0.00781 0.66406 +0.01172 0.33203 +0.51172 0.83203 +0.76172 0.08203 +0.26172 0.58203 +0.38672 0.20703 +0.88672 0.70703 +0.63672 0.45703 +0.13672 0.95703 +0.19922 0.01953 +0.69922 0.51953 +0.94922 0.26953 +0.44922 0.76953 +0.32422 0.39453 +0.82422 0.89453 +0.57422 0.14453 +0.07422 0.64453 +0.10547 0.17578 +0.60547 0.67578 +0.85547 0.42578 +0.35547 0.92578 +0.48047 0.30078 +0.98047 0.80078 +0.73047 0.05078 +0.23047 0.55078 +0.16797 0.48828 +0.66797 0.98828 +0.91797 0.23828 +0.41797 0.73828 +0.29297 0.11328 +0.79297 0.61328 +0.54297 0.36328 +0.04297 0.86328 +0.05859 0.06641 +0.55859 0.56641 +0.80859 0.31641 +0.30859 0.81641 +0.43359 0.44141 +0.93359 0.94141 +0.68359 0.19141 +0.18359 0.69141 +0.24609 0.25391 +0.74609 0.75391 +0.99609 0.00391 +0.49609 0.50391 +0.37109 0.12891 +0.87109 0.62891 +0.62109 0.37891 +0.12109 0.87891 +0.08984 0.41016 +0.58984 0.91016 +0.83984 0.16016 +0.33984 0.66016 +0.46484 0.03516 +0.96484 0.53516 +0.71484 0.28516 +0.21484 0.78516 +0.15234 0.22266 +0.65234 0.72266 +0.90234 0.47266 +0.40234 0.97266 +0.27734 0.34766 +0.77734 0.84766 +0.52734 0.09766 +0.02734 0.59766 +0.01953 0.19922 +0.51953 0.69922 +0.76953 0.44922 +0.26953 0.94922 +0.39453 0.32422 +0.89453 0.82422 +0.64453 0.07422 +0.14453 0.57422 +0.20703 0.38672 +0.70703 0.88672 +0.95703 0.13672 +0.45703 0.63672 +0.33203 0.01172 +0.83203 0.51172 +0.58203 0.26172 +0.08203 0.76172 +0.11328 0.29297 +0.61328 0.79297 +0.86328 0.04297 +0.36328 0.54297 +0.48828 0.16797 +0.98828 0.66797 +0.73828 0.41797 +0.23828 0.91797 +0.17578 0.10547 +0.67578 0.60547 +0.92578 0.35547 +0.42578 0.85547 +0.30078 0.48047 +0.80078 0.98047 +0.55078 0.23047 +0.05078 0.73047 +0.03516 0.46484 +0.53516 0.96484 +0.78516 0.21484 +0.28516 0.71484 +0.41016 0.08984 +0.91016 0.58984 +0.66016 0.33984 +0.16016 0.83984 +0.22266 0.15234 +0.72266 0.65234 +0.97266 0.40234 +0.47266 0.90234 +0.34766 0.27734 +0.84766 0.77734 +0.59766 0.02734 +0.09766 0.52734 +0.06641 0.05859 +0.56641 0.55859 +0.81641 0.30859 +0.31641 0.80859 +0.44141 0.43359 +0.94141 0.93359 +0.69141 0.18359 +0.19141 0.68359 +0.12891 0.37109 +0.62891 0.87109 +0.87891 0.12109 +0.37891 0.62109 +0.25391 0.24609 +0.75391 0.74609 +0.50391 0.49609 +0.00391 0.99609 +0.00586 0.49805 +0.50586 0.99805 +0.75586 0.24805 +0.25586 0.74805 +0.38086 0.12305 +0.88086 0.62305 +0.63086 0.37305 +0.13086 0.87305 +0.19336 0.18555 +0.69336 0.68555 +0.94336 0.43555 +0.44336 0.93555 +0.31836 0.31055 +0.81836 0.81055 +0.56836 0.06055 +0.06836 0.56055 +0.09961 0.02930 +0.59961 0.52930 +0.84961 0.27930 +0.34961 0.77930 +0.47461 0.40430 +0.97461 0.90430 +0.72461 0.15430 +0.22461 0.65430 +0.16211 0.34180 +0.66211 0.84180 +0.91211 0.09180 +0.41211 0.59180 +0.28711 0.21680 +0.78711 0.71680 +0.53711 0.46680 +0.03711 0.96680 +0.05273 0.23242 +0.55273 0.73242 +0.80273 0.48242 +0.30273 0.98242 +0.42773 0.35742 +0.92773 0.85742 +0.67773 0.10742 +0.17773 0.60742 +0.24023 0.41992 +0.74023 0.91992 +0.99023 0.16992 +0.49023 0.66992 +0.36523 0.04492 +0.86523 0.54492 +0.61523 0.29492 +0.11523 0.79492 +0.08398 0.26367 +0.58398 0.76367 +0.83398 0.01367 +0.33398 0.51367 +0.45898 0.13867 +0.95898 0.63867 +0.70898 0.38867 +0.20898 0.88867 +0.14648 0.07617 +0.64648 0.57617 +0.89648 0.32617 +0.39648 0.82617 +0.27148 0.45117 +0.77148 0.95117 +0.52148 0.20117 +0.02148 0.70117 +0.02930 0.09961 +0.52930 0.59961 +0.77930 0.34961 +0.27930 0.84961 +0.40430 0.47461 +0.90430 0.97461 +0.65430 0.22461 +0.15430 0.72461 +0.21680 0.28711 +0.71680 0.78711 +0.96680 0.03711 +0.46680 0.53711 +0.34180 0.16211 +0.84180 0.66211 +0.59180 0.41211 +0.09180 0.91211 +0.12305 0.38086 +0.62305 0.88086 +0.87305 0.13086 +0.37305 0.63086 +0.49805 0.00586 +0.99805 0.50586 +0.74805 0.25586 +0.24805 0.75586 +0.18555 0.19336 +0.68555 0.69336 +0.93555 0.44336 +0.43555 0.94336 +0.31055 0.31836 +0.81055 0.81836 +0.56055 0.06836 +0.06055 0.56836 +0.04492 0.36523 +0.54492 0.86523 +0.79492 0.11523 +0.29492 0.61523 +0.41992 0.24023 +0.91992 0.74023 +0.66992 0.49023 +0.16992 0.99023 +0.23242 0.05273 +0.73242 0.55273 +0.98242 0.30273 +0.48242 0.80273 +0.35742 0.42773 +0.85742 0.92773 +0.60742 0.17773 +0.10742 0.67773 +0.07617 0.14648 +0.57617 0.64648 +0.82617 0.39648 +0.32617 0.89648 +0.45117 0.27148 +0.95117 0.77148 +0.70117 0.02148 +0.20117 0.52148 +0.13867 0.45898 +0.63867 0.95898 +0.88867 0.20898 +0.38867 0.70898 +0.26367 0.08398 +0.76367 0.58398 +0.51367 0.33398 +0.01367 0.83398 +0.00977 0.16602 +0.50977 0.66602 +0.75977 0.41602 +0.25977 0.91602 +0.38477 0.29102 +0.88477 0.79102 +0.63477 0.04102 +0.13477 0.54102 +0.19727 0.47852 +0.69727 0.97852 +0.94727 0.22852 +0.44727 0.72852 +0.32227 0.10352 +0.82227 0.60352 +0.57227 0.35352 +0.07227 0.85352 +0.10352 0.32227 +0.60352 0.82227 +0.85352 0.07227 +0.35352 0.57227 +0.47852 0.19727 +0.97852 0.69727 +0.72852 0.44727 +0.22852 0.94727 +0.16602 0.00977 +0.66602 0.50977 +0.91602 0.25977 +0.41602 0.75977 +0.29102 0.38477 +0.79102 0.88477 +0.54102 0.13477 +0.04102 0.63477 +0.05664 0.43164 +0.55664 0.93164 +0.80664 0.18164 +0.30664 0.68164 +0.43164 0.05664 +0.93164 0.55664 +0.68164 0.30664 +0.18164 0.80664 +0.24414 0.24414 +0.74414 0.74414 +0.99414 0.49414 +0.49414 0.99414 +0.36914 0.36914 +0.86914 0.86914 +0.61914 0.11914 +0.11914 0.61914 +0.08789 0.08789 +0.58789 0.58789 +0.83789 0.33789 +0.33789 0.83789 +0.46289 0.46289 +0.96289 0.96289 +0.71289 0.21289 +0.21289 0.71289 +0.15039 0.27539 +0.65039 0.77539 +0.90039 0.02539 +0.40039 0.52539 +0.27539 0.15039 +0.77539 0.65039 +0.52539 0.40039 +0.02539 0.90039 +0.01758 0.29883 +0.51758 0.79883 +0.76758 0.04883 +0.26758 0.54883 +0.39258 0.17383 +0.89258 0.67383 +0.64258 0.42383 +0.14258 0.92383 +0.20508 0.11133 +0.70508 0.61133 +0.95508 0.36133 +0.45508 0.86133 +0.33008 0.48633 +0.83008 0.98633 +0.58008 0.23633 +0.08008 0.73633 +0.11133 0.20508 +0.61133 0.70508 +0.86133 0.45508 +0.36133 0.95508 +0.48633 0.33008 +0.98633 0.83008 +0.73633 0.08008 +0.23633 0.58008 +0.17383 0.39258 +0.67383 0.89258 +0.92383 0.14258 +0.42383 0.64258 +0.29883 0.01758 +0.79883 0.51758 +0.54883 0.26758 +0.04883 0.76758 +0.03320 0.03320 +0.53320 0.53320 +0.78320 0.28320 +0.28320 0.78320 +0.40820 0.40820 +0.90820 0.90820 +0.65820 0.15820 +0.15820 0.65820 +0.22070 0.34570 +0.72070 0.84570 +0.97070 0.09570 +0.47070 0.59570 +0.34570 0.22070 +0.84570 0.72070 +0.59570 0.47070 +0.09570 0.97070 +0.06445 0.43945 +0.56445 0.93945 +0.81445 0.18945 +0.31445 0.68945 +0.43945 0.06445 +0.93945 0.56445 +0.68945 0.31445 +0.18945 0.81445 +0.12695 0.12695 +0.62695 0.62695 +0.87695 0.37695 +0.37695 0.87695 +0.25195 0.25195 +0.75195 0.75195 +0.50195 0.00195 +0.00195 0.50195 +0.00293 0.25098 +0.50293 0.75098 +0.75293 0.00098 +0.25293 0.50098 +0.37793 0.12598 +0.87793 0.62598 +0.62793 0.37598 +0.12793 0.87598 +0.19043 0.06348 +0.69043 0.56348 +0.94043 0.31348 +0.44043 0.81348 +0.31543 0.43848 +0.81543 0.93848 +0.56543 0.18848 +0.06543 0.68848 +0.09668 0.21973 +0.59668 0.71973 +0.84668 0.46973 +0.34668 0.96973 +0.47168 0.34473 +0.97168 0.84473 +0.72168 0.09473 +0.22168 0.59473 +0.15918 0.40723 +0.65918 0.90723 +0.90918 0.15723 +0.40918 0.65723 +0.28418 0.03223 +0.78418 0.53223 +0.53418 0.28223 +0.03418 0.78223 +0.04980 0.01660 +0.54980 0.51660 +0.79980 0.26660 +0.29980 0.76660 +0.42480 0.39160 +0.92480 0.89160 +0.67480 0.14160 +0.17480 0.64160 +0.23730 0.32910 +0.73730 0.82910 +0.98730 0.07910 +0.48730 0.57910 +0.36230 0.20410 +0.86230 0.70410 +0.61230 0.45410 +0.11230 0.95410 +0.08105 0.48535 +0.58105 0.98535 +0.83105 0.23535 +0.33105 0.73535 +0.45605 0.11035 +0.95605 0.61035 +0.70605 0.36035 +0.20605 0.86035 +0.14355 0.17285 +0.64355 0.67285 +0.89355 0.42285 +0.39355 0.92285 +0.26855 0.29785 +0.76855 0.79785 +0.51855 0.04785 +0.01855 0.54785 +0.02637 0.14941 +0.52637 0.64941 +0.77637 0.39941 +0.27637 0.89941 +0.40137 0.27441 +0.90137 0.77441 +0.65137 0.02441 +0.15137 0.52441 +0.21387 0.46191 +0.71387 0.96191 +0.96387 0.21191 +0.46387 0.71191 +0.33887 0.08691 +0.83887 0.58691 +0.58887 0.33691 +0.08887 0.83691 +0.12012 0.36816 +0.62012 0.86816 +0.87012 0.11816 +0.37012 0.61816 +0.49512 0.24316 +0.99512 0.74316 +0.74512 0.49316 +0.24512 0.99316 +0.18262 0.05566 +0.68262 0.55566 +0.93262 0.30566 +0.43262 0.80566 +0.30762 0.43066 +0.80762 0.93066 +0.55762 0.18066 +0.05762 0.68066 +0.04199 0.38379 +0.54199 0.88379 +0.79199 0.13379 +0.29199 0.63379 +0.41699 0.00879 +0.91699 0.50879 +0.66699 0.25879 +0.16699 0.75879 +0.22949 0.19629 +0.72949 0.69629 +0.97949 0.44629 +0.47949 0.94629 +0.35449 0.32129 +0.85449 0.82129 +0.60449 0.07129 +0.10449 0.57129 +0.07324 0.10254 +0.57324 0.60254 +0.82324 0.35254 +0.32324 0.85254 +0.44824 0.47754 +0.94824 0.97754 +0.69824 0.22754 +0.19824 0.72754 +0.13574 0.29004 +0.63574 0.79004 +0.88574 0.04004 +0.38574 0.54004 +0.26074 0.16504 +0.76074 0.66504 +0.51074 0.41504 +0.01074 0.91504 +0.01465 0.08301 +0.51465 0.58301 +0.76465 0.33301 +0.26465 0.83301 +0.38965 0.45801 +0.88965 0.95801 +0.63965 0.20801 +0.13965 0.70801 +0.20215 0.27051 +0.70215 0.77051 +0.95215 0.02051 +0.45215 0.52051 +0.32715 0.14551 +0.82715 0.64551 +0.57715 0.39551 +0.07715 0.89551 +0.10840 0.42676 +0.60840 0.92676 +0.85840 0.17676 +0.35840 0.67676 +0.48340 0.05176 +0.98340 0.55176 +0.73340 0.30176 +0.23340 0.80176 +0.17090 0.23926 +0.67090 0.73926 +0.92090 0.48926 +0.42090 0.98926 +0.29590 0.36426 +0.79590 0.86426 +0.54590 0.11426 +0.04590 0.61426 +0.06152 0.31738 +0.56152 0.81738 +0.81152 0.06738 +0.31152 0.56738 +0.43652 0.19238 +0.93652 0.69238 +0.68652 0.44238 +0.18652 0.94238 +0.24902 0.00488 +0.74902 0.50488 +0.99902 0.25488 +0.49902 0.75488 +0.37402 0.37988 +0.87402 0.87988 +0.62402 0.12988 +0.12402 0.62988 +0.09277 0.16113 +0.59277 0.66113 +0.84277 0.41113 +0.34277 0.91113 +0.46777 0.28613 +0.96777 0.78613 +0.71777 0.03613 +0.21777 0.53613 +0.15527 0.47363 +0.65527 0.97363 +0.90527 0.22363 +0.40527 0.72363 +0.28027 0.09863 +0.78027 0.59863 +0.53027 0.34863 +0.03027 0.84863 +0.02246 0.45020 +0.52246 0.95020 +0.77246 0.20020 +0.27246 0.70020 +0.39746 0.07520 +0.89746 0.57520 +0.64746 0.32520 +0.14746 0.82520 +0.20996 0.13770 +0.70996 0.63770 +0.95996 0.38770 +0.45996 0.88770 +0.33496 0.26270 +0.83496 0.76270 +0.58496 0.01270 +0.08496 0.51270 +0.11621 0.04395 +0.61621 0.54395 +0.86621 0.29395 +0.36621 0.79395 +0.49121 0.41895 +0.99121 0.91895 +0.74121 0.16895 +0.24121 0.66895 +0.17871 0.35645 +0.67871 0.85645 +0.92871 0.10645 +0.42871 0.60645 +0.30371 0.23145 +0.80371 0.73145 +0.55371 0.48145 +0.05371 0.98145 +0.03809 0.21582 +0.53809 0.71582 +0.78809 0.46582 +0.28809 0.96582 +0.41309 0.34082 +0.91309 0.84082 +0.66309 0.09082 +0.16309 0.59082 +0.22559 0.40332 +0.72559 0.90332 +0.97559 0.15332 +0.47559 0.65332 +0.35059 0.02832 +0.85059 0.52832 +0.60059 0.27832 +0.10059 0.77832 +0.06934 0.30957 +0.56934 0.80957 +0.81934 0.05957 +0.31934 0.55957 +0.44434 0.18457 +0.94434 0.68457 +0.69434 0.43457 +0.19434 0.93457 +0.13184 0.12207 +0.63184 0.62207 +0.88184 0.37207 +0.38184 0.87207 +0.25684 0.49707 +0.75684 0.99707 +0.50684 0.24707 +0.00684 0.74707 +0.00488 0.24902 +0.50488 0.74902 +0.75488 0.49902 +0.25488 0.99902 +0.37988 0.37402 +0.87988 0.87402 +0.62988 0.12402 +0.12988 0.62402 +0.19238 0.43652 +0.69238 0.93652 +0.94238 0.18652 +0.44238 0.68652 +0.31738 0.06152 +0.81738 0.56152 +0.56738 0.31152 +0.06738 0.81152 +0.09863 0.28027 +0.59863 0.78027 +0.84863 0.03027 +0.34863 0.53027 +0.47363 0.15527 +0.97363 0.65527 +0.72363 0.40527 +0.22363 0.90527 +0.16113 0.09277 +0.66113 0.59277 +0.91113 0.34277 +0.41113 0.84277 +0.28613 0.46777 +0.78613 0.96777 +0.53613 0.21777 +0.03613 0.71777 +0.05176 0.48340 +0.55176 0.98340 +0.80176 0.23340 +0.30176 0.73340 +0.42676 0.10840 +0.92676 0.60840 +0.67676 0.35840 +0.17676 0.85840 +0.23926 0.17090 +0.73926 0.67090 +0.98926 0.42090 +0.48926 0.92090 +0.36426 0.29590 +0.86426 0.79590 +0.61426 0.04590 +0.11426 0.54590 +0.08301 0.01465 +0.58301 0.51465 +0.83301 0.26465 +0.33301 0.76465 +0.45801 0.38965 +0.95801 0.88965 +0.70801 0.13965 +0.20801 0.63965 +0.14551 0.32715 +0.64551 0.82715 +0.89551 0.07715 +0.39551 0.57715 +0.27051 0.20215 +0.77051 0.70215 +0.52051 0.45215 +0.02051 0.95215 +0.02832 0.35059 +0.52832 0.85059 +0.77832 0.10059 +0.27832 0.60059 +0.40332 0.22559 +0.90332 0.72559 +0.65332 0.47559 +0.15332 0.97559 +0.21582 0.03809 +0.71582 0.53809 +0.96582 0.28809 +0.46582 0.78809 +0.34082 0.41309 +0.84082 0.91309 +0.59082 0.16309 +0.09082 0.66309 +0.12207 0.13184 +0.62207 0.63184 +0.87207 0.38184 +0.37207 0.88184 +0.49707 0.25684 +0.99707 0.75684 +0.74707 0.00684 +0.24707 0.50684 +0.18457 0.44434 +0.68457 0.94434 +0.93457 0.19434 +0.43457 0.69434 +0.30957 0.06934 +0.80957 0.56934 +0.55957 0.31934 +0.05957 0.81934 +0.04395 0.11621 +0.54395 0.61621 +0.79395 0.36621 +0.29395 0.86621 +0.41895 0.49121 +0.91895 0.99121 +0.66895 0.24121 +0.16895 0.74121 +0.23145 0.30371 +0.73145 0.80371 +0.98145 0.05371 +0.48145 0.55371 +0.35645 0.17871 +0.85645 0.67871 +0.60645 0.42871 +0.10645 0.92871 +0.07520 0.39746 +0.57520 0.89746 +0.82520 0.14746 +0.32520 0.64746 +0.45020 0.02246 +0.95020 0.52246 +0.70020 0.27246 +0.20020 0.77246 +0.13770 0.20996 +0.63770 0.70996 +0.88770 0.45996 +0.38770 0.95996 +0.26270 0.33496 +0.76270 0.83496 +0.51270 0.08496 +0.01270 0.58496 +0.00879 0.41699 +0.50879 0.91699 +0.75879 0.16699 +0.25879 0.66699 +0.38379 0.04199 +0.88379 0.54199 +0.63379 0.29199 +0.13379 0.79199 +0.19629 0.22949 +0.69629 0.72949 +0.94629 0.47949 +0.44629 0.97949 +0.32129 0.35449 +0.82129 0.85449 +0.57129 0.10449 +0.07129 0.60449 +0.10254 0.07324 +0.60254 0.57324 +0.85254 0.32324 +0.35254 0.82324 +0.47754 0.44824 +0.97754 0.94824 +0.72754 0.19824 +0.22754 0.69824 +0.16504 0.26074 +0.66504 0.76074 +0.91504 0.01074 +0.41504 0.51074 +0.29004 0.13574 +0.79004 0.63574 +0.54004 0.38574 +0.04004 0.88574 +0.05566 0.18262 +0.55566 0.68262 +0.80566 0.43262 +0.30566 0.93262 +0.43066 0.30762 +0.93066 0.80762 +0.68066 0.05762 +0.18066 0.55762 +0.24316 0.49512 +0.74316 0.99512 +0.99316 0.24512 +0.49316 0.74512 +0.36816 0.12012 +0.86816 0.62012 +0.61816 0.37012 +0.11816 0.87012 +0.08691 0.33887 +0.58691 0.83887 +0.83691 0.08887 +0.33691 0.58887 +0.46191 0.21387 +0.96191 0.71387 +0.71191 0.46387 +0.21191 0.96387 +0.14941 0.02637 +0.64941 0.52637 +0.89941 0.27637 +0.39941 0.77637 +0.27441 0.40137 +0.77441 0.90137 +0.52441 0.15137 +0.02441 0.65137 +0.01660 0.04980 +0.51660 0.54980 +0.76660 0.29980 +0.26660 0.79980 +0.39160 0.42480 +0.89160 0.92480 +0.64160 0.17480 +0.14160 0.67480 +0.20410 0.36230 +0.70410 0.86230 +0.95410 0.11230 +0.45410 0.61230 +0.32910 0.23730 +0.82910 0.73730 +0.57910 0.48730 +0.07910 0.98730 +0.11035 0.45605 +0.61035 0.95605 +0.86035 0.20605 +0.36035 0.70605 +0.48535 0.08105 +0.98535 0.58105 +0.73535 0.33105 +0.23535 0.83105 +0.17285 0.14355 +0.67285 0.64355 +0.92285 0.39355 +0.42285 0.89355 +0.29785 0.26855 +0.79785 0.76855 +0.54785 0.01855 +0.04785 0.51855 +0.03223 0.28418 +0.53223 0.78418 +0.78223 0.03418 +0.28223 0.53418 +0.40723 0.15918 +0.90723 0.65918 +0.65723 0.40918 +0.15723 0.90918 +0.21973 0.09668 +0.71973 0.59668 +0.96973 0.34668 +0.46973 0.84668 +0.34473 0.47168 +0.84473 0.97168 +0.59473 0.22168 +0.09473 0.72168 +0.06348 0.19043 +0.56348 0.69043 +0.81348 0.44043 +0.31348 0.94043 +0.43848 0.31543 +0.93848 0.81543 +0.68848 0.06543 +0.18848 0.56543 +0.12598 0.37793 +0.62598 0.87793 +0.87598 0.12793 +0.37598 0.62793 +0.25098 0.00293 +0.75098 0.50293 +0.50098 0.25293 +0.00098 0.75293 +0.00146 0.37646 diff -Nru gsl-doc-1.16/doc/examples/randpoisson.2.out gsl-doc-2.3/doc/examples/randpoisson.2.out --- gsl-doc-1.16/doc/examples/randpoisson.2.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/randpoisson.2.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -GSL_RNG_SEED=123 - 4 5 6 3 3 1 4 2 5 5 diff -Nru gsl-doc-1.16/doc/examples/randpoisson2.txt gsl-doc-2.3/doc/examples/randpoisson2.txt --- gsl-doc-1.16/doc/examples/randpoisson2.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/randpoisson2.txt 2015-11-10 19:21:27.000000000 +0000 @@ -0,0 +1 @@ + 4 5 6 3 3 1 4 2 5 5 diff -Nru gsl-doc-1.16/doc/examples/randpoisson.out gsl-doc-2.3/doc/examples/randpoisson.out --- gsl-doc-1.16/doc/examples/randpoisson.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/randpoisson.out 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ - 2 5 5 2 1 0 3 4 1 1 diff -Nru gsl-doc-1.16/doc/examples/randpoisson.txt gsl-doc-2.3/doc/examples/randpoisson.txt --- gsl-doc-1.16/doc/examples/randpoisson.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/randpoisson.txt 2015-11-09 05:23:40.000000000 +0000 @@ -0,0 +1 @@ + 2 5 5 2 1 0 3 4 1 1 diff -Nru gsl-doc-1.16/doc/examples/randwalk.txt gsl-doc-2.3/doc/examples/randwalk.txt --- gsl-doc-1.16/doc/examples/randwalk.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/randwalk.txt 2015-11-10 19:24:35.000000000 +0000 @@ -0,0 +1,11 @@ +0 0 +-0.617746 -0.786378 +0.376003 -0.674734 +-0.569808 -0.350015 +-0.112542 0.539315 +-0.575798 -0.34691 +-1.56878 -0.465204 +-2.47057 -0.0330451 +-2.50057 0.966505 +-1.72376 1.59625 +-2.64634 1.98207 diff -Nru gsl-doc-1.16/doc/examples/rng.out gsl-doc-2.3/doc/examples/rng.out --- gsl-doc-1.16/doc/examples/rng.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/rng.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -generator type: mt19937 -seed = 0 -first value = 4293858116 diff -Nru gsl-doc-1.16/doc/examples/rng.txt gsl-doc-2.3/doc/examples/rng.txt --- gsl-doc-1.16/doc/examples/rng.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/rng.txt 2015-11-09 05:23:40.000000000 +0000 @@ -0,0 +1,3 @@ +generator type: mt19937 +seed = 0 +first value = 4293858116 diff -Nru gsl-doc-1.16/doc/examples/rngunif.2.out gsl-doc-2.3/doc/examples/rngunif.2.out --- gsl-doc-1.16/doc/examples/rngunif.2.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/rngunif.2.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -GSL_RNG_TYPE=mrg -GSL_RNG_SEED=123 -0.33050 -0.86631 -0.32982 -0.67620 -0.53391 -0.06457 -0.16847 -0.70229 -0.04371 -0.86374 diff -Nru gsl-doc-1.16/doc/examples/rngunif2.txt gsl-doc-2.3/doc/examples/rngunif2.txt --- gsl-doc-1.16/doc/examples/rngunif2.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/rngunif2.txt 2015-11-10 19:28:02.000000000 +0000 @@ -0,0 +1,10 @@ +0.33050 +0.86631 +0.32982 +0.67620 +0.53391 +0.06457 +0.16847 +0.70229 +0.04371 +0.86374 diff -Nru gsl-doc-1.16/doc/examples/rngunif.out gsl-doc-2.3/doc/examples/rngunif.out --- gsl-doc-1.16/doc/examples/rngunif.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/rngunif.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -0.99974 -0.16291 -0.28262 -0.94720 -0.23166 -0.48497 -0.95748 -0.74431 -0.54004 -0.73995 diff -Nru gsl-doc-1.16/doc/examples/rngunif.txt gsl-doc-2.3/doc/examples/rngunif.txt --- gsl-doc-1.16/doc/examples/rngunif.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/rngunif.txt 2015-11-09 05:23:40.000000000 +0000 @@ -0,0 +1,10 @@ +0.99974 +0.16291 +0.28262 +0.94720 +0.23166 +0.48497 +0.95748 +0.74431 +0.54004 +0.73995 diff -Nru gsl-doc-1.16/doc/examples/robfit.c gsl-doc-2.3/doc/examples/robfit.c --- gsl-doc-1.16/doc/examples/robfit.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/robfit.c 2015-11-09 19:14:42.000000000 +0000 @@ -20,7 +20,7 @@ int main (int argc, char **argv) { - int i; + size_t i; size_t n; const size_t p = 2; /* linear fit */ gsl_matrix *X, *cov; diff -Nru gsl-doc-1.16/doc/examples/robfit.txt gsl-doc-2.3/doc/examples/robfit.txt --- gsl-doc-1.16/doc/examples/robfit.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/robfit.txt 2015-11-10 19:30:24.000000000 +0000 @@ -0,0 +1,104 @@ +-5 -2.37026 -2.87902 -2.10098 +-4.89899 -3.06063 -2.73364 -1.98182 +-4.79798 -2.79445 -2.58825 -1.86266 +-4.69697 -1.9834 -2.44287 -1.7435 +-4.59596 -2.55248 -2.29749 -1.62435 +-4.49495 -2.1527 -2.1521 -1.50519 +-4.39394 -1.53374 -2.00672 -1.38603 +-4.29293 -1.60044 -1.86134 -1.26687 +-4.19192 -1.65824 -1.71596 -1.14772 +-4.09091 -1.31187 -1.57057 -1.02856 +-3.9899 -1.14541 -1.42519 -0.909399 +-3.88889 -1.10025 -1.27981 -0.790242 +-3.78788 -1.29679 -1.13443 -0.671084 +-3.68687 -0.661557 -0.989042 -0.551926 +-3.58586 -0.799823 -0.843659 -0.432768 +-3.48485 -1.00446 -0.698277 -0.31361 +-3.38384 -0.551036 -0.552894 -0.194452 +-3.28283 -0.487787 -0.407511 -0.0752942 +-3.18182 -0.511969 -0.262128 0.0438637 +-3.08081 -0.373981 -0.116746 0.163022 +-2.9798 -0.410372 0.0286373 0.282179 +-2.87879 0.0392968 0.17402 0.401337 +-2.77778 0.0463711 0.319403 0.520495 +-2.67677 0.942404 0.464786 0.639653 +-2.57576 0.725083 0.610168 0.758811 +-2.47475 1.18992 0.755551 0.877969 +-2.37374 1.10364 0.900934 0.997127 +-2.27273 1.08316 1.04632 1.11628 +-2.17172 1.29164 1.1917 1.23544 +-2.07071 1.05976 1.33708 1.3546 +-1.9697 1.32046 1.48247 1.47376 +-1.86869 1.28781 1.62785 1.59292 +-1.76768 1.37979 1.77323 1.71207 +-1.66667 2.11146 1.91861 1.83123 +-1.56566 2.33522 2.064 1.95039 +-1.46465 2.39339 2.20938 2.06955 +-1.36364 2.61661 2.35476 2.18871 +-1.26263 2.14877 2.50014 2.30786 +-1.16162 2.89492 2.64553 2.42702 +-1.06061 2.44993 2.79091 2.54618 +-0.959596 2.61783 2.93629 2.66534 +-0.858586 3.13745 3.08168 2.7845 +-0.757576 2.9893 3.22706 2.90365 +-0.656566 3.21689 3.37244 3.02281 +-0.555556 3.15762 3.51782 3.14197 +-0.454545 3.34903 3.66321 3.26113 +-0.353535 3.91475 3.80859 3.38028 +-0.252525 3.59616 3.95397 3.49944 +-0.151515 3.95244 4.09936 3.6186 +-0.0505051 4.69839 4.24474 3.73776 +0.0505051 4.18035 4.39012 3.85692 +0.151515 4.53154 4.5355 3.97607 +0.252525 4.38689 4.68089 4.09523 +0.353535 4.79302 4.82627 4.21439 +0.454545 5.22604 4.97165 4.33355 +0.555556 4.85623 5.11704 4.45271 +0.656566 5.27284 5.26242 4.57186 +0.757576 5.02382 5.4078 4.69102 +0.858586 5.43625 5.55318 4.81018 +0.959596 5.7776 5.69857 4.92934 +1.06061 5.60029 5.84395 5.0485 +1.16162 6.07538 5.98933 5.16765 +1.26263 6.4516 6.13471 5.28681 +1.36364 6.22326 6.2801 5.40597 +1.46465 6.16455 6.42548 5.52513 +1.56566 6.61031 6.57086 5.64428 +1.66667 6.9245 6.71625 5.76344 +1.76768 7.12074 6.86163 5.8826 +1.86869 7.28779 7.00701 6.00176 +1.9697 7.2146 7.15239 6.12092 +2.07071 6.97263 7.29778 6.24007 +2.17172 7.36772 7.44316 6.35923 +2.27273 7.27067 7.58854 6.47839 +2.37374 7.75846 7.73393 6.59755 +2.47475 7.94306 7.87931 6.71671 +2.57576 8.03409 8.02469 6.83586 +2.67677 8.53885 8.17007 6.95502 +2.77778 8.53239 8.31546 7.07418 +2.87879 9.03468 8.46084 7.19334 +2.9798 8.57114 8.60622 7.31249 +3.08081 9.17798 8.7516 7.43165 +3.18182 8.63444 8.89699 7.55081 +3.28283 9.38419 9.04237 7.66997 +3.38384 9.61631 9.18775 7.78913 +3.48485 9.32413 9.33314 7.90828 +3.58586 9.70145 9.47852 8.02744 +3.68687 9.57266 9.6239 8.1466 +3.78788 9.41859 9.76928 8.26576 +3.88889 10.132 9.91467 8.38492 +3.9899 10.2327 10.0601 8.50407 +4.09091 10.3107 10.2054 8.62323 +4.19192 10.6821 10.3508 8.74239 +4.29293 10.2493 10.4962 8.86155 +4.39394 10.2935 10.6416 8.98071 +4.49495 10.7085 10.787 9.09986 +4.59596 10.6658 10.9323 9.21902 +4.69697 10.9327 11.0777 9.33818 +4.7 -8.3 11.0821 9.34175 +3.5 -6.7 9.35494 7.92616 +4.1 -6 10.2185 8.63396 +# best fit: Y = 4.31743 + 1.43929 X +# covariance matrix: +# [ +4.01177e-03, +1.15955e-05 +# +1.15955e-05, +4.83755e-04 diff -Nru gsl-doc-1.16/doc/examples/rootnewt.txt gsl-doc-2.3/doc/examples/rootnewt.txt --- gsl-doc-1.16/doc/examples/rootnewt.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/rootnewt.txt 2015-11-10 19:31:24.000000000 +0000 @@ -0,0 +1,7 @@ +using newton method +iter root err err(est) + 1 3.0000000 +0.7639320 -2.0000000 + 2 2.3333333 +0.0972654 -0.6666667 + 3 2.2380952 +0.0020273 -0.0952381 +Converged: + 4 2.2360689 +0.0000009 -0.0020263 diff -Nru gsl-doc-1.16/doc/examples/roots.txt gsl-doc-2.3/doc/examples/roots.txt --- gsl-doc-1.16/doc/examples/roots.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/roots.txt 2015-11-10 19:32:06.000000000 +0000 @@ -0,0 +1,9 @@ +using brent method + iter [ lower, upper] root err err(est) + 1 [1.0000000, 5.0000000] 1.0000000 -1.2360680 4.0000000 + 2 [1.0000000, 3.0000000] 3.0000000 +0.7639320 2.0000000 + 3 [2.0000000, 3.0000000] 2.0000000 -0.2360680 1.0000000 + 4 [2.2000000, 3.0000000] 2.2000000 -0.0360680 0.8000000 + 5 [2.2000000, 2.2366300] 2.2366300 +0.0005621 0.0366300 +Converged: + 6 [2.2360634, 2.2366300] 2.2360634 -0.0000046 0.0005666 diff -Nru gsl-doc-1.16/doc/examples/rquantile.c gsl-doc-2.3/doc/examples/rquantile.c --- gsl-doc-1.16/doc/examples/rquantile.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/rquantile.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,60 @@ +#include +#include +#include +#include +#include +#include +#include + +int +main(void) +{ + const size_t N = 10000; + double *data = malloc(N * sizeof(double)); + gsl_rstat_quantile_workspace *work_25 = gsl_rstat_quantile_alloc(0.25); + gsl_rstat_quantile_workspace *work_50 = gsl_rstat_quantile_alloc(0.5); + gsl_rstat_quantile_workspace *work_75 = gsl_rstat_quantile_alloc(0.75); + gsl_rng *r = gsl_rng_alloc(gsl_rng_default); + double exact_p25, exact_p50, exact_p75; + double val_p25, val_p50, val_p75; + size_t i; + + /* add data to quantile accumulators; also store data for exact + * comparisons */ + for (i = 0; i < N; ++i) + { + data[i] = gsl_ran_rayleigh(r, 1.0); + gsl_rstat_quantile_add(data[i], work_25); + gsl_rstat_quantile_add(data[i], work_50); + gsl_rstat_quantile_add(data[i], work_75); + } + + /* exact values */ + gsl_sort(data, 1, N); + exact_p25 = gsl_stats_quantile_from_sorted_data(data, 1, N, 0.25); + exact_p50 = gsl_stats_quantile_from_sorted_data(data, 1, N, 0.5); + exact_p75 = gsl_stats_quantile_from_sorted_data(data, 1, N, 0.75); + + /* estimated values */ + val_p25 = gsl_rstat_quantile_get(work_25); + val_p50 = gsl_rstat_quantile_get(work_50); + val_p75 = gsl_rstat_quantile_get(work_75); + + printf ("The dataset is %g, %g, %g, %g, %g, ...\n", + data[0], data[1], data[2], data[3], data[4]); + + printf ("0.25 quartile: exact = %.5f, estimated = %.5f, error = %.6e\n", + exact_p25, val_p25, (val_p25 - exact_p25) / exact_p25); + printf ("0.50 quartile: exact = %.5f, estimated = %.5f, error = %.6e\n", + exact_p50, val_p50, (val_p50 - exact_p50) / exact_p50); + printf ("0.75 quartile: exact = %.5f, estimated = %.5f, error = %.6e\n", + exact_p75, val_p75, (val_p75 - exact_p75) / exact_p75); + + gsl_rstat_quantile_free(work_25); + gsl_rstat_quantile_free(work_50); + gsl_rstat_quantile_free(work_75); + gsl_rng_free(r); + free(data); + + return 0; +} diff -Nru gsl-doc-1.16/doc/examples/rquantile.txt gsl-doc-2.3/doc/examples/rquantile.txt --- gsl-doc-1.16/doc/examples/rquantile.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/rquantile.txt 2015-11-09 05:23:40.000000000 +0000 @@ -0,0 +1,4 @@ +The dataset is 0.00645272, 0.0074002, 0.0120706, 0.0207256, 0.0227282, ... +0.25 quartile: exact = 0.75766, estimated = 0.75580, error = -2.450209e-03 +0.50 quartile: exact = 1.17508, estimated = 1.17438, error = -5.995912e-04 +0.75 quartile: exact = 1.65347, estimated = 1.65696, error = 2.110571e-03 diff -Nru gsl-doc-1.16/doc/examples/rstat.c gsl-doc-2.3/doc/examples/rstat.c --- gsl-doc-1.16/doc/examples/rstat.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/rstat.c 2016-10-03 09:08:46.000000000 +0000 @@ -0,0 +1,51 @@ +#include +#include + +int +main(void) +{ + double data[5] = {17.2, 18.1, 16.5, 18.3, 12.6}; + double mean, variance, largest, smallest, sd, + rms, sd_mean, median, skew, kurtosis; + gsl_rstat_workspace *rstat_p = gsl_rstat_alloc(); + size_t i, n; + + /* add data to rstat accumulator */ + for (i = 0; i < 5; ++i) + gsl_rstat_add(data[i], rstat_p); + + mean = gsl_rstat_mean(rstat_p); + variance = gsl_rstat_variance(rstat_p); + largest = gsl_rstat_max(rstat_p); + smallest = gsl_rstat_min(rstat_p); + median = gsl_rstat_median(rstat_p); + sd = gsl_rstat_sd(rstat_p); + sd_mean = gsl_rstat_sd_mean(rstat_p); + skew = gsl_rstat_skew(rstat_p); + rms = gsl_rstat_rms(rstat_p); + kurtosis = gsl_rstat_kurtosis(rstat_p); + n = gsl_rstat_n(rstat_p); + + printf ("The dataset is %g, %g, %g, %g, %g\n", + data[0], data[1], data[2], data[3], data[4]); + + printf ("The sample mean is %g\n", mean); + printf ("The estimated variance is %g\n", variance); + printf ("The largest value is %g\n", largest); + printf ("The smallest value is %g\n", smallest); + printf( "The median is %g\n", median); + printf( "The standard deviation is %g\n", sd); + printf( "The root mean square is %g\n", rms); + printf( "The standard devation of the mean is %g\n", sd_mean); + printf( "The skew is %g\n", skew); + printf( "The kurtosis %g\n", kurtosis); + printf( "There are %zu items in the accumulator\n", n); + + gsl_rstat_reset(rstat_p); + n = gsl_rstat_n(rstat_p); + printf( "There are %zu items in the accumulator\n", n); + + gsl_rstat_free(rstat_p); + + return 0; +} diff -Nru gsl-doc-1.16/doc/examples/rstat.txt gsl-doc-2.3/doc/examples/rstat.txt --- gsl-doc-1.16/doc/examples/rstat.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/rstat.txt 2016-10-03 09:08:46.000000000 +0000 @@ -0,0 +1,13 @@ +The dataset is 17.2, 18.1, 16.5, 18.3, 12.6 +The sample mean is 16.54 +The estimated variance is 5.373 +The largest value is 18.3 +The smallest value is 12.6 +The median is 16.5 +The standard deviation is 2.31797 +The root mean square is 16.6694 +The standard devation of the mean is 1.03663 +The skew is -0.829058 +The kurtosis -1.2217 +There are 5 items in the accumulator +There are 0 items in the accumulator diff -Nru gsl-doc-1.16/doc/examples/siman.c gsl-doc-2.3/doc/examples/siman.c --- gsl-doc-1.16/doc/examples/siman.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/siman.c 2015-11-09 19:16:21.000000000 +0000 @@ -61,7 +61,7 @@ } int -main(int argc, char *argv[]) +main(void) { const gsl_rng_type * T; gsl_rng * r; diff -Nru gsl-doc-1.16/doc/examples/siman.txt gsl-doc-2.3/doc/examples/siman.txt --- gsl-doc-1.16/doc/examples/siman.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/siman.txt 2015-11-10 19:37:13.000000000 +0000 @@ -0,0 +1,2770 @@ +#-iter #-evals temperature position energy + 0 1001 0.008 1.3507 -0.868361 -0.872837 + 1 2001 0.00797607 1.37079 -0.871175 -0.87287 + 2 3001 0.00795222 1.38039 -0.864303 -0.87287 + 3 4001 0.00792843 1.36375 -0.87286 -0.872871 + 4 5001 0.00790472 0.61174 -0.845934 -0.872871 + 5 6001 0.00788107 1.40147 -0.831327 -0.872871 + 6 7001 0.0078575 1.35283 -0.869778 -0.872871 + 7 8001 0.007834 1.3638 -0.872858 -0.872871 + 8 9001 0.00781057 1.36943 -0.871721 -0.872871 + 9 10001 0.0077872 1.38445 -0.859842 -0.872871 + 10 11001 0.00776391 1.34438 -0.862599 -0.872871 + 11 12001 0.00774069 0.601995 -0.848928 -0.872871 + 12 13001 0.00771754 1.37681 -0.86748 -0.872871 + 13 14001 0.00769445 1.3528 -0.869761 -0.872871 + 14 15001 0.00767144 1.34345 -0.861549 -0.872871 + 15 16001 0.0076485 1.34485 -0.86311 -0.872871 + 16 17001 0.00762562 1.35505 -0.870971 -0.872871 + 17 18001 0.00760281 1.3606 -0.872685 -0.872871 + 18 19001 0.00758007 0.603733 -0.84879 -0.872871 + 19 20001 0.0075574 1.37855 -0.866026 -0.872871 + 20 21001 0.00753479 1.36968 -0.871629 -0.872871 + 21 22001 0.00751226 1.36059 -0.872684 -0.872871 + 22 23001 0.00748979 1.34605 -0.864345 -0.872871 + 23 24001 0.00746738 1.36367 -0.872863 -0.872871 + 24 25001 0.00744505 1.36304 -0.872871 -0.872871 + 25 26001 0.00742278 0.613129 -0.845066 -0.872871 + 26 27001 0.00740058 1.36855 -0.872021 -0.872871 + 27 28001 0.00737844 1.37322 -0.86993 -0.872871 + 28 29001 0.00735638 1.36499 -0.872771 -0.872871 + 29 30001 0.00733437 1.35743 -0.871925 -0.872871 + 30 31001 0.00731243 1.35513 -0.871008 -0.872871 + 31 32001 0.00729056 1.37978 -0.864895 -0.872871 + 32 33001 0.00726876 1.35101 -0.868582 -0.872871 + 33 34001 0.00724702 1.34567 -0.863959 -0.872871 + 34 35001 0.00722534 1.37749 -0.866933 -0.872871 + 35 36001 0.00720373 1.36842 -0.872061 -0.872871 + 36 37001 0.00718218 1.3651 -0.872759 -0.872871 + 37 38001 0.0071607 1.34729 -0.865547 -0.872871 + 38 39001 0.00713928 1.36695 -0.872448 -0.872871 + 39 40001 0.00711793 1.36643 -0.872556 -0.872871 + 40 41001 0.00709664 1.35418 -0.870539 -0.872871 + 41 42001 0.00707541 0.594794 -0.847683 -0.872871 + 42 43001 0.00705425 1.35379 -0.87033 -0.872871 + 43 44001 0.00703315 1.36793 -0.872204 -0.872871 + 44 45001 0.00701211 1.36258 -0.872863 -0.872871 + 45 46001 0.00699114 1.36767 -0.872274 -0.872871 + 46 47001 0.00697023 1.39137 -0.85014 -0.872871 + 47 48001 0.00694938 1.38381 -0.860609 -0.872871 + 48 49001 0.0069286 1.37191 -0.870645 -0.872871 + 49 50001 0.00690787 1.36438 -0.872826 -0.872871 + 50 51001 0.00688721 1.36643 -0.872556 -0.872871 + 51 52001 0.00686661 1.34557 -0.863864 -0.872871 + 52 53001 0.00684607 1.35271 -0.869704 -0.872871 + 53 54001 0.0068256 1.35461 -0.870755 -0.872871 + 54 55001 0.00680518 1.34705 -0.865317 -0.872871 + 55 56001 0.00678483 1.34555 -0.863844 -0.872871 + 56 57001 0.00676453 1.3544 -0.870651 -0.872871 + 57 58001 0.0067443 1.37319 -0.869947 -0.872871 + 58 59001 0.00672413 1.37289 -0.87012 -0.872871 + 59 60001 0.00670401 1.36561 -0.872692 -0.872871 + 60 61001 0.00668396 1.36889 -0.871909 -0.872871 + 61 62001 0.00666397 1.3717 -0.870748 -0.872871 + 62 63001 0.00664404 1.38076 -0.86394 -0.872871 + 63 64001 0.00662417 1.33705 -0.852963 -0.872871 + 64 65001 0.00660435 1.37052 -0.871291 -0.872871 + 65 66001 0.0065846 1.38734 -0.856103 -0.872871 + 66 67001 0.0065649 1.3718 -0.870701 -0.872871 + 67 68001 0.00654527 1.34896 -0.867008 -0.872871 + 68 69001 0.00652569 1.35488 -0.870887 -0.872871 + 69 70001 0.00650617 1.37107 -0.871048 -0.872871 + 70 71001 0.00648671 1.36726 -0.872376 -0.872871 + 71 72001 0.00646731 1.36707 -0.872421 -0.872871 + 72 73001 0.00644797 1.34789 -0.86609 -0.872871 + 73 74001 0.00642868 1.3705 -0.8713 -0.872871 + 74 75001 0.00640945 1.37711 -0.867239 -0.872871 + 75 76001 0.00639028 1.35185 -0.869158 -0.872871 + 76 77001 0.00637117 0.616273 -0.842692 -0.872871 + 77 78001 0.00635211 1.35411 -0.870502 -0.872871 + 78 79001 0.00633311 1.36347 -0.872868 -0.872871 + 79 80001 0.00631417 1.36476 -0.872794 -0.872871 + 80 81001 0.00629528 1.3997 -0.835005 -0.872871 + 81 82001 0.00627645 1.38277 -0.861803 -0.872871 + 82 83001 0.00625768 1.37485 -0.868909 -0.872871 + 83 84001 0.00623896 1.35295 -0.869852 -0.872871 + 84 85001 0.0062203 1.35708 -0.871806 -0.872871 + 85 86001 0.0062017 1.3662 -0.872597 -0.872871 + 86 87001 0.00618315 1.37209 -0.870549 -0.872871 + 87 88001 0.00616466 1.35771 -0.872016 -0.872871 + 88 89001 0.00614622 1.35419 -0.87054 -0.872871 + 89 90001 0.00612783 1.35902 -0.872379 -0.872871 + 90 91001 0.0061095 1.37822 -0.866319 -0.872871 + 91 92001 0.00609123 1.37957 -0.865102 -0.872871 + 92 93001 0.00607301 1.35634 -0.87153 -0.872871 + 93 94001 0.00605485 1.37988 -0.8648 -0.872871 + 94 95001 0.00603674 1.37147 -0.870862 -0.872871 + 95 96001 0.00601868 1.34329 -0.861361 -0.872871 + 96 97001 0.00600068 1.37891 -0.865705 -0.872871 + 97 98001 0.00598273 1.36987 -0.871556 -0.872871 + 98 99001 0.00596484 1.38152 -0.863159 -0.872871 + 99 100001 0.005947 1.37272 -0.870212 -0.872871 + 100 101001 0.00592921 1.38517 -0.858957 -0.872871 + 101 102001 0.00591147 1.36958 -0.871666 -0.872871 + 102 103001 0.00589379 1.35112 -0.868666 -0.872871 + 103 104001 0.00587616 1.35983 -0.872554 -0.872871 + 104 105001 0.00585859 1.34827 -0.866422 -0.872871 + 105 106001 0.00584106 1.36394 -0.872852 -0.872871 + 106 107001 0.00582359 1.35721 -0.87185 -0.872871 + 107 108001 0.00580618 1.37301 -0.870054 -0.872871 + 108 109001 0.00578881 1.35705 -0.871794 -0.872871 + 109 110001 0.00577149 1.36788 -0.872218 -0.872871 + 110 111001 0.00575423 1.35034 -0.8681 -0.872871 + 111 112001 0.00573702 1.38082 -0.86388 -0.872871 + 112 113001 0.00571986 1.3645 -0.872817 -0.872871 + 113 114001 0.00570275 1.36162 -0.872805 -0.872871 + 114 115001 0.0056857 1.37579 -0.868252 -0.872871 + 115 116001 0.00566869 1.37627 -0.867897 -0.872871 + 116 117001 0.00565173 1.37343 -0.869809 -0.872871 + 117 118001 0.00563483 1.36924 -0.871792 -0.872871 + 118 119001 0.00561798 1.36836 -0.87208 -0.872871 + 119 120001 0.00560117 1.37157 -0.87081 -0.872871 + 120 121001 0.00558442 1.35632 -0.871522 -0.872871 + 121 122001 0.00556772 1.35976 -0.872541 -0.872871 + 122 123001 0.00555106 1.38023 -0.864462 -0.872871 + 123 124001 0.00553446 1.38095 -0.863748 -0.872871 + 124 125001 0.00551791 1.36894 -0.871894 -0.872871 + 125 126001 0.0055014 1.3784 -0.866157 -0.872871 + 126 127001 0.00548495 1.37446 -0.869164 -0.872871 + 127 128001 0.00546854 1.33953 -0.856572 -0.872871 + 128 129001 0.00545218 1.36883 -0.871932 -0.872871 + 129 130001 0.00543588 1.35546 -0.871156 -0.872871 + 130 131001 0.00541962 1.35448 -0.870693 -0.872871 + 131 132001 0.00540341 1.38166 -0.863013 -0.872871 + 132 133001 0.00538725 1.36231 -0.872852 -0.872871 + 133 134001 0.00537113 1.35093 -0.868532 -0.872871 + 134 135001 0.00535507 1.36347 -0.872868 -0.872871 + 135 136001 0.00533905 1.36546 -0.872714 -0.872871 + 136 137001 0.00532308 1.3565 -0.871593 -0.872871 + 137 138001 0.00530716 1.36342 -0.872869 -0.872871 + 138 139001 0.00529129 1.37767 -0.866785 -0.872871 + 139 140001 0.00527546 1.35735 -0.8719 -0.872871 + 140 141001 0.00525968 1.35466 -0.870779 -0.872871 + 141 142001 0.00524395 1.36762 -0.872288 -0.872871 + 142 143001 0.00522826 1.34728 -0.865538 -0.872871 + 143 144001 0.00521263 1.36686 -0.872469 -0.872871 + 144 145001 0.00519703 1.3457 -0.863996 -0.872871 + 145 146001 0.00518149 1.36457 -0.872811 -0.872871 + 146 147001 0.00516599 1.36191 -0.872828 -0.872871 + 147 148001 0.00515054 1.35299 -0.869874 -0.872871 + 148 149001 0.00513514 1.37083 -0.871156 -0.872871 + 149 150001 0.00511978 1.36041 -0.872656 -0.872871 + 150 151001 0.00510446 1.36889 -0.87191 -0.872871 + 151 152001 0.0050892 1.35861 -0.872278 -0.872871 + 152 153001 0.00507397 1.37867 -0.865921 -0.872871 + 153 154001 0.0050588 1.35613 -0.871444 -0.872871 + 154 155001 0.00504367 1.36702 -0.872434 -0.872871 + 155 156001 0.00502858 1.36367 -0.872863 -0.872871 + 156 157001 0.00501354 1.33862 -0.855295 -0.872871 + 157 158001 0.00499854 1.36721 -0.872388 -0.872871 + 158 159001 0.00498359 1.37434 -0.869244 -0.872871 + 159 160001 0.00496869 1.3711 -0.871035 -0.872871 + 160 161001 0.00495383 1.37796 -0.866542 -0.872871 + 161 162001 0.00493901 1.35155 -0.868962 -0.872871 + 162 163001 0.00492424 1.36935 -0.871751 -0.872871 + 163 164001 0.00490951 1.37406 -0.869424 -0.872871 + 164 165001 0.00489482 1.37 -0.871508 -0.872871 + 165 166001 0.00488018 1.36735 -0.872355 -0.872871 + 166 167001 0.00486559 1.37326 -0.869909 -0.872871 + 167 168001 0.00485103 1.33658 -0.852239 -0.872871 + 168 169001 0.00483652 1.36361 -0.872864 -0.872871 + 169 170001 0.00482206 1.37817 -0.866362 -0.872871 + 170 171001 0.00480763 1.36476 -0.872794 -0.872871 + 171 172001 0.00479325 1.3458 -0.864091 -0.872871 + 172 173001 0.00477892 1.36734 -0.872358 -0.872871 + 173 174001 0.00476462 1.34898 -0.867027 -0.872871 + 174 175001 0.00475037 1.35619 -0.871468 -0.872871 + 175 176001 0.00473616 1.38367 -0.860772 -0.872871 + 176 177001 0.004722 1.36996 -0.871522 -0.872871 + 177 178001 0.00470787 1.34626 -0.864555 -0.872871 + 178 179001 0.00469379 1.34821 -0.866372 -0.872871 + 179 180001 0.00467975 1.38758 -0.855774 -0.872871 + 180 181001 0.00466576 1.34724 -0.865497 -0.872871 + 181 182001 0.0046518 1.35349 -0.870165 -0.872871 + 182 183001 0.00463789 1.36837 -0.872075 -0.872871 + 183 184001 0.00462402 1.37752 -0.866909 -0.872871 + 184 185001 0.00461018 1.35046 -0.868189 -0.872871 + 185 186001 0.0045964 1.36951 -0.871694 -0.872871 + 186 187001 0.00458265 1.35783 -0.872054 -0.872871 + 187 188001 0.00456894 1.37784 -0.866644 -0.872871 + 188 189001 0.00455527 1.34244 -0.860352 -0.872871 + 189 190001 0.00454165 1.3553 -0.871086 -0.872871 + 190 191001 0.00452807 1.37205 -0.87057 -0.872871 + 191 192001 0.00451452 1.35714 -0.871827 -0.872871 + 192 193001 0.00450102 1.36194 -0.87283 -0.872871 + 193 194001 0.00448756 1.36681 -0.872478 -0.872871 + 194 195001 0.00447413 1.35001 -0.867852 -0.872871 + 195 196001 0.00446075 1.36337 -0.87287 -0.872871 + 196 197001 0.00444741 1.36626 -0.872587 -0.872871 + 197 198001 0.00443411 1.36089 -0.872725 -0.872871 + 198 199001 0.00442084 1.36872 -0.871966 -0.872871 + 199 200001 0.00440762 1.36137 -0.872781 -0.872871 + 200 201001 0.00439444 1.37496 -0.868831 -0.872871 + 201 202001 0.00438129 1.37225 -0.870468 -0.872871 + 202 203001 0.00436819 1.35427 -0.870583 -0.872871 + 203 204001 0.00435512 1.36808 -0.87216 -0.872871 + 204 205001 0.0043421 1.35467 -0.870788 -0.872871 + 205 206001 0.00432911 1.37245 -0.870362 -0.872871 + 206 207001 0.00431616 1.37061 -0.871253 -0.872871 + 207 208001 0.00430325 1.35811 -0.872138 -0.872871 + 208 209001 0.00429038 1.35285 -0.869791 -0.872871 + 209 210001 0.00427755 1.35997 -0.872582 -0.872871 + 210 211001 0.00426475 1.36263 -0.872864 -0.872871 + 211 212001 0.004252 1.3777 -0.866761 -0.872871 + 212 213001 0.00423928 1.36066 -0.872695 -0.872871 + 213 214001 0.0042266 1.36446 -0.87282 -0.872871 + 214 215001 0.00421396 1.36274 -0.872867 -0.872871 + 215 216001 0.00420136 1.36139 -0.872783 -0.872871 + 216 217001 0.00418879 0.600455 -0.848907 -0.872871 + 217 218001 0.00417626 1.3655 -0.872708 -0.872871 + 218 219001 0.00416377 1.35761 -0.871983 -0.872871 + 219 220001 0.00415131 1.35207 -0.869303 -0.872871 + 220 221001 0.0041389 1.37308 -0.870012 -0.872871 + 221 222001 0.00412652 0.604398 -0.848692 -0.872871 + 222 223001 0.00411418 1.35878 -0.872322 -0.872871 + 223 224001 0.00410187 1.35973 -0.872536 -0.872871 + 224 225001 0.0040896 1.34116 -0.858756 -0.872871 + 225 226001 0.00407737 1.36912 -0.871832 -0.872871 + 226 227001 0.00406517 1.36083 -0.872718 -0.872871 + 227 228001 0.00405301 1.35755 -0.871965 -0.872871 + 228 229001 0.00404089 1.36452 -0.872816 -0.872871 + 229 230001 0.00402881 1.34913 -0.867153 -0.872871 + 230 231001 0.00401676 1.37163 -0.870783 -0.872871 + 231 232001 0.00400474 1.36975 -0.871601 -0.872871 + 232 233001 0.00399276 1.36343 -0.872869 -0.872871 + 233 234001 0.00398082 1.38015 -0.864542 -0.872871 + 234 235001 0.00396891 1.36349 -0.872867 -0.872871 + 235 236001 0.00395704 1.37645 -0.86776 -0.872871 + 236 237001 0.00394521 1.36781 -0.872236 -0.872871 + 237 238001 0.00393341 1.36205 -0.872837 -0.872871 + 238 239001 0.00392164 1.35652 -0.871598 -0.872871 + 239 240001 0.00390991 1.3626 -0.872863 -0.872871 + 240 241001 0.00389822 1.36858 -0.872011 -0.872871 + 241 242001 0.00388656 1.36371 -0.872861 -0.872871 + 242 243001 0.00387493 1.36043 -0.872659 -0.872871 + 243 244001 0.00386334 1.35087 -0.868488 -0.872871 + 244 245001 0.00385179 1.35152 -0.868938 -0.872871 + 245 246001 0.00384027 1.36402 -0.872848 -0.872871 + 246 247001 0.00382878 1.366 -0.872632 -0.872871 + 247 248001 0.00381733 1.36967 -0.871634 -0.872871 + 248 249001 0.00380591 1.36207 -0.872838 -0.872871 + 249 250001 0.00379453 1.36612 -0.872611 -0.872871 + 250 251001 0.00378318 1.36431 -0.872831 -0.872871 + 251 252001 0.00377186 1.36101 -0.872741 -0.872871 + 252 253001 0.00376058 1.3605 -0.872671 -0.872871 + 253 254001 0.00374933 1.36757 -0.872301 -0.872871 + 254 255001 0.00373812 1.35845 -0.872233 -0.872871 + 255 256001 0.00372694 1.36429 -0.872832 -0.872871 + 256 257001 0.00371579 1.34785 -0.866052 -0.872871 + 257 258001 0.00370468 1.36754 -0.872307 -0.872871 + 258 259001 0.00369359 1.36264 -0.872864 -0.872871 + 259 260001 0.00368255 1.37189 -0.870654 -0.872871 + 260 261001 0.00367153 1.37913 -0.865504 -0.872871 + 261 262001 0.00366055 1.3585 -0.872247 -0.872871 + 262 263001 0.0036496 1.35574 -0.871279 -0.872871 + 263 264001 0.00363869 1.35072 -0.86838 -0.872871 + 264 265001 0.0036278 1.36427 -0.872833 -0.872871 + 265 266001 0.00361695 1.3643 -0.872832 -0.872871 + 266 267001 0.00360613 1.35975 -0.87254 -0.872871 + 267 268001 0.00359535 1.35908 -0.872395 -0.872871 + 268 269001 0.00358459 1.36747 -0.872326 -0.872871 + 269 270001 0.00357387 1.36209 -0.87284 -0.872871 + 270 271001 0.00356318 1.3685 -0.872035 -0.872871 + 271 272001 0.00355252 1.36348 -0.872868 -0.872871 + 272 273001 0.0035419 1.36101 -0.87274 -0.872871 + 273 274001 0.00353131 1.36915 -0.871821 -0.872871 + 274 275001 0.00352074 1.36716 -0.8724 -0.872871 + 275 276001 0.00351021 1.36475 -0.872795 -0.872871 + 276 277001 0.00349971 1.36847 -0.872046 -0.872871 + 277 278001 0.00348925 1.3609 -0.872726 -0.872871 + 278 279001 0.00347881 1.36209 -0.87284 -0.872871 + 279 280001 0.0034684 1.36487 -0.872784 -0.872871 + 280 281001 0.00345803 1.36245 -0.872858 -0.872871 + 281 282001 0.00344769 1.34269 -0.860654 -0.872871 + 282 283001 0.00343737 1.36668 -0.872507 -0.872871 + 283 284001 0.00342709 1.35441 -0.870653 -0.872871 + 284 285001 0.00341684 1.34053 -0.857935 -0.872871 + 285 286001 0.00340662 1.36165 -0.872808 -0.872871 + 286 287001 0.00339643 1.37413 -0.86938 -0.872871 + 287 288001 0.00338627 1.36601 -0.87263 -0.872871 + 288 289001 0.00337615 1.35865 -0.872288 -0.872871 + 289 290001 0.00336605 1.36106 -0.872746 -0.872871 + 290 291001 0.00335598 1.37665 -0.867603 -0.872871 + 291 292001 0.00334594 1.35901 -0.872377 -0.872871 + 292 293001 0.00333593 1.35115 -0.868684 -0.872871 + 293 294001 0.00332596 1.36462 -0.872807 -0.872871 + 294 295001 0.00331601 1.36175 -0.872816 -0.872871 + 295 296001 0.00330609 1.36041 -0.872656 -0.872871 + 296 297001 0.0032962 1.36403 -0.872848 -0.872871 + 297 298001 0.00328634 1.35409 -0.870487 -0.872871 + 298 299001 0.00327651 1.36861 -0.872 -0.872871 + 299 300001 0.00326671 1.36051 -0.872671 -0.872871 + 300 301001 0.00325694 1.36871 -0.87197 -0.872871 + 301 302001 0.0032472 1.3616 -0.872803 -0.872871 + 302 303001 0.00323749 1.3669 -0.872458 -0.872871 + 303 304001 0.0032278 1.36647 -0.872548 -0.872871 + 304 305001 0.00321815 1.36554 -0.872703 -0.872871 + 305 306001 0.00320852 1.3593 -0.872445 -0.872871 + 306 307001 0.00319893 1.38291 -0.861649 -0.872871 + 307 308001 0.00318936 1.37155 -0.870824 -0.872871 + 308 309001 0.00317982 1.35609 -0.871427 -0.872871 + 309 310001 0.00317031 1.35635 -0.871533 -0.872871 + 310 311001 0.00316083 1.36805 -0.87217 -0.872871 + 311 312001 0.00315137 1.37938 -0.865279 -0.872871 + 312 313001 0.00314195 1.34956 -0.867498 -0.872871 + 313 314001 0.00313255 1.36637 -0.872567 -0.872871 + 314 315001 0.00312318 1.36095 -0.872733 -0.872871 + 315 316001 0.00311384 1.36249 -0.872859 -0.872871 + 316 317001 0.00310452 1.36363 -0.872864 -0.872871 + 317 318001 0.00309524 1.35647 -0.871581 -0.872871 + 318 319001 0.00308598 1.34571 -0.864007 -0.872871 + 319 320001 0.00307675 1.35461 -0.870758 -0.872871 + 320 321001 0.00306755 1.36393 -0.872853 -0.872871 + 321 322001 0.00305837 1.36118 -0.872761 -0.872871 + 322 323001 0.00304923 1.35368 -0.87027 -0.872871 + 323 324001 0.00304011 1.37103 -0.871068 -0.872871 + 324 325001 0.00303101 1.37314 -0.869978 -0.872871 + 325 326001 0.00302195 1.36879 -0.871942 -0.872871 + 326 327001 0.00301291 1.34159 -0.859304 -0.872871 + 327 328001 0.0030039 1.36714 -0.872406 -0.872871 + 328 329001 0.00299491 1.36767 -0.872273 -0.872871 + 329 330001 0.00298595 1.35963 -0.872516 -0.872871 + 330 331001 0.00297702 1.36921 -0.8718 -0.872871 + 331 332001 0.00296812 1.35815 -0.87215 -0.872871 + 332 333001 0.00295924 1.35581 -0.871313 -0.872871 + 333 334001 0.00295039 1.36319 -0.872871 -0.872871 + 334 335001 0.00294156 1.35885 -0.872339 -0.872871 + 335 336001 0.00293277 1.37292 -0.870101 -0.872871 + 336 337001 0.00292399 1.36824 -0.872114 -0.872871 + 337 338001 0.00291525 1.36924 -0.871791 -0.872871 + 338 339001 0.00290653 1.36079 -0.872712 -0.872871 + 339 340001 0.00289784 1.35188 -0.86918 -0.872871 + 340 341001 0.00288917 1.35845 -0.872233 -0.872871 + 341 342001 0.00288053 1.35184 -0.869155 -0.872871 + 342 343001 0.00287191 1.37069 -0.871219 -0.872871 + 343 344001 0.00286332 1.36534 -0.87273 -0.872871 + 344 345001 0.00285476 1.36339 -0.872869 -0.872871 + 345 346001 0.00284622 1.34957 -0.867503 -0.872871 + 346 347001 0.0028377 1.36435 -0.872828 -0.872871 + 347 348001 0.00282922 1.36561 -0.872693 -0.872871 + 348 349001 0.00282075 1.34822 -0.86638 -0.872871 + 349 350001 0.00281232 1.35894 -0.87236 -0.872871 + 350 351001 0.00280391 1.37104 -0.871063 -0.872871 + 351 352001 0.00279552 1.35846 -0.872235 -0.872871 + 352 353001 0.00278716 1.36966 -0.871638 -0.872871 + 353 354001 0.00277882 1.35813 -0.872145 -0.872871 + 354 355001 0.00277051 1.36289 -0.87287 -0.872871 + 355 356001 0.00276222 1.35734 -0.871895 -0.872871 + 356 357001 0.00275396 1.3575 -0.87195 -0.872871 + 357 358001 0.00274572 1.3584 -0.872221 -0.872871 + 358 359001 0.00273751 1.3591 -0.872398 -0.872871 + 359 360001 0.00272932 1.36881 -0.871937 -0.872871 + 360 361001 0.00272116 1.3541 -0.870494 -0.872871 + 361 362001 0.00271302 1.37306 -0.870025 -0.872871 + 362 363001 0.00270491 1.36662 -0.872519 -0.872871 + 363 364001 0.00269682 1.36343 -0.872869 -0.872871 + 364 365001 0.00268875 1.37472 -0.868994 -0.872871 + 365 366001 0.00268071 1.36041 -0.872656 -0.872871 + 366 367001 0.00267269 1.3676 -0.872293 -0.872871 + 367 368001 0.0026647 1.35906 -0.872391 -0.872871 + 368 369001 0.00265673 1.35233 -0.869467 -0.872871 + 369 370001 0.00264878 1.36062 -0.872689 -0.872871 + 370 371001 0.00264086 1.36286 -0.872869 -0.872871 + 371 372001 0.00263296 1.35729 -0.871879 -0.872871 + 372 373001 0.00262508 1.35858 -0.87227 -0.872871 + 373 374001 0.00261723 1.37122 -0.87098 -0.872871 + 374 375001 0.0026094 1.35803 -0.872113 -0.872871 + 375 376001 0.0026016 1.36793 -0.872204 -0.872871 + 376 377001 0.00259382 1.37147 -0.870863 -0.872871 + 377 378001 0.00258606 1.36211 -0.872841 -0.872871 + 378 379001 0.00257832 1.36328 -0.872871 -0.872871 + 379 380001 0.00257061 1.35359 -0.87022 -0.872871 + 380 381001 0.00256292 1.367 -0.872438 -0.872871 + 381 382001 0.00255526 1.35373 -0.870296 -0.872871 + 382 383001 0.00254761 1.36303 -0.872871 -0.872871 + 383 384001 0.00253999 1.3633 -0.87287 -0.872871 + 384 385001 0.0025324 1.36557 -0.872698 -0.872871 + 385 386001 0.00252482 1.36821 -0.872123 -0.872871 + 386 387001 0.00251727 1.36262 -0.872864 -0.872871 + 387 388001 0.00250974 1.36021 -0.872624 -0.872871 + 388 389001 0.00250223 1.3663 -0.87258 -0.872871 + 389 390001 0.00249475 1.3582 -0.872163 -0.872871 + 390 391001 0.00248729 1.36916 -0.871817 -0.872871 + 391 392001 0.00247985 1.3652 -0.872747 -0.872871 + 392 393001 0.00247243 1.35635 -0.871532 -0.872871 + 393 394001 0.00246504 1.3656 -0.872695 -0.872871 + 394 395001 0.00245766 1.37178 -0.870707 -0.872871 + 395 396001 0.00245031 1.367 -0.872436 -0.872871 + 396 397001 0.00244298 1.36534 -0.87273 -0.872871 + 397 398001 0.00243568 1.36641 -0.87256 -0.872871 + 398 399001 0.00242839 1.36502 -0.872768 -0.872871 + 399 400001 0.00242113 1.3695 -0.871696 -0.872871 + 400 401001 0.00241389 1.36242 -0.872857 -0.872871 + 401 402001 0.00240667 1.36178 -0.872818 -0.872871 + 402 403001 0.00239947 1.36304 -0.872871 -0.872871 + 403 404001 0.00239229 1.36687 -0.872466 -0.872871 + 404 405001 0.00238514 1.35853 -0.872255 -0.872871 + 405 406001 0.002378 1.35999 -0.872585 -0.872871 + 406 407001 0.00237089 1.36968 -0.871628 -0.872871 + 407 408001 0.0023638 1.35955 -0.872499 -0.872871 + 408 409001 0.00235673 1.36998 -0.871515 -0.872871 + 409 410001 0.00234968 1.36547 -0.872713 -0.872871 + 410 411001 0.00234265 1.35463 -0.870767 -0.872871 + 411 412001 0.00233564 1.36503 -0.872767 -0.872871 + 412 413001 0.00232866 1.36648 -0.872546 -0.872871 + 413 414001 0.00232169 1.36683 -0.872475 -0.872871 + 414 415001 0.00231475 1.36674 -0.872493 -0.872871 + 415 416001 0.00230782 1.35824 -0.872174 -0.872871 + 416 417001 0.00230092 1.36944 -0.87172 -0.872871 + 417 418001 0.00229404 1.36587 -0.872653 -0.872871 + 418 419001 0.00228718 1.36152 -0.872796 -0.872871 + 419 420001 0.00228034 1.37223 -0.87048 -0.872871 + 420 421001 0.00227352 1.35744 -0.87193 -0.872871 + 421 422001 0.00226672 1.36376 -0.87286 -0.872871 + 422 423001 0.00225994 1.35723 -0.871858 -0.872871 + 423 424001 0.00225318 1.36273 -0.872867 -0.872871 + 424 425001 0.00224644 1.34229 -0.860172 -0.872871 + 425 426001 0.00223972 1.36341 -0.872869 -0.872871 + 426 427001 0.00223302 1.35882 -0.872332 -0.872871 + 427 428001 0.00222634 1.3738 -0.869586 -0.872871 + 428 429001 0.00221968 1.36062 -0.872689 -0.872871 + 429 430001 0.00221304 1.36108 -0.872749 -0.872871 + 430 431001 0.00220642 1.35994 -0.872576 -0.872871 + 431 432001 0.00219982 1.36885 -0.871925 -0.872871 + 432 433001 0.00219324 1.36229 -0.872851 -0.872871 + 433 434001 0.00218668 1.35676 -0.871691 -0.872871 + 434 435001 0.00218014 1.35708 -0.871807 -0.872871 + 435 436001 0.00217362 1.36478 -0.872792 -0.872871 + 436 437001 0.00216712 1.36736 -0.872352 -0.872871 + 437 438001 0.00216064 1.36322 -0.872871 -0.872871 + 438 439001 0.00215418 1.35076 -0.868408 -0.872871 + 439 440001 0.00214773 1.37074 -0.871197 -0.872871 + 440 441001 0.00214131 1.3573 -0.871883 -0.872871 + 441 442001 0.0021349 1.36093 -0.872731 -0.872871 + 442 443001 0.00212852 1.35681 -0.87171 -0.872871 + 443 444001 0.00212215 1.35607 -0.871418 -0.872871 + 444 445001 0.00211581 1.37319 -0.86995 -0.872871 + 445 446001 0.00210948 1.36296 -0.87287 -0.872871 + 446 447001 0.00210317 1.36916 -0.87182 -0.872871 + 447 448001 0.00209688 1.38194 -0.862709 -0.872871 + 448 449001 0.00209061 1.37269 -0.870233 -0.872871 + 449 450001 0.00208435 1.36146 -0.872791 -0.872871 + 450 451001 0.00207812 1.35221 -0.869396 -0.872871 + 451 452001 0.0020719 1.36202 -0.872835 -0.872871 + 452 453001 0.0020657 1.3605 -0.87267 -0.872871 + 453 454001 0.00205953 1.35976 -0.87254 -0.872871 + 454 455001 0.00205337 1.36948 -0.871703 -0.872871 + 455 456001 0.00204722 1.35624 -0.871489 -0.872871 + 456 457001 0.0020411 1.36128 -0.872772 -0.872871 + 457 458001 0.002035 1.37114 -0.871017 -0.872871 + 458 459001 0.00202891 1.35722 -0.871853 -0.872871 + 459 460001 0.00202284 1.36133 -0.872777 -0.872871 + 460 461001 0.00201679 1.35651 -0.871594 -0.872871 + 461 462001 0.00201076 1.37495 -0.868842 -0.872871 + 462 463001 0.00200474 1.36967 -0.871632 -0.872871 + 463 464001 0.00199875 1.36456 -0.872812 -0.872871 + 464 465001 0.00199277 1.36506 -0.872763 -0.872871 + 465 466001 0.00198681 1.3579 -0.872076 -0.872871 + 466 467001 0.00198087 1.35926 -0.872436 -0.872871 + 467 468001 0.00197494 1.3684 -0.872068 -0.872871 + 468 469001 0.00196903 1.36255 -0.872861 -0.872871 + 469 470001 0.00196315 1.3599 -0.872568 -0.872871 + 470 471001 0.00195727 1.37334 -0.86986 -0.872871 + 471 472001 0.00195142 1.35974 -0.872536 -0.872871 + 472 473001 0.00194558 1.35682 -0.871711 -0.872871 + 473 474001 0.00193976 1.367 -0.872437 -0.872871 + 474 475001 0.00193396 1.35525 -0.871063 -0.872871 + 475 476001 0.00192818 1.36734 -0.872357 -0.872871 + 476 477001 0.00192241 1.3531 -0.86994 -0.872871 + 477 478001 0.00191666 1.36192 -0.872829 -0.872871 + 478 479001 0.00191093 1.35485 -0.870875 -0.872871 + 479 480001 0.00190521 1.35417 -0.870532 -0.872871 + 480 481001 0.00189951 1.36015 -0.872613 -0.872871 + 481 482001 0.00189383 1.36068 -0.872697 -0.872871 + 482 483001 0.00188817 1.37158 -0.870808 -0.872871 + 483 484001 0.00188252 1.36887 -0.871919 -0.872871 + 484 485001 0.00187689 1.35996 -0.872579 -0.872871 + 485 486001 0.00187127 1.37107 -0.871049 -0.872871 + 486 487001 0.00186568 1.36997 -0.871517 -0.872871 + 487 488001 0.0018601 1.36937 -0.871743 -0.872871 + 488 489001 0.00185453 1.36417 -0.87284 -0.872871 + 489 490001 0.00184899 1.36969 -0.871627 -0.872871 + 490 491001 0.00184346 1.3664 -0.872562 -0.872871 + 491 492001 0.00183794 1.35847 -0.872239 -0.872871 + 492 493001 0.00183244 1.35724 -0.87186 -0.872871 + 493 494001 0.00182696 1.36995 -0.871525 -0.872871 + 494 495001 0.0018215 1.36546 -0.872714 -0.872871 + 495 496001 0.00181605 1.36061 -0.872686 -0.872871 + 496 497001 0.00181062 1.36768 -0.872272 -0.872871 + 497 498001 0.0018052 1.36436 -0.872827 -0.872871 + 498 499001 0.0017998 1.36797 -0.872193 -0.872871 + 499 500001 0.00179442 1.35838 -0.872215 -0.872871 + 500 501001 0.00178905 1.35469 -0.870796 -0.872871 + 501 502001 0.0017837 1.3623 -0.872851 -0.872871 + 502 503001 0.00177837 1.37334 -0.869861 -0.872871 + 503 504001 0.00177305 1.35608 -0.871426 -0.872871 + 504 505001 0.00176775 1.36054 -0.872676 -0.872871 + 505 506001 0.00176246 1.36229 -0.872851 -0.872871 + 506 507001 0.00175719 1.35876 -0.872316 -0.872871 + 507 508001 0.00175193 1.3588 -0.872326 -0.872871 + 508 509001 0.00174669 1.36077 -0.87271 -0.872871 + 509 510001 0.00174147 1.35534 -0.871104 -0.872871 + 510 511001 0.00173626 1.36767 -0.872275 -0.872871 + 511 512001 0.00173106 1.36506 -0.872763 -0.872871 + 512 513001 0.00172589 1.37553 -0.868436 -0.872871 + 513 514001 0.00172072 1.36152 -0.872796 -0.872871 + 514 515001 0.00171558 1.36445 -0.872821 -0.872871 + 515 516001 0.00171045 1.37093 -0.87111 -0.872871 + 516 517001 0.00170533 1.36191 -0.872828 -0.872871 + 517 518001 0.00170023 1.3592 -0.872421 -0.872871 + 518 519001 0.00169514 1.37028 -0.871394 -0.872871 + 519 520001 0.00169007 1.36369 -0.872862 -0.872871 + 520 521001 0.00168502 1.36131 -0.872775 -0.872871 + 521 522001 0.00167998 1.3701 -0.871467 -0.872871 + 522 523001 0.00167495 1.3617 -0.872812 -0.872871 + 523 524001 0.00166994 1.364 -0.872849 -0.872871 + 524 525001 0.00166495 1.36182 -0.872822 -0.872871 + 525 526001 0.00165997 1.35741 -0.871921 -0.872871 + 526 527001 0.001655 1.36783 -0.872232 -0.872871 + 527 528001 0.00165005 1.37589 -0.868174 -0.872871 + 528 529001 0.00164512 1.36191 -0.872828 -0.872871 + 529 530001 0.0016402 1.36505 -0.872765 -0.872871 + 530 531001 0.00163529 1.36189 -0.872827 -0.872871 + 531 532001 0.0016304 1.37241 -0.870383 -0.872871 + 532 533001 0.00162552 1.36016 -0.872614 -0.872871 + 533 534001 0.00162066 1.35598 -0.871383 -0.872871 + 534 535001 0.00161582 1.36102 -0.872742 -0.872871 + 535 536001 0.00161098 1.36105 -0.872745 -0.872871 + 536 537001 0.00160616 1.37132 -0.870931 -0.872871 + 537 538001 0.00160136 1.36178 -0.872818 -0.872871 + 538 539001 0.00159657 1.36101 -0.872741 -0.872871 + 539 540001 0.00159179 1.3514 -0.868857 -0.872871 + 540 541001 0.00158703 1.35059 -0.868281 -0.872871 + 541 542001 0.00158229 1.36146 -0.87279 -0.872871 + 542 543001 0.00157755 1.3644 -0.872825 -0.872871 + 543 544001 0.00157284 1.36709 -0.872418 -0.872871 + 544 545001 0.00156813 1.36591 -0.872647 -0.872871 + 545 546001 0.00156344 1.35839 -0.872216 -0.872871 + 546 547001 0.00155876 1.3643 -0.872831 -0.872871 + 547 548001 0.0015541 1.36053 -0.872675 -0.872871 + 548 549001 0.00154945 1.3635 -0.872867 -0.872871 + 549 550001 0.00154482 1.35505 -0.870968 -0.872871 + 550 551001 0.0015402 1.36611 -0.872613 -0.872871 + 551 552001 0.00153559 1.35797 -0.872096 -0.872871 + 552 553001 0.001531 1.35848 -0.872241 -0.872871 + 553 554001 0.00152642 1.37049 -0.871304 -0.872871 + 554 555001 0.00152185 1.36536 -0.872727 -0.872871 + 555 556001 0.0015173 1.3616 -0.872803 -0.872871 + 556 557001 0.00151276 1.3575 -0.871948 -0.872871 + 557 558001 0.00150824 1.3654 -0.872722 -0.872871 + 558 559001 0.00150373 1.36713 -0.872406 -0.872871 + 559 560001 0.00149923 1.36467 -0.872802 -0.872871 + 560 561001 0.00149475 1.37246 -0.870359 -0.872871 + 561 562001 0.00149028 1.36 -0.872587 -0.872871 + 562 563001 0.00148582 1.36101 -0.87274 -0.872871 + 563 564001 0.00148137 1.36336 -0.87287 -0.872871 + 564 565001 0.00147694 1.37169 -0.870753 -0.872871 + 565 566001 0.00147253 1.36314 -0.872871 -0.872871 + 566 567001 0.00146812 1.36512 -0.872757 -0.872871 + 567 568001 0.00146373 1.36534 -0.87273 -0.872871 + 568 569001 0.00145935 1.36425 -0.872835 -0.872871 + 569 570001 0.00145499 1.36591 -0.872647 -0.872871 + 570 571001 0.00145064 1.36356 -0.872866 -0.872871 + 571 572001 0.0014463 1.36166 -0.872808 -0.872871 + 572 573001 0.00144197 1.37086 -0.871142 -0.872871 + 573 574001 0.00143766 1.36407 -0.872846 -0.872871 + 574 575001 0.00143336 1.36241 -0.872856 -0.872871 + 575 576001 0.00142907 1.36366 -0.872863 -0.872871 + 576 577001 0.0014248 1.36099 -0.872738 -0.872871 + 577 578001 0.00142053 1.36255 -0.872862 -0.872871 + 578 579001 0.00141629 1.36556 -0.872701 -0.872871 + 579 580001 0.00141205 1.36467 -0.872803 -0.872871 + 580 581001 0.00140783 1.36248 -0.872859 -0.872871 + 581 582001 0.00140361 1.36518 -0.87275 -0.872871 + 582 583001 0.00139942 1.36438 -0.872826 -0.872871 + 583 584001 0.00139523 1.35489 -0.870893 -0.872871 + 584 585001 0.00139106 1.37375 -0.869615 -0.872871 + 585 586001 0.0013869 1.36305 -0.872871 -0.872871 + 586 587001 0.00138275 1.3626 -0.872863 -0.872871 + 587 588001 0.00137861 1.35603 -0.871402 -0.872871 + 588 589001 0.00137449 1.3666 -0.872523 -0.872871 + 589 590001 0.00137038 1.3674 -0.872344 -0.872871 + 590 591001 0.00136628 1.36803 -0.872176 -0.872871 + 591 592001 0.00136219 1.35847 -0.872241 -0.872871 + 592 593001 0.00135812 1.36606 -0.872623 -0.872871 + 593 594001 0.00135406 1.36121 -0.872765 -0.872871 + 594 595001 0.00135001 1.36789 -0.872214 -0.872871 + 595 596001 0.00134597 1.36256 -0.872862 -0.872871 + 596 597001 0.00134194 1.37111 -0.871032 -0.872871 + 597 598001 0.00133793 1.36379 -0.872859 -0.872871 + 598 599001 0.00133393 1.35218 -0.869374 -0.872871 + 599 600001 0.00132994 1.35903 -0.872382 -0.872871 + 600 601001 0.00132596 1.36535 -0.872729 -0.872871 + 601 602001 0.00132199 1.35313 -0.869955 -0.872871 + 602 603001 0.00131804 1.36631 -0.872578 -0.872871 + 603 604001 0.0013141 1.35686 -0.871726 -0.872871 + 604 605001 0.00131017 1.35392 -0.870401 -0.872871 + 605 606001 0.00130625 1.35453 -0.870717 -0.872871 + 606 607001 0.00130234 1.3581 -0.872136 -0.872871 + 607 608001 0.00129845 1.36816 -0.87214 -0.872871 + 608 609001 0.00129456 1.36221 -0.872847 -0.872871 + 609 610001 0.00129069 1.36332 -0.87287 -0.872871 + 610 611001 0.00128683 1.3673 -0.872367 -0.872871 + 611 612001 0.00128298 1.36123 -0.872767 -0.872871 + 612 613001 0.00127914 1.36295 -0.87287 -0.872871 + 613 614001 0.00127532 1.35909 -0.872396 -0.872871 + 614 615001 0.0012715 1.36361 -0.872864 -0.872871 + 615 616001 0.0012677 1.37071 -0.871209 -0.872871 + 616 617001 0.00126391 1.36319 -0.872871 -0.872871 + 617 618001 0.00126013 1.36313 -0.872871 -0.872871 + 618 619001 0.00125636 1.36924 -0.871791 -0.872871 + 619 620001 0.0012526 1.35652 -0.871598 -0.872871 + 620 621001 0.00124885 1.36422 -0.872837 -0.872871 + 621 622001 0.00124512 1.36763 -0.872284 -0.872871 + 622 623001 0.00124139 1.37126 -0.870962 -0.872871 + 623 624001 0.00123768 1.36319 -0.872871 -0.872871 + 624 625001 0.00123398 1.36594 -0.872642 -0.872871 + 625 626001 0.00123029 1.36094 -0.872732 -0.872871 + 626 627001 0.00122661 1.35974 -0.872537 -0.872871 + 627 628001 0.00122294 1.36172 -0.872813 -0.872871 + 628 629001 0.00121928 1.36462 -0.872807 -0.872871 + 629 630001 0.00121563 1.36037 -0.87265 -0.872871 + 630 631001 0.001212 1.35818 -0.872157 -0.872871 + 631 632001 0.00120837 1.35545 -0.871154 -0.872871 + 632 633001 0.00120476 1.35413 -0.87051 -0.872871 + 633 634001 0.00120116 1.35937 -0.87246 -0.872871 + 634 635001 0.00119756 1.35932 -0.872449 -0.872871 + 635 636001 0.00119398 1.36742 -0.872338 -0.872871 + 636 637001 0.00119041 1.35626 -0.871498 -0.872871 + 637 638001 0.00118685 1.36757 -0.872299 -0.872871 + 638 639001 0.0011833 1.36882 -0.871932 -0.872871 + 639 640001 0.00117976 1.35882 -0.872332 -0.872871 + 640 641001 0.00117623 1.35949 -0.872486 -0.872871 + 641 642001 0.00117271 1.36847 -0.872044 -0.872871 + 642 643001 0.00116921 1.36486 -0.872784 -0.872871 + 643 644001 0.00116571 1.36733 -0.872361 -0.872871 + 644 645001 0.00116222 1.35384 -0.870357 -0.872871 + 645 646001 0.00115875 1.36427 -0.872833 -0.872871 + 646 647001 0.00115528 1.36758 -0.872296 -0.872871 + 647 648001 0.00115182 1.36076 -0.872708 -0.872871 + 648 649001 0.00114838 1.36452 -0.872815 -0.872871 + 649 650001 0.00114494 1.35918 -0.872418 -0.872871 + 650 651001 0.00114152 1.36823 -0.872119 -0.872871 + 651 652001 0.00113811 1.36347 -0.872868 -0.872871 + 652 653001 0.0011347 1.3697 -0.871621 -0.872871 + 653 654001 0.00113131 1.3619 -0.872827 -0.872871 + 654 655001 0.00112792 1.3665 -0.872541 -0.872871 + 655 656001 0.00112455 1.36215 -0.872843 -0.872871 + 656 657001 0.00112119 1.36463 -0.872806 -0.872871 + 657 658001 0.00111783 1.36283 -0.872869 -0.872871 + 658 659001 0.00111449 1.35811 -0.872138 -0.872871 + 659 660001 0.00111116 1.36891 -0.871904 -0.872871 + 660 661001 0.00110783 1.35995 -0.872577 -0.872871 + 661 662001 0.00110452 1.36238 -0.872855 -0.872871 + 662 663001 0.00110122 1.36286 -0.872869 -0.872871 + 663 664001 0.00109792 1.36694 -0.872449 -0.872871 + 664 665001 0.00109464 1.36139 -0.872783 -0.872871 + 665 666001 0.00109136 1.3604 -0.872655 -0.872871 + 666 667001 0.0010881 1.35803 -0.872114 -0.872871 + 667 668001 0.00108484 1.36366 -0.872863 -0.872871 + 668 669001 0.0010816 1.36379 -0.872859 -0.872871 + 669 670001 0.00107837 1.36165 -0.872807 -0.872871 + 670 671001 0.00107514 1.36086 -0.872721 -0.872871 + 671 672001 0.00107192 1.36679 -0.872484 -0.872871 + 672 673001 0.00106872 1.35909 -0.872397 -0.872871 + 673 674001 0.00106552 1.36562 -0.872692 -0.872871 + 674 675001 0.00106233 1.37245 -0.870359 -0.872871 + 675 676001 0.00105916 1.3625 -0.87286 -0.872871 + 676 677001 0.00105599 1.3582 -0.872163 -0.872871 + 677 678001 0.00105283 1.36365 -0.872864 -0.872871 + 678 679001 0.00104968 1.35899 -0.872372 -0.872871 + 679 680001 0.00104654 1.36224 -0.872848 -0.872871 + 680 681001 0.00104341 1.36048 -0.872667 -0.872871 + 681 682001 0.00104029 1.36562 -0.872691 -0.872871 + 682 683001 0.00103718 1.36453 -0.872814 -0.872871 + 683 684001 0.00103408 1.35992 -0.872572 -0.872871 + 684 685001 0.00103098 1.36693 -0.872453 -0.872871 + 685 686001 0.0010279 1.36254 -0.872861 -0.872871 + 686 687001 0.00102483 1.36824 -0.872115 -0.872871 + 687 688001 0.00102176 1.35755 -0.871965 -0.872871 + 688 689001 0.0010187 1.36406 -0.872846 -0.872871 + 689 690001 0.00101566 1.36389 -0.872854 -0.872871 + 690 691001 0.00101262 1.36461 -0.872808 -0.872871 + 691 692001 0.00100959 1.35533 -0.871099 -0.872871 + 692 693001 0.00100657 1.36532 -0.872731 -0.872871 + 693 694001 0.00100356 1.36156 -0.8728 -0.872871 + 694 695001 0.00100056 1.36411 -0.872844 -0.872871 + 695 696001 0.000997566 1.35819 -0.87216 -0.872871 + 696 697001 0.000994582 1.36309 -0.872871 -0.872871 + 697 698001 0.000991607 1.36442 -0.872823 -0.872871 + 698 699001 0.000988641 1.36261 -0.872863 -0.872871 + 699 700001 0.000985684 1.36147 -0.872791 -0.872871 + 700 701001 0.000982736 1.35507 -0.870978 -0.872871 + 701 702001 0.000979797 1.36101 -0.872741 -0.872871 + 702 703001 0.000976866 1.36711 -0.872413 -0.872871 + 703 704001 0.000973944 1.36502 -0.872767 -0.872871 + 704 705001 0.000971031 1.36334 -0.87287 -0.872871 + 705 706001 0.000968127 1.36524 -0.872742 -0.872871 + 706 707001 0.000965231 1.36328 -0.872871 -0.872871 + 707 708001 0.000962344 1.35354 -0.870189 -0.872871 + 708 709001 0.000959466 1.36114 -0.872757 -0.872871 + 709 710001 0.000956596 1.3637 -0.872862 -0.872871 + 710 711001 0.000953735 1.35535 -0.871109 -0.872871 + 711 712001 0.000950882 1.36995 -0.871525 -0.872871 + 712 713001 0.000948038 1.36615 -0.872606 -0.872871 + 713 714001 0.000945202 1.36559 -0.872696 -0.872871 + 714 715001 0.000942375 1.36517 -0.872751 -0.872871 + 715 716001 0.000939556 1.371 -0.87108 -0.872871 + 716 717001 0.000936746 1.3632 -0.872871 -0.872871 + 717 718001 0.000933944 1.35744 -0.871928 -0.872871 + 718 719001 0.000931151 1.36004 -0.872593 -0.872871 + 719 720001 0.000928366 1.36458 -0.87281 -0.872871 + 720 721001 0.000925589 1.36931 -0.871766 -0.872871 + 721 722001 0.000922821 1.36014 -0.872611 -0.872871 + 722 723001 0.00092006 1.35872 -0.872304 -0.872871 + 723 724001 0.000917308 1.36377 -0.872859 -0.872871 + 724 725001 0.000914565 1.35852 -0.872252 -0.872871 + 725 726001 0.000911829 1.36911 -0.871837 -0.872871 + 726 727001 0.000909102 1.36687 -0.872467 -0.872871 + 727 728001 0.000906383 1.35309 -0.869931 -0.872871 + 728 729001 0.000903672 1.37063 -0.871242 -0.872871 + 729 730001 0.000900969 1.36644 -0.872554 -0.872871 + 730 731001 0.000898274 1.36738 -0.872349 -0.872871 + 731 732001 0.000895587 1.36226 -0.872849 -0.872871 + 732 733001 0.000892909 1.36152 -0.872796 -0.872871 + 733 734001 0.000890238 1.36796 -0.872196 -0.872871 + 734 735001 0.000887575 1.36851 -0.872034 -0.872871 + 735 736001 0.00088492 1.36574 -0.872674 -0.872871 + 736 737001 0.000882274 1.35826 -0.872181 -0.872871 + 737 738001 0.000879635 1.35813 -0.872145 -0.872871 + 738 739001 0.000877004 1.36273 -0.872867 -0.872871 + 739 740001 0.000874381 1.36833 -0.872089 -0.872871 + 740 741001 0.000871765 1.35915 -0.87241 -0.872871 + 741 742001 0.000869158 1.35948 -0.872483 -0.872871 + 742 743001 0.000866558 1.35829 -0.872188 -0.872871 + 743 744001 0.000863966 1.36289 -0.87287 -0.872871 + 744 745001 0.000861382 1.36202 -0.872836 -0.872871 + 745 746001 0.000858806 1.36155 -0.872798 -0.872871 + 746 747001 0.000856237 1.37042 -0.871334 -0.872871 + 747 748001 0.000853676 1.36189 -0.872826 -0.872871 + 748 749001 0.000851123 1.36451 -0.872816 -0.872871 + 749 750001 0.000848577 1.36106 -0.872746 -0.872871 + 750 751001 0.000846039 1.36355 -0.872866 -0.872871 + 751 752001 0.000843508 1.36382 -0.872858 -0.872871 + 752 753001 0.000840985 1.36166 -0.872808 -0.872871 + 753 754001 0.00083847 1.36154 -0.872797 -0.872871 + 754 755001 0.000835962 1.35798 -0.872101 -0.872871 + 755 756001 0.000833462 1.36525 -0.872741 -0.872871 + 756 757001 0.000830969 1.36833 -0.872088 -0.872871 + 757 758001 0.000828483 1.36298 -0.872871 -0.872871 + 758 759001 0.000826005 1.36331 -0.87287 -0.872871 + 759 760001 0.000823535 1.36146 -0.87279 -0.872871 + 760 761001 0.000821071 1.3542 -0.870547 -0.872871 + 761 762001 0.000818615 1.36001 -0.872588 -0.872871 + 762 763001 0.000816167 1.35866 -0.872289 -0.872871 + 763 764001 0.000813726 1.35784 -0.872056 -0.872871 + 764 765001 0.000811292 1.35984 -0.872556 -0.872871 + 765 766001 0.000808865 1.36139 -0.872783 -0.872871 + 766 767001 0.000806446 1.3684 -0.872068 -0.872871 + 767 768001 0.000804034 1.36663 -0.872516 -0.872871 + 768 769001 0.000801629 1.36485 -0.872786 -0.872871 + 769 770001 0.000799231 1.36366 -0.872863 -0.872871 + 770 771001 0.000796841 1.36585 -0.872656 -0.872871 + 771 772001 0.000794457 1.36478 -0.872792 -0.872871 + 772 773001 0.000792081 1.36449 -0.872818 -0.872871 + 773 774001 0.000789712 1.3625 -0.87286 -0.872871 + 774 775001 0.00078735 1.35714 -0.871826 -0.872871 + 775 776001 0.000784995 1.35575 -0.871287 -0.872871 + 776 777001 0.000782647 1.36554 -0.872702 -0.872871 + 777 778001 0.000780306 1.36192 -0.872828 -0.872871 + 778 779001 0.000777972 1.36058 -0.872682 -0.872871 + 779 780001 0.000775645 1.36158 -0.872802 -0.872871 + 780 781001 0.000773325 1.35714 -0.871828 -0.872871 + 781 782001 0.000771012 1.35913 -0.872406 -0.872871 + 782 783001 0.000768706 1.37067 -0.871226 -0.872871 + 783 784001 0.000766407 1.36358 -0.872865 -0.872871 + 784 785001 0.000764115 1.37209 -0.87055 -0.872871 + 785 786001 0.000761829 1.36342 -0.872869 -0.872871 + 786 787001 0.00075955 1.36347 -0.872868 -0.872871 + 787 788001 0.000757279 1.36002 -0.87259 -0.872871 + 788 789001 0.000755014 1.36031 -0.87264 -0.872871 + 789 790001 0.000752755 1.3633 -0.87287 -0.872871 + 790 791001 0.000750504 1.35722 -0.871855 -0.872871 + 791 792001 0.000748259 1.36779 -0.872242 -0.872871 + 792 793001 0.000746021 1.36131 -0.872775 -0.872871 + 793 794001 0.00074379 1.35909 -0.872396 -0.872871 + 794 795001 0.000741565 1.36358 -0.872865 -0.872871 + 795 796001 0.000739347 1.36943 -0.871724 -0.872871 + 796 797001 0.000737135 1.35745 -0.871933 -0.872871 + 797 798001 0.000734931 1.36768 -0.872271 -0.872871 + 798 799001 0.000732732 1.35962 -0.872513 -0.872871 + 799 800001 0.000730541 1.36914 -0.871825 -0.872871 + 800 801001 0.000728356 1.36705 -0.872426 -0.872871 + 801 802001 0.000726177 1.36543 -0.872717 -0.872871 + 802 803001 0.000724005 1.3659 -0.872649 -0.872871 + 803 804001 0.00072184 1.35906 -0.87239 -0.872871 + 804 805001 0.000719681 1.36344 -0.872868 -0.872871 + 805 806001 0.000717528 1.36602 -0.872628 -0.872871 + 806 807001 0.000715382 1.36774 -0.872256 -0.872871 + 807 808001 0.000713242 1.3632 -0.872871 -0.872871 + 808 809001 0.000711109 1.36476 -0.872794 -0.872871 + 809 810001 0.000708982 1.36415 -0.872841 -0.872871 + 810 811001 0.000706861 1.36339 -0.872869 -0.872871 + 811 812001 0.000704747 1.36324 -0.872871 -0.872871 + 812 813001 0.000702639 1.36142 -0.872786 -0.872871 + 813 814001 0.000700538 1.35976 -0.872541 -0.872871 + 814 815001 0.000698442 1.36461 -0.872808 -0.872871 + 815 816001 0.000696353 1.3652 -0.872747 -0.872871 + 816 817001 0.00069427 1.35712 -0.871819 -0.872871 + 817 818001 0.000692194 1.36273 -0.872867 -0.872871 + 818 819001 0.000690123 1.36259 -0.872863 -0.872871 + 819 820001 0.000688059 1.36756 -0.872303 -0.872871 + 820 821001 0.000686001 1.36319 -0.872871 -0.872871 + 821 822001 0.000683949 1.36672 -0.872497 -0.872871 + 822 823001 0.000681904 1.36774 -0.872257 -0.872871 + 823 824001 0.000679864 1.36625 -0.872588 -0.872871 + 824 825001 0.000677831 1.35879 -0.872323 -0.872871 + 825 826001 0.000675803 1.35983 -0.872554 -0.872871 + 826 827001 0.000673782 1.36623 -0.872592 -0.872871 + 827 828001 0.000671767 1.36211 -0.872841 -0.872871 + 828 829001 0.000669757 1.36048 -0.872667 -0.872871 + 829 830001 0.000667754 1.36969 -0.871627 -0.872871 + 830 831001 0.000665757 1.36714 -0.872406 -0.872871 + 831 832001 0.000663765 1.35992 -0.872572 -0.872871 + 832 833001 0.00066178 1.36301 -0.872871 -0.872871 + 833 834001 0.000659801 1.36734 -0.872358 -0.872871 + 834 835001 0.000657827 1.36353 -0.872867 -0.872871 + 835 836001 0.00065586 1.36274 -0.872867 -0.872871 + 836 837001 0.000653898 1.36681 -0.872479 -0.872871 + 837 838001 0.000651942 1.36606 -0.872622 -0.872871 + 838 839001 0.000649992 1.36215 -0.872843 -0.872871 + 839 840001 0.000648048 1.36247 -0.872859 -0.872871 + 840 841001 0.00064611 1.36049 -0.872668 -0.872871 + 841 842001 0.000644177 1.36752 -0.872312 -0.872871 + 842 843001 0.00064225 1.35992 -0.872571 -0.872871 + 843 844001 0.000640329 1.36357 -0.872866 -0.872871 + 844 845001 0.000638414 1.36056 -0.872679 -0.872871 + 845 846001 0.000636505 1.35748 -0.871941 -0.872871 + 846 847001 0.000634601 1.36902 -0.871867 -0.872871 + 847 848001 0.000632703 1.36376 -0.87286 -0.872871 + 848 849001 0.00063081 1.37013 -0.871455 -0.872871 + 849 850001 0.000628924 1.36757 -0.872301 -0.872871 + 850 851001 0.000627042 1.36152 -0.872796 -0.872871 + 851 852001 0.000625167 1.36131 -0.872774 -0.872871 + 852 853001 0.000623297 1.3603 -0.872638 -0.872871 + 853 854001 0.000621433 1.35714 -0.871827 -0.872871 + 854 855001 0.000619574 1.36582 -0.872661 -0.872871 + 855 856001 0.000617721 1.36807 -0.872164 -0.872871 + 856 857001 0.000615873 1.36099 -0.872738 -0.872871 + 857 858001 0.000614031 1.3713 -0.870942 -0.872871 + 858 859001 0.000612195 1.36258 -0.872862 -0.872871 + 859 860001 0.000610363 1.35747 -0.87194 -0.872871 + 860 861001 0.000608538 1.36144 -0.872788 -0.872871 + 861 862001 0.000606718 1.35959 -0.872507 -0.872871 + 862 863001 0.000604903 1.35959 -0.872507 -0.872871 + 863 864001 0.000603094 1.3621 -0.87284 -0.872871 + 864 865001 0.00060129 1.36425 -0.872835 -0.872871 + 865 866001 0.000599491 1.35953 -0.872494 -0.872871 + 866 867001 0.000597698 1.35934 -0.872455 -0.872871 + 867 868001 0.000595911 1.36376 -0.87286 -0.872871 + 868 869001 0.000594128 1.36274 -0.872867 -0.872871 + 869 870001 0.000592351 1.36081 -0.872715 -0.872871 + 870 871001 0.000590579 1.36426 -0.872834 -0.872871 + 871 872001 0.000588813 1.3656 -0.872695 -0.872871 + 872 873001 0.000587052 1.36599 -0.872634 -0.872871 + 873 874001 0.000585296 1.37014 -0.871448 -0.872871 + 874 875001 0.000583545 1.36366 -0.872863 -0.872871 + 875 876001 0.0005818 1.36094 -0.872732 -0.872871 + 876 877001 0.00058006 1.36571 -0.872679 -0.872871 + 877 878001 0.000578325 1.36001 -0.872588 -0.872871 + 878 879001 0.000576595 1.36311 -0.872871 -0.872871 + 879 880001 0.00057487 1.35965 -0.872518 -0.872871 + 880 881001 0.000573151 1.36703 -0.87243 -0.872871 + 881 882001 0.000571437 1.36317 -0.872871 -0.872871 + 882 883001 0.000569727 1.36463 -0.872806 -0.872871 + 883 884001 0.000568023 1.36304 -0.872871 -0.872871 + 884 885001 0.000566324 1.36445 -0.87282 -0.872871 + 885 886001 0.00056463 1.3674 -0.872343 -0.872871 + 886 887001 0.000562942 1.36924 -0.87179 -0.872871 + 887 888001 0.000561258 1.36122 -0.872766 -0.872871 + 888 889001 0.000559579 1.36427 -0.872833 -0.872871 + 889 890001 0.000557905 1.36101 -0.872741 -0.872871 + 890 891001 0.000556237 1.35674 -0.871681 -0.872871 + 891 892001 0.000554573 1.36364 -0.872864 -0.872871 + 892 893001 0.000552914 1.3638 -0.872858 -0.872871 + 893 894001 0.00055126 1.36486 -0.872785 -0.872871 + 894 895001 0.000549612 1.36618 -0.872602 -0.872871 + 895 896001 0.000547968 1.36431 -0.872831 -0.872871 + 896 897001 0.000546329 1.36147 -0.872791 -0.872871 + 897 898001 0.000544695 1.36441 -0.872824 -0.872871 + 898 899001 0.000543065 1.37013 -0.871455 -0.872871 + 899 900001 0.000541441 1.35838 -0.872216 -0.872871 + 900 901001 0.000539822 1.36367 -0.872863 -0.872871 + 901 902001 0.000538207 1.36321 -0.872871 -0.872871 + 902 903001 0.000536597 1.36206 -0.872838 -0.872871 + 903 904001 0.000534992 1.36764 -0.872282 -0.872871 + 904 905001 0.000533392 1.35984 -0.872556 -0.872871 + 905 906001 0.000531797 1.36195 -0.87283 -0.872871 + 906 907001 0.000530206 1.3631 -0.872871 -0.872871 + 907 908001 0.00052862 1.3579 -0.872076 -0.872871 + 908 909001 0.000527039 1.36618 -0.872601 -0.872871 + 909 910001 0.000525463 1.35773 -0.872022 -0.872871 + 910 911001 0.000523891 1.3673 -0.872368 -0.872871 + 911 912001 0.000522324 1.3631 -0.872871 -0.872871 + 912 913001 0.000520762 1.36224 -0.872848 -0.872871 + 913 914001 0.000519204 1.36509 -0.87276 -0.872871 + 914 915001 0.000517651 1.36441 -0.872824 -0.872871 + 915 916001 0.000516103 1.36586 -0.872655 -0.872871 + 916 917001 0.000514559 1.36662 -0.872518 -0.872871 + 917 918001 0.00051302 1.36347 -0.872868 -0.872871 + 918 919001 0.000511486 1.36132 -0.872777 -0.872871 + 919 920001 0.000509956 1.36319 -0.872871 -0.872871 + 920 921001 0.000508431 1.36335 -0.87287 -0.872871 + 921 922001 0.00050691 1.3679 -0.872212 -0.872871 + 922 923001 0.000505394 1.3644 -0.872824 -0.872871 + 923 924001 0.000503882 1.36273 -0.872867 -0.872871 + 924 925001 0.000502375 1.36403 -0.872848 -0.872871 + 925 926001 0.000500872 1.36403 -0.872848 -0.872871 + 926 927001 0.000499374 1.36403 -0.872848 -0.872871 + 927 928001 0.00049788 1.36778 -0.872244 -0.872871 + 928 929001 0.000496391 1.36273 -0.872867 -0.872871 + 929 930001 0.000494907 1.36245 -0.872858 -0.872871 + 930 931001 0.000493426 1.36307 -0.872871 -0.872871 + 931 932001 0.00049195 1.35921 -0.872424 -0.872871 + 932 933001 0.000490479 1.36139 -0.872784 -0.872871 + 933 934001 0.000489012 1.36502 -0.872767 -0.872871 + 934 935001 0.000487549 1.36033 -0.872643 -0.872871 + 935 936001 0.000486091 1.36587 -0.872653 -0.872871 + 936 937001 0.000484637 1.36311 -0.872871 -0.872871 + 937 938001 0.000483188 1.36373 -0.872861 -0.872871 + 938 939001 0.000481742 1.36313 -0.872871 -0.872871 + 939 940001 0.000480301 1.36032 -0.872642 -0.872871 + 940 941001 0.000478865 1.36913 -0.87183 -0.872871 + 941 942001 0.000477433 1.36294 -0.87287 -0.872871 + 942 943001 0.000476005 1.36495 -0.872775 -0.872871 + 943 944001 0.000474581 1.36691 -0.872457 -0.872871 + 944 945001 0.000473161 1.36686 -0.872468 -0.872871 + 945 946001 0.000471746 1.36688 -0.872463 -0.872871 + 946 947001 0.000470335 1.36308 -0.872871 -0.872871 + 947 948001 0.000468928 1.36482 -0.872789 -0.872871 + 948 949001 0.000467526 1.36195 -0.872831 -0.872871 + 949 950001 0.000466127 1.36542 -0.872719 -0.872871 + 950 951001 0.000464733 1.36673 -0.872495 -0.872871 + 951 952001 0.000463343 1.36435 -0.872828 -0.872871 + 952 953001 0.000461957 1.36421 -0.872837 -0.872871 + 953 954001 0.000460575 1.36126 -0.87277 -0.872871 + 954 955001 0.000459198 1.3603 -0.872639 -0.872871 + 955 956001 0.000457824 1.36138 -0.872782 -0.872871 + 956 957001 0.000456455 1.36434 -0.872829 -0.872871 + 957 958001 0.00045509 1.36263 -0.872864 -0.872871 + 958 959001 0.000453729 1.3647 -0.8728 -0.872871 + 959 960001 0.000452371 1.35968 -0.872524 -0.872871 + 960 961001 0.000451018 1.35798 -0.872098 -0.872871 + 961 962001 0.000449669 1.36319 -0.872871 -0.872871 + 962 963001 0.000448324 1.36422 -0.872837 -0.872871 + 963 964001 0.000446983 1.36203 -0.872836 -0.872871 + 964 965001 0.000445647 1.36043 -0.872659 -0.872871 + 965 966001 0.000444314 1.36729 -0.872371 -0.872871 + 966 967001 0.000442985 1.37151 -0.870844 -0.872871 + 967 968001 0.00044166 1.36535 -0.872728 -0.872871 + 968 969001 0.000440339 1.36535 -0.872728 -0.872871 + 969 970001 0.000439022 1.363 -0.872871 -0.872871 + 970 971001 0.000437708 1.36594 -0.872642 -0.872871 + 971 972001 0.000436399 1.36311 -0.872871 -0.872871 + 972 973001 0.000435094 1.36419 -0.872839 -0.872871 + 973 974001 0.000433793 1.36258 -0.872862 -0.872871 + 974 975001 0.000432495 1.36318 -0.872871 -0.872871 + 975 976001 0.000431202 1.3573 -0.871881 -0.872871 + 976 977001 0.000429912 1.36288 -0.872869 -0.872871 + 977 978001 0.000428626 1.36275 -0.872867 -0.872871 + 978 979001 0.000427344 1.36272 -0.872866 -0.872871 + 979 980001 0.000426066 1.36116 -0.872759 -0.872871 + 980 981001 0.000424791 1.36125 -0.872768 -0.872871 + 981 982001 0.000423521 1.36465 -0.872804 -0.872871 + 982 983001 0.000422254 1.36249 -0.872859 -0.872871 + 983 984001 0.000420991 1.36692 -0.872455 -0.872871 + 984 985001 0.000419732 1.36214 -0.872843 -0.872871 + 985 986001 0.000418476 1.36129 -0.872772 -0.872871 + 986 987001 0.000417225 1.36434 -0.872828 -0.872871 + 987 988001 0.000415977 1.36606 -0.872622 -0.872871 + 988 989001 0.000414733 1.36031 -0.87264 -0.872871 + 989 990001 0.000413492 1.36632 -0.872576 -0.872871 + 990 991001 0.000412255 1.36248 -0.872859 -0.872871 + 991 992001 0.000411022 1.36208 -0.872839 -0.872871 + 992 993001 0.000409793 1.36041 -0.872656 -0.872871 + 993 994001 0.000408567 1.36633 -0.872574 -0.872871 + 994 995001 0.000407345 1.36787 -0.87222 -0.872871 + 995 996001 0.000406127 1.36254 -0.872861 -0.872871 + 996 997001 0.000404912 1.36359 -0.872865 -0.872871 + 997 998001 0.000403701 1.36359 -0.872865 -0.872871 + 998 999001 0.000402493 1.36816 -0.872137 -0.872871 + 999 1000001 0.00040129 1.3633 -0.87287 -0.872871 + 1000 1001001 0.000400089 1.36013 -0.872609 -0.872871 + 1001 1002001 0.000398893 1.35879 -0.872324 -0.872871 + 1002 1003001 0.0003977 1.35898 -0.872371 -0.872871 + 1003 1004001 0.00039651 1.36044 -0.872661 -0.872871 + 1004 1005001 0.000395324 1.36323 -0.872871 -0.872871 + 1005 1006001 0.000394142 1.36405 -0.872846 -0.872871 + 1006 1007001 0.000392963 1.36426 -0.872834 -0.872871 + 1007 1008001 0.000391787 1.36273 -0.872867 -0.872871 + 1008 1009001 0.000390616 1.36387 -0.872855 -0.872871 + 1009 1010001 0.000389447 1.36545 -0.872716 -0.872871 + 1010 1011001 0.000388282 1.36385 -0.872856 -0.872871 + 1011 1012001 0.000387121 1.36801 -0.872182 -0.872871 + 1012 1013001 0.000385963 1.36536 -0.872727 -0.872871 + 1013 1014001 0.000384809 1.36579 -0.872667 -0.872871 + 1014 1015001 0.000383658 1.3632 -0.872871 -0.872871 + 1015 1016001 0.00038251 1.36117 -0.87276 -0.872871 + 1016 1017001 0.000381366 1.36095 -0.872733 -0.872871 + 1017 1018001 0.000380225 1.3664 -0.872562 -0.872871 + 1018 1019001 0.000379088 1.36417 -0.87284 -0.872871 + 1019 1020001 0.000377954 1.36178 -0.872819 -0.872871 + 1020 1021001 0.000376824 1.36634 -0.872572 -0.872871 + 1021 1022001 0.000375697 1.36589 -0.87265 -0.872871 + 1022 1023001 0.000374573 1.36425 -0.872835 -0.872871 + 1023 1024001 0.000373453 1.36156 -0.8728 -0.872871 + 1024 1025001 0.000372336 1.36708 -0.87242 -0.872871 + 1025 1026001 0.000371222 1.3598 -0.872548 -0.872871 + 1026 1027001 0.000370112 1.36262 -0.872864 -0.872871 + 1027 1028001 0.000369005 1.36378 -0.872859 -0.872871 + 1028 1029001 0.000367901 1.36519 -0.872748 -0.872871 + 1029 1030001 0.0003668 1.36515 -0.872753 -0.872871 + 1030 1031001 0.000365703 1.3601 -0.872605 -0.872871 + 1031 1032001 0.00036461 1.36379 -0.872859 -0.872871 + 1032 1033001 0.000363519 1.36076 -0.872707 -0.872871 + 1033 1034001 0.000362432 1.36056 -0.872679 -0.872871 + 1034 1035001 0.000361348 1.36597 -0.872637 -0.872871 + 1035 1036001 0.000360267 1.3597 -0.87253 -0.872871 + 1036 1037001 0.000359189 1.36519 -0.872748 -0.872871 + 1037 1038001 0.000358115 1.36388 -0.872855 -0.872871 + 1038 1039001 0.000357044 1.3585 -0.872247 -0.872871 + 1039 1040001 0.000355976 1.35857 -0.872266 -0.872871 + 1040 1041001 0.000354911 1.36244 -0.872857 -0.872871 + 1041 1042001 0.00035385 1.36827 -0.872106 -0.872871 + 1042 1043001 0.000352791 1.36311 -0.872871 -0.872871 + 1043 1044001 0.000351736 1.3575 -0.871947 -0.872871 + 1044 1045001 0.000350684 1.36111 -0.872753 -0.872871 + 1045 1046001 0.000349635 1.35875 -0.872312 -0.872871 + 1046 1047001 0.000348589 1.36477 -0.872793 -0.872871 + 1047 1048001 0.000347547 1.36178 -0.872819 -0.872871 + 1048 1049001 0.000346507 1.36469 -0.872801 -0.872871 + 1049 1050001 0.000345471 1.36429 -0.872832 -0.872871 + 1050 1051001 0.000344437 1.36506 -0.872764 -0.872871 + 1051 1052001 0.000343407 1.36387 -0.872855 -0.872871 + 1052 1053001 0.00034238 1.36509 -0.87276 -0.872871 + 1053 1054001 0.000341356 1.36212 -0.872842 -0.872871 + 1054 1055001 0.000340335 1.3641 -0.872844 -0.872871 + 1055 1056001 0.000339317 1.36357 -0.872865 -0.872871 + 1056 1057001 0.000338302 1.36211 -0.872841 -0.872871 + 1057 1058001 0.00033729 1.36118 -0.87276 -0.872871 + 1058 1059001 0.000336281 1.36303 -0.872871 -0.872871 + 1059 1060001 0.000335276 1.36268 -0.872865 -0.872871 + 1060 1061001 0.000334273 1.36276 -0.872867 -0.872871 + 1061 1062001 0.000333273 1.36395 -0.872852 -0.872871 + 1062 1063001 0.000332276 1.36104 -0.872744 -0.872871 + 1063 1064001 0.000331282 1.36124 -0.872768 -0.872871 + 1064 1065001 0.000330291 1.36263 -0.872864 -0.872871 + 1065 1066001 0.000329303 1.36263 -0.872864 -0.872871 + 1066 1067001 0.000328319 1.36364 -0.872864 -0.872871 + 1067 1068001 0.000327337 1.36353 -0.872867 -0.872871 + 1068 1069001 0.000326357 1.36353 -0.872867 -0.872871 + 1069 1070001 0.000325381 1.36344 -0.872868 -0.872871 + 1070 1071001 0.000324408 1.36344 -0.872868 -0.872871 + 1071 1072001 0.000323438 1.36076 -0.872708 -0.872871 + 1072 1073001 0.00032247 1.36184 -0.872823 -0.872871 + 1073 1074001 0.000321506 1.36232 -0.872852 -0.872871 + 1074 1075001 0.000320544 1.35925 -0.872434 -0.872871 + 1075 1076001 0.000319585 1.3654 -0.872721 -0.872871 + 1076 1077001 0.00031863 1.36145 -0.872789 -0.872871 + 1077 1078001 0.000317677 1.36502 -0.872767 -0.872871 + 1078 1079001 0.000316726 1.3666 -0.872523 -0.872871 + 1079 1080001 0.000315779 1.36509 -0.872759 -0.872871 + 1080 1081001 0.000314835 1.36518 -0.87275 -0.872871 + 1081 1082001 0.000313893 1.35987 -0.872561 -0.872871 + 1082 1083001 0.000312954 1.36265 -0.872865 -0.872871 + 1083 1084001 0.000312018 1.36598 -0.872636 -0.872871 + 1084 1085001 0.000311085 1.36197 -0.872832 -0.872871 + 1085 1086001 0.000310154 1.36223 -0.872848 -0.872871 + 1086 1087001 0.000309227 1.36379 -0.872858 -0.872871 + 1087 1088001 0.000308302 1.36122 -0.872765 -0.872871 + 1088 1089001 0.000307379 1.36289 -0.87287 -0.872871 + 1089 1090001 0.00030646 1.36249 -0.872859 -0.872871 + 1090 1091001 0.000305543 1.3649 -0.87278 -0.872871 + 1091 1092001 0.00030463 1.36049 -0.872668 -0.872871 + 1092 1093001 0.000303718 1.36541 -0.872721 -0.872871 + 1093 1094001 0.00030281 1.35666 -0.871652 -0.872871 + 1094 1095001 0.000301904 1.36574 -0.872674 -0.872871 + 1095 1096001 0.000301001 1.3633 -0.87287 -0.872871 + 1096 1097001 0.000300101 1.3633 -0.87287 -0.872871 + 1097 1098001 0.000299203 1.3657 -0.87268 -0.872871 + 1098 1099001 0.000298308 1.36507 -0.872762 -0.872871 + 1099 1100001 0.000297416 1.36082 -0.872716 -0.872871 + 1100 1101001 0.000296527 1.36307 -0.872871 -0.872871 + 1101 1102001 0.00029564 1.36425 -0.872835 -0.872871 + 1102 1103001 0.000294755 1.36425 -0.872835 -0.872871 + 1103 1104001 0.000293874 1.36421 -0.872838 -0.872871 + 1104 1105001 0.000292995 1.36228 -0.87285 -0.872871 + 1105 1106001 0.000292118 1.36313 -0.872871 -0.872871 + 1106 1107001 0.000291245 1.36313 -0.872871 -0.872871 + 1107 1108001 0.000290374 1.36321 -0.872871 -0.872871 + 1108 1109001 0.000289505 1.36226 -0.872849 -0.872871 + 1109 1110001 0.000288639 1.36669 -0.872505 -0.872871 + 1110 1111001 0.000287776 1.36429 -0.872832 -0.872871 + 1111 1112001 0.000286915 1.36429 -0.872832 -0.872871 + 1112 1113001 0.000286057 1.36187 -0.872825 -0.872871 + 1113 1114001 0.000285201 1.36514 -0.872754 -0.872871 + 1114 1115001 0.000284348 1.36682 -0.872476 -0.872871 + 1115 1116001 0.000283498 1.3648 -0.872791 -0.872871 + 1116 1117001 0.00028265 1.36239 -0.872855 -0.872871 + 1117 1118001 0.000281804 1.36613 -0.87261 -0.872871 + 1118 1119001 0.000280962 1.36275 -0.872867 -0.872871 + 1119 1120001 0.000280121 1.35968 -0.872526 -0.872871 + 1120 1121001 0.000279283 1.36144 -0.872789 -0.872871 + 1121 1122001 0.000278448 1.36665 -0.872511 -0.872871 + 1122 1123001 0.000277615 1.362 -0.872834 -0.872871 + 1123 1124001 0.000276785 1.36083 -0.872717 -0.872871 + 1124 1125001 0.000275957 1.36152 -0.872796 -0.872871 + 1125 1126001 0.000275132 1.36342 -0.872869 -0.872871 + 1126 1127001 0.000274309 1.36342 -0.872869 -0.872871 + 1127 1128001 0.000273488 1.36302 -0.872871 -0.872871 + 1128 1129001 0.00027267 1.36542 -0.872719 -0.872871 + 1129 1130001 0.000271855 1.36216 -0.872844 -0.872871 + 1130 1131001 0.000271041 1.36054 -0.872677 -0.872871 + 1131 1132001 0.000270231 1.36195 -0.87283 -0.872871 + 1132 1133001 0.000269422 1.36134 -0.872778 -0.872871 + 1133 1134001 0.000268617 1.36384 -0.872857 -0.872871 + 1134 1135001 0.000267813 1.36486 -0.872785 -0.872871 + 1135 1136001 0.000267012 1.36064 -0.872691 -0.872871 + 1136 1137001 0.000266214 1.36517 -0.87275 -0.872871 + 1137 1138001 0.000265417 1.36247 -0.872858 -0.872871 + 1138 1139001 0.000264623 1.36396 -0.872851 -0.872871 + 1139 1140001 0.000263832 1.36327 -0.872871 -0.872871 + 1140 1141001 0.000263043 1.36402 -0.872848 -0.872871 + 1141 1142001 0.000262256 1.36091 -0.872729 -0.872871 + 1142 1143001 0.000261472 1.36273 -0.872867 -0.872871 + 1143 1144001 0.00026069 1.36598 -0.872636 -0.872871 + 1144 1145001 0.00025991 1.36567 -0.872683 -0.872871 + 1145 1146001 0.000259132 1.36193 -0.872829 -0.872871 + 1146 1147001 0.000258357 1.36305 -0.872871 -0.872871 + 1147 1148001 0.000257585 1.36212 -0.872842 -0.872871 + 1148 1149001 0.000256814 1.36845 -0.872051 -0.872871 + 1149 1150001 0.000256046 1.363 -0.872871 -0.872871 + 1150 1151001 0.00025528 1.36597 -0.872638 -0.872871 + 1151 1152001 0.000254517 1.36242 -0.872857 -0.872871 + 1152 1153001 0.000253755 1.36525 -0.872741 -0.872871 + 1153 1154001 0.000252996 1.36314 -0.872871 -0.872871 + 1154 1155001 0.00025224 1.36199 -0.872834 -0.872871 + 1155 1156001 0.000251485 1.36559 -0.872696 -0.872871 + 1156 1157001 0.000250733 1.35875 -0.872312 -0.872871 + 1157 1158001 0.000249983 1.3637 -0.872862 -0.872871 + 1158 1159001 0.000249235 1.36209 -0.87284 -0.872871 + 1159 1160001 0.00024849 1.36342 -0.872869 -0.872871 + 1160 1161001 0.000247747 1.36327 -0.872871 -0.872871 + 1161 1162001 0.000247006 1.36327 -0.872871 -0.872871 + 1162 1163001 0.000246267 1.36413 -0.872842 -0.872871 + 1163 1164001 0.00024553 1.36413 -0.872842 -0.872871 + 1164 1165001 0.000244796 1.36066 -0.872693 -0.872871 + 1165 1166001 0.000244064 1.36152 -0.872796 -0.872871 + 1166 1167001 0.000243334 1.36421 -0.872838 -0.872871 + 1167 1168001 0.000242606 1.36114 -0.872756 -0.872871 + 1168 1169001 0.00024188 1.36162 -0.872805 -0.872871 + 1169 1170001 0.000241157 1.3643 -0.872832 -0.872871 + 1170 1171001 0.000240435 1.36674 -0.872493 -0.872871 + 1171 1172001 0.000239716 1.36533 -0.872731 -0.872871 + 1172 1173001 0.000238999 1.36003 -0.872591 -0.872871 + 1173 1174001 0.000238284 1.364 -0.872849 -0.872871 + 1174 1175001 0.000237572 1.36194 -0.87283 -0.872871 + 1175 1176001 0.000236861 1.36088 -0.872724 -0.872871 + 1176 1177001 0.000236153 1.36086 -0.872721 -0.872871 + 1177 1178001 0.000235446 1.36304 -0.872871 -0.872871 + 1178 1179001 0.000234742 1.36291 -0.87287 -0.872871 + 1179 1180001 0.00023404 1.36018 -0.872617 -0.872871 + 1180 1181001 0.00023334 1.36241 -0.872856 -0.872871 + 1181 1182001 0.000232642 1.36353 -0.872867 -0.872871 + 1182 1183001 0.000231946 1.36371 -0.872862 -0.872871 + 1183 1184001 0.000231252 1.36204 -0.872837 -0.872871 + 1184 1185001 0.000230561 1.36075 -0.872706 -0.872871 + 1185 1186001 0.000229871 1.36376 -0.87286 -0.872871 + 1186 1187001 0.000229184 1.36404 -0.872847 -0.872871 + 1187 1188001 0.000228498 1.36574 -0.872673 -0.872871 + 1188 1189001 0.000227815 1.36355 -0.872866 -0.872871 + 1189 1190001 0.000227133 1.36263 -0.872864 -0.872871 + 1190 1191001 0.000226454 1.36204 -0.872837 -0.872871 + 1191 1192001 0.000225777 1.36124 -0.872767 -0.872871 + 1192 1193001 0.000225101 1.36353 -0.872867 -0.872871 + 1193 1194001 0.000224428 1.36287 -0.872869 -0.872871 + 1194 1195001 0.000223757 1.36312 -0.872871 -0.872871 + 1195 1196001 0.000223087 1.36312 -0.872871 -0.872871 + 1196 1197001 0.00022242 1.36327 -0.872871 -0.872871 + 1197 1198001 0.000221755 1.35818 -0.872157 -0.872871 + 1198 1199001 0.000221092 1.36099 -0.872738 -0.872871 + 1199 1200001 0.00022043 1.36115 -0.872757 -0.872871 + 1200 1201001 0.000219771 1.36272 -0.872866 -0.872871 + 1201 1202001 0.000219114 1.36362 -0.872864 -0.872871 + 1202 1203001 0.000218458 1.36236 -0.872854 -0.872871 + 1203 1204001 0.000217805 1.36236 -0.872854 -0.872871 + 1204 1205001 0.000217153 1.36277 -0.872868 -0.872871 + 1205 1206001 0.000216504 1.36343 -0.872869 -0.872871 + 1206 1207001 0.000215856 1.36177 -0.872817 -0.872871 + 1207 1208001 0.000215211 1.36386 -0.872856 -0.872871 + 1208 1209001 0.000214567 1.35774 -0.872027 -0.872871 + 1209 1210001 0.000213925 1.36105 -0.872746 -0.872871 + 1210 1211001 0.000213285 1.36053 -0.872674 -0.872871 + 1211 1212001 0.000212647 1.36532 -0.872732 -0.872871 + 1212 1213001 0.000212011 1.36071 -0.872701 -0.872871 + 1213 1214001 0.000211377 1.36262 -0.872864 -0.872871 + 1214 1215001 0.000210745 1.36305 -0.872871 -0.872871 + 1215 1216001 0.000210115 1.36039 -0.872653 -0.872871 + 1216 1217001 0.000209486 1.3639 -0.872854 -0.872871 + 1217 1218001 0.00020886 1.36313 -0.872871 -0.872871 + 1218 1219001 0.000208235 1.365 -0.872769 -0.872871 + 1219 1220001 0.000207612 1.36007 -0.872599 -0.872871 + 1220 1221001 0.000206991 1.36285 -0.872869 -0.872871 + 1221 1222001 0.000206372 1.35941 -0.87247 -0.872871 + 1222 1223001 0.000205755 1.36246 -0.872858 -0.872871 + 1223 1224001 0.000205139 1.36378 -0.872859 -0.872871 + 1224 1225001 0.000204526 1.36333 -0.87287 -0.872871 + 1225 1226001 0.000203914 1.36148 -0.872792 -0.872871 + 1226 1227001 0.000203304 1.36399 -0.87285 -0.872871 + 1227 1228001 0.000202696 1.36454 -0.872813 -0.872871 + 1228 1229001 0.00020209 1.36454 -0.872813 -0.872871 + 1229 1230001 0.000201485 1.36379 -0.872859 -0.872871 + 1230 1231001 0.000200883 1.36541 -0.87272 -0.872871 + 1231 1232001 0.000200282 1.36195 -0.872831 -0.872871 + 1232 1233001 0.000199683 1.36454 -0.872814 -0.872871 + 1233 1234001 0.000199085 1.36088 -0.872724 -0.872871 + 1234 1235001 0.00019849 1.36711 -0.872413 -0.872871 + 1235 1236001 0.000197896 1.36318 -0.872871 -0.872871 + 1236 1237001 0.000197304 1.36106 -0.872747 -0.872871 + 1237 1238001 0.000196714 1.36243 -0.872857 -0.872871 + 1238 1239001 0.000196126 1.36449 -0.872817 -0.872871 + 1239 1240001 0.000195539 1.36371 -0.872862 -0.872871 + 1240 1241001 0.000194954 1.36435 -0.872828 -0.872871 + 1241 1242001 0.000194371 1.36108 -0.872749 -0.872871 + 1242 1243001 0.00019379 1.3638 -0.872858 -0.872871 + 1243 1244001 0.00019321 1.3638 -0.872858 -0.872871 + 1244 1245001 0.000192632 1.36265 -0.872865 -0.872871 + 1245 1246001 0.000192056 1.36265 -0.872865 -0.872871 + 1246 1247001 0.000191482 1.36129 -0.872773 -0.872871 + 1247 1248001 0.000190909 1.36326 -0.872871 -0.872871 + 1248 1249001 0.000190338 1.36251 -0.87286 -0.872871 + 1249 1250001 0.000189769 1.36188 -0.872826 -0.872871 + 1250 1251001 0.000189201 1.36573 -0.872675 -0.872871 + 1251 1252001 0.000188635 1.36535 -0.872728 -0.872871 + 1252 1253001 0.000188071 1.36517 -0.872751 -0.872871 + 1253 1254001 0.000187508 1.35986 -0.872561 -0.872871 + 1254 1255001 0.000186948 1.36587 -0.872654 -0.872871 + 1255 1256001 0.000186388 1.36403 -0.872848 -0.872871 + 1256 1257001 0.000185831 1.36395 -0.872852 -0.872871 + 1257 1258001 0.000185275 1.36394 -0.872852 -0.872871 + 1258 1259001 0.000184721 1.36436 -0.872827 -0.872871 + 1259 1260001 0.000184168 1.36185 -0.872824 -0.872871 + 1260 1261001 0.000183618 1.36533 -0.872731 -0.872871 + 1261 1262001 0.000183068 1.3601 -0.872605 -0.872871 + 1262 1263001 0.000182521 1.36157 -0.8728 -0.872871 + 1263 1264001 0.000181975 1.36622 -0.872594 -0.872871 + 1264 1265001 0.000181431 1.36129 -0.872773 -0.872871 + 1265 1266001 0.000180888 1.36437 -0.872826 -0.872871 + 1266 1267001 0.000180347 1.36559 -0.872695 -0.872871 + 1267 1268001 0.000179808 1.36277 -0.872868 -0.872871 + 1268 1269001 0.00017927 1.3639 -0.872854 -0.872871 + 1269 1270001 0.000178734 1.36488 -0.872782 -0.872871 + 1270 1271001 0.000178199 1.36525 -0.872741 -0.872871 + 1271 1272001 0.000177666 1.36439 -0.872825 -0.872871 + 1272 1273001 0.000177135 1.36046 -0.872663 -0.872871 + 1273 1274001 0.000176605 1.36604 -0.872626 -0.872871 + 1274 1275001 0.000176076 1.36069 -0.872699 -0.872871 + 1275 1276001 0.00017555 1.36593 -0.872645 -0.872871 + 1276 1277001 0.000175025 1.36241 -0.872856 -0.872871 + 1277 1278001 0.000174501 1.36433 -0.87283 -0.872871 + 1278 1279001 0.000173979 1.36277 -0.872867 -0.872871 + 1279 1280001 0.000173459 1.36141 -0.872786 -0.872871 + 1280 1281001 0.00017294 1.36141 -0.872786 -0.872871 + 1281 1282001 0.000172423 1.36196 -0.872832 -0.872871 + 1282 1283001 0.000171907 1.36385 -0.872856 -0.872871 + 1283 1284001 0.000171393 1.36543 -0.872718 -0.872871 + 1284 1285001 0.00017088 1.36273 -0.872867 -0.872871 + 1285 1286001 0.000170369 1.36432 -0.87283 -0.872871 + 1286 1287001 0.00016986 1.36313 -0.872871 -0.872871 + 1287 1288001 0.000169352 1.36313 -0.872871 -0.872871 + 1288 1289001 0.000168845 1.36381 -0.872858 -0.872871 + 1289 1290001 0.00016834 1.36428 -0.872833 -0.872871 + 1290 1291001 0.000167836 1.36108 -0.872749 -0.872871 + 1291 1292001 0.000167334 1.36157 -0.872801 -0.872871 + 1292 1293001 0.000166834 1.36326 -0.872871 -0.872871 + 1293 1294001 0.000166335 1.36184 -0.872823 -0.872871 + 1294 1295001 0.000165837 1.36134 -0.872778 -0.872871 + 1295 1296001 0.000165341 1.3613 -0.872773 -0.872871 + 1296 1297001 0.000164847 1.36622 -0.872594 -0.872871 + 1297 1298001 0.000164354 1.36601 -0.872631 -0.872871 + 1298 1299001 0.000163862 1.36472 -0.872798 -0.872871 + 1299 1300001 0.000163372 1.36451 -0.872816 -0.872871 + 1300 1301001 0.000162883 1.36274 -0.872867 -0.872871 + 1301 1302001 0.000162396 1.36295 -0.87287 -0.872871 + 1302 1303001 0.000161911 1.36295 -0.87287 -0.872871 + 1303 1304001 0.000161426 1.36295 -0.87287 -0.872871 + 1304 1305001 0.000160943 1.36334 -0.87287 -0.872871 + 1305 1306001 0.000160462 1.36047 -0.872665 -0.872871 + 1306 1307001 0.000159982 1.36395 -0.872852 -0.872871 + 1307 1308001 0.000159504 1.36443 -0.872822 -0.872871 + 1308 1309001 0.000159027 1.36019 -0.87262 -0.872871 + 1309 1310001 0.000158551 1.36581 -0.872662 -0.872871 + 1310 1311001 0.000158077 1.36156 -0.8728 -0.872871 + 1311 1312001 0.000157604 1.36375 -0.87286 -0.872871 + 1312 1313001 0.000157132 1.36249 -0.872859 -0.872871 + 1313 1314001 0.000156662 1.36183 -0.872822 -0.872871 + 1314 1315001 0.000156194 1.36183 -0.872822 -0.872871 + 1315 1316001 0.000155727 1.36316 -0.872871 -0.872871 + 1316 1317001 0.000155261 1.36551 -0.872707 -0.872871 + 1317 1318001 0.000154797 1.36077 -0.872709 -0.872871 + 1318 1319001 0.000154334 1.36087 -0.872722 -0.872871 + 1319 1320001 0.000153872 1.3611 -0.872751 -0.872871 + 1320 1321001 0.000153412 1.36292 -0.87287 -0.872871 + 1321 1322001 0.000152953 1.36482 -0.872788 -0.872871 + 1322 1323001 0.000152495 1.36422 -0.872837 -0.872871 + 1323 1324001 0.000152039 1.36306 -0.872871 -0.872871 + 1324 1325001 0.000151584 1.36082 -0.872716 -0.872871 + 1325 1326001 0.000151131 1.36112 -0.872754 -0.872871 + 1326 1327001 0.000150679 1.3655 -0.872708 -0.872871 + 1327 1328001 0.000150228 1.36332 -0.87287 -0.872871 + 1328 1329001 0.000149779 1.36193 -0.872829 -0.872871 + 1329 1330001 0.000149331 1.36357 -0.872866 -0.872871 + 1330 1331001 0.000148884 1.36316 -0.872871 -0.872871 + 1331 1332001 0.000148439 1.36316 -0.872871 -0.872871 + 1332 1333001 0.000147995 1.36585 -0.872657 -0.872871 + 1333 1334001 0.000147552 1.36395 -0.872852 -0.872871 + 1334 1335001 0.000147111 1.3645 -0.872817 -0.872871 + 1335 1336001 0.000146671 1.3643 -0.872832 -0.872871 + 1336 1337001 0.000146232 1.3643 -0.872832 -0.872871 + 1337 1338001 0.000145795 1.36099 -0.872738 -0.872871 + 1338 1339001 0.000145359 1.36385 -0.872856 -0.872871 + 1339 1340001 0.000144924 1.36648 -0.872545 -0.872871 + 1340 1341001 0.000144491 1.3633 -0.87287 -0.872871 + 1341 1342001 0.000144058 1.36315 -0.872871 -0.872871 + 1342 1343001 0.000143628 1.36289 -0.87287 -0.872871 + 1343 1344001 0.000143198 1.36289 -0.87287 -0.872871 + 1344 1345001 0.00014277 1.36306 -0.872871 -0.872871 + 1345 1346001 0.000142343 1.36054 -0.872676 -0.872871 + 1346 1347001 0.000141917 1.36207 -0.872838 -0.872871 + 1347 1348001 0.000141492 1.36325 -0.872871 -0.872871 + 1348 1349001 0.000141069 1.36319 -0.872871 -0.872871 + 1349 1350001 0.000140647 1.36417 -0.87284 -0.872871 + 1350 1351001 0.000140227 1.36038 -0.872652 -0.872871 + 1351 1352001 0.000139807 1.36471 -0.872799 -0.872871 + 1352 1353001 0.000139389 1.36525 -0.872741 -0.872871 + 1353 1354001 0.000138972 1.36271 -0.872866 -0.872871 + 1354 1355001 0.000138556 1.36357 -0.872865 -0.872871 + 1355 1356001 0.000138142 1.36357 -0.872865 -0.872871 + 1356 1357001 0.000137729 1.36207 -0.872839 -0.872871 + 1357 1358001 0.000137317 1.36483 -0.872787 -0.872871 + 1358 1359001 0.000136906 1.36332 -0.87287 -0.872871 + 1359 1360001 0.000136497 1.3629 -0.87287 -0.872871 + 1360 1361001 0.000136088 1.36303 -0.872871 -0.872871 + 1361 1362001 0.000135681 1.36463 -0.872806 -0.872871 + 1362 1363001 0.000135276 1.36443 -0.872822 -0.872871 + 1363 1364001 0.000134871 1.36249 -0.872859 -0.872871 + 1364 1365001 0.000134468 1.36518 -0.872749 -0.872871 + 1365 1366001 0.000134065 1.36495 -0.872775 -0.872871 + 1366 1367001 0.000133664 1.36495 -0.872775 -0.872871 + 1367 1368001 0.000133265 1.36077 -0.872709 -0.872871 + 1368 1369001 0.000132866 1.36077 -0.872709 -0.872871 + 1369 1370001 0.000132469 1.35985 -0.872558 -0.872871 + 1370 1371001 0.000132072 1.36582 -0.872662 -0.872871 + 1371 1372001 0.000131677 1.36433 -0.87283 -0.872871 + 1372 1373001 0.000131283 1.36097 -0.872736 -0.872871 + 1373 1374001 0.000130891 1.36239 -0.872855 -0.872871 + 1374 1375001 0.000130499 1.36405 -0.872847 -0.872871 + 1375 1376001 0.000130109 1.36405 -0.872847 -0.872871 + 1376 1377001 0.00012972 1.36392 -0.872853 -0.872871 + 1377 1378001 0.000129332 1.36751 -0.872314 -0.872871 + 1378 1379001 0.000128945 1.3611 -0.872751 -0.872871 + 1379 1380001 0.000128559 1.36289 -0.87287 -0.872871 + 1380 1381001 0.000128175 1.36344 -0.872868 -0.872871 + 1381 1382001 0.000127791 1.36387 -0.872855 -0.872871 + 1382 1383001 0.000127409 1.36198 -0.872833 -0.872871 + 1383 1384001 0.000127028 1.36384 -0.872857 -0.872871 + 1384 1385001 0.000126648 1.36381 -0.872858 -0.872871 + 1385 1386001 0.000126269 1.36215 -0.872843 -0.872871 + 1386 1387001 0.000125892 1.36341 -0.872869 -0.872871 + 1387 1388001 0.000125515 1.36191 -0.872828 -0.872871 + 1388 1389001 0.00012514 1.36308 -0.872871 -0.872871 + 1389 1390001 0.000124765 1.36397 -0.872851 -0.872871 + 1390 1391001 0.000124392 1.3629 -0.87287 -0.872871 + 1391 1392001 0.00012402 1.36201 -0.872835 -0.872871 + 1392 1393001 0.000123649 1.36683 -0.872475 -0.872871 + 1393 1394001 0.000123279 1.36143 -0.872787 -0.872871 + 1394 1395001 0.000122911 1.36307 -0.872871 -0.872871 + 1395 1396001 0.000122543 1.36316 -0.872871 -0.872871 + 1396 1397001 0.000122176 1.36449 -0.872818 -0.872871 + 1397 1398001 0.000121811 1.36427 -0.872834 -0.872871 + 1398 1399001 0.000121447 1.36353 -0.872867 -0.872871 + 1399 1400001 0.000121083 1.36355 -0.872866 -0.872871 + 1400 1401001 0.000120721 1.36205 -0.872837 -0.872871 + 1401 1402001 0.00012036 1.36638 -0.872565 -0.872871 + 1402 1403001 0.00012 1.36348 -0.872868 -0.872871 + 1403 1404001 0.000119641 1.36397 -0.872851 -0.872871 + 1404 1405001 0.000119283 1.36674 -0.872494 -0.872871 + 1405 1406001 0.000118927 1.36498 -0.872772 -0.872871 + 1406 1407001 0.000118571 1.36344 -0.872868 -0.872871 + 1407 1408001 0.000118216 1.36435 -0.872828 -0.872871 + 1408 1409001 0.000117863 1.36231 -0.872852 -0.872871 + 1409 1410001 0.00011751 1.36336 -0.87287 -0.872871 + 1410 1411001 0.000117159 1.36315 -0.872871 -0.872871 + 1411 1412001 0.000116808 1.36342 -0.872869 -0.872871 + 1412 1413001 0.000116459 1.36342 -0.872869 -0.872871 + 1413 1414001 0.000116111 1.3616 -0.872803 -0.872871 + 1414 1415001 0.000115763 1.35987 -0.872562 -0.872871 + 1415 1416001 0.000115417 1.36143 -0.872787 -0.872871 + 1416 1417001 0.000115072 1.36143 -0.872787 -0.872871 + 1417 1418001 0.000114728 1.36502 -0.872768 -0.872871 + 1418 1419001 0.000114384 1.36475 -0.872795 -0.872871 + 1419 1420001 0.000114042 1.36312 -0.872871 -0.872871 + 1420 1421001 0.000113701 1.36321 -0.872871 -0.872871 + 1421 1422001 0.000113361 1.36107 -0.872747 -0.872871 + 1422 1423001 0.000113022 1.36489 -0.872781 -0.872871 + 1423 1424001 0.000112684 1.36157 -0.872801 -0.872871 + 1424 1425001 0.000112347 1.36157 -0.872801 -0.872871 + 1425 1426001 0.000112011 1.36157 -0.872801 -0.872871 + 1426 1427001 0.000111676 1.36337 -0.87287 -0.872871 + 1427 1428001 0.000111342 1.36337 -0.87287 -0.872871 + 1428 1429001 0.000111009 1.36347 -0.872868 -0.872871 + 1429 1430001 0.000110677 1.36187 -0.872825 -0.872871 + 1430 1431001 0.000110346 1.36187 -0.872825 -0.872871 + 1431 1432001 0.000110016 1.36232 -0.872852 -0.872871 + 1432 1433001 0.000109687 1.36352 -0.872867 -0.872871 + 1433 1434001 0.000109359 1.3654 -0.872721 -0.872871 + 1434 1435001 0.000109032 1.36327 -0.872871 -0.872871 + 1435 1436001 0.000108705 1.36223 -0.872848 -0.872871 + 1436 1437001 0.00010838 1.36236 -0.872854 -0.872871 + 1437 1438001 0.000108056 1.36517 -0.872751 -0.872871 + 1438 1439001 0.000107733 1.36446 -0.87282 -0.872871 + 1439 1440001 0.000107411 1.36303 -0.872871 -0.872871 + 1440 1441001 0.000107089 1.36189 -0.872826 -0.872871 + 1441 1442001 0.000106769 1.36197 -0.872832 -0.872871 + 1442 1443001 0.00010645 1.36237 -0.872854 -0.872871 + 1443 1444001 0.000106131 1.36377 -0.872859 -0.872871 + 1444 1445001 0.000105814 1.36511 -0.872758 -0.872871 + 1445 1446001 0.000105497 1.36363 -0.872864 -0.872871 + 1446 1447001 0.000105182 1.36221 -0.872846 -0.872871 + 1447 1448001 0.000104867 1.36383 -0.872857 -0.872871 + 1448 1449001 0.000104554 1.36199 -0.872833 -0.872871 + 1449 1450001 0.000104241 1.36227 -0.87285 -0.872871 + 1450 1451001 0.000103929 1.36427 -0.872833 -0.872871 + 1451 1452001 0.000103618 1.36425 -0.872835 -0.872871 + 1452 1453001 0.000103308 1.3646 -0.872808 -0.872871 + 1453 1454001 0.000102999 1.35945 -0.872478 -0.872871 + 1454 1455001 0.000102691 1.36169 -0.872811 -0.872871 + 1455 1456001 0.000102384 1.36339 -0.872869 -0.872871 + 1456 1457001 0.000102078 1.36297 -0.87287 -0.872871 + 1457 1458001 0.000101773 1.36265 -0.872864 -0.872871 + 1458 1459001 0.000101468 1.36336 -0.87287 -0.872871 + 1459 1460001 0.000101165 1.36456 -0.872812 -0.872871 + 1460 1461001 0.000100862 1.36253 -0.872861 -0.872871 + 1461 1462001 0.00010056 1.36166 -0.872808 -0.872871 + 1462 1463001 0.00010026 1.36242 -0.872856 -0.872871 + 1463 1464001 9.99597e-05 1.36165 -0.872808 -0.872871 + 1464 1465001 9.96607e-05 1.36419 -0.872838 -0.872871 + 1465 1466001 9.93626e-05 1.36332 -0.87287 -0.872871 + 1466 1467001 9.90654e-05 1.36213 -0.872842 -0.872871 + 1467 1468001 9.87691e-05 1.36424 -0.872836 -0.872871 + 1468 1469001 9.84737e-05 1.36424 -0.872836 -0.872871 + 1469 1470001 9.81792e-05 1.36368 -0.872863 -0.872871 + 1470 1471001 9.78855e-05 1.36368 -0.872863 -0.872871 + 1471 1472001 9.75927e-05 1.36368 -0.872863 -0.872871 + 1472 1473001 9.73008e-05 1.36339 -0.872869 -0.872871 + 1473 1474001 9.70098e-05 1.36159 -0.872802 -0.872871 + 1474 1475001 9.67196e-05 1.36167 -0.872809 -0.872871 + 1475 1476001 9.64304e-05 1.36167 -0.872809 -0.872871 + 1476 1477001 9.61419e-05 1.36231 -0.872852 -0.872871 + 1477 1478001 9.58544e-05 1.36215 -0.872843 -0.872871 + 1478 1479001 9.55677e-05 1.36291 -0.87287 -0.872871 + 1479 1480001 9.52818e-05 1.36174 -0.872815 -0.872871 + 1480 1481001 9.49968e-05 1.36431 -0.872831 -0.872871 + 1481 1482001 9.47127e-05 1.36368 -0.872862 -0.872871 + 1482 1483001 9.44294e-05 1.36327 -0.872871 -0.872871 + 1483 1484001 9.4147e-05 1.36119 -0.872762 -0.872871 + 1484 1485001 9.38654e-05 1.36149 -0.872793 -0.872871 + 1485 1486001 9.35846e-05 1.36354 -0.872866 -0.872871 + 1486 1487001 9.33047e-05 1.36354 -0.872866 -0.872871 + 1487 1488001 9.30256e-05 1.36395 -0.872852 -0.872871 + 1488 1489001 9.27474e-05 1.36256 -0.872862 -0.872871 + 1489 1490001 9.247e-05 1.36502 -0.872768 -0.872871 + 1490 1491001 9.21934e-05 1.36081 -0.872714 -0.872871 + 1491 1492001 9.19176e-05 1.36533 -0.872731 -0.872871 + 1492 1493001 9.16427e-05 1.36374 -0.872861 -0.872871 + 1493 1494001 9.13686e-05 1.36354 -0.872866 -0.872871 + 1494 1495001 9.10953e-05 1.36354 -0.872866 -0.872871 + 1495 1496001 9.08228e-05 1.36238 -0.872855 -0.872871 + 1496 1497001 9.05512e-05 1.36416 -0.872841 -0.872871 + 1497 1498001 9.02804e-05 1.36416 -0.872841 -0.872871 + 1498 1499001 9.00103e-05 1.3644 -0.872825 -0.872871 + 1499 1500001 8.97411e-05 1.36689 -0.872461 -0.872871 + 1500 1501001 8.94727e-05 1.36263 -0.872864 -0.872871 + 1501 1502001 8.92051e-05 1.36387 -0.872855 -0.872871 + 1502 1503001 8.89383e-05 1.36387 -0.872855 -0.872871 + 1503 1504001 8.86722e-05 1.3626 -0.872863 -0.872871 + 1504 1505001 8.8407e-05 1.3626 -0.872863 -0.872871 + 1505 1506001 8.81426e-05 1.36317 -0.872871 -0.872871 + 1506 1507001 8.78789e-05 1.36331 -0.87287 -0.872871 + 1507 1508001 8.76161e-05 1.36331 -0.87287 -0.872871 + 1508 1509001 8.7354e-05 1.3635 -0.872867 -0.872871 + 1509 1510001 8.70928e-05 1.36244 -0.872857 -0.872871 + 1510 1511001 8.68323e-05 1.36353 -0.872867 -0.872871 + 1511 1512001 8.65725e-05 1.36407 -0.872845 -0.872871 + 1512 1513001 8.63136e-05 1.36461 -0.872808 -0.872871 + 1513 1514001 8.60554e-05 1.36553 -0.872705 -0.872871 + 1514 1515001 8.5798e-05 1.36138 -0.872783 -0.872871 + 1515 1516001 8.55414e-05 1.36443 -0.872822 -0.872871 + 1516 1517001 8.52856e-05 1.36273 -0.872867 -0.872871 + 1517 1518001 8.50305e-05 1.36376 -0.87286 -0.872871 + 1518 1519001 8.47761e-05 1.36346 -0.872868 -0.872871 + 1519 1520001 8.45226e-05 1.36404 -0.872847 -0.872871 + 1520 1521001 8.42698e-05 1.36374 -0.872861 -0.872871 + 1521 1522001 8.40177e-05 1.36313 -0.872871 -0.872871 + 1522 1523001 8.37664e-05 1.36437 -0.872827 -0.872871 + 1523 1524001 8.35159e-05 1.36437 -0.872827 -0.872871 + 1524 1525001 8.32661e-05 1.36232 -0.872852 -0.872871 + 1525 1526001 8.3017e-05 1.36437 -0.872826 -0.872871 + 1526 1527001 8.27687e-05 1.36254 -0.872861 -0.872871 + 1527 1528001 8.25211e-05 1.36264 -0.872864 -0.872871 + 1528 1529001 8.22743e-05 1.36377 -0.872859 -0.872871 + 1529 1530001 8.20282e-05 1.36143 -0.872787 -0.872871 + 1530 1531001 8.17829e-05 1.36241 -0.872856 -0.872871 + 1531 1532001 8.15383e-05 1.36552 -0.872706 -0.872871 + 1532 1533001 8.12944e-05 1.36189 -0.872826 -0.872871 + 1533 1534001 8.10512e-05 1.36325 -0.872871 -0.872871 + 1534 1535001 8.08088e-05 1.36337 -0.872869 -0.872871 + 1535 1536001 8.05671e-05 1.36337 -0.872869 -0.872871 + 1536 1537001 8.03261e-05 1.36337 -0.872869 -0.872871 + 1537 1538001 8.00859e-05 1.36414 -0.872842 -0.872871 + 1538 1539001 7.98463e-05 1.36355 -0.872866 -0.872871 + 1539 1540001 7.96075e-05 1.36355 -0.872866 -0.872871 + 1540 1541001 7.93694e-05 1.36372 -0.872861 -0.872871 + 1541 1542001 7.9132e-05 1.3621 -0.87284 -0.872871 + 1542 1543001 7.88953e-05 1.36443 -0.872822 -0.872871 + 1543 1544001 7.86593e-05 1.36295 -0.87287 -0.872871 + 1544 1545001 7.84241e-05 1.36128 -0.872772 -0.872871 + 1545 1546001 7.81895e-05 1.364 -0.872849 -0.872871 + 1546 1547001 7.79556e-05 1.3649 -0.87278 -0.872871 + 1547 1548001 7.77225e-05 1.36311 -0.872871 -0.872871 + 1548 1549001 7.749e-05 1.36095 -0.872733 -0.872871 + 1549 1550001 7.72582e-05 1.36508 -0.872761 -0.872871 + 1550 1551001 7.70271e-05 1.36479 -0.872792 -0.872871 + 1551 1552001 7.67968e-05 1.3613 -0.872774 -0.872871 + 1552 1553001 7.65671e-05 1.36154 -0.872798 -0.872871 + 1553 1554001 7.6338e-05 1.36432 -0.87283 -0.872871 + 1554 1555001 7.61097e-05 1.36244 -0.872857 -0.872871 + 1555 1556001 7.58821e-05 1.36252 -0.87286 -0.872871 + 1556 1557001 7.56551e-05 1.36272 -0.872866 -0.872871 + 1557 1558001 7.54288e-05 1.36272 -0.872866 -0.872871 + 1558 1559001 7.52032e-05 1.36088 -0.872724 -0.872871 + 1559 1560001 7.49783e-05 1.36562 -0.872692 -0.872871 + 1560 1561001 7.4754e-05 1.36259 -0.872863 -0.872871 + 1561 1562001 7.45304e-05 1.36259 -0.872863 -0.872871 + 1562 1563001 7.43075e-05 1.36166 -0.872808 -0.872871 + 1563 1564001 7.40852e-05 1.36219 -0.872845 -0.872871 + 1564 1565001 7.38636e-05 1.36264 -0.872864 -0.872871 + 1565 1566001 7.36427e-05 1.36414 -0.872842 -0.872871 + 1566 1567001 7.34225e-05 1.36185 -0.872824 -0.872871 + 1567 1568001 7.32028e-05 1.36353 -0.872867 -0.872871 + 1568 1569001 7.29839e-05 1.36233 -0.872853 -0.872871 + 1569 1570001 7.27656e-05 1.3626 -0.872863 -0.872871 + 1570 1571001 7.25479e-05 1.36337 -0.87287 -0.872871 + 1571 1572001 7.2331e-05 1.36337 -0.87287 -0.872871 + 1572 1573001 7.21146e-05 1.36227 -0.87285 -0.872871 + 1573 1574001 7.18989e-05 1.36429 -0.872832 -0.872871 + 1574 1575001 7.16839e-05 1.36295 -0.87287 -0.872871 + 1575 1576001 7.14695e-05 1.3617 -0.872812 -0.872871 + 1576 1577001 7.12557e-05 1.3617 -0.872812 -0.872871 + 1577 1578001 7.10426e-05 1.36253 -0.872861 -0.872871 + 1578 1579001 7.08301e-05 1.36317 -0.872871 -0.872871 + 1579 1580001 7.06182e-05 1.36317 -0.872871 -0.872871 + 1580 1581001 7.0407e-05 1.36317 -0.872871 -0.872871 + 1581 1582001 7.01964e-05 1.36508 -0.872761 -0.872871 + 1582 1583001 6.99864e-05 1.36508 -0.872761 -0.872871 + 1583 1584001 6.97771e-05 1.36511 -0.872757 -0.872871 + 1584 1585001 6.95684e-05 1.36413 -0.872842 -0.872871 + 1585 1586001 6.93603e-05 1.36323 -0.872871 -0.872871 + 1586 1587001 6.91529e-05 1.36205 -0.872838 -0.872871 + 1587 1588001 6.8946e-05 1.3646 -0.872809 -0.872871 + 1588 1589001 6.87398e-05 1.36411 -0.872843 -0.872871 + 1589 1590001 6.85342e-05 1.36117 -0.872759 -0.872871 + 1590 1591001 6.83292e-05 1.36388 -0.872855 -0.872871 + 1591 1592001 6.81248e-05 1.36388 -0.872855 -0.872871 + 1592 1593001 6.79211e-05 1.36109 -0.87275 -0.872871 + 1593 1594001 6.77179e-05 1.36221 -0.872847 -0.872871 + 1594 1595001 6.75154e-05 1.36394 -0.872852 -0.872871 + 1595 1596001 6.73134e-05 1.3643 -0.872832 -0.872871 + 1596 1597001 6.71121e-05 1.36331 -0.87287 -0.872871 + 1597 1598001 6.69114e-05 1.36299 -0.872871 -0.872871 + 1598 1599001 6.67112e-05 1.36357 -0.872866 -0.872871 + 1599 1600001 6.65117e-05 1.36118 -0.872761 -0.872871 + 1600 1601001 6.63128e-05 1.36215 -0.872843 -0.872871 + 1601 1602001 6.61144e-05 1.36454 -0.872813 -0.872871 + 1602 1603001 6.59167e-05 1.36454 -0.872813 -0.872871 + 1603 1604001 6.57195e-05 1.36327 -0.872871 -0.872871 + 1604 1605001 6.55229e-05 1.36276 -0.872867 -0.872871 + 1605 1606001 6.5327e-05 1.36437 -0.872827 -0.872871 + 1606 1607001 6.51316e-05 1.36351 -0.872867 -0.872871 + 1607 1608001 6.49368e-05 1.3652 -0.872746 -0.872871 + 1608 1609001 6.47425e-05 1.36478 -0.872793 -0.872871 + 1609 1610001 6.45489e-05 1.36478 -0.872793 -0.872871 + 1610 1611001 6.43558e-05 1.36363 -0.872864 -0.872871 + 1611 1612001 6.41633e-05 1.36478 -0.872792 -0.872871 + 1612 1613001 6.39714e-05 1.36159 -0.872803 -0.872871 + 1613 1614001 6.37801e-05 1.36422 -0.872837 -0.872871 + 1614 1615001 6.35893e-05 1.36446 -0.87282 -0.872871 + 1615 1616001 6.33991e-05 1.36227 -0.87285 -0.872871 + 1616 1617001 6.32095e-05 1.3645 -0.872817 -0.872871 + 1617 1618001 6.30204e-05 1.36347 -0.872868 -0.872871 + 1618 1619001 6.28319e-05 1.36263 -0.872864 -0.872871 + 1619 1620001 6.2644e-05 1.36142 -0.872787 -0.872871 + 1620 1621001 6.24566e-05 1.36507 -0.872762 -0.872871 + 1621 1622001 6.22698e-05 1.36191 -0.872828 -0.872871 + 1622 1623001 6.20836e-05 1.36178 -0.872819 -0.872871 + 1623 1624001 6.18979e-05 1.36178 -0.872819 -0.872871 + 1624 1625001 6.17127e-05 1.36176 -0.872817 -0.872871 + 1625 1626001 6.15281e-05 1.36306 -0.872871 -0.872871 + 1626 1627001 6.13441e-05 1.36405 -0.872847 -0.872871 + 1627 1628001 6.11606e-05 1.36405 -0.872847 -0.872871 + 1628 1629001 6.09777e-05 1.36325 -0.872871 -0.872871 + 1629 1630001 6.07953e-05 1.36238 -0.872855 -0.872871 + 1630 1631001 6.06135e-05 1.36382 -0.872857 -0.872871 + 1631 1632001 6.04322e-05 1.36066 -0.872694 -0.872871 + 1632 1633001 6.02514e-05 1.36505 -0.872764 -0.872871 + 1633 1634001 6.00712e-05 1.36302 -0.872871 -0.872871 + 1634 1635001 5.98915e-05 1.36302 -0.872871 -0.872871 + 1635 1636001 5.97124e-05 1.36486 -0.872784 -0.872871 + 1636 1637001 5.95338e-05 1.36253 -0.872861 -0.872871 + 1637 1638001 5.93557e-05 1.36246 -0.872858 -0.872871 + 1638 1639001 5.91782e-05 1.36127 -0.872771 -0.872871 + 1639 1640001 5.90012e-05 1.36127 -0.872771 -0.872871 + 1640 1641001 5.88247e-05 1.36262 -0.872864 -0.872871 + 1641 1642001 5.86488e-05 1.36386 -0.872856 -0.872871 + 1642 1643001 5.84733e-05 1.3639 -0.872854 -0.872871 + 1643 1644001 5.82985e-05 1.36272 -0.872866 -0.872871 + 1644 1645001 5.81241e-05 1.36272 -0.872866 -0.872871 + 1645 1646001 5.79502e-05 1.36253 -0.872861 -0.872871 + 1646 1647001 5.77769e-05 1.36253 -0.872861 -0.872871 + 1647 1648001 5.76041e-05 1.36344 -0.872868 -0.872871 + 1648 1649001 5.74318e-05 1.36348 -0.872868 -0.872871 + 1649 1650001 5.726e-05 1.36348 -0.872868 -0.872871 + 1650 1651001 5.70887e-05 1.36327 -0.872871 -0.872871 + 1651 1652001 5.6918e-05 1.36283 -0.872869 -0.872871 + 1652 1653001 5.67477e-05 1.36283 -0.872869 -0.872871 + 1653 1654001 5.6578e-05 1.36395 -0.872852 -0.872871 + 1654 1655001 5.64088e-05 1.36395 -0.872852 -0.872871 + 1655 1656001 5.62401e-05 1.36375 -0.87286 -0.872871 + 1656 1657001 5.60719e-05 1.36375 -0.87286 -0.872871 + 1657 1658001 5.59041e-05 1.36189 -0.872827 -0.872871 + 1658 1659001 5.57369e-05 1.36168 -0.87281 -0.872871 + 1659 1660001 5.55702e-05 1.36105 -0.872746 -0.872871 + 1660 1661001 5.5404e-05 1.36105 -0.872746 -0.872871 + 1661 1662001 5.52383e-05 1.36256 -0.872862 -0.872871 + 1662 1663001 5.50731e-05 1.36298 -0.872871 -0.872871 + 1663 1664001 5.49083e-05 1.36419 -0.872839 -0.872871 + 1664 1665001 5.47441e-05 1.36419 -0.872839 -0.872871 + 1665 1666001 5.45804e-05 1.36348 -0.872868 -0.872871 + 1666 1667001 5.44171e-05 1.36175 -0.872816 -0.872871 + 1667 1668001 5.42544e-05 1.36401 -0.872849 -0.872871 + 1668 1669001 5.40921e-05 1.36186 -0.872824 -0.872871 + 1669 1670001 5.39303e-05 1.36365 -0.872864 -0.872871 + 1670 1671001 5.3769e-05 1.36365 -0.872864 -0.872871 + 1671 1672001 5.36082e-05 1.36231 -0.872852 -0.872871 + 1672 1673001 5.34478e-05 1.36327 -0.872871 -0.872871 + 1673 1674001 5.3288e-05 1.36299 -0.872871 -0.872871 + 1674 1675001 5.31286e-05 1.36269 -0.872866 -0.872871 + 1675 1676001 5.29697e-05 1.36158 -0.872802 -0.872871 + 1676 1677001 5.28112e-05 1.36316 -0.872871 -0.872871 + 1677 1678001 5.26533e-05 1.36292 -0.87287 -0.872871 + 1678 1679001 5.24958e-05 1.3623 -0.872851 -0.872871 + 1679 1680001 5.23388e-05 1.36274 -0.872867 -0.872871 + 1680 1681001 5.21822e-05 1.361 -0.872739 -0.872871 + 1681 1682001 5.20261e-05 1.3629 -0.87287 -0.872871 + 1682 1683001 5.18705e-05 1.36335 -0.87287 -0.872871 + 1683 1684001 5.17154e-05 1.36304 -0.872871 -0.872871 + 1684 1685001 5.15607e-05 1.36304 -0.872871 -0.872871 + 1685 1686001 5.14065e-05 1.36304 -0.872871 -0.872871 + 1686 1687001 5.12527e-05 1.36319 -0.872871 -0.872871 + 1687 1688001 5.10994e-05 1.3634 -0.872869 -0.872871 + 1688 1689001 5.09466e-05 1.36572 -0.872677 -0.872871 + 1689 1690001 5.07942e-05 1.3641 -0.872844 -0.872871 + 1690 1691001 5.06423e-05 1.36262 -0.872864 -0.872871 + 1691 1692001 5.04908e-05 1.362 -0.872834 -0.872871 + 1692 1693001 5.03398e-05 1.362 -0.872834 -0.872871 + 1693 1694001 5.01892e-05 1.36451 -0.872816 -0.872871 + 1694 1695001 5.00391e-05 1.36458 -0.87281 -0.872871 + 1695 1696001 4.98894e-05 1.36206 -0.872838 -0.872871 + 1696 1697001 4.97402e-05 1.36201 -0.872835 -0.872871 + 1697 1698001 4.95914e-05 1.36201 -0.872835 -0.872871 + 1698 1699001 4.94431e-05 1.36201 -0.872835 -0.872871 + 1699 1700001 4.92952e-05 1.36201 -0.872835 -0.872871 + 1700 1701001 4.91478e-05 1.36251 -0.87286 -0.872871 + 1701 1702001 4.90008e-05 1.3634 -0.872869 -0.872871 + 1702 1703001 4.88542e-05 1.36247 -0.872858 -0.872871 + 1703 1704001 4.87081e-05 1.36469 -0.872801 -0.872871 + 1704 1705001 4.85624e-05 1.36194 -0.87283 -0.872871 + 1705 1706001 4.84171e-05 1.36335 -0.87287 -0.872871 + 1706 1707001 4.82723e-05 1.3626 -0.872863 -0.872871 + 1707 1708001 4.81279e-05 1.3636 -0.872865 -0.872871 + 1708 1709001 4.7984e-05 1.36352 -0.872867 -0.872871 + 1709 1710001 4.78405e-05 1.36368 -0.872863 -0.872871 + 1710 1711001 4.76974e-05 1.36368 -0.872863 -0.872871 + 1711 1712001 4.75547e-05 1.36392 -0.872853 -0.872871 + 1712 1713001 4.74125e-05 1.36269 -0.872866 -0.872871 + 1713 1714001 4.72707e-05 1.36269 -0.872866 -0.872871 + 1714 1715001 4.71293e-05 1.36339 -0.872869 -0.872871 + 1715 1716001 4.69883e-05 1.3627 -0.872866 -0.872871 + 1716 1717001 4.68478e-05 1.36275 -0.872867 -0.872871 + 1717 1718001 4.67076e-05 1.36303 -0.872871 -0.872871 + 1718 1719001 4.65679e-05 1.36517 -0.872751 -0.872871 + 1719 1720001 4.64287e-05 1.36192 -0.872828 -0.872871 + 1720 1721001 4.62898e-05 1.3632 -0.872871 -0.872871 + 1721 1722001 4.61513e-05 1.36169 -0.872811 -0.872871 + 1722 1723001 4.60133e-05 1.36366 -0.872863 -0.872871 + 1723 1724001 4.58757e-05 1.36353 -0.872867 -0.872871 + 1724 1725001 4.57385e-05 1.36326 -0.872871 -0.872871 + 1725 1726001 4.56016e-05 1.36326 -0.872871 -0.872871 + 1726 1727001 4.54653e-05 1.3627 -0.872866 -0.872871 + 1727 1728001 4.53293e-05 1.36245 -0.872858 -0.872871 + 1728 1729001 4.51937e-05 1.36278 -0.872868 -0.872871 + 1729 1730001 4.50585e-05 1.36278 -0.872868 -0.872871 + 1730 1731001 4.49237e-05 1.36278 -0.872868 -0.872871 + 1731 1732001 4.47894e-05 1.36278 -0.872868 -0.872871 + 1732 1733001 4.46554e-05 1.36311 -0.872871 -0.872871 + 1733 1734001 4.45218e-05 1.36374 -0.87286 -0.872871 + 1734 1735001 4.43887e-05 1.36374 -0.87286 -0.872871 + 1735 1736001 4.42559e-05 1.36482 -0.872789 -0.872871 + 1736 1737001 4.41235e-05 1.36324 -0.872871 -0.872871 + 1737 1738001 4.39916e-05 1.36187 -0.872825 -0.872871 + 1738 1739001 4.386e-05 1.36322 -0.872871 -0.872871 + 1739 1740001 4.37288e-05 1.36291 -0.87287 -0.872871 + 1740 1741001 4.3598e-05 1.36215 -0.872843 -0.872871 + 1741 1742001 4.34676e-05 1.36215 -0.872843 -0.872871 + 1742 1743001 4.33376e-05 1.36215 -0.872843 -0.872871 + 1743 1744001 4.3208e-05 1.36209 -0.87284 -0.872871 + 1744 1745001 4.30787e-05 1.36306 -0.872871 -0.872871 + 1745 1746001 4.29499e-05 1.36295 -0.87287 -0.872871 + 1746 1747001 4.28214e-05 1.36295 -0.87287 -0.872871 + 1747 1748001 4.26933e-05 1.36317 -0.872871 -0.872871 + 1748 1749001 4.25656e-05 1.36276 -0.872867 -0.872871 + 1749 1750001 4.24383e-05 1.36276 -0.872867 -0.872871 + 1750 1751001 4.23114e-05 1.36312 -0.872871 -0.872871 + 1751 1752001 4.21848e-05 1.36299 -0.872871 -0.872871 + 1752 1753001 4.20587e-05 1.36355 -0.872866 -0.872871 + 1753 1754001 4.19329e-05 1.36355 -0.872866 -0.872871 + 1754 1755001 4.18074e-05 1.36274 -0.872867 -0.872871 + 1755 1756001 4.16824e-05 1.36211 -0.872841 -0.872871 + 1756 1757001 4.15577e-05 1.36315 -0.872871 -0.872871 + 1757 1758001 4.14334e-05 1.3631 -0.872871 -0.872871 + 1758 1759001 4.13095e-05 1.3631 -0.872871 -0.872871 + 1759 1760001 4.11859e-05 1.36393 -0.872853 -0.872871 + 1760 1761001 4.10627e-05 1.36264 -0.872864 -0.872871 + 1761 1762001 4.09399e-05 1.36296 -0.87287 -0.872871 + 1762 1763001 4.08175e-05 1.36296 -0.87287 -0.872871 + 1763 1764001 4.06954e-05 1.36296 -0.87287 -0.872871 + 1764 1765001 4.05737e-05 1.36353 -0.872866 -0.872871 + 1765 1766001 4.04523e-05 1.36163 -0.872806 -0.872871 + 1766 1767001 4.03313e-05 1.36213 -0.872842 -0.872871 + 1767 1768001 4.02107e-05 1.36216 -0.872844 -0.872871 + 1768 1769001 4.00904e-05 1.36221 -0.872847 -0.872871 + 1769 1770001 3.99705e-05 1.36197 -0.872832 -0.872871 + 1770 1771001 3.98509e-05 1.36197 -0.872832 -0.872871 + 1771 1772001 3.97317e-05 1.36279 -0.872868 -0.872871 + 1772 1773001 3.96129e-05 1.36279 -0.872868 -0.872871 + 1773 1774001 3.94944e-05 1.36382 -0.872858 -0.872871 + 1774 1775001 3.93763e-05 1.3622 -0.872846 -0.872871 + 1775 1776001 3.92585e-05 1.363 -0.872871 -0.872871 + 1776 1777001 3.91411e-05 1.363 -0.872871 -0.872871 + 1777 1778001 3.9024e-05 1.36098 -0.872737 -0.872871 + 1778 1779001 3.89073e-05 1.36324 -0.872871 -0.872871 + 1779 1780001 3.87909e-05 1.36239 -0.872855 -0.872871 + 1780 1781001 3.86749e-05 1.36239 -0.872855 -0.872871 + 1781 1782001 3.85592e-05 1.36239 -0.872855 -0.872871 + 1782 1783001 3.84439e-05 1.36344 -0.872868 -0.872871 + 1783 1784001 3.83289e-05 1.36394 -0.872852 -0.872871 + 1784 1785001 3.82143e-05 1.36386 -0.872856 -0.872871 + 1785 1786001 3.81e-05 1.36386 -0.872856 -0.872871 + 1786 1787001 3.7986e-05 1.36386 -0.872856 -0.872871 + 1787 1788001 3.78724e-05 1.36214 -0.872843 -0.872871 + 1788 1789001 3.77591e-05 1.3631 -0.872871 -0.872871 + 1789 1790001 3.76462e-05 1.3631 -0.872871 -0.872871 + 1790 1791001 3.75336e-05 1.36225 -0.872849 -0.872871 + 1791 1792001 3.74213e-05 1.36225 -0.872849 -0.872871 + 1792 1793001 3.73094e-05 1.3635 -0.872867 -0.872871 + 1793 1794001 3.71978e-05 1.36278 -0.872868 -0.872871 + 1794 1795001 3.70865e-05 1.36359 -0.872865 -0.872871 + 1795 1796001 3.69756e-05 1.36359 -0.872865 -0.872871 + 1796 1797001 3.6865e-05 1.36359 -0.872865 -0.872871 + 1797 1798001 3.67547e-05 1.36302 -0.872871 -0.872871 + 1798 1799001 3.66448e-05 1.36176 -0.872817 -0.872871 + 1799 1800001 3.65352e-05 1.36336 -0.87287 -0.872871 + 1800 1801001 3.64259e-05 1.36313 -0.872871 -0.872871 + 1801 1802001 3.6317e-05 1.3621 -0.87284 -0.872871 + 1802 1803001 3.62083e-05 1.36376 -0.87286 -0.872871 + 1803 1804001 3.61e-05 1.36346 -0.872868 -0.872871 + 1804 1805001 3.59921e-05 1.36409 -0.872845 -0.872871 + 1805 1806001 3.58844e-05 1.36209 -0.87284 -0.872871 + 1806 1807001 3.57771e-05 1.36332 -0.87287 -0.872871 + 1807 1808001 3.56701e-05 1.36332 -0.87287 -0.872871 + 1808 1809001 3.55634e-05 1.3637 -0.872862 -0.872871 + 1809 1810001 3.5457e-05 1.36253 -0.872861 -0.872871 + 1810 1811001 3.5351e-05 1.36253 -0.872861 -0.872871 + 1811 1812001 3.52452e-05 1.36201 -0.872835 -0.872871 + 1812 1813001 3.51398e-05 1.36285 -0.872869 -0.872871 + 1813 1814001 3.50347e-05 1.36368 -0.872863 -0.872871 + 1814 1815001 3.49299e-05 1.36345 -0.872868 -0.872871 + 1815 1816001 3.48254e-05 1.36261 -0.872863 -0.872871 + 1816 1817001 3.47213e-05 1.36369 -0.872862 -0.872871 + 1817 1818001 3.46174e-05 1.36369 -0.872862 -0.872871 + 1818 1819001 3.45139e-05 1.36445 -0.87282 -0.872871 + 1819 1820001 3.44106e-05 1.36378 -0.872859 -0.872871 + 1820 1821001 3.43077e-05 1.36394 -0.872852 -0.872871 + 1821 1822001 3.42051e-05 1.36394 -0.872852 -0.872871 + 1822 1823001 3.41028e-05 1.36347 -0.872868 -0.872871 + 1823 1824001 3.40008e-05 1.36311 -0.872871 -0.872871 + 1824 1825001 3.38991e-05 1.36246 -0.872858 -0.872871 + 1825 1826001 3.37977e-05 1.36266 -0.872865 -0.872871 + 1826 1827001 3.36966e-05 1.3624 -0.872856 -0.872871 + 1827 1828001 3.35958e-05 1.3624 -0.872856 -0.872871 + 1828 1829001 3.34953e-05 1.36332 -0.87287 -0.872871 + 1829 1830001 3.33952e-05 1.36332 -0.87287 -0.872871 + 1830 1831001 3.32953e-05 1.36332 -0.87287 -0.872871 + 1831 1832001 3.31957e-05 1.36332 -0.87287 -0.872871 + 1832 1833001 3.30964e-05 1.36398 -0.87285 -0.872871 + 1833 1834001 3.29974e-05 1.36359 -0.872865 -0.872871 + 1834 1835001 3.28987e-05 1.36334 -0.87287 -0.872871 + 1835 1836001 3.28003e-05 1.36244 -0.872857 -0.872871 + 1836 1837001 3.27022e-05 1.36358 -0.872865 -0.872871 + 1837 1838001 3.26044e-05 1.36358 -0.872865 -0.872871 + 1838 1839001 3.25069e-05 1.36406 -0.872846 -0.872871 + 1839 1840001 3.24096e-05 1.36267 -0.872865 -0.872871 + 1840 1841001 3.23127e-05 1.36463 -0.872806 -0.872871 + 1841 1842001 3.22161e-05 1.36425 -0.872835 -0.872871 + 1842 1843001 3.21197e-05 1.36411 -0.872843 -0.872871 + 1843 1844001 3.20236e-05 1.36211 -0.872841 -0.872871 + 1844 1845001 3.19278e-05 1.36369 -0.872862 -0.872871 + 1845 1846001 3.18323e-05 1.3632 -0.872871 -0.872871 + 1846 1847001 3.17371e-05 1.3632 -0.872871 -0.872871 + 1847 1848001 3.16422e-05 1.36343 -0.872869 -0.872871 + 1848 1849001 3.15476e-05 1.36185 -0.872823 -0.872871 + 1849 1850001 3.14532e-05 1.36438 -0.872826 -0.872871 + 1850 1851001 3.13591e-05 1.36316 -0.872871 -0.872871 + 1851 1852001 3.12653e-05 1.36359 -0.872865 -0.872871 + 1852 1853001 3.11718e-05 1.36264 -0.872864 -0.872871 + 1853 1854001 3.10786e-05 1.36348 -0.872868 -0.872871 + 1854 1855001 3.09856e-05 1.36348 -0.872868 -0.872871 + 1855 1856001 3.08929e-05 1.3637 -0.872862 -0.872871 + 1856 1857001 3.08005e-05 1.36327 -0.872871 -0.872871 + 1857 1858001 3.07084e-05 1.36426 -0.872834 -0.872871 + 1858 1859001 3.06166e-05 1.36322 -0.872871 -0.872871 + 1859 1860001 3.0525e-05 1.3629 -0.87287 -0.872871 + 1860 1861001 3.04337e-05 1.3629 -0.87287 -0.872871 + 1861 1862001 3.03427e-05 1.36321 -0.872871 -0.872871 + 1862 1863001 3.02519e-05 1.36252 -0.87286 -0.872871 + 1863 1864001 3.01614e-05 1.36339 -0.872869 -0.872871 + 1864 1865001 3.00712e-05 1.36339 -0.872869 -0.872871 + 1865 1866001 2.99813e-05 1.36339 -0.872869 -0.872871 + 1866 1867001 2.98916e-05 1.36339 -0.872869 -0.872871 + 1867 1868001 2.98022e-05 1.36143 -0.872787 -0.872871 + 1868 1869001 2.9713e-05 1.36473 -0.872797 -0.872871 + 1869 1870001 2.96242e-05 1.36473 -0.872797 -0.872871 + 1870 1871001 2.95356e-05 1.3629 -0.87287 -0.872871 + 1871 1872001 2.94472e-05 1.36281 -0.872868 -0.872871 + 1872 1873001 2.93591e-05 1.36313 -0.872871 -0.872871 + 1873 1874001 2.92713e-05 1.36354 -0.872866 -0.872871 + 1874 1875001 2.91838e-05 1.36354 -0.872866 -0.872871 + 1875 1876001 2.90965e-05 1.3639 -0.872854 -0.872871 + 1876 1877001 2.90095e-05 1.36339 -0.872869 -0.872871 + 1877 1878001 2.89227e-05 1.36168 -0.87281 -0.872871 + 1878 1879001 2.88362e-05 1.36312 -0.872871 -0.872871 + 1879 1880001 2.87499e-05 1.36406 -0.872846 -0.872871 + 1880 1881001 2.86639e-05 1.3622 -0.872846 -0.872871 + 1881 1882001 2.85782e-05 1.3622 -0.872846 -0.872871 + 1882 1883001 2.84927e-05 1.3622 -0.872846 -0.872871 + 1883 1884001 2.84075e-05 1.36263 -0.872864 -0.872871 + 1884 1885001 2.83225e-05 1.36356 -0.872866 -0.872871 + 1885 1886001 2.82378e-05 1.36356 -0.872866 -0.872871 + 1886 1887001 2.81534e-05 1.36384 -0.872857 -0.872871 + 1887 1888001 2.80692e-05 1.36384 -0.872857 -0.872871 + 1888 1889001 2.79852e-05 1.36346 -0.872868 -0.872871 + 1889 1890001 2.79015e-05 1.36346 -0.872868 -0.872871 + 1890 1891001 2.7818e-05 1.36331 -0.87287 -0.872871 + 1891 1892001 2.77348e-05 1.36331 -0.87287 -0.872871 + 1892 1893001 2.76519e-05 1.36331 -0.87287 -0.872871 + 1893 1894001 2.75692e-05 1.3627 -0.872866 -0.872871 + 1894 1895001 2.74867e-05 1.36355 -0.872866 -0.872871 + 1895 1896001 2.74045e-05 1.36355 -0.872866 -0.872871 + 1896 1897001 2.73225e-05 1.36283 -0.872869 -0.872871 + 1897 1898001 2.72408e-05 1.36174 -0.872815 -0.872871 + 1898 1899001 2.71593e-05 1.36234 -0.872853 -0.872871 + 1899 1900001 2.70781e-05 1.36234 -0.872853 -0.872871 + 1900 1901001 2.69971e-05 1.3623 -0.872851 -0.872871 + 1901 1902001 2.69164e-05 1.36299 -0.872871 -0.872871 + 1902 1903001 2.68359e-05 1.36263 -0.872864 -0.872871 + 1903 1904001 2.67556e-05 1.36254 -0.872861 -0.872871 + 1904 1905001 2.66756e-05 1.36254 -0.872861 -0.872871 + 1905 1906001 2.65958e-05 1.36194 -0.87283 -0.872871 + 1906 1907001 2.65162e-05 1.36194 -0.87283 -0.872871 + 1907 1908001 2.64369e-05 1.3635 -0.872867 -0.872871 + 1908 1909001 2.63578e-05 1.36316 -0.872871 -0.872871 + 1909 1910001 2.6279e-05 1.36316 -0.872871 -0.872871 + 1910 1911001 2.62004e-05 1.36316 -0.872871 -0.872871 + 1911 1912001 2.6122e-05 1.36316 -0.872871 -0.872871 + 1912 1913001 2.60439e-05 1.363 -0.872871 -0.872871 + 1913 1914001 2.5966e-05 1.36462 -0.872806 -0.872871 + 1914 1915001 2.58883e-05 1.3637 -0.872862 -0.872871 + 1915 1916001 2.58109e-05 1.36303 -0.872871 -0.872871 + 1916 1917001 2.57337e-05 1.36299 -0.872871 -0.872871 + 1917 1918001 2.56567e-05 1.36299 -0.872871 -0.872871 + 1918 1919001 2.558e-05 1.36299 -0.872871 -0.872871 + 1919 1920001 2.55035e-05 1.36331 -0.87287 -0.872871 + 1920 1921001 2.54272e-05 1.36333 -0.87287 -0.872871 + 1921 1922001 2.53511e-05 1.36371 -0.872861 -0.872871 + 1922 1923001 2.52753e-05 1.36377 -0.872859 -0.872871 + 1923 1924001 2.51997e-05 1.36377 -0.872859 -0.872871 + 1924 1925001 2.51244e-05 1.36377 -0.872859 -0.872871 + 1925 1926001 2.50492e-05 1.36289 -0.87287 -0.872871 + 1926 1927001 2.49743e-05 1.36289 -0.87287 -0.872871 + 1927 1928001 2.48996e-05 1.36289 -0.87287 -0.872871 + 1928 1929001 2.48251e-05 1.36348 -0.872868 -0.872871 + 1929 1930001 2.47509e-05 1.36348 -0.872868 -0.872871 + 1930 1931001 2.46768e-05 1.36323 -0.872871 -0.872871 + 1931 1932001 2.4603e-05 1.36344 -0.872868 -0.872871 + 1932 1933001 2.45294e-05 1.36315 -0.872871 -0.872871 + 1933 1934001 2.44561e-05 1.36358 -0.872865 -0.872871 + 1934 1935001 2.43829e-05 1.36358 -0.872865 -0.872871 + 1935 1936001 2.431e-05 1.36254 -0.872861 -0.872871 + 1936 1937001 2.42373e-05 1.36299 -0.872871 -0.872871 + 1937 1938001 2.41648e-05 1.36335 -0.87287 -0.872871 + 1938 1939001 2.40925e-05 1.36274 -0.872867 -0.872871 + 1939 1940001 2.40204e-05 1.36274 -0.872867 -0.872871 + 1940 1941001 2.39486e-05 1.36274 -0.872867 -0.872871 + 1941 1942001 2.3877e-05 1.36274 -0.872867 -0.872871 + 1942 1943001 2.38055e-05 1.36274 -0.872867 -0.872871 + 1943 1944001 2.37343e-05 1.36287 -0.872869 -0.872871 + 1944 1945001 2.36633e-05 1.36345 -0.872868 -0.872871 + 1945 1946001 2.35926e-05 1.36224 -0.872848 -0.872871 + 1946 1947001 2.3522e-05 1.36224 -0.872848 -0.872871 + 1947 1948001 2.34516e-05 1.36417 -0.87284 -0.872871 + 1948 1949001 2.33815e-05 1.36173 -0.872815 -0.872871 + 1949 1950001 2.33116e-05 1.36173 -0.872815 -0.872871 + 1950 1951001 2.32418e-05 1.36345 -0.872868 -0.872871 + 1951 1952001 2.31723e-05 1.36286 -0.872869 -0.872871 + 1952 1953001 2.3103e-05 1.36286 -0.872869 -0.872871 + 1953 1954001 2.30339e-05 1.36286 -0.872869 -0.872871 + 1954 1955001 2.2965e-05 1.36286 -0.872869 -0.872871 + 1955 1956001 2.28963e-05 1.36385 -0.872856 -0.872871 + 1956 1957001 2.28278e-05 1.36256 -0.872862 -0.872871 + 1957 1958001 2.27596e-05 1.36256 -0.872862 -0.872871 + 1958 1959001 2.26915e-05 1.36256 -0.872862 -0.872871 + 1959 1960001 2.26236e-05 1.36256 -0.872862 -0.872871 + 1960 1961001 2.2556e-05 1.36357 -0.872866 -0.872871 + 1961 1962001 2.24885e-05 1.36282 -0.872868 -0.872871 + 1962 1963001 2.24212e-05 1.36282 -0.872868 -0.872871 + 1963 1964001 2.23542e-05 1.36373 -0.872861 -0.872871 + 1964 1965001 2.22873e-05 1.36382 -0.872857 -0.872871 + 1965 1966001 2.22206e-05 1.36305 -0.872871 -0.872871 + 1966 1967001 2.21542e-05 1.36346 -0.872868 -0.872871 + 1967 1968001 2.20879e-05 1.36285 -0.872869 -0.872871 + 1968 1969001 2.20219e-05 1.36317 -0.872871 -0.872871 + 1969 1970001 2.1956e-05 1.36291 -0.87287 -0.872871 + 1970 1971001 2.18903e-05 1.36308 -0.872871 -0.872871 + 1971 1972001 2.18248e-05 1.36197 -0.872832 -0.872871 + 1972 1973001 2.17596e-05 1.36323 -0.872871 -0.872871 + 1973 1974001 2.16945e-05 1.36323 -0.872871 -0.872871 + 1974 1975001 2.16296e-05 1.36324 -0.872871 -0.872871 + 1975 1976001 2.15649e-05 1.36323 -0.872871 -0.872871 + 1976 1977001 2.15004e-05 1.36323 -0.872871 -0.872871 + 1977 1978001 2.14361e-05 1.36378 -0.872859 -0.872871 + 1978 1979001 2.1372e-05 1.36314 -0.872871 -0.872871 + 1979 1980001 2.1308e-05 1.36327 -0.872871 -0.872871 + 1980 1981001 2.12443e-05 1.3631 -0.872871 -0.872871 + 1981 1982001 2.11808e-05 1.3631 -0.872871 -0.872871 + 1982 1983001 2.11174e-05 1.36334 -0.87287 -0.872871 + 1983 1984001 2.10543e-05 1.36334 -0.87287 -0.872871 + 1984 1985001 2.09913e-05 1.36334 -0.87287 -0.872871 + 1985 1986001 2.09285e-05 1.36258 -0.872862 -0.872871 + 1986 1987001 2.08659e-05 1.36258 -0.872862 -0.872871 + 1987 1988001 2.08035e-05 1.36258 -0.872862 -0.872871 + 1988 1989001 2.07413e-05 1.36258 -0.872862 -0.872871 + 1989 1990001 2.06792e-05 1.36367 -0.872863 -0.872871 + 1990 1991001 2.06174e-05 1.3623 -0.872851 -0.872871 + 1991 1992001 2.05557e-05 1.36308 -0.872871 -0.872871 + 1992 1993001 2.04942e-05 1.36234 -0.872853 -0.872871 + 1993 1994001 2.04329e-05 1.36272 -0.872866 -0.872871 + 1994 1995001 2.03718e-05 1.36272 -0.872866 -0.872871 + 1995 1996001 2.03109e-05 1.36272 -0.872866 -0.872871 + 1996 1997001 2.02501e-05 1.36272 -0.872866 -0.872871 + 1997 1998001 2.01896e-05 1.36272 -0.872866 -0.872871 + 1998 1999001 2.01292e-05 1.36226 -0.872849 -0.872871 + 1999 2000001 2.0069e-05 1.36315 -0.872871 -0.872871 + 2000 2001001 2.00089e-05 1.36315 -0.872871 -0.872871 + 2001 2002001 1.99491e-05 1.36315 -0.872871 -0.872871 + 2002 2003001 1.98894e-05 1.36347 -0.872868 -0.872871 + 2003 2004001 1.98299e-05 1.36275 -0.872867 -0.872871 + 2004 2005001 1.97706e-05 1.36275 -0.872867 -0.872871 + 2005 2006001 1.97115e-05 1.36255 -0.872862 -0.872871 + 2006 2007001 1.96525e-05 1.36276 -0.872867 -0.872871 + 2007 2008001 1.95937e-05 1.36276 -0.872867 -0.872871 + 2008 2009001 1.95351e-05 1.36332 -0.87287 -0.872871 + 2009 2010001 1.94767e-05 1.36332 -0.87287 -0.872871 + 2010 2011001 1.94185e-05 1.36332 -0.87287 -0.872871 + 2011 2012001 1.93604e-05 1.36361 -0.872864 -0.872871 + 2012 2013001 1.93025e-05 1.36361 -0.872864 -0.872871 + 2013 2014001 1.92447e-05 1.36361 -0.872864 -0.872871 + 2014 2015001 1.91872e-05 1.36268 -0.872865 -0.872871 + 2015 2016001 1.91298e-05 1.36268 -0.872865 -0.872871 + 2016 2017001 1.90726e-05 1.36385 -0.872856 -0.872871 + 2017 2018001 1.90155e-05 1.36385 -0.872856 -0.872871 + 2018 2019001 1.89586e-05 1.36347 -0.872868 -0.872871 + 2019 2020001 1.89019e-05 1.36315 -0.872871 -0.872871 + 2020 2021001 1.88454e-05 1.36315 -0.872871 -0.872871 + 2021 2022001 1.8789e-05 1.36315 -0.872871 -0.872871 + 2022 2023001 1.87328e-05 1.36275 -0.872867 -0.872871 + 2023 2024001 1.86768e-05 1.36285 -0.872869 -0.872871 + 2024 2025001 1.86209e-05 1.36192 -0.872829 -0.872871 + 2025 2026001 1.85652e-05 1.36271 -0.872866 -0.872871 + 2026 2027001 1.85097e-05 1.3624 -0.872856 -0.872871 + 2027 2028001 1.84544e-05 1.36254 -0.872861 -0.872871 + 2028 2029001 1.83992e-05 1.3622 -0.872846 -0.872871 + 2029 2030001 1.83441e-05 1.36245 -0.872858 -0.872871 + 2030 2031001 1.82893e-05 1.36363 -0.872864 -0.872871 + 2031 2032001 1.82345e-05 1.36347 -0.872868 -0.872871 + 2032 2033001 1.818e-05 1.36254 -0.872861 -0.872871 + 2033 2034001 1.81256e-05 1.36237 -0.872854 -0.872871 + 2034 2035001 1.80714e-05 1.36237 -0.872854 -0.872871 + 2035 2036001 1.80174e-05 1.36248 -0.872859 -0.872871 + 2036 2037001 1.79635e-05 1.36257 -0.872862 -0.872871 + 2037 2038001 1.79097e-05 1.36346 -0.872868 -0.872871 + 2038 2039001 1.78562e-05 1.36346 -0.872868 -0.872871 + 2039 2040001 1.78028e-05 1.36346 -0.872868 -0.872871 + 2040 2041001 1.77495e-05 1.36346 -0.872868 -0.872871 + 2041 2042001 1.76964e-05 1.36346 -0.872868 -0.872871 + 2042 2043001 1.76435e-05 1.36346 -0.872868 -0.872871 + 2043 2044001 1.75907e-05 1.36334 -0.87287 -0.872871 + 2044 2045001 1.75381e-05 1.36334 -0.87287 -0.872871 + 2045 2046001 1.74857e-05 1.3637 -0.872862 -0.872871 + 2046 2047001 1.74334e-05 1.3637 -0.872862 -0.872871 + 2047 2048001 1.73812e-05 1.3637 -0.872862 -0.872871 + 2048 2049001 1.73292e-05 1.3637 -0.872862 -0.872871 + 2049 2050001 1.72774e-05 1.36239 -0.872855 -0.872871 + 2050 2051001 1.72257e-05 1.36375 -0.87286 -0.872871 + 2051 2052001 1.71742e-05 1.36282 -0.872868 -0.872871 + 2052 2053001 1.71228e-05 1.36282 -0.872868 -0.872871 + 2053 2054001 1.70716e-05 1.36282 -0.872868 -0.872871 + 2054 2055001 1.70205e-05 1.36282 -0.872868 -0.872871 + 2055 2056001 1.69696e-05 1.36282 -0.872868 -0.872871 + 2056 2057001 1.69189e-05 1.36282 -0.872868 -0.872871 + 2057 2058001 1.68683e-05 1.36282 -0.872868 -0.872871 + 2058 2059001 1.68178e-05 1.36282 -0.872868 -0.872871 + 2059 2060001 1.67675e-05 1.36282 -0.872868 -0.872871 + 2060 2061001 1.67174e-05 1.36282 -0.872868 -0.872871 + 2061 2062001 1.66674e-05 1.36282 -0.872868 -0.872871 + 2062 2063001 1.66175e-05 1.36309 -0.872871 -0.872871 + 2063 2064001 1.65678e-05 1.36247 -0.872858 -0.872871 + 2064 2065001 1.65183e-05 1.36233 -0.872853 -0.872871 + 2065 2066001 1.64689e-05 1.3627 -0.872866 -0.872871 + 2066 2067001 1.64196e-05 1.3627 -0.872866 -0.872871 + 2067 2068001 1.63705e-05 1.3627 -0.872866 -0.872871 + 2068 2069001 1.63215e-05 1.3627 -0.872866 -0.872871 + 2069 2070001 1.62727e-05 1.3625 -0.87286 -0.872871 + 2070 2071001 1.6224e-05 1.36342 -0.872869 -0.872871 + 2071 2072001 1.61755e-05 1.36214 -0.872843 -0.872871 + 2072 2073001 1.61271e-05 1.36301 -0.872871 -0.872871 + 2073 2074001 1.60789e-05 1.36368 -0.872862 -0.872871 + 2074 2075001 1.60308e-05 1.36337 -0.872869 -0.872871 + 2075 2076001 1.59828e-05 1.36337 -0.872869 -0.872871 + 2076 2077001 1.5935e-05 1.36337 -0.872869 -0.872871 + 2077 2078001 1.58874e-05 1.36317 -0.872871 -0.872871 + 2078 2079001 1.58399e-05 1.36423 -0.872836 -0.872871 + 2079 2080001 1.57925e-05 1.3621 -0.872841 -0.872871 + 2080 2081001 1.57452e-05 1.36254 -0.872861 -0.872871 + 2081 2082001 1.56981e-05 1.36257 -0.872862 -0.872871 + 2082 2083001 1.56512e-05 1.36257 -0.872862 -0.872871 + 2083 2084001 1.56044e-05 1.36257 -0.872862 -0.872871 + 2084 2085001 1.55577e-05 1.36257 -0.872862 -0.872871 + 2085 2086001 1.55112e-05 1.36257 -0.872862 -0.872871 + 2086 2087001 1.54648e-05 1.36337 -0.87287 -0.872871 + 2087 2088001 1.54185e-05 1.36241 -0.872856 -0.872871 + 2088 2089001 1.53724e-05 1.36241 -0.872856 -0.872871 + 2089 2090001 1.53264e-05 1.3627 -0.872866 -0.872871 + 2090 2091001 1.52806e-05 1.3627 -0.872866 -0.872871 + 2091 2092001 1.52349e-05 1.3627 -0.872866 -0.872871 + 2092 2093001 1.51893e-05 1.3636 -0.872865 -0.872871 + 2093 2094001 1.51439e-05 1.36265 -0.872865 -0.872871 + 2094 2095001 1.50986e-05 1.36265 -0.872865 -0.872871 + 2095 2096001 1.50534e-05 1.36265 -0.872865 -0.872871 + 2096 2097001 1.50084e-05 1.36265 -0.872865 -0.872871 + 2097 2098001 1.49635e-05 1.36265 -0.872865 -0.872871 + 2098 2099001 1.49188e-05 1.36368 -0.872863 -0.872871 + 2099 2100001 1.48741e-05 1.36315 -0.872871 -0.872871 + 2100 2101001 1.48296e-05 1.36315 -0.872871 -0.872871 + 2101 2102001 1.47853e-05 1.36315 -0.872871 -0.872871 + 2102 2103001 1.47411e-05 1.36315 -0.872871 -0.872871 + 2103 2104001 1.4697e-05 1.36315 -0.872871 -0.872871 + 2104 2105001 1.4653e-05 1.36315 -0.872871 -0.872871 + 2105 2106001 1.46092e-05 1.36315 -0.872871 -0.872871 + 2106 2107001 1.45655e-05 1.36315 -0.872871 -0.872871 + 2107 2108001 1.45219e-05 1.36315 -0.872871 -0.872871 + 2108 2109001 1.44785e-05 1.36276 -0.872867 -0.872871 + 2109 2110001 1.44352e-05 1.36359 -0.872865 -0.872871 + 2110 2111001 1.4392e-05 1.36345 -0.872868 -0.872871 + 2111 2112001 1.4349e-05 1.36345 -0.872868 -0.872871 + 2112 2113001 1.4306e-05 1.36238 -0.872855 -0.872871 + 2113 2114001 1.42633e-05 1.36273 -0.872867 -0.872871 + 2114 2115001 1.42206e-05 1.36274 -0.872867 -0.872871 + 2115 2116001 1.41781e-05 1.36274 -0.872867 -0.872871 + 2116 2117001 1.41356e-05 1.36274 -0.872867 -0.872871 + 2117 2118001 1.40934e-05 1.36274 -0.872867 -0.872871 + 2118 2119001 1.40512e-05 1.36365 -0.872863 -0.872871 + 2119 2120001 1.40092e-05 1.36235 -0.872854 -0.872871 + 2120 2121001 1.39673e-05 1.36235 -0.872854 -0.872871 + 2121 2122001 1.39255e-05 1.36235 -0.872854 -0.872871 + 2122 2123001 1.38839e-05 1.36235 -0.872854 -0.872871 + 2123 2124001 1.38423e-05 1.3631 -0.872871 -0.872871 + 2124 2125001 1.38009e-05 1.3631 -0.872871 -0.872871 + 2125 2126001 1.37596e-05 1.36287 -0.872869 -0.872871 + 2126 2127001 1.37185e-05 1.36232 -0.872852 -0.872871 + 2127 2128001 1.36775e-05 1.36261 -0.872863 -0.872871 + 2128 2129001 1.36366e-05 1.36317 -0.872871 -0.872871 + 2129 2130001 1.35958e-05 1.36317 -0.872871 -0.872871 + 2130 2131001 1.35551e-05 1.36329 -0.87287 -0.872871 + 2131 2132001 1.35146e-05 1.36256 -0.872862 -0.872871 + 2132 2133001 1.34741e-05 1.36256 -0.872862 -0.872871 + 2133 2134001 1.34338e-05 1.36256 -0.872862 -0.872871 + 2134 2135001 1.33936e-05 1.36256 -0.872862 -0.872871 + 2135 2136001 1.33536e-05 1.36256 -0.872862 -0.872871 + 2136 2137001 1.33136e-05 1.3631 -0.872871 -0.872871 + 2137 2138001 1.32738e-05 1.3631 -0.872871 -0.872871 + 2138 2139001 1.32341e-05 1.36292 -0.87287 -0.872871 + 2139 2140001 1.31945e-05 1.36331 -0.87287 -0.872871 + 2140 2141001 1.31551e-05 1.36239 -0.872855 -0.872871 + 2141 2142001 1.31157e-05 1.36239 -0.872855 -0.872871 + 2142 2143001 1.30765e-05 1.36317 -0.872871 -0.872871 + 2143 2144001 1.30374e-05 1.36299 -0.872871 -0.872871 + 2144 2145001 1.29984e-05 1.36299 -0.872871 -0.872871 + 2145 2146001 1.29595e-05 1.36335 -0.87287 -0.872871 + 2146 2147001 1.29208e-05 1.36335 -0.87287 -0.872871 + 2147 2148001 1.28821e-05 1.36334 -0.87287 -0.872871 + 2148 2149001 1.28436e-05 1.36303 -0.872871 -0.872871 + 2149 2150001 1.28052e-05 1.36337 -0.87287 -0.872871 + 2150 2151001 1.27669e-05 1.36274 -0.872867 -0.872871 + 2151 2152001 1.27287e-05 1.36327 -0.872871 -0.872871 + 2152 2153001 1.26906e-05 1.36327 -0.872871 -0.872871 + 2153 2154001 1.26526e-05 1.36291 -0.87287 -0.872871 + 2154 2155001 1.26148e-05 1.36291 -0.87287 -0.872871 + 2155 2156001 1.25771e-05 1.36291 -0.87287 -0.872871 + 2156 2157001 1.25394e-05 1.36291 -0.87287 -0.872871 + 2157 2158001 1.25019e-05 1.36291 -0.87287 -0.872871 + 2158 2159001 1.24645e-05 1.36236 -0.872854 -0.872871 + 2159 2160001 1.24273e-05 1.36232 -0.872852 -0.872871 + 2160 2161001 1.23901e-05 1.36253 -0.872861 -0.872871 + 2161 2162001 1.2353e-05 1.36186 -0.872824 -0.872871 + 2162 2163001 1.23161e-05 1.36239 -0.872855 -0.872871 + 2163 2164001 1.22793e-05 1.36239 -0.872855 -0.872871 + 2164 2165001 1.22425e-05 1.36239 -0.872855 -0.872871 + 2165 2166001 1.22059e-05 1.36239 -0.872855 -0.872871 + 2166 2167001 1.21694e-05 1.36273 -0.872867 -0.872871 + 2167 2168001 1.2133e-05 1.36273 -0.872867 -0.872871 + 2168 2169001 1.20967e-05 1.36346 -0.872868 -0.872871 + 2169 2170001 1.20605e-05 1.36346 -0.872868 -0.872871 + 2170 2171001 1.20245e-05 1.36341 -0.872869 -0.872871 + 2171 2172001 1.19885e-05 1.36341 -0.872869 -0.872871 + 2172 2173001 1.19526e-05 1.36341 -0.872869 -0.872871 + 2173 2174001 1.19169e-05 1.36313 -0.872871 -0.872871 + 2174 2175001 1.18812e-05 1.36238 -0.872855 -0.872871 + 2175 2176001 1.18457e-05 1.36302 -0.872871 -0.872871 + 2176 2177001 1.18103e-05 1.36302 -0.872871 -0.872871 + 2177 2178001 1.17749e-05 1.36271 -0.872866 -0.872871 + 2178 2179001 1.17397e-05 1.36271 -0.872866 -0.872871 + 2179 2180001 1.17046e-05 1.36271 -0.872866 -0.872871 + 2180 2181001 1.16696e-05 1.36263 -0.872864 -0.872871 + 2181 2182001 1.16347e-05 1.36263 -0.872864 -0.872871 + 2182 2183001 1.15999e-05 1.36292 -0.87287 -0.872871 + 2183 2184001 1.15652e-05 1.36274 -0.872867 -0.872871 + 2184 2185001 1.15306e-05 1.36274 -0.872867 -0.872871 + 2185 2186001 1.14961e-05 1.36384 -0.872857 -0.872871 + 2186 2187001 1.14617e-05 1.36384 -0.872857 -0.872871 + 2187 2188001 1.14275e-05 1.36395 -0.872852 -0.872871 + 2188 2189001 1.13933e-05 1.36273 -0.872867 -0.872871 + 2189 2190001 1.13592e-05 1.36273 -0.872867 -0.872871 + 2190 2191001 1.13252e-05 1.36273 -0.872867 -0.872871 + 2191 2192001 1.12913e-05 1.36273 -0.872867 -0.872871 + 2192 2193001 1.12576e-05 1.36322 -0.872871 -0.872871 + 2193 2194001 1.12239e-05 1.36322 -0.872871 -0.872871 + 2194 2195001 1.11903e-05 1.36281 -0.872868 -0.872871 + 2195 2196001 1.11569e-05 1.36314 -0.872871 -0.872871 + 2196 2197001 1.11235e-05 1.36344 -0.872868 -0.872871 + 2197 2198001 1.10902e-05 1.36316 -0.872871 -0.872871 + 2198 2199001 1.1057e-05 1.36316 -0.872871 -0.872871 + 2199 2200001 1.1024e-05 1.36316 -0.872871 -0.872871 + 2200 2201001 1.0991e-05 1.36316 -0.872871 -0.872871 + 2201 2202001 1.09581e-05 1.36316 -0.872871 -0.872871 + 2202 2203001 1.09254e-05 1.36287 -0.872869 -0.872871 + 2203 2204001 1.08927e-05 1.36287 -0.872869 -0.872871 + 2204 2205001 1.08601e-05 1.36287 -0.872869 -0.872871 + 2205 2206001 1.08276e-05 1.36287 -0.872869 -0.872871 + 2206 2207001 1.07952e-05 1.36287 -0.872869 -0.872871 + 2207 2208001 1.07629e-05 1.36218 -0.872845 -0.872871 + 2208 2209001 1.07307e-05 1.36203 -0.872836 -0.872871 + 2209 2210001 1.06986e-05 1.36339 -0.872869 -0.872871 + 2210 2211001 1.06666e-05 1.36339 -0.872869 -0.872871 + 2211 2212001 1.06347e-05 1.36339 -0.872869 -0.872871 + 2212 2213001 1.06029e-05 1.36279 -0.872868 -0.872871 + 2213 2214001 1.05712e-05 1.36279 -0.872868 -0.872871 + 2214 2215001 1.05396e-05 1.36279 -0.872868 -0.872871 + 2215 2216001 1.05081e-05 1.36304 -0.872871 -0.872871 + 2216 2217001 1.04766e-05 1.36337 -0.87287 -0.872871 + 2217 2218001 1.04453e-05 1.36337 -0.87287 -0.872871 + 2218 2219001 1.04141e-05 1.36374 -0.87286 -0.872871 + 2219 2220001 1.03829e-05 1.36374 -0.87286 -0.872871 + 2220 2221001 1.03519e-05 1.36371 -0.872861 -0.872871 + 2221 2222001 1.03209e-05 1.36273 -0.872867 -0.872871 + 2222 2223001 1.029e-05 1.36299 -0.872871 -0.872871 + 2223 2224001 1.02593e-05 1.36348 -0.872868 -0.872871 + 2224 2225001 1.02286e-05 1.36252 -0.87286 -0.872871 + 2225 2226001 1.0198e-05 1.36252 -0.87286 -0.872871 + 2226 2227001 1.01675e-05 1.36252 -0.87286 -0.872871 + 2227 2228001 1.01371e-05 1.36226 -0.872849 -0.872871 + 2228 2229001 1.01067e-05 1.36369 -0.872862 -0.872871 + 2229 2230001 1.00765e-05 1.36369 -0.872862 -0.872871 + 2230 2231001 1.00464e-05 1.36369 -0.872862 -0.872871 + 2231 2232001 1.00163e-05 1.36369 -0.872862 -0.872871 + 2232 2233001 9.98637e-06 1.36369 -0.872862 -0.872871 + 2233 2234001 9.9565e-06 1.3633 -0.87287 -0.872871 + 2234 2235001 9.92672e-06 1.3633 -0.87287 -0.872871 + 2235 2236001 9.89703e-06 1.36289 -0.87287 -0.872871 + 2236 2237001 9.86742e-06 1.36351 -0.872867 -0.872871 + 2237 2238001 9.83791e-06 1.36323 -0.872871 -0.872871 + 2238 2239001 9.80848e-06 1.36323 -0.872871 -0.872871 + 2239 2240001 9.77915e-06 1.36323 -0.872871 -0.872871 + 2240 2241001 9.7499e-06 1.36356 -0.872866 -0.872871 + 2241 2242001 9.72073e-06 1.36284 -0.872869 -0.872871 + 2242 2243001 9.69166e-06 1.36284 -0.872869 -0.872871 + 2243 2244001 9.66267e-06 1.36307 -0.872871 -0.872871 + 2244 2245001 9.63377e-06 1.36307 -0.872871 -0.872871 + 2245 2246001 9.60496e-06 1.36307 -0.872871 -0.872871 + 2246 2247001 9.57623e-06 1.36337 -0.87287 -0.872871 + 2247 2248001 9.54758e-06 1.36337 -0.87287 -0.872871 + 2248 2249001 9.51903e-06 1.36305 -0.872871 -0.872871 + 2249 2250001 9.49056e-06 1.36305 -0.872871 -0.872871 + 2250 2251001 9.46217e-06 1.36317 -0.872871 -0.872871 + 2251 2252001 9.43387e-06 1.36317 -0.872871 -0.872871 + 2252 2253001 9.40565e-06 1.36317 -0.872871 -0.872871 + 2253 2254001 9.37752e-06 1.36339 -0.872869 -0.872871 + 2254 2255001 9.34947e-06 1.36385 -0.872856 -0.872871 + 2255 2256001 9.3215e-06 1.36429 -0.872832 -0.872871 + 2256 2257001 9.29362e-06 1.36398 -0.87285 -0.872871 + 2257 2258001 9.26583e-06 1.36398 -0.87285 -0.872871 + 2258 2259001 9.23811e-06 1.36398 -0.87285 -0.872871 + 2259 2260001 9.21048e-06 1.36258 -0.872862 -0.872871 + 2260 2261001 9.18293e-06 1.36258 -0.872862 -0.872871 + 2261 2262001 9.15547e-06 1.36258 -0.872862 -0.872871 + 2262 2263001 9.12808e-06 1.3631 -0.872871 -0.872871 + 2263 2264001 9.10078e-06 1.36306 -0.872871 -0.872871 + 2264 2265001 9.07356e-06 1.36306 -0.872871 -0.872871 + 2265 2266001 9.04642e-06 1.36306 -0.872871 -0.872871 + 2266 2267001 9.01936e-06 1.36306 -0.872871 -0.872871 + 2267 2268001 8.99238e-06 1.36335 -0.87287 -0.872871 + 2268 2269001 8.96549e-06 1.36335 -0.87287 -0.872871 + 2269 2270001 8.93867e-06 1.36341 -0.872869 -0.872871 + 2270 2271001 8.91194e-06 1.36278 -0.872868 -0.872871 + 2271 2272001 8.88528e-06 1.36379 -0.872859 -0.872871 + 2272 2273001 8.8587e-06 1.36379 -0.872859 -0.872871 + 2273 2274001 8.83221e-06 1.36379 -0.872859 -0.872871 + 2274 2275001 8.80579e-06 1.3636 -0.872865 -0.872871 + 2275 2276001 8.77945e-06 1.36336 -0.87287 -0.872871 + 2276 2277001 8.75319e-06 1.36318 -0.872871 -0.872871 + 2277 2278001 8.72701e-06 1.36318 -0.872871 -0.872871 + 2278 2279001 8.70091e-06 1.36372 -0.872861 -0.872871 + 2279 2280001 8.67488e-06 1.36332 -0.87287 -0.872871 + 2280 2281001 8.64894e-06 1.36332 -0.87287 -0.872871 + 2281 2282001 8.62307e-06 1.36332 -0.87287 -0.872871 + 2282 2283001 8.59728e-06 1.36332 -0.87287 -0.872871 + 2283 2284001 8.57156e-06 1.36332 -0.87287 -0.872871 + 2284 2285001 8.54592e-06 1.36332 -0.87287 -0.872871 + 2285 2286001 8.52036e-06 1.36332 -0.87287 -0.872871 + 2286 2287001 8.49488e-06 1.36332 -0.87287 -0.872871 + 2287 2288001 8.46947e-06 1.36258 -0.872862 -0.872871 + 2288 2289001 8.44414e-06 1.36258 -0.872862 -0.872871 + 2289 2290001 8.41888e-06 1.36258 -0.872862 -0.872871 + 2290 2291001 8.3937e-06 1.36258 -0.872862 -0.872871 + 2291 2292001 8.36859e-06 1.36355 -0.872866 -0.872871 + 2292 2293001 8.34356e-06 1.36355 -0.872866 -0.872871 + 2293 2294001 8.31861e-06 1.36326 -0.872871 -0.872871 + 2294 2295001 8.29373e-06 1.36383 -0.872857 -0.872871 + 2295 2296001 8.26892e-06 1.36339 -0.872869 -0.872871 + 2296 2297001 8.24419e-06 1.36339 -0.872869 -0.872871 + 2297 2298001 8.21953e-06 1.36339 -0.872869 -0.872871 + 2298 2299001 8.19494e-06 1.3628 -0.872868 -0.872871 + 2299 2300001 8.17043e-06 1.36324 -0.872871 -0.872871 + 2300 2301001 8.14599e-06 1.36324 -0.872871 -0.872871 + 2301 2302001 8.12163e-06 1.36324 -0.872871 -0.872871 + 2302 2303001 8.09734e-06 1.36346 -0.872868 -0.872871 + 2303 2304001 8.07312e-06 1.36346 -0.872868 -0.872871 + 2304 2305001 8.04897e-06 1.36346 -0.872868 -0.872871 + 2305 2306001 8.0249e-06 1.36346 -0.872868 -0.872871 + 2306 2307001 8.00089e-06 1.36295 -0.87287 -0.872871 + 2307 2308001 7.97696e-06 1.36297 -0.87287 -0.872871 + 2308 2309001 7.9531e-06 1.36297 -0.87287 -0.872871 + 2309 2310001 7.92931e-06 1.36322 -0.872871 -0.872871 + 2310 2311001 7.9056e-06 1.36284 -0.872869 -0.872871 + 2311 2312001 7.88195e-06 1.36284 -0.872869 -0.872871 + 2312 2313001 7.85838e-06 1.36284 -0.872869 -0.872871 + 2313 2314001 7.83487e-06 1.36285 -0.872869 -0.872871 + 2314 2315001 7.81144e-06 1.36302 -0.872871 -0.872871 + 2315 2316001 7.78807e-06 1.36302 -0.872871 -0.872871 + 2316 2317001 7.76478e-06 1.3635 -0.872867 -0.872871 + 2317 2318001 7.74155e-06 1.3635 -0.872867 -0.872871 + 2318 2319001 7.7184e-06 1.3635 -0.872867 -0.872871 + 2319 2320001 7.69531e-06 1.3635 -0.872867 -0.872871 + 2320 2321001 7.6723e-06 1.3635 -0.872867 -0.872871 + 2321 2322001 7.64935e-06 1.3635 -0.872867 -0.872871 + 2322 2323001 7.62647e-06 1.36326 -0.872871 -0.872871 + 2323 2324001 7.60366e-06 1.36351 -0.872867 -0.872871 + 2324 2325001 7.58092e-06 1.36351 -0.872867 -0.872871 + 2325 2326001 7.55824e-06 1.36319 -0.872871 -0.872871 + 2326 2327001 7.53563e-06 1.36319 -0.872871 -0.872871 + 2327 2328001 7.51309e-06 1.36319 -0.872871 -0.872871 + 2328 2329001 7.49062e-06 1.36319 -0.872871 -0.872871 + 2329 2330001 7.46822e-06 1.36267 -0.872865 -0.872871 + 2330 2331001 7.44588e-06 1.36267 -0.872865 -0.872871 + 2331 2332001 7.42361e-06 1.36256 -0.872862 -0.872871 + 2332 2333001 7.40141e-06 1.36256 -0.872862 -0.872871 + 2333 2334001 7.37927e-06 1.36256 -0.872862 -0.872871 + 2334 2335001 7.3572e-06 1.36322 -0.872871 -0.872871 + 2335 2336001 7.33519e-06 1.36322 -0.872871 -0.872871 + 2336 2337001 7.31325e-06 1.36296 -0.87287 -0.872871 + 2337 2338001 7.29138e-06 1.36228 -0.87285 -0.872871 + 2338 2339001 7.26957e-06 1.36212 -0.872841 -0.872871 + 2339 2340001 7.24782e-06 1.36212 -0.872841 -0.872871 + 2340 2341001 7.22615e-06 1.36349 -0.872867 -0.872871 + 2341 2342001 7.20453e-06 1.36349 -0.872867 -0.872871 + 2342 2343001 7.18298e-06 1.36349 -0.872867 -0.872871 + 2343 2344001 7.1615e-06 1.36349 -0.872867 -0.872871 + 2344 2345001 7.14008e-06 1.36325 -0.872871 -0.872871 + 2345 2346001 7.11872e-06 1.36263 -0.872864 -0.872871 + 2346 2347001 7.09743e-06 1.36346 -0.872868 -0.872871 + 2347 2348001 7.0762e-06 1.36254 -0.872861 -0.872871 + 2348 2349001 7.05504e-06 1.36274 -0.872867 -0.872871 + 2349 2350001 7.03393e-06 1.363 -0.872871 -0.872871 + 2350 2351001 7.0129e-06 1.363 -0.872871 -0.872871 + 2351 2352001 6.99192e-06 1.363 -0.872871 -0.872871 + 2352 2353001 6.97101e-06 1.36302 -0.872871 -0.872871 + 2353 2354001 6.95016e-06 1.36312 -0.872871 -0.872871 + 2354 2355001 6.92937e-06 1.36312 -0.872871 -0.872871 + 2355 2356001 6.90864e-06 1.36312 -0.872871 -0.872871 + 2356 2357001 6.88798e-06 1.36294 -0.87287 -0.872871 + 2357 2358001 6.86738e-06 1.36294 -0.87287 -0.872871 + 2358 2359001 6.84684e-06 1.36295 -0.87287 -0.872871 + 2359 2360001 6.82636e-06 1.36295 -0.87287 -0.872871 + 2360 2361001 6.80594e-06 1.36295 -0.87287 -0.872871 + 2361 2362001 6.78558e-06 1.36295 -0.87287 -0.872871 + 2362 2363001 6.76529e-06 1.36295 -0.87287 -0.872871 + 2363 2364001 6.74505e-06 1.36295 -0.87287 -0.872871 + 2364 2365001 6.72488e-06 1.3627 -0.872866 -0.872871 + 2365 2366001 6.70476e-06 1.36351 -0.872867 -0.872871 + 2366 2367001 6.68471e-06 1.36302 -0.872871 -0.872871 + 2367 2368001 6.66471e-06 1.36302 -0.872871 -0.872871 + 2368 2369001 6.64478e-06 1.36302 -0.872871 -0.872871 + 2369 2370001 6.62491e-06 1.36302 -0.872871 -0.872871 + 2370 2371001 6.60509e-06 1.36302 -0.872871 -0.872871 + 2371 2372001 6.58533e-06 1.36306 -0.872871 -0.872871 + 2372 2373001 6.56564e-06 1.36306 -0.872871 -0.872871 + 2373 2374001 6.546e-06 1.36323 -0.872871 -0.872871 + 2374 2375001 6.52642e-06 1.36323 -0.872871 -0.872871 + 2375 2376001 6.5069e-06 1.36323 -0.872871 -0.872871 + 2376 2377001 6.48744e-06 1.36323 -0.872871 -0.872871 + 2377 2378001 6.46803e-06 1.36323 -0.872871 -0.872871 + 2378 2379001 6.44869e-06 1.36323 -0.872871 -0.872871 + 2379 2380001 6.4294e-06 1.36323 -0.872871 -0.872871 + 2380 2381001 6.41017e-06 1.36305 -0.872871 -0.872871 + 2381 2382001 6.39099e-06 1.36305 -0.872871 -0.872871 + 2382 2383001 6.37188e-06 1.36305 -0.872871 -0.872871 + 2383 2384001 6.35282e-06 1.36305 -0.872871 -0.872871 + 2384 2385001 6.33382e-06 1.36305 -0.872871 -0.872871 + 2385 2386001 6.31487e-06 1.36305 -0.872871 -0.872871 + 2386 2387001 6.29599e-06 1.36305 -0.872871 -0.872871 + 2387 2388001 6.27716e-06 1.36383 -0.872857 -0.872871 + 2388 2389001 6.25838e-06 1.36383 -0.872857 -0.872871 + 2389 2390001 6.23966e-06 1.3627 -0.872866 -0.872871 + 2390 2391001 6.221e-06 1.36353 -0.872867 -0.872871 + 2391 2392001 6.20239e-06 1.36353 -0.872867 -0.872871 + 2392 2393001 6.18384e-06 1.36353 -0.872867 -0.872871 + 2393 2394001 6.16534e-06 1.36353 -0.872867 -0.872871 + 2394 2395001 6.1469e-06 1.36353 -0.872867 -0.872871 + 2395 2396001 6.12852e-06 1.36349 -0.872867 -0.872871 + 2396 2397001 6.11019e-06 1.36305 -0.872871 -0.872871 + 2397 2398001 6.09191e-06 1.36305 -0.872871 -0.872871 + 2398 2399001 6.07369e-06 1.36305 -0.872871 -0.872871 + 2399 2400001 6.05552e-06 1.36323 -0.872871 -0.872871 + 2400 2401001 6.03741e-06 1.36323 -0.872871 -0.872871 + 2401 2402001 6.01935e-06 1.36323 -0.872871 -0.872871 + 2402 2403001 6.00135e-06 1.36311 -0.872871 -0.872871 + 2403 2404001 5.9834e-06 1.36311 -0.872871 -0.872871 + 2404 2405001 5.9655e-06 1.36311 -0.872871 -0.872871 + 2405 2406001 5.94766e-06 1.36311 -0.872871 -0.872871 + 2406 2407001 5.92987e-06 1.36318 -0.872871 -0.872871 + 2407 2408001 5.91213e-06 1.36318 -0.872871 -0.872871 + 2408 2409001 5.89445e-06 1.36351 -0.872867 -0.872871 + 2409 2410001 5.87682e-06 1.36265 -0.872865 -0.872871 + 2410 2411001 5.85924e-06 1.36265 -0.872865 -0.872871 + 2411 2412001 5.84172e-06 1.36299 -0.872871 -0.872871 + 2412 2413001 5.82424e-06 1.36299 -0.872871 -0.872871 + 2413 2414001 5.80682e-06 1.36299 -0.872871 -0.872871 + 2414 2415001 5.78945e-06 1.36299 -0.872871 -0.872871 + 2415 2416001 5.77214e-06 1.36299 -0.872871 -0.872871 + 2416 2417001 5.75487e-06 1.36328 -0.872871 -0.872871 + 2417 2418001 5.73766e-06 1.3629 -0.87287 -0.872871 + 2418 2419001 5.7205e-06 1.3629 -0.87287 -0.872871 + 2419 2420001 5.70339e-06 1.3627 -0.872866 -0.872871 + 2420 2421001 5.68633e-06 1.36367 -0.872863 -0.872871 + 2421 2422001 5.66932e-06 1.36367 -0.872863 -0.872871 + 2422 2423001 5.65237e-06 1.36367 -0.872863 -0.872871 + 2423 2424001 5.63546e-06 1.36277 -0.872867 -0.872871 + 2424 2425001 5.6186e-06 1.36277 -0.872867 -0.872871 + 2425 2426001 5.6018e-06 1.36311 -0.872871 -0.872871 + 2426 2427001 5.58504e-06 1.36311 -0.872871 -0.872871 + 2427 2428001 5.56834e-06 1.36366 -0.872863 -0.872871 + 2428 2429001 5.55168e-06 1.36295 -0.87287 -0.872871 + 2429 2430001 5.53508e-06 1.36295 -0.87287 -0.872871 + 2430 2431001 5.51852e-06 1.36295 -0.87287 -0.872871 + 2431 2432001 5.50202e-06 1.36319 -0.872871 -0.872871 + 2432 2433001 5.48556e-06 1.36319 -0.872871 -0.872871 + 2433 2434001 5.46915e-06 1.36312 -0.872871 -0.872871 + 2434 2435001 5.45279e-06 1.36243 -0.872857 -0.872871 + 2435 2436001 5.43648e-06 1.36268 -0.872865 -0.872871 + 2436 2437001 5.42022e-06 1.36329 -0.872871 -0.872871 + 2437 2438001 5.40401e-06 1.36292 -0.87287 -0.872871 + 2438 2439001 5.38785e-06 1.36261 -0.872863 -0.872871 + 2439 2440001 5.37173e-06 1.36261 -0.872863 -0.872871 + 2440 2441001 5.35567e-06 1.36261 -0.872863 -0.872871 + 2441 2442001 5.33965e-06 1.36319 -0.872871 -0.872871 + 2442 2443001 5.32368e-06 1.36319 -0.872871 -0.872871 + 2443 2444001 5.30775e-06 1.36319 -0.872871 -0.872871 + 2444 2445001 5.29188e-06 1.36267 -0.872865 -0.872871 + 2445 2446001 5.27605e-06 1.36272 -0.872866 -0.872871 + 2446 2447001 5.26027e-06 1.36297 -0.872871 -0.872871 + 2447 2448001 5.24453e-06 1.36297 -0.872871 -0.872871 + 2448 2449001 5.22885e-06 1.36322 -0.872871 -0.872871 + 2449 2450001 5.21321e-06 1.36322 -0.872871 -0.872871 + 2450 2451001 5.19761e-06 1.36322 -0.872871 -0.872871 + 2451 2452001 5.18207e-06 1.36322 -0.872871 -0.872871 + 2452 2453001 5.16657e-06 1.36322 -0.872871 -0.872871 + 2453 2454001 5.15112e-06 1.36316 -0.872871 -0.872871 + 2454 2455001 5.13571e-06 1.36294 -0.87287 -0.872871 + 2455 2456001 5.12035e-06 1.36323 -0.872871 -0.872871 + 2456 2457001 5.10503e-06 1.36293 -0.87287 -0.872871 + 2457 2458001 5.08976e-06 1.36293 -0.87287 -0.872871 + 2458 2459001 5.07454e-06 1.36288 -0.872869 -0.872871 + 2459 2460001 5.05936e-06 1.36288 -0.872869 -0.872871 + 2460 2461001 5.04423e-06 1.36288 -0.872869 -0.872871 + 2461 2462001 5.02914e-06 1.36288 -0.872869 -0.872871 + 2462 2463001 5.0141e-06 1.36319 -0.872871 -0.872871 + 2463 2464001 4.9991e-06 1.36331 -0.87287 -0.872871 + 2464 2465001 4.98415e-06 1.36331 -0.87287 -0.872871 + 2465 2466001 4.96924e-06 1.36331 -0.87287 -0.872871 + 2466 2467001 4.95438e-06 1.36285 -0.872869 -0.872871 + 2467 2468001 4.93956e-06 1.36341 -0.872869 -0.872871 + 2468 2469001 4.92479e-06 1.36341 -0.872869 -0.872871 + 2469 2470001 4.91006e-06 1.36341 -0.872869 -0.872871 + 2470 2471001 4.89537e-06 1.3631 -0.872871 -0.872871 + 2471 2472001 4.88073e-06 1.36282 -0.872868 -0.872871 + 2472 2473001 4.86613e-06 1.36282 -0.872868 -0.872871 + 2473 2474001 4.85157e-06 1.36295 -0.87287 -0.872871 + 2474 2475001 4.83706e-06 1.36315 -0.872871 -0.872871 + 2475 2476001 4.82259e-06 1.36315 -0.872871 -0.872871 + 2476 2477001 4.80817e-06 1.36315 -0.872871 -0.872871 + 2477 2478001 4.79379e-06 1.36315 -0.872871 -0.872871 + 2478 2479001 4.77945e-06 1.36315 -0.872871 -0.872871 + 2479 2480001 4.76515e-06 1.36322 -0.872871 -0.872871 + 2480 2481001 4.7509e-06 1.36322 -0.872871 -0.872871 + 2481 2482001 4.73669e-06 1.36322 -0.872871 -0.872871 + 2482 2483001 4.72252e-06 1.36313 -0.872871 -0.872871 + 2483 2484001 4.7084e-06 1.36355 -0.872866 -0.872871 + 2484 2485001 4.69432e-06 1.36355 -0.872866 -0.872871 + 2485 2486001 4.68028e-06 1.36355 -0.872866 -0.872871 + 2486 2487001 4.66628e-06 1.36278 -0.872868 -0.872871 + 2487 2488001 4.65232e-06 1.36311 -0.872871 -0.872871 + 2488 2489001 4.6384e-06 1.36288 -0.872869 -0.872871 + 2489 2490001 4.62453e-06 1.36288 -0.872869 -0.872871 + 2490 2491001 4.6107e-06 1.36288 -0.872869 -0.872871 + 2491 2492001 4.59691e-06 1.36288 -0.872869 -0.872871 + 2492 2493001 4.58316e-06 1.36288 -0.872869 -0.872871 + 2493 2494001 4.56945e-06 1.36288 -0.872869 -0.872871 + 2494 2495001 4.55578e-06 1.36361 -0.872864 -0.872871 + 2495 2496001 4.54216e-06 1.36361 -0.872864 -0.872871 + 2496 2497001 4.52857e-06 1.36361 -0.872864 -0.872871 + 2497 2498001 4.51503e-06 1.36336 -0.87287 -0.872871 + 2498 2499001 4.50152e-06 1.36337 -0.87287 -0.872871 + 2499 2500001 4.48806e-06 1.36337 -0.87287 -0.872871 + 2500 2501001 4.47463e-06 1.36337 -0.87287 -0.872871 + 2501 2502001 4.46125e-06 1.36337 -0.87287 -0.872871 + 2502 2503001 4.44791e-06 1.36337 -0.87287 -0.872871 + 2503 2504001 4.4346e-06 1.36337 -0.87287 -0.872871 + 2504 2505001 4.42134e-06 1.36337 -0.87287 -0.872871 + 2505 2506001 4.40811e-06 1.36337 -0.87287 -0.872871 + 2506 2507001 4.39493e-06 1.36337 -0.87287 -0.872871 + 2507 2508001 4.38178e-06 1.36337 -0.87287 -0.872871 + 2508 2509001 4.36868e-06 1.36288 -0.872869 -0.872871 + 2509 2510001 4.35561e-06 1.36288 -0.872869 -0.872871 + 2510 2511001 4.34258e-06 1.36288 -0.872869 -0.872871 + 2511 2512001 4.32959e-06 1.36288 -0.872869 -0.872871 + 2512 2513001 4.31664e-06 1.36323 -0.872871 -0.872871 + 2513 2514001 4.30373e-06 1.36323 -0.872871 -0.872871 + 2514 2515001 4.29086e-06 1.36323 -0.872871 -0.872871 + 2515 2516001 4.27803e-06 1.36337 -0.87287 -0.872871 + 2516 2517001 4.26523e-06 1.36337 -0.87287 -0.872871 + 2517 2518001 4.25247e-06 1.36322 -0.872871 -0.872871 + 2518 2519001 4.23975e-06 1.36332 -0.87287 -0.872871 + 2519 2520001 4.22707e-06 1.36332 -0.87287 -0.872871 + 2520 2521001 4.21443e-06 1.36357 -0.872866 -0.872871 + 2521 2522001 4.20182e-06 1.36357 -0.872866 -0.872871 + 2522 2523001 4.18926e-06 1.36357 -0.872866 -0.872871 + 2523 2524001 4.17673e-06 1.36357 -0.872866 -0.872871 + 2524 2525001 4.16423e-06 1.36292 -0.87287 -0.872871 + 2525 2526001 4.15178e-06 1.36311 -0.872871 -0.872871 + 2526 2527001 4.13936e-06 1.36342 -0.872869 -0.872871 + 2527 2528001 4.12698e-06 1.36342 -0.872869 -0.872871 + 2528 2529001 4.11463e-06 1.36342 -0.872869 -0.872871 + 2529 2530001 4.10233e-06 1.36342 -0.872869 -0.872871 + 2530 2531001 4.09006e-06 1.36342 -0.872869 -0.872871 + 2531 2532001 4.07782e-06 1.36342 -0.872869 -0.872871 + 2532 2533001 4.06563e-06 1.36348 -0.872868 -0.872871 + 2533 2534001 4.05347e-06 1.36293 -0.87287 -0.872871 + 2534 2535001 4.04134e-06 1.36293 -0.87287 -0.872871 + 2535 2536001 4.02926e-06 1.36293 -0.87287 -0.872871 + 2536 2537001 4.0172e-06 1.36293 -0.87287 -0.872871 + 2537 2538001 4.00519e-06 1.36342 -0.872869 -0.872871 + 2538 2539001 3.99321e-06 1.36342 -0.872869 -0.872871 + 2539 2540001 3.98126e-06 1.36342 -0.872869 -0.872871 + 2540 2541001 3.96936e-06 1.36342 -0.872869 -0.872871 + 2541 2542001 3.95748e-06 1.36342 -0.872869 -0.872871 + 2542 2543001 3.94565e-06 1.36342 -0.872869 -0.872871 + 2543 2544001 3.93385e-06 1.36342 -0.872869 -0.872871 + 2544 2545001 3.92208e-06 1.36351 -0.872867 -0.872871 + 2545 2546001 3.91035e-06 1.36351 -0.872867 -0.872871 + 2546 2547001 3.89865e-06 1.36351 -0.872867 -0.872871 + 2547 2548001 3.88699e-06 1.36351 -0.872867 -0.872871 + 2548 2549001 3.87537e-06 1.36351 -0.872867 -0.872871 + 2549 2550001 3.86377e-06 1.3627 -0.872866 -0.872871 + 2550 2551001 3.85222e-06 1.3627 -0.872866 -0.872871 + 2551 2552001 3.8407e-06 1.36323 -0.872871 -0.872871 + 2552 2553001 3.82921e-06 1.36327 -0.872871 -0.872871 + 2553 2554001 3.81775e-06 1.36327 -0.872871 -0.872871 + 2554 2555001 3.80634e-06 1.36327 -0.872871 -0.872871 + 2555 2556001 3.79495e-06 1.36327 -0.872871 -0.872871 + 2556 2557001 3.7836e-06 1.36327 -0.872871 -0.872871 + 2557 2558001 3.77228e-06 1.36327 -0.872871 -0.872871 + 2558 2559001 3.761e-06 1.36322 -0.872871 -0.872871 + 2559 2560001 3.74975e-06 1.36322 -0.872871 -0.872871 + 2560 2561001 3.73854e-06 1.36286 -0.872869 -0.872871 + 2561 2562001 3.72735e-06 1.36286 -0.872869 -0.872871 + 2562 2563001 3.7162e-06 1.36286 -0.872869 -0.872871 + 2563 2564001 3.70509e-06 1.36286 -0.872869 -0.872871 + 2564 2565001 3.69401e-06 1.36286 -0.872869 -0.872871 + 2565 2566001 3.68296e-06 1.36286 -0.872869 -0.872871 + 2566 2567001 3.67194e-06 1.36286 -0.872869 -0.872871 + 2567 2568001 3.66096e-06 1.36286 -0.872869 -0.872871 + 2568 2569001 3.65001e-06 1.36286 -0.872869 -0.872871 + 2569 2570001 3.63909e-06 1.36286 -0.872869 -0.872871 + 2570 2571001 3.62821e-06 1.36286 -0.872869 -0.872871 + 2571 2572001 3.61736e-06 1.36286 -0.872869 -0.872871 + 2572 2573001 3.60654e-06 1.36286 -0.872869 -0.872871 + 2573 2574001 3.59575e-06 1.36286 -0.872869 -0.872871 + 2574 2575001 3.58499e-06 1.36306 -0.872871 -0.872871 + 2575 2576001 3.57427e-06 1.36311 -0.872871 -0.872871 + 2576 2577001 3.56358e-06 1.36311 -0.872871 -0.872871 + 2577 2578001 3.55292e-06 1.36311 -0.872871 -0.872871 + 2578 2579001 3.54229e-06 1.36311 -0.872871 -0.872871 + 2579 2580001 3.5317e-06 1.36311 -0.872871 -0.872871 + 2580 2581001 3.52114e-06 1.36311 -0.872871 -0.872871 + 2581 2582001 3.5106e-06 1.36311 -0.872871 -0.872871 + 2582 2583001 3.5001e-06 1.36311 -0.872871 -0.872871 + 2583 2584001 3.48963e-06 1.36311 -0.872871 -0.872871 + 2584 2585001 3.4792e-06 1.36342 -0.872869 -0.872871 + 2585 2586001 3.46879e-06 1.36342 -0.872869 -0.872871 + 2586 2587001 3.45842e-06 1.36342 -0.872869 -0.872871 + 2587 2588001 3.44807e-06 1.36336 -0.87287 -0.872871 + 2588 2589001 3.43776e-06 1.3631 -0.872871 -0.872871 + 2589 2590001 3.42748e-06 1.3631 -0.872871 -0.872871 + 2590 2591001 3.41722e-06 1.3631 -0.872871 -0.872871 + 2591 2592001 3.407e-06 1.3631 -0.872871 -0.872871 + 2592 2593001 3.39681e-06 1.3631 -0.872871 -0.872871 + 2593 2594001 3.38665e-06 1.36282 -0.872868 -0.872871 + 2594 2595001 3.37652e-06 1.36282 -0.872868 -0.872871 + 2595 2596001 3.36642e-06 1.36282 -0.872868 -0.872871 + 2596 2597001 3.35635e-06 1.36282 -0.872868 -0.872871 + 2597 2598001 3.34632e-06 1.36282 -0.872868 -0.872871 + 2598 2599001 3.33631e-06 1.36282 -0.872868 -0.872871 + 2599 2600001 3.32633e-06 1.36282 -0.872868 -0.872871 + 2600 2601001 3.31638e-06 1.36337 -0.872869 -0.872871 + 2601 2602001 3.30646e-06 1.36337 -0.872869 -0.872871 + 2602 2603001 3.29657e-06 1.36337 -0.872869 -0.872871 + 2603 2604001 3.28671e-06 1.36337 -0.872869 -0.872871 + 2604 2605001 3.27688e-06 1.36337 -0.872869 -0.872871 + 2605 2606001 3.26708e-06 1.36337 -0.872869 -0.872871 + 2606 2607001 3.25731e-06 1.36337 -0.872869 -0.872871 + 2607 2608001 3.24756e-06 1.36337 -0.872869 -0.872871 + 2608 2609001 3.23785e-06 1.36337 -0.872869 -0.872871 + 2609 2610001 3.22817e-06 1.36337 -0.872869 -0.872871 + 2610 2611001 3.21851e-06 1.36279 -0.872868 -0.872871 + 2611 2612001 3.20888e-06 1.3633 -0.87287 -0.872871 + 2612 2613001 3.19929e-06 1.3633 -0.87287 -0.872871 + 2613 2614001 3.18972e-06 1.3633 -0.87287 -0.872871 + 2614 2615001 3.18018e-06 1.36287 -0.872869 -0.872871 + 2615 2616001 3.17066e-06 1.36322 -0.872871 -0.872871 + 2616 2617001 3.16118e-06 1.36309 -0.872871 -0.872871 + 2617 2618001 3.15172e-06 1.36309 -0.872871 -0.872871 + 2618 2619001 3.1423e-06 1.36309 -0.872871 -0.872871 + 2619 2620001 3.1329e-06 1.36309 -0.872871 -0.872871 + 2620 2621001 3.12353e-06 1.36309 -0.872871 -0.872871 + 2621 2622001 3.11419e-06 1.36309 -0.872871 -0.872871 + 2622 2623001 3.10487e-06 1.36309 -0.872871 -0.872871 + 2623 2624001 3.09558e-06 1.36309 -0.872871 -0.872871 + 2624 2625001 3.08633e-06 1.36309 -0.872871 -0.872871 + 2625 2626001 3.07709e-06 1.36309 -0.872871 -0.872871 + 2626 2627001 3.06789e-06 1.36309 -0.872871 -0.872871 + 2627 2628001 3.05871e-06 1.36309 -0.872871 -0.872871 + 2628 2629001 3.04957e-06 1.36309 -0.872871 -0.872871 + 2629 2630001 3.04044e-06 1.36309 -0.872871 -0.872871 + 2630 2631001 3.03135e-06 1.36309 -0.872871 -0.872871 + 2631 2632001 3.02228e-06 1.36309 -0.872871 -0.872871 + 2632 2633001 3.01324e-06 1.36309 -0.872871 -0.872871 + 2633 2634001 3.00423e-06 1.36309 -0.872871 -0.872871 + 2634 2635001 2.99525e-06 1.36309 -0.872871 -0.872871 + 2635 2636001 2.98629e-06 1.36309 -0.872871 -0.872871 + 2636 2637001 2.97735e-06 1.36309 -0.872871 -0.872871 + 2637 2638001 2.96845e-06 1.36309 -0.872871 -0.872871 + 2638 2639001 2.95957e-06 1.36309 -0.872871 -0.872871 + 2639 2640001 2.95072e-06 1.36311 -0.872871 -0.872871 + 2640 2641001 2.94189e-06 1.36311 -0.872871 -0.872871 + 2641 2642001 2.93309e-06 1.36311 -0.872871 -0.872871 + 2642 2643001 2.92432e-06 1.36299 -0.872871 -0.872871 + 2643 2644001 2.91557e-06 1.36299 -0.872871 -0.872871 + 2644 2645001 2.90685e-06 1.36299 -0.872871 -0.872871 + 2645 2646001 2.89816e-06 1.36299 -0.872871 -0.872871 + 2646 2647001 2.88949e-06 1.36299 -0.872871 -0.872871 + 2647 2648001 2.88085e-06 1.36328 -0.872871 -0.872871 + 2648 2649001 2.87223e-06 1.36328 -0.872871 -0.872871 + 2649 2650001 2.86364e-06 1.36328 -0.872871 -0.872871 + 2650 2651001 2.85507e-06 1.36356 -0.872866 -0.872871 + 2651 2652001 2.84654e-06 1.36356 -0.872866 -0.872871 + 2652 2653001 2.83802e-06 1.36356 -0.872866 -0.872871 + 2653 2654001 2.82953e-06 1.36356 -0.872866 -0.872871 + 2654 2655001 2.82107e-06 1.36345 -0.872868 -0.872871 + 2655 2656001 2.81263e-06 1.36345 -0.872868 -0.872871 + 2656 2657001 2.80422e-06 1.36345 -0.872868 -0.872871 + 2657 2658001 2.79583e-06 1.36345 -0.872868 -0.872871 + 2658 2659001 2.78747e-06 1.36345 -0.872868 -0.872871 + 2659 2660001 2.77913e-06 1.36296 -0.87287 -0.872871 + 2660 2661001 2.77082e-06 1.36296 -0.87287 -0.872871 + 2661 2662001 2.76253e-06 1.36289 -0.872869 -0.872871 + 2662 2663001 2.75427e-06 1.36289 -0.872869 -0.872871 + 2663 2664001 2.74603e-06 1.36289 -0.872869 -0.872871 + 2664 2665001 2.73782e-06 1.36289 -0.872869 -0.872871 + 2665 2666001 2.72963e-06 1.36289 -0.872869 -0.872871 + 2666 2667001 2.72146e-06 1.36306 -0.872871 -0.872871 + 2667 2668001 2.71332e-06 1.363 -0.872871 -0.872871 + 2668 2669001 2.70521e-06 1.36303 -0.872871 -0.872871 + 2669 2670001 2.69712e-06 1.36303 -0.872871 -0.872871 + 2670 2671001 2.68905e-06 1.36315 -0.872871 -0.872871 + 2671 2672001 2.68101e-06 1.36315 -0.872871 -0.872871 + 2672 2673001 2.67299e-06 1.36314 -0.872871 -0.872871 + 2673 2674001 2.66499e-06 1.36314 -0.872871 -0.872871 + 2674 2675001 2.65702e-06 1.36293 -0.87287 -0.872871 + 2675 2676001 2.64907e-06 1.36348 -0.872868 -0.872871 + 2676 2677001 2.64115e-06 1.36348 -0.872868 -0.872871 + 2677 2678001 2.63325e-06 1.36305 -0.872871 -0.872871 + 2678 2679001 2.62538e-06 1.36305 -0.872871 -0.872871 + 2679 2680001 2.61752e-06 1.36305 -0.872871 -0.872871 + 2680 2681001 2.60969e-06 1.36305 -0.872871 -0.872871 + 2681 2682001 2.60189e-06 1.36326 -0.872871 -0.872871 + 2682 2683001 2.59411e-06 1.36358 -0.872865 -0.872871 + 2683 2684001 2.58635e-06 1.36358 -0.872865 -0.872871 + 2684 2685001 2.57861e-06 1.36266 -0.872865 -0.872871 + 2685 2686001 2.5709e-06 1.36266 -0.872865 -0.872871 + 2686 2687001 2.56321e-06 1.36266 -0.872865 -0.872871 + 2687 2688001 2.55554e-06 1.36317 -0.872871 -0.872871 + 2688 2689001 2.5479e-06 1.36317 -0.872871 -0.872871 + 2689 2690001 2.54028e-06 1.36317 -0.872871 -0.872871 + 2690 2691001 2.53268e-06 1.36317 -0.872871 -0.872871 + 2691 2692001 2.5251e-06 1.36317 -0.872871 -0.872871 + 2692 2693001 2.51755e-06 1.36317 -0.872871 -0.872871 + 2693 2694001 2.51002e-06 1.36317 -0.872871 -0.872871 + 2694 2695001 2.50251e-06 1.36317 -0.872871 -0.872871 + 2695 2696001 2.49503e-06 1.36317 -0.872871 -0.872871 + 2696 2697001 2.48757e-06 1.36317 -0.872871 -0.872871 + 2697 2698001 2.48013e-06 1.36294 -0.87287 -0.872871 + 2698 2699001 2.47271e-06 1.36322 -0.872871 -0.872871 + 2699 2700001 2.46531e-06 1.36322 -0.872871 -0.872871 + 2700 2701001 2.45794e-06 1.36322 -0.872871 -0.872871 + 2701 2702001 2.45059e-06 1.36322 -0.872871 -0.872871 + 2702 2703001 2.44326e-06 1.36322 -0.872871 -0.872871 + 2703 2704001 2.43595e-06 1.36322 -0.872871 -0.872871 + 2704 2705001 2.42866e-06 1.36322 -0.872871 -0.872871 + 2705 2706001 2.4214e-06 1.36301 -0.872871 -0.872871 + 2706 2707001 2.41416e-06 1.36301 -0.872871 -0.872871 + 2707 2708001 2.40693e-06 1.36301 -0.872871 -0.872871 + 2708 2709001 2.39974e-06 1.36301 -0.872871 -0.872871 + 2709 2710001 2.39256e-06 1.36328 -0.872871 -0.872871 + 2710 2711001 2.3854e-06 1.36298 -0.872871 -0.872871 + 2711 2712001 2.37827e-06 1.36298 -0.872871 -0.872871 + 2712 2713001 2.37115e-06 1.36298 -0.872871 -0.872871 + 2713 2714001 2.36406e-06 1.36298 -0.872871 -0.872871 + 2714 2715001 2.35699e-06 1.36298 -0.872871 -0.872871 + 2715 2716001 2.34994e-06 1.36298 -0.872871 -0.872871 + 2716 2717001 2.34291e-06 1.36298 -0.872871 -0.872871 + 2717 2718001 2.3359e-06 1.36291 -0.87287 -0.872871 + 2718 2719001 2.32892e-06 1.36308 -0.872871 -0.872871 + 2719 2720001 2.32195e-06 1.36327 -0.872871 -0.872871 + 2720 2721001 2.31501e-06 1.36327 -0.872871 -0.872871 + 2721 2722001 2.30808e-06 1.36327 -0.872871 -0.872871 + 2722 2723001 2.30118e-06 1.36336 -0.87287 -0.872871 + 2723 2724001 2.2943e-06 1.36337 -0.87287 -0.872871 + 2724 2725001 2.28743e-06 1.36309 -0.872871 -0.872871 + 2725 2726001 2.28059e-06 1.36309 -0.872871 -0.872871 + 2726 2727001 2.27377e-06 1.36324 -0.872871 -0.872871 + 2727 2728001 2.26697e-06 1.36324 -0.872871 -0.872871 + 2728 2729001 2.26019e-06 1.36268 -0.872865 -0.872871 + 2729 2730001 2.25343e-06 1.36305 -0.872871 -0.872871 + 2730 2731001 2.24669e-06 1.36305 -0.872871 -0.872871 + 2731 2732001 2.23997e-06 1.36305 -0.872871 -0.872871 + 2732 2733001 2.23327e-06 1.36305 -0.872871 -0.872871 + 2733 2734001 2.22659e-06 1.36305 -0.872871 -0.872871 + 2734 2735001 2.21993e-06 1.36305 -0.872871 -0.872871 + 2735 2736001 2.21329e-06 1.36305 -0.872871 -0.872871 + 2736 2737001 2.20667e-06 1.36323 -0.872871 -0.872871 + 2737 2738001 2.20007e-06 1.36323 -0.872871 -0.872871 + 2738 2739001 2.19349e-06 1.36323 -0.872871 -0.872871 + 2739 2740001 2.18693e-06 1.36294 -0.87287 -0.872871 + 2740 2741001 2.18039e-06 1.36294 -0.87287 -0.872871 + 2741 2742001 2.17387e-06 1.36294 -0.87287 -0.872871 + 2742 2743001 2.16736e-06 1.36294 -0.87287 -0.872871 + 2743 2744001 2.16088e-06 1.3629 -0.87287 -0.872871 + 2744 2745001 2.15442e-06 1.36279 -0.872868 -0.872871 + 2745 2746001 2.14797e-06 1.36279 -0.872868 -0.872871 + 2746 2747001 2.14155e-06 1.36281 -0.872868 -0.872871 + 2747 2748001 2.13514e-06 1.36281 -0.872868 -0.872871 + 2748 2749001 2.12876e-06 1.36281 -0.872868 -0.872871 + 2749 2750001 2.12239e-06 1.36281 -0.872868 -0.872871 + 2750 2751001 2.11604e-06 1.36281 -0.872868 -0.872871 + 2751 2752001 2.10971e-06 1.36281 -0.872868 -0.872871 + 2752 2753001 2.1034e-06 1.36286 -0.872869 -0.872871 + 2753 2754001 2.09711e-06 1.36286 -0.872869 -0.872871 + 2754 2755001 2.09084e-06 1.36286 -0.872869 -0.872871 + 2755 2756001 2.08458e-06 1.36309 -0.872871 -0.872871 + 2756 2757001 2.07835e-06 1.36309 -0.872871 -0.872871 + 2757 2758001 2.07213e-06 1.36338 -0.872869 -0.872871 + 2758 2759001 2.06594e-06 1.36344 -0.872868 -0.872871 + 2759 2760001 2.05976e-06 1.36317 -0.872871 -0.872871 + 2760 2761001 2.0536e-06 1.36317 -0.872871 -0.872871 + 2761 2762001 2.04745e-06 1.36326 -0.872871 -0.872871 + 2762 2763001 2.04133e-06 1.36326 -0.872871 -0.872871 + 2763 2764001 2.03522e-06 1.36317 -0.872871 -0.872871 + 2764 2765001 2.02914e-06 1.36317 -0.872871 -0.872871 + 2765 2766001 2.02307e-06 1.36317 -0.872871 -0.872871 + 2766 2767001 2.01702e-06 1.36328 -0.872871 -0.872871 + 2767 2768001 2.01098e-06 1.36323 -0.872871 -0.872871 + 2768 2769001 2.00497e-06 1.36323 -0.872871 -0.872871 diff -Nru gsl-doc-1.16/doc/examples/sortsmall.c gsl-doc-2.3/doc/examples/sortsmall.c --- gsl-doc-1.16/doc/examples/sortsmall.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/sortsmall.c 2015-11-09 19:16:49.000000000 +0000 @@ -24,11 +24,11 @@ gsl_sort_smallest (small, k, x, 1, N); - printf ("%d smallest values from %d\n", k, N); + printf ("%zu smallest values from %zu\n", k, N); for (i = 0; i < k; i++) { - printf ("%d: %.18f\n", i, small[i]); + printf ("%zu: %.18f\n", i, small[i]); } free (x); diff -Nru gsl-doc-1.16/doc/examples/sortsmall.out gsl-doc-2.3/doc/examples/sortsmall.out --- gsl-doc-1.16/doc/examples/sortsmall.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/sortsmall.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -5 smallest values from 100000 -0: 0.000003489200025797 -1: 0.000008199829608202 -2: 0.000008953968062997 -3: 0.000010712770745158 -4: 0.000033531803637743 diff -Nru gsl-doc-1.16/doc/examples/sortsmall.txt gsl-doc-2.3/doc/examples/sortsmall.txt --- gsl-doc-1.16/doc/examples/sortsmall.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/sortsmall.txt 2015-11-09 05:23:40.000000000 +0000 @@ -0,0 +1,6 @@ +5 smallest values from 100000 +0: 0.000003489200025797 +1: 0.000008199829608202 +2: 0.000008953968062997 +3: 0.000010712770745158 +4: 0.000033531803637743 diff -Nru gsl-doc-1.16/doc/examples/specfun_e.out gsl-doc-2.3/doc/examples/specfun_e.out --- gsl-doc-1.16/doc/examples/specfun_e.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/specfun_e.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -status = success -J0(5.0) = -0.177596771314338292 - +/- 0.000000000000000193 -exact = -0.177596771314338292 diff -Nru gsl-doc-1.16/doc/examples/specfun_e.txt gsl-doc-2.3/doc/examples/specfun_e.txt --- gsl-doc-1.16/doc/examples/specfun_e.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/specfun_e.txt 2015-11-10 19:39:13.000000000 +0000 @@ -0,0 +1,4 @@ +status = success +J0(5.0) = -0.177596771314338264 + +/- 0.000000000000000193 +exact = -0.177596771314338292 diff -Nru gsl-doc-1.16/doc/examples/specfun.out gsl-doc-2.3/doc/examples/specfun.out --- gsl-doc-1.16/doc/examples/specfun.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/specfun.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -J0(5.0) = -0.177596771314338292 -exact = -0.177596771314338292 diff -Nru gsl-doc-1.16/doc/examples/specfun.txt gsl-doc-2.3/doc/examples/specfun.txt --- gsl-doc-1.16/doc/examples/specfun.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/specfun.txt 2015-11-10 19:38:39.000000000 +0000 @@ -0,0 +1,2 @@ +J0(5.0) = -0.177596771314338264 +exact = -0.177596771314338292 diff -Nru gsl-doc-1.16/doc/examples/spmatrix.c gsl-doc-2.3/doc/examples/spmatrix.c --- gsl-doc-1.16/doc/examples/spmatrix.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/spmatrix.c 2016-07-02 23:02:41.000000000 +0000 @@ -0,0 +1,76 @@ +#include +#include + +#include + +int +main() +{ + gsl_spmatrix *A = gsl_spmatrix_alloc(5, 4); /* triplet format */ + gsl_spmatrix *B, *C; + size_t i, j; + + /* build the sparse matrix */ + gsl_spmatrix_set(A, 0, 2, 3.1); + gsl_spmatrix_set(A, 0, 3, 4.6); + gsl_spmatrix_set(A, 1, 0, 1.0); + gsl_spmatrix_set(A, 1, 2, 7.2); + gsl_spmatrix_set(A, 3, 0, 2.1); + gsl_spmatrix_set(A, 3, 1, 2.9); + gsl_spmatrix_set(A, 3, 3, 8.5); + gsl_spmatrix_set(A, 4, 0, 4.1); + + printf("printing all matrix elements:\n"); + for (i = 0; i < 5; ++i) + for (j = 0; j < 4; ++j) + printf("A(%zu,%zu) = %g\n", i, j, + gsl_spmatrix_get(A, i, j)); + + /* print out elements in triplet format */ + printf("matrix in triplet format (i,j,Aij):\n"); + gsl_spmatrix_fprintf(stdout, A, "%.1f"); + + /* convert to compressed column format */ + B = gsl_spmatrix_ccs(A); + + printf("matrix in compressed column format:\n"); + printf("i = [ "); + for (i = 0; i < B->nz; ++i) + printf("%zu, ", B->i[i]); + printf("]\n"); + + printf("p = [ "); + for (i = 0; i < B->size2 + 1; ++i) + printf("%zu, ", B->p[i]); + printf("]\n"); + + printf("d = [ "); + for (i = 0; i < B->nz; ++i) + printf("%g, ", B->data[i]); + printf("]\n"); + + /* convert to compressed row format */ + C = gsl_spmatrix_crs(A); + + printf("matrix in compressed row format:\n"); + printf("i = [ "); + for (i = 0; i < C->nz; ++i) + printf("%zu, ", C->i[i]); + printf("]\n"); + + printf("p = [ "); + for (i = 0; i < C->size1 + 1; ++i) + printf("%zu, ", C->p[i]); + printf("]\n"); + + printf("d = [ "); + for (i = 0; i < C->nz; ++i) + printf("%g, ", C->data[i]); + printf("]\n"); + + gsl_spmatrix_free(A); + gsl_spmatrix_free(B); + gsl_spmatrix_free(C); + + return 0; +} diff -Nru gsl-doc-1.16/doc/examples/spmatrix.txt gsl-doc-2.3/doc/examples/spmatrix.txt --- gsl-doc-1.16/doc/examples/spmatrix.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/spmatrix.txt 2016-07-07 20:36:10.000000000 +0000 @@ -0,0 +1,40 @@ +printing all matrix elements: +A(0,0) = 0 +A(0,1) = 0 +A(0,2) = 3.1 +A(0,3) = 4.6 +A(1,0) = 1 +A(1,1) = 0 +A(1,2) = 7.2 +A(1,3) = 0 +A(2,0) = 0 +A(2,1) = 0 +A(2,2) = 0 +A(2,3) = 0 +A(3,0) = 2.1 +A(3,1) = 2.9 +A(3,2) = 0 +A(3,3) = 8.5 +A(4,0) = 4.1 +A(4,1) = 0 +A(4,2) = 0 +A(4,3) = 0 +matrix in triplet format (i,j,Aij): +%%MatrixMarket matrix coordinate real general +5 4 8 +1 3 3.1 +1 4 4.6 +2 1 1.0 +2 3 7.2 +4 1 2.1 +4 2 2.9 +4 4 8.5 +5 1 4.1 +matrix in compressed column format: +i = [ 1, 3, 4, 3, 0, 1, 0, 3, ] +p = [ 0, 3, 4, 6, 8, ] +d = [ 1, 2.1, 4.1, 2.9, 3.1, 7.2, 4.6, 8.5, ] +matrix in compressed row format: +i = [ 2, 3, 0, 2, 0, 1, 3, 0, ] +p = [ 0, 2, 4, 4, 7, 8, ] +d = [ 3.1, 4.6, 1, 7.2, 2.1, 2.9, 8.5, 4.1, ] diff -Nru gsl-doc-1.16/doc/examples/stat.out gsl-doc-2.3/doc/examples/stat.out --- gsl-doc-1.16/doc/examples/stat.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/stat.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -The dataset is 17.2, 18.1, 16.5, 18.3, 12.6 -The sample mean is 16.54 -The estimated variance is 5.373 -The largest value is 18.3 -The smallest value is 12.6 diff -Nru gsl-doc-1.16/doc/examples/statsort.out gsl-doc-2.3/doc/examples/statsort.out --- gsl-doc-1.16/doc/examples/statsort.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/statsort.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -Original dataset: 17.2, 18.1, 16.5, 18.3, 12.6 -Sorted dataset: 12.6, 16.5, 17.2, 18.1, 18.3 -The median is 17.2 -The upper quartile is 18.1 -The lower quartile is 16.5 diff -Nru gsl-doc-1.16/doc/examples/statsort.txt gsl-doc-2.3/doc/examples/statsort.txt --- gsl-doc-1.16/doc/examples/statsort.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/statsort.txt 2015-11-10 19:41:17.000000000 +0000 @@ -0,0 +1,5 @@ +Original dataset: 17.2, 18.1, 16.5, 18.3, 12.6 +Sorted dataset: 12.6, 16.5, 17.2, 18.1, 18.3 +The median is 17.2 +The upper quartile is 18.1 +The lower quartile is 16.5 diff -Nru gsl-doc-1.16/doc/examples/stat.txt gsl-doc-2.3/doc/examples/stat.txt --- gsl-doc-1.16/doc/examples/stat.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/stat.txt 2015-11-10 19:33:29.000000000 +0000 @@ -0,0 +1,5 @@ +The dataset is 17.2, 18.1, 16.5, 18.3, 12.6 +The sample mean is 16.54 +The estimated variance is 5.373 +The largest value is 18.3 +The smallest value is 12.6 diff -Nru gsl-doc-1.16/doc/examples/sum.c gsl-doc-2.3/doc/examples/sum.c --- gsl-doc-1.16/doc/examples/sum.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/sum.c 2015-11-09 19:17:18.000000000 +0000 @@ -31,11 +31,11 @@ printf ("term-by-term sum = % .16f using %d terms\n", sum, N); - printf ("term-by-term sum = % .16f using %d terms\n", + printf ("term-by-term sum = % .16f using %zu terms\n", w->sum_plain, w->terms_used); printf ("exact value = % .16f\n", zeta_2); - printf ("accelerated sum = % .16f using %d terms\n", + printf ("accelerated sum = % .16f using %zu terms\n", sum_accel, w->terms_used); printf ("estimated error = % .16f\n", err); diff -Nru gsl-doc-1.16/doc/examples/sum.out gsl-doc-2.3/doc/examples/sum.out --- gsl-doc-1.16/doc/examples/sum.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/sum.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -term-by-term sum = 1.5961632439130233 using 20 terms -term-by-term sum = 1.5759958390005426 using 13 terms -exact value = 1.6449340668482264 -accelerated sum = 1.6449340668166479 using 13 terms -estimated error = 0.0000000000508580 -actual error = -0.0000000000315785 diff -Nru gsl-doc-1.16/doc/examples/sum.txt gsl-doc-2.3/doc/examples/sum.txt --- gsl-doc-1.16/doc/examples/sum.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/sum.txt 2015-11-10 19:42:12.000000000 +0000 @@ -0,0 +1,6 @@ +term-by-term sum = 1.5961632439130233 using 20 terms +term-by-term sum = 1.5759958390005426 using 13 terms +exact value = 1.6449340668482264 +accelerated sum = 1.6449340669228176 using 13 terms +estimated error = 0.0000000000888360 +actual error = 0.0000000000745912 diff -Nru gsl-doc-1.16/doc/examples/vectorr.txt gsl-doc-2.3/doc/examples/vectorr.txt --- gsl-doc-1.16/doc/examples/vectorr.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/vectorr.txt 2015-11-10 19:44:10.000000000 +0000 @@ -0,0 +1,10 @@ +1.23 +2.23 +3.23 +4.23 +5.23 +6.23 +7.23 +8.23 +9.23 +10.23 diff -Nru gsl-doc-1.16/doc/examples/vectorview.c gsl-doc-2.3/doc/examples/vectorview.c --- gsl-doc-1.16/doc/examples/vectorview.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/vectorview.c 2015-11-09 19:17:28.000000000 +0000 @@ -21,7 +21,7 @@ d = gsl_blas_dnrm2 (&column.vector); - printf ("matrix column %d, norm = %g\n", j, d); + printf ("matrix column %zu, norm = %g\n", j, d); } gsl_matrix_free (m); diff -Nru gsl-doc-1.16/doc/examples/vectorview.out gsl-doc-2.3/doc/examples/vectorview.out --- gsl-doc-1.16/doc/examples/vectorview.out 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/examples/vectorview.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -matrix column 0, norm = 4.31461 -matrix column 1, norm = 3.1205 -matrix column 2, norm = 2.19316 -matrix column 3, norm = 3.26114 -matrix column 4, norm = 2.53416 -matrix column 5, norm = 2.57281 -matrix column 6, norm = 4.20469 -matrix column 7, norm = 3.65202 -matrix column 8, norm = 2.08524 -matrix column 9, norm = 3.07313 diff -Nru gsl-doc-1.16/doc/examples/vectorview.txt gsl-doc-2.3/doc/examples/vectorview.txt --- gsl-doc-1.16/doc/examples/vectorview.txt 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/examples/vectorview.txt 2015-11-09 05:23:40.000000000 +0000 @@ -0,0 +1,10 @@ +matrix column 0, norm = 4.31461 +matrix column 1, norm = 3.1205 +matrix column 2, norm = 2.19316 +matrix column 3, norm = 3.26114 +matrix column 4, norm = 2.53416 +matrix column 5, norm = 2.57281 +matrix column 6, norm = 4.20469 +matrix column 7, norm = 3.65202 +matrix column 8, norm = 2.08524 +matrix column 9, norm = 3.07313 diff -Nru gsl-doc-1.16/doc/fft.texi gsl-doc-2.3/doc/fft.texi --- gsl-doc-1.16/doc/fft.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/fft.texi 2015-11-03 16:21:55.000000000 +0000 @@ -436,7 +436,7 @@ the intermediate steps of the transform. @deftypefun {gsl_fft_complex_workspace *} gsl_fft_complex_workspace_alloc (size_t @var{n}) -@tpindex gsl_fft_complex_workspace +@tindex gsl_fft_complex_workspace This function allocates a workspace for a complex transform of length @var{n}. @end deftypefun @@ -778,8 +778,8 @@ @deftypefun {gsl_fft_real_wavetable *} gsl_fft_real_wavetable_alloc (size_t @var{n}) @deftypefunx {gsl_fft_halfcomplex_wavetable *} gsl_fft_halfcomplex_wavetable_alloc (size_t @var{n}) -@tpindex gsl_fft_real_wavetable -@tpindex gsl_fft_halfcomplex_wavetable +@tindex gsl_fft_real_wavetable +@tindex gsl_fft_halfcomplex_wavetable These functions prepare trigonometric lookup tables for an FFT of size @math{n} real elements. The functions return a pointer to the newly allocated struct if no errors were detected, and a null pointer in the @@ -810,7 +810,7 @@ the intermediate steps of the transform, @deftypefun {gsl_fft_real_workspace *} gsl_fft_real_workspace_alloc (size_t @var{n}) -@tpindex gsl_fft_real_workspace +@tindex gsl_fft_real_workspace This function allocates a workspace for a real transform of length @var{n}. The same workspace can be used for both forward real and inverse halfcomplex transforms. diff -Nru gsl-doc-1.16/doc/fit-exp.eps gsl-doc-2.3/doc/fit-exp.eps --- gsl-doc-1.16/doc/fit-exp.eps 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/fit-exp.eps 2015-11-03 16:21:55.000000000 +0000 @@ -1,764 +1,1101 @@ %!PS-Adobe-2.0 EPSF-2.0 -%%Title: tmp.eps -%%Creator: gnuplot 3.5 (pre 3.6) patchlevel beta 347 -%%CreationDate: Sun Sep 24 21:06:38 2000 +%%Title: plot.eps +%%Creator: gnuplot 4.6 patchlevel 3 +%%CreationDate: Sun Mar 2 12:14:56 2014 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 -%%Orientation: Portrait %%EndComments -/gnudict 120 dict def +%%BeginProlog +/gnudict 256 dict def gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% /Color false def -/Solid false def +/Blacktext false def +/Solid true def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def /gnulinewidth 5.000 def /userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% /vshift -46 def -/dl {10 mul} def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def /hpt_ 31.5 def /vpt_ 31.5 def /hpt hpt_ def /vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 410 50 lineto 410 302 lineto 50 302 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.6 (September 2012) +% +%/SuppressPDFMark true def +% /M {moveto} bind def /L {lineto} bind def /R {rmoveto} bind def /V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 /vpt2 vpt 2 mul def /hpt2 hpt 2 mul def -/Lshow { currentpoint stroke M - 0 vshift R show } def -/Rshow { currentpoint stroke M - dup stringwidth pop neg vshift R show } def -/Cshow { currentpoint stroke M - dup stringwidth pop -2 div vshift R show } def -/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def - /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def -/DL { Color {setrgbcolor Solid {pop []} if 0 setdash } - {pop pop pop Solid {pop []} if 0 setdash} ifelse } def -/BL { stroke gnulinewidth 2 mul setlinewidth } def -/AL { stroke gnulinewidth 2 div setlinewidth } def -/UL { gnulinewidth mul /userlinewidth exch def } def -/PL { stroke userlinewidth setlinewidth } def -/LTb { BL [] 0 0 0 DL } def -/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def -/LT0 { PL [] 1 0 0 DL } def -/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def -/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def -/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def -/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def -/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def -/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def -/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def -/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def -/Pnt { stroke [] 0 setdash - gsave 1 setlinecap M 0 0 V stroke grestore } def -/Dia { stroke [] 0 setdash 2 copy vpt add M +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M hpt neg vpt neg V hpt vpt neg V hpt vpt V hpt neg vpt V closepath stroke - Pnt } def -/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V currentpoint stroke M hpt neg vpt neg R hpt2 0 V stroke - } def -/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M 0 vpt2 neg V hpt2 0 V 0 vpt2 V hpt2 neg 0 V closepath stroke - Pnt } def -/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M hpt2 vpt2 neg V currentpoint stroke M - hpt2 neg 0 R hpt2 vpt2 V stroke } def -/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M hpt neg vpt -1.62 mul V hpt 2 mul 0 V hpt neg vpt 1.62 mul V closepath stroke - Pnt } def -/Star { 2 copy Pls Crs } def -/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M - 0 vpt2 neg V hpt2 0 V 0 vpt2 V - hpt2 neg 0 V closepath fill } def -/TriUF { stroke [] 0 setdash vpt 1.12 mul add M + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M hpt neg vpt -1.62 mul V hpt 2 mul 0 V - hpt neg vpt 1.62 mul V closepath fill } def -/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M hpt neg vpt 1.62 mul V hpt 2 mul 0 V hpt neg vpt -1.62 mul V closepath stroke - Pnt } def -/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M hpt neg vpt 1.62 mul V hpt 2 mul 0 V hpt neg vpt -1.62 mul V closepath fill} def -/DiaF { stroke [] 0 setdash vpt add M +/DiaF {stroke [] 0 setdash vpt add M hpt neg vpt neg V hpt vpt neg V - hpt vpt V hpt neg vpt V closepath fill } def -/Pent { stroke [] 0 setdash 2 copy gsave + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave translate 0 hpt M 4 {72 rotate 0 hpt L} repeat - closepath stroke grestore Pnt } def -/PentF { stroke [] 0 setdash gsave + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave translate 0 hpt M 4 {72 rotate 0 hpt L} repeat - closepath fill grestore } def -/Circle { stroke [] 0 setdash 2 copy - hpt 0 360 arc stroke Pnt } def -/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def -/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def -/C1 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 0 90 arc closepath fill - vpt 0 360 arc closepath } bind def -/C2 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 90 180 arc closepath fill - vpt 0 360 arc closepath } bind def -/C3 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 0 180 arc closepath fill - vpt 0 360 arc closepath } bind def -/C4 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 180 270 arc closepath fill - vpt 0 360 arc closepath } bind def -/C5 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 0 90 arc - 2 copy moveto - 2 copy vpt 180 270 arc closepath fill - vpt 0 360 arc } bind def -/C6 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 90 270 arc closepath fill - vpt 0 360 arc closepath } bind def -/C7 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 0 270 arc closepath fill - vpt 0 360 arc closepath } bind def -/C8 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 270 360 arc closepath fill - vpt 0 360 arc closepath } bind def -/C9 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 270 450 arc closepath fill - vpt 0 360 arc closepath } bind def -/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill - 2 copy moveto - 2 copy vpt 90 180 arc closepath fill - vpt 0 360 arc closepath } bind def -/C11 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 0 180 arc closepath fill - 2 copy moveto - 2 copy vpt 270 360 arc closepath fill - vpt 0 360 arc closepath } bind def -/C12 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 180 360 arc closepath fill - vpt 0 360 arc closepath } bind def -/C13 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 0 90 arc closepath fill - 2 copy moveto - 2 copy vpt 180 360 arc closepath fill - vpt 0 360 arc closepath } bind def -/C14 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 90 360 arc closepath fill - vpt 0 360 arc } bind def -/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill - vpt 0 360 arc closepath } bind def -/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto - neg 0 rlineto closepath } bind def -/Square { dup Rec } bind def -/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def -/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def -/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def -/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def -/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def -/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def -/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill - exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def -/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def -/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill - 2 copy vpt Square fill - Bsquare } bind def -/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def -/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def -/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill - Bsquare } bind def -/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill - Bsquare } bind def -/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def -/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill - 2 copy vpt Square fill Bsquare } bind def -/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill - 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def -/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def -/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def -/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def -/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def -/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def -/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def -/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def -/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def -/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def -/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def -/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def -/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def -/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def -/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def -/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def -/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def -/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def -/DiaE { stroke [] 0 setdash vpt add M + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M hpt neg vpt neg V hpt vpt neg V - hpt vpt V hpt neg vpt V closepath stroke } def -/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M 0 vpt2 neg V hpt2 0 V 0 vpt2 V - hpt2 neg 0 V closepath stroke } def -/TriUE { stroke [] 0 setdash vpt 1.12 mul add M + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M hpt neg vpt -1.62 mul V hpt 2 mul 0 V - hpt neg vpt 1.62 mul V closepath stroke } def -/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M hpt neg vpt 1.62 mul V hpt 2 mul 0 V - hpt neg vpt -1.62 mul V closepath stroke } def -/PentE { stroke [] 0 setdash gsave + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave translate 0 hpt M 4 {72 rotate 0 hpt L} repeat - closepath stroke grestore } def -/CircE { stroke [] 0 setdash - hpt 0 360 arc stroke } def -/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def -/DiaW { stroke [] 0 setdash vpt add M + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M hpt neg vpt neg V hpt vpt neg V - hpt vpt V hpt neg vpt V Opaque stroke } def -/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M 0 vpt2 neg V hpt2 0 V 0 vpt2 V - hpt2 neg 0 V Opaque stroke } def -/TriUW { stroke [] 0 setdash vpt 1.12 mul add M + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M hpt neg vpt -1.62 mul V hpt 2 mul 0 V - hpt neg vpt 1.62 mul V Opaque stroke } def -/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M hpt neg vpt 1.62 mul V hpt 2 mul 0 V - hpt neg vpt -1.62 mul V Opaque stroke } def -/PentW { stroke [] 0 setdash gsave + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave translate 0 hpt M 4 {72 rotate 0 hpt L} repeat - Opaque stroke grestore } def -/CircW { stroke [] 0 setdash - hpt 0 360 arc Opaque stroke } def -/BoxFill { gsave Rec 1 setgray fill grestore } def + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse + clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title (plot.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 3) + /Author (palken) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Sun Mar 2 12:14:56 2014) + /DOCINFO pdfmark +end +} ifelse end %%EndProlog +%%Page: 1 1 gnudict begin gsave +doclip 50 50 translate 0.050 0.050 scale 0 setgray newpath (Helvetica) findfont 140 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 7200.00 5040.00 BoxColFill} if +/Helvetica findfont 140 scalefont setfont +/vshift -46 def +/Helvetica findfont 140 scalefont setfont 1.000 UL LTb -392 420 M +518 448 M 63 0 V -6577 0 R +6366 0 R -63 0 V -308 420 M -(0) Rshow -392 1056 M +stroke +434 448 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MRshow +1.000 UL +LTb +518 1080 M 63 0 V -6577 0 R +6366 0 R -63 0 V --6661 0 R -(1) Rshow -392 1692 M +stroke +434 1080 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1)] +] -46.7 MRshow +1.000 UL +LTb +518 1712 M 63 0 V -6577 0 R +6366 0 R -63 0 V --6661 0 R -(2) Rshow -392 2328 M +stroke +434 1712 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 2)] +] -46.7 MRshow +1.000 UL +LTb +518 2344 M 63 0 V -6577 0 R +6366 0 R -63 0 V --6661 0 R -(3) Rshow -392 2964 M +stroke +434 2344 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 3)] +] -46.7 MRshow +1.000 UL +LTb +518 2975 M 63 0 V -6577 0 R +6366 0 R -63 0 V --6661 0 R -(4) Rshow -392 3600 M +stroke +434 2975 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 4)] +] -46.7 MRshow +1.000 UL +LTb +518 3607 M 63 0 V -6577 0 R +6366 0 R -63 0 V --6661 0 R -(5) Rshow -392 4236 M +stroke +434 3607 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 5)] +] -46.7 MRshow +1.000 UL +LTb +518 4239 M 63 0 V -6577 0 R +6366 0 R -63 0 V --6661 0 R -(6) Rshow -392 4872 M +stroke +434 4239 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 6)] +] -46.7 MRshow +1.000 UL +LTb +518 4871 M 63 0 V -6577 0 R +6366 0 R -63 0 V --6661 0 R -(7) Rshow -392 420 M +stroke +434 4871 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 7)] +] -46.7 MRshow +1.000 UL +LTb +518 448 M 0 63 V -0 4389 R +0 4360 R 0 -63 V -392 280 M -(0) Cshow -1222 420 M +stroke +518 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MCshow +1.000 UL +LTb +1322 448 M 0 63 V -0 4389 R +0 4360 R 0 -63 V -0 -4529 R -(5) Cshow -2052 420 M +stroke +1322 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 5)] +] -46.7 MCshow +1.000 UL +LTb +2125 448 M 0 63 V -0 4389 R +0 4360 R 0 -63 V -0 -4529 R -(10) Cshow -2882 420 M +stroke +2125 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 10)] +] -46.7 MCshow +1.000 UL +LTb +2929 448 M 0 63 V -0 4389 R +0 4360 R 0 -63 V -0 -4529 R -(15) Cshow -3712 420 M +stroke +2929 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 15)] +] -46.7 MCshow +1.000 UL +LTb +3733 448 M 0 63 V -0 4389 R +0 4360 R 0 -63 V -0 -4529 R -(20) Cshow -4542 420 M +stroke +3733 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 20)] +] -46.7 MCshow +1.000 UL +LTb +4536 448 M 0 63 V -0 4389 R +0 4360 R 0 -63 V -0 -4529 R -(25) Cshow -5372 420 M +stroke +4536 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 25)] +] -46.7 MCshow +1.000 UL +LTb +5340 448 M 0 63 V -0 4389 R +0 4360 R 0 -63 V -0 -4529 R -(30) Cshow -6202 420 M +stroke +5340 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 30)] +] -46.7 MCshow +1.000 UL +LTb +6143 448 M 0 63 V -0 4389 R +0 4360 R 0 -63 V -0 -4529 R -(35) Cshow -7032 420 M +stroke +6143 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 35)] +] -46.7 MCshow +1.000 UL +LTb +6947 448 M 0 63 V -0 4389 R +0 4360 R 0 -63 V -0 -4529 R -(40) Cshow +stroke +6947 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 40)] +] -46.7 MCshow +1.000 UL +LTb 1.000 UL LTb -392 420 M -6640 0 V -0 4452 V --6640 0 V -392 420 L -0 2646 M -currentpoint gsave translate 90 rotate 0 0 M -(y) Cshow +518 4871 N +518 448 L +6429 0 V +0 4423 V +-6429 0 V +Z stroke +LCb setrgbcolor +112 2659 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 140.0 0.0 true true 0 (y)] +] -46.7 MCshow grestore -3712 140 M -(t) Cshow +LTb +LCb setrgbcolor +3732 98 M +[ [(Helvetica) 140.0 0.0 true true 0 (t)] +] -46.7 MCshow +LTb +1.000 UP +1.000 UL +LTb +% Begin plot #1 1.000 UP 1.000 UL LT0 -6381 4739 M -('data' using 2:3:4) Rshow -6465 4739 M +/Helvetica findfont 140 scalefont setfont +LCb setrgbcolor +6296 4738 M +('dat' us 2:3:4) Rshow +LT0 +6380 4738 M 399 0 V -399 31 R 0 -62 V 399 62 R 0 -62 V -392 4100 M -0 127 V -361 4100 M +518 3911 M +0 758 V +487 3911 M 62 0 V --62 127 R +-62 758 R 62 0 V -558 3929 M -0 128 V -527 3929 M +679 3559 M +0 698 V +648 3559 M 62 0 V --62 128 R +-62 698 R 62 0 V -724 3679 M -0 127 V -693 3679 M +839 3884 M +0 643 V +808 3884 M 62 0 V --62 127 R +-62 643 R 62 0 V -890 3396 M -0 127 V -859 3396 M +1000 3341 M +0 595 V +969 3341 M 62 0 V --62 127 R +-62 595 R 62 0 V -135 -334 R -0 127 V --31 -127 R +130 -739 R +0 550 V +-31 -550 R 62 0 V --62 127 R +-62 550 R 62 0 V -135 -359 R -0 127 V --31 -127 R +1322 2416 M +0 509 V +-31 -509 R 62 0 V --62 127 R +-62 509 R 62 0 V -135 -372 R -0 127 V --31 -127 R +129 -915 R +0 473 V +-31 -473 R 62 0 V --62 127 R +-62 473 R 62 0 V -135 -186 R -0 127 V --31 -127 R +130 -204 R +0 440 V +-31 -440 R 62 0 V --62 127 R +-62 440 R 62 0 V -135 -361 R -0 127 V --31 -127 R +130 -433 R +0 411 V +-31 -411 R 62 0 V --62 127 R +-62 411 R 62 0 V -135 -370 R -0 127 V --31 -127 R +130 -353 R +0 383 V +-31 -383 R 62 0 V --62 127 R +-62 383 R 62 0 V -135 -123 R -0 128 V --31 -128 R +129 -667 R +0 358 V +-31 -358 R 62 0 V --62 128 R +-62 358 R 62 0 V -135 -161 R -0 127 V --31 -127 R +130 -673 R +0 337 V +-31 -337 R 62 0 V --62 127 R +-62 337 R 62 0 V -135 -220 R -0 127 V --31 -127 R +130 -315 R +0 317 V +-31 -317 R 62 0 V --62 127 R +-62 317 R 62 0 V -135 -447 R -0 127 V --31 -127 R +129 -265 R +0 298 V +-31 -298 R 62 0 V --62 127 R +-62 298 R 62 0 V -135 -12 R -0 127 V --31 -127 R +130 -282 R +0 282 V +-31 -282 R 62 0 V --62 127 R +-62 282 R 62 0 V -135 -378 R -0 127 V --31 -127 R +130 -539 R +0 267 V +-31 -267 R 62 0 V --62 127 R +-62 267 R 62 0 V -135 -120 R -0 128 V --31 -128 R +130 -335 R +0 254 V +-31 -254 R 62 0 V --62 128 R +stroke 3121 1510 M +-62 254 R 62 0 V -135 -125 R -0 128 V --31 -128 R +129 -227 R +0 242 V +-31 -242 R 62 0 V --62 128 R +-62 242 R 62 0 V -135 -283 R -0 127 V --31 -127 R +130 -370 R +0 231 V +-31 -231 R 62 0 V --62 127 R +-62 231 R 62 0 V -135 -69 R -0 127 V --31 -127 R +130 -289 R +0 220 V +-31 -220 R 62 0 V --62 127 R +-62 220 R 62 0 V -135 -272 R -0 127 V --31 -127 R +130 -105 R +0 212 V +-31 -212 R 62 0 V --62 127 R +-62 212 R 62 0 V -135 -173 R -0 127 V --31 -127 R +129 -351 R +0 204 V +-31 -204 R 62 0 V --62 127 R +-62 204 R 62 0 V -135 -48 R -0 128 V --31 -128 R +130 -228 R +0 197 V +-31 -197 R 62 0 V --62 128 R +-62 197 R 62 0 V -135 -249 R -0 127 V --31 -127 R +130 -285 R +0 189 V +-31 -189 R 62 0 V --62 127 R +-62 189 R 62 0 V -135 -57 R -0 127 V --31 -127 R +129 -183 R +0 184 V +-31 -184 R 62 0 V --62 127 R +-62 184 R 62 0 V -135 -278 R -0 128 V --31 -128 R +130 -149 R +0 178 V +-31 -178 R 62 0 V --62 128 R +-62 178 R 62 0 V -135 -88 R -0 127 V --31 -127 R +130 -202 R +0 173 V +-31 -173 R 62 0 V --62 127 R +-62 173 R 62 0 V -135 -155 R -0 127 V --31 -127 R +130 -261 R +0 169 V +-31 -169 R 62 0 V --62 127 R +-62 169 R 62 0 V -135 -73 R -0 127 V --31 -127 R +129 -135 R +0 164 V +-31 -164 R 62 0 V --62 127 R +-62 164 R 62 0 V -135 -349 R -0 127 V --31 -127 R +130 -50 R +0 161 V +-31 -161 R 62 0 V --62 127 R +-62 161 R 62 0 V -135 59 R -0 127 V --31 -127 R +130 -311 R +0 158 V +-31 -158 R 62 0 V --62 127 R +-62 158 R 62 0 V -135 -260 R -0 127 V --31 -127 R +129 -175 R +0 154 V +-31 -154 R 62 0 V --62 127 R +-62 154 R 62 0 V -135 -146 R -0 128 V --31 -128 R +130 -157 R +0 152 V +-31 -152 R 62 0 V --62 128 R +-62 152 R 62 0 V -135 -39 R -0 127 V --31 -127 R +5822 931 M +0 150 V +5791 931 M 62 0 V --62 127 R +-62 150 R 62 0 V -135 -218 R -0 127 V --31 -127 R +stroke 5853 1081 M +130 73 R +0 148 V +-31 -148 R 62 0 V --62 127 R +-62 148 R 62 0 V -135 -135 R -0 128 V --31 -128 R +129 -202 R +0 145 V +-31 -145 R 62 0 V --62 128 R +-62 145 R 62 0 V -135 -156 R -0 127 V --31 -127 R +130 -167 R +0 144 V +-31 -144 R 62 0 V --62 127 R +-62 144 R 62 0 V -135 -72 R -0 127 V --31 -127 R +130 -84 R +0 142 V +-31 -142 R 62 0 V --62 127 R +-62 142 R 62 0 V -135 -86 R -0 128 V --31 -128 R +130 -89 R +0 141 V +-31 -141 R 62 0 V --62 128 R +-62 141 R 62 0 V -135 -159 R -0 128 V --31 -128 R +129 -285 R +0 139 V +-31 -139 R 62 0 V --62 128 R +-62 139 R 62 0 V -392 4164 Pls -558 3993 Pls -724 3742 Pls -890 3459 Pls -1056 3253 Pls -1222 3021 Pls -1388 2776 Pls -1554 2717 Pls -1720 2483 Pls -1886 2239 Pls -2052 2244 Pls -2218 2211 Pls -2384 2118 Pls -2550 1798 Pls -2716 1912 Pls -2882 1662 Pls -3048 1669 Pls -3214 1672 Pls -3380 1517 Pls -3546 1575 Pls -3712 1429 Pls -3878 1384 Pls -4044 1463 Pls -4210 1342 Pls -4376 1411 Pls -4542 1261 Pls -4708 1301 Pls -4874 1273 Pls -5040 1327 Pls -5206 1104 Pls -5372 1290 Pls -5538 1158 Pls -5704 1139 Pls -5870 1228 Pls -6036 1136 Pls -6202 1129 Pls -6368 1100 Pls -6534 1156 Pls -6700 1197 Pls -6866 1166 Pls -6664 4739 Pls +518 4290 Pls +679 3908 Pls +839 4205 Pls +1000 3638 Pls +1161 3472 Pls +1322 2671 Pls +1482 2247 Pls +1643 2499 Pls +1804 2491 Pls +1965 2536 Pls +2125 2239 Pls +2286 1913 Pls +2447 1926 Pls +2607 1968 Pls +2768 1976 Pls +2929 1711 Pls +3090 1637 Pls +3250 1658 Pls +3411 1525 Pls +3572 1461 Pls +3733 1572 Pls +3893 1429 Pls +4054 1401 Pls +4215 1310 Pls +4375 1313 Pls +4536 1345 Pls +4697 1319 Pls +4858 1229 Pls +5018 1260 Pls +5179 1373 Pls +5340 1221 Pls +5500 1202 Pls +5661 1198 Pls +5822 1006 Pls +5983 1228 Pls +6143 1173 Pls +6304 1150 Pls +6465 1209 Pls +6626 1261 Pls +6786 1117 Pls +6579 4738 Pls +% End plot #1 +% Begin plot #2 1.000 UL LT1 -6381 4599 M +/Helvetica findfont 140 scalefont setfont +LCb setrgbcolor +6296 4598 M (f\(x\)) Rshow -6465 4599 M +LT1 +6380 4598 M 399 0 V -392 4251 M -67 -127 V -67 -122 V -67 -117 V -67 -112 V -67 -108 V -67 -104 V -67 -99 V -68 -96 V -67 -92 V -67 -88 V -67 -84 V -67 -81 V -67 -78 V -67 -75 V -67 -72 V -67 -69 V -67 -66 V -67 -64 V -67 -61 V -67 -59 V -67 -56 V -68 -54 V -67 -52 V -67 -50 V -67 -48 V -67 -46 V -67 -44 V -67 -42 V -67 -41 V -67 -39 V -67 -38 V -67 -36 V -67 -34 V -67 -33 V -67 -32 V -68 -31 V -67 -29 V -67 -29 V -67 -27 V -67 -26 V -67 -25 V -67 -24 V -67 -23 V -67 -22 V -67 -21 V -67 -20 V -67 -20 V -67 -19 V -67 -18 V -68 -17 V -67 -17 V -67 -16 V -67 -15 V -67 -15 V -67 -14 V -67 -14 V -67 -13 V -67 -12 V -67 -12 V -67 -12 V -67 -11 V -67 -11 V -67 -10 V -68 -10 V -67 -9 V -67 -9 V -67 -9 V -67 -8 V -67 -8 V -67 -8 V -67 -7 V -67 -7 V -67 -7 V -67 -7 V -67 -6 V -67 -6 V -67 -6 V -68 -5 V -67 -6 V -67 -5 V -67 -5 V -67 -4 V -67 -5 V -67 -4 V -67 -4 V -67 -4 V -67 -4 V -67 -4 V -67 -4 V -67 -3 V -67 -3 V -68 -3 V -67 -3 V -67 -3 V -67 -3 V -67 -3 V -67 -2 V -67 -3 V -67 -2 V +518 4382 M +63 -140 V +64 -134 V +63 -128 V +63 -122 V +64 -118 V +63 -112 V +63 -108 V +64 -103 V +63 -99 V +63 -94 V +63 -90 V +64 -87 V +63 -83 V +63 -79 V +64 -76 V +63 -72 V +63 -70 V +64 -66 V +63 -64 V +63 -61 V +64 -58 V +63 -56 V +63 -53 V +64 -52 V +63 -49 V +63 -46 V +64 -45 V +63 -43 V +63 -41 V +63 -40 V +64 -37 V +63 -36 V +63 -35 V +64 -33 V +63 -32 V +63 -30 V +64 -29 V +63 -28 V +63 -26 V +64 -26 V +63 -24 V +63 -23 V +64 -22 V +63 -22 V +63 -20 V +64 -20 V +63 -18 V +63 -18 V +63 -17 V +64 -17 V +63 -16 V +63 -15 V +64 -14 V +63 -14 V +63 -13 V +64 -13 V +63 -12 V +63 -11 V +64 -11 V +63 -11 V +63 -10 V +64 -10 V +63 -9 V +63 -9 V +64 -8 V +63 -9 V +63 -7 V +63 -8 V +64 -7 V +63 -7 V +63 -6 V +64 -7 V +63 -6 V +63 -5 V +64 -6 V +63 -5 V +63 -5 V +64 -5 V +63 -5 V +63 -4 V +64 -4 V +63 -4 V +63 -4 V +64 -4 V +63 -3 V +63 -4 V +63 -3 V +64 -3 V +63 -3 V +63 -3 V +64 -3 V +63 -2 V +63 -3 V +64 -2 V +63 -3 V +63 -2 V +64 -2 V +63 -2 V +63 -2 V +% End plot #2 +stroke +LTb +518 4871 N +518 448 L +6429 0 V +0 4423 V +-6429 0 V +Z stroke +1.000 UP +1.000 UL +LTb stroke grestore end diff -Nru gsl-doc-1.16/doc/fitting.texi gsl-doc-2.3/doc/fitting.texi --- gsl-doc-1.16/doc/fitting.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/fitting.texi 2016-11-18 19:29:40.000000000 +0000 @@ -12,17 +12,17 @@ variance-covariance matrix. The functions are divided into separate versions for simple one- or -two-parameter regression and multiple-parameter fits. The functions -are declared in the header file @file{gsl_fit.h}. +two-parameter regression and multiple-parameter fits. @menu * Fitting Overview:: * Linear regression:: -* Linear fitting without a constant term:: -* Multi-parameter fitting:: +* Multi-parameter regression:: +* Regularized regression:: * Robust linear regression:: +* Large Dense Linear Systems:: * Troubleshooting:: -* Fitting Examples:: +* Fitting Examples:: * Fitting References and Further Reading:: @end menu @@ -139,6 +139,17 @@ @section Linear regression @cindex linear regression +The functions in this section are used to fit simple one or two +parameter linear regression models. The functions are declared in +the header file @file{gsl_fit.h}. + +@menu +* Linear regression with a constant term:: +* Linear regression without a constant term:: +@end menu + +@node Linear regression with a constant term +@subsection Linear regression with a constant term The functions described in this section can be used to perform least-squares fits to a straight line model, @math{Y(c,x) = c_0 + c_1 x}. @@ -179,8 +190,8 @@ c_0 + c_1 X} at the point @var{x}. @end deftypefun -@node Linear fitting without a constant term -@section Linear fitting without a constant term +@node Linear regression without a constant term +@subsection Linear regression without a constant term The functions described in this section can be used to perform least-squares fits to a straight line model without a constant term, @@ -218,15 +229,30 @@ c_1 X} at the point @var{x}. @end deftypefun -@node Multi-parameter fitting -@section Multi-parameter fitting +@node Multi-parameter regression +@section Multi-parameter regression @cindex multi-parameter regression @cindex fits, multi-parameter linear -The functions described in this section perform least-squares fits to a -general linear model, @math{y = X c} where @math{y} is a vector of -@math{n} observations, @math{X} is an @math{n} by @math{p} matrix of -predictor variables, and the elements of the vector @math{c} are the @math{p} unknown best-fit parameters which are to be estimated. The chi-squared value is given by @c{$\chi^2 = \sum_i w_i (y_i - \sum_j X_{ij} c_j)^2$} -@math{\chi^2 = \sum_i w_i (y_i - \sum_j X_@{ij@} c_j)^2}. +This section describes routines which perform least squares fits +to a linear model by minimizing the cost function +@tex +\beforedisplay +$$ +\chi^2 = \sum_i w_i (y_i - \sum_j X_{ij} c_j)^2 = || y - Xc ||_W^2 +$$ +\afterdisplay +@end tex +@ifinfo +@example +\chi^2 = \sum_i w_i (y_i - \sum_j X_ij c_j)^2 = || y - Xc ||_W^2 +@end example +@end ifinfo +where @math{y} is a vector of @math{n} observations, @math{X} is an +@math{n}-by-@math{p} matrix of predictor variables, @math{c} +is a vector of the @math{p} unknown best-fit parameters to be estimated, +and @math{||r||_W^2 = r^T W r}. +The matrix @math{W = } diag@math{(w_1,w_2,...,w_n)} +defines the weights or uncertainties of the observation vector. This formulation can be used for fits to any number of functions and/or variables by preparing the @math{n}-by-@math{p} matrix @math{X} @@ -287,23 +313,36 @@ where @math{x_j(i)} is the @math{i}-th value of the predictor variable @math{x_j}. -The functions described in this section are declared in the header file -@file{gsl_multifit.h}. - The solution of the general linear least-squares system requires an additional working space for intermediate results, such as the singular value decomposition of the matrix @math{X}. -@deftypefun {gsl_multifit_linear_workspace *} gsl_multifit_linear_alloc (size_t @var{n}, size_t @var{p}) -@tpindex gsl_multifit_linear_workspace -This function allocates a workspace for fitting a model to @var{n} -observations using @var{p} parameters. +These functions are declared in the header file @file{gsl_multifit.h}. + +@deftypefun {gsl_multifit_linear_workspace *} gsl_multifit_linear_alloc (const size_t @var{n}, const size_t @var{p}) +@tindex gsl_multifit_linear_workspace +This function allocates a workspace for fitting a model to a maximum of @var{n} +observations using a maximum of @var{p} parameters. The user may later supply +a smaller least squares system if desired. The size of the workspace is +@math{O(np + p^2)}. @end deftypefun @deftypefun void gsl_multifit_linear_free (gsl_multifit_linear_workspace * @var{work}) This function frees the memory associated with the workspace @var{w}. @end deftypefun +@deftypefun int gsl_multifit_linear_svd (const gsl_matrix * @var{X}, gsl_multifit_linear_workspace * @var{work}) +This function performs a singular value decomposition of the +matrix @var{X} and stores the SVD factors internally in @var{work}. +@end deftypefun + +@deftypefun int gsl_multifit_linear_bsvd (const gsl_matrix * @var{X}, gsl_multifit_linear_workspace * @var{work}) +This function performs a singular value decomposition of the +matrix @var{X} and stores the SVD factors internally in @var{work}. +The matrix @var{X} is first balanced by applying column scaling +factors to improve the accuracy of the singular values. +@end deftypefun + @deftypefun int gsl_multifit_linear (const gsl_matrix * @var{X}, const gsl_vector * @var{y}, gsl_vector * @var{c}, gsl_matrix * @var{cov}, double * @var{chisq}, gsl_multifit_linear_workspace * @var{work}) This function computes the best-fit parameters @var{c} of the model @math{y = X c} for the observations @var{y} and the matrix of @@ -324,6 +363,24 @@ from the fit. @end deftypefun +@deftypefun int gsl_multifit_linear_tsvd (const gsl_matrix * @var{X}, const gsl_vector * @var{y}, const double @var{tol}, gsl_vector * @var{c}, gsl_matrix * @var{cov}, double * @var{chisq}, size_t * @var{rank}, gsl_multifit_linear_workspace * @var{work}) +This function computes the best-fit parameters @var{c} of the model +@math{y = X c} for the observations @var{y} and the matrix of +predictor variables @var{X}, using a truncated SVD expansion. +Singular values which satisfy @math{s_i \le tol \times s_0} +are discarded from the fit, where @math{s_0} is the largest singular value. +The @math{p}-by-@math{p} variance-covariance matrix of the model parameters +@var{cov} is set to @math{\sigma^2 (X^T X)^{-1}}, where @math{\sigma} is +the standard deviation of the fit residuals. +The sum of squares of the residuals from the best-fit, +@math{\chi^2}, is returned in @var{chisq}. The effective rank +(number of singular values used in solution) is returned in @var{rank}. +If the coefficient of +determination is desired, it can be computed from the expression +@math{R^2 = 1 - \chi^2 / TSS}, where the total sum of squares (TSS) of +the observations @var{y} may be computed from @code{gsl_stats_tss}. +@end deftypefun + @deftypefun int gsl_multifit_wlinear (const gsl_matrix * @var{X}, const gsl_vector * @var{w}, const gsl_vector * @var{y}, gsl_vector * @var{c}, gsl_matrix * @var{cov}, double * @var{chisq}, gsl_multifit_linear_workspace * @var{work}) This function computes the best-fit parameters @var{c} of the weighted model @math{y = X c} for the observations @var{y} with weights @var{w} @@ -337,16 +394,21 @@ observations @var{y} may be computed from @code{gsl_stats_wtss}. @end deftypefun -@deftypefun int gsl_multifit_linear_svd (const gsl_matrix * @var{X}, const gsl_vector * @var{y}, double @var{tol}, size_t * @var{rank}, gsl_vector * @var{c}, gsl_matrix * @var{cov}, double * @var{chisq}, gsl_multifit_linear_workspace * @var{work}) -@deftypefunx int gsl_multifit_wlinear_svd (const gsl_matrix * @var{X}, const gsl_vector * @var{w}, const gsl_vector * @var{y}, double @var{tol}, size_t * @var{rank}, gsl_vector * @var{c}, gsl_matrix * @var{cov}, double * @var{chisq}, gsl_multifit_linear_workspace * @var{work}) -In these functions components of the fit are discarded if the ratio of -singular values @math{s_i/s_0} falls below the user-specified -tolerance @var{tol}, and the effective rank is returned in @var{rank}. -@end deftypefun - -@deftypefun int gsl_multifit_linear_usvd (const gsl_matrix * @var{X}, const gsl_vector * @var{y}, double @var{tol}, size_t * @var{rank}, gsl_vector * @var{c}, gsl_matrix * @var{cov}, double * @var{chisq}, gsl_multifit_linear_workspace * @var{work}) -@deftypefunx int gsl_multifit_wlinear_usvd (const gsl_matrix * @var{X}, const gsl_vector * @var{w}, const gsl_vector * @var{y}, double @var{tol}, size_t * @var{rank}, gsl_vector * @var{c}, gsl_matrix * @var{cov}, double * @var{chisq}, gsl_multifit_linear_workspace * @var{work}) -These functions compute the fit using an SVD without column scaling. +@deftypefun int gsl_multifit_wlinear_tsvd (const gsl_matrix * @var{X}, const gsl_vector * @var{w}, const gsl_vector * @var{y}, const double @var{tol}, gsl_vector * @var{c}, gsl_matrix * @var{cov}, double * @var{chisq}, size_t * @var{rank}, gsl_multifit_linear_workspace * @var{work}) +This function computes the best-fit parameters @var{c} of the weighted +model @math{y = X c} for the observations @var{y} with weights @var{w} +and the matrix of predictor variables @var{X}, using a truncated SVD expansion. +Singular values which satisfy @math{s_i \le tol \times s_0} +are discarded from the fit, where @math{s_0} is the largest singular value. +The @math{p}-by-@math{p} covariance matrix of the model +parameters @var{cov} is computed as @math{(X^T W X)^{-1}}. The weighted +sum of squares of the residuals from the best-fit, @math{\chi^2}, is +returned in @var{chisq}. The effective rank of the system (number of +singular values used in the solution) is returned in @var{rank}. +If the coefficient of determination is +desired, it can be computed from the expression @math{R^2 = 1 - \chi^2 +/ WTSS}, where the weighted total sum of squares (WTSS) of the +observations @var{y} may be computed from @code{gsl_stats_wtss}. @end deftypefun @deftypefun int gsl_multifit_linear_est (const gsl_vector * @var{x}, const gsl_vector * @var{c}, const gsl_matrix * @var{cov}, double * @var{y}, double * @var{y_err}) @@ -363,9 +425,411 @@ variables @var{X}. @end deftypefun +@deftypefun size_t gsl_multifit_linear_rank (const double @var{tol}, const gsl_multifit_linear_workspace * @var{work}) +This function returns the rank of the matrix @math{X} which must first have its +singular value decomposition computed. The rank is computed by counting the number +of singular values @math{\sigma_j} which satisfy @math{\sigma_j > tol \times \sigma_0}, +where @math{\sigma_0} is the largest singular value. +@end deftypefun + +@node Regularized regression +@section Regularized regression +@cindex ridge regression +@cindex Tikhonov regression +@cindex regression, ridge +@cindex regression, Tikhonov +@cindex least squares, regularized + +Ordinary weighted least squares models seek a solution vector @math{c} +which minimizes the residual +@tex +\beforedisplay +$$ +\chi^2 = || y - Xc ||_W^2 +$$ +\afterdisplay +@end tex +@ifinfo +@example +\chi^2 = || y - Xc ||_W^2 +@end example +@end ifinfo +where @math{y} is the @math{n}-by-@math{1} observation vector, +@math{X} is the @math{n}-by-@math{p} design matrix, @math{c} is +the @math{p}-by-@math{1} solution vector, +@math{W =} diag@math{(w_1,...,w_n)} is the data weighting matrix, +and @math{||r||_W^2 = r^T W r}. +In cases where the least squares matrix @math{X} is ill-conditioned, +small perturbations (ie: noise) in the observation vector could lead to +widely different solution vectors @math{c}. +One way of dealing with ill-conditioned matrices is to use a ``truncated SVD'' +in which small singular values, below some given tolerance, are discarded +from the solution. The truncated SVD method is available using the functions +@code{gsl_multifit_linear_tsvd} and @code{gsl_multifit_wlinear_tsvd}. Another way +to help solve ill-posed problems is to include a regularization term in the least squares +minimization +@tex +\beforedisplay +$$ +\chi^2 = || y - Xc ||_W^2 + \lambda^2 || L c ||^2 +$$ +\afterdisplay +@end tex +@ifinfo +@example +\chi^2 = || y - Xc ||_W^2 + \lambda^2 || L c ||^2 +@end example +@end ifinfo +for a suitably chosen regularization parameter @math{\lambda} and +matrix @math{L}. This type of regularization is known as Tikhonov, or ridge, +regression. In some applications, @math{L} is chosen as the identity matrix, giving +preference to solution vectors @math{c} with smaller norms. +Including this regularization term leads to the explicit ``normal equations'' solution +@tex +\beforedisplay +$$ +c = \left( X^T W X + \lambda^2 L^T L \right)^{-1} X^T W y +$$ +\afterdisplay +@end tex +@ifinfo +@example +c = ( X^T W X + \lambda^2 L^T L )^-1 X^T W y +@end example +@end ifinfo +which reduces to the ordinary least squares solution when @math{L = 0}. +In practice, it is often advantageous to transform a regularized least +squares system into the form +@tex +\beforedisplay +$$ +\chi^2 = || \tilde{y} - \tilde{X} \tilde{c} ||^2 + \lambda^2 || \tilde{c} ||^2 +$$ +\afterdisplay +@end tex +@ifinfo +@example +\chi^2 = || y~ - X~ c~ ||^2 + \lambda^2 || c~ ||^2 +@end example +@end ifinfo +This is known as the Tikhonov ``standard form'' and has the normal equations solution +@math{\tilde{c} = \left( \tilde{X}^T \tilde{X} + \lambda^2 I \right)^{-1} \tilde{X}^T \tilde{y}}. +For an @math{m}-by-@math{p} matrix @math{L} which is full rank and has @math{m >= p} (ie: @math{L} is +square or has more rows than columns), we can calculate the ``thin'' QR decomposition of @math{L}, and +note that @math{||L c||} = @math{||R c||} since the @math{Q} factor will not change the norm. Since +@math{R} is @math{p}-by-@math{p}, we can then use the transformation +@tex +\beforedisplay +$$ +\eqalign{ +\tilde{X} &= W^{1 \over 2} X R^{-1} \cr +\tilde{y} &= W^{1 \over 2} y \cr +\tilde{c} &= R c +} +$$ +\afterdisplay +@end tex +@ifinfo +@example +X~ = sqrt(W) X R^-1 +y~ = sqrt(W) y +c~ = R c +@end example +@end ifinfo +to achieve the standard form. For a rectangular matrix @math{L} with @math{m < p}, +a more sophisticated approach is needed (see Hansen 1998, chapter 2.3). +In practice, the normal equations solution above is not desirable due to +numerical instabilities, and so the system is solved using the +singular value decomposition of the matrix @math{\tilde{X}}. +The matrix @math{L} is often chosen as the identity matrix, or as a first +or second finite difference operator, to ensure a smoothly varying +coefficient vector @math{c}, or as a diagonal matrix to selectively damp +each model parameter differently. If @math{L \ne I}, the user must first +convert the least squares problem to standard form using +@code{gsl_multifit_linear_stdform1} or @code{gsl_multifit_linear_stdform2}, +solve the system, and then backtransform the solution vector to recover +the solution of the original problem (see +@code{gsl_multifit_linear_genform1} and @code{gsl_multifit_linear_genform2}). + +In many regularization problems, care must be taken when choosing +the regularization parameter @math{\lambda}. Since both the +residual norm @math{||y - X c||} and solution norm @math{||L c||} +are being minimized, the parameter @math{\lambda} represents +a tradeoff between minimizing either the residuals or the +solution vector. A common tool for visualizing the comprimise between +the minimization of these two quantities is known as the L-curve. +The L-curve is a log-log plot of the residual norm @math{||y - X c||} +on the horizontal axis and the solution norm @math{||L c||} on the +vertical axis. This curve nearly always as an @math{L} shaped +appearance, with a distinct corner separating the horizontal +and vertical sections of the curve. The regularization parameter +corresponding to this corner is often chosen as the optimal +value. GSL provides routines to calculate the L-curve for all +relevant regularization parameters as well as locating the corner. + +Another method of choosing the regularization parameter is known +as Generalized Cross Validation (GCV). This method is based on +the idea that if an arbitrary element @math{y_i} is left out of the +right hand side, the resulting regularized solution should predict this element +accurately. This leads to choosing the parameter @math{\lambda} +which minimizes the GCV function +@tex +\beforedisplay +$$ +G(\lambda) = {||y - X c_{\lambda}||^2 \over \textrm{Tr}(I_n - X X_{\lambda}^I)^2} +$$ +\afterdisplay +@end tex +@ifinfo + +@example +G(\lambda) = (||y - X c_@{\lambda@}||^2) / Tr(I_n - X X^I)^2 +@end example + +@end ifinfo +where @math{X_{\lambda}^I} is the matrix which relates the solution @math{c_{\lambda}} +to the right hand side @math{y}, ie: @math{c_{\lambda} = X_{\lambda}^I y}. GSL +provides routines to compute the GCV curve and its minimum. + +@noindent +For most applications, the steps required to solve a regularized least +squares problem are as follows: + +@enumerate + +@item Construct the least squares system (@math{X}, @math{y}, @math{W}, @math{L}) + +@item Transform the system to standard form (@math{\tilde{X}},@math{\tilde{y}}). This +step can be skipped if @math{L = I_p} and @math{W = I_n}. + +@item Calculate the SVD of @math{\tilde{X}}. + +@item Determine an appropriate regularization parameter @math{\lambda} (using for example +L-curve or GCV analysis). + +@item Solve the standard form system using the chosen @math{\lambda} and the SVD of @math{\tilde{X}}. + +@item Backtransform the standard form solution @math{\tilde{c}} to recover the +original solution vector @math{c}. + +@end enumerate + +@deftypefun int gsl_multifit_linear_stdform1 (const gsl_vector * @var{L}, const gsl_matrix * @var{X}, const gsl_vector * @var{y}, gsl_matrix * @var{Xs}, gsl_vector * @var{ys}, gsl_multifit_linear_workspace * @var{work}) +@deftypefunx int gsl_multifit_linear_wstdform1 (const gsl_vector * @var{L}, const gsl_matrix * @var{X}, const gsl_vector * @var{w}, const gsl_vector * @var{y}, gsl_matrix * @var{Xs}, gsl_vector * @var{ys}, gsl_multifit_linear_workspace * @var{work}) +These functions define a regularization matrix +@math{L =} diag@math{(l_0,l_1,...,l_{p-1})}. +The diagonal matrix element @math{l_i} is provided by the +@math{i}th element of the input vector @var{L}. +The @math{n}-by-@math{p} least squares matrix @var{X} and +vector @var{y} of length @math{n} are then +converted to standard form as described above and the parameters +(@math{\tilde{X}},@math{\tilde{y}}) are stored in @var{Xs} and @var{ys} +on output. @var{Xs} and @var{ys} have the same dimensions as +@var{X} and @var{y}. Optional data weights may be supplied in the +vector @var{w} of length @math{n}. In order to apply this transformation, +@math{L^{-1}} must exist and so none of the @math{l_i} +may be zero. After the standard form system has been solved, +use @code{gsl_multifit_linear_genform1} to recover the original solution vector. +It is allowed to have @var{X} = @var{Xs} and @var{y} = @var{ys} for an in-place transform. +In order to perform a weighted regularized fit with @math{L = I}, the user may +call @code{gsl_multifit_linear_applyW} to convert to standard form. +@end deftypefun + +@deftypefun int gsl_multifit_linear_L_decomp (gsl_matrix * @var{L}, gsl_vector * @var{tau}) +This function factors the @math{m}-by-@math{p} regularization matrix +@var{L} into a form needed for the later transformation to standard form. @var{L} +may have any number of rows @math{m}. If @math{m \ge p} the QR decomposition of +@var{L} is computed and stored in @var{L} on output. If @math{m < p}, the QR decomposition +of @math{L^T} is computed and stored in @var{L} on output. On output, +the Householder scalars are stored in the vector @var{tau} of size @math{MIN(m,p)}. +These outputs will be used by @code{gsl_multifit_linear_wstdform2} to complete the +transformation to standard form. +@end deftypefun + +@deftypefun int gsl_multifit_linear_stdform2 (const gsl_matrix * @var{LQR}, const gsl_vector * @var{Ltau}, const gsl_matrix * @var{X}, const gsl_vector * @var{y}, gsl_matrix * @var{Xs}, gsl_vector * @var{ys}, gsl_matrix * @var{M}, gsl_multifit_linear_workspace * @var{work}) +@deftypefunx int gsl_multifit_linear_wstdform2 (const gsl_matrix * @var{LQR}, const gsl_vector * @var{Ltau}, const gsl_matrix * @var{X}, const gsl_vector * @var{w}, const gsl_vector * @var{y}, gsl_matrix * @var{Xs}, gsl_vector * @var{ys}, gsl_matrix * @var{M}, gsl_multifit_linear_workspace * @var{work}) +These functions convert the least squares system (@var{X},@var{y},@var{W},@math{L}) to standard +form (@math{\tilde{X}},@math{\tilde{y}}) which are stored in @var{Xs} and @var{ys} +respectively. The @math{m}-by-@math{p} regularization matrix @var{L} is specified by the inputs +@var{LQR} and @var{Ltau}, which are outputs from @code{gsl_multifit_linear_L_decomp}. +The dimensions of the standard form parameters (@math{\tilde{X}},@math{\tilde{y}}) +depend on whether @math{m} is larger or less than @math{p}. For @math{m \ge p}, +@var{Xs} is @math{n}-by-@math{p}, @var{ys} is @math{n}-by-1, and @var{M} is +not used. For @math{m < p}, @var{Xs} is @math{(n - p + m)}-by-@math{m}, +@var{ys} is @math{(n - p + m)}-by-1, and @var{M} is additional @math{n}-by-@math{p} workspace, +which is required to recover the original solution vector after the system has been +solved (see @code{gsl_multifit_linear_genform2}). Optional data weights may be supplied in the +vector @var{w} of length @math{n}, where @math{W =} diag(w). +@end deftypefun + +@deftypefun int gsl_multifit_linear_solve (const double @var{lambda}, const gsl_matrix * @var{Xs}, const gsl_vector * @var{ys}, gsl_vector * @var{cs}, double * @var{rnorm}, double * @var{snorm}, gsl_multifit_linear_workspace * @var{work}) +This function computes the regularized best-fit parameters @math{\tilde{c}} +which minimize the cost function +@math{\chi^2 = || \tilde{y} - \tilde{X} \tilde{c} ||^2 + \lambda^2 || \tilde{c} ||^2} which is +in standard form. The least squares system must therefore be converted +to standard form prior to calling this function. +The observation vector @math{\tilde{y}} is provided in @var{ys} and the matrix of +predictor variables @math{\tilde{X}} in @var{Xs}. The solution vector @math{\tilde{c}} is +returned in @var{cs}, which has length min(@math{m,p}). The SVD of @var{Xs} must be computed prior +to calling this function, using @code{gsl_multifit_linear_svd}. +The regularization parameter @math{\lambda} is provided in @var{lambda}. +The residual norm @math{|| \tilde{y} - \tilde{X} \tilde{c} || = ||y - X c||_W} is returned in @var{rnorm}. +The solution norm @math{|| \tilde{c} || = ||L c||} is returned in +@var{snorm}. +@end deftypefun + +@deftypefun int gsl_multifit_linear_genform1 (const gsl_vector * @var{L}, const gsl_vector * @var{cs}, gsl_vector * @var{c}, gsl_multifit_linear_workspace * @var{work}) +After a regularized system has been solved with +@math{L =} diag@math{(\l_0,\l_1,...,\l_{p-1})}, +this function backtransforms the standard form solution vector @var{cs} +to recover the solution vector of the original problem @var{c}. The +diagonal matrix elements @math{l_i} are provided in +the vector @var{L}. It is allowed to have @var{c} = @var{cs} for an +in-place transform. +@end deftypefun + +@deftypefun int gsl_multifit_linear_genform2 (const gsl_matrix * @var{LQR}, const gsl_vector * @var{Ltau}, const gsl_matrix * @var{X}, const gsl_vector * @var{y}, const gsl_vector * @var{cs}, const gsl_matrix * @var{M}, gsl_vector * @var{c}, gsl_multifit_linear_workspace * @var{work}) +@deftypefunx int gsl_multifit_linear_wgenform2 (const gsl_matrix * @var{LQR}, const gsl_vector * @var{Ltau}, const gsl_matrix * @var{X}, const gsl_vector * @var{w}, const gsl_vector * @var{y}, const gsl_vector * @var{cs}, const gsl_matrix * @var{M}, gsl_vector * @var{c}, gsl_multifit_linear_workspace * @var{work}) +After a regularized system has been solved with a general rectangular matrix @math{L}, +specified by (@var{LQR},@var{Ltau}), this function backtransforms the standard form solution @var{cs} +to recover the solution vector of the original problem, which is stored in @var{c}, +of length @math{p}. The original least squares matrix and observation vector are provided in +@var{X} and @var{y} respectively. @var{M} is the matrix computed by +@code{gsl_multifit_linear_stdform2}. For weighted fits, the weight vector +@var{w} must also be supplied. +@end deftypefun + +@deftypefun int gsl_multifit_linear_applyW (const gsl_matrix * @var{X}, const gsl_vector * @var{w}, const gsl_vector * @var{y}, gsl_matrix * @var{WX}, gsl_vector * @var{Wy}) +For weighted least squares systems with @math{L = I}, this function may be used to +convert the system to standard form by applying the weight matrix @math{W =} diag(@var{w}) +to the least squares matrix @var{X} and observation vector @var{y}. On output, @var{WX} +is equal to @math{W^{1/2} X} and @var{Wy} is equal to @math{W^{1/2} y}. It is allowed +for @var{WX} = @var{X} and @var{Wy} = @var{y} for an in-place transform. +@end deftypefun + +@deftypefun int gsl_multifit_linear_lcurve (const gsl_vector * @var{y}, gsl_vector * @var{reg_param}, gsl_vector * @var{rho}, gsl_vector * @var{eta}, gsl_multifit_linear_workspace * @var{work}) +This function computes the L-curve for a least squares system +using the right hand side vector @var{y} and the SVD decomposition +of the least squares matrix @var{X}, which must be provided +to @code{gsl_multifit_linear_svd} prior to +calling this function. The output vectors @var{reg_param}, +@var{rho}, and @var{eta} must all be the same size, and will +contain the regularization parameters @math{\lambda_i}, residual norms +@math{||y - X c_i||}, and solution norms @math{|| L c_i ||} +which compose the L-curve, where @math{c_i} is the regularized +solution vector corresponding to @math{\lambda_i}. +The user may determine the number of points on the L-curve by +adjusting the size of these input arrays. The regularization +parameters @math{\lambda_i} are estimated from the singular values +of @var{X}, and chosen to represent the most relevant portion of +the L-curve. +@end deftypefun + +@deftypefun int gsl_multifit_linear_lcorner (const gsl_vector * @var{rho}, const gsl_vector * @var{eta}, size_t * @var{idx}) +This function attempts to locate the corner of the L-curve +@math{(||y - X c||, ||L c||)} defined by the @var{rho} and @var{eta} +input arrays respectively. The corner is defined as the point of maximum +curvature of the L-curve in log-log scale. The @var{rho} and @var{eta} +arrays can be outputs of @code{gsl_multifit_linear_lcurve}. The +algorithm used simply fits a circle to 3 consecutive points on the L-curve +and uses the circle's radius to determine the curvature at +the middle point. Therefore, the input array sizes must be +@math{\ge 3}. With more points provided for the L-curve, a better +estimate of the curvature can be obtained. The array index +corresponding to maximum curvature (ie: the corner) is returned +in @var{idx}. If the input arrays contain colinear points, +this function could fail and return @code{GSL_EINVAL}. +@end deftypefun + +@deftypefun int gsl_multifit_linear_lcorner2 (const gsl_vector * @var{reg_param}, const gsl_vector * @var{eta}, size_t * @var{idx}) +This function attempts to locate the corner of an alternate L-curve +@math{(\lambda^2, ||L c||^2)} studied by Rezghi and Hosseini, 2009. +This alternate L-curve can provide better estimates of the +regularization parameter for smooth solution vectors. The regularization +parameters @math{\lambda} and solution norms @math{||L c||} are provided +in the @var{reg_param} and @var{eta} input arrays respectively. The +corner is defined as the point of maximum curvature of this +alternate L-curve in linear scale. The @var{reg_param} and @var{eta} +arrays can be outputs of @code{gsl_multifit_linear_lcurve}. The +algorithm used simply fits a circle to 3 consecutive points on the L-curve +and uses the circle's radius to determine the curvature at +the middle point. Therefore, the input array sizes must be +@math{\ge 3}. With more points provided for the L-curve, a better +estimate of the curvature can be obtained. The array index +corresponding to maximum curvature (ie: the corner) is returned +in @var{idx}. If the input arrays contain colinear points, +this function could fail and return @code{GSL_EINVAL}. +@end deftypefun + +@deftypefun int gsl_multifit_linear_gcv_init(const gsl_vector * @var{y}, gsl_vector * @var{reg_param}, gsl_vector * @var{UTy}, double * @var{delta0}, gsl_multifit_linear_workspace * @var{work}) +This function performs some initialization in preparation for computing +the GCV curve and its minimum. The right hand side vector is provided +in @var{y}. On output, @var{reg_param} is set to a vector of regularization +parameters in decreasing order and may be of any size. The vector +@var{UTy} of size @math{p} is set to @math{U^T y}. The parameter +@var{delta0} is needed for subsequent steps of the GCV calculation. +@end deftypefun + +@deftypefun int gsl_multifit_linear_gcv_curve(const gsl_vector * @var{reg_param}, const gsl_vector * @var{UTy}, const double @var{delta0}, gsl_vector * @var{G}, gsl_multifit_linear_workspace * @var{work}) +This funtion calculates the GCV curve @math{G(\lambda)} and stores it in +@var{G} on output, which must be the same size as @var{reg_param}. The +inputs @var{reg_param}, @var{UTy} and @var{delta0} are computed in +@code{gsl_multifit_linear_gcv_init}. +@end deftypefun + +@deftypefun int gsl_multifit_linear_gcv_min(const gsl_vector * @var{reg_param}, const gsl_vector * @var{UTy}, const gsl_vector * @var{G}, const double @var{delta0}, double * @var{lambda}, gsl_multifit_linear_workspace * @var{work}) +This function computes the value of the regularization parameter +which minimizes the GCV curve @math{G(\lambda)} and stores it in +@var{lambda}. The input @var{G} is calculated by +@code{gsl_multifit_linear_gcv_curve} and the inputs +@var{reg_param}, @var{UTy} and @var{delta0} are computed by +@code{gsl_multifit_linear_gcv_init}. +@end deftypefun + +@deftypefun double gsl_multifit_linear_gcv_calc(const double @var{lambda}, const gsl_vector * @var{UTy}, const double @var{delta0}, gsl_multifit_linear_workspace * @var{work}) +This function returns the value of the GCV curve @math{G(\lambda)} corresponding +to the input @var{lambda}. +@end deftypefun + +@deftypefun int gsl_multifit_linear_gcv(const gsl_vector * @var{y}, gsl_vector * @var{reg_param}, gsl_vector * @var{G}, double * @var{lambda}, double * @var{G_lambda}, gsl_multifit_linear_workspace * @var{work}) +This function combines the steps @code{gcv_init}, @code{gcv_curve}, +and @code{gcv_min} defined above into a single function. The input +@var{y} is the right hand side vector. On output, @var{reg_param} and +@var{G}, which must be the same size, are set to vectors of +@math{\lambda} and @math{G(\lambda)} values respectively. The +output @var{lambda} is set to the optimal value of @math{\lambda} +which minimizes the GCV curve. The minimum value of the GCV curve is +returned in @var{G_lambda}. +@end deftypefun + +@deftypefun int gsl_multifit_linear_Lk (const size_t @var{p}, const size_t @var{k}, gsl_matrix * @var{L}) +This function computes the discrete approximation to the derivative operator @math{L_k} of +order @var{k} on a regular grid of @var{p} points and stores it in @var{L}. The dimensions of @var{L} are +@math{(p-k)}-by-@math{p}. +@end deftypefun + +@deftypefun int gsl_multifit_linear_Lsobolev (const size_t @var{p}, const size_t @var{kmax}, const gsl_vector * @var{alpha}, gsl_matrix * @var{L}, gsl_multifit_linear_workspace * @var{work}) +This function computes the regularization matrix @var{L} corresponding to the weighted Sobolov norm +@math{||L c||^2 = \sum_k \alpha_k^2 ||L_k c||^2} where @math{L_k} approximates the derivative +operator of order @math{k}. This regularization norm can be useful in applications where +it is necessary to smooth several derivatives of the solution. @var{p} is the number of +model parameters, @var{kmax} is the highest derivative to include in the summation above, and +@var{alpha} is the vector of weights of size @var{kmax} + 1, where @var{alpha}[k] = @math{\alpha_k} +is the weight assigned to the derivative of order @math{k}. The output matrix @var{L} is size +@var{p}-by-@var{p} and upper triangular. +@end deftypefun + +@deftypefun double gsl_multifit_linear_rcond (const gsl_multifit_linear_workspace * @var{work}) +This function returns the reciprocal condition number of the least squares matrix @math{X}, +defined as the ratio of the smallest and largest singular values, rcond = @math{\sigma_{min}/\sigma_{max}}. +The routine @code{gsl_multifit_linear_svd} must first be called to compute the SVD of @math{X}. +@end deftypefun + @node Robust linear regression @section Robust linear regression @cindex robust regression +@cindex regression, robust +@cindex least squares, robust Ordinary least squares (OLS) models are often heavily influenced by the presence of outliers. Outliers are data points which do not follow the general trend of the other observations, @@ -475,9 +939,10 @@ having very little or no effect on the fitted model. @deftypefun {gsl_multifit_robust_workspace *} gsl_multifit_robust_alloc (const gsl_multifit_robust_type * @var{T}, const size_t @var{n}, const size_t @var{p}) -@tpindex gsl_multifit_robust_workspace +@tindex gsl_multifit_robust_workspace This function allocates a workspace for fitting a model to @var{n} -observations using @var{p} parameters. The type @var{T} specifies the +observations using @var{p} parameters. The size of the workspace +is @math{O(np + p^2)}. The type @var{T} specifies the function @math{\psi} and can be selected from the following choices. @deffn {Robust type} gsl_multifit_robust_default This specifies the @code{gsl_multifit_robust_bisquare} type (see below) and is a good @@ -627,6 +1092,22 @@ the tuning constant decreases the downweight assigned to large residuals. @end deftypefun +@deftypefun int gsl_multifit_robust_maxiter (const size_t @var{maxiter}, gsl_multifit_robust_workspace * @var{w}) +This function sets the maximum number of iterations in the iteratively +reweighted least squares algorithm to @var{maxiter}. By default, +this value is set to 100 by @code{gsl_multifit_robust_alloc}. +@end deftypefun + +@deftypefun int gsl_multifit_robust_weights (const gsl_vector * @var{r}, gsl_vector * @var{wts}, gsl_multifit_robust_workspace * @var{w}) +This function assigns weights to the vector @var{wts} using the residual vector @var{r} and +previously specified weighting function. The output weights are given by @math{wts_i = w(r_i / (t \sigma))}, +where the weighting functions @math{w} are detailed in @code{gsl_multifit_robust_alloc}. @math{\sigma} +is an estimate of the residual standard deviation based on the Median-Absolute-Deviation and @math{t} +is the tuning constant. This +function is useful if the user wishes to implement their own robust regression rather than using +the supplied @code{gsl_multifit_robust} routine below. +@end deftypefun + @deftypefun int gsl_multifit_robust (const gsl_matrix * @var{X}, const gsl_vector * @var{y}, gsl_vector * @var{c}, gsl_matrix * @var{cov}, gsl_multifit_robust_workspace * @var{w}) This function computes the best-fit parameters @var{c} of the model @math{y = X c} for the observations @var{y} and the matrix of @@ -639,6 +1120,12 @@ other statistics such as @math{R^2}, and so these are computed internally and are available by calling the function @code{gsl_multifit_robust_statistics}. + +If the coefficients do not converge within the maximum iteration +limit, the function returns @code{GSL_EMAXITER}. In this case, +the current estimates of the coefficients and covariance matrix +are returned in @var{c} and @var{cov} and the internal fit statistics +are computed with these estimates. @end deftypefun @deftypefun int gsl_multifit_robust_est (const gsl_vector * @var{x}, const gsl_vector * @var{c}, const gsl_matrix * @var{cov}, double * @var{y}, double * @var{y_err}) @@ -649,6 +1136,15 @@ at the point @var{x}. @end deftypefun +@deftypefun int gsl_multifit_robust_residuals (const gsl_matrix * @var{X}, const gsl_vector * @var{y}, const gsl_vector * @var{c}, gsl_vector * @var{r}, gsl_multifit_robust_workspace * @var{w}) +This function computes the vector of studentized residuals +@math{r_i = {y_i - (X c)_i \over \sigma \sqrt{1 - h_i}}} for +the observations @var{y}, coefficients @var{c} and matrix of predictor +variables @var{X}. The routine @code{gsl_multifit_robust} must +first be called to compute the statisical leverages @math{h_i} of +the matrix @var{X} and residual standard deviation estimate @math{\sigma}. +@end deftypefun + @deftypefun gsl_multifit_robust_stats gsl_multifit_robust_statistics (const gsl_multifit_robust_workspace * @var{w}) This function returns a structure containing relevant statistics from a robust regression. The function @code{gsl_multifit_robust} must be called first to perform the regression and calculate these statistics. @@ -681,6 +1177,437 @@ @end itemize @end deftypefun +@node Large Dense Linear Systems +@section Large dense linear systems +@cindex large dense linear least squares +@cindex linear least squares, large + +This module is concerned with solving large dense least squares systems +@math{X c = y} where the @math{n}-by-@math{p} matrix +@math{X} has @math{n >> p} (ie: many more rows than columns). +This type of matrix is called a ``tall skinny'' matrix, and for +some applications, it may not be possible to fit the +entire matrix in memory at once to use the standard SVD approach. +Therefore, the algorithms in this module are designed to allow +the user to construct smaller blocks of the matrix @math{X} and +accumulate those blocks into the larger system one at a time. The +algorithms in this module never need to store the entire matrix +@math{X} in memory. The large linear least squares routines +support data weights and Tikhonov regularization, and are +designed to minimize the residual +@tex +\beforedisplay +$$ +\chi^2 = || y - Xc ||_W^2 + \lambda^2 || L c ||^2 +$$ +\afterdisplay +@end tex +@ifinfo +@example +\chi^2 = || y - Xc ||_W^2 + \lambda^2 || L c ||^2 +@end example +@end ifinfo +where @math{y} is the @math{n}-by-@math{1} observation vector, +@math{X} is the @math{n}-by-@math{p} design matrix, @math{c} is +the @math{p}-by-@math{1} solution vector, +@math{W =} diag@math{(w_1,...,w_n)} is the data weighting matrix, +@math{L} is an @math{m}-by-@math{p} regularization matrix, +@math{\lambda} is a regularization parameter, +and @math{||r||_W^2 = r^T W r}. In the discussion which follows, +we will assume that the system has been converted into Tikhonov +standard form, +@tex +\beforedisplay +$$ +\chi^2 = || \tilde{y} - \tilde{X} \tilde{c} ||^2 + \lambda^2 || \tilde{c} ||^2 +$$ +\afterdisplay +@end tex +@ifinfo +@example +\chi^2 = || y~ - X~ c~ ||^2 + \lambda^2 || c~ ||^2 +@end example +@end ifinfo +and we will drop the tilde characters from the various parameters. +For a discussion of the transformation to standard form +@pxref{Regularized regression}. + +The basic idea is to partition the matrix @math{X} and observation +vector @math{y} as +@tex +\beforedisplay +$$ +\left( +\matrix{ +X_1 \cr +X_2 \cr +X_3 \cr +\vdots \cr +X_k \cr +} +\right) +c = +\left( +\matrix{ +y_1 \cr +y_2 \cr +y_3 \cr +\vdots \cr +y_k \cr +} +\right) +$$ +\afterdisplay +@end tex +@ifinfo +@example +[ X_1 ] c = [ y_1 ] +[ X_2 ] [ y_2 ] +[ X_3 ] [ y_3 ] +[ ... ] [ ... ] +[ X_k ] [ y_k ] +@end example +@end ifinfo +into @math{k} blocks, where each block (@math{X_i,y_i}) may have +any number of rows, but each @math{X_i} has @math{p} columns. +The sections below describe the methods available for solving +this partitioned system. The functions are declared in +the header file @file{gsl_multilarge.h}. + +@menu +* Large Dense Linear Systems Normal Equations:: +* Large Dense Linear Systems TSQR:: +* Large Dense Linear Systems Solution Steps:: +* Large Dense Linear Systems Routines:: +@end menu + +@node Large Dense Linear Systems Normal Equations +@subsection Normal Equations Approach +@cindex large linear least squares, normal equations + +The normal equations approach to the large linear least squares +problem described above is popular due to its speed and simplicity. +Since the normal equations solution to the problem is given by +@tex +\beforedisplay +$$ +c = \left( X^T X + \lambda^2 I \right)^{-1} X^T y +$$ +\afterdisplay +@end tex +@ifinfo +@example +c = ( X^T X + \lambda^2 I )^-1 X^T y +@end example +@end ifinfo +only the @math{p}-by-@math{p} matrix @math{X^T X} and +@math{p}-by-1 vector @math{X^T y} need to be stored. Using +the partition scheme described above, these are given by +@tex +\beforedisplay +$$ +\eqalign{ +X^T X &= \sum_i X_i^T X_i \cr +X^T y &= \sum_i X_i^T y_i +} +$$ +\afterdisplay +@end tex +@ifinfo +@example +X^T X = \sum_i X_i^T X_i +X^T y = \sum_i X_i^T y_i +@end example +@end ifinfo +Since the matrix @math{X^T X} is symmetric, only half of it +needs to be calculated. Once all of the blocks (@math{X_i,y_i}) +have been accumulated into the final @math{X^T X} and @math{X^T y}, +the system can be solved with a Cholesky factorization of the +@math{X^T X} matrix. If the Cholesky factorization fails (occasionally +due to numerical rounding errors), a QR decomposition is then used. +In both cases, the @math{X^T X} matrix is first transformed via +a diagonal scaling transformation to attempt to reduce its condition +number as much as possible to recover a more accurate solution vector. +The normal equations approach is the fastest method for solving the +large least squares problem, and is accurate for well-conditioned +matrices @math{X}. However, for ill-conditioned matrices, as is often +the case for large systems, this method can suffer from numerical +instabilities (see Trefethen and Bau, 1997). The number of operations +for this method is @math{O(np^2 + {1 \over 3}p^3)}. + +@node Large Dense Linear Systems TSQR +@subsection Tall Skinny QR (TSQR) Approach +@cindex large linear least squares, TSQR + +An algorithm which has better numerical stability for ill-conditioned +problems is known as the Tall Skinny QR (TSQR) method. This method +is based on computing the thin QR decomposition of the least squares +matrix @math{X = Q R}, where @math{Q} is an @math{n}-by-@math{p} matrix +with orthogonal columns, and @math{R} is a @math{p}-by-@math{p} +upper triangular matrix. Once these factors are calculated, the +residual becomes +@tex +\beforedisplay +$$ +\chi^2 = || Q^T y - R c ||^2 + \lambda^2 || c ||^2 +$$ +\afterdisplay +@end tex +@ifinfo +@example +\chi^2 = || Q^T y - R c ||^2 + \lambda^2 || c ||^2 +@end example +@end ifinfo +which can be written as the matrix equation +@tex +\beforedisplay +$$ +\left( +\matrix{ +R \cr +\lambda I +} \right) c = +\left( +\matrix{ +Q^T y \cr +0 +} \right) +$$ +\afterdisplay +@end tex +@ifinfo +@example +[ R ; \lambda I ] c = [ Q^T b ; 0 ] +@end example +@end ifinfo +The matrix on the left hand side is now a much +smaller @math{2p}-by-@math{p} matrix which can +be solved with a standard SVD approach. The +@math{Q} matrix is just as large as the original +matrix @math{X}, however it does not need to be +explicitly constructed. The TSQR algorithm +computes only the @math{p}-by-@math{p} matrix +@math{R} and the @math{p}-by-1 vector @math{Q^T y}, +and updates these quantities as new blocks +are added to the system. Each time a new block of rows +(@math{X_i,y_i}) is added, the algorithm performs a QR decomposition +of the matrix +@tex +\beforedisplay +$$ +\left( +\matrix{ +R_{i-1} \cr +X_i +} \right) +$$ +\afterdisplay +@end tex +@ifinfo +@example +[ R_(i-1) ; X_i ] +@end example +@end ifinfo +where @math{R_{i-1}} is the upper triangular +@math{R} factor for the matrix +@tex +\beforedisplay +$$ +\left( +\matrix{ +X_1 \cr +\vdots \cr +X_{i-1} +} \right) +$$ +\afterdisplay +@end tex +@ifinfo +@example +[ X_1 ; ... ; X_(i-1) ] +@end example +@end ifinfo +This QR decomposition is done efficiently taking into account +the sparse structure of @math{R_{i-1}}. See Demmel et al, 2008 for +more details on how this is accomplished. The number +of operations for this method is @math{O(2np^2 - {2 \over 3}p^3)}. + +@node Large Dense Linear Systems Solution Steps +@subsection Large Dense Linear Systems Solution Steps +@cindex large linear least squares, steps +The typical steps required to solve large regularized linear least +squares problems are as follows: + +@enumerate + +@item Choose the regularization matrix @math{L}. + +@item Construct a block of rows of the least squares matrix, right +hand side vector, and weight vector (@math{X_i}, @math{y_i}, @math{w_i}). + +@item Transform the block to standard form (@math{\tilde{X_i}},@math{\tilde{y_i}}). This +step can be skipped if @math{L = I} and @math{W = I}. + +@item Accumulate the standard form block (@math{\tilde{X_i}},@math{\tilde{y_i}}) into +the system. + +@item Repeat steps 2-4 until the entire matrix and right hand side vector have +been accumulated. + +@item Determine an appropriate regularization parameter @math{\lambda} (using for example +L-curve analysis). + +@item Solve the standard form system using the chosen @math{\lambda}. + +@item Backtransform the standard form solution @math{\tilde{c}} to recover the +original solution vector @math{c}. + +@end enumerate + +@node Large Dense Linear Systems Routines +@subsection Large Dense Linear Least Squares Routines +@cindex large linear least squares, routines + +@deftypefun {gsl_multilarge_linear_workspace *} gsl_multilarge_linear_alloc (const gsl_multilarge_linear_type * @var{T}, const size_t @var{p}) +This function allocates a workspace for solving large linear least squares +systems. The least squares matrix @math{X} has @var{p} columns, +but may have any number of rows. The parameter @var{T} specifies +the method to be used for solving the large least squares system +and may be selected from the following choices + +@deffn {Multilarge type} gsl_multilarge_linear_normal +This specifies the normal equations approach for +solving the least squares system. This method is suitable +in cases where performance is critical and it is known that the +least squares matrix @math{X} is well conditioned. The size +of this workspace is @math{O(p^2)}. +@end deffn + +@deffn {Multilarge type} gsl_multilarge_linear_tsqr +This specifies the sequential Tall Skinny QR (TSQR) approach for +solving the least squares system. This method is a good +general purpose choice for large systems, but requires about +twice as many operations as the normal equations method for +@math{n >> p}. The size of this workspace is @math{O(p^2)}. +@end deffn +@end deftypefun + +@deftypefun void gsl_multilarge_linear_free (gsl_multilarge_linear_workspace * @var{w}) +This function frees the memory associated with the +workspace @var{w}. +@end deftypefun + +@deftypefun {const char *} gsl_multilarge_linear_name (gsl_multilarge_linear_workspace * @var{w}) +This function returns a string pointer to the name +of the multilarge solver. +@end deftypefun + +@deftypefun int gsl_multilarge_linear_reset (gsl_multilarge_linear_workspace * @var{w}) +This function resets the workspace @var{w} so +it can begin to accumulate a new least squares +system. +@end deftypefun + +@deftypefun int gsl_multilarge_linear_stdform1 (const gsl_vector * @var{L}, const gsl_matrix * @var{X}, const gsl_vector * @var{y}, gsl_matrix * @var{Xs}, gsl_vector * @var{ys}, gsl_multilarge_linear_workspace * @var{work}) +@deftypefunx int gsl_multilarge_linear_wstdform1 (const gsl_vector * @var{L}, const gsl_matrix * @var{X}, const gsl_vector * @var{w}, const gsl_vector * @var{y}, gsl_matrix * @var{Xs}, gsl_vector * @var{ys}, gsl_multilarge_linear_workspace * @var{work}) +These functions define a regularization matrix +@math{L =} diag@math{(l_0,l_1,...,l_{p-1})}. +The diagonal matrix element @math{l_i} is provided by the +@math{i}th element of the input vector @var{L}. +The block (@var{X},@var{y}) is converted to standard form and +the parameters (@math{\tilde{X}},@math{\tilde{y}}) are stored in @var{Xs} +and @var{ys} on output. @var{Xs} and @var{ys} have the same dimensions as +@var{X} and @var{y}. Optional data weights may be supplied in the +vector @var{w}. In order to apply this transformation, +@math{L^{-1}} must exist and so none of the @math{l_i} +may be zero. After the standard form system has been solved, +use @code{gsl_multilarge_linear_genform1} to recover the original solution vector. +It is allowed to have @var{X} = @var{Xs} and @var{y} = @var{ys} for an in-place transform. +@end deftypefun + +@deftypefun int gsl_multilarge_linear_L_decomp (gsl_matrix * @var{L}, gsl_vector * @var{tau}) +This function calculates the QR decomposition of the @math{m}-by-@math{p} regularization matrix +@var{L}. @var{L} must have @math{m \ge p}. On output, +the Householder scalars are stored in the vector @var{tau} of size @math{p}. +These outputs will be used by @code{gsl_multilarge_linear_wstdform2} to complete the +transformation to standard form. +@end deftypefun + +@deftypefun int gsl_multilarge_linear_stdform2 (const gsl_matrix * @var{LQR}, const gsl_vector * @var{Ltau}, const gsl_matrix * @var{X}, const gsl_vector * @var{y}, gsl_matrix * @var{Xs}, gsl_vector * @var{ys}, gsl_multilarge_linear_workspace * @var{work}) +@deftypefunx int gsl_multilarge_linear_wstdform2 (const gsl_matrix * @var{LQR}, const gsl_vector * @var{Ltau}, const gsl_matrix * @var{X}, const gsl_vector * @var{w}, const gsl_vector * @var{y}, gsl_matrix * @var{Xs}, gsl_vector * @var{ys}, gsl_multilarge_linear_workspace * @var{work}) +These functions convert a block of rows (@var{X},@var{y},@var{w}) to standard +form (@math{\tilde{X}},@math{\tilde{y}}) which are stored in @var{Xs} and @var{ys} +respectively. @var{X}, @var{y}, and @var{w} must all have the same number of rows. +The @math{m}-by-@math{p} regularization matrix @var{L} is specified by the inputs +@var{LQR} and @var{Ltau}, which are outputs from @code{gsl_multilarge_linear_L_decomp}. +@var{Xs} and @var{ys} have the same dimensions as @var{X} and @var{y}. After the +standard form system has been solved, use @code{gsl_multilarge_linear_genform2} to +recover the original solution vector. Optional data weights may be supplied in the +vector @var{w}, where @math{W =} diag(w). +@end deftypefun + +@deftypefun int gsl_multilarge_linear_accumulate (gsl_matrix * @var{X}, gsl_vector * @var{y}, gsl_multilarge_linear_workspace * @var{w}) +This function accumulates the standard form block (@math{X,y}) into the +current least squares system. @var{X} and @var{y} have the same number +of rows, which can be arbitrary. @var{X} must have @math{p} columns. +For the TSQR method, @var{X} and @var{y} are destroyed on output. +For the normal equations method, they are both unchanged. +@end deftypefun + +@deftypefun int gsl_multilarge_linear_solve (const double @var{lambda}, gsl_vector * @var{c}, double * @var{rnorm}, double * @var{snorm}, gsl_multilarge_linear_workspace * @var{w}) +After all blocks (@math{X_i,y_i}) have been accumulated into +the large least squares system, this function will compute +the solution vector which is stored in @var{c} on output. +The regularization parameter @math{\lambda} is provided in +@var{lambda}. On output, @var{rnorm} contains the residual norm +@math{||y - X c||_W} and @var{snorm} contains the solution +norm @math{||L c||}. +@end deftypefun + +@deftypefun int gsl_multilarge_linear_genform1 (const gsl_vector * @var{L}, const gsl_vector * @var{cs}, gsl_vector * @var{c}, gsl_multilarge_linear_workspace * @var{work}) +After a regularized system has been solved with +@math{L =} diag@math{(\l_0,\l_1,...,\l_{p-1})}, +this function backtransforms the standard form solution vector @var{cs} +to recover the solution vector of the original problem @var{c}. The +diagonal matrix elements @math{l_i} are provided in +the vector @var{L}. It is allowed to have @var{c} = @var{cs} for an +in-place transform. +@end deftypefun + +@deftypefun int gsl_multilarge_linear_genform2 (const gsl_matrix * @var{LQR}, const gsl_vector * @var{Ltau}, const gsl_vector * @var{cs}, gsl_vector * @var{c}, gsl_multilarge_linear_workspace * @var{work}) +After a regularized system has been solved with a regularization matrix @math{L}, +specified by (@var{LQR},@var{Ltau}), this function backtransforms the standard form solution @var{cs} +to recover the solution vector of the original problem, which is stored in @var{c}, +of length @math{p}. +@end deftypefun + +@deftypefun int gsl_multilarge_linear_lcurve (gsl_vector * @var{reg_param}, gsl_vector * @var{rho}, gsl_vector * @var{eta}, gsl_multilarge_linear_workspace * @var{work}) +This function computes the L-curve for a large least squares system +after it has been fully accumulated into the workspace @var{work}. +The output vectors @var{reg_param}, @var{rho}, and @var{eta} must all +be the same size, and will contain the regularization parameters +@math{\lambda_i}, residual norms @math{||y - X c_i||}, and solution +norms @math{|| L c_i ||} which compose the L-curve, where @math{c_i} +is the regularized solution vector corresponding to @math{\lambda_i}. +The user may determine the number of points on the L-curve by +adjusting the size of these input arrays. For the TSQR method, +the regularization parameters @math{\lambda_i} are estimated from the +singular values of the triangular @math{R} factor. For the normal +equations method, they are estimated from the eigenvalues of the +@math{X^T X} matrix. +@end deftypefun + +@deftypefun int gsl_multilarge_linear_rcond (double * @var{rcond}, gsl_multilarge_linear_workspace * @var{work}) +This function computes the reciprocal condition number, stored in +@var{rcond}, of the least squares matrix after it has been accumulated +into the workspace @var{work}. For the TSQR algorithm, this is +accomplished by calculating the SVD of the @math{R} factor, which +has the same singular values as the matrix @math{X}. For the normal +equations method, this is done by computing the eigenvalues of +@math{X^T X}, which could be inaccurate for ill-conditioned matrices +@math{X}. +@end deftypefun + @node Troubleshooting @section Troubleshooting @cindex least squares troubleshooting @@ -709,6 +1636,20 @@ @node Fitting Examples @section Examples +The example programs in this section demonstrate the various linear regression methods. + +@menu +* Fitting linear regression example:: +* Fitting multi-parameter linear regression example:: +* Fitting regularized linear regression example 1:: +* Fitting regularized linear regression example 2:: +* Fitting robust linear regression example:: +* Fitting large linear systems example:: +@end menu + +@node Fitting linear regression example +@subsection Simple Linear Regression Example + The following program computes a least squares straight-line fit to a simple dataset, and outputs the best-fit line and its associated one standard-deviation error bars. @@ -743,7 +1684,10 @@ @center @image{fit-wlinear,3.0in} @end iftex -The next program performs a quadratic fit @math{y = c_0 + c_1 x + c_2 +@node Fitting multi-parameter linear regression example +@subsection Multi-parameter Linear Regression Example + +The following program performs a quadratic fit @math{y = c_0 + c_1 x + c_2 x^2} to a weighted dataset using the generalised linear fitting function @code{gsl_multifit_wlinear}. The model matrix @math{X} for a quadratic fit is given by, @@ -835,6 +1779,149 @@ @center @image{fit-wlinear2,3.0in} @end iftex +@node Fitting regularized linear regression example 1 +@subsection Regularized Linear Regression Example 1 + +The next program demonstrates the difference between ordinary and +regularized least squares when the design matrix is near-singular. +In this program, we generate two random normally distributed variables +@math{u} and @math{v}, with @math{v = u + noise} so that @math{u} +and @math{v} are nearly colinear. We then set a third dependent +variable @math{y = u + v + noise} and solve for the coefficients +@math{c_1,c_2} of the model @math{Y(c_1,c_2) = c_1 u + c_2 v}. +Since @math{u \approx v}, the design matrix @math{X} is nearly +singular, leading to unstable ordinary least squares solutions. + +@noindent +Here is the program output: +@example +matrix condition number = 1.025113e+04 +=== Unregularized fit === +best fit: y = -43.6588 u + 45.6636 v +residual norm = 31.6248 +solution norm = 63.1764 +chisq/dof = 1.00213 +=== Regularized fit (L-curve) === +optimal lambda: 4.51103 +best fit: y = 1.00113 u + 1.0032 v +residual norm = 31.6547 +solution norm = 1.41728 +chisq/dof = 1.04499 +=== Regularized fit (GCV) === +optimal lambda: 0.0232029 +best fit: y = -19.8367 u + 21.8417 v +residual norm = 31.6332 +solution norm = 29.5051 +chisq/dof = 1.00314 +@end example + +@noindent +We see that the ordinary least squares solution is completely wrong, +while the L-curve regularized method with the optimal +@math{\lambda = 4.51103} finds the correct solution +@math{c_1 \approx c_2 \approx 1}. The GCV regularized method finds +a regularization parameter @math{\lambda = 0.0232029} which is too +small to give an accurate solution, although it performs better than OLS. +The L-curve and its computed corner, as well as the GCV curve and its +minimum are plotted below. + +@iftex +@sp 1 +@center @image{regularized,5.0in} +@end iftex + +@noindent The program is given below. +@example +@verbatiminclude examples/fitreg.c +@end example + +@node Fitting regularized linear regression example 2 +@subsection Regularized Linear Regression Example 2 + +The following example program minimizes the cost function +@tex +\beforedisplay +$$ +||y - X c||^2 + \lambda^2 ||x||^2 +$$ +\afterdisplay +@end tex +@ifinfo + +@example +||y - X c||^2 + \lambda^2 ||x||^2 +@end example + +@end ifinfo +@noindent +where @math{X} is the @math{10}-by-@math{8} Hilbert matrix whose +entries are given by +@tex +\beforedisplay +$$ +X_{ij} = {1 \over i + j - 1} +$$ +\afterdisplay +@end tex +@ifinfo + +@example +X_@{ij@} = 1 / (i + j - 1) +@end example + +@end ifinfo +@noindent +and the right hand side vector is given by +@math{y = [1,-1,1,-1,1,-1,1,-1,1,-1]^T}. Solutions +are computed for @math{\lambda = 0} (unregularized) as +well as for optimal parameters @math{\lambda} chosen by +analyzing the L-curve and GCV curve. + +@noindent +Here is the program output: +@example +matrix condition number = 3.565872e+09 +=== Unregularized fit === +residual norm = 2.15376 +solution norm = 2.92217e+09 +chisq/dof = 2.31934 +=== Regularized fit (L-curve) === +optimal lambda: 7.11407e-07 +residual norm = 2.60386 +solution norm = 424507 +chisq/dof = 3.43565 +=== Regularized fit (GCV) === +optimal lambda: 1.72278 +residual norm = 3.1375 +solution norm = 0.139357 +chisq/dof = 4.95076 +@end example + +@noindent +Here we see the unregularized solution results in a large solution +norm due to the ill-conditioned matrix. The L-curve solution finds +a small value of @math{\lambda = 7.11e-7} which still results in +a badly conditioned system and a large solution norm. The GCV method +finds a parameter @math{\lambda = 1.72} which results in a well-conditioned +system and small solution norm. + +@noindent +The L-curve and its computed corner, as well as the GCV curve and its +minimum are plotted below. + +@iftex +@sp 1 +@center @image{regularized2,5.0in} +@end iftex + +@noindent The program is given below. +@example +@verbatiminclude examples/fitreg2.c +@end example + +@node Fitting robust linear regression example +@subsection Robust Linear Regression Example + The next program demonstrates the advantage of robust least squares on a dataset with outliers. The program generates linear @math{(x,y)} data pairs on the line @math{y = 1.45 x + 3.88}, adds some random @@ -853,6 +1940,49 @@ @center @image{robust,3.0in} @end iftex +@node Fitting large linear systems example +@subsection Large Dense Linear Regression Example + +The following program demostrates the large dense linear least squares +solvers. This example is adapted from Trefethen and Bau, +and fits the function @math{f(t) = \exp{(\sin^3{(10t)}})} on +the interval @math{[0,1]} with a degree 15 polynomial. The +program generates @math{n = 50000} equally spaced points +@math{t_i} on this interval, calculates the function value +and adds random noise to determine the observation value +@math{y_i}. The entries of the least squares matrix are +@math{X_{ij} = t_i^j}, representing a polynomial fit. The +matrix is highly ill-conditioned, with a condition number +of about @math{1.4 \cdot 10^{11}}. The program accumulates the +matrix into the least squares system in 5 blocks, each with +10000 rows. This way the full matrix @math{X} is never +stored in memory. We solve the system with both the +normal equations and TSQR methods. The results are shown +in the plot below. In the top left plot, we see the unregularized +normal equations solution has larger error than TSQR due to +the ill-conditioning of the matrix. In the bottom left plot, +we show the L-curve, which exhibits multiple corners. +In the top right panel, we plot a regularized solution using +@math{\lambda = 10^{-6}}. The TSQR and normal solutions now agree, +however they are unable to provide a good fit due to the damping. +This indicates that for some ill-conditioned +problems, regularizing the normal equations does not improve the +solution. This is further illustrated in the bottom right panel, +where we plot the L-curve calculated from the normal equations. +The curve agrees with the TSQR curve for larger damping parameters, +but for small @math{\lambda}, the normal equations approach cannot +provide accurate solution vectors leading to numerical +inaccuracies in the left portion of the curve. + +@iftex +@sp 1 +@center @image{multilarge,6.0in} +@end iftex + +@example +@verbatiminclude examples/largefit.c +@end example + @node Fitting References and Further Reading @section References and Further Reading @@ -880,6 +2010,19 @@ @center @uref{http://www.nist.gov/itl/div898/strd/index.html}. @noindent +More information on Tikhonov regularization can be found in + +@itemize @w{} +@item Hansen, P. C. (1998), Rank-Deficient and Discrete Ill-Posed Problems: +Numerical Aspects of Linear Inversion. SIAM Monogr. on Mathematical +Modeling and Computation, Society for Industrial and Applied Mathematics + +@item M. Rezghi and S. M. Hosseini (2009), A new variant of L-curve for +Tikhonov regularization, Journal of Computational and Applied Mathematics, +Volume 231, Issue 2, pages 914-924. +@end itemize + +@noindent The GSL implementation of robust linear regression closely follows the publications @itemize @w{} @@ -893,3 +2036,15 @@ reweighted least squares," The American Statistician, v. 42, pp. 152-154. @end itemize + +@noindent +More information about the normal equations and TSQR approach for solving +large linear least squares systems can be found in the publications + +@itemize @w{} +@item Trefethen, L. N. and Bau, D. (1997), "Numerical Linear Algebra", SIAM. + +@item Demmel, J., Grigori, L., Hoemmen, M. F., and Langou, J. +"Communication-optimal parallel and sequential QR and LU factorizations", +UCB Technical Report No. UCB/EECS-2008-89, 2008. +@end itemize diff -Nru gsl-doc-1.16/doc/gsl-ref.info gsl-doc-2.3/doc/gsl-ref.info --- gsl-doc-1.16/doc/gsl-ref.info 2013-07-19 15:17:48.000000000 +0000 +++ gsl-doc-2.3/doc/gsl-ref.info 2016-12-09 00:08:10.000000000 +0000 @@ -2,13 +2,20 @@ gsl-ref.texi. Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The GSL Team. +2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 +The GSL Team. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or -any later version published by the Free Software Foundation; with no -Invariant Sections and no cover texts. A copy of the license is -included in the section entitled "GNU Free Documentation License". +any later version published by the Free Software Foundation; with the +Invariant Sections being "GNU General Public License" and "Free Software +Needs Free Documentation", the Front-Cover text being "A GNU Manual", +and with the Back-Cover Text being (a) (see below). A copy of the +license is included in the section entitled "GNU Free Documentation +License". + + (a) The Back-Cover Text is: "You have the freedom to copy and modify +this GNU Manual." INFO-DIR-SECTION Software libraries START-INFO-DIR-ENTRY * gsl-ref: (gsl-ref). GNU Scientific Library - Reference @@ -16,610 +23,680 @@  Indirect: -gsl-ref.info-1: 707 -gsl-ref.info-2: 301602 -gsl-ref.info-3: 601000 -gsl-ref.info-4: 902430 -gsl-ref.info-5: 1443412 +gsl-ref.info-1: 973 +gsl-ref.info-2: 302546 +gsl-ref.info-3: 601121 +gsl-ref.info-4: 902718 +gsl-ref.info-5: 1201856 +gsl-ref.info-6: 1705030  Tag Table: (Indirect) -Node: Top707 -Node: Introduction3656 -Node: Routines available in GSL4376 -Node: GSL is Free Software5989 -Node: Obtaining GSL8381 -Node: No Warranty9409 -Node: Reporting Bugs9915 -Ref: Reporting Bugs-Footnote-110867 -Node: Further Information10917 -Node: Conventions used in this manual11931 -Node: Using the library12695 -Node: An Example Program13418 -Ref: An Example Program-Footnote-114161 -Node: Compiling and Linking14268 -Node: Linking programs with the library15341 -Ref: Linking programs with the library-Footnote-116744 -Ref: Linking programs with the library-Footnote-216781 -Node: Linking with an alternative BLAS library16834 -Node: Shared Libraries17917 -Ref: Shared Libraries-Footnote-119392 -Node: ANSI C Compliance19440 -Node: Inline functions20533 -Node: Long double22071 -Node: Portability functions23659 -Node: Alternative optimized functions25057 -Node: Support for different numeric types26515 -Node: Compatibility with C++29579 -Node: Aliasing of arrays30151 -Node: Thread-safety30902 -Node: Deprecated Functions31990 -Node: Code Reuse32615 -Node: Error Handling33260 -Node: Error Reporting34060 -Node: Error Codes35952 -Node: Error Handlers37809 -Node: Using GSL error reporting in your own functions41449 -Node: Error Reporting Examples43409 -Node: Mathematical Functions44621 -Node: Mathematical Constants45414 -Node: Infinities and Not-a-number46544 -Ref: Infinities and Not-a-number-Footnote-147654 -Node: Elementary Functions48064 -Node: Small integer powers50521 -Node: Testing the Sign of Numbers52170 -Node: Testing for Odd and Even Numbers52603 -Node: Maximum and Minimum functions53162 -Node: Approximate Comparison of Floating Point Numbers55443 -Node: Complex Numbers56803 -Ref: Complex Numbers-Footnote-158148 -Node: Representation of complex numbers58212 -Node: Properties of complex numbers60152 -Node: Complex arithmetic operators61158 -Node: Elementary Complex Functions63904 -Node: Complex Trigonometric Functions65728 -Node: Inverse Complex Trigonometric Functions66949 -Node: Complex Hyperbolic Functions69562 -Node: Inverse Complex Hyperbolic Functions70858 -Node: Complex Number References and Further Reading72846 -Node: Polynomials74242 -Node: Polynomial Evaluation75046 -Node: Divided Difference Representation of Polynomials76457 -Node: Quadratic Equations80319 -Node: Cubic Equations82256 -Node: General Polynomial Equations83839 -Node: Roots of Polynomials Examples86196 -Node: Roots of Polynomials References and Further Reading87585 -Node: Special Functions88631 -Node: Special Function Usage90879 -Node: The gsl_sf_result struct92063 -Node: Special Function Modes93327 -Node: Airy Functions and Derivatives94261 -Node: Airy Functions94986 -Node: Derivatives of Airy Functions96346 -Node: Zeros of Airy Functions97858 -Node: Zeros of Derivatives of Airy Functions98577 -Node: Bessel Functions99336 -Node: Regular Cylindrical Bessel Functions100554 -Node: Irregular Cylindrical Bessel Functions101878 -Node: Regular Modified Cylindrical Bessel Functions103336 -Node: Irregular Modified Cylindrical Bessel Functions106164 -Node: Regular Spherical Bessel Functions109137 -Node: Irregular Spherical Bessel Functions111350 -Node: Regular Modified Spherical Bessel Functions113036 -Node: Irregular Modified Spherical Bessel Functions115037 -Node: Regular Bessel Function - Fractional Order117100 -Node: Irregular Bessel Functions - Fractional Order118098 -Node: Regular Modified Bessel Functions - Fractional Order118680 -Node: Irregular Modified Bessel Functions - Fractional Order119605 -Node: Zeros of Regular Bessel Functions120841 -Node: Clausen Functions121944 -Node: Coulomb Functions122548 -Node: Normalized Hydrogenic Bound States123007 -Node: Coulomb Wave Functions124120 -Node: Coulomb Wave Function Normalization Constant127532 -Node: Coupling Coefficients128285 -Node: 3-j Symbols129059 -Node: 6-j Symbols129663 -Node: 9-j Symbols130287 -Node: Dawson Function130993 -Node: Debye Functions131560 -Node: Dilogarithm133334 -Node: Real Argument133656 -Node: Complex Argument134350 -Node: Elementary Operations134820 -Node: Elliptic Integrals135644 -Node: Definition of Legendre Forms136239 -Node: Definition of Carlson Forms137059 -Node: Legendre Form of Complete Elliptic Integrals137756 -Node: Legendre Form of Incomplete Elliptic Integrals139309 -Node: Carlson Forms141496 -Node: Elliptic Functions (Jacobi)143043 -Node: Error Functions143624 -Node: Error Function144100 -Node: Complementary Error Function144473 -Node: Log Complementary Error Function144933 -Node: Probability functions145385 -Node: Exponential Functions146638 -Node: Exponential Function147033 -Node: Relative Exponential Functions148255 -Node: Exponentiation With Error Estimate149927 -Node: Exponential Integrals151136 -Node: Exponential Integral151692 -Node: Ei(x)152613 -Node: Hyperbolic Integrals153061 -Node: Ei_3(x)153716 -Node: Trigonometric Integrals154108 -Node: Arctangent Integral154707 -Node: Fermi-Dirac Function155107 -Node: Complete Fermi-Dirac Integrals155481 -Node: Incomplete Fermi-Dirac Integrals158046 -Node: Gamma and Beta Functions158689 -Node: Gamma Functions159324 -Node: Factorials162432 -Node: Pochhammer Symbol164985 -Node: Incomplete Gamma Functions166486 -Node: Beta Functions167735 -Node: Incomplete Beta Function168487 -Node: Gegenbauer Functions169197 -Node: Hypergeometric Functions170847 -Node: Laguerre Functions175111 -Node: Lambert W Functions176674 -Node: Legendre Functions and Spherical Harmonics177714 -Node: Legendre Polynomials178326 -Node: Associated Legendre Polynomials and Spherical Harmonics180382 -Node: Conical Functions183211 -Node: Radial Functions for Hyperbolic Space185334 -Node: Logarithm and Related Functions187511 -Node: Mathieu Functions189135 -Node: Mathieu Function Workspace190495 -Node: Mathieu Function Characteristic Values191308 -Node: Angular Mathieu Functions192380 -Node: Radial Mathieu Functions193416 -Node: Power Function194653 -Node: Psi (Digamma) Function195581 -Node: Digamma Function196134 -Node: Trigamma Function196964 -Node: Polygamma Function197541 -Node: Synchrotron Functions197925 -Node: Transport Functions198688 -Node: Trigonometric Functions199835 -Node: Circular Trigonometric Functions200481 -Node: Trigonometric Functions for Complex Arguments201490 -Node: Hyperbolic Trigonometric Functions202526 -Node: Conversion Functions203129 -Node: Restriction Functions203912 -Node: Trigonometric Functions With Error Estimates204843 -Node: Zeta Functions205753 -Node: Riemann Zeta Function206211 -Node: Riemann Zeta Function Minus One206890 -Node: Hurwitz Zeta Function207661 -Node: Eta Function208166 -Node: Special Functions Examples208725 -Node: Special Functions References and Further Reading210420 -Node: Vectors and Matrices211688 -Node: Data types212531 -Node: Blocks213734 -Node: Block allocation214667 -Node: Reading and writing blocks216071 -Node: Example programs for blocks218135 -Node: Vectors218762 -Node: Vector allocation220730 -Node: Accessing vector elements222267 -Ref: Accessing vector elements-Footnote-1225408 -Node: Initializing vector elements225647 -Node: Reading and writing vectors226341 -Node: Vector views228431 -Node: Copying vectors235897 -Node: Exchanging elements236757 -Node: Vector operations237315 -Node: Finding maximum and minimum elements of vectors239088 -Node: Vector properties240675 -Node: Example programs for vectors241649 -Node: Matrices243938 -Node: Matrix allocation246878 -Node: Accessing matrix elements248464 -Node: Initializing matrix elements250413 -Node: Reading and writing matrices251210 -Node: Matrix views253313 -Node: Creating row and column views260449 -Node: Copying matrices264926 -Node: Copying rows and columns265522 -Node: Exchanging rows and columns267199 -Node: Matrix operations268677 -Node: Finding maximum and minimum elements of matrices270647 -Node: Matrix properties272547 -Node: Example programs for matrices273650 -Node: Vector and Matrix References and Further Reading277721 -Node: Permutations278207 -Node: The Permutation struct279544 -Node: Permutation allocation280047 -Node: Accessing permutation elements281483 -Node: Permutation properties282326 -Node: Permutation functions283031 -Node: Applying Permutations284288 -Node: Reading and writing permutations286215 -Ref: Reading and writing permutations-Footnote-1288431 -Node: Permutations in cyclic form288543 -Node: Permutation Examples291970 -Node: Permutation References and Further Reading294513 -Node: Combinations295187 -Node: The Combination struct296072 -Node: Combination allocation296623 -Node: Accessing combination elements298410 -Node: Combination properties299069 -Node: Combination functions299955 -Node: Reading and writing combinations301602 -Ref: Reading and writing combinations-Footnote-1303835 -Node: Combination Examples303947 -Node: Combination References and Further Reading305255 -Node: Multisets305658 -Node: The Multiset struct306584 -Node: Multiset allocation307105 -Node: Accessing multiset elements308800 -Node: Multiset properties309429 -Node: Multiset functions310242 -Node: Reading and writing multisets311152 -Ref: Reading and writing multisets-Footnote-1313303 -Node: Multiset Examples313415 -Node: Sorting315523 -Node: Sorting objects316522 -Node: Sorting vectors319435 -Node: Selecting the k smallest or largest elements322596 -Node: Computing the rank325937 -Node: Sorting Examples327138 -Node: Sorting References and Further Reading328782 -Node: BLAS Support329328 -Ref: BLAS Support-Footnote-1332714 -Node: GSL BLAS Interface332883 -Node: Level 1 GSL BLAS Interface333376 -Node: Level 2 GSL BLAS Interface340116 -Node: Level 3 GSL BLAS Interface349406 -Node: BLAS Examples360504 -Node: BLAS References and Further Reading361925 -Node: Linear Algebra363267 -Node: LU Decomposition364461 -Node: QR Decomposition369697 -Node: QR Decomposition with Column Pivoting376006 -Node: Singular Value Decomposition380470 -Node: Cholesky Decomposition384890 -Node: Tridiagonal Decomposition of Real Symmetric Matrices388132 -Node: Tridiagonal Decomposition of Hermitian Matrices389980 -Node: Hessenberg Decomposition of Real Matrices391932 -Node: Hessenberg-Triangular Decomposition of Real Matrices394344 -Node: Bidiagonalization395467 -Node: Householder Transformations397892 -Node: Householder solver for linear systems400244 -Node: Tridiagonal Systems401151 -Node: Balancing404024 -Node: Linear Algebra Examples404827 -Node: Linear Algebra References and Further Reading406816 -Node: Eigensystems408463 -Node: Real Symmetric Matrices409692 -Node: Complex Hermitian Matrices412206 -Node: Real Nonsymmetric Matrices414835 -Node: Real Generalized Symmetric-Definite Eigensystems420570 -Node: Complex Generalized Hermitian-Definite Eigensystems423449 -Node: Real Generalized Nonsymmetric Eigensystems426163 -Node: Sorting Eigenvalues and Eigenvectors432770 -Node: Eigenvalue and Eigenvector Examples436048 -Node: Eigenvalue and Eigenvector References441439 -Node: Fast Fourier Transforms442466 -Node: Mathematical Definitions443692 -Node: Overview of complex data FFTs446097 -Node: Radix-2 FFT routines for complex data449042 -Node: Mixed-radix FFT routines for complex data453261 -Node: Overview of real data FFTs462594 -Node: Radix-2 FFT routines for real data465029 -Node: Mixed-radix FFT routines for real data469453 -Node: FFT References and Further Reading480138 -Node: Numerical Integration483008 -Node: Numerical Integration Introduction484806 -Node: Integrands without weight functions487081 -Node: Integrands with weight functions487911 -Node: Integrands with singular weight functions488622 -Node: QNG non-adaptive Gauss-Kronrod integration489540 -Node: QAG adaptive integration490822 -Node: QAGS adaptive integration with singularities493611 -Node: QAGP adaptive integration with known singular points495411 -Node: QAGI adaptive integration on infinite intervals496725 -Node: QAWC adaptive integration for Cauchy principal values499005 -Node: QAWS adaptive integration for singular functions500175 -Node: QAWO adaptive integration for oscillatory functions503401 -Node: QAWF adaptive integration for Fourier integrals507189 -Node: CQUAD doubly-adaptive integration509813 -Node: Fixed order Gauss-Legendre integration513071 -Node: Numerical integration error codes515059 -Node: Numerical integration examples515815 -Node: Numerical integration References and Further Reading517861 -Node: Random Number Generation518852 -Node: General comments on random numbers520386 -Node: The Random Number Generator Interface522338 -Node: Random number generator initialization523696 -Node: Sampling from a random number generator526067 -Node: Auxiliary random number generator functions529311 -Node: Random number environment variables531631 -Node: Copying random number generator state534156 -Node: Reading and writing random number generator state535130 -Node: Random number generator algorithms536524 -Node: Unix random number generators546466 -Node: Other random number generators550180 -Node: Random Number Generator Performance558831 -Node: Random Number Generator Examples559952 -Node: Random Number References and Further Reading561508 -Node: Random Number Acknowledgements562803 -Node: Quasi-Random Sequences563289 -Node: Quasi-random number generator initialization564409 -Node: Sampling from a quasi-random number generator565424 -Node: Auxiliary quasi-random number generator functions566121 -Node: Saving and resorting quasi-random number generator state567067 -Node: Quasi-random number generator algorithms567875 -Node: Quasi-random number generator examples569013 -Node: Quasi-random number references569998 -Node: Random Number Distributions570524 -Node: Random Number Distribution Introduction573855 -Node: The Gaussian Distribution575650 -Node: The Gaussian Tail Distribution578310 -Node: The Bivariate Gaussian Distribution579974 -Node: The Exponential Distribution581288 -Node: The Laplace Distribution582427 -Node: The Exponential Power Distribution583519 -Node: The Cauchy Distribution584787 -Node: The Rayleigh Distribution586036 -Node: The Rayleigh Tail Distribution587208 -Node: The Landau Distribution588081 -Node: The Levy alpha-Stable Distributions589036 -Node: The Levy skew alpha-Stable Distribution590094 -Node: The Gamma Distribution591706 -Node: The Flat (Uniform) Distribution593361 -Node: The Lognormal Distribution594509 -Node: The Chi-squared Distribution595857 -Node: The F-distribution597262 -Node: The t-distribution598899 -Node: The Beta Distribution601000 -Node: The Logistic Distribution602159 -Node: The Pareto Distribution603288 -Node: Spherical Vector Distributions604458 -Node: The Weibull Distribution607294 -Node: The Type-1 Gumbel Distribution608488 -Node: The Type-2 Gumbel Distribution609724 -Node: The Dirichlet Distribution610955 -Node: General Discrete Distributions612623 -Node: The Poisson Distribution616491 -Node: The Bernoulli Distribution617498 -Node: The Binomial Distribution618249 -Node: The Multinomial Distribution619452 -Node: The Negative Binomial Distribution621226 -Node: The Pascal Distribution622591 -Node: The Geometric Distribution623749 -Node: The Hypergeometric Distribution624997 -Node: The Logarithmic Distribution626650 -Node: Shuffling and Sampling627442 -Node: Random Number Distribution Examples630254 -Node: Random Number Distribution References and Further Reading633450 -Node: Statistics635594 -Node: Mean and standard deviation and variance637080 -Node: Absolute deviation640588 -Node: Higher moments (skewness and kurtosis)641880 -Node: Autocorrelation644013 -Node: Covariance644826 -Node: Correlation645792 -Node: Weighted Samples647161 -Node: Maximum and Minimum values653011 -Node: Median and Percentiles655750 -Node: Example statistical programs658165 -Node: Statistics References and Further Reading660825 -Node: Histograms662033 -Node: The histogram struct663886 -Node: Histogram allocation665690 -Node: Copying Histograms668647 -Node: Updating and accessing histogram elements669323 -Node: Searching histogram ranges672592 -Node: Histogram Statistics673592 -Node: Histogram Operations675458 -Node: Reading and writing histograms677533 -Node: Resampling from histograms680575 -Node: The histogram probability distribution struct681374 -Node: Example programs for histograms684408 -Node: Two dimensional histograms686471 -Node: The 2D histogram struct687192 -Node: 2D Histogram allocation689002 -Node: Copying 2D Histograms691076 -Node: Updating and accessing 2D histogram elements691781 -Node: Searching 2D histogram ranges695438 -Node: 2D Histogram Statistics696452 -Node: 2D Histogram Operations699317 -Node: Reading and writing 2D histograms701495 -Node: Resampling from 2D histograms705124 -Node: Example programs for 2D histograms708145 -Node: N-tuples709972 -Node: The ntuple struct711295 -Node: Creating ntuples711774 -Node: Opening an existing ntuple file712441 -Node: Writing ntuples713070 -Node: Reading ntuples713531 -Node: Closing an ntuple file713862 -Node: Histogramming ntuple values714202 -Node: Example ntuple programs716212 -Node: Ntuple References and Further Reading719541 -Node: Monte Carlo Integration719862 -Node: Monte Carlo Interface721173 -Node: PLAIN Monte Carlo723800 -Node: MISER726255 -Ref: MISER-Footnote-1732935 -Node: VEGAS733060 -Node: Monte Carlo Examples742621 -Node: Monte Carlo Integration References and Further Reading748608 -Node: Simulated Annealing749390 -Node: Simulated Annealing algorithm750606 -Node: Simulated Annealing functions751758 -Node: Examples with Simulated Annealing756288 -Node: Trivial example756857 -Node: Traveling Salesman Problem759508 -Node: Simulated Annealing References and Further Reading762821 -Node: Ordinary Differential Equations763232 -Node: Defining the ODE System764472 -Node: Stepping Functions767300 -Node: Adaptive Step-size Control774270 -Node: Evolution780347 -Node: Driver784476 -Node: ODE Example programs788710 -Node: ODE References and Further Reading793756 -Node: Interpolation795520 -Node: Introduction to Interpolation796721 -Node: Interpolation Functions797162 -Node: Interpolation Types798369 -Node: Index Look-up and Acceleration801091 -Node: Evaluation of Interpolating Functions803143 -Node: Higher-level Interface805639 -Node: Interpolation Example programs807679 -Node: Interpolation References and Further Reading810899 -Node: Numerical Differentiation811471 -Node: Numerical Differentiation functions812066 -Node: Numerical Differentiation Examples814923 -Node: Numerical Differentiation References816336 -Node: Chebyshev Approximations816887 -Node: Chebyshev Definitions817968 -Node: Creation and Calculation of Chebyshev Series818757 -Node: Auxiliary Functions for Chebyshev Series819742 -Node: Chebyshev Series Evaluation820482 -Node: Derivatives and Integrals821862 -Node: Chebyshev Approximation Examples823100 -Node: Chebyshev Approximation References and Further Reading824596 -Node: Series Acceleration825046 -Node: Acceleration functions825823 -Node: Acceleration functions without error estimation828150 -Node: Example of accelerating a series830774 -Node: Series Acceleration References833120 -Node: Wavelet Transforms834008 -Node: DWT Definitions834607 -Node: DWT Initialization835559 -Node: DWT Transform Functions838207 -Node: DWT in one dimension838758 -Node: DWT in two dimension840779 -Node: DWT Examples845358 -Node: DWT References847175 -Node: Discrete Hankel Transforms849339 -Node: Discrete Hankel Transform Definition849813 -Node: Discrete Hankel Transform Functions852016 -Node: Discrete Hankel Transform References853681 -Node: One dimensional Root-Finding854085 -Node: Root Finding Overview855391 -Node: Root Finding Caveats857247 -Node: Initializing the Solver859016 -Node: Providing the function to solve861649 -Node: Search Bounds and Guesses865203 -Node: Root Finding Iteration866066 -Node: Search Stopping Parameters867917 -Node: Root Bracketing Algorithms870428 -Node: Root Finding Algorithms using Derivatives873726 -Ref: Root Finding Algorithms using Derivatives-Footnote-1877269 -Node: Root Finding Examples877425 -Node: Root Finding References and Further Reading884713 -Node: One dimensional Minimization885352 -Node: Minimization Overview886695 -Node: Minimization Caveats888402 -Node: Initializing the Minimizer889740 -Node: Providing the function to minimize891981 -Node: Minimization Iteration892459 -Node: Minimization Stopping Parameters894597 -Node: Minimization Algorithms896202 -Node: Minimization Examples898796 -Node: Minimization References and Further Reading902430 -Node: Multidimensional Root-Finding902886 -Node: Overview of Multidimensional Root Finding904394 -Node: Initializing the Multidimensional Solver906581 -Node: Providing the multidimensional system of equations to solve909811 -Node: Iteration of the multidimensional solver914723 -Node: Search Stopping Parameters for the multidimensional solver917004 -Node: Algorithms using Derivatives918742 -Node: Algorithms without Derivatives923567 -Node: Example programs for Multidimensional Root finding926657 -Node: References and Further Reading for Multidimensional Root Finding935281 -Node: Multidimensional Minimization936520 -Node: Multimin Overview937930 -Node: Multimin Caveats940010 -Node: Initializing the Multidimensional Minimizer940759 -Node: Providing a function to minimize943993 -Node: Multimin Iteration948054 -Node: Multimin Stopping Criteria950248 -Node: Multimin Algorithms with Derivatives951819 -Node: Multimin Algorithms without Derivatives955350 -Node: Multimin Examples958352 -Node: Multimin References and Further Reading964922 -Node: Least-Squares Fitting965786 -Node: Fitting Overview966872 -Node: Linear regression969205 -Node: Linear fitting without a constant term971807 -Node: Multi-parameter fitting974001 -Node: Robust linear regression979860 -Node: Troubleshooting990108 -Node: Fitting Examples990731 -Node: Fitting References and Further Reading1001255 -Node: Nonlinear Least-Squares Fitting1002627 -Node: Overview of Nonlinear Least-Squares Fitting1004151 -Node: Initializing the Nonlinear Least-Squares Solver1005618 -Node: Providing the Function to be Minimized1008483 -Node: Finite Difference Jacobian1011946 -Node: Iteration of the Minimization Algorithm1013817 -Node: Search Stopping Parameters for Minimization Algorithms1015657 -Node: High Level Driver1017730 -Node: Minimization Algorithms using Derivatives1018636 -Ref: Minimization Algorithms using Derivatives-Footnote-11022084 -Node: Minimization Algorithms without Derivatives1022173 -Node: Computing the covariance matrix of best fit parameters1022565 -Node: Example programs for Nonlinear Least-Squares Fitting1024602 -Node: References and Further Reading for Nonlinear Least-Squares Fitting1032335 -Node: Basis Splines1033071 -Node: Overview of B-splines1033950 -Node: Initializing the B-splines solver1035266 -Node: Constructing the knots vector1036647 -Node: Evaluation of B-spline basis functions1037435 -Node: Evaluation of B-spline basis function derivatives1039083 -Node: Working with the Greville abscissae1041053 -Node: Example programs for B-splines1042047 -Node: References and Further Reading1046042 -Node: Physical Constants1046848 -Node: Fundamental Constants1048427 -Node: Astronomy and Astrophysics1049567 -Node: Atomic and Nuclear Physics1050232 -Node: Measurement of Time1051883 -Node: Imperial Units1052313 -Node: Speed and Nautical Units1052755 -Node: Printers Units1053259 -Node: Volume Area and Length1053582 -Node: Mass and Weight1054268 -Node: Thermal Energy and Power1055087 -Node: Pressure1055510 -Node: Viscosity1056123 -Node: Light and Illumination1056399 -Node: Radioactivity1056991 -Node: Force and Energy1057326 -Node: Prefixes1057730 -Node: Physical Constant Examples1058473 -Node: Physical Constant References and Further Reading1060262 -Node: IEEE floating-point arithmetic1060992 -Node: Representation of floating point numbers1061584 -Node: Setting up your IEEE environment1066070 -Node: IEEE References and Further Reading1073043 -Node: Debugging Numerical Programs1074203 -Node: Using gdb1074720 -Node: Examining floating point registers1078063 -Node: Handling floating point exceptions1079348 -Node: GCC warning options for numerical programs1080760 -Node: Debugging References1084708 -Node: Contributors to GSL1085420 -Node: Autoconf Macros1089914 -Node: GSL CBLAS Library1093946 -Node: Level 1 CBLAS Functions1094486 -Node: Level 2 CBLAS Functions1099788 -Node: Level 3 CBLAS Functions1116418 -Node: GSL CBLAS Examples1126080 -Node: GNU General Public License1127643 -Node: GNU Free Documentation License1165217 -Node: Function Index1190366 -Node: Variable Index1443412 -Node: Type Index1446715 -Node: Concept Index1461784 +Node: Top973 +Node: Introduction4283 +Node: Routines available in GSL5003 +Node: GSL is Free Software6616 +Node: Obtaining GSL9008 +Node: No Warranty10036 +Node: Reporting Bugs10542 +Ref: Reporting Bugs-Footnote-111494 +Node: Further Information11544 +Node: Conventions used in this manual12558 +Node: Using the library13322 +Node: An Example Program14045 +Ref: An Example Program-Footnote-114788 +Node: Compiling and Linking14895 +Node: Linking programs with the library15968 +Ref: Linking programs with the library-Footnote-117371 +Ref: Linking programs with the library-Footnote-217408 +Node: Linking with an alternative BLAS library17461 +Node: Shared Libraries18544 +Ref: Shared Libraries-Footnote-120019 +Node: ANSI C Compliance20067 +Node: Inline functions21160 +Node: Long double22698 +Node: Portability functions24286 +Node: Alternative optimized functions25684 +Node: Support for different numeric types27142 +Node: Compatibility with C++30206 +Node: Aliasing of arrays30778 +Node: Thread-safety31529 +Node: Deprecated Functions32617 +Node: Code Reuse33242 +Node: Error Handling33887 +Node: Error Reporting34687 +Node: Error Codes36579 +Node: Error Handlers38436 +Node: Using GSL error reporting in your own functions42076 +Node: Error Reporting Examples44036 +Node: Mathematical Functions45248 +Node: Mathematical Constants46041 +Node: Infinities and Not-a-number47171 +Ref: Infinities and Not-a-number-Footnote-148281 +Node: Elementary Functions48691 +Node: Small integer powers51148 +Node: Testing the Sign of Numbers52797 +Node: Testing for Odd and Even Numbers53230 +Node: Maximum and Minimum functions53789 +Node: Approximate Comparison of Floating Point Numbers56070 +Node: Complex Numbers57430 +Ref: Complex Numbers-Footnote-158775 +Node: Representation of complex numbers58839 +Node: Properties of complex numbers60779 +Node: Complex arithmetic operators61785 +Node: Elementary Complex Functions64531 +Node: Complex Trigonometric Functions66355 +Node: Inverse Complex Trigonometric Functions67576 +Node: Complex Hyperbolic Functions70189 +Node: Inverse Complex Hyperbolic Functions71485 +Node: Complex Number References and Further Reading73473 +Node: Polynomials74869 +Node: Polynomial Evaluation75673 +Node: Divided Difference Representation of Polynomials77084 +Node: Quadratic Equations80946 +Node: Cubic Equations82883 +Node: General Polynomial Equations84466 +Node: Roots of Polynomials Examples86823 +Node: Roots of Polynomials References and Further Reading88212 +Node: Special Functions89258 +Node: Special Function Usage91506 +Node: The gsl_sf_result struct92690 +Node: Special Function Modes93954 +Node: Airy Functions and Derivatives94888 +Node: Airy Functions95613 +Node: Derivatives of Airy Functions96973 +Node: Zeros of Airy Functions98485 +Node: Zeros of Derivatives of Airy Functions99204 +Node: Bessel Functions99963 +Node: Regular Cylindrical Bessel Functions101181 +Node: Irregular Cylindrical Bessel Functions102505 +Node: Regular Modified Cylindrical Bessel Functions103963 +Node: Irregular Modified Cylindrical Bessel Functions106791 +Node: Regular Spherical Bessel Functions109764 +Node: Irregular Spherical Bessel Functions111977 +Node: Regular Modified Spherical Bessel Functions113663 +Node: Irregular Modified Spherical Bessel Functions115662 +Node: Regular Bessel Function - Fractional Order117725 +Node: Irregular Bessel Functions - Fractional Order118723 +Node: Regular Modified Bessel Functions - Fractional Order119305 +Node: Irregular Modified Bessel Functions - Fractional Order120230 +Node: Zeros of Regular Bessel Functions121466 +Node: Clausen Functions122569 +Node: Coulomb Functions123173 +Node: Normalized Hydrogenic Bound States123632 +Node: Coulomb Wave Functions124745 +Node: Coulomb Wave Function Normalization Constant128157 +Node: Coupling Coefficients128910 +Node: 3-j Symbols129684 +Node: 6-j Symbols130288 +Node: 9-j Symbols130912 +Node: Dawson Function131618 +Node: Debye Functions132185 +Node: Dilogarithm133959 +Node: Real Argument134281 +Node: Complex Argument134975 +Node: Elementary Operations135445 +Node: Elliptic Integrals136269 +Node: Definition of Legendre Forms136864 +Node: Definition of Carlson Forms137684 +Node: Legendre Form of Complete Elliptic Integrals138381 +Node: Legendre Form of Incomplete Elliptic Integrals139934 +Node: Carlson Forms142026 +Node: Elliptic Functions (Jacobi)143573 +Node: Error Functions144154 +Node: Error Function144630 +Node: Complementary Error Function145003 +Node: Log Complementary Error Function145463 +Node: Probability functions145915 +Node: Exponential Functions147168 +Node: Exponential Function147563 +Node: Relative Exponential Functions148785 +Node: Exponentiation With Error Estimate150457 +Node: Exponential Integrals151666 +Node: Exponential Integral152222 +Node: Ei(x)153143 +Node: Hyperbolic Integrals153591 +Node: Ei_3(x)154246 +Node: Trigonometric Integrals154638 +Node: Arctangent Integral155237 +Node: Fermi-Dirac Function155637 +Node: Complete Fermi-Dirac Integrals156011 +Node: Incomplete Fermi-Dirac Integrals158576 +Node: Gamma and Beta Functions159219 +Node: Gamma Functions159854 +Node: Factorials162962 +Node: Pochhammer Symbol165515 +Node: Incomplete Gamma Functions167016 +Node: Beta Functions168265 +Node: Incomplete Beta Function169017 +Node: Gegenbauer Functions169727 +Node: Hypergeometric Functions171377 +Node: Laguerre Functions175641 +Node: Lambert W Functions177204 +Node: Legendre Functions and Spherical Harmonics178244 +Node: Legendre Polynomials178856 +Node: Associated Legendre Polynomials and Spherical Harmonics180912 +Node: Conical Functions191665 +Node: Radial Functions for Hyperbolic Space193788 +Node: Logarithm and Related Functions195965 +Node: Mathieu Functions197589 +Node: Mathieu Function Workspace198949 +Node: Mathieu Function Characteristic Values199762 +Node: Angular Mathieu Functions200944 +Node: Radial Mathieu Functions202112 +Node: Power Function203495 +Node: Psi (Digamma) Function204423 +Node: Digamma Function204976 +Node: Trigamma Function205806 +Node: Polygamma Function206383 +Node: Synchrotron Functions206767 +Node: Transport Functions207530 +Node: Trigonometric Functions208677 +Node: Circular Trigonometric Functions209323 +Node: Trigonometric Functions for Complex Arguments210332 +Node: Hyperbolic Trigonometric Functions211368 +Node: Conversion Functions211971 +Node: Restriction Functions212754 +Node: Trigonometric Functions With Error Estimates213685 +Node: Zeta Functions214595 +Node: Riemann Zeta Function215053 +Node: Riemann Zeta Function Minus One215732 +Node: Hurwitz Zeta Function216503 +Node: Eta Function217008 +Node: Special Functions Examples217567 +Node: Special Functions References and Further Reading219262 +Node: Vectors and Matrices220779 +Node: Data types221622 +Node: Blocks222825 +Node: Block allocation223758 +Node: Reading and writing blocks225162 +Node: Example programs for blocks227226 +Node: Vectors227853 +Node: Vector allocation229821 +Node: Accessing vector elements231358 +Ref: Accessing vector elements-Footnote-1234531 +Node: Initializing vector elements234770 +Node: Reading and writing vectors235464 +Node: Vector views237554 +Node: Copying vectors245020 +Node: Exchanging elements245880 +Node: Vector operations246438 +Node: Finding maximum and minimum elements of vectors248211 +Node: Vector properties249798 +Node: Example programs for vectors250772 +Node: Matrices253061 +Node: Matrix allocation256001 +Node: Accessing matrix elements257587 +Node: Initializing matrix elements259560 +Node: Reading and writing matrices260357 +Node: Matrix views262460 +Node: Creating row and column views269596 +Node: Copying matrices274073 +Node: Copying rows and columns274669 +Node: Exchanging rows and columns276346 +Node: Matrix operations277824 +Node: Finding maximum and minimum elements of matrices279794 +Node: Matrix properties281694 +Node: Example programs for matrices282797 +Node: Vector and Matrix References and Further Reading286869 +Node: Permutations287355 +Node: The Permutation struct288692 +Node: Permutation allocation289195 +Node: Accessing permutation elements290631 +Node: Permutation properties291474 +Node: Permutation functions292179 +Node: Applying Permutations293436 +Node: Reading and writing permutations295818 +Ref: Reading and writing permutations-Footnote-1298034 +Node: Permutations in cyclic form298146 +Node: Permutation Examples302546 +Node: Permutation References and Further Reading305089 +Node: Combinations305763 +Node: The Combination struct306648 +Node: Combination allocation307199 +Node: Accessing combination elements308986 +Node: Combination properties309645 +Node: Combination functions310531 +Node: Reading and writing combinations311471 +Ref: Reading and writing combinations-Footnote-1313704 +Node: Combination Examples313816 +Node: Combination References and Further Reading315124 +Node: Multisets315527 +Node: The Multiset struct316453 +Node: Multiset allocation316974 +Node: Accessing multiset elements318669 +Node: Multiset properties319298 +Node: Multiset functions320111 +Node: Reading and writing multisets321021 +Ref: Reading and writing multisets-Footnote-1323172 +Node: Multiset Examples323284 +Node: Sorting325392 +Node: Sorting objects326391 +Node: Sorting vectors329304 +Node: Selecting the k smallest or largest elements332465 +Node: Computing the rank335806 +Node: Sorting Examples337007 +Node: Sorting References and Further Reading338654 +Node: BLAS Support339200 +Ref: BLAS Support-Footnote-1342586 +Node: GSL BLAS Interface342755 +Node: Level 1 GSL BLAS Interface343248 +Node: Level 2 GSL BLAS Interface349988 +Node: Level 3 GSL BLAS Interface359278 +Node: BLAS Examples370376 +Node: BLAS References and Further Reading371797 +Node: Linear Algebra373139 +Node: LU Decomposition374489 +Node: QR Decomposition379714 +Node: QR Decomposition with Column Pivoting386023 +Node: Complete Orthogonal Decomposition393522 +Node: Singular Value Decomposition397149 +Node: Cholesky Decomposition401565 +Node: Pivoted Cholesky Decomposition408281 +Node: Modified Cholesky Decomposition413578 +Node: Tridiagonal Decomposition of Real Symmetric Matrices417083 +Node: Tridiagonal Decomposition of Hermitian Matrices418940 +Node: Hessenberg Decomposition of Real Matrices420894 +Node: Hessenberg-Triangular Decomposition of Real Matrices423308 +Node: Bidiagonalization424433 +Node: Givens Rotations426847 +Node: Householder Transformations428178 +Node: Householder solver for linear systems430799 +Node: Tridiagonal Systems431706 +Node: Triangular Systems434588 +Node: Balancing436002 +Node: Linear Algebra Examples436804 +Node: Linear Algebra References and Further Reading438798 +Node: Eigensystems440762 +Node: Real Symmetric Matrices441991 +Node: Complex Hermitian Matrices444505 +Node: Real Nonsymmetric Matrices447134 +Node: Real Generalized Symmetric-Definite Eigensystems452869 +Node: Complex Generalized Hermitian-Definite Eigensystems455748 +Node: Real Generalized Nonsymmetric Eigensystems458462 +Node: Sorting Eigenvalues and Eigenvectors465069 +Node: Eigenvalue and Eigenvector Examples468347 +Node: Eigenvalue and Eigenvector References473738 +Node: Fast Fourier Transforms474765 +Node: Mathematical Definitions475991 +Node: Overview of complex data FFTs478396 +Node: Radix-2 FFT routines for complex data481341 +Node: Mixed-radix FFT routines for complex data485560 +Node: Overview of real data FFTs494900 +Node: Radix-2 FFT routines for real data497335 +Node: Mixed-radix FFT routines for real data501759 +Node: FFT References and Further Reading512444 +Node: Numerical Integration515314 +Node: Numerical Integration Introduction517112 +Node: Integrands without weight functions519387 +Node: Integrands with weight functions520217 +Node: Integrands with singular weight functions520928 +Node: QNG non-adaptive Gauss-Kronrod integration521846 +Node: QAG adaptive integration523128 +Node: QAGS adaptive integration with singularities525917 +Node: QAGP adaptive integration with known singular points527717 +Node: QAGI adaptive integration on infinite intervals529031 +Node: QAWC adaptive integration for Cauchy principal values531311 +Node: QAWS adaptive integration for singular functions532481 +Node: QAWO adaptive integration for oscillatory functions535707 +Node: QAWF adaptive integration for Fourier integrals539495 +Node: CQUAD doubly-adaptive integration542119 +Node: Fixed order Gauss-Legendre integration545377 +Node: Numerical integration error codes547365 +Node: Numerical integration examples548121 +Node: Numerical integration References and Further Reading550178 +Node: Random Number Generation551169 +Node: General comments on random numbers552703 +Node: The Random Number Generator Interface554655 +Node: Random number generator initialization556013 +Node: Sampling from a random number generator558384 +Node: Auxiliary random number generator functions561628 +Node: Random number environment variables563948 +Node: Copying random number generator state566473 +Node: Reading and writing random number generator state567447 +Node: Random number generator algorithms568841 +Node: Unix random number generators578783 +Node: Other random number generators582497 +Node: Random Number Generator Performance591148 +Node: Random Number Generator Examples592269 +Node: Random Number References and Further Reading593781 +Node: Random Number Acknowledgements595076 +Node: Quasi-Random Sequences595562 +Node: Quasi-random number generator initialization596682 +Node: Sampling from a quasi-random number generator597697 +Node: Auxiliary quasi-random number generator functions598394 +Node: Saving and restoring quasi-random number generator state599340 +Node: Quasi-random number generator algorithms601121 +Node: Quasi-random number generator examples602259 +Node: Quasi-random number references603244 +Node: Random Number Distributions603770 +Node: Random Number Distribution Introduction607146 +Node: The Gaussian Distribution608941 +Node: The Gaussian Tail Distribution611601 +Node: The Bivariate Gaussian Distribution613265 +Node: The Multivariate Gaussian Distribution614589 +Node: The Exponential Distribution617437 +Node: The Laplace Distribution618579 +Node: The Exponential Power Distribution619671 +Node: The Cauchy Distribution620939 +Node: The Rayleigh Distribution622188 +Node: The Rayleigh Tail Distribution623362 +Node: The Landau Distribution624235 +Node: The Levy alpha-Stable Distributions625190 +Node: The Levy skew alpha-Stable Distribution626248 +Node: The Gamma Distribution627860 +Node: The Flat (Uniform) Distribution629515 +Node: The Lognormal Distribution630663 +Node: The Chi-squared Distribution632011 +Node: The F-distribution633416 +Node: The t-distribution635053 +Node: The Beta Distribution636447 +Node: The Logistic Distribution637606 +Node: The Pareto Distribution638735 +Node: Spherical Vector Distributions639905 +Node: The Weibull Distribution642741 +Node: The Type-1 Gumbel Distribution643935 +Node: The Type-2 Gumbel Distribution645171 +Node: The Dirichlet Distribution646402 +Node: General Discrete Distributions648070 +Node: The Poisson Distribution651938 +Node: The Bernoulli Distribution652945 +Node: The Binomial Distribution653696 +Node: The Multinomial Distribution654899 +Node: The Negative Binomial Distribution656673 +Node: The Pascal Distribution658038 +Node: The Geometric Distribution659196 +Node: The Hypergeometric Distribution660444 +Node: The Logarithmic Distribution662097 +Node: Shuffling and Sampling662889 +Node: Random Number Distribution Examples665701 +Node: Random Number Distribution References and Further Reading668875 +Node: Statistics671019 +Node: Mean and standard deviation and variance672513 +Node: Absolute deviation676021 +Node: Higher moments (skewness and kurtosis)677313 +Node: Autocorrelation679446 +Node: Covariance680259 +Node: Correlation681225 +Node: Weighted Samples682594 +Node: Maximum and Minimum values688444 +Node: Median and Percentiles691183 +Node: Example statistical programs693598 +Node: Statistics References and Further Reading696259 +Node: Running Statistics697467 +Node: Running Statistics Initializing the Accumulator698769 +Node: Running Statistics Adding Data to the Accumulator699481 +Node: Running Statistics Current Statistics700170 +Node: Running Statistics Quantiles702301 +Node: Running Statistics Example programs703901 +Node: Running Statistics References and Further Reading709451 +Node: Histograms709984 +Node: The histogram struct711845 +Node: Histogram allocation713649 +Node: Copying Histograms716606 +Node: Updating and accessing histogram elements717282 +Node: Searching histogram ranges720551 +Node: Histogram Statistics721551 +Node: Histogram Operations723417 +Node: Reading and writing histograms725492 +Node: Resampling from histograms728534 +Node: The histogram probability distribution struct729333 +Node: Example programs for histograms732367 +Node: Two dimensional histograms734430 +Node: The 2D histogram struct735151 +Node: 2D Histogram allocation736961 +Node: Copying 2D Histograms739035 +Node: Updating and accessing 2D histogram elements739740 +Node: Searching 2D histogram ranges743397 +Node: 2D Histogram Statistics744411 +Node: 2D Histogram Operations747276 +Node: Reading and writing 2D histograms749454 +Node: Resampling from 2D histograms753083 +Node: Example programs for 2D histograms756104 +Node: N-tuples757931 +Node: The ntuple struct759254 +Node: Creating ntuples759733 +Node: Opening an existing ntuple file760400 +Node: Writing ntuples761029 +Node: Reading ntuples761490 +Node: Closing an ntuple file761821 +Node: Histogramming ntuple values762161 +Node: Example ntuple programs764171 +Node: Ntuple References and Further Reading767560 +Node: Monte Carlo Integration767881 +Node: Monte Carlo Interface769192 +Node: PLAIN Monte Carlo771819 +Node: MISER774274 +Ref: MISER-Footnote-1780954 +Node: VEGAS781079 +Node: Monte Carlo Examples790640 +Node: Monte Carlo Integration References and Further Reading796708 +Node: Simulated Annealing797490 +Node: Simulated Annealing algorithm798706 +Node: Simulated Annealing functions799858 +Node: Examples with Simulated Annealing804388 +Node: Trivial example804957 +Node: Traveling Salesman Problem807590 +Node: Simulated Annealing References and Further Reading810903 +Node: Ordinary Differential Equations811314 +Node: Defining the ODE System812554 +Node: Stepping Functions815566 +Node: Adaptive Step-size Control822536 +Node: Evolution828613 +Node: Driver832742 +Node: ODE Example programs836976 +Node: ODE References and Further Reading842132 +Node: Interpolation843896 +Node: 1D Introduction to Interpolation845470 +Node: 1D Interpolation Functions845957 +Node: 1D Interpolation Types847179 +Node: 1D Index Look-up and Acceleration850438 +Node: 1D Evaluation of Interpolating Functions852505 +Node: 1D Higher-level Interface855016 +Node: 1D Interpolation Example programs857071 +Node: 1D Interpolation References and Further Reading862627 +Node: 2D Introduction to Interpolation863382 +Node: 2D Interpolation Functions863930 +Node: 2D Interpolation Grids865461 +Node: 2D Interpolation Types866680 +Node: 2D Evaluation of Interpolating Functions867945 +Node: 2D Higher-level Interface874052 +Node: 2D Interpolation Example programs877796 +Node: Numerical Differentiation879978 +Node: Numerical Differentiation functions880573 +Node: Numerical Differentiation Examples883430 +Node: Numerical Differentiation References884903 +Node: Chebyshev Approximations885454 +Node: Chebyshev Definitions886535 +Node: Creation and Calculation of Chebyshev Series887324 +Node: Auxiliary Functions for Chebyshev Series888309 +Node: Chebyshev Series Evaluation889049 +Node: Derivatives and Integrals890429 +Node: Chebyshev Approximation Examples891667 +Node: Chebyshev Approximation References and Further Reading893219 +Node: Series Acceleration893669 +Node: Acceleration functions894446 +Node: Acceleration functions without error estimation896773 +Node: Example of accelerating a series899397 +Node: Series Acceleration References902718 +Node: Wavelet Transforms903606 +Node: DWT Definitions904205 +Node: DWT Initialization905157 +Node: DWT Transform Functions907805 +Node: DWT in one dimension908356 +Node: DWT in two dimension910377 +Node: DWT Examples914956 +Node: DWT References916831 +Node: Discrete Hankel Transforms918995 +Node: Discrete Hankel Transform Definition919469 +Node: Discrete Hankel Transform Functions922780 +Node: Discrete Hankel Transform References924445 +Node: One dimensional Root-Finding924849 +Node: Root Finding Overview926155 +Node: Root Finding Caveats928011 +Node: Initializing the Solver929780 +Node: Providing the function to solve932413 +Node: Search Bounds and Guesses935967 +Node: Root Finding Iteration936830 +Node: Search Stopping Parameters938681 +Node: Root Bracketing Algorithms941192 +Node: Root Finding Algorithms using Derivatives944490 +Ref: Root Finding Algorithms using Derivatives-Footnote-1948033 +Node: Root Finding Examples948189 +Node: Root Finding References and Further Reading955453 +Node: One dimensional Minimization956092 +Node: Minimization Overview957435 +Node: Minimization Caveats959142 +Node: Initializing the Minimizer960480 +Node: Providing the function to minimize962721 +Node: Minimization Iteration963199 +Node: Minimization Stopping Parameters965337 +Node: Minimization Algorithms966942 +Node: Minimization Examples969536 +Node: Minimization References and Further Reading972287 +Node: Multidimensional Root-Finding972743 +Node: Overview of Multidimensional Root Finding974251 +Node: Initializing the Multidimensional Solver976438 +Node: Providing the multidimensional system of equations to solve979668 +Node: Iteration of the multidimensional solver984580 +Node: Search Stopping Parameters for the multidimensional solver986861 +Node: Algorithms using Derivatives988599 +Node: Algorithms without Derivatives993424 +Node: Example programs for Multidimensional Root finding996514 +Node: References and Further Reading for Multidimensional Root Finding1005138 +Node: Multidimensional Minimization1006377 +Node: Multimin Overview1007787 +Node: Multimin Caveats1009867 +Node: Initializing the Multidimensional Minimizer1010616 +Node: Providing a function to minimize1013850 +Node: Multimin Iteration1017911 +Node: Multimin Stopping Criteria1020255 +Node: Multimin Algorithms with Derivatives1021826 +Node: Multimin Algorithms without Derivatives1025357 +Node: Multimin Examples1028359 +Node: Multimin References and Further Reading1034929 +Node: Least-Squares Fitting1035793 +Node: Fitting Overview1036825 +Node: Linear regression1039158 +Node: Linear regression with a constant term1039601 +Node: Linear regression without a constant term1042244 +Node: Multi-parameter regression1044436 +Node: Regularized regression1052576 +Node: Robust linear regression1071950 +Node: Large Dense Linear Systems1084161 +Node: Large Dense Linear Systems Normal Equations1086384 +Node: Large Dense Linear Systems TSQR1087977 +Node: Large Dense Linear Systems Solution Steps1089622 +Node: Large Dense Linear Systems Routines1090764 +Node: Troubleshooting1099087 +Node: Fitting Examples1099712 +Node: Fitting linear regression example1100268 +Node: Fitting multi-parameter linear regression example1102470 +Node: Fitting regularized linear regression example 11107464 +Node: Fitting regularized linear regression example 21115049 +Node: Fitting robust linear regression example1121969 +Node: Fitting large linear systems example1125926 +Node: Fitting References and Further Reading1133145 +Node: Nonlinear Least-Squares Fitting1135426 +Node: Nonlinear Least-Squares Overview1137383 +Node: Nonlinear Least-Squares TRS Overview1141784 +Node: Nonlinear Least-Squares TRS Levenberg-Marquardt1143918 +Node: Nonlinear Least-Squares TRS Levenberg-Marquardt with Geodesic Acceleration1145525 +Node: Nonlinear Least-Squares TRS Dogleg1147279 +Node: Nonlinear Least-Squares TRS Double Dogleg1148749 +Node: Nonlinear Least-Squares TRS 2D Subspace1149547 +Node: Nonlinear Least-Squares TRS Steihaug-Toint Conjugate Gradient1150519 +Node: Nonlinear Least-Squares Weighted Overview1151263 +Node: Nonlinear Least-Squares Tunable Parameters1152481 +Node: Nonlinear Least-Squares Initialization1164018 +Node: Nonlinear Least-Squares Function Definition1168948 +Node: Nonlinear Least-Squares Iteration1176030 +Node: Nonlinear Least-Squares Testing for Convergence1180568 +Node: Nonlinear Least-Squares High Level Driver1183464 +Node: Nonlinear Least-Squares Covariance Matrix1185684 +Node: Nonlinear Least-Squares Troubleshooting1187892 +Node: Nonlinear Least-Squares Examples1189916 +Node: Nonlinear Least-Squares Exponential Fit Example1190462 +Node: Nonlinear Least-Squares Geodesic Acceleration Example1201856 +Node: Nonlinear Least-Squares Comparison Example1209181 +Node: Nonlinear Least-Squares Large Example1217943 +Node: Nonlinear Least-Squares References and Further Reading1226889 +Node: Basis Splines1228483 +Node: Overview of B-splines1229368 +Node: Initializing the B-splines solver1230684 +Node: Constructing the knots vector1231549 +Node: Evaluation of B-spline basis functions1232337 +Node: Evaluation of B-spline basis function derivatives1233985 +Node: Working with the Greville abscissae1235867 +Node: Example programs for B-splines1236861 +Node: B-Spline References and Further Reading1240865 +Node: Sparse Matrices1241698 +Node: Sparse Matrices Overview1243024 +Node: Sparse Matrices Allocation1246235 +Node: Sparse Matrices Accessing Elements1249246 +Node: Sparse Matrices Initializing Elements1250209 +Node: Sparse Matrices Reading and Writing1250844 +Node: Sparse Matrices Copying1253066 +Node: Sparse Matrices Exchanging Rows and Columns1253548 +Node: Sparse Matrices Operations1254943 +Node: Sparse Matrices Properties1255623 +Node: Sparse Matrices Finding Maximum and Minimum Elements1256275 +Node: Sparse Matrices Compressed Format1256818 +Node: Sparse Matrices Conversion Between Sparse and Dense1257897 +Node: Sparse Matrices Examples1258719 +Node: Sparse Matrices References and Further Reading1262365 +Node: Sparse BLAS Support1262813 +Node: Sparse BLAS operations1263444 +Node: Sparse BLAS References and Further Reading1264398 +Node: Sparse Linear Algebra1264842 +Node: Overview of Sparse Linear Algebra1265469 +Node: Sparse Iterative Solvers1266221 +Node: Sparse Iterative Solver Overview1266567 +Node: Sparse Iterative Solvers Types1267417 +Node: Iterating the Sparse Linear System1269521 +Node: Sparse Linear Algebra Examples1271991 +Node: Sparse Linear Algebra References and Further Reading1276456 +Node: Physical Constants1276989 +Node: Fundamental Constants1278576 +Node: Astronomy and Astrophysics1279716 +Node: Atomic and Nuclear Physics1280381 +Node: Measurement of Time1282032 +Node: Imperial Units1282462 +Node: Speed and Nautical Units1282904 +Node: Printers Units1283408 +Node: Volume Area and Length1283731 +Node: Mass and Weight1284417 +Node: Thermal Energy and Power1285236 +Node: Pressure1285659 +Node: Viscosity1286272 +Node: Light and Illumination1286548 +Node: Radioactivity1287140 +Node: Force and Energy1287475 +Node: Prefixes1287879 +Node: Physical Constant Examples1288622 +Node: Physical Constant References and Further Reading1290411 +Node: IEEE floating-point arithmetic1291141 +Node: Representation of floating point numbers1291733 +Node: Setting up your IEEE environment1296219 +Node: IEEE References and Further Reading1303192 +Node: Debugging Numerical Programs1304352 +Node: Using gdb1304869 +Node: Examining floating point registers1308212 +Node: Handling floating point exceptions1309497 +Node: GCC warning options for numerical programs1310909 +Node: Debugging References1314857 +Node: Contributors to GSL1315569 +Node: Autoconf Macros1320080 +Node: GSL CBLAS Library1324112 +Node: Level 1 CBLAS Functions1324652 +Node: Level 2 CBLAS Functions1329954 +Node: Level 3 CBLAS Functions1346584 +Node: GSL CBLAS Examples1356246 +Node: GNU General Public License1357809 +Node: GNU Free Documentation License1395383 +Node: Function Index1420532 +Node: Variable Index1705030 +Node: Type Index1713866 +Node: Concept Index1729090  End Tag Table diff -Nru gsl-doc-1.16/doc/gsl-ref.info-1 gsl-doc-2.3/doc/gsl-ref.info-1 --- gsl-doc-1.16/doc/gsl-ref.info-1 2013-07-19 15:17:32.000000000 +0000 +++ gsl-doc-2.3/doc/gsl-ref.info-1 2016-12-09 00:08:00.000000000 +0000 @@ -2,13 +2,20 @@ gsl-ref.texi. Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The GSL Team. +2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 +The GSL Team. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or -any later version published by the Free Software Foundation; with no -Invariant Sections and no cover texts. A copy of the license is -included in the section entitled "GNU Free Documentation License". +any later version published by the Free Software Foundation; with the +Invariant Sections being "GNU General Public License" and "Free Software +Needs Free Documentation", the Front-Cover text being "A GNU Manual", +and with the Back-Cover Text being (a) (see below). A copy of the +license is included in the section entitled "GNU Free Documentation +License". + + (a) The Back-Cover Text is: "You have the freedom to copy and modify +this GNU Manual." INFO-DIR-SECTION Software libraries START-INFO-DIR-ENTRY * gsl-ref: (gsl-ref). GNU Scientific Library - Reference @@ -22,7 +29,7 @@ This file documents the GNU Scientific Library (GSL), a collection of numerical routines for scientific computing. It corresponds to release -1.16 of the library. Please report any errors in this manual to +2.3 of the library. Please report any errors in this manual to . More information about GSL can be found at the project homepage, @@ -36,13 +43,20 @@ project homepage thanks to Daisuke Tominaga. Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The GSL Team. +2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 +The GSL Team. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or -any later version published by the Free Software Foundation; with no -Invariant Sections and no cover texts. A copy of the license is -included in the section entitled "GNU Free Documentation License". +any later version published by the Free Software Foundation; with the +Invariant Sections being "GNU General Public License" and "Free Software +Needs Free Documentation", the Front-Cover text being "A GNU Manual", +and with the Back-Cover Text being (a) (see below). A copy of the +license is included in the section entitled "GNU Free Documentation +License". + + (a) The Back-Cover Text is: "You have the freedom to copy and modify +this GNU Manual." * Menu: @@ -67,6 +81,7 @@ * Quasi-Random Sequences:: * Random Number Distributions:: * Statistics:: +* Running Statistics:: * Histograms:: * N-tuples:: * Monte Carlo Integration:: @@ -84,7 +99,10 @@ * Multidimensional Minimization:: * Least-Squares Fitting:: * Nonlinear Least-Squares Fitting:: -* Basis Splines:: +* Basis Splines:: +* Sparse Matrices:: +* Sparse BLAS Support:: +* Sparse Linear Algebra:: * Physical Constants:: * IEEE floating-point arithmetic:: * Debugging Numerical Programs:: @@ -375,7 +393,7 @@ The output is shown below, and should be correct to double-precision accuracy,(1) - J0(5) = -1.775967713143382920e-01 + J0(5) = -1.775967713143382642e-01 The steps needed to compile this program are described in the following sections. @@ -2150,11 +2168,11 @@ The output of the program is, $ ./a.out - z0 = -0.809016994374947451 +0.587785252292473137 - z1 = -0.809016994374947451 -0.587785252292473137 - z2 = +0.309016994374947451 +0.951056516295153642 - z3 = +0.309016994374947451 -0.951056516295153642 - z4 = +1.000000000000000000 +0.000000000000000000 + z0 = -0.809016994374947673 +0.587785252292473359 + z1 = -0.809016994374947673 -0.587785252292473359 + z2 = +0.309016994374947507 +0.951056516295152976 + z3 = +0.309016994374947507 -0.951056516295152976 + z4 = +0.999999999999999889 +0.000000000000000000 which agrees with the analytic result, z_n = \exp(2 \pi n i/5). @@ -2783,7 +2801,7 @@ -- Function: int gsl_sf_bessel_il_scaled_array (int LMAX, double X, double RESULT_ARRAY[]) This routine computes the values of the scaled regular modified - cylindrical Bessel functions \exp(-|x|) i_l(x) for l from 0 to LMAX + spherical Bessel functions \exp(-|x|) i_l(x) for l from 0 to LMAX inclusive for lmax >= 0, storing the results in the array RESULT_ARRAY. The values are computed using recurrence relations for efficiency, and therefore may differ slightly from the exact @@ -3401,16 +3419,15 @@ parameters m = k^2 and \sin^2(\alpha) = k^2, with the change of sign n \to -n. - -- Function: double gsl_sf_ellint_D (double PHI, double K, double N, - gsl_mode_t MODE) - -- Function: int gsl_sf_ellint_D_e (double PHI, double K, double N, - gsl_mode_t MODE, gsl_sf_result * RESULT) + -- Function: double gsl_sf_ellint_D (double PHI, double K, gsl_mode_t + MODE) + -- Function: int gsl_sf_ellint_D_e (double PHI, double K, gsl_mode_t + MODE, gsl_sf_result * RESULT) These functions compute the incomplete elliptic integral D(\phi,k) which is defined through the Carlson form RD(x,y,z) by the following relation, - D(\phi,k,n) = (1/3)(\sin(\phi))^3 RD (1-\sin^2(\phi), 1-k^2 \sin^2(\phi), 1). - The argument N is not used and will be removed in a future release. + D(\phi,k) = (1/3)(\sin(\phi))^3 RD (1-\sin^2(\phi), 1-k^2 \sin^2(\phi), 1).  File: gsl-ref.info, Node: Carlson Forms, Prev: Legendre Form of Incomplete Elliptic Integrals, Up: Elliptic Integrals @@ -4356,16 +4373,168 @@ 7.24.2 Associated Legendre Polynomials and Spherical Harmonics -------------------------------------------------------------- -The following functions compute the associated Legendre Polynomials -P_l^m(x). Note that this function grows combinatorially with l and can -overflow for l larger than about 150. There is no trouble for small m, -but overflow occurs when m and l are both large. Rather than allow -overflows, these functions refuse to calculate P_l^m(x) and return -'GSL_EOVRFLW' when they can sense that l and m are too big. - - If you want to calculate a spherical harmonic, then _do not_ use -these functions. Instead use 'gsl_sf_legendre_sphPlm' below, which uses -a similar recursion, but with the normalized functions. +The following functions compute the associated Legendre polynomials +P_l^m(x) which are solutions of the differential equation + + (1 - x^2) d^2 P_l^m(x) / dx^2 P_l^m(x) - 2x d/dx P_l^m(x) + + ( l(l+1) - m^2 / (1 - x^2) ) P_l^m(x) = 0 + + where the degree l and order m satisfy 0 \le l and 0 \le m \le l. +The functions P_l^m(x) grow combinatorially with l and can overflow for +l larger than about 150. Alternatively, one may calculate normalized +associated Legendre polynomials. There are a number of different +normalization conventions, and these functions can be stably computed up +to degree and order 2700. The following normalizations are provided: +'Schmidt semi-normalization' + Schmidt semi-normalized associated Legendre polynomials are often + used in the magnetics community and are defined as + S_l^0(x) = P_l^0(x) + S_l^m(x) = (-1)^m \sqrt((2(l-m)! / (l+m)!)) P_l^m(x), m > 0 + The factor of (-1)^m is called the Condon-Shortley phase factor and + can be excluded if desired by setting the parameter 'csphase = 1' + in the functions below. + +'Spherical Harmonic Normalization' + The associated Legendre polynomials suitable for calculating + spherical harmonics are defined as + Y_l^m(x) = (-1)^m \sqrt((2l + 1) * (l-m)! / (4 \pi) / (l+m)!) P_l^m(x) + where again the phase factor (-1)^m can be included or excluded if + desired. + +'Full Normalization' + The fully normalized associated Legendre polynomials are defined as + N_l^m(x) = (-1)^m \sqrt((l + 1/2) * (l-m)! / (l+m)!) P_l^m(x) + and have the property + \int_(-1)^1 ( N_l^m(x) )^2 dx = 1 + + The normalized associated Legendre routines below use a recurrence +relation which is stable up to a degree and order of about 2700. Beyond +this, the computed functions could suffer from underflow leading to +incorrect results. Routines are provided to compute first and second +derivatives dP_l^m(x)/dx and d^2 P_l^m(x)/dx^2 as well as their +alternate versions d P_l^m(\cos{\theta})/d\theta and d^2 +P_l^m(\cos{\theta})/d\theta^2. While there is a simple scaling +relationship between the two forms, the derivatives involving \theta are +heavily used in spherical harmonic expansions and so these routines are +also provided. + + In the functions below, a parameter of type 'gsl_sf_legendre_t' +specifies the type of normalization to use. The possible values are +'GSL_SF_LEGENDRE_NONE' + This specifies the computation of the unnormalized associated + Legendre polynomials P_l^m(x). + +'GSL_SF_LEGENDRE_SCHMIDT' + This specifies the computation of the Schmidt semi-normalized + associated Legendre polynomials S_l^m(x). + +'GSL_SF_LEGENDRE_SPHARM' + This specifies the computation of the spherical harmonic associated + Legendre polynomials Y_l^m(x). + +'GSL_SF_LEGENDRE_FULL' + This specifies the computation of the fully normalized associated + Legendre polynomials N_l^m(x). + + -- Function: int gsl_sf_legendre_array (const gsl_sf_legendre_t NORM, + const size_t LMAX, const double X, double RESULT_ARRAY[]) + -- Function: int gsl_sf_legendre_array_e (const gsl_sf_legendre_t NORM, + const size_t LMAX, const double X, const double CSPHASE, + double RESULT_ARRAY[]) + These functions calculate all normalized associated Legendre + polynomials for 0 \le l \le lmax and 0 \le m \le l for |x| <= 1. + The NORM parameter specifies which normalization is used. The + normalized P_l^m(x) values are stored in RESULT_ARRAY, whose + minimum size can be obtained from calling + 'gsl_sf_legendre_array_n'. The array index of P_l^m(x) is obtained + from calling 'gsl_sf_legendre_array_index(l, m)'. To include or + exclude the Condon-Shortley phase factor of (-1)^m, set the + parameter CSPHASE to either -1 or 1 respectively in the '_e' + function. This factor is included by default. + + -- Function: int gsl_sf_legendre_deriv_array (const gsl_sf_legendre_t + NORM, const size_t LMAX, const double X, double + RESULT_ARRAY[], double RESULT_DERIV_ARRAY[]) + -- Function: int gsl_sf_legendre_deriv_array_e (const gsl_sf_legendre_t + NORM, const size_t LMAX, const double X, const double CSPHASE, + double RESULT_ARRAY[], double RESULT_DERIV_ARRAY[]) + These functions calculate all normalized associated Legendre + functions and their first derivatives up to degree LMAX for |x| < + 1. The parameter NORM specifies the normalization used. The + normalized P_l^m(x) values and their derivatives dP_l^m(x)/dx are + stored in RESULT_ARRAY and RESULT_DERIV_ARRAY respectively. To + include or exclude the Condon-Shortley phase factor of (-1)^m, set + the parameter CSPHASE to either -1 or 1 respectively in the '_e' + function. This factor is included by default. + + -- Function: int gsl_sf_legendre_deriv_alt_array (const + gsl_sf_legendre_t NORM, const size_t LMAX, const double X, + double RESULT_ARRAY[], double RESULT_DERIV_ARRAY[]) + -- Function: int gsl_sf_legendre_deriv_alt_array_e (const + gsl_sf_legendre_t NORM, const size_t LMAX, const double X, + const double CSPHASE, double RESULT_ARRAY[], double + RESULT_DERIV_ARRAY[]) + These functions calculate all normalized associated Legendre + functions and their (alternate) first derivatives up to degree LMAX + for |x| < 1. The normalized P_l^m(x) values and their derivatives + dP_l^m(\cos{\theta})/d\theta are stored in RESULT_ARRAY and + RESULT_DERIV_ARRAY respectively. To include or exclude the + Condon-Shortley phase factor of (-1)^m, set the parameter CSPHASE + to either -1 or 1 respectively in the '_e' function. This factor + is included by default. + + -- Function: int gsl_sf_legendre_deriv2_array (const gsl_sf_legendre_t + NORM, const size_t LMAX, const double X, double + RESULT_ARRAY[], double RESULT_DERIV_ARRAY[], double + RESULT_DERIV2_ARRAY[]) + -- Function: int gsl_sf_legendre_deriv2_array_e (const + gsl_sf_legendre_t NORM, const size_t LMAX, const double X, + const double CSPHASE, double RESULT_ARRAY[], double + RESULT_DERIV_ARRAY[], double RESULT_DERIV2_ARRAY[]) + These functions calculate all normalized associated Legendre + functions and their first and second derivatives up to degree LMAX + for |x| < 1. The parameter NORM specifies the normalization used. + The normalized P_l^m(x), their first derivatives dP_l^m(x)/dx, and + their second derivatives d^2 P_l^m(x)/dx^2 are stored in + RESULT_ARRAY, RESULT_DERIV_ARRAY, and RESULT_DERIV2_ARRAY + respectively. To include or exclude the Condon-Shortley phase + factor of (-1)^m, set the parameter CSPHASE to either -1 or 1 + respectively in the '_e' function. This factor is included by + default. + + -- Function: int gsl_sf_legendre_deriv2_alt_array (const + gsl_sf_legendre_t NORM, const size_t LMAX, const double X, + double RESULT_ARRAY[], double RESULT_DERIV_ARRAY[], double + RESULT_DERIV2_ARRAY[]) + -- Function: int gsl_sf_legendre_deriv2_alt_array_e (const + gsl_sf_legendre_t NORM, const size_t LMAX, const double X, + const double CSPHASE, double RESULT_ARRAY[], double + RESULT_DERIV_ARRAY[], double RESULT_DERIV2_ARRAY[]) + These functions calculate all normalized associated Legendre + functions and their (alternate) first and second derivatives up to + degree LMAX for |x| < 1. The parameter NORM specifies the + normalization used. The normalized P_l^m(x), their first + derivatives dP_l^m(\cos{\theta})/d\theta, and their second + derivatives d^2 P_l^m(\cos{\theta})/d\theta^2 are stored in + RESULT_ARRAY, RESULT_DERIV_ARRAY, and RESULT_DERIV2_ARRAY + respectively. To include or exclude the Condon-Shortley phase + factor of (-1)^m, set the parameter CSPHASE to either -1 or 1 + respectively in the '_e' function. This factor is included by + default. + + -- Function: size_t gsl_sf_legendre_array_n (const size_t LMAX) + This function returns the minimum array size for maximum degree + LMAX needed for the array versions of the associated Legendre + functions. Size is calculated as the total number of P_l^m(x) + functions, plus extra space for precomputing multiplicative factors + used in the recurrence relations. + + -- Function: size_t gsl_sf_legendre_array_index (const size_t L, const + size_t M) + This function returns the index into RESULT_ARRAY, + RESULT_DERIV_ARRAY, or RESULT_DERIV2_ARRAY corresponding to + P_l^m(x), P_l^{'m}(x), or P_l^{''m}(x). The index is given by + l(l+1)/2 + m. -- Function: double gsl_sf_legendre_Plm (int L, int M, double X) -- Function: int gsl_sf_legendre_Plm_e (int L, int M, double X, @@ -4373,13 +4542,6 @@ These routines compute the associated Legendre polynomial P_l^m(x) for m >= 0, l >= m, |x| <= 1. - -- Function: int gsl_sf_legendre_Plm_array (int LMAX, int M, double X, - double RESULT_ARRAY[]) - -- Function: int gsl_sf_legendre_Plm_deriv_array (int LMAX, int M, - double X, double RESULT_ARRAY[], double RESULT_DERIV_ARRAY[]) - These functions compute arrays of Legendre polynomials P_l^m(x) and - derivatives dP_l^m(x)/dx, for m >= 0, l = |m|, ..., lmax, |x| <= 1. - -- Function: double gsl_sf_legendre_sphPlm (int L, int M, double X) -- Function: int gsl_sf_legendre_sphPlm_e (int L, int M, double X, gsl_sf_result * RESULT) @@ -4389,19 +4551,26 @@ satisfy m >= 0, l >= m, |x| <= 1. Theses routines avoid the overflows that occur for the standard normalization of P_l^m(x). + -- Function: int gsl_sf_legendre_Plm_array (int LMAX, int M, double X, + double RESULT_ARRAY[]) + -- Function: int gsl_sf_legendre_Plm_deriv_array (int LMAX, int M, + double X, double RESULT_ARRAY[], double RESULT_DERIV_ARRAY[]) + These functions are now deprecated and will be removed in a future + release; see 'gsl_sf_legendre_array' and + 'gsl_sf_legendre_deriv_array'. + -- Function: int gsl_sf_legendre_sphPlm_array (int LMAX, int M, double X, double RESULT_ARRAY[]) -- Function: int gsl_sf_legendre_sphPlm_deriv_array (int LMAX, int M, double X, double RESULT_ARRAY[], double RESULT_DERIV_ARRAY[]) - These functions compute arrays of normalized associated Legendre - functions \sqrt{(2l+1)/(4\pi)} \sqrt{(l-m)!/(l+m)!} P_l^m(x), and - derivatives, for m >= 0, l = |m|, ..., lmax, |x| <= 1.0 + These functions are now deprecated and will be removed in a future + release; see 'gsl_sf_legendre_array' and + 'gsl_sf_legendre_deriv_array'. -- Function: int gsl_sf_legendre_array_size (const int LMAX, const int M) - This function returns the size of RESULT_ARRAY[] needed for the - array versions of P_l^m(x), LMAX - M + 1. An inline version of - this function is used when 'HAVE_INLINE' is defined. + This function is now deprecated and will be removed in a future + release.  File: gsl-ref.info, Node: Conical Functions, Next: Radial Functions for Hyperbolic Space, Prev: Associated Legendre Polynomials and Spherical Harmonics, Up: Legendre Functions and Spherical Harmonics @@ -4592,9 +4761,11 @@ 7.26.2 Mathieu Function Characteristic Values --------------------------------------------- - -- Function: int gsl_sf_mathieu_a (int N, double Q, gsl_sf_result * + -- Function: int gsl_sf_mathieu_a (int N, double Q) + -- Function: int gsl_sf_mathieu_a_e (int N, double Q, gsl_sf_result * RESULT) - -- Function: int gsl_sf_mathieu_b (int N, double Q, gsl_sf_result * + -- Function: int gsl_sf_mathieu_b (int N, double Q) + -- Function: int gsl_sf_mathieu_b_e (int N, double Q, gsl_sf_result * RESULT) These routines compute the characteristic values a_n(q), b_n(q) of the Mathieu functions ce_n(q,x) and se_n(q,x), respectively. @@ -4615,9 +4786,11 @@ 7.26.3 Angular Mathieu Functions -------------------------------- - -- Function: int gsl_sf_mathieu_ce (int N, double Q, double X, + -- Function: int gsl_sf_mathieu_ce (int N, double Q, double X) + -- Function: int gsl_sf_mathieu_ce_e (int N, double Q, double X, gsl_sf_result * RESULT) - -- Function: int gsl_sf_mathieu_se (int N, double Q, double X, + -- Function: int gsl_sf_mathieu_se (int N, double Q, double X) + -- Function: int gsl_sf_mathieu_se_e (int N, double Q, double X, gsl_sf_result * RESULT) These routines compute the angular Mathieu functions ce_n(q,x) and se_n(q,x), respectively. @@ -4638,9 +4811,11 @@ 7.26.4 Radial Mathieu Functions ------------------------------- - -- Function: int gsl_sf_mathieu_Mc (int J, int N, double Q, double X, + -- Function: int gsl_sf_mathieu_Mc (int J, int N, double Q, double X) + -- Function: int gsl_sf_mathieu_Mc_e (int J, int N, double Q, double X, gsl_sf_result * RESULT) - -- Function: int gsl_sf_mathieu_Ms (int J, int N, double Q, double X, + -- Function: int gsl_sf_mathieu_Ms (int J, int N, double Q, double X) + -- Function: int gsl_sf_mathieu_Ms_e (int J, int N, double Q, double X, gsl_sf_result * RESULT) These routines compute the radial J-th kind Mathieu functions Mc_n^{(j)}(q,x) and Ms_n^{(j)}(q,x) of order N. @@ -5062,7 +5237,7 @@ $ ./a.out status = success - J0(5.0) = -0.177596771314338292 + J0(5.0) = -0.177596771314338264 +/- 0.000000000000000193 exact = -0.177596771314338292 @@ -5089,7 +5264,7 @@ The results of the function are the same, $ ./a.out - J0(5.0) = -0.177596771314338292 + J0(5.0) = -0.177596771314338264 exact = -0.177596771314338292  @@ -5125,6 +5300,11 @@ Y.Y. Luke, Algorithms for the Computation of Mathematical Functions, Academic Press, New York (1977). + S. A. Holmes and W. E. Featherstone, A unified approach to the + Clenshaw summation and the recursive computation of very high + degree and order normalised associated Legendre functions, Journal + of Geodesy, 76, pg. 279-299, 2002. +  File: gsl-ref.info, Node: Vectors and Matrices, Next: Permutations, Prev: Special Functions, Up: Top @@ -5296,8 +5476,8 @@ { gsl_block * b = gsl_block_alloc (100); - printf ("length of block = %u\n", b->size); - printf ("block data address = %#x\n", b->data); + printf ("length of block = %zu\n", b->size); + printf ("block data address = %p\n", b->data); gsl_block_free (b); return 0; @@ -5433,13 +5613,15 @@ 'gsl_check_range' to zero. Due to function-call overhead, there is less benefit in disabling range checking here than for inline functions. - -- Function: double gsl_vector_get (const gsl_vector * V, size_t I) + -- Function: double gsl_vector_get (const gsl_vector * V, const size_t + I) This function returns the I-th element of a vector V. If I lies outside the allowed range of 0 to N-1 then the error handler is invoked and 0 is returned. An inline version of this function is used when 'HAVE_INLINE' is defined. - -- Function: void gsl_vector_set (gsl_vector * V, size_t I, double X) + -- Function: void gsl_vector_set (gsl_vector * V, const size_t I, + double X) This function sets the value of the I-th element of a vector V to X. If I lies outside the allowed range of 0 to N-1 then the error handler is invoked. An inline version of this function is used @@ -6042,15 +6224,15 @@ where TDA is the physical row-length of the matrix. - -- Function: double gsl_matrix_get (const gsl_matrix * M, size_t I, - size_t J) + -- Function: double gsl_matrix_get (const gsl_matrix * M, const size_t + I, const size_t J) This function returns the (i,j)-th element of a matrix M. If I or J lie outside the allowed range of 0 to N1-1 and 0 to N2-1 then the error handler is invoked and 0 is returned. An inline version of this function is used when 'HAVE_INLINE' is defined. - -- Function: void gsl_matrix_set (gsl_matrix * M, size_t I, size_t J, - double X) + -- Function: void gsl_matrix_set (gsl_matrix * M, const size_t I, const + size_t J, double X) This function sets the value of the (i,j)-th element of a matrix M to X. If I or J lies outside the allowed range of 0 to N1-1 and 0 to N2-1 then the error handler is invoked. An inline version of @@ -6694,7 +6876,7 @@ d = gsl_blas_dnrm2 (&column.vector); - printf ("matrix column %d, norm = %g\n", j, d); + printf ("matrix column %zu, norm = %g\n", j, d); } gsl_matrix_free (m); @@ -6925,6 +7107,15 @@ column of the identity matrix. The permutation P and the vector V must have the same length. + -- Function: int gsl_permute_matrix (const gsl_permutation * P, + gsl_matrix * A) + This function applies the permutation P to the matrix A from the + right, A' = A P. The j-th column of the permutation matrix P is + given by the P_j-th column of the identity matrix. This + effectively permutes the columns of A according to the permutation + P, and so the number of columns of A must equal the size of the + permutation P. + -- Function: int gsl_permutation_mul (gsl_permutation * P, const gsl_permutation * PA, const gsl_permutation * PB) This function combines the two permutations PA and PB into a single @@ -7052,262 +7243,3 @@ This function counts the number of cycles in the permutation Q, given in canonical form. - -File: gsl-ref.info, Node: Permutation Examples, Next: Permutation References and Further Reading, Prev: Permutations in cyclic form, Up: Permutations - -9.9 Examples -============ - -The example program below creates a random permutation (by shuffling the -elements of the identity) and finds its inverse. - - #include - #include - #include - #include - - int - main (void) - { - const size_t N = 10; - const gsl_rng_type * T; - gsl_rng * r; - - gsl_permutation * p = gsl_permutation_alloc (N); - gsl_permutation * q = gsl_permutation_alloc (N); - - gsl_rng_env_setup(); - T = gsl_rng_default; - r = gsl_rng_alloc (T); - - printf ("initial permutation:"); - gsl_permutation_init (p); - gsl_permutation_fprintf (stdout, p, " %u"); - printf ("\n"); - - printf (" random permutation:"); - gsl_ran_shuffle (r, p->data, N, sizeof(size_t)); - gsl_permutation_fprintf (stdout, p, " %u"); - printf ("\n"); - - printf ("inverse permutation:"); - gsl_permutation_inverse (q, p); - gsl_permutation_fprintf (stdout, q, " %u"); - printf ("\n"); - - gsl_permutation_free (p); - gsl_permutation_free (q); - gsl_rng_free (r); - - return 0; - } - -Here is the output from the program, - - $ ./a.out - initial permutation: 0 1 2 3 4 5 6 7 8 9 - random permutation: 1 3 5 2 7 6 0 4 9 8 - inverse permutation: 6 0 3 1 7 2 5 4 9 8 - -The random permutation 'p[i]' and its inverse 'q[i]' are related through -the identity 'p[q[i]] = i', which can be verified from the output. - - The next example program steps forwards through all possible third -order permutations, starting from the identity, - - #include - #include - - int - main (void) - { - gsl_permutation * p = gsl_permutation_alloc (3); - - gsl_permutation_init (p); - - do - { - gsl_permutation_fprintf (stdout, p, " %u"); - printf ("\n"); - } - while (gsl_permutation_next(p) == GSL_SUCCESS); - - gsl_permutation_free (p); - - return 0; - } - -Here is the output from the program, - - $ ./a.out - 0 1 2 - 0 2 1 - 1 0 2 - 1 2 0 - 2 0 1 - 2 1 0 - -The permutations are generated in lexicographic order. To reverse the -sequence, begin with the final permutation (which is the reverse of the -identity) and replace 'gsl_permutation_next' with -'gsl_permutation_prev'. - - -File: gsl-ref.info, Node: Permutation References and Further Reading, Prev: Permutation Examples, Up: Permutations - -9.10 References and Further Reading -=================================== - -The subject of permutations is covered extensively in Knuth's 'Sorting -and Searching', - - Donald E. Knuth, 'The Art of Computer Programming: Sorting and - Searching' (Vol 3, 3rd Ed, 1997), Addison-Wesley, ISBN 0201896850. - -For the definition of the "canonical form" see, - - Donald E. Knuth, 'The Art of Computer Programming: Fundamental - Algorithms' (Vol 1, 3rd Ed, 1997), Addison-Wesley, ISBN 0201896850. - Section 1.3.3, 'An Unusual Correspondence', p.178-179. - - -File: gsl-ref.info, Node: Combinations, Next: Multisets, Prev: Permutations, Up: Top - -10 Combinations -*************** - -This chapter describes functions for creating and manipulating -combinations. A combination c is represented by an array of k integers -in the range 0 to n-1, where each value c_i occurs at most once. The -combination c corresponds to indices of k elements chosen from an n -element vector. Combinations are useful for iterating over all -k-element subsets of a set. - - The functions described in this chapter are defined in the header -file 'gsl_combination.h'. - -* Menu: - -* The Combination struct:: -* Combination allocation:: -* Accessing combination elements:: -* Combination properties:: -* Combination functions:: -* Reading and writing combinations:: -* Combination Examples:: -* Combination References and Further Reading:: - - -File: gsl-ref.info, Node: The Combination struct, Next: Combination allocation, Up: Combinations - -10.1 The Combination struct -=========================== - -A combination is defined by a structure containing three components, the -values of n and k, and a pointer to the combination array. The elements -of the combination array are all of type 'size_t', and are stored in -increasing order. The 'gsl_combination' structure looks like this, - - typedef struct - { - size_t n; - size_t k; - size_t *data; - } gsl_combination; - - -File: gsl-ref.info, Node: Combination allocation, Next: Accessing combination elements, Prev: The Combination struct, Up: Combinations - -10.2 Combination allocation -=========================== - - -- Function: gsl_combination * gsl_combination_alloc (size_t N, size_t - K) - This function allocates memory for a new combination with - parameters N, K. The combination is not initialized and its - elements are undefined. Use the function 'gsl_combination_calloc' - if you want to create a combination which is initialized to the - lexicographically first combination. A null pointer is returned if - insufficient memory is available to create the combination. - - -- Function: gsl_combination * gsl_combination_calloc (size_t N, size_t - K) - This function allocates memory for a new combination with - parameters N, K and initializes it to the lexicographically first - combination. A null pointer is returned if insufficient memory is - available to create the combination. - - -- Function: void gsl_combination_init_first (gsl_combination * C) - This function initializes the combination C to the - lexicographically first combination, i.e. (0,1,2,...,k-1). - - -- Function: void gsl_combination_init_last (gsl_combination * C) - This function initializes the combination C to the - lexicographically last combination, i.e. (n-k,n-k+1,...,n-1). - - -- Function: void gsl_combination_free (gsl_combination * C) - This function frees all the memory used by the combination C. - - -- Function: int gsl_combination_memcpy (gsl_combination * DEST, const - gsl_combination * SRC) - This function copies the elements of the combination SRC into the - combination DEST. The two combinations must have the same size. - - -File: gsl-ref.info, Node: Accessing combination elements, Next: Combination properties, Prev: Combination allocation, Up: Combinations - -10.3 Accessing combination elements -=================================== - -The following function can be used to access the elements of a -combination. - - -- Function: size_t gsl_combination_get (const gsl_combination * C, - const size_t I) - This function returns the value of the I-th element of the - combination C. If I lies outside the allowed range of 0 to K-1 - then the error handler is invoked and 0 is returned. An inline - version of this function is used when 'HAVE_INLINE' is defined. - - -File: gsl-ref.info, Node: Combination properties, Next: Combination functions, Prev: Accessing combination elements, Up: Combinations - -10.4 Combination properties -=========================== - - -- Function: size_t gsl_combination_n (const gsl_combination * C) - This function returns the range (n) of the combination C. - - -- Function: size_t gsl_combination_k (const gsl_combination * C) - This function returns the number of elements (k) in the combination - C. - - -- Function: size_t * gsl_combination_data (const gsl_combination * C) - This function returns a pointer to the array of elements in the - combination C. - - -- Function: int gsl_combination_valid (gsl_combination * C) - This function checks that the combination C is valid. The K - elements should lie in the range 0 to N-1, with each value - occurring once at most and in increasing order. - - -File: gsl-ref.info, Node: Combination functions, Next: Reading and writing combinations, Prev: Combination properties, Up: Combinations - -10.5 Combination functions -========================== - - -- Function: int gsl_combination_next (gsl_combination * C) - This function advances the combination C to the next combination in - lexicographic order and returns 'GSL_SUCCESS'. If no further - combinations are available it returns 'GSL_FAILURE' and leaves C - unmodified. Starting with the first combination and repeatedly - applying this function will iterate through all possible - combinations of a given order. - - -- Function: int gsl_combination_prev (gsl_combination * C) - This function steps backwards from the combination C to the - previous combination in lexicographic order, returning - 'GSL_SUCCESS'. If no previous combination is available it returns - 'GSL_FAILURE' and leaves C unmodified. - diff -Nru gsl-doc-1.16/doc/gsl-ref.info-2 gsl-doc-2.3/doc/gsl-ref.info-2 --- gsl-doc-1.16/doc/gsl-ref.info-2 2013-07-19 15:17:39.000000000 +0000 +++ gsl-doc-2.3/doc/gsl-ref.info-2 2016-12-09 00:08:03.000000000 +0000 @@ -2,19 +2,285 @@ gsl-ref.texi. Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The GSL Team. +2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 +The GSL Team. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or -any later version published by the Free Software Foundation; with no -Invariant Sections and no cover texts. A copy of the license is -included in the section entitled "GNU Free Documentation License". +any later version published by the Free Software Foundation; with the +Invariant Sections being "GNU General Public License" and "Free Software +Needs Free Documentation", the Front-Cover text being "A GNU Manual", +and with the Back-Cover Text being (a) (see below). A copy of the +license is included in the section entitled "GNU Free Documentation +License". + + (a) The Back-Cover Text is: "You have the freedom to copy and modify +this GNU Manual." INFO-DIR-SECTION Software libraries START-INFO-DIR-ENTRY * gsl-ref: (gsl-ref). GNU Scientific Library - Reference END-INFO-DIR-ENTRY  +File: gsl-ref.info, Node: Permutation Examples, Next: Permutation References and Further Reading, Prev: Permutations in cyclic form, Up: Permutations + +9.9 Examples +============ + +The example program below creates a random permutation (by shuffling the +elements of the identity) and finds its inverse. + + #include + #include + #include + #include + + int + main (void) + { + const size_t N = 10; + const gsl_rng_type * T; + gsl_rng * r; + + gsl_permutation * p = gsl_permutation_alloc (N); + gsl_permutation * q = gsl_permutation_alloc (N); + + gsl_rng_env_setup(); + T = gsl_rng_default; + r = gsl_rng_alloc (T); + + printf ("initial permutation:"); + gsl_permutation_init (p); + gsl_permutation_fprintf (stdout, p, " %u"); + printf ("\n"); + + printf (" random permutation:"); + gsl_ran_shuffle (r, p->data, N, sizeof(size_t)); + gsl_permutation_fprintf (stdout, p, " %u"); + printf ("\n"); + + printf ("inverse permutation:"); + gsl_permutation_inverse (q, p); + gsl_permutation_fprintf (stdout, q, " %u"); + printf ("\n"); + + gsl_permutation_free (p); + gsl_permutation_free (q); + gsl_rng_free (r); + + return 0; + } + +Here is the output from the program, + + $ ./a.out + initial permutation: 0 1 2 3 4 5 6 7 8 9 + random permutation: 1 3 5 2 7 6 0 4 9 8 + inverse permutation: 6 0 3 1 7 2 5 4 9 8 + +The random permutation 'p[i]' and its inverse 'q[i]' are related through +the identity 'p[q[i]] = i', which can be verified from the output. + + The next example program steps forwards through all possible third +order permutations, starting from the identity, + + #include + #include + + int + main (void) + { + gsl_permutation * p = gsl_permutation_alloc (3); + + gsl_permutation_init (p); + + do + { + gsl_permutation_fprintf (stdout, p, " %u"); + printf ("\n"); + } + while (gsl_permutation_next(p) == GSL_SUCCESS); + + gsl_permutation_free (p); + + return 0; + } + +Here is the output from the program, + + $ ./a.out + 0 1 2 + 0 2 1 + 1 0 2 + 1 2 0 + 2 0 1 + 2 1 0 + +The permutations are generated in lexicographic order. To reverse the +sequence, begin with the final permutation (which is the reverse of the +identity) and replace 'gsl_permutation_next' with +'gsl_permutation_prev'. + + +File: gsl-ref.info, Node: Permutation References and Further Reading, Prev: Permutation Examples, Up: Permutations + +9.10 References and Further Reading +=================================== + +The subject of permutations is covered extensively in Knuth's 'Sorting +and Searching', + + Donald E. Knuth, 'The Art of Computer Programming: Sorting and + Searching' (Vol 3, 3rd Ed, 1997), Addison-Wesley, ISBN 0201896850. + +For the definition of the "canonical form" see, + + Donald E. Knuth, 'The Art of Computer Programming: Fundamental + Algorithms' (Vol 1, 3rd Ed, 1997), Addison-Wesley, ISBN 0201896850. + Section 1.3.3, 'An Unusual Correspondence', p.178-179. + + +File: gsl-ref.info, Node: Combinations, Next: Multisets, Prev: Permutations, Up: Top + +10 Combinations +*************** + +This chapter describes functions for creating and manipulating +combinations. A combination c is represented by an array of k integers +in the range 0 to n-1, where each value c_i occurs at most once. The +combination c corresponds to indices of k elements chosen from an n +element vector. Combinations are useful for iterating over all +k-element subsets of a set. + + The functions described in this chapter are defined in the header +file 'gsl_combination.h'. + +* Menu: + +* The Combination struct:: +* Combination allocation:: +* Accessing combination elements:: +* Combination properties:: +* Combination functions:: +* Reading and writing combinations:: +* Combination Examples:: +* Combination References and Further Reading:: + + +File: gsl-ref.info, Node: The Combination struct, Next: Combination allocation, Up: Combinations + +10.1 The Combination struct +=========================== + +A combination is defined by a structure containing three components, the +values of n and k, and a pointer to the combination array. The elements +of the combination array are all of type 'size_t', and are stored in +increasing order. The 'gsl_combination' structure looks like this, + + typedef struct + { + size_t n; + size_t k; + size_t *data; + } gsl_combination; + + +File: gsl-ref.info, Node: Combination allocation, Next: Accessing combination elements, Prev: The Combination struct, Up: Combinations + +10.2 Combination allocation +=========================== + + -- Function: gsl_combination * gsl_combination_alloc (size_t N, size_t + K) + This function allocates memory for a new combination with + parameters N, K. The combination is not initialized and its + elements are undefined. Use the function 'gsl_combination_calloc' + if you want to create a combination which is initialized to the + lexicographically first combination. A null pointer is returned if + insufficient memory is available to create the combination. + + -- Function: gsl_combination * gsl_combination_calloc (size_t N, size_t + K) + This function allocates memory for a new combination with + parameters N, K and initializes it to the lexicographically first + combination. A null pointer is returned if insufficient memory is + available to create the combination. + + -- Function: void gsl_combination_init_first (gsl_combination * C) + This function initializes the combination C to the + lexicographically first combination, i.e. (0,1,2,...,k-1). + + -- Function: void gsl_combination_init_last (gsl_combination * C) + This function initializes the combination C to the + lexicographically last combination, i.e. (n-k,n-k+1,...,n-1). + + -- Function: void gsl_combination_free (gsl_combination * C) + This function frees all the memory used by the combination C. + + -- Function: int gsl_combination_memcpy (gsl_combination * DEST, const + gsl_combination * SRC) + This function copies the elements of the combination SRC into the + combination DEST. The two combinations must have the same size. + + +File: gsl-ref.info, Node: Accessing combination elements, Next: Combination properties, Prev: Combination allocation, Up: Combinations + +10.3 Accessing combination elements +=================================== + +The following function can be used to access the elements of a +combination. + + -- Function: size_t gsl_combination_get (const gsl_combination * C, + const size_t I) + This function returns the value of the I-th element of the + combination C. If I lies outside the allowed range of 0 to K-1 + then the error handler is invoked and 0 is returned. An inline + version of this function is used when 'HAVE_INLINE' is defined. + + +File: gsl-ref.info, Node: Combination properties, Next: Combination functions, Prev: Accessing combination elements, Up: Combinations + +10.4 Combination properties +=========================== + + -- Function: size_t gsl_combination_n (const gsl_combination * C) + This function returns the range (n) of the combination C. + + -- Function: size_t gsl_combination_k (const gsl_combination * C) + This function returns the number of elements (k) in the combination + C. + + -- Function: size_t * gsl_combination_data (const gsl_combination * C) + This function returns a pointer to the array of elements in the + combination C. + + -- Function: int gsl_combination_valid (gsl_combination * C) + This function checks that the combination C is valid. The K + elements should lie in the range 0 to N-1, with each value + occurring once at most and in increasing order. + + +File: gsl-ref.info, Node: Combination functions, Next: Reading and writing combinations, Prev: Combination properties, Up: Combinations + +10.5 Combination functions +========================== + + -- Function: int gsl_combination_next (gsl_combination * C) + This function advances the combination C to the next combination in + lexicographic order and returns 'GSL_SUCCESS'. If no further + combinations are available it returns 'GSL_FAILURE' and leaves C + unmodified. Starting with the first combination and repeatedly + applying this function will iterate through all possible + combinations of a given order. + + -- Function: int gsl_combination_prev (gsl_combination * C) + This function steps backwards from the combination C to the + previous combination in lexicographic order, returning + 'GSL_SUCCESS'. If no previous combination is available it returns + 'GSL_FAILURE' and leaves C unmodified. + + File: gsl-ref.info, Node: Reading and writing combinations, Next: Combination Examples, Prev: Combination functions, Up: Combinations 10.6 Reading and writing combinations @@ -359,7 +625,7 @@ Here is the output from the program, $ ./a.out - all multisets of {0,1,2,3} by size: + All multisets of {0,1,2,3} by size: { } { 0 } { 1 } @@ -749,11 +1015,11 @@ gsl_sort_smallest (small, k, x, 1, N); - printf ("%d smallest values from %d\n", k, N); + printf ("%zu smallest values from %zu\n", k, N); for (i = 0; i < k; i++) { - printf ("%d: %.18f\n", i, small[i]); + printf ("%zu: %.18f\n", i, small[i]); } free (x); @@ -1527,17 +1793,22 @@ * LU Decomposition:: * QR Decomposition:: -* QR Decomposition with Column Pivoting:: +* QR Decomposition with Column Pivoting:: +* Complete Orthogonal Decomposition:: * Singular Value Decomposition:: * Cholesky Decomposition:: +* Pivoted Cholesky Decomposition:: +* Modified Cholesky Decomposition:: * Tridiagonal Decomposition of Real Symmetric Matrices:: * Tridiagonal Decomposition of Hermitian Matrices:: * Hessenberg Decomposition of Real Matrices:: * Hessenberg-Triangular Decomposition of Real Matrices:: * Bidiagonalization:: +* Givens Rotations:: * Householder Transformations:: * Householder solver for linear systems:: -* Tridiagonal Systems:: +* Tridiagonal Systems:: +* Triangular Systems:: * Balancing:: * Linear Algebra Examples:: * Linear Algebra References and Further Reading:: @@ -1548,8 +1819,8 @@ 14.1 LU Decomposition ===================== -A general square matrix A has an LU decomposition into upper and lower -triangular matrices, +A general N-by-N square matrix A has an LU decomposition into upper and +lower triangular matrices, P A = L U @@ -1571,11 +1842,12 @@ contains L. The diagonal elements of L are unity, and are not stored. - The permutation matrix P is encoded in the permutation P. The j-th - column of the matrix P is given by the k-th column of the identity - matrix, where k = p_j the j-th element of the permutation vector. - The sign of the permutation is given by SIGNUM. It has the value - (-1)^n, where n is the number of interchanges in the permutation. + The permutation matrix P is encoded in the permutation P on output. + The j-th column of the matrix P is given by the k-th column of the + identity matrix, where k = p_j the j-th element of the permutation + vector. The sign of the permutation is given by SIGNUM. It has + the value (-1)^n, where n is the number of interchanges in the + permutation. The algorithm used in the decomposition is Gaussian Elimination with partial pivoting (Golub & Van Loan, 'Matrix Computations', @@ -1601,15 +1873,14 @@ -- Function: int gsl_linalg_LU_refine (const gsl_matrix * A, const gsl_matrix * LU, const gsl_permutation * P, const gsl_vector * - B, gsl_vector * X, gsl_vector * RESIDUAL) + B, gsl_vector * X, gsl_vector * WORK) -- Function: int gsl_linalg_complex_LU_refine (const gsl_matrix_complex * A, const gsl_matrix_complex * LU, const gsl_permutation * P, const gsl_vector_complex * B, gsl_vector_complex * X, - gsl_vector_complex * RESIDUAL) + gsl_vector_complex * WORK) These functions apply an iterative improvement to X, the solution of A x = b, from the precomputed LU decomposition of A into (LU,P). - The initial residual r = A x - b is also computed and stored in - RESIDUAL. + Additional workspace of length N is required in WORK. -- Function: int gsl_linalg_LU_invert (const gsl_matrix * LU, const gsl_permutation * P, gsl_matrix * INVERSE) @@ -1773,13 +2044,13 @@ the solution on output.  -File: gsl-ref.info, Node: QR Decomposition with Column Pivoting, Next: Singular Value Decomposition, Prev: QR Decomposition, Up: Linear Algebra +File: gsl-ref.info, Node: QR Decomposition with Column Pivoting, Next: Complete Orthogonal Decomposition, Prev: QR Decomposition, Up: Linear Algebra 14.3 QR Decomposition with Column Pivoting ========================================== -The QR decomposition can be extended to the rank deficient case by -introducing a column permutation P, +The QR decomposition of an M-by-N matrix A can be extended to the rank +deficient case by introducing a column permutation P, A P = Q R @@ -1788,7 +2059,20 @@ convert the linear system A x = b into the triangular system R y = Q^T b, x = P y, which can be solved by back-substitution and permutation. We denote the QR decomposition with column pivoting by QRP^T since A = Q -R P^T. +R P^T. When A is rank deficient with r = {\rm rank}(A), the matrix R +can be partitioned as + + R = [ R11 R12; 0 R22 ] =~ [ R11 R12; 0 0 ] + + where R_{11} is r-by-r and nonsingular. In this case, a "basic" +least squares solution for the overdetermined system A x = b can be +obtained as + + x = P [ R11^-1 c1 ; 0 ] + + where c_1 consists of the first r elements of Q^T b. This basic +solution is not guaranteed to be the minimum norm solution unless R_{12} += 0 (see *note Complete Orthogonal Decomposition::). -- Function: int gsl_linalg_QRPT_decomp (gsl_matrix * A, gsl_vector * TAU, gsl_permutation * P, int * SIGNUM, gsl_vector * NORM) @@ -1832,6 +2116,33 @@ contain the right-hand side b, which is replaced by the solution on output. + -- Function: int gsl_linalg_QRPT_lssolve (const gsl_matrix * QR, const + gsl_vector * TAU, const gsl_permutation * P, const gsl_vector + * B, gsl_vector * X, gsl_vector * RESIDUAL) + This function finds the least squares solution to the + overdetermined system A x = b where the matrix A has more rows than + columns and is assumed to have full rank. The least squares + solution minimizes the Euclidean norm of the residual, ||b - A x||. + The routine requires as input the QR decomposition of A into (QR, + TAU, P) given by 'gsl_linalg_QRPT_decomp'. The solution is + returned in X. The residual is computed as a by-product and stored + in RESIDUAL. For rank deficient matrices, + 'gsl_linalg_QRPT_lssolve2' should be used instead. + + -- Function: int gsl_linalg_QRPT_lssolve2 (const gsl_matrix * QR, const + gsl_vector * TAU, const gsl_permutation * P, const gsl_vector + * B, const size_t RANK, gsl_vector * X, gsl_vector * RESIDUAL) + This function finds the least squares solution to the + overdetermined system A x = b where the matrix A has more rows than + columns and has rank given by the input RANK. If the user does not + know the rank of A, the routine 'gsl_linalg_QRPT_rank' can be + called to estimate it. The least squares solution is the so-called + "basic" solution discussed above and may not be the minimum norm + solution. The routine requires as input the QR decomposition of A + into (QR, TAU, P) given by 'gsl_linalg_QRPT_decomp'. The solution + is returned in X. The residual is computed as a by-product and + stored in RESIDUAL. + -- Function: int gsl_linalg_QRPT_QRsolve (const gsl_matrix * Q, const gsl_matrix * R, const gsl_permutation * P, const gsl_vector * B, gsl_vector * X) @@ -1859,10 +2170,96 @@ the N-by-N matrix R contained in QR. On input X should contain the right-hand side b, which is replaced by the solution on output. + -- Function: size_t gsl_linalg_QRPT_rank (const gsl_matrix * QR, const + double TOL) + This function estimates the rank of the triangular matrix R + contained in QR. The algorithm simply counts the number of + diagonal elements of R whose absolute value is greater than the + specified tolerance TOL. If the input TOL is negative, a default + value of 20 (M + N) eps(max(|diag(R)|)) is used. + + -- Function: int gsl_linalg_QRPT_rcond (const gsl_matrix * QR, double * + RCOND, gsl_vector * WORK) + This function estimates the reciprocal condition number (using the + 1-norm) of the R factor, stored in the upper triangle of QR. The + reciprocal condition number estimate, defined as 1 / (||R||_1 \cdot + ||R^{-1}||_1), is stored in RCOND. Additional workspace of size 3 + N is required in WORK. + + +File: gsl-ref.info, Node: Complete Orthogonal Decomposition, Next: Singular Value Decomposition, Prev: QR Decomposition with Column Pivoting, Up: Linear Algebra + +14.4 Complete Orthogonal Decomposition +====================================== + +The complete orthogonal decomposition of a M-by-N matrix A is a +generalization of the QR decomposition with column pivoting, given by + + A P = Q [ R11 0 ] Z + [ 0 0 ] + +where P is a N-by-N permutation matrix, Q is M-by-M orthogonal, R_{11} +is r-by-r upper triangular, with r = {\rm rank}(A), and Z is N-by-N +orthogonal. If A has full rank, then R_{11} = R, Z = I and this reduces +to the QR decomposition with column pivoting. The advantage of using +the complete orthogonal decomposition for rank deficient matrices is the +ability to compute the minimum norm solution to the linear least squares +problem Ax = b, which is given by + + x = P Z^T [ R11^-1 c1 ] + [ 0 ] + + and the vector c_1 is the first r elements of Q^T b. + + -- Function: int gsl_linalg_COD_decomp (gsl_matrix * A, gsl_vector * + TAU_Q, gsl_vector * TAU_Z, gsl_permutation * P, size_t * RANK, + gsl_vector * WORK) + -- Function: int gsl_linalg_COD_decomp_e (gsl_matrix * A, gsl_vector * + TAU_Q, gsl_vector * TAU_Z, gsl_permutation * P, double TOL, + size_t * RANK, gsl_vector * WORK) + These functions factor the M-by-N matrix A into the decomposition A + = Q R Z P^T. The rank of A is computed as the number of diagonal + elements of R greater than the tolerance TOL and output in RANK. + If TOL is not specified, a default value is used (see + 'gsl_linalg_QRPT_rank'). On output, the permutation matrix P is + stored in P. The matrix R_{11} is stored in the upper RANK-by-RANK + block of A. The matrices Q and Z are encoded in packed storage in + A on output. The vectors TAU_Q and TAU_Z contain the Householder + scalars corresponding to the matrices Q and Z respectively and must + be of length k = \min(M,N). The vector WORK is additional + workspace of length N. + + -- Function: int gsl_linalg_COD_lssolve (const gsl_matrix * QRZ, const + gsl_vector * TAU_Q, const gsl_vector * TAU_Z, const + gsl_permutation * P, const size_t RANK, const gsl_vector * B, + gsl_vector * X, gsl_vector * RESIDUAL) + This function finds the least squares solution to the + overdetermined system A x = b where the matrix A has more rows than + columns. The least squares solution minimizes the Euclidean norm + of the residual, ||b - A x||. The routine requires as input the + QRZ decomposition of A into (QRZ, TAU_Q, TAU_Z, P, RANK) given by + 'gsl_linalg_COD_decomp'. The solution is returned in X. The + residual is computed as a by-product and stored in RESIDUAL. + + -- Function: int gsl_linalg_COD_unpack (const gsl_matrix * QRZ, const + gsl_vector * TAU_Q, const gsl_vector * TAU_Z, const size_t + RANK, gsl_matrix * Q, gsl_matrix * R, gsl_matrix * Z) + This function unpacks the encoded QRZ decomposition (QRZ, TAU_Q, + TAU_Z, RANK) into the matrices Q, R, and Z, where Q is M-by-M, R is + M-by-N, and Z is N-by-N. + + -- Function: int gsl_linalg_COD_matZ (const gsl_matrix * QRZ, const + gsl_vector * TAU_Z, const size_t RANK, gsl_matrix * A, + gsl_vector * WORK) + This function multiplies the input matrix A on the right by Z, A' = + A Z using the encoded QRZ decomposition (QRZ, TAU_Z, RANK). A must + have N columns but may have any number of rows. Additional + workspace of length M is provided in WORK. +  -File: gsl-ref.info, Node: Singular Value Decomposition, Next: Cholesky Decomposition, Prev: QR Decomposition with Column Pivoting, Up: Linear Algebra +File: gsl-ref.info, Node: Singular Value Decomposition, Next: Cholesky Decomposition, Prev: Complete Orthogonal Decomposition, Up: Linear Algebra -14.4 Singular Value Decomposition +14.5 Singular Value Decomposition ================================= A general rectangular M-by-N matrix A has a singular value decomposition @@ -1947,9 +2344,9 @@ the matrix U which is the input to this function.  -File: gsl-ref.info, Node: Cholesky Decomposition, Next: Tridiagonal Decomposition of Real Symmetric Matrices, Prev: Singular Value Decomposition, Up: Linear Algebra +File: gsl-ref.info, Node: Cholesky Decomposition, Next: Pivoted Cholesky Decomposition, Prev: Singular Value Decomposition, Up: Linear Algebra -14.5 Cholesky Decomposition +14.6 Cholesky Decomposition =========================== A symmetric, positive definite square matrix A has a Cholesky @@ -1965,7 +2362,17 @@ (L y = b, L^T x = y), which can be solved by forward and back-substitution. - -- Function: int gsl_linalg_cholesky_decomp (gsl_matrix * A) + If the matrix A is near singular, it is sometimes possible to reduce +the condition number and recover a more accurate solution vector x by +scaling as + + ( S A S ) ( S^(-1) x ) = S b + + where S is a diagonal matrix whose elements are given by S_{ii} = +1/\sqrt{A_{ii}}. This scaling is also known as Jacobi preconditioning. +There are routines below to solve both the scaled and unscaled systems. + + -- Function: int gsl_linalg_cholesky_decomp1 (gsl_matrix * A) -- Function: int gsl_linalg_complex_cholesky_decomp (gsl_matrix_complex * A) These functions factorize the symmetric, positive-definite square @@ -1974,14 +2381,17 @@ lower-triangular part of the matrix A are used (the upper triangular part is ignored). On output the diagonal and lower triangular part of the input matrix A contain the matrix L, while - the upper triangular part of the input matrix is overwritten with - L^T (the diagonal terms being identical for both L and L^T). If - the matrix is not positive-definite then the decomposition will - fail, returning the error code 'GSL_EDOM'. + the upper triangular part is unmodified. If the matrix is not + positive-definite then the decomposition will fail, returning the + error code 'GSL_EDOM'. When testing whether a matrix is positive-definite, disable the error handler first to avoid triggering an error. + -- Function: int gsl_linalg_cholesky_decomp (gsl_matrix * A) + This function is now deprecated and is provided only for backward + compatibility. + -- Function: int gsl_linalg_cholesky_solve (const gsl_matrix * CHOLESKY, const gsl_vector * B, gsl_vector * X) -- Function: int gsl_linalg_complex_cholesky_solve (const @@ -2011,10 +2421,229 @@ 'gsl_linalg_complex_cholesky_decomp'. On output, the inverse is stored in-place in CHOLESKY. + -- Function: int gsl_linalg_cholesky_decomp2 (gsl_matrix * A, + gsl_vector * S) + This function calculates a diagonal scaling transformation S for + the symmetric, positive-definite square matrix A, and then computes + the Cholesky decomposition S A S = L L^T. On input, the values + from the diagonal and lower-triangular part of the matrix A are + used (the upper triangular part is ignored). On output the + diagonal and lower triangular part of the input matrix A contain + the matrix L, while the upper triangular part of the input matrix + is overwritten with L^T (the diagonal terms being identical for + both L and L^T). If the matrix is not positive-definite then the + decomposition will fail, returning the error code 'GSL_EDOM'. The + diagonal scale factors are stored in S on output. + + When testing whether a matrix is positive-definite, disable the + error handler first to avoid triggering an error. + + -- Function: int gsl_linalg_cholesky_solve2 (const gsl_matrix * + CHOLESKY, const gsl_vector * S, const gsl_vector * B, + gsl_vector * X) + This function solves the system (S A S) (S^{-1} x) = S b using the + Cholesky decomposition of S A S held in the matrix CHOLESKY which + must have been previously computed by + 'gsl_linalg_cholesky_decomp2'. + + -- Function: int gsl_linalg_cholesky_svx2 (const gsl_matrix * CHOLESKY, + const gsl_vector * S, gsl_vector * X) + This function solves the system (S A S) (S^{-1} x) = S b in-place + using the Cholesky decomposition of S A S held in the matrix + CHOLESKY which must have been previously computed by + 'gsl_linalg_cholesky_decomp2'. On input X should contain the + right-hand side b, which is replaced by the solution on output. + + -- Function: int gsl_linalg_cholesky_scale (const gsl_matrix * A, + gsl_vector * S) + This function calculates a diagonal scaling transformation of the + symmetric, positive definite matrix A, such that S A S has a + condition number within a factor of N of the matrix of smallest + possible condition number over all possible diagonal scalings. On + output, S contains the scale factors, given by S_i = + 1/\sqrt{A_{ii}}. For any A_{ii} \le 0, the corresponding scale + factor S_i is set to 1. + + -- Function: int gsl_linalg_cholesky_scale_apply (gsl_matrix * A, const + gsl_vector * S) + This function applies the scaling transformation S to the matrix A. + On output, A is replaced by S A S. + + -- Function: int gsl_linalg_cholesky_rcond (const gsl_matrix * + CHOLESKY, double * RCOND, gsl_vector * WORK) + This function estimates the reciprocal condition number (using the + 1-norm) of the symmetric positive definite matrix A, using its + Cholesky decomposition provided in CHOLESKY. The reciprocal + condition number estimate, defined as 1 / (||A||_1 \cdot + ||A^{-1}||_1), is stored in RCOND. Additional workspace of size 3 + N is required in WORK. +  -File: gsl-ref.info, Node: Tridiagonal Decomposition of Real Symmetric Matrices, Next: Tridiagonal Decomposition of Hermitian Matrices, Prev: Cholesky Decomposition, Up: Linear Algebra +File: gsl-ref.info, Node: Pivoted Cholesky Decomposition, Next: Modified Cholesky Decomposition, Prev: Cholesky Decomposition, Up: Linear Algebra + +14.7 Pivoted Cholesky Decomposition +=================================== + +A symmetric, positive definite square matrix A has an alternate Cholesky +decomposition into a product of a lower unit triangular matrix L, a +diagonal matrix D and L^T, given by L D L^T. This is equivalent to the +Cholesky formulation discussed above, with the standard Cholesky lower +triangular factor given by L D^{1 \over 2}. For ill-conditioned +matrices, it can help to use a pivoting strategy to prevent the entries +of D and L from growing too large, and also ensure D_1 \ge D_2 \ge +\cdots \ge D_n > 0, where D_i are the diagonal entries of D. The final +decomposition is given by + + P A P^T = L D L^T + + where P is a permutation matrix. + + -- Function: int gsl_linalg_pcholesky_decomp (gsl_matrix * A, + gsl_permutation * P) + This function factors the symmetric, positive-definite square + matrix A into the Pivoted Cholesky decomposition P A P^T = L D L^T. + On input, the values from the diagonal and lower-triangular part of + the matrix A are used to construct the factorization. On output + the diagonal of the input matrix A stores the diagonal elements of + D, and the lower triangular portion of A contains the matrix L. + Since L has ones on its diagonal these do not need to be + explicitely stored. The upper triangular portion of A is + unmodified. The permutation matrix P is stored in P on output. -14.6 Tridiagonal Decomposition of Real Symmetric Matrices + -- Function: int gsl_linalg_pcholesky_solve (const gsl_matrix * LDLT, + const gsl_permutation * P, const gsl_vector * B, gsl_vector * + X) + This function solves the system A x = b using the Pivoted Cholesky + decomposition of A held in the matrix LDLT and permutation P which + must have been previously computed by + 'gsl_linalg_pcholesky_decomp'. + + -- Function: int gsl_linalg_pcholesky_svx (const gsl_matrix * LDLT, + const gsl_permutation * P, gsl_vector * X) + This function solves the system A x = b in-place using the Pivoted + Cholesky decomposition of A held in the matrix LDLT and permutation + P which must have been previously computed by + 'gsl_linalg_pcholesky_decomp'. On input, X contains the right hand + side vector b which is replaced by the solution vector on output. + + -- Function: int gsl_linalg_pcholesky_decomp2 (gsl_matrix * A, + gsl_permutation * P, gsl_vector * S) + This function computes the pivoted Cholesky factorization of the + matrix S A S, where the input matrix A is symmetric and positive + definite, and the diagonal scaling matrix S is computed to reduce + the condition number of A as much as possible. See *note Cholesky + Decomposition:: for more information on the matrix S. The Pivoted + Cholesky decomposition satisfies P S A S P^T = L D L^T. On input, + the values from the diagonal and lower-triangular part of the + matrix A are used to construct the factorization. On output the + diagonal of the input matrix A stores the diagonal elements of D, + and the lower triangular portion of A contains the matrix L. Since + L has ones on its diagonal these do not need to be explicitely + stored. The upper triangular portion of A is unmodified. The + permutation matrix P is stored in P on output. The diagonal + scaling transformation is stored in S on output. + + -- Function: int gsl_linalg_pcholesky_solve2 (const gsl_matrix * LDLT, + const gsl_permutation * P, const gsl_vector * S, const + gsl_vector * B, gsl_vector * X) + This function solves the system (S A S) (S^{-1} x) = S b using the + Pivoted Cholesky decomposition of S A S held in the matrix LDLT, + permutation P, and vector S, which must have been previously + computed by 'gsl_linalg_pcholesky_decomp2'. + + -- Function: int gsl_linalg_pcholesky_svx2 (const gsl_matrix * LDLT, + const gsl_permutation * P, const gsl_vector * S, gsl_vector * + X) + This function solves the system (S A S) (S^{-1} x) = S b in-place + using the Pivoted Cholesky decomposition of S A S held in the + matrix LDLT, permutation P and vector S, which must have been + previously computed by 'gsl_linalg_pcholesky_decomp2'. On input, X + contains the right hand side vector b which is replaced by the + solution vector on output. + + -- Function: int gsl_linalg_pcholesky_invert (const gsl_matrix * LDLT, + const gsl_permutation * P, gsl_matrix * AINV) + This function computes the inverse of the matrix A, using the + Pivoted Cholesky decomposition stored in LDLT and P. On output, + the matrix AINV contains A^{-1}. + + -- Function: int gsl_linalg_pcholesky_rcond (const gsl_matrix * LDLT, + const gsl_permutation * P, double * RCOND, gsl_vector * WORK) + This function estimates the reciprocal condition number (using the + 1-norm) of the symmetric positive definite matrix A, using its + pivoted Cholesky decomposition provided in LDLT. The reciprocal + condition number estimate, defined as 1 / (||A||_1 \cdot + ||A^{-1}||_1), is stored in RCOND. Additional workspace of size 3 + N is required in WORK. + + +File: gsl-ref.info, Node: Modified Cholesky Decomposition, Next: Tridiagonal Decomposition of Real Symmetric Matrices, Prev: Pivoted Cholesky Decomposition, Up: Linear Algebra + +14.8 Modified Cholesky Decomposition +==================================== + +The modified Cholesky decomposition is suitable for solving systems A x += b where A is a symmetric indefinite matrix. Such matrices arise in +nonlinear optimization algorithms. The standard Cholesky decomposition +requires a positive definite matrix and would fail in this case. +Instead of resorting to a method like QR or SVD, which do not take into +account the symmetry of the matrix, we can instead introduce a small +perturbation to the matrix A to make it positive definite, and then use +a Cholesky decomposition on the perturbed matrix. The resulting +decomposition satisfies + + P (A + E) P^T = L D L^T + + where P is a permutation matrix, E is a diagonal perturbation matrix, +L is unit lower triangular, and D is diagonal. If A is sufficiently +positive definite, then the perturbation matrix E will be zero and this +method is equivalent to the pivoted Cholesky algorithm. For indefinite +matrices, the perturbation matrix E is computed to ensure that A + E is +positive definite and well conditioned. + + -- Function: int gsl_linalg_mcholesky_decomp (gsl_matrix * A, + gsl_permutation * P, gsl_vector * E) + This function factors the symmetric, indefinite square matrix A + into the Modified Cholesky decomposition P (A + E) P^T = L D L^T. + On input, the values from the diagonal and lower-triangular part of + the matrix A are used to construct the factorization. On output + the diagonal of the input matrix A stores the diagonal elements of + D, and the lower triangular portion of A contains the matrix L. + Since L has ones on its diagonal these do not need to be + explicitely stored. The upper triangular portion of A is + unmodified. The permutation matrix P is stored in P on output. + The diagonal perturbation matrix is stored in E on output. The + parameter E may be set to NULL if it is not required. + + -- Function: int gsl_linalg_mcholesky_solve (const gsl_matrix * LDLT, + const gsl_permutation * P, const gsl_vector * B, gsl_vector * + X) + This function solves the perturbed system (A + E) x = b using the + Cholesky decomposition of A + E held in the matrix LDLT and + permutation P which must have been previously computed by + 'gsl_linalg_mcholesky_decomp'. + + -- Function: int gsl_linalg_mcholesky_svx (const gsl_matrix * LDLT, + const gsl_permutation * P, gsl_vector * X) + This function solves the perturbed system (A + E) x = b in-place + using the Cholesky decomposition of A + E held in the matrix LDLT + and permutation P which must have been previously computed by + 'gsl_linalg_mcholesky_decomp'. On input, X contains the right hand + side vector b which is replaced by the solution vector on output. + + -- Function: int gsl_linalg_mcholesky_rcond (const gsl_matrix * LDLT, + const gsl_permutation * P, double * RCOND, gsl_vector * WORK) + This function estimates the reciprocal condition number (using the + 1-norm) of the perturbed matrix A + E, using its pivoted Cholesky + decomposition provided in LDLT. The reciprocal condition number + estimate, defined as 1 / (||A + E||_1 \cdot ||(A + E)^{-1}||_1), is + stored in RCOND. Additional workspace of size 3 N is required in + WORK. + + +File: gsl-ref.info, Node: Tridiagonal Decomposition of Real Symmetric Matrices, Next: Tridiagonal Decomposition of Hermitian Matrices, Prev: Modified Cholesky Decomposition, Up: Linear Algebra + +14.9 Tridiagonal Decomposition of Real Symmetric Matrices ========================================================= A symmetric matrix A can be factorized by similarity transformations @@ -2052,8 +2681,8 @@  File: gsl-ref.info, Node: Tridiagonal Decomposition of Hermitian Matrices, Next: Hessenberg Decomposition of Real Matrices, Prev: Tridiagonal Decomposition of Real Symmetric Matrices, Up: Linear Algebra -14.7 Tridiagonal Decomposition of Hermitian Matrices -==================================================== +14.10 Tridiagonal Decomposition of Hermitian Matrices +===================================================== A hermitian matrix A can be factorized by similarity transformations into the form, @@ -2092,8 +2721,8 @@  File: gsl-ref.info, Node: Hessenberg Decomposition of Real Matrices, Next: Hessenberg-Triangular Decomposition of Real Matrices, Prev: Tridiagonal Decomposition of Hermitian Matrices, Up: Linear Algebra -14.8 Hessenberg Decomposition of Real Matrices -============================================== +14.11 Hessenberg Decomposition of Real Matrices +=============================================== A general real matrix A can be decomposed by orthogonal similarity transformations into the form @@ -2139,8 +2768,8 @@  File: gsl-ref.info, Node: Hessenberg-Triangular Decomposition of Real Matrices, Next: Bidiagonalization, Prev: Hessenberg Decomposition of Real Matrices, Up: Linear Algebra -14.9 Hessenberg-Triangular Decomposition of Real Matrices -========================================================= +14.12 Hessenberg-Triangular Decomposition of Real Matrices +========================================================== A general real matrix pair (A, B) can be decomposed by orthogonal similarity transformations into the form @@ -2162,9 +2791,9 @@ workspace of length N is needed in WORK.  -File: gsl-ref.info, Node: Bidiagonalization, Next: Householder Transformations, Prev: Hessenberg-Triangular Decomposition of Real Matrices, Up: Linear Algebra +File: gsl-ref.info, Node: Bidiagonalization, Next: Givens Rotations, Prev: Hessenberg-Triangular Decomposition of Real Matrices, Up: Linear Algebra -14.10 Bidiagonalization +14.13 Bidiagonalization ======================= A general matrix A can be factorized by similarity transformations into @@ -2210,9 +2839,37 @@ the diagonal vector DIAG and superdiagonal vector SUPERDIAG.  -File: gsl-ref.info, Node: Householder Transformations, Next: Householder solver for linear systems, Prev: Bidiagonalization, Up: Linear Algebra +File: gsl-ref.info, Node: Givens Rotations, Next: Householder Transformations, Prev: Bidiagonalization, Up: Linear Algebra + +14.14 Givens Rotations +====================== + +A Givens rotation is a rotation in the plane acting on two elements of a +given vector. It can be represented in matrix form as + where the \cos{\theta} and \sin{\theta} appear at the intersection of +the ith and jth rows and columns. When acting on a vector x, +G(i,j,\theta) x performs a rotation of the (i,j) elements of x. Givens +rotations are typically used to introduce zeros in vectors, such as +during the QR decomposition of a matrix. In this case, it is typically +desired to find c and s such that + with r = \sqrt{a^2 + b^2}. + + -- Function: void gsl_linalg_givens (const double A, const double B, + double * C, double * S) + This function computes c = \cos{\theta} and s = \sin{\theta} so + that the Givens matrix G(\theta) acting on the vector (a,b) + produces (r, 0), with r = \sqrt{a^2 + b^2}. + + -- Function: void gsl_linalg_givens_gv (gsl_vector * V, const size_t I, + const size_t J, const double C, const double S) + This function applies the Givens rotation defined by c = + \cos{\theta} and s = \sin{\theta} to the I and J elements of V. On + output, (v(i),v(j)) \leftarrow G(\theta) (v(i),v(j)). -14.11 Householder Transformations + +File: gsl-ref.info, Node: Householder Transformations, Next: Householder solver for linear systems, Prev: Givens Rotations, Up: Linear Algebra + +14.15 Householder Transformations ================================= A Householder transformation is a rank-1 modification of the identity @@ -2226,13 +2883,17 @@ the Householder matrix to create and apply Householder transformations efficiently. - -- Function: double gsl_linalg_householder_transform (gsl_vector * V) + -- Function: double gsl_linalg_householder_transform (gsl_vector * W) -- Function: gsl_complex gsl_linalg_complex_householder_transform - (gsl_vector_complex * V) + (gsl_vector_complex * W) This function prepares a Householder transformation P = I - \tau v v^T which can be used to zero all the elements of the input vector - except the first. On output the transformation is stored in the - vector V and the scalar \tau is returned. + W except the first. On output the Householder vector V is stored + in W and the scalar \tau is returned. The householder vector V is + normalized so that V[0] = 1, however this 1 is not stored in the + output vector. Instead, W[0] is set to the first element of the + transformed vector, so that if u = P w, W[0] = u[0] on output and + the remainder of u is zero. -- Function: int gsl_linalg_householder_hm (double TAU, const gsl_vector * V, gsl_matrix * A) @@ -2261,7 +2922,7 @@  File: gsl-ref.info, Node: Householder solver for linear systems, Next: Tridiagonal Systems, Prev: Householder Transformations, Up: Linear Algebra -14.12 Householder solver for linear systems +14.16 Householder solver for linear systems =========================================== -- Function: int gsl_linalg_HH_solve (gsl_matrix * A, const gsl_vector @@ -2278,9 +2939,9 @@ destroyed by the Householder transformations.  -File: gsl-ref.info, Node: Tridiagonal Systems, Next: Balancing, Prev: Householder solver for linear systems, Up: Linear Algebra +File: gsl-ref.info, Node: Tridiagonal Systems, Next: Triangular Systems, Prev: Householder solver for linear systems, Up: Linear Algebra -14.13 Tridiagonal Systems +14.17 Tridiagonal Systems ========================= The functions described in this section efficiently solve symmetric, @@ -2344,9 +3005,37 @@ ( e_3 0 e_2 d_3 )  -File: gsl-ref.info, Node: Balancing, Next: Linear Algebra Examples, Prev: Tridiagonal Systems, Up: Linear Algebra +File: gsl-ref.info, Node: Triangular Systems, Next: Balancing, Prev: Tridiagonal Systems, Up: Linear Algebra + +14.18 Triangular Systems +======================== + + -- Function: int gsl_linalg_tri_upper_invert (gsl_matrix * T) + -- Function: int gsl_linalg_tri_lower_invert (gsl_matrix * T) + -- Function: int gsl_linalg_tri_upper_unit_invert (gsl_matrix * T) + -- Function: int gsl_linalg_tri_lower_unit_invert (gsl_matrix * T) + These functions calculate the in-place inverse of the triangular + matrix T. When the 'upper' prefix is specified, then the upper + triangle of T is used, and when the 'lower' prefix is specified, + the lower triangle is used. If the 'unit' prefix is specified, + then the diagonal elements of the matrix T are taken as unity and + are not referenced. Otherwise the diagonal elements are used in + the inversion. + + -- Function: int gsl_linalg_tri_upper_rcond (const gsl_matrix * T, + double * RCOND, gsl_vector * WORK) + -- Function: int gsl_linalg_tri_lower_rcond (const gsl_matrix * T, + double * RCOND, gsl_vector * WORK) + These functions estimate the reciprocal condition number, in the + 1-norm, of the upper or lower N-by-N triangular matrix T. The + reciprocal condition number is stored in RCOND on output, and is + defined by 1 / (||T||_1 \cdot ||T^{-1}||_1). Additional workspace + of size 3 N is required in WORK. + + +File: gsl-ref.info, Node: Balancing, Next: Linear Algebra Examples, Prev: Triangular Systems, Up: Linear Algebra -14.14 Balancing +14.19 Balancing =============== The process of balancing a matrix applies similarity transformations to @@ -2369,7 +3058,7 @@  File: gsl-ref.info, Node: Linear Algebra Examples, Next: Linear Algebra References and Further Reading, Prev: Balancing, Up: Linear Algebra -14.15 Examples +14.20 Examples ============== The following program solves the linear system A x = b. The system to @@ -2421,7 +3110,8 @@ Here is the output from the program, - x = -4.05205 + x = + -4.05205 -12.6056 1.66091 8.69377 @@ -2449,7 +3139,7 @@  File: gsl-ref.info, Node: Linear Algebra References and Further Reading, Prev: Linear Algebra Examples, Up: Linear Algebra -14.16 References and Further Reading +14.21 References and Further Reading ==================================== Further information on the algorithms described in this section can be @@ -2491,6 +3181,14 @@ Available from netlib, in the 'lawns' or 'lawnspdf' directories. +The algorithm for estimating a matrix condition number is described in +the following paper, + + N. J. Higham, "FORTRAN codes for estimating the one-norm of a real + or complex matrix, with applications to condition estimation", ACM + Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December + 1988. +  File: gsl-ref.info, Node: Eigensystems, Next: Fast Fourier Transforms, Prev: Linear Algebra, Up: Top @@ -3748,9 +4446,9 @@ wavetable = gsl_fft_complex_wavetable_alloc (n); workspace = gsl_fft_complex_workspace_alloc (n); - for (i = 0; i < wavetable->nf; i++) + for (i = 0; i < (int) wavetable->nf; i++) { - printf ("# factor %d: %d\n", i, + printf ("# factor %d: %zu\n", i, wavetable->factor[i]); } @@ -5001,7 +5699,7 @@ printf ("exact result = % .18f\n", expected); printf ("estimated error = % .18f\n", error); printf ("actual error = % .18f\n", result - expected); - printf ("intervals = %d\n", w->size); + printf ("intervals = %zu\n", w->size); gsl_integration_workspace_free (w); @@ -5012,11 +5710,11 @@ subdivisions. $ ./a.out - result = -3.999999999999973799 + result = -4.000000000000085265 exact result = -4.000000000000000000 - estimated error = 0.000000000000246025 - actual error = 0.000000000000026201 - intervals = 8 + estimated error = 0.000000000000135447 + actual error = -0.000000000000085265 + intervals = 8 In fact, the extrapolation procedure used by 'QAGS' produces an accuracy of almost twice as many digits. The error estimate returned by the @@ -6006,8 +6704,6 @@ 'mrg', $ GSL_RNG_SEED=123 GSL_RNG_TYPE=mrg ./a.out - GSL_RNG_TYPE=mrg - GSL_RNG_SEED=123 0.33050 0.86631 0.32982 @@ -6088,7 +6784,7 @@ * Quasi-random number generator initialization:: * Sampling from a quasi-random number generator:: * Auxiliary quasi-random number generator functions:: -* Saving and resorting quasi-random number generator state:: +* Saving and restoring quasi-random number generator state:: * Quasi-random number generator algorithms:: * Quasi-random number generator examples:: * Quasi-random number references:: @@ -6129,7 +6825,7 @@ 'HAVE_INLINE' is defined.  -File: gsl-ref.info, Node: Auxiliary quasi-random number generator functions, Next: Saving and resorting quasi-random number generator state, Prev: Sampling from a quasi-random number generator, Up: Quasi-Random Sequences +File: gsl-ref.info, Node: Auxiliary quasi-random number generator functions, Next: Saving and restoring quasi-random number generator state, Prev: Sampling from a quasi-random number generator, Up: Quasi-Random Sequences 19.3 Auxiliary quasi-random number generator functions ====================================================== @@ -6149,9 +6845,9 @@ fwrite (state, n, 1, stream);  -File: gsl-ref.info, Node: Saving and resorting quasi-random number generator state, Next: Quasi-random number generator algorithms, Prev: Auxiliary quasi-random number generator functions, Up: Quasi-Random Sequences +File: gsl-ref.info, Node: Saving and restoring quasi-random number generator state, Next: Quasi-random number generator algorithms, Prev: Auxiliary quasi-random number generator functions, Up: Quasi-Random Sequences -19.4 Saving and resorting quasi-random number generator state +19.4 Saving and restoring quasi-random number generator state ============================================================= -- Function: int gsl_qrng_memcpy (gsl_qrng * DEST, const gsl_qrng * @@ -6164,801 +6860,3 @@ This function returns a pointer to a newly created generator which is an exact copy of the generator Q. - -File: gsl-ref.info, Node: Quasi-random number generator algorithms, Next: Quasi-random number generator examples, Prev: Saving and resorting quasi-random number generator state, Up: Quasi-Random Sequences - -19.5 Quasi-random number generator algorithms -============================================= - -The following quasi-random sequence algorithms are available, - - -- Generator: gsl_qrng_niederreiter_2 - This generator uses the algorithm described in Bratley, Fox, - Niederreiter, 'ACM Trans. Model. Comp. Sim.' 2, 195 (1992). It is - valid up to 12 dimensions. - - -- Generator: gsl_qrng_sobol - This generator uses the Sobol sequence described in Antonov, - Saleev, 'USSR Comput. Maths. Math. Phys.' 19, 252 (1980). It is - valid up to 40 dimensions. - - -- Generator: gsl_qrng_halton - -- Generator: gsl_qrng_reversehalton - These generators use the Halton and reverse Halton sequences - described in J.H. Halton, 'Numerische Mathematik' 2, 84-90 (1960) - and B. Vandewoestyne and R. Cools 'Computational and Applied - Mathematics' 189, 1&2, 341-361 (2006). They are valid up to 1229 - dimensions. - - -File: gsl-ref.info, Node: Quasi-random number generator examples, Next: Quasi-random number references, Prev: Quasi-random number generator algorithms, Up: Quasi-Random Sequences - -19.6 Examples -============= - -The following program prints the first 1024 points of the 2-dimensional -Sobol sequence. - - #include - #include - - int - main (void) - { - int i; - gsl_qrng * q = gsl_qrng_alloc (gsl_qrng_sobol, 2); - - for (i = 0; i < 1024; i++) - { - double v[2]; - gsl_qrng_get (q, v); - printf ("%.5f %.5f\n", v[0], v[1]); - } - - gsl_qrng_free (q); - return 0; - } - -Here is the output from the program, - - $ ./a.out - 0.50000 0.50000 - 0.75000 0.25000 - 0.25000 0.75000 - 0.37500 0.37500 - 0.87500 0.87500 - 0.62500 0.12500 - 0.12500 0.62500 - .... - -It can be seen that successive points progressively fill-in the spaces -between previous points. - - -File: gsl-ref.info, Node: Quasi-random number references, Prev: Quasi-random number generator examples, Up: Quasi-Random Sequences - -19.7 References -=============== - -The implementations of the quasi-random sequence routines are based on -the algorithms described in the following paper, - - P. Bratley and B.L. Fox and H. Niederreiter, "Algorithm 738: - Programs to Generate Niederreiter's Low-discrepancy Sequences", - 'ACM Transactions on Mathematical Software', Vol. 20, No. 4, - December, 1994, p. 494-495. - - -File: gsl-ref.info, Node: Random Number Distributions, Next: Statistics, Prev: Quasi-Random Sequences, Up: Top - -20 Random Number Distributions -****************************** - -This chapter describes functions for generating random variates and -computing their probability distributions. Samples from the -distributions described in this chapter can be obtained using any of the -random number generators in the library as an underlying source of -randomness. - - In the simplest cases a non-uniform distribution can be obtained -analytically from the uniform distribution of a random number generator -by applying an appropriate transformation. This method uses one call to -the random number generator. More complicated distributions are created -by the "acceptance-rejection" method, which compares the desired -distribution against a distribution which is similar and known -analytically. This usually requires several samples from the generator. - - The library also provides cumulative distribution functions and -inverse cumulative distribution functions, sometimes referred to as -quantile functions. The cumulative distribution functions and their -inverses are computed separately for the upper and lower tails of the -distribution, allowing full accuracy to be retained for small results. - - The functions for random variates and probability density functions -described in this section are declared in 'gsl_randist.h'. The -corresponding cumulative distribution functions are declared in -'gsl_cdf.h'. - - Note that the discrete random variate functions always return a value -of type 'unsigned int', and on most platforms this has a maximum value -of 2^32-1 ~=~ 4.29e9. They should only be called with a safe range of -parameters (where there is a negligible probability of a variate -exceeding this limit) to prevent incorrect results due to overflow. - -* Menu: - -* Random Number Distribution Introduction:: -* The Gaussian Distribution:: -* The Gaussian Tail Distribution:: -* The Bivariate Gaussian Distribution:: -* The Exponential Distribution:: -* The Laplace Distribution:: -* The Exponential Power Distribution:: -* The Cauchy Distribution:: -* The Rayleigh Distribution:: -* The Rayleigh Tail Distribution:: -* The Landau Distribution:: -* The Levy alpha-Stable Distributions:: -* The Levy skew alpha-Stable Distribution:: -* The Gamma Distribution:: -* The Flat (Uniform) Distribution:: -* The Lognormal Distribution:: -* The Chi-squared Distribution:: -* The F-distribution:: -* The t-distribution:: -* The Beta Distribution:: -* The Logistic Distribution:: -* The Pareto Distribution:: -* Spherical Vector Distributions:: -* The Weibull Distribution:: -* The Type-1 Gumbel Distribution:: -* The Type-2 Gumbel Distribution:: -* The Dirichlet Distribution:: -* General Discrete Distributions:: -* The Poisson Distribution:: -* The Bernoulli Distribution:: -* The Binomial Distribution:: -* The Multinomial Distribution:: -* The Negative Binomial Distribution:: -* The Pascal Distribution:: -* The Geometric Distribution:: -* The Hypergeometric Distribution:: -* The Logarithmic Distribution:: -* Shuffling and Sampling:: -* Random Number Distribution Examples:: -* Random Number Distribution References and Further Reading:: - - -File: gsl-ref.info, Node: Random Number Distribution Introduction, Next: The Gaussian Distribution, Up: Random Number Distributions - -20.1 Introduction -================= - -Continuous random number distributions are defined by a probability -density function, p(x), such that the probability of x occurring in the -infinitesimal range x to x+dx is p dx. - - The cumulative distribution function for the lower tail P(x) is -defined by the integral, - - P(x) = \int_{-\infty}^{x} dx' p(x') - -and gives the probability of a variate taking a value less than x. - - The cumulative distribution function for the upper tail Q(x) is -defined by the integral, - - Q(x) = \int_{x}^{+\infty} dx' p(x') - -and gives the probability of a variate taking a value greater than x. - - The upper and lower cumulative distribution functions are related by -P(x) + Q(x) = 1 and satisfy 0 <= P(x) <= 1, 0 <= Q(x) <= 1. - - The inverse cumulative distributions, x=P^{-1}(P) and x=Q^{-1}(Q) -give the values of x which correspond to a specific value of P or Q. -They can be used to find confidence limits from probability values. - - For discrete distributions the probability of sampling the integer -value k is given by p(k), where \sum_k p(k) = 1. The cumulative -distribution for the lower tail P(k) of a discrete distribution is -defined as, - - P(k) = \sum_{i <= k} p(i) - -where the sum is over the allowed range of the distribution less than or -equal to k. - - The cumulative distribution for the upper tail of a discrete -distribution Q(k) is defined as - - Q(k) = \sum_{i > k} p(i) - -giving the sum of probabilities for all values greater than k. These -two definitions satisfy the identity P(k)+Q(k)=1. - - If the range of the distribution is 1 to n inclusive then P(n)=1, -Q(n)=0 while P(1) = p(1), Q(1)=1-p(1). - - -File: gsl-ref.info, Node: The Gaussian Distribution, Next: The Gaussian Tail Distribution, Prev: Random Number Distribution Introduction, Up: Random Number Distributions - -20.2 The Gaussian Distribution -============================== - - -- Function: double gsl_ran_gaussian (const gsl_rng * R, double SIGMA) - This function returns a Gaussian random variate, with mean zero and - standard deviation SIGMA. The probability distribution for - Gaussian random variates is, - - p(x) dx = {1 \over \sqrt{2 \pi \sigma^2}} \exp (-x^2 / 2\sigma^2) dx - - for x in the range -\infty to +\infty. Use the transformation z = - \mu + x on the numbers returned by 'gsl_ran_gaussian' to obtain a - Gaussian distribution with mean \mu. This function uses the - Box-Muller algorithm which requires two calls to the random number - generator R. - - -- Function: double gsl_ran_gaussian_pdf (double X, double SIGMA) - This function computes the probability density p(x) at X for a - Gaussian distribution with standard deviation SIGMA, using the - formula given above. - - - -- Function: double gsl_ran_gaussian_ziggurat (const gsl_rng * R, - double SIGMA) - -- Function: double gsl_ran_gaussian_ratio_method (const gsl_rng * R, - double SIGMA) - This function computes a Gaussian random variate using the - alternative Marsaglia-Tsang ziggurat and Kinderman-Monahan-Leva - ratio methods. The Ziggurat algorithm is the fastest available - algorithm in most cases. - - -- Function: double gsl_ran_ugaussian (const gsl_rng * R) - -- Function: double gsl_ran_ugaussian_pdf (double X) - -- Function: double gsl_ran_ugaussian_ratio_method (const gsl_rng * R) - These functions compute results for the unit Gaussian distribution. - They are equivalent to the functions above with a standard - deviation of one, SIGMA = 1. - - -- Function: double gsl_cdf_gaussian_P (double X, double SIGMA) - -- Function: double gsl_cdf_gaussian_Q (double X, double SIGMA) - -- Function: double gsl_cdf_gaussian_Pinv (double P, double SIGMA) - -- Function: double gsl_cdf_gaussian_Qinv (double Q, double SIGMA) - These functions compute the cumulative distribution functions P(x), - Q(x) and their inverses for the Gaussian distribution with standard - deviation SIGMA. - - -- Function: double gsl_cdf_ugaussian_P (double X) - -- Function: double gsl_cdf_ugaussian_Q (double X) - -- Function: double gsl_cdf_ugaussian_Pinv (double P) - -- Function: double gsl_cdf_ugaussian_Qinv (double Q) - These functions compute the cumulative distribution functions P(x), - Q(x) and their inverses for the unit Gaussian distribution. - - -File: gsl-ref.info, Node: The Gaussian Tail Distribution, Next: The Bivariate Gaussian Distribution, Prev: The Gaussian Distribution, Up: Random Number Distributions - -20.3 The Gaussian Tail Distribution -=================================== - - -- Function: double gsl_ran_gaussian_tail (const gsl_rng * R, double A, - double SIGMA) - This function provides random variates from the upper tail of a - Gaussian distribution with standard deviation SIGMA. The values - returned are larger than the lower limit A, which must be positive. - The method is based on Marsaglia's famous rectangle-wedge-tail - algorithm (Ann. Math. Stat. 32, 894-899 (1961)), with this - aspect explained in Knuth, v2, 3rd ed, p139,586 (exercise 11). - - The probability distribution for Gaussian tail random variates is, - - p(x) dx = {1 \over N(a;\sigma) \sqrt{2 \pi \sigma^2}} \exp (- x^2/(2 \sigma^2)) dx - - for x > a where N(a;\sigma) is the normalization constant, - - N(a;\sigma) = (1/2) erfc(a / sqrt(2 sigma^2)). - - -- Function: double gsl_ran_gaussian_tail_pdf (double X, double A, - double SIGMA) - This function computes the probability density p(x) at X for a - Gaussian tail distribution with standard deviation SIGMA and lower - limit A, using the formula given above. - - - -- Function: double gsl_ran_ugaussian_tail (const gsl_rng * R, double - A) - -- Function: double gsl_ran_ugaussian_tail_pdf (double X, double A) - These functions compute results for the tail of a unit Gaussian - distribution. They are equivalent to the functions above with a - standard deviation of one, SIGMA = 1. - - -File: gsl-ref.info, Node: The Bivariate Gaussian Distribution, Next: The Exponential Distribution, Prev: The Gaussian Tail Distribution, Up: Random Number Distributions - -20.4 The Bivariate Gaussian Distribution -======================================== - - -- Function: void gsl_ran_bivariate_gaussian (const gsl_rng * R, double - SIGMA_X, double SIGMA_Y, double RHO, double * X, double * Y) - This function generates a pair of correlated Gaussian variates, - with mean zero, correlation coefficient RHO and standard deviations - SIGMA_X and SIGMA_Y in the x and y directions. The probability - distribution for bivariate Gaussian random variates is, - - p(x,y) dx dy = {1 \over 2 \pi \sigma_x \sigma_y \sqrt{1-\rho^2}} \exp (-(x^2/\sigma_x^2 + y^2/\sigma_y^2 - 2 \rho x y/(\sigma_x\sigma_y))/2(1-\rho^2)) dx dy - - for x,y in the range -\infty to +\infty. The correlation - coefficient RHO should lie between 1 and -1. - - -- Function: double gsl_ran_bivariate_gaussian_pdf (double X, double Y, - double SIGMA_X, double SIGMA_Y, double RHO) - This function computes the probability density p(x,y) at (X,Y) for - a bivariate Gaussian distribution with standard deviations SIGMA_X, - SIGMA_Y and correlation coefficient RHO, using the formula given - above. - - - -File: gsl-ref.info, Node: The Exponential Distribution, Next: The Laplace Distribution, Prev: The Bivariate Gaussian Distribution, Up: Random Number Distributions - -20.5 The Exponential Distribution -================================= - - -- Function: double gsl_ran_exponential (const gsl_rng * R, double MU) - This function returns a random variate from the exponential - distribution with mean MU. The distribution is, - - p(x) dx = {1 \over \mu} \exp(-x/\mu) dx - - for x >= 0. - - -- Function: double gsl_ran_exponential_pdf (double X, double MU) - This function computes the probability density p(x) at X for an - exponential distribution with mean MU, using the formula given - above. - - - -- Function: double gsl_cdf_exponential_P (double X, double MU) - -- Function: double gsl_cdf_exponential_Q (double X, double MU) - -- Function: double gsl_cdf_exponential_Pinv (double P, double MU) - -- Function: double gsl_cdf_exponential_Qinv (double Q, double MU) - These functions compute the cumulative distribution functions P(x), - Q(x) and their inverses for the exponential distribution with mean - MU. - - -File: gsl-ref.info, Node: The Laplace Distribution, Next: The Exponential Power Distribution, Prev: The Exponential Distribution, Up: Random Number Distributions - -20.6 The Laplace Distribution -============================= - - -- Function: double gsl_ran_laplace (const gsl_rng * R, double A) - This function returns a random variate from the Laplace - distribution with width A. The distribution is, - - p(x) dx = {1 \over 2 a} \exp(-|x/a|) dx - - for -\infty < x < \infty. - - -- Function: double gsl_ran_laplace_pdf (double X, double A) - This function computes the probability density p(x) at X for a - Laplace distribution with width A, using the formula given above. - - - -- Function: double gsl_cdf_laplace_P (double X, double A) - -- Function: double gsl_cdf_laplace_Q (double X, double A) - -- Function: double gsl_cdf_laplace_Pinv (double P, double A) - -- Function: double gsl_cdf_laplace_Qinv (double Q, double A) - These functions compute the cumulative distribution functions P(x), - Q(x) and their inverses for the Laplace distribution with width A. - - -File: gsl-ref.info, Node: The Exponential Power Distribution, Next: The Cauchy Distribution, Prev: The Laplace Distribution, Up: Random Number Distributions - -20.7 The Exponential Power Distribution -======================================= - - -- Function: double gsl_ran_exppow (const gsl_rng * R, double A, double - B) - This function returns a random variate from the exponential power - distribution with scale parameter A and exponent B. The - distribution is, - - p(x) dx = {1 \over 2 a \Gamma(1+1/b)} \exp(-|x/a|^b) dx - - for x >= 0. For b = 1 this reduces to the Laplace distribution. - For b = 2 it has the same form as a Gaussian distribution, but with - a = \sqrt{2} \sigma. - - -- Function: double gsl_ran_exppow_pdf (double X, double A, double B) - This function computes the probability density p(x) at X for an - exponential power distribution with scale parameter A and exponent - B, using the formula given above. - - - -- Function: double gsl_cdf_exppow_P (double X, double A, double B) - -- Function: double gsl_cdf_exppow_Q (double X, double A, double B) - These functions compute the cumulative distribution functions P(x), - Q(x) for the exponential power distribution with parameters A and - B. - - -File: gsl-ref.info, Node: The Cauchy Distribution, Next: The Rayleigh Distribution, Prev: The Exponential Power Distribution, Up: Random Number Distributions - -20.8 The Cauchy Distribution -============================ - - -- Function: double gsl_ran_cauchy (const gsl_rng * R, double A) - This function returns a random variate from the Cauchy distribution - with scale parameter A. The probability distribution for Cauchy - random variates is, - - p(x) dx = {1 \over a\pi (1 + (x/a)^2) } dx - - for x in the range -\infty to +\infty. The Cauchy distribution is - also known as the Lorentz distribution. - - -- Function: double gsl_ran_cauchy_pdf (double X, double A) - This function computes the probability density p(x) at X for a - Cauchy distribution with scale parameter A, using the formula given - above. - - - -- Function: double gsl_cdf_cauchy_P (double X, double A) - -- Function: double gsl_cdf_cauchy_Q (double X, double A) - -- Function: double gsl_cdf_cauchy_Pinv (double P, double A) - -- Function: double gsl_cdf_cauchy_Qinv (double Q, double A) - These functions compute the cumulative distribution functions P(x), - Q(x) and their inverses for the Cauchy distribution with scale - parameter A. - - -File: gsl-ref.info, Node: The Rayleigh Distribution, Next: The Rayleigh Tail Distribution, Prev: The Cauchy Distribution, Up: Random Number Distributions - -20.9 The Rayleigh Distribution -============================== - - -- Function: double gsl_ran_rayleigh (const gsl_rng * R, double SIGMA) - This function returns a random variate from the Rayleigh - distribution with scale parameter SIGMA. The distribution is, - - p(x) dx = {x \over \sigma^2} \exp(- x^2/(2 \sigma^2)) dx - - for x > 0. - - -- Function: double gsl_ran_rayleigh_pdf (double X, double SIGMA) - This function computes the probability density p(x) at X for a - Rayleigh distribution with scale parameter SIGMA, using the formula - given above. - - - -- Function: double gsl_cdf_rayleigh_P (double X, double SIGMA) - -- Function: double gsl_cdf_rayleigh_Q (double X, double SIGMA) - -- Function: double gsl_cdf_rayleigh_Pinv (double P, double SIGMA) - -- Function: double gsl_cdf_rayleigh_Qinv (double Q, double SIGMA) - These functions compute the cumulative distribution functions P(x), - Q(x) and their inverses for the Rayleigh distribution with scale - parameter SIGMA. - - -File: gsl-ref.info, Node: The Rayleigh Tail Distribution, Next: The Landau Distribution, Prev: The Rayleigh Distribution, Up: Random Number Distributions - -20.10 The Rayleigh Tail Distribution -==================================== - - -- Function: double gsl_ran_rayleigh_tail (const gsl_rng * R, double A, - double SIGMA) - This function returns a random variate from the tail of the - Rayleigh distribution with scale parameter SIGMA and a lower limit - of A. The distribution is, - - p(x) dx = {x \over \sigma^2} \exp ((a^2 - x^2) /(2 \sigma^2)) dx - - for x > a. - - -- Function: double gsl_ran_rayleigh_tail_pdf (double X, double A, - double SIGMA) - This function computes the probability density p(x) at X for a - Rayleigh tail distribution with scale parameter SIGMA and lower - limit A, using the formula given above. - - - -File: gsl-ref.info, Node: The Landau Distribution, Next: The Levy alpha-Stable Distributions, Prev: The Rayleigh Tail Distribution, Up: Random Number Distributions - -20.11 The Landau Distribution -============================= - - -- Function: double gsl_ran_landau (const gsl_rng * R) - This function returns a random variate from the Landau - distribution. The probability distribution for Landau random - variates is defined analytically by the complex integral, - - p(x) = (1/(2 \pi i)) \int_{c-i\infty}^{c+i\infty} ds exp(s log(s) + x s) - For numerical purposes it is more convenient to use the following - equivalent form of the integral, - - p(x) = (1/\pi) \int_0^\infty dt \exp(-t \log(t) - x t) \sin(\pi t). - - -- Function: double gsl_ran_landau_pdf (double X) - This function computes the probability density p(x) at X for the - Landau distribution using an approximation to the formula given - above. - - - -File: gsl-ref.info, Node: The Levy alpha-Stable Distributions, Next: The Levy skew alpha-Stable Distribution, Prev: The Landau Distribution, Up: Random Number Distributions - -20.12 The Levy alpha-Stable Distributions -========================================= - - -- Function: double gsl_ran_levy (const gsl_rng * R, double C, double - ALPHA) - This function returns a random variate from the Levy symmetric - stable distribution with scale C and exponent ALPHA. The symmetric - stable probability distribution is defined by a Fourier transform, - - p(x) = {1 \over 2 \pi} \int_{-\infty}^{+\infty} dt \exp(-it x - |c t|^alpha) - - There is no explicit solution for the form of p(x) and the library - does not define a corresponding 'pdf' function. For \alpha = 1 the - distribution reduces to the Cauchy distribution. For \alpha = 2 it - is a Gaussian distribution with \sigma = \sqrt{2} c. For \alpha < - 1 the tails of the distribution become extremely wide. - - The algorithm only works for 0 < alpha <= 2. - - - -File: gsl-ref.info, Node: The Levy skew alpha-Stable Distribution, Next: The Gamma Distribution, Prev: The Levy alpha-Stable Distributions, Up: Random Number Distributions - -20.13 The Levy skew alpha-Stable Distribution -============================================= - - -- Function: double gsl_ran_levy_skew (const gsl_rng * R, double C, - double ALPHA, double BETA) - This function returns a random variate from the Levy skew stable - distribution with scale C, exponent ALPHA and skewness parameter - BETA. The skewness parameter must lie in the range [-1,1]. The - Levy skew stable probability distribution is defined by a Fourier - transform, - - p(x) = {1 \over 2 \pi} \int_{-\infty}^{+\infty} dt \exp(-it x - |c t|^alpha (1-i beta sign(t) tan(pi alpha/2))) - - When \alpha = 1 the term \tan(\pi \alpha/2) is replaced by - -(2/\pi)\log|t|. There is no explicit solution for the form of - p(x) and the library does not define a corresponding 'pdf' - function. For \alpha = 2 the distribution reduces to a Gaussian - distribution with \sigma = \sqrt{2} c and the skewness parameter - has no effect. For \alpha < 1 the tails of the distribution become - extremely wide. The symmetric distribution corresponds to \beta = - 0. - - The algorithm only works for 0 < alpha <= 2. - - The Levy alpha-stable distributions have the property that if N -alpha-stable variates are drawn from the distribution p(c, \alpha, -\beta) then the sum Y = X_1 + X_2 + \dots + X_N will also be distributed -as an alpha-stable variate, p(N^(1/\alpha) c, \alpha, \beta). - - - -File: gsl-ref.info, Node: The Gamma Distribution, Next: The Flat (Uniform) Distribution, Prev: The Levy skew alpha-Stable Distribution, Up: Random Number Distributions - -20.14 The Gamma Distribution -============================ - - -- Function: double gsl_ran_gamma (const gsl_rng * R, double A, double - B) - This function returns a random variate from the gamma distribution. - The distribution function is, - - p(x) dx = {1 \over \Gamma(a) b^a} x^{a-1} e^{-x/b} dx - - for x > 0. - - The gamma distribution with an integer parameter A is known as the - Erlang distribution. - - The variates are computed using the Marsaglia-Tsang fast gamma - method. This function for this method was previously called - 'gsl_ran_gamma_mt' and can still be accessed using this name. - - -- Function: double gsl_ran_gamma_knuth (const gsl_rng * R, double A, - double B) - This function returns a gamma variate using the algorithms from - Knuth (vol 2). - - -- Function: double gsl_ran_gamma_pdf (double X, double A, double B) - This function computes the probability density p(x) at X for a - gamma distribution with parameters A and B, using the formula given - above. - - - -- Function: double gsl_cdf_gamma_P (double X, double A, double B) - -- Function: double gsl_cdf_gamma_Q (double X, double A, double B) - -- Function: double gsl_cdf_gamma_Pinv (double P, double A, double B) - -- Function: double gsl_cdf_gamma_Qinv (double Q, double A, double B) - These functions compute the cumulative distribution functions P(x), - Q(x) and their inverses for the gamma distribution with parameters - A and B. - - -File: gsl-ref.info, Node: The Flat (Uniform) Distribution, Next: The Lognormal Distribution, Prev: The Gamma Distribution, Up: Random Number Distributions - -20.15 The Flat (Uniform) Distribution -===================================== - - -- Function: double gsl_ran_flat (const gsl_rng * R, double A, double - B) - This function returns a random variate from the flat (uniform) - distribution from A to B. The distribution is, - - p(x) dx = {1 \over (b-a)} dx - - if a <= x < b and 0 otherwise. - - -- Function: double gsl_ran_flat_pdf (double X, double A, double B) - This function computes the probability density p(x) at X for a - uniform distribution from A to B, using the formula given above. - - - -- Function: double gsl_cdf_flat_P (double X, double A, double B) - -- Function: double gsl_cdf_flat_Q (double X, double A, double B) - -- Function: double gsl_cdf_flat_Pinv (double P, double A, double B) - -- Function: double gsl_cdf_flat_Qinv (double Q, double A, double B) - These functions compute the cumulative distribution functions P(x), - Q(x) and their inverses for a uniform distribution from A to B. - - -File: gsl-ref.info, Node: The Lognormal Distribution, Next: The Chi-squared Distribution, Prev: The Flat (Uniform) Distribution, Up: Random Number Distributions - -20.16 The Lognormal Distribution -================================ - - -- Function: double gsl_ran_lognormal (const gsl_rng * R, double ZETA, - double SIGMA) - This function returns a random variate from the lognormal - distribution. The distribution function is, - - p(x) dx = {1 \over x \sqrt{2 \pi \sigma^2} } \exp(-(\ln(x) - \zeta)^2/2 \sigma^2) dx - - for x > 0. - - -- Function: double gsl_ran_lognormal_pdf (double X, double ZETA, - double SIGMA) - This function computes the probability density p(x) at X for a - lognormal distribution with parameters ZETA and SIGMA, using the - formula given above. - - - -- Function: double gsl_cdf_lognormal_P (double X, double ZETA, double - SIGMA) - -- Function: double gsl_cdf_lognormal_Q (double X, double ZETA, double - SIGMA) - -- Function: double gsl_cdf_lognormal_Pinv (double P, double ZETA, - double SIGMA) - -- Function: double gsl_cdf_lognormal_Qinv (double Q, double ZETA, - double SIGMA) - These functions compute the cumulative distribution functions P(x), - Q(x) and their inverses for the lognormal distribution with - parameters ZETA and SIGMA. - - -File: gsl-ref.info, Node: The Chi-squared Distribution, Next: The F-distribution, Prev: The Lognormal Distribution, Up: Random Number Distributions - -20.17 The Chi-squared Distribution -================================== - -The chi-squared distribution arises in statistics. If Y_i are n -independent Gaussian random variates with unit variance then the -sum-of-squares, - - X_i = \sum_i Y_i^2 - -has a chi-squared distribution with n degrees of freedom. - - -- Function: double gsl_ran_chisq (const gsl_rng * R, double NU) - This function returns a random variate from the chi-squared - distribution with NU degrees of freedom. The distribution function - is, - - p(x) dx = {1 \over 2 \Gamma(\nu/2) } (x/2)^{\nu/2 - 1} \exp(-x/2) dx - - for x >= 0. - - -- Function: double gsl_ran_chisq_pdf (double X, double NU) - This function computes the probability density p(x) at X for a - chi-squared distribution with NU degrees of freedom, using the - formula given above. - - - -- Function: double gsl_cdf_chisq_P (double X, double NU) - -- Function: double gsl_cdf_chisq_Q (double X, double NU) - -- Function: double gsl_cdf_chisq_Pinv (double P, double NU) - -- Function: double gsl_cdf_chisq_Qinv (double Q, double NU) - These functions compute the cumulative distribution functions P(x), - Q(x) and their inverses for the chi-squared distribution with NU - degrees of freedom. - - -File: gsl-ref.info, Node: The F-distribution, Next: The t-distribution, Prev: The Chi-squared Distribution, Up: Random Number Distributions - -20.18 The F-distribution -======================== - -The F-distribution arises in statistics. If Y_1 and Y_2 are chi-squared -deviates with \nu_1 and \nu_2 degrees of freedom then the ratio, - - X = { (Y_1 / \nu_1) \over (Y_2 / \nu_2) } - -has an F-distribution F(x;\nu_1,\nu_2). - - -- Function: double gsl_ran_fdist (const gsl_rng * R, double NU1, - double NU2) - This function returns a random variate from the F-distribution with - degrees of freedom NU1 and NU2. The distribution function is, - - p(x) dx = - { \Gamma((\nu_1 + \nu_2)/2) - \over \Gamma(\nu_1/2) \Gamma(\nu_2/2) } - \nu_1^{\nu_1/2} \nu_2^{\nu_2/2} - x^{\nu_1/2 - 1} (\nu_2 + \nu_1 x)^{-\nu_1/2 -\nu_2/2} - - for x >= 0. - - -- Function: double gsl_ran_fdist_pdf (double X, double NU1, double - NU2) - This function computes the probability density p(x) at X for an - F-distribution with NU1 and NU2 degrees of freedom, using the - formula given above. - - - -- Function: double gsl_cdf_fdist_P (double X, double NU1, double NU2) - -- Function: double gsl_cdf_fdist_Q (double X, double NU1, double NU2) - -- Function: double gsl_cdf_fdist_Pinv (double P, double NU1, double - NU2) - -- Function: double gsl_cdf_fdist_Qinv (double Q, double NU1, double - NU2) - These functions compute the cumulative distribution functions P(x), - Q(x) and their inverses for the F-distribution with NU1 and NU2 - degrees of freedom. - - -File: gsl-ref.info, Node: The t-distribution, Next: The Beta Distribution, Prev: The F-distribution, Up: Random Number Distributions - -20.19 The t-distribution -======================== - -The t-distribution arises in statistics. If Y_1 has a normal -distribution and Y_2 has a chi-squared distribution with \nu degrees of -freedom then the ratio, - - X = { Y_1 \over \sqrt{Y_2 / \nu} } - -has a t-distribution t(x;\nu) with \nu degrees of freedom. - - -- Function: double gsl_ran_tdist (const gsl_rng * R, double NU) - This function returns a random variate from the t-distribution. - The distribution function is, - - p(x) dx = {\Gamma((\nu + 1)/2) \over \sqrt{\pi \nu} \Gamma(\nu/2)} - (1 + x^2/\nu)^{-(\nu + 1)/2} dx - - for -\infty < x < +\infty. - - -- Function: double gsl_ran_tdist_pdf (double X, double NU) - This function computes the probability density p(x) at X for a - t-distribution with NU degrees of freedom, using the formula given - above. - - - -- Function: double gsl_cdf_tdist_P (double X, double NU) - -- Function: double gsl_cdf_tdist_Q (double X, double NU) - -- Function: double gsl_cdf_tdist_Pinv (double P, double NU) - -- Function: double gsl_cdf_tdist_Qinv (double Q, double NU) - These functions compute the cumulative distribution functions P(x), - Q(x) and their inverses for the t-distribution with NU degrees of - freedom. - diff -Nru gsl-doc-1.16/doc/gsl-ref.info-3 gsl-doc-2.3/doc/gsl-ref.info-3 --- gsl-doc-1.16/doc/gsl-ref.info-3 2013-07-19 15:17:44.000000000 +0000 +++ gsl-doc-2.3/doc/gsl-ref.info-3 2016-12-09 00:08:06.000000000 +0000 @@ -2,7384 +2,7276 @@ gsl-ref.texi. Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The GSL Team. +2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 +The GSL Team. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or -any later version published by the Free Software Foundation; with no -Invariant Sections and no cover texts. A copy of the license is -included in the section entitled "GNU Free Documentation License". +any later version published by the Free Software Foundation; with the +Invariant Sections being "GNU General Public License" and "Free Software +Needs Free Documentation", the Front-Cover text being "A GNU Manual", +and with the Back-Cover Text being (a) (see below). A copy of the +license is included in the section entitled "GNU Free Documentation +License". + + (a) The Back-Cover Text is: "You have the freedom to copy and modify +this GNU Manual." INFO-DIR-SECTION Software libraries START-INFO-DIR-ENTRY * gsl-ref: (gsl-ref). GNU Scientific Library - Reference END-INFO-DIR-ENTRY  -File: gsl-ref.info, Node: The Beta Distribution, Next: The Logistic Distribution, Prev: The t-distribution, Up: Random Number Distributions +File: gsl-ref.info, Node: Quasi-random number generator algorithms, Next: Quasi-random number generator examples, Prev: Saving and restoring quasi-random number generator state, Up: Quasi-Random Sequences -20.20 The Beta Distribution -=========================== +19.5 Quasi-random number generator algorithms +============================================= - -- Function: double gsl_ran_beta (const gsl_rng * R, double A, double - B) - This function returns a random variate from the beta distribution. - The distribution function is, +The following quasi-random sequence algorithms are available, - p(x) dx = {\Gamma(a+b) \over \Gamma(a) \Gamma(b)} x^{a-1} (1-x)^{b-1} dx + -- Generator: gsl_qrng_niederreiter_2 + This generator uses the algorithm described in Bratley, Fox, + Niederreiter, 'ACM Trans. Model. Comp. Sim.' 2, 195 (1992). It is + valid up to 12 dimensions. - for 0 <= x <= 1. + -- Generator: gsl_qrng_sobol + This generator uses the Sobol sequence described in Antonov, + Saleev, 'USSR Comput. Maths. Math. Phys.' 19, 252 (1980). It is + valid up to 40 dimensions. - -- Function: double gsl_ran_beta_pdf (double X, double A, double B) - This function computes the probability density p(x) at X for a beta - distribution with parameters A and B, using the formula given - above. + -- Generator: gsl_qrng_halton + -- Generator: gsl_qrng_reversehalton + These generators use the Halton and reverse Halton sequences + described in J.H. Halton, 'Numerische Mathematik' 2, 84-90 (1960) + and B. Vandewoestyne and R. Cools 'Computational and Applied + Mathematics' 189, 1&2, 341-361 (2006). They are valid up to 1229 + dimensions. + +File: gsl-ref.info, Node: Quasi-random number generator examples, Next: Quasi-random number references, Prev: Quasi-random number generator algorithms, Up: Quasi-Random Sequences - -- Function: double gsl_cdf_beta_P (double X, double A, double B) - -- Function: double gsl_cdf_beta_Q (double X, double A, double B) - -- Function: double gsl_cdf_beta_Pinv (double P, double A, double B) - -- Function: double gsl_cdf_beta_Qinv (double Q, double A, double B) - These functions compute the cumulative distribution functions P(x), - Q(x) and their inverses for the beta distribution with parameters A - and B. +19.6 Examples +============= - -File: gsl-ref.info, Node: The Logistic Distribution, Next: The Pareto Distribution, Prev: The Beta Distribution, Up: Random Number Distributions +The following program prints the first 1024 points of the 2-dimensional +Sobol sequence. -20.21 The Logistic Distribution -=============================== + #include + #include - -- Function: double gsl_ran_logistic (const gsl_rng * R, double A) - This function returns a random variate from the logistic - distribution. The distribution function is, + int + main (void) + { + int i; + gsl_qrng * q = gsl_qrng_alloc (gsl_qrng_sobol, 2); - p(x) dx = { \exp(-x/a) \over a (1 + \exp(-x/a))^2 } dx + for (i = 0; i < 1024; i++) + { + double v[2]; + gsl_qrng_get (q, v); + printf ("%.5f %.5f\n", v[0], v[1]); + } - for -\infty < x < +\infty. + gsl_qrng_free (q); + return 0; + } - -- Function: double gsl_ran_logistic_pdf (double X, double A) - This function computes the probability density p(x) at X for a - logistic distribution with scale parameter A, using the formula - given above. +Here is the output from the program, + $ ./a.out + 0.50000 0.50000 + 0.75000 0.25000 + 0.25000 0.75000 + 0.37500 0.37500 + 0.87500 0.87500 + 0.62500 0.12500 + 0.12500 0.62500 + .... - -- Function: double gsl_cdf_logistic_P (double X, double A) - -- Function: double gsl_cdf_logistic_Q (double X, double A) - -- Function: double gsl_cdf_logistic_Pinv (double P, double A) - -- Function: double gsl_cdf_logistic_Qinv (double Q, double A) - These functions compute the cumulative distribution functions P(x), - Q(x) and their inverses for the logistic distribution with scale - parameter A. +It can be seen that successive points progressively fill-in the spaces +between previous points.  -File: gsl-ref.info, Node: The Pareto Distribution, Next: Spherical Vector Distributions, Prev: The Logistic Distribution, Up: Random Number Distributions +File: gsl-ref.info, Node: Quasi-random number references, Prev: Quasi-random number generator examples, Up: Quasi-Random Sequences -20.22 The Pareto Distribution -============================= +19.7 References +=============== - -- Function: double gsl_ran_pareto (const gsl_rng * R, double A, double - B) - This function returns a random variate from the Pareto distribution - of order A. The distribution function is, +The implementations of the quasi-random sequence routines are based on +the algorithms described in the following paper, - p(x) dx = (a/b) / (x/b)^{a+1} dx + P. Bratley and B.L. Fox and H. Niederreiter, "Algorithm 738: + Programs to Generate Niederreiter's Low-discrepancy Sequences", + 'ACM Transactions on Mathematical Software', Vol. 20, No. 4, + December, 1994, p. 494-495. + + +File: gsl-ref.info, Node: Random Number Distributions, Next: Statistics, Prev: Quasi-Random Sequences, Up: Top + +20 Random Number Distributions +****************************** + +This chapter describes functions for generating random variates and +computing their probability distributions. Samples from the +distributions described in this chapter can be obtained using any of the +random number generators in the library as an underlying source of +randomness. + + In the simplest cases a non-uniform distribution can be obtained +analytically from the uniform distribution of a random number generator +by applying an appropriate transformation. This method uses one call to +the random number generator. More complicated distributions are created +by the "acceptance-rejection" method, which compares the desired +distribution against a distribution which is similar and known +analytically. This usually requires several samples from the generator. + + The library also provides cumulative distribution functions and +inverse cumulative distribution functions, sometimes referred to as +quantile functions. The cumulative distribution functions and their +inverses are computed separately for the upper and lower tails of the +distribution, allowing full accuracy to be retained for small results. + + The functions for random variates and probability density functions +described in this section are declared in 'gsl_randist.h'. The +corresponding cumulative distribution functions are declared in +'gsl_cdf.h'. + + Note that the discrete random variate functions always return a value +of type 'unsigned int', and on most platforms this has a maximum value +of 2^32-1 ~=~ 4.29e9. They should only be called with a safe range of +parameters (where there is a negligible probability of a variate +exceeding this limit) to prevent incorrect results due to overflow. - for x >= b. +* Menu: - -- Function: double gsl_ran_pareto_pdf (double X, double A, double B) +* Random Number Distribution Introduction:: +* The Gaussian Distribution:: +* The Gaussian Tail Distribution:: +* The Bivariate Gaussian Distribution:: +* The Multivariate Gaussian Distribution:: +* The Exponential Distribution:: +* The Laplace Distribution:: +* The Exponential Power Distribution:: +* The Cauchy Distribution:: +* The Rayleigh Distribution:: +* The Rayleigh Tail Distribution:: +* The Landau Distribution:: +* The Levy alpha-Stable Distributions:: +* The Levy skew alpha-Stable Distribution:: +* The Gamma Distribution:: +* The Flat (Uniform) Distribution:: +* The Lognormal Distribution:: +* The Chi-squared Distribution:: +* The F-distribution:: +* The t-distribution:: +* The Beta Distribution:: +* The Logistic Distribution:: +* The Pareto Distribution:: +* Spherical Vector Distributions:: +* The Weibull Distribution:: +* The Type-1 Gumbel Distribution:: +* The Type-2 Gumbel Distribution:: +* The Dirichlet Distribution:: +* General Discrete Distributions:: +* The Poisson Distribution:: +* The Bernoulli Distribution:: +* The Binomial Distribution:: +* The Multinomial Distribution:: +* The Negative Binomial Distribution:: +* The Pascal Distribution:: +* The Geometric Distribution:: +* The Hypergeometric Distribution:: +* The Logarithmic Distribution:: +* Shuffling and Sampling:: +* Random Number Distribution Examples:: +* Random Number Distribution References and Further Reading:: + + +File: gsl-ref.info, Node: Random Number Distribution Introduction, Next: The Gaussian Distribution, Up: Random Number Distributions + +20.1 Introduction +================= + +Continuous random number distributions are defined by a probability +density function, p(x), such that the probability of x occurring in the +infinitesimal range x to x+dx is p dx. + + The cumulative distribution function for the lower tail P(x) is +defined by the integral, + + P(x) = \int_{-\infty}^{x} dx' p(x') + +and gives the probability of a variate taking a value less than x. + + The cumulative distribution function for the upper tail Q(x) is +defined by the integral, + + Q(x) = \int_{x}^{+\infty} dx' p(x') + +and gives the probability of a variate taking a value greater than x. + + The upper and lower cumulative distribution functions are related by +P(x) + Q(x) = 1 and satisfy 0 <= P(x) <= 1, 0 <= Q(x) <= 1. + + The inverse cumulative distributions, x=P^{-1}(P) and x=Q^{-1}(Q) +give the values of x which correspond to a specific value of P or Q. +They can be used to find confidence limits from probability values. + + For discrete distributions the probability of sampling the integer +value k is given by p(k), where \sum_k p(k) = 1. The cumulative +distribution for the lower tail P(k) of a discrete distribution is +defined as, + + P(k) = \sum_{i <= k} p(i) + +where the sum is over the allowed range of the distribution less than or +equal to k. + + The cumulative distribution for the upper tail of a discrete +distribution Q(k) is defined as + + Q(k) = \sum_{i > k} p(i) + +giving the sum of probabilities for all values greater than k. These +two definitions satisfy the identity P(k)+Q(k)=1. + + If the range of the distribution is 1 to n inclusive then P(n)=1, +Q(n)=0 while P(1) = p(1), Q(1)=1-p(1). + + +File: gsl-ref.info, Node: The Gaussian Distribution, Next: The Gaussian Tail Distribution, Prev: Random Number Distribution Introduction, Up: Random Number Distributions + +20.2 The Gaussian Distribution +============================== + + -- Function: double gsl_ran_gaussian (const gsl_rng * R, double SIGMA) + This function returns a Gaussian random variate, with mean zero and + standard deviation SIGMA. The probability distribution for + Gaussian random variates is, + + p(x) dx = {1 \over \sqrt{2 \pi \sigma^2}} \exp (-x^2 / 2\sigma^2) dx + + for x in the range -\infty to +\infty. Use the transformation z = + \mu + x on the numbers returned by 'gsl_ran_gaussian' to obtain a + Gaussian distribution with mean \mu. This function uses the + Box-Muller algorithm which requires two calls to the random number + generator R. + + -- Function: double gsl_ran_gaussian_pdf (double X, double SIGMA) This function computes the probability density p(x) at X for a - Pareto distribution with exponent A and scale B, using the formula - given above. + Gaussian distribution with standard deviation SIGMA, using the + formula given above. - -- Function: double gsl_cdf_pareto_P (double X, double A, double B) - -- Function: double gsl_cdf_pareto_Q (double X, double A, double B) - -- Function: double gsl_cdf_pareto_Pinv (double P, double A, double B) - -- Function: double gsl_cdf_pareto_Qinv (double Q, double A, double B) + -- Function: double gsl_ran_gaussian_ziggurat (const gsl_rng * R, + double SIGMA) + -- Function: double gsl_ran_gaussian_ratio_method (const gsl_rng * R, + double SIGMA) + This function computes a Gaussian random variate using the + alternative Marsaglia-Tsang ziggurat and Kinderman-Monahan-Leva + ratio methods. The Ziggurat algorithm is the fastest available + algorithm in most cases. + + -- Function: double gsl_ran_ugaussian (const gsl_rng * R) + -- Function: double gsl_ran_ugaussian_pdf (double X) + -- Function: double gsl_ran_ugaussian_ratio_method (const gsl_rng * R) + These functions compute results for the unit Gaussian distribution. + They are equivalent to the functions above with a standard + deviation of one, SIGMA = 1. + + -- Function: double gsl_cdf_gaussian_P (double X, double SIGMA) + -- Function: double gsl_cdf_gaussian_Q (double X, double SIGMA) + -- Function: double gsl_cdf_gaussian_Pinv (double P, double SIGMA) + -- Function: double gsl_cdf_gaussian_Qinv (double Q, double SIGMA) These functions compute the cumulative distribution functions P(x), - Q(x) and their inverses for the Pareto distribution with exponent A - and scale B. + Q(x) and their inverses for the Gaussian distribution with standard + deviation SIGMA. + + -- Function: double gsl_cdf_ugaussian_P (double X) + -- Function: double gsl_cdf_ugaussian_Q (double X) + -- Function: double gsl_cdf_ugaussian_Pinv (double P) + -- Function: double gsl_cdf_ugaussian_Qinv (double Q) + These functions compute the cumulative distribution functions P(x), + Q(x) and their inverses for the unit Gaussian distribution.  -File: gsl-ref.info, Node: Spherical Vector Distributions, Next: The Weibull Distribution, Prev: The Pareto Distribution, Up: Random Number Distributions +File: gsl-ref.info, Node: The Gaussian Tail Distribution, Next: The Bivariate Gaussian Distribution, Prev: The Gaussian Distribution, Up: Random Number Distributions -20.23 Spherical Vector Distributions -==================================== +20.3 The Gaussian Tail Distribution +=================================== -The spherical distributions generate random vectors, located on a -spherical surface. They can be used as random directions, for example -in the steps of a random walk. + -- Function: double gsl_ran_gaussian_tail (const gsl_rng * R, double A, + double SIGMA) + This function provides random variates from the upper tail of a + Gaussian distribution with standard deviation SIGMA. The values + returned are larger than the lower limit A, which must be positive. + The method is based on Marsaglia's famous rectangle-wedge-tail + algorithm (Ann. Math. Stat. 32, 894-899 (1961)), with this + aspect explained in Knuth, v2, 3rd ed, p139,586 (exercise 11). - -- Function: void gsl_ran_dir_2d (const gsl_rng * R, double * X, double - * Y) - -- Function: void gsl_ran_dir_2d_trig_method (const gsl_rng * R, double - * X, double * Y) - This function returns a random direction vector v = (X,Y) in two - dimensions. The vector is normalized such that |v|^2 = x^2 + y^2 = - 1. The obvious way to do this is to take a uniform random number - between 0 and 2\pi and let X and Y be the sine and cosine - respectively. Two trig functions would have been expensive in the - old days, but with modern hardware implementations, this is - sometimes the fastest way to go. This is the case for the Pentium - (but not the case for the Sun Sparcstation). One can avoid the - trig evaluations by choosing X and Y in the interior of a unit - circle (choose them at random from the interior of the enclosing - square, and then reject those that are outside the unit circle), - and then dividing by \sqrt{x^2 + y^2}. A much cleverer approach, - attributed to von Neumann (See Knuth, v2, 3rd ed, p140, exercise - 23), requires neither trig nor a square root. In this approach, U - and V are chosen at random from the interior of a unit circle, and - then x=(u^2-v^2)/(u^2+v^2) and y=2uv/(u^2+v^2). + The probability distribution for Gaussian tail random variates is, - -- Function: void gsl_ran_dir_3d (const gsl_rng * R, double * X, double - * Y, double * Z) - This function returns a random direction vector v = (X,Y,Z) in - three dimensions. The vector is normalized such that |v|^2 = x^2 + - y^2 + z^2 = 1. The method employed is due to Robert E. Knop (CACM - 13, 326 (1970)), and explained in Knuth, v2, 3rd ed, p136. It uses - the surprising fact that the distribution projected along any axis - is actually uniform (this is only true for 3 dimensions). + p(x) dx = {1 \over N(a;\sigma) \sqrt{2 \pi \sigma^2}} \exp (- x^2/(2 \sigma^2)) dx - -- Function: void gsl_ran_dir_nd (const gsl_rng * R, size_t N, double * - X) + for x > a where N(a;\sigma) is the normalization constant, + + N(a;\sigma) = (1/2) erfc(a / sqrt(2 sigma^2)). + + -- Function: double gsl_ran_gaussian_tail_pdf (double X, double A, + double SIGMA) + This function computes the probability density p(x) at X for a + Gaussian tail distribution with standard deviation SIGMA and lower + limit A, using the formula given above. - This function returns a random direction vector v = - (x_1,x_2,...,x_n) in N dimensions. The vector is normalized such - that |v|^2 = x_1^2 + x_2^2 + ... + x_n^2 = 1. The method uses the - fact that a multivariate Gaussian distribution is spherically - symmetric. Each component is generated to have a Gaussian - distribution, and then the components are normalized. The method - is described by Knuth, v2, 3rd ed, p135-136, and attributed to G. - W. Brown, Modern Mathematics for the Engineer (1956). + + -- Function: double gsl_ran_ugaussian_tail (const gsl_rng * R, double + A) + -- Function: double gsl_ran_ugaussian_tail_pdf (double X, double A) + These functions compute results for the tail of a unit Gaussian + distribution. They are equivalent to the functions above with a + standard deviation of one, SIGMA = 1.  -File: gsl-ref.info, Node: The Weibull Distribution, Next: The Type-1 Gumbel Distribution, Prev: Spherical Vector Distributions, Up: Random Number Distributions +File: gsl-ref.info, Node: The Bivariate Gaussian Distribution, Next: The Multivariate Gaussian Distribution, Prev: The Gaussian Tail Distribution, Up: Random Number Distributions -20.24 The Weibull Distribution -============================== +20.4 The Bivariate Gaussian Distribution +======================================== - -- Function: double gsl_ran_weibull (const gsl_rng * R, double A, - double B) - This function returns a random variate from the Weibull - distribution. The distribution function is, + -- Function: void gsl_ran_bivariate_gaussian (const gsl_rng * R, double + SIGMA_X, double SIGMA_Y, double RHO, double * X, double * Y) + This function generates a pair of correlated Gaussian variates, + with mean zero, correlation coefficient RHO and standard deviations + SIGMA_X and SIGMA_Y in the x and y directions. The probability + distribution for bivariate Gaussian random variates is, + + p(x,y) dx dy = {1 \over 2 \pi \sigma_x \sigma_y \sqrt{1-\rho^2}} \exp (-(x^2/\sigma_x^2 + y^2/\sigma_y^2 - 2 \rho x y/(\sigma_x\sigma_y))/2(1-\rho^2)) dx dy + + for x,y in the range -\infty to +\infty. The correlation + coefficient RHO should lie between 1 and -1. + + -- Function: double gsl_ran_bivariate_gaussian_pdf (double X, double Y, + double SIGMA_X, double SIGMA_Y, double RHO) + This function computes the probability density p(x,y) at (X,Y) for + a bivariate Gaussian distribution with standard deviations SIGMA_X, + SIGMA_Y and correlation coefficient RHO, using the formula given + above. - p(x) dx = {b \over a^b} x^{b-1} \exp(-(x/a)^b) dx + + +File: gsl-ref.info, Node: The Multivariate Gaussian Distribution, Next: The Exponential Distribution, Prev: The Bivariate Gaussian Distribution, Up: Random Number Distributions + +20.5 The Multivariate Gaussian Distribution +=========================================== + + -- Function: int gsl_ran_multivariate_gaussian (const gsl_rng * R, + const gsl_vector * MU, const gsl_matrix * L, gsl_vector * + RESULT) + This function generates a random vector satisfying the + k-dimensional multivariate Gaussian distribution with mean \mu and + variance-covariance matrix \Sigma. On input, the k-vector \mu is + given in MU, and the Cholesky factor of the k-by-k matrix \Sigma = + L L^T is given in the lower triangle of L, as output from + 'gsl_linalg_cholesky_decomp'. The random vector is stored in + RESULT on output. The probability distribution for multivariate + Gaussian random variates is + + p(x_1,...,x_k) dx_1 ... dx_k = {1 \over \sqrt{(2 \pi)^k |\Sigma|} \exp \left(-{1 \over 2} (x - \mu)^T \Sigma^{-1} (x - \mu)\right) dx_1 \dots dx_k + + -- Function: int gsl_ran_multivariate_gaussian_pdf (const gsl_vector * + X, const gsl_vector * MU, const gsl_matrix * L, double * + RESULT, gsl_vector * WORK) + -- Function: int gsl_ran_multivariate_gaussian_log_pdf (const + gsl_vector * X, const gsl_vector * MU, const gsl_matrix * L, + double * RESULT, gsl_vector * WORK) + These functions compute p(x) or \log{p(x)} at the point X, using + mean vector MU and variance-covariance matrix specified by its + Cholesky factor L using the formula above. Additional workspace of + length k is required in WORK. + + -- Function: int gsl_ran_multivariate_gaussian_mean (const gsl_matrix * + X, gsl_vector * MU_HAT) + Given a set of n samples X_j from a k-dimensional multivariate + Gaussian distribution, this function computes the maximum + likelihood estimate of the mean of the distribution, given by + + \Hat{\mu} = {1 \over n} \sum_{j=1}^n X_j + + The samples X_1,X_2,\dots,X_n are given in the n-by-k matrix X, and + the maximum likelihood estimate of the mean is stored in MU_HAT on + output. + + -- Function: int gsl_ran_multivariate_gaussian_vcov (const gsl_matrix * + X, gsl_matrix * SIGMA_HAT) + Given a set of n samples X_j from a k-dimensional multivariate + Gaussian distribution, this function computes the maximum + likelihood estimate of the variance-covariance matrix of the + distribution, given by + + \Hat{\Sigma} = {1 \over n} \sum_{j=1}^n \left( X_j - \Hat{\mu} \right) \left( X_j - \Hat{\mu} \right)^T + + The samples X_1,X_2,\dots,X_n are given in the n-by-k matrix X and + the maximum likelihood estimate of the variance-covariance matrix + is stored in SIGMA_HAT on output. + + +File: gsl-ref.info, Node: The Exponential Distribution, Next: The Laplace Distribution, Prev: The Multivariate Gaussian Distribution, Up: Random Number Distributions + +20.6 The Exponential Distribution +================================= + + -- Function: double gsl_ran_exponential (const gsl_rng * R, double MU) + This function returns a random variate from the exponential + distribution with mean MU. The distribution is, + + p(x) dx = {1 \over \mu} \exp(-x/\mu) dx for x >= 0. - -- Function: double gsl_ran_weibull_pdf (double X, double A, double B) - This function computes the probability density p(x) at X for a - Weibull distribution with scale A and exponent B, using the formula - given above. + -- Function: double gsl_ran_exponential_pdf (double X, double MU) + This function computes the probability density p(x) at X for an + exponential distribution with mean MU, using the formula given + above. - -- Function: double gsl_cdf_weibull_P (double X, double A, double B) - -- Function: double gsl_cdf_weibull_Q (double X, double A, double B) - -- Function: double gsl_cdf_weibull_Pinv (double P, double A, double B) - -- Function: double gsl_cdf_weibull_Qinv (double Q, double A, double B) + -- Function: double gsl_cdf_exponential_P (double X, double MU) + -- Function: double gsl_cdf_exponential_Q (double X, double MU) + -- Function: double gsl_cdf_exponential_Pinv (double P, double MU) + -- Function: double gsl_cdf_exponential_Qinv (double Q, double MU) These functions compute the cumulative distribution functions P(x), - Q(x) and their inverses for the Weibull distribution with scale A - and exponent B. + Q(x) and their inverses for the exponential distribution with mean + MU.  -File: gsl-ref.info, Node: The Type-1 Gumbel Distribution, Next: The Type-2 Gumbel Distribution, Prev: The Weibull Distribution, Up: Random Number Distributions +File: gsl-ref.info, Node: The Laplace Distribution, Next: The Exponential Power Distribution, Prev: The Exponential Distribution, Up: Random Number Distributions -20.25 The Type-1 Gumbel Distribution -==================================== +20.7 The Laplace Distribution +============================= - -- Function: double gsl_ran_gumbel1 (const gsl_rng * R, double A, - double B) - This function returns a random variate from the Type-1 Gumbel - distribution. The Type-1 Gumbel distribution function is, + -- Function: double gsl_ran_laplace (const gsl_rng * R, double A) + This function returns a random variate from the Laplace + distribution with width A. The distribution is, - p(x) dx = a b \exp(-(b \exp(-ax) + ax)) dx + p(x) dx = {1 \over 2 a} \exp(-|x/a|) dx for -\infty < x < \infty. - -- Function: double gsl_ran_gumbel1_pdf (double X, double A, double B) + -- Function: double gsl_ran_laplace_pdf (double X, double A) This function computes the probability density p(x) at X for a - Type-1 Gumbel distribution with parameters A and B, using the - formula given above. + Laplace distribution with width A, using the formula given above. - -- Function: double gsl_cdf_gumbel1_P (double X, double A, double B) - -- Function: double gsl_cdf_gumbel1_Q (double X, double A, double B) - -- Function: double gsl_cdf_gumbel1_Pinv (double P, double A, double B) - -- Function: double gsl_cdf_gumbel1_Qinv (double Q, double A, double B) + -- Function: double gsl_cdf_laplace_P (double X, double A) + -- Function: double gsl_cdf_laplace_Q (double X, double A) + -- Function: double gsl_cdf_laplace_Pinv (double P, double A) + -- Function: double gsl_cdf_laplace_Qinv (double Q, double A) These functions compute the cumulative distribution functions P(x), - Q(x) and their inverses for the Type-1 Gumbel distribution with - parameters A and B. + Q(x) and their inverses for the Laplace distribution with width A.  -File: gsl-ref.info, Node: The Type-2 Gumbel Distribution, Next: The Dirichlet Distribution, Prev: The Type-1 Gumbel Distribution, Up: Random Number Distributions +File: gsl-ref.info, Node: The Exponential Power Distribution, Next: The Cauchy Distribution, Prev: The Laplace Distribution, Up: Random Number Distributions -20.26 The Type-2 Gumbel Distribution -==================================== +20.8 The Exponential Power Distribution +======================================= - -- Function: double gsl_ran_gumbel2 (const gsl_rng * R, double A, - double B) - This function returns a random variate from the Type-2 Gumbel - distribution. The Type-2 Gumbel distribution function is, + -- Function: double gsl_ran_exppow (const gsl_rng * R, double A, double + B) + This function returns a random variate from the exponential power + distribution with scale parameter A and exponent B. The + distribution is, - p(x) dx = a b x^{-a-1} \exp(-b x^{-a}) dx + p(x) dx = {1 \over 2 a \Gamma(1+1/b)} \exp(-|x/a|^b) dx - for 0 < x < \infty. + for x >= 0. For b = 1 this reduces to the Laplace distribution. + For b = 2 it has the same form as a Gaussian distribution, but with + a = \sqrt{2} \sigma. - -- Function: double gsl_ran_gumbel2_pdf (double X, double A, double B) - This function computes the probability density p(x) at X for a - Type-2 Gumbel distribution with parameters A and B, using the - formula given above. + -- Function: double gsl_ran_exppow_pdf (double X, double A, double B) + This function computes the probability density p(x) at X for an + exponential power distribution with scale parameter A and exponent + B, using the formula given above. - -- Function: double gsl_cdf_gumbel2_P (double X, double A, double B) - -- Function: double gsl_cdf_gumbel2_Q (double X, double A, double B) - -- Function: double gsl_cdf_gumbel2_Pinv (double P, double A, double B) - -- Function: double gsl_cdf_gumbel2_Qinv (double Q, double A, double B) + -- Function: double gsl_cdf_exppow_P (double X, double A, double B) + -- Function: double gsl_cdf_exppow_Q (double X, double A, double B) These functions compute the cumulative distribution functions P(x), - Q(x) and their inverses for the Type-2 Gumbel distribution with - parameters A and B. + Q(x) for the exponential power distribution with parameters A and + B.  -File: gsl-ref.info, Node: The Dirichlet Distribution, Next: General Discrete Distributions, Prev: The Type-2 Gumbel Distribution, Up: Random Number Distributions - -20.27 The Dirichlet Distribution -================================ +File: gsl-ref.info, Node: The Cauchy Distribution, Next: The Rayleigh Distribution, Prev: The Exponential Power Distribution, Up: Random Number Distributions - -- Function: void gsl_ran_dirichlet (const gsl_rng * R, size_t K, const - double ALPHA[], double THETA[]) - This function returns an array of K random variates from a - Dirichlet distribution of order K-1. The distribution function is +20.9 The Cauchy Distribution +============================ - p(\theta_1, ..., \theta_K) d\theta_1 ... d\theta_K = - (1/Z) \prod_{i=1}^K \theta_i^{\alpha_i - 1} \delta(1 -\sum_{i=1}^K \theta_i) d\theta_1 ... d\theta_K + -- Function: double gsl_ran_cauchy (const gsl_rng * R, double A) + This function returns a random variate from the Cauchy distribution + with scale parameter A. The probability distribution for Cauchy + random variates is, - for theta_i >= 0 and alpha_i > 0. The delta function ensures that - \sum \theta_i = 1. The normalization factor Z is + p(x) dx = {1 \over a\pi (1 + (x/a)^2) } dx - Z = {\prod_{i=1}^K \Gamma(\alpha_i)} / {\Gamma( \sum_{i=1}^K \alpha_i)} + for x in the range -\infty to +\infty. The Cauchy distribution is + also known as the Lorentz distribution. - The random variates are generated by sampling K values from gamma - distributions with parameters a=alpha_i, b=1, and renormalizing. - See A.M. Law, W.D. Kelton, 'Simulation Modeling and Analysis' - (1991). + -- Function: double gsl_ran_cauchy_pdf (double X, double A) + This function computes the probability density p(x) at X for a + Cauchy distribution with scale parameter A, using the formula given + above. - -- Function: double gsl_ran_dirichlet_pdf (size_t K, const double - ALPHA[], const double THETA[]) - This function computes the probability density p(\theta_1, ... , - \theta_K) at THETA[K] for a Dirichlet distribution with parameters - ALPHA[K], using the formula given above. - -- Function: double gsl_ran_dirichlet_lnpdf (size_t K, const double - ALPHA[], const double THETA[]) - This function computes the logarithm of the probability density - p(\theta_1, ... , \theta_K) for a Dirichlet distribution with - parameters ALPHA[K]. + -- Function: double gsl_cdf_cauchy_P (double X, double A) + -- Function: double gsl_cdf_cauchy_Q (double X, double A) + -- Function: double gsl_cdf_cauchy_Pinv (double P, double A) + -- Function: double gsl_cdf_cauchy_Qinv (double Q, double A) + These functions compute the cumulative distribution functions P(x), + Q(x) and their inverses for the Cauchy distribution with scale + parameter A.  -File: gsl-ref.info, Node: General Discrete Distributions, Next: The Poisson Distribution, Prev: The Dirichlet Distribution, Up: Random Number Distributions +File: gsl-ref.info, Node: The Rayleigh Distribution, Next: The Rayleigh Tail Distribution, Prev: The Cauchy Distribution, Up: Random Number Distributions -20.28 General Discrete Distributions -==================================== +20.10 The Rayleigh Distribution +=============================== -Given K discrete events with different probabilities P[k], produce a -random value k consistent with its probability. + -- Function: double gsl_ran_rayleigh (const gsl_rng * R, double SIGMA) + This function returns a random variate from the Rayleigh + distribution with scale parameter SIGMA. The distribution is, - The obvious way to do this is to preprocess the probability list by -generating a cumulative probability array with K+1 elements: + p(x) dx = {x \over \sigma^2} \exp(- x^2/(2 \sigma^2)) dx - C[0] = 0 - C[k+1] = C[k]+P[k]. + for x > 0. -Note that this construction produces C[K]=1. Now choose a uniform -deviate u between 0 and 1, and find the value of k such that C[k] <= u < -C[k+1]. Although this in principle requires of order \log K steps per -random number generation, they are fast steps, and if you use something -like \lfloor uK \rfloor as a starting point, you can often do pretty -well. - - But faster methods have been devised. Again, the idea is to -preprocess the probability list, and save the result in some form of -lookup table; then the individual calls for a random discrete event can -go rapidly. An approach invented by G. Marsaglia (Generating discrete -random variables in a computer, Comm ACM 6, 37-38 (1963)) is very -clever, and readers interested in examples of good algorithm design are -directed to this short and well-written paper. Unfortunately, for large -K, Marsaglia's lookup table can be quite large. - - A much better approach is due to Alastair J. Walker (An efficient -method for generating discrete random variables with general -distributions, ACM Trans on Mathematical Software 3, 253-256 (1977); see -also Knuth, v2, 3rd ed, p120-121,139). This requires two lookup tables, -one floating point and one integer, but both only of size K. After -preprocessing, the random numbers are generated in O(1) time, even for -large K. The preprocessing suggested by Walker requires O(K^2) effort, -but that is not actually necessary, and the implementation provided here -only takes O(K) effort. In general, more preprocessing leads to faster -generation of the individual random numbers, but a diminishing return is -reached pretty early. Knuth points out that the optimal preprocessing -is combinatorially difficult for large K. + -- Function: double gsl_ran_rayleigh_pdf (double X, double SIGMA) + This function computes the probability density p(x) at X for a + Rayleigh distribution with scale parameter SIGMA, using the formula + given above. - This method can be used to speed up some of the discrete random -number generators below, such as the binomial distribution. To use it -for something like the Poisson Distribution, a modification would have -to be made, since it only takes a finite set of K outcomes. - -- Function: gsl_ran_discrete_t * gsl_ran_discrete_preproc (size_t K, - const double * P) - This function returns a pointer to a structure that contains the - lookup table for the discrete random number generator. The array - P[] contains the probabilities of the discrete events; these array - elements must all be positive, but they needn't add up to one (so - you can think of them more generally as "weights")--the - preprocessor will normalize appropriately. This return value is - used as an argument for the 'gsl_ran_discrete' function below. + -- Function: double gsl_cdf_rayleigh_P (double X, double SIGMA) + -- Function: double gsl_cdf_rayleigh_Q (double X, double SIGMA) + -- Function: double gsl_cdf_rayleigh_Pinv (double P, double SIGMA) + -- Function: double gsl_cdf_rayleigh_Qinv (double Q, double SIGMA) + These functions compute the cumulative distribution functions P(x), + Q(x) and their inverses for the Rayleigh distribution with scale + parameter SIGMA. - -- Function: size_t gsl_ran_discrete (const gsl_rng * R, const - gsl_ran_discrete_t * G) - After the preprocessor, above, has been called, you use this - function to get the discrete random numbers. + +File: gsl-ref.info, Node: The Rayleigh Tail Distribution, Next: The Landau Distribution, Prev: The Rayleigh Distribution, Up: Random Number Distributions - -- Function: double gsl_ran_discrete_pdf (size_t K, const - gsl_ran_discrete_t * G) - Returns the probability P[k] of observing the variable K. Since - P[k] is not stored as part of the lookup table, it must be - recomputed; this computation takes O(K), so if K is large and you - care about the original array P[k] used to create the lookup table, - then you should just keep this original array P[k] around. +20.11 The Rayleigh Tail Distribution +==================================== - -- Function: void gsl_ran_discrete_free (gsl_ran_discrete_t * G) - De-allocates the lookup table pointed to by G. + -- Function: double gsl_ran_rayleigh_tail (const gsl_rng * R, double A, + double SIGMA) + This function returns a random variate from the tail of the + Rayleigh distribution with scale parameter SIGMA and a lower limit + of A. The distribution is, - -File: gsl-ref.info, Node: The Poisson Distribution, Next: The Bernoulli Distribution, Prev: General Discrete Distributions, Up: Random Number Distributions + p(x) dx = {x \over \sigma^2} \exp ((a^2 - x^2) /(2 \sigma^2)) dx -20.29 The Poisson Distribution -============================== + for x > a. - -- Function: unsigned int gsl_ran_poisson (const gsl_rng * R, double - MU) - This function returns a random integer from the Poisson - distribution with mean MU. The probability distribution for - Poisson variates is, + -- Function: double gsl_ran_rayleigh_tail_pdf (double X, double A, + double SIGMA) + This function computes the probability density p(x) at X for a + Rayleigh tail distribution with scale parameter SIGMA and lower + limit A, using the formula given above. - p(k) = {\mu^k \over k!} \exp(-\mu) - for k >= 0. + +File: gsl-ref.info, Node: The Landau Distribution, Next: The Levy alpha-Stable Distributions, Prev: The Rayleigh Tail Distribution, Up: Random Number Distributions - -- Function: double gsl_ran_poisson_pdf (unsigned int K, double MU) - This function computes the probability p(k) of obtaining K from a - Poisson distribution with mean MU, using the formula given above. +20.12 The Landau Distribution +============================= + -- Function: double gsl_ran_landau (const gsl_rng * R) + This function returns a random variate from the Landau + distribution. The probability distribution for Landau random + variates is defined analytically by the complex integral, + + p(x) = (1/(2 \pi i)) \int_{c-i\infty}^{c+i\infty} ds exp(s log(s) + x s) + For numerical purposes it is more convenient to use the following + equivalent form of the integral, + + p(x) = (1/\pi) \int_0^\infty dt \exp(-t \log(t) - x t) \sin(\pi t). + + -- Function: double gsl_ran_landau_pdf (double X) + This function computes the probability density p(x) at X for the + Landau distribution using an approximation to the formula given + above. - -- Function: double gsl_cdf_poisson_P (unsigned int K, double MU) - -- Function: double gsl_cdf_poisson_Q (unsigned int K, double MU) - These functions compute the cumulative distribution functions P(k), - Q(k) for the Poisson distribution with parameter MU.  -File: gsl-ref.info, Node: The Bernoulli Distribution, Next: The Binomial Distribution, Prev: The Poisson Distribution, Up: Random Number Distributions +File: gsl-ref.info, Node: The Levy alpha-Stable Distributions, Next: The Levy skew alpha-Stable Distribution, Prev: The Landau Distribution, Up: Random Number Distributions -20.30 The Bernoulli Distribution -================================ +20.13 The Levy alpha-Stable Distributions +========================================= - -- Function: unsigned int gsl_ran_bernoulli (const gsl_rng * R, double - P) - This function returns either 0 or 1, the result of a Bernoulli - trial with probability P. The probability distribution for a - Bernoulli trial is, + -- Function: double gsl_ran_levy (const gsl_rng * R, double C, double + ALPHA) + This function returns a random variate from the Levy symmetric + stable distribution with scale C and exponent ALPHA. The symmetric + stable probability distribution is defined by a Fourier transform, - p(0) = 1 - p - p(1) = p + p(x) = {1 \over 2 \pi} \int_{-\infty}^{+\infty} dt \exp(-it x - |c t|^alpha) - -- Function: double gsl_ran_bernoulli_pdf (unsigned int K, double P) - This function computes the probability p(k) of obtaining K from a - Bernoulli distribution with probability parameter P, using the - formula given above. + There is no explicit solution for the form of p(x) and the library + does not define a corresponding 'pdf' function. For \alpha = 1 the + distribution reduces to the Cauchy distribution. For \alpha = 2 it + is a Gaussian distribution with \sigma = \sqrt{2} c. For \alpha < + 1 the tails of the distribution become extremely wide. + + The algorithm only works for 0 < alpha <= 2.  -File: gsl-ref.info, Node: The Binomial Distribution, Next: The Multinomial Distribution, Prev: The Bernoulli Distribution, Up: Random Number Distributions +File: gsl-ref.info, Node: The Levy skew alpha-Stable Distribution, Next: The Gamma Distribution, Prev: The Levy alpha-Stable Distributions, Up: Random Number Distributions -20.31 The Binomial Distribution -=============================== +20.14 The Levy skew alpha-Stable Distribution +============================================= - -- Function: unsigned int gsl_ran_binomial (const gsl_rng * R, double - P, unsigned int N) - This function returns a random integer from the binomial - distribution, the number of successes in N independent trials with - probability P. The probability distribution for binomial variates - is, + -- Function: double gsl_ran_levy_skew (const gsl_rng * R, double C, + double ALPHA, double BETA) + This function returns a random variate from the Levy skew stable + distribution with scale C, exponent ALPHA and skewness parameter + BETA. The skewness parameter must lie in the range [-1,1]. The + Levy skew stable probability distribution is defined by a Fourier + transform, - p(k) = {n! \over k! (n-k)! } p^k (1-p)^{n-k} + p(x) = {1 \over 2 \pi} \int_{-\infty}^{+\infty} dt \exp(-it x - |c t|^alpha (1-i beta sign(t) tan(pi alpha/2))) - for 0 <= k <= n. + When \alpha = 1 the term \tan(\pi \alpha/2) is replaced by + -(2/\pi)\log|t|. There is no explicit solution for the form of + p(x) and the library does not define a corresponding 'pdf' + function. For \alpha = 2 the distribution reduces to a Gaussian + distribution with \sigma = \sqrt{2} c and the skewness parameter + has no effect. For \alpha < 1 the tails of the distribution become + extremely wide. The symmetric distribution corresponds to \beta = + 0. - -- Function: double gsl_ran_binomial_pdf (unsigned int K, double P, - unsigned int N) - This function computes the probability p(k) of obtaining K from a - binomial distribution with parameters P and N, using the formula - given above. + The algorithm only works for 0 < alpha <= 2. + The Levy alpha-stable distributions have the property that if N +alpha-stable variates are drawn from the distribution p(c, \alpha, +\beta) then the sum Y = X_1 + X_2 + \dots + X_N will also be distributed +as an alpha-stable variate, p(N^(1/\alpha) c, \alpha, \beta). - -- Function: double gsl_cdf_binomial_P (unsigned int K, double P, - unsigned int N) - -- Function: double gsl_cdf_binomial_Q (unsigned int K, double P, - unsigned int N) - These functions compute the cumulative distribution functions P(k), - Q(k) for the binomial distribution with parameters P and N.  -File: gsl-ref.info, Node: The Multinomial Distribution, Next: The Negative Binomial Distribution, Prev: The Binomial Distribution, Up: Random Number Distributions +File: gsl-ref.info, Node: The Gamma Distribution, Next: The Flat (Uniform) Distribution, Prev: The Levy skew alpha-Stable Distribution, Up: Random Number Distributions -20.32 The Multinomial Distribution -================================== +20.15 The Gamma Distribution +============================ - -- Function: void gsl_ran_multinomial (const gsl_rng * R, size_t K, - unsigned int N, const double P[], unsigned int N[]) + -- Function: double gsl_ran_gamma (const gsl_rng * R, double A, double + B) + This function returns a random variate from the gamma distribution. + The distribution function is, - This function computes a random sample N[] from the multinomial - distribution formed by N trials from an underlying distribution - P[K]. The distribution function for N[] is, + p(x) dx = {1 \over \Gamma(a) b^a} x^{a-1} e^{-x/b} dx - P(n_1, n_2, ..., n_K) = - (N!/(n_1! n_2! ... n_K!)) p_1^n_1 p_2^n_2 ... p_K^n_K + for x > 0. - where (n_1, n_2, ..., n_K) are nonnegative integers with - sum_{k=1}^K n_k = N, and (p_1, p_2, ..., p_K) is a probability - distribution with \sum p_i = 1. If the array P[K] is not - normalized then its entries will be treated as weights and - normalized appropriately. The arrays N[] and P[] must both be of - length K. + The gamma distribution with an integer parameter A is known as the + Erlang distribution. - Random variates are generated using the conditional binomial method - (see C.S. Davis, 'The computer generation of multinomial random - variates', Comp. Stat. Data Anal. 16 (1993) 205-217 for - details). + The variates are computed using the Marsaglia-Tsang fast gamma + method. This function for this method was previously called + 'gsl_ran_gamma_mt' and can still be accessed using this name. - -- Function: double gsl_ran_multinomial_pdf (size_t K, const double - P[], const unsigned int N[]) - This function computes the probability P(n_1, n_2, ..., n_K) of - sampling N[K] from a multinomial distribution with parameters P[K], - using the formula given above. + -- Function: double gsl_ran_gamma_knuth (const gsl_rng * R, double A, + double B) + This function returns a gamma variate using the algorithms from + Knuth (vol 2). - -- Function: double gsl_ran_multinomial_lnpdf (size_t K, const double - P[], const unsigned int N[]) - This function returns the logarithm of the probability for the - multinomial distribution P(n_1, n_2, ..., n_K) with parameters - P[K]. + -- Function: double gsl_ran_gamma_pdf (double X, double A, double B) + This function computes the probability density p(x) at X for a + gamma distribution with parameters A and B, using the formula given + above. + + + -- Function: double gsl_cdf_gamma_P (double X, double A, double B) + -- Function: double gsl_cdf_gamma_Q (double X, double A, double B) + -- Function: double gsl_cdf_gamma_Pinv (double P, double A, double B) + -- Function: double gsl_cdf_gamma_Qinv (double Q, double A, double B) + These functions compute the cumulative distribution functions P(x), + Q(x) and their inverses for the gamma distribution with parameters + A and B.  -File: gsl-ref.info, Node: The Negative Binomial Distribution, Next: The Pascal Distribution, Prev: The Multinomial Distribution, Up: Random Number Distributions +File: gsl-ref.info, Node: The Flat (Uniform) Distribution, Next: The Lognormal Distribution, Prev: The Gamma Distribution, Up: Random Number Distributions -20.33 The Negative Binomial Distribution -======================================== +20.16 The Flat (Uniform) Distribution +===================================== - -- Function: unsigned int gsl_ran_negative_binomial (const gsl_rng * R, - double P, double N) - This function returns a random integer from the negative binomial - distribution, the number of failures occurring before N successes - in independent trials with probability P of success. The - probability distribution for negative binomial variates is, + -- Function: double gsl_ran_flat (const gsl_rng * R, double A, double + B) + This function returns a random variate from the flat (uniform) + distribution from A to B. The distribution is, - p(k) = {\Gamma(n + k) \over \Gamma(k+1) \Gamma(n) } p^n (1-p)^k + p(x) dx = {1 \over (b-a)} dx - Note that n is not required to be an integer. + if a <= x < b and 0 otherwise. - -- Function: double gsl_ran_negative_binomial_pdf (unsigned int K, - double P, double N) - This function computes the probability p(k) of obtaining K from a - negative binomial distribution with parameters P and N, using the - formula given above. + -- Function: double gsl_ran_flat_pdf (double X, double A, double B) + This function computes the probability density p(x) at X for a + uniform distribution from A to B, using the formula given above. - -- Function: double gsl_cdf_negative_binomial_P (unsigned int K, double - P, double N) - -- Function: double gsl_cdf_negative_binomial_Q (unsigned int K, double - P, double N) - These functions compute the cumulative distribution functions P(k), - Q(k) for the negative binomial distribution with parameters P and - N. + -- Function: double gsl_cdf_flat_P (double X, double A, double B) + -- Function: double gsl_cdf_flat_Q (double X, double A, double B) + -- Function: double gsl_cdf_flat_Pinv (double P, double A, double B) + -- Function: double gsl_cdf_flat_Qinv (double Q, double A, double B) + These functions compute the cumulative distribution functions P(x), + Q(x) and their inverses for a uniform distribution from A to B.  -File: gsl-ref.info, Node: The Pascal Distribution, Next: The Geometric Distribution, Prev: The Negative Binomial Distribution, Up: Random Number Distributions +File: gsl-ref.info, Node: The Lognormal Distribution, Next: The Chi-squared Distribution, Prev: The Flat (Uniform) Distribution, Up: Random Number Distributions -20.34 The Pascal Distribution -============================= +20.17 The Lognormal Distribution +================================ - -- Function: unsigned int gsl_ran_pascal (const gsl_rng * R, double P, - unsigned int N) - This function returns a random integer from the Pascal - distribution. The Pascal distribution is simply a negative - binomial distribution with an integer value of n. + -- Function: double gsl_ran_lognormal (const gsl_rng * R, double ZETA, + double SIGMA) + This function returns a random variate from the lognormal + distribution. The distribution function is, - p(k) = {(n + k - 1)! \over k! (n - 1)! } p^n (1-p)^k + p(x) dx = {1 \over x \sqrt{2 \pi \sigma^2} } \exp(-(\ln(x) - \zeta)^2/2 \sigma^2) dx - for k >= 0 + for x > 0. - -- Function: double gsl_ran_pascal_pdf (unsigned int K, double P, - unsigned int N) - This function computes the probability p(k) of obtaining K from a - Pascal distribution with parameters P and N, using the formula - given above. + -- Function: double gsl_ran_lognormal_pdf (double X, double ZETA, + double SIGMA) + This function computes the probability density p(x) at X for a + lognormal distribution with parameters ZETA and SIGMA, using the + formula given above. - -- Function: double gsl_cdf_pascal_P (unsigned int K, double P, - unsigned int N) - -- Function: double gsl_cdf_pascal_Q (unsigned int K, double P, - unsigned int N) - These functions compute the cumulative distribution functions P(k), - Q(k) for the Pascal distribution with parameters P and N. + -- Function: double gsl_cdf_lognormal_P (double X, double ZETA, double + SIGMA) + -- Function: double gsl_cdf_lognormal_Q (double X, double ZETA, double + SIGMA) + -- Function: double gsl_cdf_lognormal_Pinv (double P, double ZETA, + double SIGMA) + -- Function: double gsl_cdf_lognormal_Qinv (double Q, double ZETA, + double SIGMA) + These functions compute the cumulative distribution functions P(x), + Q(x) and their inverses for the lognormal distribution with + parameters ZETA and SIGMA.  -File: gsl-ref.info, Node: The Geometric Distribution, Next: The Hypergeometric Distribution, Prev: The Pascal Distribution, Up: Random Number Distributions +File: gsl-ref.info, Node: The Chi-squared Distribution, Next: The F-distribution, Prev: The Lognormal Distribution, Up: Random Number Distributions -20.35 The Geometric Distribution -================================ +20.18 The Chi-squared Distribution +================================== - -- Function: unsigned int gsl_ran_geometric (const gsl_rng * R, double - P) - This function returns a random integer from the geometric - distribution, the number of independent trials with probability P - until the first success. The probability distribution for - geometric variates is, +The chi-squared distribution arises in statistics. If Y_i are n +independent Gaussian random variates with unit variance then the +sum-of-squares, - p(k) = p (1-p)^(k-1) + X_i = \sum_i Y_i^2 - for k >= 1. Note that the distribution begins with k=1 with this - definition. There is another convention in which the exponent k-1 - is replaced by k. +has a chi-squared distribution with n degrees of freedom. - -- Function: double gsl_ran_geometric_pdf (unsigned int K, double P) - This function computes the probability p(k) of obtaining K from a - geometric distribution with probability parameter P, using the + -- Function: double gsl_ran_chisq (const gsl_rng * R, double NU) + This function returns a random variate from the chi-squared + distribution with NU degrees of freedom. The distribution function + is, + + p(x) dx = {1 \over 2 \Gamma(\nu/2) } (x/2)^{\nu/2 - 1} \exp(-x/2) dx + + for x >= 0. + + -- Function: double gsl_ran_chisq_pdf (double X, double NU) + This function computes the probability density p(x) at X for a + chi-squared distribution with NU degrees of freedom, using the formula given above. - -- Function: double gsl_cdf_geometric_P (unsigned int K, double P) - -- Function: double gsl_cdf_geometric_Q (unsigned int K, double P) - These functions compute the cumulative distribution functions P(k), - Q(k) for the geometric distribution with parameter P. + -- Function: double gsl_cdf_chisq_P (double X, double NU) + -- Function: double gsl_cdf_chisq_Q (double X, double NU) + -- Function: double gsl_cdf_chisq_Pinv (double P, double NU) + -- Function: double gsl_cdf_chisq_Qinv (double Q, double NU) + These functions compute the cumulative distribution functions P(x), + Q(x) and their inverses for the chi-squared distribution with NU + degrees of freedom.  -File: gsl-ref.info, Node: The Hypergeometric Distribution, Next: The Logarithmic Distribution, Prev: The Geometric Distribution, Up: Random Number Distributions +File: gsl-ref.info, Node: The F-distribution, Next: The t-distribution, Prev: The Chi-squared Distribution, Up: Random Number Distributions -20.36 The Hypergeometric Distribution -===================================== +20.19 The F-distribution +======================== - -- Function: unsigned int gsl_ran_hypergeometric (const gsl_rng * R, - unsigned int N1, unsigned int N2, unsigned int T) - This function returns a random integer from the hypergeometric - distribution. The probability distribution for hypergeometric - random variates is, +The F-distribution arises in statistics. If Y_1 and Y_2 are chi-squared +deviates with \nu_1 and \nu_2 degrees of freedom then the ratio, - p(k) = C(n_1, k) C(n_2, t - k) / C(n_1 + n_2, t) + X = { (Y_1 / \nu_1) \over (Y_2 / \nu_2) } - where C(a,b) = a!/(b!(a-b)!) and t <= n_1 + n_2. The domain of k - is max(0,t-n_2), ..., min(t,n_1). +has an F-distribution F(x;\nu_1,\nu_2). - If a population contains n_1 elements of "type 1" and n_2 elements - of "type 2" then the hypergeometric distribution gives the - probability of obtaining k elements of "type 1" in t samples from - the population without replacement. + -- Function: double gsl_ran_fdist (const gsl_rng * R, double NU1, + double NU2) + This function returns a random variate from the F-distribution with + degrees of freedom NU1 and NU2. The distribution function is, + + p(x) dx = + { \Gamma((\nu_1 + \nu_2)/2) + \over \Gamma(\nu_1/2) \Gamma(\nu_2/2) } + \nu_1^{\nu_1/2} \nu_2^{\nu_2/2} + x^{\nu_1/2 - 1} (\nu_2 + \nu_1 x)^{-\nu_1/2 -\nu_2/2} - -- Function: double gsl_ran_hypergeometric_pdf (unsigned int K, - unsigned int N1, unsigned int N2, unsigned int T) - This function computes the probability p(k) of obtaining K from a - hypergeometric distribution with parameters N1, N2, T, using the + for x >= 0. + + -- Function: double gsl_ran_fdist_pdf (double X, double NU1, double + NU2) + This function computes the probability density p(x) at X for an + F-distribution with NU1 and NU2 degrees of freedom, using the formula given above. - -- Function: double gsl_cdf_hypergeometric_P (unsigned int K, unsigned - int N1, unsigned int N2, unsigned int T) - -- Function: double gsl_cdf_hypergeometric_Q (unsigned int K, unsigned - int N1, unsigned int N2, unsigned int T) - These functions compute the cumulative distribution functions P(k), - Q(k) for the hypergeometric distribution with parameters N1, N2 and - T. + -- Function: double gsl_cdf_fdist_P (double X, double NU1, double NU2) + -- Function: double gsl_cdf_fdist_Q (double X, double NU1, double NU2) + -- Function: double gsl_cdf_fdist_Pinv (double P, double NU1, double + NU2) + -- Function: double gsl_cdf_fdist_Qinv (double Q, double NU1, double + NU2) + These functions compute the cumulative distribution functions P(x), + Q(x) and their inverses for the F-distribution with NU1 and NU2 + degrees of freedom.  -File: gsl-ref.info, Node: The Logarithmic Distribution, Next: Shuffling and Sampling, Prev: The Hypergeometric Distribution, Up: Random Number Distributions +File: gsl-ref.info, Node: The t-distribution, Next: The Beta Distribution, Prev: The F-distribution, Up: Random Number Distributions -20.37 The Logarithmic Distribution -================================== - - -- Function: unsigned int gsl_ran_logarithmic (const gsl_rng * R, - double P) - This function returns a random integer from the logarithmic - distribution. The probability distribution for logarithmic random - variates is, +20.20 The t-distribution +======================== - p(k) = {-1 \over \log(1-p)} {(p^k \over k)} +The t-distribution arises in statistics. If Y_1 has a normal +distribution and Y_2 has a chi-squared distribution with \nu degrees of +freedom then the ratio, - for k >= 1. + X = { Y_1 \over \sqrt{Y_2 / \nu} } - -- Function: double gsl_ran_logarithmic_pdf (unsigned int K, double P) - This function computes the probability p(k) of obtaining K from a - logarithmic distribution with probability parameter P, using the - formula given above. +has a t-distribution t(x;\nu) with \nu degrees of freedom. + -- Function: double gsl_ran_tdist (const gsl_rng * R, double NU) + This function returns a random variate from the t-distribution. + The distribution function is, - -File: gsl-ref.info, Node: Shuffling and Sampling, Next: Random Number Distribution Examples, Prev: The Logarithmic Distribution, Up: Random Number Distributions + p(x) dx = {\Gamma((\nu + 1)/2) \over \sqrt{\pi \nu} \Gamma(\nu/2)} + (1 + x^2/\nu)^{-(\nu + 1)/2} dx -20.38 Shuffling and Sampling -============================ + for -\infty < x < +\infty. -The following functions allow the shuffling and sampling of a set of -objects. The algorithms rely on a random number generator as a source -of randomness and a poor quality generator can lead to correlations in -the output. In particular it is important to avoid generators with a -short period. For more information see Knuth, v2, 3rd ed, Section -3.4.2, "Random Sampling and Shuffling". + -- Function: double gsl_ran_tdist_pdf (double X, double NU) + This function computes the probability density p(x) at X for a + t-distribution with NU degrees of freedom, using the formula given + above. - -- Function: void gsl_ran_shuffle (const gsl_rng * R, void * BASE, - size_t N, size_t SIZE) - This function randomly shuffles the order of N objects, each of - size SIZE, stored in the array BASE[0..N-1]. The output of the - random number generator R is used to produce the permutation. The - algorithm generates all possible n! permutations with equal - probability, assuming a perfect source of random numbers. + -- Function: double gsl_cdf_tdist_P (double X, double NU) + -- Function: double gsl_cdf_tdist_Q (double X, double NU) + -- Function: double gsl_cdf_tdist_Pinv (double P, double NU) + -- Function: double gsl_cdf_tdist_Qinv (double Q, double NU) + These functions compute the cumulative distribution functions P(x), + Q(x) and their inverses for the t-distribution with NU degrees of + freedom. - The following code shows how to shuffle the numbers from 0 to 51, + +File: gsl-ref.info, Node: The Beta Distribution, Next: The Logistic Distribution, Prev: The t-distribution, Up: Random Number Distributions - int a[52]; +20.21 The Beta Distribution +=========================== - for (i = 0; i < 52; i++) - { - a[i] = i; - } + -- Function: double gsl_ran_beta (const gsl_rng * R, double A, double + B) + This function returns a random variate from the beta distribution. + The distribution function is, - gsl_ran_shuffle (r, a, 52, sizeof (int)); + p(x) dx = {\Gamma(a+b) \over \Gamma(a) \Gamma(b)} x^{a-1} (1-x)^{b-1} dx - -- Function: int gsl_ran_choose (const gsl_rng * R, void * DEST, size_t - K, void * SRC, size_t N, size_t SIZE) - This function fills the array DEST[k] with K objects taken randomly - from the N elements of the array SRC[0..N-1]. The objects are each - of size SIZE. The output of the random number generator R is used - to make the selection. The algorithm ensures all possible samples - are equally likely, assuming a perfect source of randomness. + for 0 <= x <= 1. - The objects are sampled _without_ replacement, thus each object can - only appear once in DEST[k]. It is required that K be less than or - equal to 'n'. The objects in DEST will be in the same relative - order as those in SRC. You will need to call 'gsl_ran_shuffle(r, - dest, n, size)' if you want to randomize the order. + -- Function: double gsl_ran_beta_pdf (double X, double A, double B) + This function computes the probability density p(x) at X for a beta + distribution with parameters A and B, using the formula given + above. - The following code shows how to select a random sample of three - unique numbers from the set 0 to 99, - double a[3], b[100]; + -- Function: double gsl_cdf_beta_P (double X, double A, double B) + -- Function: double gsl_cdf_beta_Q (double X, double A, double B) + -- Function: double gsl_cdf_beta_Pinv (double P, double A, double B) + -- Function: double gsl_cdf_beta_Qinv (double Q, double A, double B) + These functions compute the cumulative distribution functions P(x), + Q(x) and their inverses for the beta distribution with parameters A + and B. - for (i = 0; i < 100; i++) - { - b[i] = (double) i; - } + +File: gsl-ref.info, Node: The Logistic Distribution, Next: The Pareto Distribution, Prev: The Beta Distribution, Up: Random Number Distributions - gsl_ran_choose (r, a, 3, b, 100, sizeof (double)); +20.22 The Logistic Distribution +=============================== - -- Function: void gsl_ran_sample (const gsl_rng * R, void * DEST, - size_t K, void * SRC, size_t N, size_t SIZE) - This function is like 'gsl_ran_choose' but samples K items from the - original array of N items SRC with replacement, so the same object - can appear more than once in the output sequence DEST. There is no - requirement that K be less than N in this case. + -- Function: double gsl_ran_logistic (const gsl_rng * R, double A) + This function returns a random variate from the logistic + distribution. The distribution function is, - -File: gsl-ref.info, Node: Random Number Distribution Examples, Next: Random Number Distribution References and Further Reading, Prev: Shuffling and Sampling, Up: Random Number Distributions + p(x) dx = { \exp(-x/a) \over a (1 + \exp(-x/a))^2 } dx -20.39 Examples -============== + for -\infty < x < +\infty. -The following program demonstrates the use of a random number generator -to produce variates from a distribution. It prints 10 samples from the -Poisson distribution with a mean of 3. + -- Function: double gsl_ran_logistic_pdf (double X, double A) + This function computes the probability density p(x) at X for a + logistic distribution with scale parameter A, using the formula + given above. - #include - #include - #include - int - main (void) - { - const gsl_rng_type * T; - gsl_rng * r; + -- Function: double gsl_cdf_logistic_P (double X, double A) + -- Function: double gsl_cdf_logistic_Q (double X, double A) + -- Function: double gsl_cdf_logistic_Pinv (double P, double A) + -- Function: double gsl_cdf_logistic_Qinv (double Q, double A) + These functions compute the cumulative distribution functions P(x), + Q(x) and their inverses for the logistic distribution with scale + parameter A. - int i, n = 10; - double mu = 3.0; + +File: gsl-ref.info, Node: The Pareto Distribution, Next: Spherical Vector Distributions, Prev: The Logistic Distribution, Up: Random Number Distributions - /* create a generator chosen by the - environment variable GSL_RNG_TYPE */ +20.23 The Pareto Distribution +============================= - gsl_rng_env_setup(); + -- Function: double gsl_ran_pareto (const gsl_rng * R, double A, double + B) + This function returns a random variate from the Pareto distribution + of order A. The distribution function is, - T = gsl_rng_default; - r = gsl_rng_alloc (T); + p(x) dx = (a/b) / (x/b)^{a+1} dx - /* print n random variates chosen from - the poisson distribution with mean - parameter mu */ + for x >= b. - for (i = 0; i < n; i++) - { - unsigned int k = gsl_ran_poisson (r, mu); - printf (" %u", k); - } + -- Function: double gsl_ran_pareto_pdf (double X, double A, double B) + This function computes the probability density p(x) at X for a + Pareto distribution with exponent A and scale B, using the formula + given above. - printf ("\n"); - gsl_rng_free (r); - return 0; - } -If the library and header files are installed under '/usr/local' (the -default location) then the program can be compiled with these options, + -- Function: double gsl_cdf_pareto_P (double X, double A, double B) + -- Function: double gsl_cdf_pareto_Q (double X, double A, double B) + -- Function: double gsl_cdf_pareto_Pinv (double P, double A, double B) + -- Function: double gsl_cdf_pareto_Qinv (double Q, double A, double B) + These functions compute the cumulative distribution functions P(x), + Q(x) and their inverses for the Pareto distribution with exponent A + and scale B. - $ gcc -Wall demo.c -lgsl -lgslcblas -lm + +File: gsl-ref.info, Node: Spherical Vector Distributions, Next: The Weibull Distribution, Prev: The Pareto Distribution, Up: Random Number Distributions -Here is the output of the program, +20.24 Spherical Vector Distributions +==================================== - $ ./a.out - 2 5 5 2 1 0 3 4 1 1 +The spherical distributions generate random vectors, located on a +spherical surface. They can be used as random directions, for example +in the steps of a random walk. -The variates depend on the seed used by the generator. The seed for the -default generator type 'gsl_rng_default' can be changed with the -'GSL_RNG_SEED' environment variable to produce a different stream of -variates, + -- Function: void gsl_ran_dir_2d (const gsl_rng * R, double * X, double + * Y) + -- Function: void gsl_ran_dir_2d_trig_method (const gsl_rng * R, double + * X, double * Y) + This function returns a random direction vector v = (X,Y) in two + dimensions. The vector is normalized such that |v|^2 = x^2 + y^2 = + 1. The obvious way to do this is to take a uniform random number + between 0 and 2\pi and let X and Y be the sine and cosine + respectively. Two trig functions would have been expensive in the + old days, but with modern hardware implementations, this is + sometimes the fastest way to go. This is the case for the Pentium + (but not the case for the Sun Sparcstation). One can avoid the + trig evaluations by choosing X and Y in the interior of a unit + circle (choose them at random from the interior of the enclosing + square, and then reject those that are outside the unit circle), + and then dividing by \sqrt{x^2 + y^2}. A much cleverer approach, + attributed to von Neumann (See Knuth, v2, 3rd ed, p140, exercise + 23), requires neither trig nor a square root. In this approach, U + and V are chosen at random from the interior of a unit circle, and + then x=(u^2-v^2)/(u^2+v^2) and y=2uv/(u^2+v^2). - $ GSL_RNG_SEED=123 ./a.out - GSL_RNG_SEED=123 - 4 5 6 3 3 1 4 2 5 5 + -- Function: void gsl_ran_dir_3d (const gsl_rng * R, double * X, double + * Y, double * Z) + This function returns a random direction vector v = (X,Y,Z) in + three dimensions. The vector is normalized such that |v|^2 = x^2 + + y^2 + z^2 = 1. The method employed is due to Robert E. Knop (CACM + 13, 326 (1970)), and explained in Knuth, v2, 3rd ed, p136. It uses + the surprising fact that the distribution projected along any axis + is actually uniform (this is only true for 3 dimensions). -The following program generates a random walk in two dimensions. + -- Function: void gsl_ran_dir_nd (const gsl_rng * R, size_t N, double * + X) - #include - #include - #include + This function returns a random direction vector v = + (x_1,x_2,...,x_n) in N dimensions. The vector is normalized such + that |v|^2 = x_1^2 + x_2^2 + ... + x_n^2 = 1. The method uses the + fact that a multivariate Gaussian distribution is spherically + symmetric. Each component is generated to have a Gaussian + distribution, and then the components are normalized. The method + is described by Knuth, v2, 3rd ed, p135-136, and attributed to G. + W. Brown, Modern Mathematics for the Engineer (1956). - int - main (void) - { - int i; - double x = 0, y = 0, dx, dy; + +File: gsl-ref.info, Node: The Weibull Distribution, Next: The Type-1 Gumbel Distribution, Prev: Spherical Vector Distributions, Up: Random Number Distributions - const gsl_rng_type * T; - gsl_rng * r; +20.25 The Weibull Distribution +============================== - gsl_rng_env_setup(); - T = gsl_rng_default; - r = gsl_rng_alloc (T); + -- Function: double gsl_ran_weibull (const gsl_rng * R, double A, + double B) + This function returns a random variate from the Weibull + distribution. The distribution function is, - printf ("%g %g\n", x, y); + p(x) dx = {b \over a^b} x^{b-1} \exp(-(x/a)^b) dx - for (i = 0; i < 10; i++) - { - gsl_ran_dir_2d (r, &dx, &dy); - x += dx; y += dy; - printf ("%g %g\n", x, y); - } + for x >= 0. - gsl_rng_free (r); - return 0; - } + -- Function: double gsl_ran_weibull_pdf (double X, double A, double B) + This function computes the probability density p(x) at X for a + Weibull distribution with scale A and exponent B, using the formula + given above. -Here is some output from the program, four 10-step random walks from the -origin, - The following program computes the upper and lower cumulative -distribution functions for the standard normal distribution at x=2. - - #include - #include + -- Function: double gsl_cdf_weibull_P (double X, double A, double B) + -- Function: double gsl_cdf_weibull_Q (double X, double A, double B) + -- Function: double gsl_cdf_weibull_Pinv (double P, double A, double B) + -- Function: double gsl_cdf_weibull_Qinv (double Q, double A, double B) + These functions compute the cumulative distribution functions P(x), + Q(x) and their inverses for the Weibull distribution with scale A + and exponent B. - int - main (void) - { - double P, Q; - double x = 2.0; + +File: gsl-ref.info, Node: The Type-1 Gumbel Distribution, Next: The Type-2 Gumbel Distribution, Prev: The Weibull Distribution, Up: Random Number Distributions - P = gsl_cdf_ugaussian_P (x); - printf ("prob(x < %f) = %f\n", x, P); +20.26 The Type-1 Gumbel Distribution +==================================== - Q = gsl_cdf_ugaussian_Q (x); - printf ("prob(x > %f) = %f\n", x, Q); + -- Function: double gsl_ran_gumbel1 (const gsl_rng * R, double A, + double B) + This function returns a random variate from the Type-1 Gumbel + distribution. The Type-1 Gumbel distribution function is, - x = gsl_cdf_ugaussian_Pinv (P); - printf ("Pinv(%f) = %f\n", P, x); + p(x) dx = a b \exp(-(b \exp(-ax) + ax)) dx - x = gsl_cdf_ugaussian_Qinv (Q); - printf ("Qinv(%f) = %f\n", Q, x); + for -\infty < x < \infty. - return 0; - } + -- Function: double gsl_ran_gumbel1_pdf (double X, double A, double B) + This function computes the probability density p(x) at X for a + Type-1 Gumbel distribution with parameters A and B, using the + formula given above. -Here is the output of the program, - prob(x < 2.000000) = 0.977250 - prob(x > 2.000000) = 0.022750 - Pinv(0.977250) = 2.000000 - Qinv(0.022750) = 2.000000 + -- Function: double gsl_cdf_gumbel1_P (double X, double A, double B) + -- Function: double gsl_cdf_gumbel1_Q (double X, double A, double B) + -- Function: double gsl_cdf_gumbel1_Pinv (double P, double A, double B) + -- Function: double gsl_cdf_gumbel1_Qinv (double Q, double A, double B) + These functions compute the cumulative distribution functions P(x), + Q(x) and their inverses for the Type-1 Gumbel distribution with + parameters A and B.  -File: gsl-ref.info, Node: Random Number Distribution References and Further Reading, Prev: Random Number Distribution Examples, Up: Random Number Distributions +File: gsl-ref.info, Node: The Type-2 Gumbel Distribution, Next: The Dirichlet Distribution, Prev: The Type-1 Gumbel Distribution, Up: Random Number Distributions -20.40 References and Further Reading +20.27 The Type-2 Gumbel Distribution ==================================== -For an encyclopaedic coverage of the subject readers are advised to -consult the book 'Non-Uniform Random Variate Generation' by Luc Devroye. -It covers every imaginable distribution and provides hundreds of -algorithms. + -- Function: double gsl_ran_gumbel2 (const gsl_rng * R, double A, + double B) + This function returns a random variate from the Type-2 Gumbel + distribution. The Type-2 Gumbel distribution function is, - Luc Devroye, 'Non-Uniform Random Variate Generation', - Springer-Verlag, ISBN 0-387-96305-7. Available online at - . + p(x) dx = a b x^{-a-1} \exp(-b x^{-a}) dx -The subject of random variate generation is also reviewed by Knuth, who -describes algorithms for all the major distributions. + for 0 < x < \infty. - Donald E. Knuth, 'The Art of Computer Programming: Seminumerical - Algorithms' (Vol 2, 3rd Ed, 1997), Addison-Wesley, ISBN 0201896842. + -- Function: double gsl_ran_gumbel2_pdf (double X, double A, double B) + This function computes the probability density p(x) at X for a + Type-2 Gumbel distribution with parameters A and B, using the + formula given above. -The Particle Data Group provides a short review of techniques for -generating distributions of random numbers in the "Monte Carlo" section -of its Annual Review of Particle Physics. - 'Review of Particle Properties' R.M. Barnett et al., Physical - Review D54, 1 (1996) . + -- Function: double gsl_cdf_gumbel2_P (double X, double A, double B) + -- Function: double gsl_cdf_gumbel2_Q (double X, double A, double B) + -- Function: double gsl_cdf_gumbel2_Pinv (double P, double A, double B) + -- Function: double gsl_cdf_gumbel2_Qinv (double Q, double A, double B) + These functions compute the cumulative distribution functions P(x), + Q(x) and their inverses for the Type-2 Gumbel distribution with + parameters A and B. -The Review of Particle Physics is available online in postscript and pdf -format. + +File: gsl-ref.info, Node: The Dirichlet Distribution, Next: General Discrete Distributions, Prev: The Type-2 Gumbel Distribution, Up: Random Number Distributions -An overview of methods used to compute cumulative distribution functions -can be found in 'Statistical Computing' by W.J. Kennedy and J.E. Gentle. -Another general reference is 'Elements of Statistical Computing' by R.A. -Thisted. +20.28 The Dirichlet Distribution +================================ - William E. Kennedy and James E. Gentle, 'Statistical Computing' - (1980), Marcel Dekker, ISBN 0-8247-6898-1. + -- Function: void gsl_ran_dirichlet (const gsl_rng * R, size_t K, const + double ALPHA[], double THETA[]) + This function returns an array of K random variates from a + Dirichlet distribution of order K-1. The distribution function is - Ronald A. Thisted, 'Elements of Statistical Computing' (1988), - Chapman & Hall, ISBN 0-412-01371-1. + p(\theta_1, ..., \theta_K) d\theta_1 ... d\theta_K = + (1/Z) \prod_{i=1}^K \theta_i^{\alpha_i - 1} \delta(1 -\sum_{i=1}^K \theta_i) d\theta_1 ... d\theta_K -The cumulative distribution functions for the Gaussian distribution are -based on the following papers, + for theta_i >= 0 and alpha_i > 0. The delta function ensures that + \sum \theta_i = 1. The normalization factor Z is - 'Rational Chebyshev Approximations Using Linear Equations', W.J. - Cody, W. Fraser, J.F. Hart. Numerische Mathematik 12, 242-251 - (1968). + Z = {\prod_{i=1}^K \Gamma(\alpha_i)} / {\Gamma( \sum_{i=1}^K \alpha_i)} - 'Rational Chebyshev Approximations for the Error Function', W.J. - Cody. Mathematics of Computation 23, n107, 631-637 (July 1969). + The random variates are generated by sampling K values from gamma + distributions with parameters a=alpha_i, b=1, and renormalizing. + See A.M. Law, W.D. Kelton, 'Simulation Modeling and Analysis' + (1991). - -File: gsl-ref.info, Node: Statistics, Next: Histograms, Prev: Random Number Distributions, Up: Top + -- Function: double gsl_ran_dirichlet_pdf (size_t K, const double + ALPHA[], const double THETA[]) + This function computes the probability density p(\theta_1, ... , + \theta_K) at THETA[K] for a Dirichlet distribution with parameters + ALPHA[K], using the formula given above. -21 Statistics -************* + -- Function: double gsl_ran_dirichlet_lnpdf (size_t K, const double + ALPHA[], const double THETA[]) + This function computes the logarithm of the probability density + p(\theta_1, ... , \theta_K) for a Dirichlet distribution with + parameters ALPHA[K]. -This chapter describes the statistical functions in the library. The -basic statistical functions include routines to compute the mean, -variance and standard deviation. More advanced functions allow you to -calculate absolute deviations, skewness, and kurtosis as well as the -median and arbitrary percentiles. The algorithms use recurrence -relations to compute average quantities in a stable way, without large -intermediate values that might overflow. + +File: gsl-ref.info, Node: General Discrete Distributions, Next: The Poisson Distribution, Prev: The Dirichlet Distribution, Up: Random Number Distributions - The functions are available in versions for datasets in the standard -floating-point and integer types. The versions for double precision -floating-point data have the prefix 'gsl_stats' and are declared in the -header file 'gsl_statistics_double.h'. The versions for integer data -have the prefix 'gsl_stats_int' and are declared in the header file -'gsl_statistics_int.h'. All the functions operate on C arrays with a -STRIDE parameter specifying the spacing between elements. +20.29 General Discrete Distributions +==================================== -* Menu: +Given K discrete events with different probabilities P[k], produce a +random value k consistent with its probability. -* Mean and standard deviation and variance:: -* Absolute deviation:: -* Higher moments (skewness and kurtosis):: -* Autocorrelation:: -* Covariance:: -* Correlation:: -* Weighted Samples:: -* Maximum and Minimum values:: -* Median and Percentiles:: -* Example statistical programs:: -* Statistics References and Further Reading:: + The obvious way to do this is to preprocess the probability list by +generating a cumulative probability array with K+1 elements: - -File: gsl-ref.info, Node: Mean and standard deviation and variance, Next: Absolute deviation, Up: Statistics + C[0] = 0 + C[k+1] = C[k]+P[k]. -21.1 Mean, Standard Deviation and Variance -========================================== +Note that this construction produces C[K]=1. Now choose a uniform +deviate u between 0 and 1, and find the value of k such that C[k] <= u < +C[k+1]. Although this in principle requires of order \log K steps per +random number generation, they are fast steps, and if you use something +like \lfloor uK \rfloor as a starting point, you can often do pretty +well. - -- Function: double gsl_stats_mean (const double DATA[], size_t STRIDE, - size_t N) - This function returns the arithmetic mean of DATA, a dataset of - length N with stride STRIDE. The arithmetic mean, or "sample - mean", is denoted by \Hat\mu and defined as, + But faster methods have been devised. Again, the idea is to +preprocess the probability list, and save the result in some form of +lookup table; then the individual calls for a random discrete event can +go rapidly. An approach invented by G. Marsaglia (Generating discrete +random variables in a computer, Comm ACM 6, 37-38 (1963)) is very +clever, and readers interested in examples of good algorithm design are +directed to this short and well-written paper. Unfortunately, for large +K, Marsaglia's lookup table can be quite large. - \Hat\mu = (1/N) \sum x_i + A much better approach is due to Alastair J. Walker (An efficient +method for generating discrete random variables with general +distributions, ACM Trans on Mathematical Software 3, 253-256 (1977); see +also Knuth, v2, 3rd ed, p120-121,139). This requires two lookup tables, +one floating point and one integer, but both only of size K. After +preprocessing, the random numbers are generated in O(1) time, even for +large K. The preprocessing suggested by Walker requires O(K^2) effort, +but that is not actually necessary, and the implementation provided here +only takes O(K) effort. In general, more preprocessing leads to faster +generation of the individual random numbers, but a diminishing return is +reached pretty early. Knuth points out that the optimal preprocessing +is combinatorially difficult for large K. - where x_i are the elements of the dataset DATA. For samples drawn - from a gaussian distribution the variance of \Hat\mu is \sigma^2 / - N. + This method can be used to speed up some of the discrete random +number generators below, such as the binomial distribution. To use it +for something like the Poisson Distribution, a modification would have +to be made, since it only takes a finite set of K outcomes. - -- Function: double gsl_stats_variance (const double DATA[], size_t - STRIDE, size_t N) - This function returns the estimated, or "sample", variance of DATA, - a dataset of length N with stride STRIDE. The estimated variance - is denoted by \Hat\sigma^2 and is defined by, + -- Function: gsl_ran_discrete_t * gsl_ran_discrete_preproc (size_t K, + const double * P) + This function returns a pointer to a structure that contains the + lookup table for the discrete random number generator. The array + P[] contains the probabilities of the discrete events; these array + elements must all be positive, but they needn't add up to one (so + you can think of them more generally as "weights")--the + preprocessor will normalize appropriately. This return value is + used as an argument for the 'gsl_ran_discrete' function below. - \Hat\sigma^2 = (1/(N-1)) \sum (x_i - \Hat\mu)^2 + -- Function: size_t gsl_ran_discrete (const gsl_rng * R, const + gsl_ran_discrete_t * G) + After the preprocessor, above, has been called, you use this + function to get the discrete random numbers. - where x_i are the elements of the dataset DATA. Note that the - normalization factor of 1/(N-1) results from the derivation of - \Hat\sigma^2 as an unbiased estimator of the population variance - \sigma^2. For samples drawn from a Gaussian distribution the - variance of \Hat\sigma^2 itself is 2 \sigma^4 / N. + -- Function: double gsl_ran_discrete_pdf (size_t K, const + gsl_ran_discrete_t * G) + Returns the probability P[k] of observing the variable K. Since + P[k] is not stored as part of the lookup table, it must be + recomputed; this computation takes O(K), so if K is large and you + care about the original array P[k] used to create the lookup table, + then you should just keep this original array P[k] around. - This function computes the mean via a call to 'gsl_stats_mean'. If - you have already computed the mean then you can pass it directly to - 'gsl_stats_variance_m'. + -- Function: void gsl_ran_discrete_free (gsl_ran_discrete_t * G) + De-allocates the lookup table pointed to by G. - -- Function: double gsl_stats_variance_m (const double DATA[], size_t - STRIDE, size_t N, double MEAN) - This function returns the sample variance of DATA relative to the - given value of MEAN. The function is computed with \Hat\mu - replaced by the value of MEAN that you supply, + +File: gsl-ref.info, Node: The Poisson Distribution, Next: The Bernoulli Distribution, Prev: General Discrete Distributions, Up: Random Number Distributions - \Hat\sigma^2 = (1/(N-1)) \sum (x_i - mean)^2 +20.30 The Poisson Distribution +============================== - -- Function: double gsl_stats_sd (const double DATA[], size_t STRIDE, - size_t N) - -- Function: double gsl_stats_sd_m (const double DATA[], size_t STRIDE, - size_t N, double MEAN) - The standard deviation is defined as the square root of the - variance. These functions return the square root of the - corresponding variance functions above. + -- Function: unsigned int gsl_ran_poisson (const gsl_rng * R, double + MU) + This function returns a random integer from the Poisson + distribution with mean MU. The probability distribution for + Poisson variates is, - -- Function: double gsl_stats_tss (const double DATA[], size_t STRIDE, - size_t N) - -- Function: double gsl_stats_tss_m (const double DATA[], size_t - STRIDE, size_t N, double MEAN) - These functions return the total sum of squares (TSS) of DATA about - the mean. For 'gsl_stats_tss_m' the user-supplied value of MEAN is - used, and for 'gsl_stats_tss' it is computed using - 'gsl_stats_mean'. + p(k) = {\mu^k \over k!} \exp(-\mu) - TSS = \sum (x_i - mean)^2 + for k >= 0. - -- Function: double gsl_stats_variance_with_fixed_mean (const double - DATA[], size_t STRIDE, size_t N, double MEAN) - This function computes an unbiased estimate of the variance of DATA - when the population mean MEAN of the underlying distribution is - known _a priori_. In this case the estimator for the variance uses - the factor 1/N and the sample mean \Hat\mu is replaced by the known - population mean \mu, + -- Function: double gsl_ran_poisson_pdf (unsigned int K, double MU) + This function computes the probability p(k) of obtaining K from a + Poisson distribution with mean MU, using the formula given above. - \Hat\sigma^2 = (1/N) \sum (x_i - \mu)^2 - -- Function: double gsl_stats_sd_with_fixed_mean (const double DATA[], - size_t STRIDE, size_t N, double MEAN) - This function calculates the standard deviation of DATA for a fixed - population mean MEAN. The result is the square root of the - corresponding variance function. + -- Function: double gsl_cdf_poisson_P (unsigned int K, double MU) + -- Function: double gsl_cdf_poisson_Q (unsigned int K, double MU) + These functions compute the cumulative distribution functions P(k), + Q(k) for the Poisson distribution with parameter MU.  -File: gsl-ref.info, Node: Absolute deviation, Next: Higher moments (skewness and kurtosis), Prev: Mean and standard deviation and variance, Up: Statistics - -21.2 Absolute deviation -======================= - - -- Function: double gsl_stats_absdev (const double DATA[], size_t - STRIDE, size_t N) - This function computes the absolute deviation from the mean of - DATA, a dataset of length N with stride STRIDE. The absolute - deviation from the mean is defined as, +File: gsl-ref.info, Node: The Bernoulli Distribution, Next: The Binomial Distribution, Prev: The Poisson Distribution, Up: Random Number Distributions - absdev = (1/N) \sum |x_i - \Hat\mu| +20.31 The Bernoulli Distribution +================================ - where x_i are the elements of the dataset DATA. The absolute - deviation from the mean provides a more robust measure of the width - of a distribution than the variance. This function computes the - mean of DATA via a call to 'gsl_stats_mean'. + -- Function: unsigned int gsl_ran_bernoulli (const gsl_rng * R, double + P) + This function returns either 0 or 1, the result of a Bernoulli + trial with probability P. The probability distribution for a + Bernoulli trial is, - -- Function: double gsl_stats_absdev_m (const double DATA[], size_t - STRIDE, size_t N, double MEAN) - This function computes the absolute deviation of the dataset DATA - relative to the given value of MEAN, + p(0) = 1 - p + p(1) = p - absdev = (1/N) \sum |x_i - mean| + -- Function: double gsl_ran_bernoulli_pdf (unsigned int K, double P) + This function computes the probability p(k) of obtaining K from a + Bernoulli distribution with probability parameter P, using the + formula given above. - This function is useful if you have already computed the mean of - DATA (and want to avoid recomputing it), or wish to calculate the - absolute deviation relative to another value (such as zero, or the - median).  -File: gsl-ref.info, Node: Higher moments (skewness and kurtosis), Next: Autocorrelation, Prev: Absolute deviation, Up: Statistics +File: gsl-ref.info, Node: The Binomial Distribution, Next: The Multinomial Distribution, Prev: The Bernoulli Distribution, Up: Random Number Distributions -21.3 Higher moments (skewness and kurtosis) -=========================================== +20.32 The Binomial Distribution +=============================== - -- Function: double gsl_stats_skew (const double DATA[], size_t STRIDE, - size_t N) - This function computes the skewness of DATA, a dataset of length N - with stride STRIDE. The skewness is defined as, + -- Function: unsigned int gsl_ran_binomial (const gsl_rng * R, double + P, unsigned int N) + This function returns a random integer from the binomial + distribution, the number of successes in N independent trials with + probability P. The probability distribution for binomial variates + is, - skew = (1/N) \sum ((x_i - \Hat\mu)/\Hat\sigma)^3 + p(k) = {n! \over k! (n-k)! } p^k (1-p)^{n-k} - where x_i are the elements of the dataset DATA. The skewness - measures the asymmetry of the tails of a distribution. + for 0 <= k <= n. - The function computes the mean and estimated standard deviation of - DATA via calls to 'gsl_stats_mean' and 'gsl_stats_sd'. + -- Function: double gsl_ran_binomial_pdf (unsigned int K, double P, + unsigned int N) + This function computes the probability p(k) of obtaining K from a + binomial distribution with parameters P and N, using the formula + given above. - -- Function: double gsl_stats_skew_m_sd (const double DATA[], size_t - STRIDE, size_t N, double MEAN, double SD) - This function computes the skewness of the dataset DATA using the - given values of the mean MEAN and standard deviation SD, - skew = (1/N) \sum ((x_i - mean)/sd)^3 + -- Function: double gsl_cdf_binomial_P (unsigned int K, double P, + unsigned int N) + -- Function: double gsl_cdf_binomial_Q (unsigned int K, double P, + unsigned int N) + These functions compute the cumulative distribution functions P(k), + Q(k) for the binomial distribution with parameters P and N. - These functions are useful if you have already computed the mean - and standard deviation of DATA and want to avoid recomputing them. + +File: gsl-ref.info, Node: The Multinomial Distribution, Next: The Negative Binomial Distribution, Prev: The Binomial Distribution, Up: Random Number Distributions - -- Function: double gsl_stats_kurtosis (const double DATA[], size_t - STRIDE, size_t N) - This function computes the kurtosis of DATA, a dataset of length N - with stride STRIDE. The kurtosis is defined as, +20.33 The Multinomial Distribution +================================== - kurtosis = ((1/N) \sum ((x_i - \Hat\mu)/\Hat\sigma)^4) - 3 + -- Function: void gsl_ran_multinomial (const gsl_rng * R, size_t K, + unsigned int N, const double P[], unsigned int N[]) - The kurtosis measures how sharply peaked a distribution is, - relative to its width. The kurtosis is normalized to zero for a - Gaussian distribution. + This function computes a random sample N[] from the multinomial + distribution formed by N trials from an underlying distribution + P[K]. The distribution function for N[] is, - -- Function: double gsl_stats_kurtosis_m_sd (const double DATA[], - size_t STRIDE, size_t N, double MEAN, double SD) - This function computes the kurtosis of the dataset DATA using the - given values of the mean MEAN and standard deviation SD, + P(n_1, n_2, ..., n_K) = + (N!/(n_1! n_2! ... n_K!)) p_1^n_1 p_2^n_2 ... p_K^n_K - kurtosis = ((1/N) \sum ((x_i - mean)/sd)^4) - 3 + where (n_1, n_2, ..., n_K) are nonnegative integers with + sum_{k=1}^K n_k = N, and (p_1, p_2, ..., p_K) is a probability + distribution with \sum p_i = 1. If the array P[K] is not + normalized then its entries will be treated as weights and + normalized appropriately. The arrays N[] and P[] must both be of + length K. - This function is useful if you have already computed the mean and - standard deviation of DATA and want to avoid recomputing them. + Random variates are generated using the conditional binomial method + (see C.S. Davis, 'The computer generation of multinomial random + variates', Comp. Stat. Data Anal. 16 (1993) 205-217 for + details). - -File: gsl-ref.info, Node: Autocorrelation, Next: Covariance, Prev: Higher moments (skewness and kurtosis), Up: Statistics + -- Function: double gsl_ran_multinomial_pdf (size_t K, const double + P[], const unsigned int N[]) + This function computes the probability P(n_1, n_2, ..., n_K) of + sampling N[K] from a multinomial distribution with parameters P[K], + using the formula given above. -21.4 Autocorrelation -==================== + -- Function: double gsl_ran_multinomial_lnpdf (size_t K, const double + P[], const unsigned int N[]) + This function returns the logarithm of the probability for the + multinomial distribution P(n_1, n_2, ..., n_K) with parameters + P[K]. - -- Function: double gsl_stats_lag1_autocorrelation (const double - DATA[], const size_t STRIDE, const size_t N) - This function computes the lag-1 autocorrelation of the dataset - DATA. + +File: gsl-ref.info, Node: The Negative Binomial Distribution, Next: The Pascal Distribution, Prev: The Multinomial Distribution, Up: Random Number Distributions - a_1 = {\sum_{i = 1}^{n} (x_{i} - \Hat\mu) (x_{i-1} - \Hat\mu) - \over - \sum_{i = 1}^{n} (x_{i} - \Hat\mu) (x_{i} - \Hat\mu)} +20.34 The Negative Binomial Distribution +======================================== - -- Function: double gsl_stats_lag1_autocorrelation_m (const double - DATA[], const size_t STRIDE, const size_t N, const double - MEAN) - This function computes the lag-1 autocorrelation of the dataset - DATA using the given value of the mean MEAN. + -- Function: unsigned int gsl_ran_negative_binomial (const gsl_rng * R, + double P, double N) + This function returns a random integer from the negative binomial + distribution, the number of failures occurring before N successes + in independent trials with probability P of success. The + probability distribution for negative binomial variates is, - -File: gsl-ref.info, Node: Covariance, Next: Correlation, Prev: Autocorrelation, Up: Statistics + p(k) = {\Gamma(n + k) \over \Gamma(k+1) \Gamma(n) } p^n (1-p)^k -21.5 Covariance -=============== + Note that n is not required to be an integer. - -- Function: double gsl_stats_covariance (const double DATA1[], const - size_t STRIDE1, const double DATA2[], const size_t STRIDE2, - const size_t N) - This function computes the covariance of the datasets DATA1 and - DATA2 which must both be of the same length N. + -- Function: double gsl_ran_negative_binomial_pdf (unsigned int K, + double P, double N) + This function computes the probability p(k) of obtaining K from a + negative binomial distribution with parameters P and N, using the + formula given above. - covar = (1/(n - 1)) \sum_{i = 1}^{n} (x_i - \Hat x) (y_i - \Hat y) - -- Function: double gsl_stats_covariance_m (const double DATA1[], const - size_t STRIDE1, const double DATA2[], const size_t STRIDE2, - const size_t N, const double MEAN1, const double MEAN2) - This function computes the covariance of the datasets DATA1 and - DATA2 using the given values of the means, MEAN1 and MEAN2. This - is useful if you have already computed the means of DATA1 and DATA2 - and want to avoid recomputing them. + -- Function: double gsl_cdf_negative_binomial_P (unsigned int K, double + P, double N) + -- Function: double gsl_cdf_negative_binomial_Q (unsigned int K, double + P, double N) + These functions compute the cumulative distribution functions P(k), + Q(k) for the negative binomial distribution with parameters P and + N.  -File: gsl-ref.info, Node: Correlation, Next: Weighted Samples, Prev: Covariance, Up: Statistics +File: gsl-ref.info, Node: The Pascal Distribution, Next: The Geometric Distribution, Prev: The Negative Binomial Distribution, Up: Random Number Distributions -21.6 Correlation -================ +20.35 The Pascal Distribution +============================= - -- Function: double gsl_stats_correlation (const double DATA1[], const - size_t STRIDE1, const double DATA2[], const size_t STRIDE2, - const size_t N) - This function efficiently computes the Pearson correlation - coefficient between the datasets DATA1 and DATA2 which must both be - of the same length N. - r = cov(x, y) / (\Hat\sigma_x \Hat\sigma_y) - = {1/(n-1) \sum (x_i - \Hat x) (y_i - \Hat y) - \over - \sqrt{1/(n-1) \sum (x_i - \Hat x)^2} \sqrt{1/(n-1) \sum (y_i - \Hat y)^2} - } + -- Function: unsigned int gsl_ran_pascal (const gsl_rng * R, double P, + unsigned int N) + This function returns a random integer from the Pascal + distribution. The Pascal distribution is simply a negative + binomial distribution with an integer value of n. - -- Function: double gsl_stats_spearman (const double DATA1[], const - size_t STRIDE1, const double DATA2[], const size_t STRIDE2, - const size_t N, double WORK[]) - This function computes the Spearman rank correlation coefficient - between the datasets DATA1 and DATA2 which must both be of the same - length N. Additional workspace of size 2*N is required in WORK. - The Spearman rank correlation between vectors x and y is equivalent - to the Pearson correlation between the ranked vectors x_R and y_R, - where ranks are defined to be the average of the positions of an - element in the ascending order of the values. + p(k) = {(n + k - 1)! \over k! (n - 1)! } p^n (1-p)^k - -File: gsl-ref.info, Node: Weighted Samples, Next: Maximum and Minimum values, Prev: Correlation, Up: Statistics + for k >= 0 -21.7 Weighted Samples -===================== + -- Function: double gsl_ran_pascal_pdf (unsigned int K, double P, + unsigned int N) + This function computes the probability p(k) of obtaining K from a + Pascal distribution with parameters P and N, using the formula + given above. -The functions described in this section allow the computation of -statistics for weighted samples. The functions accept an array of -samples, x_i, with associated weights, w_i. Each sample x_i is -considered as having been drawn from a Gaussian distribution with -variance \sigma_i^2. The sample weight w_i is defined as the reciprocal -of this variance, w_i = 1/\sigma_i^2. Setting a weight to zero -corresponds to removing a sample from a dataset. - -- Function: double gsl_stats_wmean (const double W[], size_t WSTRIDE, - const double DATA[], size_t STRIDE, size_t N) - This function returns the weighted mean of the dataset DATA with - stride STRIDE and length N, using the set of weights W with stride - WSTRIDE and length N. The weighted mean is defined as, + -- Function: double gsl_cdf_pascal_P (unsigned int K, double P, + unsigned int N) + -- Function: double gsl_cdf_pascal_Q (unsigned int K, double P, + unsigned int N) + These functions compute the cumulative distribution functions P(k), + Q(k) for the Pascal distribution with parameters P and N. - \Hat\mu = (\sum w_i x_i) / (\sum w_i) + +File: gsl-ref.info, Node: The Geometric Distribution, Next: The Hypergeometric Distribution, Prev: The Pascal Distribution, Up: Random Number Distributions - -- Function: double gsl_stats_wvariance (const double W[], size_t - WSTRIDE, const double DATA[], size_t STRIDE, size_t N) - This function returns the estimated variance of the dataset DATA - with stride STRIDE and length N, using the set of weights W with - stride WSTRIDE and length N. The estimated variance of a weighted - dataset is calculated as, +20.36 The Geometric Distribution +================================ - \Hat\sigma^2 = ((\sum w_i)/((\sum w_i)^2 - \sum (w_i^2))) - \sum w_i (x_i - \Hat\mu)^2 + -- Function: unsigned int gsl_ran_geometric (const gsl_rng * R, double + P) + This function returns a random integer from the geometric + distribution, the number of independent trials with probability P + until the first success. The probability distribution for + geometric variates is, - Note that this expression reduces to an unweighted variance with - the familiar 1/(N-1) factor when there are N equal non-zero - weights. + p(k) = p (1-p)^(k-1) - -- Function: double gsl_stats_wvariance_m (const double W[], size_t - WSTRIDE, const double DATA[], size_t STRIDE, size_t N, double - WMEAN) - This function returns the estimated variance of the weighted - dataset DATA using the given weighted mean WMEAN. + for k >= 1. Note that the distribution begins with k=1 with this + definition. There is another convention in which the exponent k-1 + is replaced by k. - -- Function: double gsl_stats_wsd (const double W[], size_t WSTRIDE, - const double DATA[], size_t STRIDE, size_t N) - The standard deviation is defined as the square root of the - variance. This function returns the square root of the - corresponding variance function 'gsl_stats_wvariance' above. + -- Function: double gsl_ran_geometric_pdf (unsigned int K, double P) + This function computes the probability p(k) of obtaining K from a + geometric distribution with probability parameter P, using the + formula given above. - -- Function: double gsl_stats_wsd_m (const double W[], size_t WSTRIDE, - const double DATA[], size_t STRIDE, size_t N, double WMEAN) - This function returns the square root of the corresponding variance - function 'gsl_stats_wvariance_m' above. - -- Function: double gsl_stats_wvariance_with_fixed_mean (const double - W[], size_t WSTRIDE, const double DATA[], size_t STRIDE, - size_t N, const double MEAN) - This function computes an unbiased estimate of the variance of the - weighted dataset DATA when the population mean MEAN of the - underlying distribution is known _a priori_. In this case the - estimator for the variance replaces the sample mean \Hat\mu by the - known population mean \mu, + -- Function: double gsl_cdf_geometric_P (unsigned int K, double P) + -- Function: double gsl_cdf_geometric_Q (unsigned int K, double P) + These functions compute the cumulative distribution functions P(k), + Q(k) for the geometric distribution with parameter P. - \Hat\sigma^2 = (\sum w_i (x_i - \mu)^2) / (\sum w_i) + +File: gsl-ref.info, Node: The Hypergeometric Distribution, Next: The Logarithmic Distribution, Prev: The Geometric Distribution, Up: Random Number Distributions - -- Function: double gsl_stats_wsd_with_fixed_mean (const double W[], - size_t WSTRIDE, const double DATA[], size_t STRIDE, size_t N, - const double MEAN) - The standard deviation is defined as the square root of the - variance. This function returns the square root of the - corresponding variance function above. +20.37 The Hypergeometric Distribution +===================================== - -- Function: double gsl_stats_wtss (const double W[], const size_t - WSTRIDE, const double DATA[], size_t STRIDE, size_t N) - -- Function: double gsl_stats_wtss_m (const double W[], const size_t - WSTRIDE, const double DATA[], size_t STRIDE, size_t N, double - WMEAN) - These functions return the weighted total sum of squares (TSS) of - DATA about the weighted mean. For 'gsl_stats_wtss_m' the - user-supplied value of WMEAN is used, and for 'gsl_stats_wtss' it - is computed using 'gsl_stats_wmean'. + -- Function: unsigned int gsl_ran_hypergeometric (const gsl_rng * R, + unsigned int N1, unsigned int N2, unsigned int T) + This function returns a random integer from the hypergeometric + distribution. The probability distribution for hypergeometric + random variates is, - TSS = \sum w_i (x_i - wmean)^2 + p(k) = C(n_1, k) C(n_2, t - k) / C(n_1 + n_2, t) - -- Function: double gsl_stats_wabsdev (const double W[], size_t - WSTRIDE, const double DATA[], size_t STRIDE, size_t N) - This function computes the weighted absolute deviation from the - weighted mean of DATA. The absolute deviation from the mean is - defined as, + where C(a,b) = a!/(b!(a-b)!) and t <= n_1 + n_2. The domain of k + is max(0,t-n_2), ..., min(t,n_1). - absdev = (\sum w_i |x_i - \Hat\mu|) / (\sum w_i) + If a population contains n_1 elements of "type 1" and n_2 elements + of "type 2" then the hypergeometric distribution gives the + probability of obtaining k elements of "type 1" in t samples from + the population without replacement. - -- Function: double gsl_stats_wabsdev_m (const double W[], size_t - WSTRIDE, const double DATA[], size_t STRIDE, size_t N, double - WMEAN) - This function computes the absolute deviation of the weighted - dataset DATA about the given weighted mean WMEAN. + -- Function: double gsl_ran_hypergeometric_pdf (unsigned int K, + unsigned int N1, unsigned int N2, unsigned int T) + This function computes the probability p(k) of obtaining K from a + hypergeometric distribution with parameters N1, N2, T, using the + formula given above. - -- Function: double gsl_stats_wskew (const double W[], size_t WSTRIDE, - const double DATA[], size_t STRIDE, size_t N) - This function computes the weighted skewness of the dataset DATA. - skew = (\sum w_i ((x_i - \Hat x)/\Hat \sigma)^3) / (\sum w_i) + -- Function: double gsl_cdf_hypergeometric_P (unsigned int K, unsigned + int N1, unsigned int N2, unsigned int T) + -- Function: double gsl_cdf_hypergeometric_Q (unsigned int K, unsigned + int N1, unsigned int N2, unsigned int T) + These functions compute the cumulative distribution functions P(k), + Q(k) for the hypergeometric distribution with parameters N1, N2 and + T. - -- Function: double gsl_stats_wskew_m_sd (const double W[], size_t - WSTRIDE, const double DATA[], size_t STRIDE, size_t N, double - WMEAN, double WSD) - This function computes the weighted skewness of the dataset DATA - using the given values of the weighted mean and weighted standard - deviation, WMEAN and WSD. + +File: gsl-ref.info, Node: The Logarithmic Distribution, Next: Shuffling and Sampling, Prev: The Hypergeometric Distribution, Up: Random Number Distributions - -- Function: double gsl_stats_wkurtosis (const double W[], size_t - WSTRIDE, const double DATA[], size_t STRIDE, size_t N) - This function computes the weighted kurtosis of the dataset DATA. +20.38 The Logarithmic Distribution +================================== - kurtosis = ((\sum w_i ((x_i - \Hat x)/\Hat \sigma)^4) / (\sum w_i)) - 3 + -- Function: unsigned int gsl_ran_logarithmic (const gsl_rng * R, + double P) + This function returns a random integer from the logarithmic + distribution. The probability distribution for logarithmic random + variates is, - -- Function: double gsl_stats_wkurtosis_m_sd (const double W[], size_t - WSTRIDE, const double DATA[], size_t STRIDE, size_t N, double - WMEAN, double WSD) - This function computes the weighted kurtosis of the dataset DATA - using the given values of the weighted mean and weighted standard - deviation, WMEAN and WSD. + p(k) = {-1 \over \log(1-p)} {(p^k \over k)} - -File: gsl-ref.info, Node: Maximum and Minimum values, Next: Median and Percentiles, Prev: Weighted Samples, Up: Statistics + for k >= 1. -21.8 Maximum and Minimum values -=============================== + -- Function: double gsl_ran_logarithmic_pdf (unsigned int K, double P) + This function computes the probability p(k) of obtaining K from a + logarithmic distribution with probability parameter P, using the + formula given above. -The following functions find the maximum and minimum values of a dataset -(or their indices). If the data contains 'NaN's then a 'NaN' will be -returned, since the maximum or minimum value is undefined. For -functions which return an index, the location of the first 'NaN' in the -array is returned. - -- Function: double gsl_stats_max (const double DATA[], size_t STRIDE, - size_t N) - This function returns the maximum value in DATA, a dataset of - length N with stride STRIDE. The maximum value is defined as the - value of the element x_i which satisfies x_i >= x_j for all j. + +File: gsl-ref.info, Node: Shuffling and Sampling, Next: Random Number Distribution Examples, Prev: The Logarithmic Distribution, Up: Random Number Distributions - If you want instead to find the element with the largest absolute - magnitude you will need to apply 'fabs' or 'abs' to your data - before calling this function. +20.39 Shuffling and Sampling +============================ - -- Function: double gsl_stats_min (const double DATA[], size_t STRIDE, - size_t N) - This function returns the minimum value in DATA, a dataset of - length N with stride STRIDE. The minimum value is defined as the - value of the element x_i which satisfies x_i <= x_j for all j. +The following functions allow the shuffling and sampling of a set of +objects. The algorithms rely on a random number generator as a source +of randomness and a poor quality generator can lead to correlations in +the output. In particular it is important to avoid generators with a +short period. For more information see Knuth, v2, 3rd ed, Section +3.4.2, "Random Sampling and Shuffling". - If you want instead to find the element with the smallest absolute - magnitude you will need to apply 'fabs' or 'abs' to your data - before calling this function. + -- Function: void gsl_ran_shuffle (const gsl_rng * R, void * BASE, + size_t N, size_t SIZE) - -- Function: void gsl_stats_minmax (double * MIN, double * MAX, const - double DATA[], size_t STRIDE, size_t N) - This function finds both the minimum and maximum values MIN, MAX in - DATA in a single pass. + This function randomly shuffles the order of N objects, each of + size SIZE, stored in the array BASE[0..N-1]. The output of the + random number generator R is used to produce the permutation. The + algorithm generates all possible n! permutations with equal + probability, assuming a perfect source of random numbers. - -- Function: size_t gsl_stats_max_index (const double DATA[], size_t - STRIDE, size_t N) - This function returns the index of the maximum value in DATA, a - dataset of length N with stride STRIDE. The maximum value is - defined as the value of the element x_i which satisfies x_i >= x_j - for all j. When there are several equal maximum elements then the - first one is chosen. + The following code shows how to shuffle the numbers from 0 to 51, - -- Function: size_t gsl_stats_min_index (const double DATA[], size_t - STRIDE, size_t N) - This function returns the index of the minimum value in DATA, a - dataset of length N with stride STRIDE. The minimum value is - defined as the value of the element x_i which satisfies x_i >= x_j - for all j. When there are several equal minimum elements then the - first one is chosen. + int a[52]; - -- Function: void gsl_stats_minmax_index (size_t * MIN_INDEX, size_t * - MAX_INDEX, const double DATA[], size_t STRIDE, size_t N) - This function returns the indexes MIN_INDEX, MAX_INDEX of the - minimum and maximum values in DATA in a single pass. + for (i = 0; i < 52; i++) + { + a[i] = i; + } - -File: gsl-ref.info, Node: Median and Percentiles, Next: Example statistical programs, Prev: Maximum and Minimum values, Up: Statistics + gsl_ran_shuffle (r, a, 52, sizeof (int)); -21.9 Median and Percentiles -=========================== + -- Function: int gsl_ran_choose (const gsl_rng * R, void * DEST, size_t + K, void * SRC, size_t N, size_t SIZE) + This function fills the array DEST[k] with K objects taken randomly + from the N elements of the array SRC[0..N-1]. The objects are each + of size SIZE. The output of the random number generator R is used + to make the selection. The algorithm ensures all possible samples + are equally likely, assuming a perfect source of randomness. -The median and percentile functions described in this section operate on -sorted data. For convenience we use "quantiles", measured on a scale of -0 to 1, instead of percentiles (which use a scale of 0 to 100). + The objects are sampled _without_ replacement, thus each object can + only appear once in DEST[k]. It is required that K be less than or + equal to 'n'. The objects in DEST will be in the same relative + order as those in SRC. You will need to call 'gsl_ran_shuffle(r, + dest, n, size)' if you want to randomize the order. - -- Function: double gsl_stats_median_from_sorted_data (const double - SORTED_DATA[], size_t STRIDE, size_t N) - This function returns the median value of SORTED_DATA, a dataset of - length N with stride STRIDE. The elements of the array must be in - ascending numerical order. There are no checks to see whether the - data are sorted, so the function 'gsl_sort' should always be used - first. - - When the dataset has an odd number of elements the median is the - value of element (n-1)/2. When the dataset has an even number of - elements the median is the mean of the two nearest middle values, - elements (n-1)/2 and n/2. Since the algorithm for computing the - median involves interpolation this function always returns a - floating-point number, even for integer data types. - - -- Function: double gsl_stats_quantile_from_sorted_data (const double - SORTED_DATA[], size_t STRIDE, size_t N, double F) - This function returns a quantile value of SORTED_DATA, a - double-precision array of length N with stride STRIDE. The - elements of the array must be in ascending numerical order. The - quantile is determined by the F, a fraction between 0 and 1. For - example, to compute the value of the 75th percentile F should have - the value 0.75. - - There are no checks to see whether the data are sorted, so the - function 'gsl_sort' should always be used first. + The following code shows how to select a random sample of three + unique numbers from the set 0 to 99, - The quantile is found by interpolation, using the formula + double a[3], b[100]; - quantile = (1 - \delta) x_i + \delta x_{i+1} + for (i = 0; i < 100; i++) + { + b[i] = (double) i; + } - where i is 'floor'((n - 1)f) and \delta is (n-1)f - i. + gsl_ran_choose (r, a, 3, b, 100, sizeof (double)); - Thus the minimum value of the array ('data[0*stride]') is given by - F equal to zero, the maximum value ('data[(n-1)*stride]') is given - by F equal to one and the median value is given by F equal to 0.5. - Since the algorithm for computing quantiles involves interpolation - this function always returns a floating-point number, even for - integer data types. + -- Function: void gsl_ran_sample (const gsl_rng * R, void * DEST, + size_t K, void * SRC, size_t N, size_t SIZE) + This function is like 'gsl_ran_choose' but samples K items from the + original array of N items SRC with replacement, so the same object + can appear more than once in the output sequence DEST. There is no + requirement that K be less than N in this case.  -File: gsl-ref.info, Node: Example statistical programs, Next: Statistics References and Further Reading, Prev: Median and Percentiles, Up: Statistics +File: gsl-ref.info, Node: Random Number Distribution Examples, Next: Random Number Distribution References and Further Reading, Prev: Shuffling and Sampling, Up: Random Number Distributions -21.10 Examples +20.40 Examples ============== -Here is a basic example of how to use the statistical functions: +The following program demonstrates the use of a random number generator +to produce variates from a distribution. It prints 10 samples from the +Poisson distribution with a mean of 3. #include - #include + #include + #include int - main(void) + main (void) { - double data[5] = {17.2, 18.1, 16.5, 18.3, 12.6}; - double mean, variance, largest, smallest; + const gsl_rng_type * T; + gsl_rng * r; - mean = gsl_stats_mean(data, 1, 5); - variance = gsl_stats_variance(data, 1, 5); - largest = gsl_stats_max(data, 1, 5); - smallest = gsl_stats_min(data, 1, 5); + int i, n = 10; + double mu = 3.0; - printf ("The dataset is %g, %g, %g, %g, %g\n", - data[0], data[1], data[2], data[3], data[4]); + /* create a generator chosen by the + environment variable GSL_RNG_TYPE */ - printf ("The sample mean is %g\n", mean); - printf ("The estimated variance is %g\n", variance); - printf ("The largest value is %g\n", largest); - printf ("The smallest value is %g\n", smallest); + gsl_rng_env_setup(); + + T = gsl_rng_default; + r = gsl_rng_alloc (T); + + /* print n random variates chosen from + the poisson distribution with mean + parameter mu */ + + for (i = 0; i < n; i++) + { + unsigned int k = gsl_ran_poisson (r, mu); + printf (" %u", k); + } + + printf ("\n"); + gsl_rng_free (r); return 0; } - The program should produce the following output, +If the library and header files are installed under '/usr/local' (the +default location) then the program can be compiled with these options, - The dataset is 17.2, 18.1, 16.5, 18.3, 12.6 - The sample mean is 16.54 - The estimated variance is 5.373 - The largest value is 18.3 - The smallest value is 12.6 + $ gcc -Wall demo.c -lgsl -lgslcblas -lm - Here is an example using sorted data, +Here is the output of the program, + + $ ./a.out + 2 5 5 2 1 0 3 4 1 1 + +The variates depend on the seed used by the generator. The seed for the +default generator type 'gsl_rng_default' can be changed with the +'GSL_RNG_SEED' environment variable to produce a different stream of +variates, + + $ GSL_RNG_SEED=123 ./a.out + 4 5 6 3 3 1 4 2 5 5 + +The following program generates a random walk in two dimensions. #include - #include - #include + #include + #include int - main(void) + main (void) { - double data[5] = {17.2, 18.1, 16.5, 18.3, 12.6}; - double median, upperq, lowerq; - - printf ("Original dataset: %g, %g, %g, %g, %g\n", - data[0], data[1], data[2], data[3], data[4]); + int i; + double x = 0, y = 0, dx, dy; - gsl_sort (data, 1, 5); + const gsl_rng_type * T; + gsl_rng * r; - printf ("Sorted dataset: %g, %g, %g, %g, %g\n", - data[0], data[1], data[2], data[3], data[4]); + gsl_rng_env_setup(); + T = gsl_rng_default; + r = gsl_rng_alloc (T); - median - = gsl_stats_median_from_sorted_data (data, - 1, 5); + printf ("%g %g\n", x, y); - upperq - = gsl_stats_quantile_from_sorted_data (data, - 1, 5, - 0.75); - lowerq - = gsl_stats_quantile_from_sorted_data (data, - 1, 5, - 0.25); + for (i = 0; i < 10; i++) + { + gsl_ran_dir_2d (r, &dx, &dy); + x += dx; y += dy; + printf ("%g %g\n", x, y); + } - printf ("The median is %g\n", median); - printf ("The upper quartile is %g\n", upperq); - printf ("The lower quartile is %g\n", lowerq); + gsl_rng_free (r); return 0; } - This program should produce the following output, +Here is some output from the program, four 10-step random walks from the +origin, - Original dataset: 17.2, 18.1, 16.5, 18.3, 12.6 - Sorted dataset: 12.6, 16.5, 17.2, 18.1, 18.3 - The median is 17.2 - The upper quartile is 18.1 - The lower quartile is 16.5 + The following program computes the upper and lower cumulative +distribution functions for the standard normal distribution at x=2. - -File: gsl-ref.info, Node: Statistics References and Further Reading, Prev: Example statistical programs, Up: Statistics + #include + #include -21.11 References and Further Reading -==================================== + int + main (void) + { + double P, Q; + double x = 2.0; -The standard reference for almost any topic in statistics is the -multi-volume 'Advanced Theory of Statistics' by Kendall and Stuart. + P = gsl_cdf_ugaussian_P (x); + printf ("prob(x < %f) = %f\n", x, P); - Maurice Kendall, Alan Stuart, and J. Keith Ord. 'The Advanced - Theory of Statistics' (multiple volumes) reprinted as 'Kendall's - Advanced Theory of Statistics'. Wiley, ISBN 047023380X. + Q = gsl_cdf_ugaussian_Q (x); + printf ("prob(x > %f) = %f\n", x, Q); -Many statistical concepts can be more easily understood by a Bayesian -approach. The following book by Gelman, Carlin, Stern and Rubin gives a -comprehensive coverage of the subject. + x = gsl_cdf_ugaussian_Pinv (P); + printf ("Pinv(%f) = %f\n", P, x); - Andrew Gelman, John B. Carlin, Hal S. Stern, Donald B. Rubin. - 'Bayesian Data Analysis'. Chapman & Hall, ISBN 0412039915. + x = gsl_cdf_ugaussian_Qinv (Q); + printf ("Qinv(%f) = %f\n", Q, x); -For physicists the Particle Data Group provides useful reviews of -Probability and Statistics in the "Mathematical Tools" section of its -Annual Review of Particle Physics. + return 0; + } - 'Review of Particle Properties' R.M. Barnett et al., Physical - Review D54, 1 (1996) +Here is the output of the program, -The Review of Particle Physics is available online at the website -. + prob(x < 2.000000) = 0.977250 + prob(x > 2.000000) = 0.022750 + Pinv(0.977250) = 2.000000 + Qinv(0.022750) = 2.000000  -File: gsl-ref.info, Node: Histograms, Next: N-tuples, Prev: Statistics, Up: Top +File: gsl-ref.info, Node: Random Number Distribution References and Further Reading, Prev: Random Number Distribution Examples, Up: Random Number Distributions -22 Histograms -************* +20.41 References and Further Reading +==================================== -This chapter describes functions for creating histograms. Histograms -provide a convenient way of summarizing the distribution of a set of -data. A histogram consists of a set of "bins" which count the number of -events falling into a given range of a continuous variable x. In GSL -the bins of a histogram contain floating-point numbers, so they can be -used to record both integer and non-integer distributions. The bins can -use arbitrary sets of ranges (uniformly spaced bins are the default). -Both one and two-dimensional histograms are supported. +For an encyclopaedic coverage of the subject readers are advised to +consult the book 'Non-Uniform Random Variate Generation' by Luc Devroye. +It covers every imaginable distribution and provides hundreds of +algorithms. - Once a histogram has been created it can also be converted into a -probability distribution function. The library provides efficient -routines for selecting random samples from probability distributions. -This can be useful for generating simulations based on real data. + Luc Devroye, 'Non-Uniform Random Variate Generation', + Springer-Verlag, ISBN 0-387-96305-7. Available online at + . - The functions are declared in the header files 'gsl_histogram.h' and -'gsl_histogram2d.h'. +The subject of random variate generation is also reviewed by Knuth, who +describes algorithms for all the major distributions. -* Menu: + Donald E. Knuth, 'The Art of Computer Programming: Seminumerical + Algorithms' (Vol 2, 3rd Ed, 1997), Addison-Wesley, ISBN 0201896842. -* The histogram struct:: -* Histogram allocation:: -* Copying Histograms:: -* Updating and accessing histogram elements:: -* Searching histogram ranges:: -* Histogram Statistics:: -* Histogram Operations:: -* Reading and writing histograms:: -* Resampling from histograms:: -* The histogram probability distribution struct:: -* Example programs for histograms:: -* Two dimensional histograms:: -* The 2D histogram struct:: -* 2D Histogram allocation:: -* Copying 2D Histograms:: -* Updating and accessing 2D histogram elements:: -* Searching 2D histogram ranges:: -* 2D Histogram Statistics:: -* 2D Histogram Operations:: -* Reading and writing 2D histograms:: -* Resampling from 2D histograms:: -* Example programs for 2D histograms:: +The Particle Data Group provides a short review of techniques for +generating distributions of random numbers in the "Monte Carlo" section +of its Annual Review of Particle Physics. - -File: gsl-ref.info, Node: The histogram struct, Next: Histogram allocation, Up: Histograms + 'Review of Particle Properties' R.M. Barnett et al., Physical + Review D54, 1 (1996) . -22.1 The histogram struct -========================= +The Review of Particle Physics is available online in postscript and pdf +format. -A histogram is defined by the following struct, +An overview of methods used to compute cumulative distribution functions +can be found in 'Statistical Computing' by W.J. Kennedy and J.E. Gentle. +Another general reference is 'Elements of Statistical Computing' by R.A. +Thisted. - -- Data Type: gsl_histogram - 'size_t n' - This is the number of histogram bins - 'double * range' - The ranges of the bins are stored in an array of N+1 elements - pointed to by RANGE. - 'double * bin' - The counts for each bin are stored in an array of N elements - pointed to by BIN. The bins are floating-point numbers, so - you can increment them by non-integer values if necessary. + William E. Kennedy and James E. Gentle, 'Statistical Computing' + (1980), Marcel Dekker, ISBN 0-8247-6898-1. -The range for BIN[i] is given by RANGE[i] to RANGE[i+1]. For n bins -there are n+1 entries in the array RANGE. Each bin is inclusive at the -lower end and exclusive at the upper end. Mathematically this means -that the bins are defined by the following inequality, - bin[i] corresponds to range[i] <= x < range[i+1] + Ronald A. Thisted, 'Elements of Statistical Computing' (1988), + Chapman & Hall, ISBN 0-412-01371-1. -Here is a diagram of the correspondence between ranges and bins on the -number-line for x, +The cumulative distribution functions for the Gaussian distribution are +based on the following papers, + 'Rational Chebyshev Approximations Using Linear Equations', W.J. + Cody, W. Fraser, J.F. Hart. Numerische Mathematik 12, 242-251 + (1968). - [ bin[0] )[ bin[1] )[ bin[2] )[ bin[3] )[ bin[4] ) - ---|---------|---------|---------|---------|---------|--- x - r[0] r[1] r[2] r[3] r[4] r[5] + 'Rational Chebyshev Approximations for the Error Function', W.J. + Cody. Mathematics of Computation 23, n107, 631-637 (July 1969). -In this picture the values of the RANGE array are denoted by r. On the -left-hand side of each bin the square bracket '[' denotes an inclusive -lower bound (r <= x), and the round parentheses ')' on the right-hand -side denote an exclusive upper bound (x < r). Thus any samples which -fall on the upper end of the histogram are excluded. If you want to -include this value for the last bin you will need to add an extra bin to -your histogram. + +File: gsl-ref.info, Node: Statistics, Next: Running Statistics, Prev: Random Number Distributions, Up: Top - The 'gsl_histogram' struct and its associated functions are defined -in the header file 'gsl_histogram.h'. +21 Statistics +************* + +This chapter describes the statistical functions in the library. The +basic statistical functions include routines to compute the mean, +variance and standard deviation. More advanced functions allow you to +calculate absolute deviations, skewness, and kurtosis as well as the +median and arbitrary percentiles. The algorithms use recurrence +relations to compute average quantities in a stable way, without large +intermediate values that might overflow. + + The functions are available in versions for datasets in the standard +floating-point and integer types. The versions for double precision +floating-point data have the prefix 'gsl_stats' and are declared in the +header file 'gsl_statistics_double.h'. The versions for integer data +have the prefix 'gsl_stats_int' and are declared in the header file +'gsl_statistics_int.h'. All the functions operate on C arrays with a +STRIDE parameter specifying the spacing between elements. + +* Menu: + +* Mean and standard deviation and variance:: +* Absolute deviation:: +* Higher moments (skewness and kurtosis):: +* Autocorrelation:: +* Covariance:: +* Correlation:: +* Weighted Samples:: +* Maximum and Minimum values:: +* Median and Percentiles:: +* Example statistical programs:: +* Statistics References and Further Reading::  -File: gsl-ref.info, Node: Histogram allocation, Next: Copying Histograms, Prev: The histogram struct, Up: Histograms +File: gsl-ref.info, Node: Mean and standard deviation and variance, Next: Absolute deviation, Up: Statistics -22.2 Histogram allocation -========================= +21.1 Mean, Standard Deviation and Variance +========================================== -The functions for allocating memory to a histogram follow the style of -'malloc' and 'free'. In addition they also perform their own error -checking. If there is insufficient memory available to allocate a -histogram then the functions call the error handler (with an error -number of 'GSL_ENOMEM') in addition to returning a null pointer. Thus -if you use the library error handler to abort your program then it isn't -necessary to check every histogram 'alloc'. + -- Function: double gsl_stats_mean (const double DATA[], size_t STRIDE, + size_t N) + This function returns the arithmetic mean of DATA, a dataset of + length N with stride STRIDE. The arithmetic mean, or "sample + mean", is denoted by \Hat\mu and defined as, - -- Function: gsl_histogram * gsl_histogram_alloc (size_t N) - This function allocates memory for a histogram with N bins, and - returns a pointer to a newly created 'gsl_histogram' struct. If - insufficient memory is available a null pointer is returned and the - error handler is invoked with an error code of 'GSL_ENOMEM'. The - bins and ranges are not initialized, and should be prepared using - one of the range-setting functions below in order to make the - histogram ready for use. + \Hat\mu = (1/N) \sum x_i - -- Function: int gsl_histogram_set_ranges (gsl_histogram * H, const - double RANGE[], size_t SIZE) - This function sets the ranges of the existing histogram H using the - array RANGE of size SIZE. The values of the histogram bins are - reset to zero. The 'range' array should contain the desired bin - limits. The ranges can be arbitrary, subject to the restriction - that they are monotonically increasing. + where x_i are the elements of the dataset DATA. For samples drawn + from a gaussian distribution the variance of \Hat\mu is \sigma^2 / + N. - The following example shows how to create a histogram with - logarithmic bins with ranges [1,10), [10,100) and [100,1000). + -- Function: double gsl_stats_variance (const double DATA[], size_t + STRIDE, size_t N) + This function returns the estimated, or "sample", variance of DATA, + a dataset of length N with stride STRIDE. The estimated variance + is denoted by \Hat\sigma^2 and is defined by, - gsl_histogram * h = gsl_histogram_alloc (3); + \Hat\sigma^2 = (1/(N-1)) \sum (x_i - \Hat\mu)^2 - /* bin[0] covers the range 1 <= x < 10 */ - /* bin[1] covers the range 10 <= x < 100 */ - /* bin[2] covers the range 100 <= x < 1000 */ + where x_i are the elements of the dataset DATA. Note that the + normalization factor of 1/(N-1) results from the derivation of + \Hat\sigma^2 as an unbiased estimator of the population variance + \sigma^2. For samples drawn from a Gaussian distribution the + variance of \Hat\sigma^2 itself is 2 \sigma^4 / N. - double range[4] = { 1.0, 10.0, 100.0, 1000.0 }; + This function computes the mean via a call to 'gsl_stats_mean'. If + you have already computed the mean then you can pass it directly to + 'gsl_stats_variance_m'. - gsl_histogram_set_ranges (h, range, 4); + -- Function: double gsl_stats_variance_m (const double DATA[], size_t + STRIDE, size_t N, double MEAN) + This function returns the sample variance of DATA relative to the + given value of MEAN. The function is computed with \Hat\mu + replaced by the value of MEAN that you supply, - Note that the size of the RANGE array should be defined to be one - element bigger than the number of bins. The additional element is - required for the upper value of the final bin. + \Hat\sigma^2 = (1/(N-1)) \sum (x_i - mean)^2 - -- Function: int gsl_histogram_set_ranges_uniform (gsl_histogram * H, - double XMIN, double XMAX) - This function sets the ranges of the existing histogram H to cover - the range XMIN to XMAX uniformly. The values of the histogram bins - are reset to zero. The bin ranges are shown in the table below, - bin[0] corresponds to xmin <= x < xmin + d - bin[1] corresponds to xmin + d <= x < xmin + 2 d - ...... - bin[n-1] corresponds to xmin + (n-1)d <= x < xmax + -- Function: double gsl_stats_sd (const double DATA[], size_t STRIDE, + size_t N) + -- Function: double gsl_stats_sd_m (const double DATA[], size_t STRIDE, + size_t N, double MEAN) + The standard deviation is defined as the square root of the + variance. These functions return the square root of the + corresponding variance functions above. - where d is the bin spacing, d = (xmax-xmin)/n. + -- Function: double gsl_stats_tss (const double DATA[], size_t STRIDE, + size_t N) + -- Function: double gsl_stats_tss_m (const double DATA[], size_t + STRIDE, size_t N, double MEAN) + These functions return the total sum of squares (TSS) of DATA about + the mean. For 'gsl_stats_tss_m' the user-supplied value of MEAN is + used, and for 'gsl_stats_tss' it is computed using + 'gsl_stats_mean'. - -- Function: void gsl_histogram_free (gsl_histogram * H) - This function frees the histogram H and all of the memory - associated with it. + TSS = \sum (x_i - mean)^2 + + -- Function: double gsl_stats_variance_with_fixed_mean (const double + DATA[], size_t STRIDE, size_t N, double MEAN) + This function computes an unbiased estimate of the variance of DATA + when the population mean MEAN of the underlying distribution is + known _a priori_. In this case the estimator for the variance uses + the factor 1/N and the sample mean \Hat\mu is replaced by the known + population mean \mu, + + \Hat\sigma^2 = (1/N) \sum (x_i - \mu)^2 + + -- Function: double gsl_stats_sd_with_fixed_mean (const double DATA[], + size_t STRIDE, size_t N, double MEAN) + This function calculates the standard deviation of DATA for a fixed + population mean MEAN. The result is the square root of the + corresponding variance function.  -File: gsl-ref.info, Node: Copying Histograms, Next: Updating and accessing histogram elements, Prev: Histogram allocation, Up: Histograms +File: gsl-ref.info, Node: Absolute deviation, Next: Higher moments (skewness and kurtosis), Prev: Mean and standard deviation and variance, Up: Statistics -22.3 Copying Histograms +21.2 Absolute deviation ======================= - -- Function: int gsl_histogram_memcpy (gsl_histogram * DEST, const - gsl_histogram * SRC) - This function copies the histogram SRC into the pre-existing - histogram DEST, making DEST into an exact copy of SRC. The two - histograms must be of the same size. + -- Function: double gsl_stats_absdev (const double DATA[], size_t + STRIDE, size_t N) + This function computes the absolute deviation from the mean of + DATA, a dataset of length N with stride STRIDE. The absolute + deviation from the mean is defined as, - -- Function: gsl_histogram * gsl_histogram_clone (const gsl_histogram * - SRC) - This function returns a pointer to a newly created histogram which - is an exact copy of the histogram SRC. + absdev = (1/N) \sum |x_i - \Hat\mu| - -File: gsl-ref.info, Node: Updating and accessing histogram elements, Next: Searching histogram ranges, Prev: Copying Histograms, Up: Histograms + where x_i are the elements of the dataset DATA. The absolute + deviation from the mean provides a more robust measure of the width + of a distribution than the variance. This function computes the + mean of DATA via a call to 'gsl_stats_mean'. -22.4 Updating and accessing histogram elements -============================================== + -- Function: double gsl_stats_absdev_m (const double DATA[], size_t + STRIDE, size_t N, double MEAN) + This function computes the absolute deviation of the dataset DATA + relative to the given value of MEAN, -There are two ways to access histogram bins, either by specifying an x -coordinate or by using the bin-index directly. The functions for -accessing the histogram through x coordinates use a binary search to -identify the bin which covers the appropriate range. + absdev = (1/N) \sum |x_i - mean| - -- Function: int gsl_histogram_increment (gsl_histogram * H, double X) - This function updates the histogram H by adding one (1.0) to the - bin whose range contains the coordinate X. + This function is useful if you have already computed the mean of + DATA (and want to avoid recomputing it), or wish to calculate the + absolute deviation relative to another value (such as zero, or the + median). - If X lies in the valid range of the histogram then the function - returns zero to indicate success. If X is less than the lower - limit of the histogram then the function returns 'GSL_EDOM', and - none of bins are modified. Similarly, if the value of X is greater - than or equal to the upper limit of the histogram then the function - returns 'GSL_EDOM', and none of the bins are modified. The error - handler is not called, however, since it is often necessary to - compute histograms for a small range of a larger dataset, ignoring - the values outside the range of interest. + +File: gsl-ref.info, Node: Higher moments (skewness and kurtosis), Next: Autocorrelation, Prev: Absolute deviation, Up: Statistics - -- Function: int gsl_histogram_accumulate (gsl_histogram * H, double X, - double WEIGHT) - This function is similar to 'gsl_histogram_increment' but increases - the value of the appropriate bin in the histogram H by the - floating-point number WEIGHT. +21.3 Higher moments (skewness and kurtosis) +=========================================== - -- Function: double gsl_histogram_get (const gsl_histogram * H, size_t - I) - This function returns the contents of the I-th bin of the histogram - H. If I lies outside the valid range of indices for the histogram - then the error handler is called with an error code of 'GSL_EDOM' - and the function returns 0. + -- Function: double gsl_stats_skew (const double DATA[], size_t STRIDE, + size_t N) + This function computes the skewness of DATA, a dataset of length N + with stride STRIDE. The skewness is defined as, - -- Function: int gsl_histogram_get_range (const gsl_histogram * H, - size_t I, double * LOWER, double * UPPER) - This function finds the upper and lower range limits of the I-th - bin of the histogram H. If the index I is valid then the - corresponding range limits are stored in LOWER and UPPER. The - lower limit is inclusive (i.e. events with this coordinate are - included in the bin) and the upper limit is exclusive (i.e. events - with the coordinate of the upper limit are excluded and fall in the - neighboring higher bin, if it exists). The function returns 0 to - indicate success. If I lies outside the valid range of indices for - the histogram then the error handler is called and the function - returns an error code of 'GSL_EDOM'. + skew = (1/N) \sum ((x_i - \Hat\mu)/\Hat\sigma)^3 - -- Function: double gsl_histogram_max (const gsl_histogram * H) - -- Function: double gsl_histogram_min (const gsl_histogram * H) - -- Function: size_t gsl_histogram_bins (const gsl_histogram * H) - These functions return the maximum upper and minimum lower range - limits and the number of bins of the histogram H. They provide a - way of determining these values without accessing the - 'gsl_histogram' struct directly. + where x_i are the elements of the dataset DATA. The skewness + measures the asymmetry of the tails of a distribution. - -- Function: void gsl_histogram_reset (gsl_histogram * H) - This function resets all the bins in the histogram H to zero. + The function computes the mean and estimated standard deviation of + DATA via calls to 'gsl_stats_mean' and 'gsl_stats_sd'. - -File: gsl-ref.info, Node: Searching histogram ranges, Next: Histogram Statistics, Prev: Updating and accessing histogram elements, Up: Histograms + -- Function: double gsl_stats_skew_m_sd (const double DATA[], size_t + STRIDE, size_t N, double MEAN, double SD) + This function computes the skewness of the dataset DATA using the + given values of the mean MEAN and standard deviation SD, -22.5 Searching histogram ranges -=============================== + skew = (1/N) \sum ((x_i - mean)/sd)^3 -The following functions are used by the access and update routines to -locate the bin which corresponds to a given x coordinate. + These functions are useful if you have already computed the mean + and standard deviation of DATA and want to avoid recomputing them. - -- Function: int gsl_histogram_find (const gsl_histogram * H, double X, - size_t * I) - This function finds and sets the index I to the bin number which - covers the coordinate X in the histogram H. The bin is located - using a binary search. The search includes an optimization for - histograms with uniform range, and will return the correct bin - immediately in this case. If X is found in the range of the - histogram then the function sets the index I and returns - 'GSL_SUCCESS'. If X lies outside the valid range of the histogram - then the function returns 'GSL_EDOM' and the error handler is - invoked. + -- Function: double gsl_stats_kurtosis (const double DATA[], size_t + STRIDE, size_t N) + This function computes the kurtosis of DATA, a dataset of length N + with stride STRIDE. The kurtosis is defined as, - -File: gsl-ref.info, Node: Histogram Statistics, Next: Histogram Operations, Prev: Searching histogram ranges, Up: Histograms + kurtosis = ((1/N) \sum ((x_i - \Hat\mu)/\Hat\sigma)^4) - 3 -22.6 Histogram Statistics -========================= + The kurtosis measures how sharply peaked a distribution is, + relative to its width. The kurtosis is normalized to zero for a + Gaussian distribution. - -- Function: double gsl_histogram_max_val (const gsl_histogram * H) - This function returns the maximum value contained in the histogram - bins. + -- Function: double gsl_stats_kurtosis_m_sd (const double DATA[], + size_t STRIDE, size_t N, double MEAN, double SD) + This function computes the kurtosis of the dataset DATA using the + given values of the mean MEAN and standard deviation SD, - -- Function: size_t gsl_histogram_max_bin (const gsl_histogram * H) - This function returns the index of the bin containing the maximum - value. In the case where several bins contain the same maximum - value the smallest index is returned. + kurtosis = ((1/N) \sum ((x_i - mean)/sd)^4) - 3 - -- Function: double gsl_histogram_min_val (const gsl_histogram * H) - This function returns the minimum value contained in the histogram - bins. + This function is useful if you have already computed the mean and + standard deviation of DATA and want to avoid recomputing them. - -- Function: size_t gsl_histogram_min_bin (const gsl_histogram * H) - This function returns the index of the bin containing the minimum - value. In the case where several bins contain the same maximum - value the smallest index is returned. + +File: gsl-ref.info, Node: Autocorrelation, Next: Covariance, Prev: Higher moments (skewness and kurtosis), Up: Statistics - -- Function: double gsl_histogram_mean (const gsl_histogram * H) - This function returns the mean of the histogrammed variable, where - the histogram is regarded as a probability distribution. Negative - bin values are ignored for the purposes of this calculation. The - accuracy of the result is limited by the bin width. +21.4 Autocorrelation +==================== - -- Function: double gsl_histogram_sigma (const gsl_histogram * H) - This function returns the standard deviation of the histogrammed - variable, where the histogram is regarded as a probability - distribution. Negative bin values are ignored for the purposes of - this calculation. The accuracy of the result is limited by the bin - width. + -- Function: double gsl_stats_lag1_autocorrelation (const double + DATA[], const size_t STRIDE, const size_t N) + This function computes the lag-1 autocorrelation of the dataset + DATA. - -- Function: double gsl_histogram_sum (const gsl_histogram * H) - This function returns the sum of all bin values. Negative bin - values are included in the sum. + a_1 = {\sum_{i = 2}^{n} (x_{i} - \Hat\mu) (x_{i-1} - \Hat\mu) + \over + \sum_{i = 1}^{n} (x_{i} - \Hat\mu) (x_{i} - \Hat\mu)} + + -- Function: double gsl_stats_lag1_autocorrelation_m (const double + DATA[], const size_t STRIDE, const size_t N, const double + MEAN) + This function computes the lag-1 autocorrelation of the dataset + DATA using the given value of the mean MEAN.  -File: gsl-ref.info, Node: Histogram Operations, Next: Reading and writing histograms, Prev: Histogram Statistics, Up: Histograms +File: gsl-ref.info, Node: Covariance, Next: Correlation, Prev: Autocorrelation, Up: Statistics -22.7 Histogram Operations -========================= +21.5 Covariance +=============== - -- Function: int gsl_histogram_equal_bins_p (const gsl_histogram * H1, - const gsl_histogram * H2) - This function returns 1 if the all of the individual bin ranges of - the two histograms are identical, and 0 otherwise. + -- Function: double gsl_stats_covariance (const double DATA1[], const + size_t STRIDE1, const double DATA2[], const size_t STRIDE2, + const size_t N) + This function computes the covariance of the datasets DATA1 and + DATA2 which must both be of the same length N. - -- Function: int gsl_histogram_add (gsl_histogram * H1, const - gsl_histogram * H2) - This function adds the contents of the bins in histogram H2 to the - corresponding bins of histogram H1, i.e. h'_1(i) = h_1(i) + - h_2(i). The two histograms must have identical bin ranges. + covar = (1/(n - 1)) \sum_{i = 1}^{n} (x_i - \Hat x) (y_i - \Hat y) - -- Function: int gsl_histogram_sub (gsl_histogram * H1, const - gsl_histogram * H2) - This function subtracts the contents of the bins in histogram H2 - from the corresponding bins of histogram H1, i.e. h'_1(i) = h_1(i) - - h_2(i). The two histograms must have identical bin ranges. + -- Function: double gsl_stats_covariance_m (const double DATA1[], const + size_t STRIDE1, const double DATA2[], const size_t STRIDE2, + const size_t N, const double MEAN1, const double MEAN2) + This function computes the covariance of the datasets DATA1 and + DATA2 using the given values of the means, MEAN1 and MEAN2. This + is useful if you have already computed the means of DATA1 and DATA2 + and want to avoid recomputing them. - -- Function: int gsl_histogram_mul (gsl_histogram * H1, const - gsl_histogram * H2) - This function multiplies the contents of the bins of histogram H1 - by the contents of the corresponding bins in histogram H2, i.e. - h'_1(i) = h_1(i) * h_2(i). The two histograms must have identical - bin ranges. + +File: gsl-ref.info, Node: Correlation, Next: Weighted Samples, Prev: Covariance, Up: Statistics - -- Function: int gsl_histogram_div (gsl_histogram * H1, const - gsl_histogram * H2) - This function divides the contents of the bins of histogram H1 by - the contents of the corresponding bins in histogram H2, i.e. - h'_1(i) = h_1(i) / h_2(i). The two histograms must have identical - bin ranges. +21.6 Correlation +================ - -- Function: int gsl_histogram_scale (gsl_histogram * H, double SCALE) - This function multiplies the contents of the bins of histogram H by - the constant SCALE, i.e. h'_1(i) = h_1(i) * scale. + -- Function: double gsl_stats_correlation (const double DATA1[], const + size_t STRIDE1, const double DATA2[], const size_t STRIDE2, + const size_t N) + This function efficiently computes the Pearson correlation + coefficient between the datasets DATA1 and DATA2 which must both be + of the same length N. + r = cov(x, y) / (\Hat\sigma_x \Hat\sigma_y) + = {1/(n-1) \sum (x_i - \Hat x) (y_i - \Hat y) + \over + \sqrt{1/(n-1) \sum (x_i - \Hat x)^2} \sqrt{1/(n-1) \sum (y_i - \Hat y)^2} + } - -- Function: int gsl_histogram_shift (gsl_histogram * H, double OFFSET) - This function shifts the contents of the bins of histogram H by the - constant OFFSET, i.e. h'_1(i) = h_1(i) + offset. + -- Function: double gsl_stats_spearman (const double DATA1[], const + size_t STRIDE1, const double DATA2[], const size_t STRIDE2, + const size_t N, double WORK[]) + This function computes the Spearman rank correlation coefficient + between the datasets DATA1 and DATA2 which must both be of the same + length N. Additional workspace of size 2*N is required in WORK. + The Spearman rank correlation between vectors x and y is equivalent + to the Pearson correlation between the ranked vectors x_R and y_R, + where ranks are defined to be the average of the positions of an + element in the ascending order of the values.  -File: gsl-ref.info, Node: Reading and writing histograms, Next: Resampling from histograms, Prev: Histogram Operations, Up: Histograms - -22.8 Reading and writing histograms -=================================== +File: gsl-ref.info, Node: Weighted Samples, Next: Maximum and Minimum values, Prev: Correlation, Up: Statistics -The library provides functions for reading and writing histograms to a -file as binary data or formatted text. +21.7 Weighted Samples +===================== - -- Function: int gsl_histogram_fwrite (FILE * STREAM, const - gsl_histogram * H) - This function writes the ranges and bins of the histogram H to the - stream STREAM in binary format. The return value is 0 for success - and 'GSL_EFAILED' if there was a problem writing to the file. - Since the data is written in the native binary format it may not be - portable between different architectures. +The functions described in this section allow the computation of +statistics for weighted samples. The functions accept an array of +samples, x_i, with associated weights, w_i. Each sample x_i is +considered as having been drawn from a Gaussian distribution with +variance \sigma_i^2. The sample weight w_i is defined as the reciprocal +of this variance, w_i = 1/\sigma_i^2. Setting a weight to zero +corresponds to removing a sample from a dataset. - -- Function: int gsl_histogram_fread (FILE * STREAM, gsl_histogram * H) - This function reads into the histogram H from the open stream - STREAM in binary format. The histogram H must be preallocated with - the correct size since the function uses the number of bins in H to - determine how many bytes to read. The return value is 0 for - success and 'GSL_EFAILED' if there was a problem reading from the - file. The data is assumed to have been written in the native - binary format on the same architecture. + -- Function: double gsl_stats_wmean (const double W[], size_t WSTRIDE, + const double DATA[], size_t STRIDE, size_t N) + This function returns the weighted mean of the dataset DATA with + stride STRIDE and length N, using the set of weights W with stride + WSTRIDE and length N. The weighted mean is defined as, - -- Function: int gsl_histogram_fprintf (FILE * STREAM, const - gsl_histogram * H, const char * RANGE_FORMAT, const char * - BIN_FORMAT) - This function writes the ranges and bins of the histogram H - line-by-line to the stream STREAM using the format specifiers - RANGE_FORMAT and BIN_FORMAT. These should be one of the '%g', '%e' - or '%f' formats for floating point numbers. The function returns 0 - for success and 'GSL_EFAILED' if there was a problem writing to the - file. The histogram output is formatted in three columns, and the - columns are separated by spaces, like this, + \Hat\mu = (\sum w_i x_i) / (\sum w_i) - range[0] range[1] bin[0] - range[1] range[2] bin[1] - range[2] range[3] bin[2] - .... - range[n-1] range[n] bin[n-1] + -- Function: double gsl_stats_wvariance (const double W[], size_t + WSTRIDE, const double DATA[], size_t STRIDE, size_t N) + This function returns the estimated variance of the dataset DATA + with stride STRIDE and length N, using the set of weights W with + stride WSTRIDE and length N. The estimated variance of a weighted + dataset is calculated as, - The values of the ranges are formatted using RANGE_FORMAT and the - value of the bins are formatted using BIN_FORMAT. Each line - contains the lower and upper limit of the range of the bins and the - value of the bin itself. Since the upper limit of one bin is the - lower limit of the next there is duplication of these values - between lines but this allows the histogram to be manipulated with - line-oriented tools. + \Hat\sigma^2 = ((\sum w_i)/((\sum w_i)^2 - \sum (w_i^2))) + \sum w_i (x_i - \Hat\mu)^2 - -- Function: int gsl_histogram_fscanf (FILE * STREAM, gsl_histogram * - H) - This function reads formatted data from the stream STREAM into the - histogram H. The data is assumed to be in the three-column format - used by 'gsl_histogram_fprintf'. The histogram H must be - preallocated with the correct length since the function uses the - size of H to determine how many numbers to read. The function - returns 0 for success and 'GSL_EFAILED' if there was a problem - reading from the file. + Note that this expression reduces to an unweighted variance with + the familiar 1/(N-1) factor when there are N equal non-zero + weights. - -File: gsl-ref.info, Node: Resampling from histograms, Next: The histogram probability distribution struct, Prev: Reading and writing histograms, Up: Histograms + -- Function: double gsl_stats_wvariance_m (const double W[], size_t + WSTRIDE, const double DATA[], size_t STRIDE, size_t N, double + WMEAN) + This function returns the estimated variance of the weighted + dataset DATA using the given weighted mean WMEAN. -22.9 Resampling from histograms -=============================== + -- Function: double gsl_stats_wsd (const double W[], size_t WSTRIDE, + const double DATA[], size_t STRIDE, size_t N) + The standard deviation is defined as the square root of the + variance. This function returns the square root of the + corresponding variance function 'gsl_stats_wvariance' above. -A histogram made by counting events can be regarded as a measurement of -a probability distribution. Allowing for statistical error, the height -of each bin represents the probability of an event where the value of x -falls in the range of that bin. The probability distribution function -has the one-dimensional form p(x)dx where, + -- Function: double gsl_stats_wsd_m (const double W[], size_t WSTRIDE, + const double DATA[], size_t STRIDE, size_t N, double WMEAN) + This function returns the square root of the corresponding variance + function 'gsl_stats_wvariance_m' above. - p(x) = n_i/ (N w_i) + -- Function: double gsl_stats_wvariance_with_fixed_mean (const double + W[], size_t WSTRIDE, const double DATA[], size_t STRIDE, + size_t N, const double MEAN) + This function computes an unbiased estimate of the variance of the + weighted dataset DATA when the population mean MEAN of the + underlying distribution is known _a priori_. In this case the + estimator for the variance replaces the sample mean \Hat\mu by the + known population mean \mu, -In this equation n_i is the number of events in the bin which contains -x, w_i is the width of the bin and N is the total number of events. The -distribution of events within each bin is assumed to be uniform. + \Hat\sigma^2 = (\sum w_i (x_i - \mu)^2) / (\sum w_i) - -File: gsl-ref.info, Node: The histogram probability distribution struct, Next: Example programs for histograms, Prev: Resampling from histograms, Up: Histograms + -- Function: double gsl_stats_wsd_with_fixed_mean (const double W[], + size_t WSTRIDE, const double DATA[], size_t STRIDE, size_t N, + const double MEAN) + The standard deviation is defined as the square root of the + variance. This function returns the square root of the + corresponding variance function above. -22.10 The histogram probability distribution struct -=================================================== + -- Function: double gsl_stats_wtss (const double W[], const size_t + WSTRIDE, const double DATA[], size_t STRIDE, size_t N) + -- Function: double gsl_stats_wtss_m (const double W[], const size_t + WSTRIDE, const double DATA[], size_t STRIDE, size_t N, double + WMEAN) + These functions return the weighted total sum of squares (TSS) of + DATA about the weighted mean. For 'gsl_stats_wtss_m' the + user-supplied value of WMEAN is used, and for 'gsl_stats_wtss' it + is computed using 'gsl_stats_wmean'. -The probability distribution function for a histogram consists of a set -of "bins" which measure the probability of an event falling into a given -range of a continuous variable x. A probability distribution function -is defined by the following struct, which actually stores the cumulative -probability distribution function. This is the natural quantity for -generating samples via the inverse transform method, because there is a -one-to-one mapping between the cumulative probability distribution and -the range [0,1]. It can be shown that by taking a uniform random number -in this range and finding its corresponding coordinate in the cumulative -probability distribution we obtain samples with the desired probability -distribution. + TSS = \sum w_i (x_i - wmean)^2 - -- Data Type: gsl_histogram_pdf - 'size_t n' - This is the number of bins used to approximate the probability - distribution function. - 'double * range' - The ranges of the bins are stored in an array of N+1 elements - pointed to by RANGE. - 'double * sum' - The cumulative probability for the bins is stored in an array - of N elements pointed to by SUM. + -- Function: double gsl_stats_wabsdev (const double W[], size_t + WSTRIDE, const double DATA[], size_t STRIDE, size_t N) + This function computes the weighted absolute deviation from the + weighted mean of DATA. The absolute deviation from the mean is + defined as, -The following functions allow you to create a 'gsl_histogram_pdf' struct -which represents this probability distribution and generate random -samples from it. + absdev = (\sum w_i |x_i - \Hat\mu|) / (\sum w_i) - -- Function: gsl_histogram_pdf * gsl_histogram_pdf_alloc (size_t N) - This function allocates memory for a probability distribution with - N bins and returns a pointer to a newly initialized - 'gsl_histogram_pdf' struct. If insufficient memory is available a - null pointer is returned and the error handler is invoked with an - error code of 'GSL_ENOMEM'. + -- Function: double gsl_stats_wabsdev_m (const double W[], size_t + WSTRIDE, const double DATA[], size_t STRIDE, size_t N, double + WMEAN) + This function computes the absolute deviation of the weighted + dataset DATA about the given weighted mean WMEAN. - -- Function: int gsl_histogram_pdf_init (gsl_histogram_pdf * P, const - gsl_histogram * H) - This function initializes the probability distribution P with the - contents of the histogram H. If any of the bins of H are negative - then the error handler is invoked with an error code of 'GSL_EDOM' - because a probability distribution cannot contain negative values. + -- Function: double gsl_stats_wskew (const double W[], size_t WSTRIDE, + const double DATA[], size_t STRIDE, size_t N) + This function computes the weighted skewness of the dataset DATA. - -- Function: void gsl_histogram_pdf_free (gsl_histogram_pdf * P) - This function frees the probability distribution function P and all - of the memory associated with it. + skew = (\sum w_i ((x_i - \Hat x)/\Hat \sigma)^3) / (\sum w_i) - -- Function: double gsl_histogram_pdf_sample (const gsl_histogram_pdf * - P, double R) - This function uses R, a uniform random number between zero and one, - to compute a single random sample from the probability distribution - P. The algorithm used to compute the sample s is given by the - following formula, + -- Function: double gsl_stats_wskew_m_sd (const double W[], size_t + WSTRIDE, const double DATA[], size_t STRIDE, size_t N, double + WMEAN, double WSD) + This function computes the weighted skewness of the dataset DATA + using the given values of the weighted mean and weighted standard + deviation, WMEAN and WSD. - s = range[i] + delta * (range[i+1] - range[i]) + -- Function: double gsl_stats_wkurtosis (const double W[], size_t + WSTRIDE, const double DATA[], size_t STRIDE, size_t N) + This function computes the weighted kurtosis of the dataset DATA. - where i is the index which satisfies sum[i] <= r < sum[i+1] and - delta is (r - sum[i])/(sum[i+1] - sum[i]). + kurtosis = ((\sum w_i ((x_i - \Hat x)/\Hat \sigma)^4) / (\sum w_i)) - 3 - -File: gsl-ref.info, Node: Example programs for histograms, Next: Two dimensional histograms, Prev: The histogram probability distribution struct, Up: Histograms + -- Function: double gsl_stats_wkurtosis_m_sd (const double W[], size_t + WSTRIDE, const double DATA[], size_t STRIDE, size_t N, double + WMEAN, double WSD) + This function computes the weighted kurtosis of the dataset DATA + using the given values of the weighted mean and weighted standard + deviation, WMEAN and WSD. -22.11 Example programs for histograms -===================================== + +File: gsl-ref.info, Node: Maximum and Minimum values, Next: Median and Percentiles, Prev: Weighted Samples, Up: Statistics -The following program shows how to make a simple histogram of a column -of numerical data supplied on 'stdin'. The program takes three -arguments, specifying the upper and lower bounds of the histogram and -the number of bins. It then reads numbers from 'stdin', one line at a -time, and adds them to the histogram. When there is no more data to -read it prints out the accumulated histogram using -'gsl_histogram_fprintf'. +21.8 Maximum and Minimum values +=============================== - #include - #include - #include +The following functions find the maximum and minimum values of a dataset +(or their indices). If the data contains 'NaN's then a 'NaN' will be +returned, since the maximum or minimum value is undefined. For +functions which return an index, the location of the first 'NaN' in the +array is returned. - int - main (int argc, char **argv) - { - double a, b; - size_t n; + -- Function: double gsl_stats_max (const double DATA[], size_t STRIDE, + size_t N) + This function returns the maximum value in DATA, a dataset of + length N with stride STRIDE. The maximum value is defined as the + value of the element x_i which satisfies x_i >= x_j for all j. - if (argc != 4) - { - printf ("Usage: gsl-histogram xmin xmax n\n" - "Computes a histogram of the data " - "on stdin using n bins from xmin " - "to xmax\n"); - exit (0); - } + If you want instead to find the element with the largest absolute + magnitude you will need to apply 'fabs' or 'abs' to your data + before calling this function. - a = atof (argv[1]); - b = atof (argv[2]); - n = atoi (argv[3]); + -- Function: double gsl_stats_min (const double DATA[], size_t STRIDE, + size_t N) + This function returns the minimum value in DATA, a dataset of + length N with stride STRIDE. The minimum value is defined as the + value of the element x_i which satisfies x_i <= x_j for all j. - { - double x; - gsl_histogram * h = gsl_histogram_alloc (n); - gsl_histogram_set_ranges_uniform (h, a, b); + If you want instead to find the element with the smallest absolute + magnitude you will need to apply 'fabs' or 'abs' to your data + before calling this function. - while (fscanf (stdin, "%lg", &x) == 1) - { - gsl_histogram_increment (h, x); - } - gsl_histogram_fprintf (stdout, h, "%g", "%g"); - gsl_histogram_free (h); - } - exit (0); - } + -- Function: void gsl_stats_minmax (double * MIN, double * MAX, const + double DATA[], size_t STRIDE, size_t N) + This function finds both the minimum and maximum values MIN, MAX in + DATA in a single pass. -Here is an example of the program in use. We generate 10000 random -samples from a Cauchy distribution with a width of 30 and histogram them -over the range -100 to 100, using 200 bins. + -- Function: size_t gsl_stats_max_index (const double DATA[], size_t + STRIDE, size_t N) + This function returns the index of the maximum value in DATA, a + dataset of length N with stride STRIDE. The maximum value is + defined as the value of the element x_i which satisfies x_i >= x_j + for all j. When there are several equal maximum elements then the + first one is chosen. - $ gsl-randist 0 10000 cauchy 30 - | gsl-histogram -100 100 200 > histogram.dat + -- Function: size_t gsl_stats_min_index (const double DATA[], size_t + STRIDE, size_t N) + This function returns the index of the minimum value in DATA, a + dataset of length N with stride STRIDE. The minimum value is + defined as the value of the element x_i which satisfies x_i >= x_j + for all j. When there are several equal minimum elements then the + first one is chosen. -A plot of the resulting histogram shows the familiar shape of the Cauchy -distribution and the fluctuations caused by the finite sample size. - - $ awk '{print $1, $3 ; print $2, $3}' histogram.dat - | graph -T X + -- Function: void gsl_stats_minmax_index (size_t * MIN_INDEX, size_t * + MAX_INDEX, const double DATA[], size_t STRIDE, size_t N) + This function returns the indexes MIN_INDEX, MAX_INDEX of the + minimum and maximum values in DATA in a single pass.  -File: gsl-ref.info, Node: Two dimensional histograms, Next: The 2D histogram struct, Prev: Example programs for histograms, Up: Histograms +File: gsl-ref.info, Node: Median and Percentiles, Next: Example statistical programs, Prev: Maximum and Minimum values, Up: Statistics -22.12 Two dimensional histograms -================================ +21.9 Median and Percentiles +=========================== -A two dimensional histogram consists of a set of "bins" which count the -number of events falling in a given area of the (x,y) plane. The -simplest way to use a two dimensional histogram is to record -two-dimensional position information, n(x,y). Another possibility is to -form a "joint distribution" by recording related variables. For example -a detector might record both the position of an event (x) and the amount -of energy it deposited E. These could be histogrammed as the joint -distribution n(x,E). +The median and percentile functions described in this section operate on +sorted data. For convenience we use "quantiles", measured on a scale of +0 to 1, instead of percentiles (which use a scale of 0 to 100). - -File: gsl-ref.info, Node: The 2D histogram struct, Next: 2D Histogram allocation, Prev: Two dimensional histograms, Up: Histograms + -- Function: double gsl_stats_median_from_sorted_data (const double + SORTED_DATA[], size_t STRIDE, size_t N) + This function returns the median value of SORTED_DATA, a dataset of + length N with stride STRIDE. The elements of the array must be in + ascending numerical order. There are no checks to see whether the + data are sorted, so the function 'gsl_sort' should always be used + first. -22.13 The 2D histogram struct -============================= + When the dataset has an odd number of elements the median is the + value of element (n-1)/2. When the dataset has an even number of + elements the median is the mean of the two nearest middle values, + elements (n-1)/2 and n/2. Since the algorithm for computing the + median involves interpolation this function always returns a + floating-point number, even for integer data types. -Two dimensional histograms are defined by the following struct, + -- Function: double gsl_stats_quantile_from_sorted_data (const double + SORTED_DATA[], size_t STRIDE, size_t N, double F) + This function returns a quantile value of SORTED_DATA, a + double-precision array of length N with stride STRIDE. The + elements of the array must be in ascending numerical order. The + quantile is determined by the F, a fraction between 0 and 1. For + example, to compute the value of the 75th percentile F should have + the value 0.75. - -- Data Type: gsl_histogram2d - 'size_t nx, ny' - This is the number of histogram bins in the x and y - directions. - 'double * xrange' - The ranges of the bins in the x-direction are stored in an - array of NX + 1 elements pointed to by XRANGE. - 'double * yrange' - The ranges of the bins in the y-direction are stored in an - array of NY + 1 elements pointed to by YRANGE. - 'double * bin' - The counts for each bin are stored in an array pointed to by - BIN. The bins are floating-point numbers, so you can - increment them by non-integer values if necessary. The array - BIN stores the two dimensional array of bins in a single block - of memory according to the mapping 'bin(i,j)' = 'bin[i * ny + - j]'. + There are no checks to see whether the data are sorted, so the + function 'gsl_sort' should always be used first. -The range for 'bin(i,j)' is given by 'xrange[i]' to 'xrange[i+1]' in the -x-direction and 'yrange[j]' to 'yrange[j+1]' in the y-direction. Each -bin is inclusive at the lower end and exclusive at the upper end. -Mathematically this means that the bins are defined by the following -inequality, - bin(i,j) corresponds to xrange[i] <= x < xrange[i+1] - and yrange[j] <= y < yrange[j+1] + The quantile is found by interpolation, using the formula -Note that any samples which fall on the upper sides of the histogram are -excluded. If you want to include these values for the side bins you -will need to add an extra row or column to your histogram. + quantile = (1 - \delta) x_i + \delta x_{i+1} - The 'gsl_histogram2d' struct and its associated functions are defined -in the header file 'gsl_histogram2d.h'. + where i is 'floor'((n - 1)f) and \delta is (n-1)f - i. + + Thus the minimum value of the array ('data[0*stride]') is given by + F equal to zero, the maximum value ('data[(n-1)*stride]') is given + by F equal to one and the median value is given by F equal to 0.5. + Since the algorithm for computing quantiles involves interpolation + this function always returns a floating-point number, even for + integer data types.  -File: gsl-ref.info, Node: 2D Histogram allocation, Next: Copying 2D Histograms, Prev: The 2D histogram struct, Up: Histograms +File: gsl-ref.info, Node: Example statistical programs, Next: Statistics References and Further Reading, Prev: Median and Percentiles, Up: Statistics -22.14 2D Histogram allocation -============================= +21.10 Examples +============== -The functions for allocating memory to a 2D histogram follow the style -of 'malloc' and 'free'. In addition they also perform their own error -checking. If there is insufficient memory available to allocate a -histogram then the functions call the error handler (with an error -number of 'GSL_ENOMEM') in addition to returning a null pointer. Thus -if you use the library error handler to abort your program then it isn't -necessary to check every 2D histogram 'alloc'. +Here is a basic example of how to use the statistical functions: - -- Function: gsl_histogram2d * gsl_histogram2d_alloc (size_t NX, size_t - NY) - This function allocates memory for a two-dimensional histogram with - NX bins in the x direction and NY bins in the y direction. The - function returns a pointer to a newly created 'gsl_histogram2d' - struct. If insufficient memory is available a null pointer is - returned and the error handler is invoked with an error code of - 'GSL_ENOMEM'. The bins and ranges must be initialized with one of - the functions below before the histogram is ready for use. + #include + #include - -- Function: int gsl_histogram2d_set_ranges (gsl_histogram2d * H, const - double XRANGE[], size_t XSIZE, const double YRANGE[], size_t - YSIZE) - This function sets the ranges of the existing histogram H using the - arrays XRANGE and YRANGE of size XSIZE and YSIZE respectively. The - values of the histogram bins are reset to zero. + int + main(void) + { + double data[5] = {17.2, 18.1, 16.5, 18.3, 12.6}; + double mean, variance, largest, smallest; - -- Function: int gsl_histogram2d_set_ranges_uniform (gsl_histogram2d * - H, double XMIN, double XMAX, double YMIN, double YMAX) - This function sets the ranges of the existing histogram H to cover - the ranges XMIN to XMAX and YMIN to YMAX uniformly. The values of - the histogram bins are reset to zero. + mean = gsl_stats_mean(data, 1, 5); + variance = gsl_stats_variance(data, 1, 5); + largest = gsl_stats_max(data, 1, 5); + smallest = gsl_stats_min(data, 1, 5); - -- Function: void gsl_histogram2d_free (gsl_histogram2d * H) - This function frees the 2D histogram H and all of the memory - associated with it. + printf ("The dataset is %g, %g, %g, %g, %g\n", + data[0], data[1], data[2], data[3], data[4]); - -File: gsl-ref.info, Node: Copying 2D Histograms, Next: Updating and accessing 2D histogram elements, Prev: 2D Histogram allocation, Up: Histograms + printf ("The sample mean is %g\n", mean); + printf ("The estimated variance is %g\n", variance); + printf ("The largest value is %g\n", largest); + printf ("The smallest value is %g\n", smallest); + return 0; + } -22.15 Copying 2D Histograms -=========================== + The program should produce the following output, - -- Function: int gsl_histogram2d_memcpy (gsl_histogram2d * DEST, const - gsl_histogram2d * SRC) - This function copies the histogram SRC into the pre-existing - histogram DEST, making DEST into an exact copy of SRC. The two - histograms must be of the same size. + The dataset is 17.2, 18.1, 16.5, 18.3, 12.6 + The sample mean is 16.54 + The estimated variance is 5.373 + The largest value is 18.3 + The smallest value is 12.6 - -- Function: gsl_histogram2d * gsl_histogram2d_clone (const - gsl_histogram2d * SRC) - This function returns a pointer to a newly created histogram which - is an exact copy of the histogram SRC. + Here is an example using sorted data, - -File: gsl-ref.info, Node: Updating and accessing 2D histogram elements, Next: Searching 2D histogram ranges, Prev: Copying 2D Histograms, Up: Histograms + #include + #include + #include -22.16 Updating and accessing 2D histogram elements -================================================== + int + main(void) + { + double data[5] = {17.2, 18.1, 16.5, 18.3, 12.6}; + double median, upperq, lowerq; -You can access the bins of a two-dimensional histogram either by -specifying a pair of (x,y) coordinates or by using the bin indices (i,j) -directly. The functions for accessing the histogram through (x,y) -coordinates use binary searches in the x and y directions to identify -the bin which covers the appropriate range. + printf ("Original dataset: %g, %g, %g, %g, %g\n", + data[0], data[1], data[2], data[3], data[4]); - -- Function: int gsl_histogram2d_increment (gsl_histogram2d * H, double - X, double Y) - This function updates the histogram H by adding one (1.0) to the - bin whose x and y ranges contain the coordinates (X,Y). + gsl_sort (data, 1, 5); - If the point (x,y) lies inside the valid ranges of the histogram - then the function returns zero to indicate success. If (x,y) lies - outside the limits of the histogram then the function returns - 'GSL_EDOM', and none of the bins are modified. The error handler - is not called, since it is often necessary to compute histograms - for a small range of a larger dataset, ignoring any coordinates - outside the range of interest. + printf ("Sorted dataset: %g, %g, %g, %g, %g\n", + data[0], data[1], data[2], data[3], data[4]); - -- Function: int gsl_histogram2d_accumulate (gsl_histogram2d * H, - double X, double Y, double WEIGHT) - This function is similar to 'gsl_histogram2d_increment' but - increases the value of the appropriate bin in the histogram H by - the floating-point number WEIGHT. + median + = gsl_stats_median_from_sorted_data (data, + 1, 5); - -- Function: double gsl_histogram2d_get (const gsl_histogram2d * H, - size_t I, size_t J) - This function returns the contents of the (I,J)-th bin of the - histogram H. If (I,J) lies outside the valid range of indices for - the histogram then the error handler is called with an error code - of 'GSL_EDOM' and the function returns 0. + upperq + = gsl_stats_quantile_from_sorted_data (data, + 1, 5, + 0.75); + lowerq + = gsl_stats_quantile_from_sorted_data (data, + 1, 5, + 0.25); - -- Function: int gsl_histogram2d_get_xrange (const gsl_histogram2d * H, - size_t I, double * XLOWER, double * XUPPER) - -- Function: int gsl_histogram2d_get_yrange (const gsl_histogram2d * H, - size_t J, double * YLOWER, double * YUPPER) - These functions find the upper and lower range limits of the I-th - and J-th bins in the x and y directions of the histogram H. The - range limits are stored in XLOWER and XUPPER or YLOWER and YUPPER. - The lower limits are inclusive (i.e. events with these coordinates - are included in the bin) and the upper limits are exclusive (i.e. - events with the value of the upper limit are not included and fall - in the neighboring higher bin, if it exists). The functions return - 0 to indicate success. If I or J lies outside the valid range of - indices for the histogram then the error handler is called with an - error code of 'GSL_EDOM'. + printf ("The median is %g\n", median); + printf ("The upper quartile is %g\n", upperq); + printf ("The lower quartile is %g\n", lowerq); + return 0; + } - -- Function: double gsl_histogram2d_xmax (const gsl_histogram2d * H) - -- Function: double gsl_histogram2d_xmin (const gsl_histogram2d * H) - -- Function: size_t gsl_histogram2d_nx (const gsl_histogram2d * H) - -- Function: double gsl_histogram2d_ymax (const gsl_histogram2d * H) - -- Function: double gsl_histogram2d_ymin (const gsl_histogram2d * H) - -- Function: size_t gsl_histogram2d_ny (const gsl_histogram2d * H) - These functions return the maximum upper and minimum lower range - limits and the number of bins for the x and y directions of the - histogram H. They provide a way of determining these values - without accessing the 'gsl_histogram2d' struct directly. + This program should produce the following output, - -- Function: void gsl_histogram2d_reset (gsl_histogram2d * H) - This function resets all the bins of the histogram H to zero. + Original dataset: 17.2, 18.1, 16.5, 18.3, 12.6 + Sorted dataset: 12.6, 16.5, 17.2, 18.1, 18.3 + The median is 17.2 + The upper quartile is 18.1 + The lower quartile is 16.5  -File: gsl-ref.info, Node: Searching 2D histogram ranges, Next: 2D Histogram Statistics, Prev: Updating and accessing 2D histogram elements, Up: Histograms +File: gsl-ref.info, Node: Statistics References and Further Reading, Prev: Example statistical programs, Up: Statistics -22.17 Searching 2D histogram ranges -=================================== - -The following functions are used by the access and update routines to -locate the bin which corresponds to a given (x,y) coordinate. +21.11 References and Further Reading +==================================== - -- Function: int gsl_histogram2d_find (const gsl_histogram2d * H, - double X, double Y, size_t * I, size_t * J) - This function finds and sets the indices I and J to the bin which - covers the coordinates (X,Y). The bin is located using a binary - search. The search includes an optimization for histograms with - uniform ranges, and will return the correct bin immediately in this - case. If (x,y) is found then the function sets the indices (I,J) - and returns 'GSL_SUCCESS'. If (x,y) lies outside the valid range - of the histogram then the function returns 'GSL_EDOM' and the error - handler is invoked. +The standard reference for almost any topic in statistics is the +multi-volume 'Advanced Theory of Statistics' by Kendall and Stuart. - -File: gsl-ref.info, Node: 2D Histogram Statistics, Next: 2D Histogram Operations, Prev: Searching 2D histogram ranges, Up: Histograms + Maurice Kendall, Alan Stuart, and J. Keith Ord. 'The Advanced + Theory of Statistics' (multiple volumes) reprinted as 'Kendall's + Advanced Theory of Statistics'. Wiley, ISBN 047023380X. -22.18 2D Histogram Statistics -============================= +Many statistical concepts can be more easily understood by a Bayesian +approach. The following book by Gelman, Carlin, Stern and Rubin gives a +comprehensive coverage of the subject. - -- Function: double gsl_histogram2d_max_val (const gsl_histogram2d * H) - This function returns the maximum value contained in the histogram - bins. + Andrew Gelman, John B. Carlin, Hal S. Stern, Donald B. Rubin. + 'Bayesian Data Analysis'. Chapman & Hall, ISBN 0412039915. - -- Function: void gsl_histogram2d_max_bin (const gsl_histogram2d * H, - size_t * I, size_t * J) - This function finds the indices of the bin containing the maximum - value in the histogram H and stores the result in (I,J). In the - case where several bins contain the same maximum value the first - bin found is returned. +For physicists the Particle Data Group provides useful reviews of +Probability and Statistics in the "Mathematical Tools" section of its +Annual Review of Particle Physics. - -- Function: double gsl_histogram2d_min_val (const gsl_histogram2d * H) - This function returns the minimum value contained in the histogram - bins. + 'Review of Particle Properties' R.M. Barnett et al., Physical + Review D54, 1 (1996) - -- Function: void gsl_histogram2d_min_bin (const gsl_histogram2d * H, - size_t * I, size_t * J) - This function finds the indices of the bin containing the minimum - value in the histogram H and stores the result in (I,J). In the - case where several bins contain the same maximum value the first - bin found is returned. +The Review of Particle Physics is available online at the website +. - -- Function: double gsl_histogram2d_xmean (const gsl_histogram2d * H) - This function returns the mean of the histogrammed x variable, - where the histogram is regarded as a probability distribution. - Negative bin values are ignored for the purposes of this - calculation. + +File: gsl-ref.info, Node: Running Statistics, Next: Histograms, Prev: Statistics, Up: Top - -- Function: double gsl_histogram2d_ymean (const gsl_histogram2d * H) - This function returns the mean of the histogrammed y variable, - where the histogram is regarded as a probability distribution. - Negative bin values are ignored for the purposes of this - calculation. +22 Running Statistics +********************* - -- Function: double gsl_histogram2d_xsigma (const gsl_histogram2d * H) - This function returns the standard deviation of the histogrammed x - variable, where the histogram is regarded as a probability - distribution. Negative bin values are ignored for the purposes of - this calculation. +This chapter describes routines for computing running statistics, also +known as online statistics, of data. These routines are suitable for +handling large datasets for which it may be inconvenient or impractical +to store in memory all at once. The data can be processed in a single +pass, one point at a time. Each time a data point is added to the +accumulator, internal parameters are updated in order to compute the +current mean, variance, standard deviation, skewness, and kurtosis. +These statistics are exact, and are updated with numerically stable +single-pass algorithms. The median and arbitrary quantiles are also +available, however these calculations use algorithms which provide +approximations, and grow more accurate as more data is added to the +accumulator. - -- Function: double gsl_histogram2d_ysigma (const gsl_histogram2d * H) - This function returns the standard deviation of the histogrammed y - variable, where the histogram is regarded as a probability - distribution. Negative bin values are ignored for the purposes of - this calculation. + The functions described in this chapter are declared in the header +file 'gsl_rstat.h'. - -- Function: double gsl_histogram2d_cov (const gsl_histogram2d * H) - This function returns the covariance of the histogrammed x and y - variables, where the histogram is regarded as a probability - distribution. Negative bin values are ignored for the purposes of - this calculation. +* Menu: - -- Function: double gsl_histogram2d_sum (const gsl_histogram2d * H) - This function returns the sum of all bin values. Negative bin - values are included in the sum. +* Running Statistics Initializing the Accumulator:: +* Running Statistics Adding Data to the Accumulator:: +* Running Statistics Current Statistics:: +* Running Statistics Quantiles:: +* Running Statistics Example programs:: +* Running Statistics References and Further Reading::  -File: gsl-ref.info, Node: 2D Histogram Operations, Next: Reading and writing 2D histograms, Prev: 2D Histogram Statistics, Up: Histograms +File: gsl-ref.info, Node: Running Statistics Initializing the Accumulator, Next: Running Statistics Adding Data to the Accumulator, Up: Running Statistics -22.19 2D Histogram Operations -============================= +22.1 Initializing the Accumulator +================================= - -- Function: int gsl_histogram2d_equal_bins_p (const gsl_histogram2d * - H1, const gsl_histogram2d * H2) - This function returns 1 if all the individual bin ranges of the two - histograms are identical, and 0 otherwise. + -- Function: gsl_rstat_workspace * gsl_rstat_alloc (void) + This function allocates a workspace for computing running + statistics. The size of the workspace is O(1). - -- Function: int gsl_histogram2d_add (gsl_histogram2d * H1, const - gsl_histogram2d * H2) - This function adds the contents of the bins in histogram H2 to the - corresponding bins of histogram H1, i.e. h'_1(i,j) = h_1(i,j) + - h_2(i,j). The two histograms must have identical bin ranges. + -- Function: void gsl_rstat_free (gsl_rstat_workspace * W) + This function frees the memory associated with the workspace W. - -- Function: int gsl_histogram2d_sub (gsl_histogram2d * H1, const - gsl_histogram2d * H2) - This function subtracts the contents of the bins in histogram H2 - from the corresponding bins of histogram H1, i.e. h'_1(i,j) = - h_1(i,j) - h_2(i,j). The two histograms must have identical bin - ranges. + -- Function: int gsl_rstat_reset (gsl_rstat_workspace * W) + This function resets the workspace W to its initial state, so it + can begin working on a new set of data. - -- Function: int gsl_histogram2d_mul (gsl_histogram2d * H1, const - gsl_histogram2d * H2) - This function multiplies the contents of the bins of histogram H1 - by the contents of the corresponding bins in histogram H2, i.e. - h'_1(i,j) = h_1(i,j) * h_2(i,j). The two histograms must have - identical bin ranges. + +File: gsl-ref.info, Node: Running Statistics Adding Data to the Accumulator, Next: Running Statistics Current Statistics, Prev: Running Statistics Initializing the Accumulator, Up: Running Statistics - -- Function: int gsl_histogram2d_div (gsl_histogram2d * H1, const - gsl_histogram2d * H2) - This function divides the contents of the bins of histogram H1 by - the contents of the corresponding bins in histogram H2, i.e. - h'_1(i,j) = h_1(i,j) / h_2(i,j). The two histograms must have - identical bin ranges. +22.2 Adding Data to the Accumulator +=================================== - -- Function: int gsl_histogram2d_scale (gsl_histogram2d * H, double - SCALE) - This function multiplies the contents of the bins of histogram H by - the constant SCALE, i.e. h'_1(i,j) = h_1(i,j) scale. + -- Function: int gsl_rstat_add (const double X, gsl_rstat_workspace * + W) + This function adds the data point X to the statistical accumulator, + updating calculations of the mean, variance, standard deviation, + skewness, kurtosis, and median. - -- Function: int gsl_histogram2d_shift (gsl_histogram2d * H, double - OFFSET) - This function shifts the contents of the bins of histogram H by the - constant OFFSET, i.e. h'_1(i,j) = h_1(i,j) + offset. + -- Function: size_t gsl_rstat_n (gsl_rstat_workspace * W) + This function returns the number of data so far added to the + accumulator.  -File: gsl-ref.info, Node: Reading and writing 2D histograms, Next: Resampling from 2D histograms, Prev: 2D Histogram Operations, Up: Histograms +File: gsl-ref.info, Node: Running Statistics Current Statistics, Next: Running Statistics Quantiles, Prev: Running Statistics Adding Data to the Accumulator, Up: Running Statistics -22.20 Reading and writing 2D histograms -======================================= +22.3 Current Statistics +======================= -The library provides functions for reading and writing two dimensional -histograms to a file as binary data or formatted text. + -- Function: double gsl_rstat_min (gsl_rstat_workspace * W) + This function returns the minimum value added to the accumulator. - -- Function: int gsl_histogram2d_fwrite (FILE * STREAM, const - gsl_histogram2d * H) - This function writes the ranges and bins of the histogram H to the - stream STREAM in binary format. The return value is 0 for success - and 'GSL_EFAILED' if there was a problem writing to the file. - Since the data is written in the native binary format it may not be - portable between different architectures. + -- Function: double gsl_rstat_max (gsl_rstat_workspace * W) + This function returns the maximum value added to the accumulator. - -- Function: int gsl_histogram2d_fread (FILE * STREAM, gsl_histogram2d - * H) - This function reads into the histogram H from the stream STREAM in - binary format. The histogram H must be preallocated with the - correct size since the function uses the number of x and y bins in - H to determine how many bytes to read. The return value is 0 for - success and 'GSL_EFAILED' if there was a problem reading from the - file. The data is assumed to have been written in the native - binary format on the same architecture. + -- Function: double gsl_rstat_mean (gsl_rstat_workspace * W) + This function returns the mean of all data added to the + accumulator, defined as - -- Function: int gsl_histogram2d_fprintf (FILE * STREAM, const - gsl_histogram2d * H, const char * RANGE_FORMAT, const char * - BIN_FORMAT) - This function writes the ranges and bins of the histogram H - line-by-line to the stream STREAM using the format specifiers - RANGE_FORMAT and BIN_FORMAT. These should be one of the '%g', '%e' - or '%f' formats for floating point numbers. The function returns 0 - for success and 'GSL_EFAILED' if there was a problem writing to the - file. The histogram output is formatted in five columns, and the - columns are separated by spaces, like this, + \Hat\mu = (1/N) \sum x_i - xrange[0] xrange[1] yrange[0] yrange[1] bin(0,0) - xrange[0] xrange[1] yrange[1] yrange[2] bin(0,1) - xrange[0] xrange[1] yrange[2] yrange[3] bin(0,2) - .... - xrange[0] xrange[1] yrange[ny-1] yrange[ny] bin(0,ny-1) + -- Function: double gsl_rstat_variance (gsl_rstat_workspace * W) + This function returns the variance of all data added to the + accumulator, defined as - xrange[1] xrange[2] yrange[0] yrange[1] bin(1,0) - xrange[1] xrange[2] yrange[1] yrange[2] bin(1,1) - xrange[1] xrange[2] yrange[1] yrange[2] bin(1,2) - .... - xrange[1] xrange[2] yrange[ny-1] yrange[ny] bin(1,ny-1) + \Hat\sigma^2 = (1/(N-1)) \sum (x_i - \Hat\mu)^2 - .... + -- Function: double gsl_rstat_sd (gsl_rstat_workspace * W) + This function returns the standard deviation of all data added to + the accumulator, defined as the square root of the variance given + above. - xrange[nx-1] xrange[nx] yrange[0] yrange[1] bin(nx-1,0) - xrange[nx-1] xrange[nx] yrange[1] yrange[2] bin(nx-1,1) - xrange[nx-1] xrange[nx] yrange[1] yrange[2] bin(nx-1,2) - .... - xrange[nx-1] xrange[nx] yrange[ny-1] yrange[ny] bin(nx-1,ny-1) + -- Function: double gsl_rstat_sd_mean (gsl_rstat_workspace * W) + This function returns the standard deviation of the mean, defined + as - Each line contains the lower and upper limits of the bin and the - contents of the bin. Since the upper limits of the each bin are - the lower limits of the neighboring bins there is duplication of - these values but this allows the histogram to be manipulated with - line-oriented tools. + sd_mean = \Hat\sigma / \sqrt{N} - -- Function: int gsl_histogram2d_fscanf (FILE * STREAM, gsl_histogram2d - * H) - This function reads formatted data from the stream STREAM into the - histogram H. The data is assumed to be in the five-column format - used by 'gsl_histogram2d_fprintf'. The histogram H must be - preallocated with the correct lengths since the function uses the - sizes of H to determine how many numbers to read. The function - returns 0 for success and 'GSL_EFAILED' if there was a problem - reading from the file. + -- Function: double gsl_rstat_rms (gsl_rstat_workspace * W) + This function returns the root mean square of all data added to the + accumulator, defined as - -File: gsl-ref.info, Node: Resampling from 2D histograms, Next: Example programs for 2D histograms, Prev: Reading and writing 2D histograms, Up: Histograms + rms = \sqrt ( 1/N \sum x_i^2 ) -22.21 Resampling from 2D histograms -=================================== + -- Function: double gsl_rstat_skew (gsl_rstat_workspace * W) + This function returns the skewness of all data added to the + accumulator, defined as -As in the one-dimensional case, a two-dimensional histogram made by -counting events can be regarded as a measurement of a probability -distribution. Allowing for statistical error, the height of each bin -represents the probability of an event where (x,y) falls in the range of -that bin. For a two-dimensional histogram the probability distribution -takes the form p(x,y) dx dy where, + skew = (1/N) \sum ((x_i - \Hat\mu)/\Hat\sigma)^3 - p(x,y) = n_{ij}/ (N A_{ij}) + -- Function: double gsl_rstat_kurtosis (gsl_rstat_workspace * W) + This function returns the kurtosis of all data added to the + accumulator, defined as -In this equation n_{ij} is the number of events in the bin which -contains (x,y), A_{ij} is the area of the bin and N is the total number -of events. The distribution of events within each bin is assumed to be -uniform. + kurtosis = ((1/N) \sum ((x_i - \Hat\mu)/\Hat\sigma)^4) - 3 - -- Data Type: gsl_histogram2d_pdf - 'size_t nx, ny' - This is the number of histogram bins used to approximate the - probability distribution function in the x and y directions. - 'double * xrange' - The ranges of the bins in the x-direction are stored in an - array of NX + 1 elements pointed to by XRANGE. - 'double * yrange' - The ranges of the bins in the y-direction are stored in an - array of NY + 1 pointed to by YRANGE. - 'double * sum' - The cumulative probability for the bins is stored in an array - of NX*NY elements pointed to by SUM. + -- Function: double gsl_rstat_median (gsl_rstat_workspace * W) + This function returns an estimate of the median of the data added + to the accumulator. -The following functions allow you to create a 'gsl_histogram2d_pdf' -struct which represents a two dimensional probability distribution and -generate random samples from it. + +File: gsl-ref.info, Node: Running Statistics Quantiles, Next: Running Statistics Example programs, Prev: Running Statistics Current Statistics, Up: Running Statistics - -- Function: gsl_histogram2d_pdf * gsl_histogram2d_pdf_alloc (size_t - NX, size_t NY) - This function allocates memory for a two-dimensional probability - distribution of size NX-by-NY and returns a pointer to a newly - initialized 'gsl_histogram2d_pdf' struct. If insufficient memory - is available a null pointer is returned and the error handler is - invoked with an error code of 'GSL_ENOMEM'. +22.4 Quantiles +============== - -- Function: int gsl_histogram2d_pdf_init (gsl_histogram2d_pdf * P, - const gsl_histogram2d * H) - This function initializes the two-dimensional probability - distribution calculated P from the histogram H. If any of the bins - of H are negative then the error handler is invoked with an error - code of 'GSL_EDOM' because a probability distribution cannot - contain negative values. +The functions in this section estimate quantiles dynamically without +storing the entire dataset, using the algorithm of Jain and Chlamtec, +1985. Only five points (markers) are stored which represent the minimum +and maximum of the data, as well as current estimates of the p/2-, p-, +and (1+p)/2-quantiles. Each time a new data point is added, the marker +positions and heights are updated. + + -- Function: gsl_rstat_quantile_workspace * gsl_rstat_quantile_alloc + (const double P) + This function allocates a workspace for the dynamic estimation of + P-quantiles, where P is between 0 and 1. The median corresponds to + p = 0.5. The size of the workspace is O(1). - -- Function: void gsl_histogram2d_pdf_free (gsl_histogram2d_pdf * P) - This function frees the two-dimensional probability distribution - function P and all of the memory associated with it. + -- Function: void gsl_rstat_quantile_free (gsl_rstat_quantile_workspace + * W) + This function frees the memory associated with the workspace W. - -- Function: int gsl_histogram2d_pdf_sample (const gsl_histogram2d_pdf - * P, double R1, double R2, double * X, double * Y) - This function uses two uniform random numbers between zero and one, - R1 and R2, to compute a single random sample from the - two-dimensional probability distribution P. + -- Function: int gsl_rstat_quantile_reset (gsl_rstat_quantile_workspace + * W) + This function resets the workspace W to its initial state, so it + can begin working on a new set of data. + + -- Function: int gsl_rstat_quantile_add (const double X, + gsl_rstat_quantile_workspace * W) + This function updates the estimate of the p-quantile with the new + data point X. + + -- Function: double gsl_rstat_quantile_get + (gsl_rstat_quantile_workspace * W) + This function returns the current estimate of the p-quantile.  -File: gsl-ref.info, Node: Example programs for 2D histograms, Prev: Resampling from 2D histograms, Up: Histograms +File: gsl-ref.info, Node: Running Statistics Example programs, Next: Running Statistics References and Further Reading, Prev: Running Statistics Quantiles, Up: Running Statistics -22.22 Example programs for 2D histograms -======================================== +22.5 Examples +============= -This program demonstrates two features of two-dimensional histograms. -First a 10-by-10 two-dimensional histogram is created with x and y -running from 0 to 1. Then a few sample points are added to the -histogram, at (0.3,0.3) with a height of 1, at (0.8,0.1) with a height -of 5 and at (0.7,0.9) with a height of 0.5. This histogram with three -events is used to generate a random sample of 1000 simulated events, -which are printed out. +Here is a basic example of how to use the statistical functions: #include - #include - #include + #include int - main (void) + main(void) { - const gsl_rng_type * T; - gsl_rng * r; - - gsl_histogram2d * h = gsl_histogram2d_alloc (10, 10); - - gsl_histogram2d_set_ranges_uniform (h, - 0.0, 1.0, - 0.0, 1.0); + double data[5] = {17.2, 18.1, 16.5, 18.3, 12.6}; + double mean, variance, largest, smallest, sd, + rms, sd_mean, median, skew, kurtosis; + gsl_rstat_workspace *rstat_p = gsl_rstat_alloc(); + size_t i, n; + + /* add data to rstat accumulator */ + for (i = 0; i < 5; ++i) + gsl_rstat_add(data[i], rstat_p); + + mean = gsl_rstat_mean(rstat_p); + variance = gsl_rstat_variance(rstat_p); + largest = gsl_rstat_max(rstat_p); + smallest = gsl_rstat_min(rstat_p); + median = gsl_rstat_median(rstat_p); + sd = gsl_rstat_sd(rstat_p); + sd_mean = gsl_rstat_sd_mean(rstat_p); + skew = gsl_rstat_skew(rstat_p); + rms = gsl_rstat_rms(rstat_p); + kurtosis = gsl_rstat_kurtosis(rstat_p); + n = gsl_rstat_n(rstat_p); - gsl_histogram2d_accumulate (h, 0.3, 0.3, 1); - gsl_histogram2d_accumulate (h, 0.8, 0.1, 5); - gsl_histogram2d_accumulate (h, 0.7, 0.9, 0.5); + printf ("The dataset is %g, %g, %g, %g, %g\n", + data[0], data[1], data[2], data[3], data[4]); - gsl_rng_env_setup (); + printf ("The sample mean is %g\n", mean); + printf ("The estimated variance is %g\n", variance); + printf ("The largest value is %g\n", largest); + printf ("The smallest value is %g\n", smallest); + printf( "The median is %g\n", median); + printf( "The standard deviation is %g\n", sd); + printf( "The root mean square is %g\n", rms); + printf( "The standard devation of the mean is %g\n", sd_mean); + printf( "The skew is %g\n", skew); + printf( "The kurtosis %g\n", kurtosis); + printf( "There are %zu items in the accumulator\n", n); + + gsl_rstat_reset(rstat_p); + n = gsl_rstat_n(rstat_p); + printf( "There are %zu items in the accumulator\n", n); - T = gsl_rng_default; - r = gsl_rng_alloc (T); + gsl_rstat_free(rstat_p); - { - int i; - gsl_histogram2d_pdf * p - = gsl_histogram2d_pdf_alloc (h->nx, h->ny); + return 0; + } - gsl_histogram2d_pdf_init (p, h); + The program should produce the following output, - for (i = 0; i < 1000; i++) { - double x, y; - double u = gsl_rng_uniform (r); - double v = gsl_rng_uniform (r); + The dataset is 17.2, 18.1, 16.5, 18.3, 12.6 + The sample mean is 16.54 + The estimated variance is 5.373 + The largest value is 18.3 + The smallest value is 12.6 + The median is 16.5 + The standard deviation is 2.31797 + The root mean square is 16.6694 + The standard devation of the mean is 1.03663 + The skew is -0.829058 + The kurtosis -1.2217 + There are 5 items in the accumulator + There are 0 items in the accumulator + +This next program estimates the lower quartile, median and upper +quartile from 10,000 samples of a random Rayleigh distribution, using +the P^2 algorithm of Jain and Chlamtec. For comparison, the exact +values are also computed from the sorted dataset. - gsl_histogram2d_pdf_sample (p, u, v, &x, &y); + #include + #include + #include + #include + #include + #include + #include - printf ("%g %g\n", x, y); + int + main(void) + { + const size_t N = 10000; + double *data = malloc(N * sizeof(double)); + gsl_rstat_quantile_workspace *work_25 = gsl_rstat_quantile_alloc(0.25); + gsl_rstat_quantile_workspace *work_50 = gsl_rstat_quantile_alloc(0.5); + gsl_rstat_quantile_workspace *work_75 = gsl_rstat_quantile_alloc(0.75); + gsl_rng *r = gsl_rng_alloc(gsl_rng_default); + double exact_p25, exact_p50, exact_p75; + double val_p25, val_p50, val_p75; + size_t i; + + /* add data to quantile accumulators; also store data for exact + * comparisons */ + for (i = 0; i < N; ++i) + { + data[i] = gsl_ran_rayleigh(r, 1.0); + gsl_rstat_quantile_add(data[i], work_25); + gsl_rstat_quantile_add(data[i], work_50); + gsl_rstat_quantile_add(data[i], work_75); } - gsl_histogram2d_pdf_free (p); - } + /* exact values */ + gsl_sort(data, 1, N); + exact_p25 = gsl_stats_quantile_from_sorted_data(data, 1, N, 0.25); + exact_p50 = gsl_stats_quantile_from_sorted_data(data, 1, N, 0.5); + exact_p75 = gsl_stats_quantile_from_sorted_data(data, 1, N, 0.75); + + /* estimated values */ + val_p25 = gsl_rstat_quantile_get(work_25); + val_p50 = gsl_rstat_quantile_get(work_50); + val_p75 = gsl_rstat_quantile_get(work_75); - gsl_histogram2d_free (h); - gsl_rng_free (r); + printf ("The dataset is %g, %g, %g, %g, %g, ...\n", + data[0], data[1], data[2], data[3], data[4]); + + printf ("0.25 quartile: exact = %.5f, estimated = %.5f, error = %.6e\n", + exact_p25, val_p25, (val_p25 - exact_p25) / exact_p25); + printf ("0.50 quartile: exact = %.5f, estimated = %.5f, error = %.6e\n", + exact_p50, val_p50, (val_p50 - exact_p50) / exact_p50); + printf ("0.75 quartile: exact = %.5f, estimated = %.5f, error = %.6e\n", + exact_p75, val_p75, (val_p75 - exact_p75) / exact_p75); + + gsl_rstat_quantile_free(work_25); + gsl_rstat_quantile_free(work_50); + gsl_rstat_quantile_free(work_75); + gsl_rng_free(r); + free(data); return 0; } - -File: gsl-ref.info, Node: N-tuples, Next: Monte Carlo Integration, Prev: Histograms, Up: Top + The program should produce the following output, -23 N-tuples -*********** + The dataset is 0.00645272, 0.0074002, 0.0120706, 0.0207256, 0.0227282, ... + 0.25 quartile: exact = 0.75766, estimated = 0.75580, error = -2.450209e-03 + 0.50 quartile: exact = 1.17508, estimated = 1.17438, error = -5.995912e-04 + 0.75 quartile: exact = 1.65347, estimated = 1.65696, error = 2.110571e-03 -This chapter describes functions for creating and manipulating -"ntuples", sets of values associated with events. The ntuples are -stored in files. Their values can be extracted in any combination and -"booked" in a histogram using a selection function. + +File: gsl-ref.info, Node: Running Statistics References and Further Reading, Prev: Running Statistics Example programs, Up: Running Statistics - The values to be stored are held in a user-defined data structure, -and an ntuple is created associating this data structure with a file. -The values are then written to the file (normally inside a loop) using -the ntuple functions described below. +22.6 References and Further Reading +=================================== - A histogram can be created from ntuple data by providing a selection -function and a value function. The selection function specifies whether -an event should be included in the subset to be analyzed or not. The -value function computes the entry to be added to the histogram for each -event. +The algorithm used to dynamically estimate p-quantiles is described in +the paper, + R. Jain and I. Chlamtac. 'The P^2 algorithm for dynamic + calculation of quantiles and histograms without storing + observations', Communications of the ACM, Volume 28 (October), + Number 10, 1985, p. 1076-1085. - All the ntuple functions are defined in the header file -'gsl_ntuple.h' + +File: gsl-ref.info, Node: Histograms, Next: N-tuples, Prev: Running Statistics, Up: Top -* Menu: +23 Histograms +************* -* The ntuple struct:: -* Creating ntuples:: -* Opening an existing ntuple file:: -* Writing ntuples:: -* Reading ntuples :: -* Closing an ntuple file:: -* Histogramming ntuple values:: -* Example ntuple programs:: -* Ntuple References and Further Reading:: +This chapter describes functions for creating histograms. Histograms +provide a convenient way of summarizing the distribution of a set of +data. A histogram consists of a set of "bins" which count the number of +events falling into a given range of a continuous variable x. In GSL +the bins of a histogram contain floating-point numbers, so they can be +used to record both integer and non-integer distributions. The bins can +use arbitrary sets of ranges (uniformly spaced bins are the default). +Both one and two-dimensional histograms are supported. - -File: gsl-ref.info, Node: The ntuple struct, Next: Creating ntuples, Up: N-tuples + Once a histogram has been created it can also be converted into a +probability distribution function. The library provides efficient +routines for selecting random samples from probability distributions. +This can be useful for generating simulations based on real data. -23.1 The ntuple struct -====================== + The functions are declared in the header files 'gsl_histogram.h' and +'gsl_histogram2d.h'. -Ntuples are manipulated using the 'gsl_ntuple' struct. This struct -contains information on the file where the ntuple data is stored, a -pointer to the current ntuple data row and the size of the user-defined -ntuple data struct. +* Menu: - typedef struct { - FILE * file; - void * ntuple_data; - size_t size; - } gsl_ntuple; +* The histogram struct:: +* Histogram allocation:: +* Copying Histograms:: +* Updating and accessing histogram elements:: +* Searching histogram ranges:: +* Histogram Statistics:: +* Histogram Operations:: +* Reading and writing histograms:: +* Resampling from histograms:: +* The histogram probability distribution struct:: +* Example programs for histograms:: +* Two dimensional histograms:: +* The 2D histogram struct:: +* 2D Histogram allocation:: +* Copying 2D Histograms:: +* Updating and accessing 2D histogram elements:: +* Searching 2D histogram ranges:: +* 2D Histogram Statistics:: +* 2D Histogram Operations:: +* Reading and writing 2D histograms:: +* Resampling from 2D histograms:: +* Example programs for 2D histograms::  -File: gsl-ref.info, Node: Creating ntuples, Next: Opening an existing ntuple file, Prev: The ntuple struct, Up: N-tuples +File: gsl-ref.info, Node: The histogram struct, Next: Histogram allocation, Up: Histograms -23.2 Creating ntuples -===================== +23.1 The histogram struct +========================= - -- Function: gsl_ntuple * gsl_ntuple_create (char * FILENAME, void * - NTUPLE_DATA, size_t SIZE) - This function creates a new write-only ntuple file FILENAME for - ntuples of size SIZE and returns a pointer to the newly created - ntuple struct. Any existing file with the same name is truncated - to zero length and overwritten. A pointer to memory for the - current ntuple row NTUPLE_DATA must be supplied--this is used to - copy ntuples in and out of the file. +A histogram is defined by the following struct, - -File: gsl-ref.info, Node: Opening an existing ntuple file, Next: Writing ntuples, Prev: Creating ntuples, Up: N-tuples + -- Data Type: gsl_histogram + 'size_t n' + This is the number of histogram bins + 'double * range' + The ranges of the bins are stored in an array of N+1 elements + pointed to by RANGE. + 'double * bin' + The counts for each bin are stored in an array of N elements + pointed to by BIN. The bins are floating-point numbers, so + you can increment them by non-integer values if necessary. -23.3 Opening an existing ntuple file -==================================== +The range for BIN[i] is given by RANGE[i] to RANGE[i+1]. For n bins +there are n+1 entries in the array RANGE. Each bin is inclusive at the +lower end and exclusive at the upper end. Mathematically this means +that the bins are defined by the following inequality, + bin[i] corresponds to range[i] <= x < range[i+1] - -- Function: gsl_ntuple * gsl_ntuple_open (char * FILENAME, void * - NTUPLE_DATA, size_t SIZE) - This function opens an existing ntuple file FILENAME for reading - and returns a pointer to a corresponding ntuple struct. The - ntuples in the file must have size SIZE. A pointer to memory for - the current ntuple row NTUPLE_DATA must be supplied--this is used - to copy ntuples in and out of the file. +Here is a diagram of the correspondence between ranges and bins on the +number-line for x, - -File: gsl-ref.info, Node: Writing ntuples, Next: Reading ntuples, Prev: Opening an existing ntuple file, Up: N-tuples -23.4 Writing ntuples -==================== + [ bin[0] )[ bin[1] )[ bin[2] )[ bin[3] )[ bin[4] ) + ---|---------|---------|---------|---------|---------|--- x + r[0] r[1] r[2] r[3] r[4] r[5] - -- Function: int gsl_ntuple_write (gsl_ntuple * NTUPLE) - This function writes the current ntuple NTUPLE->NTUPLE_DATA of size - NTUPLE->SIZE to the corresponding file. +In this picture the values of the RANGE array are denoted by r. On the +left-hand side of each bin the square bracket '[' denotes an inclusive +lower bound (r <= x), and the round parentheses ')' on the right-hand +side denote an exclusive upper bound (x < r). Thus any samples which +fall on the upper end of the histogram are excluded. If you want to +include this value for the last bin you will need to add an extra bin to +your histogram. - -- Function: int gsl_ntuple_bookdata (gsl_ntuple * NTUPLE) - This function is a synonym for 'gsl_ntuple_write'. + The 'gsl_histogram' struct and its associated functions are defined +in the header file 'gsl_histogram.h'.  -File: gsl-ref.info, Node: Reading ntuples, Next: Closing an ntuple file, Prev: Writing ntuples, Up: N-tuples +File: gsl-ref.info, Node: Histogram allocation, Next: Copying Histograms, Prev: The histogram struct, Up: Histograms -23.5 Reading ntuples -==================== +23.2 Histogram allocation +========================= - -- Function: int gsl_ntuple_read (gsl_ntuple * NTUPLE) - This function reads the current row of the ntuple file for NTUPLE - and stores the values in NTUPLE->DATA. +The functions for allocating memory to a histogram follow the style of +'malloc' and 'free'. In addition they also perform their own error +checking. If there is insufficient memory available to allocate a +histogram then the functions call the error handler (with an error +number of 'GSL_ENOMEM') in addition to returning a null pointer. Thus +if you use the library error handler to abort your program then it isn't +necessary to check every histogram 'alloc'. - -File: gsl-ref.info, Node: Closing an ntuple file, Next: Histogramming ntuple values, Prev: Reading ntuples, Up: N-tuples + -- Function: gsl_histogram * gsl_histogram_alloc (size_t N) + This function allocates memory for a histogram with N bins, and + returns a pointer to a newly created 'gsl_histogram' struct. If + insufficient memory is available a null pointer is returned and the + error handler is invoked with an error code of 'GSL_ENOMEM'. The + bins and ranges are not initialized, and should be prepared using + one of the range-setting functions below in order to make the + histogram ready for use. -23.6 Closing an ntuple file -=========================== + -- Function: int gsl_histogram_set_ranges (gsl_histogram * H, const + double RANGE[], size_t SIZE) + This function sets the ranges of the existing histogram H using the + array RANGE of size SIZE. The values of the histogram bins are + reset to zero. The 'range' array should contain the desired bin + limits. The ranges can be arbitrary, subject to the restriction + that they are monotonically increasing. - -- Function: int gsl_ntuple_close (gsl_ntuple * NTUPLE) - This function closes the ntuple file NTUPLE and frees its - associated allocated memory. + The following example shows how to create a histogram with + logarithmic bins with ranges [1,10), [10,100) and [100,1000). - -File: gsl-ref.info, Node: Histogramming ntuple values, Next: Example ntuple programs, Prev: Closing an ntuple file, Up: N-tuples + gsl_histogram * h = gsl_histogram_alloc (3); -23.7 Histogramming ntuple values -================================ + /* bin[0] covers the range 1 <= x < 10 */ + /* bin[1] covers the range 10 <= x < 100 */ + /* bin[2] covers the range 100 <= x < 1000 */ -Once an ntuple has been created its contents can be histogrammed in -various ways using the function 'gsl_ntuple_project'. Two user-defined -functions must be provided, a function to select events and a function -to compute scalar values. The selection function and the value function -both accept the ntuple row as a first argument and other parameters as a -second argument. + double range[4] = { 1.0, 10.0, 100.0, 1000.0 }; - The "selection function" determines which ntuple rows are selected -for histogramming. It is defined by the following struct, - - typedef struct { - int (* function) (void * ntuple_data, void * params); - void * params; - } gsl_ntuple_select_fn; - -The struct component FUNCTION should return a non-zero value for each -ntuple row that is to be included in the histogram. + gsl_histogram_set_ranges (h, range, 4); - The "value function" computes scalar values for those ntuple rows -selected by the selection function, + Note that the size of the RANGE array should be defined to be one + element bigger than the number of bins. The additional element is + required for the upper value of the final bin. - typedef struct { - double (* function) (void * ntuple_data, void * params); - void * params; - } gsl_ntuple_value_fn; + -- Function: int gsl_histogram_set_ranges_uniform (gsl_histogram * H, + double XMIN, double XMAX) + This function sets the ranges of the existing histogram H to cover + the range XMIN to XMAX uniformly. The values of the histogram bins + are reset to zero. The bin ranges are shown in the table below, + bin[0] corresponds to xmin <= x < xmin + d + bin[1] corresponds to xmin + d <= x < xmin + 2 d + ...... + bin[n-1] corresponds to xmin + (n-1)d <= x < xmax -In this case the struct component FUNCTION should return the value to be -added to the histogram for the ntuple row. + where d is the bin spacing, d = (xmax-xmin)/n. - -- Function: int gsl_ntuple_project (gsl_histogram * H, gsl_ntuple * - NTUPLE, gsl_ntuple_value_fn * VALUE_FUNC, gsl_ntuple_select_fn - * SELECT_FUNC) - This function updates the histogram H from the ntuple NTUPLE using - the functions VALUE_FUNC and SELECT_FUNC. For each ntuple row - where the selection function SELECT_FUNC is non-zero the - corresponding value of that row is computed using the function - VALUE_FUNC and added to the histogram. Those ntuple rows where - SELECT_FUNC returns zero are ignored. New entries are added to the - histogram, so subsequent calls can be used to accumulate further - data in the same histogram. + -- Function: void gsl_histogram_free (gsl_histogram * H) + This function frees the histogram H and all of the memory + associated with it.  -File: gsl-ref.info, Node: Example ntuple programs, Next: Ntuple References and Further Reading, Prev: Histogramming ntuple values, Up: N-tuples +File: gsl-ref.info, Node: Copying Histograms, Next: Updating and accessing histogram elements, Prev: Histogram allocation, Up: Histograms -23.8 Examples -============= +23.3 Copying Histograms +======================= -The following example programs demonstrate the use of ntuples in -managing a large dataset. The first program creates a set of 10,000 -simulated "events", each with 3 associated values (x,y,z). These are -generated from a Gaussian distribution with unit variance, for -demonstration purposes, and written to the ntuple file 'test.dat'. + -- Function: int gsl_histogram_memcpy (gsl_histogram * DEST, const + gsl_histogram * SRC) + This function copies the histogram SRC into the pre-existing + histogram DEST, making DEST into an exact copy of SRC. The two + histograms must be of the same size. - #include - #include - #include + -- Function: gsl_histogram * gsl_histogram_clone (const gsl_histogram * + SRC) + This function returns a pointer to a newly created histogram which + is an exact copy of the histogram SRC. - struct data - { - double x; - double y; - double z; - }; + +File: gsl-ref.info, Node: Updating and accessing histogram elements, Next: Searching histogram ranges, Prev: Copying Histograms, Up: Histograms - int - main (void) - { - const gsl_rng_type * T; - gsl_rng * r; +23.4 Updating and accessing histogram elements +============================================== - struct data ntuple_row; - int i; +There are two ways to access histogram bins, either by specifying an x +coordinate or by using the bin-index directly. The functions for +accessing the histogram through x coordinates use a binary search to +identify the bin which covers the appropriate range. - gsl_ntuple *ntuple - = gsl_ntuple_create ("test.dat", &ntuple_row, - sizeof (ntuple_row)); + -- Function: int gsl_histogram_increment (gsl_histogram * H, double X) + This function updates the histogram H by adding one (1.0) to the + bin whose range contains the coordinate X. - gsl_rng_env_setup (); + If X lies in the valid range of the histogram then the function + returns zero to indicate success. If X is less than the lower + limit of the histogram then the function returns 'GSL_EDOM', and + none of bins are modified. Similarly, if the value of X is greater + than or equal to the upper limit of the histogram then the function + returns 'GSL_EDOM', and none of the bins are modified. The error + handler is not called, however, since it is often necessary to + compute histograms for a small range of a larger dataset, ignoring + the values outside the range of interest. - T = gsl_rng_default; - r = gsl_rng_alloc (T); + -- Function: int gsl_histogram_accumulate (gsl_histogram * H, double X, + double WEIGHT) + This function is similar to 'gsl_histogram_increment' but increases + the value of the appropriate bin in the histogram H by the + floating-point number WEIGHT. - for (i = 0; i < 10000; i++) - { - ntuple_row.x = gsl_ran_ugaussian (r); - ntuple_row.y = gsl_ran_ugaussian (r); - ntuple_row.z = gsl_ran_ugaussian (r); + -- Function: double gsl_histogram_get (const gsl_histogram * H, size_t + I) + This function returns the contents of the I-th bin of the histogram + H. If I lies outside the valid range of indices for the histogram + then the error handler is called with an error code of 'GSL_EDOM' + and the function returns 0. - gsl_ntuple_write (ntuple); - } + -- Function: int gsl_histogram_get_range (const gsl_histogram * H, + size_t I, double * LOWER, double * UPPER) + This function finds the upper and lower range limits of the I-th + bin of the histogram H. If the index I is valid then the + corresponding range limits are stored in LOWER and UPPER. The + lower limit is inclusive (i.e. events with this coordinate are + included in the bin) and the upper limit is exclusive (i.e. events + with the coordinate of the upper limit are excluded and fall in the + neighboring higher bin, if it exists). The function returns 0 to + indicate success. If I lies outside the valid range of indices for + the histogram then the error handler is called and the function + returns an error code of 'GSL_EDOM'. - gsl_ntuple_close (ntuple); - gsl_rng_free (r); + -- Function: double gsl_histogram_max (const gsl_histogram * H) + -- Function: double gsl_histogram_min (const gsl_histogram * H) + -- Function: size_t gsl_histogram_bins (const gsl_histogram * H) + These functions return the maximum upper and minimum lower range + limits and the number of bins of the histogram H. They provide a + way of determining these values without accessing the + 'gsl_histogram' struct directly. - return 0; - } + -- Function: void gsl_histogram_reset (gsl_histogram * H) + This function resets all the bins in the histogram H to zero. -The next program analyses the ntuple data in the file 'test.dat'. The -analysis procedure is to compute the squared-magnitude of each event, -E^2=x^2+y^2+z^2, and select only those which exceed a lower limit of -1.5. The selected events are then histogrammed using their E^2 values. + +File: gsl-ref.info, Node: Searching histogram ranges, Next: Histogram Statistics, Prev: Updating and accessing histogram elements, Up: Histograms - #include - #include - #include +23.5 Searching histogram ranges +=============================== - struct data - { - double x; - double y; - double z; - }; +The following functions are used by the access and update routines to +locate the bin which corresponds to a given x coordinate. - int sel_func (void *ntuple_data, void *params); - double val_func (void *ntuple_data, void *params); + -- Function: int gsl_histogram_find (const gsl_histogram * H, double X, + size_t * I) + This function finds and sets the index I to the bin number which + covers the coordinate X in the histogram H. The bin is located + using a binary search. The search includes an optimization for + histograms with uniform range, and will return the correct bin + immediately in this case. If X is found in the range of the + histogram then the function sets the index I and returns + 'GSL_SUCCESS'. If X lies outside the valid range of the histogram + then the function returns 'GSL_EDOM' and the error handler is + invoked. - int - main (void) - { - struct data ntuple_row; + +File: gsl-ref.info, Node: Histogram Statistics, Next: Histogram Operations, Prev: Searching histogram ranges, Up: Histograms - gsl_ntuple *ntuple - = gsl_ntuple_open ("test.dat", &ntuple_row, - sizeof (ntuple_row)); - double lower = 1.5; +23.6 Histogram Statistics +========================= - gsl_ntuple_select_fn S; - gsl_ntuple_value_fn V; + -- Function: double gsl_histogram_max_val (const gsl_histogram * H) + This function returns the maximum value contained in the histogram + bins. - gsl_histogram *h = gsl_histogram_alloc (100); - gsl_histogram_set_ranges_uniform(h, 0.0, 10.0); + -- Function: size_t gsl_histogram_max_bin (const gsl_histogram * H) + This function returns the index of the bin containing the maximum + value. In the case where several bins contain the same maximum + value the smallest index is returned. - S.function = &sel_func; - S.params = &lower; + -- Function: double gsl_histogram_min_val (const gsl_histogram * H) + This function returns the minimum value contained in the histogram + bins. - V.function = &val_func; - V.params = 0; + -- Function: size_t gsl_histogram_min_bin (const gsl_histogram * H) + This function returns the index of the bin containing the minimum + value. In the case where several bins contain the same maximum + value the smallest index is returned. - gsl_ntuple_project (h, ntuple, &V, &S); - gsl_histogram_fprintf (stdout, h, "%f", "%f"); - gsl_histogram_free (h); - gsl_ntuple_close (ntuple); + -- Function: double gsl_histogram_mean (const gsl_histogram * H) + This function returns the mean of the histogrammed variable, where + the histogram is regarded as a probability distribution. Negative + bin values are ignored for the purposes of this calculation. The + accuracy of the result is limited by the bin width. - return 0; - } + -- Function: double gsl_histogram_sigma (const gsl_histogram * H) + This function returns the standard deviation of the histogrammed + variable, where the histogram is regarded as a probability + distribution. Negative bin values are ignored for the purposes of + this calculation. The accuracy of the result is limited by the bin + width. - int - sel_func (void *ntuple_data, void *params) - { - struct data * data = (struct data *) ntuple_data; - double x, y, z, E2, scale; - scale = *(double *) params; + -- Function: double gsl_histogram_sum (const gsl_histogram * H) + This function returns the sum of all bin values. Negative bin + values are included in the sum. - x = data->x; - y = data->y; - z = data->z; + +File: gsl-ref.info, Node: Histogram Operations, Next: Reading and writing histograms, Prev: Histogram Statistics, Up: Histograms - E2 = x * x + y * y + z * z; +23.7 Histogram Operations +========================= - return E2 > scale; - } + -- Function: int gsl_histogram_equal_bins_p (const gsl_histogram * H1, + const gsl_histogram * H2) + This function returns 1 if the all of the individual bin ranges of + the two histograms are identical, and 0 otherwise. - double - val_func (void *ntuple_data, void *params) - { - struct data * data = (struct data *) ntuple_data; - double x, y, z; - - x = data->x; - y = data->y; - z = data->z; + -- Function: int gsl_histogram_add (gsl_histogram * H1, const + gsl_histogram * H2) + This function adds the contents of the bins in histogram H2 to the + corresponding bins of histogram H1, i.e. h'_1(i) = h_1(i) + + h_2(i). The two histograms must have identical bin ranges. - return x * x + y * y + z * z; - } + -- Function: int gsl_histogram_sub (gsl_histogram * H1, const + gsl_histogram * H2) + This function subtracts the contents of the bins in histogram H2 + from the corresponding bins of histogram H1, i.e. h'_1(i) = h_1(i) + - h_2(i). The two histograms must have identical bin ranges. - The following plot shows the distribution of the selected events. -Note the cut-off at the lower bound. + -- Function: int gsl_histogram_mul (gsl_histogram * H1, const + gsl_histogram * H2) + This function multiplies the contents of the bins of histogram H1 + by the contents of the corresponding bins in histogram H2, i.e. + h'_1(i) = h_1(i) * h_2(i). The two histograms must have identical + bin ranges. - -File: gsl-ref.info, Node: Ntuple References and Further Reading, Prev: Example ntuple programs, Up: N-tuples + -- Function: int gsl_histogram_div (gsl_histogram * H1, const + gsl_histogram * H2) + This function divides the contents of the bins of histogram H1 by + the contents of the corresponding bins in histogram H2, i.e. + h'_1(i) = h_1(i) / h_2(i). The two histograms must have identical + bin ranges. -23.9 References and Further Reading -=================================== + -- Function: int gsl_histogram_scale (gsl_histogram * H, double SCALE) + This function multiplies the contents of the bins of histogram H by + the constant SCALE, i.e. h'_1(i) = h_1(i) * scale. -Further information on the use of ntuples can be found in the -documentation for the CERN packages PAW and HBOOK (available online). + -- Function: int gsl_histogram_shift (gsl_histogram * H, double OFFSET) + This function shifts the contents of the bins of histogram H by the + constant OFFSET, i.e. h'_1(i) = h_1(i) + offset.  -File: gsl-ref.info, Node: Monte Carlo Integration, Next: Simulated Annealing, Prev: N-tuples, Up: Top - -24 Monte Carlo Integration -************************** +File: gsl-ref.info, Node: Reading and writing histograms, Next: Resampling from histograms, Prev: Histogram Operations, Up: Histograms -This chapter describes routines for multidimensional Monte Carlo -integration. These include the traditional Monte Carlo method and -adaptive algorithms such as VEGAS and MISER which use importance -sampling and stratified sampling techniques. Each algorithm computes an -estimate of a multidimensional definite integral of the form, +23.8 Reading and writing histograms +=================================== - I = \int_xl^xu dx \int_yl^yu dy ... f(x, y, ...) +The library provides functions for reading and writing histograms to a +file as binary data or formatted text. -over a hypercubic region ((x_l,x_u), (y_l,y_u), ...) using a fixed -number of function calls. The routines also provide a statistical -estimate of the error on the result. This error estimate should be -taken as a guide rather than as a strict error bound--random sampling of -the region may not uncover all the important features of the function, -resulting in an underestimate of the error. + -- Function: int gsl_histogram_fwrite (FILE * STREAM, const + gsl_histogram * H) + This function writes the ranges and bins of the histogram H to the + stream STREAM in binary format. The return value is 0 for success + and 'GSL_EFAILED' if there was a problem writing to the file. + Since the data is written in the native binary format it may not be + portable between different architectures. - The functions are defined in separate header files for each routine, -'gsl_monte_plain.h', 'gsl_monte_miser.h' and 'gsl_monte_vegas.h'. + -- Function: int gsl_histogram_fread (FILE * STREAM, gsl_histogram * H) + This function reads into the histogram H from the open stream + STREAM in binary format. The histogram H must be preallocated with + the correct size since the function uses the number of bins in H to + determine how many bytes to read. The return value is 0 for + success and 'GSL_EFAILED' if there was a problem reading from the + file. The data is assumed to have been written in the native + binary format on the same architecture. -* Menu: + -- Function: int gsl_histogram_fprintf (FILE * STREAM, const + gsl_histogram * H, const char * RANGE_FORMAT, const char * + BIN_FORMAT) + This function writes the ranges and bins of the histogram H + line-by-line to the stream STREAM using the format specifiers + RANGE_FORMAT and BIN_FORMAT. These should be one of the '%g', '%e' + or '%f' formats for floating point numbers. The function returns 0 + for success and 'GSL_EFAILED' if there was a problem writing to the + file. The histogram output is formatted in three columns, and the + columns are separated by spaces, like this, -* Monte Carlo Interface:: -* PLAIN Monte Carlo:: -* MISER:: -* VEGAS:: -* Monte Carlo Examples:: -* Monte Carlo Integration References and Further Reading:: + range[0] range[1] bin[0] + range[1] range[2] bin[1] + range[2] range[3] bin[2] + .... + range[n-1] range[n] bin[n-1] - -File: gsl-ref.info, Node: Monte Carlo Interface, Next: PLAIN Monte Carlo, Up: Monte Carlo Integration + The values of the ranges are formatted using RANGE_FORMAT and the + value of the bins are formatted using BIN_FORMAT. Each line + contains the lower and upper limit of the range of the bins and the + value of the bin itself. Since the upper limit of one bin is the + lower limit of the next there is duplication of these values + between lines but this allows the histogram to be manipulated with + line-oriented tools. -24.1 Interface -============== + -- Function: int gsl_histogram_fscanf (FILE * STREAM, gsl_histogram * + H) + This function reads formatted data from the stream STREAM into the + histogram H. The data is assumed to be in the three-column format + used by 'gsl_histogram_fprintf'. The histogram H must be + preallocated with the correct length since the function uses the + size of H to determine how many numbers to read. The function + returns 0 for success and 'GSL_EFAILED' if there was a problem + reading from the file. -All of the Monte Carlo integration routines use the same general form of -interface. There is an allocator to allocate memory for control -variables and workspace, a routine to initialize those control -variables, the integrator itself, and a function to free the space when -done. + +File: gsl-ref.info, Node: Resampling from histograms, Next: The histogram probability distribution struct, Prev: Reading and writing histograms, Up: Histograms - Each integration function requires a random number generator to be -supplied, and returns an estimate of the integral and its standard -deviation. The accuracy of the result is determined by the number of -function calls specified by the user. If a known level of accuracy is -required this can be achieved by calling the integrator several times -and averaging the individual results until the desired accuracy is -obtained. +23.9 Resampling from histograms +=============================== - Random sample points used within the Monte Carlo routines are always -chosen strictly within the integration region, so that endpoint -singularities are automatically avoided. +A histogram made by counting events can be regarded as a measurement of +a probability distribution. Allowing for statistical error, the height +of each bin represents the probability of an event where the value of x +falls in the range of that bin. The probability distribution function +has the one-dimensional form p(x)dx where, - The function to be integrated has its own datatype, defined in the -header file 'gsl_monte.h'. + p(x) = n_i/ (N w_i) - -- Data Type: gsl_monte_function +In this equation n_i is the number of events in the bin which contains +x, w_i is the width of the bin and N is the total number of events. The +distribution of events within each bin is assumed to be uniform. - This data type defines a general function with parameters for Monte - Carlo integration. + +File: gsl-ref.info, Node: The histogram probability distribution struct, Next: Example programs for histograms, Prev: Resampling from histograms, Up: Histograms - 'double (* f) (double * X, size_t DIM, void * PARAMS)' - this function should return the value f(x,params) for the - argument X and parameters PARAMS, where X is an array of size - DIM giving the coordinates of the point where the function is - to be evaluated. +23.10 The histogram probability distribution struct +=================================================== - 'size_t dim' - the number of dimensions for X. +The probability distribution function for a histogram consists of a set +of "bins" which measure the probability of an event falling into a given +range of a continuous variable x. A probability distribution function +is defined by the following struct, which actually stores the cumulative +probability distribution function. This is the natural quantity for +generating samples via the inverse transform method, because there is a +one-to-one mapping between the cumulative probability distribution and +the range [0,1]. It can be shown that by taking a uniform random number +in this range and finding its corresponding coordinate in the cumulative +probability distribution we obtain samples with the desired probability +distribution. - 'void * params' - a pointer to the parameters of the function. + -- Data Type: gsl_histogram_pdf + 'size_t n' + This is the number of bins used to approximate the probability + distribution function. + 'double * range' + The ranges of the bins are stored in an array of N+1 elements + pointed to by RANGE. + 'double * sum' + The cumulative probability for the bins is stored in an array + of N elements pointed to by SUM. -Here is an example for a quadratic function in two dimensions, +The following functions allow you to create a 'gsl_histogram_pdf' struct +which represents this probability distribution and generate random +samples from it. - f(x,y) = a x^2 + b x y + c y^2 + -- Function: gsl_histogram_pdf * gsl_histogram_pdf_alloc (size_t N) + This function allocates memory for a probability distribution with + N bins and returns a pointer to a newly initialized + 'gsl_histogram_pdf' struct. If insufficient memory is available a + null pointer is returned and the error handler is invoked with an + error code of 'GSL_ENOMEM'. -with a = 3, b = 2, c = 1. The following code defines a -'gsl_monte_function' 'F' which you could pass to an integrator: + -- Function: int gsl_histogram_pdf_init (gsl_histogram_pdf * P, const + gsl_histogram * H) + This function initializes the probability distribution P with the + contents of the histogram H. If any of the bins of H are negative + then the error handler is invoked with an error code of 'GSL_EDOM' + because a probability distribution cannot contain negative values. - struct my_f_params { double a; double b; double c; }; + -- Function: void gsl_histogram_pdf_free (gsl_histogram_pdf * P) + This function frees the probability distribution function P and all + of the memory associated with it. - double - my_f (double x[], size_t dim, void * p) { - struct my_f_params * fp = (struct my_f_params *)p; + -- Function: double gsl_histogram_pdf_sample (const gsl_histogram_pdf * + P, double R) + This function uses R, a uniform random number between zero and one, + to compute a single random sample from the probability distribution + P. The algorithm used to compute the sample s is given by the + following formula, - if (dim != 2) - { - fprintf (stderr, "error: dim != 2"); - abort (); - } + s = range[i] + delta * (range[i+1] - range[i]) - return fp->a * x[0] * x[0] - + fp->b * x[0] * x[1] - + fp->c * x[1] * x[1]; - } + where i is the index which satisfies sum[i] <= r < sum[i+1] and + delta is (r - sum[i])/(sum[i+1] - sum[i]). - gsl_monte_function F; - struct my_f_params params = { 3.0, 2.0, 1.0 }; + +File: gsl-ref.info, Node: Example programs for histograms, Next: Two dimensional histograms, Prev: The histogram probability distribution struct, Up: Histograms - F.f = &my_f; - F.dim = 2; - F.params = ¶ms; +23.11 Example programs for histograms +===================================== -The function f(x) can be evaluated using the following macro, +The following program shows how to make a simple histogram of a column +of numerical data supplied on 'stdin'. The program takes three +arguments, specifying the upper and lower bounds of the histogram and +the number of bins. It then reads numbers from 'stdin', one line at a +time, and adds them to the histogram. When there is no more data to +read it prints out the accumulated histogram using +'gsl_histogram_fprintf'. - #define GSL_MONTE_FN_EVAL(F,x) - (*((F)->f))(x,(F)->dim,(F)->params) + #include + #include + #include - -File: gsl-ref.info, Node: PLAIN Monte Carlo, Next: MISER, Prev: Monte Carlo Interface, Up: Monte Carlo Integration + int + main (int argc, char **argv) + { + double a, b; + size_t n; -24.2 PLAIN Monte Carlo -====================== + if (argc != 4) + { + printf ("Usage: gsl-histogram xmin xmax n\n" + "Computes a histogram of the data " + "on stdin using n bins from xmin " + "to xmax\n"); + exit (0); + } -The plain Monte Carlo algorithm samples points randomly from the -integration region to estimate the integral and its error. Using this -algorithm the estimate of the integral E(f; N) for N randomly -distributed points x_i is given by, + a = atof (argv[1]); + b = atof (argv[2]); + n = atoi (argv[3]); - E(f; N) = = V = (V / N) \sum_i^N f(x_i) + { + double x; + gsl_histogram * h = gsl_histogram_alloc (n); + gsl_histogram_set_ranges_uniform (h, a, b); -where V is the volume of the integration region. The error on this -estimate \sigma(E;N) is calculated from the estimated variance of the -mean, + while (fscanf (stdin, "%lg", &x) == 1) + { + gsl_histogram_increment (h, x); + } + gsl_histogram_fprintf (stdout, h, "%g", "%g"); + gsl_histogram_free (h); + } + exit (0); + } - \sigma^2 (E; N) = (V^2 / N^2) \sum_i^N (f(x_i) - )^2. +Here is an example of the program in use. We generate 10000 random +samples from a Cauchy distribution with a width of 30 and histogram them +over the range -100 to 100, using 200 bins. -For large N this variance decreases asymptotically as \Var(f)/N, where -\Var(f) is the true variance of the function over the integration -region. The error estimate itself should decrease as -\sigma(f)/\sqrt{N}. The familiar law of errors decreasing as 1/\sqrt{N} -applies--to reduce the error by a factor of 10 requires a 100-fold -increase in the number of sample points. + $ gsl-randist 0 10000 cauchy 30 + | gsl-histogram -100 100 200 > histogram.dat - The functions described in this section are declared in the header -file 'gsl_monte_plain.h'. +A plot of the resulting histogram shows the familiar shape of the Cauchy +distribution and the fluctuations caused by the finite sample size. - -- Function: gsl_monte_plain_state * gsl_monte_plain_alloc (size_t DIM) - This function allocates and initializes a workspace for Monte Carlo - integration in DIM dimensions. + $ awk '{print $1, $3 ; print $2, $3}' histogram.dat + | graph -T X - -- Function: int gsl_monte_plain_init (gsl_monte_plain_state* S) - This function initializes a previously allocated integration state. - This allows an existing workspace to be reused for different - integrations. + +File: gsl-ref.info, Node: Two dimensional histograms, Next: The 2D histogram struct, Prev: Example programs for histograms, Up: Histograms - -- Function: int gsl_monte_plain_integrate (gsl_monte_function * F, - const double XL[], const double XU[], size_t DIM, size_t - CALLS, gsl_rng * R, gsl_monte_plain_state * S, double * - RESULT, double * ABSERR) - This routines uses the plain Monte Carlo algorithm to integrate the - function F over the DIM-dimensional hypercubic region defined by - the lower and upper limits in the arrays XL and XU, each of size - DIM. The integration uses a fixed number of function calls CALLS, - and obtains random sampling points using the random number - generator R. A previously allocated workspace S must be supplied. - The result of the integration is returned in RESULT, with an - estimated absolute error ABSERR. +23.12 Two dimensional histograms +================================ - -- Function: void gsl_monte_plain_free (gsl_monte_plain_state * S) - This function frees the memory associated with the integrator state - S. +A two dimensional histogram consists of a set of "bins" which count the +number of events falling in a given area of the (x,y) plane. The +simplest way to use a two dimensional histogram is to record +two-dimensional position information, n(x,y). Another possibility is to +form a "joint distribution" by recording related variables. For example +a detector might record both the position of an event (x) and the amount +of energy it deposited E. These could be histogrammed as the joint +distribution n(x,E).  -File: gsl-ref.info, Node: MISER, Next: VEGAS, Prev: PLAIN Monte Carlo, Up: Monte Carlo Integration - -24.3 MISER -========== +File: gsl-ref.info, Node: The 2D histogram struct, Next: 2D Histogram allocation, Prev: Two dimensional histograms, Up: Histograms -The MISER algorithm of Press and Farrar is based on recursive stratified -sampling. This technique aims to reduce the overall integration error -by concentrating integration points in the regions of highest variance. +23.13 The 2D histogram struct +============================= - The idea of stratified sampling begins with the observation that for -two disjoint regions a and b with Monte Carlo estimates of the integral -E_a(f) and E_b(f) and variances \sigma_a^2(f) and \sigma_b^2(f), the -variance \Var(f) of the combined estimate E(f) = (1/2) (E_a(f) + E_b(f)) -is given by, +Two dimensional histograms are defined by the following struct, - \Var(f) = (\sigma_a^2(f) / 4 N_a) + (\sigma_b^2(f) / 4 N_b). + -- Data Type: gsl_histogram2d + 'size_t nx, ny' + This is the number of histogram bins in the x and y + directions. + 'double * xrange' + The ranges of the bins in the x-direction are stored in an + array of NX + 1 elements pointed to by XRANGE. + 'double * yrange' + The ranges of the bins in the y-direction are stored in an + array of NY + 1 elements pointed to by YRANGE. + 'double * bin' + The counts for each bin are stored in an array pointed to by + BIN. The bins are floating-point numbers, so you can + increment them by non-integer values if necessary. The array + BIN stores the two dimensional array of bins in a single block + of memory according to the mapping 'bin(i,j)' = 'bin[i * ny + + j]'. -It can be shown that this variance is minimized by distributing the -points such that, +The range for 'bin(i,j)' is given by 'xrange[i]' to 'xrange[i+1]' in the +x-direction and 'yrange[j]' to 'yrange[j+1]' in the y-direction. Each +bin is inclusive at the lower end and exclusive at the upper end. +Mathematically this means that the bins are defined by the following +inequality, + bin(i,j) corresponds to xrange[i] <= x < xrange[i+1] + and yrange[j] <= y < yrange[j+1] - N_a / (N_a + N_b) = \sigma_a / (\sigma_a + \sigma_b). +Note that any samples which fall on the upper sides of the histogram are +excluded. If you want to include these values for the side bins you +will need to add an extra row or column to your histogram. -Hence the smallest error estimate is obtained by allocating sample -points in proportion to the standard deviation of the function in each -sub-region. + The 'gsl_histogram2d' struct and its associated functions are defined +in the header file 'gsl_histogram2d.h'. - The MISER algorithm proceeds by bisecting the integration region -along one coordinate axis to give two sub-regions at each step. The -direction is chosen by examining all d possible bisections and selecting -the one which will minimize the combined variance of the two -sub-regions. The variance in the sub-regions is estimated by sampling -with a fraction of the total number of points available to the current -step. The same procedure is then repeated recursively for each of the -two half-spaces from the best bisection. The remaining sample points -are allocated to the sub-regions using the formula for N_a and N_b. -This recursive allocation of integration points continues down to a -user-specified depth where each sub-region is integrated using a plain -Monte Carlo estimate. These individual values and their error estimates -are then combined upwards to give an overall result and an estimate of -its error. + +File: gsl-ref.info, Node: 2D Histogram allocation, Next: Copying 2D Histograms, Prev: The 2D histogram struct, Up: Histograms - The functions described in this section are declared in the header -file 'gsl_monte_miser.h'. +23.14 2D Histogram allocation +============================= - -- Function: gsl_monte_miser_state * gsl_monte_miser_alloc (size_t DIM) - This function allocates and initializes a workspace for Monte Carlo - integration in DIM dimensions. The workspace is used to maintain - the state of the integration. +The functions for allocating memory to a 2D histogram follow the style +of 'malloc' and 'free'. In addition they also perform their own error +checking. If there is insufficient memory available to allocate a +histogram then the functions call the error handler (with an error +number of 'GSL_ENOMEM') in addition to returning a null pointer. Thus +if you use the library error handler to abort your program then it isn't +necessary to check every 2D histogram 'alloc'. - -- Function: int gsl_monte_miser_init (gsl_monte_miser_state* S) - This function initializes a previously allocated integration state. - This allows an existing workspace to be reused for different - integrations. + -- Function: gsl_histogram2d * gsl_histogram2d_alloc (size_t NX, size_t + NY) + This function allocates memory for a two-dimensional histogram with + NX bins in the x direction and NY bins in the y direction. The + function returns a pointer to a newly created 'gsl_histogram2d' + struct. If insufficient memory is available a null pointer is + returned and the error handler is invoked with an error code of + 'GSL_ENOMEM'. The bins and ranges must be initialized with one of + the functions below before the histogram is ready for use. - -- Function: int gsl_monte_miser_integrate (gsl_monte_function * F, - const double XL[], const double XU[], size_t DIM, size_t - CALLS, gsl_rng * R, gsl_monte_miser_state * S, double * - RESULT, double * ABSERR) - This routines uses the MISER Monte Carlo algorithm to integrate the - function F over the DIM-dimensional hypercubic region defined by - the lower and upper limits in the arrays XL and XU, each of size - DIM. The integration uses a fixed number of function calls CALLS, - and obtains random sampling points using the random number - generator R. A previously allocated workspace S must be supplied. - The result of the integration is returned in RESULT, with an - estimated absolute error ABSERR. + -- Function: int gsl_histogram2d_set_ranges (gsl_histogram2d * H, const + double XRANGE[], size_t XSIZE, const double YRANGE[], size_t + YSIZE) + This function sets the ranges of the existing histogram H using the + arrays XRANGE and YRANGE of size XSIZE and YSIZE respectively. The + values of the histogram bins are reset to zero. - -- Function: void gsl_monte_miser_free (gsl_monte_miser_state * S) - This function frees the memory associated with the integrator state - S. + -- Function: int gsl_histogram2d_set_ranges_uniform (gsl_histogram2d * + H, double XMIN, double XMAX, double YMIN, double YMAX) + This function sets the ranges of the existing histogram H to cover + the ranges XMIN to XMAX and YMIN to YMAX uniformly. The values of + the histogram bins are reset to zero. - The MISER algorithm has several configurable parameters which can be -changed using the following two functions.(1) + -- Function: void gsl_histogram2d_free (gsl_histogram2d * H) + This function frees the 2D histogram H and all of the memory + associated with it. - -- Function: void gsl_monte_miser_params_get (const - gsl_monte_miser_state * S, gsl_monte_miser_params * PARAMS) - This function copies the parameters of the integrator state into - the user-supplied PARAMS structure. + +File: gsl-ref.info, Node: Copying 2D Histograms, Next: Updating and accessing 2D histogram elements, Prev: 2D Histogram allocation, Up: Histograms - -- Function: void gsl_monte_miser_params_set (gsl_monte_miser_state * - S, const gsl_monte_miser_params * PARAMS) - This function sets the integrator parameters based on values - provided in the PARAMS structure. +23.15 Copying 2D Histograms +=========================== - Typically the values of the parameters are first read using -'gsl_monte_miser_params_get', the necessary changes are made to the -fields of the PARAMS structure, and the values are copied back into the -integrator state using 'gsl_monte_miser_params_set'. The functions use -the 'gsl_monte_miser_params' structure which contains the following -fields: + -- Function: int gsl_histogram2d_memcpy (gsl_histogram2d * DEST, const + gsl_histogram2d * SRC) + This function copies the histogram SRC into the pre-existing + histogram DEST, making DEST into an exact copy of SRC. The two + histograms must be of the same size. - -- Variable: double estimate_frac - This parameter specifies the fraction of the currently available - number of function calls which are allocated to estimating the - variance at each recursive step. The default value is 0.1. + -- Function: gsl_histogram2d * gsl_histogram2d_clone (const + gsl_histogram2d * SRC) + This function returns a pointer to a newly created histogram which + is an exact copy of the histogram SRC. - -- Variable: size_t min_calls - This parameter specifies the minimum number of function calls - required for each estimate of the variance. If the number of - function calls allocated to the estimate using ESTIMATE_FRAC falls - below MIN_CALLS then MIN_CALLS are used instead. This ensures that - each estimate maintains a reasonable level of accuracy. The - default value of MIN_CALLS is '16 * dim'. + +File: gsl-ref.info, Node: Updating and accessing 2D histogram elements, Next: Searching 2D histogram ranges, Prev: Copying 2D Histograms, Up: Histograms - -- Variable: size_t min_calls_per_bisection - This parameter specifies the minimum number of function calls - required to proceed with a bisection step. When a recursive step - has fewer calls available than MIN_CALLS_PER_BISECTION it performs - a plain Monte Carlo estimate of the current sub-region and - terminates its branch of the recursion. The default value of this - parameter is '32 * min_calls'. +23.16 Updating and accessing 2D histogram elements +================================================== - -- Variable: double alpha - This parameter controls how the estimated variances for the two - sub-regions of a bisection are combined when allocating points. - With recursive sampling the overall variance should scale better - than 1/N, since the values from the sub-regions will be obtained - using a procedure which explicitly minimizes their variance. To - accommodate this behavior the MISER algorithm allows the total - variance to depend on a scaling parameter \alpha, +You can access the bins of a two-dimensional histogram either by +specifying a pair of (x,y) coordinates or by using the bin indices (i,j) +directly. The functions for accessing the histogram through (x,y) +coordinates use binary searches in the x and y directions to identify +the bin which covers the appropriate range. - \Var(f) = {\sigma_a \over N_a^\alpha} + {\sigma_b \over N_b^\alpha}. + -- Function: int gsl_histogram2d_increment (gsl_histogram2d * H, double + X, double Y) + This function updates the histogram H by adding one (1.0) to the + bin whose x and y ranges contain the coordinates (X,Y). - The authors of the original paper describing MISER recommend the - value \alpha = 2 as a good choice, obtained from numerical - experiments, and this is used as the default value in this - implementation. + If the point (x,y) lies inside the valid ranges of the histogram + then the function returns zero to indicate success. If (x,y) lies + outside the limits of the histogram then the function returns + 'GSL_EDOM', and none of the bins are modified. The error handler + is not called, since it is often necessary to compute histograms + for a small range of a larger dataset, ignoring any coordinates + outside the range of interest. - -- Variable: double dither - This parameter introduces a random fractional variation of size - DITHER into each bisection, which can be used to break the symmetry - of integrands which are concentrated near the exact center of the - hypercubic integration region. The default value of dither is - zero, so no variation is introduced. If needed, a typical value of - DITHER is 0.1. + -- Function: int gsl_histogram2d_accumulate (gsl_histogram2d * H, + double X, double Y, double WEIGHT) + This function is similar to 'gsl_histogram2d_increment' but + increases the value of the appropriate bin in the histogram H by + the floating-point number WEIGHT. - ---------- Footnotes ---------- + -- Function: double gsl_histogram2d_get (const gsl_histogram2d * H, + size_t I, size_t J) + This function returns the contents of the (I,J)-th bin of the + histogram H. If (I,J) lies outside the valid range of indices for + the histogram then the error handler is called with an error code + of 'GSL_EDOM' and the function returns 0. - (1) The previous method of accessing these fields directly through -the 'gsl_monte_miser_state' struct is now deprecated. + -- Function: int gsl_histogram2d_get_xrange (const gsl_histogram2d * H, + size_t I, double * XLOWER, double * XUPPER) + -- Function: int gsl_histogram2d_get_yrange (const gsl_histogram2d * H, + size_t J, double * YLOWER, double * YUPPER) + These functions find the upper and lower range limits of the I-th + and J-th bins in the x and y directions of the histogram H. The + range limits are stored in XLOWER and XUPPER or YLOWER and YUPPER. + The lower limits are inclusive (i.e. events with these coordinates + are included in the bin) and the upper limits are exclusive (i.e. + events with the value of the upper limit are not included and fall + in the neighboring higher bin, if it exists). The functions return + 0 to indicate success. If I or J lies outside the valid range of + indices for the histogram then the error handler is called with an + error code of 'GSL_EDOM'. - -File: gsl-ref.info, Node: VEGAS, Next: Monte Carlo Examples, Prev: MISER, Up: Monte Carlo Integration + -- Function: double gsl_histogram2d_xmax (const gsl_histogram2d * H) + -- Function: double gsl_histogram2d_xmin (const gsl_histogram2d * H) + -- Function: size_t gsl_histogram2d_nx (const gsl_histogram2d * H) + -- Function: double gsl_histogram2d_ymax (const gsl_histogram2d * H) + -- Function: double gsl_histogram2d_ymin (const gsl_histogram2d * H) + -- Function: size_t gsl_histogram2d_ny (const gsl_histogram2d * H) + These functions return the maximum upper and minimum lower range + limits and the number of bins for the x and y directions of the + histogram H. They provide a way of determining these values + without accessing the 'gsl_histogram2d' struct directly. -24.4 VEGAS -========== + -- Function: void gsl_histogram2d_reset (gsl_histogram2d * H) + This function resets all the bins of the histogram H to zero. -The VEGAS algorithm of Lepage is based on importance sampling. It -samples points from the probability distribution described by the -function |f|, so that the points are concentrated in the regions that -make the largest contribution to the integral. + +File: gsl-ref.info, Node: Searching 2D histogram ranges, Next: 2D Histogram Statistics, Prev: Updating and accessing 2D histogram elements, Up: Histograms - In general, if the Monte Carlo integral of f is sampled with points -distributed according to a probability distribution described by the -function g, we obtain an estimate E_g(f; N), +23.17 Searching 2D histogram ranges +=================================== - E_g(f; N) = E(f/g; N) +The following functions are used by the access and update routines to +locate the bin which corresponds to a given (x,y) coordinate. -with a corresponding variance, + -- Function: int gsl_histogram2d_find (const gsl_histogram2d * H, + double X, double Y, size_t * I, size_t * J) + This function finds and sets the indices I and J to the bin which + covers the coordinates (X,Y). The bin is located using a binary + search. The search includes an optimization for histograms with + uniform ranges, and will return the correct bin immediately in this + case. If (x,y) is found then the function sets the indices (I,J) + and returns 'GSL_SUCCESS'. If (x,y) lies outside the valid range + of the histogram then the function returns 'GSL_EDOM' and the error + handler is invoked. - \Var_g(f; N) = \Var(f/g; N). + +File: gsl-ref.info, Node: 2D Histogram Statistics, Next: 2D Histogram Operations, Prev: Searching 2D histogram ranges, Up: Histograms -If the probability distribution is chosen as g = |f|/I(|f|) then it can -be shown that the variance V_g(f; N) vanishes, and the error in the -estimate will be zero. In practice it is not possible to sample from -the exact distribution g for an arbitrary function, so importance -sampling algorithms aim to produce efficient approximations to the -desired distribution. +23.18 2D Histogram Statistics +============================= - The VEGAS algorithm approximates the exact distribution by making a -number of passes over the integration region while histogramming the -function f. Each histogram is used to define a sampling distribution -for the next pass. Asymptotically this procedure converges to the -desired distribution. In order to avoid the number of histogram bins -growing like K^d the probability distribution is approximated by a -separable function: g(x_1, x_2, ...) = g_1(x_1) g_2(x_2) ... so that the -number of bins required is only Kd. This is equivalent to locating the -peaks of the function from the projections of the integrand onto the -coordinate axes. The efficiency of VEGAS depends on the validity of -this assumption. It is most efficient when the peaks of the integrand -are well-localized. If an integrand can be rewritten in a form which is -approximately separable this will increase the efficiency of integration -with VEGAS. + -- Function: double gsl_histogram2d_max_val (const gsl_histogram2d * H) + This function returns the maximum value contained in the histogram + bins. - VEGAS incorporates a number of additional features, and combines both -stratified sampling and importance sampling. The integration region is -divided into a number of "boxes", with each box getting a fixed number -of points (the goal is 2). Each box can then have a fractional number -of bins, but if the ratio of bins-per-box is less than two, Vegas -switches to a kind variance reduction (rather than importance sampling). + -- Function: void gsl_histogram2d_max_bin (const gsl_histogram2d * H, + size_t * I, size_t * J) + This function finds the indices of the bin containing the maximum + value in the histogram H and stores the result in (I,J). In the + case where several bins contain the same maximum value the first + bin found is returned. - -- Function: gsl_monte_vegas_state * gsl_monte_vegas_alloc (size_t DIM) - This function allocates and initializes a workspace for Monte Carlo - integration in DIM dimensions. The workspace is used to maintain - the state of the integration. + -- Function: double gsl_histogram2d_min_val (const gsl_histogram2d * H) + This function returns the minimum value contained in the histogram + bins. - -- Function: int gsl_monte_vegas_init (gsl_monte_vegas_state* S) - This function initializes a previously allocated integration state. - This allows an existing workspace to be reused for different - integrations. + -- Function: void gsl_histogram2d_min_bin (const gsl_histogram2d * H, + size_t * I, size_t * J) + This function finds the indices of the bin containing the minimum + value in the histogram H and stores the result in (I,J). In the + case where several bins contain the same maximum value the first + bin found is returned. - -- Function: int gsl_monte_vegas_integrate (gsl_monte_function * F, - double XL[], double XU[], size_t DIM, size_t CALLS, gsl_rng * - R, gsl_monte_vegas_state * S, double * RESULT, double * - ABSERR) - This routines uses the VEGAS Monte Carlo algorithm to integrate the - function F over the DIM-dimensional hypercubic region defined by - the lower and upper limits in the arrays XL and XU, each of size - DIM. The integration uses a fixed number of function calls CALLS, - and obtains random sampling points using the random number - generator R. A previously allocated workspace S must be supplied. - The result of the integration is returned in RESULT, with an - estimated absolute error ABSERR. The result and its error estimate - are based on a weighted average of independent samples. The - chi-squared per degree of freedom for the weighted average is - returned via the state struct component, S->CHISQ, and must be - consistent with 1 for the weighted average to be reliable. + -- Function: double gsl_histogram2d_xmean (const gsl_histogram2d * H) + This function returns the mean of the histogrammed x variable, + where the histogram is regarded as a probability distribution. + Negative bin values are ignored for the purposes of this + calculation. - -- Function: void gsl_monte_vegas_free (gsl_monte_vegas_state * S) - This function frees the memory associated with the integrator state - S. + -- Function: double gsl_histogram2d_ymean (const gsl_histogram2d * H) + This function returns the mean of the histogrammed y variable, + where the histogram is regarded as a probability distribution. + Negative bin values are ignored for the purposes of this + calculation. - The VEGAS algorithm computes a number of independent estimates of the -integral internally, according to the 'iterations' parameter described -below, and returns their weighted average. Random sampling of the -integrand can occasionally produce an estimate where the error is zero, -particularly if the function is constant in some regions. An estimate -with zero error causes the weighted average to break down and must be -handled separately. In the original Fortran implementations of VEGAS -the error estimate is made non-zero by substituting a small value -(typically '1e-30'). The implementation in GSL differs from this and -avoids the use of an arbitrary constant--it either assigns the value a -weight which is the average weight of the preceding estimates or -discards it according to the following procedure, + -- Function: double gsl_histogram2d_xsigma (const gsl_histogram2d * H) + This function returns the standard deviation of the histogrammed x + variable, where the histogram is regarded as a probability + distribution. Negative bin values are ignored for the purposes of + this calculation. -current estimate has zero error, weighted average has finite error + -- Function: double gsl_histogram2d_ysigma (const gsl_histogram2d * H) + This function returns the standard deviation of the histogrammed y + variable, where the histogram is regarded as a probability + distribution. Negative bin values are ignored for the purposes of + this calculation. - The current estimate is assigned a weight which is the average - weight of the preceding estimates. + -- Function: double gsl_histogram2d_cov (const gsl_histogram2d * H) + This function returns the covariance of the histogrammed x and y + variables, where the histogram is regarded as a probability + distribution. Negative bin values are ignored for the purposes of + this calculation. -current estimate has finite error, previous estimates had zero error + -- Function: double gsl_histogram2d_sum (const gsl_histogram2d * H) + This function returns the sum of all bin values. Negative bin + values are included in the sum. - The previous estimates are discarded and the weighted averaging - procedure begins with the current estimate. + +File: gsl-ref.info, Node: 2D Histogram Operations, Next: Reading and writing 2D histograms, Prev: 2D Histogram Statistics, Up: Histograms -current estimate has zero error, previous estimates had zero error +23.19 2D Histogram Operations +============================= - The estimates are averaged using the arithmetic mean, but no error - is computed. + -- Function: int gsl_histogram2d_equal_bins_p (const gsl_histogram2d * + H1, const gsl_histogram2d * H2) + This function returns 1 if all the individual bin ranges of the two + histograms are identical, and 0 otherwise. - The convergence of the algorithm can be tested using the overall -chi-squared value of the results, which is available from the following -function: + -- Function: int gsl_histogram2d_add (gsl_histogram2d * H1, const + gsl_histogram2d * H2) + This function adds the contents of the bins in histogram H2 to the + corresponding bins of histogram H1, i.e. h'_1(i,j) = h_1(i,j) + + h_2(i,j). The two histograms must have identical bin ranges. - -- Function: double gsl_monte_vegas_chisq (const gsl_monte_vegas_state - * S) - This function returns the chi-squared per degree of freedom for the - weighted estimate of the integral. The returned value should be - close to 1. A value which differs significantly from 1 indicates - that the values from different iterations are inconsistent. In - this case the weighted error will be under-estimated, and further - iterations of the algorithm are needed to obtain reliable results. + -- Function: int gsl_histogram2d_sub (gsl_histogram2d * H1, const + gsl_histogram2d * H2) + This function subtracts the contents of the bins in histogram H2 + from the corresponding bins of histogram H1, i.e. h'_1(i,j) = + h_1(i,j) - h_2(i,j). The two histograms must have identical bin + ranges. - -- Function: void gsl_monte_vegas_runval (const gsl_monte_vegas_state * - S, double * RESULT, double * SIGMA) - This function returns the raw (unaveraged) values of the integral - RESULT and its error SIGMA from the most recent iteration of the - algorithm. + -- Function: int gsl_histogram2d_mul (gsl_histogram2d * H1, const + gsl_histogram2d * H2) + This function multiplies the contents of the bins of histogram H1 + by the contents of the corresponding bins in histogram H2, i.e. + h'_1(i,j) = h_1(i,j) * h_2(i,j). The two histograms must have + identical bin ranges. - The VEGAS algorithm is highly configurable. Several parameters can -be changed using the following two functions. + -- Function: int gsl_histogram2d_div (gsl_histogram2d * H1, const + gsl_histogram2d * H2) + This function divides the contents of the bins of histogram H1 by + the contents of the corresponding bins in histogram H2, i.e. + h'_1(i,j) = h_1(i,j) / h_2(i,j). The two histograms must have + identical bin ranges. - -- Function: void gsl_monte_vegas_params_get (const - gsl_monte_vegas_state * S, gsl_monte_vegas_params * PARAMS) - This function copies the parameters of the integrator state into - the user-supplied PARAMS structure. + -- Function: int gsl_histogram2d_scale (gsl_histogram2d * H, double + SCALE) + This function multiplies the contents of the bins of histogram H by + the constant SCALE, i.e. h'_1(i,j) = h_1(i,j) scale. - -- Function: void gsl_monte_vegas_params_set (gsl_monte_vegas_state * - S, const gsl_monte_vegas_params * PARAMS) - This function sets the integrator parameters based on values - provided in the PARAMS structure. + -- Function: int gsl_histogram2d_shift (gsl_histogram2d * H, double + OFFSET) + This function shifts the contents of the bins of histogram H by the + constant OFFSET, i.e. h'_1(i,j) = h_1(i,j) + offset. - Typically the values of the parameters are first read using -'gsl_monte_vegas_params_get', the necessary changes are made to the -fields of the PARAMS structure, and the values are copied back into the -integrator state using 'gsl_monte_vegas_params_set'. The functions use -the 'gsl_monte_vegas_params' structure which contains the following -fields: + +File: gsl-ref.info, Node: Reading and writing 2D histograms, Next: Resampling from 2D histograms, Prev: 2D Histogram Operations, Up: Histograms - -- Variable: double alpha - The parameter 'alpha' controls the stiffness of the rebinning - algorithm. It is typically set between one and two. A value of - zero prevents rebinning of the grid. The default value is 1.5. +23.20 Reading and writing 2D histograms +======================================= - -- Variable: size_t iterations - The number of iterations to perform for each call to the routine. - The default value is 5 iterations. +The library provides functions for reading and writing two dimensional +histograms to a file as binary data or formatted text. - -- Variable: int stage - Setting this determines the "stage" of the calculation. Normally, - 'stage = 0' which begins with a new uniform grid and empty weighted - average. Calling VEGAS with 'stage = 1' retains the grid from the - previous run but discards the weighted average, so that one can - "tune" the grid using a relatively small number of points and then - do a large run with 'stage = 1' on the optimized grid. Setting - 'stage = 2' keeps the grid and the weighted average from the - previous run, but may increase (or decrease) the number of - histogram bins in the grid depending on the number of calls - available. Choosing 'stage = 3' enters at the main loop, so that - nothing is changed, and is equivalent to performing additional - iterations in a previous call. + -- Function: int gsl_histogram2d_fwrite (FILE * STREAM, const + gsl_histogram2d * H) + This function writes the ranges and bins of the histogram H to the + stream STREAM in binary format. The return value is 0 for success + and 'GSL_EFAILED' if there was a problem writing to the file. + Since the data is written in the native binary format it may not be + portable between different architectures. - -- Variable: int mode - The possible choices are 'GSL_VEGAS_MODE_IMPORTANCE', - 'GSL_VEGAS_MODE_STRATIFIED', 'GSL_VEGAS_MODE_IMPORTANCE_ONLY'. - This determines whether VEGAS will use importance sampling or - stratified sampling, or whether it can pick on its own. In low - dimensions VEGAS uses strict stratified sampling (more precisely, - stratified sampling is chosen if there are fewer than 2 bins per - box). + -- Function: int gsl_histogram2d_fread (FILE * STREAM, gsl_histogram2d + * H) + This function reads into the histogram H from the stream STREAM in + binary format. The histogram H must be preallocated with the + correct size since the function uses the number of x and y bins in + H to determine how many bytes to read. The return value is 0 for + success and 'GSL_EFAILED' if there was a problem reading from the + file. The data is assumed to have been written in the native + binary format on the same architecture. - -- Variable: int verbose - -- Variable: FILE * ostream - These parameters set the level of information printed by VEGAS. - All information is written to the stream OSTREAM. The default - setting of VERBOSE is '-1', which turns off all output. A VERBOSE - value of '0' prints summary information about the weighted average - and final result, while a value of '1' also displays the grid - coordinates. A value of '2' prints information from the rebinning - procedure for each iteration. + -- Function: int gsl_histogram2d_fprintf (FILE * STREAM, const + gsl_histogram2d * H, const char * RANGE_FORMAT, const char * + BIN_FORMAT) + This function writes the ranges and bins of the histogram H + line-by-line to the stream STREAM using the format specifiers + RANGE_FORMAT and BIN_FORMAT. These should be one of the '%g', '%e' + or '%f' formats for floating point numbers. The function returns 0 + for success and 'GSL_EFAILED' if there was a problem writing to the + file. The histogram output is formatted in five columns, and the + columns are separated by spaces, like this, - The above fields and the CHISQ value can also be accessed directly in -the 'gsl_monte_vegas_state' but such use is deprecated. + xrange[0] xrange[1] yrange[0] yrange[1] bin(0,0) + xrange[0] xrange[1] yrange[1] yrange[2] bin(0,1) + xrange[0] xrange[1] yrange[2] yrange[3] bin(0,2) + .... + xrange[0] xrange[1] yrange[ny-1] yrange[ny] bin(0,ny-1) - -File: gsl-ref.info, Node: Monte Carlo Examples, Next: Monte Carlo Integration References and Further Reading, Prev: VEGAS, Up: Monte Carlo Integration + xrange[1] xrange[2] yrange[0] yrange[1] bin(1,0) + xrange[1] xrange[2] yrange[1] yrange[2] bin(1,1) + xrange[1] xrange[2] yrange[1] yrange[2] bin(1,2) + .... + xrange[1] xrange[2] yrange[ny-1] yrange[ny] bin(1,ny-1) -24.5 Examples -============= + .... -The example program below uses the Monte Carlo routines to estimate the -value of the following 3-dimensional integral from the theory of random -walks, + xrange[nx-1] xrange[nx] yrange[0] yrange[1] bin(nx-1,0) + xrange[nx-1] xrange[nx] yrange[1] yrange[2] bin(nx-1,1) + xrange[nx-1] xrange[nx] yrange[1] yrange[2] bin(nx-1,2) + .... + xrange[nx-1] xrange[nx] yrange[ny-1] yrange[ny] bin(nx-1,ny-1) - I = \int_{-pi}^{+pi} {dk_x/(2 pi)} - \int_{-pi}^{+pi} {dk_y/(2 pi)} - \int_{-pi}^{+pi} {dk_z/(2 pi)} - 1 / (1 - cos(k_x)cos(k_y)cos(k_z)). + Each line contains the lower and upper limits of the bin and the + contents of the bin. Since the upper limits of the each bin are + the lower limits of the neighboring bins there is duplication of + these values but this allows the histogram to be manipulated with + line-oriented tools. -The analytic value of this integral can be shown to be I = -\Gamma(1/4)^4/(4 \pi^3) = 1.393203929685676859.... The integral gives -the mean time spent at the origin by a random walk on a body-centered -cubic lattice in three dimensions. + -- Function: int gsl_histogram2d_fscanf (FILE * STREAM, gsl_histogram2d + * H) + This function reads formatted data from the stream STREAM into the + histogram H. The data is assumed to be in the five-column format + used by 'gsl_histogram2d_fprintf'. The histogram H must be + preallocated with the correct lengths since the function uses the + sizes of H to determine how many numbers to read. The function + returns 0 for success and 'GSL_EFAILED' if there was a problem + reading from the file. - For simplicity we will compute the integral over the region (0,0,0) -to (\pi,\pi,\pi) and multiply by 8 to obtain the full result. The -integral is slowly varying in the middle of the region but has -integrable singularities at the corners (0,0,0), (0,\pi,\pi), -(\pi,0,\pi) and (\pi,\pi,0). The Monte Carlo routines only select -points which are strictly within the integration region and so no -special measures are needed to avoid these singularities. + +File: gsl-ref.info, Node: Resampling from 2D histograms, Next: Example programs for 2D histograms, Prev: Reading and writing 2D histograms, Up: Histograms - #include - #include - #include - #include - #include - #include +23.21 Resampling from 2D histograms +=================================== - /* Computation of the integral, +As in the one-dimensional case, a two-dimensional histogram made by +counting events can be regarded as a measurement of a probability +distribution. Allowing for statistical error, the height of each bin +represents the probability of an event where (x,y) falls in the range of +that bin. For a two-dimensional histogram the probability distribution +takes the form p(x,y) dx dy where, - I = int (dx dy dz)/(2pi)^3 1/(1-cos(x)cos(y)cos(z)) + p(x,y) = n_{ij}/ (N A_{ij}) - over (-pi,-pi,-pi) to (+pi, +pi, +pi). The exact answer - is Gamma(1/4)^4/(4 pi^3). This example is taken from - C.Itzykson, J.M.Drouffe, "Statistical Field Theory - - Volume 1", Section 1.1, p21, which cites the original - paper M.L.Glasser, I.J.Zucker, Proc.Natl.Acad.Sci.USA 74 - 1800 (1977) */ +In this equation n_{ij} is the number of events in the bin which +contains (x,y), A_{ij} is the area of the bin and N is the total number +of events. The distribution of events within each bin is assumed to be +uniform. - /* For simplicity we compute the integral over the region - (0,0,0) -> (pi,pi,pi) and multiply by 8 */ + -- Data Type: gsl_histogram2d_pdf + 'size_t nx, ny' + This is the number of histogram bins used to approximate the + probability distribution function in the x and y directions. + 'double * xrange' + The ranges of the bins in the x-direction are stored in an + array of NX + 1 elements pointed to by XRANGE. + 'double * yrange' + The ranges of the bins in the y-direction are stored in an + array of NY + 1 pointed to by YRANGE. + 'double * sum' + The cumulative probability for the bins is stored in an array + of NX*NY elements pointed to by SUM. - double exact = 1.3932039296856768591842462603255; +The following functions allow you to create a 'gsl_histogram2d_pdf' +struct which represents a two dimensional probability distribution and +generate random samples from it. - double - g (double *k, size_t dim, void *params) - { - double A = 1.0 / (M_PI * M_PI * M_PI); - return A / (1.0 - cos (k[0]) * cos (k[1]) * cos (k[2])); - } + -- Function: gsl_histogram2d_pdf * gsl_histogram2d_pdf_alloc (size_t + NX, size_t NY) + This function allocates memory for a two-dimensional probability + distribution of size NX-by-NY and returns a pointer to a newly + initialized 'gsl_histogram2d_pdf' struct. If insufficient memory + is available a null pointer is returned and the error handler is + invoked with an error code of 'GSL_ENOMEM'. - void - display_results (char *title, double result, double error) - { - printf ("%s ==================\n", title); - printf ("result = % .6f\n", result); - printf ("sigma = % .6f\n", error); - printf ("exact = % .6f\n", exact); - printf ("error = % .6f = %.2g sigma\n", result - exact, - fabs (result - exact) / error); - } + -- Function: int gsl_histogram2d_pdf_init (gsl_histogram2d_pdf * P, + const gsl_histogram2d * H) + This function initializes the two-dimensional probability + distribution calculated P from the histogram H. If any of the bins + of H are negative then the error handler is invoked with an error + code of 'GSL_EDOM' because a probability distribution cannot + contain negative values. - int - main (void) - { - double res, err; + -- Function: void gsl_histogram2d_pdf_free (gsl_histogram2d_pdf * P) + This function frees the two-dimensional probability distribution + function P and all of the memory associated with it. - double xl[3] = { 0, 0, 0 }; - double xu[3] = { M_PI, M_PI, M_PI }; + -- Function: int gsl_histogram2d_pdf_sample (const gsl_histogram2d_pdf + * P, double R1, double R2, double * X, double * Y) + This function uses two uniform random numbers between zero and one, + R1 and R2, to compute a single random sample from the + two-dimensional probability distribution P. - const gsl_rng_type *T; - gsl_rng *r; + +File: gsl-ref.info, Node: Example programs for 2D histograms, Prev: Resampling from 2D histograms, Up: Histograms - gsl_monte_function G = { &g, 3, 0 }; +23.22 Example programs for 2D histograms +======================================== - size_t calls = 500000; +This program demonstrates two features of two-dimensional histograms. +First a 10-by-10 two-dimensional histogram is created with x and y +running from 0 to 1. Then a few sample points are added to the +histogram, at (0.3,0.3) with a height of 1, at (0.8,0.1) with a height +of 5 and at (0.7,0.9) with a height of 0.5. This histogram with three +events is used to generate a random sample of 1000 simulated events, +which are printed out. - gsl_rng_env_setup (); + #include + #include + #include - T = gsl_rng_default; - r = gsl_rng_alloc (T); + int + main (void) + { + const gsl_rng_type * T; + gsl_rng * r; - { - gsl_monte_plain_state *s = gsl_monte_plain_alloc (3); - gsl_monte_plain_integrate (&G, xl, xu, 3, calls, r, s, - &res, &err); - gsl_monte_plain_free (s); + gsl_histogram2d * h = gsl_histogram2d_alloc (10, 10); - display_results ("plain", res, err); - } + gsl_histogram2d_set_ranges_uniform (h, + 0.0, 1.0, + 0.0, 1.0); - { - gsl_monte_miser_state *s = gsl_monte_miser_alloc (3); - gsl_monte_miser_integrate (&G, xl, xu, 3, calls, r, s, - &res, &err); - gsl_monte_miser_free (s); + gsl_histogram2d_accumulate (h, 0.3, 0.3, 1); + gsl_histogram2d_accumulate (h, 0.8, 0.1, 5); + gsl_histogram2d_accumulate (h, 0.7, 0.9, 0.5); - display_results ("miser", res, err); - } + gsl_rng_env_setup (); + + T = gsl_rng_default; + r = gsl_rng_alloc (T); { - gsl_monte_vegas_state *s = gsl_monte_vegas_alloc (3); + int i; + gsl_histogram2d_pdf * p + = gsl_histogram2d_pdf_alloc (h->nx, h->ny); - gsl_monte_vegas_integrate (&G, xl, xu, 3, 10000, r, s, - &res, &err); - display_results ("vegas warm-up", res, err); + gsl_histogram2d_pdf_init (p, h); - printf ("converging...\n"); + for (i = 0; i < 1000; i++) { + double x, y; + double u = gsl_rng_uniform (r); + double v = gsl_rng_uniform (r); - do - { - gsl_monte_vegas_integrate (&G, xl, xu, 3, calls/5, r, s, - &res, &err); - printf ("result = % .6f sigma = % .6f " - "chisq/dof = %.1f\n", res, err, gsl_monte_vegas_chisq (s)); - } - while (fabs (gsl_monte_vegas_chisq (s) - 1.0) > 0.5); + gsl_histogram2d_pdf_sample (p, u, v, &x, &y); - display_results ("vegas final", res, err); + printf ("%g %g\n", x, y); + } - gsl_monte_vegas_free (s); + gsl_histogram2d_pdf_free (p); } + gsl_histogram2d_free (h); gsl_rng_free (r); return 0; } -With 500,000 function calls the plain Monte Carlo algorithm achieves a -fractional error of 1%. The estimated error 'sigma' is roughly -consistent with the actual error-the computed result differs from the -true result by about 1.4 standard deviations, + +File: gsl-ref.info, Node: N-tuples, Next: Monte Carlo Integration, Prev: Histograms, Up: Top - plain ================== - result = 1.412209 - sigma = 0.013436 - exact = 1.393204 - error = 0.019005 = 1.4 sigma +24 N-tuples +*********** -The MISER algorithm reduces the error by a factor of four, and also -correctly estimates the error, +This chapter describes functions for creating and manipulating +"ntuples", sets of values associated with events. The ntuples are +stored in files. Their values can be extracted in any combination and +"booked" in a histogram using a selection function. - miser ================== - result = 1.391322 - sigma = 0.003461 - exact = 1.393204 - error = -0.001882 = 0.54 sigma + The values to be stored are held in a user-defined data structure, +and an ntuple is created associating this data structure with a file. +The values are then written to the file (normally inside a loop) using +the ntuple functions described below. -In the case of the VEGAS algorithm the program uses an initial warm-up -run of 10,000 function calls to prepare, or "warm up", the grid. This -is followed by a main run with five iterations of 100,000 function -calls. The chi-squared per degree of freedom for the five iterations -are checked for consistency with 1, and the run is repeated if the -results have not converged. In this case the estimates are consistent -on the first pass. + A histogram can be created from ntuple data by providing a selection +function and a value function. The selection function specifies whether +an event should be included in the subset to be analyzed or not. The +value function computes the entry to be added to the histogram for each +event. - vegas warm-up ================== - result = 1.392673 - sigma = 0.003410 - exact = 1.393204 - error = -0.000531 = 0.16 sigma - converging... - result = 1.393281 sigma = 0.000362 chisq/dof = 1.5 - vegas final ================== - result = 1.393281 - sigma = 0.000362 - exact = 1.393204 - error = 0.000077 = 0.21 sigma + All the ntuple functions are defined in the header file +'gsl_ntuple.h' -If the value of 'chisq' had differed significantly from 1 it would -indicate inconsistent results, with a correspondingly underestimated -error. The final estimate from VEGAS (using a similar number of -function calls) is significantly more accurate than the other two -algorithms. +* Menu: + +* The ntuple struct:: +* Creating ntuples:: +* Opening an existing ntuple file:: +* Writing ntuples:: +* Reading ntuples :: +* Closing an ntuple file:: +* Histogramming ntuple values:: +* Example ntuple programs:: +* Ntuple References and Further Reading::  -File: gsl-ref.info, Node: Monte Carlo Integration References and Further Reading, Prev: Monte Carlo Examples, Up: Monte Carlo Integration +File: gsl-ref.info, Node: The ntuple struct, Next: Creating ntuples, Up: N-tuples -24.6 References and Further Reading -=================================== +24.1 The ntuple struct +====================== -The MISER algorithm is described in the following article by Press and -Farrar, +Ntuples are manipulated using the 'gsl_ntuple' struct. This struct +contains information on the file where the ntuple data is stored, a +pointer to the current ntuple data row and the size of the user-defined +ntuple data struct. - W.H. Press, G.R. Farrar, 'Recursive Stratified Sampling for - Multidimensional Monte Carlo Integration', Computers in Physics, v4 - (1990), pp190-195. + typedef struct { + FILE * file; + void * ntuple_data; + size_t size; + } gsl_ntuple; -The VEGAS algorithm is described in the following papers, + +File: gsl-ref.info, Node: Creating ntuples, Next: Opening an existing ntuple file, Prev: The ntuple struct, Up: N-tuples - G.P. Lepage, 'A New Algorithm for Adaptive Multidimensional - Integration', Journal of Computational Physics 27, 192-203, (1978) +24.2 Creating ntuples +===================== - G.P. Lepage, 'VEGAS: An Adaptive Multi-dimensional Integration - Program', Cornell preprint CLNS 80-447, March 1980 + -- Function: gsl_ntuple * gsl_ntuple_create (char * FILENAME, void * + NTUPLE_DATA, size_t SIZE) + This function creates a new write-only ntuple file FILENAME for + ntuples of size SIZE and returns a pointer to the newly created + ntuple struct. Any existing file with the same name is truncated + to zero length and overwritten. A pointer to memory for the + current ntuple row NTUPLE_DATA must be supplied--this is used to + copy ntuples in and out of the file.  -File: gsl-ref.info, Node: Simulated Annealing, Next: Ordinary Differential Equations, Prev: Monte Carlo Integration, Up: Top +File: gsl-ref.info, Node: Opening an existing ntuple file, Next: Writing ntuples, Prev: Creating ntuples, Up: N-tuples -25 Simulated Annealing -********************** +24.3 Opening an existing ntuple file +==================================== -Stochastic search techniques are used when the structure of a space is -not well understood or is not smooth, so that techniques like Newton's -method (which requires calculating Jacobian derivative matrices) cannot -be used. In particular, these techniques are frequently used to solve -combinatorial optimization problems, such as the traveling salesman -problem. + -- Function: gsl_ntuple * gsl_ntuple_open (char * FILENAME, void * + NTUPLE_DATA, size_t SIZE) + This function opens an existing ntuple file FILENAME for reading + and returns a pointer to a corresponding ntuple struct. The + ntuples in the file must have size SIZE. A pointer to memory for + the current ntuple row NTUPLE_DATA must be supplied--this is used + to copy ntuples in and out of the file. - The goal is to find a point in the space at which a real valued -"energy function" (or "cost function") is minimized. Simulated -annealing is a minimization technique which has given good results in -avoiding local minima; it is based on the idea of taking a random walk -through the space at successively lower temperatures, where the -probability of taking a step is given by a Boltzmann distribution. + +File: gsl-ref.info, Node: Writing ntuples, Next: Reading ntuples, Prev: Opening an existing ntuple file, Up: N-tuples - The functions described in this chapter are declared in the header -file 'gsl_siman.h'. +24.4 Writing ntuples +==================== -* Menu: + -- Function: int gsl_ntuple_write (gsl_ntuple * NTUPLE) + This function writes the current ntuple NTUPLE->NTUPLE_DATA of size + NTUPLE->SIZE to the corresponding file. -* Simulated Annealing algorithm:: -* Simulated Annealing functions:: -* Examples with Simulated Annealing:: -* Simulated Annealing References and Further Reading:: + -- Function: int gsl_ntuple_bookdata (gsl_ntuple * NTUPLE) + This function is a synonym for 'gsl_ntuple_write'.  -File: gsl-ref.info, Node: Simulated Annealing algorithm, Next: Simulated Annealing functions, Up: Simulated Annealing - -25.1 Simulated Annealing algorithm -================================== - -The simulated annealing algorithm takes random walks through the problem -space, looking for points with low energies; in these random walks, the -probability of taking a step is determined by the Boltzmann -distribution, +File: gsl-ref.info, Node: Reading ntuples, Next: Closing an ntuple file, Prev: Writing ntuples, Up: N-tuples - p = e^{-(E_{i+1} - E_i)/(kT)} +24.5 Reading ntuples +==================== -if E_{i+1} > E_i, and p = 1 when E_{i+1} <= E_i. + -- Function: int gsl_ntuple_read (gsl_ntuple * NTUPLE) + This function reads the current row of the ntuple file for NTUPLE + and stores the values in NTUPLE->DATA. - In other words, a step will occur if the new energy is lower. If the -new energy is higher, the transition can still occur, and its likelihood -is proportional to the temperature T and inversely proportional to the -energy difference E_{i+1} - E_i. + +File: gsl-ref.info, Node: Closing an ntuple file, Next: Histogramming ntuple values, Prev: Reading ntuples, Up: N-tuples - The temperature T is initially set to a high value, and a random walk -is carried out at that temperature. Then the temperature is lowered -very slightly according to a "cooling schedule", for example: T -> -T/mu_T where \mu_T is slightly greater than 1. +24.6 Closing an ntuple file +=========================== - The slight probability of taking a step that gives higher energy is -what allows simulated annealing to frequently get out of local minima. + -- Function: int gsl_ntuple_close (gsl_ntuple * NTUPLE) + This function closes the ntuple file NTUPLE and frees its + associated allocated memory.  -File: gsl-ref.info, Node: Simulated Annealing functions, Next: Examples with Simulated Annealing, Prev: Simulated Annealing algorithm, Up: Simulated Annealing - -25.2 Simulated Annealing functions -================================== +File: gsl-ref.info, Node: Histogramming ntuple values, Next: Example ntuple programs, Prev: Closing an ntuple file, Up: N-tuples - -- Function: void gsl_siman_solve (const gsl_rng * R, void * X0_P, - gsl_siman_Efunc_t EF, gsl_siman_step_t TAKE_STEP, - gsl_siman_metric_t DISTANCE, gsl_siman_print_t PRINT_POSITION, - gsl_siman_copy_t COPYFUNC, gsl_siman_copy_construct_t - COPY_CONSTRUCTOR, gsl_siman_destroy_t DESTRUCTOR, size_t - ELEMENT_SIZE, gsl_siman_params_t PARAMS) +24.7 Histogramming ntuple values +================================ - This function performs a simulated annealing search through a given - space. The space is specified by providing the functions EF and - DISTANCE. The simulated annealing steps are generated using the - random number generator R and the function TAKE_STEP. +Once an ntuple has been created its contents can be histogrammed in +various ways using the function 'gsl_ntuple_project'. Two user-defined +functions must be provided, a function to select events and a function +to compute scalar values. The selection function and the value function +both accept the ntuple row as a first argument and other parameters as a +second argument. - The starting configuration of the system should be given by X0_P. - The routine offers two modes for updating configurations, a - fixed-size mode and a variable-size mode. In the fixed-size mode - the configuration is stored as a single block of memory of size - ELEMENT_SIZE. Copies of this configuration are created, copied and - destroyed internally using the standard library functions 'malloc', - 'memcpy' and 'free'. The function pointers COPYFUNC, - COPY_CONSTRUCTOR and DESTRUCTOR should be null pointers in - fixed-size mode. In the variable-size mode the functions COPYFUNC, - COPY_CONSTRUCTOR and DESTRUCTOR are used to create, copy and - destroy configurations internally. The variable ELEMENT_SIZE - should be zero in the variable-size mode. + The "selection function" determines which ntuple rows are selected +for histogramming. It is defined by the following struct, - The PARAMS structure (described below) controls the run by - providing the temperature schedule and other tunable parameters to - the algorithm. + typedef struct { + int (* function) (void * ntuple_data, void * params); + void * params; + } gsl_ntuple_select_fn; - On exit the best result achieved during the search is placed in - '*X0_P'. If the annealing process has been successful this should - be a good approximation to the optimal point in the space. +The struct component FUNCTION should return a non-zero value for each +ntuple row that is to be included in the histogram. - If the function pointer PRINT_POSITION is not null, a debugging log - will be printed to 'stdout' with the following columns: + The "value function" computes scalar values for those ntuple rows +selected by the selection function, - #-iter #-evals temperature position energy best_energy + typedef struct { + double (* function) (void * ntuple_data, void * params); + void * params; + } gsl_ntuple_value_fn; - and the output of the function PRINT_POSITION itself. If - PRINT_POSITION is null then no information is printed. +In this case the struct component FUNCTION should return the value to be +added to the histogram for the ntuple row. -The simulated annealing routines require several user-specified -functions to define the configuration space and energy function. The -prototypes for these functions are given below. + -- Function: int gsl_ntuple_project (gsl_histogram * H, gsl_ntuple * + NTUPLE, gsl_ntuple_value_fn * VALUE_FUNC, gsl_ntuple_select_fn + * SELECT_FUNC) + This function updates the histogram H from the ntuple NTUPLE using + the functions VALUE_FUNC and SELECT_FUNC. For each ntuple row + where the selection function SELECT_FUNC is non-zero the + corresponding value of that row is computed using the function + VALUE_FUNC and added to the histogram. Those ntuple rows where + SELECT_FUNC returns zero are ignored. New entries are added to the + histogram, so subsequent calls can be used to accumulate further + data in the same histogram. - -- Data Type: gsl_siman_Efunc_t - This function type should return the energy of a configuration XP. + +File: gsl-ref.info, Node: Example ntuple programs, Next: Ntuple References and Further Reading, Prev: Histogramming ntuple values, Up: N-tuples - double (*gsl_siman_Efunc_t) (void *xp) +24.8 Examples +============= - -- Data Type: gsl_siman_step_t - This function type should modify the configuration XP using a - random step taken from the generator R, up to a maximum distance of - STEP_SIZE. +The following example programs demonstrate the use of ntuples in +managing a large dataset. The first program creates a set of 10,000 +simulated "events", each with 3 associated values (x,y,z). These are +generated from a Gaussian distribution with unit variance, for +demonstration purposes, and written to the ntuple file 'test.dat'. - void (*gsl_siman_step_t) (const gsl_rng *r, void *xp, - double step_size) + #include + #include + #include - -- Data Type: gsl_siman_metric_t - This function type should return the distance between two - configurations XP and YP. + struct data + { + double x; + double y; + double z; + }; - double (*gsl_siman_metric_t) (void *xp, void *yp) + int + main (void) + { + const gsl_rng_type * T; + gsl_rng * r; - -- Data Type: gsl_siman_print_t - This function type should print the contents of the configuration - XP. + struct data ntuple_row; + int i; - void (*gsl_siman_print_t) (void *xp) + gsl_ntuple *ntuple + = gsl_ntuple_create ("test.dat", &ntuple_row, + sizeof (ntuple_row)); - -- Data Type: gsl_siman_copy_t - This function type should copy the configuration SOURCE into DEST. + gsl_rng_env_setup (); - void (*gsl_siman_copy_t) (void *source, void *dest) + T = gsl_rng_default; + r = gsl_rng_alloc (T); - -- Data Type: gsl_siman_copy_construct_t - This function type should create a new copy of the configuration - XP. + for (i = 0; i < 10000; i++) + { + ntuple_row.x = gsl_ran_ugaussian (r); + ntuple_row.y = gsl_ran_ugaussian (r); + ntuple_row.z = gsl_ran_ugaussian (r); - void * (*gsl_siman_copy_construct_t) (void *xp) + gsl_ntuple_write (ntuple); + } - -- Data Type: gsl_siman_destroy_t - This function type should destroy the configuration XP, freeing its - memory. + gsl_ntuple_close (ntuple); + gsl_rng_free (r); - void (*gsl_siman_destroy_t) (void *xp) + return 0; + } - -- Data Type: gsl_siman_params_t - These are the parameters that control a run of 'gsl_siman_solve'. - This structure contains all the information needed to control the - search, beyond the energy function, the step function and the - initial guess. +The next program analyses the ntuple data in the file 'test.dat'. The +analysis procedure is to compute the squared-magnitude of each event, +E^2=x^2+y^2+z^2, and select only those which exceed a lower limit of +1.5. The selected events are then histogrammed using their E^2 values. - 'int n_tries' - The number of points to try for each step. + #include + #include + #include - 'int iters_fixed_T' - The number of iterations at each temperature. + struct data + { + double x; + double y; + double z; + }; - 'double step_size' - The maximum step size in the random walk. + int sel_func (void *ntuple_data, void *params); + double val_func (void *ntuple_data, void *params); - 'double k, t_initial, mu_t, t_min' - The parameters of the Boltzmann distribution and cooling - schedule. + int + main (void) + { + struct data ntuple_row; - -File: gsl-ref.info, Node: Examples with Simulated Annealing, Next: Simulated Annealing References and Further Reading, Prev: Simulated Annealing functions, Up: Simulated Annealing + gsl_ntuple *ntuple + = gsl_ntuple_open ("test.dat", &ntuple_row, + sizeof (ntuple_row)); + double lower = 1.5; -25.3 Examples -============= + gsl_ntuple_select_fn S; + gsl_ntuple_value_fn V; -The simulated annealing package is clumsy, and it has to be because it -is written in C, for C callers, and tries to be polymorphic at the same -time. But here we provide some examples which can be pasted into your -application with little change and should make things easier. + gsl_histogram *h = gsl_histogram_alloc (100); + gsl_histogram_set_ranges_uniform(h, 0.0, 10.0); -* Menu: + S.function = &sel_func; + S.params = &lower; -* Trivial example:: -* Traveling Salesman Problem:: + V.function = &val_func; + V.params = 0; - -File: gsl-ref.info, Node: Trivial example, Next: Traveling Salesman Problem, Up: Examples with Simulated Annealing + gsl_ntuple_project (h, ntuple, &V, &S); + gsl_histogram_fprintf (stdout, h, "%f", "%f"); + gsl_histogram_free (h); + gsl_ntuple_close (ntuple); -25.3.1 Trivial example ----------------------- + return 0; + } -The first example, in one dimensional Cartesian space, sets up an energy -function which is a damped sine wave; this has many local minima, but -only one global minimum, somewhere between 1.0 and 1.5. The initial -guess given is 15.5, which is several local minima away from the global -minimum. + int + sel_func (void *ntuple_data, void *params) + { + struct data * data = (struct data *) ntuple_data; + double x, y, z, E2, scale; + scale = *(double *) params; - #include - #include - #include - #include + x = data->x; + y = data->y; + z = data->z; - /* set up parameters for this simulated annealing run */ + E2 = x * x + y * y + z * z; - /* how many points do we try before stepping */ - #define N_TRIES 200 + return E2 > scale; + } - /* how many iterations for each T? */ - #define ITERS_FIXED_T 1000 + double + val_func (void *ntuple_data, void *params) + { + (void)(params); /* avoid unused parameter warning */ + struct data * data = (struct data *) ntuple_data; + double x, y, z; - /* max step size in random walk */ - #define STEP_SIZE 1.0 + x = data->x; + y = data->y; + z = data->z; - /* Boltzmann constant */ - #define K 1.0 + return x * x + y * y + z * z; + } - /* initial temperature */ - #define T_INITIAL 0.008 + The following plot shows the distribution of the selected events. +Note the cut-off at the lower bound. - /* damping factor for temperature */ - #define MU_T 1.003 - #define T_MIN 2.0e-6 + +File: gsl-ref.info, Node: Ntuple References and Further Reading, Prev: Example ntuple programs, Up: N-tuples - gsl_siman_params_t params - = {N_TRIES, ITERS_FIXED_T, STEP_SIZE, - K, T_INITIAL, MU_T, T_MIN}; +24.9 References and Further Reading +=================================== - /* now some functions to test in one dimension */ - double E1(void *xp) - { - double x = * ((double *) xp); +Further information on the use of ntuples can be found in the +documentation for the CERN packages PAW and HBOOK (available online). - return exp(-pow((x-1.0),2.0))*sin(8*x); - } + +File: gsl-ref.info, Node: Monte Carlo Integration, Next: Simulated Annealing, Prev: N-tuples, Up: Top - double M1(void *xp, void *yp) - { - double x = *((double *) xp); - double y = *((double *) yp); +25 Monte Carlo Integration +************************** - return fabs(x - y); - } +This chapter describes routines for multidimensional Monte Carlo +integration. These include the traditional Monte Carlo method and +adaptive algorithms such as VEGAS and MISER which use importance +sampling and stratified sampling techniques. Each algorithm computes an +estimate of a multidimensional definite integral of the form, - void S1(const gsl_rng * r, void *xp, double step_size) - { - double old_x = *((double *) xp); - double new_x; + I = \int_xl^xu dx \int_yl^yu dy ... f(x, y, ...) - double u = gsl_rng_uniform(r); - new_x = u * 2 * step_size - step_size + old_x; +over a hypercubic region ((x_l,x_u), (y_l,y_u), ...) using a fixed +number of function calls. The routines also provide a statistical +estimate of the error on the result. This error estimate should be +taken as a guide rather than as a strict error bound--random sampling of +the region may not uncover all the important features of the function, +resulting in an underestimate of the error. - memcpy(xp, &new_x, sizeof(new_x)); - } + The functions are defined in separate header files for each routine, +'gsl_monte_plain.h', 'gsl_monte_miser.h' and 'gsl_monte_vegas.h'. - void P1(void *xp) - { - printf ("%12g", *((double *) xp)); - } +* Menu: - int - main(int argc, char *argv[]) - { - const gsl_rng_type * T; - gsl_rng * r; +* Monte Carlo Interface:: +* PLAIN Monte Carlo:: +* MISER:: +* VEGAS:: +* Monte Carlo Examples:: +* Monte Carlo Integration References and Further Reading:: - double x_initial = 15.5; + +File: gsl-ref.info, Node: Monte Carlo Interface, Next: PLAIN Monte Carlo, Up: Monte Carlo Integration - gsl_rng_env_setup(); +25.1 Interface +============== - T = gsl_rng_default; - r = gsl_rng_alloc(T); +All of the Monte Carlo integration routines use the same general form of +interface. There is an allocator to allocate memory for control +variables and workspace, a routine to initialize those control +variables, the integrator itself, and a function to free the space when +done. - gsl_siman_solve(r, &x_initial, E1, S1, M1, P1, - NULL, NULL, NULL, - sizeof(double), params); + Each integration function requires a random number generator to be +supplied, and returns an estimate of the integral and its standard +deviation. The accuracy of the result is determined by the number of +function calls specified by the user. If a known level of accuracy is +required this can be achieved by calling the integrator several times +and averaging the individual results until the desired accuracy is +obtained. - gsl_rng_free (r); - return 0; - } + Random sample points used within the Monte Carlo routines are always +chosen strictly within the integration region, so that endpoint +singularities are automatically avoided. - Here are a couple of plots that are generated by running 'siman_test' -in the following way: + The function to be integrated has its own datatype, defined in the +header file 'gsl_monte.h'. - $ ./siman_test | awk '!/^#/ {print $1, $4}' - | graph -y 1.34 1.4 -W0 -X generation -Y position - | plot -Tps > siman-test.eps - $ ./siman_test | awk '!/^#/ {print $1, $5}' - | graph -y -0.88 -0.83 -W0 -X generation -Y energy - | plot -Tps > siman-energy.eps + -- Data Type: gsl_monte_function - -File: gsl-ref.info, Node: Traveling Salesman Problem, Prev: Trivial example, Up: Examples with Simulated Annealing + This data type defines a general function with parameters for Monte + Carlo integration. -25.3.2 Traveling Salesman Problem ---------------------------------- + 'double (* f) (double * X, size_t DIM, void * PARAMS)' + this function should return the value f(x,params) for the + argument X and parameters PARAMS, where X is an array of size + DIM giving the coordinates of the point where the function is + to be evaluated. -The TSP ("Traveling Salesman Problem") is the classic combinatorial -optimization problem. I have provided a very simple version of it, -based on the coordinates of twelve cities in the southwestern United -States. This should maybe be called the "Flying Salesman Problem", -since I am using the great-circle distance between cities, rather than -the driving distance. Also: I assume the earth is a sphere, so I don't -use geoid distances. + 'size_t dim' + the number of dimensions for X. - The 'gsl_siman_solve' routine finds a route which is 3490.62 -Kilometers long; this is confirmed by an exhaustive search of all -possible routes with the same initial city. + 'void * params' + a pointer to the parameters of the function. - The full code can be found in 'siman/siman_tsp.c', but I include here -some plots generated in the following way: +Here is an example for a quadratic function in two dimensions, - $ ./siman_tsp > tsp.output - $ grep -v "^#" tsp.output - | awk '{print $1, $NF}' - | graph -y 3300 6500 -W0 -X generation -Y distance - -L "TSP - 12 southwest cities" - | plot -Tps > 12-cities.eps - $ grep initial_city_coord tsp.output - | awk '{print $2, $3}' - | graph -X "longitude (- means west)" -Y "latitude" - -L "TSP - initial-order" -f 0.03 -S 1 0.1 - | plot -Tps > initial-route.eps - $ grep final_city_coord tsp.output - | awk '{print $2, $3}' - | graph -X "longitude (- means west)" -Y "latitude" - -L "TSP - final-order" -f 0.03 -S 1 0.1 - | plot -Tps > final-route.eps + f(x,y) = a x^2 + b x y + c y^2 -This is the output showing the initial order of the cities; longitude is -negative, since it is west and I want the plot to look like a map. +with a = 3, b = 2, c = 1. The following code defines a +'gsl_monte_function' 'F' which you could pass to an integrator: - # initial coordinates of cities (longitude and latitude) - ###initial_city_coord: -105.95 35.68 Santa Fe - ###initial_city_coord: -112.07 33.54 Phoenix - ###initial_city_coord: -106.62 35.12 Albuquerque - ###initial_city_coord: -103.2 34.41 Clovis - ###initial_city_coord: -107.87 37.29 Durango - ###initial_city_coord: -96.77 32.79 Dallas - ###initial_city_coord: -105.92 35.77 Tesuque - ###initial_city_coord: -107.84 35.15 Grants - ###initial_city_coord: -106.28 35.89 Los Alamos - ###initial_city_coord: -106.76 32.34 Las Cruces - ###initial_city_coord: -108.58 37.35 Cortez - ###initial_city_coord: -108.74 35.52 Gallup - ###initial_city_coord: -105.95 35.68 Santa Fe + struct my_f_params { double a; double b; double c; }; - The optimal route turns out to be: + double + my_f (double x[], size_t dim, void * p) { + struct my_f_params * fp = (struct my_f_params *)p; - # final coordinates of cities (longitude and latitude) - ###final_city_coord: -105.95 35.68 Santa Fe - ###final_city_coord: -103.2 34.41 Clovis - ###final_city_coord: -96.77 32.79 Dallas - ###final_city_coord: -106.76 32.34 Las Cruces - ###final_city_coord: -112.07 33.54 Phoenix - ###final_city_coord: -108.74 35.52 Gallup - ###final_city_coord: -108.58 37.35 Cortez - ###final_city_coord: -107.87 37.29 Durango - ###final_city_coord: -107.84 35.15 Grants - ###final_city_coord: -106.62 35.12 Albuquerque - ###final_city_coord: -106.28 35.89 Los Alamos - ###final_city_coord: -105.92 35.77 Tesuque - ###final_city_coord: -105.95 35.68 Santa Fe + if (dim != 2) + { + fprintf (stderr, "error: dim != 2"); + abort (); + } -Here's a plot of the cost function (energy) versus generation (point in -the calculation at which a new temperature is set) for this problem: + return fp->a * x[0] * x[0] + + fp->b * x[0] * x[1] + + fp->c * x[1] * x[1]; + } - -File: gsl-ref.info, Node: Simulated Annealing References and Further Reading, Prev: Examples with Simulated Annealing, Up: Simulated Annealing + gsl_monte_function F; + struct my_f_params params = { 3.0, 2.0, 1.0 }; -25.4 References and Further Reading -=================================== + F.f = &my_f; + F.dim = 2; + F.params = ¶ms; -Further information is available in the following book, +The function f(x) can be evaluated using the following macro, - 'Modern Heuristic Techniques for Combinatorial Problems', Colin R. - Reeves (ed.), McGraw-Hill, 1995 (ISBN 0-07-709239-2). + #define GSL_MONTE_FN_EVAL(F,x) + (*((F)->f))(x,(F)->dim,(F)->params)  -File: gsl-ref.info, Node: Ordinary Differential Equations, Next: Interpolation, Prev: Simulated Annealing, Up: Top - -26 Ordinary Differential Equations -********************************** - -This chapter describes functions for solving ordinary differential -equation (ODE) initial value problems. The library provides a variety -of low-level methods, such as Runge-Kutta and Bulirsch-Stoer routines, -and higher-level components for adaptive step-size control. The -components can be combined by the user to achieve the desired solution, -with full access to any intermediate steps. A driver object can be used -as a high level wrapper for easy use of low level functions. +File: gsl-ref.info, Node: PLAIN Monte Carlo, Next: MISER, Prev: Monte Carlo Interface, Up: Monte Carlo Integration - These functions are declared in the header file 'gsl_odeiv2.h'. This -is a new interface in version 1.15 and uses the prefix 'gsl_odeiv2' for -all functions. It is recommended over the previous 'gsl_odeiv' -implementation defined in 'gsl_odeiv.h' The old interface has been -retained under the original name for backwards compatibility. +25.2 PLAIN Monte Carlo +====================== -* Menu: +The plain Monte Carlo algorithm samples points randomly from the +integration region to estimate the integral and its error. Using this +algorithm the estimate of the integral E(f; N) for N randomly +distributed points x_i is given by, -* Defining the ODE System:: -* Stepping Functions:: -* Adaptive Step-size Control:: -* Evolution:: -* Driver:: -* ODE Example programs:: -* ODE References and Further Reading:: + E(f; N) = = V = (V / N) \sum_i^N f(x_i) - -File: gsl-ref.info, Node: Defining the ODE System, Next: Stepping Functions, Up: Ordinary Differential Equations +where V is the volume of the integration region. The error on this +estimate \sigma(E;N) is calculated from the estimated variance of the +mean, -26.1 Defining the ODE System -============================ + \sigma^2 (E; N) = (V^2 / N^2) \sum_i^N (f(x_i) - )^2. -The routines solve the general n-dimensional first-order system, +For large N this variance decreases asymptotically as \Var(f)/N, where +\Var(f) is the true variance of the function over the integration +region. The error estimate itself should decrease as +\sigma(f)/\sqrt{N}. The familiar law of errors decreasing as 1/\sqrt{N} +applies--to reduce the error by a factor of 10 requires a 100-fold +increase in the number of sample points. - dy_i(t)/dt = f_i(t, y_1(t), ..., y_n(t)) + The functions described in this section are declared in the header +file 'gsl_monte_plain.h'. -for i = 1, \dots, n. The stepping functions rely on the vector of -derivatives f_i and the Jacobian matrix, J_{ij} = df_i(t,y(t)) / dy_j. -A system of equations is defined using the 'gsl_odeiv2_system' datatype. + -- Function: gsl_monte_plain_state * gsl_monte_plain_alloc (size_t DIM) + This function allocates and initializes a workspace for Monte Carlo + integration in DIM dimensions. - -- Data Type: gsl_odeiv2_system - This data type defines a general ODE system with arbitrary - parameters. + -- Function: int gsl_monte_plain_init (gsl_monte_plain_state* S) + This function initializes a previously allocated integration state. + This allows an existing workspace to be reused for different + integrations. - 'int (* function) (double t, const double y[], double dydt[], void * params)' - This function should store the vector elements f_i(t,y,params) - in the array DYDT, for arguments (T,Y) and parameters PARAMS. + -- Function: int gsl_monte_plain_integrate (gsl_monte_function * F, + const double XL[], const double XU[], size_t DIM, size_t + CALLS, gsl_rng * R, gsl_monte_plain_state * S, double * + RESULT, double * ABSERR) + This routines uses the plain Monte Carlo algorithm to integrate the + function F over the DIM-dimensional hypercubic region defined by + the lower and upper limits in the arrays XL and XU, each of size + DIM. The integration uses a fixed number of function calls CALLS, + and obtains random sampling points using the random number + generator R. A previously allocated workspace S must be supplied. + The result of the integration is returned in RESULT, with an + estimated absolute error ABSERR. - The function should return 'GSL_SUCCESS' if the calculation - was completed successfully. Any other return value indicates - an error. A special return value 'GSL_EBADFUNC' causes - 'gsl_odeiv2' routines to immediately stop and return. The - user must call an appropriate reset function (e.g. - 'gsl_odeiv2_driver_reset' or 'gsl_odeiv2_step_reset') before - continuing. Use return values distinct from standard GSL - error codes to distinguish your function as the source of the - error. + -- Function: void gsl_monte_plain_free (gsl_monte_plain_state * S) + This function frees the memory associated with the integrator state + S. - 'int (* jacobian) (double t, const double y[], double * dfdy, double dfdt[], void * params);' - This function should store the vector of derivative elements - in the array DFDT and the Jacobian matrix J_{ij} in the array - DFDY, regarded as a row-ordered matrix 'J(i,j) = dfdy[i * - dimension + j]' where 'dimension' is the dimension of the - system. + +File: gsl-ref.info, Node: MISER, Next: VEGAS, Prev: PLAIN Monte Carlo, Up: Monte Carlo Integration - Not all of the stepper algorithms of 'gsl_odeiv2' make use of - the Jacobian matrix, so it may not be necessary to provide - this function (the 'jacobian' element of the struct can be - replaced by a null pointer for those algorithms). +25.3 MISER +========== - The function should return 'GSL_SUCCESS' if the calculation - was completed successfully. Any other return value indicates - an error. A special return value 'GSL_EBADFUNC' causes - 'gsl_odeiv2' routines to immediately stop and return. The - user must call an appropriate reset function (e.g. - 'gsl_odeiv2_driver_reset' or 'gsl_odeiv2_step_reset') before - continuing. Use return values distinct from standard GSL - error codes to distinguish your function as the source of the - error. +The MISER algorithm of Press and Farrar is based on recursive stratified +sampling. This technique aims to reduce the overall integration error +by concentrating integration points in the regions of highest variance. - 'size_t dimension;' - This is the dimension of the system of equations. + The idea of stratified sampling begins with the observation that for +two disjoint regions a and b with Monte Carlo estimates of the integral +E_a(f) and E_b(f) and variances \sigma_a^2(f) and \sigma_b^2(f), the +variance \Var(f) of the combined estimate E(f) = (1/2) (E_a(f) + E_b(f)) +is given by, - 'void * params' - This is a pointer to the arbitrary parameters of the system. + \Var(f) = (\sigma_a^2(f) / 4 N_a) + (\sigma_b^2(f) / 4 N_b). - -File: gsl-ref.info, Node: Stepping Functions, Next: Adaptive Step-size Control, Prev: Defining the ODE System, Up: Ordinary Differential Equations +It can be shown that this variance is minimized by distributing the +points such that, -26.2 Stepping Functions -======================= + N_a / (N_a + N_b) = \sigma_a / (\sigma_a + \sigma_b). -The lowest level components are the "stepping functions" which advance a -solution from time t to t+h for a fixed step-size h and estimate the -resulting local error. +Hence the smallest error estimate is obtained by allocating sample +points in proportion to the standard deviation of the function in each +sub-region. - -- Function: gsl_odeiv2_step * gsl_odeiv2_step_alloc (const - gsl_odeiv2_step_type * T, size_t DIM) - This function returns a pointer to a newly allocated instance of a - stepping function of type T for a system of DIM dimensions. Please - note that if you use a stepper method that requires access to a - driver object, it is advisable to use a driver allocation method, - which automatically allocates a stepper, too. + The MISER algorithm proceeds by bisecting the integration region +along one coordinate axis to give two sub-regions at each step. The +direction is chosen by examining all d possible bisections and selecting +the one which will minimize the combined variance of the two +sub-regions. The variance in the sub-regions is estimated by sampling +with a fraction of the total number of points available to the current +step. The same procedure is then repeated recursively for each of the +two half-spaces from the best bisection. The remaining sample points +are allocated to the sub-regions using the formula for N_a and N_b. +This recursive allocation of integration points continues down to a +user-specified depth where each sub-region is integrated using a plain +Monte Carlo estimate. These individual values and their error estimates +are then combined upwards to give an overall result and an estimate of +its error. - -- Function: int gsl_odeiv2_step_reset (gsl_odeiv2_step * S) - This function resets the stepping function S. It should be used - whenever the next use of S will not be a continuation of a previous - step. + The functions described in this section are declared in the header +file 'gsl_monte_miser.h'. - -- Function: void gsl_odeiv2_step_free (gsl_odeiv2_step * S) - This function frees all the memory associated with the stepping - function S. + -- Function: gsl_monte_miser_state * gsl_monte_miser_alloc (size_t DIM) + This function allocates and initializes a workspace for Monte Carlo + integration in DIM dimensions. The workspace is used to maintain + the state of the integration. - -- Function: const char * gsl_odeiv2_step_name (const gsl_odeiv2_step * - S) - This function returns a pointer to the name of the stepping - function. For example, + -- Function: int gsl_monte_miser_init (gsl_monte_miser_state* S) + This function initializes a previously allocated integration state. + This allows an existing workspace to be reused for different + integrations. - printf ("step method is '%s'\n", - gsl_odeiv2_step_name (s)); + -- Function: int gsl_monte_miser_integrate (gsl_monte_function * F, + const double XL[], const double XU[], size_t DIM, size_t + CALLS, gsl_rng * R, gsl_monte_miser_state * S, double * + RESULT, double * ABSERR) + This routines uses the MISER Monte Carlo algorithm to integrate the + function F over the DIM-dimensional hypercubic region defined by + the lower and upper limits in the arrays XL and XU, each of size + DIM. The integration uses a fixed number of function calls CALLS, + and obtains random sampling points using the random number + generator R. A previously allocated workspace S must be supplied. + The result of the integration is returned in RESULT, with an + estimated absolute error ABSERR. - would print something like 'step method is 'rkf45''. + -- Function: void gsl_monte_miser_free (gsl_monte_miser_state * S) + This function frees the memory associated with the integrator state + S. - -- Function: unsigned int gsl_odeiv2_step_order (const gsl_odeiv2_step - * S) - This function returns the order of the stepping function on the - previous step. The order can vary if the stepping function itself - is adaptive. + The MISER algorithm has several configurable parameters which can be +changed using the following two functions.(1) - -- Function: int gsl_odeiv2_step_set_driver (gsl_odeiv2_step * S, const - gsl_odeiv2_driver * D) - This function sets a pointer of the driver object D for stepper S, - to allow the stepper to access control (and evolve) object through - the driver object. This is a requirement for some steppers, to get - the desired error level for internal iteration of stepper. - Allocation of a driver object calls this function automatically. + -- Function: void gsl_monte_miser_params_get (const + gsl_monte_miser_state * S, gsl_monte_miser_params * PARAMS) + This function copies the parameters of the integrator state into + the user-supplied PARAMS structure. - -- Function: int gsl_odeiv2_step_apply (gsl_odeiv2_step * S, double T, - double H, double Y[], double YERR[], const double DYDT_IN[], - double DYDT_OUT[], const gsl_odeiv2_system * SYS) - This function applies the stepping function S to the system of - equations defined by SYS, using the step-size H to advance the - system from time T and state Y to time T+H. The new state of the - system is stored in Y on output, with an estimate of the absolute - error in each component stored in YERR. If the argument DYDT_IN is - not null it should point an array containing the derivatives for - the system at time T on input. This is optional as the derivatives - will be computed internally if they are not provided, but allows - the reuse of existing derivative information. On output the new - derivatives of the system at time T+H will be stored in DYDT_OUT if - it is not null. + -- Function: void gsl_monte_miser_params_set (gsl_monte_miser_state * + S, const gsl_monte_miser_params * PARAMS) + This function sets the integrator parameters based on values + provided in the PARAMS structure. - The stepping function returns 'GSL_FAILURE' if it is unable to - compute the requested step. Also, if the user-supplied functions - defined in the system SYS return a status other than 'GSL_SUCCESS' - the step will be aborted. In that case, the elements of Y will be - restored to their pre-step values and the error code from the - user-supplied function will be returned. Failure may be due to a - singularity in the system or too large step-size H. In that case - the step should be attempted again with a smaller step-size, e.g. - H/2. + Typically the values of the parameters are first read using +'gsl_monte_miser_params_get', the necessary changes are made to the +fields of the PARAMS structure, and the values are copied back into the +integrator state using 'gsl_monte_miser_params_set'. The functions use +the 'gsl_monte_miser_params' structure which contains the following +fields: - If the driver object is not appropriately set via - 'gsl_odeiv2_step_set_driver' for those steppers that need it, the - stepping function returns 'GSL_EFAULT'. If the user-supplied - functions defined in the system SYS returns 'GSL_EBADFUNC', the - function returns immediately with the same return code. In this - case the user must call 'gsl_odeiv2_step_reset' before calling this - function again. + -- Variable: double estimate_frac + This parameter specifies the fraction of the currently available + number of function calls which are allocated to estimating the + variance at each recursive step. The default value is 0.1. - The following algorithms are available, + -- Variable: size_t min_calls + This parameter specifies the minimum number of function calls + required for each estimate of the variance. If the number of + function calls allocated to the estimate using ESTIMATE_FRAC falls + below MIN_CALLS then MIN_CALLS are used instead. This ensures that + each estimate maintains a reasonable level of accuracy. The + default value of MIN_CALLS is '16 * dim'. - -- Step Type: gsl_odeiv2_step_rk2 - Explicit embedded Runge-Kutta (2, 3) method. + -- Variable: size_t min_calls_per_bisection + This parameter specifies the minimum number of function calls + required to proceed with a bisection step. When a recursive step + has fewer calls available than MIN_CALLS_PER_BISECTION it performs + a plain Monte Carlo estimate of the current sub-region and + terminates its branch of the recursion. The default value of this + parameter is '32 * min_calls'. - -- Step Type: gsl_odeiv2_step_rk4 - Explicit 4th order (classical) Runge-Kutta. Error estimation is - carried out by the step doubling method. For more efficient - estimate of the error, use the embedded methods described below. + -- Variable: double alpha + This parameter controls how the estimated variances for the two + sub-regions of a bisection are combined when allocating points. + With recursive sampling the overall variance should scale better + than 1/N, since the values from the sub-regions will be obtained + using a procedure which explicitly minimizes their variance. To + accommodate this behavior the MISER algorithm allows the total + variance to depend on a scaling parameter \alpha, - -- Step Type: gsl_odeiv2_step_rkf45 - Explicit embedded Runge-Kutta-Fehlberg (4, 5) method. This method - is a good general-purpose integrator. + \Var(f) = {\sigma_a \over N_a^\alpha} + {\sigma_b \over N_b^\alpha}. - -- Step Type: gsl_odeiv2_step_rkck - Explicit embedded Runge-Kutta Cash-Karp (4, 5) method. + The authors of the original paper describing MISER recommend the + value \alpha = 2 as a good choice, obtained from numerical + experiments, and this is used as the default value in this + implementation. - -- Step Type: gsl_odeiv2_step_rk8pd - Explicit embedded Runge-Kutta Prince-Dormand (8, 9) method. + -- Variable: double dither + This parameter introduces a random fractional variation of size + DITHER into each bisection, which can be used to break the symmetry + of integrands which are concentrated near the exact center of the + hypercubic integration region. The default value of dither is + zero, so no variation is introduced. If needed, a typical value of + DITHER is 0.1. - -- Step Type: gsl_odeiv2_step_rk1imp - Implicit Gaussian first order Runge-Kutta. Also known as implicit - Euler or backward Euler method. Error estimation is carried out by - the step doubling method. This algorithm requires the Jacobian and - access to the driver object via 'gsl_odeiv2_step_set_driver'. + ---------- Footnotes ---------- - -- Step Type: gsl_odeiv2_step_rk2imp - Implicit Gaussian second order Runge-Kutta. Also known as implicit - mid-point rule. Error estimation is carried out by the step - doubling method. This stepper requires the Jacobian and access to - the driver object via 'gsl_odeiv2_step_set_driver'. + (1) The previous method of accessing these fields directly through +the 'gsl_monte_miser_state' struct is now deprecated. - -- Step Type: gsl_odeiv2_step_rk4imp - Implicit Gaussian 4th order Runge-Kutta. Error estimation is - carried out by the step doubling method. This algorithm requires - the Jacobian and access to the driver object via - 'gsl_odeiv2_step_set_driver'. + +File: gsl-ref.info, Node: VEGAS, Next: Monte Carlo Examples, Prev: MISER, Up: Monte Carlo Integration - -- Step Type: gsl_odeiv2_step_bsimp - Implicit Bulirsch-Stoer method of Bader and Deuflhard. The method - is generally suitable for stiff problems. This stepper requires - the Jacobian. +25.4 VEGAS +========== - -- Step Type: gsl_odeiv2_step_msadams - A variable-coefficient linear multistep Adams method in Nordsieck - form. This stepper uses explicit Adams-Bashforth (predictor) and - implicit Adams-Moulton (corrector) methods in P(EC)^m functional - iteration mode. Method order varies dynamically between 1 and 12. - This stepper requires the access to the driver object via - 'gsl_odeiv2_step_set_driver'. - - -- Step Type: gsl_odeiv2_step_msbdf - A variable-coefficient linear multistep backward differentiation - formula (BDF) method in Nordsieck form. This stepper uses the - explicit BDF formula as predictor and implicit BDF formula as - corrector. A modified Newton iteration method is used to solve the - system of non-linear equations. Method order varies dynamically - between 1 and 5. The method is generally suitable for stiff - problems. This stepper requires the Jacobian and the access to the - driver object via 'gsl_odeiv2_step_set_driver'. - - -File: gsl-ref.info, Node: Adaptive Step-size Control, Next: Evolution, Prev: Stepping Functions, Up: Ordinary Differential Equations - -26.3 Adaptive Step-size Control -=============================== - -The control function examines the proposed change to the solution -produced by a stepping function and attempts to determine the optimal -step-size for a user-specified level of error. - - -- Function: gsl_odeiv2_control * gsl_odeiv2_control_standard_new - (double EPS_ABS, double EPS_REL, double A_Y, double A_DYDT) - The standard control object is a four parameter heuristic based on - absolute and relative errors EPS_ABS and EPS_REL, and scaling - factors A_Y and A_DYDT for the system state y(t) and derivatives - y'(t) respectively. - - The step-size adjustment procedure for this method begins by - computing the desired error level D_i for each component, - - D_i = eps_abs + eps_rel * (a_y |y_i| + a_dydt h |y\prime_i|) - - and comparing it with the observed error E_i = |yerr_i|. If the - observed error E exceeds the desired error level D by more than 10% - for any component then the method reduces the step-size by an - appropriate factor, - - h_new = h_old * S * (E/D)^(-1/q) - - where q is the consistency order of the method (e.g. q=4 for 4(5) - embedded RK), and S is a safety factor of 0.9. The ratio E/D is - taken to be the maximum of the ratios E_i/D_i. - - If the observed error E is less than 50% of the desired error level - D for the maximum ratio E_i/D_i then the algorithm takes the - opportunity to increase the step-size to bring the error in line - with the desired level, - - h_new = h_old * S * (E/D)^(-1/(q+1)) - - This encompasses all the standard error scaling methods. To avoid - uncontrolled changes in the stepsize, the overall scaling factor is - limited to the range 1/5 to 5. - - -- Function: gsl_odeiv2_control * gsl_odeiv2_control_y_new (double - EPS_ABS, double EPS_REL) - This function creates a new control object which will keep the - local error on each step within an absolute error of EPS_ABS and - relative error of EPS_REL with respect to the solution y_i(t). - This is equivalent to the standard control object with A_Y=1 and - A_DYDT=0. - - -- Function: gsl_odeiv2_control * gsl_odeiv2_control_yp_new (double - EPS_ABS, double EPS_REL) - This function creates a new control object which will keep the - local error on each step within an absolute error of EPS_ABS and - relative error of EPS_REL with respect to the derivatives of the - solution y'_i(t). This is equivalent to the standard control - object with A_Y=0 and A_DYDT=1. - - -- Function: gsl_odeiv2_control * gsl_odeiv2_control_scaled_new (double - EPS_ABS, double EPS_REL, double A_Y, double A_DYDT, const - double SCALE_ABS[], size_t DIM) - This function creates a new control object which uses the same - algorithm as 'gsl_odeiv2_control_standard_new' but with an absolute - error which is scaled for each component by the array SCALE_ABS. - The formula for D_i for this control object is, - - D_i = eps_abs * s_i + eps_rel * (a_y |y_i| + a_dydt h |y\prime_i|) - - where s_i is the i-th component of the array SCALE_ABS. The same - error control heuristic is used by the Matlab ODE suite. - - -- Function: gsl_odeiv2_control * gsl_odeiv2_control_alloc (const - gsl_odeiv2_control_type * T) - This function returns a pointer to a newly allocated instance of a - control function of type T. This function is only needed for - defining new types of control functions. For most purposes the - standard control functions described above should be sufficient. - - -- Function: int gsl_odeiv2_control_init (gsl_odeiv2_control * C, - double EPS_ABS, double EPS_REL, double A_Y, double A_DYDT) - This function initializes the control function C with the - parameters EPS_ABS (absolute error), EPS_REL (relative error), A_Y - (scaling factor for y) and A_DYDT (scaling factor for derivatives). - - -- Function: void gsl_odeiv2_control_free (gsl_odeiv2_control * C) - This function frees all the memory associated with the control - function C. - - -- Function: int gsl_odeiv2_control_hadjust (gsl_odeiv2_control * C, - gsl_odeiv2_step * S, const double Y[], const double YERR[], - const double DYDT[], double * H) - This function adjusts the step-size H using the control function C, - and the current values of Y, YERR and DYDT. The stepping function - STEP is also needed to determine the order of the method. If the - error in the y-values YERR is found to be too large then the - step-size H is reduced and the function returns - 'GSL_ODEIV_HADJ_DEC'. If the error is sufficiently small then H - may be increased and 'GSL_ODEIV_HADJ_INC' is returned. The - function returns 'GSL_ODEIV_HADJ_NIL' if the step-size is - unchanged. The goal of the function is to estimate the largest - step-size which satisfies the user-specified accuracy requirements - for the current point. - - -- Function: const char * gsl_odeiv2_control_name (const - gsl_odeiv2_control * C) - This function returns a pointer to the name of the control - function. For example, - - printf ("control method is '%s'\n", - gsl_odeiv2_control_name (c)); - - would print something like 'control method is 'standard'' - - -- Function: int gsl_odeiv2_control_errlevel (gsl_odeiv2_control * C, - const double Y, const double DYDT, const double H, const - size_t IND, double * ERRLEV) - This function calculates the desired error level of the IND-th - component to ERRLEV. It requires the value (Y) and value of the - derivative (DYDT) of the component, and the current step size H. - - -- Function: int gsl_odeiv2_control_set_driver (gsl_odeiv2_control * C, - const gsl_odeiv2_driver * D) - This function sets a pointer of the driver object D for control - object C. - - -File: gsl-ref.info, Node: Evolution, Next: Driver, Prev: Adaptive Step-size Control, Up: Ordinary Differential Equations +The VEGAS algorithm of Lepage is based on importance sampling. It +samples points from the probability distribution described by the +function |f|, so that the points are concentrated in the regions that +make the largest contribution to the integral. -26.4 Evolution -============== + In general, if the Monte Carlo integral of f is sampled with points +distributed according to a probability distribution described by the +function g, we obtain an estimate E_g(f; N), -The evolution function combines the results of a stepping function and -control function to reliably advance the solution forward one step using -an acceptable step-size. + E_g(f; N) = E(f/g; N) - -- Function: gsl_odeiv2_evolve * gsl_odeiv2_evolve_alloc (size_t DIM) - This function returns a pointer to a newly allocated instance of an - evolution function for a system of DIM dimensions. +with a corresponding variance, - -- Function: int gsl_odeiv2_evolve_apply (gsl_odeiv2_evolve * E, - gsl_odeiv2_control * CON, gsl_odeiv2_step * STEP, const - gsl_odeiv2_system * SYS, double * T, double T1, double * H, - double Y[]) - This function advances the system (E, SYS) from time T and position - Y using the stepping function STEP. The new time and position are - stored in T and Y on output. + \Var_g(f; N) = \Var(f/g; N). - The initial step-size is taken as H. The control function CON is - applied to check whether the local error estimated by the stepping - function STEP using step-size H exceeds the required error - tolerance. If the error is too high, the step is retried by - calling STEP with a decreased step-size. This process is continued - until an acceptable step-size is found. An estimate of the local - error for the step can be obtained from the components of the array - 'E->yerr[]'. +If the probability distribution is chosen as g = |f|/I(|f|) then it can +be shown that the variance V_g(f; N) vanishes, and the error in the +estimate will be zero. In practice it is not possible to sample from +the exact distribution g for an arbitrary function, so importance +sampling algorithms aim to produce efficient approximations to the +desired distribution. - If the user-supplied functions defined in the system SYS returns - 'GSL_EBADFUNC', the function returns immediately with the same - return code. In this case the user must call - 'gsl_odeiv2_step_reset' and 'gsl_odeiv2_evolve_reset' before - calling this function again. + The VEGAS algorithm approximates the exact distribution by making a +number of passes over the integration region while histogramming the +function f. Each histogram is used to define a sampling distribution +for the next pass. Asymptotically this procedure converges to the +desired distribution. In order to avoid the number of histogram bins +growing like K^d the probability distribution is approximated by a +separable function: g(x_1, x_2, ...) = g_1(x_1) g_2(x_2) ... so that the +number of bins required is only Kd. This is equivalent to locating the +peaks of the function from the projections of the integrand onto the +coordinate axes. The efficiency of VEGAS depends on the validity of +this assumption. It is most efficient when the peaks of the integrand +are well-localized. If an integrand can be rewritten in a form which is +approximately separable this will increase the efficiency of integration +with VEGAS. - Otherwise, if the user-supplied functions defined in the system SYS - or the stepping function STEP return a status other than - 'GSL_SUCCESS', the step is retried with a decreased step-size. If - the step-size decreases below machine precision, a status of - 'GSL_FAILURE' is returned if the user functions returned - 'GSL_SUCCESS'. Otherwise the value returned by user function is - returned. If no acceptable step can be made, T and Y will be - restored to their pre-step values and H contains the final - attempted step-size. + VEGAS incorporates a number of additional features, and combines both +stratified sampling and importance sampling. The integration region is +divided into a number of "boxes", with each box getting a fixed number +of points (the goal is 2). Each box can then have a fractional number +of bins, but if the ratio of bins-per-box is less than two, Vegas +switches to a kind variance reduction (rather than importance sampling). - If the step is successful the function returns a suggested - step-size for the next step in H. The maximum time T1 is - guaranteed not to be exceeded by the time-step. On the final - time-step the value of T will be set to T1 exactly. + -- Function: gsl_monte_vegas_state * gsl_monte_vegas_alloc (size_t DIM) + This function allocates and initializes a workspace for Monte Carlo + integration in DIM dimensions. The workspace is used to maintain + the state of the integration. - -- Function: int gsl_odeiv2_evolve_apply_fixed_step (gsl_odeiv2_evolve - * E, gsl_odeiv2_control * CON, gsl_odeiv2_step * STEP, const - gsl_odeiv2_system * SYS, double * T, const double H, double - Y[]) - This function advances the ODE-system (E, SYS, CON) from time T and - position Y using the stepping function STEP by a specified step - size H. If the local error estimated by the stepping function - exceeds the desired error level, the step is not taken and the - function returns 'GSL_FAILURE'. Otherwise the value returned by - user function is returned. + -- Function: int gsl_monte_vegas_init (gsl_monte_vegas_state* S) + This function initializes a previously allocated integration state. + This allows an existing workspace to be reused for different + integrations. - -- Function: int gsl_odeiv2_evolve_reset (gsl_odeiv2_evolve * E) - This function resets the evolution function E. It should be used - whenever the next use of E will not be a continuation of a previous - step. + -- Function: int gsl_monte_vegas_integrate (gsl_monte_function * F, + double XL[], double XU[], size_t DIM, size_t CALLS, gsl_rng * + R, gsl_monte_vegas_state * S, double * RESULT, double * + ABSERR) + This routines uses the VEGAS Monte Carlo algorithm to integrate the + function F over the DIM-dimensional hypercubic region defined by + the lower and upper limits in the arrays XL and XU, each of size + DIM. The integration uses a fixed number of function calls CALLS, + and obtains random sampling points using the random number + generator R. A previously allocated workspace S must be supplied. + The result of the integration is returned in RESULT, with an + estimated absolute error ABSERR. The result and its error estimate + are based on a weighted average of independent samples. The + chi-squared per degree of freedom for the weighted average is + returned via the state struct component, S->CHISQ, and must be + consistent with 1 for the weighted average to be reliable. - -- Function: void gsl_odeiv2_evolve_free (gsl_odeiv2_evolve * E) - This function frees all the memory associated with the evolution - function E. + -- Function: void gsl_monte_vegas_free (gsl_monte_vegas_state * S) + This function frees the memory associated with the integrator state + S. - -- Function: int gsl_odeiv2_evolve_set_driver (gsl_odeiv2_evolve * E, - const gsl_odeiv2_driver * D) - This function sets a pointer of the driver object D for evolve - object E. + The VEGAS algorithm computes a number of independent estimates of the +integral internally, according to the 'iterations' parameter described +below, and returns their weighted average. Random sampling of the +integrand can occasionally produce an estimate where the error is zero, +particularly if the function is constant in some regions. An estimate +with zero error causes the weighted average to break down and must be +handled separately. In the original Fortran implementations of VEGAS +the error estimate is made non-zero by substituting a small value +(typically '1e-30'). The implementation in GSL differs from this and +avoids the use of an arbitrary constant--it either assigns the value a +weight which is the average weight of the preceding estimates or +discards it according to the following procedure, - If a system has discontinuous changes in the derivatives at known -points, it is advisable to evolve the system between each discontinuity -in sequence. For example, if a step-change in an external driving force -occurs at times t_a, t_b and t_c then evolution should be carried out -over the ranges (t_0,t_a), (t_a,t_b), (t_b,t_c), and (t_c,t_1) -separately and not directly over the range (t_0,t_1). +current estimate has zero error, weighted average has finite error - -File: gsl-ref.info, Node: Driver, Next: ODE Example programs, Prev: Evolution, Up: Ordinary Differential Equations + The current estimate is assigned a weight which is the average + weight of the preceding estimates. -26.5 Driver -=========== +current estimate has finite error, previous estimates had zero error -The driver object is a high level wrapper that combines the evolution, -control and stepper objects for easy use. + The previous estimates are discarded and the weighted averaging + procedure begins with the current estimate. - -- Function: gsl_odeiv2_driver * gsl_odeiv2_driver_alloc_y_new (const - gsl_odeiv2_system * SYS, const gsl_odeiv2_step_type * T, const - double HSTART, const double EPSABS, const double EPSREL) - -- Function: gsl_odeiv2_driver * gsl_odeiv2_driver_alloc_yp_new (const - gsl_odeiv2_system * SYS, const gsl_odeiv2_step_type * T, const - double HSTART, const double EPSABS, const double EPSREL) - -- Function: gsl_odeiv2_driver * gsl_odeiv2_driver_alloc_standard_new - (const gsl_odeiv2_system * SYS, const gsl_odeiv2_step_type * - T, const double HSTART, const double EPSABS, const double - EPSREL, const double A_Y, const double A_DYDT) - -- Function: gsl_odeiv2_driver * gsl_odeiv2_driver_alloc_scaled_new - (const gsl_odeiv2_system * SYS, const gsl_odeiv2_step_type * - T, const double HSTART, const double EPSABS, const double - EPSREL, const double A_Y, const double A_DYDT, const double - SCALE_ABS[]) - These functions return a pointer to a newly allocated instance of a - driver object. The functions automatically allocate and initialise - the evolve, control and stepper objects for ODE system SYS using - stepper type T. The initial step size is given in HSTART. The - rest of the arguments follow the syntax and semantics of the - control functions with same name ('gsl_odeiv2_control_*_new'). +current estimate has zero error, previous estimates had zero error - -- Function: int gsl_odeiv2_driver_set_hmin (gsl_odeiv2_driver * D, - const double HMIN) - The function sets a minimum for allowed step size HMIN for driver - D. Default value is 0. + The estimates are averaged using the arithmetic mean, but no error + is computed. - -- Function: int gsl_odeiv2_driver_set_hmax (gsl_odeiv2_driver * D, - const double HMAX) - The function sets a maximum for allowed step size HMAX for driver - D. Default value is 'GSL_DBL_MAX'. + The convergence of the algorithm can be tested using the overall +chi-squared value of the results, which is available from the following +function: - -- Function: int gsl_odeiv2_driver_set_nmax (gsl_odeiv2_driver * D, - const unsigned long int NMAX) - The function sets a maximum for allowed number of steps NMAX for - driver D. Default value of 0 sets no limit for steps. + -- Function: double gsl_monte_vegas_chisq (const gsl_monte_vegas_state + * S) + This function returns the chi-squared per degree of freedom for the + weighted estimate of the integral. The returned value should be + close to 1. A value which differs significantly from 1 indicates + that the values from different iterations are inconsistent. In + this case the weighted error will be under-estimated, and further + iterations of the algorithm are needed to obtain reliable results. - -- Function: int gsl_odeiv2_driver_apply (gsl_odeiv2_driver * D, double - * T, const double T1, double Y[]) - This function evolves the driver system D from T to T1. Initially - vector Y should contain the values of dependent variables at point - T. If the function is unable to complete the calculation, an error - code from 'gsl_odeiv2_evolve_apply' is returned, and T and Y - contain the values from last successful step. + -- Function: void gsl_monte_vegas_runval (const gsl_monte_vegas_state * + S, double * RESULT, double * SIGMA) + This function returns the raw (unaveraged) values of the integral + RESULT and its error SIGMA from the most recent iteration of the + algorithm. - If maximum number of steps is reached, a value of 'GSL_EMAXITER' is - returned. If the step size drops below minimum value, the function - returns with 'GSL_ENOPROG'. If the user-supplied functions defined - in the system SYS returns 'GSL_EBADFUNC', the function returns - immediately with the same return code. In this case the user must - call 'gsl_odeiv2_driver_reset' before calling this function again. + The VEGAS algorithm is highly configurable. Several parameters can +be changed using the following two functions. - -- Function: int gsl_odeiv2_driver_apply_fixed_step (gsl_odeiv2_driver - * D, double * T, const double H, const unsigned long int N, - double Y[]) - This function evolves the driver system D from T with N steps of - size H. If the function is unable to complete the calculation, an - error code from 'gsl_odeiv2_evolve_apply_fixed_step' is returned, - and T and Y contain the values from last successful step. + -- Function: void gsl_monte_vegas_params_get (const + gsl_monte_vegas_state * S, gsl_monte_vegas_params * PARAMS) + This function copies the parameters of the integrator state into + the user-supplied PARAMS structure. - -- Function: int gsl_odeiv2_driver_reset (gsl_odeiv2_driver * D) - This function resets the evolution and stepper objects. + -- Function: void gsl_monte_vegas_params_set (gsl_monte_vegas_state * + S, const gsl_monte_vegas_params * PARAMS) + This function sets the integrator parameters based on values + provided in the PARAMS structure. - -- Function: int gsl_odeiv2_driver_reset_hstart (gsl_odeiv2_driver * D, - const double HSTART) - The routine resets the evolution and stepper objects and sets new - initial step size to HSTART. This function can be used e.g. to - change the direction of integration. + Typically the values of the parameters are first read using +'gsl_monte_vegas_params_get', the necessary changes are made to the +fields of the PARAMS structure, and the values are copied back into the +integrator state using 'gsl_monte_vegas_params_set'. The functions use +the 'gsl_monte_vegas_params' structure which contains the following +fields: - -- Function: int gsl_odeiv2_driver_free (gsl_odeiv2_driver * D) - This function frees the driver object, and the related evolution, - stepper and control objects. + -- Variable: double alpha + The parameter 'alpha' controls the stiffness of the rebinning + algorithm. It is typically set between one and two. A value of + zero prevents rebinning of the grid. The default value is 1.5. - -File: gsl-ref.info, Node: ODE Example programs, Next: ODE References and Further Reading, Prev: Driver, Up: Ordinary Differential Equations + -- Variable: size_t iterations + The number of iterations to perform for each call to the routine. + The default value is 5 iterations. -26.6 Examples -============= + -- Variable: int stage + Setting this determines the "stage" of the calculation. Normally, + 'stage = 0' which begins with a new uniform grid and empty weighted + average. Calling VEGAS with 'stage = 1' retains the grid from the + previous run but discards the weighted average, so that one can + "tune" the grid using a relatively small number of points and then + do a large run with 'stage = 1' on the optimized grid. Setting + 'stage = 2' keeps the grid and the weighted average from the + previous run, but may increase (or decrease) the number of + histogram bins in the grid depending on the number of calls + available. Choosing 'stage = 3' enters at the main loop, so that + nothing is changed, and is equivalent to performing additional + iterations in a previous call. -The following program solves the second-order nonlinear Van der Pol -oscillator equation, + -- Variable: int mode + The possible choices are 'GSL_VEGAS_MODE_IMPORTANCE', + 'GSL_VEGAS_MODE_STRATIFIED', 'GSL_VEGAS_MODE_IMPORTANCE_ONLY'. + This determines whether VEGAS will use importance sampling or + stratified sampling, or whether it can pick on its own. In low + dimensions VEGAS uses strict stratified sampling (more precisely, + stratified sampling is chosen if there are fewer than 2 bins per + box). - u''(t) + \mu u'(t) (u(t)^2 - 1) + u(t) = 0 + -- Variable: int verbose + -- Variable: FILE * ostream + These parameters set the level of information printed by VEGAS. + All information is written to the stream OSTREAM. The default + setting of VERBOSE is '-1', which turns off all output. A VERBOSE + value of '0' prints summary information about the weighted average + and final result, while a value of '1' also displays the grid + coordinates. A value of '2' prints information from the rebinning + procedure for each iteration. -This can be converted into a first order system suitable for use with -the routines described in this chapter by introducing a separate -variable for the velocity, v = u'(t), + The above fields and the CHISQ value can also be accessed directly in +the 'gsl_monte_vegas_state' but such use is deprecated. - u' = v - v' = -u + \mu v (1-u^2) + +File: gsl-ref.info, Node: Monte Carlo Examples, Next: Monte Carlo Integration References and Further Reading, Prev: VEGAS, Up: Monte Carlo Integration -The program begins by defining functions for these derivatives and their -Jacobian. The main function uses driver level functions to solve the -problem. The program evolves the solution from (u, v) = (1, 0) at t=0 -to t=100. The step-size h is automatically adjusted by the controller -to maintain an absolute accuracy of 10^{-6} in the function values (u, -v). The loop in the example prints the solution at the points t_i = 1, -2, \dots, 100. +25.5 Examples +============= - #include - #include - #include - #include +The example program below uses the Monte Carlo routines to estimate the +value of the following 3-dimensional integral from the theory of random +walks, - int - func (double t, const double y[], double f[], - void *params) - { - double mu = *(double *)params; - f[0] = y[1]; - f[1] = -y[0] - mu*y[1]*(y[0]*y[0] - 1); - return GSL_SUCCESS; - } + I = \int_{-pi}^{+pi} {dk_x/(2 pi)} + \int_{-pi}^{+pi} {dk_y/(2 pi)} + \int_{-pi}^{+pi} {dk_z/(2 pi)} + 1 / (1 - cos(k_x)cos(k_y)cos(k_z)). - int - jac (double t, const double y[], double *dfdy, - double dfdt[], void *params) - { - double mu = *(double *)params; - gsl_matrix_view dfdy_mat - = gsl_matrix_view_array (dfdy, 2, 2); - gsl_matrix * m = &dfdy_mat.matrix; - gsl_matrix_set (m, 0, 0, 0.0); - gsl_matrix_set (m, 0, 1, 1.0); - gsl_matrix_set (m, 1, 0, -2.0*mu*y[0]*y[1] - 1.0); - gsl_matrix_set (m, 1, 1, -mu*(y[0]*y[0] - 1.0)); - dfdt[0] = 0.0; - dfdt[1] = 0.0; - return GSL_SUCCESS; - } +The analytic value of this integral can be shown to be I = +\Gamma(1/4)^4/(4 \pi^3) = 1.393203929685676859.... The integral gives +the mean time spent at the origin by a random walk on a body-centered +cubic lattice in three dimensions. - int - main (void) - { - double mu = 10; - gsl_odeiv2_system sys = {func, jac, 2, &mu}; + For simplicity we will compute the integral over the region (0,0,0) +to (\pi,\pi,\pi) and multiply by 8 to obtain the full result. The +integral is slowly varying in the middle of the region but has +integrable singularities at the corners (0,0,0), (0,\pi,\pi), +(\pi,0,\pi) and (\pi,\pi,0). The Monte Carlo routines only select +points which are strictly within the integration region and so no +special measures are needed to avoid these singularities. - gsl_odeiv2_driver * d = - gsl_odeiv2_driver_alloc_y_new (&sys, gsl_odeiv2_step_rk8pd, - 1e-6, 1e-6, 0.0); - int i; - double t = 0.0, t1 = 100.0; - double y[2] = { 1.0, 0.0 }; + #include + #include + #include + #include + #include + #include - for (i = 1; i <= 100; i++) - { - double ti = i * t1 / 100.0; - int status = gsl_odeiv2_driver_apply (d, &t, ti, y); + /* Computation of the integral, - if (status != GSL_SUCCESS) - { - printf ("error, return value=%d\n", status); - break; - } + I = int (dx dy dz)/(2pi)^3 1/(1-cos(x)cos(y)cos(z)) - printf ("%.5e %.5e %.5e\n", t, y[0], y[1]); - } + over (-pi,-pi,-pi) to (+pi, +pi, +pi). The exact answer + is Gamma(1/4)^4/(4 pi^3). This example is taken from + C.Itzykson, J.M.Drouffe, "Statistical Field Theory - + Volume 1", Section 1.1, p21, which cites the original + paper M.L.Glasser, I.J.Zucker, Proc.Natl.Acad.Sci.USA 74 + 1800 (1977) */ - gsl_odeiv2_driver_free (d); - return 0; + /* For simplicity we compute the integral over the region + (0,0,0) -> (pi,pi,pi) and multiply by 8 */ + + double exact = 1.3932039296856768591842462603255; + + double + g (double *k, size_t dim, void *params) + { + (void)(dim); /* avoid unused parameter warnings */ + (void)(params); + double A = 1.0 / (M_PI * M_PI * M_PI); + return A / (1.0 - cos (k[0]) * cos (k[1]) * cos (k[2])); } -The user can work with the lower level functions directly, as in the -following example. In this case an intermediate result is printed after -each successful step instead of equidistant time points. + void + display_results (char *title, double result, double error) + { + printf ("%s ==================\n", title); + printf ("result = % .6f\n", result); + printf ("sigma = % .6f\n", error); + printf ("exact = % .6f\n", exact); + printf ("error = % .6f = %.2g sigma\n", result - exact, + fabs (result - exact) / error); + } int main (void) { - const gsl_odeiv2_step_type * T - = gsl_odeiv2_step_rk8pd; + double res, err; - gsl_odeiv2_step * s - = gsl_odeiv2_step_alloc (T, 2); - gsl_odeiv2_control * c - = gsl_odeiv2_control_y_new (1e-6, 0.0); - gsl_odeiv2_evolve * e - = gsl_odeiv2_evolve_alloc (2); + double xl[3] = { 0, 0, 0 }; + double xu[3] = { M_PI, M_PI, M_PI }; + + const gsl_rng_type *T; + gsl_rng *r; - double mu = 10; - gsl_odeiv2_system sys = {func, jac, 2, &mu}; + gsl_monte_function G = { &g, 3, 0 }; - double t = 0.0, t1 = 100.0; - double h = 1e-6; - double y[2] = { 1.0, 0.0 }; + size_t calls = 500000; - while (t < t1) - { - int status = gsl_odeiv2_evolve_apply (e, c, s, - &sys, - &t, t1, - &h, y); + gsl_rng_env_setup (); - if (status != GSL_SUCCESS) - break; + T = gsl_rng_default; + r = gsl_rng_alloc (T); - printf ("%.5e %.5e %.5e\n", t, y[0], y[1]); - } + { + gsl_monte_plain_state *s = gsl_monte_plain_alloc (3); + gsl_monte_plain_integrate (&G, xl, xu, 3, calls, r, s, + &res, &err); + gsl_monte_plain_free (s); - gsl_odeiv2_evolve_free (e); - gsl_odeiv2_control_free (c); - gsl_odeiv2_step_free (s); - return 0; - } + display_results ("plain", res, err); + } -For functions with multiple parameters, the appropriate information can -be passed in through the PARAMS argument in 'gsl_odeiv2_system' -definition (MU in this example) by using a pointer to a struct. + { + gsl_monte_miser_state *s = gsl_monte_miser_alloc (3); + gsl_monte_miser_integrate (&G, xl, xu, 3, calls, r, s, + &res, &err); + gsl_monte_miser_free (s); -It is also possible to work with a non-adaptive integrator, using only -the stepping function itself, 'gsl_odeiv2_driver_apply_fixed_step' or -'gsl_odeiv2_evolve_apply_fixed_step'. The following program uses the -driver level function, with fourth-order Runge-Kutta stepping function -with a fixed stepsize of 0.001. + display_results ("miser", res, err); + } - int - main (void) - { - double mu = 10; - gsl_odeiv2_system sys = { func, jac, 2, &mu }; + { + gsl_monte_vegas_state *s = gsl_monte_vegas_alloc (3); - gsl_odeiv2_driver *d = - gsl_odeiv2_driver_alloc_y_new (&sys, gsl_odeiv2_step_rk4, - 1e-3, 1e-8, 1e-8); + gsl_monte_vegas_integrate (&G, xl, xu, 3, 10000, r, s, + &res, &err); + display_results ("vegas warm-up", res, err); - double t = 0.0; - double y[2] = { 1.0, 0.0 }; - int i, s; + printf ("converging...\n"); - for (i = 0; i < 100; i++) - { - s = gsl_odeiv2_driver_apply_fixed_step (d, &t, 1e-3, 1000, y); + do + { + gsl_monte_vegas_integrate (&G, xl, xu, 3, calls/5, r, s, + &res, &err); + printf ("result = % .6f sigma = % .6f " + "chisq/dof = %.1f\n", res, err, gsl_monte_vegas_chisq (s)); + } + while (fabs (gsl_monte_vegas_chisq (s) - 1.0) > 0.5); - if (s != GSL_SUCCESS) - { - printf ("error: driver returned %d\n", s); - break; - } + display_results ("vegas final", res, err); - printf ("%.5e %.5e %.5e\n", t, y[0], y[1]); - } + gsl_monte_vegas_free (s); + } - gsl_odeiv2_driver_free (d); - return s; + gsl_rng_free (r); + + return 0; } - -File: gsl-ref.info, Node: ODE References and Further Reading, Prev: ODE Example programs, Up: Ordinary Differential Equations +With 500,000 function calls the plain Monte Carlo algorithm achieves a +fractional error of 1%. The estimated error 'sigma' is roughly +consistent with the actual error-the computed result differs from the +true result by about 1.4 standard deviations, -26.7 References and Further Reading -=================================== + plain ================== + result = 1.412209 + sigma = 0.013436 + exact = 1.393204 + error = 0.019005 = 1.4 sigma - Ascher, U.M., Petzold, L.R., 'Computer Methods for Ordinary - Differential and Differential-Algebraic Equations', SIAM, - Philadelphia, 1998. +The MISER algorithm reduces the error by a factor of four, and also +correctly estimates the error, - Hairer, E., Norsett, S. P., Wanner, G., 'Solving Ordinary - Differential Equations I: Nonstiff Problems', Springer, Berlin, - 1993. + miser ================== + result = 1.391322 + sigma = 0.003461 + exact = 1.393204 + error = -0.001882 = 0.54 sigma - Hairer, E., Wanner, G., 'Solving Ordinary Differential Equations - II: Stiff and Differential-Algebraic Problems', Springer, Berlin, - 1996. +In the case of the VEGAS algorithm the program uses an initial warm-up +run of 10,000 function calls to prepare, or "warm up", the grid. This +is followed by a main run with five iterations of 100,000 function +calls. The chi-squared per degree of freedom for the five iterations +are checked for consistency with 1, and the run is repeated if the +results have not converged. In this case the estimates are consistent +on the first pass. - Many of the basic Runge-Kutta formulas can be found in the Handbook -of Mathematical Functions, + vegas warm-up ================== + result = 1.392673 + sigma = 0.003410 + exact = 1.393204 + error = -0.000531 = 0.16 sigma + converging... + result = 1.393281 sigma = 0.000362 chisq/dof = 1.5 + vegas final ================== + result = 1.393281 + sigma = 0.000362 + exact = 1.393204 + error = 0.000077 = 0.21 sigma - Abramowitz & Stegun (eds.), 'Handbook of Mathematical Functions', - Section 25.5. +If the value of 'chisq' had differed significantly from 1 it would +indicate inconsistent results, with a correspondingly underestimated +error. The final estimate from VEGAS (using a similar number of +function calls) is significantly more accurate than the other two +algorithms. -The implicit Bulirsch-Stoer algorithm 'bsimp' is described in the -following paper, + +File: gsl-ref.info, Node: Monte Carlo Integration References and Further Reading, Prev: Monte Carlo Examples, Up: Monte Carlo Integration - G. Bader and P. Deuflhard, "A Semi-Implicit Mid-Point Rule for - Stiff Systems of Ordinary Differential Equations.", Numer. Math. - 41, 373-398, 1983. +25.6 References and Further Reading +=================================== -The Adams and BDF multistep methods 'msadams' and 'msbdf' are based on -the following articles, +The MISER algorithm is described in the following article by Press and +Farrar, - G. D. Byrne and A. C. Hindmarsh, "A Polyalgorithm for the Numerical - Solution of Ordinary Differential Equations.", ACM Trans. Math. - Software, 1, 71-96, 1975. + W.H. Press, G.R. Farrar, 'Recursive Stratified Sampling for + Multidimensional Monte Carlo Integration', Computers in Physics, v4 + (1990), pp190-195. - P. N. Brown, G. D. Byrne and A. C. Hindmarsh, "VODE: A - Variable-coefficient ODE Solver.", SIAM J. Sci. Stat. Comput. - 10, 1038-1051, 1989. +The VEGAS algorithm is described in the following papers, - A. C. Hindmarsh, P. N. Brown, K. E. Grant, S. L. Lee, R. Serban, D. - E. Shumaker and C. S. Woodward, "SUNDIALS: Suite of Nonlinear and - Differential/Algebraic Equation Solvers.", ACM Trans. Math. - Software 31, 363-396, 2005. + G.P. Lepage, 'A New Algorithm for Adaptive Multidimensional + Integration', Journal of Computational Physics 27, 192-203, (1978) + + G.P. Lepage, 'VEGAS: An Adaptive Multi-dimensional Integration + Program', Cornell preprint CLNS 80-447, March 1980  -File: gsl-ref.info, Node: Interpolation, Next: Numerical Differentiation, Prev: Ordinary Differential Equations, Up: Top +File: gsl-ref.info, Node: Simulated Annealing, Next: Ordinary Differential Equations, Prev: Monte Carlo Integration, Up: Top -27 Interpolation -**************** +26 Simulated Annealing +********************** -This chapter describes functions for performing interpolation. The -library provides a variety of interpolation methods, including Cubic -splines and Akima splines. The interpolation types are interchangeable, -allowing different methods to be used without recompiling. -Interpolations can be defined for both normal and periodic boundary -conditions. Additional functions are available for computing -derivatives and integrals of interpolating functions. +Stochastic search techniques are used when the structure of a space is +not well understood or is not smooth, so that techniques like Newton's +method (which requires calculating Jacobian derivative matrices) cannot +be used. In particular, these techniques are frequently used to solve +combinatorial optimization problems, such as the traveling salesman +problem. - These interpolation methods produce curves that pass through each -datapoint. To interpolate noisy data with a smoothing curve see *note -Basis Splines::. + The goal is to find a point in the space at which a real valued +"energy function" (or "cost function") is minimized. Simulated +annealing is a minimization technique which has given good results in +avoiding local minima; it is based on the idea of taking a random walk +through the space at successively lower temperatures, where the +probability of taking a step is given by a Boltzmann distribution. - The functions described in this section are declared in the header -files 'gsl_interp.h' and 'gsl_spline.h'. + The functions described in this chapter are declared in the header +file 'gsl_siman.h'. * Menu: -* Introduction to Interpolation:: -* Interpolation Functions:: -* Interpolation Types:: -* Index Look-up and Acceleration:: -* Evaluation of Interpolating Functions:: -* Higher-level Interface:: -* Interpolation Example programs:: -* Interpolation References and Further Reading:: - - -File: gsl-ref.info, Node: Introduction to Interpolation, Next: Interpolation Functions, Up: Interpolation - -27.1 Introduction -================= - -Given a set of data points (x_1, y_1) \dots (x_n, y_n) the routines -described in this section compute a continuous interpolating function -y(x) such that y(x_i) = y_i. The interpolation is piecewise smooth, and -its behavior at the end-points is determined by the type of -interpolation used. +* Simulated Annealing algorithm:: +* Simulated Annealing functions:: +* Examples with Simulated Annealing:: +* Simulated Annealing References and Further Reading::  -File: gsl-ref.info, Node: Interpolation Functions, Next: Interpolation Types, Prev: Introduction to Interpolation, Up: Interpolation - -27.2 Interpolation Functions -============================ +File: gsl-ref.info, Node: Simulated Annealing algorithm, Next: Simulated Annealing functions, Up: Simulated Annealing -The interpolation function for a given dataset is stored in a -'gsl_interp' object. These are created by the following functions. +26.1 Simulated Annealing algorithm +================================== - -- Function: gsl_interp * gsl_interp_alloc (const gsl_interp_type * T, - size_t SIZE) - This function returns a pointer to a newly allocated interpolation - object of type T for SIZE data-points. +The simulated annealing algorithm takes random walks through the problem +space, looking for points with low energies; in these random walks, the +probability of taking a step is determined by the Boltzmann +distribution, - -- Function: int gsl_interp_init (gsl_interp * INTERP, const double - XA[], const double YA[], size_t SIZE) - This function initializes the interpolation object INTERP for the - data (XA,YA) where XA and YA are arrays of size SIZE. The - interpolation object ('gsl_interp') does not save the data arrays - XA and YA and only stores the static state computed from the data. - The XA data array is always assumed to be strictly ordered, with - increasing x values; the behavior for other arrangements is not - defined. + p = e^{-(E_{i+1} - E_i)/(kT)} - -- Function: void gsl_interp_free (gsl_interp * INTERP) - This function frees the interpolation object INTERP. +if E_{i+1} > E_i, and p = 1 when E_{i+1} <= E_i. - -File: gsl-ref.info, Node: Interpolation Types, Next: Index Look-up and Acceleration, Prev: Interpolation Functions, Up: Interpolation + In other words, a step will occur if the new energy is lower. If the +new energy is higher, the transition can still occur, and its likelihood +is proportional to the temperature T and inversely proportional to the +energy difference E_{i+1} - E_i. -27.3 Interpolation Types -======================== + The temperature T is initially set to a high value, and a random walk +is carried out at that temperature. Then the temperature is lowered +very slightly according to a "cooling schedule", for example: T -> +T/mu_T where \mu_T is slightly greater than 1. -The interpolation library provides six interpolation types: + The slight probability of taking a step that gives higher energy is +what allows simulated annealing to frequently get out of local minima. - -- Interpolation Type: gsl_interp_linear - Linear interpolation. This interpolation method does not require - any additional memory. + +File: gsl-ref.info, Node: Simulated Annealing functions, Next: Examples with Simulated Annealing, Prev: Simulated Annealing algorithm, Up: Simulated Annealing - -- Interpolation Type: gsl_interp_polynomial - Polynomial interpolation. This method should only be used for - interpolating small numbers of points because polynomial - interpolation introduces large oscillations, even for well-behaved - datasets. The number of terms in the interpolating polynomial is - equal to the number of points. +26.2 Simulated Annealing functions +================================== - -- Interpolation Type: gsl_interp_cspline - Cubic spline with natural boundary conditions. The resulting curve - is piecewise cubic on each interval, with matching first and second - derivatives at the supplied data-points. The second derivative is - chosen to be zero at the first point and last point. + -- Function: void gsl_siman_solve (const gsl_rng * R, void * X0_P, + gsl_siman_Efunc_t EF, gsl_siman_step_t TAKE_STEP, + gsl_siman_metric_t DISTANCE, gsl_siman_print_t PRINT_POSITION, + gsl_siman_copy_t COPYFUNC, gsl_siman_copy_construct_t + COPY_CONSTRUCTOR, gsl_siman_destroy_t DESTRUCTOR, size_t + ELEMENT_SIZE, gsl_siman_params_t PARAMS) - -- Interpolation Type: gsl_interp_cspline_periodic - Cubic spline with periodic boundary conditions. The resulting - curve is piecewise cubic on each interval, with matching first and - second derivatives at the supplied data-points. The derivatives at - the first and last points are also matched. Note that the last - point in the data must have the same y-value as the first point, - otherwise the resulting periodic interpolation will have a - discontinuity at the boundary. + This function performs a simulated annealing search through a given + space. The space is specified by providing the functions EF and + DISTANCE. The simulated annealing steps are generated using the + random number generator R and the function TAKE_STEP. - -- Interpolation Type: gsl_interp_akima - Non-rounded Akima spline with natural boundary conditions. This - method uses the non-rounded corner algorithm of Wodicka. + The starting configuration of the system should be given by X0_P. + The routine offers two modes for updating configurations, a + fixed-size mode and a variable-size mode. In the fixed-size mode + the configuration is stored as a single block of memory of size + ELEMENT_SIZE. Copies of this configuration are created, copied and + destroyed internally using the standard library functions 'malloc', + 'memcpy' and 'free'. The function pointers COPYFUNC, + COPY_CONSTRUCTOR and DESTRUCTOR should be null pointers in + fixed-size mode. In the variable-size mode the functions COPYFUNC, + COPY_CONSTRUCTOR and DESTRUCTOR are used to create, copy and + destroy configurations internally. The variable ELEMENT_SIZE + should be zero in the variable-size mode. - -- Interpolation Type: gsl_interp_akima_periodic - Non-rounded Akima spline with periodic boundary conditions. This - method uses the non-rounded corner algorithm of Wodicka. + The PARAMS structure (described below) controls the run by + providing the temperature schedule and other tunable parameters to + the algorithm. - The following related functions are available: + On exit the best result achieved during the search is placed in + '*X0_P'. If the annealing process has been successful this should + be a good approximation to the optimal point in the space. - -- Function: const char * gsl_interp_name (const gsl_interp * INTERP) - This function returns the name of the interpolation type used by - INTERP. For example, + If the function pointer PRINT_POSITION is not null, a debugging log + will be printed to 'stdout' with the following columns: - printf ("interp uses '%s' interpolation.\n", - gsl_interp_name (interp)); + #-iter #-evals temperature position energy best_energy - would print something like, + and the output of the function PRINT_POSITION itself. If + PRINT_POSITION is null then no information is printed. - interp uses 'cspline' interpolation. +The simulated annealing routines require several user-specified +functions to define the configuration space and energy function. The +prototypes for these functions are given below. - -- Function: unsigned int gsl_interp_min_size (const gsl_interp * - INTERP) - -- Function: unsigned int gsl_interp_type_min_size (const - gsl_interp_type * T) - These functions return the minimum number of points required by the - interpolation object INTERP or interpolation type T. For example, - Akima spline interpolation requires a minimum of 5 points. + -- Data Type: gsl_siman_Efunc_t + This function type should return the energy of a configuration XP. - -File: gsl-ref.info, Node: Index Look-up and Acceleration, Next: Evaluation of Interpolating Functions, Prev: Interpolation Types, Up: Interpolation + double (*gsl_siman_Efunc_t) (void *xp) -27.4 Index Look-up and Acceleration -=================================== + -- Data Type: gsl_siman_step_t + This function type should modify the configuration XP using a + random step taken from the generator R, up to a maximum distance of + STEP_SIZE. -The state of searches can be stored in a 'gsl_interp_accel' object, -which is a kind of iterator for interpolation lookups. It caches the -previous value of an index lookup. When the subsequent interpolation -point falls in the same interval its index value can be returned -immediately. + void (*gsl_siman_step_t) (const gsl_rng *r, void *xp, + double step_size) - -- Function: size_t gsl_interp_bsearch (const double X_ARRAY[], double - X, size_t INDEX_LO, size_t INDEX_HI) - This function returns the index i of the array X_ARRAY such that - 'x_array[i] <= x < x_array[i+1]'. The index is searched for in the - range [INDEX_LO,INDEX_HI]. An inline version of this function is - used when 'HAVE_INLINE' is defined. + -- Data Type: gsl_siman_metric_t + This function type should return the distance between two + configurations XP and YP. - -- Function: gsl_interp_accel * gsl_interp_accel_alloc (void) - This function returns a pointer to an accelerator object, which is - a kind of iterator for interpolation lookups. It tracks the state - of lookups, thus allowing for application of various acceleration - strategies. + double (*gsl_siman_metric_t) (void *xp, void *yp) - -- Function: size_t gsl_interp_accel_find (gsl_interp_accel * A, const - double X_ARRAY[], size_t SIZE, double X) - This function performs a lookup action on the data array X_ARRAY of - size SIZE, using the given accelerator A. This is how lookups are - performed during evaluation of an interpolation. The function - returns an index i such that 'x_array[i] <= x < x_array[i+1]'. An - inline version of this function is used when 'HAVE_INLINE' is - defined. + -- Data Type: gsl_siman_print_t + This function type should print the contents of the configuration + XP. - -- Function: int gsl_interp_accel_reset (gsl_interp_accel * ACC); - This function reinitializes the accelerator object ACC. It should - be used when the cached information is no longer applicable--for - example, when switching to a new dataset. + void (*gsl_siman_print_t) (void *xp) - -- Function: void gsl_interp_accel_free (gsl_interp_accel* ACC) - This function frees the accelerator object ACC. + -- Data Type: gsl_siman_copy_t + This function type should copy the configuration SOURCE into DEST. - -File: gsl-ref.info, Node: Evaluation of Interpolating Functions, Next: Higher-level Interface, Prev: Index Look-up and Acceleration, Up: Interpolation + void (*gsl_siman_copy_t) (void *source, void *dest) -27.5 Evaluation of Interpolating Functions -========================================== + -- Data Type: gsl_siman_copy_construct_t + This function type should create a new copy of the configuration + XP. - -- Function: double gsl_interp_eval (const gsl_interp * INTERP, const - double XA[], const double YA[], double X, gsl_interp_accel * - ACC) - -- Function: int gsl_interp_eval_e (const gsl_interp * INTERP, const - double XA[], const double YA[], double X, gsl_interp_accel * - ACC, double * Y) - These functions return the interpolated value of Y for a given - point X, using the interpolation object INTERP, data arrays XA and - YA and the accelerator ACC. When X is outside the range of XA, the - error code 'GSL_EDOM' is returned with a value of 'GSL_NAN' for Y. + void * (*gsl_siman_copy_construct_t) (void *xp) - -- Function: double gsl_interp_eval_deriv (const gsl_interp * INTERP, - const double XA[], const double YA[], double X, - gsl_interp_accel * ACC) - -- Function: int gsl_interp_eval_deriv_e (const gsl_interp * INTERP, - const double XA[], const double YA[], double X, - gsl_interp_accel * ACC, double * D) - These functions return the derivative D of an interpolated function - for a given point X, using the interpolation object INTERP, data - arrays XA and YA and the accelerator ACC. + -- Data Type: gsl_siman_destroy_t + This function type should destroy the configuration XP, freeing its + memory. - -- Function: double gsl_interp_eval_deriv2 (const gsl_interp * INTERP, - const double XA[], const double YA[], double X, - gsl_interp_accel * ACC) - -- Function: int gsl_interp_eval_deriv2_e (const gsl_interp * INTERP, - const double XA[], const double YA[], double X, - gsl_interp_accel * ACC, double * D2) - These functions return the second derivative D2 of an interpolated - function for a given point X, using the interpolation object - INTERP, data arrays XA and YA and the accelerator ACC. + void (*gsl_siman_destroy_t) (void *xp) - -- Function: double gsl_interp_eval_integ (const gsl_interp * INTERP, - const double XA[], const double YA[], double A, double B, - gsl_interp_accel * ACC) - -- Function: int gsl_interp_eval_integ_e (const gsl_interp * INTERP, - const double XA[], const double YA[], double A, double B, - gsl_interp_accel * ACC, double * RESULT) - These functions return the numerical integral RESULT of an - interpolated function over the range [A, B], using the - interpolation object INTERP, data arrays XA and YA and the - accelerator ACC. + -- Data Type: gsl_siman_params_t + These are the parameters that control a run of 'gsl_siman_solve'. + This structure contains all the information needed to control the + search, beyond the energy function, the step function and the + initial guess. - -File: gsl-ref.info, Node: Higher-level Interface, Next: Interpolation Example programs, Prev: Evaluation of Interpolating Functions, Up: Interpolation + 'int n_tries' + The number of points to try for each step. -27.6 Higher-level Interface -=========================== + 'int iters_fixed_T' + The number of iterations at each temperature. -The functions described in the previous sections required the user to -supply pointers to the x and y arrays on each call. The following -functions are equivalent to the corresponding 'gsl_interp' functions but -maintain a copy of this data in the 'gsl_spline' object. This removes -the need to pass both XA and YA as arguments on each evaluation. These -functions are defined in the header file 'gsl_spline.h'. + 'double step_size' + The maximum step size in the random walk. - -- Function: gsl_spline * gsl_spline_alloc (const gsl_interp_type * T, - size_t SIZE) + 'double k, t_initial, mu_t, t_min' + The parameters of the Boltzmann distribution and cooling + schedule. - -- Function: int gsl_spline_init (gsl_spline * SPLINE, const double - XA[], const double YA[], size_t SIZE) + +File: gsl-ref.info, Node: Examples with Simulated Annealing, Next: Simulated Annealing References and Further Reading, Prev: Simulated Annealing functions, Up: Simulated Annealing - -- Function: void gsl_spline_free (gsl_spline * SPLINE) +26.3 Examples +============= - -- Function: const char * gsl_spline_name (const gsl_spline * SPLINE) +The simulated annealing package is clumsy, and it has to be because it +is written in C, for C callers, and tries to be polymorphic at the same +time. But here we provide some examples which can be pasted into your +application with little change and should make things easier. - -- Function: unsigned int gsl_spline_min_size (const gsl_spline * - SPLINE) +* Menu: - -- Function: double gsl_spline_eval (const gsl_spline * SPLINE, double - X, gsl_interp_accel * ACC) - -- Function: int gsl_spline_eval_e (const gsl_spline * SPLINE, double - X, gsl_interp_accel * ACC, double * Y) +* Trivial example:: +* Traveling Salesman Problem:: - -- Function: double gsl_spline_eval_deriv (const gsl_spline * SPLINE, - double X, gsl_interp_accel * ACC) - -- Function: int gsl_spline_eval_deriv_e (const gsl_spline * SPLINE, - double X, gsl_interp_accel * ACC, double * D) + +File: gsl-ref.info, Node: Trivial example, Next: Traveling Salesman Problem, Up: Examples with Simulated Annealing - -- Function: double gsl_spline_eval_deriv2 (const gsl_spline * SPLINE, - double X, gsl_interp_accel * ACC) - -- Function: int gsl_spline_eval_deriv2_e (const gsl_spline * SPLINE, - double X, gsl_interp_accel * ACC, double * D2) +26.3.1 Trivial example +---------------------- - -- Function: double gsl_spline_eval_integ (const gsl_spline * SPLINE, - double A, double B, gsl_interp_accel * ACC) - -- Function: int gsl_spline_eval_integ_e (const gsl_spline * SPLINE, - double A, double B, gsl_interp_accel * ACC, double * RESULT) +The first example, in one dimensional Cartesian space, sets up an energy +function which is a damped sine wave; this has many local minima, but +only one global minimum, somewhere between 1.0 and 1.5. The initial +guess given is 15.5, which is several local minima away from the global +minimum. - -File: gsl-ref.info, Node: Interpolation Example programs, Next: Interpolation References and Further Reading, Prev: Higher-level Interface, Up: Interpolation + #include + #include + #include + #include -27.7 Examples -============= + /* set up parameters for this simulated annealing run */ -The following program demonstrates the use of the interpolation and -spline functions. It computes a cubic spline interpolation of the -10-point dataset (x_i, y_i) where x_i = i + \sin(i)/2 and y_i = i + -\cos(i^2) for i = 0 \dots 9. + /* how many points do we try before stepping */ + #define N_TRIES 200 - #include - #include - #include - #include - #include + /* how many iterations for each T? */ + #define ITERS_FIXED_T 1000 - int - main (void) - { - int i; - double xi, yi, x[10], y[10]; + /* max step size in random walk */ + #define STEP_SIZE 1.0 - printf ("#m=0,S=2\n"); + /* Boltzmann constant */ + #define K 1.0 - for (i = 0; i < 10; i++) - { - x[i] = i + 0.5 * sin (i); - y[i] = i + cos (i * i); - printf ("%g %g\n", x[i], y[i]); - } + /* initial temperature */ + #define T_INITIAL 0.008 - printf ("#m=1,S=0\n"); + /* damping factor for temperature */ + #define MU_T 1.003 + #define T_MIN 2.0e-6 - { - gsl_interp_accel *acc - = gsl_interp_accel_alloc (); - gsl_spline *spline - = gsl_spline_alloc (gsl_interp_cspline, 10); + gsl_siman_params_t params + = {N_TRIES, ITERS_FIXED_T, STEP_SIZE, + K, T_INITIAL, MU_T, T_MIN}; - gsl_spline_init (spline, x, y, 10); + /* now some functions to test in one dimension */ + double E1(void *xp) + { + double x = * ((double *) xp); - for (xi = x[0]; xi < x[9]; xi += 0.01) - { - yi = gsl_spline_eval (spline, xi, acc); - printf ("%g %g\n", xi, yi); - } - gsl_spline_free (spline); - gsl_interp_accel_free (acc); - } - return 0; + return exp(-pow((x-1.0),2.0))*sin(8*x); } -The output is designed to be used with the GNU plotutils 'graph' -program, + double M1(void *xp, void *yp) + { + double x = *((double *) xp); + double y = *((double *) yp); - $ ./a.out > interp.dat - $ graph -T ps < interp.dat > interp.ps + return fabs(x - y); + } -The result shows a smooth interpolation of the original points. The -interpolation method can be changed simply by varying the first argument -of 'gsl_spline_alloc'. + void S1(const gsl_rng * r, void *xp, double step_size) + { + double old_x = *((double *) xp); + double new_x; - The next program demonstrates a periodic cubic spline with 4 data -points. Note that the first and last points must be supplied with the -same y-value for a periodic spline. + double u = gsl_rng_uniform(r); + new_x = u * 2 * step_size - step_size + old_x; - #include - #include - #include - #include - #include + memcpy(xp, &new_x, sizeof(new_x)); + } - int - main (void) + void P1(void *xp) { - int N = 4; - double x[4] = {0.00, 0.10, 0.27, 0.30}; - double y[4] = {0.15, 0.70, -0.10, 0.15}; - /* Note: y[0] == y[3] for periodic data */ + printf ("%12g", *((double *) xp)); + } - gsl_interp_accel *acc = gsl_interp_accel_alloc (); - const gsl_interp_type *t = gsl_interp_cspline_periodic; - gsl_spline *spline = gsl_spline_alloc (t, N); + int + main(void) + { + const gsl_rng_type * T; + gsl_rng * r; - int i; double xi, yi; + double x_initial = 15.5; - printf ("#m=0,S=5\n"); - for (i = 0; i < N; i++) - { - printf ("%g %g\n", x[i], y[i]); - } + gsl_rng_env_setup(); - printf ("#m=1,S=0\n"); - gsl_spline_init (spline, x, y, N); + T = gsl_rng_default; + r = gsl_rng_alloc(T); - for (i = 0; i <= 100; i++) - { - xi = (1 - i / 100.0) * x[0] + (i / 100.0) * x[N-1]; - yi = gsl_spline_eval (spline, xi, acc); - printf ("%g %g\n", xi, yi); - } + gsl_siman_solve(r, &x_initial, E1, S1, M1, P1, + NULL, NULL, NULL, + sizeof(double), params); - gsl_spline_free (spline); - gsl_interp_accel_free (acc); + gsl_rng_free (r); return 0; } - The output can be plotted with GNU 'graph'. - - $ ./a.out > interp.dat - $ graph -T ps < interp.dat > interp.ps + Here are a couple of plots that are generated by running 'siman_test' +in the following way: -The result shows a periodic interpolation of the original points. The -slope of the fitted curve is the same at the beginning and end of the -data, and the second derivative is also. + $ ./siman_test | awk '!/^#/ {print $1, $4}' + | graph -y 1.34 1.4 -W0 -X generation -Y position + | plot -Tps > siman-test.eps + $ ./siman_test | awk '!/^#/ {print $1, $5}' + | graph -y -0.88 -0.83 -W0 -X generation -Y energy + | plot -Tps > siman-energy.eps  -File: gsl-ref.info, Node: Interpolation References and Further Reading, Prev: Interpolation Example programs, Up: Interpolation +File: gsl-ref.info, Node: Traveling Salesman Problem, Prev: Trivial example, Up: Examples with Simulated Annealing -27.8 References and Further Reading -=================================== +26.3.2 Traveling Salesman Problem +--------------------------------- -Descriptions of the interpolation algorithms and further references can -be found in the following books: +The TSP ("Traveling Salesman Problem") is the classic combinatorial +optimization problem. I have provided a very simple version of it, +based on the coordinates of twelve cities in the southwestern United +States. This should maybe be called the "Flying Salesman Problem", +since I am using the great-circle distance between cities, rather than +the driving distance. Also: I assume the earth is a sphere, so I don't +use geoid distances. - C.W. Ueberhuber, 'Numerical Computation (Volume 1), Chapter 9 - "Interpolation"', Springer (1997), ISBN 3-540-62058-3. + The 'gsl_siman_solve' routine finds a route which is 3490.62 +Kilometers long; this is confirmed by an exhaustive search of all +possible routes with the same initial city. - D.M. Young, R.T. Gregory 'A Survey of Numerical Mathematics (Volume - 1), Chapter 6.8', Dover (1988), ISBN 0-486-65691-8. + The full code can be found in 'siman/siman_tsp.c', but I include here +some plots generated in the following way: - -File: gsl-ref.info, Node: Numerical Differentiation, Next: Chebyshev Approximations, Prev: Interpolation, Up: Top + $ ./siman_tsp > tsp.output + $ grep -v "^#" tsp.output + | awk '{print $1, $NF}' + | graph -y 3300 6500 -W0 -X generation -Y distance + -L "TSP - 12 southwest cities" + | plot -Tps > 12-cities.eps + $ grep initial_city_coord tsp.output + | awk '{print $2, $3}' + | graph -X "longitude (- means west)" -Y "latitude" + -L "TSP - initial-order" -f 0.03 -S 1 0.1 + | plot -Tps > initial-route.eps + $ grep final_city_coord tsp.output + | awk '{print $2, $3}' + | graph -X "longitude (- means west)" -Y "latitude" + -L "TSP - final-order" -f 0.03 -S 1 0.1 + | plot -Tps > final-route.eps -28 Numerical Differentiation -**************************** +This is the output showing the initial order of the cities; longitude is +negative, since it is west and I want the plot to look like a map. -The functions described in this chapter compute numerical derivatives by -finite differencing. An adaptive algorithm is used to find the best -choice of finite difference and to estimate the error in the derivative. -These functions are declared in the header file 'gsl_deriv.h'. + # initial coordinates of cities (longitude and latitude) + ###initial_city_coord: -105.95 35.68 Santa Fe + ###initial_city_coord: -112.07 33.54 Phoenix + ###initial_city_coord: -106.62 35.12 Albuquerque + ###initial_city_coord: -103.2 34.41 Clovis + ###initial_city_coord: -107.87 37.29 Durango + ###initial_city_coord: -96.77 32.79 Dallas + ###initial_city_coord: -105.92 35.77 Tesuque + ###initial_city_coord: -107.84 35.15 Grants + ###initial_city_coord: -106.28 35.89 Los Alamos + ###initial_city_coord: -106.76 32.34 Las Cruces + ###initial_city_coord: -108.58 37.35 Cortez + ###initial_city_coord: -108.74 35.52 Gallup + ###initial_city_coord: -105.95 35.68 Santa Fe -* Menu: + The optimal route turns out to be: -* Numerical Differentiation functions:: -* Numerical Differentiation Examples:: -* Numerical Differentiation References:: + # final coordinates of cities (longitude and latitude) + ###final_city_coord: -105.95 35.68 Santa Fe + ###final_city_coord: -103.2 34.41 Clovis + ###final_city_coord: -96.77 32.79 Dallas + ###final_city_coord: -106.76 32.34 Las Cruces + ###final_city_coord: -112.07 33.54 Phoenix + ###final_city_coord: -108.74 35.52 Gallup + ###final_city_coord: -108.58 37.35 Cortez + ###final_city_coord: -107.87 37.29 Durango + ###final_city_coord: -107.84 35.15 Grants + ###final_city_coord: -106.62 35.12 Albuquerque + ###final_city_coord: -106.28 35.89 Los Alamos + ###final_city_coord: -105.92 35.77 Tesuque + ###final_city_coord: -105.95 35.68 Santa Fe + +Here's a plot of the cost function (energy) versus generation (point in +the calculation at which a new temperature is set) for this problem:  -File: gsl-ref.info, Node: Numerical Differentiation functions, Next: Numerical Differentiation Examples, Up: Numerical Differentiation +File: gsl-ref.info, Node: Simulated Annealing References and Further Reading, Prev: Examples with Simulated Annealing, Up: Simulated Annealing -28.1 Functions -============== +26.4 References and Further Reading +=================================== - -- Function: int gsl_deriv_central (const gsl_function * F, double X, - double H, double * RESULT, double * ABSERR) - This function computes the numerical derivative of the function F - at the point X using an adaptive central difference algorithm with - a step-size of H. The derivative is returned in RESULT and an - estimate of its absolute error is returned in ABSERR. +Further information is available in the following book, - The initial value of H is used to estimate an optimal step-size, - based on the scaling of the truncation error and round-off error in - the derivative calculation. The derivative is computed using a - 5-point rule for equally spaced abscissae at x-h, x-h/2, x, x+h/2, - x+h, with an error estimate taken from the difference between the - 5-point rule and the corresponding 3-point rule x-h, x, x+h. Note - that the value of the function at x does not contribute to the - derivative calculation, so only 4-points are actually used. + 'Modern Heuristic Techniques for Combinatorial Problems', Colin R. + Reeves (ed.), McGraw-Hill, 1995 (ISBN 0-07-709239-2). - -- Function: int gsl_deriv_forward (const gsl_function * F, double X, - double H, double * RESULT, double * ABSERR) - This function computes the numerical derivative of the function F - at the point X using an adaptive forward difference algorithm with - a step-size of H. The function is evaluated only at points greater - than X, and never at X itself. The derivative is returned in - RESULT and an estimate of its absolute error is returned in ABSERR. - This function should be used if f(x) has a discontinuity at X, or - is undefined for values less than X. + +File: gsl-ref.info, Node: Ordinary Differential Equations, Next: Interpolation, Prev: Simulated Annealing, Up: Top + +27 Ordinary Differential Equations +********************************** + +This chapter describes functions for solving ordinary differential +equation (ODE) initial value problems. The library provides a variety +of low-level methods, such as Runge-Kutta and Bulirsch-Stoer routines, +and higher-level components for adaptive step-size control. The +components can be combined by the user to achieve the desired solution, +with full access to any intermediate steps. A driver object can be used +as a high level wrapper for easy use of low level functions. - The initial value of H is used to estimate an optimal step-size, - based on the scaling of the truncation error and round-off error in - the derivative calculation. The derivative at x is computed using - an "open" 4-point rule for equally spaced abscissae at x+h/4, - x+h/2, x+3h/4, x+h, with an error estimate taken from the - difference between the 4-point rule and the corresponding 2-point - rule x+h/2, x+h. + These functions are declared in the header file 'gsl_odeiv2.h'. This +is a new interface in version 1.15 and uses the prefix 'gsl_odeiv2' for +all functions. It is recommended over the previous 'gsl_odeiv' +implementation defined in 'gsl_odeiv.h' The old interface has been +retained under the original name for backwards compatibility. - -- Function: int gsl_deriv_backward (const gsl_function * F, double X, - double H, double * RESULT, double * ABSERR) - This function computes the numerical derivative of the function F - at the point X using an adaptive backward difference algorithm with - a step-size of H. The function is evaluated only at points less - than X, and never at X itself. The derivative is returned in - RESULT and an estimate of its absolute error is returned in ABSERR. - This function should be used if f(x) has a discontinuity at X, or - is undefined for values greater than X. +* Menu: - This function is equivalent to calling 'gsl_deriv_forward' with a - negative step-size. +* Defining the ODE System:: +* Stepping Functions:: +* Adaptive Step-size Control:: +* Evolution:: +* Driver:: +* ODE Example programs:: +* ODE References and Further Reading::  -File: gsl-ref.info, Node: Numerical Differentiation Examples, Next: Numerical Differentiation References, Prev: Numerical Differentiation functions, Up: Numerical Differentiation - -28.2 Examples -============= +File: gsl-ref.info, Node: Defining the ODE System, Next: Stepping Functions, Up: Ordinary Differential Equations -The following code estimates the derivative of the function f(x) = -x^{3/2} at x=2 and at x=0. The function f(x) is undefined for x<0 so -the derivative at x=0 is computed using 'gsl_deriv_forward'. +27.1 Defining the ODE System +============================ - #include - #include - #include +The routines solve the general n-dimensional first-order system, - double f (double x, void * params) - { - return pow (x, 1.5); - } + dy_i(t)/dt = f_i(t, y_1(t), ..., y_n(t)) - int - main (void) - { - gsl_function F; - double result, abserr; +for i = 1, \dots, n. The stepping functions rely on the vector of +derivatives f_i and the Jacobian matrix, J_{ij} = df_i(t,y(t)) / dy_j. +A system of equations is defined using the 'gsl_odeiv2_system' datatype. - F.function = &f; - F.params = 0; + -- Data Type: gsl_odeiv2_system + This data type defines a general ODE system with arbitrary + parameters. - printf ("f(x) = x^(3/2)\n"); + 'int (* function) (double t, const double y[], double dydt[], void * params)' + This function should store the vector elements f_i(t,y,params) + in the array DYDT, for arguments (T,Y) and parameters PARAMS. - gsl_deriv_central (&F, 2.0, 1e-8, &result, &abserr); - printf ("x = 2.0\n"); - printf ("f'(x) = %.10f +/- %.10f\n", result, abserr); - printf ("exact = %.10f\n\n", 1.5 * sqrt(2.0)); + The function should return 'GSL_SUCCESS' if the calculation + was completed successfully. Any other return value indicates + an error. A special return value 'GSL_EBADFUNC' causes + 'gsl_odeiv2' routines to immediately stop and return. If + 'function' is modified (for example contents of PARAMS), the + user must call an appropriate reset function + ('gsl_odeiv2_driver_reset', 'gsl_odeiv2_evolve_reset' or + 'gsl_odeiv2_step_reset') before continuing. Use return values + distinct from standard GSL error codes to distinguish your + function as the source of the error. - gsl_deriv_forward (&F, 0.0, 1e-8, &result, &abserr); - printf ("x = 0.0\n"); - printf ("f'(x) = %.10f +/- %.10f\n", result, abserr); - printf ("exact = %.10f\n", 0.0); + 'int (* jacobian) (double t, const double y[], double * dfdy, double dfdt[], void * params);' + This function should store the vector of derivative elements + in the array DFDT and the Jacobian matrix J_{ij} in the array + DFDY, regarded as a row-ordered matrix 'J(i,j) = dfdy[i * + dimension + j]' where 'dimension' is the dimension of the + system. - return 0; - } + Not all of the stepper algorithms of 'gsl_odeiv2' make use of + the Jacobian matrix, so it may not be necessary to provide + this function (the 'jacobian' element of the struct can be + replaced by a null pointer for those algorithms). -Here is the output of the program, + The function should return 'GSL_SUCCESS' if the calculation + was completed successfully. Any other return value indicates + an error. A special return value 'GSL_EBADFUNC' causes + 'gsl_odeiv2' routines to immediately stop and return. If + 'jacobian' is modified (for example contents of PARAMS), the + user must call an appropriate reset function + ('gsl_odeiv2_driver_reset', 'gsl_odeiv2_evolve_reset' or + 'gsl_odeiv2_step_reset') before continuing. Use return values + distinct from standard GSL error codes to distinguish your + function as the source of the error. - $ ./a.out - f(x) = x^(3/2) - x = 2.0 - f'(x) = 2.1213203120 +/- 0.0000004064 - exact = 2.1213203436 + 'size_t dimension;' + This is the dimension of the system of equations. - x = 0.0 - f'(x) = 0.0000000160 +/- 0.0000000339 - exact = 0.0000000000 + 'void * params' + This is a pointer to the arbitrary parameters of the system.  -File: gsl-ref.info, Node: Numerical Differentiation References, Prev: Numerical Differentiation Examples, Up: Numerical Differentiation +File: gsl-ref.info, Node: Stepping Functions, Next: Adaptive Step-size Control, Prev: Defining the ODE System, Up: Ordinary Differential Equations -28.3 References and Further Reading -=================================== +27.2 Stepping Functions +======================= -The algorithms used by these functions are described in the following -sources: +The lowest level components are the "stepping functions" which advance a +solution from time t to t+h for a fixed step-size h and estimate the +resulting local error. - Abramowitz and Stegun, 'Handbook of Mathematical Functions', - Section 25.3.4, and Table 25.5 (Coefficients for Differentiation). + -- Function: gsl_odeiv2_step * gsl_odeiv2_step_alloc (const + gsl_odeiv2_step_type * T, size_t DIM) + This function returns a pointer to a newly allocated instance of a + stepping function of type T for a system of DIM dimensions. Please + note that if you use a stepper method that requires access to a + driver object, it is advisable to use a driver allocation method, + which automatically allocates a stepper, too. - S.D. Conte and Carl de Boor, 'Elementary Numerical Analysis: An - Algorithmic Approach', McGraw-Hill, 1972. + -- Function: int gsl_odeiv2_step_reset (gsl_odeiv2_step * S) + This function resets the stepping function S. It should be used + whenever the next use of S will not be a continuation of a previous + step. - -File: gsl-ref.info, Node: Chebyshev Approximations, Next: Series Acceleration, Prev: Numerical Differentiation, Up: Top + -- Function: void gsl_odeiv2_step_free (gsl_odeiv2_step * S) + This function frees all the memory associated with the stepping + function S. -29 Chebyshev Approximations -*************************** + -- Function: const char * gsl_odeiv2_step_name (const gsl_odeiv2_step * + S) + This function returns a pointer to the name of the stepping + function. For example, -This chapter describes routines for computing Chebyshev approximations -to univariate functions. A Chebyshev approximation is a truncation of -the series f(x) = \sum c_n T_n(x), where the Chebyshev polynomials -T_n(x) = \cos(n \arccos x) provide an orthogonal basis of polynomials on -the interval [-1,1] with the weight function 1 / \sqrt{1-x^2}. The -first few Chebyshev polynomials are, T_0(x) = 1, T_1(x) = x, T_2(x) = 2 -x^2 - 1. For further information see Abramowitz & Stegun, Chapter 22. + printf ("step method is '%s'\n", + gsl_odeiv2_step_name (s)); - The functions described in this chapter are declared in the header -file 'gsl_chebyshev.h'. + would print something like 'step method is 'rkf45''. -* Menu: + -- Function: unsigned int gsl_odeiv2_step_order (const gsl_odeiv2_step + * S) + This function returns the order of the stepping function on the + previous step. The order can vary if the stepping function itself + is adaptive. -* Chebyshev Definitions:: -* Creation and Calculation of Chebyshev Series:: -* Auxiliary Functions for Chebyshev Series:: -* Chebyshev Series Evaluation:: -* Derivatives and Integrals:: -* Chebyshev Approximation Examples:: -* Chebyshev Approximation References and Further Reading:: + -- Function: int gsl_odeiv2_step_set_driver (gsl_odeiv2_step * S, const + gsl_odeiv2_driver * D) + This function sets a pointer of the driver object D for stepper S, + to allow the stepper to access control (and evolve) object through + the driver object. This is a requirement for some steppers, to get + the desired error level for internal iteration of stepper. + Allocation of a driver object calls this function automatically. - -File: gsl-ref.info, Node: Chebyshev Definitions, Next: Creation and Calculation of Chebyshev Series, Up: Chebyshev Approximations + -- Function: int gsl_odeiv2_step_apply (gsl_odeiv2_step * S, double T, + double H, double Y[], double YERR[], const double DYDT_IN[], + double DYDT_OUT[], const gsl_odeiv2_system * SYS) + This function applies the stepping function S to the system of + equations defined by SYS, using the step-size H to advance the + system from time T and state Y to time T+H. The new state of the + system is stored in Y on output, with an estimate of the absolute + error in each component stored in YERR. If the argument DYDT_IN is + not null it should point an array containing the derivatives for + the system at time T on input. This is optional as the derivatives + will be computed internally if they are not provided, but allows + the reuse of existing derivative information. On output the new + derivatives of the system at time T+H will be stored in DYDT_OUT if + it is not null. -29.1 Definitions -================ + The stepping function returns 'GSL_FAILURE' if it is unable to + compute the requested step. Also, if the user-supplied functions + defined in the system SYS return a status other than 'GSL_SUCCESS' + the step will be aborted. In that case, the elements of Y will be + restored to their pre-step values and the error code from the + user-supplied function will be returned. Failure may be due to a + singularity in the system or too large step-size H. In that case + the step should be attempted again with a smaller step-size, e.g. + H/2. -A Chebyshev series is stored using the following structure, + If the driver object is not appropriately set via + 'gsl_odeiv2_step_set_driver' for those steppers that need it, the + stepping function returns 'GSL_EFAULT'. If the user-supplied + functions defined in the system SYS returns 'GSL_EBADFUNC', the + function returns immediately with the same return code. In this + case the user must call 'gsl_odeiv2_step_reset' before calling this + function again. - typedef struct - { - double * c; /* coefficients c[0] .. c[order] */ - int order; /* order of expansion */ - double a; /* lower interval point */ - double b; /* upper interval point */ - ... - } gsl_cheb_series + The following algorithms are available, -The approximation is made over the range [a,b] using ORDER+1 terms, -including the coefficient c[0]. The series is computed using the -following convention, + -- Step Type: gsl_odeiv2_step_rk2 + Explicit embedded Runge-Kutta (2, 3) method. - f(x) = (c_0 / 2) + \sum_{n=1} c_n T_n(x) + -- Step Type: gsl_odeiv2_step_rk4 + Explicit 4th order (classical) Runge-Kutta. Error estimation is + carried out by the step doubling method. For more efficient + estimate of the error, use the embedded methods described below. -which is needed when accessing the coefficients directly. + -- Step Type: gsl_odeiv2_step_rkf45 + Explicit embedded Runge-Kutta-Fehlberg (4, 5) method. This method + is a good general-purpose integrator. - -File: gsl-ref.info, Node: Creation and Calculation of Chebyshev Series, Next: Auxiliary Functions for Chebyshev Series, Prev: Chebyshev Definitions, Up: Chebyshev Approximations + -- Step Type: gsl_odeiv2_step_rkck + Explicit embedded Runge-Kutta Cash-Karp (4, 5) method. -29.2 Creation and Calculation of Chebyshev Series -================================================= + -- Step Type: gsl_odeiv2_step_rk8pd + Explicit embedded Runge-Kutta Prince-Dormand (8, 9) method. - -- Function: gsl_cheb_series * gsl_cheb_alloc (const size_t N) - This function allocates space for a Chebyshev series of order N and - returns a pointer to a new 'gsl_cheb_series' struct. + -- Step Type: gsl_odeiv2_step_rk1imp + Implicit Gaussian first order Runge-Kutta. Also known as implicit + Euler or backward Euler method. Error estimation is carried out by + the step doubling method. This algorithm requires the Jacobian and + access to the driver object via 'gsl_odeiv2_step_set_driver'. + + -- Step Type: gsl_odeiv2_step_rk2imp + Implicit Gaussian second order Runge-Kutta. Also known as implicit + mid-point rule. Error estimation is carried out by the step + doubling method. This stepper requires the Jacobian and access to + the driver object via 'gsl_odeiv2_step_set_driver'. + + -- Step Type: gsl_odeiv2_step_rk4imp + Implicit Gaussian 4th order Runge-Kutta. Error estimation is + carried out by the step doubling method. This algorithm requires + the Jacobian and access to the driver object via + 'gsl_odeiv2_step_set_driver'. - -- Function: void gsl_cheb_free (gsl_cheb_series * CS) - This function frees a previously allocated Chebyshev series CS. + -- Step Type: gsl_odeiv2_step_bsimp + Implicit Bulirsch-Stoer method of Bader and Deuflhard. The method + is generally suitable for stiff problems. This stepper requires + the Jacobian. - -- Function: int gsl_cheb_init (gsl_cheb_series * CS, const - gsl_function * F, const double A, const double B) - This function computes the Chebyshev approximation CS for the - function F over the range (a,b) to the previously specified order. - The computation of the Chebyshev approximation is an O(n^2) - process, and requires n function evaluations. + -- Step Type: gsl_odeiv2_step_msadams + A variable-coefficient linear multistep Adams method in Nordsieck + form. This stepper uses explicit Adams-Bashforth (predictor) and + implicit Adams-Moulton (corrector) methods in P(EC)^m functional + iteration mode. Method order varies dynamically between 1 and 12. + This stepper requires the access to the driver object via + 'gsl_odeiv2_step_set_driver'. + + -- Step Type: gsl_odeiv2_step_msbdf + A variable-coefficient linear multistep backward differentiation + formula (BDF) method in Nordsieck form. This stepper uses the + explicit BDF formula as predictor and implicit BDF formula as + corrector. A modified Newton iteration method is used to solve the + system of non-linear equations. Method order varies dynamically + between 1 and 5. The method is generally suitable for stiff + problems. This stepper requires the Jacobian and the access to the + driver object via 'gsl_odeiv2_step_set_driver'.  -File: gsl-ref.info, Node: Auxiliary Functions for Chebyshev Series, Next: Chebyshev Series Evaluation, Prev: Creation and Calculation of Chebyshev Series, Up: Chebyshev Approximations +File: gsl-ref.info, Node: Adaptive Step-size Control, Next: Evolution, Prev: Stepping Functions, Up: Ordinary Differential Equations -29.3 Auxiliary Functions -======================== +27.3 Adaptive Step-size Control +=============================== -The following functions provide information about an existing Chebyshev -series. +The control function examines the proposed change to the solution +produced by a stepping function and attempts to determine the optimal +step-size for a user-specified level of error. - -- Function: size_t gsl_cheb_order (const gsl_cheb_series * CS) - This function returns the order of Chebyshev series CS. + -- Function: gsl_odeiv2_control * gsl_odeiv2_control_standard_new + (double EPS_ABS, double EPS_REL, double A_Y, double A_DYDT) + The standard control object is a four parameter heuristic based on + absolute and relative errors EPS_ABS and EPS_REL, and scaling + factors A_Y and A_DYDT for the system state y(t) and derivatives + y'(t) respectively. - -- Function: size_t gsl_cheb_size (const gsl_cheb_series * CS) - -- Function: double * gsl_cheb_coeffs (const gsl_cheb_series * CS) - These functions return the size of the Chebyshev coefficient array - 'c[]' and a pointer to its location in memory for the Chebyshev - series CS. + The step-size adjustment procedure for this method begins by + computing the desired error level D_i for each component, - -File: gsl-ref.info, Node: Chebyshev Series Evaluation, Next: Derivatives and Integrals, Prev: Auxiliary Functions for Chebyshev Series, Up: Chebyshev Approximations + D_i = eps_abs + eps_rel * (a_y |y_i| + a_dydt h |y\prime_i|) -29.4 Chebyshev Series Evaluation -================================ + and comparing it with the observed error E_i = |yerr_i|. If the + observed error E exceeds the desired error level D by more than 10% + for any component then the method reduces the step-size by an + appropriate factor, - -- Function: double gsl_cheb_eval (const gsl_cheb_series * CS, double - X) - This function evaluates the Chebyshev series CS at a given point X. + h_new = h_old * S * (E/D)^(-1/q) - -- Function: int gsl_cheb_eval_err (const gsl_cheb_series * CS, const - double X, double * RESULT, double * ABSERR) - This function computes the Chebyshev series CS at a given point X, - estimating both the series RESULT and its absolute error ABSERR. - The error estimate is made from the first neglected term in the - series. + where q is the consistency order of the method (e.g. q=4 for 4(5) + embedded RK), and S is a safety factor of 0.9. The ratio E/D is + taken to be the maximum of the ratios E_i/D_i. - -- Function: double gsl_cheb_eval_n (const gsl_cheb_series * CS, size_t - ORDER, double X) - This function evaluates the Chebyshev series CS at a given point X, - to (at most) the given order ORDER. + If the observed error E is less than 50% of the desired error level + D for the maximum ratio E_i/D_i then the algorithm takes the + opportunity to increase the step-size to bring the error in line + with the desired level, - -- Function: int gsl_cheb_eval_n_err (const gsl_cheb_series * CS, const - size_t ORDER, const double X, double * RESULT, double * - ABSERR) - This function evaluates a Chebyshev series CS at a given point X, - estimating both the series RESULT and its absolute error ABSERR, to - (at most) the given order ORDER. The error estimate is made from - the first neglected term in the series. + h_new = h_old * S * (E/D)^(-1/(q+1)) - -File: gsl-ref.info, Node: Derivatives and Integrals, Next: Chebyshev Approximation Examples, Prev: Chebyshev Series Evaluation, Up: Chebyshev Approximations + This encompasses all the standard error scaling methods. To avoid + uncontrolled changes in the stepsize, the overall scaling factor is + limited to the range 1/5 to 5. -29.5 Derivatives and Integrals -============================== + -- Function: gsl_odeiv2_control * gsl_odeiv2_control_y_new (double + EPS_ABS, double EPS_REL) + This function creates a new control object which will keep the + local error on each step within an absolute error of EPS_ABS and + relative error of EPS_REL with respect to the solution y_i(t). + This is equivalent to the standard control object with A_Y=1 and + A_DYDT=0. -The following functions allow a Chebyshev series to be differentiated or -integrated, producing a new Chebyshev series. Note that the error -estimate produced by evaluating the derivative series will be -underestimated due to the contribution of higher order terms being -neglected. + -- Function: gsl_odeiv2_control * gsl_odeiv2_control_yp_new (double + EPS_ABS, double EPS_REL) + This function creates a new control object which will keep the + local error on each step within an absolute error of EPS_ABS and + relative error of EPS_REL with respect to the derivatives of the + solution y'_i(t). This is equivalent to the standard control + object with A_Y=0 and A_DYDT=1. - -- Function: int gsl_cheb_calc_deriv (gsl_cheb_series * DERIV, const - gsl_cheb_series * CS) - This function computes the derivative of the series CS, storing the - derivative coefficients in the previously allocated DERIV. The two - series CS and DERIV must have been allocated with the same order. + -- Function: gsl_odeiv2_control * gsl_odeiv2_control_scaled_new (double + EPS_ABS, double EPS_REL, double A_Y, double A_DYDT, const + double SCALE_ABS[], size_t DIM) + This function creates a new control object which uses the same + algorithm as 'gsl_odeiv2_control_standard_new' but with an absolute + error which is scaled for each component by the array SCALE_ABS. + The formula for D_i for this control object is, - -- Function: int gsl_cheb_calc_integ (gsl_cheb_series * INTEG, const - gsl_cheb_series * CS) - This function computes the integral of the series CS, storing the - integral coefficients in the previously allocated INTEG. The two - series CS and INTEG must have been allocated with the same order. - The lower limit of the integration is taken to be the left hand end - of the range A. + D_i = eps_abs * s_i + eps_rel * (a_y |y_i| + a_dydt h |y\prime_i|) - -File: gsl-ref.info, Node: Chebyshev Approximation Examples, Next: Chebyshev Approximation References and Further Reading, Prev: Derivatives and Integrals, Up: Chebyshev Approximations + where s_i is the i-th component of the array SCALE_ABS. The same + error control heuristic is used by the Matlab ODE suite. -29.6 Examples -============= + -- Function: gsl_odeiv2_control * gsl_odeiv2_control_alloc (const + gsl_odeiv2_control_type * T) + This function returns a pointer to a newly allocated instance of a + control function of type T. This function is only needed for + defining new types of control functions. For most purposes the + standard control functions described above should be sufficient. -The following example program computes Chebyshev approximations to a -step function. This is an extremely difficult approximation to make, -due to the discontinuity, and was chosen as an example where -approximation error is visible. For smooth functions the Chebyshev -approximation converges extremely rapidly and errors would not be -visible. + -- Function: int gsl_odeiv2_control_init (gsl_odeiv2_control * C, + double EPS_ABS, double EPS_REL, double A_Y, double A_DYDT) + This function initializes the control function C with the + parameters EPS_ABS (absolute error), EPS_REL (relative error), A_Y + (scaling factor for y) and A_DYDT (scaling factor for derivatives). - #include - #include - #include + -- Function: void gsl_odeiv2_control_free (gsl_odeiv2_control * C) + This function frees all the memory associated with the control + function C. - double - f (double x, void *p) - { - if (x < 0.5) - return 0.25; - else - return 0.75; - } + -- Function: int gsl_odeiv2_control_hadjust (gsl_odeiv2_control * C, + gsl_odeiv2_step * S, const double Y[], const double YERR[], + const double DYDT[], double * H) + This function adjusts the step-size H using the control function C, + and the current values of Y, YERR and DYDT. The stepping function + STEP is also needed to determine the order of the method. If the + error in the y-values YERR is found to be too large then the + step-size H is reduced and the function returns + 'GSL_ODEIV_HADJ_DEC'. If the error is sufficiently small then H + may be increased and 'GSL_ODEIV_HADJ_INC' is returned. The + function returns 'GSL_ODEIV_HADJ_NIL' if the step-size is + unchanged. The goal of the function is to estimate the largest + step-size which satisfies the user-specified accuracy requirements + for the current point. - int - main (void) - { - int i, n = 10000; + -- Function: const char * gsl_odeiv2_control_name (const + gsl_odeiv2_control * C) + This function returns a pointer to the name of the control + function. For example, - gsl_cheb_series *cs = gsl_cheb_alloc (40); + printf ("control method is '%s'\n", + gsl_odeiv2_control_name (c)); - gsl_function F; + would print something like 'control method is 'standard'' - F.function = f; - F.params = 0; + -- Function: int gsl_odeiv2_control_errlevel (gsl_odeiv2_control * C, + const double Y, const double DYDT, const double H, const + size_t IND, double * ERRLEV) + This function calculates the desired error level of the IND-th + component to ERRLEV. It requires the value (Y) and value of the + derivative (DYDT) of the component, and the current step size H. - gsl_cheb_init (cs, &F, 0.0, 1.0); + -- Function: int gsl_odeiv2_control_set_driver (gsl_odeiv2_control * C, + const gsl_odeiv2_driver * D) + This function sets a pointer of the driver object D for control + object C. - for (i = 0; i < n; i++) - { - double x = i / (double)n; - double r10 = gsl_cheb_eval_n (cs, 10, x); - double r40 = gsl_cheb_eval (cs, x); - printf ("%g %g %g %g\n", - x, GSL_FN_EVAL (&F, x), r10, r40); - } + +File: gsl-ref.info, Node: Evolution, Next: Driver, Prev: Adaptive Step-size Control, Up: Ordinary Differential Equations - gsl_cheb_free (cs); +27.4 Evolution +============== - return 0; - } +The evolution function combines the results of a stepping function and +control function to reliably advance the solution forward one step using +an acceptable step-size. -The output from the program gives the original function, 10-th order -approximation and 40-th order approximation, all sampled at intervals of -0.001 in x. + -- Function: gsl_odeiv2_evolve * gsl_odeiv2_evolve_alloc (size_t DIM) + This function returns a pointer to a newly allocated instance of an + evolution function for a system of DIM dimensions. - -File: gsl-ref.info, Node: Chebyshev Approximation References and Further Reading, Prev: Chebyshev Approximation Examples, Up: Chebyshev Approximations + -- Function: int gsl_odeiv2_evolve_apply (gsl_odeiv2_evolve * E, + gsl_odeiv2_control * CON, gsl_odeiv2_step * STEP, const + gsl_odeiv2_system * SYS, double * T, double T1, double * H, + double Y[]) + This function advances the system (E, SYS) from time T and position + Y using the stepping function STEP. The new time and position are + stored in T and Y on output. -29.7 References and Further Reading -=================================== + The initial step-size is taken as H. The control function CON is + applied to check whether the local error estimated by the stepping + function STEP using step-size H exceeds the required error + tolerance. If the error is too high, the step is retried by + calling STEP with a decreased step-size. This process is continued + until an acceptable step-size is found. An estimate of the local + error for the step can be obtained from the components of the array + 'E->yerr[]'. -The following paper describes the use of Chebyshev series, + If the user-supplied functions defined in the system SYS returns + 'GSL_EBADFUNC', the function returns immediately with the same + return code. In this case the user must call + 'gsl_odeiv2_step_reset' and 'gsl_odeiv2_evolve_reset' before + calling this function again. - R. Broucke, "Ten Subroutines for the Manipulation of Chebyshev - Series [C1] (Algorithm 446)". 'Communications of the ACM' 16(4), - 254-256 (1973) + Otherwise, if the user-supplied functions defined in the system SYS + or the stepping function STEP return a status other than + 'GSL_SUCCESS', the step is retried with a decreased step-size. If + the step-size decreases below machine precision, a status of + 'GSL_FAILURE' is returned if the user functions returned + 'GSL_SUCCESS'. Otherwise the value returned by user function is + returned. If no acceptable step can be made, T and Y will be + restored to their pre-step values and H contains the final + attempted step-size. - -File: gsl-ref.info, Node: Series Acceleration, Next: Wavelet Transforms, Prev: Chebyshev Approximations, Up: Top + If the step is successful the function returns a suggested + step-size for the next step in H. The maximum time T1 is + guaranteed not to be exceeded by the time-step. On the final + time-step the value of T will be set to T1 exactly. -30 Series Acceleration -********************** + -- Function: int gsl_odeiv2_evolve_apply_fixed_step (gsl_odeiv2_evolve + * E, gsl_odeiv2_control * CON, gsl_odeiv2_step * STEP, const + gsl_odeiv2_system * SYS, double * T, const double H, double + Y[]) + This function advances the ODE-system (E, SYS, CON) from time T and + position Y using the stepping function STEP by a specified step + size H. If the local error estimated by the stepping function + exceeds the desired error level, the step is not taken and the + function returns 'GSL_FAILURE'. Otherwise the value returned by + user function is returned. -The functions described in this chapter accelerate the convergence of a -series using the Levin u-transform. This method takes a small number of -terms from the start of a series and uses a systematic approximation to -compute an extrapolated value and an estimate of its error. The -u-transform works for both convergent and divergent series, including -asymptotic series. + -- Function: int gsl_odeiv2_evolve_reset (gsl_odeiv2_evolve * E) + This function resets the evolution function E. It should be used + whenever the next use of E will not be a continuation of a previous + step. - These functions are declared in the header file 'gsl_sum.h'. + -- Function: void gsl_odeiv2_evolve_free (gsl_odeiv2_evolve * E) + This function frees all the memory associated with the evolution + function E. -* Menu: + -- Function: int gsl_odeiv2_evolve_set_driver (gsl_odeiv2_evolve * E, + const gsl_odeiv2_driver * D) + This function sets a pointer of the driver object D for evolve + object E. -* Acceleration functions:: -* Acceleration functions without error estimation:: -* Example of accelerating a series:: -* Series Acceleration References:: + If a system has discontinuous changes in the derivatives at known +points, it is advisable to evolve the system between each discontinuity +in sequence. For example, if a step-change in an external driving force +occurs at times t_a, t_b and t_c then evolution should be carried out +over the ranges (t_0,t_a), (t_a,t_b), (t_b,t_c), and (t_c,t_1) +separately and not directly over the range (t_0,t_1).  -File: gsl-ref.info, Node: Acceleration functions, Next: Acceleration functions without error estimation, Up: Series Acceleration - -30.1 Acceleration functions -=========================== +File: gsl-ref.info, Node: Driver, Next: ODE Example programs, Prev: Evolution, Up: Ordinary Differential Equations -The following functions compute the full Levin u-transform of a series -with its error estimate. The error estimate is computed by propagating -rounding errors from each term through to the final extrapolation. +27.5 Driver +=========== - These functions are intended for summing analytic series where each -term is known to high accuracy, and the rounding errors are assumed to -originate from finite precision. They are taken to be relative errors -of order 'GSL_DBL_EPSILON' for each term. +The driver object is a high level wrapper that combines the evolution, +control and stepper objects for easy use. - The calculation of the error in the extrapolated value is an O(N^2) -process, which is expensive in time and memory. A faster but less -reliable method which estimates the error from the convergence of the -extrapolated value is described in the next section. For the method -described here a full table of intermediate values and derivatives -through to O(N) must be computed and stored, but this does give a -reliable error estimate. + -- Function: gsl_odeiv2_driver * gsl_odeiv2_driver_alloc_y_new (const + gsl_odeiv2_system * SYS, const gsl_odeiv2_step_type * T, const + double HSTART, const double EPSABS, const double EPSREL) + -- Function: gsl_odeiv2_driver * gsl_odeiv2_driver_alloc_yp_new (const + gsl_odeiv2_system * SYS, const gsl_odeiv2_step_type * T, const + double HSTART, const double EPSABS, const double EPSREL) + -- Function: gsl_odeiv2_driver * gsl_odeiv2_driver_alloc_standard_new + (const gsl_odeiv2_system * SYS, const gsl_odeiv2_step_type * + T, const double HSTART, const double EPSABS, const double + EPSREL, const double A_Y, const double A_DYDT) + -- Function: gsl_odeiv2_driver * gsl_odeiv2_driver_alloc_scaled_new + (const gsl_odeiv2_system * SYS, const gsl_odeiv2_step_type * + T, const double HSTART, const double EPSABS, const double + EPSREL, const double A_Y, const double A_DYDT, const double + SCALE_ABS[]) + These functions return a pointer to a newly allocated instance of a + driver object. The functions automatically allocate and initialise + the evolve, control and stepper objects for ODE system SYS using + stepper type T. The initial step size is given in HSTART. The + rest of the arguments follow the syntax and semantics of the + control functions with same name ('gsl_odeiv2_control_*_new'). - -- Function: gsl_sum_levin_u_workspace * gsl_sum_levin_u_alloc (size_t - N) - This function allocates a workspace for a Levin u-transform of N - terms. The size of the workspace is O(2n^2 + 3n). + -- Function: int gsl_odeiv2_driver_set_hmin (gsl_odeiv2_driver * D, + const double HMIN) + The function sets a minimum for allowed step size HMIN for driver + D. Default value is 0. - -- Function: void gsl_sum_levin_u_free (gsl_sum_levin_u_workspace * W) - This function frees the memory associated with the workspace W. + -- Function: int gsl_odeiv2_driver_set_hmax (gsl_odeiv2_driver * D, + const double HMAX) + The function sets a maximum for allowed step size HMAX for driver + D. Default value is 'GSL_DBL_MAX'. - -- Function: int gsl_sum_levin_u_accel (const double * ARRAY, size_t - ARRAY_SIZE, gsl_sum_levin_u_workspace * W, double * SUM_ACCEL, - double * ABSERR) - This function takes the terms of a series in ARRAY of size - ARRAY_SIZE and computes the extrapolated limit of the series using - a Levin u-transform. Additional working space must be provided in - W. The extrapolated sum is stored in SUM_ACCEL, with an estimate - of the absolute error stored in ABSERR. The actual term-by-term - sum is returned in 'w->sum_plain'. The algorithm calculates the - truncation error (the difference between two successive - extrapolations) and round-off error (propagated from the individual - terms) to choose an optimal number of terms for the extrapolation. - All the terms of the series passed in through ARRAY should be - non-zero. + -- Function: int gsl_odeiv2_driver_set_nmax (gsl_odeiv2_driver * D, + const unsigned long int NMAX) + The function sets a maximum for allowed number of steps NMAX for + driver D. Default value of 0 sets no limit for steps. - -File: gsl-ref.info, Node: Acceleration functions without error estimation, Next: Example of accelerating a series, Prev: Acceleration functions, Up: Series Acceleration + -- Function: int gsl_odeiv2_driver_apply (gsl_odeiv2_driver * D, double + * T, const double T1, double Y[]) + This function evolves the driver system D from T to T1. Initially + vector Y should contain the values of dependent variables at point + T. If the function is unable to complete the calculation, an error + code from 'gsl_odeiv2_evolve_apply' is returned, and T and Y + contain the values from last successful step. -30.2 Acceleration functions without error estimation -==================================================== + If maximum number of steps is reached, a value of 'GSL_EMAXITER' is + returned. If the step size drops below minimum value, the function + returns with 'GSL_ENOPROG'. If the user-supplied functions defined + in the system SYS returns 'GSL_EBADFUNC', the function returns + immediately with the same return code. In this case the user must + call 'gsl_odeiv2_driver_reset' before calling this function again. -The functions described in this section compute the Levin u-transform of -series and attempt to estimate the error from the "truncation error" in -the extrapolation, the difference between the final two approximations. -Using this method avoids the need to compute an intermediate table of -derivatives because the error is estimated from the behavior of the -extrapolated value itself. Consequently this algorithm is an O(N) -process and only requires O(N) terms of storage. If the series -converges sufficiently fast then this procedure can be acceptable. It -is appropriate to use this method when there is a need to compute many -extrapolations of series with similar convergence properties at -high-speed. For example, when numerically integrating a function -defined by a parameterized series where the parameter varies only -slightly. A reliable error estimate should be computed first using the -full algorithm described above in order to verify the consistency of the -results. + -- Function: int gsl_odeiv2_driver_apply_fixed_step (gsl_odeiv2_driver + * D, double * T, const double H, const unsigned long int N, + double Y[]) + This function evolves the driver system D from T with N steps of + size H. If the function is unable to complete the calculation, an + error code from 'gsl_odeiv2_evolve_apply_fixed_step' is returned, + and T and Y contain the values from last successful step. - -- Function: gsl_sum_levin_utrunc_workspace * - gsl_sum_levin_utrunc_alloc (size_t N) - This function allocates a workspace for a Levin u-transform of N - terms, without error estimation. The size of the workspace is - O(3n). + -- Function: int gsl_odeiv2_driver_reset (gsl_odeiv2_driver * D) + This function resets the evolution and stepper objects. - -- Function: void gsl_sum_levin_utrunc_free - (gsl_sum_levin_utrunc_workspace * W) - This function frees the memory associated with the workspace W. + -- Function: int gsl_odeiv2_driver_reset_hstart (gsl_odeiv2_driver * D, + const double HSTART) + The routine resets the evolution and stepper objects and sets new + initial step size to HSTART. This function can be used e.g. to + change the direction of integration. - -- Function: int gsl_sum_levin_utrunc_accel (const double * ARRAY, - size_t ARRAY_SIZE, gsl_sum_levin_utrunc_workspace * W, double - * SUM_ACCEL, double * ABSERR_TRUNC) - This function takes the terms of a series in ARRAY of size - ARRAY_SIZE and computes the extrapolated limit of the series using - a Levin u-transform. Additional working space must be provided in - W. The extrapolated sum is stored in SUM_ACCEL. The actual - term-by-term sum is returned in 'w->sum_plain'. The algorithm - terminates when the difference between two successive - extrapolations reaches a minimum or is sufficiently small. The - difference between these two values is used as estimate of the - error and is stored in ABSERR_TRUNC. To improve the reliability of - the algorithm the extrapolated values are replaced by moving - averages when calculating the truncation error, smoothing out any - fluctuations. + -- Function: int gsl_odeiv2_driver_free (gsl_odeiv2_driver * D) + This function frees the driver object, and the related evolution, + stepper and control objects.  -File: gsl-ref.info, Node: Example of accelerating a series, Next: Series Acceleration References, Prev: Acceleration functions without error estimation, Up: Series Acceleration +File: gsl-ref.info, Node: ODE Example programs, Next: ODE References and Further Reading, Prev: Driver, Up: Ordinary Differential Equations -30.3 Examples +27.6 Examples ============= -The following code calculates an estimate of \zeta(2) = \pi^2 / 6 using -the series, +The following program solves the second-order nonlinear Van der Pol +oscillator equation, - \zeta(2) = 1 + 1/2^2 + 1/3^2 + 1/4^2 + ... + u''(t) + \mu u'(t) (u(t)^2 - 1) + u(t) = 0 -After N terms the error in the sum is O(1/N), making direct summation of -the series converge slowly. +This can be converted into a first order system suitable for use with +the routines described in this chapter by introducing a separate +variable for the velocity, v = u'(t), + + u' = v + v' = -u + \mu v (1-u^2) + +The program begins by defining functions for these derivatives and their +Jacobian. The main function uses driver level functions to solve the +problem. The program evolves the solution from (u, v) = (1, 0) at t=0 +to t=100. The step-size h is automatically adjusted by the controller +to maintain an absolute accuracy of 10^{-6} in the function values (u, +v). The loop in the example prints the solution at the points t_i = 1, +2, \dots, 100. #include - #include - #include + #include + #include + #include - #define N 20 + int + func (double t, const double y[], double f[], + void *params) + { + (void)(t); /* avoid unused parameter warning */ + double mu = *(double *)params; + f[0] = y[1]; + f[1] = -y[0] - mu*y[1]*(y[0]*y[0] - 1); + return GSL_SUCCESS; + } + + int + jac (double t, const double y[], double *dfdy, + double dfdt[], void *params) + { + (void)(t); /* avoid unused parameter warning */ + double mu = *(double *)params; + gsl_matrix_view dfdy_mat + = gsl_matrix_view_array (dfdy, 2, 2); + gsl_matrix * m = &dfdy_mat.matrix; + gsl_matrix_set (m, 0, 0, 0.0); + gsl_matrix_set (m, 0, 1, 1.0); + gsl_matrix_set (m, 1, 0, -2.0*mu*y[0]*y[1] - 1.0); + gsl_matrix_set (m, 1, 1, -mu*(y[0]*y[0] - 1.0)); + dfdt[0] = 0.0; + dfdt[1] = 0.0; + return GSL_SUCCESS; + } int main (void) { - double t[N]; - double sum_accel, err; - double sum = 0; - int n; - - gsl_sum_levin_u_workspace * w - = gsl_sum_levin_u_alloc (N); - - const double zeta_2 = M_PI * M_PI / 6.0; + double mu = 10; + gsl_odeiv2_system sys = {func, jac, 2, &mu}; - /* terms for zeta(2) = \sum_{n=1}^{\infty} 1/n^2 */ + gsl_odeiv2_driver * d = + gsl_odeiv2_driver_alloc_y_new (&sys, gsl_odeiv2_step_rk8pd, + 1e-6, 1e-6, 0.0); + int i; + double t = 0.0, t1 = 100.0; + double y[2] = { 1.0, 0.0 }; - for (n = 0; n < N; n++) + for (i = 1; i <= 100; i++) { - double np1 = n + 1.0; - t[n] = 1.0 / (np1 * np1); - sum += t[n]; - } - - gsl_sum_levin_u_accel (t, N, w, &sum_accel, &err); - - printf ("term-by-term sum = % .16f using %d terms\n", - sum, N); - - printf ("term-by-term sum = % .16f using %d terms\n", - w->sum_plain, w->terms_used); + double ti = i * t1 / 100.0; + int status = gsl_odeiv2_driver_apply (d, &t, ti, y); - printf ("exact value = % .16f\n", zeta_2); - printf ("accelerated sum = % .16f using %d terms\n", - sum_accel, w->terms_used); + if (status != GSL_SUCCESS) + { + printf ("error, return value=%d\n", status); + break; + } - printf ("estimated error = % .16f\n", err); - printf ("actual error = % .16f\n", - sum_accel - zeta_2); + printf ("%.5e %.5e %.5e\n", t, y[0], y[1]); + } - gsl_sum_levin_u_free (w); + gsl_odeiv2_driver_free (d); return 0; } -The output below shows that the Levin u-transform is able to obtain an -estimate of the sum to 1 part in 10^10 using the first eleven terms of -the series. The error estimate returned by the function is also -accurate, giving the correct number of significant digits. - - $ ./a.out - term-by-term sum = 1.5961632439130233 using 20 terms - term-by-term sum = 1.5759958390005426 using 13 terms - exact value = 1.6449340668482264 - accelerated sum = 1.6449340668166479 using 13 terms - estimated error = 0.0000000000508580 - actual error = -0.0000000000315785 - -Note that a direct summation of this series would require 10^10 terms to -achieve the same precision as the accelerated sum does in 13 terms. - - -File: gsl-ref.info, Node: Series Acceleration References, Prev: Example of accelerating a series, Up: Series Acceleration - -30.4 References and Further Reading -=================================== - -The algorithms used by these functions are described in the following -papers, - - T. Fessler, W.F. Ford, D.A. Smith, HURRY: An acceleration algorithm - for scalar sequences and series 'ACM Transactions on Mathematical - Software', 9(3):346-354, 1983. and Algorithm 602 9(3):355-357, - 1983. +The user can work with the lower level functions directly, as in the +following example. In this case an intermediate result is printed after +each successful step instead of equidistant time points. -The theory of the u-transform was presented by Levin, + int + main (void) + { + const gsl_odeiv2_step_type * T + = gsl_odeiv2_step_rk8pd; - D. Levin, Development of Non-Linear Transformations for Improving - Convergence of Sequences, 'Intern. J. Computer Math.' B3:371-388, - 1973. + gsl_odeiv2_step * s + = gsl_odeiv2_step_alloc (T, 2); + gsl_odeiv2_control * c + = gsl_odeiv2_control_y_new (1e-6, 0.0); + gsl_odeiv2_evolve * e + = gsl_odeiv2_evolve_alloc (2); -A review paper on the Levin Transform is available online, - Herbert H. H. Homeier, Scalar Levin-Type Sequence Transformations, - . + double mu = 10; + gsl_odeiv2_system sys = {func, jac, 2, &mu}; - -File: gsl-ref.info, Node: Wavelet Transforms, Next: Discrete Hankel Transforms, Prev: Series Acceleration, Up: Top + double t = 0.0, t1 = 100.0; + double h = 1e-6; + double y[2] = { 1.0, 0.0 }; -31 Wavelet Transforms -********************* + while (t < t1) + { + int status = gsl_odeiv2_evolve_apply (e, c, s, + &sys, + &t, t1, + &h, y); -This chapter describes functions for performing Discrete Wavelet -Transforms (DWTs). The library includes wavelets for real data in both -one and two dimensions. The wavelet functions are declared in the -header files 'gsl_wavelet.h' and 'gsl_wavelet2d.h'. + if (status != GSL_SUCCESS) + break; -* Menu: + printf ("%.5e %.5e %.5e\n", t, y[0], y[1]); + } -* DWT Definitions:: -* DWT Initialization:: -* DWT Transform Functions:: -* DWT Examples:: -* DWT References:: + gsl_odeiv2_evolve_free (e); + gsl_odeiv2_control_free (c); + gsl_odeiv2_step_free (s); + return 0; + } - -File: gsl-ref.info, Node: DWT Definitions, Next: DWT Initialization, Up: Wavelet Transforms +For functions with multiple parameters, the appropriate information can +be passed in through the PARAMS argument in 'gsl_odeiv2_system' +definition (MU in this example) by using a pointer to a struct. -31.1 Definitions -================ +It is also possible to work with a non-adaptive integrator, using only +the stepping function itself, 'gsl_odeiv2_driver_apply_fixed_step' or +'gsl_odeiv2_evolve_apply_fixed_step'. The following program uses the +driver level function, with fourth-order Runge-Kutta stepping function +with a fixed stepsize of 0.001. -The continuous wavelet transform and its inverse are defined by the -relations, + int + main (void) + { + double mu = 10; + gsl_odeiv2_system sys = { func, jac, 2, &mu }; - w(s,\tau) = \int f(t) * \psi^*_{s,\tau}(t) dt + gsl_odeiv2_driver *d = + gsl_odeiv2_driver_alloc_y_new (&sys, gsl_odeiv2_step_rk4, + 1e-3, 1e-8, 1e-8); -and, + double t = 0.0; + double y[2] = { 1.0, 0.0 }; + int i, s; - f(t) = \int \int_{-\infty}^\infty w(s, \tau) * \psi_{s,\tau}(t) d\tau ds + for (i = 0; i < 100; i++) + { + s = gsl_odeiv2_driver_apply_fixed_step (d, &t, 1e-3, 1000, y); -where the basis functions \psi_{s,\tau} are obtained by scaling and -translation from a single function, referred to as the "mother wavelet". + if (s != GSL_SUCCESS) + { + printf ("error: driver returned %d\n", s); + break; + } - The discrete version of the wavelet transform acts on equally-spaced -samples, with fixed scaling and translation steps (s, \tau). The -frequency and time axes are sampled "dyadically" on scales of 2^j -through a level parameter j. The resulting family of functions -{\psi_{j,n}} constitutes an orthonormal basis for square-integrable -signals. + printf ("%.5e %.5e %.5e\n", t, y[0], y[1]); + } - The discrete wavelet transform is an O(N) algorithm, and is also -referred to as the "fast wavelet transform". + gsl_odeiv2_driver_free (d); + return s; + }  -File: gsl-ref.info, Node: DWT Initialization, Next: DWT Transform Functions, Prev: DWT Definitions, Up: Wavelet Transforms - -31.2 Initialization -=================== +File: gsl-ref.info, Node: ODE References and Further Reading, Prev: ODE Example programs, Up: Ordinary Differential Equations -The 'gsl_wavelet' structure contains the filter coefficients defining -the wavelet and any associated offset parameters. +27.7 References and Further Reading +=================================== - -- Function: gsl_wavelet * gsl_wavelet_alloc (const gsl_wavelet_type * - T, size_t K) - This function allocates and initializes a wavelet object of type T. - The parameter K selects the specific member of the wavelet family. - A null pointer is returned if insufficient memory is available or - if a unsupported member is selected. + Ascher, U.M., Petzold, L.R., 'Computer Methods for Ordinary + Differential and Differential-Algebraic Equations', SIAM, + Philadelphia, 1998. - The following wavelet types are implemented: + Hairer, E., Norsett, S. P., Wanner, G., 'Solving Ordinary + Differential Equations I: Nonstiff Problems', Springer, Berlin, + 1993. - -- Wavelet: gsl_wavelet_daubechies - -- Wavelet: gsl_wavelet_daubechies_centered - This is the Daubechies wavelet family of maximum phase with k/2 - vanishing moments. The implemented wavelets are k=4, 6, ..., 20, - with K even. + Hairer, E., Wanner, G., 'Solving Ordinary Differential Equations + II: Stiff and Differential-Algebraic Problems', Springer, Berlin, + 1996. - -- Wavelet: gsl_wavelet_haar - -- Wavelet: gsl_wavelet_haar_centered - This is the Haar wavelet. The only valid choice of k for the Haar - wavelet is k=2. + Many of the basic Runge-Kutta formulas can be found in the Handbook +of Mathematical Functions, - -- Wavelet: gsl_wavelet_bspline - -- Wavelet: gsl_wavelet_bspline_centered - This is the biorthogonal B-spline wavelet family of order (i,j). - The implemented values of k = 100*i + j are 103, 105, 202, 204, - 206, 208, 301, 303, 305 307, 309. + Abramowitz & Stegun (eds.), 'Handbook of Mathematical Functions', + Section 25.5. -The centered forms of the wavelets align the coefficients of the various -sub-bands on edges. Thus the resulting visualization of the -coefficients of the wavelet transform in the phase plane is easier to -understand. +The implicit Bulirsch-Stoer algorithm 'bsimp' is described in the +following paper, - -- Function: const char * gsl_wavelet_name (const gsl_wavelet * W) - This function returns a pointer to the name of the wavelet family - for W. + G. Bader and P. Deuflhard, "A Semi-Implicit Mid-Point Rule for + Stiff Systems of Ordinary Differential Equations.", Numer. Math. + 41, 373-398, 1983. - -- Function: void gsl_wavelet_free (gsl_wavelet * W) - This function frees the wavelet object W. +The Adams and BDF multistep methods 'msadams' and 'msbdf' are based on +the following articles, - The 'gsl_wavelet_workspace' structure contains scratch space of the -same size as the input data and is used to hold intermediate results -during the transform. + G. D. Byrne and A. C. Hindmarsh, "A Polyalgorithm for the Numerical + Solution of Ordinary Differential Equations.", ACM Trans. Math. + Software, 1, 71-96, 1975. - -- Function: gsl_wavelet_workspace * gsl_wavelet_workspace_alloc - (size_t N) - This function allocates a workspace for the discrete wavelet - transform. To perform a one-dimensional transform on N elements, a - workspace of size N must be provided. For two-dimensional - transforms of N-by-N matrices it is sufficient to allocate a - workspace of size N, since the transform operates on individual - rows and columns. A null pointer is returned if insufficient - memory is available. + P. N. Brown, G. D. Byrne and A. C. Hindmarsh, "VODE: A + Variable-coefficient ODE Solver.", SIAM J. Sci. Stat. Comput. + 10, 1038-1051, 1989. - -- Function: void gsl_wavelet_workspace_free (gsl_wavelet_workspace * - WORK) - This function frees the allocated workspace WORK. + A. C. Hindmarsh, P. N. Brown, K. E. Grant, S. L. Lee, R. Serban, D. + E. Shumaker and C. S. Woodward, "SUNDIALS: Suite of Nonlinear and + Differential/Algebraic Equation Solvers.", ACM Trans. Math. + Software 31, 363-396, 2005.  -File: gsl-ref.info, Node: DWT Transform Functions, Next: DWT Examples, Prev: DWT Initialization, Up: Wavelet Transforms - -31.3 Transform Functions -======================== - -This sections describes the actual functions performing the discrete -wavelet transform. Note that the transforms use periodic boundary -conditions. If the signal is not periodic in the sample length then -spurious coefficients will appear at the beginning and end of each level -of the transform. - -* Menu: - -* DWT in one dimension:: -* DWT in two dimension:: +File: gsl-ref.info, Node: Interpolation, Next: Numerical Differentiation, Prev: Ordinary Differential Equations, Up: Top - -File: gsl-ref.info, Node: DWT in one dimension, Next: DWT in two dimension, Up: DWT Transform Functions +28 Interpolation +**************** -31.3.1 Wavelet transforms in one dimension ------------------------------------------- +This chapter describes functions for performing interpolation. The +library provides a variety of interpolation methods, including Cubic, +Akima, and Steffen splines. The interpolation types are +interchangeable, allowing different methods to be used without +recompiling. Interpolations can be defined for both normal and periodic +boundary conditions. Additional functions are available for computing +derivatives and integrals of interpolating functions. Routines are +provided for interpolating both one and two dimensional datasets. - -- Function: int gsl_wavelet_transform (const gsl_wavelet * W, double * - DATA, size_t STRIDE, size_t N, gsl_wavelet_direction DIR, - gsl_wavelet_workspace * WORK) - -- Function: int gsl_wavelet_transform_forward (const gsl_wavelet * W, - double * DATA, size_t STRIDE, size_t N, gsl_wavelet_workspace - * WORK) - -- Function: int gsl_wavelet_transform_inverse (const gsl_wavelet * W, - double * DATA, size_t STRIDE, size_t N, gsl_wavelet_workspace - * WORK) - - These functions compute in-place forward and inverse discrete - wavelet transforms of length N with stride STRIDE on the array - DATA. The length of the transform N is restricted to powers of - two. For the 'transform' version of the function the argument DIR - can be either 'forward' (+1) or 'backward' (-1). A workspace WORK - of length N must be provided. - - For the forward transform, the elements of the original array are - replaced by the discrete wavelet transform f_i -> w_{j,k} in a - packed triangular storage layout, where J is the index of the level - j = 0 ... J-1 and K is the index of the coefficient within each - level, k = 0 ... (2^j)-1. The total number of levels is J = - \log_2(n). The output data has the following form, - - (s_{-1,0}, d_{0,0}, d_{1,0}, d_{1,1}, d_{2,0}, ..., - d_{j,k}, ..., d_{J-1,2^{J-1}-1}) - - where the first element is the smoothing coefficient s_{-1,0}, - followed by the detail coefficients d_{j,k} for each level j. The - backward transform inverts these coefficients to obtain the - original data. - - These functions return a status of 'GSL_SUCCESS' upon successful - completion. 'GSL_EINVAL' is returned if N is not an integer power - of 2 or if insufficient workspace is provided. - - -File: gsl-ref.info, Node: DWT in two dimension, Prev: DWT in one dimension, Up: DWT Transform Functions - -31.3.2 Wavelet transforms in two dimension ------------------------------------------- - -The library provides functions to perform two-dimensional discrete -wavelet transforms on square matrices. The matrix dimensions must be an -integer power of two. There are two possible orderings of the rows and -columns in the two-dimensional wavelet transform, referred to as the -"standard" and "non-standard" forms. - - The "standard" transform performs a complete discrete wavelet -transform on the rows of the matrix, followed by a separate complete -discrete wavelet transform on the columns of the resulting -row-transformed matrix. This procedure uses the same ordering as a -two-dimensional Fourier transform. - - The "non-standard" transform is performed in interleaved passes on -the rows and columns of the matrix for each level of the transform. The -first level of the transform is applied to the matrix rows, and then to -the matrix columns. This procedure is then repeated across the rows and -columns of the data for the subsequent levels of the transform, until -the full discrete wavelet transform is complete. The non-standard form -of the discrete wavelet transform is typically used in image analysis. + These interpolation methods produce curves that pass through each +datapoint. To interpolate noisy data with a smoothing curve see *note +Basis Splines::. The functions described in this section are declared in the header -file 'gsl_wavelet2d.h'. - - -- Function: int gsl_wavelet2d_transform (const gsl_wavelet * W, double - * DATA, size_t TDA, size_t SIZE1, size_t SIZE2, - gsl_wavelet_direction DIR, gsl_wavelet_workspace * WORK) - -- Function: int gsl_wavelet2d_transform_forward (const gsl_wavelet * - W, double * DATA, size_t TDA, size_t SIZE1, size_t SIZE2, - gsl_wavelet_workspace * WORK) - -- Function: int gsl_wavelet2d_transform_inverse (const gsl_wavelet * - W, double * DATA, size_t TDA, size_t SIZE1, size_t SIZE2, - gsl_wavelet_workspace * WORK) - - These functions compute two-dimensional in-place forward and - inverse discrete wavelet transforms in standard form on the array - DATA stored in row-major form with dimensions SIZE1 and SIZE2 and - physical row length TDA. The dimensions must be equal (square - matrix) and are restricted to powers of two. For the 'transform' - version of the function the argument DIR can be either 'forward' - (+1) or 'backward' (-1). A workspace WORK of the appropriate size - must be provided. On exit, the appropriate elements of the array - DATA are replaced by their two-dimensional wavelet transform. - - The functions return a status of 'GSL_SUCCESS' upon successful - completion. 'GSL_EINVAL' is returned if SIZE1 and SIZE2 are not - equal and integer powers of 2, or if insufficient workspace is - provided. - - -- Function: int gsl_wavelet2d_transform_matrix (const gsl_wavelet * W, - gsl_matrix * M, gsl_wavelet_direction DIR, - gsl_wavelet_workspace * WORK) - -- Function: int gsl_wavelet2d_transform_matrix_forward (const - gsl_wavelet * W, gsl_matrix * M, gsl_wavelet_workspace * WORK) - -- Function: int gsl_wavelet2d_transform_matrix_inverse (const - gsl_wavelet * W, gsl_matrix * M, gsl_wavelet_workspace * WORK) - These functions compute the two-dimensional in-place wavelet - transform on a matrix A. - - -- Function: int gsl_wavelet2d_nstransform (const gsl_wavelet * W, - double * DATA, size_t TDA, size_t SIZE1, size_t SIZE2, - gsl_wavelet_direction DIR, gsl_wavelet_workspace * WORK) - -- Function: int gsl_wavelet2d_nstransform_forward (const gsl_wavelet * - W, double * DATA, size_t TDA, size_t SIZE1, size_t SIZE2, - gsl_wavelet_workspace * WORK) - -- Function: int gsl_wavelet2d_nstransform_inverse (const gsl_wavelet * - W, double * DATA, size_t TDA, size_t SIZE1, size_t SIZE2, - gsl_wavelet_workspace * WORK) - These functions compute the two-dimensional wavelet transform in - non-standard form. - - -- Function: int gsl_wavelet2d_nstransform_matrix (const gsl_wavelet * - W, gsl_matrix * M, gsl_wavelet_direction DIR, - gsl_wavelet_workspace * WORK) - -- Function: int gsl_wavelet2d_nstransform_matrix_forward (const - gsl_wavelet * W, gsl_matrix * M, gsl_wavelet_workspace * WORK) - -- Function: int gsl_wavelet2d_nstransform_matrix_inverse (const - gsl_wavelet * W, gsl_matrix * M, gsl_wavelet_workspace * WORK) - These functions compute the non-standard form of the - two-dimensional in-place wavelet transform on a matrix A. - - -File: gsl-ref.info, Node: DWT Examples, Next: DWT References, Prev: DWT Transform Functions, Up: Wavelet Transforms - -31.4 Examples -============= - -The following program demonstrates the use of the one-dimensional -wavelet transform functions. It computes an approximation to an input -signal (of length 256) using the 20 largest components of the wavelet -transform, while setting the others to zero. +files 'gsl_interp.h' and 'gsl_spline.h'. - #include - #include - #include - #include +* Menu: - int - main (int argc, char **argv) - { - int i, n = 256, nc = 20; - double *data = malloc (n * sizeof (double)); - double *abscoeff = malloc (n * sizeof (double)); - size_t *p = malloc (n * sizeof (size_t)); - - FILE * f; - gsl_wavelet *w; - gsl_wavelet_workspace *work; +* 1D Introduction to Interpolation:: +* 1D Interpolation Functions:: +* 1D Interpolation Types:: +* 1D Index Look-up and Acceleration:: +* 1D Evaluation of Interpolating Functions:: +* 1D Higher-level Interface:: +* 1D Interpolation Example programs:: +* 1D Interpolation References and Further Reading:: +* 2D Introduction to Interpolation:: +* 2D Interpolation Functions:: +* 2D Interpolation Grids:: +* 2D Interpolation Types:: +* 2D Evaluation of Interpolating Functions:: +* 2D Higher-level Interface:: +* 2D Interpolation Example programs:: - w = gsl_wavelet_alloc (gsl_wavelet_daubechies, 4); - work = gsl_wavelet_workspace_alloc (n); + +File: gsl-ref.info, Node: 1D Introduction to Interpolation, Next: 1D Interpolation Functions, Up: Interpolation - f = fopen (argv[1], "r"); - for (i = 0; i < n; i++) - { - fscanf (f, "%lg", &data[i]); - } - fclose (f); +28.1 Introduction to 1D Interpolation +===================================== - gsl_wavelet_transform_forward (w, data, 1, n, work); +Given a set of data points (x_1, y_1) \dots (x_n, y_n) the routines +described in this section compute a continuous interpolating function +y(x) such that y(x_i) = y_i. The interpolation is piecewise smooth, and +its behavior at the end-points is determined by the type of +interpolation used. - for (i = 0; i < n; i++) - { - abscoeff[i] = fabs (data[i]); - } + +File: gsl-ref.info, Node: 1D Interpolation Functions, Next: 1D Interpolation Types, Prev: 1D Introduction to Interpolation, Up: Interpolation - gsl_sort_index (p, abscoeff, 1, n); +28.2 1D Interpolation Functions +=============================== - for (i = 0; (i + nc) < n; i++) - data[p[i]] = 0; +The interpolation function for a given dataset is stored in a +'gsl_interp' object. These are created by the following functions. - gsl_wavelet_transform_inverse (w, data, 1, n, work); + -- Function: gsl_interp * gsl_interp_alloc (const gsl_interp_type * T, + size_t SIZE) + This function returns a pointer to a newly allocated interpolation + object of type T for SIZE data-points. - for (i = 0; i < n; i++) - { - printf ("%g\n", data[i]); - } + -- Function: int gsl_interp_init (gsl_interp * INTERP, const double + XA[], const double YA[], size_t SIZE) + This function initializes the interpolation object INTERP for the + data (XA,YA) where XA and YA are arrays of size SIZE. The + interpolation object ('gsl_interp') does not save the data arrays + XA and YA and only stores the static state computed from the data. + The XA data array is always assumed to be strictly ordered, with + increasing x values; the behavior for other arrangements is not + defined. - gsl_wavelet_free (w); - gsl_wavelet_workspace_free (work); + -- Function: void gsl_interp_free (gsl_interp * INTERP) + This function frees the interpolation object INTERP. - free (data); - free (abscoeff); - free (p); - return 0; - } + +File: gsl-ref.info, Node: 1D Interpolation Types, Next: 1D Index Look-up and Acceleration, Prev: 1D Interpolation Functions, Up: Interpolation -The output can be used with the GNU plotutils 'graph' program, +28.3 1D Interpolation Types +=========================== - $ ./a.out ecg.dat > dwt.dat - $ graph -T ps -x 0 256 32 -h 0.3 -a dwt.dat > dwt.ps +The interpolation library provides the following interpolation types: - -File: gsl-ref.info, Node: DWT References, Prev: DWT Examples, Up: Wavelet Transforms + -- Interpolation Type: gsl_interp_linear + Linear interpolation. This interpolation method does not require + any additional memory. -31.5 References and Further Reading -=================================== + -- Interpolation Type: gsl_interp_polynomial + Polynomial interpolation. This method should only be used for + interpolating small numbers of points because polynomial + interpolation introduces large oscillations, even for well-behaved + datasets. The number of terms in the interpolating polynomial is + equal to the number of points. -The mathematical background to wavelet transforms is covered in the -original lectures by Daubechies, + -- Interpolation Type: gsl_interp_cspline + Cubic spline with natural boundary conditions. The resulting curve + is piecewise cubic on each interval, with matching first and second + derivatives at the supplied data-points. The second derivative is + chosen to be zero at the first point and last point. - Ingrid Daubechies. Ten Lectures on Wavelets. 'CBMS-NSF Regional - Conference Series in Applied Mathematics' (1992), SIAM, ISBN - 0898712742. + -- Interpolation Type: gsl_interp_cspline_periodic + Cubic spline with periodic boundary conditions. The resulting + curve is piecewise cubic on each interval, with matching first and + second derivatives at the supplied data-points. The derivatives at + the first and last points are also matched. Note that the last + point in the data must have the same y-value as the first point, + otherwise the resulting periodic interpolation will have a + discontinuity at the boundary. -An easy to read introduction to the subject with an emphasis on the -application of the wavelet transform in various branches of science is, + -- Interpolation Type: gsl_interp_akima + Non-rounded Akima spline with natural boundary conditions. This + method uses the non-rounded corner algorithm of Wodicka. - Paul S. Addison. 'The Illustrated Wavelet Transform Handbook'. - Institute of Physics Publishing (2002), ISBN 0750306920. + -- Interpolation Type: gsl_interp_akima_periodic + Non-rounded Akima spline with periodic boundary conditions. This + method uses the non-rounded corner algorithm of Wodicka. -For extensive coverage of signal analysis by wavelets, wavelet packets -and local cosine bases see, + -- Interpolation Type: gsl_interp_steffen + Steffen's method guarantees the monotonicity of the interpolating + function between the given data points. Therefore, minima and + maxima can only occur exactly at the data points, and there can + never be spurious oscillations between data points. The + interpolated function is piecewise cubic in each interval. The + resulting curve and its first derivative are guaranteed to be + continuous, but the second derivative may be discontinuous. - S. G. Mallat. 'A wavelet tour of signal processing' (Second - edition). Academic Press (1999), ISBN 012466606X. +The following related functions are available: -The concept of multiresolution analysis underlying the wavelet transform -is described in, + -- Function: const char * gsl_interp_name (const gsl_interp * INTERP) + This function returns the name of the interpolation type used by + INTERP. For example, - S. G. Mallat. Multiresolution Approximations and Wavelet - Orthonormal Bases of L^2(R). 'Transactions of the American - Mathematical Society', 315(1), 1989, 69-87. + printf ("interp uses '%s' interpolation.\n", + gsl_interp_name (interp)); - S. G. Mallat. A Theory for Multiresolution Signal - Decomposition--The Wavelet Representation. 'IEEE Transactions on - Pattern Analysis and Machine Intelligence', 11, 1989, 674-693. + would print something like, -The coefficients for the individual wavelet families implemented by the -library can be found in the following papers, + interp uses 'cspline' interpolation. - I. Daubechies. Orthonormal Bases of Compactly Supported Wavelets. - 'Communications on Pure and Applied Mathematics', 41 (1988) - 909-996. + -- Function: unsigned int gsl_interp_min_size (const gsl_interp * + INTERP) + -- Function: unsigned int gsl_interp_type_min_size (const + gsl_interp_type * T) + These functions return the minimum number of points required by the + interpolation object INTERP or interpolation type T. For example, + Akima spline interpolation requires a minimum of 5 points. - A. Cohen, I. Daubechies, and J.-C. Feauveau. Biorthogonal Bases of - Compactly Supported Wavelets. 'Communications on Pure and Applied - Mathematics', 45 (1992) 485-560. + +File: gsl-ref.info, Node: 1D Index Look-up and Acceleration, Next: 1D Evaluation of Interpolating Functions, Prev: 1D Interpolation Types, Up: Interpolation -The PhysioNet archive of physiological datasets can be found online at - and is described in the following paper, +28.4 1D Index Look-up and Acceleration +====================================== - Goldberger et al. PhysioBank, PhysioToolkit, and PhysioNet: - Components of a New Research Resource for Complex Physiologic - Signals. 'Circulation' 101(23):e215-e220 2000. +The state of searches can be stored in a 'gsl_interp_accel' object, +which is a kind of iterator for interpolation lookups. It caches the +previous value of an index lookup. When the subsequent interpolation +point falls in the same interval its index value can be returned +immediately. - -File: gsl-ref.info, Node: Discrete Hankel Transforms, Next: One dimensional Root-Finding, Prev: Wavelet Transforms, Up: Top + -- Function: size_t gsl_interp_bsearch (const double X_ARRAY[], double + X, size_t INDEX_LO, size_t INDEX_HI) + This function returns the index i of the array X_ARRAY such that + 'x_array[i] <= x < x_array[i+1]'. The index is searched for in the + range [INDEX_LO,INDEX_HI]. An inline version of this function is + used when 'HAVE_INLINE' is defined. -32 Discrete Hankel Transforms -***************************** + -- Function: gsl_interp_accel * gsl_interp_accel_alloc (void) + This function returns a pointer to an accelerator object, which is + a kind of iterator for interpolation lookups. It tracks the state + of lookups, thus allowing for application of various acceleration + strategies. -This chapter describes functions for performing Discrete Hankel -Transforms (DHTs). The functions are declared in the header file -'gsl_dht.h'. + -- Function: size_t gsl_interp_accel_find (gsl_interp_accel * A, const + double X_ARRAY[], size_t SIZE, double X) + This function performs a lookup action on the data array X_ARRAY of + size SIZE, using the given accelerator A. This is how lookups are + performed during evaluation of an interpolation. The function + returns an index i such that 'x_array[i] <= x < x_array[i+1]'. An + inline version of this function is used when 'HAVE_INLINE' is + defined. -* Menu: + -- Function: int gsl_interp_accel_reset (gsl_interp_accel * ACC); + This function reinitializes the accelerator object ACC. It should + be used when the cached information is no longer applicable--for + example, when switching to a new dataset. -* Discrete Hankel Transform Definition:: -* Discrete Hankel Transform Functions:: -* Discrete Hankel Transform References:: + -- Function: void gsl_interp_accel_free (gsl_interp_accel* ACC) + This function frees the accelerator object ACC.  -File: gsl-ref.info, Node: Discrete Hankel Transform Definition, Next: Discrete Hankel Transform Functions, Up: Discrete Hankel Transforms +File: gsl-ref.info, Node: 1D Evaluation of Interpolating Functions, Next: 1D Higher-level Interface, Prev: 1D Index Look-up and Acceleration, Up: Interpolation -32.1 Definitions -================ +28.5 1D Evaluation of Interpolating Functions +============================================= -The discrete Hankel transform acts on a vector of sampled data, where -the samples are assumed to have been taken at points related to the -zeroes of a Bessel function of fixed order; compare this to the case of -the discrete Fourier transform, where samples are taken at points -related to the zeroes of the sine or cosine function. - - Specifically, let f(t) be a function on the unit interval and -j_(\nu,m) the m-th zero of the Bessel function J_\nu(x). Then the -finite \nu-Hankel transform of f(t) is defined to be the set of numbers -g_m given by, - g_m = \int_0^1 t dt J_\nu(j_(\nu,m)t) f(t), - -so that, - f(t) = \sum_{m=1}^\infty (2 J_\nu(j_(\nu,m)t) / J_(\nu+1)(j_(\nu,m))^2) g_m. - -Suppose that f is band-limited in the sense that g_m=0 for m > M. Then -we have the following fundamental sampling theorem. - g_m = (2 / j_(\nu,M)^2) - \sum_{k=1}^{M-1} f(j_(\nu,k)/j_(\nu,M)) - (J_\nu(j_(\nu,m) j_(\nu,k) / j_(\nu,M)) / J_(\nu+1)(j_(\nu,k))^2). - -It is this discrete expression which defines the discrete Hankel -transform. The kernel in the summation above defines the matrix of the -\nu-Hankel transform of size M-1. The coefficients of this matrix, -being dependent on \nu and M, must be precomputed and stored; the -'gsl_dht' object encapsulates this data. The allocation function -'gsl_dht_alloc' returns a 'gsl_dht' object which must be properly -initialized with 'gsl_dht_init' before it can be used to perform -transforms on data sample vectors, for fixed \nu and M, using the -'gsl_dht_apply' function. The implementation allows a scaling of the -fundamental interval, for convenience, so that one can assume the -function is defined on the interval [0,X], rather than the unit -interval. - - Notice that by assumption f(t) vanishes at the endpoints of the -interval, consistent with the inversion formula and the sampling formula -given above. Therefore, this transform corresponds to an orthogonal -expansion in eigenfunctions of the Dirichlet problem for the Bessel -differential equation. + -- Function: double gsl_interp_eval (const gsl_interp * INTERP, const + double XA[], const double YA[], double X, gsl_interp_accel * + ACC) + -- Function: int gsl_interp_eval_e (const gsl_interp * INTERP, const + double XA[], const double YA[], double X, gsl_interp_accel * + ACC, double * Y) + These functions return the interpolated value of Y for a given + point X, using the interpolation object INTERP, data arrays XA and + YA and the accelerator ACC. When X is outside the range of XA, the + error code 'GSL_EDOM' is returned with a value of 'GSL_NAN' for Y. - -File: gsl-ref.info, Node: Discrete Hankel Transform Functions, Next: Discrete Hankel Transform References, Prev: Discrete Hankel Transform Definition, Up: Discrete Hankel Transforms + -- Function: double gsl_interp_eval_deriv (const gsl_interp * INTERP, + const double XA[], const double YA[], double X, + gsl_interp_accel * ACC) + -- Function: int gsl_interp_eval_deriv_e (const gsl_interp * INTERP, + const double XA[], const double YA[], double X, + gsl_interp_accel * ACC, double * D) + These functions return the derivative D of an interpolated function + for a given point X, using the interpolation object INTERP, data + arrays XA and YA and the accelerator ACC. -32.2 Functions -============== + -- Function: double gsl_interp_eval_deriv2 (const gsl_interp * INTERP, + const double XA[], const double YA[], double X, + gsl_interp_accel * ACC) + -- Function: int gsl_interp_eval_deriv2_e (const gsl_interp * INTERP, + const double XA[], const double YA[], double X, + gsl_interp_accel * ACC, double * D2) + These functions return the second derivative D2 of an interpolated + function for a given point X, using the interpolation object + INTERP, data arrays XA and YA and the accelerator ACC. - -- Function: gsl_dht * gsl_dht_alloc (size_t SIZE) - This function allocates a Discrete Hankel transform object of size - SIZE. + -- Function: double gsl_interp_eval_integ (const gsl_interp * INTERP, + const double XA[], const double YA[], double A, double B, + gsl_interp_accel * ACC) + -- Function: int gsl_interp_eval_integ_e (const gsl_interp * INTERP, + const double XA[], const double YA[], double A, double B, + gsl_interp_accel * ACC, double * RESULT) + These functions return the numerical integral RESULT of an + interpolated function over the range [A, B], using the + interpolation object INTERP, data arrays XA and YA and the + accelerator ACC. - -- Function: int gsl_dht_init (gsl_dht * T, double NU, double XMAX) - This function initializes the transform T for the given values of - NU and XMAX. + +File: gsl-ref.info, Node: 1D Higher-level Interface, Next: 1D Interpolation Example programs, Prev: 1D Evaluation of Interpolating Functions, Up: Interpolation - -- Function: gsl_dht * gsl_dht_new (size_t SIZE, double NU, double - XMAX) - This function allocates a Discrete Hankel transform object of size - SIZE and initializes it for the given values of NU and XMAX. +28.6 1D Higher-level Interface +============================== - -- Function: void gsl_dht_free (gsl_dht * T) - This function frees the transform T. +The functions described in the previous sections required the user to +supply pointers to the x and y arrays on each call. The following +functions are equivalent to the corresponding 'gsl_interp' functions but +maintain a copy of this data in the 'gsl_spline' object. This removes +the need to pass both XA and YA as arguments on each evaluation. These +functions are defined in the header file 'gsl_spline.h'. - -- Function: int gsl_dht_apply (const gsl_dht * T, double * F_IN, - double * F_OUT) - This function applies the transform T to the array F_IN whose size - is equal to the size of the transform. The result is stored in the - array F_OUT which must be of the same length. + -- Function: gsl_spline * gsl_spline_alloc (const gsl_interp_type * T, + size_t SIZE) - Applying this function to its output gives the original data - multiplied by (1/j_(\nu,M))^2, up to numerical errors. + -- Function: int gsl_spline_init (gsl_spline * SPLINE, const double + XA[], const double YA[], size_t SIZE) - -- Function: double gsl_dht_x_sample (const gsl_dht * T, int N) - This function returns the value of the N-th sample point in the - unit interval, (j_{\nu,n+1}/j_{\nu,M}) X. These are the points - where the function f(t) is assumed to be sampled. + -- Function: void gsl_spline_free (gsl_spline * SPLINE) - -- Function: double gsl_dht_k_sample (const gsl_dht * T, int N) - This function returns the value of the N-th sample point in - "k-space", j_{\nu,n+1}/X. + -- Function: const char * gsl_spline_name (const gsl_spline * SPLINE) - -File: gsl-ref.info, Node: Discrete Hankel Transform References, Prev: Discrete Hankel Transform Functions, Up: Discrete Hankel Transforms + -- Function: unsigned int gsl_spline_min_size (const gsl_spline * + SPLINE) -32.3 References and Further Reading -=================================== + -- Function: double gsl_spline_eval (const gsl_spline * SPLINE, double + X, gsl_interp_accel * ACC) + -- Function: int gsl_spline_eval_e (const gsl_spline * SPLINE, double + X, gsl_interp_accel * ACC, double * Y) -The algorithms used by these functions are described in the following -papers, + -- Function: double gsl_spline_eval_deriv (const gsl_spline * SPLINE, + double X, gsl_interp_accel * ACC) + -- Function: int gsl_spline_eval_deriv_e (const gsl_spline * SPLINE, + double X, gsl_interp_accel * ACC, double * D) - H. Fisk Johnson, Comp. Phys. Comm. 43, 181 (1987). + -- Function: double gsl_spline_eval_deriv2 (const gsl_spline * SPLINE, + double X, gsl_interp_accel * ACC) + -- Function: int gsl_spline_eval_deriv2_e (const gsl_spline * SPLINE, + double X, gsl_interp_accel * ACC, double * D2) - D. Lemoine, J. Chem. Phys. 101, 3936 (1994). + -- Function: double gsl_spline_eval_integ (const gsl_spline * SPLINE, + double A, double B, gsl_interp_accel * ACC) + -- Function: int gsl_spline_eval_integ_e (const gsl_spline * SPLINE, + double A, double B, gsl_interp_accel * ACC, double * RESULT)  -File: gsl-ref.info, Node: One dimensional Root-Finding, Next: One dimensional Minimization, Prev: Discrete Hankel Transforms, Up: Top +File: gsl-ref.info, Node: 1D Interpolation Example programs, Next: 1D Interpolation References and Further Reading, Prev: 1D Higher-level Interface, Up: Interpolation -33 One dimensional Root-Finding -******************************* +28.7 Examples of 1D Interpolation +================================= -This chapter describes routines for finding roots of arbitrary -one-dimensional functions. The library provides low level components -for a variety of iterative solvers and convergence tests. These can be -combined by the user to achieve the desired solution, with full access -to the intermediate steps of the iteration. Each class of methods uses -the same framework, so that you can switch between solvers at runtime -without needing to recompile your program. Each instance of a solver -keeps track of its own state, allowing the solvers to be used in -multi-threaded programs. +The following program demonstrates the use of the interpolation and +spline functions. It computes a cubic spline interpolation of the +10-point dataset (x_i, y_i) where x_i = i + \sin(i)/2 and y_i = i + +\cos(i^2) for i = 0 \dots 9. - The header file 'gsl_roots.h' contains prototypes for the root -finding functions and related declarations. + #include + #include + #include + #include + #include -* Menu: + int + main (void) + { + int i; + double xi, yi, x[10], y[10]; -* Root Finding Overview:: -* Root Finding Caveats:: -* Initializing the Solver:: -* Providing the function to solve:: -* Search Bounds and Guesses:: -* Root Finding Iteration:: -* Search Stopping Parameters:: -* Root Bracketing Algorithms:: -* Root Finding Algorithms using Derivatives:: -* Root Finding Examples:: -* Root Finding References and Further Reading:: + printf ("#m=0,S=2\n"); - -File: gsl-ref.info, Node: Root Finding Overview, Next: Root Finding Caveats, Up: One dimensional Root-Finding + for (i = 0; i < 10; i++) + { + x[i] = i + 0.5 * sin (i); + y[i] = i + cos (i * i); + printf ("%g %g\n", x[i], y[i]); + } -33.1 Overview -============= + printf ("#m=1,S=0\n"); -One-dimensional root finding algorithms can be divided into two classes, -"root bracketing" and "root polishing". Algorithms which proceed by -bracketing a root are guaranteed to converge. Bracketing algorithms -begin with a bounded region known to contain a root. The size of this -bounded region is reduced, iteratively, until it encloses the root to a -desired tolerance. This provides a rigorous error estimate for the -location of the root. - - The technique of "root polishing" attempts to improve an initial -guess to the root. These algorithms converge only if started "close -enough" to a root, and sacrifice a rigorous error bound for speed. By -approximating the behavior of a function in the vicinity of a root they -attempt to find a higher order improvement of an initial guess. When -the behavior of the function is compatible with the algorithm and a good -initial guess is available a polishing algorithm can provide rapid -convergence. - - In GSL both types of algorithm are available in similar frameworks. -The user provides a high-level driver for the algorithms, and the -library provides the individual functions necessary for each of the -steps. There are three main phases of the iteration. The steps are, - - * initialize solver state, S, for algorithm T - - * update S using the iteration T - - * test S for convergence, and repeat iteration if necessary - -The state for bracketing solvers is held in a 'gsl_root_fsolver' struct. -The updating procedure uses only function evaluations (not derivatives). -The state for root polishing solvers is held in a 'gsl_root_fdfsolver' -struct. The updates require both the function and its derivative (hence -the name 'fdf') to be supplied by the user. - - -File: gsl-ref.info, Node: Root Finding Caveats, Next: Initializing the Solver, Prev: Root Finding Overview, Up: One dimensional Root-Finding - -33.2 Caveats -============ - -Note that root finding functions can only search for one root at a time. -When there are several roots in the search area, the first root to be -found will be returned; however it is difficult to predict which of the -roots this will be. _In most cases, no error will be reported if you -try to find a root in an area where there is more than one._ - - Care must be taken when a function may have a multiple root (such as -f(x) = (x-x_0)^2 or f(x) = (x-x_0)^3). It is not possible to use -root-bracketing algorithms on even-multiplicity roots. For these -algorithms the initial interval must contain a zero-crossing, where the -function is negative at one end of the interval and positive at the -other end. Roots with even-multiplicity do not cross zero, but only -touch it instantaneously. Algorithms based on root bracketing will -still work for odd-multiplicity roots (e.g. cubic, quintic, ...). Root -polishing algorithms generally work with higher multiplicity roots, but -at a reduced rate of convergence. In these cases the "Steffenson -algorithm" can be used to accelerate the convergence of multiple roots. - - While it is not absolutely required that f have a root within the -search region, numerical root finding functions should not be used -haphazardly to check for the _existence_ of roots. There are better -ways to do this. Because it is easy to create situations where -numerical root finders can fail, it is a bad idea to throw a root finder -at a function you do not know much about. In general it is best to -examine the function visually by plotting before searching for a root. + { + gsl_interp_accel *acc + = gsl_interp_accel_alloc (); + gsl_spline *spline + = gsl_spline_alloc (gsl_interp_cspline, 10); - -File: gsl-ref.info, Node: Initializing the Solver, Next: Providing the function to solve, Prev: Root Finding Caveats, Up: One dimensional Root-Finding + gsl_spline_init (spline, x, y, 10); -33.3 Initializing the Solver -============================ + for (xi = x[0]; xi < x[9]; xi += 0.01) + { + yi = gsl_spline_eval (spline, xi, acc); + printf ("%g %g\n", xi, yi); + } + gsl_spline_free (spline); + gsl_interp_accel_free (acc); + } + return 0; + } - -- Function: gsl_root_fsolver * gsl_root_fsolver_alloc (const - gsl_root_fsolver_type * T) - This function returns a pointer to a newly allocated instance of a - solver of type T. For example, the following code creates an - instance of a bisection solver, +The output is designed to be used with the GNU plotutils 'graph' +program, - const gsl_root_fsolver_type * T - = gsl_root_fsolver_bisection; - gsl_root_fsolver * s - = gsl_root_fsolver_alloc (T); - - If there is insufficient memory to create the solver then the - function returns a null pointer and the error handler is invoked - with an error code of 'GSL_ENOMEM'. + $ ./a.out > interp.dat + $ graph -T ps < interp.dat > interp.ps - -- Function: gsl_root_fdfsolver * gsl_root_fdfsolver_alloc (const - gsl_root_fdfsolver_type * T) - This function returns a pointer to a newly allocated instance of a - derivative-based solver of type T. For example, the following code - creates an instance of a Newton-Raphson solver, +The result shows a smooth interpolation of the original points. The +interpolation method can be changed simply by varying the first argument +of 'gsl_spline_alloc'. - const gsl_root_fdfsolver_type * T - = gsl_root_fdfsolver_newton; - gsl_root_fdfsolver * s - = gsl_root_fdfsolver_alloc (T); - - If there is insufficient memory to create the solver then the - function returns a null pointer and the error handler is invoked - with an error code of 'GSL_ENOMEM'. - - -- Function: int gsl_root_fsolver_set (gsl_root_fsolver * S, - gsl_function * F, double X_LOWER, double X_UPPER) - This function initializes, or reinitializes, an existing solver S - to use the function F and the initial search interval [X_LOWER, - X_UPPER]. - - -- Function: int gsl_root_fdfsolver_set (gsl_root_fdfsolver * S, - gsl_function_fdf * FDF, double ROOT) - This function initializes, or reinitializes, an existing solver S - to use the function and derivative FDF and the initial guess ROOT. - - -- Function: void gsl_root_fsolver_free (gsl_root_fsolver * S) - -- Function: void gsl_root_fdfsolver_free (gsl_root_fdfsolver * S) - These functions free all the memory associated with the solver S. + The next program demonstrates a periodic cubic spline with 4 data +points. Note that the first and last points must be supplied with the +same y-value for a periodic spline. - -- Function: const char * gsl_root_fsolver_name (const gsl_root_fsolver - * S) - -- Function: const char * gsl_root_fdfsolver_name (const - gsl_root_fdfsolver * S) - These functions return a pointer to the name of the solver. For - example, + #include + #include + #include + #include + #include - printf ("s is a '%s' solver\n", - gsl_root_fsolver_name (s)); + int + main (void) + { + int N = 4; + double x[4] = {0.00, 0.10, 0.27, 0.30}; + double y[4] = {0.15, 0.70, -0.10, 0.15}; + /* Note: y[0] == y[3] for periodic data */ - would print something like 's is a 'bisection' solver'. + gsl_interp_accel *acc = gsl_interp_accel_alloc (); + const gsl_interp_type *t = gsl_interp_cspline_periodic; + gsl_spline *spline = gsl_spline_alloc (t, N); - -File: gsl-ref.info, Node: Providing the function to solve, Next: Search Bounds and Guesses, Prev: Initializing the Solver, Up: One dimensional Root-Finding + int i; double xi, yi; -33.4 Providing the function to solve -==================================== + printf ("#m=0,S=5\n"); + for (i = 0; i < N; i++) + { + printf ("%g %g\n", x[i], y[i]); + } -You must provide a continuous function of one variable for the root -finders to operate on, and, sometimes, its first derivative. In order -to allow for general parameters the functions are defined by the -following data types: - - -- Data Type: gsl_function - This data type defines a general function with parameters. - - 'double (* function) (double X, void * PARAMS)' - this function should return the value f(x,params) for argument - X and parameters PARAMS + printf ("#m=1,S=0\n"); + gsl_spline_init (spline, x, y, N); - 'void * params' - a pointer to the parameters of the function + for (i = 0; i <= 100; i++) + { + xi = (1 - i / 100.0) * x[0] + (i / 100.0) * x[N-1]; + yi = gsl_spline_eval (spline, xi, acc); + printf ("%g %g\n", xi, yi); + } - Here is an example for the general quadratic function, + gsl_spline_free (spline); + gsl_interp_accel_free (acc); + return 0; + } - f(x) = a x^2 + b x + c + The output can be plotted with GNU 'graph'. -with a = 3, b = 2, c = 1. The following code defines a 'gsl_function' -'F' which you could pass to a root finder as a function pointer: + $ ./a.out > interp.dat + $ graph -T ps < interp.dat > interp.ps - struct my_f_params { double a; double b; double c; }; +The result shows a periodic interpolation of the original points. The +slope of the fitted curve is the same at the beginning and end of the +data, and the second derivative is also. - double - my_f (double x, void * p) { - struct my_f_params * params - = (struct my_f_params *)p; - double a = (params->a); - double b = (params->b); - double c = (params->c); + The next program illustrates the difference between the cubic spline, +Akima, and Steffen interpolation types on a difficult dataset. - return (a * x + b) * x + c; - } + #include + #include + #include - gsl_function F; - struct my_f_params params = { 3.0, 2.0, 1.0 }; + #include + #include - F.function = &my_f; - F.params = ¶ms; + int + main(void) + { + size_t i; + const size_t N = 9; -The function f(x) can be evaluated using the macro 'GSL_FN_EVAL(&F,x)' -defined in 'gsl_math.h'. + /* this dataset is taken from + * J. M. Hyman, Accurate Monotonicity preserving cubic interpolation, + * SIAM J. Sci. Stat. Comput. 4, 4, 1983. */ + const double x[] = { 7.99, 8.09, 8.19, 8.7, 9.2, + 10.0, 12.0, 15.0, 20.0 }; + const double y[] = { 0.0, 2.76429e-5, 4.37498e-2, + 0.169183, 0.469428, 0.943740, + 0.998636, 0.999919, 0.999994 }; + + gsl_interp_accel *acc = gsl_interp_accel_alloc(); + gsl_spline *spline_cubic = gsl_spline_alloc(gsl_interp_cspline, N); + gsl_spline *spline_akima = gsl_spline_alloc(gsl_interp_akima, N); + gsl_spline *spline_steffen = gsl_spline_alloc(gsl_interp_steffen, N); + + gsl_spline_init(spline_cubic, x, y, N); + gsl_spline_init(spline_akima, x, y, N); + gsl_spline_init(spline_steffen, x, y, N); - -- Data Type: gsl_function_fdf - This data type defines a general function with parameters and its - first derivative. - - 'double (* f) (double X, void * PARAMS)' - this function should return the value of f(x,params) for - argument X and parameters PARAMS - - 'double (* df) (double X, void * PARAMS)' - this function should return the value of the derivative of F - with respect to X, f'(x,params), for argument X and parameters - PARAMS - - 'void (* fdf) (double X, void * PARAMS, double * F, double * DF)' - this function should set the values of the function F to - f(x,params) and its derivative DF to f'(x,params) for argument - X and parameters PARAMS. This function provides an - optimization of the separate functions for f(x) and f'(x)--it - is always faster to compute the function and its derivative at - the same time. + for (i = 0; i < N; ++i) + printf("%g %g\n", x[i], y[i]); - 'void * params' - a pointer to the parameters of the function + printf("\n\n"); - Here is an example where f(x) = 2\exp(2x): + for (i = 0; i <= 100; ++i) + { + double xi = (1 - i / 100.0) * x[0] + (i / 100.0) * x[N-1]; + double yi_cubic = gsl_spline_eval(spline_cubic, xi, acc); + double yi_akima = gsl_spline_eval(spline_akima, xi, acc); + double yi_steffen = gsl_spline_eval(spline_steffen, xi, acc); - double - my_f (double x, void * params) - { - return exp (2 * x); - } + printf("%g %g %g %g\n", xi, yi_cubic, yi_akima, yi_steffen); + } - double - my_df (double x, void * params) - { - return 2 * exp (2 * x); + gsl_spline_free(spline_cubic); + gsl_spline_free(spline_akima); + gsl_spline_free(spline_steffen); + gsl_interp_accel_free(acc); + + return 0; } - void - my_fdf (double x, void * params, - double * f, double * df) - { - double t = exp (2 * x); +The cubic method exhibits a local maxima between the 6th and 7th data +points and continues oscillating for the rest of the data. Akima also +shows a local maxima but recovers and follows the data well after the +7th grid point. Steffen preserves monotonicity in all intervals and +does not exhibit oscillations, at the expense of having a discontinuous +second derivative. - *f = t; - *df = 2 * t; /* uses existing value */ - } + +File: gsl-ref.info, Node: 1D Interpolation References and Further Reading, Next: 2D Introduction to Interpolation, Prev: 1D Interpolation Example programs, Up: Interpolation - gsl_function_fdf FDF; +28.8 References and Further Reading +=================================== - FDF.f = &my_f; - FDF.df = &my_df; - FDF.fdf = &my_fdf; - FDF.params = 0; +Descriptions of the interpolation algorithms and further references can +be found in the following publications: -The function f(x) can be evaluated using the macro -'GSL_FN_FDF_EVAL_F(&FDF,x)' and the derivative f'(x) can be evaluated -using the macro 'GSL_FN_FDF_EVAL_DF(&FDF,x)'. Both the function y = -f(x) and its derivative dy = f'(x) can be evaluated at the same time -using the macro 'GSL_FN_FDF_EVAL_F_DF(&FDF,x,y,dy)'. The macro stores -f(x) in its Y argument and f'(x) in its DY argument--both of these -should be pointers to 'double'. + C.W. Ueberhuber, 'Numerical Computation (Volume 1), Chapter 9 + "Interpolation"', Springer (1997), ISBN 3-540-62058-3. - -File: gsl-ref.info, Node: Search Bounds and Guesses, Next: Root Finding Iteration, Prev: Providing the function to solve, Up: One dimensional Root-Finding + D.M. Young, R.T. Gregory, 'A Survey of Numerical Mathematics + (Volume 1), Chapter 6.8', Dover (1988), ISBN 0-486-65691-8. -33.5 Search Bounds and Guesses -============================== + M. Steffen, 'A simple method for monotonic interpolation in one + dimension', Astron. Astrophys. 239, 443-450, 1990. -You provide either search bounds or an initial guess; this section -explains how search bounds and guesses work and how function arguments -control them. + +File: gsl-ref.info, Node: 2D Introduction to Interpolation, Next: 2D Interpolation Functions, Prev: 1D Interpolation References and Further Reading, Up: Interpolation - A guess is simply an x value which is iterated until it is within the -desired precision of a root. It takes the form of a 'double'. +28.9 Introduction to 2D Interpolation +===================================== - Search bounds are the endpoints of an interval which is iterated -until the length of the interval is smaller than the requested -precision. The interval is defined by two values, the lower limit and -the upper limit. Whether the endpoints are intended to be included in -the interval or not depends on the context in which the interval is -used. +Given a set of x coordinates x_1,...,x_m and a set of y coordinates +y_1,...,y_n, each in increasing order, plus a set of function values +z_{ij} for each grid point (x_i,y_j), the routines described in this +section compute a continuous interpolation function z(x,y) such that +z(x_i,y_j) = z_{ij}.  -File: gsl-ref.info, Node: Root Finding Iteration, Next: Search Stopping Parameters, Prev: Search Bounds and Guesses, Up: One dimensional Root-Finding +File: gsl-ref.info, Node: 2D Interpolation Functions, Next: 2D Interpolation Grids, Prev: 2D Introduction to Interpolation, Up: Interpolation -33.6 Iteration -============== +28.10 2D Interpolation Functions +================================ -The following functions drive the iteration of each algorithm. Each -function performs one iteration to update the state of any solver of the -corresponding type. The same functions work for all solvers so that -different methods can be substituted at runtime without modifications to -the code. - - -- Function: int gsl_root_fsolver_iterate (gsl_root_fsolver * S) - -- Function: int gsl_root_fdfsolver_iterate (gsl_root_fdfsolver * S) - These functions perform a single iteration of the solver S. If the - iteration encounters an unexpected problem then an error code will - be returned, - - 'GSL_EBADFUNC' - the iteration encountered a singular point where the function - or its derivative evaluated to 'Inf' or 'NaN'. - - 'GSL_EZERODIV' - the derivative of the function vanished at the iteration - point, preventing the algorithm from continuing without a - division by zero. - - The solver maintains a current best estimate of the root at all -times. The bracketing solvers also keep track of the current best -interval bounding the root. This information can be accessed with the -following auxiliary functions, +The interpolation function for a given dataset is stored in a +'gsl_interp2d' object. These are created by the following functions. - -- Function: double gsl_root_fsolver_root (const gsl_root_fsolver * S) - -- Function: double gsl_root_fdfsolver_root (const gsl_root_fdfsolver * - S) - These functions return the current estimate of the root for the - solver S. + -- Function: gsl_interp2d * gsl_interp2d_alloc (const gsl_interp2d_type + * T, const size_t XSIZE, const size_t YSIZE) + This function returns a pointer to a newly allocated interpolation + object of type T for XSIZE grid points in the x direction and YSIZE + grid points in the y direction. - -- Function: double gsl_root_fsolver_x_lower (const gsl_root_fsolver * - S) - -- Function: double gsl_root_fsolver_x_upper (const gsl_root_fsolver * - S) - These functions return the current bracketing interval for the - solver S. + -- Function: int gsl_interp2d_init (gsl_interp2d * INTERP, const double + XA[], const double YA[], const double ZA[], const size_t + XSIZE, const size_t YSIZE) + This function initializes the interpolation object INTERP for the + data (XA,YA,ZA) where XA and YA are arrays of the x and y grid + points of size XSIZE and YSIZE respectively, and ZA is an array of + function values of size XSIZE*YSIZE. The interpolation object + ('gsl_interp2d') does not save the data arrays XA, YA, and ZA and + only stores the static state computed from the data. The XA and YA + data arrays are always assumed to be strictly ordered, with + increasing x,y values; the behavior for other arrangements is not + defined. + + -- Function: void gsl_interp2d_free (gsl_interp2d * INTERP) + This function frees the interpolation object INTERP.  -File: gsl-ref.info, Node: Search Stopping Parameters, Next: Root Bracketing Algorithms, Prev: Root Finding Iteration, Up: One dimensional Root-Finding +File: gsl-ref.info, Node: 2D Interpolation Grids, Next: 2D Interpolation Types, Prev: 2D Interpolation Functions, Up: Interpolation -33.7 Search Stopping Parameters -=============================== +28.11 2D Interpolation Grids +============================ -A root finding procedure should stop when one of the following -conditions is true: +The 2D interpolation routines access the function values z_{ij} with the +following ordering: - * A root has been found to within the user-specified precision. + z_ij = za[j*xsize + i] - * A user-specified maximum number of iterations has been reached. + with i = 0,...,xsize-1 and j = 0,...,ysize-1. However, for ease of +use, the following functions are provided to add and retrieve elements +from the function grid without requiring knowledge of the internal +ordering. - * An error has occurred. + -- Function: int gsl_interp2d_set (const gsl_interp2d * INTERP, double + ZA[], const size_t I, const size_t J, const double Z) + This function sets the value z_{ij} for grid point (I,J) of the + array ZA to Z. -The handling of these conditions is under user control. The functions -below allow the user to test the precision of the current result in -several standard ways. + -- Function: double gsl_interp2d_get (const gsl_interp2d * INTERP, + const double ZA[], const size_t I, const size_t J) + This function returns the value z_{ij} for grid point (I,J) stored + in the array ZA. - -- Function: int gsl_root_test_interval (double X_LOWER, double - X_UPPER, double EPSABS, double EPSREL) - This function tests for the convergence of the interval [X_LOWER, - X_UPPER] with absolute error EPSABS and relative error EPSREL. The - test returns 'GSL_SUCCESS' if the following condition is achieved, + -- Function: size_t gsl_interp2d_idx (const gsl_interp2d * INTERP, + const size_t I, const size_t J) + This function returns the index corresponding to the grid point + (I,J). The index is given by j*xsize + i. + + +File: gsl-ref.info, Node: 2D Interpolation Types, Next: 2D Evaluation of Interpolating Functions, Prev: 2D Interpolation Grids, Up: Interpolation - |a - b| < epsabs + epsrel min(|a|,|b|) +28.12 2D Interpolation Types +============================ - when the interval x = [a,b] does not include the origin. If the - interval includes the origin then \min(|a|,|b|) is replaced by zero - (which is the minimum value of |x| over the interval). This - ensures that the relative error is accurately estimated for roots - close to the origin. +The interpolation library provides the following 2D interpolation types: - This condition on the interval also implies that any estimate of - the root r in the interval satisfies the same condition with - respect to the true root r^*, + -- Interpolation Type: gsl_interp2d_bilinear + Bilinear interpolation. This interpolation method does not require + any additional memory. - |r - r^*| < epsabs + epsrel r^* + -- Interpolation Type: gsl_interp2d_bicubic + Bicubic interpolation. - assuming that the true root r^* is contained within the interval. + -- Function: const char * gsl_interp2d_name (const gsl_interp2d * + INTERP) + This function returns the name of the interpolation type used by + INTERP. For example, - -- Function: int gsl_root_test_delta (double X1, double X0, double - EPSABS, double EPSREL) + printf ("interp uses '%s' interpolation.\n", + gsl_interp2d_name (interp)); - This function tests for the convergence of the sequence ..., X0, X1 - with absolute error EPSABS and relative error EPSREL. The test - returns 'GSL_SUCCESS' if the following condition is achieved, + would print something like, - |x_1 - x_0| < epsabs + epsrel |x_1| + interp uses 'bilinear' interpolation. - and returns 'GSL_CONTINUE' otherwise. + -- Function: unsigned int gsl_interp2d_min_size (const gsl_interp2d * + INTERP) + -- Function: unsigned int gsl_interp2d_type_min_size (const + gsl_interp2d_type * T) + These functions return the minimum number of points required by the + interpolation object INTERP or interpolation type T. For example, + bicubic interpolation requires a minimum of 4 points. - -- Function: int gsl_root_test_residual (double F, double EPSABS) - This function tests the residual value F against the absolute error - bound EPSABS. The test returns 'GSL_SUCCESS' if the following - condition is achieved, + +File: gsl-ref.info, Node: 2D Evaluation of Interpolating Functions, Next: 2D Higher-level Interface, Prev: 2D Interpolation Types, Up: Interpolation - |f| < epsabs +28.13 2D Evaluation of Interpolating Functions +============================================== - and returns 'GSL_CONTINUE' otherwise. This criterion is suitable - for situations where the precise location of the root, x, is - unimportant provided a value can be found where the residual, - |f(x)|, is small enough. + -- Function: double gsl_interp2d_eval (const gsl_interp2d * INTERP, + const double XA[], const double YA[], const double ZA[], const + double X, const double Y, gsl_interp_accel * XACC, + gsl_interp_accel * YACC) + -- Function: int gsl_interp2d_eval_e (const gsl_interp2d * INTERP, + const double XA[], const double YA[], const double ZA[], const + double X, const double Y, gsl_interp_accel * XACC, + gsl_interp_accel * YACC, double * Z) + These functions return the interpolated value of Z for a given + point (X,Y), using the interpolation object INTERP, data arrays XA, + YA, and ZA and the accelerators XACC and YACC. When X is outside + the range of XA or Y is outside the range of YA, the error code + 'GSL_EDOM' is returned. + + -- Function: double gsl_interp2d_eval_extrap (const gsl_interp2d * + INTERP, const double XA[], const double YA[], const double + ZA[], const double X, const double Y, gsl_interp_accel * XACC, + gsl_interp_accel * YACC) + -- Function: int gsl_interp2d_eval_extrap_e (const gsl_interp2d * + INTERP, const double XA[], const double YA[], const double + ZA[], const double X, const double Y, gsl_interp_accel * XACC, + gsl_interp_accel * YACC, double * Z) + These functions return the interpolated value of Z for a given + point (X,Y), using the interpolation object INTERP, data arrays XA, + YA, and ZA and the accelerators XACC and YACC. The functions + perform no bounds checking, so when X is outside the range of XA or + Y is outside the range of YA, extrapolation is performed. + + -- Function: double gsl_interp2d_eval_deriv_x (const gsl_interp2d * + INTERP, const double XA[], const double YA[], const double + ZA[], const double X, const double Y, gsl_interp_accel * XACC, + gsl_interp_accel * YACC) + -- Function: int gsl_interp2d_eval_deriv_x_e (const gsl_interp2d * + INTERP, const double XA[], const double YA[], const double + ZA[], const double X, const double Y, gsl_interp_accel * XACC, + gsl_interp_accel * YACC, double * D) + These functions return the interpolated value D = \partial z / + \partial x for a given point (X,Y), using the interpolation object + INTERP, data arrays XA, YA, and ZA and the accelerators XACC and + YACC. When X is outside the range of XA or Y is outside the range + of YA, the error code 'GSL_EDOM' is returned. + + -- Function: double gsl_interp2d_eval_deriv_y (const gsl_interp2d * + INTERP, const double XA[], const double YA[], const double + ZA[], const double X, const double Y, gsl_interp_accel * XACC, + gsl_interp_accel * YACC) + -- Function: int gsl_interp2d_eval_deriv_y_e (const gsl_interp2d * + INTERP, const double XA[], const double YA[], const double + ZA[], const double X, const double Y, gsl_interp_accel * XACC, + gsl_interp_accel * YACC, double * D) + These functions return the interpolated value D = \partial z / + \partial y for a given point (X,Y), using the interpolation object + INTERP, data arrays XA, YA, and ZA and the accelerators XACC and + YACC. When X is outside the range of XA or Y is outside the range + of YA, the error code 'GSL_EDOM' is returned. + + -- Function: double gsl_interp2d_eval_deriv_xx (const gsl_interp2d * + INTERP, const double XA[], const double YA[], const double + ZA[], const double X, const double Y, gsl_interp_accel * XACC, + gsl_interp_accel * YACC) + -- Function: int gsl_interp2d_eval_deriv_xx_e (const gsl_interp2d * + INTERP, const double XA[], const double YA[], const double + ZA[], const double X, const double Y, gsl_interp_accel * XACC, + gsl_interp_accel * YACC, double * D) + These functions return the interpolated value D = \partial^2 z / + \partial x^2 for a given point (X,Y), using the interpolation + object INTERP, data arrays XA, YA, and ZA and the accelerators XACC + and YACC. When X is outside the range of XA or Y is outside the + range of YA, the error code 'GSL_EDOM' is returned. + + -- Function: double gsl_interp2d_eval_deriv_yy (const gsl_interp2d * + INTERP, const double XA[], const double YA[], const double + ZA[], const double X, const double Y, gsl_interp_accel * XACC, + gsl_interp_accel * YACC) + -- Function: int gsl_interp2d_eval_deriv_yy_e (const gsl_interp2d * + INTERP, const double XA[], const double YA[], const double + ZA[], const double X, const double Y, gsl_interp_accel * XACC, + gsl_interp_accel * YACC, double * D) + These functions return the interpolated value D = \partial^2 z / + \partial y^2 for a given point (X,Y), using the interpolation + object INTERP, data arrays XA, YA, and ZA and the accelerators XACC + and YACC. When X is outside the range of XA or Y is outside the + range of YA, the error code 'GSL_EDOM' is returned. + + -- Function: double gsl_interp2d_eval_deriv_xy (const gsl_interp2d * + INTERP, const double XA[], const double YA[], const double + ZA[], const double X, const double Y, gsl_interp_accel * XACC, + gsl_interp_accel * YACC) + -- Function: int gsl_interp2d_eval_deriv_xy_e (const gsl_interp2d * + INTERP, const double XA[], const double YA[], const double + ZA[], const double X, const double Y, gsl_interp_accel * XACC, + gsl_interp_accel * YACC, double * D) + These functions return the interpolated value D = \partial^2 z / + \partial x \partial y for a given point (X,Y), using the + interpolation object INTERP, data arrays XA, YA, and ZA and the + accelerators XACC and YACC. When X is outside the range of XA or Y + is outside the range of YA, the error code 'GSL_EDOM' is returned.  -File: gsl-ref.info, Node: Root Bracketing Algorithms, Next: Root Finding Algorithms using Derivatives, Prev: Search Stopping Parameters, Up: One dimensional Root-Finding +File: gsl-ref.info, Node: 2D Higher-level Interface, Next: 2D Interpolation Example programs, Prev: 2D Evaluation of Interpolating Functions, Up: Interpolation -33.8 Root Bracketing Algorithms +28.14 2D Higher-level Interface =============================== -The root bracketing algorithms described in this section require an -initial interval which is guaranteed to contain a root--if a and b are -the endpoints of the interval then f(a) must differ in sign from f(b). -This ensures that the function crosses zero at least once in the -interval. If a valid initial interval is used then these algorithm -cannot fail, provided the function is well-behaved. - - Note that a bracketing algorithm cannot find roots of even degree, -since these do not cross the x-axis. - - -- Solver: gsl_root_fsolver_bisection - - The "bisection algorithm" is the simplest method of bracketing the - roots of a function. It is the slowest algorithm provided by the - library, with linear convergence. - - On each iteration, the interval is bisected and the value of the - function at the midpoint is calculated. The sign of this value is - used to determine which half of the interval does not contain a - root. That half is discarded to give a new, smaller interval - containing the root. This procedure can be continued indefinitely - until the interval is sufficiently small. - - At any time the current estimate of the root is taken as the - midpoint of the interval. - - -- Solver: gsl_root_fsolver_falsepos - - The "false position algorithm" is a method of finding roots based - on linear interpolation. Its convergence is linear, but it is - usually faster than bisection. - - On each iteration a line is drawn between the endpoints (a,f(a)) - and (b,f(b)) and the point where this line crosses the x-axis taken - as a "midpoint". The value of the function at this point is - calculated and its sign is used to determine which side of the - interval does not contain a root. That side is discarded to give a - new, smaller interval containing the root. This procedure can be - continued indefinitely until the interval is sufficiently small. - - The best estimate of the root is taken from the linear - interpolation of the interval on the current iteration. - - -- Solver: gsl_root_fsolver_brent - - The "Brent-Dekker method" (referred to here as "Brent's method") - combines an interpolation strategy with the bisection algorithm. - This produces a fast algorithm which is still robust. - - On each iteration Brent's method approximates the function using an - interpolating curve. On the first iteration this is a linear - interpolation of the two endpoints. For subsequent iterations the - algorithm uses an inverse quadratic fit to the last three points, - for higher accuracy. The intercept of the interpolating curve with - the x-axis is taken as a guess for the root. If it lies within the - bounds of the current interval then the interpolating point is - accepted, and used to generate a smaller interval. If the - interpolating point is not accepted then the algorithm falls back - to an ordinary bisection step. +The functions described in the previous sections required the user to +supply pointers to the x, y, and z arrays on each call. The following +functions are equivalent to the corresponding 'gsl_interp2d' functions +but maintain a copy of this data in the 'gsl_spline2d' object. This +removes the need to pass XA, YA, and ZA as arguments on each evaluation. +These functions are defined in the header file 'gsl_spline2d.h'. + + -- Function: gsl_spline2d * gsl_spline2d_alloc (const gsl_interp2d_type + * T, size_t XSIZE, size_t YSIZE) + + -- Function: int gsl_spline2d_init (gsl_spline2d * SPLINE, const double + XA[], const double YA[], const double ZA[], size_t XSIZE, + size_t YSIZE) - The best estimate of the root is taken from the most recent - interpolation or bisection. + -- Function: void gsl_spline2d_free (gsl_spline2d * SPLINE) - -File: gsl-ref.info, Node: Root Finding Algorithms using Derivatives, Next: Root Finding Examples, Prev: Root Bracketing Algorithms, Up: One dimensional Root-Finding + -- Function: const char * gsl_spline2d_name (const gsl_spline2d * + SPLINE) -33.9 Root Finding Algorithms using Derivatives -============================================== + -- Function: unsigned int gsl_spline2d_min_size (const gsl_spline2d * + SPLINE) -The root polishing algorithms described in this section require an -initial guess for the location of the root. There is no absolute -guarantee of convergence--the function must be suitable for this -technique and the initial guess must be sufficiently close to the root -for it to work. When these conditions are satisfied then convergence is -quadratic. + -- Function: double gsl_spline2d_eval (const gsl_spline2d * SPLINE, + const double X, const double Y, gsl_interp_accel * XACC, + gsl_interp_accel * YACC) + -- Function: int gsl_spline2d_eval_e (const gsl_spline2d * SPLINE, + const double X, const double Y, gsl_interp_accel * XACC, + gsl_interp_accel * YACC, double * Z) + + -- Function: double gsl_spline2d_eval_deriv_x (const gsl_spline2d * + SPLINE, const double X, const double Y, gsl_interp_accel * + XACC, gsl_interp_accel * YACC) + -- Function: int gsl_spline2d_eval_deriv_x_e (const gsl_spline2d * + SPLINE, const double X, const double Y, gsl_interp_accel * + XACC, gsl_interp_accel * YACC, double * D) + + -- Function: double gsl_spline2d_eval_deriv_y (const gsl_spline2d * + SPLINE, const double X, const double Y, gsl_interp_accel * + XACC, gsl_interp_accel * YACC) + -- Function: int gsl_spline2d_eval_deriv_y_e (const gsl_spline2d * + SPLINE, const double X, const double Y, gsl_interp_accel * + XACC, gsl_interp_accel * YACC, double * D) + + -- Function: double gsl_spline2d_eval_deriv_xx (const gsl_spline2d * + SPLINE, const double X, const double Y, gsl_interp_accel * + XACC, gsl_interp_accel * YACC) + -- Function: int gsl_spline2d_eval_deriv_xx_e (const gsl_spline2d * + SPLINE, const double X, const double Y, gsl_interp_accel * + XACC, gsl_interp_accel * YACC, double * D) + + -- Function: double gsl_spline2d_eval_deriv_yy (const gsl_spline2d * + SPLINE, const double X, const double Y, gsl_interp_accel * + XACC, gsl_interp_accel * YACC) + -- Function: int gsl_spline2d_eval_deriv_yy_e (const gsl_spline2d * + SPLINE, const double X, const double Y, gsl_interp_accel * + XACC, gsl_interp_accel * YACC, double * D) + + -- Function: double gsl_spline2d_eval_deriv_xy (const gsl_spline2d * + SPLINE, const double X, const double Y, gsl_interp_accel * + XACC, gsl_interp_accel * YACC) + -- Function: int gsl_spline2d_eval_deriv_xy_e (const gsl_spline2d * + SPLINE, const double X, const double Y, gsl_interp_accel * + XACC, gsl_interp_accel * YACC, double * D) + + -- Function: int gsl_spline2d_set (const gsl_spline2d * SPLINE, double + ZA[], const size_t I, const size_t J, const double Z) + + -- Function: double gsl_spline2d_get (const gsl_spline2d * SPLINE, + const double ZA[], const size_t I, const size_t J) + This function returns the value z_{ij} for grid point (I,J) stored + in the array ZA. - These algorithms make use of both the function and its derivative. + +File: gsl-ref.info, Node: 2D Interpolation Example programs, Prev: 2D Higher-level Interface, Up: Interpolation - -- Derivative Solver: gsl_root_fdfsolver_newton +28.15 2D Interpolation Example programs +======================================= - Newton's Method is the standard root-polishing algorithm. The - algorithm begins with an initial guess for the location of the - root. On each iteration, a line tangent to the function f is drawn - at that position. The point where this line crosses the x-axis - becomes the new guess. The iteration is defined by the following - sequence, +The following example performs bilinear interpolation on the unit +square, using z values of (0,1,0.5,1) going clockwise around the square. - x_{i+1} = x_i - f(x_i)/f'(x_i) + #include + #include - Newton's method converges quadratically for single roots, and - linearly for multiple roots. + #include + #include + #include - -- Derivative Solver: gsl_root_fdfsolver_secant + int + main() + { + const gsl_interp2d_type *T = gsl_interp2d_bilinear; + const size_t N = 100; /* number of points to interpolate */ + const double xa[] = { 0.0, 1.0 }; /* define unit square */ + const double ya[] = { 0.0, 1.0 }; + const size_t nx = sizeof(xa) / sizeof(double); /* x grid points */ + const size_t ny = sizeof(ya) / sizeof(double); /* y grid points */ + double *za = malloc(nx * ny * sizeof(double)); + gsl_spline2d *spline = gsl_spline2d_alloc(T, nx, ny); + gsl_interp_accel *xacc = gsl_interp_accel_alloc(); + gsl_interp_accel *yacc = gsl_interp_accel_alloc(); + size_t i, j; + + /* set z grid values */ + gsl_spline2d_set(spline, za, 0, 0, 0.0); + gsl_spline2d_set(spline, za, 0, 1, 1.0); + gsl_spline2d_set(spline, za, 1, 1, 0.5); + gsl_spline2d_set(spline, za, 1, 0, 1.0); - The "secant method" is a simplified version of Newton's method - which does not require the computation of the derivative on every - step. + /* initialize interpolation */ + gsl_spline2d_init(spline, xa, ya, za, nx, ny); - On its first iteration the algorithm begins with Newton's method, - using the derivative to compute a first step, + /* interpolate N values in x and y and print out grid for plotting */ + for (i = 0; i < N; ++i) + { + double xi = i / (N - 1.0); - x_1 = x_0 - f(x_0)/f'(x_0) + for (j = 0; j < N; ++j) + { + double yj = j / (N - 1.0); + double zij = gsl_spline2d_eval(spline, xi, yj, xacc, yacc); - Subsequent iterations avoid the evaluation of the derivative by - replacing it with a numerical estimate, the slope of the line - through the previous two points, - - x_{i+1} = x_i f(x_i) / f'_{est} where - f'_{est} = (f(x_i) - f(x_{i-1})/(x_i - x_{i-1}) - - When the derivative does not change significantly in the vicinity - of the root the secant method gives a useful saving. - Asymptotically the secant method is faster than Newton's method - whenever the cost of evaluating the derivative is more than 0.44 - times the cost of evaluating the function itself. As with all - methods of computing a numerical derivative the estimate can suffer - from cancellation errors if the separation of the points becomes - too small. - - On single roots, the method has a convergence of order (1 + \sqrt - 5)/2 (approximately 1.62). It converges linearly for multiple - roots. - - -- Derivative Solver: gsl_root_fdfsolver_steffenson - - The "Steffenson Method"(1) provides the fastest convergence of all - the routines. It combines the basic Newton algorithm with an - Aitken "delta-squared" acceleration. If the Newton iterates are - x_i then the acceleration procedure generates a new sequence R_i, - - R_i = x_i - (x_{i+1} - x_i)^2 / (x_{i+2} - 2 x_{i+1} + x_{i}) - - which converges faster than the original sequence under reasonable - conditions. The new sequence requires three terms before it can - produce its first value so the method returns accelerated values on - the second and subsequent iterations. On the first iteration it - returns the ordinary Newton estimate. The Newton iterate is also - returned if the denominator of the acceleration term ever becomes - zero. + printf("%f %f %f\n", xi, yj, zij); + } + printf("\n"); + } - As with all acceleration procedures this method can become unstable - if the function is not well-behaved. + gsl_spline2d_free(spline); + gsl_interp_accel_free(xacc); + gsl_interp_accel_free(yacc); + free(za); - ---------- Footnotes ---------- + return 0; + } - (1) J.F. Steffensen (1873-1961). The spelling used in the name of -the function is slightly incorrect, but has been preserved to avoid -incompatibility. +The results of the interpolation are shown in the following plot, where +the corners are labeled with their fixed z values.  -File: gsl-ref.info, Node: Root Finding Examples, Next: Root Finding References and Further Reading, Prev: Root Finding Algorithms using Derivatives, Up: One dimensional Root-Finding - -33.10 Examples -============== - -For any root finding algorithm we need to prepare the function to be -solved. For this example we will use the general quadratic equation -described earlier. We first need a header file ('demo_fn.h') to define -the function parameters, +File: gsl-ref.info, Node: Numerical Differentiation, Next: Chebyshev Approximations, Prev: Interpolation, Up: Top - struct quadratic_params - { - double a, b, c; - }; +29 Numerical Differentiation +**************************** - double quadratic (double x, void *params); - double quadratic_deriv (double x, void *params); - void quadratic_fdf (double x, void *params, - double *y, double *dy); +The functions described in this chapter compute numerical derivatives by +finite differencing. An adaptive algorithm is used to find the best +choice of finite difference and to estimate the error in the derivative. +These functions are declared in the header file 'gsl_deriv.h'. -We place the function definitions in a separate file ('demo_fn.c'), +* Menu: - double - quadratic (double x, void *params) - { - struct quadratic_params *p - = (struct quadratic_params *) params; +* Numerical Differentiation functions:: +* Numerical Differentiation Examples:: +* Numerical Differentiation References:: - double a = p->a; - double b = p->b; - double c = p->c; + +File: gsl-ref.info, Node: Numerical Differentiation functions, Next: Numerical Differentiation Examples, Up: Numerical Differentiation - return (a * x + b) * x + c; - } +29.1 Functions +============== - double - quadratic_deriv (double x, void *params) - { - struct quadratic_params *p - = (struct quadratic_params *) params; + -- Function: int gsl_deriv_central (const gsl_function * F, double X, + double H, double * RESULT, double * ABSERR) + This function computes the numerical derivative of the function F + at the point X using an adaptive central difference algorithm with + a step-size of H. The derivative is returned in RESULT and an + estimate of its absolute error is returned in ABSERR. - double a = p->a; - double b = p->b; - double c = p->c; + The initial value of H is used to estimate an optimal step-size, + based on the scaling of the truncation error and round-off error in + the derivative calculation. The derivative is computed using a + 5-point rule for equally spaced abscissae at x-h, x-h/2, x, x+h/2, + x+h, with an error estimate taken from the difference between the + 5-point rule and the corresponding 3-point rule x-h, x, x+h. Note + that the value of the function at x does not contribute to the + derivative calculation, so only 4-points are actually used. - return 2.0 * a * x + b; - } + -- Function: int gsl_deriv_forward (const gsl_function * F, double X, + double H, double * RESULT, double * ABSERR) + This function computes the numerical derivative of the function F + at the point X using an adaptive forward difference algorithm with + a step-size of H. The function is evaluated only at points greater + than X, and never at X itself. The derivative is returned in + RESULT and an estimate of its absolute error is returned in ABSERR. + This function should be used if f(x) has a discontinuity at X, or + is undefined for values less than X. - void - quadratic_fdf (double x, void *params, - double *y, double *dy) - { - struct quadratic_params *p - = (struct quadratic_params *) params; + The initial value of H is used to estimate an optimal step-size, + based on the scaling of the truncation error and round-off error in + the derivative calculation. The derivative at x is computed using + an "open" 4-point rule for equally spaced abscissae at x+h/4, + x+h/2, x+3h/4, x+h, with an error estimate taken from the + difference between the 4-point rule and the corresponding 2-point + rule x+h/2, x+h. - double a = p->a; - double b = p->b; - double c = p->c; + -- Function: int gsl_deriv_backward (const gsl_function * F, double X, + double H, double * RESULT, double * ABSERR) + This function computes the numerical derivative of the function F + at the point X using an adaptive backward difference algorithm with + a step-size of H. The function is evaluated only at points less + than X, and never at X itself. The derivative is returned in + RESULT and an estimate of its absolute error is returned in ABSERR. + This function should be used if f(x) has a discontinuity at X, or + is undefined for values greater than X. - *y = (a * x + b) * x + c; - *dy = 2.0 * a * x + b; - } + This function is equivalent to calling 'gsl_deriv_forward' with a + negative step-size. -The first program uses the function solver 'gsl_root_fsolver_brent' for -Brent's method and the general quadratic defined above to solve the -following equation, + +File: gsl-ref.info, Node: Numerical Differentiation Examples, Next: Numerical Differentiation References, Prev: Numerical Differentiation functions, Up: Numerical Differentiation - x^2 - 5 = 0 +29.2 Examples +============= -with solution x = \sqrt 5 = 2.236068... +The following code estimates the derivative of the function f(x) = +x^{3/2} at x=2 and at x=0. The function f(x) is undefined for x<0 so +the derivative at x=0 is computed using 'gsl_deriv_forward'. #include - #include #include - #include + #include - #include "demo_fn.h" - #include "demo_fn.c" + double f (double x, void * params) + { + (void)(params); /* avoid unused parameter warning */ + return pow (x, 1.5); + } int main (void) { - int status; - int iter = 0, max_iter = 100; - const gsl_root_fsolver_type *T; - gsl_root_fsolver *s; - double r = 0, r_expected = sqrt (5.0); - double x_lo = 0.0, x_hi = 5.0; gsl_function F; - struct quadratic_params params = {1.0, 0.0, -5.0}; - - F.function = &quadratic; - F.params = ¶ms; - - T = gsl_root_fsolver_brent; - s = gsl_root_fsolver_alloc (T); - gsl_root_fsolver_set (s, &F, x_lo, x_hi); + double result, abserr; - printf ("using %s method\n", - gsl_root_fsolver_name (s)); + F.function = &f; + F.params = 0; - printf ("%5s [%9s, %9s] %9s %10s %9s\n", - "iter", "lower", "upper", "root", - "err", "err(est)"); + printf ("f(x) = x^(3/2)\n"); - do - { - iter++; - status = gsl_root_fsolver_iterate (s); - r = gsl_root_fsolver_root (s); - x_lo = gsl_root_fsolver_x_lower (s); - x_hi = gsl_root_fsolver_x_upper (s); - status = gsl_root_test_interval (x_lo, x_hi, - 0, 0.001); - - if (status == GSL_SUCCESS) - printf ("Converged:\n"); - - printf ("%5d [%.7f, %.7f] %.7f %+.7f %.7f\n", - iter, x_lo, x_hi, - r, r - r_expected, - x_hi - x_lo); - } - while (status == GSL_CONTINUE && iter < max_iter); + gsl_deriv_central (&F, 2.0, 1e-8, &result, &abserr); + printf ("x = 2.0\n"); + printf ("f'(x) = %.10f +/- %.10f\n", result, abserr); + printf ("exact = %.10f\n\n", 1.5 * sqrt(2.0)); - gsl_root_fsolver_free (s); + gsl_deriv_forward (&F, 0.0, 1e-8, &result, &abserr); + printf ("x = 0.0\n"); + printf ("f'(x) = %.10f +/- %.10f\n", result, abserr); + printf ("exact = %.10f\n", 0.0); - return status; + return 0; } -Here are the results of the iterations, +Here is the output of the program, $ ./a.out - using brent method - iter [ lower, upper] root err err(est) - 1 [1.0000000, 5.0000000] 1.0000000 -1.2360680 4.0000000 - 2 [1.0000000, 3.0000000] 3.0000000 +0.7639320 2.0000000 - 3 [2.0000000, 3.0000000] 2.0000000 -0.2360680 1.0000000 - 4 [2.2000000, 3.0000000] 2.2000000 -0.0360680 0.8000000 - 5 [2.2000000, 2.2366300] 2.2366300 +0.0005621 0.0366300 - Converged: - 6 [2.2360634, 2.2366300] 2.2360634 -0.0000046 0.0005666 - -If the program is modified to use the bisection solver instead of -Brent's method, by changing 'gsl_root_fsolver_brent' to -'gsl_root_fsolver_bisection' the slower convergence of the Bisection -method can be observed, + f(x) = x^(3/2) + x = 2.0 + f'(x) = 2.1213203120 +/- 0.0000005006 + exact = 2.1213203436 - $ ./a.out - using bisection method - iter [ lower, upper] root err err(est) - 1 [0.0000000, 2.5000000] 1.2500000 -0.9860680 2.5000000 - 2 [1.2500000, 2.5000000] 1.8750000 -0.3610680 1.2500000 - 3 [1.8750000, 2.5000000] 2.1875000 -0.0485680 0.6250000 - 4 [2.1875000, 2.5000000] 2.3437500 +0.1076820 0.3125000 - 5 [2.1875000, 2.3437500] 2.2656250 +0.0295570 0.1562500 - 6 [2.1875000, 2.2656250] 2.2265625 -0.0095055 0.0781250 - 7 [2.2265625, 2.2656250] 2.2460938 +0.0100258 0.0390625 - 8 [2.2265625, 2.2460938] 2.2363281 +0.0002601 0.0195312 - 9 [2.2265625, 2.2363281] 2.2314453 -0.0046227 0.0097656 - 10 [2.2314453, 2.2363281] 2.2338867 -0.0021813 0.0048828 - 11 [2.2338867, 2.2363281] 2.2351074 -0.0009606 0.0024414 - Converged: - 12 [2.2351074, 2.2363281] 2.2357178 -0.0003502 0.0012207 + x = 0.0 + f'(x) = 0.0000000160 +/- 0.0000000339 + exact = 0.0000000000 - The next program solves the same function using a derivative solver -instead. + +File: gsl-ref.info, Node: Numerical Differentiation References, Prev: Numerical Differentiation Examples, Up: Numerical Differentiation - #include - #include - #include - #include +29.3 References and Further Reading +=================================== + +The algorithms used by these functions are described in the following +sources: - #include "demo_fn.h" - #include "demo_fn.c" + Abramowitz and Stegun, 'Handbook of Mathematical Functions', + Section 25.3.4, and Table 25.5 (Coefficients for Differentiation). - int - main (void) - { - int status; - int iter = 0, max_iter = 100; - const gsl_root_fdfsolver_type *T; - gsl_root_fdfsolver *s; - double x0, x = 5.0, r_expected = sqrt (5.0); - gsl_function_fdf FDF; - struct quadratic_params params = {1.0, 0.0, -5.0}; - - FDF.f = &quadratic; - FDF.df = &quadratic_deriv; - FDF.fdf = &quadratic_fdf; - FDF.params = ¶ms; - - T = gsl_root_fdfsolver_newton; - s = gsl_root_fdfsolver_alloc (T); - gsl_root_fdfsolver_set (s, &FDF, x); - - printf ("using %s method\n", - gsl_root_fdfsolver_name (s)); - - printf ("%-5s %10s %10s %10s\n", - "iter", "root", "err", "err(est)"); - do - { - iter++; - status = gsl_root_fdfsolver_iterate (s); - x0 = x; - x = gsl_root_fdfsolver_root (s); - status = gsl_root_test_delta (x, x0, 0, 1e-3); + S.D. Conte and Carl de Boor, 'Elementary Numerical Analysis: An + Algorithmic Approach', McGraw-Hill, 1972. - if (status == GSL_SUCCESS) - printf ("Converged:\n"); + +File: gsl-ref.info, Node: Chebyshev Approximations, Next: Series Acceleration, Prev: Numerical Differentiation, Up: Top - printf ("%5d %10.7f %+10.7f %10.7f\n", - iter, x, x - r_expected, x - x0); - } - while (status == GSL_CONTINUE && iter < max_iter); +30 Chebyshev Approximations +*************************** - gsl_root_fdfsolver_free (s); - return status; - } +This chapter describes routines for computing Chebyshev approximations +to univariate functions. A Chebyshev approximation is a truncation of +the series f(x) = \sum c_n T_n(x), where the Chebyshev polynomials +T_n(x) = \cos(n \arccos x) provide an orthogonal basis of polynomials on +the interval [-1,1] with the weight function 1 / \sqrt{1-x^2}. The +first few Chebyshev polynomials are, T_0(x) = 1, T_1(x) = x, T_2(x) = 2 +x^2 - 1. For further information see Abramowitz & Stegun, Chapter 22. -Here are the results for Newton's method, + The functions described in this chapter are declared in the header +file 'gsl_chebyshev.h'. - $ ./a.out - using newton method - iter root err err(est) - 1 3.0000000 +0.7639320 -2.0000000 - 2 2.3333333 +0.0972654 -0.6666667 - 3 2.2380952 +0.0020273 -0.0952381 - Converged: - 4 2.2360689 +0.0000009 -0.0020263 - -Note that the error can be estimated more accurately by taking the -difference between the current iterate and next iterate rather than the -previous iterate. The other derivative solvers can be investigated by -changing 'gsl_root_fdfsolver_newton' to 'gsl_root_fdfsolver_secant' or -'gsl_root_fdfsolver_steffenson'. +* Menu: + +* Chebyshev Definitions:: +* Creation and Calculation of Chebyshev Series:: +* Auxiliary Functions for Chebyshev Series:: +* Chebyshev Series Evaluation:: +* Derivatives and Integrals:: +* Chebyshev Approximation Examples:: +* Chebyshev Approximation References and Further Reading::  -File: gsl-ref.info, Node: Root Finding References and Further Reading, Prev: Root Finding Examples, Up: One dimensional Root-Finding +File: gsl-ref.info, Node: Chebyshev Definitions, Next: Creation and Calculation of Chebyshev Series, Up: Chebyshev Approximations -33.11 References and Further Reading -==================================== +30.1 Definitions +================ + +A Chebyshev series is stored using the following structure, + + typedef struct + { + double * c; /* coefficients c[0] .. c[order] */ + int order; /* order of expansion */ + double a; /* lower interval point */ + double b; /* upper interval point */ + ... + } gsl_cheb_series + +The approximation is made over the range [a,b] using ORDER+1 terms, +including the coefficient c[0]. The series is computed using the +following convention, -For information on the Brent-Dekker algorithm see the following two -papers, + f(x) = (c_0 / 2) + \sum_{n=1} c_n T_n(x) - R. P. Brent, "An algorithm with guaranteed convergence for finding - a zero of a function", 'Computer Journal', 14 (1971) 422-425 +which is needed when accessing the coefficients directly. - J. C. P. Bus and T. J. Dekker, "Two Efficient Algorithms with - Guaranteed Convergence for Finding a Zero of a Function", 'ACM - Transactions of Mathematical Software', Vol. 1 No. 4 (1975) 330-345 - - -File: gsl-ref.info, Node: One dimensional Minimization, Next: Multidimensional Root-Finding, Prev: One dimensional Root-Finding, Up: Top - -34 One dimensional Minimization -******************************* - -This chapter describes routines for finding minima of arbitrary -one-dimensional functions. The library provides low level components -for a variety of iterative minimizers and convergence tests. These can -be combined by the user to achieve the desired solution, with full -access to the intermediate steps of the algorithms. Each class of -methods uses the same framework, so that you can switch between -minimizers at runtime without needing to recompile your program. Each -instance of a minimizer keeps track of its own state, allowing the -minimizers to be used in multi-threaded programs. - - The header file 'gsl_min.h' contains prototypes for the minimization -functions and related declarations. To use the minimization algorithms -to find the maximum of a function simply invert its sign. + +File: gsl-ref.info, Node: Creation and Calculation of Chebyshev Series, Next: Auxiliary Functions for Chebyshev Series, Prev: Chebyshev Definitions, Up: Chebyshev Approximations -* Menu: +30.2 Creation and Calculation of Chebyshev Series +================================================= + + -- Function: gsl_cheb_series * gsl_cheb_alloc (const size_t N) + This function allocates space for a Chebyshev series of order N and + returns a pointer to a new 'gsl_cheb_series' struct. + + -- Function: void gsl_cheb_free (gsl_cheb_series * CS) + This function frees a previously allocated Chebyshev series CS. + + -- Function: int gsl_cheb_init (gsl_cheb_series * CS, const + gsl_function * F, const double A, const double B) + This function computes the Chebyshev approximation CS for the + function F over the range (a,b) to the previously specified order. + The computation of the Chebyshev approximation is an O(n^2) + process, and requires n function evaluations. + + +File: gsl-ref.info, Node: Auxiliary Functions for Chebyshev Series, Next: Chebyshev Series Evaluation, Prev: Creation and Calculation of Chebyshev Series, Up: Chebyshev Approximations + +30.3 Auxiliary Functions +======================== + +The following functions provide information about an existing Chebyshev +series. + + -- Function: size_t gsl_cheb_order (const gsl_cheb_series * CS) + This function returns the order of Chebyshev series CS. -* Minimization Overview:: -* Minimization Caveats:: -* Initializing the Minimizer:: -* Providing the function to minimize:: -* Minimization Iteration:: -* Minimization Stopping Parameters:: -* Minimization Algorithms:: -* Minimization Examples:: -* Minimization References and Further Reading:: + -- Function: size_t gsl_cheb_size (const gsl_cheb_series * CS) + -- Function: double * gsl_cheb_coeffs (const gsl_cheb_series * CS) + These functions return the size of the Chebyshev coefficient array + 'c[]' and a pointer to its location in memory for the Chebyshev + series CS.  -File: gsl-ref.info, Node: Minimization Overview, Next: Minimization Caveats, Up: One dimensional Minimization +File: gsl-ref.info, Node: Chebyshev Series Evaluation, Next: Derivatives and Integrals, Prev: Auxiliary Functions for Chebyshev Series, Up: Chebyshev Approximations -34.1 Overview -============= +30.4 Chebyshev Series Evaluation +================================ -The minimization algorithms begin with a bounded region known to contain -a minimum. The region is described by a lower bound a and an upper -bound b, with an estimate of the location of the minimum x. + -- Function: double gsl_cheb_eval (const gsl_cheb_series * CS, double + X) + This function evaluates the Chebyshev series CS at a given point X. -The value of the function at x must be less than the value of the -function at the ends of the interval, + -- Function: int gsl_cheb_eval_err (const gsl_cheb_series * CS, const + double X, double * RESULT, double * ABSERR) + This function computes the Chebyshev series CS at a given point X, + estimating both the series RESULT and its absolute error ABSERR. + The error estimate is made from the first neglected term in the + series. - f(a) > f(x) < f(b) + -- Function: double gsl_cheb_eval_n (const gsl_cheb_series * CS, size_t + ORDER, double X) + This function evaluates the Chebyshev series CS at a given point X, + to (at most) the given order ORDER. -This condition guarantees that a minimum is contained somewhere within -the interval. On each iteration a new point x' is selected using one of -the available algorithms. If the new point is a better estimate of the -minimum, i.e. where f(x') < f(x), then the current estimate of the -minimum x is updated. The new point also allows the size of the bounded -interval to be reduced, by choosing the most compact set of points which -satisfies the constraint f(a) > f(x) < f(b). The interval is reduced -until it encloses the true minimum to a desired tolerance. This -provides a best estimate of the location of the minimum and a rigorous -error estimate. + -- Function: int gsl_cheb_eval_n_err (const gsl_cheb_series * CS, const + size_t ORDER, const double X, double * RESULT, double * + ABSERR) + This function evaluates a Chebyshev series CS at a given point X, + estimating both the series RESULT and its absolute error ABSERR, to + (at most) the given order ORDER. The error estimate is made from + the first neglected term in the series. - Several bracketing algorithms are available within a single -framework. The user provides a high-level driver for the algorithm, and -the library provides the individual functions necessary for each of the -steps. There are three main phases of the iteration. The steps are, + +File: gsl-ref.info, Node: Derivatives and Integrals, Next: Chebyshev Approximation Examples, Prev: Chebyshev Series Evaluation, Up: Chebyshev Approximations - * initialize minimizer state, S, for algorithm T +30.5 Derivatives and Integrals +============================== - * update S using the iteration T +The following functions allow a Chebyshev series to be differentiated or +integrated, producing a new Chebyshev series. Note that the error +estimate produced by evaluating the derivative series will be +underestimated due to the contribution of higher order terms being +neglected. - * test S for convergence, and repeat iteration if necessary + -- Function: int gsl_cheb_calc_deriv (gsl_cheb_series * DERIV, const + gsl_cheb_series * CS) + This function computes the derivative of the series CS, storing the + derivative coefficients in the previously allocated DERIV. The two + series CS and DERIV must have been allocated with the same order. -The state for the minimizers is held in a 'gsl_min_fminimizer' struct. -The updating procedure uses only function evaluations (not derivatives). + -- Function: int gsl_cheb_calc_integ (gsl_cheb_series * INTEG, const + gsl_cheb_series * CS) + This function computes the integral of the series CS, storing the + integral coefficients in the previously allocated INTEG. The two + series CS and INTEG must have been allocated with the same order. + The lower limit of the integration is taken to be the left hand end + of the range A.  -File: gsl-ref.info, Node: Minimization Caveats, Next: Initializing the Minimizer, Prev: Minimization Overview, Up: One dimensional Minimization +File: gsl-ref.info, Node: Chebyshev Approximation Examples, Next: Chebyshev Approximation References and Further Reading, Prev: Derivatives and Integrals, Up: Chebyshev Approximations + +30.6 Examples +============= -34.2 Caveats -============ +The following example program computes Chebyshev approximations to a +step function. This is an extremely difficult approximation to make, +due to the discontinuity, and was chosen as an example where +approximation error is visible. For smooth functions the Chebyshev +approximation converges extremely rapidly and errors would not be +visible. -Note that minimization functions can only search for one minimum at a -time. When there are several minima in the search area, the first -minimum to be found will be returned; however it is difficult to predict -which of the minima this will be. _In most cases, no error will be -reported if you try to find a minimum in an area where there is more -than one._ + #include + #include + #include - With all minimization algorithms it can be difficult to determine the -location of the minimum to full numerical precision. The behavior of -the function in the region of the minimum x^* can be approximated by a -Taylor expansion, + double + f (double x, void *p) + { + (void)(p); /* avoid unused parameter warning */ - y = f(x^*) + (1/2) f''(x^*) (x - x^*)^2 + if (x < 0.5) + return 0.25; + else + return 0.75; + } -and the second term of this expansion can be lost when added to the -first term at finite precision. This magnifies the error in locating -x^*, making it proportional to \sqrt \epsilon (where \epsilon is the -relative accuracy of the floating point numbers). For functions with -higher order minima, such as x^4, the magnification of the error is -correspondingly worse. The best that can be achieved is to converge to -the limit of numerical accuracy in the function values, rather than the -location of the minimum itself. + int + main (void) + { + int i, n = 10000; - -File: gsl-ref.info, Node: Initializing the Minimizer, Next: Providing the function to minimize, Prev: Minimization Caveats, Up: One dimensional Minimization + gsl_cheb_series *cs = gsl_cheb_alloc (40); -34.3 Initializing the Minimizer -=============================== + gsl_function F; - -- Function: gsl_min_fminimizer * gsl_min_fminimizer_alloc (const - gsl_min_fminimizer_type * T) - This function returns a pointer to a newly allocated instance of a - minimizer of type T. For example, the following code creates an - instance of a golden section minimizer, + F.function = f; + F.params = 0; - const gsl_min_fminimizer_type * T - = gsl_min_fminimizer_goldensection; - gsl_min_fminimizer * s - = gsl_min_fminimizer_alloc (T); + gsl_cheb_init (cs, &F, 0.0, 1.0); - If there is insufficient memory to create the minimizer then the - function returns a null pointer and the error handler is invoked - with an error code of 'GSL_ENOMEM'. + for (i = 0; i < n; i++) + { + double x = i / (double)n; + double r10 = gsl_cheb_eval_n (cs, 10, x); + double r40 = gsl_cheb_eval (cs, x); + printf ("%g %g %g %g\n", + x, GSL_FN_EVAL (&F, x), r10, r40); + } - -- Function: int gsl_min_fminimizer_set (gsl_min_fminimizer * S, - gsl_function * F, double X_MINIMUM, double X_LOWER, double - X_UPPER) - This function sets, or resets, an existing minimizer S to use the - function F and the initial search interval [X_LOWER, X_UPPER], with - a guess for the location of the minimum X_MINIMUM. + gsl_cheb_free (cs); - If the interval given does not contain a minimum, then the function - returns an error code of 'GSL_EINVAL'. + return 0; + } - -- Function: int gsl_min_fminimizer_set_with_values (gsl_min_fminimizer - * S, gsl_function * F, double X_MINIMUM, double F_MINIMUM, - double X_LOWER, double F_LOWER, double X_UPPER, double - F_UPPER) - This function is equivalent to 'gsl_min_fminimizer_set' but uses - the values F_MINIMUM, F_LOWER and F_UPPER instead of computing - 'f(x_minimum)', 'f(x_lower)' and 'f(x_upper)'. +The output from the program gives the original function, 10-th order +approximation and 40-th order approximation, all sampled at intervals of +0.001 in x. - -- Function: void gsl_min_fminimizer_free (gsl_min_fminimizer * S) - This function frees all the memory associated with the minimizer S. + +File: gsl-ref.info, Node: Chebyshev Approximation References and Further Reading, Prev: Chebyshev Approximation Examples, Up: Chebyshev Approximations - -- Function: const char * gsl_min_fminimizer_name (const - gsl_min_fminimizer * S) - This function returns a pointer to the name of the minimizer. For - example, +30.7 References and Further Reading +=================================== - printf ("s is a '%s' minimizer\n", - gsl_min_fminimizer_name (s)); +The following paper describes the use of Chebyshev series, - would print something like 's is a 'brent' minimizer'. + R. Broucke, "Ten Subroutines for the Manipulation of Chebyshev + Series [C1] (Algorithm 446)". 'Communications of the ACM' 16(4), + 254-256 (1973)  -File: gsl-ref.info, Node: Providing the function to minimize, Next: Minimization Iteration, Prev: Initializing the Minimizer, Up: One dimensional Minimization +File: gsl-ref.info, Node: Series Acceleration, Next: Wavelet Transforms, Prev: Chebyshev Approximations, Up: Top -34.4 Providing the function to minimize -======================================= +31 Series Acceleration +********************** -You must provide a continuous function of one variable for the -minimizers to operate on. In order to allow for general parameters the -functions are defined by a 'gsl_function' data type (*note Providing the -function to solve::). +The functions described in this chapter accelerate the convergence of a +series using the Levin u-transform. This method takes a small number of +terms from the start of a series and uses a systematic approximation to +compute an extrapolated value and an estimate of its error. The +u-transform works for both convergent and divergent series, including +asymptotic series. - -File: gsl-ref.info, Node: Minimization Iteration, Next: Minimization Stopping Parameters, Prev: Providing the function to minimize, Up: One dimensional Minimization + These functions are declared in the header file 'gsl_sum.h'. -34.5 Iteration -============== +* Menu: -The following functions drive the iteration of each algorithm. Each -function performs one iteration to update the state of any minimizer of -the corresponding type. The same functions work for all minimizers so -that different methods can be substituted at runtime without -modifications to the code. - - -- Function: int gsl_min_fminimizer_iterate (gsl_min_fminimizer * S) - This function performs a single iteration of the minimizer S. If - the iteration encounters an unexpected problem then an error code - will be returned, - - 'GSL_EBADFUNC' - the iteration encountered a singular point where the function - evaluated to 'Inf' or 'NaN'. - - 'GSL_FAILURE' - the algorithm could not improve the current best approximation - or bounding interval. - - The minimizer maintains a current best estimate of the position of -the minimum at all times, and the current interval bounding the minimum. -This information can be accessed with the following auxiliary functions, - - -- Function: double gsl_min_fminimizer_x_minimum (const - gsl_min_fminimizer * S) - This function returns the current estimate of the position of the - minimum for the minimizer S. - - -- Function: double gsl_min_fminimizer_x_upper (const - gsl_min_fminimizer * S) - -- Function: double gsl_min_fminimizer_x_lower (const - gsl_min_fminimizer * S) - These functions return the current upper and lower bound of the - interval for the minimizer S. - - -- Function: double gsl_min_fminimizer_f_minimum (const - gsl_min_fminimizer * S) - -- Function: double gsl_min_fminimizer_f_upper (const - gsl_min_fminimizer * S) - -- Function: double gsl_min_fminimizer_f_lower (const - gsl_min_fminimizer * S) - These functions return the value of the function at the current - estimate of the minimum and at the upper and lower bounds of the - interval for the minimizer S. +* Acceleration functions:: +* Acceleration functions without error estimation:: +* Example of accelerating a series:: +* Series Acceleration References::  -File: gsl-ref.info, Node: Minimization Stopping Parameters, Next: Minimization Algorithms, Prev: Minimization Iteration, Up: One dimensional Minimization - -34.6 Stopping Parameters -======================== - -A minimization procedure should stop when one of the following -conditions is true: +File: gsl-ref.info, Node: Acceleration functions, Next: Acceleration functions without error estimation, Up: Series Acceleration - * A minimum has been found to within the user-specified precision. +31.1 Acceleration functions +=========================== - * A user-specified maximum number of iterations has been reached. +The following functions compute the full Levin u-transform of a series +with its error estimate. The error estimate is computed by propagating +rounding errors from each term through to the final extrapolation. - * An error has occurred. + These functions are intended for summing analytic series where each +term is known to high accuracy, and the rounding errors are assumed to +originate from finite precision. They are taken to be relative errors +of order 'GSL_DBL_EPSILON' for each term. -The handling of these conditions is under user control. The function -below allows the user to test the precision of the current result. + The calculation of the error in the extrapolated value is an O(N^2) +process, which is expensive in time and memory. A faster but less +reliable method which estimates the error from the convergence of the +extrapolated value is described in the next section. For the method +described here a full table of intermediate values and derivatives +through to O(N) must be computed and stored, but this does give a +reliable error estimate. - -- Function: int gsl_min_test_interval (double X_LOWER, double X_UPPER, - double EPSABS, double EPSREL) - This function tests for the convergence of the interval [X_LOWER, - X_UPPER] with absolute error EPSABS and relative error EPSREL. The - test returns 'GSL_SUCCESS' if the following condition is achieved, + -- Function: gsl_sum_levin_u_workspace * gsl_sum_levin_u_alloc (size_t + N) + This function allocates a workspace for a Levin u-transform of N + terms. The size of the workspace is O(2n^2 + 3n). - |a - b| < epsabs + epsrel min(|a|,|b|) + -- Function: void gsl_sum_levin_u_free (gsl_sum_levin_u_workspace * W) + This function frees the memory associated with the workspace W. - when the interval x = [a,b] does not include the origin. If the - interval includes the origin then \min(|a|,|b|) is replaced by zero - (which is the minimum value of |x| over the interval). This - ensures that the relative error is accurately estimated for minima - close to the origin. + -- Function: int gsl_sum_levin_u_accel (const double * ARRAY, size_t + ARRAY_SIZE, gsl_sum_levin_u_workspace * W, double * SUM_ACCEL, + double * ABSERR) + This function takes the terms of a series in ARRAY of size + ARRAY_SIZE and computes the extrapolated limit of the series using + a Levin u-transform. Additional working space must be provided in + W. The extrapolated sum is stored in SUM_ACCEL, with an estimate + of the absolute error stored in ABSERR. The actual term-by-term + sum is returned in 'w->sum_plain'. The algorithm calculates the + truncation error (the difference between two successive + extrapolations) and round-off error (propagated from the individual + terms) to choose an optimal number of terms for the extrapolation. + All the terms of the series passed in through ARRAY should be + non-zero. - This condition on the interval also implies that any estimate of - the minimum x_m in the interval satisfies the same condition with - respect to the true minimum x_m^*, + +File: gsl-ref.info, Node: Acceleration functions without error estimation, Next: Example of accelerating a series, Prev: Acceleration functions, Up: Series Acceleration - |x_m - x_m^*| < epsabs + epsrel x_m^* +31.2 Acceleration functions without error estimation +==================================================== - assuming that the true minimum x_m^* is contained within the - interval. +The functions described in this section compute the Levin u-transform of +series and attempt to estimate the error from the "truncation error" in +the extrapolation, the difference between the final two approximations. +Using this method avoids the need to compute an intermediate table of +derivatives because the error is estimated from the behavior of the +extrapolated value itself. Consequently this algorithm is an O(N) +process and only requires O(N) terms of storage. If the series +converges sufficiently fast then this procedure can be acceptable. It +is appropriate to use this method when there is a need to compute many +extrapolations of series with similar convergence properties at +high-speed. For example, when numerically integrating a function +defined by a parameterized series where the parameter varies only +slightly. A reliable error estimate should be computed first using the +full algorithm described above in order to verify the consistency of the +results. - -File: gsl-ref.info, Node: Minimization Algorithms, Next: Minimization Examples, Prev: Minimization Stopping Parameters, Up: One dimensional Minimization + -- Function: gsl_sum_levin_utrunc_workspace * + gsl_sum_levin_utrunc_alloc (size_t N) + This function allocates a workspace for a Levin u-transform of N + terms, without error estimation. The size of the workspace is + O(3n). -34.7 Minimization Algorithms -============================ + -- Function: void gsl_sum_levin_utrunc_free + (gsl_sum_levin_utrunc_workspace * W) + This function frees the memory associated with the workspace W. -The minimization algorithms described in this section require an initial -interval which is guaranteed to contain a minimum--if a and b are the -endpoints of the interval and x is an estimate of the minimum then f(a) -> f(x) < f(b). This ensures that the function has at least one minimum -somewhere in the interval. If a valid initial interval is used then -these algorithm cannot fail, provided the function is well-behaved. - - -- Minimizer: gsl_min_fminimizer_goldensection - - The "golden section algorithm" is the simplest method of bracketing - the minimum of a function. It is the slowest algorithm provided by - the library, with linear convergence. - - On each iteration, the algorithm first compares the subintervals - from the endpoints to the current minimum. The larger subinterval - is divided in a golden section (using the famous ratio (3-\sqrt - 5)/2 = 0.3189660...) and the value of the function at this new - point is calculated. The new value is used with the constraint - f(a') > f(x') < f(b') to a select new interval containing the - minimum, by discarding the least useful point. This procedure can - be continued indefinitely until the interval is sufficiently small. - Choosing the golden section as the bisection ratio can be shown to - provide the fastest convergence for this type of algorithm. - - -- Minimizer: gsl_min_fminimizer_brent - - The "Brent minimization algorithm" combines a parabolic - interpolation with the golden section algorithm. This produces a - fast algorithm which is still robust. - - The outline of the algorithm can be summarized as follows: on each - iteration Brent's method approximates the function using an - interpolating parabola through three existing points. The minimum - of the parabola is taken as a guess for the minimum. If it lies - within the bounds of the current interval then the interpolating - point is accepted, and used to generate a smaller interval. If the - interpolating point is not accepted then the algorithm falls back - to an ordinary golden section step. The full details of Brent's - method include some additional checks to improve convergence. - - -- Minimizer: gsl_min_fminimizer_quad_golden - This is a variant of Brent's algorithm which uses the safeguarded - step-length algorithm of Gill and Murray. + -- Function: int gsl_sum_levin_utrunc_accel (const double * ARRAY, + size_t ARRAY_SIZE, gsl_sum_levin_utrunc_workspace * W, double + * SUM_ACCEL, double * ABSERR_TRUNC) + This function takes the terms of a series in ARRAY of size + ARRAY_SIZE and computes the extrapolated limit of the series using + a Levin u-transform. Additional working space must be provided in + W. The extrapolated sum is stored in SUM_ACCEL. The actual + term-by-term sum is returned in 'w->sum_plain'. The algorithm + terminates when the difference between two successive + extrapolations reaches a minimum or is sufficiently small. The + difference between these two values is used as estimate of the + error and is stored in ABSERR_TRUNC. To improve the reliability of + the algorithm the extrapolated values are replaced by moving + averages when calculating the truncation error, smoothing out any + fluctuations.  -File: gsl-ref.info, Node: Minimization Examples, Next: Minimization References and Further Reading, Prev: Minimization Algorithms, Up: One dimensional Minimization +File: gsl-ref.info, Node: Example of accelerating a series, Next: Series Acceleration References, Prev: Acceleration functions without error estimation, Up: Series Acceleration -34.8 Examples +31.3 Examples ============= -The following program uses the Brent algorithm to find the minimum of -the function f(x) = \cos(x) + 1, which occurs at x = \pi. The starting -interval is (0,6), with an initial guess for the minimum of 2. +The following code calculates an estimate of \zeta(2) = \pi^2 / 6 using +the series, + + \zeta(2) = 1 + 1/2^2 + 1/3^2 + 1/4^2 + ... + +After N terms the error in the sum is O(1/N), making direct summation of +the series converge slowly. #include - #include #include - #include + #include - double fn1 (double x, void * params) - { - return cos(x) + 1.0; - } + #define N 20 int main (void) { - int status; - int iter = 0, max_iter = 100; - const gsl_min_fminimizer_type *T; - gsl_min_fminimizer *s; - double m = 2.0, m_expected = M_PI; - double a = 0.0, b = 6.0; - gsl_function F; + double t[N]; + double sum_accel, err; + double sum = 0; + int n; - F.function = &fn1; - F.params = 0; + gsl_sum_levin_u_workspace * w + = gsl_sum_levin_u_alloc (N); + + const double zeta_2 = M_PI * M_PI / 6.0; - T = gsl_min_fminimizer_brent; - s = gsl_min_fminimizer_alloc (T); - gsl_min_fminimizer_set (s, &F, m, a, b); - - printf ("using %s method\n", - gsl_min_fminimizer_name (s)); - - printf ("%5s [%9s, %9s] %9s %10s %9s\n", - "iter", "lower", "upper", "min", - "err", "err(est)"); - - printf ("%5d [%.7f, %.7f] %.7f %+.7f %.7f\n", - iter, a, b, - m, m - m_expected, b - a); + /* terms for zeta(2) = \sum_{n=1}^{\infty} 1/n^2 */ - do + for (n = 0; n < N; n++) { - iter++; - status = gsl_min_fminimizer_iterate (s); - - m = gsl_min_fminimizer_x_minimum (s); - a = gsl_min_fminimizer_x_lower (s); - b = gsl_min_fminimizer_x_upper (s); - - status - = gsl_min_test_interval (a, b, 0.001, 0.0); - - if (status == GSL_SUCCESS) - printf ("Converged:\n"); - - printf ("%5d [%.7f, %.7f] " - "%.7f %+.7f %.7f\n", - iter, a, b, - m, m - m_expected, b - a); + double np1 = n + 1.0; + t[n] = 1.0 / (np1 * np1); + sum += t[n]; } - while (status == GSL_CONTINUE && iter < max_iter); - gsl_min_fminimizer_free (s); + gsl_sum_levin_u_accel (t, N, w, &sum_accel, &err); + + printf ("term-by-term sum = % .16f using %d terms\n", + sum, N); + + printf ("term-by-term sum = % .16f using %zu terms\n", + w->sum_plain, w->terms_used); + + printf ("exact value = % .16f\n", zeta_2); + printf ("accelerated sum = % .16f using %zu terms\n", + sum_accel, w->terms_used); + + printf ("estimated error = % .16f\n", err); + printf ("actual error = % .16f\n", + sum_accel - zeta_2); - return status; + gsl_sum_levin_u_free (w); + return 0; } -Here are the results of the minimization procedure. +The output below shows that the Levin u-transform is able to obtain an +estimate of the sum to 1 part in 10^10 using the first eleven terms of +the series. The error estimate returned by the function is also +accurate, giving the correct number of significant digits. $ ./a.out - 0 [0.0000000, 6.0000000] 2.0000000 -1.1415927 6.0000000 - 1 [2.0000000, 6.0000000] 3.2758640 +0.1342713 4.0000000 - 2 [2.0000000, 3.2831929] 3.2758640 +0.1342713 1.2831929 - 3 [2.8689068, 3.2831929] 3.2758640 +0.1342713 0.4142862 - 4 [2.8689068, 3.2831929] 3.2758640 +0.1342713 0.4142862 - 5 [2.8689068, 3.2758640] 3.1460585 +0.0044658 0.4069572 - 6 [3.1346075, 3.2758640] 3.1460585 +0.0044658 0.1412565 - 7 [3.1346075, 3.1874620] 3.1460585 +0.0044658 0.0528545 - 8 [3.1346075, 3.1460585] 3.1460585 +0.0044658 0.0114510 - 9 [3.1346075, 3.1460585] 3.1424060 +0.0008133 0.0114510 - 10 [3.1346075, 3.1424060] 3.1415885 -0.0000041 0.0077985 - Converged: - 11 [3.1415885, 3.1424060] 3.1415927 -0.0000000 0.0008175 + term-by-term sum = 1.5961632439130233 using 20 terms + term-by-term sum = 1.5759958390005426 using 13 terms + exact value = 1.6449340668482264 + accelerated sum = 1.6449340669228176 using 13 terms + estimated error = 0.0000000000888360 + actual error = 0.0000000000745912 + +Note that a direct summation of this series would require 10^10 terms to +achieve the same precision as the accelerated sum does in 13 terms. diff -Nru gsl-doc-1.16/doc/gsl-ref.info-4 gsl-doc-2.3/doc/gsl-ref.info-4 --- gsl-doc-1.16/doc/gsl-ref.info-4 2013-07-19 15:17:48.000000000 +0000 +++ gsl-doc-2.3/doc/gsl-ref.info-4 2016-12-09 00:08:08.000000000 +0000 @@ -2,947 +2,1450 @@ gsl-ref.texi. Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The GSL Team. +2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 +The GSL Team. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or -any later version published by the Free Software Foundation; with no -Invariant Sections and no cover texts. A copy of the license is -included in the section entitled "GNU Free Documentation License". +any later version published by the Free Software Foundation; with the +Invariant Sections being "GNU General Public License" and "Free Software +Needs Free Documentation", the Front-Cover text being "A GNU Manual", +and with the Back-Cover Text being (a) (see below). A copy of the +license is included in the section entitled "GNU Free Documentation +License". + + (a) The Back-Cover Text is: "You have the freedom to copy and modify +this GNU Manual." INFO-DIR-SECTION Software libraries START-INFO-DIR-ENTRY * gsl-ref: (gsl-ref). GNU Scientific Library - Reference END-INFO-DIR-ENTRY  -File: gsl-ref.info, Node: Minimization References and Further Reading, Prev: Minimization Examples, Up: One dimensional Minimization +File: gsl-ref.info, Node: Series Acceleration References, Prev: Example of accelerating a series, Up: Series Acceleration -34.9 References and Further Reading +31.4 References and Further Reading =================================== -Further information on Brent's algorithm is available in the following -book, +The algorithms used by these functions are described in the following +papers, - Richard Brent, 'Algorithms for minimization without derivatives', - Prentice-Hall (1973), republished by Dover in paperback (2002), - ISBN 0-486-41998-3. + T. Fessler, W.F. Ford, D.A. Smith, HURRY: An acceleration algorithm + for scalar sequences and series 'ACM Transactions on Mathematical + Software', 9(3):346-354, 1983. and Algorithm 602 9(3):355-357, + 1983. - -File: gsl-ref.info, Node: Multidimensional Root-Finding, Next: Multidimensional Minimization, Prev: One dimensional Minimization, Up: Top +The theory of the u-transform was presented by Levin, -35 Multidimensional Root-Finding -******************************** + D. Levin, Development of Non-Linear Transformations for Improving + Convergence of Sequences, 'Intern. J. Computer Math.' B3:371-388, + 1973. -This chapter describes functions for multidimensional root-finding -(solving nonlinear systems with n equations in n unknowns). The library -provides low level components for a variety of iterative solvers and -convergence tests. These can be combined by the user to achieve the -desired solution, with full access to the intermediate steps of the -iteration. Each class of methods uses the same framework, so that you -can switch between solvers at runtime without needing to recompile your -program. Each instance of a solver keeps track of its own state, -allowing the solvers to be used in multi-threaded programs. The solvers -are based on the original Fortran library MINPACK. +A review paper on the Levin Transform is available online, + Herbert H. H. Homeier, Scalar Levin-Type Sequence Transformations, + . - The header file 'gsl_multiroots.h' contains prototypes for the -multidimensional root finding functions and related declarations. + +File: gsl-ref.info, Node: Wavelet Transforms, Next: Discrete Hankel Transforms, Prev: Series Acceleration, Up: Top + +32 Wavelet Transforms +********************* + +This chapter describes functions for performing Discrete Wavelet +Transforms (DWTs). The library includes wavelets for real data in both +one and two dimensions. The wavelet functions are declared in the +header files 'gsl_wavelet.h' and 'gsl_wavelet2d.h'. * Menu: -* Overview of Multidimensional Root Finding:: -* Initializing the Multidimensional Solver:: -* Providing the multidimensional system of equations to solve:: -* Iteration of the multidimensional solver:: -* Search Stopping Parameters for the multidimensional solver:: -* Algorithms using Derivatives:: -* Algorithms without Derivatives:: -* Example programs for Multidimensional Root finding:: -* References and Further Reading for Multidimensional Root Finding:: +* DWT Definitions:: +* DWT Initialization:: +* DWT Transform Functions:: +* DWT Examples:: +* DWT References::  -File: gsl-ref.info, Node: Overview of Multidimensional Root Finding, Next: Initializing the Multidimensional Solver, Up: Multidimensional Root-Finding +File: gsl-ref.info, Node: DWT Definitions, Next: DWT Initialization, Up: Wavelet Transforms -35.1 Overview -============= - -The problem of multidimensional root finding requires the simultaneous -solution of n equations, f_i, in n variables, x_i, +32.1 Definitions +================ - f_i (x_1, ..., x_n) = 0 for i = 1 ... n. +The continuous wavelet transform and its inverse are defined by the +relations, -In general there are no bracketing methods available for n dimensional -systems, and no way of knowing whether any solutions exist. All -algorithms proceed from an initial guess using a variant of the Newton -iteration, + w(s,\tau) = \int f(t) * \psi^*_{s,\tau}(t) dt - x -> x' = x - J^{-1} f(x) +and, -where x, f are vector quantities and J is the Jacobian matrix J_{ij} = d -f_i / d x_j. Additional strategies can be used to enlarge the region of -convergence. These include requiring a decrease in the norm |f| on each -step proposed by Newton's method, or taking steepest-descent steps in -the direction of the negative gradient of |f|. + f(t) = \int \int_{-\infty}^\infty w(s, \tau) * \psi_{s,\tau}(t) d\tau ds - Several root-finding algorithms are available within a single -framework. The user provides a high-level driver for the algorithms, -and the library provides the individual functions necessary for each of -the steps. There are three main phases of the iteration. The steps -are, +where the basis functions \psi_{s,\tau} are obtained by scaling and +translation from a single function, referred to as the "mother wavelet". - * initialize solver state, S, for algorithm T + The discrete version of the wavelet transform acts on equally-spaced +samples, with fixed scaling and translation steps (s, \tau). The +frequency and time axes are sampled "dyadically" on scales of 2^j +through a level parameter j. The resulting family of functions +{\psi_{j,n}} constitutes an orthonormal basis for square-integrable +signals. - * update S using the iteration T + The discrete wavelet transform is an O(N) algorithm, and is also +referred to as the "fast wavelet transform". - * test S for convergence, and repeat iteration if necessary + +File: gsl-ref.info, Node: DWT Initialization, Next: DWT Transform Functions, Prev: DWT Definitions, Up: Wavelet Transforms -The evaluation of the Jacobian matrix can be problematic, either because -programming the derivatives is intractable or because computation of the -n^2 terms of the matrix becomes too expensive. For these reasons the -algorithms provided by the library are divided into two classes -according to whether the derivatives are available or not. +32.2 Initialization +=================== - The state for solvers with an analytic Jacobian matrix is held in a -'gsl_multiroot_fdfsolver' struct. The updating procedure requires both -the function and its derivatives to be supplied by the user. +The 'gsl_wavelet' structure contains the filter coefficients defining +the wavelet and any associated offset parameters. - The state for solvers which do not use an analytic Jacobian matrix is -held in a 'gsl_multiroot_fsolver' struct. The updating procedure uses -only function evaluations (not derivatives). The algorithms estimate -the matrix J or J^{-1} by approximate methods. + -- Function: gsl_wavelet * gsl_wavelet_alloc (const gsl_wavelet_type * + T, size_t K) + This function allocates and initializes a wavelet object of type T. + The parameter K selects the specific member of the wavelet family. + A null pointer is returned if insufficient memory is available or + if a unsupported member is selected. + + The following wavelet types are implemented: + + -- Wavelet: gsl_wavelet_daubechies + -- Wavelet: gsl_wavelet_daubechies_centered + This is the Daubechies wavelet family of maximum phase with k/2 + vanishing moments. The implemented wavelets are k=4, 6, ..., 20, + with K even. + + -- Wavelet: gsl_wavelet_haar + -- Wavelet: gsl_wavelet_haar_centered + This is the Haar wavelet. The only valid choice of k for the Haar + wavelet is k=2. + + -- Wavelet: gsl_wavelet_bspline + -- Wavelet: gsl_wavelet_bspline_centered + This is the biorthogonal B-spline wavelet family of order (i,j). + The implemented values of k = 100*i + j are 103, 105, 202, 204, + 206, 208, 301, 303, 305 307, 309. + +The centered forms of the wavelets align the coefficients of the various +sub-bands on edges. Thus the resulting visualization of the +coefficients of the wavelet transform in the phase plane is easier to +understand. + + -- Function: const char * gsl_wavelet_name (const gsl_wavelet * W) + This function returns a pointer to the name of the wavelet family + for W. + + -- Function: void gsl_wavelet_free (gsl_wavelet * W) + This function frees the wavelet object W. + + The 'gsl_wavelet_workspace' structure contains scratch space of the +same size as the input data and is used to hold intermediate results +during the transform. + + -- Function: gsl_wavelet_workspace * gsl_wavelet_workspace_alloc + (size_t N) + This function allocates a workspace for the discrete wavelet + transform. To perform a one-dimensional transform on N elements, a + workspace of size N must be provided. For two-dimensional + transforms of N-by-N matrices it is sufficient to allocate a + workspace of size N, since the transform operates on individual + rows and columns. A null pointer is returned if insufficient + memory is available. + + -- Function: void gsl_wavelet_workspace_free (gsl_wavelet_workspace * + WORK) + This function frees the allocated workspace WORK.  -File: gsl-ref.info, Node: Initializing the Multidimensional Solver, Next: Providing the multidimensional system of equations to solve, Prev: Overview of Multidimensional Root Finding, Up: Multidimensional Root-Finding +File: gsl-ref.info, Node: DWT Transform Functions, Next: DWT Examples, Prev: DWT Initialization, Up: Wavelet Transforms -35.2 Initializing the Solver -============================ +32.3 Transform Functions +======================== -The following functions initialize a multidimensional solver, either -with or without derivatives. The solver itself depends only on the -dimension of the problem and the algorithm and can be reused for -different problems. +This sections describes the actual functions performing the discrete +wavelet transform. Note that the transforms use periodic boundary +conditions. If the signal is not periodic in the sample length then +spurious coefficients will appear at the beginning and end of each level +of the transform. - -- Function: gsl_multiroot_fsolver * gsl_multiroot_fsolver_alloc (const - gsl_multiroot_fsolver_type * T, size_t N) - This function returns a pointer to a newly allocated instance of a - solver of type T for a system of N dimensions. For example, the - following code creates an instance of a hybrid solver, to solve a - 3-dimensional system of equations. +* Menu: - const gsl_multiroot_fsolver_type * T - = gsl_multiroot_fsolver_hybrid; - gsl_multiroot_fsolver * s - = gsl_multiroot_fsolver_alloc (T, 3); +* DWT in one dimension:: +* DWT in two dimension:: - If there is insufficient memory to create the solver then the - function returns a null pointer and the error handler is invoked - with an error code of 'GSL_ENOMEM'. + +File: gsl-ref.info, Node: DWT in one dimension, Next: DWT in two dimension, Up: DWT Transform Functions - -- Function: gsl_multiroot_fdfsolver * gsl_multiroot_fdfsolver_alloc - (const gsl_multiroot_fdfsolver_type * T, size_t N) - This function returns a pointer to a newly allocated instance of a - derivative solver of type T for a system of N dimensions. For - example, the following code creates an instance of a Newton-Raphson - solver, for a 2-dimensional system of equations. +32.3.1 Wavelet transforms in one dimension +------------------------------------------ - const gsl_multiroot_fdfsolver_type * T - = gsl_multiroot_fdfsolver_newton; - gsl_multiroot_fdfsolver * s = - gsl_multiroot_fdfsolver_alloc (T, 2); + -- Function: int gsl_wavelet_transform (const gsl_wavelet * W, double * + DATA, size_t STRIDE, size_t N, gsl_wavelet_direction DIR, + gsl_wavelet_workspace * WORK) + -- Function: int gsl_wavelet_transform_forward (const gsl_wavelet * W, + double * DATA, size_t STRIDE, size_t N, gsl_wavelet_workspace + * WORK) + -- Function: int gsl_wavelet_transform_inverse (const gsl_wavelet * W, + double * DATA, size_t STRIDE, size_t N, gsl_wavelet_workspace + * WORK) + + These functions compute in-place forward and inverse discrete + wavelet transforms of length N with stride STRIDE on the array + DATA. The length of the transform N is restricted to powers of + two. For the 'transform' version of the function the argument DIR + can be either 'forward' (+1) or 'backward' (-1). A workspace WORK + of length N must be provided. + + For the forward transform, the elements of the original array are + replaced by the discrete wavelet transform f_i -> w_{j,k} in a + packed triangular storage layout, where J is the index of the level + j = 0 ... J-1 and K is the index of the coefficient within each + level, k = 0 ... (2^j)-1. The total number of levels is J = + \log_2(n). The output data has the following form, + + (s_{-1,0}, d_{0,0}, d_{1,0}, d_{1,1}, d_{2,0}, ..., + d_{j,k}, ..., d_{J-1,2^{J-1}-1}) + + where the first element is the smoothing coefficient s_{-1,0}, + followed by the detail coefficients d_{j,k} for each level j. The + backward transform inverts these coefficients to obtain the + original data. + + These functions return a status of 'GSL_SUCCESS' upon successful + completion. 'GSL_EINVAL' is returned if N is not an integer power + of 2 or if insufficient workspace is provided. + + +File: gsl-ref.info, Node: DWT in two dimension, Prev: DWT in one dimension, Up: DWT Transform Functions + +32.3.2 Wavelet transforms in two dimension +------------------------------------------ + +The library provides functions to perform two-dimensional discrete +wavelet transforms on square matrices. The matrix dimensions must be an +integer power of two. There are two possible orderings of the rows and +columns in the two-dimensional wavelet transform, referred to as the +"standard" and "non-standard" forms. + + The "standard" transform performs a complete discrete wavelet +transform on the rows of the matrix, followed by a separate complete +discrete wavelet transform on the columns of the resulting +row-transformed matrix. This procedure uses the same ordering as a +two-dimensional Fourier transform. + + The "non-standard" transform is performed in interleaved passes on +the rows and columns of the matrix for each level of the transform. The +first level of the transform is applied to the matrix rows, and then to +the matrix columns. This procedure is then repeated across the rows and +columns of the data for the subsequent levels of the transform, until +the full discrete wavelet transform is complete. The non-standard form +of the discrete wavelet transform is typically used in image analysis. - If there is insufficient memory to create the solver then the - function returns a null pointer and the error handler is invoked - with an error code of 'GSL_ENOMEM'. + The functions described in this section are declared in the header +file 'gsl_wavelet2d.h'. - -- Function: int gsl_multiroot_fsolver_set (gsl_multiroot_fsolver * S, - gsl_multiroot_function * F, const gsl_vector * X) - -- Function: int gsl_multiroot_fdfsolver_set (gsl_multiroot_fdfsolver * - S, gsl_multiroot_function_fdf * FDF, const gsl_vector * X) - These functions set, or reset, an existing solver S to use the - function F or function and derivative FDF, and the initial guess X. - Note that the initial position is copied from X, this argument is - not modified by subsequent iterations. + -- Function: int gsl_wavelet2d_transform (const gsl_wavelet * W, double + * DATA, size_t TDA, size_t SIZE1, size_t SIZE2, + gsl_wavelet_direction DIR, gsl_wavelet_workspace * WORK) + -- Function: int gsl_wavelet2d_transform_forward (const gsl_wavelet * + W, double * DATA, size_t TDA, size_t SIZE1, size_t SIZE2, + gsl_wavelet_workspace * WORK) + -- Function: int gsl_wavelet2d_transform_inverse (const gsl_wavelet * + W, double * DATA, size_t TDA, size_t SIZE1, size_t SIZE2, + gsl_wavelet_workspace * WORK) + + These functions compute two-dimensional in-place forward and + inverse discrete wavelet transforms in standard form on the array + DATA stored in row-major form with dimensions SIZE1 and SIZE2 and + physical row length TDA. The dimensions must be equal (square + matrix) and are restricted to powers of two. For the 'transform' + version of the function the argument DIR can be either 'forward' + (+1) or 'backward' (-1). A workspace WORK of the appropriate size + must be provided. On exit, the appropriate elements of the array + DATA are replaced by their two-dimensional wavelet transform. + + The functions return a status of 'GSL_SUCCESS' upon successful + completion. 'GSL_EINVAL' is returned if SIZE1 and SIZE2 are not + equal and integer powers of 2, or if insufficient workspace is + provided. + + -- Function: int gsl_wavelet2d_transform_matrix (const gsl_wavelet * W, + gsl_matrix * M, gsl_wavelet_direction DIR, + gsl_wavelet_workspace * WORK) + -- Function: int gsl_wavelet2d_transform_matrix_forward (const + gsl_wavelet * W, gsl_matrix * M, gsl_wavelet_workspace * WORK) + -- Function: int gsl_wavelet2d_transform_matrix_inverse (const + gsl_wavelet * W, gsl_matrix * M, gsl_wavelet_workspace * WORK) + These functions compute the two-dimensional in-place wavelet + transform on a matrix A. + + -- Function: int gsl_wavelet2d_nstransform (const gsl_wavelet * W, + double * DATA, size_t TDA, size_t SIZE1, size_t SIZE2, + gsl_wavelet_direction DIR, gsl_wavelet_workspace * WORK) + -- Function: int gsl_wavelet2d_nstransform_forward (const gsl_wavelet * + W, double * DATA, size_t TDA, size_t SIZE1, size_t SIZE2, + gsl_wavelet_workspace * WORK) + -- Function: int gsl_wavelet2d_nstransform_inverse (const gsl_wavelet * + W, double * DATA, size_t TDA, size_t SIZE1, size_t SIZE2, + gsl_wavelet_workspace * WORK) + These functions compute the two-dimensional wavelet transform in + non-standard form. + + -- Function: int gsl_wavelet2d_nstransform_matrix (const gsl_wavelet * + W, gsl_matrix * M, gsl_wavelet_direction DIR, + gsl_wavelet_workspace * WORK) + -- Function: int gsl_wavelet2d_nstransform_matrix_forward (const + gsl_wavelet * W, gsl_matrix * M, gsl_wavelet_workspace * WORK) + -- Function: int gsl_wavelet2d_nstransform_matrix_inverse (const + gsl_wavelet * W, gsl_matrix * M, gsl_wavelet_workspace * WORK) + These functions compute the non-standard form of the + two-dimensional in-place wavelet transform on a matrix A. - -- Function: void gsl_multiroot_fsolver_free (gsl_multiroot_fsolver * - S) - -- Function: void gsl_multiroot_fdfsolver_free (gsl_multiroot_fdfsolver - * S) - These functions free all the memory associated with the solver S. + +File: gsl-ref.info, Node: DWT Examples, Next: DWT References, Prev: DWT Transform Functions, Up: Wavelet Transforms - -- Function: const char * gsl_multiroot_fsolver_name (const - gsl_multiroot_fsolver * S) - -- Function: const char * gsl_multiroot_fdfsolver_name (const - gsl_multiroot_fdfsolver * S) - These functions return a pointer to the name of the solver. For - example, +32.4 Examples +============= - printf ("s is a '%s' solver\n", - gsl_multiroot_fdfsolver_name (s)); +The following program demonstrates the use of the one-dimensional +wavelet transform functions. It computes an approximation to an input +signal (of length 256) using the 20 largest components of the wavelet +transform, while setting the others to zero. - would print something like 's is a 'newton' solver'. + #include + #include + #include + #include - -File: gsl-ref.info, Node: Providing the multidimensional system of equations to solve, Next: Iteration of the multidimensional solver, Prev: Initializing the Multidimensional Solver, Up: Multidimensional Root-Finding + int + main (int argc, char **argv) + { + (void)(argc); /* avoid unused parameter warning */ + int i, n = 256, nc = 20; + double *data = malloc (n * sizeof (double)); + double *abscoeff = malloc (n * sizeof (double)); + size_t *p = malloc (n * sizeof (size_t)); + + FILE * f; + gsl_wavelet *w; + gsl_wavelet_workspace *work; -35.3 Providing the function to solve -==================================== + w = gsl_wavelet_alloc (gsl_wavelet_daubechies, 4); + work = gsl_wavelet_workspace_alloc (n); -You must provide n functions of n variables for the root finders to -operate on. In order to allow for general parameters the functions are -defined by the following data types: + f = fopen (argv[1], "r"); + for (i = 0; i < n; i++) + { + fscanf (f, "%lg", &data[i]); + } + fclose (f); - -- Data Type: gsl_multiroot_function - This data type defines a general system of functions with - parameters. + gsl_wavelet_transform_forward (w, data, 1, n, work); - 'int (* f) (const gsl_vector * X, void * PARAMS, gsl_vector * F)' - this function should store the vector result f(x,params) in F - for argument X and parameters PARAMS, returning an appropriate - error code if the function cannot be computed. + for (i = 0; i < n; i++) + { + abscoeff[i] = fabs (data[i]); + } - 'size_t n' - the dimension of the system, i.e. the number of components of - the vectors X and F. + gsl_sort_index (p, abscoeff, 1, n); - 'void * params' - a pointer to the parameters of the function. + for (i = 0; (i + nc) < n; i++) + data[p[i]] = 0; -Here is an example using Powell's test function, + gsl_wavelet_transform_inverse (w, data, 1, n, work); - f_1(x) = A x_0 x_1 - 1, - f_2(x) = exp(-x_0) + exp(-x_1) - (1 + 1/A) + for (i = 0; i < n; i++) + { + printf ("%g\n", data[i]); + } -with A = 10^4. The following code defines a 'gsl_multiroot_function' -system 'F' which you could pass to a solver: + gsl_wavelet_free (w); + gsl_wavelet_workspace_free (work); - struct powell_params { double A; }; + free (data); + free (abscoeff); + free (p); + return 0; + } - int - powell (gsl_vector * x, void * p, gsl_vector * f) { - struct powell_params * params - = (struct powell_params *)p; - const double A = (params->A); - const double x0 = gsl_vector_get(x,0); - const double x1 = gsl_vector_get(x,1); +The output can be used with the GNU plotutils 'graph' program, - gsl_vector_set (f, 0, A * x0 * x1 - 1); - gsl_vector_set (f, 1, (exp(-x0) + exp(-x1) - - (1.0 + 1.0/A))); - return GSL_SUCCESS - } + $ ./a.out ecg.dat > dwt.txt + $ graph -T ps -x 0 256 32 -h 0.3 -a dwt.txt > dwt.ps - gsl_multiroot_function F; - struct powell_params params = { 10000.0 }; + +File: gsl-ref.info, Node: DWT References, Prev: DWT Examples, Up: Wavelet Transforms - F.f = &powell; - F.n = 2; - F.params = ¶ms; +32.5 References and Further Reading +=================================== - -- Data Type: gsl_multiroot_function_fdf - This data type defines a general system of functions with - parameters and the corresponding Jacobian matrix of derivatives, +The mathematical background to wavelet transforms is covered in the +original lectures by Daubechies, - 'int (* f) (const gsl_vector * X, void * PARAMS, gsl_vector * F)' - this function should store the vector result f(x,params) in F - for argument X and parameters PARAMS, returning an appropriate - error code if the function cannot be computed. + Ingrid Daubechies. Ten Lectures on Wavelets. 'CBMS-NSF Regional + Conference Series in Applied Mathematics' (1992), SIAM, ISBN + 0898712742. - 'int (* df) (const gsl_vector * X, void * PARAMS, gsl_matrix * J)' - this function should store the N-by-N matrix result J_ij = d - f_i(x,params) / d x_j in J for argument X and parameters - PARAMS, returning an appropriate error code if the function - cannot be computed. +An easy to read introduction to the subject with an emphasis on the +application of the wavelet transform in various branches of science is, - 'int (* fdf) (const gsl_vector * X, void * PARAMS, gsl_vector * F, gsl_matrix * J)' - This function should set the values of the F and J as above, - for arguments X and parameters PARAMS. This function provides - an optimization of the separate functions for f(x) and - J(x)--it is always faster to compute the function and its - derivative at the same time. + Paul S. Addison. 'The Illustrated Wavelet Transform Handbook'. + Institute of Physics Publishing (2002), ISBN 0750306920. - 'size_t n' - the dimension of the system, i.e. the number of components of - the vectors X and F. +For extensive coverage of signal analysis by wavelets, wavelet packets +and local cosine bases see, - 'void * params' - a pointer to the parameters of the function. + S. G. Mallat. 'A wavelet tour of signal processing' (Second + edition). Academic Press (1999), ISBN 012466606X. -The example of Powell's test function defined above can be extended to -include analytic derivatives using the following code, +The concept of multiresolution analysis underlying the wavelet transform +is described in, - int - powell_df (gsl_vector * x, void * p, gsl_matrix * J) - { - struct powell_params * params - = (struct powell_params *)p; - const double A = (params->A); - const double x0 = gsl_vector_get(x,0); - const double x1 = gsl_vector_get(x,1); - gsl_matrix_set (J, 0, 0, A * x1); - gsl_matrix_set (J, 0, 1, A * x0); - gsl_matrix_set (J, 1, 0, -exp(-x0)); - gsl_matrix_set (J, 1, 1, -exp(-x1)); - return GSL_SUCCESS - } + S. G. Mallat. Multiresolution Approximations and Wavelet + Orthonormal Bases of L^2(R). 'Transactions of the American + Mathematical Society', 315(1), 1989, 69-87. - int - powell_fdf (gsl_vector * x, void * p, - gsl_matrix * f, gsl_matrix * J) { - struct powell_params * params - = (struct powell_params *)p; - const double A = (params->A); - const double x0 = gsl_vector_get(x,0); - const double x1 = gsl_vector_get(x,1); + S. G. Mallat. A Theory for Multiresolution Signal + Decomposition--The Wavelet Representation. 'IEEE Transactions on + Pattern Analysis and Machine Intelligence', 11, 1989, 674-693. - const double u0 = exp(-x0); - const double u1 = exp(-x1); +The coefficients for the individual wavelet families implemented by the +library can be found in the following papers, - gsl_vector_set (f, 0, A * x0 * x1 - 1); - gsl_vector_set (f, 1, u0 + u1 - (1 + 1/A)); + I. Daubechies. Orthonormal Bases of Compactly Supported Wavelets. + 'Communications on Pure and Applied Mathematics', 41 (1988) + 909-996. - gsl_matrix_set (J, 0, 0, A * x1); - gsl_matrix_set (J, 0, 1, A * x0); - gsl_matrix_set (J, 1, 0, -u0); - gsl_matrix_set (J, 1, 1, -u1); - return GSL_SUCCESS - } + A. Cohen, I. Daubechies, and J.-C. Feauveau. Biorthogonal Bases of + Compactly Supported Wavelets. 'Communications on Pure and Applied + Mathematics', 45 (1992) 485-560. - gsl_multiroot_function_fdf FDF; +The PhysioNet archive of physiological datasets can be found online at + and is described in the following paper, - FDF.f = &powell_f; - FDF.df = &powell_df; - FDF.fdf = &powell_fdf; - FDF.n = 2; - FDF.params = 0; + Goldberger et al. PhysioBank, PhysioToolkit, and PhysioNet: + Components of a New Research Resource for Complex Physiologic + Signals. 'Circulation' 101(23):e215-e220 2000. -Note that the function 'powell_fdf' is able to reuse existing terms from -the function when calculating the Jacobian, thus saving time. + +File: gsl-ref.info, Node: Discrete Hankel Transforms, Next: One dimensional Root-Finding, Prev: Wavelet Transforms, Up: Top + +33 Discrete Hankel Transforms +***************************** + +This chapter describes functions for performing Discrete Hankel +Transforms (DHTs). The functions are declared in the header file +'gsl_dht.h'. + +* Menu: + +* Discrete Hankel Transform Definition:: +* Discrete Hankel Transform Functions:: +* Discrete Hankel Transform References:: + + +File: gsl-ref.info, Node: Discrete Hankel Transform Definition, Next: Discrete Hankel Transform Functions, Up: Discrete Hankel Transforms + +33.1 Definitions +================ + +The discrete Hankel transform acts on a vector of sampled data, where +the samples are assumed to have been taken at points related to the +zeros of a Bessel function of fixed order; compare this to the case of +the discrete Fourier transform, where samples are taken at points +related to the zeroes of the sine or cosine function. + + Starting with its definition, the Hankel transform (or Bessel +transform) of order \nu of a function f with \nu > -1/2 is defined as +(see Johnson, 1987 and Lemoine, 1994) + F_\nu(u) = \int_0^\infty f(t) J_\nu(u t) t dt + +If the integral exists, F_\nu is called the Hankel transformation of f. +The reverse transform is given by + f(t) = \int_0^\infty F_\nu(u) J_\nu(u t) u du , + +where \int_0^\infty f(t) t^{1/2} dt must exist and be absolutely +convergent, and where f(t) satisfies Dirichlet's conditions (of limited +total fluctuations) in the interval [0,\infty]. + + Now the discrete Hankel transform works on a discrete function f, +which is sampled on points n=1...M located at positions +t_n=(j_{\nu,n}/j_{\nu,M}) X in real space and at u_n=j_{\nu,n}/X in +reciprocal space. Here, j_{\nu,m} are the m-th zeros of the Bessel +function J_\nu(x) arranged in ascending order. Moreover, the discrete +functions are assumed to be band limited, so f(t_n)=0 and F(u_n)=0 for +n>M. Accordingly, the function f is defined on the interval [0,X]. + + Following the work of Johnson, 1987 and Lemoine, 1994, the discrete +Hankel transform is given by + F_\nu(u_m) = (2 X^2 / j_(\nu,M)^2) + \sum_{k=1}^{M-1} f(j_(\nu,k) X/j_(\nu,M)) + (J_\nu(j_(\nu,m) j_(\nu,k) / j_(\nu,M)) / J_(\nu+1)(j_(\nu,k))^2). + +It is this discrete expression which defines the discrete Hankel +transform calculated by GSL. In GSL, forward and backward transforms are +defined equally and calculate F_\nu(u_m). Following Johnson, the +backward transform reads + f(t_k) = (2 / X^2) + \sum_{m=1}^{M-1} F(j_(\nu,m)/X) + (J_\nu(j_(\nu,m) j_(\nu,k) / j_(\nu,M)) / J_(\nu+1)(j_(\nu,m))^2). + +Obviously, using the forward transform instead of the backward transform +gives an additional factor X^4/j_{\nu,M}^2=t_m^2/u_m^2. + + The kernel in the summation above defines the matrix of the +\nu-Hankel transform of size M-1. The coefficients of this matrix, +being dependent on \nu and M, must be precomputed and stored; the +'gsl_dht' object encapsulates this data. The allocation function +'gsl_dht_alloc' returns a 'gsl_dht' object which must be properly +initialized with 'gsl_dht_init' before it can be used to perform +transforms on data sample vectors, for fixed \nu and M, using the +'gsl_dht_apply' function. The implementation allows to define the +length X of the fundamental interval, for convenience, while discrete +Hankel transforms are often defined on the unit interval instead of +[0,X]. + + Notice that by assumption f(t) vanishes at the endpoints of the +interval, consistent with the inversion formula and the sampling formula +given above. Therefore, this transform corresponds to an orthogonal +expansion in eigenfunctions of the Dirichlet problem for the Bessel +differential equation.  -File: gsl-ref.info, Node: Iteration of the multidimensional solver, Next: Search Stopping Parameters for the multidimensional solver, Prev: Providing the multidimensional system of equations to solve, Up: Multidimensional Root-Finding +File: gsl-ref.info, Node: Discrete Hankel Transform Functions, Next: Discrete Hankel Transform References, Prev: Discrete Hankel Transform Definition, Up: Discrete Hankel Transforms -35.4 Iteration +33.2 Functions ============== -The following functions drive the iteration of each algorithm. Each -function performs one iteration to update the state of any solver of the -corresponding type. The same functions work for all solvers so that -different methods can be substituted at runtime without modifications to -the code. + -- Function: gsl_dht * gsl_dht_alloc (size_t SIZE) + This function allocates a Discrete Hankel transform object of size + SIZE. - -- Function: int gsl_multiroot_fsolver_iterate (gsl_multiroot_fsolver * - S) - -- Function: int gsl_multiroot_fdfsolver_iterate - (gsl_multiroot_fdfsolver * S) - These functions perform a single iteration of the solver S. If the - iteration encounters an unexpected problem then an error code will - be returned, + -- Function: int gsl_dht_init (gsl_dht * T, double NU, double XMAX) + This function initializes the transform T for the given values of + NU and XMAX. - 'GSL_EBADFUNC' - the iteration encountered a singular point where the function - or its derivative evaluated to 'Inf' or 'NaN'. + -- Function: gsl_dht * gsl_dht_new (size_t SIZE, double NU, double + XMAX) + This function allocates a Discrete Hankel transform object of size + SIZE and initializes it for the given values of NU and XMAX. - 'GSL_ENOPROG' - the iteration is not making any progress, preventing the - algorithm from continuing. + -- Function: void gsl_dht_free (gsl_dht * T) + This function frees the transform T. - The solver maintains a current best estimate of the root 's->x' and -its function value 's->f' at all times. This information can be -accessed with the following auxiliary functions, + -- Function: int gsl_dht_apply (const gsl_dht * T, double * F_IN, + double * F_OUT) + This function applies the transform T to the array F_IN whose size + is equal to the size of the transform. The result is stored in the + array F_OUT which must be of the same length. - -- Function: gsl_vector * gsl_multiroot_fsolver_root (const - gsl_multiroot_fsolver * S) - -- Function: gsl_vector * gsl_multiroot_fdfsolver_root (const - gsl_multiroot_fdfsolver * S) - These functions return the current estimate of the root for the - solver S, given by 's->x'. + Applying this function to its output gives the original data + multiplied by (1/j_(\nu,M))^2, up to numerical errors. - -- Function: gsl_vector * gsl_multiroot_fsolver_f (const - gsl_multiroot_fsolver * S) - -- Function: gsl_vector * gsl_multiroot_fdfsolver_f (const - gsl_multiroot_fdfsolver * S) - These functions return the function value f(x) at the current - estimate of the root for the solver S, given by 's->f'. + -- Function: double gsl_dht_x_sample (const gsl_dht * T, int N) + This function returns the value of the N-th sample point in the + unit interval, (j_{\nu,n+1}/j_{\nu,M}) X. These are the points + where the function f(t) is assumed to be sampled. - -- Function: gsl_vector * gsl_multiroot_fsolver_dx (const - gsl_multiroot_fsolver * S) - -- Function: gsl_vector * gsl_multiroot_fdfsolver_dx (const - gsl_multiroot_fdfsolver * S) - These functions return the last step dx taken by the solver S, - given by 's->dx'. + -- Function: double gsl_dht_k_sample (const gsl_dht * T, int N) + This function returns the value of the N-th sample point in + "k-space", j_{\nu,n+1}/X.  -File: gsl-ref.info, Node: Search Stopping Parameters for the multidimensional solver, Next: Algorithms using Derivatives, Prev: Iteration of the multidimensional solver, Up: Multidimensional Root-Finding - -35.5 Search Stopping Parameters -=============================== +File: gsl-ref.info, Node: Discrete Hankel Transform References, Prev: Discrete Hankel Transform Functions, Up: Discrete Hankel Transforms -A root finding procedure should stop when one of the following -conditions is true: +33.3 References and Further Reading +=================================== - * A multidimensional root has been found to within the user-specified - precision. +The algorithms used by these functions are described in the following +papers, - * A user-specified maximum number of iterations has been reached. + H. Fisk Johnson, Comp. Phys. Comm. 43, 181 (1987). - * An error has occurred. + D. Lemoine, J. Chem. Phys. 101, 3936 (1994). -The handling of these conditions is under user control. The functions -below allow the user to test the precision of the current result in -several standard ways. + +File: gsl-ref.info, Node: One dimensional Root-Finding, Next: One dimensional Minimization, Prev: Discrete Hankel Transforms, Up: Top - -- Function: int gsl_multiroot_test_delta (const gsl_vector * DX, const - gsl_vector * X, double EPSABS, double EPSREL) +34 One dimensional Root-Finding +******************************* - This function tests for the convergence of the sequence by - comparing the last step DX with the absolute error EPSABS and - relative error EPSREL to the current position X. The test returns - 'GSL_SUCCESS' if the following condition is achieved, +This chapter describes routines for finding roots of arbitrary +one-dimensional functions. The library provides low level components +for a variety of iterative solvers and convergence tests. These can be +combined by the user to achieve the desired solution, with full access +to the intermediate steps of the iteration. Each class of methods uses +the same framework, so that you can switch between solvers at runtime +without needing to recompile your program. Each instance of a solver +keeps track of its own state, allowing the solvers to be used in +multi-threaded programs. - |dx_i| < epsabs + epsrel |x_i| + The header file 'gsl_roots.h' contains prototypes for the root +finding functions and related declarations. - for each component of X and returns 'GSL_CONTINUE' otherwise. +* Menu: - -- Function: int gsl_multiroot_test_residual (const gsl_vector * F, - double EPSABS) - This function tests the residual value F against the absolute error - bound EPSABS. The test returns 'GSL_SUCCESS' if the following - condition is achieved, +* Root Finding Overview:: +* Root Finding Caveats:: +* Initializing the Solver:: +* Providing the function to solve:: +* Search Bounds and Guesses:: +* Root Finding Iteration:: +* Search Stopping Parameters:: +* Root Bracketing Algorithms:: +* Root Finding Algorithms using Derivatives:: +* Root Finding Examples:: +* Root Finding References and Further Reading:: - \sum_i |f_i| < epsabs + +File: gsl-ref.info, Node: Root Finding Overview, Next: Root Finding Caveats, Up: One dimensional Root-Finding - and returns 'GSL_CONTINUE' otherwise. This criterion is suitable - for situations where the precise location of the root, x, is - unimportant provided a value can be found where the residual is - small enough. +34.1 Overview +============= - -File: gsl-ref.info, Node: Algorithms using Derivatives, Next: Algorithms without Derivatives, Prev: Search Stopping Parameters for the multidimensional solver, Up: Multidimensional Root-Finding +One-dimensional root finding algorithms can be divided into two classes, +"root bracketing" and "root polishing". Algorithms which proceed by +bracketing a root are guaranteed to converge. Bracketing algorithms +begin with a bounded region known to contain a root. The size of this +bounded region is reduced, iteratively, until it encloses the root to a +desired tolerance. This provides a rigorous error estimate for the +location of the root. + + The technique of "root polishing" attempts to improve an initial +guess to the root. These algorithms converge only if started "close +enough" to a root, and sacrifice a rigorous error bound for speed. By +approximating the behavior of a function in the vicinity of a root they +attempt to find a higher order improvement of an initial guess. When +the behavior of the function is compatible with the algorithm and a good +initial guess is available a polishing algorithm can provide rapid +convergence. + + In GSL both types of algorithm are available in similar frameworks. +The user provides a high-level driver for the algorithms, and the +library provides the individual functions necessary for each of the +steps. There are three main phases of the iteration. The steps are, -35.6 Algorithms using Derivatives -================================= + * initialize solver state, S, for algorithm T -The root finding algorithms described in this section make use of both -the function and its derivative. They require an initial guess for the -location of the root, but there is no absolute guarantee of -convergence--the function must be suitable for this technique and the -initial guess must be sufficiently close to the root for it to work. -When the conditions are satisfied then convergence is quadratic. + * update S using the iteration T - -- Derivative Solver: gsl_multiroot_fdfsolver_hybridsj - This is a modified version of Powell's Hybrid method as implemented - in the HYBRJ algorithm in MINPACK. Minpack was written by Jorge J. - More', Burton S. Garbow and Kenneth E. Hillstrom. The Hybrid - algorithm retains the fast convergence of Newton's method but will - also reduce the residual when Newton's method is unreliable. + * test S for convergence, and repeat iteration if necessary - The algorithm uses a generalized trust region to keep each step - under control. In order to be accepted a proposed new position x' - must satisfy the condition |D (x' - x)| < \delta, where D is a - diagonal scaling matrix and \delta is the size of the trust region. - The components of D are computed internally, using the column norms - of the Jacobian to estimate the sensitivity of the residual to each - component of x. This improves the behavior of the algorithm for - badly scaled functions. +The state for bracketing solvers is held in a 'gsl_root_fsolver' struct. +The updating procedure uses only function evaluations (not derivatives). +The state for root polishing solvers is held in a 'gsl_root_fdfsolver' +struct. The updates require both the function and its derivative (hence +the name 'fdf') to be supplied by the user. - On each iteration the algorithm first determines the standard - Newton step by solving the system J dx = - f. If this step falls - inside the trust region it is used as a trial step in the next - stage. If not, the algorithm uses the linear combination of the - Newton and gradient directions which is predicted to minimize the - norm of the function while staying inside the trust region, + +File: gsl-ref.info, Node: Root Finding Caveats, Next: Initializing the Solver, Prev: Root Finding Overview, Up: One dimensional Root-Finding - dx = - \alpha J^{-1} f(x) - \beta \nabla |f(x)|^2. +34.2 Caveats +============ - This combination of Newton and gradient directions is referred to - as a "dogleg step". +Note that root finding functions can only search for one root at a time. +When there are several roots in the search area, the first root to be +found will be returned; however it is difficult to predict which of the +roots this will be. _In most cases, no error will be reported if you +try to find a root in an area where there is more than one._ + + Care must be taken when a function may have a multiple root (such as +f(x) = (x-x_0)^2 or f(x) = (x-x_0)^3). It is not possible to use +root-bracketing algorithms on even-multiplicity roots. For these +algorithms the initial interval must contain a zero-crossing, where the +function is negative at one end of the interval and positive at the +other end. Roots with even-multiplicity do not cross zero, but only +touch it instantaneously. Algorithms based on root bracketing will +still work for odd-multiplicity roots (e.g. cubic, quintic, ...). Root +polishing algorithms generally work with higher multiplicity roots, but +at a reduced rate of convergence. In these cases the "Steffenson +algorithm" can be used to accelerate the convergence of multiple roots. + + While it is not absolutely required that f have a root within the +search region, numerical root finding functions should not be used +haphazardly to check for the _existence_ of roots. There are better +ways to do this. Because it is easy to create situations where +numerical root finders can fail, it is a bad idea to throw a root finder +at a function you do not know much about. In general it is best to +examine the function visually by plotting before searching for a root. - The proposed step is now tested by evaluating the function at the - resulting point, x'. If the step reduces the norm of the function - sufficiently then it is accepted and size of the trust region is - increased. If the proposed step fails to improve the solution then - the size of the trust region is decreased and another trial step is - computed. + +File: gsl-ref.info, Node: Initializing the Solver, Next: Providing the function to solve, Prev: Root Finding Caveats, Up: One dimensional Root-Finding - The speed of the algorithm is increased by computing the changes to - the Jacobian approximately, using a rank-1 update. If two - successive attempts fail to reduce the residual then the full - Jacobian is recomputed. The algorithm also monitors the progress - of the solution and returns an error if several steps fail to make - any improvement, +34.3 Initializing the Solver +============================ - 'GSL_ENOPROG' - the iteration is not making any progress, preventing the - algorithm from continuing. + -- Function: gsl_root_fsolver * gsl_root_fsolver_alloc (const + gsl_root_fsolver_type * T) + This function returns a pointer to a newly allocated instance of a + solver of type T. For example, the following code creates an + instance of a bisection solver, - 'GSL_ENOPROGJ' - re-evaluations of the Jacobian indicate that the iteration is - not making any progress, preventing the algorithm from - continuing. + const gsl_root_fsolver_type * T + = gsl_root_fsolver_bisection; + gsl_root_fsolver * s + = gsl_root_fsolver_alloc (T); - -- Derivative Solver: gsl_multiroot_fdfsolver_hybridj - This algorithm is an unscaled version of 'hybridsj'. The steps are - controlled by a spherical trust region |x' - x| < \delta, instead - of a generalized region. This can be useful if the generalized - region estimated by 'hybridsj' is inappropriate. + If there is insufficient memory to create the solver then the + function returns a null pointer and the error handler is invoked + with an error code of 'GSL_ENOMEM'. - -- Derivative Solver: gsl_multiroot_fdfsolver_newton + -- Function: gsl_root_fdfsolver * gsl_root_fdfsolver_alloc (const + gsl_root_fdfsolver_type * T) + This function returns a pointer to a newly allocated instance of a + derivative-based solver of type T. For example, the following code + creates an instance of a Newton-Raphson solver, - Newton's Method is the standard root-polishing algorithm. The - algorithm begins with an initial guess for the location of the - solution. On each iteration a linear approximation to the function - F is used to estimate the step which will zero all the components - of the residual. The iteration is defined by the following - sequence, + const gsl_root_fdfsolver_type * T + = gsl_root_fdfsolver_newton; + gsl_root_fdfsolver * s + = gsl_root_fdfsolver_alloc (T); - x -> x' = x - J^{-1} f(x) + If there is insufficient memory to create the solver then the + function returns a null pointer and the error handler is invoked + with an error code of 'GSL_ENOMEM'. - where the Jacobian matrix J is computed from the derivative - functions provided by F. The step dx is obtained by solving the - linear system, + -- Function: int gsl_root_fsolver_set (gsl_root_fsolver * S, + gsl_function * F, double X_LOWER, double X_UPPER) + This function initializes, or reinitializes, an existing solver S + to use the function F and the initial search interval [X_LOWER, + X_UPPER]. - J dx = - f(x) + -- Function: int gsl_root_fdfsolver_set (gsl_root_fdfsolver * S, + gsl_function_fdf * FDF, double ROOT) + This function initializes, or reinitializes, an existing solver S + to use the function and derivative FDF and the initial guess ROOT. - using LU decomposition. If the Jacobian matrix is singular, an - error code of 'GSL_EDOM' is returned. + -- Function: void gsl_root_fsolver_free (gsl_root_fsolver * S) + -- Function: void gsl_root_fdfsolver_free (gsl_root_fdfsolver * S) + These functions free all the memory associated with the solver S. - -- Derivative Solver: gsl_multiroot_fdfsolver_gnewton - This is a modified version of Newton's method which attempts to - improve global convergence by requiring every step to reduce the - Euclidean norm of the residual, |f(x)|. If the Newton step leads - to an increase in the norm then a reduced step of relative size, + -- Function: const char * gsl_root_fsolver_name (const gsl_root_fsolver + * S) + -- Function: const char * gsl_root_fdfsolver_name (const + gsl_root_fdfsolver * S) + These functions return a pointer to the name of the solver. For + example, - t = (\sqrt(1 + 6 r) - 1) / (3 r) + printf ("s is a '%s' solver\n", + gsl_root_fsolver_name (s)); - is proposed, with r being the ratio of norms |f(x')|^2/|f(x)|^2. - This procedure is repeated until a suitable step size is found. + would print something like 's is a 'bisection' solver'.  -File: gsl-ref.info, Node: Algorithms without Derivatives, Next: Example programs for Multidimensional Root finding, Prev: Algorithms using Derivatives, Up: Multidimensional Root-Finding +File: gsl-ref.info, Node: Providing the function to solve, Next: Search Bounds and Guesses, Prev: Initializing the Solver, Up: One dimensional Root-Finding -35.7 Algorithms without Derivatives -=================================== +34.4 Providing the function to solve +==================================== -The algorithms described in this section do not require any derivative -information to be supplied by the user. Any derivatives needed are -approximated by finite differences. Note that if the -finite-differencing step size chosen by these routines is inappropriate, -an explicit user-supplied numerical derivative can always be used with -the algorithms described in the previous section. +You must provide a continuous function of one variable for the root +finders to operate on, and, sometimes, its first derivative. In order +to allow for general parameters the functions are defined by the +following data types: + + -- Data Type: gsl_function + This data type defines a general function with parameters. + + 'double (* function) (double X, void * PARAMS)' + this function should return the value f(x,params) for argument + X and parameters PARAMS - -- Solver: gsl_multiroot_fsolver_hybrids - This is a version of the Hybrid algorithm which replaces calls to - the Jacobian function by its finite difference approximation. The - finite difference approximation is computed using - 'gsl_multiroots_fdjac' with a relative step size of - 'GSL_SQRT_DBL_EPSILON'. Note that this step size will not be - suitable for all problems. + 'void * params' + a pointer to the parameters of the function - -- Solver: gsl_multiroot_fsolver_hybrid - This is a finite difference version of the Hybrid algorithm without - internal scaling. + Here is an example for the general quadratic function, - -- Solver: gsl_multiroot_fsolver_dnewton + f(x) = a x^2 + b x + c - The "discrete Newton algorithm" is the simplest method of solving a - multidimensional system. It uses the Newton iteration +with a = 3, b = 2, c = 1. The following code defines a 'gsl_function' +'F' which you could pass to a root finder as a function pointer: - x -> x - J^{-1} f(x) + struct my_f_params { double a; double b; double c; }; - where the Jacobian matrix J is approximated by taking finite - differences of the function F. The approximation scheme used by - this implementation is, + double + my_f (double x, void * p) { + struct my_f_params * params + = (struct my_f_params *)p; + double a = (params->a); + double b = (params->b); + double c = (params->c); - J_{ij} = (f_i(x + \delta_j) - f_i(x)) / \delta_j + return (a * x + b) * x + c; + } - where \delta_j is a step of size \sqrt\epsilon |x_j| with \epsilon - being the machine precision (\epsilon \approx 2.22 \times 10^-16). - The order of convergence of Newton's algorithm is quadratic, but - the finite differences require n^2 function evaluations on each - iteration. The algorithm may become unstable if the finite - differences are not a good approximation to the true derivatives. + gsl_function F; + struct my_f_params params = { 3.0, 2.0, 1.0 }; - -- Solver: gsl_multiroot_fsolver_broyden + F.function = &my_f; + F.params = ¶ms; - The "Broyden algorithm" is a version of the discrete Newton - algorithm which attempts to avoids the expensive update of the - Jacobian matrix on each iteration. The changes to the Jacobian are - also approximated, using a rank-1 update, +The function f(x) can be evaluated using the macro 'GSL_FN_EVAL(&F,x)' +defined in 'gsl_math.h'. - J^{-1} \to J^{-1} - (J^{-1} df - dx) dx^T J^{-1} / dx^T J^{-1} df + -- Data Type: gsl_function_fdf + This data type defines a general function with parameters and its + first derivative. + + 'double (* f) (double X, void * PARAMS)' + this function should return the value of f(x,params) for + argument X and parameters PARAMS + + 'double (* df) (double X, void * PARAMS)' + this function should return the value of the derivative of F + with respect to X, f'(x,params), for argument X and parameters + PARAMS + + 'void (* fdf) (double X, void * PARAMS, double * F, double * DF)' + this function should set the values of the function F to + f(x,params) and its derivative DF to f'(x,params) for argument + X and parameters PARAMS. This function provides an + optimization of the separate functions for f(x) and f'(x)--it + is always faster to compute the function and its derivative at + the same time. - where the vectors dx and df are the changes in x and f. On the - first iteration the inverse Jacobian is estimated using finite - differences, as in the discrete Newton algorithm. + 'void * params' + a pointer to the parameters of the function - This approximation gives a fast update but is unreliable if the - changes are not small, and the estimate of the inverse Jacobian - becomes worse as time passes. The algorithm has a tendency to - become unstable unless it starts close to the root. The Jacobian - is refreshed if this instability is detected (consult the source - for details). + Here is an example where f(x) = 2\exp(2x): - This algorithm is included only for demonstration purposes, and is - not recommended for serious use. + double + my_f (double x, void * params) + { + return exp (2 * x); + } - -File: gsl-ref.info, Node: Example programs for Multidimensional Root finding, Next: References and Further Reading for Multidimensional Root Finding, Prev: Algorithms without Derivatives, Up: Multidimensional Root-Finding + double + my_df (double x, void * params) + { + return 2 * exp (2 * x); + } -35.8 Examples -============= + void + my_fdf (double x, void * params, + double * f, double * df) + { + double t = exp (2 * x); -The multidimensional solvers are used in a similar way to the -one-dimensional root finding algorithms. This first example -demonstrates the 'hybrids' scaled-hybrid algorithm, which does not -require derivatives. The program solves the Rosenbrock system of -equations, + *f = t; + *df = 2 * t; /* uses existing value */ + } - f_1 (x, y) = a (1 - x) - f_2 (x, y) = b (y - x^2) + gsl_function_fdf FDF; -with a = 1, b = 10. The solution of this system lies at (x,y) = (1,1) -in a narrow valley. + FDF.f = &my_f; + FDF.df = &my_df; + FDF.fdf = &my_fdf; + FDF.params = 0; - The first stage of the program is to define the system of equations, +The function f(x) can be evaluated using the macro +'GSL_FN_FDF_EVAL_F(&FDF,x)' and the derivative f'(x) can be evaluated +using the macro 'GSL_FN_FDF_EVAL_DF(&FDF,x)'. Both the function y = +f(x) and its derivative dy = f'(x) can be evaluated at the same time +using the macro 'GSL_FN_FDF_EVAL_F_DF(&FDF,x,y,dy)'. The macro stores +f(x) in its Y argument and f'(x) in its DY argument--both of these +should be pointers to 'double'. - #include - #include - #include - #include + +File: gsl-ref.info, Node: Search Bounds and Guesses, Next: Root Finding Iteration, Prev: Providing the function to solve, Up: One dimensional Root-Finding - struct rparams - { - double a; - double b; - }; +34.5 Search Bounds and Guesses +============================== - int - rosenbrock_f (const gsl_vector * x, void *params, - gsl_vector * f) - { - double a = ((struct rparams *) params)->a; - double b = ((struct rparams *) params)->b; +You provide either search bounds or an initial guess; this section +explains how search bounds and guesses work and how function arguments +control them. - const double x0 = gsl_vector_get (x, 0); - const double x1 = gsl_vector_get (x, 1); + A guess is simply an x value which is iterated until it is within the +desired precision of a root. It takes the form of a 'double'. - const double y0 = a * (1 - x0); - const double y1 = b * (x1 - x0 * x0); + Search bounds are the endpoints of an interval which is iterated +until the length of the interval is smaller than the requested +precision. The interval is defined by two values, the lower limit and +the upper limit. Whether the endpoints are intended to be included in +the interval or not depends on the context in which the interval is +used. - gsl_vector_set (f, 0, y0); - gsl_vector_set (f, 1, y1); + +File: gsl-ref.info, Node: Root Finding Iteration, Next: Search Stopping Parameters, Prev: Search Bounds and Guesses, Up: One dimensional Root-Finding - return GSL_SUCCESS; - } +34.6 Iteration +============== -The main program begins by creating the function object 'f', with the -arguments '(x,y)' and parameters '(a,b)'. The solver 's' is initialized -to use this function, with the 'hybrids' method. +The following functions drive the iteration of each algorithm. Each +function performs one iteration to update the state of any solver of the +corresponding type. The same functions work for all solvers so that +different methods can be substituted at runtime without modifications to +the code. - int - main (void) - { - const gsl_multiroot_fsolver_type *T; - gsl_multiroot_fsolver *s; + -- Function: int gsl_root_fsolver_iterate (gsl_root_fsolver * S) + -- Function: int gsl_root_fdfsolver_iterate (gsl_root_fdfsolver * S) + These functions perform a single iteration of the solver S. If the + iteration encounters an unexpected problem then an error code will + be returned, - int status; - size_t i, iter = 0; + 'GSL_EBADFUNC' + the iteration encountered a singular point where the function + or its derivative evaluated to 'Inf' or 'NaN'. - const size_t n = 2; - struct rparams p = {1.0, 10.0}; - gsl_multiroot_function f = {&rosenbrock_f, n, &p}; + 'GSL_EZERODIV' + the derivative of the function vanished at the iteration + point, preventing the algorithm from continuing without a + division by zero. + + The solver maintains a current best estimate of the root at all +times. The bracketing solvers also keep track of the current best +interval bounding the root. This information can be accessed with the +following auxiliary functions, - double x_init[2] = {-10.0, -5.0}; - gsl_vector *x = gsl_vector_alloc (n); + -- Function: double gsl_root_fsolver_root (const gsl_root_fsolver * S) + -- Function: double gsl_root_fdfsolver_root (const gsl_root_fdfsolver * + S) + These functions return the current estimate of the root for the + solver S. - gsl_vector_set (x, 0, x_init[0]); - gsl_vector_set (x, 1, x_init[1]); + -- Function: double gsl_root_fsolver_x_lower (const gsl_root_fsolver * + S) + -- Function: double gsl_root_fsolver_x_upper (const gsl_root_fsolver * + S) + These functions return the current bracketing interval for the + solver S. - T = gsl_multiroot_fsolver_hybrids; - s = gsl_multiroot_fsolver_alloc (T, 2); - gsl_multiroot_fsolver_set (s, &f, x); + +File: gsl-ref.info, Node: Search Stopping Parameters, Next: Root Bracketing Algorithms, Prev: Root Finding Iteration, Up: One dimensional Root-Finding - print_state (iter, s); +34.7 Search Stopping Parameters +=============================== - do - { - iter++; - status = gsl_multiroot_fsolver_iterate (s); +A root finding procedure should stop when one of the following +conditions is true: - print_state (iter, s); + * A root has been found to within the user-specified precision. - if (status) /* check if solver is stuck */ - break; + * A user-specified maximum number of iterations has been reached. - status = - gsl_multiroot_test_residual (s->f, 1e-7); - } - while (status == GSL_CONTINUE && iter < 1000); + * An error has occurred. - printf ("status = %s\n", gsl_strerror (status)); +The handling of these conditions is under user control. The functions +below allow the user to test the precision of the current result in +several standard ways. - gsl_multiroot_fsolver_free (s); - gsl_vector_free (x); - return 0; - } + -- Function: int gsl_root_test_interval (double X_LOWER, double + X_UPPER, double EPSABS, double EPSREL) + This function tests for the convergence of the interval [X_LOWER, + X_UPPER] with absolute error EPSABS and relative error EPSREL. The + test returns 'GSL_SUCCESS' if the following condition is achieved, -Note that it is important to check the return status of each solver -step, in case the algorithm becomes stuck. If an error condition is -detected, indicating that the algorithm cannot proceed, then the error -can be reported to the user, a new starting point chosen or a different -algorithm used. + |a - b| < epsabs + epsrel min(|a|,|b|) - The intermediate state of the solution is displayed by the following -function. The solver state contains the vector 's->x' which is the -current position, and the vector 's->f' with corresponding function -values. + when the interval x = [a,b] does not include the origin. If the + interval includes the origin then \min(|a|,|b|) is replaced by zero + (which is the minimum value of |x| over the interval). This + ensures that the relative error is accurately estimated for roots + close to the origin. - int - print_state (size_t iter, gsl_multiroot_fsolver * s) - { - printf ("iter = %3u x = % .3f % .3f " - "f(x) = % .3e % .3e\n", - iter, - gsl_vector_get (s->x, 0), - gsl_vector_get (s->x, 1), - gsl_vector_get (s->f, 0), - gsl_vector_get (s->f, 1)); - } + This condition on the interval also implies that any estimate of + the root r in the interval satisfies the same condition with + respect to the true root r^*, -Here are the results of running the program. The algorithm is started -at (-10,-5) far from the solution. Since the solution is hidden in a -narrow valley the earliest steps follow the gradient of the function -downhill, in an attempt to reduce the large value of the residual. Once -the root has been approximately located, on iteration 8, the Newton -behavior takes over and convergence is very rapid. + |r - r^*| < epsabs + epsrel r^* - iter = 0 x = -10.000 -5.000 f(x) = 1.100e+01 -1.050e+03 - iter = 1 x = -10.000 -5.000 f(x) = 1.100e+01 -1.050e+03 - iter = 2 x = -3.976 24.827 f(x) = 4.976e+00 9.020e+01 - iter = 3 x = -3.976 24.827 f(x) = 4.976e+00 9.020e+01 - iter = 4 x = -3.976 24.827 f(x) = 4.976e+00 9.020e+01 - iter = 5 x = -1.274 -5.680 f(x) = 2.274e+00 -7.302e+01 - iter = 6 x = -1.274 -5.680 f(x) = 2.274e+00 -7.302e+01 - iter = 7 x = 0.249 0.298 f(x) = 7.511e-01 2.359e+00 - iter = 8 x = 0.249 0.298 f(x) = 7.511e-01 2.359e+00 - iter = 9 x = 1.000 0.878 f(x) = 1.268e-10 -1.218e+00 - iter = 10 x = 1.000 0.989 f(x) = 1.124e-11 -1.080e-01 - iter = 11 x = 1.000 1.000 f(x) = 0.000e+00 0.000e+00 - status = success + assuming that the true root r^* is contained within the interval. -Note that the algorithm does not update the location on every iteration. -Some iterations are used to adjust the trust-region parameter, after -trying a step which was found to be divergent, or to recompute the -Jacobian, when poor convergence behavior is detected. + -- Function: int gsl_root_test_delta (double X1, double X0, double + EPSABS, double EPSREL) - The next example program adds derivative information, in order to -accelerate the solution. There are two derivative functions -'rosenbrock_df' and 'rosenbrock_fdf'. The latter computes both the -function and its derivative simultaneously. This allows the -optimization of any common terms. For simplicity we substitute calls to -the separate 'f' and 'df' functions at this point in the code below. + This function tests for the convergence of the sequence ..., X0, X1 + with absolute error EPSABS and relative error EPSREL. The test + returns 'GSL_SUCCESS' if the following condition is achieved, - int - rosenbrock_df (const gsl_vector * x, void *params, - gsl_matrix * J) - { - const double a = ((struct rparams *) params)->a; - const double b = ((struct rparams *) params)->b; + |x_1 - x_0| < epsabs + epsrel |x_1| - const double x0 = gsl_vector_get (x, 0); + and returns 'GSL_CONTINUE' otherwise. - const double df00 = -a; - const double df01 = 0; - const double df10 = -2 * b * x0; - const double df11 = b; + -- Function: int gsl_root_test_residual (double F, double EPSABS) + This function tests the residual value F against the absolute error + bound EPSABS. The test returns 'GSL_SUCCESS' if the following + condition is achieved, - gsl_matrix_set (J, 0, 0, df00); - gsl_matrix_set (J, 0, 1, df01); - gsl_matrix_set (J, 1, 0, df10); - gsl_matrix_set (J, 1, 1, df11); + |f| < epsabs - return GSL_SUCCESS; - } + and returns 'GSL_CONTINUE' otherwise. This criterion is suitable + for situations where the precise location of the root, x, is + unimportant provided a value can be found where the residual, + |f(x)|, is small enough. - int - rosenbrock_fdf (const gsl_vector * x, void *params, - gsl_vector * f, gsl_matrix * J) - { - rosenbrock_f (x, params, f); - rosenbrock_df (x, params, J); + +File: gsl-ref.info, Node: Root Bracketing Algorithms, Next: Root Finding Algorithms using Derivatives, Prev: Search Stopping Parameters, Up: One dimensional Root-Finding - return GSL_SUCCESS; - } +34.8 Root Bracketing Algorithms +=============================== -The main program now makes calls to the corresponding 'fdfsolver' -versions of the functions, +The root bracketing algorithms described in this section require an +initial interval which is guaranteed to contain a root--if a and b are +the endpoints of the interval then f(a) must differ in sign from f(b). +This ensures that the function crosses zero at least once in the +interval. If a valid initial interval is used then these algorithm +cannot fail, provided the function is well-behaved. + + Note that a bracketing algorithm cannot find roots of even degree, +since these do not cross the x-axis. + + -- Solver: gsl_root_fsolver_bisection + + The "bisection algorithm" is the simplest method of bracketing the + roots of a function. It is the slowest algorithm provided by the + library, with linear convergence. + + On each iteration, the interval is bisected and the value of the + function at the midpoint is calculated. The sign of this value is + used to determine which half of the interval does not contain a + root. That half is discarded to give a new, smaller interval + containing the root. This procedure can be continued indefinitely + until the interval is sufficiently small. + + At any time the current estimate of the root is taken as the + midpoint of the interval. + + -- Solver: gsl_root_fsolver_falsepos + + The "false position algorithm" is a method of finding roots based + on linear interpolation. Its convergence is linear, but it is + usually faster than bisection. + + On each iteration a line is drawn between the endpoints (a,f(a)) + and (b,f(b)) and the point where this line crosses the x-axis taken + as a "midpoint". The value of the function at this point is + calculated and its sign is used to determine which side of the + interval does not contain a root. That side is discarded to give a + new, smaller interval containing the root. This procedure can be + continued indefinitely until the interval is sufficiently small. + + The best estimate of the root is taken from the linear + interpolation of the interval on the current iteration. + + -- Solver: gsl_root_fsolver_brent + + The "Brent-Dekker method" (referred to here as "Brent's method") + combines an interpolation strategy with the bisection algorithm. + This produces a fast algorithm which is still robust. + + On each iteration Brent's method approximates the function using an + interpolating curve. On the first iteration this is a linear + interpolation of the two endpoints. For subsequent iterations the + algorithm uses an inverse quadratic fit to the last three points, + for higher accuracy. The intercept of the interpolating curve with + the x-axis is taken as a guess for the root. If it lies within the + bounds of the current interval then the interpolating point is + accepted, and used to generate a smaller interval. If the + interpolating point is not accepted then the algorithm falls back + to an ordinary bisection step. - int - main (void) - { - const gsl_multiroot_fdfsolver_type *T; - gsl_multiroot_fdfsolver *s; + The best estimate of the root is taken from the most recent + interpolation or bisection. - int status; - size_t i, iter = 0; + +File: gsl-ref.info, Node: Root Finding Algorithms using Derivatives, Next: Root Finding Examples, Prev: Root Bracketing Algorithms, Up: One dimensional Root-Finding - const size_t n = 2; - struct rparams p = {1.0, 10.0}; - gsl_multiroot_function_fdf f = {&rosenbrock_f, - &rosenbrock_df, - &rosenbrock_fdf, - n, &p}; +34.9 Root Finding Algorithms using Derivatives +============================================== - double x_init[2] = {-10.0, -5.0}; - gsl_vector *x = gsl_vector_alloc (n); +The root polishing algorithms described in this section require an +initial guess for the location of the root. There is no absolute +guarantee of convergence--the function must be suitable for this +technique and the initial guess must be sufficiently close to the root +for it to work. When these conditions are satisfied then convergence is +quadratic. - gsl_vector_set (x, 0, x_init[0]); - gsl_vector_set (x, 1, x_init[1]); + These algorithms make use of both the function and its derivative. - T = gsl_multiroot_fdfsolver_gnewton; - s = gsl_multiroot_fdfsolver_alloc (T, n); - gsl_multiroot_fdfsolver_set (s, &f, x); + -- Derivative Solver: gsl_root_fdfsolver_newton - print_state (iter, s); + Newton's Method is the standard root-polishing algorithm. The + algorithm begins with an initial guess for the location of the + root. On each iteration, a line tangent to the function f is drawn + at that position. The point where this line crosses the x-axis + becomes the new guess. The iteration is defined by the following + sequence, - do - { - iter++; + x_{i+1} = x_i - f(x_i)/f'(x_i) - status = gsl_multiroot_fdfsolver_iterate (s); + Newton's method converges quadratically for single roots, and + linearly for multiple roots. - print_state (iter, s); + -- Derivative Solver: gsl_root_fdfsolver_secant - if (status) - break; + The "secant method" is a simplified version of Newton's method + which does not require the computation of the derivative on every + step. - status = gsl_multiroot_test_residual (s->f, 1e-7); - } - while (status == GSL_CONTINUE && iter < 1000); + On its first iteration the algorithm begins with Newton's method, + using the derivative to compute a first step, - printf ("status = %s\n", gsl_strerror (status)); + x_1 = x_0 - f(x_0)/f'(x_0) - gsl_multiroot_fdfsolver_free (s); - gsl_vector_free (x); - return 0; - } + Subsequent iterations avoid the evaluation of the derivative by + replacing it with a numerical estimate, the slope of the line + through the previous two points, -The addition of derivative information to the 'hybrids' solver does not -make any significant difference to its behavior, since it able to -approximate the Jacobian numerically with sufficient accuracy. To -illustrate the behavior of a different derivative solver we switch to -'gnewton'. This is a traditional Newton solver with the constraint that -it scales back its step if the full step would lead "uphill". Here is -the output for the 'gnewton' algorithm, + x_{i+1} = x_i f(x_i) / f'_{est} where + f'_{est} = (f(x_i) - f(x_{i-1})/(x_i - x_{i-1}) - iter = 0 x = -10.000 -5.000 f(x) = 1.100e+01 -1.050e+03 - iter = 1 x = -4.231 -65.317 f(x) = 5.231e+00 -8.321e+02 - iter = 2 x = 1.000 -26.358 f(x) = -8.882e-16 -2.736e+02 - iter = 3 x = 1.000 1.000 f(x) = -2.220e-16 -4.441e-15 - status = success + When the derivative does not change significantly in the vicinity + of the root the secant method gives a useful saving. + Asymptotically the secant method is faster than Newton's method + whenever the cost of evaluating the derivative is more than 0.44 + times the cost of evaluating the function itself. As with all + methods of computing a numerical derivative the estimate can suffer + from cancellation errors if the separation of the points becomes + too small. -The convergence is much more rapid, but takes a wide excursion out to -the point (-4.23,-65.3). This could cause the algorithm to go astray in -a realistic application. The hybrid algorithm follows the downhill path -to the solution more reliably. + On single roots, the method has a convergence of order (1 + \sqrt + 5)/2 (approximately 1.62). It converges linearly for multiple + roots. - -File: gsl-ref.info, Node: References and Further Reading for Multidimensional Root Finding, Prev: Example programs for Multidimensional Root finding, Up: Multidimensional Root-Finding + -- Derivative Solver: gsl_root_fdfsolver_steffenson -35.9 References and Further Reading -=================================== + The "Steffenson Method"(1) provides the fastest convergence of all + the routines. It combines the basic Newton algorithm with an + Aitken "delta-squared" acceleration. If the Newton iterates are + x_i then the acceleration procedure generates a new sequence R_i, -The original version of the Hybrid method is described in the following -articles by Powell, + R_i = x_i - (x_{i+1} - x_i)^2 / (x_{i+2} - 2 x_{i+1} + x_{i}) - M.J.D. Powell, "A Hybrid Method for Nonlinear Equations" (Chap 6, p - 87-114) and "A Fortran Subroutine for Solving systems of Nonlinear - Algebraic Equations" (Chap 7, p 115-161), in 'Numerical Methods for - Nonlinear Algebraic Equations', P. Rabinowitz, editor. Gordon and - Breach, 1970. + which converges faster than the original sequence under reasonable + conditions. The new sequence requires three terms before it can + produce its first value so the method returns accelerated values on + the second and subsequent iterations. On the first iteration it + returns the ordinary Newton estimate. The Newton iterate is also + returned if the denominator of the acceleration term ever becomes + zero. -The following papers are also relevant to the algorithms described in -this section, + As with all acceleration procedures this method can become unstable + if the function is not well-behaved. - J.J. More', M.Y. Cosnard, "Numerical Solution of Nonlinear - Equations", 'ACM Transactions on Mathematical Software', Vol 5, No - 1, (1979), p 64-85 + ---------- Footnotes ---------- - C.G. Broyden, "A Class of Methods for Solving Nonlinear - Simultaneous Equations", 'Mathematics of Computation', Vol 19 - (1965), p 577-593 + (1) J.F. Steffensen (1873-1961). The spelling used in the name of +the function is slightly incorrect, but has been preserved to avoid +incompatibility. - J.J. More', B.S. Garbow, K.E. Hillstrom, "Testing Unconstrained - Optimization Software", ACM Transactions on Mathematical Software, - Vol 7, No 1 (1981), p 17-41 + +File: gsl-ref.info, Node: Root Finding Examples, Next: Root Finding References and Further Reading, Prev: Root Finding Algorithms using Derivatives, Up: One dimensional Root-Finding + +34.10 Examples +============== + +For any root finding algorithm we need to prepare the function to be +solved. For this example we will use the general quadratic equation +described earlier. We first need a header file ('demo_fn.h') to define +the function parameters, + + struct quadratic_params + { + double a, b, c; + }; + + double quadratic (double x, void *params); + double quadratic_deriv (double x, void *params); + void quadratic_fdf (double x, void *params, + double *y, double *dy); + +We place the function definitions in a separate file ('demo_fn.c'), + + double + quadratic (double x, void *params) + { + struct quadratic_params *p + = (struct quadratic_params *) params; + + double a = p->a; + double b = p->b; + double c = p->c; + + return (a * x + b) * x + c; + } + + double + quadratic_deriv (double x, void *params) + { + struct quadratic_params *p + = (struct quadratic_params *) params; + + double a = p->a; + double b = p->b; + + return 2.0 * a * x + b; + } + + void + quadratic_fdf (double x, void *params, + double *y, double *dy) + { + struct quadratic_params *p + = (struct quadratic_params *) params; + + double a = p->a; + double b = p->b; + double c = p->c; + + *y = (a * x + b) * x + c; + *dy = 2.0 * a * x + b; + } + +The first program uses the function solver 'gsl_root_fsolver_brent' for +Brent's method and the general quadratic defined above to solve the +following equation, + + x^2 - 5 = 0 + +with solution x = \sqrt 5 = 2.236068... + + #include + #include + #include + #include + + #include "demo_fn.h" + #include "demo_fn.c" + + int + main (void) + { + int status; + int iter = 0, max_iter = 100; + const gsl_root_fsolver_type *T; + gsl_root_fsolver *s; + double r = 0, r_expected = sqrt (5.0); + double x_lo = 0.0, x_hi = 5.0; + gsl_function F; + struct quadratic_params params = {1.0, 0.0, -5.0}; + + F.function = &quadratic; + F.params = ¶ms; + + T = gsl_root_fsolver_brent; + s = gsl_root_fsolver_alloc (T); + gsl_root_fsolver_set (s, &F, x_lo, x_hi); + + printf ("using %s method\n", + gsl_root_fsolver_name (s)); + + printf ("%5s [%9s, %9s] %9s %10s %9s\n", + "iter", "lower", "upper", "root", + "err", "err(est)"); + + do + { + iter++; + status = gsl_root_fsolver_iterate (s); + r = gsl_root_fsolver_root (s); + x_lo = gsl_root_fsolver_x_lower (s); + x_hi = gsl_root_fsolver_x_upper (s); + status = gsl_root_test_interval (x_lo, x_hi, + 0, 0.001); + + if (status == GSL_SUCCESS) + printf ("Converged:\n"); + + printf ("%5d [%.7f, %.7f] %.7f %+.7f %.7f\n", + iter, x_lo, x_hi, + r, r - r_expected, + x_hi - x_lo); + } + while (status == GSL_CONTINUE && iter < max_iter); + + gsl_root_fsolver_free (s); + + return status; + } + +Here are the results of the iterations, + + $ ./a.out + using brent method + iter [ lower, upper] root err err(est) + 1 [1.0000000, 5.0000000] 1.0000000 -1.2360680 4.0000000 + 2 [1.0000000, 3.0000000] 3.0000000 +0.7639320 2.0000000 + 3 [2.0000000, 3.0000000] 2.0000000 -0.2360680 1.0000000 + 4 [2.2000000, 3.0000000] 2.2000000 -0.0360680 0.8000000 + 5 [2.2000000, 2.2366300] 2.2366300 +0.0005621 0.0366300 + Converged: + 6 [2.2360634, 2.2366300] 2.2360634 -0.0000046 0.0005666 + +If the program is modified to use the bisection solver instead of +Brent's method, by changing 'gsl_root_fsolver_brent' to +'gsl_root_fsolver_bisection' the slower convergence of the Bisection +method can be observed, + + $ ./a.out + using bisection method + iter [ lower, upper] root err err(est) + 1 [0.0000000, 2.5000000] 1.2500000 -0.9860680 2.5000000 + 2 [1.2500000, 2.5000000] 1.8750000 -0.3610680 1.2500000 + 3 [1.8750000, 2.5000000] 2.1875000 -0.0485680 0.6250000 + 4 [2.1875000, 2.5000000] 2.3437500 +0.1076820 0.3125000 + 5 [2.1875000, 2.3437500] 2.2656250 +0.0295570 0.1562500 + 6 [2.1875000, 2.2656250] 2.2265625 -0.0095055 0.0781250 + 7 [2.2265625, 2.2656250] 2.2460938 +0.0100258 0.0390625 + 8 [2.2265625, 2.2460938] 2.2363281 +0.0002601 0.0195312 + 9 [2.2265625, 2.2363281] 2.2314453 -0.0046227 0.0097656 + 10 [2.2314453, 2.2363281] 2.2338867 -0.0021813 0.0048828 + 11 [2.2338867, 2.2363281] 2.2351074 -0.0009606 0.0024414 + Converged: + 12 [2.2351074, 2.2363281] 2.2357178 -0.0003502 0.0012207 + + The next program solves the same function using a derivative solver +instead. + + #include + #include + #include + #include + + #include "demo_fn.h" + #include "demo_fn.c" + + int + main (void) + { + int status; + int iter = 0, max_iter = 100; + const gsl_root_fdfsolver_type *T; + gsl_root_fdfsolver *s; + double x0, x = 5.0, r_expected = sqrt (5.0); + gsl_function_fdf FDF; + struct quadratic_params params = {1.0, 0.0, -5.0}; + + FDF.f = &quadratic; + FDF.df = &quadratic_deriv; + FDF.fdf = &quadratic_fdf; + FDF.params = ¶ms; + + T = gsl_root_fdfsolver_newton; + s = gsl_root_fdfsolver_alloc (T); + gsl_root_fdfsolver_set (s, &FDF, x); + + printf ("using %s method\n", + gsl_root_fdfsolver_name (s)); + + printf ("%-5s %10s %10s %10s\n", + "iter", "root", "err", "err(est)"); + do + { + iter++; + status = gsl_root_fdfsolver_iterate (s); + x0 = x; + x = gsl_root_fdfsolver_root (s); + status = gsl_root_test_delta (x, x0, 0, 1e-3); + + if (status == GSL_SUCCESS) + printf ("Converged:\n"); + + printf ("%5d %10.7f %+10.7f %10.7f\n", + iter, x, x - r_expected, x - x0); + } + while (status == GSL_CONTINUE && iter < max_iter); + + gsl_root_fdfsolver_free (s); + return status; + } + +Here are the results for Newton's method, + + $ ./a.out + using newton method + iter root err err(est) + 1 3.0000000 +0.7639320 -2.0000000 + 2 2.3333333 +0.0972654 -0.6666667 + 3 2.2380952 +0.0020273 -0.0952381 + Converged: + 4 2.2360689 +0.0000009 -0.0020263 + +Note that the error can be estimated more accurately by taking the +difference between the current iterate and next iterate rather than the +previous iterate. The other derivative solvers can be investigated by +changing 'gsl_root_fdfsolver_newton' to 'gsl_root_fdfsolver_secant' or +'gsl_root_fdfsolver_steffenson'.  -File: gsl-ref.info, Node: Multidimensional Minimization, Next: Least-Squares Fitting, Prev: Multidimensional Root-Finding, Up: Top +File: gsl-ref.info, Node: Root Finding References and Further Reading, Prev: Root Finding Examples, Up: One dimensional Root-Finding -36 Multidimensional Minimization -******************************** +34.11 References and Further Reading +==================================== + +For information on the Brent-Dekker algorithm see the following two +papers, + + R. P. Brent, "An algorithm with guaranteed convergence for finding + a zero of a function", 'Computer Journal', 14 (1971) 422-425 + + J. C. P. Bus and T. J. Dekker, "Two Efficient Algorithms with + Guaranteed Convergence for Finding a Zero of a Function", 'ACM + Transactions of Mathematical Software', Vol. 1 No. 4 (1975) 330-345 + + +File: gsl-ref.info, Node: One dimensional Minimization, Next: Multidimensional Root-Finding, Prev: One dimensional Root-Finding, Up: Top + +35 One dimensional Minimization +******************************* This chapter describes routines for finding minima of arbitrary -multidimensional functions. The library provides low level components +one-dimensional functions. The library provides low level components for a variety of iterative minimizers and convergence tests. These can -be combined by the user to achieve the desired solution, while providing -full access to the intermediate steps of the algorithms. Each class of +be combined by the user to achieve the desired solution, with full +access to the intermediate steps of the algorithms. Each class of methods uses the same framework, so that you can switch between minimizers at runtime without needing to recompile your program. Each instance of a minimizer keeps track of its own state, allowing the -minimizers to be used in multi-threaded programs. The minimization -algorithms can be used to maximize a function by inverting its sign. +minimizers to be used in multi-threaded programs. - The header file 'gsl_multimin.h' contains prototypes for the -minimization functions and related declarations. + The header file 'gsl_min.h' contains prototypes for the minimization +functions and related declarations. To use the minimization algorithms +to find the maximum of a function simply invert its sign. * Menu: -* Multimin Overview:: -* Multimin Caveats:: -* Initializing the Multidimensional Minimizer:: -* Providing a function to minimize:: -* Multimin Iteration:: -* Multimin Stopping Criteria:: -* Multimin Algorithms with Derivatives:: -* Multimin Algorithms without Derivatives:: -* Multimin Examples:: -* Multimin References and Further Reading:: +* Minimization Overview:: +* Minimization Caveats:: +* Initializing the Minimizer:: +* Providing the function to minimize:: +* Minimization Iteration:: +* Minimization Stopping Parameters:: +* Minimization Algorithms:: +* Minimization Examples:: +* Minimization References and Further Reading::  -File: gsl-ref.info, Node: Multimin Overview, Next: Multimin Caveats, Up: Multidimensional Minimization +File: gsl-ref.info, Node: Minimization Overview, Next: Minimization Caveats, Up: One dimensional Minimization -36.1 Overview +35.1 Overview ============= -The problem of multidimensional minimization requires finding a point x -such that the scalar function, - - f(x_1, ..., x_n) - -takes a value which is lower than at any neighboring point. For smooth -functions the gradient g = \nabla f vanishes at the minimum. In general -there are no bracketing methods available for the minimization of -n-dimensional functions. The algorithms proceed from an initial guess -using a search algorithm which attempts to move in a downhill direction. - - Algorithms making use of the gradient of the function perform a -one-dimensional line minimisation along this direction until the lowest -point is found to a suitable tolerance. The search direction is then -updated with local information from the function and its derivatives, -and the whole process repeated until the true n-dimensional minimum is -found. - - Algorithms which do not require the gradient of the function use -different strategies. For example, the Nelder-Mead Simplex algorithm -maintains n+1 trial parameter vectors as the vertices of a n-dimensional -simplex. On each iteration it tries to improve the worst vertex of the -simplex by geometrical transformations. The iterations are continued -until the overall size of the simplex has decreased sufficiently. - - Both types of algorithms use a standard framework. The user provides -a high-level driver for the algorithms, and the library provides the -individual functions necessary for each of the steps. There are three -main phases of the iteration. The steps are, +The minimization algorithms begin with a bounded region known to contain +a minimum. The region is described by a lower bound a and an upper +bound b, with an estimate of the location of the minimum x. + +The value of the function at x must be less than the value of the +function at the ends of the interval, + + f(a) > f(x) < f(b) + +This condition guarantees that a minimum is contained somewhere within +the interval. On each iteration a new point x' is selected using one of +the available algorithms. If the new point is a better estimate of the +minimum, i.e. where f(x') < f(x), then the current estimate of the +minimum x is updated. The new point also allows the size of the bounded +interval to be reduced, by choosing the most compact set of points which +satisfies the constraint f(a) > f(x) < f(b). The interval is reduced +until it encloses the true minimum to a desired tolerance. This +provides a best estimate of the location of the minimum and a rigorous +error estimate. + + Several bracketing algorithms are available within a single +framework. The user provides a high-level driver for the algorithm, and +the library provides the individual functions necessary for each of the +steps. There are three main phases of the iteration. The steps are, * initialize minimizer state, S, for algorithm T @@ -950,9498 +1453,5588 @@ * test S for convergence, and repeat iteration if necessary -Each iteration step consists either of an improvement to the -line-minimisation in the current direction or an update to the search -direction itself. The state for the minimizers is held in a -'gsl_multimin_fdfminimizer' struct or a 'gsl_multimin_fminimizer' -struct. +The state for the minimizers is held in a 'gsl_min_fminimizer' struct. +The updating procedure uses only function evaluations (not derivatives).  -File: gsl-ref.info, Node: Multimin Caveats, Next: Initializing the Multidimensional Minimizer, Prev: Multimin Overview, Up: Multidimensional Minimization +File: gsl-ref.info, Node: Minimization Caveats, Next: Initializing the Minimizer, Prev: Minimization Overview, Up: One dimensional Minimization -36.2 Caveats +35.2 Caveats ============ -Note that the minimization algorithms can only search for one local -minimum at a time. When there are several local minima in the search -area, the first minimum to be found will be returned; however it is -difficult to predict which of the minima this will be. In most cases, -no error will be reported if you try to find a local minimum in an area -where there is more than one. - - It is also important to note that the minimization algorithms find -local minima; there is no way to determine whether a minimum is a global -minimum of the function in question. +Note that minimization functions can only search for one minimum at a +time. When there are several minima in the search area, the first +minimum to be found will be returned; however it is difficult to predict +which of the minima this will be. _In most cases, no error will be +reported if you try to find a minimum in an area where there is more +than one._ + + With all minimization algorithms it can be difficult to determine the +location of the minimum to full numerical precision. The behavior of +the function in the region of the minimum x^* can be approximated by a +Taylor expansion, + + y = f(x^*) + (1/2) f''(x^*) (x - x^*)^2 + +and the second term of this expansion can be lost when added to the +first term at finite precision. This magnifies the error in locating +x^*, making it proportional to \sqrt \epsilon (where \epsilon is the +relative accuracy of the floating point numbers). For functions with +higher order minima, such as x^4, the magnification of the error is +correspondingly worse. The best that can be achieved is to converge to +the limit of numerical accuracy in the function values, rather than the +location of the minimum itself.  -File: gsl-ref.info, Node: Initializing the Multidimensional Minimizer, Next: Providing a function to minimize, Prev: Multimin Caveats, Up: Multidimensional Minimization - -36.3 Initializing the Multidimensional Minimizer -================================================ +File: gsl-ref.info, Node: Initializing the Minimizer, Next: Providing the function to minimize, Prev: Minimization Caveats, Up: One dimensional Minimization -The following function initializes a multidimensional minimizer. The -minimizer itself depends only on the dimension of the problem and the -algorithm and can be reused for different problems. +35.3 Initializing the Minimizer +=============================== - -- Function: gsl_multimin_fdfminimizer * - gsl_multimin_fdfminimizer_alloc (const - gsl_multimin_fdfminimizer_type * T, size_t N) - -- Function: gsl_multimin_fminimizer * gsl_multimin_fminimizer_alloc - (const gsl_multimin_fminimizer_type * T, size_t N) + -- Function: gsl_min_fminimizer * gsl_min_fminimizer_alloc (const + gsl_min_fminimizer_type * T) This function returns a pointer to a newly allocated instance of a - minimizer of type T for an N-dimension function. If there is - insufficient memory to create the minimizer then the function - returns a null pointer and the error handler is invoked with an - error code of 'GSL_ENOMEM'. + minimizer of type T. For example, the following code creates an + instance of a golden section minimizer, - -- Function: int gsl_multimin_fdfminimizer_set - (gsl_multimin_fdfminimizer * S, gsl_multimin_function_fdf * - FDF, const gsl_vector * X, double STEP_SIZE, double TOL) - -- Function: int gsl_multimin_fminimizer_set (gsl_multimin_fminimizer * - S, gsl_multimin_function * F, const gsl_vector * X, const - gsl_vector * STEP_SIZE) - The function 'gsl_multimin_fdfminimizer_set' initializes the - minimizer S to minimize the function FDF starting from the initial - point X. The size of the first trial step is given by STEP_SIZE. - The accuracy of the line minimization is specified by TOL. The - precise meaning of this parameter depends on the method used. - Typically the line minimization is considered successful if the - gradient of the function g is orthogonal to the current search - direction p to a relative accuracy of TOL, where dot(p,g) < tol |p| - |g|. A TOL value of 0.1 is suitable for most purposes, since line - minimization only needs to be carried out approximately. Note that - setting TOL to zero will force the use of "exact" line-searches, - which are extremely expensive. + const gsl_min_fminimizer_type * T + = gsl_min_fminimizer_goldensection; + gsl_min_fminimizer * s + = gsl_min_fminimizer_alloc (T); - The function 'gsl_multimin_fminimizer_set' initializes the - minimizer S to minimize the function F, starting from the initial - point X. The size of the initial trial steps is given in vector - STEP_SIZE. The precise meaning of this parameter depends on the - method used. + If there is insufficient memory to create the minimizer then the + function returns a null pointer and the error handler is invoked + with an error code of 'GSL_ENOMEM'. - -- Function: void gsl_multimin_fdfminimizer_free - (gsl_multimin_fdfminimizer * S) - -- Function: void gsl_multimin_fminimizer_free (gsl_multimin_fminimizer - * S) + -- Function: int gsl_min_fminimizer_set (gsl_min_fminimizer * S, + gsl_function * F, double X_MINIMUM, double X_LOWER, double + X_UPPER) + This function sets, or resets, an existing minimizer S to use the + function F and the initial search interval [X_LOWER, X_UPPER], with + a guess for the location of the minimum X_MINIMUM. + + If the interval given does not contain a minimum, then the function + returns an error code of 'GSL_EINVAL'. + + -- Function: int gsl_min_fminimizer_set_with_values (gsl_min_fminimizer + * S, gsl_function * F, double X_MINIMUM, double F_MINIMUM, + double X_LOWER, double F_LOWER, double X_UPPER, double + F_UPPER) + This function is equivalent to 'gsl_min_fminimizer_set' but uses + the values F_MINIMUM, F_LOWER and F_UPPER instead of computing + 'f(x_minimum)', 'f(x_lower)' and 'f(x_upper)'. + + -- Function: void gsl_min_fminimizer_free (gsl_min_fminimizer * S) This function frees all the memory associated with the minimizer S. - -- Function: const char * gsl_multimin_fdfminimizer_name (const - gsl_multimin_fdfminimizer * S) - -- Function: const char * gsl_multimin_fminimizer_name (const - gsl_multimin_fminimizer * S) + -- Function: const char * gsl_min_fminimizer_name (const + gsl_min_fminimizer * S) This function returns a pointer to the name of the minimizer. For example, printf ("s is a '%s' minimizer\n", - gsl_multimin_fdfminimizer_name (s)); + gsl_min_fminimizer_name (s)); - would print something like 's is a 'conjugate_pr' minimizer'. + would print something like 's is a 'brent' minimizer'.  -File: gsl-ref.info, Node: Providing a function to minimize, Next: Multimin Iteration, Prev: Initializing the Multidimensional Minimizer, Up: Multidimensional Minimization +File: gsl-ref.info, Node: Providing the function to minimize, Next: Minimization Iteration, Prev: Initializing the Minimizer, Up: One dimensional Minimization -36.4 Providing a function to minimize -===================================== +35.4 Providing the function to minimize +======================================= -You must provide a parametric function of n variables for the minimizers -to operate on. You may also need to provide a routine which calculates -the gradient of the function and a third routine which calculates both -the function value and the gradient together. In order to allow for -general parameters the functions are defined by the following data -types: +You must provide a continuous function of one variable for the +minimizers to operate on. In order to allow for general parameters the +functions are defined by a 'gsl_function' data type (*note Providing the +function to solve::). - -- Data Type: gsl_multimin_function_fdf - This data type defines a general function of n variables with - parameters and the corresponding gradient vector of derivatives, + +File: gsl-ref.info, Node: Minimization Iteration, Next: Minimization Stopping Parameters, Prev: Providing the function to minimize, Up: One dimensional Minimization - 'double (* f) (const gsl_vector * X, void * PARAMS)' - this function should return the result f(x,params) for - argument X and parameters PARAMS. If the function cannot be - computed, an error value of 'GSL_NAN' should be returned. +35.5 Iteration +============== - 'void (* df) (const gsl_vector * X, void * PARAMS, gsl_vector * G)' - this function should store the N-dimensional gradient g_i = d - f(x,params) / d x_i in the vector G for argument X and - parameters PARAMS, returning an appropriate error code if the - function cannot be computed. +The following functions drive the iteration of each algorithm. Each +function performs one iteration to update the state of any minimizer of +the corresponding type. The same functions work for all minimizers so +that different methods can be substituted at runtime without +modifications to the code. - 'void (* fdf) (const gsl_vector * X, void * PARAMS, double * f, gsl_vector * G)' - This function should set the values of the F and G as above, - for arguments X and parameters PARAMS. This function provides - an optimization of the separate functions for f(x) and - g(x)--it is always faster to compute the function and its - derivative at the same time. + -- Function: int gsl_min_fminimizer_iterate (gsl_min_fminimizer * S) + This function performs a single iteration of the minimizer S. If + the iteration encounters an unexpected problem then an error code + will be returned, - 'size_t n' - the dimension of the system, i.e. the number of components of - the vectors X. + 'GSL_EBADFUNC' + the iteration encountered a singular point where the function + evaluated to 'Inf' or 'NaN'. - 'void * params' - a pointer to the parameters of the function. - -- Data Type: gsl_multimin_function - This data type defines a general function of n variables with - parameters, + 'GSL_FAILURE' + the algorithm could not improve the current best approximation + or bounding interval. + + The minimizer maintains a current best estimate of the position of +the minimum at all times, and the current interval bounding the minimum. +This information can be accessed with the following auxiliary functions, + + -- Function: double gsl_min_fminimizer_x_minimum (const + gsl_min_fminimizer * S) + This function returns the current estimate of the position of the + minimum for the minimizer S. + + -- Function: double gsl_min_fminimizer_x_upper (const + gsl_min_fminimizer * S) + -- Function: double gsl_min_fminimizer_x_lower (const + gsl_min_fminimizer * S) + These functions return the current upper and lower bound of the + interval for the minimizer S. + + -- Function: double gsl_min_fminimizer_f_minimum (const + gsl_min_fminimizer * S) + -- Function: double gsl_min_fminimizer_f_upper (const + gsl_min_fminimizer * S) + -- Function: double gsl_min_fminimizer_f_lower (const + gsl_min_fminimizer * S) + These functions return the value of the function at the current + estimate of the minimum and at the upper and lower bounds of the + interval for the minimizer S. - 'double (* f) (const gsl_vector * X, void * PARAMS)' - this function should return the result f(x,params) for - argument X and parameters PARAMS. If the function cannot be - computed, an error value of 'GSL_NAN' should be returned. + +File: gsl-ref.info, Node: Minimization Stopping Parameters, Next: Minimization Algorithms, Prev: Minimization Iteration, Up: One dimensional Minimization - 'size_t n' - the dimension of the system, i.e. the number of components of - the vectors X. +35.6 Stopping Parameters +======================== - 'void * params' - a pointer to the parameters of the function. +A minimization procedure should stop when one of the following +conditions is true: -The following example function defines a simple two-dimensional -paraboloid with five parameters, + * A minimum has been found to within the user-specified precision. - /* Paraboloid centered on (p[0],p[1]), with - scale factors (p[2],p[3]) and minimum p[4] */ + * A user-specified maximum number of iterations has been reached. - double - my_f (const gsl_vector *v, void *params) - { - double x, y; - double *p = (double *)params; + * An error has occurred. - x = gsl_vector_get(v, 0); - y = gsl_vector_get(v, 1); +The handling of these conditions is under user control. The function +below allows the user to test the precision of the current result. - return p[2] * (x - p[0]) * (x - p[0]) + - p[3] * (y - p[1]) * (y - p[1]) + p[4]; - } + -- Function: int gsl_min_test_interval (double X_LOWER, double X_UPPER, + double EPSABS, double EPSREL) + This function tests for the convergence of the interval [X_LOWER, + X_UPPER] with absolute error EPSABS and relative error EPSREL. The + test returns 'GSL_SUCCESS' if the following condition is achieved, - /* The gradient of f, df = (df/dx, df/dy). */ - void - my_df (const gsl_vector *v, void *params, - gsl_vector *df) - { - double x, y; - double *p = (double *)params; + |a - b| < epsabs + epsrel min(|a|,|b|) - x = gsl_vector_get(v, 0); - y = gsl_vector_get(v, 1); + when the interval x = [a,b] does not include the origin. If the + interval includes the origin then \min(|a|,|b|) is replaced by zero + (which is the minimum value of |x| over the interval). This + ensures that the relative error is accurately estimated for minima + close to the origin. - gsl_vector_set(df, 0, 2.0 * p[2] * (x - p[0])); - gsl_vector_set(df, 1, 2.0 * p[3] * (y - p[1])); - } + This condition on the interval also implies that any estimate of + the minimum x_m in the interval satisfies the same condition with + respect to the true minimum x_m^*, - /* Compute both f and df together. */ - void - my_fdf (const gsl_vector *x, void *params, - double *f, gsl_vector *df) - { - *f = my_f(x, params); - my_df(x, params, df); - } + |x_m - x_m^*| < epsabs + epsrel x_m^* -The function can be initialized using the following code, + assuming that the true minimum x_m^* is contained within the + interval. - gsl_multimin_function_fdf my_func; + +File: gsl-ref.info, Node: Minimization Algorithms, Next: Minimization Examples, Prev: Minimization Stopping Parameters, Up: One dimensional Minimization - /* Paraboloid center at (1,2), scale factors (10, 20), - minimum value 30 */ - double p[5] = { 1.0, 2.0, 10.0, 20.0, 30.0 }; +35.7 Minimization Algorithms +============================ - my_func.n = 2; /* number of function components */ - my_func.f = &my_f; - my_func.df = &my_df; - my_func.fdf = &my_fdf; - my_func.params = (void *)p; +The minimization algorithms described in this section require an initial +interval which is guaranteed to contain a minimum--if a and b are the +endpoints of the interval and x is an estimate of the minimum then f(a) +> f(x) < f(b). This ensures that the function has at least one minimum +somewhere in the interval. If a valid initial interval is used then +these algorithm cannot fail, provided the function is well-behaved. + + -- Minimizer: gsl_min_fminimizer_goldensection + + The "golden section algorithm" is the simplest method of bracketing + the minimum of a function. It is the slowest algorithm provided by + the library, with linear convergence. + + On each iteration, the algorithm first compares the subintervals + from the endpoints to the current minimum. The larger subinterval + is divided in a golden section (using the famous ratio (3-\sqrt + 5)/2 = 0.3819660...) and the value of the function at this new + point is calculated. The new value is used with the constraint + f(a') > f(x') < f(b') to a select new interval containing the + minimum, by discarding the least useful point. This procedure can + be continued indefinitely until the interval is sufficiently small. + Choosing the golden section as the bisection ratio can be shown to + provide the fastest convergence for this type of algorithm. + + -- Minimizer: gsl_min_fminimizer_brent + + The "Brent minimization algorithm" combines a parabolic + interpolation with the golden section algorithm. This produces a + fast algorithm which is still robust. + + The outline of the algorithm can be summarized as follows: on each + iteration Brent's method approximates the function using an + interpolating parabola through three existing points. The minimum + of the parabola is taken as a guess for the minimum. If it lies + within the bounds of the current interval then the interpolating + point is accepted, and used to generate a smaller interval. If the + interpolating point is not accepted then the algorithm falls back + to an ordinary golden section step. The full details of Brent's + method include some additional checks to improve convergence. + + -- Minimizer: gsl_min_fminimizer_quad_golden + This is a variant of Brent's algorithm which uses the safeguarded + step-length algorithm of Gill and Murray.  -File: gsl-ref.info, Node: Multimin Iteration, Next: Multimin Stopping Criteria, Prev: Providing a function to minimize, Up: Multidimensional Minimization +File: gsl-ref.info, Node: Minimization Examples, Next: Minimization References and Further Reading, Prev: Minimization Algorithms, Up: One dimensional Minimization -36.5 Iteration -============== +35.8 Examples +============= -The following function drives the iteration of each algorithm. The -function performs one iteration to update the state of the minimizer. -The same function works for all minimizers so that different methods can -be substituted at runtime without modifications to the code. +The following program uses the Brent algorithm to find the minimum of +the function f(x) = \cos(x) + 1, which occurs at x = \pi. The starting +interval is (0,6), with an initial guess for the minimum of 2. - -- Function: int gsl_multimin_fdfminimizer_iterate - (gsl_multimin_fdfminimizer * S) - -- Function: int gsl_multimin_fminimizer_iterate - (gsl_multimin_fminimizer * S) - These functions perform a single iteration of the minimizer S. If - the iteration encounters an unexpected problem then an error code - will be returned. The error code 'GSL_ENOPROG' signifies that the - minimizer is unable to improve on its current estimate, either due - to numerical difficulty or because a genuine local minimum has been - reached. + #include + #include + #include + #include -The minimizer maintains a current best estimate of the minimum at all -times. This information can be accessed with the following auxiliary -functions, + double fn1 (double x, void * params) + { + (void)(params); /* avoid unused parameter warning */ + return cos(x) + 1.0; + } - -- Function: gsl_vector * gsl_multimin_fdfminimizer_x (const - gsl_multimin_fdfminimizer * S) - -- Function: gsl_vector * gsl_multimin_fminimizer_x (const - gsl_multimin_fminimizer * S) - -- Function: double gsl_multimin_fdfminimizer_minimum (const - gsl_multimin_fdfminimizer * S) - -- Function: double gsl_multimin_fminimizer_minimum (const - gsl_multimin_fminimizer * S) - -- Function: gsl_vector * gsl_multimin_fdfminimizer_gradient (const - gsl_multimin_fdfminimizer * S) - -- Function: double gsl_multimin_fminimizer_size (const - gsl_multimin_fminimizer * S) - These functions return the current best estimate of the location of - the minimum, the value of the function at that point, its gradient, - and minimizer specific characteristic size for the minimizer S. + int + main (void) + { + int status; + int iter = 0, max_iter = 100; + const gsl_min_fminimizer_type *T; + gsl_min_fminimizer *s; + double m = 2.0, m_expected = M_PI; + double a = 0.0, b = 6.0; + gsl_function F; + + F.function = &fn1; + F.params = 0; + + T = gsl_min_fminimizer_brent; + s = gsl_min_fminimizer_alloc (T); + gsl_min_fminimizer_set (s, &F, m, a, b); + + printf ("using %s method\n", + gsl_min_fminimizer_name (s)); + + printf ("%5s [%9s, %9s] %9s %10s %9s\n", + "iter", "lower", "upper", "min", + "err", "err(est)"); + + printf ("%5d [%.7f, %.7f] %.7f %+.7f %.7f\n", + iter, a, b, + m, m - m_expected, b - a); - -- Function: int gsl_multimin_fdfminimizer_restart - (gsl_multimin_fdfminimizer * S) - This function resets the minimizer S to use the current point as a - new starting point. + do + { + iter++; + status = gsl_min_fminimizer_iterate (s); - -File: gsl-ref.info, Node: Multimin Stopping Criteria, Next: Multimin Algorithms with Derivatives, Prev: Multimin Iteration, Up: Multidimensional Minimization + m = gsl_min_fminimizer_x_minimum (s); + a = gsl_min_fminimizer_x_lower (s); + b = gsl_min_fminimizer_x_upper (s); -36.6 Stopping Criteria -====================== + status + = gsl_min_test_interval (a, b, 0.001, 0.0); -A minimization procedure should stop when one of the following -conditions is true: + if (status == GSL_SUCCESS) + printf ("Converged:\n"); - * A minimum has been found to within the user-specified precision. + printf ("%5d [%.7f, %.7f] " + "%.7f %+.7f %.7f\n", + iter, a, b, + m, m - m_expected, b - a); + } + while (status == GSL_CONTINUE && iter < max_iter); - * A user-specified maximum number of iterations has been reached. + gsl_min_fminimizer_free (s); - * An error has occurred. + return status; + } -The handling of these conditions is under user control. The functions -below allow the user to test the precision of the current result. +Here are the results of the minimization procedure. - -- Function: int gsl_multimin_test_gradient (const gsl_vector * G, - double EPSABS) - This function tests the norm of the gradient G against the absolute - tolerance EPSABS. The gradient of a multidimensional function goes - to zero at a minimum. The test returns 'GSL_SUCCESS' if the - following condition is achieved, + $ ./a.out + using brent method + iter [ lower, upper] min err err(est) + 0 [0.0000000, 6.0000000] 2.0000000 -1.1415927 6.0000000 + 1 [2.0000000, 6.0000000] 3.5278640 +0.3862713 4.0000000 + 2 [2.0000000, 3.5278640] 3.1748217 +0.0332290 1.5278640 + 3 [2.0000000, 3.1748217] 3.1264576 -0.0151351 1.1748217 + 4 [3.1264576, 3.1748217] 3.1414743 -0.0001183 0.0483641 + 5 [3.1414743, 3.1748217] 3.1415930 +0.0000004 0.0333474 + Converged: + 6 [3.1414743, 3.1415930] 3.1415927 +0.0000000 0.0001187 - |g| < epsabs + +File: gsl-ref.info, Node: Minimization References and Further Reading, Prev: Minimization Examples, Up: One dimensional Minimization - and returns 'GSL_CONTINUE' otherwise. A suitable choice of EPSABS - can be made from the desired accuracy in the function for small - variations in x. The relationship between these quantities is - given by \delta f = g \delta x. +35.9 References and Further Reading +=================================== - -- Function: int gsl_multimin_test_size (const double SIZE, double - EPSABS) - This function tests the minimizer specific characteristic size (if - applicable to the used minimizer) against absolute tolerance - EPSABS. The test returns 'GSL_SUCCESS' if the size is smaller than - tolerance, otherwise 'GSL_CONTINUE' is returned. +Further information on Brent's algorithm is available in the following +book, - -File: gsl-ref.info, Node: Multimin Algorithms with Derivatives, Next: Multimin Algorithms without Derivatives, Prev: Multimin Stopping Criteria, Up: Multidimensional Minimization + Richard Brent, 'Algorithms for minimization without derivatives', + Prentice-Hall (1973), republished by Dover in paperback (2002), + ISBN 0-486-41998-3. -36.7 Algorithms with Derivatives -================================ + +File: gsl-ref.info, Node: Multidimensional Root-Finding, Next: Multidimensional Minimization, Prev: One dimensional Minimization, Up: Top -There are several minimization methods available. The best choice of -algorithm depends on the problem. The algorithms described in this -section use the value of the function and its gradient at each -evaluation point. +36 Multidimensional Root-Finding +******************************** - -- Minimizer: gsl_multimin_fdfminimizer_conjugate_fr - This is the Fletcher-Reeves conjugate gradient algorithm. The - conjugate gradient algorithm proceeds as a succession of line - minimizations. The sequence of search directions is used to build - up an approximation to the curvature of the function in the - neighborhood of the minimum. +This chapter describes functions for multidimensional root-finding +(solving nonlinear systems with n equations in n unknowns). The library +provides low level components for a variety of iterative solvers and +convergence tests. These can be combined by the user to achieve the +desired solution, with full access to the intermediate steps of the +iteration. Each class of methods uses the same framework, so that you +can switch between solvers at runtime without needing to recompile your +program. Each instance of a solver keeps track of its own state, +allowing the solvers to be used in multi-threaded programs. The solvers +are based on the original Fortran library MINPACK. - An initial search direction P is chosen using the gradient, and - line minimization is carried out in that direction. The accuracy - of the line minimization is specified by the parameter TOL. The - minimum along this line occurs when the function gradient G and the - search direction P are orthogonal. The line minimization - terminates when dot(p,g) < tol |p| |g|. The search direction is - updated using the Fletcher-Reeves formula p' = g' - \beta g where - \beta=-|g'|^2/|g|^2, and the line minimization is then repeated for - the new search direction. + The header file 'gsl_multiroots.h' contains prototypes for the +multidimensional root finding functions and related declarations. - -- Minimizer: gsl_multimin_fdfminimizer_conjugate_pr - This is the Polak-Ribiere conjugate gradient algorithm. It is - similar to the Fletcher-Reeves method, differing only in the choice - of the coefficient \beta. Both methods work well when the - evaluation point is close enough to the minimum of the objective - function that it is well approximated by a quadratic hypersurface. +* Menu: - -- Minimizer: gsl_multimin_fdfminimizer_vector_bfgs2 - -- Minimizer: gsl_multimin_fdfminimizer_vector_bfgs - These methods use the vector Broyden-Fletcher-Goldfarb-Shanno - (BFGS) algorithm. This is a quasi-Newton method which builds up an - approximation to the second derivatives of the function f using the - difference between successive gradient vectors. By combining the - first and second derivatives the algorithm is able to take - Newton-type steps towards the function minimum, assuming quadratic - behavior in that region. +* Overview of Multidimensional Root Finding:: +* Initializing the Multidimensional Solver:: +* Providing the multidimensional system of equations to solve:: +* Iteration of the multidimensional solver:: +* Search Stopping Parameters for the multidimensional solver:: +* Algorithms using Derivatives:: +* Algorithms without Derivatives:: +* Example programs for Multidimensional Root finding:: +* References and Further Reading for Multidimensional Root Finding:: - The 'bfgs2' version of this minimizer is the most efficient version - available, and is a faithful implementation of the line - minimization scheme described in Fletcher's 'Practical Methods of - Optimization', Algorithms 2.6.2 and 2.6.4. It supersedes the - original 'bfgs' routine and requires substantially fewer function - and gradient evaluations. The user-supplied tolerance TOL - corresponds to the parameter \sigma used by Fletcher. A value of - 0.1 is recommended for typical use (larger values correspond to - less accurate line searches). + +File: gsl-ref.info, Node: Overview of Multidimensional Root Finding, Next: Initializing the Multidimensional Solver, Up: Multidimensional Root-Finding - -- Minimizer: gsl_multimin_fdfminimizer_steepest_descent - The steepest descent algorithm follows the downhill gradient of the - function at each step. When a downhill step is successful the - step-size is increased by a factor of two. If the downhill step - leads to a higher function value then the algorithm backtracks and - the step size is decreased using the parameter TOL. A suitable - value of TOL for most applications is 0.1. The steepest descent - method is inefficient and is included only for demonstration - purposes. +36.1 Overview +============= - -File: gsl-ref.info, Node: Multimin Algorithms without Derivatives, Next: Multimin Examples, Prev: Multimin Algorithms with Derivatives, Up: Multidimensional Minimization +The problem of multidimensional root finding requires the simultaneous +solution of n equations, f_i, in n variables, x_i, -36.8 Algorithms without Derivatives -=================================== + f_i (x_1, ..., x_n) = 0 for i = 1 ... n. -The algorithms described in this section use only the value of the -function at each evaluation point. +In general there are no bracketing methods available for n dimensional +systems, and no way of knowing whether any solutions exist. All +algorithms proceed from an initial guess using a variant of the Newton +iteration, - -- Minimizer: gsl_multimin_fminimizer_nmsimplex2 - -- Minimizer: gsl_multimin_fminimizer_nmsimplex - These methods use the Simplex algorithm of Nelder and Mead. - Starting from the initial vector X = p_0, the algorithm constructs - an additional n vectors p_i using the step size vector s = - STEP_SIZE as follows: + x -> x' = x - J^{-1} f(x) - p_0 = (x_0, x_1, ... , x_n) - p_1 = (x_0 + s_0, x_1, ... , x_n) - p_2 = (x_0, x_1 + s_1, ... , x_n) - ... = ... - p_n = (x_0, x_1, ... , x_n + s_n) +where x, f are vector quantities and J is the Jacobian matrix J_{ij} = d +f_i / d x_j. Additional strategies can be used to enlarge the region of +convergence. These include requiring a decrease in the norm |f| on each +step proposed by Newton's method, or taking steepest-descent steps in +the direction of the negative gradient of |f|. - These vectors form the n+1 vertices of a simplex in n dimensions. - On each iteration the algorithm uses simple geometrical - transformations to update the vector corresponding to the highest - function value. The geometric transformations are reflection, - reflection followed by expansion, contraction and multiple - contraction. Using these transformations the simplex moves through - the space towards the minimum, where it contracts itself. + Several root-finding algorithms are available within a single +framework. The user provides a high-level driver for the algorithms, +and the library provides the individual functions necessary for each of +the steps. There are three main phases of the iteration. The steps +are, - After each iteration, the best vertex is returned. Note, that due - to the nature of the algorithm not every step improves the current - best parameter vector. Usually several iterations are required. + * initialize solver state, S, for algorithm T - The minimizer-specific characteristic size is calculated as the - average distance from the geometrical center of the simplex to all - its vertices. This size can be used as a stopping criteria, as the - simplex contracts itself near the minimum. The size is returned by - the function 'gsl_multimin_fminimizer_size'. + * update S using the iteration T - The 'nmsimplex2' version of this minimiser is a new O(N) operations - implementation of the earlier O(N^2) operations 'nmsimplex' - minimiser. It uses the same underlying algorithm, but the simplex - updates are computed more efficiently for high-dimensional - problems. In addition, the size of simplex is calculated as the - RMS distance of each vertex from the center rather than the mean - distance, allowing a linear update of this quantity on each step. - The memory usage is O(N^2) for both algorithms. + * test S for convergence, and repeat iteration if necessary - -- Minimizer: gsl_multimin_fminimizer_nmsimplex2rand - This method is a variant of 'nmsimplex2' which initialises the - simplex around the starting point X using a randomly-oriented set - of basis vectors instead of the fixed coordinate axes. The final - dimensions of the simplex are scaled along the coordinate axes by - the vector STEP_SIZE. The randomisation uses a simple - deterministic generator so that repeated calls to - 'gsl_multimin_fminimizer_set' for a given solver object will vary - the orientation in a well-defined way. +The evaluation of the Jacobian matrix can be problematic, either because +programming the derivatives is intractable or because computation of the +n^2 terms of the matrix becomes too expensive. For these reasons the +algorithms provided by the library are divided into two classes +according to whether the derivatives are available or not. + + The state for solvers with an analytic Jacobian matrix is held in a +'gsl_multiroot_fdfsolver' struct. The updating procedure requires both +the function and its derivatives to be supplied by the user. + + The state for solvers which do not use an analytic Jacobian matrix is +held in a 'gsl_multiroot_fsolver' struct. The updating procedure uses +only function evaluations (not derivatives). The algorithms estimate +the matrix J or J^{-1} by approximate methods.  -File: gsl-ref.info, Node: Multimin Examples, Next: Multimin References and Further Reading, Prev: Multimin Algorithms without Derivatives, Up: Multidimensional Minimization +File: gsl-ref.info, Node: Initializing the Multidimensional Solver, Next: Providing the multidimensional system of equations to solve, Prev: Overview of Multidimensional Root Finding, Up: Multidimensional Root-Finding -36.9 Examples -============= +36.2 Initializing the Solver +============================ -This example program finds the minimum of the paraboloid function -defined earlier. The location of the minimum is offset from the origin -in x and y, and the function value at the minimum is non-zero. The main -program is given below, it requires the example function given earlier -in this chapter. +The following functions initialize a multidimensional solver, either +with or without derivatives. The solver itself depends only on the +dimension of the problem and the algorithm and can be reused for +different problems. - int - main (void) - { - size_t iter = 0; - int status; + -- Function: gsl_multiroot_fsolver * gsl_multiroot_fsolver_alloc (const + gsl_multiroot_fsolver_type * T, size_t N) + This function returns a pointer to a newly allocated instance of a + solver of type T for a system of N dimensions. For example, the + following code creates an instance of a hybrid solver, to solve a + 3-dimensional system of equations. - const gsl_multimin_fdfminimizer_type *T; - gsl_multimin_fdfminimizer *s; + const gsl_multiroot_fsolver_type * T + = gsl_multiroot_fsolver_hybrid; + gsl_multiroot_fsolver * s + = gsl_multiroot_fsolver_alloc (T, 3); - /* Position of the minimum (1,2), scale factors - 10,20, height 30. */ - double par[5] = { 1.0, 2.0, 10.0, 20.0, 30.0 }; + If there is insufficient memory to create the solver then the + function returns a null pointer and the error handler is invoked + with an error code of 'GSL_ENOMEM'. - gsl_vector *x; - gsl_multimin_function_fdf my_func; + -- Function: gsl_multiroot_fdfsolver * gsl_multiroot_fdfsolver_alloc + (const gsl_multiroot_fdfsolver_type * T, size_t N) + This function returns a pointer to a newly allocated instance of a + derivative solver of type T for a system of N dimensions. For + example, the following code creates an instance of a Newton-Raphson + solver, for a 2-dimensional system of equations. - my_func.n = 2; - my_func.f = my_f; - my_func.df = my_df; - my_func.fdf = my_fdf; - my_func.params = par; + const gsl_multiroot_fdfsolver_type * T + = gsl_multiroot_fdfsolver_newton; + gsl_multiroot_fdfsolver * s = + gsl_multiroot_fdfsolver_alloc (T, 2); - /* Starting point, x = (5,7) */ - x = gsl_vector_alloc (2); - gsl_vector_set (x, 0, 5.0); - gsl_vector_set (x, 1, 7.0); + If there is insufficient memory to create the solver then the + function returns a null pointer and the error handler is invoked + with an error code of 'GSL_ENOMEM'. - T = gsl_multimin_fdfminimizer_conjugate_fr; - s = gsl_multimin_fdfminimizer_alloc (T, 2); + -- Function: int gsl_multiroot_fsolver_set (gsl_multiroot_fsolver * S, + gsl_multiroot_function * F, const gsl_vector * X) + -- Function: int gsl_multiroot_fdfsolver_set (gsl_multiroot_fdfsolver * + S, gsl_multiroot_function_fdf * FDF, const gsl_vector * X) + These functions set, or reset, an existing solver S to use the + function F or function and derivative FDF, and the initial guess X. + Note that the initial position is copied from X, this argument is + not modified by subsequent iterations. - gsl_multimin_fdfminimizer_set (s, &my_func, x, 0.01, 1e-4); + -- Function: void gsl_multiroot_fsolver_free (gsl_multiroot_fsolver * + S) + -- Function: void gsl_multiroot_fdfsolver_free (gsl_multiroot_fdfsolver + * S) + These functions free all the memory associated with the solver S. - do - { - iter++; - status = gsl_multimin_fdfminimizer_iterate (s); + -- Function: const char * gsl_multiroot_fsolver_name (const + gsl_multiroot_fsolver * S) + -- Function: const char * gsl_multiroot_fdfsolver_name (const + gsl_multiroot_fdfsolver * S) + These functions return a pointer to the name of the solver. For + example, - if (status) - break; + printf ("s is a '%s' solver\n", + gsl_multiroot_fdfsolver_name (s)); - status = gsl_multimin_test_gradient (s->gradient, 1e-3); + would print something like 's is a 'newton' solver'. - if (status == GSL_SUCCESS) - printf ("Minimum found at:\n"); + +File: gsl-ref.info, Node: Providing the multidimensional system of equations to solve, Next: Iteration of the multidimensional solver, Prev: Initializing the Multidimensional Solver, Up: Multidimensional Root-Finding - printf ("%5d %.5f %.5f %10.5f\n", iter, - gsl_vector_get (s->x, 0), - gsl_vector_get (s->x, 1), - s->f); +36.3 Providing the function to solve +==================================== - } - while (status == GSL_CONTINUE && iter < 100); +You must provide n functions of n variables for the root finders to +operate on. In order to allow for general parameters the functions are +defined by the following data types: - gsl_multimin_fdfminimizer_free (s); - gsl_vector_free (x); + -- Data Type: gsl_multiroot_function + This data type defines a general system of functions with + parameters. - return 0; - } + 'int (* f) (const gsl_vector * X, void * PARAMS, gsl_vector * F)' + this function should store the vector result f(x,params) in F + for argument X and parameters PARAMS, returning an appropriate + error code if the function cannot be computed. -The initial step-size is chosen as 0.01, a conservative estimate in this -case, and the line minimization parameter is set at 0.0001. The program -terminates when the norm of the gradient has been reduced below 0.001. -The output of the program is shown below, + 'size_t n' + the dimension of the system, i.e. the number of components of + the vectors X and F. - x y f - 1 4.99629 6.99072 687.84780 - 2 4.98886 6.97215 683.55456 - 3 4.97400 6.93501 675.01278 - 4 4.94429 6.86073 658.10798 - 5 4.88487 6.71217 625.01340 - 6 4.76602 6.41506 561.68440 - 7 4.52833 5.82083 446.46694 - 8 4.05295 4.63238 261.79422 - 9 3.10219 2.25548 75.49762 - 10 2.85185 1.62963 67.03704 - 11 2.19088 1.76182 45.31640 - 12 0.86892 2.02622 30.18555 - Minimum found at: - 13 1.00000 2.00000 30.00000 + 'void * params' + a pointer to the parameters of the function. -Note that the algorithm gradually increases the step size as it -successfully moves downhill, as can be seen by plotting the successive -points. +Here is an example using Powell's test function, -The conjugate gradient algorithm finds the minimum on its second -direction because the function is purely quadratic. Additional -iterations would be needed for a more complicated function. + f_1(x) = A x_0 x_1 - 1, + f_2(x) = exp(-x_0) + exp(-x_1) - (1 + 1/A) - Here is another example using the Nelder-Mead Simplex algorithm to -minimize the same example object function, as above. +with A = 10^4. The following code defines a 'gsl_multiroot_function' +system 'F' which you could pass to a solver: + + struct powell_params { double A; }; int - main(void) - { - double par[5] = {1.0, 2.0, 10.0, 20.0, 30.0}; + powell (gsl_vector * x, void * p, gsl_vector * f) { + struct powell_params * params + = (struct powell_params *)p; + const double A = (params->A); + const double x0 = gsl_vector_get(x,0); + const double x1 = gsl_vector_get(x,1); - const gsl_multimin_fminimizer_type *T = - gsl_multimin_fminimizer_nmsimplex2; - gsl_multimin_fminimizer *s = NULL; - gsl_vector *ss, *x; - gsl_multimin_function minex_func; + gsl_vector_set (f, 0, A * x0 * x1 - 1); + gsl_vector_set (f, 1, (exp(-x0) + exp(-x1) + - (1.0 + 1.0/A))); + return GSL_SUCCESS + } - size_t iter = 0; - int status; - double size; + gsl_multiroot_function F; + struct powell_params params = { 10000.0 }; - /* Starting point */ - x = gsl_vector_alloc (2); - gsl_vector_set (x, 0, 5.0); - gsl_vector_set (x, 1, 7.0); + F.f = &powell; + F.n = 2; + F.params = ¶ms; - /* Set initial step sizes to 1 */ - ss = gsl_vector_alloc (2); - gsl_vector_set_all (ss, 1.0); + -- Data Type: gsl_multiroot_function_fdf + This data type defines a general system of functions with + parameters and the corresponding Jacobian matrix of derivatives, - /* Initialize method and iterate */ - minex_func.n = 2; - minex_func.f = my_f; - minex_func.params = par; - - s = gsl_multimin_fminimizer_alloc (T, 2); - gsl_multimin_fminimizer_set (s, &minex_func, x, ss); - - do - { - iter++; - status = gsl_multimin_fminimizer_iterate(s); + 'int (* f) (const gsl_vector * X, void * PARAMS, gsl_vector * F)' + this function should store the vector result f(x,params) in F + for argument X and parameters PARAMS, returning an appropriate + error code if the function cannot be computed. - if (status) - break; + 'int (* df) (const gsl_vector * X, void * PARAMS, gsl_matrix * J)' + this function should store the N-by-N matrix result J_ij = d + f_i(x,params) / d x_j in J for argument X and parameters + PARAMS, returning an appropriate error code if the function + cannot be computed. - size = gsl_multimin_fminimizer_size (s); - status = gsl_multimin_test_size (size, 1e-2); + 'int (* fdf) (const gsl_vector * X, void * PARAMS, gsl_vector * F, gsl_matrix * J)' + This function should set the values of the F and J as above, + for arguments X and parameters PARAMS. This function provides + an optimization of the separate functions for f(x) and + J(x)--it is always faster to compute the function and its + derivative at the same time. - if (status == GSL_SUCCESS) - { - printf ("converged to minimum at\n"); - } + 'size_t n' + the dimension of the system, i.e. the number of components of + the vectors X and F. - printf ("%5d %10.3e %10.3e f() = %7.3f size = %.3f\n", - iter, - gsl_vector_get (s->x, 0), - gsl_vector_get (s->x, 1), - s->fval, size); - } - while (status == GSL_CONTINUE && iter < 100); + 'void * params' + a pointer to the parameters of the function. - gsl_vector_free(x); - gsl_vector_free(ss); - gsl_multimin_fminimizer_free (s); +The example of Powell's test function defined above can be extended to +include analytic derivatives using the following code, - return status; + int + powell_df (gsl_vector * x, void * p, gsl_matrix * J) + { + struct powell_params * params + = (struct powell_params *)p; + const double A = (params->A); + const double x0 = gsl_vector_get(x,0); + const double x1 = gsl_vector_get(x,1); + gsl_matrix_set (J, 0, 0, A * x1); + gsl_matrix_set (J, 0, 1, A * x0); + gsl_matrix_set (J, 1, 0, -exp(-x0)); + gsl_matrix_set (J, 1, 1, -exp(-x1)); + return GSL_SUCCESS } -The minimum search stops when the Simplex size drops to 0.01. The -output is shown below. + int + powell_fdf (gsl_vector * x, void * p, + gsl_matrix * f, gsl_matrix * J) { + struct powell_params * params + = (struct powell_params *)p; + const double A = (params->A); + const double x0 = gsl_vector_get(x,0); + const double x1 = gsl_vector_get(x,1); - 1 6.500e+00 5.000e+00 f() = 512.500 size = 1.130 - 2 5.250e+00 4.000e+00 f() = 290.625 size = 1.409 - 3 5.250e+00 4.000e+00 f() = 290.625 size = 1.409 - 4 5.500e+00 1.000e+00 f() = 252.500 size = 1.409 - 5 2.625e+00 3.500e+00 f() = 101.406 size = 1.847 - 6 2.625e+00 3.500e+00 f() = 101.406 size = 1.847 - 7 0.000e+00 3.000e+00 f() = 60.000 size = 1.847 - 8 2.094e+00 1.875e+00 f() = 42.275 size = 1.321 - 9 2.578e-01 1.906e+00 f() = 35.684 size = 1.069 - 10 5.879e-01 2.445e+00 f() = 35.664 size = 0.841 - 11 1.258e+00 2.025e+00 f() = 30.680 size = 0.476 - 12 1.258e+00 2.025e+00 f() = 30.680 size = 0.367 - 13 1.093e+00 1.849e+00 f() = 30.539 size = 0.300 - 14 8.830e-01 2.004e+00 f() = 30.137 size = 0.172 - 15 8.830e-01 2.004e+00 f() = 30.137 size = 0.126 - 16 9.582e-01 2.060e+00 f() = 30.090 size = 0.106 - 17 1.022e+00 2.004e+00 f() = 30.005 size = 0.063 - 18 1.022e+00 2.004e+00 f() = 30.005 size = 0.043 - 19 1.022e+00 2.004e+00 f() = 30.005 size = 0.043 - 20 1.022e+00 2.004e+00 f() = 30.005 size = 0.027 - 21 1.022e+00 2.004e+00 f() = 30.005 size = 0.022 - 22 9.920e-01 1.997e+00 f() = 30.001 size = 0.016 - 23 9.920e-01 1.997e+00 f() = 30.001 size = 0.013 - converged to minimum at - 24 9.920e-01 1.997e+00 f() = 30.001 size = 0.008 + const double u0 = exp(-x0); + const double u1 = exp(-x1); -The simplex size first increases, while the simplex moves towards the -minimum. After a while the size begins to decrease as the simplex -contracts around the minimum. + gsl_vector_set (f, 0, A * x0 * x1 - 1); + gsl_vector_set (f, 1, u0 + u1 - (1 + 1/A)); - -File: gsl-ref.info, Node: Multimin References and Further Reading, Prev: Multimin Examples, Up: Multidimensional Minimization + gsl_matrix_set (J, 0, 0, A * x1); + gsl_matrix_set (J, 0, 1, A * x0); + gsl_matrix_set (J, 1, 0, -u0); + gsl_matrix_set (J, 1, 1, -u1); + return GSL_SUCCESS + } -36.10 References and Further Reading -==================================== + gsl_multiroot_function_fdf FDF; -The conjugate gradient and BFGS methods are described in detail in the -following book, + FDF.f = &powell_f; + FDF.df = &powell_df; + FDF.fdf = &powell_fdf; + FDF.n = 2; + FDF.params = 0; - R. Fletcher, 'Practical Methods of Optimization (Second Edition)' - Wiley (1987), ISBN 0471915475. +Note that the function 'powell_fdf' is able to reuse existing terms from +the function when calculating the Jacobian, thus saving time. - A brief description of multidimensional minimization algorithms and -more recent references can be found in, + +File: gsl-ref.info, Node: Iteration of the multidimensional solver, Next: Search Stopping Parameters for the multidimensional solver, Prev: Providing the multidimensional system of equations to solve, Up: Multidimensional Root-Finding - C.W. Ueberhuber, 'Numerical Computation (Volume 2)', Chapter 14, - Section 4.4 "Minimization Methods", p. 325-335, Springer (1997), - ISBN 3-540-62057-5. +36.4 Iteration +============== -The simplex algorithm is described in the following paper, +The following functions drive the iteration of each algorithm. Each +function performs one iteration to update the state of any solver of the +corresponding type. The same functions work for all solvers so that +different methods can be substituted at runtime without modifications to +the code. - J.A. Nelder and R. Mead, 'A simplex method for function - minimization', Computer Journal vol. 7 (1965), 308-313. + -- Function: int gsl_multiroot_fsolver_iterate (gsl_multiroot_fsolver * + S) + -- Function: int gsl_multiroot_fdfsolver_iterate + (gsl_multiroot_fdfsolver * S) + These functions perform a single iteration of the solver S. If the + iteration encounters an unexpected problem then an error code will + be returned, - -File: gsl-ref.info, Node: Least-Squares Fitting, Next: Nonlinear Least-Squares Fitting, Prev: Multidimensional Minimization, Up: Top + 'GSL_EBADFUNC' + the iteration encountered a singular point where the function + or its derivative evaluated to 'Inf' or 'NaN'. -37 Least-Squares Fitting -************************ + 'GSL_ENOPROG' + the iteration is not making any progress, preventing the + algorithm from continuing. -This chapter describes routines for performing least squares fits to -experimental data using linear combinations of functions. The data may -be weighted or unweighted, i.e. with known or unknown errors. For -weighted data the functions compute the best fit parameters and their -associated covariance matrix. For unweighted data the covariance matrix -is estimated from the scatter of the points, giving a -variance-covariance matrix. + The solver maintains a current best estimate of the root 's->x' and +its function value 's->f' at all times. This information can be +accessed with the following auxiliary functions, - The functions are divided into separate versions for simple one- or -two-parameter regression and multiple-parameter fits. The functions are -declared in the header file 'gsl_fit.h'. + -- Function: gsl_vector * gsl_multiroot_fsolver_root (const + gsl_multiroot_fsolver * S) + -- Function: gsl_vector * gsl_multiroot_fdfsolver_root (const + gsl_multiroot_fdfsolver * S) + These functions return the current estimate of the root for the + solver S, given by 's->x'. -* Menu: + -- Function: gsl_vector * gsl_multiroot_fsolver_f (const + gsl_multiroot_fsolver * S) + -- Function: gsl_vector * gsl_multiroot_fdfsolver_f (const + gsl_multiroot_fdfsolver * S) + These functions return the function value f(x) at the current + estimate of the root for the solver S, given by 's->f'. -* Fitting Overview:: -* Linear regression:: -* Linear fitting without a constant term:: -* Multi-parameter fitting:: -* Robust linear regression:: -* Troubleshooting:: -* Fitting Examples:: -* Fitting References and Further Reading:: + -- Function: gsl_vector * gsl_multiroot_fsolver_dx (const + gsl_multiroot_fsolver * S) + -- Function: gsl_vector * gsl_multiroot_fdfsolver_dx (const + gsl_multiroot_fdfsolver * S) + These functions return the last step dx taken by the solver S, + given by 's->dx'.  -File: gsl-ref.info, Node: Fitting Overview, Next: Linear regression, Up: Least-Squares Fitting +File: gsl-ref.info, Node: Search Stopping Parameters for the multidimensional solver, Next: Algorithms using Derivatives, Prev: Iteration of the multidimensional solver, Up: Multidimensional Root-Finding -37.1 Overview -============= +36.5 Search Stopping Parameters +=============================== -Least-squares fits are found by minimizing \chi^2 (chi-squared), the -weighted sum of squared residuals over n experimental datapoints (x_i, -y_i) for the model Y(c,x), +A root finding procedure should stop when one of the following +conditions is true: - \chi^2 = \sum_i w_i (y_i - Y(c, x_i))^2 + * A multidimensional root has been found to within the user-specified + precision. -The p parameters of the model are c = {c_0, c_1, ...}. The weight -factors w_i are given by w_i = 1/\sigma_i^2, where \sigma_i is the -experimental error on the data-point y_i. The errors are assumed to be -Gaussian and uncorrelated. For unweighted data the chi-squared sum is -computed without any weight factors. + * A user-specified maximum number of iterations has been reached. - The fitting routines return the best-fit parameters c and their p -\times p covariance matrix. The covariance matrix measures the -statistical errors on the best-fit parameters resulting from the errors -on the data, \sigma_i, and is defined as C_{ab} = <\delta c_a \delta -c_b> where < > denotes an average over the Gaussian error distributions -of the underlying datapoints. + * An error has occurred. - The covariance matrix is calculated by error propagation from the -data errors \sigma_i. The change in a fitted parameter \delta c_a -caused by a small change in the data \delta y_i is given by +The handling of these conditions is under user control. The functions +below allow the user to test the precision of the current result in +several standard ways. - \delta c_a = \sum_i (dc_a/dy_i) \delta y_i + -- Function: int gsl_multiroot_test_delta (const gsl_vector * DX, const + gsl_vector * X, double EPSABS, double EPSREL) -allowing the covariance matrix to be written in terms of the errors on -the data, + This function tests for the convergence of the sequence by + comparing the last step DX with the absolute error EPSABS and + relative error EPSREL to the current position X. The test returns + 'GSL_SUCCESS' if the following condition is achieved, - C_{ab} = \sum_{i,j} (dc_a/dy_i) (dc_b/dy_j) <\delta y_i \delta y_j> + |dx_i| < epsabs + epsrel |x_i| -For uncorrelated data the fluctuations of the underlying datapoints -satisfy <\delta y_i \delta y_j> = \sigma_i^2 \delta_{ij}, giving a -corresponding parameter covariance matrix of + for each component of X and returns 'GSL_CONTINUE' otherwise. - C_{ab} = \sum_i (1/w_i) (dc_a/dy_i) (dc_b/dy_i) + -- Function: int gsl_multiroot_test_residual (const gsl_vector * F, + double EPSABS) + This function tests the residual value F against the absolute error + bound EPSABS. The test returns 'GSL_SUCCESS' if the following + condition is achieved, -When computing the covariance matrix for unweighted data, i.e. data -with unknown errors, the weight factors w_i in this sum are replaced by -the single estimate w = 1/\sigma^2, where \sigma^2 is the computed -variance of the residuals about the best-fit model, \sigma^2 = \sum (y_i -- Y(c,x_i))^2 / (n-p). This is referred to as the "variance-covariance -matrix". + \sum_i |f_i| < epsabs - The standard deviations of the best-fit parameters are given by the -square root of the corresponding diagonal elements of the covariance -matrix, \sigma_{c_a} = \sqrt{C_{aa}}. The correlation coefficient of -the fit parameters c_a and c_b is given by \rho_{ab} = C_{ab} / -\sqrt{C_{aa} C_{bb}}. + and returns 'GSL_CONTINUE' otherwise. This criterion is suitable + for situations where the precise location of the root, x, is + unimportant provided a value can be found where the residual is + small enough.  -File: gsl-ref.info, Node: Linear regression, Next: Linear fitting without a constant term, Prev: Fitting Overview, Up: Least-Squares Fitting +File: gsl-ref.info, Node: Algorithms using Derivatives, Next: Algorithms without Derivatives, Prev: Search Stopping Parameters for the multidimensional solver, Up: Multidimensional Root-Finding -37.2 Linear regression -====================== +36.6 Algorithms using Derivatives +================================= -The functions described in this section can be used to perform -least-squares fits to a straight line model, Y(c,x) = c_0 + c_1 x. +The root finding algorithms described in this section make use of both +the function and its derivative. They require an initial guess for the +location of the root, but there is no absolute guarantee of +convergence--the function must be suitable for this technique and the +initial guess must be sufficiently close to the root for it to work. +When the conditions are satisfied then convergence is quadratic. - -- Function: int gsl_fit_linear (const double * X, const size_t - XSTRIDE, const double * Y, const size_t YSTRIDE, size_t N, - double * C0, double * C1, double * COV00, double * COV01, - double * COV11, double * SUMSQ) - This function computes the best-fit linear regression coefficients - (C0,C1) of the model Y = c_0 + c_1 X for the dataset (X, Y), two - vectors of length N with strides XSTRIDE and YSTRIDE. The errors - on Y are assumed unknown so the variance-covariance matrix for the - parameters (C0, C1) is estimated from the scatter of the points - around the best-fit line and returned via the parameters (COV00, - COV01, COV11). The sum of squares of the residuals from the - best-fit line is returned in SUMSQ. Note: the correlation - coefficient of the data can be computed using - 'gsl_stats_correlation' (*note Correlation::), it does not depend - on the fit. + -- Derivative Solver: gsl_multiroot_fdfsolver_hybridsj + This is a modified version of Powell's Hybrid method as implemented + in the HYBRJ algorithm in MINPACK. Minpack was written by Jorge J. + More', Burton S. Garbow and Kenneth E. Hillstrom. The Hybrid + algorithm retains the fast convergence of Newton's method but will + also reduce the residual when Newton's method is unreliable. - -- Function: int gsl_fit_wlinear (const double * X, const size_t - XSTRIDE, const double * W, const size_t WSTRIDE, const double - * Y, const size_t YSTRIDE, size_t N, double * C0, double * C1, - double * COV00, double * COV01, double * COV11, double * - CHISQ) - This function computes the best-fit linear regression coefficients - (C0,C1) of the model Y = c_0 + c_1 X for the weighted dataset (X, - Y), two vectors of length N with strides XSTRIDE and YSTRIDE. The - vector W, of length N and stride WSTRIDE, specifies the weight of - each datapoint. The weight is the reciprocal of the variance for - each datapoint in Y. + The algorithm uses a generalized trust region to keep each step + under control. In order to be accepted a proposed new position x' + must satisfy the condition |D (x' - x)| < \delta, where D is a + diagonal scaling matrix and \delta is the size of the trust region. + The components of D are computed internally, using the column norms + of the Jacobian to estimate the sensitivity of the residual to each + component of x. This improves the behavior of the algorithm for + badly scaled functions. - The covariance matrix for the parameters (C0, C1) is computed using - the weights and returned via the parameters (COV00, COV01, COV11). - The weighted sum of squares of the residuals from the best-fit - line, \chi^2, is returned in CHISQ. + On each iteration the algorithm first determines the standard + Newton step by solving the system J dx = - f. If this step falls + inside the trust region it is used as a trial step in the next + stage. If not, the algorithm uses the linear combination of the + Newton and gradient directions which is predicted to minimize the + norm of the function while staying inside the trust region, - -- Function: int gsl_fit_linear_est (double X, double C0, double C1, - double COV00, double COV01, double COV11, double * Y, double * - Y_ERR) - This function uses the best-fit linear regression coefficients C0, - C1 and their covariance COV00, COV01, COV11 to compute the fitted - function Y and its standard deviation Y_ERR for the model Y = c_0 + - c_1 X at the point X. + dx = - \alpha J^{-1} f(x) - \beta \nabla |f(x)|^2. - -File: gsl-ref.info, Node: Linear fitting without a constant term, Next: Multi-parameter fitting, Prev: Linear regression, Up: Least-Squares Fitting + This combination of Newton and gradient directions is referred to + as a "dogleg step". -37.3 Linear fitting without a constant term -=========================================== + The proposed step is now tested by evaluating the function at the + resulting point, x'. If the step reduces the norm of the function + sufficiently then it is accepted and size of the trust region is + increased. If the proposed step fails to improve the solution then + the size of the trust region is decreased and another trial step is + computed. -The functions described in this section can be used to perform -least-squares fits to a straight line model without a constant term, Y = -c_1 X. + The speed of the algorithm is increased by computing the changes to + the Jacobian approximately, using a rank-1 update. If two + successive attempts fail to reduce the residual then the full + Jacobian is recomputed. The algorithm also monitors the progress + of the solution and returns an error if several steps fail to make + any improvement, - -- Function: int gsl_fit_mul (const double * X, const size_t XSTRIDE, - const double * Y, const size_t YSTRIDE, size_t N, double * C1, - double * COV11, double * SUMSQ) - This function computes the best-fit linear regression coefficient - C1 of the model Y = c_1 X for the datasets (X, Y), two vectors of - length N with strides XSTRIDE and YSTRIDE. The errors on Y are - assumed unknown so the variance of the parameter C1 is estimated - from the scatter of the points around the best-fit line and - returned via the parameter COV11. The sum of squares of the - residuals from the best-fit line is returned in SUMSQ. + 'GSL_ENOPROG' + the iteration is not making any progress, preventing the + algorithm from continuing. - -- Function: int gsl_fit_wmul (const double * X, const size_t XSTRIDE, - const double * W, const size_t WSTRIDE, const double * Y, - const size_t YSTRIDE, size_t N, double * C1, double * COV11, - double * SUMSQ) - This function computes the best-fit linear regression coefficient - C1 of the model Y = c_1 X for the weighted datasets (X, Y), two - vectors of length N with strides XSTRIDE and YSTRIDE. The vector - W, of length N and stride WSTRIDE, specifies the weight of each - datapoint. The weight is the reciprocal of the variance for each - datapoint in Y. + 'GSL_ENOPROGJ' + re-evaluations of the Jacobian indicate that the iteration is + not making any progress, preventing the algorithm from + continuing. - The variance of the parameter C1 is computed using the weights and - returned via the parameter COV11. The weighted sum of squares of - the residuals from the best-fit line, \chi^2, is returned in CHISQ. + -- Derivative Solver: gsl_multiroot_fdfsolver_hybridj + This algorithm is an unscaled version of 'hybridsj'. The steps are + controlled by a spherical trust region |x' - x| < \delta, instead + of a generalized region. This can be useful if the generalized + region estimated by 'hybridsj' is inappropriate. - -- Function: int gsl_fit_mul_est (double X, double C1, double COV11, - double * Y, double * Y_ERR) - This function uses the best-fit linear regression coefficient C1 - and its covariance COV11 to compute the fitted function Y and its - standard deviation Y_ERR for the model Y = c_1 X at the point X. + -- Derivative Solver: gsl_multiroot_fdfsolver_newton - -File: gsl-ref.info, Node: Multi-parameter fitting, Next: Robust linear regression, Prev: Linear fitting without a constant term, Up: Least-Squares Fitting + Newton's Method is the standard root-polishing algorithm. The + algorithm begins with an initial guess for the location of the + solution. On each iteration a linear approximation to the function + F is used to estimate the step which will zero all the components + of the residual. The iteration is defined by the following + sequence, -37.4 Multi-parameter fitting -============================ + x -> x' = x - J^{-1} f(x) -The functions described in this section perform least-squares fits to a -general linear model, y = X c where y is a vector of n observations, X -is an n by p matrix of predictor variables, and the elements of the -vector c are the p unknown best-fit parameters which are to be -estimated. The chi-squared value is given by \chi^2 = \sum_i w_i (y_i - -\sum_j X_{ij} c_j)^2. + where the Jacobian matrix J is computed from the derivative + functions provided by F. The step dx is obtained by solving the + linear system, - This formulation can be used for fits to any number of functions -and/or variables by preparing the n-by-p matrix X appropriately. For -example, to fit to a p-th order polynomial in X, use the following -matrix, + J dx = - f(x) - X_{ij} = x_i^j + using LU decomposition. If the Jacobian matrix is singular, an + error code of 'GSL_EDOM' is returned. -where the index i runs over the observations and the index j runs from 0 -to p-1. + -- Derivative Solver: gsl_multiroot_fdfsolver_gnewton + This is a modified version of Newton's method which attempts to + improve global convergence by requiring every step to reduce the + Euclidean norm of the residual, |f(x)|. If the Newton step leads + to an increase in the norm then a reduced step of relative size, - To fit to a set of p sinusoidal functions with fixed frequencies -\omega_1, \omega_2, ..., \omega_p, use, + t = (\sqrt(1 + 6 r) - 1) / (3 r) - X_{ij} = sin(\omega_j x_i) + is proposed, with r being the ratio of norms |f(x')|^2/|f(x)|^2. + This procedure is repeated until a suitable step size is found. -To fit to p independent variables x_1, x_2, ..., x_p, use, + +File: gsl-ref.info, Node: Algorithms without Derivatives, Next: Example programs for Multidimensional Root finding, Prev: Algorithms using Derivatives, Up: Multidimensional Root-Finding - X_{ij} = x_j(i) +36.7 Algorithms without Derivatives +=================================== -where x_j(i) is the i-th value of the predictor variable x_j. +The algorithms described in this section do not require any derivative +information to be supplied by the user. Any derivatives needed are +approximated by finite differences. Note that if the +finite-differencing step size chosen by these routines is inappropriate, +an explicit user-supplied numerical derivative can always be used with +the algorithms described in the previous section. - The functions described in this section are declared in the header -file 'gsl_multifit.h'. + -- Solver: gsl_multiroot_fsolver_hybrids + This is a version of the Hybrid algorithm which replaces calls to + the Jacobian function by its finite difference approximation. The + finite difference approximation is computed using + 'gsl_multiroots_fdjac' with a relative step size of + 'GSL_SQRT_DBL_EPSILON'. Note that this step size will not be + suitable for all problems. - The solution of the general linear least-squares system requires an -additional working space for intermediate results, such as the singular -value decomposition of the matrix X. + -- Solver: gsl_multiroot_fsolver_hybrid + This is a finite difference version of the Hybrid algorithm without + internal scaling. - -- Function: gsl_multifit_linear_workspace * gsl_multifit_linear_alloc - (size_t N, size_t P) - This function allocates a workspace for fitting a model to N - observations using P parameters. + -- Solver: gsl_multiroot_fsolver_dnewton - -- Function: void gsl_multifit_linear_free - (gsl_multifit_linear_workspace * WORK) - This function frees the memory associated with the workspace W. + The "discrete Newton algorithm" is the simplest method of solving a + multidimensional system. It uses the Newton iteration - -- Function: int gsl_multifit_linear (const gsl_matrix * X, const - gsl_vector * Y, gsl_vector * C, gsl_matrix * COV, double * - CHISQ, gsl_multifit_linear_workspace * WORK) - This function computes the best-fit parameters C of the model y = X - c for the observations Y and the matrix of predictor variables X, - using the preallocated workspace provided in WORK. The p-by-p - variance-covariance matrix of the model parameters COV is set to - \sigma^2 (X^T X)^{-1}, where \sigma is the standard deviation of - the fit residuals. The sum of squares of the residuals from the - best-fit, \chi^2, is returned in CHISQ. If the coefficient of - determination is desired, it can be computed from the expression - R^2 = 1 - \chi^2 / TSS, where the total sum of squares (TSS) of the - observations Y may be computed from 'gsl_stats_tss'. + x -> x - J^{-1} f(x) - The best-fit is found by singular value decomposition of the matrix - X using the modified Golub-Reinsch SVD algorithm, with column - scaling to improve the accuracy of the singular values. Any - components which have zero singular value (to machine precision) - are discarded from the fit. + where the Jacobian matrix J is approximated by taking finite + differences of the function F. The approximation scheme used by + this implementation is, - -- Function: int gsl_multifit_wlinear (const gsl_matrix * X, const - gsl_vector * W, const gsl_vector * Y, gsl_vector * C, - gsl_matrix * COV, double * CHISQ, - gsl_multifit_linear_workspace * WORK) - This function computes the best-fit parameters C of the weighted - model y = X c for the observations Y with weights W and the matrix - of predictor variables X, using the preallocated workspace provided - in WORK. The p-by-p covariance matrix of the model parameters COV - is computed as (X^T W X)^{-1}. The weighted sum of squares of the - residuals from the best-fit, \chi^2, is returned in CHISQ. If the - coefficient of determination is desired, it can be computed from - the expression R^2 = 1 - \chi^2 / WTSS, where the weighted total - sum of squares (WTSS) of the observations Y may be computed from - 'gsl_stats_wtss'. + J_{ij} = (f_i(x + \delta_j) - f_i(x)) / \delta_j - -- Function: int gsl_multifit_linear_svd (const gsl_matrix * X, const - gsl_vector * Y, double TOL, size_t * RANK, gsl_vector * C, - gsl_matrix * COV, double * CHISQ, - gsl_multifit_linear_workspace * WORK) - -- Function: int gsl_multifit_wlinear_svd (const gsl_matrix * X, const - gsl_vector * W, const gsl_vector * Y, double TOL, size_t * - RANK, gsl_vector * C, gsl_matrix * COV, double * CHISQ, - gsl_multifit_linear_workspace * WORK) - In these functions components of the fit are discarded if the ratio - of singular values s_i/s_0 falls below the user-specified tolerance - TOL, and the effective rank is returned in RANK. + where \delta_j is a step of size \sqrt\epsilon |x_j| with \epsilon + being the machine precision (\epsilon \approx 2.22 \times 10^-16). + The order of convergence of Newton's algorithm is quadratic, but + the finite differences require n^2 function evaluations on each + iteration. The algorithm may become unstable if the finite + differences are not a good approximation to the true derivatives. - -- Function: int gsl_multifit_linear_usvd (const gsl_matrix * X, const - gsl_vector * Y, double TOL, size_t * RANK, gsl_vector * C, - gsl_matrix * COV, double * CHISQ, - gsl_multifit_linear_workspace * WORK) - -- Function: int gsl_multifit_wlinear_usvd (const gsl_matrix * X, const - gsl_vector * W, const gsl_vector * Y, double TOL, size_t * - RANK, gsl_vector * C, gsl_matrix * COV, double * CHISQ, - gsl_multifit_linear_workspace * WORK) - These functions compute the fit using an SVD without column - scaling. + -- Solver: gsl_multiroot_fsolver_broyden - -- Function: int gsl_multifit_linear_est (const gsl_vector * X, const - gsl_vector * C, const gsl_matrix * COV, double * Y, double * - Y_ERR) - This function uses the best-fit multilinear regression coefficients - C and their covariance matrix COV to compute the fitted function - value Y and its standard deviation Y_ERR for the model y = x.c at - the point X. + The "Broyden algorithm" is a version of the discrete Newton + algorithm which attempts to avoids the expensive update of the + Jacobian matrix on each iteration. The changes to the Jacobian are + also approximated, using a rank-1 update, - -- Function: int gsl_multifit_linear_residuals (const gsl_matrix * X, - const gsl_vector * Y, const gsl_vector * C, gsl_vector * R) - This function computes the vector of residuals r = y - X c for the - observations Y, coefficients C and matrix of predictor variables X. + J^{-1} \to J^{-1} - (J^{-1} df - dx) dx^T J^{-1} / dx^T J^{-1} df - -File: gsl-ref.info, Node: Robust linear regression, Next: Troubleshooting, Prev: Multi-parameter fitting, Up: Least-Squares Fitting + where the vectors dx and df are the changes in x and f. On the + first iteration the inverse Jacobian is estimated using finite + differences, as in the discrete Newton algorithm. -37.5 Robust linear regression -============================= + This approximation gives a fast update but is unreliable if the + changes are not small, and the estimate of the inverse Jacobian + becomes worse as time passes. The algorithm has a tendency to + become unstable unless it starts close to the root. The Jacobian + is refreshed if this instability is detected (consult the source + for details). -Ordinary least squares (OLS) models are often heavily influenced by the -presence of outliers. Outliers are data points which do not follow the -general trend of the other observations, although there is strictly no -precise definition of an outlier. Robust linear regression refers to -regression algorithms which are robust to outliers. The most common -type of robust regression is M-estimation. The general M-estimator -minimizes the objective function + This algorithm is included only for demonstration purposes, and is + not recommended for serious use. - \sum_i \rho(e_i) = \sum_i \rho (y_i - Y(c, x_i)) + +File: gsl-ref.info, Node: Example programs for Multidimensional Root finding, Next: References and Further Reading for Multidimensional Root Finding, Prev: Algorithms without Derivatives, Up: Multidimensional Root-Finding - where e_i = y_i - Y(c, x_i) is the residual of the ith data point, -and \rho(e_i) is a function which should have the following properties: - \rho(e) \ge 0 - \rho(0) = 0 - \rho(-e) = \rho(e) - \rho(e_1) > \rho(e_2) for |e_1| > |e_2| -The special case of ordinary least squares is given by \rho(e_i) = -e_i^2. Letting \psi = \rho' be the derivative of \rho, differentiating -the objective function with respect to the coefficients c and setting -the partial derivatives to zero produces the system of equations +36.8 Examples +============= - \sum_i \psi(e_i) X_i = 0 +The multidimensional solvers are used in a similar way to the +one-dimensional root finding algorithms. This first example +demonstrates the 'hybrids' scaled-hybrid algorithm, which does not +require derivatives. The program solves the Rosenbrock system of +equations, - where X_i is a vector containing row i of the design matrix X. Next, -we define a weight function w(e) = \psi(e)/e, and let w_i = w(e_i): + f_1 (x, y) = a (1 - x) + f_2 (x, y) = b (y - x^2) - \sum_i w_i e_i X_i = 0 +with a = 1, b = 10. The solution of this system lies at (x,y) = (1,1) +in a narrow valley. - This system of equations is equivalent to solving a weighted ordinary -least squares problem, minimizing \chi^2 = \sum_i w_i e_i^2. The -weights however, depend on the residuals e_i, which depend on the -coefficients c, which depend on the weights. Therefore, an iterative -solution is used, called Iteratively Reweighted Least Squares (IRLS). - 1. Compute initial estimates of the coefficients c^{(0)} using - ordinary least squares + The first stage of the program is to define the system of equations, - 2. For iteration k, form the residuals e_i^{(k)} = (y_i - X_i - c^{(k-1)})/(t \sigma^{(k)} \sqrt{1 - h_i}), where t is a tuning - constant depending on the choice of \psi, and h_i are the - statistical leverages (diagonal elements of the matrix X (X^T - X)^{-1} X^T). Including t and h_i in the residual calculation has - been shown to improve the convergence of the method. The residual - standard deviation is approximated as \sigma^{(k)} = MAD / 0.6745, - where MAD is the Median-Absolute-Deviation of the n-p largest - residuals from the previous iteration. + #include + #include + #include + #include - 3. Compute new weights w_i^{(k)} = \psi(e_i^{(k)})/e_i^{(k)}. + struct rparams + { + double a; + double b; + }; - 4. Compute new coefficients c^{(k)} by solving the weighted least - squares problem with weights w_i^{(k)}. + int + rosenbrock_f (const gsl_vector * x, void *params, + gsl_vector * f) + { + double a = ((struct rparams *) params)->a; + double b = ((struct rparams *) params)->b; - 5. Steps 2 through 4 are iterated until the coefficients converge or - until some maximum iteration limit is reached. Coefficients are - tested for convergence using the critera: + const double x0 = gsl_vector_get (x, 0); + const double x1 = gsl_vector_get (x, 1); - |c_i^(k) - c_i^(k-1)| \le \epsilon \times max(|c_i^(k)|, |c_i^(k-1)|) + const double y0 = a * (1 - x0); + const double y1 = b * (x1 - x0 * x0); - for all 0 \le i < p where \epsilon is a small tolerance factor. -The key to this method lies in selecting the function \psi(e_i) to -assign smaller weights to large residuals, and larger weights to smaller -residuals. As the iteration proceeds, outliers are assigned smaller and -smaller weights, eventually having very little or no effect on the -fitted model. + gsl_vector_set (f, 0, y0); + gsl_vector_set (f, 1, y1); - -- Function: gsl_multifit_robust_workspace * gsl_multifit_robust_alloc - (const gsl_multifit_robust_type * T, const size_t N, const - size_t P) - This function allocates a workspace for fitting a model to N - observations using P parameters. The type T specifies the function - \psi and can be selected from the following choices. - -- Robust type: gsl_multifit_robust_default - This specifies the 'gsl_multifit_robust_bisquare' type (see - below) and is a good general purpose choice for robust - regression. + return GSL_SUCCESS; + } - -- Robust type: gsl_multifit_robust_bisquare - This is Tukey's biweight (bisquare) function and is a good - general purpose choice for robust regression. The weight - function is given by +The main program begins by creating the function object 'f', with the +arguments '(x,y)' and parameters '(a,b)'. The solver 's' is initialized +to use this function, with the 'hybrids' method. - w(e) = (1 - e^2)^2 + int + main (void) + { + const gsl_multiroot_fsolver_type *T; + gsl_multiroot_fsolver *s; - and the default tuning constant is t = 4.685. + int status; + size_t i, iter = 0; - -- Robust type: gsl_multifit_robust_cauchy - This is Cauchy's function, also known as the Lorentzian - function. This function does not guarantee a unique solution, - meaning different choices of the coefficient vector C could - minimize the objective function. Therefore this option should - be used with care. The weight function is given by + const size_t n = 2; + struct rparams p = {1.0, 10.0}; + gsl_multiroot_function f = {&rosenbrock_f, n, &p}; - w(e) = 1 / (1 + e^2) + double x_init[2] = {-10.0, -5.0}; + gsl_vector *x = gsl_vector_alloc (n); - and the default tuning constant is t = 2.385. + gsl_vector_set (x, 0, x_init[0]); + gsl_vector_set (x, 1, x_init[1]); - -- Robust type: gsl_multifit_robust_fair - This is the fair \rho function, which guarantees a unique - solution and has continuous derivatives to three orders. The - weight function is given by + T = gsl_multiroot_fsolver_hybrids; + s = gsl_multiroot_fsolver_alloc (T, 2); + gsl_multiroot_fsolver_set (s, &f, x); - w(e) = 1 / (1 + |e|) + print_state (iter, s); - and the default tuning constant is t = 1.400. + do + { + iter++; + status = gsl_multiroot_fsolver_iterate (s); - -- Robust type: gsl_multifit_robust_huber - This specifies Huber's \rho function, which is a parabola in - the vicinity of zero and increases linearly for a given - threshold |e| > t. This function is also considered an - excellent general purpose robust estimator, however, - occasional difficulties can be encountered due to the - discontinuous first derivative of the \psi function. The - weight function is given by + print_state (iter, s); - w(e) = 1/max(1,|e|) + if (status) /* check if solver is stuck */ + break; - and the default tuning constant is t = 1.345. + status = + gsl_multiroot_test_residual (s->f, 1e-7); + } + while (status == GSL_CONTINUE && iter < 1000); - -- Robust type: gsl_multifit_robust_ols - This specifies the ordinary least squares solution, which can - be useful for quickly checking the difference between the - various robust and OLS solutions. The weight function is - given by + printf ("status = %s\n", gsl_strerror (status)); - w(e) = 1 + gsl_multiroot_fsolver_free (s); + gsl_vector_free (x); + return 0; + } - and the default tuning constant is t = 1. +Note that it is important to check the return status of each solver +step, in case the algorithm becomes stuck. If an error condition is +detected, indicating that the algorithm cannot proceed, then the error +can be reported to the user, a new starting point chosen or a different +algorithm used. - -- Robust type: gsl_multifit_robust_welsch - This specifies the Welsch function which can perform well in - cases where the residuals have an exponential distribution. - The weight function is given by + The intermediate state of the solution is displayed by the following +function. The solver state contains the vector 's->x' which is the +current position, and the vector 's->f' with corresponding function +values. - w(e) = \exp(-e^2) + int + print_state (size_t iter, gsl_multiroot_fsolver * s) + { + printf ("iter = %3u x = % .3f % .3f " + "f(x) = % .3e % .3e\n", + iter, + gsl_vector_get (s->x, 0), + gsl_vector_get (s->x, 1), + gsl_vector_get (s->f, 0), + gsl_vector_get (s->f, 1)); + } - and the default tuning constant is t = 2.985. +Here are the results of running the program. The algorithm is started +at (-10,-5) far from the solution. Since the solution is hidden in a +narrow valley the earliest steps follow the gradient of the function +downhill, in an attempt to reduce the large value of the residual. Once +the root has been approximately located, on iteration 8, the Newton +behavior takes over and convergence is very rapid. - -- Function: void gsl_multifit_robust_free - (gsl_multifit_robust_workspace * W) - This function frees the memory associated with the workspace W. + iter = 0 x = -10.000 -5.000 f(x) = 1.100e+01 -1.050e+03 + iter = 1 x = -10.000 -5.000 f(x) = 1.100e+01 -1.050e+03 + iter = 2 x = -3.976 24.827 f(x) = 4.976e+00 9.020e+01 + iter = 3 x = -3.976 24.827 f(x) = 4.976e+00 9.020e+01 + iter = 4 x = -3.976 24.827 f(x) = 4.976e+00 9.020e+01 + iter = 5 x = -1.274 -5.680 f(x) = 2.274e+00 -7.302e+01 + iter = 6 x = -1.274 -5.680 f(x) = 2.274e+00 -7.302e+01 + iter = 7 x = 0.249 0.298 f(x) = 7.511e-01 2.359e+00 + iter = 8 x = 0.249 0.298 f(x) = 7.511e-01 2.359e+00 + iter = 9 x = 1.000 0.878 f(x) = 1.268e-10 -1.218e+00 + iter = 10 x = 1.000 0.989 f(x) = 1.124e-11 -1.080e-01 + iter = 11 x = 1.000 1.000 f(x) = 0.000e+00 0.000e+00 + status = success - -- Function: const char * gsl_multifit_robust_name (const - gsl_multifit_robust_workspace * W) - This function returns the name of the robust type T specified to - 'gsl_multifit_robust_alloc'. +Note that the algorithm does not update the location on every iteration. +Some iterations are used to adjust the trust-region parameter, after +trying a step which was found to be divergent, or to recompute the +Jacobian, when poor convergence behavior is detected. - -- Function: int gsl_multifit_robust_tune (const double TUNE, - gsl_multifit_robust_workspace * W) - This function sets the tuning constant t used to adjust the - residuals at each iteration to TUNE. Decreasing the tuning - constant increases the downweight assigned to large residuals, - while increasing the tuning constant decreases the downweight - assigned to large residuals. + The next example program adds derivative information, in order to +accelerate the solution. There are two derivative functions +'rosenbrock_df' and 'rosenbrock_fdf'. The latter computes both the +function and its derivative simultaneously. This allows the +optimization of any common terms. For simplicity we substitute calls to +the separate 'f' and 'df' functions at this point in the code below. - -- Function: int gsl_multifit_robust (const gsl_matrix * X, const - gsl_vector * Y, gsl_vector * C, gsl_matrix * COV, - gsl_multifit_robust_workspace * W) - This function computes the best-fit parameters C of the model y = X - c for the observations Y and the matrix of predictor variables X, - attemping to reduce the influence of outliers using the algorithm - outlined above. The p-by-p variance-covariance matrix of the model - parameters COV is estimated as \sigma^2 (X^T X)^{-1}, where \sigma - is an approximation of the residual standard deviation using the - theory of robust regression. Special care must be taken when - estimating \sigma and other statistics such as R^2, and so these - are computed internally and are available by calling the function - 'gsl_multifit_robust_statistics'. + int + rosenbrock_df (const gsl_vector * x, void *params, + gsl_matrix * J) + { + const double a = ((struct rparams *) params)->a; + const double b = ((struct rparams *) params)->b; - -- Function: int gsl_multifit_robust_est (const gsl_vector * X, const - gsl_vector * C, const gsl_matrix * COV, double * Y, double * - Y_ERR) - This function uses the best-fit robust regression coefficients C - and their covariance matrix COV to compute the fitted function - value Y and its standard deviation Y_ERR for the model y = x.c at - the point X. + const double x0 = gsl_vector_get (x, 0); - -- Function: gsl_multifit_robust_stats gsl_multifit_robust_statistics - (const gsl_multifit_robust_workspace * W) - This function returns a structure containing relevant statistics - from a robust regression. The function 'gsl_multifit_robust' must - be called first to perform the regression and calculate these - statistics. The returned 'gsl_multifit_robust_stats' structure - contains the following fields. - double 'sigma_ols' This contains the standard deviation of the - residuals as computed from ordinary least squares (OLS). + const double df00 = -a; + const double df01 = 0; + const double df10 = -2 * b * x0; + const double df11 = b; - double 'sigma_mad' This contains an estimate of the standard - deviation of the final residuals using the - Median-Absolute-Deviation statistic + gsl_matrix_set (J, 0, 0, df00); + gsl_matrix_set (J, 0, 1, df01); + gsl_matrix_set (J, 1, 0, df10); + gsl_matrix_set (J, 1, 1, df11); - double 'sigma_rob' This contains an estimate of the standard - deviation of the final residuals from the theory of robust - regression (see Street et al, 1988). + return GSL_SUCCESS; + } - double 'sigma' This contains an estimate of the standard - deviation of the final residuals by attemping to reconcile - 'sigma_rob' and 'sigma_ols' in a reasonable way. + int + rosenbrock_fdf (const gsl_vector * x, void *params, + gsl_vector * f, gsl_matrix * J) + { + rosenbrock_f (x, params, f); + rosenbrock_df (x, params, J); - double 'Rsq' This contains the R^2 coefficient of - determination statistic using the estimate 'sigma'. + return GSL_SUCCESS; + } - double 'adj_Rsq' This contains the adjusted R^2 coefficient of - determination statistic using the estimate 'sigma'. +The main program now makes calls to the corresponding 'fdfsolver' +versions of the functions, - double 'rmse' This contains the root mean squared error of the - final residuals + int + main (void) + { + const gsl_multiroot_fdfsolver_type *T; + gsl_multiroot_fdfsolver *s; - double 'sse' This contains the residual sum of squares taking - into account the robust covariance matrix. + int status; + size_t i, iter = 0; - size_t 'dof' This contains the number of degrees of freedom n - - p + const size_t n = 2; + struct rparams p = {1.0, 10.0}; + gsl_multiroot_function_fdf f = {&rosenbrock_f, + &rosenbrock_df, + &rosenbrock_fdf, + n, &p}; - size_t 'numit' Upon successful convergence, this contains the - number of iterations performed + double x_init[2] = {-10.0, -5.0}; + gsl_vector *x = gsl_vector_alloc (n); - gsl_vector * 'weights' This contains the final weight vector - of length N + gsl_vector_set (x, 0, x_init[0]); + gsl_vector_set (x, 1, x_init[1]); - gsl_vector * 'r' This contains the final residual vector of - length N, r = y - X c + T = gsl_multiroot_fdfsolver_gnewton; + s = gsl_multiroot_fdfsolver_alloc (T, n); + gsl_multiroot_fdfsolver_set (s, &f, x); - -File: gsl-ref.info, Node: Troubleshooting, Next: Fitting Examples, Prev: Robust linear regression, Up: Least-Squares Fitting + print_state (iter, s); -37.6 Troubleshooting -==================== + do + { + iter++; -When using models based on polynomials, care should be taken when -constructing the design matrix X. If the x values are large, then the -matrix X could be ill-conditioned since its columns are powers of x, -leading to unstable least-squares solutions. In this case it can often -help to center and scale the x values using the mean and standard -deviation: + status = gsl_multiroot_fdfsolver_iterate (s); - x' = (x - mu)/sigma + print_state (iter, s); -and then construct the X matrix using the transformed values x'. + if (status) + break; - -File: gsl-ref.info, Node: Fitting Examples, Next: Fitting References and Further Reading, Prev: Troubleshooting, Up: Least-Squares Fitting + status = gsl_multiroot_test_residual (s->f, 1e-7); + } + while (status == GSL_CONTINUE && iter < 1000); -37.7 Examples -============= + printf ("status = %s\n", gsl_strerror (status)); -The following program computes a least squares straight-line fit to a -simple dataset, and outputs the best-fit line and its associated one -standard-deviation error bars. + gsl_multiroot_fdfsolver_free (s); + gsl_vector_free (x); + return 0; + } - #include - #include +The addition of derivative information to the 'hybrids' solver does not +make any significant difference to its behavior, since it able to +approximate the Jacobian numerically with sufficient accuracy. To +illustrate the behavior of a different derivative solver we switch to +'gnewton'. This is a traditional Newton solver with the constraint that +it scales back its step if the full step would lead "uphill". Here is +the output for the 'gnewton' algorithm, - int - main (void) - { - int i, n = 4; - double x[4] = { 1970, 1980, 1990, 2000 }; - double y[4] = { 12, 11, 14, 13 }; - double w[4] = { 0.1, 0.2, 0.3, 0.4 }; + iter = 0 x = -10.000 -5.000 f(x) = 1.100e+01 -1.050e+03 + iter = 1 x = -4.231 -65.317 f(x) = 5.231e+00 -8.321e+02 + iter = 2 x = 1.000 -26.358 f(x) = -8.882e-16 -2.736e+02 + iter = 3 x = 1.000 1.000 f(x) = -2.220e-16 -4.441e-15 + status = success - double c0, c1, cov00, cov01, cov11, chisq; +The convergence is much more rapid, but takes a wide excursion out to +the point (-4.23,-65.3). This could cause the algorithm to go astray in +a realistic application. The hybrid algorithm follows the downhill path +to the solution more reliably. - gsl_fit_wlinear (x, 1, w, 1, y, 1, n, - &c0, &c1, &cov00, &cov01, &cov11, - &chisq); + +File: gsl-ref.info, Node: References and Further Reading for Multidimensional Root Finding, Prev: Example programs for Multidimensional Root finding, Up: Multidimensional Root-Finding - printf ("# best fit: Y = %g + %g X\n", c0, c1); - printf ("# covariance matrix:\n"); - printf ("# [ %g, %g\n# %g, %g]\n", - cov00, cov01, cov01, cov11); - printf ("# chisq = %g\n", chisq); +36.9 References and Further Reading +=================================== - for (i = 0; i < n; i++) - printf ("data: %g %g %g\n", - x[i], y[i], 1/sqrt(w[i])); +The original version of the Hybrid method is described in the following +articles by Powell, - printf ("\n"); + M.J.D. Powell, "A Hybrid Method for Nonlinear Equations" (Chap 6, p + 87-114) and "A Fortran Subroutine for Solving systems of Nonlinear + Algebraic Equations" (Chap 7, p 115-161), in 'Numerical Methods for + Nonlinear Algebraic Equations', P. Rabinowitz, editor. Gordon and + Breach, 1970. - for (i = -30; i < 130; i++) - { - double xf = x[0] + (i/100.0) * (x[n-1] - x[0]); - double yf, yf_err; +The following papers are also relevant to the algorithms described in +this section, - gsl_fit_linear_est (xf, - c0, c1, - cov00, cov01, cov11, - &yf, &yf_err); + J.J. More', M.Y. Cosnard, "Numerical Solution of Nonlinear + Equations", 'ACM Transactions on Mathematical Software', Vol 5, No + 1, (1979), p 64-85 - printf ("fit: %g %g\n", xf, yf); - printf ("hi : %g %g\n", xf, yf + yf_err); - printf ("lo : %g %g\n", xf, yf - yf_err); - } - return 0; - } + C.G. Broyden, "A Class of Methods for Solving Nonlinear + Simultaneous Equations", 'Mathematics of Computation', Vol 19 + (1965), p 577-593 -The following commands extract the data from the output of the program -and display it using the GNU plotutils 'graph' utility, + J.J. More', B.S. Garbow, K.E. Hillstrom, "Testing Unconstrained + Optimization Software", ACM Transactions on Mathematical Software, + Vol 7, No 1 (1981), p 17-41 - $ ./demo > tmp - $ more tmp - # best fit: Y = -106.6 + 0.06 X - # covariance matrix: - # [ 39602, -19.9 - # -19.9, 0.01] - # chisq = 0.8 + +File: gsl-ref.info, Node: Multidimensional Minimization, Next: Least-Squares Fitting, Prev: Multidimensional Root-Finding, Up: Top - $ for n in data fit hi lo ; - do - grep "^$n" tmp | cut -d: -f2 > $n ; - done - $ graph -T X -X x -Y y -y 0 20 -m 0 -S 2 -Ie data - -S 0 -I a -m 1 fit -m 2 hi -m 2 lo +37 Multidimensional Minimization +******************************** - The next program performs a quadratic fit y = c_0 + c_1 x + c_2 x^2 -to a weighted dataset using the generalised linear fitting function -'gsl_multifit_wlinear'. The model matrix X for a quadratic fit is given -by, +This chapter describes routines for finding minima of arbitrary +multidimensional functions. The library provides low level components +for a variety of iterative minimizers and convergence tests. These can +be combined by the user to achieve the desired solution, while providing +full access to the intermediate steps of the algorithms. Each class of +methods uses the same framework, so that you can switch between +minimizers at runtime without needing to recompile your program. Each +instance of a minimizer keeps track of its own state, allowing the +minimizers to be used in multi-threaded programs. The minimization +algorithms can be used to maximize a function by inverting its sign. - X = [ 1 , x_0 , x_0^2 ; - 1 , x_1 , x_1^2 ; - 1 , x_2 , x_2^2 ; - ... , ... , ... ] + The header file 'gsl_multimin.h' contains prototypes for the +minimization functions and related declarations. -where the column of ones corresponds to the constant term c_0. The two -remaining columns corresponds to the terms c_1 x and c_2 x^2. +* Menu: - The program reads N lines of data in the format (X, Y, ERR) where ERR -is the error (standard deviation) in the value Y. +* Multimin Overview:: +* Multimin Caveats:: +* Initializing the Multidimensional Minimizer:: +* Providing a function to minimize:: +* Multimin Iteration:: +* Multimin Stopping Criteria:: +* Multimin Algorithms with Derivatives:: +* Multimin Algorithms without Derivatives:: +* Multimin Examples:: +* Multimin References and Further Reading:: - #include - #include + +File: gsl-ref.info, Node: Multimin Overview, Next: Multimin Caveats, Up: Multidimensional Minimization - int - main (int argc, char **argv) - { - int i, n; - double xi, yi, ei, chisq; - gsl_matrix *X, *cov; - gsl_vector *y, *w, *c; +37.1 Overview +============= - if (argc != 2) - { - fprintf (stderr,"usage: fit n < data\n"); - exit (-1); - } +The problem of multidimensional minimization requires finding a point x +such that the scalar function, - n = atoi (argv[1]); + f(x_1, ..., x_n) - X = gsl_matrix_alloc (n, 3); - y = gsl_vector_alloc (n); - w = gsl_vector_alloc (n); +takes a value which is lower than at any neighboring point. For smooth +functions the gradient g = \nabla f vanishes at the minimum. In general +there are no bracketing methods available for the minimization of +n-dimensional functions. The algorithms proceed from an initial guess +using a search algorithm which attempts to move in a downhill direction. - c = gsl_vector_alloc (3); - cov = gsl_matrix_alloc (3, 3); + Algorithms making use of the gradient of the function perform a +one-dimensional line minimisation along this direction until the lowest +point is found to a suitable tolerance. The search direction is then +updated with local information from the function and its derivatives, +and the whole process repeated until the true n-dimensional minimum is +found. - for (i = 0; i < n; i++) - { - int count = fscanf (stdin, "%lg %lg %lg", - &xi, &yi, &ei); + Algorithms which do not require the gradient of the function use +different strategies. For example, the Nelder-Mead Simplex algorithm +maintains n+1 trial parameter vectors as the vertices of a n-dimensional +simplex. On each iteration it tries to improve the worst vertex of the +simplex by geometrical transformations. The iterations are continued +until the overall size of the simplex has decreased sufficiently. - if (count != 3) - { - fprintf (stderr, "error reading file\n"); - exit (-1); - } + Both types of algorithms use a standard framework. The user provides +a high-level driver for the algorithms, and the library provides the +individual functions necessary for each of the steps. There are three +main phases of the iteration. The steps are, - printf ("%g %g +/- %g\n", xi, yi, ei); + * initialize minimizer state, S, for algorithm T - gsl_matrix_set (X, i, 0, 1.0); - gsl_matrix_set (X, i, 1, xi); - gsl_matrix_set (X, i, 2, xi*xi); + * update S using the iteration T - gsl_vector_set (y, i, yi); - gsl_vector_set (w, i, 1.0/(ei*ei)); - } + * test S for convergence, and repeat iteration if necessary - { - gsl_multifit_linear_workspace * work - = gsl_multifit_linear_alloc (n, 3); - gsl_multifit_wlinear (X, w, y, c, cov, - &chisq, work); - gsl_multifit_linear_free (work); - } +Each iteration step consists either of an improvement to the +line-minimisation in the current direction or an update to the search +direction itself. The state for the minimizers is held in a +'gsl_multimin_fdfminimizer' struct or a 'gsl_multimin_fminimizer' +struct. - #define C(i) (gsl_vector_get(c,(i))) - #define COV(i,j) (gsl_matrix_get(cov,(i),(j))) + +File: gsl-ref.info, Node: Multimin Caveats, Next: Initializing the Multidimensional Minimizer, Prev: Multimin Overview, Up: Multidimensional Minimization - { - printf ("# best fit: Y = %g + %g X + %g X^2\n", - C(0), C(1), C(2)); +37.2 Caveats +============ - printf ("# covariance matrix:\n"); - printf ("[ %+.5e, %+.5e, %+.5e \n", - COV(0,0), COV(0,1), COV(0,2)); - printf (" %+.5e, %+.5e, %+.5e \n", - COV(1,0), COV(1,1), COV(1,2)); - printf (" %+.5e, %+.5e, %+.5e ]\n", - COV(2,0), COV(2,1), COV(2,2)); - printf ("# chisq = %g\n", chisq); - } +Note that the minimization algorithms can only search for one local +minimum at a time. When there are several local minima in the search +area, the first minimum to be found will be returned; however it is +difficult to predict which of the minima this will be. In most cases, +no error will be reported if you try to find a local minimum in an area +where there is more than one. - gsl_matrix_free (X); - gsl_vector_free (y); - gsl_vector_free (w); - gsl_vector_free (c); - gsl_matrix_free (cov); + It is also important to note that the minimization algorithms find +local minima; there is no way to determine whether a minimum is a global +minimum of the function in question. - return 0; - } + +File: gsl-ref.info, Node: Initializing the Multidimensional Minimizer, Next: Providing a function to minimize, Prev: Multimin Caveats, Up: Multidimensional Minimization -A suitable set of data for fitting can be generated using the following -program. It outputs a set of points with gaussian errors from the curve -y = e^x in the region 0 < x < 2. +37.3 Initializing the Multidimensional Minimizer +================================================ - #include - #include - #include +The following function initializes a multidimensional minimizer. The +minimizer itself depends only on the dimension of the problem and the +algorithm and can be reused for different problems. - int - main (void) - { - double x; - const gsl_rng_type * T; - gsl_rng * r; + -- Function: gsl_multimin_fdfminimizer * + gsl_multimin_fdfminimizer_alloc (const + gsl_multimin_fdfminimizer_type * T, size_t N) + -- Function: gsl_multimin_fminimizer * gsl_multimin_fminimizer_alloc + (const gsl_multimin_fminimizer_type * T, size_t N) + This function returns a pointer to a newly allocated instance of a + minimizer of type T for an N-dimension function. If there is + insufficient memory to create the minimizer then the function + returns a null pointer and the error handler is invoked with an + error code of 'GSL_ENOMEM'. - gsl_rng_env_setup (); + -- Function: int gsl_multimin_fdfminimizer_set + (gsl_multimin_fdfminimizer * S, gsl_multimin_function_fdf * + FDF, const gsl_vector * X, double STEP_SIZE, double TOL) + -- Function: int gsl_multimin_fminimizer_set (gsl_multimin_fminimizer * + S, gsl_multimin_function * F, const gsl_vector * X, const + gsl_vector * STEP_SIZE) + The function 'gsl_multimin_fdfminimizer_set' initializes the + minimizer S to minimize the function FDF starting from the initial + point X. The size of the first trial step is given by STEP_SIZE. + The accuracy of the line minimization is specified by TOL. The + precise meaning of this parameter depends on the method used. + Typically the line minimization is considered successful if the + gradient of the function g is orthogonal to the current search + direction p to a relative accuracy of TOL, where dot(p,g) < tol |p| + |g|. A TOL value of 0.1 is suitable for most purposes, since line + minimization only needs to be carried out approximately. Note that + setting TOL to zero will force the use of "exact" line-searches, + which are extremely expensive. - T = gsl_rng_default; - r = gsl_rng_alloc (T); + The function 'gsl_multimin_fminimizer_set' initializes the + minimizer S to minimize the function F, starting from the initial + point X. The size of the initial trial steps is given in vector + STEP_SIZE. The precise meaning of this parameter depends on the + method used. - for (x = 0.1; x < 2; x+= 0.1) - { - double y0 = exp (x); - double sigma = 0.1 * y0; - double dy = gsl_ran_gaussian (r, sigma); + -- Function: void gsl_multimin_fdfminimizer_free + (gsl_multimin_fdfminimizer * S) + -- Function: void gsl_multimin_fminimizer_free (gsl_multimin_fminimizer + * S) + This function frees all the memory associated with the minimizer S. - printf ("%g %g %g\n", x, y0 + dy, sigma); - } + -- Function: const char * gsl_multimin_fdfminimizer_name (const + gsl_multimin_fdfminimizer * S) + -- Function: const char * gsl_multimin_fminimizer_name (const + gsl_multimin_fminimizer * S) + This function returns a pointer to the name of the minimizer. For + example, - gsl_rng_free(r); + printf ("s is a '%s' minimizer\n", + gsl_multimin_fdfminimizer_name (s)); - return 0; - } + would print something like 's is a 'conjugate_pr' minimizer'. -The data can be prepared by running the resulting executable program, + +File: gsl-ref.info, Node: Providing a function to minimize, Next: Multimin Iteration, Prev: Initializing the Multidimensional Minimizer, Up: Multidimensional Minimization - $ GSL_RNG_TYPE=mt19937_1999 ./generate > exp.dat - $ more exp.dat - 0.1 0.97935 0.110517 - 0.2 1.3359 0.12214 - 0.3 1.52573 0.134986 - 0.4 1.60318 0.149182 - 0.5 1.81731 0.164872 - 0.6 1.92475 0.182212 - .... +37.4 Providing a function to minimize +===================================== -To fit the data use the previous program, with the number of data points -given as the first argument. In this case there are 19 data points. +You must provide a parametric function of n variables for the minimizers +to operate on. You may also need to provide a routine which calculates +the gradient of the function and a third routine which calculates both +the function value and the gradient together. In order to allow for +general parameters the functions are defined by the following data +types: - $ ./fit 19 < exp.dat - 0.1 0.97935 +/- 0.110517 - 0.2 1.3359 +/- 0.12214 - ... - # best fit: Y = 1.02318 + 0.956201 X + 0.876796 X^2 - # covariance matrix: - [ +1.25612e-02, -3.64387e-02, +1.94389e-02 - -3.64387e-02, +1.42339e-01, -8.48761e-02 - +1.94389e-02, -8.48761e-02, +5.60243e-02 ] - # chisq = 23.0987 + -- Data Type: gsl_multimin_function_fdf + This data type defines a general function of n variables with + parameters and the corresponding gradient vector of derivatives, -The parameters of the quadratic fit match the coefficients of the -expansion of e^x, taking into account the errors on the parameters and -the O(x^3) difference between the exponential and quadratic functions -for the larger values of x. The errors on the parameters are given by -the square-root of the corresponding diagonal elements of the covariance -matrix. The chi-squared per degree of freedom is 1.4, indicating a -reasonable fit to the data. + 'double (* f) (const gsl_vector * X, void * PARAMS)' + this function should return the result f(x,params) for + argument X and parameters PARAMS. If the function cannot be + computed, an error value of 'GSL_NAN' should be returned. - The next program demonstrates the advantage of robust least squares -on a dataset with outliers. The program generates linear (x,y) data -pairs on the line y = 1.45 x + 3.88, adds some random noise, and inserts -3 outliers into the dataset. Both the robust and ordinary least squares -(OLS) coefficients are computed for comparison. + 'void (* df) (const gsl_vector * X, void * PARAMS, gsl_vector * G)' + this function should store the N-dimensional gradient g_i = d + f(x,params) / d x_i in the vector G for argument X and + parameters PARAMS, returning an appropriate error code if the + function cannot be computed. - #include - #include - #include + 'void (* fdf) (const gsl_vector * X, void * PARAMS, double * f, gsl_vector * G)' + This function should set the values of the F and G as above, + for arguments X and parameters PARAMS. This function provides + an optimization of the separate functions for f(x) and + g(x)--it is always faster to compute the function and its + derivative at the same time. - int - dofit(const gsl_multifit_robust_type *T, - const gsl_matrix *X, const gsl_vector *y, - gsl_vector *c, gsl_matrix *cov) + 'size_t n' + the dimension of the system, i.e. the number of components of + the vectors X. + + 'void * params' + a pointer to the parameters of the function. + -- Data Type: gsl_multimin_function + This data type defines a general function of n variables with + parameters, + + 'double (* f) (const gsl_vector * X, void * PARAMS)' + this function should return the result f(x,params) for + argument X and parameters PARAMS. If the function cannot be + computed, an error value of 'GSL_NAN' should be returned. + + 'size_t n' + the dimension of the system, i.e. the number of components of + the vectors X. + + 'void * params' + a pointer to the parameters of the function. + +The following example function defines a simple two-dimensional +paraboloid with five parameters, + + /* Paraboloid centered on (p[0],p[1]), with + scale factors (p[2],p[3]) and minimum p[4] */ + + double + my_f (const gsl_vector *v, void *params) { - int s; - gsl_multifit_robust_workspace * work - = gsl_multifit_robust_alloc (T, X->size1, X->size2); + double x, y; + double *p = (double *)params; - s = gsl_multifit_robust (X, y, c, cov, work); - gsl_multifit_robust_free (work); + x = gsl_vector_get(v, 0); + y = gsl_vector_get(v, 1); - return s; + return p[2] * (x - p[0]) * (x - p[0]) + + p[3] * (y - p[1]) * (y - p[1]) + p[4]; + } + + /* The gradient of f, df = (df/dx, df/dy). */ + void + my_df (const gsl_vector *v, void *params, + gsl_vector *df) + { + double x, y; + double *p = (double *)params; + + x = gsl_vector_get(v, 0); + y = gsl_vector_get(v, 1); + + gsl_vector_set(df, 0, 2.0 * p[2] * (x - p[0])); + gsl_vector_set(df, 1, 2.0 * p[3] * (y - p[1])); + } + + /* Compute both f and df together. */ + void + my_fdf (const gsl_vector *x, void *params, + double *f, gsl_vector *df) + { + *f = my_f(x, params); + my_df(x, params, df); } - int - main (int argc, char **argv) - { - int i; - size_t n; - const size_t p = 2; /* linear fit */ - gsl_matrix *X, *cov; - gsl_vector *x, *y, *c, *c_ols; - const double a = 1.45; /* slope */ - const double b = 3.88; /* intercept */ - gsl_rng *r; +The function can be initialized using the following code, + + gsl_multimin_function_fdf my_func; + + /* Paraboloid center at (1,2), scale factors (10, 20), + minimum value 30 */ + double p[5] = { 1.0, 2.0, 10.0, 20.0, 30.0 }; + + my_func.n = 2; /* number of function components */ + my_func.f = &my_f; + my_func.df = &my_df; + my_func.fdf = &my_fdf; + my_func.params = (void *)p; + + +File: gsl-ref.info, Node: Multimin Iteration, Next: Multimin Stopping Criteria, Prev: Providing a function to minimize, Up: Multidimensional Minimization + +37.5 Iteration +============== + +The following function drives the iteration of each algorithm. The +function performs one iteration to update the state of the minimizer. +The same function works for all minimizers so that different methods can +be substituted at runtime without modifications to the code. + + -- Function: int gsl_multimin_fdfminimizer_iterate + (gsl_multimin_fdfminimizer * S) + -- Function: int gsl_multimin_fminimizer_iterate + (gsl_multimin_fminimizer * S) + These functions perform a single iteration of the minimizer S. If + the iteration encounters an unexpected problem then an error code + will be returned. The error code 'GSL_ENOPROG' signifies that the + minimizer is unable to improve on its current estimate, either due + to numerical difficulty or because a genuine local minimum has been + reached. + +The minimizer maintains a current best estimate of the minimum at all +times. This information can be accessed with the following auxiliary +functions, + + -- Function: gsl_vector * gsl_multimin_fdfminimizer_x (const + gsl_multimin_fdfminimizer * S) + -- Function: gsl_vector * gsl_multimin_fminimizer_x (const + gsl_multimin_fminimizer * S) + -- Function: double gsl_multimin_fdfminimizer_minimum (const + gsl_multimin_fdfminimizer * S) + -- Function: double gsl_multimin_fminimizer_minimum (const + gsl_multimin_fminimizer * S) + -- Function: gsl_vector * gsl_multimin_fdfminimizer_gradient (const + gsl_multimin_fdfminimizer * S) + -- Function: gsl_vector * gsl_multimin_fdfminimizer_dx (const + gsl_multimin_fdfminimizer * S) + -- Function: double gsl_multimin_fminimizer_size (const + gsl_multimin_fminimizer * S) + These functions return the current best estimate of the location of + the minimum, the value of the function at that point, its gradient, + the last step increment of the estimate, and minimizer specific + characteristic size for the minimizer S. + + -- Function: int gsl_multimin_fdfminimizer_restart + (gsl_multimin_fdfminimizer * S) + This function resets the minimizer S to use the current point as a + new starting point. + + +File: gsl-ref.info, Node: Multimin Stopping Criteria, Next: Multimin Algorithms with Derivatives, Prev: Multimin Iteration, Up: Multidimensional Minimization + +37.6 Stopping Criteria +====================== + +A minimization procedure should stop when one of the following +conditions is true: + + * A minimum has been found to within the user-specified precision. + + * A user-specified maximum number of iterations has been reached. + + * An error has occurred. + +The handling of these conditions is under user control. The functions +below allow the user to test the precision of the current result. + + -- Function: int gsl_multimin_test_gradient (const gsl_vector * G, + double EPSABS) + This function tests the norm of the gradient G against the absolute + tolerance EPSABS. The gradient of a multidimensional function goes + to zero at a minimum. The test returns 'GSL_SUCCESS' if the + following condition is achieved, + + |g| < epsabs + + and returns 'GSL_CONTINUE' otherwise. A suitable choice of EPSABS + can be made from the desired accuracy in the function for small + variations in x. The relationship between these quantities is + given by \delta f = g \delta x. + + -- Function: int gsl_multimin_test_size (const double SIZE, double + EPSABS) + This function tests the minimizer specific characteristic size (if + applicable to the used minimizer) against absolute tolerance + EPSABS. The test returns 'GSL_SUCCESS' if the size is smaller than + tolerance, otherwise 'GSL_CONTINUE' is returned. + + +File: gsl-ref.info, Node: Multimin Algorithms with Derivatives, Next: Multimin Algorithms without Derivatives, Prev: Multimin Stopping Criteria, Up: Multidimensional Minimization + +37.7 Algorithms with Derivatives +================================ + +There are several minimization methods available. The best choice of +algorithm depends on the problem. The algorithms described in this +section use the value of the function and its gradient at each +evaluation point. + + -- Minimizer: gsl_multimin_fdfminimizer_conjugate_fr + This is the Fletcher-Reeves conjugate gradient algorithm. The + conjugate gradient algorithm proceeds as a succession of line + minimizations. The sequence of search directions is used to build + up an approximation to the curvature of the function in the + neighborhood of the minimum. - if (argc != 2) - { - fprintf (stderr,"usage: robfit n\n"); - exit (-1); - } + An initial search direction P is chosen using the gradient, and + line minimization is carried out in that direction. The accuracy + of the line minimization is specified by the parameter TOL. The + minimum along this line occurs when the function gradient G and the + search direction P are orthogonal. The line minimization + terminates when dot(p,g) < tol |p| |g|. The search direction is + updated using the Fletcher-Reeves formula p' = g' - \beta g where + \beta=-|g'|^2/|g|^2, and the line minimization is then repeated for + the new search direction. - n = atoi (argv[1]); + -- Minimizer: gsl_multimin_fdfminimizer_conjugate_pr + This is the Polak-Ribiere conjugate gradient algorithm. It is + similar to the Fletcher-Reeves method, differing only in the choice + of the coefficient \beta. Both methods work well when the + evaluation point is close enough to the minimum of the objective + function that it is well approximated by a quadratic hypersurface. - X = gsl_matrix_alloc (n, p); - x = gsl_vector_alloc (n); - y = gsl_vector_alloc (n); + -- Minimizer: gsl_multimin_fdfminimizer_vector_bfgs2 + -- Minimizer: gsl_multimin_fdfminimizer_vector_bfgs + These methods use the vector Broyden-Fletcher-Goldfarb-Shanno + (BFGS) algorithm. This is a quasi-Newton method which builds up an + approximation to the second derivatives of the function f using the + difference between successive gradient vectors. By combining the + first and second derivatives the algorithm is able to take + Newton-type steps towards the function minimum, assuming quadratic + behavior in that region. - c = gsl_vector_alloc (p); - c_ols = gsl_vector_alloc (p); - cov = gsl_matrix_alloc (p, p); + The 'bfgs2' version of this minimizer is the most efficient version + available, and is a faithful implementation of the line + minimization scheme described in Fletcher's 'Practical Methods of + Optimization', Algorithms 2.6.2 and 2.6.4. It supersedes the + original 'bfgs' routine and requires substantially fewer function + and gradient evaluations. The user-supplied tolerance TOL + corresponds to the parameter \sigma used by Fletcher. A value of + 0.1 is recommended for typical use (larger values correspond to + less accurate line searches). - r = gsl_rng_alloc(gsl_rng_default); + -- Minimizer: gsl_multimin_fdfminimizer_steepest_descent + The steepest descent algorithm follows the downhill gradient of the + function at each step. When a downhill step is successful the + step-size is increased by a factor of two. If the downhill step + leads to a higher function value then the algorithm backtracks and + the step size is decreased using the parameter TOL. A suitable + value of TOL for most applications is 0.1. The steepest descent + method is inefficient and is included only for demonstration + purposes. - /* generate linear dataset */ - for (i = 0; i < n - 3; i++) - { - double dx = 10.0 / (n - 1.0); - double ei = gsl_rng_uniform(r); - double xi = -5.0 + i * dx; - double yi = a * xi + b; + +File: gsl-ref.info, Node: Multimin Algorithms without Derivatives, Next: Multimin Examples, Prev: Multimin Algorithms with Derivatives, Up: Multidimensional Minimization - gsl_vector_set (x, i, xi); - gsl_vector_set (y, i, yi + ei); - } +37.8 Algorithms without Derivatives +=================================== - /* add a few outliers */ - gsl_vector_set(x, n - 3, 4.7); - gsl_vector_set(y, n - 3, -8.3); +The algorithms described in this section use only the value of the +function at each evaluation point. - gsl_vector_set(x, n - 2, 3.5); - gsl_vector_set(y, n - 2, -6.7); + -- Minimizer: gsl_multimin_fminimizer_nmsimplex2 + -- Minimizer: gsl_multimin_fminimizer_nmsimplex + These methods use the Simplex algorithm of Nelder and Mead. + Starting from the initial vector X = p_0, the algorithm constructs + an additional n vectors p_i using the step size vector s = + STEP_SIZE as follows: - gsl_vector_set(x, n - 1, 4.1); - gsl_vector_set(y, n - 1, -6.0); + p_0 = (x_0, x_1, ... , x_n) + p_1 = (x_0 + s_0, x_1, ... , x_n) + p_2 = (x_0, x_1 + s_1, ... , x_n) + ... = ... + p_n = (x_0, x_1, ... , x_n + s_n) - /* construct design matrix X for linear fit */ - for (i = 0; i < n; ++i) - { - double xi = gsl_vector_get(x, i); + These vectors form the n+1 vertices of a simplex in n dimensions. + On each iteration the algorithm uses simple geometrical + transformations to update the vector corresponding to the highest + function value. The geometric transformations are reflection, + reflection followed by expansion, contraction and multiple + contraction. Using these transformations the simplex moves through + the space towards the minimum, where it contracts itself. - gsl_matrix_set (X, i, 0, 1.0); - gsl_matrix_set (X, i, 1, xi); - } + After each iteration, the best vertex is returned. Note, that due + to the nature of the algorithm not every step improves the current + best parameter vector. Usually several iterations are required. - /* perform robust and OLS fit */ - dofit(gsl_multifit_robust_ols, X, y, c_ols, cov); - dofit(gsl_multifit_robust_bisquare, X, y, c, cov); + The minimizer-specific characteristic size is calculated as the + average distance from the geometrical center of the simplex to all + its vertices. This size can be used as a stopping criteria, as the + simplex contracts itself near the minimum. The size is returned by + the function 'gsl_multimin_fminimizer_size'. - /* output data and model */ - for (i = 0; i < n; ++i) - { - double xi = gsl_vector_get(x, i); - double yi = gsl_vector_get(y, i); - gsl_vector_view v = gsl_matrix_row(X, i); - double y_ols, y_rob, y_err; + The 'nmsimplex2' version of this minimiser is a new O(N) operations + implementation of the earlier O(N^2) operations 'nmsimplex' + minimiser. It uses the same underlying algorithm, but the simplex + updates are computed more efficiently for high-dimensional + problems. In addition, the size of simplex is calculated as the + RMS distance of each vertex from the center rather than the mean + distance, allowing a linear update of this quantity on each step. + The memory usage is O(N^2) for both algorithms. - gsl_multifit_robust_est(&v.vector, c, cov, &y_rob, &y_err); - gsl_multifit_robust_est(&v.vector, c_ols, cov, &y_ols, &y_err); + -- Minimizer: gsl_multimin_fminimizer_nmsimplex2rand + This method is a variant of 'nmsimplex2' which initialises the + simplex around the starting point X using a randomly-oriented set + of basis vectors instead of the fixed coordinate axes. The final + dimensions of the simplex are scaled along the coordinate axes by + the vector STEP_SIZE. The randomisation uses a simple + deterministic generator so that repeated calls to + 'gsl_multimin_fminimizer_set' for a given solver object will vary + the orientation in a well-defined way. - printf("%g %g %g %g\n", xi, yi, y_rob, y_ols); - } + +File: gsl-ref.info, Node: Multimin Examples, Next: Multimin References and Further Reading, Prev: Multimin Algorithms without Derivatives, Up: Multidimensional Minimization - #define C(i) (gsl_vector_get(c,(i))) - #define COV(i,j) (gsl_matrix_get(cov,(i),(j))) +37.9 Examples +============= - { - printf ("# best fit: Y = %g + %g X\n", - C(0), C(1)); +This example program finds the minimum of the paraboloid function +defined earlier. The location of the minimum is offset from the origin +in x and y, and the function value at the minimum is non-zero. The main +program is given below, it requires the example function given earlier +in this chapter. - printf ("# covariance matrix:\n"); - printf ("# [ %+.5e, %+.5e\n", - COV(0,0), COV(0,1)); - printf ("# %+.5e, %+.5e\n", - COV(1,0), COV(1,1)); - } + int + main (void) + { + size_t iter = 0; + int status; - gsl_matrix_free (X); - gsl_vector_free (x); - gsl_vector_free (y); - gsl_vector_free (c); - gsl_vector_free (c_ols); - gsl_matrix_free (cov); - gsl_rng_free(r); + const gsl_multimin_fdfminimizer_type *T; + gsl_multimin_fdfminimizer *s; - return 0; - } + /* Position of the minimum (1,2), scale factors + 10,20, height 30. */ + double par[5] = { 1.0, 2.0, 10.0, 20.0, 30.0 }; - The output from the program is shown in the following plot. + gsl_vector *x; + gsl_multimin_function_fdf my_func; - -File: gsl-ref.info, Node: Fitting References and Further Reading, Prev: Fitting Examples, Up: Least-Squares Fitting + my_func.n = 2; + my_func.f = my_f; + my_func.df = my_df; + my_func.fdf = my_fdf; + my_func.params = par; -37.8 References and Further Reading -=================================== + /* Starting point, x = (5,7) */ + x = gsl_vector_alloc (2); + gsl_vector_set (x, 0, 5.0); + gsl_vector_set (x, 1, 7.0); -A summary of formulas and techniques for least squares fitting can be -found in the "Statistics" chapter of the Annual Review of Particle -Physics prepared by the Particle Data Group, + T = gsl_multimin_fdfminimizer_conjugate_fr; + s = gsl_multimin_fdfminimizer_alloc (T, 2); - 'Review of Particle Properties', R.M. Barnett et al., Physical - Review D54, 1 (1996) + gsl_multimin_fdfminimizer_set (s, &my_func, x, 0.01, 1e-4); -The Review of Particle Physics is available online at the website given -above. + do + { + iter++; + status = gsl_multimin_fdfminimizer_iterate (s); - The tests used to prepare these routines are based on the NIST -Statistical Reference Datasets. The datasets and their documentation -are available from NIST at the following website, + if (status) + break; - . + status = gsl_multimin_test_gradient (s->gradient, 1e-3); -The GSL implementation of robust linear regression closely follows the -publications + if (status == GSL_SUCCESS) + printf ("Minimum found at:\n"); - DuMouchel, W. and F. O'Brien (1989), "Integrating a robust option - into a multiple regression computing environment," Computer Science - and Statistics: Proceedings of the 21st Symposium on the Interface, - American Statistical Association + printf ("%5d %.5f %.5f %10.5f\n", iter, + gsl_vector_get (s->x, 0), + gsl_vector_get (s->x, 1), + s->f); - Street, J.O., R.J. Carroll, and D. Ruppert (1988), "A note on - computing robust regression estimates via iteratively reweighted - least squares," The American Statistician, v. 42, pp. 152-154. + } + while (status == GSL_CONTINUE && iter < 100); - -File: gsl-ref.info, Node: Nonlinear Least-Squares Fitting, Next: Basis Splines, Prev: Least-Squares Fitting, Up: Top + gsl_multimin_fdfminimizer_free (s); + gsl_vector_free (x); -38 Nonlinear Least-Squares Fitting -********************************** + return 0; + } -This chapter describes functions for multidimensional nonlinear -least-squares fitting. The library provides low level components for a -variety of iterative solvers and convergence tests. These can be -combined by the user to achieve the desired solution, with full access -to the intermediate steps of the iteration. Each class of methods uses -the same framework, so that you can switch between solvers at runtime -without needing to recompile your program. Each instance of a solver -keeps track of its own state, allowing the solvers to be used in -multi-threaded programs. +The initial step-size is chosen as 0.01, a conservative estimate in this +case, and the line minimization parameter is set at 0.0001. The program +terminates when the norm of the gradient has been reduced below 0.001. +The output of the program is shown below, - The header file 'gsl_multifit_nlin.h' contains prototypes for the -multidimensional nonlinear fitting functions and related declarations. + x y f + 1 4.99629 6.99072 687.84780 + 2 4.98886 6.97215 683.55456 + 3 4.97400 6.93501 675.01278 + 4 4.94429 6.86073 658.10798 + 5 4.88487 6.71217 625.01340 + 6 4.76602 6.41506 561.68440 + 7 4.52833 5.82083 446.46694 + 8 4.05295 4.63238 261.79422 + 9 3.10219 2.25548 75.49762 + 10 2.85185 1.62963 67.03704 + 11 2.19088 1.76182 45.31640 + 12 0.86892 2.02622 30.18555 + Minimum found at: + 13 1.00000 2.00000 30.00000 -* Menu: +Note that the algorithm gradually increases the step size as it +successfully moves downhill, as can be seen by plotting the successive +points. -* Overview of Nonlinear Least-Squares Fitting:: -* Initializing the Nonlinear Least-Squares Solver:: -* Providing the Function to be Minimized:: -* Finite Difference Jacobian:: -* Iteration of the Minimization Algorithm:: -* Search Stopping Parameters for Minimization Algorithms:: -* High Level Driver:: -* Minimization Algorithms using Derivatives:: -* Minimization Algorithms without Derivatives:: -* Computing the covariance matrix of best fit parameters:: -* Example programs for Nonlinear Least-Squares Fitting:: -* References and Further Reading for Nonlinear Least-Squares Fitting:: +The conjugate gradient algorithm finds the minimum on its second +direction because the function is purely quadratic. Additional +iterations would be needed for a more complicated function. - -File: gsl-ref.info, Node: Overview of Nonlinear Least-Squares Fitting, Next: Initializing the Nonlinear Least-Squares Solver, Up: Nonlinear Least-Squares Fitting + Here is another example using the Nelder-Mead Simplex algorithm to +minimize the same example object function, as above. -38.1 Overview -============= + int + main(void) + { + double par[5] = {1.0, 2.0, 10.0, 20.0, 30.0}; -The problem of multidimensional nonlinear least-squares fitting requires -the minimization of the squared residuals of n functions, f_i, in p -parameters, x_i, + const gsl_multimin_fminimizer_type *T = + gsl_multimin_fminimizer_nmsimplex2; + gsl_multimin_fminimizer *s = NULL; + gsl_vector *ss, *x; + gsl_multimin_function minex_func; - \Phi(x) = (1/2) || F(x) ||^2 - = (1/2) \sum_{i=1}^{n} f_i(x_1, ..., x_p)^2 + size_t iter = 0; + int status; + double size; + + /* Starting point */ + x = gsl_vector_alloc (2); + gsl_vector_set (x, 0, 5.0); + gsl_vector_set (x, 1, 7.0); -All algorithms proceed from an initial guess using the linearization, + /* Set initial step sizes to 1 */ + ss = gsl_vector_alloc (2); + gsl_vector_set_all (ss, 1.0); - \psi(p) = || F(x+p) || ~=~ || F(x) + J p || + /* Initialize method and iterate */ + minex_func.n = 2; + minex_func.f = my_f; + minex_func.params = par; -where x is the initial point, p is the proposed step and J is the -Jacobian matrix J_{ij} = d f_i / d x_j. Additional strategies are used -to enlarge the region of convergence. These include requiring a -decrease in the norm ||F|| on each step or using a trust region to avoid -steps which fall outside the linear regime. + s = gsl_multimin_fminimizer_alloc (T, 2); + gsl_multimin_fminimizer_set (s, &minex_func, x, ss); - To perform a weighted least-squares fit of a nonlinear model Y(x,t) -to data (t_i, y_i) with independent Gaussian errors \sigma_i, use -function components of the following form, + do + { + iter++; + status = gsl_multimin_fminimizer_iterate(s); - f_i = (Y(x, t_i) - y_i) / \sigma_i + if (status) + break; -Note that the model parameters are denoted by x in this chapter since -the non-linear least-squares algorithms are described geometrically -(i.e. finding the minimum of a surface). The independent variable of -any data to be fitted is denoted by t. + size = gsl_multimin_fminimizer_size (s); + status = gsl_multimin_test_size (size, 1e-2); - With the definition above the Jacobian is J_{ij} =(1 / \sigma_i) d -Y_i / d x_j, where Y_i = Y(x,t_i). + if (status == GSL_SUCCESS) + { + printf ("converged to minimum at\n"); + } - -File: gsl-ref.info, Node: Initializing the Nonlinear Least-Squares Solver, Next: Providing the Function to be Minimized, Prev: Overview of Nonlinear Least-Squares Fitting, Up: Nonlinear Least-Squares Fitting + printf ("%5d %10.3e %10.3e f() = %7.3f size = %.3f\n", + iter, + gsl_vector_get (s->x, 0), + gsl_vector_get (s->x, 1), + s->fval, size); + } + while (status == GSL_CONTINUE && iter < 100); -38.2 Initializing the Solver -============================ + gsl_vector_free(x); + gsl_vector_free(ss); + gsl_multimin_fminimizer_free (s); - -- Function: gsl_multifit_fsolver * gsl_multifit_fsolver_alloc (const - gsl_multifit_fsolver_type * T, size_t N, size_t P) - This function returns a pointer to a newly allocated instance of a - solver of type T for N observations and P parameters. The number - of observations N must be greater than or equal to parameters P. + return status; + } - If there is insufficient memory to create the solver then the - function returns a null pointer and the error handler is invoked - with an error code of 'GSL_ENOMEM'. +The minimum search stops when the Simplex size drops to 0.01. The +output is shown below. - -- Function: gsl_multifit_fdfsolver * gsl_multifit_fdfsolver_alloc - (const gsl_multifit_fdfsolver_type * T, size_t N, size_t P) - This function returns a pointer to a newly allocated instance of a - derivative solver of type T for N observations and P parameters. - For example, the following code creates an instance of a - Levenberg-Marquardt solver for 100 data points and 3 parameters, + 1 6.500e+00 5.000e+00 f() = 512.500 size = 1.130 + 2 5.250e+00 4.000e+00 f() = 290.625 size = 1.409 + 3 5.250e+00 4.000e+00 f() = 290.625 size = 1.409 + 4 5.500e+00 1.000e+00 f() = 252.500 size = 1.409 + 5 2.625e+00 3.500e+00 f() = 101.406 size = 1.847 + 6 2.625e+00 3.500e+00 f() = 101.406 size = 1.847 + 7 0.000e+00 3.000e+00 f() = 60.000 size = 1.847 + 8 2.094e+00 1.875e+00 f() = 42.275 size = 1.321 + 9 2.578e-01 1.906e+00 f() = 35.684 size = 1.069 + 10 5.879e-01 2.445e+00 f() = 35.664 size = 0.841 + 11 1.258e+00 2.025e+00 f() = 30.680 size = 0.476 + 12 1.258e+00 2.025e+00 f() = 30.680 size = 0.367 + 13 1.093e+00 1.849e+00 f() = 30.539 size = 0.300 + 14 8.830e-01 2.004e+00 f() = 30.137 size = 0.172 + 15 8.830e-01 2.004e+00 f() = 30.137 size = 0.126 + 16 9.582e-01 2.060e+00 f() = 30.090 size = 0.106 + 17 1.022e+00 2.004e+00 f() = 30.005 size = 0.063 + 18 1.022e+00 2.004e+00 f() = 30.005 size = 0.043 + 19 1.022e+00 2.004e+00 f() = 30.005 size = 0.043 + 20 1.022e+00 2.004e+00 f() = 30.005 size = 0.027 + 21 1.022e+00 2.004e+00 f() = 30.005 size = 0.022 + 22 9.920e-01 1.997e+00 f() = 30.001 size = 0.016 + 23 9.920e-01 1.997e+00 f() = 30.001 size = 0.013 + converged to minimum at + 24 9.920e-01 1.997e+00 f() = 30.001 size = 0.008 - const gsl_multifit_fdfsolver_type * T - = gsl_multifit_fdfsolver_lmder; - gsl_multifit_fdfsolver * s - = gsl_multifit_fdfsolver_alloc (T, 100, 3); +The simplex size first increases, while the simplex moves towards the +minimum. After a while the size begins to decrease as the simplex +contracts around the minimum. - The number of observations N must be greater than or equal to - parameters P. + +File: gsl-ref.info, Node: Multimin References and Further Reading, Prev: Multimin Examples, Up: Multidimensional Minimization - If there is insufficient memory to create the solver then the - function returns a null pointer and the error handler is invoked - with an error code of 'GSL_ENOMEM'. +37.10 References and Further Reading +==================================== - -- Function: int gsl_multifit_fsolver_set (gsl_multifit_fsolver * S, - gsl_multifit_function * F, const gsl_vector * X) - This function initializes, or reinitializes, an existing solver S - to use the function F and the initial guess X. +The conjugate gradient and BFGS methods are described in detail in the +following book, - -- Function: int gsl_multifit_fdfsolver_set (gsl_multifit_fdfsolver * - S, gsl_multifit_function_fdf * FDF, const gsl_vector * X) - This function initializes, or reinitializes, an existing solver S - to use the function and derivative FDF and the initial guess X. + R. Fletcher, 'Practical Methods of Optimization (Second Edition)' + Wiley (1987), ISBN 0471915475. - -- Function: void gsl_multifit_fsolver_free (gsl_multifit_fsolver * S) - -- Function: void gsl_multifit_fdfsolver_free (gsl_multifit_fdfsolver * - S) - These functions free all the memory associated with the solver S. + A brief description of multidimensional minimization algorithms and +more recent references can be found in, - -- Function: const char * gsl_multifit_fsolver_name (const - gsl_multifit_fsolver * S) - -- Function: const char * gsl_multifit_fdfsolver_name (const - gsl_multifit_fdfsolver * S) - These functions return a pointer to the name of the solver. For - example, + C.W. Ueberhuber, 'Numerical Computation (Volume 2)', Chapter 14, + Section 4.4 "Minimization Methods", p. 325-335, Springer (1997), + ISBN 3-540-62057-5. - printf ("s is a '%s' solver\n", - gsl_multifit_fdfsolver_name (s)); +The simplex algorithm is described in the following paper, - would print something like 's is a 'lmder' solver'. + J.A. Nelder and R. Mead, 'A simplex method for function + minimization', Computer Journal vol. 7 (1965), 308-313.  -File: gsl-ref.info, Node: Providing the Function to be Minimized, Next: Finite Difference Jacobian, Prev: Initializing the Nonlinear Least-Squares Solver, Up: Nonlinear Least-Squares Fitting +File: gsl-ref.info, Node: Least-Squares Fitting, Next: Nonlinear Least-Squares Fitting, Prev: Multidimensional Minimization, Up: Top -38.3 Providing the Function to be Minimized -=========================================== +38 Least-Squares Fitting +************************ -You must provide n functions of p variables for the minimization -algorithms to operate on. In order to allow for arbitrary parameters -the functions are defined by the following data types: +This chapter describes routines for performing least squares fits to +experimental data using linear combinations of functions. The data may +be weighted or unweighted, i.e. with known or unknown errors. For +weighted data the functions compute the best fit parameters and their +associated covariance matrix. For unweighted data the covariance matrix +is estimated from the scatter of the points, giving a +variance-covariance matrix. - -- Data Type: gsl_multifit_function - This data type defines a general system of functions with arbitrary - parameters. + The functions are divided into separate versions for simple one- or +two-parameter regression and multiple-parameter fits. - 'int (* f) (const gsl_vector * X, void * PARAMS, gsl_vector * F)' - this function should store the vector result f(x,params) in F - for argument X and arbitrary parameters PARAMS, returning an - appropriate error code if the function cannot be computed. +* Menu: - 'size_t n' - the number of functions, i.e. the number of components of the - vector F. +* Fitting Overview:: +* Linear regression:: +* Multi-parameter regression:: +* Regularized regression:: +* Robust linear regression:: +* Large Dense Linear Systems:: +* Troubleshooting:: +* Fitting Examples:: +* Fitting References and Further Reading:: - 'size_t p' - the number of independent variables, i.e. the number of - components of the vector X. + +File: gsl-ref.info, Node: Fitting Overview, Next: Linear regression, Up: Least-Squares Fitting - 'void * params' - a pointer to the arbitrary parameters of the function. +38.1 Overview +============= - -- Data Type: gsl_multifit_function_fdf - This data type defines a general system of functions with arbitrary - parameters and the corresponding Jacobian matrix of derivatives, +Least-squares fits are found by minimizing \chi^2 (chi-squared), the +weighted sum of squared residuals over n experimental datapoints (x_i, +y_i) for the model Y(c,x), - 'int (* f) (const gsl_vector * X, void * PARAMS, gsl_vector * F)' - this function should store the vector result f(x,params) in F - for argument X and arbitrary parameters PARAMS, returning an - appropriate error code if the function cannot be computed. + \chi^2 = \sum_i w_i (y_i - Y(c, x_i))^2 - 'int (* df) (const gsl_vector * X, void * PARAMS, gsl_matrix * J)' - this function should store the N-by-P matrix result J_ij = d - f_i(x,params) / d x_j in J for argument X and arbitrary - parameters PARAMS, returning an appropriate error code if the - function cannot be computed. If an analytic Jacobian is - unavailable, or too expensive to compute, this function - pointer may be set to NULL, in which case the Jacobian will be - internally computed using finite difference approximations of - the function F. +The p parameters of the model are c = {c_0, c_1, ...}. The weight +factors w_i are given by w_i = 1/\sigma_i^2, where \sigma_i is the +experimental error on the data-point y_i. The errors are assumed to be +Gaussian and uncorrelated. For unweighted data the chi-squared sum is +computed without any weight factors. - 'int (* fdf) (const gsl_vector * X, void * PARAMS, gsl_vector * F, gsl_matrix * J)' - This function should set the values of the F and J as above, - for arguments X and arbitrary parameters PARAMS. This - function provides an optimization of the separate functions - for f(x) and J(x)--it is always faster to compute the function - and its derivative at the same time. If an analytic Jacobian - is unavailable, or too expensive to compute, this function - pointer may be set to NULL, in which case the Jacobian will be - internally computed using finite difference approximations of - the function F. + The fitting routines return the best-fit parameters c and their p +\times p covariance matrix. The covariance matrix measures the +statistical errors on the best-fit parameters resulting from the errors +on the data, \sigma_i, and is defined as C_{ab} = <\delta c_a \delta +c_b> where < > denotes an average over the Gaussian error distributions +of the underlying datapoints. - 'size_t n' - the number of functions, i.e. the number of components of the - vector F. + The covariance matrix is calculated by error propagation from the +data errors \sigma_i. The change in a fitted parameter \delta c_a +caused by a small change in the data \delta y_i is given by - 'size_t p' - the number of independent variables, i.e. the number of - components of the vector X. + \delta c_a = \sum_i (dc_a/dy_i) \delta y_i - 'void * params' - a pointer to the arbitrary parameters of the function. +allowing the covariance matrix to be written in terms of the errors on +the data, - Note that when fitting a non-linear model against experimental data, -the data is passed to the functions above using the PARAMS argument and -the trial best-fit parameters through the X argument. + C_{ab} = \sum_{i,j} (dc_a/dy_i) (dc_b/dy_j) <\delta y_i \delta y_j> - -File: gsl-ref.info, Node: Finite Difference Jacobian, Next: Iteration of the Minimization Algorithm, Prev: Providing the Function to be Minimized, Up: Nonlinear Least-Squares Fitting +For uncorrelated data the fluctuations of the underlying datapoints +satisfy <\delta y_i \delta y_j> = \sigma_i^2 \delta_{ij}, giving a +corresponding parameter covariance matrix of -38.4 Finite Difference Jacobian -=============================== + C_{ab} = \sum_i (1/w_i) (dc_a/dy_i) (dc_b/dy_i) + +When computing the covariance matrix for unweighted data, i.e. data +with unknown errors, the weight factors w_i in this sum are replaced by +the single estimate w = 1/\sigma^2, where \sigma^2 is the computed +variance of the residuals about the best-fit model, \sigma^2 = \sum (y_i +- Y(c,x_i))^2 / (n-p). This is referred to as the "variance-covariance +matrix". -For the algorithms which require a Jacobian matrix of derivatives of the -fit functions, there are times when an analytic Jacobian may be -unavailable or too expensive to compute. Therefore GSL supports -approximating the Jacobian numerically using finite differences of the -fit functions. This is typically done by setting the relevant function -pointers of the 'gsl_multifit_function_fdf' data type to NULL, however -the following functions allow the user to access the approximate -Jacobian directly if needed. - - -- Function: int gsl_multifit_fdfsolver_dif_df (const gsl_vector * X, - gsl_multifit_function_fdf * FDF, const gsl_vector * F, - gsl_matrix * J) - This function takes as input the current position X with the - function values computed at the current position F, along with FDF - which specifies the fit function and parameters and approximates - the N-by-P Jacobian J using forward finite differences: J_ij = d - f_i(x,params) / d x_j = (f_i(x^*,params) - f_i(x,params)) / d x_j. - where x^* has the jth element perturbed by \Delta x_j and \Delta - x_j = \epsilon |x_j|, where \epsilon is the square root of the - machine precision 'GSL_DBL_EPSILON'. - - -- Function: int gsl_multifit_fdfsolver_dif_fdf (const gsl_vector * X, - gsl_multifit_function_fdf * FDF, gsl_vector * F, gsl_matrix * - J) - This function computes the vector of function values F and the - approximate Jacobian J at the position vector X using the system - described in FDF. See 'gsl_multifit_fdfsolver_dif_df' for a - description of how the Jacobian is computed. + The standard deviations of the best-fit parameters are given by the +square root of the corresponding diagonal elements of the covariance +matrix, \sigma_{c_a} = \sqrt{C_{aa}}. The correlation coefficient of +the fit parameters c_a and c_b is given by \rho_{ab} = C_{ab} / +\sqrt{C_{aa} C_{bb}}.  -File: gsl-ref.info, Node: Iteration of the Minimization Algorithm, Next: Search Stopping Parameters for Minimization Algorithms, Prev: Finite Difference Jacobian, Up: Nonlinear Least-Squares Fitting - -38.5 Iteration -============== +File: gsl-ref.info, Node: Linear regression, Next: Multi-parameter regression, Prev: Fitting Overview, Up: Least-Squares Fitting -The following functions drive the iteration of each algorithm. Each -function performs one iteration to update the state of any solver of the -corresponding type. The same functions work for all solvers so that -different methods can be substituted at runtime without modifications to -the code. +38.2 Linear regression +====================== - -- Function: int gsl_multifit_fsolver_iterate (gsl_multifit_fsolver * - S) - -- Function: int gsl_multifit_fdfsolver_iterate (gsl_multifit_fdfsolver - * S) - These functions perform a single iteration of the solver S. If the - iteration encounters an unexpected problem then an error code will - be returned. The solver maintains a current estimate of the - best-fit parameters at all times. +The functions in this section are used to fit simple one or two +parameter linear regression models. The functions are declared in the +header file 'gsl_fit.h'. - The solver struct S contains the following entries, which can be used -to track the progress of the solution: +* Menu: -'gsl_vector * x' - The current position. +* Linear regression with a constant term:: +* Linear regression without a constant term:: -'gsl_vector * f' - The function value at the current position. + +File: gsl-ref.info, Node: Linear regression with a constant term, Next: Linear regression without a constant term, Up: Linear regression -'gsl_vector * dx' - The difference between the current position and the previous - position, i.e. the last step, taken as a vector. +38.2.1 Linear regression with a constant term +--------------------------------------------- -'gsl_matrix * J' - The Jacobian matrix at the current position (for the - 'gsl_multifit_fdfsolver' struct only) +The functions described in this section can be used to perform +least-squares fits to a straight line model, Y(c,x) = c_0 + c_1 x. + + -- Function: int gsl_fit_linear (const double * X, const size_t + XSTRIDE, const double * Y, const size_t YSTRIDE, size_t N, + double * C0, double * C1, double * COV00, double * COV01, + double * COV11, double * SUMSQ) + This function computes the best-fit linear regression coefficients + (C0,C1) of the model Y = c_0 + c_1 X for the dataset (X, Y), two + vectors of length N with strides XSTRIDE and YSTRIDE. The errors + on Y are assumed unknown so the variance-covariance matrix for the + parameters (C0, C1) is estimated from the scatter of the points + around the best-fit line and returned via the parameters (COV00, + COV01, COV11). The sum of squares of the residuals from the + best-fit line is returned in SUMSQ. Note: the correlation + coefficient of the data can be computed using + 'gsl_stats_correlation' (*note Correlation::), it does not depend + on the fit. + + -- Function: int gsl_fit_wlinear (const double * X, const size_t + XSTRIDE, const double * W, const size_t WSTRIDE, const double + * Y, const size_t YSTRIDE, size_t N, double * C0, double * C1, + double * COV00, double * COV01, double * COV11, double * + CHISQ) + This function computes the best-fit linear regression coefficients + (C0,C1) of the model Y = c_0 + c_1 X for the weighted dataset (X, + Y), two vectors of length N with strides XSTRIDE and YSTRIDE. The + vector W, of length N and stride WSTRIDE, specifies the weight of + each datapoint. The weight is the reciprocal of the variance for + each datapoint in Y. - The best-fit information also can be accessed with the following -auxiliary functions, + The covariance matrix for the parameters (C0, C1) is computed using + the weights and returned via the parameters (COV00, COV01, COV11). + The weighted sum of squares of the residuals from the best-fit + line, \chi^2, is returned in CHISQ. - -- Function: gsl_vector * gsl_multifit_fsolver_position (const - gsl_multifit_fsolver * S) - -- Function: gsl_vector * gsl_multifit_fdfsolver_position (const - gsl_multifit_fdfsolver * S) - These functions return the current position (i.e. best-fit - parameters) 's->x' of the solver S. + -- Function: int gsl_fit_linear_est (double X, double C0, double C1, + double COV00, double COV01, double COV11, double * Y, double * + Y_ERR) + This function uses the best-fit linear regression coefficients C0, + C1 and their covariance COV00, COV01, COV11 to compute the fitted + function Y and its standard deviation Y_ERR for the model Y = c_0 + + c_1 X at the point X.  -File: gsl-ref.info, Node: Search Stopping Parameters for Minimization Algorithms, Next: High Level Driver, Prev: Iteration of the Minimization Algorithm, Up: Nonlinear Least-Squares Fitting +File: gsl-ref.info, Node: Linear regression without a constant term, Prev: Linear regression with a constant term, Up: Linear regression -38.6 Search Stopping Parameters -=============================== +38.2.2 Linear regression without a constant term +------------------------------------------------ -A minimization procedure should stop when one of the following -conditions is true: +The functions described in this section can be used to perform +least-squares fits to a straight line model without a constant term, Y = +c_1 X. - * A minimum has been found to within the user-specified precision. + -- Function: int gsl_fit_mul (const double * X, const size_t XSTRIDE, + const double * Y, const size_t YSTRIDE, size_t N, double * C1, + double * COV11, double * SUMSQ) + This function computes the best-fit linear regression coefficient + C1 of the model Y = c_1 X for the datasets (X, Y), two vectors of + length N with strides XSTRIDE and YSTRIDE. The errors on Y are + assumed unknown so the variance of the parameter C1 is estimated + from the scatter of the points around the best-fit line and + returned via the parameter COV11. The sum of squares of the + residuals from the best-fit line is returned in SUMSQ. - * A user-specified maximum number of iterations has been reached. + -- Function: int gsl_fit_wmul (const double * X, const size_t XSTRIDE, + const double * W, const size_t WSTRIDE, const double * Y, + const size_t YSTRIDE, size_t N, double * C1, double * COV11, + double * SUMSQ) + This function computes the best-fit linear regression coefficient + C1 of the model Y = c_1 X for the weighted datasets (X, Y), two + vectors of length N with strides XSTRIDE and YSTRIDE. The vector + W, of length N and stride WSTRIDE, specifies the weight of each + datapoint. The weight is the reciprocal of the variance for each + datapoint in Y. - * An error has occurred. + The variance of the parameter C1 is computed using the weights and + returned via the parameter COV11. The weighted sum of squares of + the residuals from the best-fit line, \chi^2, is returned in CHISQ. -The handling of these conditions is under user control. The functions -below allow the user to test the current estimate of the best-fit -parameters in several standard ways. + -- Function: int gsl_fit_mul_est (double X, double C1, double COV11, + double * Y, double * Y_ERR) + This function uses the best-fit linear regression coefficient C1 + and its covariance COV11 to compute the fitted function Y and its + standard deviation Y_ERR for the model Y = c_1 X at the point X. - -- Function: int gsl_multifit_test_delta (const gsl_vector * DX, const - gsl_vector * X, double EPSABS, double EPSREL) + +File: gsl-ref.info, Node: Multi-parameter regression, Next: Regularized regression, Prev: Linear regression, Up: Least-Squares Fitting - This function tests for the convergence of the sequence by - comparing the last step DX with the absolute error EPSABS and - relative error EPSREL to the current position X. The test returns - 'GSL_SUCCESS' if the following condition is achieved, +38.3 Multi-parameter regression +=============================== - |dx_i| < epsabs + epsrel |x_i| +This section describes routines which perform least squares fits to a +linear model by minimizing the cost function + \chi^2 = \sum_i w_i (y_i - \sum_j X_ij c_j)^2 = || y - Xc ||_W^2 + where y is a vector of n observations, X is an n-by-p matrix of +predictor variables, c is a vector of the p unknown best-fit parameters +to be estimated, and ||r||_W^2 = r^T W r. The matrix W = +diag(w_1,w_2,...,w_n) defines the weights or uncertainties of the +observation vector. - for each component of X and returns 'GSL_CONTINUE' otherwise. + This formulation can be used for fits to any number of functions +and/or variables by preparing the n-by-p matrix X appropriately. For +example, to fit to a p-th order polynomial in X, use the following +matrix, - -- Function: int gsl_multifit_test_gradient (const gsl_vector * G, - double EPSABS) - This function tests the residual gradient G against the absolute - error bound EPSABS. Mathematically, the gradient should be exactly - zero at the minimum. The test returns 'GSL_SUCCESS' if the - following condition is achieved, + X_{ij} = x_i^j - \sum_i |g_i| < epsabs +where the index i runs over the observations and the index j runs from 0 +to p-1. - and returns 'GSL_CONTINUE' otherwise. This criterion is suitable - for situations where the precise location of the minimum, x, is - unimportant provided a value can be found where the gradient is - small enough. + To fit to a set of p sinusoidal functions with fixed frequencies +\omega_1, \omega_2, ..., \omega_p, use, - -- Function: int gsl_multifit_gradient (const gsl_matrix * J, const - gsl_vector * F, gsl_vector * G) - This function computes the gradient G of \Phi(x) = (1/2) ||F(x)||^2 - from the Jacobian matrix J and the function values F, using the - formula g = J^T f. + X_{ij} = sin(\omega_j x_i) - -File: gsl-ref.info, Node: High Level Driver, Next: Minimization Algorithms using Derivatives, Prev: Search Stopping Parameters for Minimization Algorithms, Up: Nonlinear Least-Squares Fitting +To fit to p independent variables x_1, x_2, ..., x_p, use, -38.7 High Level Driver -====================== + X_{ij} = x_j(i) -These routines provide a high level wrapper that combine the iteration -and convergence testing for easy use. +where x_j(i) is the i-th value of the predictor variable x_j. - -- Function: int gsl_multifit_fsolver_driver (gsl_multifit_fsolver * S, - const size_t MAXITER, const double EPSABS, const double - EPSREL) - -- Function: int gsl_multifit_fdfsolver_driver (gsl_multifit_fdfsolver - * S, const size_t MAXITER, const double EPSABS, const double - EPSREL) - These functions iterate the solver S for a maximum of MAXITER - iterations. After each iteration, the system is tested for - convergence using 'gsl_multifit_test_delta' with the error - tolerances EPSABS and EPSREL. + The solution of the general linear least-squares system requires an +additional working space for intermediate results, such as the singular +value decomposition of the matrix X. - -File: gsl-ref.info, Node: Minimization Algorithms using Derivatives, Next: Minimization Algorithms without Derivatives, Prev: High Level Driver, Up: Nonlinear Least-Squares Fitting + These functions are declared in the header file 'gsl_multifit.h'. -38.8 Minimization Algorithms using Derivatives -============================================== + -- Function: gsl_multifit_linear_workspace * gsl_multifit_linear_alloc + (const size_t N, const size_t P) + This function allocates a workspace for fitting a model to a + maximum of N observations using a maximum of P parameters. The + user may later supply a smaller least squares system if desired. + The size of the workspace is O(np + p^2). -The minimization algorithms described in this section make use of both -the function and its derivative. They require an initial guess for the -location of the minimum. There is no absolute guarantee of -convergence--the function must be suitable for this technique and the -initial guess must be sufficiently close to the minimum for it to work. + -- Function: void gsl_multifit_linear_free + (gsl_multifit_linear_workspace * WORK) + This function frees the memory associated with the workspace W. - -- Derivative Solver: gsl_multifit_fdfsolver_lmsder - This is a robust and efficient version of the Levenberg-Marquardt - algorithm as implemented in the scaled LMDER routine in MINPACK. - Minpack was written by Jorge J. More', Burton S. Garbow and Kenneth - E. Hillstrom. + -- Function: int gsl_multifit_linear_svd (const gsl_matrix * X, + gsl_multifit_linear_workspace * WORK) + This function performs a singular value decomposition of the matrix + X and stores the SVD factors internally in WORK. - The algorithm uses a generalized trust region to keep each step - under control. In order to be accepted a proposed new position x' - must satisfy the condition |D (x' - x)| < \delta, where D is a - diagonal scaling matrix and \delta is the size of the trust region. - The components of D are computed internally, using the column norms - of the Jacobian to estimate the sensitivity of the residual to each - component of x. This improves the behavior of the algorithm for - badly scaled functions. + -- Function: int gsl_multifit_linear_bsvd (const gsl_matrix * X, + gsl_multifit_linear_workspace * WORK) + This function performs a singular value decomposition of the matrix + X and stores the SVD factors internally in WORK. The matrix X is + first balanced by applying column scaling factors to improve the + accuracy of the singular values. - On each iteration the algorithm attempts to minimize the linear - system |F + J p| subject to the constraint |D p| < \Delta. The - solution to this constrained linear system is found using the - Levenberg-Marquardt method. + -- Function: int gsl_multifit_linear (const gsl_matrix * X, const + gsl_vector * Y, gsl_vector * C, gsl_matrix * COV, double * + CHISQ, gsl_multifit_linear_workspace * WORK) + This function computes the best-fit parameters C of the model y = X + c for the observations Y and the matrix of predictor variables X, + using the preallocated workspace provided in WORK. The p-by-p + variance-covariance matrix of the model parameters COV is set to + \sigma^2 (X^T X)^{-1}, where \sigma is the standard deviation of + the fit residuals. The sum of squares of the residuals from the + best-fit, \chi^2, is returned in CHISQ. If the coefficient of + determination is desired, it can be computed from the expression + R^2 = 1 - \chi^2 / TSS, where the total sum of squares (TSS) of the + observations Y may be computed from 'gsl_stats_tss'. - The proposed step is now tested by evaluating the function at the - resulting point, x'. If the step reduces the norm of the function - sufficiently, and follows the predicted behavior of the function - within the trust region, then it is accepted and the size of the - trust region is increased. If the proposed step fails to improve - the solution, or differs significantly from the expected behavior - within the trust region, then the size of the trust region is - decreased and another trial step is computed. - - The algorithm also monitors the progress of the solution and - returns an error if the changes in the solution are smaller than - the machine precision. The possible error codes are, - - 'GSL_ETOLF' - the decrease in the function falls below machine precision - - 'GSL_ETOLX' - the change in the position vector falls below machine - precision - - 'GSL_ETOLG' - the norm of the gradient, relative to the norm of the - function, falls below machine precision + The best-fit is found by singular value decomposition of the matrix + X using the modified Golub-Reinsch SVD algorithm, with column + scaling to improve the accuracy of the singular values. Any + components which have zero singular value (to machine precision) + are discarded from the fit. - 'GSL_ENOPROG' - the routine has made 10 or more attempts to find a suitable - trial step without success (but subsequent calls can be made - to continue the search).(1) - - These error codes indicate that further iterations will be unlikely - to change the solution from its current value. - - -- Derivative Solver: gsl_multifit_fdfsolver_lmder - This is an unscaled version of the LMDER algorithm. The elements - of the diagonal scaling matrix D are set to 1. This algorithm may - be useful in circumstances where the scaled version of LMDER - converges too slowly, or the function is already scaled - appropriately. + -- Function: int gsl_multifit_linear_tsvd (const gsl_matrix * X, const + gsl_vector * Y, const double TOL, gsl_vector * C, gsl_matrix * + COV, double * CHISQ, size_t * RANK, + gsl_multifit_linear_workspace * WORK) + This function computes the best-fit parameters C of the model y = X + c for the observations Y and the matrix of predictor variables X, + using a truncated SVD expansion. Singular values which satisfy s_i + \le tol \times s_0 are discarded from the fit, where s_0 is the + largest singular value. The p-by-p variance-covariance matrix of + the model parameters COV is set to \sigma^2 (X^T X)^{-1}, where + \sigma is the standard deviation of the fit residuals. The sum of + squares of the residuals from the best-fit, \chi^2, is returned in + CHISQ. The effective rank (number of singular values used in + solution) is returned in RANK. If the coefficient of determination + is desired, it can be computed from the expression R^2 = 1 - \chi^2 + / TSS, where the total sum of squares (TSS) of the observations Y + may be computed from 'gsl_stats_tss'. - ---------- Footnotes ---------- + -- Function: int gsl_multifit_wlinear (const gsl_matrix * X, const + gsl_vector * W, const gsl_vector * Y, gsl_vector * C, + gsl_matrix * COV, double * CHISQ, + gsl_multifit_linear_workspace * WORK) + This function computes the best-fit parameters C of the weighted + model y = X c for the observations Y with weights W and the matrix + of predictor variables X, using the preallocated workspace provided + in WORK. The p-by-p covariance matrix of the model parameters COV + is computed as (X^T W X)^{-1}. The weighted sum of squares of the + residuals from the best-fit, \chi^2, is returned in CHISQ. If the + coefficient of determination is desired, it can be computed from + the expression R^2 = 1 - \chi^2 / WTSS, where the weighted total + sum of squares (WTSS) of the observations Y may be computed from + 'gsl_stats_wtss'. - (1) The return code 'GSL_CONTINUE' was used for this case in versions -prior to 1.14. + -- Function: int gsl_multifit_wlinear_tsvd (const gsl_matrix * X, const + gsl_vector * W, const gsl_vector * Y, const double TOL, + gsl_vector * C, gsl_matrix * COV, double * CHISQ, size_t * + RANK, gsl_multifit_linear_workspace * WORK) + This function computes the best-fit parameters C of the weighted + model y = X c for the observations Y with weights W and the matrix + of predictor variables X, using a truncated SVD expansion. + Singular values which satisfy s_i \le tol \times s_0 are discarded + from the fit, where s_0 is the largest singular value. The p-by-p + covariance matrix of the model parameters COV is computed as (X^T W + X)^{-1}. The weighted sum of squares of the residuals from the + best-fit, \chi^2, is returned in CHISQ. The effective rank of the + system (number of singular values used in the solution) is returned + in RANK. If the coefficient of determination is desired, it can be + computed from the expression R^2 = 1 - \chi^2 / WTSS, where the + weighted total sum of squares (WTSS) of the observations Y may be + computed from 'gsl_stats_wtss'. - -File: gsl-ref.info, Node: Minimization Algorithms without Derivatives, Next: Computing the covariance matrix of best fit parameters, Prev: Minimization Algorithms using Derivatives, Up: Nonlinear Least-Squares Fitting + -- Function: int gsl_multifit_linear_est (const gsl_vector * X, const + gsl_vector * C, const gsl_matrix * COV, double * Y, double * + Y_ERR) + This function uses the best-fit multilinear regression coefficients + C and their covariance matrix COV to compute the fitted function + value Y and its standard deviation Y_ERR for the model y = x.c at + the point X. -38.9 Minimization Algorithms without Derivatives -================================================ + -- Function: int gsl_multifit_linear_residuals (const gsl_matrix * X, + const gsl_vector * Y, const gsl_vector * C, gsl_vector * R) + This function computes the vector of residuals r = y - X c for the + observations Y, coefficients C and matrix of predictor variables X. -There are no algorithms implemented in this section at the moment. + -- Function: size_t gsl_multifit_linear_rank (const double TOL, const + gsl_multifit_linear_workspace * WORK) + This function returns the rank of the matrix X which must first + have its singular value decomposition computed. The rank is + computed by counting the number of singular values \sigma_j which + satisfy \sigma_j > tol \times \sigma_0, where \sigma_0 is the + largest singular value.  -File: gsl-ref.info, Node: Computing the covariance matrix of best fit parameters, Next: Example programs for Nonlinear Least-Squares Fitting, Prev: Minimization Algorithms without Derivatives, Up: Nonlinear Least-Squares Fitting - -38.10 Computing the covariance matrix of best fit parameters -============================================================ +File: gsl-ref.info, Node: Regularized regression, Next: Robust linear regression, Prev: Multi-parameter regression, Up: Least-Squares Fitting - -- Function: int gsl_multifit_covar (const gsl_matrix * J, double - EPSREL, gsl_matrix * COVAR) - This function uses the Jacobian matrix J to compute the covariance - matrix of the best-fit parameters, COVAR. The parameter EPSREL is - used to remove linear-dependent columns when J is rank deficient. +38.4 Regularized regression +=========================== - The covariance matrix is given by, +Ordinary weighted least squares models seek a solution vector c which +minimizes the residual + \chi^2 = || y - Xc ||_W^2 + where y is the n-by-1 observation vector, X is the n-by-p design +matrix, c is the p-by-1 solution vector, W = diag(w_1,...,w_n) is the +data weighting matrix, and ||r||_W^2 = r^T W r. In cases where the +least squares matrix X is ill-conditioned, small perturbations (ie: +noise) in the observation vector could lead to widely different solution +vectors c. One way of dealing with ill-conditioned matrices is to use a +"truncated SVD" in which small singular values, below some given +tolerance, are discarded from the solution. The truncated SVD method is +available using the functions 'gsl_multifit_linear_tsvd' and +'gsl_multifit_wlinear_tsvd'. Another way to help solve ill-posed +problems is to include a regularization term in the least squares +minimization + \chi^2 = || y - Xc ||_W^2 + \lambda^2 || L c ||^2 + for a suitably chosen regularization parameter \lambda and matrix L. +This type of regularization is known as Tikhonov, or ridge, regression. +In some applications, L is chosen as the identity matrix, giving +preference to solution vectors c with smaller norms. Including this +regularization term leads to the explicit "normal equations" solution + c = ( X^T W X + \lambda^2 L^T L )^-1 X^T W y + which reduces to the ordinary least squares solution when L = 0. In +practice, it is often advantageous to transform a regularized least +squares system into the form + \chi^2 = || y~ - X~ c~ ||^2 + \lambda^2 || c~ ||^2 + This is known as the Tikhonov "standard form" and has the normal +equations solution \tilde{c} = \left( \tilde{X}^T \tilde{X} + \lambda^2 +I \right)^{-1} \tilde{X}^T \tilde{y}. For an m-by-p matrix L which is +full rank and has m >= p (ie: L is square or has more rows than +columns), we can calculate the "thin" QR decomposition of L, and note +that ||L c|| = ||R c|| since the Q factor will not change the norm. +Since R is p-by-p, we can then use the transformation + X~ = sqrt(W) X R^-1 + y~ = sqrt(W) y + c~ = R c + to achieve the standard form. For a rectangular matrix L with m < p, +a more sophisticated approach is needed (see Hansen 1998, chapter 2.3). +In practice, the normal equations solution above is not desirable due to +numerical instabilities, and so the system is solved using the singular +value decomposition of the matrix \tilde{X}. The matrix L is often +chosen as the identity matrix, or as a first or second finite difference +operator, to ensure a smoothly varying coefficient vector c, or as a +diagonal matrix to selectively damp each model parameter differently. +If L \ne I, the user must first convert the least squares problem to +standard form using 'gsl_multifit_linear_stdform1' or +'gsl_multifit_linear_stdform2', solve the system, and then backtransform +the solution vector to recover the solution of the original problem (see +'gsl_multifit_linear_genform1' and 'gsl_multifit_linear_genform2'). + + In many regularization problems, care must be taken when choosing the +regularization parameter \lambda. Since both the residual norm ||y - X +c|| and solution norm ||L c|| are being minimized, the parameter \lambda +represents a tradeoff between minimizing either the residuals or the +solution vector. A common tool for visualizing the comprimise between +the minimization of these two quantities is known as the L-curve. The +L-curve is a log-log plot of the residual norm ||y - X c|| on the +horizontal axis and the solution norm ||L c|| on the vertical axis. +This curve nearly always as an L shaped appearance, with a distinct +corner separating the horizontal and vertical sections of the curve. +The regularization parameter corresponding to this corner is often +chosen as the optimal value. GSL provides routines to calculate the +L-curve for all relevant regularization parameters as well as locating +the corner. + + Another method of choosing the regularization parameter is known as +Generalized Cross Validation (GCV). This method is based on the idea +that if an arbitrary element y_i is left out of the right hand side, the +resulting regularized solution should predict this element accurately. +This leads to choosing the parameter \lambda which minimizes the GCV +function + + G(\lambda) = (||y - X c_{\lambda}||^2) / Tr(I_n - X X^I)^2 + + where X_{\lambda}^I is the matrix which relates the solution +c_{\lambda} to the right hand side y, ie: c_{\lambda} = X_{\lambda}^I y. +GSL provides routines to compute the GCV curve and its minimum. + +For most applications, the steps required to solve a regularized least +squares problem are as follows: + + 1. Construct the least squares system (X, y, W, L) + + 2. Transform the system to standard form (\tilde{X},\tilde{y}). This + step can be skipped if L = I_p and W = I_n. + + 3. Calculate the SVD of \tilde{X}. + + 4. Determine an appropriate regularization parameter \lambda (using + for example L-curve or GCV analysis). + + 5. Solve the standard form system using the chosen \lambda and the SVD + of \tilde{X}. + + 6. Backtransform the standard form solution \tilde{c} to recover the + original solution vector c. + + -- Function: int gsl_multifit_linear_stdform1 (const gsl_vector * L, + const gsl_matrix * X, const gsl_vector * Y, gsl_matrix * XS, + gsl_vector * YS, gsl_multifit_linear_workspace * WORK) + -- Function: int gsl_multifit_linear_wstdform1 (const gsl_vector * L, + const gsl_matrix * X, const gsl_vector * W, const gsl_vector * + Y, gsl_matrix * XS, gsl_vector * YS, + gsl_multifit_linear_workspace * WORK) + These functions define a regularization matrix L = + diag(l_0,l_1,...,l_{p-1}). The diagonal matrix element l_i is + provided by the ith element of the input vector L. The n-by-p + least squares matrix X and vector Y of length n are then converted + to standard form as described above and the parameters + (\tilde{X},\tilde{y}) are stored in XS and YS on output. XS and YS + have the same dimensions as X and Y. Optional data weights may be + supplied in the vector W of length n. In order to apply this + transformation, L^{-1} must exist and so none of the l_i may be + zero. After the standard form system has been solved, use + 'gsl_multifit_linear_genform1' to recover the original solution + vector. It is allowed to have X = XS and Y = YS for an in-place + transform. In order to perform a weighted regularized fit with L = + I, the user may call 'gsl_multifit_linear_applyW' to convert to + standard form. + + -- Function: int gsl_multifit_linear_L_decomp (gsl_matrix * L, + gsl_vector * TAU) + This function factors the m-by-p regularization matrix L into a + form needed for the later transformation to standard form. L may + have any number of rows m. If m \ge p the QR decomposition of L is + computed and stored in L on output. If m < p, the QR decomposition + of L^T is computed and stored in L on output. On output, the + Householder scalars are stored in the vector TAU of size MIN(m,p). + These outputs will be used by 'gsl_multifit_linear_wstdform2' to + complete the transformation to standard form. + + -- Function: int gsl_multifit_linear_stdform2 (const gsl_matrix * LQR, + const gsl_vector * LTAU, const gsl_matrix * X, const + gsl_vector * Y, gsl_matrix * XS, gsl_vector * YS, gsl_matrix * + M, gsl_multifit_linear_workspace * WORK) + -- Function: int gsl_multifit_linear_wstdform2 (const gsl_matrix * LQR, + const gsl_vector * LTAU, const gsl_matrix * X, const + gsl_vector * W, const gsl_vector * Y, gsl_matrix * XS, + gsl_vector * YS, gsl_matrix * M, gsl_multifit_linear_workspace + * WORK) + These functions convert the least squares system (X,Y,W,L) to + standard form (\tilde{X},\tilde{y}) which are stored in XS and YS + respectively. The m-by-p regularization matrix L is specified by + the inputs LQR and LTAU, which are outputs from + 'gsl_multifit_linear_L_decomp'. The dimensions of the standard + form parameters (\tilde{X},\tilde{y}) depend on whether m is larger + or less than p. For m \ge p, XS is n-by-p, YS is n-by-1, and M is + not used. For m < p, XS is (n - p + m)-by-m, YS is (n - p + + m)-by-1, and M is additional n-by-p workspace, which is required to + recover the original solution vector after the system has been + solved (see 'gsl_multifit_linear_genform2'). Optional data weights + may be supplied in the vector W of length n, where W = diag(w). + + -- Function: int gsl_multifit_linear_solve (const double LAMBDA, const + gsl_matrix * XS, const gsl_vector * YS, gsl_vector * CS, + double * RNORM, double * SNORM, gsl_multifit_linear_workspace + * WORK) + This function computes the regularized best-fit parameters + \tilde{c} which minimize the cost function \chi^2 = || \tilde{y} - + \tilde{X} \tilde{c} ||^2 + \lambda^2 || \tilde{c} ||^2 which is in + standard form. The least squares system must therefore be + converted to standard form prior to calling this function. The + observation vector \tilde{y} is provided in YS and the matrix of + predictor variables \tilde{X} in XS. The solution vector \tilde{c} + is returned in CS, which has length min(m,p). The SVD of XS must + be computed prior to calling this function, using + 'gsl_multifit_linear_svd'. The regularization parameter \lambda is + provided in LAMBDA. The residual norm || \tilde{y} - \tilde{X} + \tilde{c} || = ||y - X c||_W is returned in RNORM. The solution + norm || \tilde{c} || = ||L c|| is returned in SNORM. - covar = (J^T J)^{-1} + -- Function: int gsl_multifit_linear_genform1 (const gsl_vector * L, + const gsl_vector * CS, gsl_vector * C, + gsl_multifit_linear_workspace * WORK) + After a regularized system has been solved with L = + diag(\l_0,\l_1,...,\l_{p-1}), this function backtransforms the + standard form solution vector CS to recover the solution vector of + the original problem C. The diagonal matrix elements l_i are + provided in the vector L. It is allowed to have C = CS for an + in-place transform. + + -- Function: int gsl_multifit_linear_genform2 (const gsl_matrix * LQR, + const gsl_vector * LTAU, const gsl_matrix * X, const + gsl_vector * Y, const gsl_vector * CS, const gsl_matrix * M, + gsl_vector * C, gsl_multifit_linear_workspace * WORK) + -- Function: int gsl_multifit_linear_wgenform2 (const gsl_matrix * LQR, + const gsl_vector * LTAU, const gsl_matrix * X, const + gsl_vector * W, const gsl_vector * Y, const gsl_vector * CS, + const gsl_matrix * M, gsl_vector * C, + gsl_multifit_linear_workspace * WORK) + After a regularized system has been solved with a general + rectangular matrix L, specified by (LQR,LTAU), this function + backtransforms the standard form solution CS to recover the + solution vector of the original problem, which is stored in C, of + length p. The original least squares matrix and observation vector + are provided in X and Y respectively. M is the matrix computed by + 'gsl_multifit_linear_stdform2'. For weighted fits, the weight + vector W must also be supplied. + + -- Function: int gsl_multifit_linear_applyW (const gsl_matrix * X, + const gsl_vector * W, const gsl_vector * Y, gsl_matrix * WX, + gsl_vector * WY) + For weighted least squares systems with L = I, this function may be + used to convert the system to standard form by applying the weight + matrix W = diag(W) to the least squares matrix X and observation + vector Y. On output, WX is equal to W^{1/2} X and WY is equal to + W^{1/2} y. It is allowed for WX = X and WY = Y for an in-place + transform. - and is computed by QR decomposition of J with column-pivoting. Any - columns of R which satisfy + -- Function: int gsl_multifit_linear_lcurve (const gsl_vector * Y, + gsl_vector * REG_PARAM, gsl_vector * RHO, gsl_vector * ETA, + gsl_multifit_linear_workspace * WORK) + This function computes the L-curve for a least squares system using + the right hand side vector Y and the SVD decomposition of the least + squares matrix X, which must be provided to + 'gsl_multifit_linear_svd' prior to calling this function. The + output vectors REG_PARAM, RHO, and ETA must all be the same size, + and will contain the regularization parameters \lambda_i, residual + norms ||y - X c_i||, and solution norms || L c_i || which compose + the L-curve, where c_i is the regularized solution vector + corresponding to \lambda_i. The user may determine the number of + points on the L-curve by adjusting the size of these input arrays. + The regularization parameters \lambda_i are estimated from the + singular values of X, and chosen to represent the most relevant + portion of the L-curve. + + -- Function: int gsl_multifit_linear_lcorner (const gsl_vector * RHO, + const gsl_vector * ETA, size_t * IDX) + This function attempts to locate the corner of the L-curve (||y - X + c||, ||L c||) defined by the RHO and ETA input arrays respectively. + The corner is defined as the point of maximum curvature of the + L-curve in log-log scale. The RHO and ETA arrays can be outputs of + 'gsl_multifit_linear_lcurve'. The algorithm used simply fits a + circle to 3 consecutive points on the L-curve and uses the circle's + radius to determine the curvature at the middle point. Therefore, + the input array sizes must be \ge 3. With more points provided for + the L-curve, a better estimate of the curvature can be obtained. + The array index corresponding to maximum curvature (ie: the corner) + is returned in IDX. If the input arrays contain colinear points, + this function could fail and return 'GSL_EINVAL'. + + -- Function: int gsl_multifit_linear_lcorner2 (const gsl_vector * + REG_PARAM, const gsl_vector * ETA, size_t * IDX) + This function attempts to locate the corner of an alternate L-curve + (\lambda^2, ||L c||^2) studied by Rezghi and Hosseini, 2009. This + alternate L-curve can provide better estimates of the + regularization parameter for smooth solution vectors. The + regularization parameters \lambda and solution norms ||L c|| are + provided in the REG_PARAM and ETA input arrays respectively. The + corner is defined as the point of maximum curvature of this + alternate L-curve in linear scale. The REG_PARAM and ETA arrays + can be outputs of 'gsl_multifit_linear_lcurve'. The algorithm used + simply fits a circle to 3 consecutive points on the L-curve and + uses the circle's radius to determine the curvature at the middle + point. Therefore, the input array sizes must be \ge 3. With more + points provided for the L-curve, a better estimate of the curvature + can be obtained. The array index corresponding to maximum + curvature (ie: the corner) is returned in IDX. If the input arrays + contain colinear points, this function could fail and return + 'GSL_EINVAL'. - |R_{kk}| <= epsrel |R_{11}| + -- Function: int gsl_multifit_linear_gcv_init(const gsl_vector * Y, + gsl_vector * REG_PARAM, gsl_vector * UTY, double * DELTA0, + gsl_multifit_linear_workspace * WORK) + This function performs some initialization in preparation for + computing the GCV curve and its minimum. The right hand side + vector is provided in Y. On output, REG_PARAM is set to a vector + of regularization parameters in decreasing order and may be of any + size. The vector UTY of size p is set to U^T y. The parameter + DELTA0 is needed for subsequent steps of the GCV calculation. + + -- Function: int gsl_multifit_linear_gcv_curve(const gsl_vector * + REG_PARAM, const gsl_vector * UTY, const double DELTA0, + gsl_vector * G, gsl_multifit_linear_workspace * WORK) + This funtion calculates the GCV curve G(\lambda) and stores it in G + on output, which must be the same size as REG_PARAM. The inputs + REG_PARAM, UTY and DELTA0 are computed in + 'gsl_multifit_linear_gcv_init'. + + -- Function: int gsl_multifit_linear_gcv_min(const gsl_vector * + REG_PARAM, const gsl_vector * UTY, const gsl_vector * G, const + double DELTA0, double * LAMBDA, gsl_multifit_linear_workspace + * WORK) + This function computes the value of the regularization parameter + which minimizes the GCV curve G(\lambda) and stores it in LAMBDA. + The input G is calculated by 'gsl_multifit_linear_gcv_curve' and + the inputs REG_PARAM, UTY and DELTA0 are computed by + 'gsl_multifit_linear_gcv_init'. - are considered linearly-dependent and are excluded from the - covariance matrix (the corresponding rows and columns of the - covariance matrix are set to zero). + -- Function: double gsl_multifit_linear_gcv_calc(const double LAMBDA, + const gsl_vector * UTY, const double DELTA0, + gsl_multifit_linear_workspace * WORK) + This function returns the value of the GCV curve G(\lambda) + corresponding to the input LAMBDA. - If the minimisation uses the weighted least-squares function f_i = - (Y(x, t_i) - y_i) / \sigma_i then the covariance matrix above gives - the statistical error on the best-fit parameters resulting from the - Gaussian errors \sigma_i on the underlying data y_i. This can be - verified from the relation \delta f = J \delta c and the fact that - the fluctuations in f from the data y_i are normalised by \sigma_i - and so satisfy <\delta f \delta f^T> = I. + -- Function: int gsl_multifit_linear_gcv(const gsl_vector * Y, + gsl_vector * REG_PARAM, gsl_vector * G, double * LAMBDA, + double * G_LAMBDA, gsl_multifit_linear_workspace * WORK) + This function combines the steps 'gcv_init', 'gcv_curve', and + 'gcv_min' defined above into a single function. The input Y is the + right hand side vector. On output, REG_PARAM and G, which must be + the same size, are set to vectors of \lambda and G(\lambda) values + respectively. The output LAMBDA is set to the optimal value of + \lambda which minimizes the GCV curve. The minimum value of the + GCV curve is returned in G_LAMBDA. + + -- Function: int gsl_multifit_linear_Lk (const size_t P, const size_t + K, gsl_matrix * L) + This function computes the discrete approximation to the derivative + operator L_k of order K on a regular grid of P points and stores it + in L. The dimensions of L are (p-k)-by-p. - For an unweighted least-squares function f_i = (Y(x, t_i) - y_i) - the covariance matrix above should be multiplied by the variance of - the residuals about the best-fit \sigma^2 = \sum (y_i - Y(x,t_i))^2 - / (n-p) to give the variance-covariance matrix \sigma^2 C. This - estimates the statistical error on the best-fit parameters from the - scatter of the underlying data. + -- Function: int gsl_multifit_linear_Lsobolev (const size_t P, const + size_t KMAX, const gsl_vector * ALPHA, gsl_matrix * L, + gsl_multifit_linear_workspace * WORK) + This function computes the regularization matrix L corresponding to + the weighted Sobolov norm ||L c||^2 = \sum_k \alpha_k^2 ||L_k c||^2 + where L_k approximates the derivative operator of order k. This + regularization norm can be useful in applications where it is + necessary to smooth several derivatives of the solution. P is the + number of model parameters, KMAX is the highest derivative to + include in the summation above, and ALPHA is the vector of weights + of size KMAX + 1, where ALPHA[k] = \alpha_k is the weight assigned + to the derivative of order k. The output matrix L is size P-by-P + and upper triangular. - For more information about covariance matrices see *note Fitting - Overview::. + -- Function: double gsl_multifit_linear_rcond (const + gsl_multifit_linear_workspace * WORK) + This function returns the reciprocal condition number of the least + squares matrix X, defined as the ratio of the smallest and largest + singular values, rcond = \sigma_{min}/\sigma_{max}. The routine + 'gsl_multifit_linear_svd' must first be called to compute the SVD + of X.  -File: gsl-ref.info, Node: Example programs for Nonlinear Least-Squares Fitting, Next: References and Further Reading for Nonlinear Least-Squares Fitting, Prev: Computing the covariance matrix of best fit parameters, Up: Nonlinear Least-Squares Fitting - -38.11 Examples -============== +File: gsl-ref.info, Node: Robust linear regression, Next: Large Dense Linear Systems, Prev: Regularized regression, Up: Least-Squares Fitting -The following example program fits a weighted exponential model with -background to experimental data, Y = A \exp(-\lambda t) + b. The first -part of the program sets up the functions 'expb_f' and 'expb_df' to -calculate the model and its Jacobian. The appropriate fitting function -is given by, - - f_i = ((A \exp(-\lambda t_i) + b) - y_i)/\sigma_i +38.5 Robust linear regression +============================= -where we have chosen t_i = i. The Jacobian matrix J is the derivative -of these functions with respect to the three parameters (A, \lambda, b). -It is given by, +Ordinary least squares (OLS) models are often heavily influenced by the +presence of outliers. Outliers are data points which do not follow the +general trend of the other observations, although there is strictly no +precise definition of an outlier. Robust linear regression refers to +regression algorithms which are robust to outliers. The most common +type of robust regression is M-estimation. The general M-estimator +minimizes the objective function - J_{ij} = d f_i / d x_j + \sum_i \rho(e_i) = \sum_i \rho (y_i - Y(c, x_i)) -where x_0 = A, x_1 = \lambda and x_2 = b. + where e_i = y_i - Y(c, x_i) is the residual of the ith data point, +and \rho(e_i) is a function which should have the following properties: + \rho(e) \ge 0 + \rho(0) = 0 + \rho(-e) = \rho(e) + \rho(e_1) > \rho(e_2) for |e_1| > |e_2| +The special case of ordinary least squares is given by \rho(e_i) = +e_i^2. Letting \psi = \rho' be the derivative of \rho, differentiating +the objective function with respect to the coefficients c and setting +the partial derivatives to zero produces the system of equations - /* expfit.c -- model functions for exponential + background */ + \sum_i \psi(e_i) X_i = 0 - struct data { - size_t n; - double * y; - double * sigma; - }; + where X_i is a vector containing row i of the design matrix X. Next, +we define a weight function w(e) = \psi(e)/e, and let w_i = w(e_i): - int - expb_f (const gsl_vector * x, void *data, - gsl_vector * f) - { - size_t n = ((struct data *)data)->n; - double *y = ((struct data *)data)->y; - double *sigma = ((struct data *) data)->sigma; + \sum_i w_i e_i X_i = 0 - double A = gsl_vector_get (x, 0); - double lambda = gsl_vector_get (x, 1); - double b = gsl_vector_get (x, 2); + This system of equations is equivalent to solving a weighted ordinary +least squares problem, minimizing \chi^2 = \sum_i w_i e_i^2. The +weights however, depend on the residuals e_i, which depend on the +coefficients c, which depend on the weights. Therefore, an iterative +solution is used, called Iteratively Reweighted Least Squares (IRLS). + 1. Compute initial estimates of the coefficients c^{(0)} using + ordinary least squares - size_t i; + 2. For iteration k, form the residuals e_i^{(k)} = (y_i - X_i + c^{(k-1)})/(t \sigma^{(k)} \sqrt{1 - h_i}), where t is a tuning + constant depending on the choice of \psi, and h_i are the + statistical leverages (diagonal elements of the matrix X (X^T + X)^{-1} X^T). Including t and h_i in the residual calculation has + been shown to improve the convergence of the method. The residual + standard deviation is approximated as \sigma^{(k)} = MAD / 0.6745, + where MAD is the Median-Absolute-Deviation of the n-p largest + residuals from the previous iteration. - for (i = 0; i < n; i++) - { - /* Model Yi = A * exp(-lambda * i) + b */ - double t = i; - double Yi = A * exp (-lambda * t) + b; - gsl_vector_set (f, i, (Yi - y[i])/sigma[i]); - } + 3. Compute new weights w_i^{(k)} = \psi(e_i^{(k)})/e_i^{(k)}. - return GSL_SUCCESS; - } + 4. Compute new coefficients c^{(k)} by solving the weighted least + squares problem with weights w_i^{(k)}. - int - expb_df (const gsl_vector * x, void *data, - gsl_matrix * J) - { - size_t n = ((struct data *)data)->n; - double *sigma = ((struct data *) data)->sigma; + 5. Steps 2 through 4 are iterated until the coefficients converge or + until some maximum iteration limit is reached. Coefficients are + tested for convergence using the critera: - double A = gsl_vector_get (x, 0); - double lambda = gsl_vector_get (x, 1); + |c_i^(k) - c_i^(k-1)| \le \epsilon \times max(|c_i^(k)|, |c_i^(k-1)|) - size_t i; + for all 0 \le i < p where \epsilon is a small tolerance factor. +The key to this method lies in selecting the function \psi(e_i) to +assign smaller weights to large residuals, and larger weights to smaller +residuals. As the iteration proceeds, outliers are assigned smaller and +smaller weights, eventually having very little or no effect on the +fitted model. - for (i = 0; i < n; i++) - { - /* Jacobian matrix J(i,j) = dfi / dxj, */ - /* where fi = (Yi - yi)/sigma[i], */ - /* Yi = A * exp(-lambda * i) + b */ - /* and the xj are the parameters (A,lambda,b) */ - double t = i; - double s = sigma[i]; - double e = exp(-lambda * t); - gsl_matrix_set (J, i, 0, e/s); - gsl_matrix_set (J, i, 1, -t * A * e/s); - gsl_matrix_set (J, i, 2, 1/s); - } - return GSL_SUCCESS; - } + -- Function: gsl_multifit_robust_workspace * gsl_multifit_robust_alloc + (const gsl_multifit_robust_type * T, const size_t N, const + size_t P) + This function allocates a workspace for fitting a model to N + observations using P parameters. The size of the workspace is O(np + + p^2). The type T specifies the function \psi and can be selected + from the following choices. + -- Robust type: gsl_multifit_robust_default + This specifies the 'gsl_multifit_robust_bisquare' type (see + below) and is a good general purpose choice for robust + regression. - int - expb_fdf (const gsl_vector * x, void *data, - gsl_vector * f, gsl_matrix * J) - { - expb_f (x, data, f); - expb_df (x, data, J); + -- Robust type: gsl_multifit_robust_bisquare + This is Tukey's biweight (bisquare) function and is a good + general purpose choice for robust regression. The weight + function is given by - return GSL_SUCCESS; - } + w(e) = (1 - e^2)^2 -The main part of the program sets up a Levenberg-Marquardt solver and -some simulated random data. The data uses the known parameters -(1.0,5.0,0.1) combined with Gaussian noise (standard deviation = 0.1) -over a range of 40 timesteps. The initial guess for the parameters is -chosen as (0.0, 1.0, 0.0). + and the default tuning constant is t = 4.685. - #include - #include - #include - #include - #include - #include - #include + -- Robust type: gsl_multifit_robust_cauchy + This is Cauchy's function, also known as the Lorentzian + function. This function does not guarantee a unique solution, + meaning different choices of the coefficient vector C could + minimize the objective function. Therefore this option should + be used with care. The weight function is given by - #include "expfit.c" + w(e) = 1 / (1 + e^2) - #define N 40 + and the default tuning constant is t = 2.385. - void print_state (size_t iter, gsl_multifit_fdfsolver * s); + -- Robust type: gsl_multifit_robust_fair + This is the fair \rho function, which guarantees a unique + solution and has continuous derivatives to three orders. The + weight function is given by - int - main (void) - { - const gsl_multifit_fdfsolver_type *T; - gsl_multifit_fdfsolver *s; - int status; - unsigned int i, iter = 0; - const size_t n = N; - const size_t p = 3; + w(e) = 1 / (1 + |e|) - gsl_matrix *covar = gsl_matrix_alloc (p, p); - double y[N], sigma[N]; - struct data d = { n, y, sigma}; - gsl_multifit_function_fdf f; - double x_init[3] = { 1.0, 0.0, 0.0 }; - gsl_vector_view x = gsl_vector_view_array (x_init, p); - const gsl_rng_type * type; - gsl_rng * r; + and the default tuning constant is t = 1.400. - gsl_rng_env_setup(); + -- Robust type: gsl_multifit_robust_huber + This specifies Huber's \rho function, which is a parabola in + the vicinity of zero and increases linearly for a given + threshold |e| > t. This function is also considered an + excellent general purpose robust estimator, however, + occasional difficulties can be encountered due to the + discontinuous first derivative of the \psi function. The + weight function is given by - type = gsl_rng_default; - r = gsl_rng_alloc (type); + w(e) = 1/max(1,|e|) - f.f = &expb_f; - f.df = &expb_df; - f.fdf = &expb_fdf; - f.n = n; - f.p = p; - f.params = &d; + and the default tuning constant is t = 1.345. - /* This is the data to be fitted */ + -- Robust type: gsl_multifit_robust_ols + This specifies the ordinary least squares solution, which can + be useful for quickly checking the difference between the + various robust and OLS solutions. The weight function is + given by - for (i = 0; i < n; i++) - { - double t = i; - y[i] = 1.0 + 5 * exp (-0.1 * t) - + gsl_ran_gaussian (r, 0.1); - sigma[i] = 0.1; - printf ("data: %u %g %g\n", i, y[i], sigma[i]); - }; + w(e) = 1 - T = gsl_multifit_fdfsolver_lmsder; - s = gsl_multifit_fdfsolver_alloc (T, n, p); - gsl_multifit_fdfsolver_set (s, &f, &x.vector); + and the default tuning constant is t = 1. - print_state (iter, s); + -- Robust type: gsl_multifit_robust_welsch + This specifies the Welsch function which can perform well in + cases where the residuals have an exponential distribution. + The weight function is given by - do - { - iter++; - status = gsl_multifit_fdfsolver_iterate (s); + w(e) = \exp(-e^2) - printf ("status = %s\n", gsl_strerror (status)); + and the default tuning constant is t = 2.985. - print_state (iter, s); + -- Function: void gsl_multifit_robust_free + (gsl_multifit_robust_workspace * W) + This function frees the memory associated with the workspace W. - if (status) - break; + -- Function: const char * gsl_multifit_robust_name (const + gsl_multifit_robust_workspace * W) + This function returns the name of the robust type T specified to + 'gsl_multifit_robust_alloc'. - status = gsl_multifit_test_delta (s->dx, s->x, - 1e-4, 1e-4); - } - while (status == GSL_CONTINUE && iter < 500); + -- Function: int gsl_multifit_robust_tune (const double TUNE, + gsl_multifit_robust_workspace * W) + This function sets the tuning constant t used to adjust the + residuals at each iteration to TUNE. Decreasing the tuning + constant increases the downweight assigned to large residuals, + while increasing the tuning constant decreases the downweight + assigned to large residuals. - gsl_multifit_covar (s->J, 0.0, covar); + -- Function: int gsl_multifit_robust_maxiter (const size_t MAXITER, + gsl_multifit_robust_workspace * W) + This function sets the maximum number of iterations in the + iteratively reweighted least squares algorithm to MAXITER. By + default, this value is set to 100 by 'gsl_multifit_robust_alloc'. + + -- Function: int gsl_multifit_robust_weights (const gsl_vector * R, + gsl_vector * WTS, gsl_multifit_robust_workspace * W) + This function assigns weights to the vector WTS using the residual + vector R and previously specified weighting function. The output + weights are given by wts_i = w(r_i / (t \sigma)), where the + weighting functions w are detailed in 'gsl_multifit_robust_alloc'. + \sigma is an estimate of the residual standard deviation based on + the Median-Absolute-Deviation and t is the tuning constant. This + function is useful if the user wishes to implement their own robust + regression rather than using the supplied 'gsl_multifit_robust' + routine below. - #define FIT(i) gsl_vector_get(s->x, i) - #define ERR(i) sqrt(gsl_matrix_get(covar,i,i)) + -- Function: int gsl_multifit_robust (const gsl_matrix * X, const + gsl_vector * Y, gsl_vector * C, gsl_matrix * COV, + gsl_multifit_robust_workspace * W) + This function computes the best-fit parameters C of the model y = X + c for the observations Y and the matrix of predictor variables X, + attemping to reduce the influence of outliers using the algorithm + outlined above. The p-by-p variance-covariance matrix of the model + parameters COV is estimated as \sigma^2 (X^T X)^{-1}, where \sigma + is an approximation of the residual standard deviation using the + theory of robust regression. Special care must be taken when + estimating \sigma and other statistics such as R^2, and so these + are computed internally and are available by calling the function + 'gsl_multifit_robust_statistics'. - { - double chi = gsl_blas_dnrm2(s->f); - double dof = n - p; - double c = GSL_MAX_DBL(1, chi / sqrt(dof)); + If the coefficients do not converge within the maximum iteration + limit, the function returns 'GSL_EMAXITER'. In this case, the + current estimates of the coefficients and covariance matrix are + returned in C and COV and the internal fit statistics are computed + with these estimates. - printf("chisq/dof = %g\n", pow(chi, 2.0) / dof); + -- Function: int gsl_multifit_robust_est (const gsl_vector * X, const + gsl_vector * C, const gsl_matrix * COV, double * Y, double * + Y_ERR) + This function uses the best-fit robust regression coefficients C + and their covariance matrix COV to compute the fitted function + value Y and its standard deviation Y_ERR for the model y = x.c at + the point X. - printf ("A = %.5f +/- %.5f\n", FIT(0), c*ERR(0)); - printf ("lambda = %.5f +/- %.5f\n", FIT(1), c*ERR(1)); - printf ("b = %.5f +/- %.5f\n", FIT(2), c*ERR(2)); - } + -- Function: int gsl_multifit_robust_residuals (const gsl_matrix * X, + const gsl_vector * Y, const gsl_vector * C, gsl_vector * R, + gsl_multifit_robust_workspace * W) + This function computes the vector of studentized residuals r_i = + {y_i - (X c)_i \over \sigma \sqrt{1 - h_i}} for the observations Y, + coefficients C and matrix of predictor variables X. The routine + 'gsl_multifit_robust' must first be called to compute the + statisical leverages h_i of the matrix X and residual standard + deviation estimate \sigma. - printf ("status = %s\n", gsl_strerror (status)); + -- Function: gsl_multifit_robust_stats gsl_multifit_robust_statistics + (const gsl_multifit_robust_workspace * W) + This function returns a structure containing relevant statistics + from a robust regression. The function 'gsl_multifit_robust' must + be called first to perform the regression and calculate these + statistics. The returned 'gsl_multifit_robust_stats' structure + contains the following fields. + double 'sigma_ols' This contains the standard deviation of the + residuals as computed from ordinary least squares (OLS). - gsl_multifit_fdfsolver_free (s); - gsl_matrix_free (covar); - gsl_rng_free (r); - return 0; - } + double 'sigma_mad' This contains an estimate of the standard + deviation of the final residuals using the + Median-Absolute-Deviation statistic - void - print_state (size_t iter, gsl_multifit_fdfsolver * s) - { - printf ("iter: %3u x = % 15.8f % 15.8f % 15.8f " - "|f(x)| = %g\n", - iter, - gsl_vector_get (s->x, 0), - gsl_vector_get (s->x, 1), - gsl_vector_get (s->x, 2), - gsl_blas_dnrm2 (s->f)); - } + double 'sigma_rob' This contains an estimate of the standard + deviation of the final residuals from the theory of robust + regression (see Street et al, 1988). -The iteration terminates when the change in x is smaller than 0.0001, as -both an absolute and relative change. Here are the results of running -the program: - - iter: 0 x=1.00000000 0.00000000 0.00000000 |f(x)|=117.349 - status=success - iter: 1 x=1.64659312 0.01814772 0.64659312 |f(x)|=76.4578 - status=success - iter: 2 x=2.85876037 0.08092095 1.44796363 |f(x)|=37.6838 - status=success - iter: 3 x=4.94899512 0.11942928 1.09457665 |f(x)|=9.58079 - status=success - iter: 4 x=5.02175572 0.10287787 1.03388354 |f(x)|=5.63049 - status=success - iter: 5 x=5.04520433 0.10405523 1.01941607 |f(x)|=5.44398 - status=success - iter: 6 x=5.04535782 0.10404906 1.01924871 |f(x)|=5.44397 - chisq/dof = 0.800996 - A = 5.04536 +/- 0.06028 - lambda = 0.10405 +/- 0.00316 - b = 1.01925 +/- 0.03782 - status = success + double 'sigma' This contains an estimate of the standard + deviation of the final residuals by attemping to reconcile + 'sigma_rob' and 'sigma_ols' in a reasonable way. -The approximate values of the parameters are found correctly, and the -chi-squared value indicates a good fit (the chi-squared per degree of -freedom is approximately 1). In this case the errors on the parameters -can be estimated from the square roots of the diagonal elements of the -covariance matrix. + double 'Rsq' This contains the R^2 coefficient of + determination statistic using the estimate 'sigma'. - If the chi-squared value shows a poor fit (i.e. chi^2/dof >> 1) then -the error estimates obtained from the covariance matrix will be too -small. In the example program the error estimates are multiplied by -\sqrt{\chi^2/dof} in this case, a common way of increasing the errors -for a poor fit. Note that a poor fit will result from the use an -inappropriate model, and the scaled error estimates may then be outside -the range of validity for Gaussian errors. + double 'adj_Rsq' This contains the adjusted R^2 coefficient of + determination statistic using the estimate 'sigma'. - -File: gsl-ref.info, Node: References and Further Reading for Nonlinear Least-Squares Fitting, Prev: Example programs for Nonlinear Least-Squares Fitting, Up: Nonlinear Least-Squares Fitting + double 'rmse' This contains the root mean squared error of the + final residuals -38.12 References and Further Reading -==================================== + double 'sse' This contains the residual sum of squares taking + into account the robust covariance matrix. -The MINPACK algorithm is described in the following article, + size_t 'dof' This contains the number of degrees of freedom n + - p - J.J. More', 'The Levenberg-Marquardt Algorithm: Implementation and - Theory', Lecture Notes in Mathematics, v630 (1978), ed G. Watson. + size_t 'numit' Upon successful convergence, this contains the + number of iterations performed -The following paper is also relevant to the algorithms described in this -section, + gsl_vector * 'weights' This contains the final weight vector + of length N - J.J. More', B.S. Garbow, K.E. Hillstrom, "Testing Unconstrained - Optimization Software", ACM Transactions on Mathematical Software, - Vol 7, No 1 (1981), p 17-41. + gsl_vector * 'r' This contains the final residual vector of + length N, r = y - X c  -File: gsl-ref.info, Node: Basis Splines, Next: Physical Constants, Prev: Nonlinear Least-Squares Fitting, Up: Top +File: gsl-ref.info, Node: Large Dense Linear Systems, Next: Troubleshooting, Prev: Robust linear regression, Up: Least-Squares Fitting -39 Basis Splines -**************** - -This chapter describes functions for the computation of smoothing basis -splines (B-splines). A smoothing spline differs from an interpolating -spline in that the resulting curve is not required to pass through each -datapoint. *Note Interpolation::, for information about interpolating -splines. +38.6 Large dense linear systems +=============================== - The header file 'gsl_bspline.h' contains the prototypes for the -bspline functions and related declarations. +This module is concerned with solving large dense least squares systems +X c = y where the n-by-p matrix X has n >> p (ie: many more rows than +columns). This type of matrix is called a "tall skinny" matrix, and for +some applications, it may not be possible to fit the entire matrix in +memory at once to use the standard SVD approach. Therefore, the +algorithms in this module are designed to allow the user to construct +smaller blocks of the matrix X and accumulate those blocks into the +larger system one at a time. The algorithms in this module never need +to store the entire matrix X in memory. The large linear least squares +routines support data weights and Tikhonov regularization, and are +designed to minimize the residual + \chi^2 = || y - Xc ||_W^2 + \lambda^2 || L c ||^2 + where y is the n-by-1 observation vector, X is the n-by-p design +matrix, c is the p-by-1 solution vector, W = diag(w_1,...,w_n) is the +data weighting matrix, L is an m-by-p regularization matrix, \lambda is +a regularization parameter, and ||r||_W^2 = r^T W r. In the discussion +which follows, we will assume that the system has been converted into +Tikhonov standard form, + \chi^2 = || y~ - X~ c~ ||^2 + \lambda^2 || c~ ||^2 + and we will drop the tilde characters from the various parameters. +For a discussion of the transformation to standard form *note +Regularized regression::. + + The basic idea is to partition the matrix X and observation vector y +as + [ X_1 ] c = [ y_1 ] + [ X_2 ] [ y_2 ] + [ X_3 ] [ y_3 ] + [ ... ] [ ... ] + [ X_k ] [ y_k ] + into k blocks, where each block (X_i,y_i) may have any number of +rows, but each X_i has p columns. The sections below describe the +methods available for solving this partitioned system. The functions +are declared in the header file 'gsl_multilarge.h'. * Menu: -* Overview of B-splines:: -* Initializing the B-splines solver:: -* Constructing the knots vector:: -* Evaluation of B-spline basis functions:: -* Evaluation of B-spline basis function derivatives:: -* Working with the Greville abscissae:: -* Example programs for B-splines:: -* References and Further Reading:: - - -File: gsl-ref.info, Node: Overview of B-splines, Next: Initializing the B-splines solver, Up: Basis Splines - -39.1 Overview -============= - -B-splines are commonly used as basis functions to fit smoothing curves -to large data sets. To do this, the abscissa axis is broken up into -some number of intervals, where the endpoints of each interval are -called "breakpoints". These breakpoints are then converted to "knots" -by imposing various continuity and smoothness conditions at each -interface. Given a nondecreasing knot vector t = {t_0, t_1, ..., -t_{n+k-1}}, the n basis splines of order k are defined by - - B_(i,1)(x) = (1, t_i <= x < t_(i+1) - (0, else - B_(i,k)(x) = [(x - t_i)/(t_(i+k-1) - t_i)] B_(i,k-1)(x) - + [(t_(i+k) - x)/(t_(i+k) - t_(i+1))] B_(i+1,k-1)(x) - -for i = 0, ..., n-1. The common case of cubic B-splines is given by k = -4. The above recurrence relation can be evaluated in a numerically -stable way by the de Boor algorithm. - - If we define appropriate knots on an interval [a,b] then the B-spline -basis functions form a complete set on that interval. Therefore we can -expand a smoothing function as - - f(x) = \sum_i c_i B_(i,k)(x) - -given enough (x_j, f(x_j)) data pairs. The coefficients c_i can be -readily obtained from a least-squares fit. - - -File: gsl-ref.info, Node: Initializing the B-splines solver, Next: Constructing the knots vector, Prev: Overview of B-splines, Up: Basis Splines - -39.2 Initializing the B-splines solver -====================================== - -The computation of B-spline functions requires a preallocated workspace -of type 'gsl_bspline_workspace'. If B-spline derivatives are also -required, an additional 'gsl_bspline_deriv_workspace' is needed. - - -- Function: gsl_bspline_workspace * gsl_bspline_alloc (const size_t K, - const size_t NBREAK) - This function allocates a workspace for computing B-splines of - order K. The number of breakpoints is given by NBREAK. This leads - to n = nbreak + k - 2 basis functions. Cubic B-splines are - specified by k = 4. The size of the workspace is O(5k + nbreak). +* Large Dense Linear Systems Normal Equations:: +* Large Dense Linear Systems TSQR:: +* Large Dense Linear Systems Solution Steps:: +* Large Dense Linear Systems Routines:: + + +File: gsl-ref.info, Node: Large Dense Linear Systems Normal Equations, Next: Large Dense Linear Systems TSQR, Up: Large Dense Linear Systems + +38.6.1 Normal Equations Approach +-------------------------------- + +The normal equations approach to the large linear least squares problem +described above is popular due to its speed and simplicity. Since the +normal equations solution to the problem is given by + c = ( X^T X + \lambda^2 I )^-1 X^T y + only the p-by-p matrix X^T X and p-by-1 vector X^T y need to be +stored. Using the partition scheme described above, these are given by + X^T X = \sum_i X_i^T X_i + X^T y = \sum_i X_i^T y_i + Since the matrix X^T X is symmetric, only half of it needs to be +calculated. Once all of the blocks (X_i,y_i) have been accumulated into +the final X^T X and X^T y, the system can be solved with a Cholesky +factorization of the X^T X matrix. If the Cholesky factorization fails +(occasionally due to numerical rounding errors), a QR decomposition is +then used. In both cases, the X^T X matrix is first transformed via a +diagonal scaling transformation to attempt to reduce its condition +number as much as possible to recover a more accurate solution vector. +The normal equations approach is the fastest method for solving the +large least squares problem, and is accurate for well-conditioned +matrices X. However, for ill-conditioned matrices, as is often the case +for large systems, this method can suffer from numerical instabilities +(see Trefethen and Bau, 1997). The number of operations for this method +is O(np^2 + {1 \over 3}p^3). + + +File: gsl-ref.info, Node: Large Dense Linear Systems TSQR, Next: Large Dense Linear Systems Solution Steps, Prev: Large Dense Linear Systems Normal Equations, Up: Large Dense Linear Systems + +38.6.2 Tall Skinny QR (TSQR) Approach +------------------------------------- + +An algorithm which has better numerical stability for ill-conditioned +problems is known as the Tall Skinny QR (TSQR) method. This method is +based on computing the thin QR decomposition of the least squares matrix +X = Q R, where Q is an n-by-p matrix with orthogonal columns, and R is a +p-by-p upper triangular matrix. Once these factors are calculated, the +residual becomes + \chi^2 = || Q^T y - R c ||^2 + \lambda^2 || c ||^2 + which can be written as the matrix equation + [ R ; \lambda I ] c = [ Q^T b ; 0 ] + The matrix on the left hand side is now a much smaller 2p-by-p matrix +which can be solved with a standard SVD approach. The Q matrix is just +as large as the original matrix X, however it does not need to be +explicitly constructed. The TSQR algorithm computes only the p-by-p +matrix R and the p-by-1 vector Q^T y, and updates these quantities as +new blocks are added to the system. Each time a new block of rows +(X_i,y_i) is added, the algorithm performs a QR decomposition of the +matrix + [ R_(i-1) ; X_i ] + where R_{i-1} is the upper triangular R factor for the matrix + [ X_1 ; ... ; X_(i-1) ] + This QR decomposition is done efficiently taking into account the +sparse structure of R_{i-1}. See Demmel et al, 2008 for more details on +how this is accomplished. The number of operations for this method is +O(2np^2 - {2 \over 3}p^3). + + +File: gsl-ref.info, Node: Large Dense Linear Systems Solution Steps, Next: Large Dense Linear Systems Routines, Prev: Large Dense Linear Systems TSQR, Up: Large Dense Linear Systems + +38.6.3 Large Dense Linear Systems Solution Steps +------------------------------------------------ + +The typical steps required to solve large regularized linear least +squares problems are as follows: + + 1. Choose the regularization matrix L. + + 2. Construct a block of rows of the least squares matrix, right hand + side vector, and weight vector (X_i, y_i, w_i). + + 3. Transform the block to standard form (\tilde{X_i},\tilde{y_i}). + This step can be skipped if L = I and W = I. + + 4. Accumulate the standard form block (\tilde{X_i},\tilde{y_i}) into + the system. + + 5. Repeat steps 2-4 until the entire matrix and right hand side vector + have been accumulated. + + 6. Determine an appropriate regularization parameter \lambda (using + for example L-curve analysis). + + 7. Solve the standard form system using the chosen \lambda. + + 8. Backtransform the standard form solution \tilde{c} to recover the + original solution vector c. + + +File: gsl-ref.info, Node: Large Dense Linear Systems Routines, Prev: Large Dense Linear Systems Solution Steps, Up: Large Dense Linear Systems + +38.6.4 Large Dense Linear Least Squares Routines +------------------------------------------------ + + -- Function: gsl_multilarge_linear_workspace * + gsl_multilarge_linear_alloc (const gsl_multilarge_linear_type + * T, const size_t P) + This function allocates a workspace for solving large linear least + squares systems. The least squares matrix X has P columns, but may + have any number of rows. The parameter T specifies the method to + be used for solving the large least squares system and may be + selected from the following choices + + -- Multilarge type: gsl_multilarge_linear_normal + This specifies the normal equations approach for solving the + least squares system. This method is suitable in cases where + performance is critical and it is known that the least squares + matrix X is well conditioned. The size of this workspace is + O(p^2). + + -- Multilarge type: gsl_multilarge_linear_tsqr + This specifies the sequential Tall Skinny QR (TSQR) approach + for solving the least squares system. This method is a good + general purpose choice for large systems, but requires about + twice as many operations as the normal equations method for n + >> p. The size of this workspace is O(p^2). - -- Function: void gsl_bspline_free (gsl_bspline_workspace * W) + -- Function: void gsl_multilarge_linear_free + (gsl_multilarge_linear_workspace * W) This function frees the memory associated with the workspace W. - -- Function: gsl_bspline_deriv_workspace * gsl_bspline_deriv_alloc - (const size_t K) - This function allocates a workspace for computing the derivatives - of a B-spline basis function of order K. The size of the workspace - is O(2k^2). - - -- Function: void gsl_bspline_deriv_free (gsl_bspline_deriv_workspace * - W) - This function frees the memory associated with the derivative - workspace W. + -- Function: const char * gsl_multilarge_linear_name + (gsl_multilarge_linear_workspace * W) + This function returns a string pointer to the name of the + multilarge solver. + + -- Function: int gsl_multilarge_linear_reset + (gsl_multilarge_linear_workspace * W) + This function resets the workspace W so it can begin to accumulate + a new least squares system. + + -- Function: int gsl_multilarge_linear_stdform1 (const gsl_vector * L, + const gsl_matrix * X, const gsl_vector * Y, gsl_matrix * XS, + gsl_vector * YS, gsl_multilarge_linear_workspace * WORK) + -- Function: int gsl_multilarge_linear_wstdform1 (const gsl_vector * L, + const gsl_matrix * X, const gsl_vector * W, const gsl_vector * + Y, gsl_matrix * XS, gsl_vector * YS, + gsl_multilarge_linear_workspace * WORK) + These functions define a regularization matrix L = + diag(l_0,l_1,...,l_{p-1}). The diagonal matrix element l_i is + provided by the ith element of the input vector L. The block (X,Y) + is converted to standard form and the parameters + (\tilde{X},\tilde{y}) are stored in XS and YS on output. XS and YS + have the same dimensions as X and Y. Optional data weights may be + supplied in the vector W. In order to apply this transformation, + L^{-1} must exist and so none of the l_i may be zero. After the + standard form system has been solved, use + 'gsl_multilarge_linear_genform1' to recover the original solution + vector. It is allowed to have X = XS and Y = YS for an in-place + transform. + + -- Function: int gsl_multilarge_linear_L_decomp (gsl_matrix * L, + gsl_vector * TAU) + This function calculates the QR decomposition of the m-by-p + regularization matrix L. L must have m \ge p. On output, the + Householder scalars are stored in the vector TAU of size p. These + outputs will be used by 'gsl_multilarge_linear_wstdform2' to + complete the transformation to standard form. + + -- Function: int gsl_multilarge_linear_stdform2 (const gsl_matrix * + LQR, const gsl_vector * LTAU, const gsl_matrix * X, const + gsl_vector * Y, gsl_matrix * XS, gsl_vector * YS, + gsl_multilarge_linear_workspace * WORK) + -- Function: int gsl_multilarge_linear_wstdform2 (const gsl_matrix * + LQR, const gsl_vector * LTAU, const gsl_matrix * X, const + gsl_vector * W, const gsl_vector * Y, gsl_matrix * XS, + gsl_vector * YS, gsl_multilarge_linear_workspace * WORK) + These functions convert a block of rows (X,Y,W) to standard form + (\tilde{X},\tilde{y}) which are stored in XS and YS respectively. + X, Y, and W must all have the same number of rows. The m-by-p + regularization matrix L is specified by the inputs LQR and LTAU, + which are outputs from 'gsl_multilarge_linear_L_decomp'. XS and YS + have the same dimensions as X and Y. After the standard form + system has been solved, use 'gsl_multilarge_linear_genform2' to + recover the original solution vector. Optional data weights may be + supplied in the vector W, where W = diag(w). + + -- Function: int gsl_multilarge_linear_accumulate (gsl_matrix * X, + gsl_vector * Y, gsl_multilarge_linear_workspace * W) + This function accumulates the standard form block (X,y) into the + current least squares system. X and Y have the same number of + rows, which can be arbitrary. X must have p columns. For the TSQR + method, X and Y are destroyed on output. For the normal equations + method, they are both unchanged. + + -- Function: int gsl_multilarge_linear_solve (const double LAMBDA, + gsl_vector * C, double * RNORM, double * SNORM, + gsl_multilarge_linear_workspace * W) + After all blocks (X_i,y_i) have been accumulated into the large + least squares system, this function will compute the solution + vector which is stored in C on output. The regularization + parameter \lambda is provided in LAMBDA. On output, RNORM contains + the residual norm ||y - X c||_W and SNORM contains the solution + norm ||L c||. + + -- Function: int gsl_multilarge_linear_genform1 (const gsl_vector * L, + const gsl_vector * CS, gsl_vector * C, + gsl_multilarge_linear_workspace * WORK) + After a regularized system has been solved with L = + diag(\l_0,\l_1,...,\l_{p-1}), this function backtransforms the + standard form solution vector CS to recover the solution vector of + the original problem C. The diagonal matrix elements l_i are + provided in the vector L. It is allowed to have C = CS for an + in-place transform. + + -- Function: int gsl_multilarge_linear_genform2 (const gsl_matrix * + LQR, const gsl_vector * LTAU, const gsl_vector * CS, + gsl_vector * C, gsl_multilarge_linear_workspace * WORK) + After a regularized system has been solved with a regularization + matrix L, specified by (LQR,LTAU), this function backtransforms the + standard form solution CS to recover the solution vector of the + original problem, which is stored in C, of length p. + + -- Function: int gsl_multilarge_linear_lcurve (gsl_vector * REG_PARAM, + gsl_vector * RHO, gsl_vector * ETA, + gsl_multilarge_linear_workspace * WORK) + This function computes the L-curve for a large least squares system + after it has been fully accumulated into the workspace WORK. The + output vectors REG_PARAM, RHO, and ETA must all be the same size, + and will contain the regularization parameters \lambda_i, residual + norms ||y - X c_i||, and solution norms || L c_i || which compose + the L-curve, where c_i is the regularized solution vector + corresponding to \lambda_i. The user may determine the number of + points on the L-curve by adjusting the size of these input arrays. + For the TSQR method, the regularization parameters \lambda_i are + estimated from the singular values of the triangular R factor. For + the normal equations method, they are estimated from the + eigenvalues of the X^T X matrix. + + -- Function: int gsl_multilarge_linear_rcond (double * RCOND, + gsl_multilarge_linear_workspace * WORK) + This function computes the reciprocal condition number, stored in + RCOND, of the least squares matrix after it has been accumulated + into the workspace WORK. For the TSQR algorithm, this is + accomplished by calculating the SVD of the R factor, which has the + same singular values as the matrix X. For the normal equations + method, this is done by computing the eigenvalues of X^T X, which + could be inaccurate for ill-conditioned matrices X.  -File: gsl-ref.info, Node: Constructing the knots vector, Next: Evaluation of B-spline basis functions, Prev: Initializing the B-splines solver, Up: Basis Splines - -39.3 Constructing the knots vector -================================== +File: gsl-ref.info, Node: Troubleshooting, Next: Fitting Examples, Prev: Large Dense Linear Systems, Up: Least-Squares Fitting - -- Function: int gsl_bspline_knots (const gsl_vector * BREAKPTS, - gsl_bspline_workspace * W) - This function computes the knots associated with the given - breakpoints and stores them internally in 'w->knots'. - - -- Function: int gsl_bspline_knots_uniform (const double A, const - double B, gsl_bspline_workspace * W) - This function assumes uniformly spaced breakpoints on [a,b] and - constructs the corresponding knot vector using the previously - specified NBREAK parameter. The knots are stored in 'w->knots'. +38.7 Troubleshooting +==================== - -File: gsl-ref.info, Node: Evaluation of B-spline basis functions, Next: Evaluation of B-spline basis function derivatives, Prev: Constructing the knots vector, Up: Basis Splines +When using models based on polynomials, care should be taken when +constructing the design matrix X. If the x values are large, then the +matrix X could be ill-conditioned since its columns are powers of x, +leading to unstable least-squares solutions. In this case it can often +help to center and scale the x values using the mean and standard +deviation: -39.4 Evaluation of B-splines -============================ + x' = (x - mu)/sigma - -- Function: int gsl_bspline_eval (const double X, gsl_vector * B, - gsl_bspline_workspace * W) - This function evaluates all B-spline basis functions at the - position X and stores them in the vector B, so that the i-th - element is B_i(x). The vector B must be of length n = nbreak + k - - 2. This value may also be obtained by calling - 'gsl_bspline_ncoeffs'. Computing all the basis functions at once - is more efficient than computing them individually, due to the - nature of the defining recurrence relation. - - -- Function: int gsl_bspline_eval_nonzero (const double X, gsl_vector * - BK, size_t * ISTART, size_t * IEND, gsl_bspline_workspace * W) - This function evaluates all potentially nonzero B-spline basis - functions at the position X and stores them in the vector BK, so - that the i-th element is B_(istart+i)(x). The last element of BK - is B_(iend)(x). The vector BK must be of length k. By returning - only the nonzero basis functions, this function allows quantities - involving linear combinations of the B_i(x) to be computed without - unnecessary terms (such linear combinations occur, for example, - when evaluating an interpolated function). - - -- Function: size_t gsl_bspline_ncoeffs (gsl_bspline_workspace * W) - This function returns the number of B-spline coefficients given by - n = nbreak + k - 2. +and then construct the X matrix using the transformed values x'.  -File: gsl-ref.info, Node: Evaluation of B-spline basis function derivatives, Next: Working with the Greville abscissae, Prev: Evaluation of B-spline basis functions, Up: Basis Splines +File: gsl-ref.info, Node: Fitting Examples, Next: Fitting References and Further Reading, Prev: Troubleshooting, Up: Least-Squares Fitting -39.5 Evaluation of B-spline derivatives -======================================= +38.8 Examples +============= - -- Function: int gsl_bspline_deriv_eval (const double X, const size_t - NDERIV, gsl_matrix * DB, gsl_bspline_workspace * W, - gsl_bspline_deriv_workspace * DW) - This function evaluates all B-spline basis function derivatives of - orders 0 through nderiv (inclusive) at the position X and stores - them in the matrix DB. The (i,j)-th element of DB is - d^jB_i(x)/dx^j. The matrix DB must be of size n = nbreak + k - 2 - by nderiv + 1. The value n may also be obtained by calling - 'gsl_bspline_ncoeffs'. Note that function evaluations are included - as the zeroth order derivatives in DB. Computing all the basis - function derivatives at once is more efficient than computing them - individually, due to the nature of the defining recurrence - relation. - - -- Function: int gsl_bspline_deriv_eval_nonzero (const double X, const - size_t NDERIV, gsl_matrix * DB, size_t * ISTART, size_t * - IEND, gsl_bspline_workspace * W, gsl_bspline_deriv_workspace * - DW) - This function evaluates all potentially nonzero B-spline basis - function derivatives of orders 0 through nderiv (inclusive) at the - position X and stores them in the matrix DB. The (i,j)-th element - of DB is d^j/dx^j B_(istart+i)(x). The last row of DB contains - d^j/dx^j B_(iend)(x). The matrix DB must be of size k by at least - nderiv + 1. Note that function evaluations are included as the - zeroth order derivatives in DB. By returning only the nonzero - basis functions, this function allows quantities involving linear - combinations of the B_i(x) and their derivatives to be computed - without unnecessary terms. - - -File: gsl-ref.info, Node: Working with the Greville abscissae, Next: Example programs for B-splines, Prev: Evaluation of B-spline basis function derivatives, Up: Basis Splines - -39.6 Working with the Greville abscissae -======================================== - -The Greville abscissae are defined to be the mean location of k-1 -consecutive knots in the knot vector for each basis spline function of -order k. With the first and last knots in the 'gsl_bspline_workspace' -knot vector excluded, there are 'gsl_bspline_ncoeffs' Greville abscissae -for any given B-spline basis. These values are often used in B-spline -collocation applications and may also be called Marsden-Schoenberg -points. +The example programs in this section demonstrate the various linear +regression methods. + +* Menu: - -- Function: double gsl_bspline_greville_abscissa (size_t I, - gsl_bspline_workspace *W); - Returns the location of the i-th Greville abscissa for the given - B-spline basis. For the ill-defined case when k=1, the - implementation chooses to return breakpoint interval midpoints. +* Fitting linear regression example:: +* Fitting multi-parameter linear regression example:: +* Fitting regularized linear regression example 1:: +* Fitting regularized linear regression example 2:: +* Fitting robust linear regression example:: +* Fitting large linear systems example::  -File: gsl-ref.info, Node: Example programs for B-splines, Next: References and Further Reading, Prev: Working with the Greville abscissae, Up: Basis Splines +File: gsl-ref.info, Node: Fitting linear regression example, Next: Fitting multi-parameter linear regression example, Up: Fitting Examples -39.7 Examples -============= +38.8.1 Simple Linear Regression Example +--------------------------------------- -The following program computes a linear least squares fit to data using -cubic B-spline basis functions with uniform breakpoints. The data is -generated from the curve y(x) = \cos{(x)} \exp{(-x/10)} on the interval -[0, 15] with Gaussian noise added. +The following program computes a least squares straight-line fit to a +simple dataset, and outputs the best-fit line and its associated one +standard-deviation error bars. #include - #include - #include - #include - #include - #include - #include - #include - - /* number of data points to fit */ - #define N 200 - - /* number of fit coefficients */ - #define NCOEFFS 12 - - /* nbreak = ncoeffs + 2 - k = ncoeffs - 2 since k = 4 */ - #define NBREAK (NCOEFFS - 2) + #include int main (void) { - const size_t n = N; - const size_t ncoeffs = NCOEFFS; - const size_t nbreak = NBREAK; - size_t i, j; - gsl_bspline_workspace *bw; - gsl_vector *B; - double dy; - gsl_rng *r; - gsl_vector *c, *w; - gsl_vector *x, *y; - gsl_matrix *X, *cov; - gsl_multifit_linear_workspace *mw; - double chisq, Rsq, dof, tss; - - gsl_rng_env_setup(); - r = gsl_rng_alloc(gsl_rng_default); + int i, n = 4; + double x[4] = { 1970, 1980, 1990, 2000 }; + double y[4] = { 12, 11, 14, 13 }; + double w[4] = { 0.1, 0.2, 0.3, 0.4 }; - /* allocate a cubic bspline workspace (k = 4) */ - bw = gsl_bspline_alloc(4, nbreak); - B = gsl_vector_alloc(ncoeffs); - - x = gsl_vector_alloc(n); - y = gsl_vector_alloc(n); - X = gsl_matrix_alloc(n, ncoeffs); - c = gsl_vector_alloc(ncoeffs); - w = gsl_vector_alloc(n); - cov = gsl_matrix_alloc(ncoeffs, ncoeffs); - mw = gsl_multifit_linear_alloc(n, ncoeffs); + double c0, c1, cov00, cov01, cov11, chisq; - printf("#m=0,S=0\n"); - /* this is the data to be fitted */ - for (i = 0; i < n; ++i) - { - double sigma; - double xi = (15.0 / (N - 1)) * i; - double yi = cos(xi) * exp(-0.1 * xi); - - sigma = 0.1 * yi; - dy = gsl_ran_gaussian(r, sigma); - yi += dy; + gsl_fit_wlinear (x, 1, w, 1, y, 1, n, + &c0, &c1, &cov00, &cov01, &cov11, + &chisq); - gsl_vector_set(x, i, xi); - gsl_vector_set(y, i, yi); - gsl_vector_set(w, i, 1.0 / (sigma * sigma)); + printf ("# best fit: Y = %g + %g X\n", c0, c1); + printf ("# covariance matrix:\n"); + printf ("# [ %g, %g\n# %g, %g]\n", + cov00, cov01, cov01, cov11); + printf ("# chisq = %g\n", chisq); - printf("%f %f\n", xi, yi); - } + for (i = 0; i < n; i++) + printf ("data: %g %g %g\n", + x[i], y[i], 1/sqrt(w[i])); - /* use uniform breakpoints on [0, 15] */ - gsl_bspline_knots_uniform(0.0, 15.0, bw); + printf ("\n"); - /* construct the fit matrix X */ - for (i = 0; i < n; ++i) + for (i = -30; i < 130; i++) { - double xi = gsl_vector_get(x, i); + double xf = x[0] + (i/100.0) * (x[n-1] - x[0]); + double yf, yf_err; - /* compute B_j(xi) for all j */ - gsl_bspline_eval(xi, B, bw); + gsl_fit_linear_est (xf, + c0, c1, + cov00, cov01, cov11, + &yf, &yf_err); - /* fill in row i of X */ - for (j = 0; j < ncoeffs; ++j) - { - double Bj = gsl_vector_get(B, j); - gsl_matrix_set(X, i, j, Bj); - } + printf ("fit: %g %g\n", xf, yf); + printf ("hi : %g %g\n", xf, yf + yf_err); + printf ("lo : %g %g\n", xf, yf - yf_err); } - - /* do the fit */ - gsl_multifit_wlinear(X, w, y, c, cov, &chisq, mw); - - dof = n - ncoeffs; - tss = gsl_stats_wtss(w->data, 1, y->data, 1, y->size); - Rsq = 1.0 - chisq / tss; - - fprintf(stderr, "chisq/dof = %e, Rsq = %f\n", - chisq / dof, Rsq); - - /* output the smoothed curve */ - { - double xi, yi, yerr; - - printf("#m=1,S=0\n"); - for (xi = 0.0; xi < 15.0; xi += 0.1) - { - gsl_bspline_eval(xi, B, bw); - gsl_multifit_linear_est(B, c, cov, &yi, &yerr); - printf("%f %f\n", xi, yi); - } - } - - gsl_rng_free(r); - gsl_bspline_free(bw); - gsl_vector_free(B); - gsl_vector_free(x); - gsl_vector_free(y); - gsl_matrix_free(X); - gsl_vector_free(c); - gsl_vector_free(w); - gsl_matrix_free(cov); - gsl_multifit_linear_free(mw); - return 0; - } /* main() */ - - The output can be plotted with GNU 'graph'. - - $ ./a.out > bspline.dat - chisq/dof = 1.118217e+00, Rsq = 0.989771 - $ graph -T ps -X x -Y y -x 0 15 -y -1 1.3 < bspline.dat > bspline.ps - - -File: gsl-ref.info, Node: References and Further Reading, Prev: Example programs for B-splines, Up: Basis Splines - -39.8 References and Further Reading -=================================== - -Further information on the algorithms described in this section can be -found in the following book, - - C. de Boor, 'A Practical Guide to Splines' (1978), Springer-Verlag, - ISBN 0-387-90356-9. - - Further information of Greville abscissae and B-spline collocation -can be found in the following paper, - - Richard W. Johnson, Higher order B-spline collocation at the - Greville abscissae. 'Applied Numerical Mathematics'. vol. 52, - 2005, 63-75. - -A large collection of B-spline routines is available in the PPPACK -library available at , which is also part -of SLATEC. - - -File: gsl-ref.info, Node: Physical Constants, Next: IEEE floating-point arithmetic, Prev: Basis Splines, Up: Top - -40 Physical Constants -********************* - -This chapter describes macros for the values of physical constants, such -as the speed of light, c, and gravitational constant, G. The values are -available in different unit systems, including the standard MKSA system -(meters, kilograms, seconds, amperes) and the CGSM system (centimeters, -grams, seconds, gauss), which is commonly used in Astronomy. - - The definitions of constants in the MKSA system are available in the -file 'gsl_const_mksa.h'. The constants in the CGSM system are defined -in 'gsl_const_cgsm.h'. Dimensionless constants, such as the fine -structure constant, which are pure numbers are defined in -'gsl_const_num.h'. + } -* Menu: +The following commands extract the data from the output of the program +and display it using the GNU plotutils 'graph' utility, -* Fundamental Constants:: -* Astronomy and Astrophysics:: -* Atomic and Nuclear Physics:: -* Measurement of Time:: -* Imperial Units :: -* Speed and Nautical Units:: -* Printers Units:: -* Volume Area and Length:: -* Mass and Weight :: -* Thermal Energy and Power:: -* Pressure:: -* Viscosity:: -* Light and Illumination:: -* Radioactivity:: -* Force and Energy:: -* Prefixes:: -* Physical Constant Examples:: -* Physical Constant References and Further Reading:: + $ ./demo > tmp + $ more tmp + # best fit: Y = -106.6 + 0.06 X + # covariance matrix: + # [ 39602, -19.9 + # -19.9, 0.01] + # chisq = 0.8 - The full list of constants is described briefly below. Consult the -header files themselves for the values of the constants used in the -library. + $ for n in data fit hi lo ; + do + grep "^$n" tmp | cut -d: -f2 > $n ; + done + $ graph -T X -X x -Y y -y 0 20 -m 0 -S 2 -Ie data + -S 0 -I a -m 1 fit -m 2 hi -m 2 lo  -File: gsl-ref.info, Node: Fundamental Constants, Next: Astronomy and Astrophysics, Up: Physical Constants - -40.1 Fundamental Constants -========================== - -'GSL_CONST_MKSA_SPEED_OF_LIGHT' - The speed of light in vacuum, c. - -'GSL_CONST_MKSA_VACUUM_PERMEABILITY' - The permeability of free space, \mu_0. This constant is defined in - the MKSA system only. +File: gsl-ref.info, Node: Fitting multi-parameter linear regression example, Next: Fitting regularized linear regression example 1, Prev: Fitting linear regression example, Up: Fitting Examples -'GSL_CONST_MKSA_VACUUM_PERMITTIVITY' - The permittivity of free space, \epsilon_0. This constant is - defined in the MKSA system only. +38.8.2 Multi-parameter Linear Regression Example +------------------------------------------------ -'GSL_CONST_MKSA_PLANCKS_CONSTANT_H' - Planck's constant, h. - -'GSL_CONST_MKSA_PLANCKS_CONSTANT_HBAR' - Planck's constant divided by 2\pi, \hbar. - -'GSL_CONST_NUM_AVOGADRO' - Avogadro's number, N_a. +The following program performs a quadratic fit y = c_0 + c_1 x + c_2 x^2 +to a weighted dataset using the generalised linear fitting function +'gsl_multifit_wlinear'. The model matrix X for a quadratic fit is given +by, -'GSL_CONST_MKSA_FARADAY' - The molar charge of 1 Faraday. + X = [ 1 , x_0 , x_0^2 ; + 1 , x_1 , x_1^2 ; + 1 , x_2 , x_2^2 ; + ... , ... , ... ] -'GSL_CONST_MKSA_BOLTZMANN' - The Boltzmann constant, k. +where the column of ones corresponds to the constant term c_0. The two +remaining columns corresponds to the terms c_1 x and c_2 x^2. -'GSL_CONST_MKSA_MOLAR_GAS' - The molar gas constant, R_0. + The program reads N lines of data in the format (X, Y, ERR) where ERR +is the error (standard deviation) in the value Y. -'GSL_CONST_MKSA_STANDARD_GAS_VOLUME' - The standard gas volume, V_0. + #include + #include -'GSL_CONST_MKSA_STEFAN_BOLTZMANN_CONSTANT' - The Stefan-Boltzmann radiation constant, \sigma. + int + main (int argc, char **argv) + { + int i, n; + double xi, yi, ei, chisq; + gsl_matrix *X, *cov; + gsl_vector *y, *w, *c; -'GSL_CONST_MKSA_GAUSS' - The magnetic field of 1 Gauss. + if (argc != 2) + { + fprintf (stderr,"usage: fit n < data\n"); + exit (-1); + } - -File: gsl-ref.info, Node: Astronomy and Astrophysics, Next: Atomic and Nuclear Physics, Prev: Fundamental Constants, Up: Physical Constants + n = atoi (argv[1]); -40.2 Astronomy and Astrophysics -=============================== + X = gsl_matrix_alloc (n, 3); + y = gsl_vector_alloc (n); + w = gsl_vector_alloc (n); -'GSL_CONST_MKSA_ASTRONOMICAL_UNIT' - The length of 1 astronomical unit (mean earth-sun distance), au. + c = gsl_vector_alloc (3); + cov = gsl_matrix_alloc (3, 3); -'GSL_CONST_MKSA_GRAVITATIONAL_CONSTANT' - The gravitational constant, G. + for (i = 0; i < n; i++) + { + int count = fscanf (stdin, "%lg %lg %lg", + &xi, &yi, &ei); -'GSL_CONST_MKSA_LIGHT_YEAR' - The distance of 1 light-year, ly. + if (count != 3) + { + fprintf (stderr, "error reading file\n"); + exit (-1); + } -'GSL_CONST_MKSA_PARSEC' - The distance of 1 parsec, pc. + printf ("%g %g +/- %g\n", xi, yi, ei); -'GSL_CONST_MKSA_GRAV_ACCEL' - The standard gravitational acceleration on Earth, g. + gsl_matrix_set (X, i, 0, 1.0); + gsl_matrix_set (X, i, 1, xi); + gsl_matrix_set (X, i, 2, xi*xi); -'GSL_CONST_MKSA_SOLAR_MASS' - The mass of the Sun. + gsl_vector_set (y, i, yi); + gsl_vector_set (w, i, 1.0/(ei*ei)); + } - -File: gsl-ref.info, Node: Atomic and Nuclear Physics, Next: Measurement of Time, Prev: Astronomy and Astrophysics, Up: Physical Constants + { + gsl_multifit_linear_workspace * work + = gsl_multifit_linear_alloc (n, 3); + gsl_multifit_wlinear (X, w, y, c, cov, + &chisq, work); + gsl_multifit_linear_free (work); + } -40.3 Atomic and Nuclear Physics -=============================== + #define C(i) (gsl_vector_get(c,(i))) + #define COV(i,j) (gsl_matrix_get(cov,(i),(j))) -'GSL_CONST_MKSA_ELECTRON_CHARGE' - The charge of the electron, e. + { + printf ("# best fit: Y = %g + %g X + %g X^2\n", + C(0), C(1), C(2)); -'GSL_CONST_MKSA_ELECTRON_VOLT' - The energy of 1 electron volt, eV. + printf ("# covariance matrix:\n"); + printf ("[ %+.5e, %+.5e, %+.5e \n", + COV(0,0), COV(0,1), COV(0,2)); + printf (" %+.5e, %+.5e, %+.5e \n", + COV(1,0), COV(1,1), COV(1,2)); + printf (" %+.5e, %+.5e, %+.5e ]\n", + COV(2,0), COV(2,1), COV(2,2)); + printf ("# chisq = %g\n", chisq); + } -'GSL_CONST_MKSA_UNIFIED_ATOMIC_MASS' - The unified atomic mass, amu. + gsl_matrix_free (X); + gsl_vector_free (y); + gsl_vector_free (w); + gsl_vector_free (c); + gsl_matrix_free (cov); -'GSL_CONST_MKSA_MASS_ELECTRON' - The mass of the electron, m_e. + return 0; + } -'GSL_CONST_MKSA_MASS_MUON' - The mass of the muon, m_\mu. +A suitable set of data for fitting can be generated using the following +program. It outputs a set of points with gaussian errors from the curve +y = e^x in the region 0 < x < 2. -'GSL_CONST_MKSA_MASS_PROTON' - The mass of the proton, m_p. + #include + #include + #include -'GSL_CONST_MKSA_MASS_NEUTRON' - The mass of the neutron, m_n. + int + main (void) + { + double x; + const gsl_rng_type * T; + gsl_rng * r; -'GSL_CONST_NUM_FINE_STRUCTURE' - The electromagnetic fine structure constant \alpha. + gsl_rng_env_setup (); -'GSL_CONST_MKSA_RYDBERG' - The Rydberg constant, Ry, in units of energy. This is related to - the Rydberg inverse wavelength R_\infty by Ry = h c R_\infty. + T = gsl_rng_default; + r = gsl_rng_alloc (T); -'GSL_CONST_MKSA_BOHR_RADIUS' - The Bohr radius, a_0. + for (x = 0.1; x < 2; x+= 0.1) + { + double y0 = exp (x); + double sigma = 0.1 * y0; + double dy = gsl_ran_gaussian (r, sigma); -'GSL_CONST_MKSA_ANGSTROM' - The length of 1 angstrom. + printf ("%g %g %g\n", x, y0 + dy, sigma); + } -'GSL_CONST_MKSA_BARN' - The area of 1 barn. + gsl_rng_free(r); -'GSL_CONST_MKSA_BOHR_MAGNETON' - The Bohr Magneton, \mu_B. + return 0; + } -'GSL_CONST_MKSA_NUCLEAR_MAGNETON' - The Nuclear Magneton, \mu_N. +The data can be prepared by running the resulting executable program, -'GSL_CONST_MKSA_ELECTRON_MAGNETIC_MOMENT' - The absolute value of the magnetic moment of the electron, \mu_e. - The physical magnetic moment of the electron is negative. + $ GSL_RNG_TYPE=mt19937_1999 ./generate > exp.dat + $ more exp.dat + 0.1 0.97935 0.110517 + 0.2 1.3359 0.12214 + 0.3 1.52573 0.134986 + 0.4 1.60318 0.149182 + 0.5 1.81731 0.164872 + 0.6 1.92475 0.182212 + .... -'GSL_CONST_MKSA_PROTON_MAGNETIC_MOMENT' - The magnetic moment of the proton, \mu_p. +To fit the data use the previous program, with the number of data points +given as the first argument. In this case there are 19 data points. -'GSL_CONST_MKSA_THOMSON_CROSS_SECTION' - The Thomson cross section, \sigma_T. + $ ./fit 19 < exp.dat + 0.1 0.97935 +/- 0.110517 + 0.2 1.3359 +/- 0.12214 + ... + # best fit: Y = 1.02318 + 0.956201 X + 0.876796 X^2 + # covariance matrix: + [ +1.25612e-02, -3.64387e-02, +1.94389e-02 + -3.64387e-02, +1.42339e-01, -8.48761e-02 + +1.94389e-02, -8.48761e-02, +5.60243e-02 ] + # chisq = 23.0987 -'GSL_CONST_MKSA_DEBYE' - The electric dipole moment of 1 Debye, D. +The parameters of the quadratic fit match the coefficients of the +expansion of e^x, taking into account the errors on the parameters and +the O(x^3) difference between the exponential and quadratic functions +for the larger values of x. The errors on the parameters are given by +the square-root of the corresponding diagonal elements of the covariance +matrix. The chi-squared per degree of freedom is 1.4, indicating a +reasonable fit to the data.  -File: gsl-ref.info, Node: Measurement of Time, Next: Imperial Units, Prev: Atomic and Nuclear Physics, Up: Physical Constants - -40.4 Measurement of Time -======================== - -'GSL_CONST_MKSA_MINUTE' - The number of seconds in 1 minute. +File: gsl-ref.info, Node: Fitting regularized linear regression example 1, Next: Fitting regularized linear regression example 2, Prev: Fitting multi-parameter linear regression example, Up: Fitting Examples -'GSL_CONST_MKSA_HOUR' - The number of seconds in 1 hour. +38.8.3 Regularized Linear Regression Example 1 +---------------------------------------------- -'GSL_CONST_MKSA_DAY' - The number of seconds in 1 day. +The next program demonstrates the difference between ordinary and +regularized least squares when the design matrix is near-singular. In +this program, we generate two random normally distributed variables u +and v, with v = u + noise so that u and v are nearly colinear. We then +set a third dependent variable y = u + v + noise and solve for the +coefficients c_1,c_2 of the model Y(c_1,c_2) = c_1 u + c_2 v. Since u +\approx v, the design matrix X is nearly singular, leading to unstable +ordinary least squares solutions. + +Here is the program output: + matrix condition number = 1.025113e+04 + === Unregularized fit === + best fit: y = -43.6588 u + 45.6636 v + residual norm = 31.6248 + solution norm = 63.1764 + chisq/dof = 1.00213 + === Regularized fit (L-curve) === + optimal lambda: 4.51103 + best fit: y = 1.00113 u + 1.0032 v + residual norm = 31.6547 + solution norm = 1.41728 + chisq/dof = 1.04499 + === Regularized fit (GCV) === + optimal lambda: 0.0232029 + best fit: y = -19.8367 u + 21.8417 v + residual norm = 31.6332 + solution norm = 29.5051 + chisq/dof = 1.00314 + +We see that the ordinary least squares solution is completely wrong, +while the L-curve regularized method with the optimal \lambda = 4.51103 +finds the correct solution c_1 \approx c_2 \approx 1. The GCV +regularized method finds a regularization parameter \lambda = 0.0232029 +which is too small to give an accurate solution, although it performs +better than OLS. The L-curve and its computed corner, as well as the GCV +curve and its minimum are plotted below. -'GSL_CONST_MKSA_WEEK' - The number of seconds in 1 week. +The program is given below. + #include + #include + #include + #include + #include + #include - -File: gsl-ref.info, Node: Imperial Units, Next: Speed and Nautical Units, Prev: Measurement of Time, Up: Physical Constants + int + main() + { + const size_t n = 1000; /* number of observations */ + const size_t p = 2; /* number of model parameters */ + size_t i; + gsl_rng *r = gsl_rng_alloc(gsl_rng_default); + gsl_matrix *X = gsl_matrix_alloc(n, p); + gsl_vector *y = gsl_vector_alloc(n); -40.5 Imperial Units -=================== + for (i = 0; i < n; ++i) + { + /* generate first random variable u */ + double ui = 5.0 * gsl_ran_gaussian(r, 1.0); -'GSL_CONST_MKSA_INCH' - The length of 1 inch. + /* set v = u + noise */ + double vi = ui + gsl_ran_gaussian(r, 0.001); -'GSL_CONST_MKSA_FOOT' - The length of 1 foot. + /* set y = u + v + noise */ + double yi = ui + vi + gsl_ran_gaussian(r, 1.0); -'GSL_CONST_MKSA_YARD' - The length of 1 yard. + /* since u =~ v, the matrix X is ill-conditioned */ + gsl_matrix_set(X, i, 0, ui); + gsl_matrix_set(X, i, 1, vi); -'GSL_CONST_MKSA_MILE' - The length of 1 mile. + /* rhs vector */ + gsl_vector_set(y, i, yi); + } -'GSL_CONST_MKSA_MIL' - The length of 1 mil (1/1000th of an inch). + { + const size_t npoints = 200; /* number of points on L-curve and GCV curve */ + gsl_multifit_linear_workspace *w = + gsl_multifit_linear_alloc(n, p); + gsl_vector *c = gsl_vector_alloc(p); /* OLS solution */ + gsl_vector *c_lcurve = gsl_vector_alloc(p); /* regularized solution (L-curve) */ + gsl_vector *c_gcv = gsl_vector_alloc(p); /* regularized solution (GCV) */ + gsl_vector *reg_param = gsl_vector_alloc(npoints); + gsl_vector *rho = gsl_vector_alloc(npoints); /* residual norms */ + gsl_vector *eta = gsl_vector_alloc(npoints); /* solution norms */ + gsl_vector *G = gsl_vector_alloc(npoints); /* GCV function values */ + double lambda_l; /* optimal regularization parameter (L-curve) */ + double lambda_gcv; /* optimal regularization parameter (GCV) */ + double G_gcv; /* G(lambda_gcv) */ + size_t reg_idx; /* index of optimal lambda */ + double rcond; /* reciprocal condition number of X */ + double chisq, rnorm, snorm; + + /* compute SVD of X */ + gsl_multifit_linear_svd(X, w); + + rcond = gsl_multifit_linear_rcond(w); + fprintf(stderr, "matrix condition number = %e\n", 1.0 / rcond); + + /* unregularized (standard) least squares fit, lambda = 0 */ + gsl_multifit_linear_solve(0.0, X, y, c, &rnorm, &snorm, w); + chisq = pow(rnorm, 2.0); + + fprintf(stderr, "=== Unregularized fit ===\n"); + fprintf(stderr, "best fit: y = %g u + %g v\n", + gsl_vector_get(c, 0), gsl_vector_get(c, 1)); + fprintf(stderr, "residual norm = %g\n", rnorm); + fprintf(stderr, "solution norm = %g\n", snorm); + fprintf(stderr, "chisq/dof = %g\n", chisq / (n - p)); + + /* calculate L-curve and find its corner */ + gsl_multifit_linear_lcurve(y, reg_param, rho, eta, w); + gsl_multifit_linear_lcorner(rho, eta, ®_idx); + + /* store optimal regularization parameter */ + lambda_l = gsl_vector_get(reg_param, reg_idx); + + /* regularize with lambda_l */ + gsl_multifit_linear_solve(lambda_l, X, y, c_lcurve, &rnorm, &snorm, w); + chisq = pow(rnorm, 2.0) + pow(lambda_l * snorm, 2.0); + + fprintf(stderr, "=== Regularized fit (L-curve) ===\n"); + fprintf(stderr, "optimal lambda: %g\n", lambda_l); + fprintf(stderr, "best fit: y = %g u + %g v\n", + gsl_vector_get(c_lcurve, 0), gsl_vector_get(c_lcurve, 1)); + fprintf(stderr, "residual norm = %g\n", rnorm); + fprintf(stderr, "solution norm = %g\n", snorm); + fprintf(stderr, "chisq/dof = %g\n", chisq / (n - p)); + + /* calculate GCV curve and find its minimum */ + gsl_multifit_linear_gcv(y, reg_param, G, &lambda_gcv, &G_gcv, w); + + /* regularize with lambda_gcv */ + gsl_multifit_linear_solve(lambda_gcv, X, y, c_gcv, &rnorm, &snorm, w); + chisq = pow(rnorm, 2.0) + pow(lambda_gcv * snorm, 2.0); + + fprintf(stderr, "=== Regularized fit (GCV) ===\n"); + fprintf(stderr, "optimal lambda: %g\n", lambda_gcv); + fprintf(stderr, "best fit: y = %g u + %g v\n", + gsl_vector_get(c_gcv, 0), gsl_vector_get(c_gcv, 1)); + fprintf(stderr, "residual norm = %g\n", rnorm); + fprintf(stderr, "solution norm = %g\n", snorm); + fprintf(stderr, "chisq/dof = %g\n", chisq / (n - p)); - -File: gsl-ref.info, Node: Speed and Nautical Units, Next: Printers Units, Prev: Imperial Units, Up: Physical Constants + /* output L-curve and GCV curve */ + for (i = 0; i < npoints; ++i) + { + printf("%e %e %e %e\n", + gsl_vector_get(reg_param, i), + gsl_vector_get(rho, i), + gsl_vector_get(eta, i), + gsl_vector_get(G, i)); + } -40.6 Speed and Nautical Units -============================= + /* output L-curve corner point */ + printf("\n\n%f %f\n", + gsl_vector_get(rho, reg_idx), + gsl_vector_get(eta, reg_idx)); + + /* output GCV curve corner minimum */ + printf("\n\n%e %e\n", + lambda_gcv, + G_gcv); + + gsl_multifit_linear_free(w); + gsl_vector_free(c); + gsl_vector_free(c_lcurve); + gsl_vector_free(reg_param); + gsl_vector_free(rho); + gsl_vector_free(eta); + gsl_vector_free(G); + } -'GSL_CONST_MKSA_KILOMETERS_PER_HOUR' - The speed of 1 kilometer per hour. + gsl_rng_free(r); + gsl_matrix_free(X); + gsl_vector_free(y); -'GSL_CONST_MKSA_MILES_PER_HOUR' - The speed of 1 mile per hour. + return 0; + } -'GSL_CONST_MKSA_NAUTICAL_MILE' - The length of 1 nautical mile. + +File: gsl-ref.info, Node: Fitting regularized linear regression example 2, Next: Fitting robust linear regression example, Prev: Fitting regularized linear regression example 1, Up: Fitting Examples -'GSL_CONST_MKSA_FATHOM' - The length of 1 fathom. +38.8.4 Regularized Linear Regression Example 2 +---------------------------------------------- -'GSL_CONST_MKSA_KNOT' - The speed of 1 knot. +The following example program minimizes the cost function - -File: gsl-ref.info, Node: Printers Units, Next: Volume Area and Length, Prev: Speed and Nautical Units, Up: Physical Constants + ||y - X c||^2 + \lambda^2 ||x||^2 -40.7 Printers Units -=================== +where X is the 10-by-8 Hilbert matrix whose entries are given by + + X_{ij} = 1 / (i + j - 1) + +and the right hand side vector is given by y = +[1,-1,1,-1,1,-1,1,-1,1,-1]^T. Solutions are computed for \lambda = 0 +(unregularized) as well as for optimal parameters \lambda chosen by +analyzing the L-curve and GCV curve. + +Here is the program output: + matrix condition number = 3.565872e+09 + === Unregularized fit === + residual norm = 2.15376 + solution norm = 2.92217e+09 + chisq/dof = 2.31934 + === Regularized fit (L-curve) === + optimal lambda: 7.11407e-07 + residual norm = 2.60386 + solution norm = 424507 + chisq/dof = 3.43565 + === Regularized fit (GCV) === + optimal lambda: 1.72278 + residual norm = 3.1375 + solution norm = 0.139357 + chisq/dof = 4.95076 + +Here we see the unregularized solution results in a large solution norm +due to the ill-conditioned matrix. The L-curve solution finds a small +value of \lambda = 7.11e-7 which still results in a badly conditioned +system and a large solution norm. The GCV method finds a parameter +\lambda = 1.72 which results in a well-conditioned system and small +solution norm. -'GSL_CONST_MKSA_POINT' - The length of 1 printer's point (1/72 inch). +The L-curve and its computed corner, as well as the GCV curve and its +minimum are plotted below. -'GSL_CONST_MKSA_TEXPOINT' - The length of 1 TeX point (1/72.27 inch). +The program is given below. + #include + #include + #include + #include + #include - -File: gsl-ref.info, Node: Volume Area and Length, Next: Mass and Weight, Prev: Printers Units, Up: Physical Constants + static int + hilbert_matrix(gsl_matrix * m) + { + const size_t N = m->size1; + const size_t M = m->size2; + size_t i, j; -40.8 Volume, Area and Length -============================ + for (i = 0; i < N; i++) + { + for (j = 0; j < M; j++) + { + gsl_matrix_set(m, i, j, 1.0/(i+j+1.0)); + } + } -'GSL_CONST_MKSA_MICRON' - The length of 1 micron. + return GSL_SUCCESS; + } -'GSL_CONST_MKSA_HECTARE' - The area of 1 hectare. + int + main() + { + const size_t n = 10; /* number of observations */ + const size_t p = 8; /* number of model parameters */ + size_t i; + gsl_matrix *X = gsl_matrix_alloc(n, p); + gsl_vector *y = gsl_vector_alloc(n); -'GSL_CONST_MKSA_ACRE' - The area of 1 acre. + /* construct Hilbert matrix and rhs vector */ + hilbert_matrix(X); -'GSL_CONST_MKSA_LITER' - The volume of 1 liter. + { + double val = 1.0; + for (i = 0; i < n; ++i) + { + gsl_vector_set(y, i, val); + val *= -1.0; + } + } -'GSL_CONST_MKSA_US_GALLON' - The volume of 1 US gallon. + { + const size_t npoints = 200; /* number of points on L-curve and GCV curve */ + gsl_multifit_linear_workspace *w = + gsl_multifit_linear_alloc(n, p); + gsl_vector *c = gsl_vector_alloc(p); /* OLS solution */ + gsl_vector *c_lcurve = gsl_vector_alloc(p); /* regularized solution (L-curve) */ + gsl_vector *c_gcv = gsl_vector_alloc(p); /* regularized solution (GCV) */ + gsl_vector *reg_param = gsl_vector_alloc(npoints); + gsl_vector *rho = gsl_vector_alloc(npoints); /* residual norms */ + gsl_vector *eta = gsl_vector_alloc(npoints); /* solution norms */ + gsl_vector *G = gsl_vector_alloc(npoints); /* GCV function values */ + double lambda_l; /* optimal regularization parameter (L-curve) */ + double lambda_gcv; /* optimal regularization parameter (GCV) */ + double G_gcv; /* G(lambda_gcv) */ + size_t reg_idx; /* index of optimal lambda */ + double rcond; /* reciprocal condition number of X */ + double chisq, rnorm, snorm; + + /* compute SVD of X */ + gsl_multifit_linear_svd(X, w); + + rcond = gsl_multifit_linear_rcond(w); + fprintf(stderr, "matrix condition number = %e\n", 1.0 / rcond); + + /* unregularized (standard) least squares fit, lambda = 0 */ + gsl_multifit_linear_solve(0.0, X, y, c, &rnorm, &snorm, w); + chisq = pow(rnorm, 2.0); + + fprintf(stderr, "=== Unregularized fit ===\n"); + fprintf(stderr, "residual norm = %g\n", rnorm); + fprintf(stderr, "solution norm = %g\n", snorm); + fprintf(stderr, "chisq/dof = %g\n", chisq / (n - p)); + + /* calculate L-curve and find its corner */ + gsl_multifit_linear_lcurve(y, reg_param, rho, eta, w); + gsl_multifit_linear_lcorner(rho, eta, ®_idx); + + /* store optimal regularization parameter */ + lambda_l = gsl_vector_get(reg_param, reg_idx); + + /* regularize with lambda_l */ + gsl_multifit_linear_solve(lambda_l, X, y, c_lcurve, &rnorm, &snorm, w); + chisq = pow(rnorm, 2.0) + pow(lambda_l * snorm, 2.0); + + fprintf(stderr, "=== Regularized fit (L-curve) ===\n"); + fprintf(stderr, "optimal lambda: %g\n", lambda_l); + fprintf(stderr, "residual norm = %g\n", rnorm); + fprintf(stderr, "solution norm = %g\n", snorm); + fprintf(stderr, "chisq/dof = %g\n", chisq / (n - p)); + + /* calculate GCV curve and find its minimum */ + gsl_multifit_linear_gcv(y, reg_param, G, &lambda_gcv, &G_gcv, w); + + /* regularize with lambda_gcv */ + gsl_multifit_linear_solve(lambda_gcv, X, y, c_gcv, &rnorm, &snorm, w); + chisq = pow(rnorm, 2.0) + pow(lambda_gcv * snorm, 2.0); + + fprintf(stderr, "=== Regularized fit (GCV) ===\n"); + fprintf(stderr, "optimal lambda: %g\n", lambda_gcv); + fprintf(stderr, "residual norm = %g\n", rnorm); + fprintf(stderr, "solution norm = %g\n", snorm); + fprintf(stderr, "chisq/dof = %g\n", chisq / (n - p)); -'GSL_CONST_MKSA_CANADIAN_GALLON' - The volume of 1 Canadian gallon. + /* output L-curve and GCV curve */ + for (i = 0; i < npoints; ++i) + { + printf("%e %e %e %e\n", + gsl_vector_get(reg_param, i), + gsl_vector_get(rho, i), + gsl_vector_get(eta, i), + gsl_vector_get(G, i)); + } -'GSL_CONST_MKSA_UK_GALLON' - The volume of 1 UK gallon. + /* output L-curve corner point */ + printf("\n\n%f %f\n", + gsl_vector_get(rho, reg_idx), + gsl_vector_get(eta, reg_idx)); + + /* output GCV curve corner minimum */ + printf("\n\n%e %e\n", + lambda_gcv, + G_gcv); + + gsl_multifit_linear_free(w); + gsl_vector_free(c); + gsl_vector_free(c_lcurve); + gsl_vector_free(reg_param); + gsl_vector_free(rho); + gsl_vector_free(eta); + gsl_vector_free(G); + } -'GSL_CONST_MKSA_QUART' - The volume of 1 quart. + gsl_matrix_free(X); + gsl_vector_free(y); -'GSL_CONST_MKSA_PINT' - The volume of 1 pint. + return 0; + }  -File: gsl-ref.info, Node: Mass and Weight, Next: Thermal Energy and Power, Prev: Volume Area and Length, Up: Physical Constants - -40.9 Mass and Weight -==================== - -'GSL_CONST_MKSA_POUND_MASS' - The mass of 1 pound. +File: gsl-ref.info, Node: Fitting robust linear regression example, Next: Fitting large linear systems example, Prev: Fitting regularized linear regression example 2, Up: Fitting Examples -'GSL_CONST_MKSA_OUNCE_MASS' - The mass of 1 ounce. +38.8.5 Robust Linear Regression Example +--------------------------------------- -'GSL_CONST_MKSA_TON' - The mass of 1 ton. +The next program demonstrates the advantage of robust least squares on a +dataset with outliers. The program generates linear (x,y) data pairs on +the line y = 1.45 x + 3.88, adds some random noise, and inserts 3 +outliers into the dataset. Both the robust and ordinary least squares +(OLS) coefficients are computed for comparison. -'GSL_CONST_MKSA_METRIC_TON' - The mass of 1 metric ton (1000 kg). + #include + #include + #include -'GSL_CONST_MKSA_UK_TON' - The mass of 1 UK ton. + int + dofit(const gsl_multifit_robust_type *T, + const gsl_matrix *X, const gsl_vector *y, + gsl_vector *c, gsl_matrix *cov) + { + int s; + gsl_multifit_robust_workspace * work + = gsl_multifit_robust_alloc (T, X->size1, X->size2); -'GSL_CONST_MKSA_TROY_OUNCE' - The mass of 1 troy ounce. + s = gsl_multifit_robust (X, y, c, cov, work); + gsl_multifit_robust_free (work); -'GSL_CONST_MKSA_CARAT' - The mass of 1 carat. + return s; + } -'GSL_CONST_MKSA_GRAM_FORCE' - The force of 1 gram weight. + int + main (int argc, char **argv) + { + size_t i; + size_t n; + const size_t p = 2; /* linear fit */ + gsl_matrix *X, *cov; + gsl_vector *x, *y, *c, *c_ols; + const double a = 1.45; /* slope */ + const double b = 3.88; /* intercept */ + gsl_rng *r; -'GSL_CONST_MKSA_POUND_FORCE' - The force of 1 pound weight. + if (argc != 2) + { + fprintf (stderr,"usage: robfit n\n"); + exit (-1); + } -'GSL_CONST_MKSA_KILOPOUND_FORCE' - The force of 1 kilopound weight. + n = atoi (argv[1]); -'GSL_CONST_MKSA_POUNDAL' - The force of 1 poundal. + X = gsl_matrix_alloc (n, p); + x = gsl_vector_alloc (n); + y = gsl_vector_alloc (n); - -File: gsl-ref.info, Node: Thermal Energy and Power, Next: Pressure, Prev: Mass and Weight, Up: Physical Constants + c = gsl_vector_alloc (p); + c_ols = gsl_vector_alloc (p); + cov = gsl_matrix_alloc (p, p); -40.10 Thermal Energy and Power -============================== + r = gsl_rng_alloc(gsl_rng_default); -'GSL_CONST_MKSA_CALORIE' - The energy of 1 calorie. + /* generate linear dataset */ + for (i = 0; i < n - 3; i++) + { + double dx = 10.0 / (n - 1.0); + double ei = gsl_rng_uniform(r); + double xi = -5.0 + i * dx; + double yi = a * xi + b; -'GSL_CONST_MKSA_BTU' - The energy of 1 British Thermal Unit, btu. + gsl_vector_set (x, i, xi); + gsl_vector_set (y, i, yi + ei); + } -'GSL_CONST_MKSA_THERM' - The energy of 1 Therm. + /* add a few outliers */ + gsl_vector_set(x, n - 3, 4.7); + gsl_vector_set(y, n - 3, -8.3); -'GSL_CONST_MKSA_HORSEPOWER' - The power of 1 horsepower. + gsl_vector_set(x, n - 2, 3.5); + gsl_vector_set(y, n - 2, -6.7); - -File: gsl-ref.info, Node: Pressure, Next: Viscosity, Prev: Thermal Energy and Power, Up: Physical Constants + gsl_vector_set(x, n - 1, 4.1); + gsl_vector_set(y, n - 1, -6.0); -40.11 Pressure -============== + /* construct design matrix X for linear fit */ + for (i = 0; i < n; ++i) + { + double xi = gsl_vector_get(x, i); -'GSL_CONST_MKSA_BAR' - The pressure of 1 bar. + gsl_matrix_set (X, i, 0, 1.0); + gsl_matrix_set (X, i, 1, xi); + } -'GSL_CONST_MKSA_STD_ATMOSPHERE' - The pressure of 1 standard atmosphere. + /* perform robust and OLS fit */ + dofit(gsl_multifit_robust_ols, X, y, c_ols, cov); + dofit(gsl_multifit_robust_bisquare, X, y, c, cov); -'GSL_CONST_MKSA_TORR' - The pressure of 1 torr. + /* output data and model */ + for (i = 0; i < n; ++i) + { + double xi = gsl_vector_get(x, i); + double yi = gsl_vector_get(y, i); + gsl_vector_view v = gsl_matrix_row(X, i); + double y_ols, y_rob, y_err; -'GSL_CONST_MKSA_METER_OF_MERCURY' - The pressure of 1 meter of mercury. + gsl_multifit_robust_est(&v.vector, c, cov, &y_rob, &y_err); + gsl_multifit_robust_est(&v.vector, c_ols, cov, &y_ols, &y_err); -'GSL_CONST_MKSA_INCH_OF_MERCURY' - The pressure of 1 inch of mercury. + printf("%g %g %g %g\n", xi, yi, y_rob, y_ols); + } -'GSL_CONST_MKSA_INCH_OF_WATER' - The pressure of 1 inch of water. + #define C(i) (gsl_vector_get(c,(i))) + #define COV(i,j) (gsl_matrix_get(cov,(i),(j))) -'GSL_CONST_MKSA_PSI' - The pressure of 1 pound per square inch. + { + printf ("# best fit: Y = %g + %g X\n", + C(0), C(1)); - -File: gsl-ref.info, Node: Viscosity, Next: Light and Illumination, Prev: Pressure, Up: Physical Constants + printf ("# covariance matrix:\n"); + printf ("# [ %+.5e, %+.5e\n", + COV(0,0), COV(0,1)); + printf ("# %+.5e, %+.5e\n", + COV(1,0), COV(1,1)); + } -40.12 Viscosity -=============== + gsl_matrix_free (X); + gsl_vector_free (x); + gsl_vector_free (y); + gsl_vector_free (c); + gsl_vector_free (c_ols); + gsl_matrix_free (cov); + gsl_rng_free(r); -'GSL_CONST_MKSA_POISE' - The dynamic viscosity of 1 poise. + return 0; + } -'GSL_CONST_MKSA_STOKES' - The kinematic viscosity of 1 stokes. + The output from the program is shown in the following plot.  -File: gsl-ref.info, Node: Light and Illumination, Next: Radioactivity, Prev: Viscosity, Up: Physical Constants - -40.13 Light and Illumination -============================ +File: gsl-ref.info, Node: Fitting large linear systems example, Prev: Fitting robust linear regression example, Up: Fitting Examples -'GSL_CONST_MKSA_STILB' - The luminance of 1 stilb. +38.8.6 Large Dense Linear Regression Example +-------------------------------------------- -'GSL_CONST_MKSA_LUMEN' - The luminous flux of 1 lumen. +The following program demostrates the large dense linear least squares +solvers. This example is adapted from Trefethen and Bau, and fits the +function f(t) = \exp{(\sin^3{(10t)}}) on the interval [0,1] with a +degree 15 polynomial. The program generates n = 50000 equally spaced +points t_i on this interval, calculates the function value and adds +random noise to determine the observation value y_i. The entries of the +least squares matrix are X_{ij} = t_i^j, representing a polynomial fit. +The matrix is highly ill-conditioned, with a condition number of about +1.4 \cdot 10^{11}. The program accumulates the matrix into the least +squares system in 5 blocks, each with 10000 rows. This way the full +matrix X is never stored in memory. We solve the system with both the +normal equations and TSQR methods. The results are shown in the plot +below. In the top left plot, we see the unregularized normal equations +solution has larger error than TSQR due to the ill-conditioning of the +matrix. In the bottom left plot, we show the L-curve, which exhibits +multiple corners. In the top right panel, we plot a regularized +solution using \lambda = 10^{-6}. The TSQR and normal solutions now +agree, however they are unable to provide a good fit due to the damping. +This indicates that for some ill-conditioned problems, regularizing the +normal equations does not improve the solution. This is further +illustrated in the bottom right panel, where we plot the L-curve +calculated from the normal equations. The curve agrees with the TSQR +curve for larger damping parameters, but for small \lambda, the normal +equations approach cannot provide accurate solution vectors leading to +numerical inaccuracies in the left portion of the curve. -'GSL_CONST_MKSA_LUX' - The illuminance of 1 lux. - -'GSL_CONST_MKSA_PHOT' - The illuminance of 1 phot. - -'GSL_CONST_MKSA_FOOTCANDLE' - The illuminance of 1 footcandle. - -'GSL_CONST_MKSA_LAMBERT' - The luminance of 1 lambert. + #include + #include + #include + #include + #include + #include + #include + #include -'GSL_CONST_MKSA_FOOTLAMBERT' - The luminance of 1 footlambert. + /* function to be fitted */ + double + func(const double t) + { + double x = sin(10.0 * t); + return exp(x*x*x); + } - -File: gsl-ref.info, Node: Radioactivity, Next: Force and Energy, Prev: Light and Illumination, Up: Physical Constants + /* construct a row of the least squares matrix */ + int + build_row(const double t, gsl_vector *row) + { + const size_t p = row->size; + double Xj = 1.0; + size_t j; -40.14 Radioactivity -=================== + for (j = 0; j < p; ++j) + { + gsl_vector_set(row, j, Xj); + Xj *= t; + } -'GSL_CONST_MKSA_CURIE' - The activity of 1 curie. + return 0; + } -'GSL_CONST_MKSA_ROENTGEN' - The exposure of 1 roentgen. + int + solve_system(const int print_data, const gsl_multilarge_linear_type * T, + const double lambda, const size_t n, const size_t p, + gsl_vector * c) + { + const size_t nblock = 5; /* number of blocks to accumulate */ + const size_t nrows = n / nblock; /* number of rows per block */ + gsl_multilarge_linear_workspace * w = + gsl_multilarge_linear_alloc(T, p); + gsl_matrix *X = gsl_matrix_alloc(nrows, p); + gsl_vector *y = gsl_vector_alloc(nrows); + gsl_rng *r = gsl_rng_alloc(gsl_rng_default); + const size_t nlcurve = 200; + gsl_vector *reg_param = gsl_vector_alloc(nlcurve); + gsl_vector *rho = gsl_vector_alloc(nlcurve); + gsl_vector *eta = gsl_vector_alloc(nlcurve); + size_t rowidx = 0; + double rnorm, snorm, rcond; + double t = 0.0; + double dt = 1.0 / (n - 1.0); -'GSL_CONST_MKSA_RAD' - The absorbed dose of 1 rad. + while (rowidx < n) + { + size_t nleft = n - rowidx; /* number of rows left to accumulate */ + size_t nr = GSL_MIN(nrows, nleft); /* number of rows in this block */ + gsl_matrix_view Xv = gsl_matrix_submatrix(X, 0, 0, nr, p); + gsl_vector_view yv = gsl_vector_subvector(y, 0, nr); + size_t i; - -File: gsl-ref.info, Node: Force and Energy, Next: Prefixes, Prev: Radioactivity, Up: Physical Constants + /* build (X,y) block with 'nr' rows */ + for (i = 0; i < nr; ++i) + { + gsl_vector_view row = gsl_matrix_row(&Xv.matrix, i); + double fi = func(t); + double ei = gsl_ran_gaussian (r, 0.1 * fi); /* noise */ + double yi = fi + ei; -40.15 Force and Energy -====================== + /* construct this row of LS matrix */ + build_row(t, &row.vector); -'GSL_CONST_MKSA_NEWTON' - The SI unit of force, 1 Newton. + /* set right hand side value with added noise */ + gsl_vector_set(&yv.vector, i, yi); -'GSL_CONST_MKSA_DYNE' - The force of 1 Dyne = 10^-5 Newton. + if (print_data && (i % 100 == 0)) + printf("%f %f\n", t, yi); -'GSL_CONST_MKSA_JOULE' - The SI unit of energy, 1 Joule. + t += dt; + } -'GSL_CONST_MKSA_ERG' - The energy 1 erg = 10^-7 Joule. + /* accumulate (X,y) block into LS system */ + gsl_multilarge_linear_accumulate(&Xv.matrix, &yv.vector, w); - -File: gsl-ref.info, Node: Prefixes, Next: Physical Constant Examples, Prev: Force and Energy, Up: Physical Constants + rowidx += nr; + } -40.16 Prefixes -============== + if (print_data) + printf("\n\n"); -These constants are dimensionless scaling factors. + /* compute L-curve */ + gsl_multilarge_linear_lcurve(reg_param, rho, eta, w); -'GSL_CONST_NUM_YOTTA' - 10^24 + /* solve large LS system and store solution in c */ + gsl_multilarge_linear_solve(lambda, c, &rnorm, &snorm, w); -'GSL_CONST_NUM_ZETTA' - 10^21 + /* compute reciprocal condition number */ + gsl_multilarge_linear_rcond(&rcond, w); -'GSL_CONST_NUM_EXA' - 10^18 + fprintf(stderr, "=== Method %s ===\n", gsl_multilarge_linear_name(w)); + fprintf(stderr, "condition number = %e\n", 1.0 / rcond); + fprintf(stderr, "residual norm = %e\n", rnorm); + fprintf(stderr, "solution norm = %e\n", snorm); -'GSL_CONST_NUM_PETA' - 10^15 + /* output L-curve */ + { + size_t i; + for (i = 0; i < nlcurve; ++i) + { + printf("%.12e %.12e %.12e\n", + gsl_vector_get(reg_param, i), + gsl_vector_get(rho, i), + gsl_vector_get(eta, i)); + } + printf("\n\n"); + } -'GSL_CONST_NUM_TERA' - 10^12 + gsl_matrix_free(X); + gsl_vector_free(y); + gsl_multilarge_linear_free(w); + gsl_rng_free(r); + gsl_vector_free(reg_param); + gsl_vector_free(rho); + gsl_vector_free(eta); -'GSL_CONST_NUM_GIGA' - 10^9 + return 0; + } -'GSL_CONST_NUM_MEGA' - 10^6 + int + main(int argc, char *argv[]) + { + const size_t n = 50000; /* number of observations */ + const size_t p = 16; /* polynomial order + 1 */ + double lambda = 0.0; /* regularization parameter */ + gsl_vector *c_tsqr = gsl_vector_alloc(p); + gsl_vector *c_normal = gsl_vector_alloc(p); + + if (argc > 1) + lambda = atof(argv[1]); -'GSL_CONST_NUM_KILO' - 10^3 + /* solve system with TSQR method */ + solve_system(1, gsl_multilarge_linear_tsqr, lambda, n, p, c_tsqr); -'GSL_CONST_NUM_MILLI' - 10^-3 + /* solve system with Normal equations method */ + solve_system(0, gsl_multilarge_linear_normal, lambda, n, p, c_normal); -'GSL_CONST_NUM_MICRO' - 10^-6 + /* output solutions */ + { + gsl_vector *v = gsl_vector_alloc(p); + double t; -'GSL_CONST_NUM_NANO' - 10^-9 + for (t = 0.0; t <= 1.0; t += 0.01) + { + double f_exact = func(t); + double f_tsqr, f_normal; -'GSL_CONST_NUM_PICO' - 10^-12 + build_row(t, v); + gsl_blas_ddot(v, c_tsqr, &f_tsqr); + gsl_blas_ddot(v, c_normal, &f_normal); -'GSL_CONST_NUM_FEMTO' - 10^-15 + printf("%f %e %e %e\n", t, f_exact, f_tsqr, f_normal); + } -'GSL_CONST_NUM_ATTO' - 10^-18 + gsl_vector_free(v); + } -'GSL_CONST_NUM_ZEPTO' - 10^-21 + gsl_vector_free(c_tsqr); + gsl_vector_free(c_normal); -'GSL_CONST_NUM_YOCTO' - 10^-24 + return 0; + }  -File: gsl-ref.info, Node: Physical Constant Examples, Next: Physical Constant References and Further Reading, Prev: Prefixes, Up: Physical Constants - -40.17 Examples -============== - -The following program demonstrates the use of the physical constants in -a calculation. In this case, the goal is to calculate the range of -light-travel times from Earth to Mars. - - The required data is the average distance of each planet from the Sun -in astronomical units (the eccentricities and inclinations of the orbits -will be neglected for the purposes of this calculation). The average -radius of the orbit of Mars is 1.52 astronomical units, and for the -orbit of Earth it is 1 astronomical unit (by definition). These values -are combined with the MKSA values of the constants for the speed of -light and the length of an astronomical unit to produce a result for the -shortest and longest light-travel times in seconds. The figures are -converted into minutes before being displayed. +File: gsl-ref.info, Node: Fitting References and Further Reading, Prev: Fitting Examples, Up: Least-Squares Fitting - #include - #include +38.9 References and Further Reading +=================================== - int - main (void) - { - double c = GSL_CONST_MKSA_SPEED_OF_LIGHT; - double au = GSL_CONST_MKSA_ASTRONOMICAL_UNIT; - double minutes = GSL_CONST_MKSA_MINUTE; - - /* distance stored in meters */ - double r_earth = 1.00 * au; - double r_mars = 1.52 * au; - - double t_min, t_max; - - t_min = (r_mars - r_earth) / c; - t_max = (r_mars + r_earth) / c; - - printf ("light travel time from Earth to Mars:\n"); - printf ("minimum = %.1f minutes\n", t_min / minutes); - printf ("maximum = %.1f minutes\n", t_max / minutes); +A summary of formulas and techniques for least squares fitting can be +found in the "Statistics" chapter of the Annual Review of Particle +Physics prepared by the Particle Data Group, - return 0; - } + 'Review of Particle Properties', R.M. Barnett et al., Physical + Review D54, 1 (1996) -Here is the output from the program, +The Review of Particle Physics is available online at the website given +above. - light travel time from Earth to Mars: - minimum = 4.3 minutes - maximum = 21.0 minutes + The tests used to prepare these routines are based on the NIST +Statistical Reference Datasets. The datasets and their documentation +are available from NIST at the following website, - -File: gsl-ref.info, Node: Physical Constant References and Further Reading, Prev: Physical Constant Examples, Up: Physical Constants + . -40.18 References and Further Reading -==================================== +More information on Tikhonov regularization can be found in -The authoritative sources for physical constants are the 2006 CODATA -recommended values, published in the article below. Further information -on the values of physical constants is also available from the NIST -website. - - P.J. Mohr, B.N. Taylor, D.B. Newell, "CODATA Recommended Values of - the Fundamental Physical Constants: 2006", Reviews of Modern - Physics, 80(2), pp. 633-730 (2008). - - - - -File: gsl-ref.info, Node: IEEE floating-point arithmetic, Next: Debugging Numerical Programs, Prev: Physical Constants, Up: Top - -41 IEEE floating-point arithmetic -********************************* - -This chapter describes functions for examining the representation of -floating point numbers and controlling the floating point environment of -your program. The functions described in this chapter are declared in -the header file 'gsl_ieee_utils.h'. + Hansen, P. C. (1998), Rank-Deficient and Discrete Ill-Posed + Problems: Numerical Aspects of Linear Inversion. SIAM Monogr. on + Mathematical Modeling and Computation, Society for Industrial and + Applied Mathematics + + M. Rezghi and S. M. Hosseini (2009), A new variant of L-curve for + Tikhonov regularization, Journal of Computational and Applied + Mathematics, Volume 231, Issue 2, pages 914-924. -* Menu: +The GSL implementation of robust linear regression closely follows the +publications -* Representation of floating point numbers:: -* Setting up your IEEE environment:: -* IEEE References and Further Reading:: + DuMouchel, W. and F. O'Brien (1989), "Integrating a robust option + into a multiple regression computing environment," Computer Science + and Statistics: Proceedings of the 21st Symposium on the Interface, + American Statistical Association - -File: gsl-ref.info, Node: Representation of floating point numbers, Next: Setting up your IEEE environment, Up: IEEE floating-point arithmetic + Street, J.O., R.J. Carroll, and D. Ruppert (1988), "A note on + computing robust regression estimates via iteratively reweighted + least squares," The American Statistician, v. 42, pp. 152-154. -41.1 Representation of floating point numbers -============================================= +More information about the normal equations and TSQR approach for +solving large linear least squares systems can be found in the +publications -The IEEE Standard for Binary Floating-Point Arithmetic defines binary -formats for single and double precision numbers. Each number is -composed of three parts: a "sign bit" (s), an "exponent" (E) and a -"fraction" (f). The numerical value of the combination (s,E,f) is given -by the following formula, + Trefethen, L. N. and Bau, D. (1997), "Numerical Linear Algebra", + SIAM. - (-1)^s (1.fffff...) 2^E + Demmel, J., Grigori, L., Hoemmen, M. F., and Langou, J. + "Communication-optimal parallel and sequential QR and LU + factorizations", UCB Technical Report No. UCB/EECS-2008-89, 2008. -The sign bit is either zero or one. The exponent ranges from a minimum -value E_min to a maximum value E_max depending on the precision. The -exponent is converted to an unsigned number e, known as the "biased -exponent", for storage by adding a "bias" parameter, e = E + bias. The -sequence fffff... represents the digits of the binary fraction f. The -binary digits are stored in "normalized form", by adjusting the exponent -to give a leading digit of 1. Since the leading digit is always 1 for -normalized numbers it is assumed implicitly and does not have to be -stored. Numbers smaller than 2^(E_min) are be stored in "denormalized -form" with a leading zero, + +File: gsl-ref.info, Node: Nonlinear Least-Squares Fitting, Next: Basis Splines, Prev: Least-Squares Fitting, Up: Top - (-1)^s (0.fffff...) 2^(E_min) +39 Nonlinear Least-Squares Fitting +********************************** -This allows gradual underflow down to 2^(E_min - p) for p bits of -precision. A zero is encoded with the special exponent of 2^(E_min - 1) -and infinities with the exponent of 2^(E_max + 1). +This chapter describes functions for multidimensional nonlinear +least-squares fitting. There are generally two classes of algorithms +for solving nonlinear least squares problems, which fall under line +search methods and trust region methods. GSL currently implements only +trust region methods and provides the user with full access to +intermediate steps of the iteration. The user also has the ability to +tune a number of parameters which affect low-level aspects of the +algorithm which can help to accelerate convergence for the specific +problem at hand. GSL provides two separate interfaces for nonlinear +least squares fitting. The first is designed for small to moderate +sized problems, and the second is designed for very large problems, +which may or may not have significant sparse structure. + + The header file 'gsl_multifit_nlinear.h' contains prototypes for the +multidimensional nonlinear fitting functions and related declarations +relating to the small to moderate sized systems. + + The header file 'gsl_multilarge_nlinear.h' contains prototypes for +the multidimensional nonlinear fitting functions and related +declarations relating to large systems. -The format for single precision numbers uses 32 bits divided in the -following way, +* Menu: - seeeeeeeefffffffffffffffffffffff +* Nonlinear Least-Squares Overview:: +* Nonlinear Least-Squares TRS Overview:: +* Nonlinear Least-Squares Weighted Overview:: +* Nonlinear Least-Squares Tunable Parameters:: +* Nonlinear Least-Squares Initialization:: +* Nonlinear Least-Squares Function Definition:: +* Nonlinear Least-Squares Iteration:: +* Nonlinear Least-Squares Testing for Convergence:: +* Nonlinear Least-Squares High Level Driver:: +* Nonlinear Least-Squares Covariance Matrix:: +* Nonlinear Least-Squares Troubleshooting:: +* Nonlinear Least-Squares Examples:: +* Nonlinear Least-Squares References and Further Reading:: - s = sign bit, 1 bit - e = exponent, 8 bits (E_min=-126, E_max=127, bias=127) - f = fraction, 23 bits + +File: gsl-ref.info, Node: Nonlinear Least-Squares Overview, Next: Nonlinear Least-Squares TRS Overview, Up: Nonlinear Least-Squares Fitting -The format for double precision numbers uses 64 bits divided in the -following way, +39.1 Overview +============= - seeeeeeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffff +The problem of multidimensional nonlinear least-squares fitting requires +the minimization of the squared residuals of n functions, f_i, in p +parameters, x_i, - s = sign bit, 1 bit - e = exponent, 11 bits (E_min=-1022, E_max=1023, bias=1023) - f = fraction, 52 bits + \Phi(x) = (1/2) || f(x) ||^2 + = (1/2) \sum_{i=1}^{n} f_i(x_1, ..., x_p)^2 -It is often useful to be able to investigate the behavior of a -calculation at the bit-level and the library provides functions for -printing the IEEE representations in a human-readable form. +In trust region methods, the objective (or cost) function \Phi(x) is +approximated by a model function m_k(\delta) in the vicinity of some +point x_k. The model function is often simply a second order Taylor +series expansion around the point x_k, ie: + + \Phi(x_k + \delta) ~=~ m_k(\delta) = \Phi(x_k) + g_k^T \delta + 1/2 \delta^T B_k \delta + + where g_k = \nabla \Phi(x_k) = J^T f is the gradient vector at the +point x_k, B_k = \nabla^2 \Phi(x_k) is the Hessian matrix at x_k, or +some approximation to it, and J is the n-by-p Jacobian matrix J_{ij} = d +f_i / d x_j. In order to find the next step \delta, we minimize the +model function m_k(\delta), but search for solutions only within a +region where we trust that m_k(\delta) is a good approximation to the +objective function \Phi(x_k + \delta). In other words, we seek a +solution of the trust region subproblem (TRS) + + \min_(\delta \in R^p) m_k(\delta), s.t. || D_k \delta || <= \Delta_k + + where \Delta_k > 0 is the trust region radius and D_k is a scaling +matrix. If D_k = I, then the trust region is a ball of radius \Delta_k +centered at x_k. In some applications, the parameter vector x may have +widely different scales. For example, one parameter might be a +temperature on the order of 10^3 K, while another might be a length on +the order of 10^{-6} m. In such cases, a spherical trust region may not +be the best choice, since if \Phi changes rapidly along directions with +one scale, and more slowly along directions with a different scale, the +model function m_k may be a poor approximation to \Phi along the rapidly +changing directions. In such problems, it may be best to use an +elliptical trust region, by setting D_k to a diagonal matrix whose +entries are designed so that the scaled step D_k \delta has entries of +approximately the same order of magnitude. + + The trust region subproblem above normally amounts to solving a +linear least squares system (or multiple systems) for the step \delta. +Once \delta is computed, it is checked whether or not it reduces the +objective function \Phi(x). A useful statistic for this is to look at +the ratio + + \rho_k = ( \Phi(x_k) - \Phi(x_k + \delta_k) / ( m_k(0) - m_k(\delta_k) ) + + where the numerator is the actual reduction of the objective function +due to the step \delta_k, and the denominator is the predicted reduction +due to the model m_k. If \rho_k is negative, it means that the step +\delta_k increased the objective function and so it is rejected. If +\rho_k is positive, then we have found a step which reduced the +objective function and it is accepted. Furthermore, if \rho_k is close +to 1, then this indicates that the model function is a good +approximation to the objective function in the trust region, and so on +the next iteration the trust region is enlarged in order to take more +ambitious steps. When a step is rejected, the trust region is made +smaller and the TRS is solved again. An outline for the general trust +region method used by GSL can now be given. + +Trust Region Algorithm + + 1. Initialize: given x_0, construct m_0(\delta), D_0 and \Delta_0 > 0 + + 2. For k = 0, 1, 2, ... + + a. If converged, then stop + + b. Solve TRS for trial step \delta_k + + c. Evaluate trial step by computing \rho_k + + 1. if step is accepted, set x_{k+1} = x_k + \delta_k and + increase radius, \Delta_{k+1} = \alpha \Delta_k + 2. if step is rejected, set x_{k+1} = x_k and decrease + radius, \Delta_{k+1} = {\Delta_k \over \beta}; goto 2(b) + + d. Construct m_{k+1}(\delta) and D_{k+1} + +GSL offers the user a number of different algorithms for solving the +trust region subproblem in 2(b), as well as different choices of scaling +matrices D_k and different methods of updating the trust region radius +\Delta_k. Therefore, while reasonable default methods are provided, the +user has a lot of control to fine-tune the various steps of the +algorithm for their specific problem. - -- Function: void gsl_ieee_fprintf_float (FILE * STREAM, const float * - X) - -- Function: void gsl_ieee_fprintf_double (FILE * STREAM, const double - * X) - These functions output a formatted version of the IEEE - floating-point number pointed to by X to the stream STREAM. A - pointer is used to pass the number indirectly, to avoid any - undesired promotion from 'float' to 'double'. The output takes one - of the following forms, + +File: gsl-ref.info, Node: Nonlinear Least-Squares TRS Overview, Next: Nonlinear Least-Squares Weighted Overview, Prev: Nonlinear Least-Squares Overview, Up: Nonlinear Least-Squares Fitting - 'NaN' - the Not-a-Number symbol +39.2 Solving the Trust Region Subproblem (TRS) +============================================== - 'Inf, -Inf' - positive or negative infinity +* Menu: - '1.fffff...*2^E, -1.fffff...*2^E' - a normalized floating point number +* Nonlinear Least-Squares TRS Levenberg-Marquardt:: +* Nonlinear Least-Squares TRS Levenberg-Marquardt with Geodesic Acceleration:: +* Nonlinear Least-Squares TRS Dogleg:: +* Nonlinear Least-Squares TRS Double Dogleg:: +* Nonlinear Least-Squares TRS 2D Subspace:: +* Nonlinear Least-Squares TRS Steihaug-Toint Conjugate Gradient:: + +Below we describe the methods available for solving the trust region +subproblem. The methods available provide either exact or approximate +solutions to the trust region subproblem. In all algorithms below, the +Hessian matrix B_k is approximated as B_k \approx J_k^T J_k, where J_k = +J(x_k). In all methods, the solution of the TRS involves solving a +linear least squares system involving the Jacobian matrix. For small to +moderate sized problems ('gsl_multifit_nlinear' interface), this is +accomplished by factoring the full Jacobian matrix, which is provided by +the user, with the Cholesky, QR, or SVD decompositions. For large +systems ('gsl_multilarge_nlinear' interface), the user has two choices. +One is to solve the system iteratively, without needing to store the +full Jacobian matrix in memory. With this method, the user must provide +a routine to calculate the matrix-vector products J u or J^T u for a +given vector u. This iterative method is particularly useful for +systems where the Jacobian has sparse structure, since forming +matrix-vector products can be done cheaply. The second option for large +systems involves forming the normal equations matrix J^T J and then +factoring it using a Cholesky decomposition. The normal equations +matrix is p-by-p, typically much smaller than the full n-by-p Jacobian, +and can usually be stored in memory even if the full Jacobian matrix +cannot. This option is useful for large, dense systems, or if the +iterative method has difficulty converging. + + +File: gsl-ref.info, Node: Nonlinear Least-Squares TRS Levenberg-Marquardt, Next: Nonlinear Least-Squares TRS Levenberg-Marquardt with Geodesic Acceleration, Up: Nonlinear Least-Squares TRS Overview + +39.2.1 Levenberg-Marquardt +-------------------------- + +There is a theorem which states that if \delta_k is a solution to the +trust region subproblem given above, then there exists \mu_k \ge 0 such +that + + ( B_k + \mu_k D_k^T D_k ) \delta_k = -g_k + + with \mu_k (\Delta_k - ||D_k \delta_k||) = 0. This forms the basis +of the Levenberg-Marquardt algorithm, which controls the trust region +size by adjusting the parameter \mu_k rather than the radius \Delta_k +directly. For each radius \Delta_k, there is a unique parameter \mu_k +which solves the TRS, and they have an inverse relationship, so that +large values of \mu_k correspond to smaller trust regions, while small +values of \mu_k correspond to larger trust regions. + +With the approximation B_k \approx J_k^T J_k, on each iteration, in +order to calculate the step \delta_k, the following linear least squares +problem is solved: + + [J_k; sqrt(mu_k) D_k] \delta_k = - [f_k; 0] + +If the step \delta_k is accepted, then \mu_k is decreased on the next +iteration in order to take a larger step, otherwise it is increased to +take a smaller step. The Levenberg-Marquardt algorithm provides an +exact solution of the trust region subproblem, but typically has a +higher computational cost per iteration than the approximate methods +discussed below, since it may need to solve the least squares system +above several times for different values of \mu_k. + + +File: gsl-ref.info, Node: Nonlinear Least-Squares TRS Levenberg-Marquardt with Geodesic Acceleration, Next: Nonlinear Least-Squares TRS Dogleg, Prev: Nonlinear Least-Squares TRS Levenberg-Marquardt, Up: Nonlinear Least-Squares TRS Overview + +39.2.2 Levenberg-Marquardt with Geodesic Acceleration +----------------------------------------------------- + +This method applies a so-called geodesic acceleration correction to the +standard Levenberg-Marquardt step \delta_k (Transtrum et al, 2011). By +interpreting \delta_k as a first order step along a geodesic in the +model parameter space (ie: a velocity \delta_k = v_k), the geodesic +acceleration a_k is a second order correction along the geodesic which +is determined by solving the linear least squares system + + [J_k; sqrt(mu_k) D_k] a_k = - [f_vv(x_k); 0] + +where f_{vv} is the second directional derivative of the residual vector +in the velocity direction v, f_{vv}(x) = D_v^2 f = \sum_{\alpha\beta} +v_{\alpha} v_{\beta} \partial_{\alpha} \partial_{\beta} f(x), where +\alpha and \beta are summed over the p parameters. The new total step +is then \delta_k' = v_k + {1 \over 2}a_k. The second order correction +a_k can be calculated with a modest additional cost, and has been shown +to dramatically reduce the number of iterations (and expensive Jacobian +evaluations) required to reach convergence on a variety of different +problems. In order to utilize the geodesic acceleration, the user must +supply a function which provides the second directional derivative +vector f_{vv}(x), or alternatively the library can use a finite +difference method to estimate this vector with one additional function +evaluation of f(x + h v) where h is a tunable step size (see the 'h_fvv' +parameter description). + + +File: gsl-ref.info, Node: Nonlinear Least-Squares TRS Dogleg, Next: Nonlinear Least-Squares TRS Double Dogleg, Prev: Nonlinear Least-Squares TRS Levenberg-Marquardt with Geodesic Acceleration, Up: Nonlinear Least-Squares TRS Overview + +39.2.3 Dogleg +------------- + +This is Powell's dogleg method, which finds an approximate solution to +the trust region subproblem, by restricting its search to a piecewise +linear "dogleg" path, composed of the origin, the Cauchy point which +represents the model minimizer along the steepest descent direction, and +the Gauss-Newton point, which is the overall minimizer of the +unconstrained model. The Gauss-Newton step is calculated by solving + + J_k \delta_gn = -f_k + + which is the main computational task for each iteration, but only +needs to be performed once per iteration. If the Gauss-Newton point is +inside the trust region, it is selected as the step. If it is outside, +the method then calculates the Cauchy point, which is located along the +gradient direction. If the Cauchy point is also outside the trust +region, the method assumes that it is still far from the minimum and so +proceeds along the gradient direction, truncating the step at the trust +region boundary. If the Cauchy point is inside the trust region, with +the Gauss-Newton point outside, the method uses a dogleg step, which is +a linear combination of the gradient direction and the Gauss-Newton +direction, stopping at the trust region boundary. + + +File: gsl-ref.info, Node: Nonlinear Least-Squares TRS Double Dogleg, Next: Nonlinear Least-Squares TRS 2D Subspace, Prev: Nonlinear Least-Squares TRS Dogleg, Up: Nonlinear Least-Squares TRS Overview + +39.2.4 Double Dogleg +-------------------- + +This method is an improvement over the classical dogleg algorithm, which +attempts to include information about the Gauss-Newton step while the +iteration is still far from the minimum. When the Cauchy point is +inside the trust region and the Gauss-Newton point is outside, the +method computes a scaled Gauss-Newton point and then takes a dogleg step +between the Cauchy point and the scaled Gauss-Newton point. The scaling +is calculated to ensure that the reduction in the model m_k is about the +same as the reduction provided by the Cauchy point. + + +File: gsl-ref.info, Node: Nonlinear Least-Squares TRS 2D Subspace, Next: Nonlinear Least-Squares TRS Steihaug-Toint Conjugate Gradient, Prev: Nonlinear Least-Squares TRS Double Dogleg, Up: Nonlinear Least-Squares TRS Overview + +39.2.5 Two Dimensional Subspace +------------------------------- + +The dogleg methods restrict the search for the TRS solution to a 1D +curve defined by the Cauchy and Gauss-Newton points. An improvement to +this is to search for a solution using the full two dimensional subspace +spanned by the Cauchy and Gauss-Newton directions. The dogleg path is +of course inside this subspace, and so this method solves the TRS at +least as accurately as the dogleg methods. Since this method searches a +larger subspace for a solution, it can converge more quickly than dogleg +on some problems. Because the subspace is only two dimensional, this +method is very efficient and the main computation per iteration is to +determine the Gauss-Newton point. + + +File: gsl-ref.info, Node: Nonlinear Least-Squares TRS Steihaug-Toint Conjugate Gradient, Prev: Nonlinear Least-Squares TRS 2D Subspace, Up: Nonlinear Least-Squares TRS Overview + +39.2.6 Steihaug-Toint Conjugate Gradient +---------------------------------------- + +One difficulty of the dogleg methods is calculating the Gauss-Newton +step when the Jacobian matrix is singular. The Steihaug-Toint method +also computes a generalized dogleg step, but avoids solving for the +Gauss-Newton step directly, instead using an iterative conjugate +gradient algorithm. This method performs well at points where the +Jacobian is singular, and is also suitable for large-scale problems +where factoring the Jacobian matrix could be prohibitively expensive. - '0.fffff...*2^E, -0.fffff...*2^E' - a denormalized floating point number + +File: gsl-ref.info, Node: Nonlinear Least-Squares Weighted Overview, Next: Nonlinear Least-Squares Tunable Parameters, Prev: Nonlinear Least-Squares TRS Overview, Up: Nonlinear Least-Squares Fitting - '0, -0' - positive or negative zero +39.3 Weighted Nonlinear Least-Squares +===================================== - The output can be used directly in GNU Emacs Calc mode by preceding - it with '2#' to indicate binary. +Weighted nonlinear least-squares fitting minimizes the function - -- Function: void gsl_ieee_printf_float (const float * X) - -- Function: void gsl_ieee_printf_double (const double * X) - These functions output a formatted version of the IEEE - floating-point number pointed to by X to the stream 'stdout'. + \Phi(x) = (1/2) || f(x) ||_W^2 + = (1/2) \sum_{i=1}^{n} f_i(x_1, ..., x_p)^2 -The following program demonstrates the use of the functions by printing -the single and double precision representations of the fraction 1/3. -For comparison the representation of the value promoted from single to -double precision is also printed. + where W = diag(w_1,w_2,...,w_n) is the weighting matrix, and +||f||_W^2 = f^T W f. The weights w_i are commonly defined as w_i = +1/\sigma_i^2, where \sigma_i is the error in the ith measurement. A +simple change of variables \tilde{f} = W^{1 \over 2} f yields \Phi(x) = +{1 \over 2} ||\tilde{f}||^2, which is in the same form as the unweighted +case. The user can either perform this transform directly on their +function residuals and Jacobian, or use the 'gsl_multifit_nlinear_winit' +interface which automatically performs the correct scaling. To manually +perform this transformation, the residuals and Jacobian should be +modified according to + + f~_i = f_i / \sigma_i + J~_ij = 1 / \sigma_i df_i/dx_j + +For large systems, the user must perform their own weighting. + + +File: gsl-ref.info, Node: Nonlinear Least-Squares Tunable Parameters, Next: Nonlinear Least-Squares Initialization, Prev: Nonlinear Least-Squares Weighted Overview, Up: Nonlinear Least-Squares Fitting + +39.4 Tunable Parameters +======================= + +The user can tune nearly all aspects of the iteration at allocation +time. For the 'gsl_multifit_nlinear' interface, the user may modify the +'gsl_multifit_nlinear_parameters' structure, which is defined as +follows: - #include - #include + typedef struct + { + const gsl_multifit_nlinear_trs *trs; /* trust region subproblem method */ + const gsl_multifit_nlinear_scale *scale; /* scaling method */ + const gsl_multifit_nlinear_solver *solver; /* solver method */ + gsl_multifit_nlinear_fdtype fdtype; /* finite difference method */ + double factor_up; /* factor for increasing trust radius */ + double factor_down; /* factor for decreasing trust radius */ + double avmax; /* max allowed |a|/|v| */ + double h_df; /* step size for finite difference Jacobian */ + double h_fvv; /* step size for finite difference fvv */ + } gsl_multifit_nlinear_parameters; + +For the 'gsl_multilarge_nlinear' interface, the user may modify the +'gsl_multilarge_nlinear_parameters' structure, which is defined as +follows: - int - main (void) + typedef struct { - float f = 1.0/3.0; - double d = 1.0/3.0; + const gsl_multilarge_nlinear_trs *trs; /* trust region subproblem method */ + const gsl_multilarge_nlinear_scale *scale; /* scaling method */ + const gsl_multilarge_nlinear_solver *solver; /* solver method */ + gsl_multilarge_nlinear_fdtype fdtype; /* finite difference method */ + double factor_up; /* factor for increasing trust radius */ + double factor_down; /* factor for decreasing trust radius */ + double avmax; /* max allowed |a|/|v| */ + double h_df; /* step size for finite difference Jacobian */ + double h_fvv; /* step size for finite difference fvv */ + size_t max_iter; /* maximum iterations for trs method */ + double tol; /* tolerance for solving trs */ + } gsl_multilarge_nlinear_parameters; + +Each of these parameters is discussed in further detail below. + + -- Parameter: const gsl_multifit_nlinear_trs * trs + -- Parameter: const gsl_multilarge_nlinear_trs * trs + + This parameter determines the method used to solve the trust region + subproblem, and may be selected from the following choices, + + -- Default: gsl_multifit_nlinear_trs_lm + -- Default: gsl_multilarge_nlinear_trs_lm + This selects the Levenberg-Marquardt algorithm. + + -- Option: gsl_multifit_nlinear_trs_lmaccel + -- Option: gsl_multilarge_nlinear_trs_lmaccel + This selects the Levenberg-Marquardt algorithm with geodesic + acceleration. + + -- Option: gsl_multifit_nlinear_trs_dogleg + -- Option: gsl_multilarge_nlinear_trs_dogleg + This selects the dogleg algorithm. + + -- Option: gsl_multifit_nlinear_trs_ddogleg + -- Option: gsl_multilarge_nlinear_trs_ddogleg + This selects the double dogleg algorithm. + + -- Option: gsl_multifit_nlinear_trs_subspace2D + -- Option: gsl_multilarge_nlinear_trs_subspace2D + This selects the 2D subspace algorithm. + + -- Option: gsl_multilarge_nlinear_trs_cgst + This selects the Steihaug-Toint conjugate gradient algorithm. + This method is available only for large systems. + + -- Parameter: const gsl_multifit_nlinear_scale * scale + -- Parameter: const gsl_multilarge_nlinear_scale * scale + + This parameter determines the diagonal scaling matrix D and may be + selected from the following choices, + + -- Default: gsl_multifit_nlinear_scale_more + -- Default: gsl_multilarge_nlinear_scale_more + This damping strategy was suggested by More', and corresponds + to D^T D = max(diag(J^T J)), in other words the maximum + elements of diag(J^T J) encountered thus far in the iteration. + This choice of D makes the problem scale-invariant, so that if + the model parameters x_i are each scaled by an arbitrary + constant, \tilde{x}_i = a_i x_i, then the sequence of iterates + produced by the algorithm would be unchanged. This method can + work very well in cases where the model parameters have widely + different scales (ie: if some parameters are measured in + nanometers, while others are measured in degrees Kelvin). + This strategy has been proven effective on a large class of + problems and so it is the library default, but it may not be + the best choice for all problems. + + -- Option: gsl_multifit_nlinear_scale_levenberg + -- Option: gsl_multilarge_nlinear_scale_levenberg + This damping strategy was originally suggested by Levenberg, + and corresponds to D^T D = I. This method has also proven + effective on a large class of problems, but is not + scale-invariant. However, some authors (e.g. Transtrum and + Sethna 2012) argue that this choice is better for problems + which are susceptible to parameter evaporation (ie: parameters + go to infinity) + + -- Option: gsl_multifit_nlinear_scale_marquardt + -- Option: gsl_multilarge_nlinear_scale_marquardt + This damping strategy was suggested by Marquardt, and + corresponds to D^T D = diag(J^T J). This method is + scale-invariant, but it is generally considered inferior to + both the Levenberg and More' strategies, though may work well + on certain classes of problems. + + -- Parameter: const gsl_multifit_nlinear_solver * solver + -- Parameter: const gsl_multilarge_nlinear_solver * solver + + Solving the trust region subproblem on each iteration almost always + requires the solution of the following linear least squares system + + [J; sqrt(mu) D] \delta = - [f; 0] + + The SOLVER parameter determines how the system is solved and can be + selected from the following choices: + + -- Default: gsl_multifit_nlinear_solver_qr + This method solves the system using a rank revealing QR + decomposition of the Jacobian J. This method will produce + reliable solutions in cases where the Jacobian is rank + deficient or near-singular but does require about twice as + many operations as the Cholesky method discussed below. + + -- Option: gsl_multifit_nlinear_solver_cholesky + -- Default: gsl_multilarge_nlinear_solver_cholesky + This method solves the alternate normal equations problem + + ( J^T J + \mu D^T D ) \delta = -J^T f + + by using a Cholesky decomposition of the matrix J^T J + \mu + D^T D. This method is faster than the QR approach, however it + is susceptible to numerical instabilities if the Jacobian + matrix is rank deficient or near-singular. In these cases, an + attempt is made to reduce the condition number of the matrix + using Jacobi preconditioning, but for highly ill-conditioned + problems the QR approach is better. If it is known that the + Jacobian matrix is well conditioned, this method is accurate + and will perform faster than the QR approach. + + -- Option: gsl_multifit_nlinear_solver_svd + This method solves the system using a singular value + decomposition of the Jacobian J. This method will produce the + most reliable solutions for ill-conditioned Jacobians but is + also the slowest solver method. + + -- Parameter: gsl_multifit_nlinear_fdtype fdtype + + This parameter specifies whether to use forward or centered + differences when approximating the Jacobian. This is only used + when an analytic Jacobian is not provided to the solver. This + parameter may be set to one of the following choices. + + -- Default: GSL_MULTIFIT_NLINEAR_FWDIFF + This specifies a forward finite difference to approximate the + Jacobian matrix. The Jacobian matrix will be calculated as + + J_ij = 1 / \Delta_j ( f_i(x + \Delta_j e_j) - f_i(x) ) + + where \Delta_j = h |x_j| and e_j is the standard jth Cartesian + unit basis vector so that x + \Delta_j e_j represents a small + (forward) perturbation of the jth parameter by an amount + \Delta_j. The perturbation \Delta_j is proportional to the + current value |x_j| which helps to calculate an accurate + Jacobian when the various parameters have different scale + sizes. The value of h is specified by the 'h_df' parameter. + The accuracy of this method is O(h), and evaluating this + matrix requires an additional p function evaluations. + + -- Option: GSL_MULTIFIT_NLINEAR_CTRDIFF + This specifies a centered finite difference to approximate the + Jacobian matrix. The Jacobian matrix will be calculated as + + J_ij = 1 / \Delta_j ( f_i(x + 1/2 \Delta_j e_j) - f_i(x - 1/2 \Delta_j e_j) ) + + See above for a description of \Delta_j. The accuracy of this + method is O(h^2), but evaluating this matrix requires an + additional 2p function evaluations. + + -- Parameter: double factor_up + + When a step is accepted, the trust region radius will be increased + by this factor. The default value is 3. + + -- Parameter: double factor_down + + When a step is rejected, the trust region radius will be decreased + by this factor. The default value is 2. + + -- Parameter: double avmax + + When using geodesic acceleration to solve a nonlinear least squares + problem, an important parameter to monitor is the ratio of the + acceleration term to the velocity term, + + |a| / |v| + + If this ratio is small, it means the acceleration correction is + contributing very little to the step. This could be because the + problem is not "nonlinear" enough to benefit from the acceleration. + If the ratio is large (> 1) it means that the acceleration is + larger than the velocity, which shouldn't happen since the step + represents a truncated series and so the second order term a should + be smaller than the first order term v to guarantee convergence. + Therefore any steps with a ratio larger than the parameter AVMAX + are rejected. AVMAX is set to 0.75 by default. For problems which + experience difficulty converging, this threshold could be lowered. + + -- Parameter: double h_df + + This parameter specifies the step size for approximating the + Jacobian matrix with finite differences. It is set to + \sqrt{\epsilon} by default, where \epsilon is 'GSL_DBL_EPSILON'. + + -- Parameter: double h_fvv + + When using geodesic acceleration, the user must either supply a + function to calculate f_{vv}(x) or the library can estimate this + second directional derivative using a finite difference method. + When using finite differences, the library must calculate f(x + h + v) where h represents a small step in the velocity direction. The + parameter H_FVV defines this step size and is set to 0.02 by + default. - double fd = f; /* promote from float to double */ + +File: gsl-ref.info, Node: Nonlinear Least-Squares Initialization, Next: Nonlinear Least-Squares Function Definition, Prev: Nonlinear Least-Squares Tunable Parameters, Up: Nonlinear Least-Squares Fitting - printf (" f="); gsl_ieee_printf_float(&f); - printf ("\n"); +39.5 Initializing the Solver +============================ - printf ("fd="); gsl_ieee_printf_double(&fd); - printf ("\n"); + -- Function: gsl_multifit_nlinear_workspace * + gsl_multifit_nlinear_alloc (const gsl_multifit_nlinear_type * + T, const gsl_multifit_nlinear_parameters * PARAMS, const + size_t N, const size_t P) + -- Function: gsl_multilarge_nlinear_workspace * + gsl_multilarge_nlinear_alloc (const + gsl_multilarge_nlinear_type * T, const + gsl_multilarge_nlinear_parameters * PARAMS, const size_t N, + const size_t P) + These functions return a pointer to a newly allocated instance of a + derivative solver of type T for N observations and P parameters. + The PARAMS input specifies a tunable set of parameters which will + affect important details in each iteration of the trust region + subproblem algorithm. It is recommended to start with the + suggested default parameters (see + 'gsl_multifit_nlinear_default_parameters' and + 'gsl_multilarge_nlinear_default_parameters') and then tune the + parameters once the code is working correctly. See *note Nonlinear + Least-Squares Tunable Parameters:: for descriptions of the various + parameters. For example, the following code creates an instance of + a Levenberg-Marquardt solver for 100 data points and 3 parameters, + using suggested defaults: + + const gsl_multifit_nlinear_type * T + = gsl_multifit_nlinear_lm; + gsl_multifit_nlinear_parameters params + = gsl_multifit_nlinear_default_parameters(); + gsl_multifit_nlinear_workspace * w + = gsl_multifit_nlinear_alloc (T, ¶ms, 100, 3); - printf (" d="); gsl_ieee_printf_double(&d); - printf ("\n"); + The number of observations N must be greater than or equal to + parameters P. - return 0; - } + If there is insufficient memory to create the solver then the + function returns a null pointer and the error handler is invoked + with an error code of 'GSL_ENOMEM'. -The binary representation of 1/3 is 0.01010101... . The output below -shows that the IEEE format normalizes this fraction to give a leading -digit of 1, + -- Function: gsl_multifit_nlinear_parameters + gsl_multifit_nlinear_default_parameters (void) + -- Function: gsl_multilarge_nlinear_parameters + gsl_multilarge_nlinear_default_parameters (void) + These functions return a set of recommended default parameters for + use in solving nonlinear least squares problems. The user can tune + each parameter to improve the performance on their particular + problem, see *note Nonlinear Least-Squares Tunable Parameters::. + + -- Function: int gsl_multifit_nlinear_init (const gsl_vector * X, + gsl_multifit_nlinear_fdf * FDF, gsl_multifit_nlinear_workspace + * W) + -- Function: int gsl_multifit_nlinear_winit (const gsl_vector * X, + const gsl_vector * WTS, gsl_multifit_nlinear_fdf * FDF, + gsl_multifit_nlinear_workspace * W) + -- Function: int gsl_multilarge_nlinear_init (const gsl_vector * X, + gsl_multilarge_nlinear_fdf * FDF, + gsl_multilarge_nlinear_workspace * W) + -- Function: int gsl_multilarge_nlinear_winit (const gsl_vector * X, + const gsl_vector * WTS, gsl_multilarge_nlinear_fdf * FDF, + gsl_multilarge_nlinear_workspace * W) + These functions initialize, or reinitialize, an existing workspace + W to use the system FDF and the initial guess X. See *note + Nonlinear Least-Squares Function Definition:: for a description of + the FDF structure. + + Optionally, a weight vector WTS can be given to perform a weighted + nonlinear regression. Here, the weighting matrix is W = + diag(w_1,w_2,...,w_n). + + -- Function: void gsl_multifit_nlinear_free + (gsl_multifit_nlinear_workspace * W) + -- Function: void gsl_multilarge_nlinear_free + (gsl_multilarge_nlinear_workspace * W) + These functions free all the memory associated with the workspace + W. + + -- Function: const char * gsl_multifit_nlinear_name (const + gsl_multifit_nlinear_workspace * W) + -- Function: const char * gsl_multilarge_nlinear_name (const + gsl_multilarge_nlinear_workspace * W) + These functions return a pointer to the name of the solver. For + example, - f= 1.01010101010101010101011*2^-2 - fd= 1.0101010101010101010101100000000000000000000000000000*2^-2 - d= 1.0101010101010101010101010101010101010101010101010101*2^-2 + printf ("w is a '%s' solver\n", + gsl_multifit_nlinear_name (w)); -The output also shows that a single-precision number is promoted to -double-precision by adding zeros in the binary representation. + would print something like 'w is a 'trust-region' solver'. - -File: gsl-ref.info, Node: Setting up your IEEE environment, Next: IEEE References and Further Reading, Prev: Representation of floating point numbers, Up: IEEE floating-point arithmetic + -- Function: const char * gsl_multifit_nlinear_trs_name (const + gsl_multifit_nlinear_workspace * W) + -- Function: const char * gsl_multilarge_nlinear_trs_name (const + gsl_multilarge_nlinear_workspace * W) + These functions return a pointer to the name of the trust region + subproblem method. For example, -41.2 Setting up your IEEE environment -===================================== + printf ("w is a '%s' solver\n", + gsl_multifit_nlinear_trs_name (w)); -The IEEE standard defines several "modes" for controlling the behavior -of floating point operations. These modes specify the important -properties of computer arithmetic: the direction used for rounding (e.g. -whether numbers should be rounded up, down or to the nearest number), -the rounding precision and how the program should handle arithmetic -exceptions, such as division by zero. - - Many of these features can now be controlled via standard functions -such as 'fpsetround', which should be used whenever they are available. -Unfortunately in the past there has been no universal API for -controlling their behavior--each system has had its own low-level way of -accessing them. To help you write portable programs GSL allows you to -specify modes in a platform-independent way using the environment -variable 'GSL_IEEE_MODE'. The library then takes care of all the -necessary machine-specific initializations for you when you call the -function 'gsl_ieee_env_setup'. - - -- Function: void gsl_ieee_env_setup () - This function reads the environment variable 'GSL_IEEE_MODE' and - attempts to set up the corresponding specified IEEE modes. The - environment variable should be a list of keywords, separated by - commas, like this, - - 'GSL_IEEE_MODE' = "KEYWORD,KEYWORD,..." - - where KEYWORD is one of the following mode-names, - - 'single-precision' - 'double-precision' - 'extended-precision' - 'round-to-nearest' - 'round-down' - 'round-up' - 'round-to-zero' - 'mask-all' - 'mask-invalid' - 'mask-denormalized' - 'mask-division-by-zero' - 'mask-overflow' - 'mask-underflow' - 'trap-inexact' - 'trap-common' - - If 'GSL_IEEE_MODE' is empty or undefined then the function returns - immediately and no attempt is made to change the system's IEEE - mode. When the modes from 'GSL_IEEE_MODE' are turned on the - function prints a short message showing the new settings to remind - you that the results of the program will be affected. - - If the requested modes are not supported by the platform being used - then the function calls the error handler and returns an error code - of 'GSL_EUNSUP'. - - When options are specified using this method, the resulting mode is - based on a default setting of the highest available precision - (double precision or extended precision, depending on the platform) - in round-to-nearest mode, with all exceptions enabled apart from - the INEXACT exception. The INEXACT exception is generated whenever - rounding occurs, so it must generally be disabled in typical - scientific calculations. All other floating-point exceptions are - enabled by default, including underflows and the use of - denormalized numbers, for safety. They can be disabled with the - individual 'mask-' settings or together using 'mask-all'. - - The following adjusted combination of modes is convenient for many - purposes, - - GSL_IEEE_MODE="double-precision,"\ - "mask-underflow,"\ - "mask-denormalized" - - This choice ignores any errors relating to small numbers (either - denormalized, or underflowing to zero) but traps overflows, - division by zero and invalid operations. - - Note that on the x86 series of processors this function sets both - the original x87 mode and the newer MXCSR mode, which controls SSE - floating-point operations. The SSE floating-point units do not - have a precision-control bit, and always work in double-precision. - The single-precision and extended-precision keywords have no effect - in this case. - -To demonstrate the effects of different rounding modes consider the -following program which computes e, the base of natural logarithms, by -summing a rapidly-decreasing series, + would print something like 'w is a 'levenberg-marquardt' solver'. - e = 1 + 1/2! + 1/3! + 1/4! + ... - = 2.71828182846... + +File: gsl-ref.info, Node: Nonlinear Least-Squares Function Definition, Next: Nonlinear Least-Squares Iteration, Prev: Nonlinear Least-Squares Initialization, Up: Nonlinear Least-Squares Fitting - #include - #include - #include +39.6 Providing the Function to be Minimized +=========================================== - int - main (void) - { - double x = 1, oldsum = 0, sum = 0; - int i = 0; +The user must provide n functions of p variables for the minimization +algorithm to operate on. In order to allow for arbitrary parameters the +functions are defined by the following data types: - gsl_ieee_env_setup (); /* read GSL_IEEE_MODE */ + -- Data Type: gsl_multifit_nlinear_fdf + This data type defines a general system of functions with arbitrary + parameters, the corresponding Jacobian matrix of derivatives, and + optionally the second directional derivative of the functions for + geodesic acceleration. - do - { - i++; + 'int (* f) (const gsl_vector * X, void * PARAMS, gsl_vector * F)' + This function should store the n components of the vector f(x) + in F for argument X and arbitrary parameters PARAMS, returning + an appropriate error code if the function cannot be computed. - oldsum = sum; - sum += x; - x = x / i; + 'int (* df) (const gsl_vector * X, void * PARAMS, gsl_matrix * J)' + This function should store the N-by-P matrix result J_ij = d + f_i(x) / d x_j in J for argument X and arbitrary parameters + PARAMS, returning an appropriate error code if the matrix + cannot be computed. If an analytic Jacobian is unavailable, + or too expensive to compute, this function pointer may be set + to NULL, in which case the Jacobian will be internally + computed using finite difference approximations of the + function F. + + 'int (* fvv) (const gsl_vector * X, const gsl_vector * V, void * PARAMS, gsl_vector * FVV)' + When geodesic acceleration is enabled, this function should + store the n components of the vector f_{vv}(x) = + \sum_{\alpha\beta} v_{\alpha} v_{\beta} {\partial \over + \partial x_{\alpha}} {\partial \over \partial x_{\beta}} f(x), + representing second directional derivatives of the function to + be minimized, into the output FVV. The parameter vector is + provided in X and the velocity vector is provided in V, both + of which have p components. The arbitrary parameters are + given in PARAMS. If analytic expressions for f_{vv}(x) are + unavailable or too difficult to compute, this function pointer + may be set to NULL, in which case f_{vv}(x) will be computed + internally using a finite difference approximation. - printf ("i=%2d sum=%.18f error=%g\n", - i, sum, sum - M_E); + 'size_t n' + the number of functions, i.e. the number of components of the + vector F. - if (i > 30) - break; - } - while (sum != oldsum); + 'size_t p' + the number of independent variables, i.e. the number of + components of the vector X. - return 0; - } + 'void * params' + a pointer to the arbitrary parameters of the function. -Here are the results of running the program in 'round-to-nearest' mode. -This is the IEEE default so it isn't really necessary to specify it -here, - - $ GSL_IEEE_MODE="round-to-nearest" ./a.out - i= 1 sum=1.000000000000000000 error=-1.71828 - i= 2 sum=2.000000000000000000 error=-0.718282 - .... - i=18 sum=2.718281828459045535 error=4.44089e-16 - i=19 sum=2.718281828459045535 error=4.44089e-16 + 'size_t nevalf' + This does not need to be set by the user. It counts the + number of function evaluations and is initialized by the + '_init' function. + + 'size_t nevaldf' + This does not need to be set by the user. It counts the + number of Jacobian evaluations and is initialized by the + '_init' function. + + 'size_t nevalfvv' + This does not need to be set by the user. It counts the + number of f_{vv}(x) evaluations and is initialized by the + '_init' function. -After nineteen terms the sum converges to within 4 \times 10^-16 of the -correct value. If we now change the rounding mode to 'round-down' the -final result is less accurate, + -- Data Type: gsl_multilarge_nlinear_fdf + This data type defines a general system of functions with arbitrary + parameters, a function to compute J u or J^T u for a given vector + u, the normal equations matrix J^T J, and optionally the second + directional derivative of the functions for geodesic acceleration. - $ GSL_IEEE_MODE="round-down" ./a.out - i= 1 sum=1.000000000000000000 error=-1.71828 - .... - i=19 sum=2.718281828459041094 error=-3.9968e-15 + 'int (* f) (const gsl_vector * X, void * PARAMS, gsl_vector * F)' + This function should store the n components of the vector f(x) + in F for argument X and arbitrary parameters PARAMS, returning + an appropriate error code if the function cannot be computed. + + 'int (* df) (CBLAS_TRANSPOSE_t TRANSJ, const gsl_vector * X, const gsl_vector * U, void * PARAMS, gsl_vector * V, gsl_matrix * JTJ)' + If TRANSJ is equal to 'CblasNoTrans', then this function + should compute the matrix-vector product J u and store the + result in V. If TRANSJ is equal to 'CblasTrans', then this + function should compute the matrix-vector product J^T u and + store the result in V. Additionally, the normal equations + matrix J^T J should be stored in the lower half of JTJ. The + input matrix JTJ could be set to NULL, for example by + iterative methods which do not require this matrix, so the + user should check for this prior to constructing the matrix. + The input PARAMS contains the arbitrary parameters. + + 'int (* fvv) (const gsl_vector * X, const gsl_vector * V, void * PARAMS, gsl_vector * FVV)' + When geodesic acceleration is enabled, this function should + store the n components of the vector f_{vv}(x) = + \sum_{\alpha\beta} v_{\alpha} v_{\beta} {\partial \over + \partial x_{\alpha}} {\partial \over \partial x_{\beta}} f(x), + representing second directional derivatives of the function to + be minimized, into the output FVV. The parameter vector is + provided in X and the velocity vector is provided in V, both + of which have p components. The arbitrary parameters are + given in PARAMS. If analytic expressions for f_{vv}(x) are + unavailable or too difficult to compute, this function pointer + may be set to NULL, in which case f_{vv}(x) will be computed + internally using a finite difference approximation. -The result is about 4 \times 10^-15 below the correct value, an order of -magnitude worse than the result obtained in the 'round-to-nearest' mode. + 'size_t n' + the number of functions, i.e. the number of components of the + vector F. - If we change to rounding mode to 'round-up' then the final result is -higher than the correct value (when we add each term to the sum the -final result is always rounded up, which increases the sum by at least -one tick until the added term underflows to zero). To avoid this -problem we would need to use a safer converge criterion, such as 'while -(fabs(sum - oldsum) > epsilon)', with a suitably chosen value of -epsilon. - - Finally we can see the effect of computing the sum using -single-precision rounding, in the default 'round-to-nearest' mode. In -this case the program thinks it is still using double precision numbers -but the CPU rounds the result of each floating point operation to -single-precision accuracy. This simulates the effect of writing the -program using single-precision 'float' variables instead of 'double' -variables. The iteration stops after about half the number of -iterations and the final result is much less accurate, + 'size_t p' + the number of independent variables, i.e. the number of + components of the vector X. - $ GSL_IEEE_MODE="single-precision" ./a.out - .... - i=12 sum=2.718281984329223633 error=1.5587e-07 + 'void * params' + a pointer to the arbitrary parameters of the function. -with an error of O(10^-7), which corresponds to single precision -accuracy (about 1 part in 10^7). Continuing the iterations further does -not decrease the error because all the subsequent results are rounded to -the same value. + 'size_t nevalf' + This does not need to be set by the user. It counts the + number of function evaluations and is initialized by the + '_init' function. + + 'size_t nevaldfu' + This does not need to be set by the user. It counts the + number of Jacobian matrix-vector evaluations (J u or J^T u) + and is initialized by the '_init' function. + + 'size_t nevaldf2' + This does not need to be set by the user. It counts the + number of J^T J evaluations and is initialized by the '_init' + function. + + 'size_t nevalfvv' + This does not need to be set by the user. It counts the + number of f_{vv}(x) evaluations and is initialized by the + '_init' function. + +Note that when fitting a non-linear model against experimental data, the +data is passed to the functions above using the PARAMS argument and the +trial best-fit parameters through the X argument.  -File: gsl-ref.info, Node: IEEE References and Further Reading, Prev: Setting up your IEEE environment, Up: IEEE floating-point arithmetic - -41.3 References and Further Reading -=================================== +File: gsl-ref.info, Node: Nonlinear Least-Squares Iteration, Next: Nonlinear Least-Squares Testing for Convergence, Prev: Nonlinear Least-Squares Function Definition, Up: Nonlinear Least-Squares Fitting -The reference for the IEEE standard is, - - ANSI/IEEE Std 754-1985, IEEE Standard for Binary Floating-Point - Arithmetic. - -A more pedagogical introduction to the standard can be found in the -following paper, +39.7 Iteration +============== - David Goldberg: What Every Computer Scientist Should Know About - Floating-Point Arithmetic. 'ACM Computing Surveys', Vol. 23, No. 1 - (March 1991), pages 5-48. +The following functions drive the iteration of each algorithm. Each +function performs one iteration of the trust region method and updates +the state of the solver. - Corrigendum: 'ACM Computing Surveys', Vol. 23, No. 3 (September - 1991), page 413. and see also the sections by B. A. Wichmann and - Charles B. Dunham in Surveyor's Forum: "What Every Computer - Scientist Should Know About Floating-Point Arithmetic". 'ACM - Computing Surveys', Vol. 24, No. 3 (September 1992), page 319. + -- Function: int gsl_multifit_nlinear_iterate + (gsl_multifit_nlinear_workspace * W) + -- Function: int gsl_multilarge_nlinear_iterate + (gsl_multilarge_nlinear_workspace * W) + These functions perform a single iteration of the solver W. If the + iteration encounters an unexpected problem then an error code will + be returned. The solver workspace maintains a current estimate of + the best-fit parameters at all times. - A detailed textbook on IEEE arithmetic and its practical use is -available from SIAM Press, +The solver workspace W contains the following entries, which can be used +to track the progress of the solution: - Michael L. Overton, 'Numerical Computing with IEEE Floating Point - Arithmetic', SIAM Press, ISBN 0898715717. +'gsl_vector * x' + The current position, length p. - -File: gsl-ref.info, Node: Debugging Numerical Programs, Next: Contributors to GSL, Prev: IEEE floating-point arithmetic, Up: Top +'gsl_vector * f' + The function residual vector at the current position f(x), length + n. -Appendix A Debugging Numerical Programs -*************************************** +'gsl_matrix * J' + The Jacobian matrix at the current position J(x), size n-by-p (only + for 'gsl_multifit_nlinear' interface). -This chapter describes some tips and tricks for debugging numerical -programs which use GSL. +'gsl_vector * dx' + The difference between the current position and the previous + position, i.e. the last step \delta, taken as a vector, length p. -* Menu: +These quantities can be accessed with the following functions, -* Using gdb:: -* Examining floating point registers:: -* Handling floating point exceptions:: -* GCC warning options for numerical programs:: -* Debugging References:: + -- Function: gsl_vector * gsl_multifit_nlinear_position (const + gsl_multifit_nlinear_workspace * W) + -- Function: gsl_vector * gsl_multilarge_nlinear_position (const + gsl_multilarge_nlinear_workspace * W) + These functions return the current position x (i.e. best-fit + parameters) of the solver W. + + -- Function: gsl_vector * gsl_multifit_nlinear_residual (const + gsl_multifit_nlinear_workspace * W) + -- Function: gsl_vector * gsl_multilarge_nlinear_residual (const + gsl_multilarge_nlinear_workspace * W) + These functions return the current residual vector f(x) of the + solver W. For weighted systems, the residual vector includes the + weighting factor \sqrt{W}. + + -- Function: gsl_matrix * gsl_multifit_nlinear_jac (const + gsl_multifit_nlinear_workspace * W) + This function returns a pointer to the n-by-p Jacobian matrix for + the current iteration of the solver W. This function is available + only for the 'gsl_multifit_nlinear' interface. + + -- Function: size_t gsl_multifit_nlinear_niter (const + gsl_multifit_nlinear_workspace * W) + -- Function: size_t gsl_multilarge_nlinear_niter (const + gsl_multilarge_nlinear_workspace * W) + These functions return the number of iterations performed so far. + The iteration counter is updated on each call to the '_iterate' + functions above, and reset to 0 in the '_init' functions. + + -- Function: int gsl_multifit_nlinear_rcond (double * RCOND, const + gsl_multifit_nlinear_workspace * W) + -- Function: int gsl_multilarge_nlinear_rcond (double * RCOND, const + gsl_multilarge_nlinear_workspace * W) + This function estimates the reciprocal condition number of the + Jacobian matrix at the current position x and stores it in RCOND. + The computed value is only an estimate to give the user a guideline + as to the conditioning of their particular problem. Its + calculation is based on which factorization method is used + (Cholesky, QR, or SVD). + + * For the Cholesky solver, the matrix J^T J is factored at each + iteration. Therefore this function will estimate the 1-norm + condition number rcond^2 = 1/(||J^T J||_1 \cdot ||(J^T + J)^{-1}||_1) + + * For the QR solver, J is factored as J = Q R at each iteration. + For simplicity, this function calculates the 1-norm + conditioning of only the R factor, rcond = 1 / (||R||_1 \cdot + ||R^{-1}||_1). This can be computed efficiently since R is + upper triangular. + + * For the SVD solver, in order to efficiently solve the trust + region subproblem, the matrix which is factored is J D^{-1}, + instead of J itself. The resulting singular values are used + to provide the 2-norm reciprocal condition number, as rcond = + \sigma_{min} / \sigma_{max}. Note that when using More' + scaling, D \ne I and the resulting RCOND estimate may be + significantly different from the true RCOND of J itself.  -File: gsl-ref.info, Node: Using gdb, Next: Examining floating point registers, Up: Debugging Numerical Programs +File: gsl-ref.info, Node: Nonlinear Least-Squares Testing for Convergence, Next: Nonlinear Least-Squares High Level Driver, Prev: Nonlinear Least-Squares Iteration, Up: Nonlinear Least-Squares Fitting -A.1 Using gdb -============= +39.8 Testing for Convergence +============================ -Any errors reported by the library are passed to the function -'gsl_error'. By running your programs under gdb and setting a -breakpoint in this function you can automatically catch any library -errors. You can add a breakpoint for every session by putting - - break gsl_error - -into your '.gdbinit' file in the directory where your program is -started. - - If the breakpoint catches an error then you can use a backtrace -('bt') to see the call-tree, and the arguments which possibly caused the -error. By moving up into the calling function you can investigate the -values of variables at that point. Here is an example from the program -'fft/test_trap', which contains the following line, - - status = gsl_fft_complex_wavetable_alloc (0, &complex_wavetable); - -The function 'gsl_fft_complex_wavetable_alloc' takes the length of an -FFT as its first argument. When this line is executed an error will be -generated because the length of an FFT is not allowed to be zero. - - To debug this problem we start 'gdb', using the file '.gdbinit' to -define a breakpoint in 'gsl_error', - - $ gdb test_trap - - GDB is free software and you are welcome to distribute copies - of it under certain conditions; type "show copying" to see - the conditions. There is absolutely no warranty for GDB; - type "show warranty" for details. GDB 4.16 (i586-debian-linux), - Copyright 1996 Free Software Foundation, Inc. - - Breakpoint 1 at 0x8050b1e: file error.c, line 14. - -When we run the program this breakpoint catches the error and shows the -reason for it. - - (gdb) run - Starting program: test_trap - - Breakpoint 1, gsl_error (reason=0x8052b0d - "length n must be positive integer", - file=0x8052b04 "c_init.c", line=108, gsl_errno=1) - at error.c:14 - 14 if (gsl_error_handler) - -The first argument of 'gsl_error' is always a string describing the -error. Now we can look at the backtrace to see what caused the problem, - - (gdb) bt - #0 gsl_error (reason=0x8052b0d - "length n must be positive integer", - file=0x8052b04 "c_init.c", line=108, gsl_errno=1) - at error.c:14 - #1 0x8049376 in gsl_fft_complex_wavetable_alloc (n=0, - wavetable=0xbffff778) at c_init.c:108 - #2 0x8048a00 in main (argc=1, argv=0xbffff9bc) - at test_trap.c:94 - #3 0x80488be in ___crt_dummy__ () - -We can see that the error was generated in the function -'gsl_fft_complex_wavetable_alloc' when it was called with an argument of -N=0. The original call came from line 94 in the file 'test_trap.c'. - - By moving up to the level of the original call we can find the line -that caused the error, - - (gdb) up - #1 0x8049376 in gsl_fft_complex_wavetable_alloc (n=0, - wavetable=0xbffff778) at c_init.c:108 - 108 GSL_ERROR ("length n must be positive integer", GSL_EDOM); - (gdb) up - #2 0x8048a00 in main (argc=1, argv=0xbffff9bc) - at test_trap.c:94 - 94 status = gsl_fft_complex_wavetable_alloc (0, - &complex_wavetable); - -Thus we have found the line that caused the problem. From this point we -could also print out the values of other variables such as -'complex_wavetable'. - - -File: gsl-ref.info, Node: Examining floating point registers, Next: Handling floating point exceptions, Prev: Using gdb, Up: Debugging Numerical Programs - -A.2 Examining floating point registers -====================================== - -The contents of floating point registers can be examined using the -command 'info float' (on supported platforms). - - (gdb) info float - st0: 0xc4018b895aa17a945000 Valid Normal -7.838871e+308 - st1: 0x3ff9ea3f50e4d7275000 Valid Normal 0.0285946 - st2: 0x3fe790c64ce27dad4800 Valid Normal 6.7415931e-08 - st3: 0x3ffaa3ef0df6607d7800 Spec Normal 0.0400229 - st4: 0x3c028000000000000000 Valid Normal 4.4501477e-308 - st5: 0x3ffef5412c22219d9000 Zero Normal 0.9580257 - st6: 0x3fff8000000000000000 Valid Normal 1 - st7: 0xc4028b65a1f6d243c800 Valid Normal -1.566206e+309 - fctrl: 0x0272 53 bit; NEAR; mask DENOR UNDER LOS; - fstat: 0xb9ba flags 0001; top 7; excep DENOR OVERF UNDER LOS - ftag: 0x3fff - fip: 0x08048b5c - fcs: 0x051a0023 - fopoff: 0x08086820 - fopsel: 0x002b - -Individual registers can be examined using the variables $REG, where REG -is the register name. - - (gdb) p $st1 - $1 = 0.02859464454261210347719 - - -File: gsl-ref.info, Node: Handling floating point exceptions, Next: GCC warning options for numerical programs, Prev: Examining floating point registers, Up: Debugging Numerical Programs - -A.3 Handling floating point exceptions -====================================== - -It is possible to stop the program whenever a 'SIGFPE' floating point -exception occurs. This can be useful for finding the cause of an -unexpected infinity or 'NaN'. The current handler settings can be shown -with the command 'info signal SIGFPE'. - - (gdb) info signal SIGFPE - Signal Stop Print Pass to program Description - SIGFPE Yes Yes Yes Arithmetic exception - -Unless the program uses a signal handler the default setting should be -changed so that SIGFPE is not passed to the program, as this would cause -it to exit. The command 'handle SIGFPE stop nopass' prevents this. - - (gdb) handle SIGFPE stop nopass - Signal Stop Print Pass to program Description - SIGFPE Yes Yes No Arithmetic exception - -Depending on the platform it may be necessary to instruct the kernel to -generate signals for floating point exceptions. For programs using GSL -this can be achieved using the 'GSL_IEEE_MODE' environment variable in -conjunction with the function 'gsl_ieee_env_setup' as described in *note -IEEE floating-point arithmetic::. +A minimization procedure should stop when one of the following +conditions is true: - (gdb) set env GSL_IEEE_MODE=double-precision + * A minimum has been found to within the user-specified precision. - -File: gsl-ref.info, Node: GCC warning options for numerical programs, Next: Debugging References, Prev: Handling floating point exceptions, Up: Debugging Numerical Programs + * A user-specified maximum number of iterations has been reached. -A.4 GCC warning options for numerical programs -============================================== + * An error has occurred. -Writing reliable numerical programs in C requires great care. The -following GCC warning options are recommended when compiling numerical -programs: - - gcc -ansi -pedantic -Werror -Wall -W - -Wmissing-prototypes -Wstrict-prototypes - -Wconversion -Wshadow -Wpointer-arith - -Wcast-qual -Wcast-align - -Wwrite-strings -Wnested-externs - -fshort-enums -fno-common -Dinline= -g -O2 - -For details of each option consult the manual 'Using and Porting GCC'. -The following table gives a brief explanation of what types of errors -these options catch. - -'-ansi -pedantic' - Use ANSI C, and reject any non-ANSI extensions. These flags help - in writing portable programs that will compile on other systems. -'-Werror' - Consider warnings to be errors, so that compilation stops. This - prevents warnings from scrolling off the top of the screen and - being lost. You won't be able to compile the program until it is - completely warning-free. -'-Wall' - This turns on a set of warnings for common programming problems. - You need '-Wall', but it is not enough on its own. -'-O2' - Turn on optimization. The warnings for uninitialized variables in - '-Wall' rely on the optimizer to analyze the code. If there is no - optimization then these warnings aren't generated. -'-W' - This turns on some extra warnings not included in '-Wall', such as - missing return values and comparisons between signed and unsigned - integers. -'-Wmissing-prototypes -Wstrict-prototypes' - Warn if there are any missing or inconsistent prototypes. Without - prototypes it is harder to detect problems with incorrect - arguments. -'-Wconversion' - The main use of this option is to warn about conversions from - signed to unsigned integers. For example, 'unsigned int x = -1'. - If you need to perform such a conversion you can use an explicit - cast. -'-Wshadow' - This warns whenever a local variable shadows another local - variable. If two variables have the same name then it is a - potential source of confusion. -'-Wpointer-arith -Wcast-qual -Wcast-align' - These options warn if you try to do pointer arithmetic for types - which don't have a size, such as 'void', if you remove a 'const' - cast from a pointer, or if you cast a pointer to a type which has a - different size, causing an invalid alignment. -'-Wwrite-strings' - This option gives string constants a 'const' qualifier so that it - will be a compile-time error to attempt to overwrite them. -'-fshort-enums' - This option makes the type of 'enum' as short as possible. - Normally this makes an 'enum' different from an 'int'. - Consequently any attempts to assign a pointer-to-int to a - pointer-to-enum will generate a cast-alignment warning. -'-fno-common' - This option prevents global variables being simultaneously defined - in different object files (you get an error at link time). Such a - variable should be defined in one file and referred to in other - files with an 'extern' declaration. -'-Wnested-externs' - This warns if an 'extern' declaration is encountered within a - function. -'-Dinline=' - The 'inline' keyword is not part of ANSI C. Thus if you want to use - '-ansi' with a program which uses inline functions you can use this - preprocessor definition to remove the 'inline' keywords. -'-g' - It always makes sense to put debugging symbols in the executable so - that you can debug it using 'gdb'. The only effect of debugging - symbols is to increase the size of the file, and you can use the - 'strip' command to remove them later if necessary. - - -File: gsl-ref.info, Node: Debugging References, Prev: GCC warning options for numerical programs, Up: Debugging Numerical Programs - -A.5 References and Further Reading -================================== - -The following books are essential reading for anyone writing and -debugging numerical programs with GCC and GDB. - - R.M. Stallman, 'Using and Porting GNU CC', Free Software - Foundation, ISBN 1882114388 - - R.M. Stallman, R.H. Pesch, 'Debugging with GDB: The GNU - Source-Level Debugger', Free Software Foundation, ISBN 1882114779 - -For a tutorial introduction to the GNU C Compiler and related programs, -see - - B.J. Gough, 'An Introduction to GCC', Network Theory Ltd, ISBN - 0954161793 - - -File: gsl-ref.info, Node: Contributors to GSL, Next: Autoconf Macros, Prev: Debugging Numerical Programs, Up: Top - -Appendix B Contributors to GSL -****************************** - -(See the AUTHORS file in the distribution for up-to-date information.) - -*Mark Galassi* - Conceived GSL (with James Theiler) and wrote the design document. - Wrote the simulated annealing package and the relevant chapter in - the manual. - -*James Theiler* - Conceived GSL (with Mark Galassi). Wrote the random number - generators and the relevant chapter in this manual. - -*Jim Davies* - Wrote the statistical routines and the relevant chapter in this - manual. - -*Brian Gough* - FFTs, numerical integration, random number generators and - distributions, root finding, minimization and fitting, polynomial - solvers, complex numbers, physical constants, permutations, vector - and matrix functions, histograms, statistics, ieee-utils, revised - CBLAS Level 2 & 3, matrix decompositions, eigensystems, cumulative - distribution functions, testing, documentation and releases. - -*Reid Priedhorsky* - Wrote and documented the initial version of the root finding - routines while at Los Alamos National Laboratory, Mathematical - Modeling and Analysis Group. - -*Gerard Jungman* - Special Functions, Series acceleration, ODEs, BLAS, Linear Algebra, - Eigensystems, Hankel Transforms. - -*Mike Booth* - Wrote the Monte Carlo library. - -*Jorma Olavi Ta"htinen* - Wrote the initial complex arithmetic functions. - -*Thomas Walter* - Wrote the initial heapsort routines and Cholesky decomposition. - -*Fabrice Rossi* - Multidimensional minimization. - -*Carlo Perassi* - Implementation of the random number generators in Knuth's - 'Seminumerical Algorithms', 3rd Ed. - -*Szymon Jaroszewicz* - Wrote the routines for generating combinations. - -*Nicolas Darnis* - Wrote the cyclic functions and the initial functions for canonical - permutations. - -*Jason H. Stover* - Wrote the major cumulative distribution functions. - -*Ivo Alxneit* - Wrote the routines for wavelet transforms. - -*Tuomo Keskitalo* - Improved the implementation of the ODE solvers and wrote the - ode-initval2 routines. - -*Lowell Johnson* - Implementation of the Mathieu functions. - -*Patrick Alken* - Implementation of nonsymmetric and generalized eigensystems, - B-splines, and robust linear regression. - -*Rhys Ulerich* - Wrote the multiset routines. - -*Pavel Holoborodko* - Wrote the fixed order Gauss-Legendre quadrature routines. - -*Pedro Gonnet* - Wrote the CQUAD integration routines. - - Thanks to Nigel Lowry for help in proofreading the manual. - - The non-symmetric eigensystems routines contain code based on the -LAPACK linear algebra library. LAPACK is distributed under the -following license: - - - Copyright (c) 1992-2006 The University of Tennessee. All rights - reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer listed - in this license in the documentation and/or other materials - provided with the distribution. - - * Neither the name of the copyright holders nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - OF THE POSSIBILITY OF SUCH DAMAGE. - - -File: gsl-ref.info, Node: Autoconf Macros, Next: GSL CBLAS Library, Prev: Contributors to GSL, Up: Top - -Appendix C Autoconf Macros -************************** - -For applications using 'autoconf' the standard macro 'AC_CHECK_LIB' can -be used to link with GSL automatically from a 'configure' script. The -library itself depends on the presence of a CBLAS and math library as -well, so these must also be located before linking with the main -'libgsl' file. The following commands should be placed in the -'configure.ac' file to perform these tests, - - AC_CHECK_LIB([m],[cos]) - AC_CHECK_LIB([gslcblas],[cblas_dgemm]) - AC_CHECK_LIB([gsl],[gsl_blas_dgemm]) - -It is important to check for 'libm' and 'libgslcblas' before 'libgsl', -otherwise the tests will fail. Assuming the libraries are found the -output during the configure stage looks like this, - - checking for cos in -lm... yes - checking for cblas_dgemm in -lgslcblas... yes - checking for gsl_blas_dgemm in -lgsl... yes - -If the library is found then the tests will define the macros -'HAVE_LIBGSL', 'HAVE_LIBGSLCBLAS', 'HAVE_LIBM' and add the options -'-lgsl -lgslcblas -lm' to the variable 'LIBS'. - - The tests above will find any version of the library. They are -suitable for general use, where the versions of the functions are not -important. An alternative macro is available in the file 'gsl.m4' to -test for a specific version of the library. To use this macro simply -add the following line to your 'configure.in' file instead of the tests -above: - - AX_PATH_GSL(GSL_VERSION, - [action-if-found], - [action-if-not-found]) - -The argument 'GSL_VERSION' should be the two or three digit MAJOR.MINOR -or MAJOR.MINOR.MICRO version number of the release you require. A -suitable choice for 'action-if-not-found' is, - - AC_MSG_ERROR(could not find required version of GSL) - -Then you can add the variables 'GSL_LIBS' and 'GSL_CFLAGS' to your -Makefile.am files to obtain the correct compiler flags. 'GSL_LIBS' is -equal to the output of the 'gsl-config --libs' command and 'GSL_CFLAGS' -is equal to 'gsl-config --cflags' command. For example, - - libfoo_la_LDFLAGS = -lfoo $(GSL_LIBS) -lgslcblas - -Note that the macro 'AX_PATH_GSL' needs to use the C compiler so it -should appear in the 'configure.in' file before the macro -'AC_LANG_CPLUSPLUS' for programs that use C++. - - To test for 'inline' the following test should be placed in your -'configure.in' file, - - AC_C_INLINE - - if test "$ac_cv_c_inline" != no ; then - AC_DEFINE(HAVE_INLINE,1) - AC_SUBST(HAVE_INLINE) - fi - -and the macro will then be defined in the compilation flags or by -including the file 'config.h' before any library headers. - - The following autoconf test will check for 'extern inline', - - dnl Check for "extern inline", using a modified version - dnl of the test for AC_C_INLINE from acspecific.mt - dnl - AC_CACHE_CHECK([for extern inline], ac_cv_c_extern_inline, - [ac_cv_c_extern_inline=no - AC_TRY_COMPILE([extern $ac_cv_c_inline double foo(double x); - extern $ac_cv_c_inline double foo(double x) { return x+1.0; }; - double foo (double x) { return x + 1.0; };], - [ foo(1.0) ], - [ac_cv_c_extern_inline="yes"]) - ]) - - if test "$ac_cv_c_extern_inline" != no ; then - AC_DEFINE(HAVE_INLINE,1) - AC_SUBST(HAVE_INLINE) - fi - - The substitution of portability functions can be made automatically -if you use 'autoconf'. For example, to test whether the BSD function -'hypot' is available you can include the following line in the configure -file 'configure.in' for your application, - - AC_CHECK_FUNCS(hypot) - -and place the following macro definitions in the file 'config.h.in', - - /* Substitute gsl_hypot for missing system hypot */ - - #ifndef HAVE_HYPOT - #define hypot gsl_hypot - #endif - -The application source files can then use the include command '#include -' to substitute 'gsl_hypot' for each occurrence of 'hypot' -when 'hypot' is not available. - - -File: gsl-ref.info, Node: GSL CBLAS Library, Next: GNU General Public License, Prev: Autoconf Macros, Up: Top - -Appendix D GSL CBLAS Library -**************************** - -The prototypes for the low-level CBLAS functions are declared in the -file 'gsl_cblas.h'. For the definition of the functions consult the -documentation available from Netlib (*note BLAS References and Further -Reading::). +The handling of these conditions is under user control. The functions +below allow the user to test the current estimate of the best-fit +parameters in several standard ways. -* Menu: + -- Function: int gsl_multifit_nlinear_test (const double XTOL, const + double GTOL, const double FTOL, int * INFO, const + gsl_multifit_nlinear_workspace * W) + -- Function: int gsl_multilarge_nlinear_test (const double XTOL, const + double GTOL, const double FTOL, int * INFO, const + gsl_multilarge_nlinear_workspace * W) + These functions test for convergence of the minimization method + using the following criteria: + + * Testing for a small step size relative to the current + parameter vector + |\delta_i| <= xtol (|x_i| + xtol) + for each 0 <= i < p. Each element of the step vector \delta + is tested individually in case the different parameters have + widely different scales. Adding XTOL to |x_i| helps the test + avoid breaking down in situations where the true solution + value x_i = 0. If this test succeeds, INFO is set to 1 and + the function returns 'GSL_SUCCESS'. + + A general guideline for selecting the step tolerance is to + choose xtol = 10^{-d} where d is the number of accurate + decimal digits desired in the solution x. See Dennis and + Schnabel for more information. + + * Testing for a small gradient (g = \nabla \Phi(x) = J^T f) + indicating a local function minimum: + ||g||_inf <= gtol + This expression tests whether the ratio (\nabla \Phi)_i x_i / + \Phi is small. Testing this scaled gradient is a better than + \nabla \Phi alone since it is a dimensionless quantity and so + independent of the scale of the problem. The 'max' arguments + help ensure the test doesn't break down in regions where x_i + or \Phi(x) are close to 0. If this test succeeds, INFO is set + to 2 and the function returns 'GSL_SUCCESS'. + + A general guideline for choosing the gradient tolerance is to + set 'gtol = GSL_DBL_EPSILON^(1/3)'. See Dennis and Schnabel + for more information. -* Level 1 CBLAS Functions:: -* Level 2 CBLAS Functions:: -* Level 3 CBLAS Functions:: -* GSL CBLAS Examples:: + If none of the tests succeed, INFO is set to 0 and the function + returns 'GSL_CONTINUE', indicating further iterations are required.  -File: gsl-ref.info, Node: Level 1 CBLAS Functions, Next: Level 2 CBLAS Functions, Up: GSL CBLAS Library - -D.1 Level 1 -=========== - - -- Function: float cblas_sdsdot (const int N, const float ALPHA, const - float * X, const int INCX, const float * Y, const int INCY) +File: gsl-ref.info, Node: Nonlinear Least-Squares High Level Driver, Next: Nonlinear Least-Squares Covariance Matrix, Prev: Nonlinear Least-Squares Testing for Convergence, Up: Nonlinear Least-Squares Fitting - -- Function: double cblas_dsdot (const int N, const float * X, const - int INCX, const float * Y, const int INCY) +39.9 High Level Driver +====================== - -- Function: float cblas_sdot (const int N, const float * X, const int - INCX, const float * Y, const int INCY) +These routines provide a high level wrapper that combines the iteration +and convergence testing for easy use. - -- Function: double cblas_ddot (const int N, const double * X, const - int INCX, const double * Y, const int INCY) + -- Function: int gsl_multifit_nlinear_driver (const size_t MAXITER, + const double XTOL, const double GTOL, const double FTOL, void + (* CALLBACK)(const size_t ITER, void * PARAMS, const + gsl_multifit_linear_workspace * W), void * CALLBACK_PARAMS, + int * INFO, gsl_multifit_nlinear_workspace * W) + -- Function: int gsl_multilarge_nlinear_driver (const size_t MAXITER, + const double XTOL, const double GTOL, const double FTOL, void + (* CALLBACK)(const size_t ITER, void * PARAMS, const + gsl_multilarge_linear_workspace * W), void * CALLBACK_PARAMS, + int * INFO, gsl_multilarge_nlinear_workspace * W) + These functions iterate the nonlinear least squares solver W for a + maximum of MAXITER iterations. After each iteration, the system is + tested for convergence with the error tolerances XTOL, GTOL and + FTOL. Additionally, the user may supply a callback function + CALLBACK which is called after each iteration, so that the user may + save or print relevant quantities for each iteration. The + parameter CALLBACK_PARAMS is passed to the CALLBACK function. The + parameters CALLBACK and CALLBACK_PARAMS may be set to NULL to + disable this feature. Upon successful convergence, the function + returns 'GSL_SUCCESS' and sets INFO to the reason for convergence + (see 'gsl_multifit_nlinear_test'). If the function has not + converged after MAXITER iterations, 'GSL_EMAXITER' is returned. In + rare cases, during an iteration the algorithm may be unable to find + a new acceptable step \delta to take. In this case, 'GSL_ENOPROG' + is returned indicating no further progress can be made. If your + problem is having difficulty converging, see *note Nonlinear + Least-Squares Troubleshooting:: for further guidance. - -- Function: void cblas_cdotu_sub (const int N, const void * X, const - int INCX, const void * Y, const int INCY, void * DOTU) + +File: gsl-ref.info, Node: Nonlinear Least-Squares Covariance Matrix, Next: Nonlinear Least-Squares Troubleshooting, Prev: Nonlinear Least-Squares High Level Driver, Up: Nonlinear Least-Squares Fitting - -- Function: void cblas_cdotc_sub (const int N, const void * X, const - int INCX, const void * Y, const int INCY, void * DOTC) +39.10 Covariance matrix of best fit parameters +============================================== - -- Function: void cblas_zdotu_sub (const int N, const void * X, const - int INCX, const void * Y, const int INCY, void * DOTU) + -- Function: int gsl_multifit_nlinear_covar (const gsl_matrix * J, + const double EPSREL, gsl_matrix * COVAR) + -- Function: int gsl_multilarge_nlinear_covar (gsl_matrix * COVAR, + gsl_multilarge_nlinear_workspace * W) + This function computes the covariance matrix of best-fit parameters + using the Jacobian matrix J and stores it in COVAR. The parameter + EPSREL is used to remove linear-dependent columns when J is rank + deficient. - -- Function: void cblas_zdotc_sub (const int N, const void * X, const - int INCX, const void * Y, const int INCY, void * DOTC) + The covariance matrix is given by, - -- Function: float cblas_snrm2 (const int N, const float * X, const int - INCX) + covar = (J^T J)^{-1} - -- Function: float cblas_sasum (const int N, const float * X, const int - INCX) + or in the weighted case, - -- Function: double cblas_dnrm2 (const int N, const double * X, const - int INCX) + covar = (J^T W J)^{-1} - -- Function: double cblas_dasum (const int N, const double * X, const - int INCX) + and is computed using the factored form of the Jacobian (Cholesky, + QR, or SVD). Any columns of R which satisfy - -- Function: float cblas_scnrm2 (const int N, const void * X, const int - INCX) + |R_{kk}| <= epsrel |R_{11}| - -- Function: float cblas_scasum (const int N, const void * X, const int - INCX) + are considered linearly-dependent and are excluded from the + covariance matrix (the corresponding rows and columns of the + covariance matrix are set to zero). - -- Function: double cblas_dznrm2 (const int N, const void * X, const - int INCX) + If the minimisation uses the weighted least-squares function f_i = + (Y(x, t_i) - y_i) / \sigma_i then the covariance matrix above gives + the statistical error on the best-fit parameters resulting from the + Gaussian errors \sigma_i on the underlying data y_i. This can be + verified from the relation \delta f = J \delta c and the fact that + the fluctuations in f from the data y_i are normalised by \sigma_i + and so satisfy <\delta f \delta f^T> = I. - -- Function: double cblas_dzasum (const int N, const void * X, const - int INCX) + For an unweighted least-squares function f_i = (Y(x, t_i) - y_i) + the covariance matrix above should be multiplied by the variance of + the residuals about the best-fit \sigma^2 = \sum (y_i - Y(x,t_i))^2 + / (n-p) to give the variance-covariance matrix \sigma^2 C. This + estimates the statistical error on the best-fit parameters from the + scatter of the underlying data. - -- Function: CBLAS_INDEX cblas_isamax (const int N, const float * X, - const int INCX) + For more information about covariance matrices see *note Fitting + Overview::. - -- Function: CBLAS_INDEX cblas_idamax (const int N, const double * X, - const int INCX) + +File: gsl-ref.info, Node: Nonlinear Least-Squares Troubleshooting, Next: Nonlinear Least-Squares Examples, Prev: Nonlinear Least-Squares Covariance Matrix, Up: Nonlinear Least-Squares Fitting - -- Function: CBLAS_INDEX cblas_icamax (const int N, const void * X, - const int INCX) +39.11 Troubleshooting +===================== - -- Function: CBLAS_INDEX cblas_izamax (const int N, const void * X, - const int INCX) +When developing a code to solve a nonlinear least squares problem, here +are a few considerations to keep in mind. - -- Function: void cblas_sswap (const int N, float * X, const int INCX, - float * Y, const int INCY) + 1. The most common difficulty is the accurate implementation of the + Jacobian matrix. If the analytic Jacobian is not properly provided + to the solver, this can hinder and many times prevent convergence + of the method. When developing a new nonlinear least squares code, + it often helps to compare the program output with the internally + computed finite difference Jacobian and the user supplied analytic + Jacobian. If there is a large difference in coefficients, it is + likely the analytic Jacobian is incorrectly implemented. + + 2. If your code is having difficulty converging, the next thing to + check is the starting point provided to the solver. The methods of + this chapter are local methods, meaning if you provide a starting + point far away from the true minimum, the method may converge to a + local minimum or not converge at all. Sometimes it is possible to + solve a linearized approximation to the nonlinear problem, and use + the linear solution as the starting point to the nonlinear problem. + + 3. If the various parameters of the coefficient vector x vary widely + in magnitude, then the problem is said to be badly scaled. The + methods of this chapter do attempt to automatically rescale the + elements of x to have roughly the same order of magnitude, but in + extreme cases this could still cause problems for convergence. In + these cases it is recommended for the user to scale their parameter + vector x so that each parameter spans roughly the same range, say + [-1,1]. The solution vector can be backscaled to recover the + original units of the problem. - -- Function: void cblas_scopy (const int N, const float * X, const int - INCX, float * Y, const int INCY) + +File: gsl-ref.info, Node: Nonlinear Least-Squares Examples, Next: Nonlinear Least-Squares References and Further Reading, Prev: Nonlinear Least-Squares Troubleshooting, Up: Nonlinear Least-Squares Fitting - -- Function: void cblas_saxpy (const int N, const float ALPHA, const - float * X, const int INCX, float * Y, const int INCY) +39.12 Examples +============== - -- Function: void cblas_dswap (const int N, double * X, const int INCX, - double * Y, const int INCY) +The following example programs demonstrate the nonlinear least squares +fitting capabilities. - -- Function: void cblas_dcopy (const int N, const double * X, const int - INCX, double * Y, const int INCY) +* Menu: - -- Function: void cblas_daxpy (const int N, const double ALPHA, const - double * X, const int INCX, double * Y, const int INCY) +* Nonlinear Least-Squares Exponential Fit Example:: +* Nonlinear Least-Squares Geodesic Acceleration Example:: +* Nonlinear Least-Squares Comparison Example:: +* Nonlinear Least-Squares Large Example:: - -- Function: void cblas_cswap (const int N, void * X, const int INCX, - void * Y, const int INCY) + +File: gsl-ref.info, Node: Nonlinear Least-Squares Exponential Fit Example, Next: Nonlinear Least-Squares Geodesic Acceleration Example, Up: Nonlinear Least-Squares Examples - -- Function: void cblas_ccopy (const int N, const void * X, const int - INCX, void * Y, const int INCY) +39.12.1 Exponential Fitting Example +----------------------------------- - -- Function: void cblas_caxpy (const int N, const void * ALPHA, const - void * X, const int INCX, void * Y, const int INCY) +The following example program fits a weighted exponential model with +background to experimental data, Y = A \exp(-\lambda t) + b. The first +part of the program sets up the functions 'expb_f' and 'expb_df' to +calculate the model and its Jacobian. The appropriate fitting function +is given by, - -- Function: void cblas_zswap (const int N, void * X, const int INCX, - void * Y, const int INCY) + f_i = (A \exp(-\lambda t_i) + b) - y_i - -- Function: void cblas_zcopy (const int N, const void * X, const int - INCX, void * Y, const int INCY) +where we have chosen t_i = i. The Jacobian matrix J is the derivative +of these functions with respect to the three parameters (A, \lambda, b). +It is given by, - -- Function: void cblas_zaxpy (const int N, const void * ALPHA, const - void * X, const int INCX, void * Y, const int INCY) + J_{ij} = d f_i / d x_j - -- Function: void cblas_srotg (float * A, float * B, float * C, float * - S) +where x_0 = A, x_1 = \lambda and x_2 = b. The ith row of the Jacobian +is therefore - -- Function: void cblas_srotmg (float * D1, float * D2, float * B1, - const float B2, float * P) +The main part of the program sets up a Levenberg-Marquardt solver and +some simulated random data. The data uses the known parameters +(5.0,0.1,1.0) combined with Gaussian noise (standard deviation = 0.1) +over a range of 40 timesteps. The initial guess for the parameters is +chosen as (1.0, 1.0, 0.0). The iteration terminates when the relative +change in x is smaller than 10^{-8}, or when the magnitude of the +gradient falls below 10^{-8}. Here are the results of running the +program: + + iter 0: A = 1.0000, lambda = 1.0000, b = 0.0000, cond(J) = inf, |f(x)| = 62.2029 + iter 1: A = 1.2196, lambda = 0.3663, b = 0.0436, cond(J) = 53.6368, |f(x)| = 59.8062 + iter 2: A = 1.6062, lambda = 0.1506, b = 0.1054, cond(J) = 23.8178, |f(x)| = 53.9039 + iter 3: A = 2.4528, lambda = 0.0583, b = 0.2470, cond(J) = 20.0493, |f(x)| = 28.8039 + iter 4: A = 2.9723, lambda = 0.0494, b = 0.3727, cond(J) = 94.5601, |f(x)| = 15.3252 + iter 5: A = 3.3473, lambda = 0.0477, b = 0.4410, cond(J) = 229.3627, |f(x)| = 10.7511 + iter 6: A = 3.6690, lambda = 0.0508, b = 0.4617, cond(J) = 298.3589, |f(x)| = 9.7373 + iter 7: A = 3.9907, lambda = 0.0580, b = 0.5433, cond(J) = 250.0194, |f(x)| = 8.7661 + iter 8: A = 4.2353, lambda = 0.0731, b = 0.7989, cond(J) = 154.8571, |f(x)| = 7.4299 + iter 9: A = 4.6573, lambda = 0.0958, b = 1.0302, cond(J) = 140.2265, |f(x)| = 6.1893 + iter 10: A = 5.0138, lambda = 0.1060, b = 1.0329, cond(J) = 109.4141, |f(x)| = 5.4961 + iter 11: A = 5.1505, lambda = 0.1103, b = 1.0497, cond(J) = 100.8762, |f(x)| = 5.4552 + iter 12: A = 5.1724, lambda = 0.1110, b = 1.0526, cond(J) = 97.3403, |f(x)| = 5.4542 + iter 13: A = 5.1737, lambda = 0.1110, b = 1.0528, cond(J) = 96.7136, |f(x)| = 5.4542 + iter 14: A = 5.1738, lambda = 0.1110, b = 1.0528, cond(J) = 96.6678, |f(x)| = 5.4542 + iter 15: A = 5.1738, lambda = 0.1110, b = 1.0528, cond(J) = 96.6663, |f(x)| = 5.4542 + iter 16: A = 5.1738, lambda = 0.1110, b = 1.0528, cond(J) = 96.6663, |f(x)| = 5.4542 + summary from method 'trust-region/levenberg-marquardt' + number of iterations: 16 + function evaluations: 23 + Jacobian evaluations: 17 + reason for stopping: small step size + initial |f(x)| = 62.202928 + final |f(x)| = 5.454180 + chisq/dof = 0.804002 + A = 5.17379 +/- 0.27938 + lambda = 0.11104 +/- 0.00817 + b = 1.05283 +/- 0.05365 + status = success - -- Function: void cblas_srot (const int N, float * X, const int INCX, - float * Y, const int INCY, const float C, const float S) +The approximate values of the parameters are found correctly, and the +chi-squared value indicates a good fit (the chi-squared per degree of +freedom is approximately 1). In this case the errors on the parameters +can be estimated from the square roots of the diagonal elements of the +covariance matrix. If the chi-squared value shows a poor fit (i.e. +chi^2/dof >> 1) then the error estimates obtained from the covariance +matrix will be too small. In the example program the error estimates +are multiplied by \sqrt{\chi^2/dof} in this case, a common way of +increasing the errors for a poor fit. Note that a poor fit will result +from the use of an inappropriate model, and the scaled error estimates +may then be outside the range of validity for Gaussian errors. + +Additionally, we see that the condition number of J(x) stays reasonably +small throughout the iteration. This indicates we could safely switch +to the Cholesky solver for speed improvement, although this particular +system is too small to really benefit. - -- Function: void cblas_srotm (const int N, float * X, const int INCX, - float * Y, const int INCY, const float * P) + #include + #include + #include + #include + #include + #include + #include + #include - -- Function: void cblas_drotg (double * A, double * B, double * C, - double * S) - - -- Function: void cblas_drotmg (double * D1, double * D2, double * B1, - const double B2, double * P) - - -- Function: void cblas_drot (const int N, double * X, const int INCX, - double * Y, const int INCY, const double C, const double S) - - -- Function: void cblas_drotm (const int N, double * X, const int INCX, - double * Y, const int INCY, const double * P) - - -- Function: void cblas_sscal (const int N, const float ALPHA, float * - X, const int INCX) - - -- Function: void cblas_dscal (const int N, const double ALPHA, double - * X, const int INCX) - - -- Function: void cblas_cscal (const int N, const void * ALPHA, void * - X, const int INCX) - - -- Function: void cblas_zscal (const int N, const void * ALPHA, void * - X, const int INCX) - - -- Function: void cblas_csscal (const int N, const float ALPHA, void * - X, const int INCX) - - -- Function: void cblas_zdscal (const int N, const double ALPHA, void * - X, const int INCX) - - -File: gsl-ref.info, Node: Level 2 CBLAS Functions, Next: Level 3 CBLAS Functions, Prev: Level 1 CBLAS Functions, Up: GSL CBLAS Library - -D.2 Level 2 -=========== - - -- Function: void cblas_sgemv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_TRANSPOSE TRANSA, const int M, const int N, const float - ALPHA, const float * A, const int LDA, const float * X, const - int INCX, const float BETA, float * Y, const int INCY) - - -- Function: void cblas_sgbmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_TRANSPOSE TRANSA, const int M, const int N, const int - KL, const int KU, const float ALPHA, const float * A, const - int LDA, const float * X, const int INCX, const float BETA, - float * Y, const int INCY) - - -- Function: void cblas_strmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const float * A, const int LDA, - float * X, const int INCX) - - -- Function: void cblas_stbmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const int K, const float * A, - const int LDA, float * X, const int INCX) - - -- Function: void cblas_stpmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const float * AP, float * X, - const int INCX) - - -- Function: void cblas_strsv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const float * A, const int LDA, - float * X, const int INCX) - - -- Function: void cblas_stbsv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const int K, const float * A, - const int LDA, float * X, const int INCX) - - -- Function: void cblas_stpsv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const float * AP, float * X, - const int INCX) - - -- Function: void cblas_dgemv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_TRANSPOSE TRANSA, const int M, const int N, const double - ALPHA, const double * A, const int LDA, const double * X, - const int INCX, const double BETA, double * Y, const int INCY) - - -- Function: void cblas_dgbmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_TRANSPOSE TRANSA, const int M, const int N, const int - KL, const int KU, const double ALPHA, const double * A, const - int LDA, const double * X, const int INCX, const double BETA, - double * Y, const int INCY) - - -- Function: void cblas_dtrmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const double * A, const int LDA, - double * X, const int INCX) - - -- Function: void cblas_dtbmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const int K, const double * A, - const int LDA, double * X, const int INCX) - - -- Function: void cblas_dtpmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const double * AP, double * X, - const int INCX) - - -- Function: void cblas_dtrsv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const double * A, const int LDA, - double * X, const int INCX) - - -- Function: void cblas_dtbsv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const int K, const double * A, - const int LDA, double * X, const int INCX) - - -- Function: void cblas_dtpsv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const double * AP, double * X, - const int INCX) - - -- Function: void cblas_cgemv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_TRANSPOSE TRANSA, const int M, const int N, const void * - ALPHA, const void * A, const int LDA, const void * X, const - int INCX, const void * BETA, void * Y, const int INCY) - - -- Function: void cblas_cgbmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_TRANSPOSE TRANSA, const int M, const int N, const int - KL, const int KU, const void * ALPHA, const void * A, const - int LDA, const void * X, const int INCX, const void * BETA, - void * Y, const int INCY) - - -- Function: void cblas_ctrmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const void * A, const int LDA, - void * X, const int INCX) - - -- Function: void cblas_ctbmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const int K, const void * A, - const int LDA, void * X, const int INCX) - - -- Function: void cblas_ctpmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const void * AP, void * X, const - int INCX) - - -- Function: void cblas_ctrsv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const void * A, const int LDA, - void * X, const int INCX) - - -- Function: void cblas_ctbsv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const int K, const void * A, - const int LDA, void * X, const int INCX) - - -- Function: void cblas_ctpsv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const void * AP, void * X, const - int INCX) - - -- Function: void cblas_zgemv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_TRANSPOSE TRANSA, const int M, const int N, const void * - ALPHA, const void * A, const int LDA, const void * X, const - int INCX, const void * BETA, void * Y, const int INCY) - - -- Function: void cblas_zgbmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_TRANSPOSE TRANSA, const int M, const int N, const int - KL, const int KU, const void * ALPHA, const void * A, const - int LDA, const void * X, const int INCX, const void * BETA, - void * Y, const int INCY) - - -- Function: void cblas_ztrmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const void * A, const int LDA, - void * X, const int INCX) - - -- Function: void cblas_ztbmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const int K, const void * A, - const int LDA, void * X, const int INCX) - - -- Function: void cblas_ztpmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const void * AP, void * X, const - int INCX) - - -- Function: void cblas_ztrsv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const void * A, const int LDA, - void * X, const int INCX) - - -- Function: void cblas_ztbsv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const int K, const void * A, - const int LDA, void * X, const int INCX) - - -- Function: void cblas_ztpsv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA, const enum - CBLAS_DIAG DIAG, const int N, const void * AP, void * X, const - int INCX) - - -- Function: void cblas_ssymv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const float ALPHA, const float * - A, const int LDA, const float * X, const int INCX, const float - BETA, float * Y, const int INCY) - - -- Function: void cblas_ssbmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const int K, const float ALPHA, - const float * A, const int LDA, const float * X, const int - INCX, const float BETA, float * Y, const int INCY) - - -- Function: void cblas_sspmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const float ALPHA, const float * - AP, const float * X, const int INCX, const float BETA, float * - Y, const int INCY) - - -- Function: void cblas_sger (const enum CBLAS_ORDER ORDER, const int - M, const int N, const float ALPHA, const float * X, const int - INCX, const float * Y, const int INCY, float * A, const int - LDA) - - -- Function: void cblas_ssyr (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const float ALPHA, const float * - X, const int INCX, float * A, const int LDA) - - -- Function: void cblas_sspr (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const float ALPHA, const float * - X, const int INCX, float * AP) - - -- Function: void cblas_ssyr2 (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const float ALPHA, const float * - X, const int INCX, const float * Y, const int INCY, float * A, - const int LDA) - - -- Function: void cblas_sspr2 (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const float ALPHA, const float * - X, const int INCX, const float * Y, const int INCY, float * A) - - -- Function: void cblas_dsymv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const double ALPHA, const double - * A, const int LDA, const double * X, const int INCX, const - double BETA, double * Y, const int INCY) - - -- Function: void cblas_dsbmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const int K, const double ALPHA, - const double * A, const int LDA, const double * X, const int - INCX, const double BETA, double * Y, const int INCY) - - -- Function: void cblas_dspmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const double ALPHA, const double - * AP, const double * X, const int INCX, const double BETA, - double * Y, const int INCY) - - -- Function: void cblas_dger (const enum CBLAS_ORDER ORDER, const int - M, const int N, const double ALPHA, const double * X, const - int INCX, const double * Y, const int INCY, double * A, const - int LDA) - - -- Function: void cblas_dsyr (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const double ALPHA, const double - * X, const int INCX, double * A, const int LDA) - - -- Function: void cblas_dspr (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const double ALPHA, const double - * X, const int INCX, double * AP) - - -- Function: void cblas_dsyr2 (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const double ALPHA, const double - * X, const int INCX, const double * Y, const int INCY, double - * A, const int LDA) - - -- Function: void cblas_dspr2 (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const double ALPHA, const double - * X, const int INCX, const double * Y, const int INCY, double - * A) - - -- Function: void cblas_chemv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const void * ALPHA, const void * - A, const int LDA, const void * X, const int INCX, const void * - BETA, void * Y, const int INCY) - - -- Function: void cblas_chbmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const int K, const void * ALPHA, - const void * A, const int LDA, const void * X, const int INCX, - const void * BETA, void * Y, const int INCY) - - -- Function: void cblas_chpmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const void * ALPHA, const void * - AP, const void * X, const int INCX, const void * BETA, void * - Y, const int INCY) - - -- Function: void cblas_cgeru (const enum CBLAS_ORDER ORDER, const int - M, const int N, const void * ALPHA, const void * X, const int - INCX, const void * Y, const int INCY, void * A, const int LDA) - - -- Function: void cblas_cgerc (const enum CBLAS_ORDER ORDER, const int - M, const int N, const void * ALPHA, const void * X, const int - INCX, const void * Y, const int INCY, void * A, const int LDA) - - -- Function: void cblas_cher (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const float ALPHA, const void * - X, const int INCX, void * A, const int LDA) - - -- Function: void cblas_chpr (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const float ALPHA, const void * - X, const int INCX, void * A) - - -- Function: void cblas_cher2 (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const void * ALPHA, const void * - X, const int INCX, const void * Y, const int INCY, void * A, - const int LDA) - - -- Function: void cblas_chpr2 (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const void * ALPHA, const void * - X, const int INCX, const void * Y, const int INCY, void * AP) - - -- Function: void cblas_zhemv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const void * ALPHA, const void * - A, const int LDA, const void * X, const int INCX, const void * - BETA, void * Y, const int INCY) - - -- Function: void cblas_zhbmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const int K, const void * ALPHA, - const void * A, const int LDA, const void * X, const int INCX, - const void * BETA, void * Y, const int INCY) - - -- Function: void cblas_zhpmv (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const void * ALPHA, const void * - AP, const void * X, const int INCX, const void * BETA, void * - Y, const int INCY) - - -- Function: void cblas_zgeru (const enum CBLAS_ORDER ORDER, const int - M, const int N, const void * ALPHA, const void * X, const int - INCX, const void * Y, const int INCY, void * A, const int LDA) - - -- Function: void cblas_zgerc (const enum CBLAS_ORDER ORDER, const int - M, const int N, const void * ALPHA, const void * X, const int - INCX, const void * Y, const int INCY, void * A, const int LDA) - - -- Function: void cblas_zher (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const double ALPHA, const void * - X, const int INCX, void * A, const int LDA) - - -- Function: void cblas_zhpr (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const double ALPHA, const void * - X, const int INCX, void * A) - - -- Function: void cblas_zher2 (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const void * ALPHA, const void * - X, const int INCX, const void * Y, const int INCY, void * A, - const int LDA) - - -- Function: void cblas_zhpr2 (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const int N, const void * ALPHA, const void * - X, const int INCX, const void * Y, const int INCY, void * AP) - - -File: gsl-ref.info, Node: Level 3 CBLAS Functions, Next: GSL CBLAS Examples, Prev: Level 2 CBLAS Functions, Up: GSL CBLAS Library - -D.3 Level 3 -=========== - - -- Function: void cblas_sgemm (const enum CBLAS_ORDER ORDER, const enum - CBLAS_TRANSPOSE TRANSA, const enum CBLAS_TRANSPOSE TRANSB, - const int M, const int N, const int K, const float ALPHA, - const float * A, const int LDA, const float * B, const int - LDB, const float BETA, float * C, const int LDC) - - -- Function: void cblas_ssymm (const enum CBLAS_ORDER ORDER, const enum - CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const int M, - const int N, const float ALPHA, const float * A, const int - LDA, const float * B, const int LDB, const float BETA, float * - C, const int LDC) - - -- Function: void cblas_ssyrk (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const int - N, const int K, const float ALPHA, const float * A, const int - LDA, const float BETA, float * C, const int LDC) - - -- Function: void cblas_ssyr2k (const enum CBLAS_ORDER ORDER, const - enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const - int N, const int K, const float ALPHA, const float * A, const - int LDA, const float * B, const int LDB, const float BETA, - float * C, const int LDC) - - -- Function: void cblas_strmm (const enum CBLAS_ORDER ORDER, const enum - CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const enum - CBLAS_TRANSPOSE TRANSA, const enum CBLAS_DIAG DIAG, const int - M, const int N, const float ALPHA, const float * A, const int - LDA, float * B, const int LDB) - - -- Function: void cblas_strsm (const enum CBLAS_ORDER ORDER, const enum - CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const enum - CBLAS_TRANSPOSE TRANSA, const enum CBLAS_DIAG DIAG, const int - M, const int N, const float ALPHA, const float * A, const int - LDA, float * B, const int LDB) - - -- Function: void cblas_dgemm (const enum CBLAS_ORDER ORDER, const enum - CBLAS_TRANSPOSE TRANSA, const enum CBLAS_TRANSPOSE TRANSB, - const int M, const int N, const int K, const double ALPHA, - const double * A, const int LDA, const double * B, const int - LDB, const double BETA, double * C, const int LDC) - - -- Function: void cblas_dsymm (const enum CBLAS_ORDER ORDER, const enum - CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const int M, - const int N, const double ALPHA, const double * A, const int - LDA, const double * B, const int LDB, const double BETA, - double * C, const int LDC) - - -- Function: void cblas_dsyrk (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const int - N, const int K, const double ALPHA, const double * A, const - int LDA, const double BETA, double * C, const int LDC) - - -- Function: void cblas_dsyr2k (const enum CBLAS_ORDER ORDER, const - enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const - int N, const int K, const double ALPHA, const double * A, - const int LDA, const double * B, const int LDB, const double - BETA, double * C, const int LDC) - - -- Function: void cblas_dtrmm (const enum CBLAS_ORDER ORDER, const enum - CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const enum - CBLAS_TRANSPOSE TRANSA, const enum CBLAS_DIAG DIAG, const int - M, const int N, const double ALPHA, const double * A, const - int LDA, double * B, const int LDB) - - -- Function: void cblas_dtrsm (const enum CBLAS_ORDER ORDER, const enum - CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const enum - CBLAS_TRANSPOSE TRANSA, const enum CBLAS_DIAG DIAG, const int - M, const int N, const double ALPHA, const double * A, const - int LDA, double * B, const int LDB) - - -- Function: void cblas_cgemm (const enum CBLAS_ORDER ORDER, const enum - CBLAS_TRANSPOSE TRANSA, const enum CBLAS_TRANSPOSE TRANSB, - const int M, const int N, const int K, const void * ALPHA, - const void * A, const int LDA, const void * B, const int LDB, - const void * BETA, void * C, const int LDC) - - -- Function: void cblas_csymm (const enum CBLAS_ORDER ORDER, const enum - CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const int M, - const int N, const void * ALPHA, const void * A, const int - LDA, const void * B, const int LDB, const void * BETA, void * - C, const int LDC) - - -- Function: void cblas_csyrk (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const int - N, const int K, const void * ALPHA, const void * A, const int - LDA, const void * BETA, void * C, const int LDC) - - -- Function: void cblas_csyr2k (const enum CBLAS_ORDER ORDER, const - enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const - int N, const int K, const void * ALPHA, const void * A, const - int LDA, const void * B, const int LDB, const void * BETA, - void * C, const int LDC) - - -- Function: void cblas_ctrmm (const enum CBLAS_ORDER ORDER, const enum - CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const enum - CBLAS_TRANSPOSE TRANSA, const enum CBLAS_DIAG DIAG, const int - M, const int N, const void * ALPHA, const void * A, const int - LDA, void * B, const int LDB) - - -- Function: void cblas_ctrsm (const enum CBLAS_ORDER ORDER, const enum - CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const enum - CBLAS_TRANSPOSE TRANSA, const enum CBLAS_DIAG DIAG, const int - M, const int N, const void * ALPHA, const void * A, const int - LDA, void * B, const int LDB) - - -- Function: void cblas_zgemm (const enum CBLAS_ORDER ORDER, const enum - CBLAS_TRANSPOSE TRANSA, const enum CBLAS_TRANSPOSE TRANSB, - const int M, const int N, const int K, const void * ALPHA, - const void * A, const int LDA, const void * B, const int LDB, - const void * BETA, void * C, const int LDC) - - -- Function: void cblas_zsymm (const enum CBLAS_ORDER ORDER, const enum - CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const int M, - const int N, const void * ALPHA, const void * A, const int - LDA, const void * B, const int LDB, const void * BETA, void * - C, const int LDC) - - -- Function: void cblas_zsyrk (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const int - N, const int K, const void * ALPHA, const void * A, const int - LDA, const void * BETA, void * C, const int LDC) - - -- Function: void cblas_zsyr2k (const enum CBLAS_ORDER ORDER, const - enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const - int N, const int K, const void * ALPHA, const void * A, const - int LDA, const void * B, const int LDB, const void * BETA, - void * C, const int LDC) - - -- Function: void cblas_ztrmm (const enum CBLAS_ORDER ORDER, const enum - CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const enum - CBLAS_TRANSPOSE TRANSA, const enum CBLAS_DIAG DIAG, const int - M, const int N, const void * ALPHA, const void * A, const int - LDA, void * B, const int LDB) - - -- Function: void cblas_ztrsm (const enum CBLAS_ORDER ORDER, const enum - CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const enum - CBLAS_TRANSPOSE TRANSA, const enum CBLAS_DIAG DIAG, const int - M, const int N, const void * ALPHA, const void * A, const int - LDA, void * B, const int LDB) - - -- Function: void cblas_chemm (const enum CBLAS_ORDER ORDER, const enum - CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const int M, - const int N, const void * ALPHA, const void * A, const int - LDA, const void * B, const int LDB, const void * BETA, void * - C, const int LDC) - - -- Function: void cblas_cherk (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const int - N, const int K, const float ALPHA, const void * A, const int - LDA, const float BETA, void * C, const int LDC) - - -- Function: void cblas_cher2k (const enum CBLAS_ORDER ORDER, const - enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const - int N, const int K, const void * ALPHA, const void * A, const - int LDA, const void * B, const int LDB, const float BETA, void - * C, const int LDC) - - -- Function: void cblas_zhemm (const enum CBLAS_ORDER ORDER, const enum - CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const int M, - const int N, const void * ALPHA, const void * A, const int - LDA, const void * B, const int LDB, const void * BETA, void * - C, const int LDC) - - -- Function: void cblas_zherk (const enum CBLAS_ORDER ORDER, const enum - CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const int - N, const int K, const double ALPHA, const void * A, const int - LDA, const double BETA, void * C, const int LDC) - - -- Function: void cblas_zher2k (const enum CBLAS_ORDER ORDER, const - enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const - int N, const int K, const void * ALPHA, const void * A, const - int LDA, const void * B, const int LDB, const double BETA, - void * C, const int LDC) + /* number of data points to fit */ + #define N 40 - -- Function: void cblas_xerbla (int P, const char * ROUT, const char * - FORM, ...) + struct data { + size_t n; + double * y; + }; - -File: gsl-ref.info, Node: GSL CBLAS Examples, Prev: Level 3 CBLAS Functions, Up: GSL CBLAS Library + int + expb_f (const gsl_vector * x, void *data, + gsl_vector * f) + { + size_t n = ((struct data *)data)->n; + double *y = ((struct data *)data)->y; -D.4 Examples -============ + double A = gsl_vector_get (x, 0); + double lambda = gsl_vector_get (x, 1); + double b = gsl_vector_get (x, 2); -The following program computes the product of two matrices using the -Level-3 BLAS function SGEMM, + size_t i; - [ 0.11 0.12 0.13 ] [ 1011 1012 ] [ 367.76 368.12 ] - [ 0.21 0.22 0.23 ] [ 1021 1022 ] = [ 674.06 674.72 ] - [ 1031 1032 ] - -The matrices are stored in row major order but could be stored in column -major order if the first argument of the call to 'cblas_sgemm' was -changed to 'CblasColMajor'. + for (i = 0; i < n; i++) + { + /* Model Yi = A * exp(-lambda * i) + b */ + double t = i; + double Yi = A * exp (-lambda * t) + b; + gsl_vector_set (f, i, Yi - y[i]); + } - #include - #include + return GSL_SUCCESS; + } int - main (void) + expb_df (const gsl_vector * x, void *data, + gsl_matrix * J) { - int lda = 3; - - float A[] = { 0.11, 0.12, 0.13, - 0.21, 0.22, 0.23 }; - - int ldb = 2; - - float B[] = { 1011, 1012, - 1021, 1022, - 1031, 1032 }; + size_t n = ((struct data *)data)->n; - int ldc = 2; + double A = gsl_vector_get (x, 0); + double lambda = gsl_vector_get (x, 1); - float C[] = { 0.00, 0.00, - 0.00, 0.00 }; + size_t i; - /* Compute C = A B */ + for (i = 0; i < n; i++) + { + /* Jacobian matrix J(i,j) = dfi / dxj, */ + /* where fi = (Yi - yi)/sigma[i], */ + /* Yi = A * exp(-lambda * i) + b */ + /* and the xj are the parameters (A,lambda,b) */ + double t = i; + double e = exp(-lambda * t); + gsl_matrix_set (J, i, 0, e); + gsl_matrix_set (J, i, 1, -t * A * e); + gsl_matrix_set (J, i, 2, 1.0); + } + return GSL_SUCCESS; + } - cblas_sgemm (CblasRowMajor, - CblasNoTrans, CblasNoTrans, 2, 2, 3, - 1.0, A, lda, B, ldb, 0.0, C, ldc); + void + callback(const size_t iter, void *params, + const gsl_multifit_nlinear_workspace *w) + { + gsl_vector *f = gsl_multifit_nlinear_residual(w); + gsl_vector *x = gsl_multifit_nlinear_position(w); + double rcond; - printf ("[ %g, %g\n", C[0], C[1]); - printf (" %g, %g ]\n", C[2], C[3]); + /* compute reciprocal condition number of J(x) */ + gsl_multifit_nlinear_rcond(&rcond, w); - return 0; + fprintf(stderr, "iter %2zu: A = %.4f, lambda = %.4f, b = %.4f, cond(J) = %8.4f, |f(x)| = %.4f\n", + iter, + gsl_vector_get(x, 0), + gsl_vector_get(x, 1), + gsl_vector_get(x, 2), + 1.0 / rcond, + gsl_blas_dnrm2(f)); } -To compile the program use the following command line, + int + main (void) + { + const gsl_multifit_nlinear_type *T = gsl_multifit_nlinear_trust; + gsl_multifit_nlinear_workspace *w; + gsl_multifit_nlinear_fdf fdf; + gsl_multifit_nlinear_parameters fdf_params = + gsl_multifit_nlinear_default_parameters(); + const size_t n = N; + const size_t p = 3; - $ gcc -Wall demo.c -lgslcblas + gsl_vector *f; + gsl_matrix *J; + gsl_matrix *covar = gsl_matrix_alloc (p, p); + double y[N], weights[N]; + struct data d = { n, y }; + double x_init[3] = { 1.0, 1.0, 0.0 }; /* starting values */ + gsl_vector_view x = gsl_vector_view_array (x_init, p); + gsl_vector_view wts = gsl_vector_view_array(weights, n); + gsl_rng * r; + double chisq, chisq0; + int status, info; + size_t i; -There is no need to link with the main library '-lgsl' in this case as -the CBLAS library is an independent unit. Here is the output from the -program, + const double xtol = 1e-8; + const double gtol = 1e-8; + const double ftol = 0.0; - $ ./a.out - [ 367.76, 368.12 - 674.06, 674.72 ] + gsl_rng_env_setup(); + r = gsl_rng_alloc(gsl_rng_default); - -File: gsl-ref.info, Node: GNU General Public License, Next: GNU Free Documentation License, Prev: GSL CBLAS Library, Up: Top + /* define the function to be minimized */ + fdf.f = expb_f; + fdf.df = expb_df; /* set to NULL for finite-difference Jacobian */ + fdf.fvv = NULL; /* not using geodesic acceleration */ + fdf.n = n; + fdf.p = p; + fdf.params = &d; -GNU General Public License -************************** + /* this is the data to be fitted */ + for (i = 0; i < n; i++) + { + double t = i; + double yi = 1.0 + 5 * exp (-0.1 * t); + double si = 0.1 * yi; + double dy = gsl_ran_gaussian(r, si); + + weights[i] = 1.0 / (si * si); + y[i] = yi + dy; + printf ("data: %zu %g %g\n", i, y[i], si); + }; - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - - Everyone is permitted to copy and distribute verbatim copies of this - license document, but changing it is not allowed. - -Preamble -======== - -The GNU General Public License is a free, copyleft license for software -and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program-to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. + /* allocate workspace with default parameters */ + w = gsl_multifit_nlinear_alloc (T, &fdf_params, n, p); - The precise terms and conditions for copying, distribution and -modification follow. + /* initialize solver with starting point and weights */ + gsl_multifit_nlinear_winit (&x.vector, &wts.vector, &fdf, w); -TERMS AND CONDITIONS -==================== + /* compute initial cost function */ + f = gsl_multifit_nlinear_residual(w); + gsl_blas_ddot(f, f, &chisq0); - 0. Definitions. + /* solve the system with a maximum of 20 iterations */ + status = gsl_multifit_nlinear_driver(20, xtol, gtol, ftol, + callback, NULL, &info, w); - "This License" refers to version 3 of the GNU General Public - License. + /* compute covariance of best fit parameters */ + J = gsl_multifit_nlinear_jac(w); + gsl_multifit_nlinear_covar (J, 0.0, covar); - "Copyright" also means copyright-like laws that apply to other - kinds of works, such as semiconductor masks. + /* compute final cost */ + gsl_blas_ddot(f, f, &chisq); - "The Program" refers to any copyrightable work licensed under this - License. Each licensee is addressed as "you". "Licensees" and - "recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the - work in a fashion requiring copyright permission, other than the - making of an exact copy. The resulting work is called a "modified - version" of the earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work - based on the Program. - - To "propagate" a work means to do anything with it that, without - permission, would make you directly or secondarily liable for - infringement under applicable copyright law, except executing it on - a computer or modifying a private copy. Propagation includes - copying, distribution (with or without modification), making - available to the public, and in some countries other activities as - well. - - To "convey" a work means any kind of propagation that enables other - parties to make or receive copies. Mere interaction with a user - through a computer network, with no transfer of a copy, is not - conveying. - - An interactive user interface displays "Appropriate Legal Notices" - to the extent that it includes a convenient and prominently visible - feature that (1) displays an appropriate copyright notice, and (2) - tells the user that there is no warranty for the work (except to - the extent that warranties are provided), that licensees may convey - the work under this License, and how to view a copy of this - License. If the interface presents a list of user commands or - options, such as a menu, a prominent item in the list meets this - criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work - for making modifications to it. "Object code" means any non-source - form of a work. - - A "Standard Interface" means an interface that either is an - official standard defined by a recognized standards body, or, in - the case of interfaces specified for a particular programming - language, one that is widely used among developers working in that - language. - - The "System Libraries" of an executable work include anything, - other than the work as a whole, that (a) is included in the normal - form of packaging a Major Component, but which is not part of that - Major Component, and (b) serves only to enable use of the work with - that Major Component, or to implement a Standard Interface for - which an implementation is available to the public in source code - form. A "Major Component", in this context, means a major - essential component (kernel, window system, and so on) of the - specific operating system (if any) on which the executable work - runs, or a compiler used to produce the work, or an object code - interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all - the source code needed to generate, install, and (for an executable - work) run the object code and to modify the work, including scripts - to control those activities. However, it does not include the - work's System Libraries, or general-purpose tools or generally - available free programs which are used unmodified in performing - those activities but which are not part of the work. For example, - Corresponding Source includes interface definition files associated - with source files for the work, and the source code for shared - libraries and dynamically linked subprograms that the work is - specifically designed to require, such as by intimate data - communication or control flow between those subprograms and other - parts of the work. - - The Corresponding Source need not include anything that users can - regenerate automatically from other parts of the Corresponding - Source. - - The Corresponding Source for a work in source code form is that - same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of - copyright on the Program, and are irrevocable provided the stated - conditions are met. This License explicitly affirms your unlimited - permission to run the unmodified Program. The output from running - a covered work is covered by this License only if the output, given - its content, constitutes a covered work. This License acknowledges - your rights of fair use or other equivalent, as provided by - copyright law. - - You may make, run and propagate covered works that you do not - convey, without conditions so long as your license otherwise - remains in force. You may convey covered works to others for the - sole purpose of having them make modifications exclusively for you, - or provide you with facilities for running those works, provided - that you comply with the terms of this License in conveying all - material for which you do not control copyright. Those thus making - or running the covered works for you must do so exclusively on your - behalf, under your direction and control, on terms that prohibit - them from making any copies of your copyrighted material outside - their relationship with you. - - Conveying under any other circumstances is permitted solely under - the conditions stated below. Sublicensing is not allowed; section - 10 makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological - measure under any applicable law fulfilling obligations under - article 11 of the WIPO copyright treaty adopted on 20 December - 1996, or similar laws prohibiting or restricting circumvention of - such measures. - - When you convey a covered work, you waive any legal power to forbid - circumvention of technological measures to the extent such - circumvention is effected by exercising rights under this License - with respect to the covered work, and you disclaim any intention to - limit operation or modification of the work as a means of - enforcing, against the work's users, your or third parties' legal - rights to forbid circumvention of technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you - receive it, in any medium, provided that you conspicuously and - appropriately publish on each copy an appropriate copyright notice; - keep intact all notices stating that this License and any - non-permissive terms added in accord with section 7 apply to the - code; keep intact all notices of the absence of any warranty; and - give all recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, - and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to - produce it from the Program, in the form of source code under the - terms of section 4, provided that you also meet all of these - conditions: - - a. The work must carry prominent notices stating that you - modified it, and giving a relevant date. - - b. The work must carry prominent notices stating that it is - released under this License and any conditions added under - section 7. This requirement modifies the requirement in - section 4 to "keep intact all notices". - - c. You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable - section 7 additional terms, to the whole of the work, and all - its parts, regardless of how they are packaged. This License - gives no permission to license the work in any other way, but - it does not invalidate such permission if you have separately - received it. - - d. If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has - interactive interfaces that do not display Appropriate Legal - Notices, your work need not make them do so. - - A compilation of a covered work with other separate and independent - works, which are not by their nature extensions of the covered - work, and which are not combined with it such as to form a larger - program, in or on a volume of a storage or distribution medium, is - called an "aggregate" if the compilation and its resulting - copyright are not used to limit the access or legal rights of the - compilation's users beyond what the individual works permit. - Inclusion of a covered work in an aggregate does not cause this - License to apply to the other parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms - of sections 4 and 5, provided that you also convey the - machine-readable Corresponding Source under the terms of this - License, in one of these ways: - - a. Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b. Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that - product model, to give anyone who possesses the object code - either (1) a copy of the Corresponding Source for all the - software in the product that is covered by this License, on a - durable physical medium customarily used for software - interchange, for a price no more than your reasonable cost of - physically performing this conveying of source, or (2) access - to copy the Corresponding Source from a network server at no - charge. - - c. Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, - and only if you received the object code with such an offer, - in accord with subsection 6b. - - d. Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to - the Corresponding Source in the same way through the same - place at no further charge. You need not require recipients - to copy the Corresponding Source along with the object code. - If the place to copy the object code is a network server, the - Corresponding Source may be on a different server (operated by - you or a third party) that supports equivalent copying - facilities, provided you maintain clear directions next to the - object code saying where to find the Corresponding Source. - Regardless of what server hosts the Corresponding Source, you - remain obligated to ensure that it is available for as long as - needed to satisfy these requirements. - - e. Convey the object code using peer-to-peer transmission, - provided you inform other peers where the object code and - Corresponding Source of the work are being offered to the - general public at no charge under subsection 6d. - - A separable portion of the object code, whose source code is - excluded from the Corresponding Source as a System Library, need - not be included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means - any tangible personal property which is normally used for personal, - family, or household purposes, or (2) anything designed or sold for - incorporation into a dwelling. In determining whether a product is - a consumer product, doubtful cases shall be resolved in favor of - coverage. For a particular product received by a particular user, - "normally used" refers to a typical or common use of that class of - product, regardless of the status of the particular user or of the - way in which the particular user actually uses, or expects or is - expected to use, the product. A product is a consumer product - regardless of whether the product has substantial commercial, - industrial or non-consumer uses, unless such uses represent the - only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, - procedures, authorization keys, or other information required to - install and execute modified versions of a covered work in that - User Product from a modified version of its Corresponding Source. - The information must suffice to ensure that the continued - functioning of the modified object code is in no case prevented or - interfered with solely because modification has been made. - - If you convey an object code work under this section in, or with, - or specifically for use in, a User Product, and the conveying - occurs as part of a transaction in which the right of possession - and use of the User Product is transferred to the recipient in - perpetuity or for a fixed term (regardless of how the transaction - is characterized), the Corresponding Source conveyed under this - section must be accompanied by the Installation Information. But - this requirement does not apply if neither you nor any third party - retains the ability to install modified object code on the User - Product (for example, the work has been installed in ROM). - - The requirement to provide Installation Information does not - include a requirement to continue to provide support service, - warranty, or updates for a work that has been modified or installed - by the recipient, or for the User Product in which it has been - modified or installed. Access to a network may be denied when the - modification itself materially and adversely affects the operation - of the network or violates the rules and protocols for - communication across the network. - - Corresponding Source conveyed, and Installation Information - provided, in accord with this section must be in a format that is - publicly documented (and with an implementation available to the - public in source code form), and must require no special password - or key for unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of - this License by making exceptions from one or more of its - conditions. Additional permissions that are applicable to the - entire Program shall be treated as though they were included in - this License, to the extent that they are valid under applicable - law. If additional permissions apply only to part of the Program, - that part may be used separately under those permissions, but the - entire Program remains governed by this License without regard to - the additional permissions. - - When you convey a copy of a covered work, you may at your option - remove any additional permissions from that copy, or from any part - of it. (Additional permissions may be written to require their own - removal in certain cases when you modify the work.) You may place - additional permissions on material, added by you to a covered work, - for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material - you add to a covered work, you may (if authorized by the copyright - holders of that material) supplement the terms of this License with - terms: - - a. Disclaiming warranty or limiting liability differently from - the terms of sections 15 and 16 of this License; or - - b. Requiring preservation of specified reasonable legal notices - or author attributions in that material or in the Appropriate - Legal Notices displayed by works containing it; or - - c. Prohibiting misrepresentation of the origin of that material, - or requiring that modified versions of such material be marked - in reasonable ways as different from the original version; or - - d. Limiting the use for publicity purposes of names of licensors - or authors of the material; or - - e. Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f. Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified - versions of it) with contractual assumptions of liability to - the recipient, for any liability that these contractual - assumptions directly impose on those licensors and authors. - - All other non-permissive additional terms are considered "further - restrictions" within the meaning of section 10. If the Program as - you received it, or any part of it, contains a notice stating that - it is governed by this License along with a term that is a further - restriction, you may remove that term. If a license document - contains a further restriction but permits relicensing or conveying - under this License, you may add to a covered work material governed - by the terms of that license document, provided that the further - restriction does not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you - must place, in the relevant source files, a statement of the - additional terms that apply to those files, or a notice indicating - where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in - the form of a separately written license, or stated as exceptions; - the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly - provided under this License. Any attempt otherwise to propagate or - modify it is void, and will automatically terminate your rights - under this License (including any patent licenses granted under the - third paragraph of section 11). - - However, if you cease all violation of this License, then your - license from a particular copyright holder is reinstated (a) - provisionally, unless and until the copyright holder explicitly and - finally terminates your license, and (b) permanently, if the - copyright holder fails to notify you of the violation by some - reasonable means prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is - reinstated permanently if the copyright holder notifies you of the - violation by some reasonable means, this is the first time you have - received notice of violation of this License (for any work) from - that copyright holder, and you cure the violation prior to 30 days - after your receipt of the notice. - - Termination of your rights under this section does not terminate - the licenses of parties who have received copies or rights from you - under this License. If your rights have been terminated and not - permanently reinstated, you do not qualify to receive new licenses - for the same material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or - run a copy of the Program. Ancillary propagation of a covered work - occurring solely as a consequence of using peer-to-peer - transmission to receive a copy likewise does not require - acceptance. However, nothing other than this License grants you - permission to propagate or modify any covered work. These actions - infringe copyright if you do not accept this License. Therefore, - by modifying or propagating a covered work, you indicate your - acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically - receives a license from the original licensors, to run, modify and - propagate that work, subject to this License. You are not - responsible for enforcing compliance by third parties with this - License. - - An "entity transaction" is a transaction transferring control of an - organization, or substantially all assets of one, or subdividing an - organization, or merging organizations. If propagation of a - covered work results from an entity transaction, each party to that - transaction who receives a copy of the work also receives whatever - licenses to the work the party's predecessor in interest had or - could give under the previous paragraph, plus a right to possession - of the Corresponding Source of the work from the predecessor in - interest, if the predecessor has it or can get it with reasonable - efforts. - - You may not impose any further restrictions on the exercise of the - rights granted or affirmed under this License. For example, you - may not impose a license fee, royalty, or other charge for exercise - of rights granted under this License, and you may not initiate - litigation (including a cross-claim or counterclaim in a lawsuit) - alleging that any patent claim is infringed by making, using, - selling, offering for sale, or importing the Program or any portion - of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this - License of the Program or a work on which the Program is based. - The work thus licensed is called the contributor's "contributor - version". - - A contributor's "essential patent claims" are all patent claims - owned or controlled by the contributor, whether already acquired or - hereafter acquired, that would be infringed by some manner, - permitted by this License, of making, using, or selling its - contributor version, but do not include claims that would be - infringed only as a consequence of further modification of the - contributor version. For purposes of this definition, "control" - includes the right to grant patent sublicenses in a manner - consistent with the requirements of this License. - - Each contributor grants you a non-exclusive, worldwide, - royalty-free patent license under the contributor's essential - patent claims, to make, use, sell, offer for sale, import and - otherwise run, modify and propagate the contents of its contributor - version. - - In the following three paragraphs, a "patent license" is any - express agreement or commitment, however denominated, not to - enforce a patent (such as an express permission to practice a - patent or covenant not to sue for patent infringement). To "grant" - such a patent license to a party means to make such an agreement or - commitment not to enforce a patent against the party. - - If you convey a covered work, knowingly relying on a patent - license, and the Corresponding Source of the work is not available - for anyone to copy, free of charge and under the terms of this - License, through a publicly available network server or other - readily accessible means, then you must either (1) cause the - Corresponding Source to be so available, or (2) arrange to deprive - yourself of the benefit of the patent license for this particular - work, or (3) arrange, in a manner consistent with the requirements - of this License, to extend the patent license to downstream - recipients. "Knowingly relying" means you have actual knowledge - that, but for the patent license, your conveying the covered work - in a country, or your recipient's use of the covered work in a - country, would infringe one or more identifiable patents in that - country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or - arrangement, you convey, or propagate by procuring conveyance of, a - covered work, and grant a patent license to some of the parties - receiving the covered work authorizing them to use, propagate, - modify or convey a specific copy of the covered work, then the - patent license you grant is automatically extended to all - recipients of the covered work and works based on it. - - A patent license is "discriminatory" if it does not include within - the scope of its coverage, prohibits the exercise of, or is - conditioned on the non-exercise of one or more of the rights that - are specifically granted under this License. You may not convey a - covered work if you are a party to an arrangement with a third - party that is in the business of distributing software, under which - you make payment to the third party based on the extent of your - activity of conveying the work, and under which the third party - grants, to any of the parties who would receive the covered work - from you, a discriminatory patent license (a) in connection with - copies of the covered work conveyed by you (or copies made from - those copies), or (b) primarily for and in connection with specific - products or compilations that contain the covered work, unless you - entered into that arrangement, or that patent license was granted, - prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting - any implied license or other defenses to infringement that may - otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement - or otherwise) that contradict the conditions of this License, they - do not excuse you from the conditions of this License. If you - cannot convey a covered work so as to satisfy simultaneously your - obligations under this License and any other pertinent obligations, - then as a consequence you may not convey it at all. For example, - if you agree to terms that obligate you to collect a royalty for - further conveying from those to whom you convey the Program, the - only way you could satisfy both those terms and this License would - be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have - permission to link or combine any covered work with a work licensed - under version 3 of the GNU Affero General Public License into a - single combined work, and to convey the resulting work. The terms - of this License will continue to apply to the part which is the - covered work, but the special requirements of the GNU Affero - General Public License, section 13, concerning interaction through - a network will apply to the combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new - versions of the GNU General Public License from time to time. Such - new versions will be similar in spirit to the present version, but - may differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the - Program specifies that a certain numbered version of the GNU - General Public License "or any later version" applies to it, you - have the option of following the terms and conditions either of - that numbered version or of any later version published by the Free - Software Foundation. If the Program does not specify a version - number of the GNU General Public License, you may choose any - version ever published by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future - versions of the GNU General Public License can be used, that - proxy's public statement of acceptance of a version permanently - authorizes you to choose that version for the Program. - - Later license versions may give you additional or different - permissions. However, no additional obligations are imposed on any - author or copyright holder as a result of your choosing to follow a - later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY - APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE - COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" - WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE - RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. - SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL - NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN - WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES - AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR - DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR - CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE - THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA - BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD - PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER - PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF - THE POSSIBILITY OF SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided - above cannot be given local legal effect according to their terms, - reviewing courts shall apply local law that most closely - approximates an absolute waiver of all civil liability in - connection with the Program, unless a warranty or assumption of - liability accompanies a copy of the Program in return for a fee. + #define FIT(i) gsl_vector_get(w->x, i) + #define ERR(i) sqrt(gsl_matrix_get(covar,i,i)) -END OF TERMS AND CONDITIONS -=========================== + fprintf(stderr, "summary from method '%s/%s'\n", + gsl_multifit_nlinear_name(w), + gsl_multifit_nlinear_trs_name(w)); + fprintf(stderr, "number of iterations: %zu\n", + gsl_multifit_nlinear_niter(w)); + fprintf(stderr, "function evaluations: %zu\n", fdf.nevalf); + fprintf(stderr, "Jacobian evaluations: %zu\n", fdf.nevaldf); + fprintf(stderr, "reason for stopping: %s\n", + (info == 1) ? "small step size" : "small gradient"); + fprintf(stderr, "initial |f(x)| = %f\n", sqrt(chisq0)); + fprintf(stderr, "final |f(x)| = %f\n", sqrt(chisq)); -How to Apply These Terms to Your New Programs -============================================= + { + double dof = n - p; + double c = GSL_MAX_DBL(1, sqrt(chisq / dof)); -If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these -terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA - OF WHAT IT DOES. - Copyright (C) YEAR NAME OF AUTHOR - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or (at - your option) any later version. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - Also add information on how to contact you by electronic and paper -mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - PROGRAM Copyright (C) YEAR NAME OF AUTHOR - This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type 'show c' for details. - - The hypothetical commands 'show w' and 'show c' should show the -appropriate parts of the General Public License. Of course, your -program's commands might be different; for a GUI interface, you would -use an "about box". - - You should also get your employer (if you work as a programmer) or -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. For more information on this, and how to apply and follow -the GNU GPL, see . - - The GNU General Public License does not permit incorporating your -program into proprietary programs. If your program is a subroutine -library, you may consider it more useful to permit linking proprietary -applications with the library. If this is what you want to do, use the -GNU Lesser General Public License instead of this License. But first, -please read . - - -File: gsl-ref.info, Node: GNU Free Documentation License, Next: Function Index, Prev: GNU General Public License, Up: Top - -GNU Free Documentation License -****************************** - - Version 1.3, 3 November 2008 - - Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. - - - Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is - not allowed. - - 0. PREAMBLE - - The purpose of this License is to make a manual, textbook, or other - functional and useful document "free" in the sense of freedom: to - assure everyone the effective freedom to copy and redistribute it, - with or without modifying it, either commercially or - noncommercially. Secondarily, this License preserves for the - author and publisher a way to get credit for their work, while not - being considered responsible for modifications made by others. - - This License is a kind of "copyleft", which means that derivative - works of the document must themselves be free in the same sense. - It complements the GNU General Public License, which is a copyleft - license designed for free software. - - We have designed this License in order to use it for manuals for - free software, because free software needs free documentation: a - free program should come with manuals providing the same freedoms - that the software does. But this License is not limited to - software manuals; it can be used for any textual work, regardless - of subject matter or whether it is published as a printed book. We - recommend this License principally for works whose purpose is - instruction or reference. - - 1. APPLICABILITY AND DEFINITIONS - - This License applies to any manual or other work, in any medium, - that contains a notice placed by the copyright holder saying it can - be distributed under the terms of this License. Such a notice - grants a world-wide, royalty-free license, unlimited in duration, - to use that work under the conditions stated herein. The - "Document", below, refers to any such manual or work. Any member - of the public is a licensee, and is addressed as "you". You accept - the license if you copy, modify or distribute the work in a way - requiring permission under copyright law. - - A "Modified Version" of the Document means any work containing the - Document or a portion of it, either copied verbatim, or with - modifications and/or translated into another language. - - A "Secondary Section" is a named appendix or a front-matter section - of the Document that deals exclusively with the relationship of the - publishers or authors of the Document to the Document's overall - subject (or to related matters) and contains nothing that could - fall directly within that overall subject. (Thus, if the Document - is in part a textbook of mathematics, a Secondary Section may not - explain any mathematics.) The relationship could be a matter of - historical connection with the subject or with related matters, or - of legal, commercial, philosophical, ethical or political position - regarding them. - - The "Invariant Sections" are certain Secondary Sections whose - titles are designated, as being those of Invariant Sections, in the - notice that says that the Document is released under this License. - If a section does not fit the above definition of Secondary then it - is not allowed to be designated as Invariant. The Document may - contain zero Invariant Sections. If the Document does not identify - any Invariant Sections then there are none. - - The "Cover Texts" are certain short passages of text that are - listed, as Front-Cover Texts or Back-Cover Texts, in the notice - that says that the Document is released under this License. A - Front-Cover Text may be at most 5 words, and a Back-Cover Text may - be at most 25 words. - - A "Transparent" copy of the Document means a machine-readable copy, - represented in a format whose specification is available to the - general public, that is suitable for revising the document - straightforwardly with generic text editors or (for images composed - of pixels) generic paint programs or (for drawings) some widely - available drawing editor, and that is suitable for input to text - formatters or for automatic translation to a variety of formats - suitable for input to text formatters. A copy made in an otherwise - Transparent file format whose markup, or absence of markup, has - been arranged to thwart or discourage subsequent modification by - readers is not Transparent. An image format is not Transparent if - used for any substantial amount of text. A copy that is not - "Transparent" is called "Opaque". - - Examples of suitable formats for Transparent copies include plain - ASCII without markup, Texinfo input format, LaTeX input format, - SGML or XML using a publicly available DTD, and standard-conforming - simple HTML, PostScript or PDF designed for human modification. - Examples of transparent image formats include PNG, XCF and JPG. - Opaque formats include proprietary formats that can be read and - edited only by proprietary word processors, SGML or XML for which - the DTD and/or processing tools are not generally available, and - the machine-generated HTML, PostScript or PDF produced by some word - processors for output purposes only. - - The "Title Page" means, for a printed book, the title page itself, - plus such following pages as are needed to hold, legibly, the - material this License requires to appear in the title page. For - works in formats which do not have any title page as such, "Title - Page" means the text near the most prominent appearance of the - work's title, preceding the beginning of the body of the text. - - The "publisher" means any person or entity that distributes copies - of the Document to the public. - - A section "Entitled XYZ" means a named subunit of the Document - whose title either is precisely XYZ or contains XYZ in parentheses - following text that translates XYZ in another language. (Here XYZ - stands for a specific section name mentioned below, such as - "Acknowledgements", "Dedications", "Endorsements", or "History".) - To "Preserve the Title" of such a section when you modify the - Document means that it remains a section "Entitled XYZ" according - to this definition. - - The Document may include Warranty Disclaimers next to the notice - which states that this License applies to the Document. These - Warranty Disclaimers are considered to be included by reference in - this License, but only as regards disclaiming warranties: any other - implication that these Warranty Disclaimers may have is void and - has no effect on the meaning of this License. - - 2. VERBATIM COPYING - - You may copy and distribute the Document in any medium, either - commercially or noncommercially, provided that this License, the - copyright notices, and the license notice saying this License - applies to the Document are reproduced in all copies, and that you - add no other conditions whatsoever to those of this License. You - may not use technical measures to obstruct or control the reading - or further copying of the copies you make or distribute. However, - you may accept compensation in exchange for copies. If you - distribute a large enough number of copies you must also follow the - conditions in section 3. - - You may also lend copies, under the same conditions stated above, - and you may publicly display copies. - - 3. COPYING IN QUANTITY - - If you publish printed copies (or copies in media that commonly - have printed covers) of the Document, numbering more than 100, and - the Document's license notice requires Cover Texts, you must - enclose the copies in covers that carry, clearly and legibly, all - these Cover Texts: Front-Cover Texts on the front cover, and - Back-Cover Texts on the back cover. Both covers must also clearly - and legibly identify you as the publisher of these copies. The - front cover must present the full title with all words of the title - equally prominent and visible. You may add other material on the - covers in addition. Copying with changes limited to the covers, as - long as they preserve the title of the Document and satisfy these - conditions, can be treated as verbatim copying in other respects. - - If the required texts for either cover are too voluminous to fit - legibly, you should put the first ones listed (as many as fit - reasonably) on the actual cover, and continue the rest onto - adjacent pages. - - If you publish or distribute Opaque copies of the Document - numbering more than 100, you must either include a machine-readable - Transparent copy along with each Opaque copy, or state in or with - each Opaque copy a computer-network location from which the general - network-using public has access to download using public-standard - network protocols a complete Transparent copy of the Document, free - of added material. If you use the latter option, you must take - reasonably prudent steps, when you begin distribution of Opaque - copies in quantity, to ensure that this Transparent copy will - remain thus accessible at the stated location until at least one - year after the last time you distribute an Opaque copy (directly or - through your agents or retailers) of that edition to the public. - - It is requested, but not required, that you contact the authors of - the Document well before redistributing any large number of copies, - to give them a chance to provide you with an updated version of the - Document. - - 4. MODIFICATIONS - - You may copy and distribute a Modified Version of the Document - under the conditions of sections 2 and 3 above, provided that you - release the Modified Version under precisely this License, with the - Modified Version filling the role of the Document, thus licensing - distribution and modification of the Modified Version to whoever - possesses a copy of it. In addition, you must do these things in - the Modified Version: - - A. Use in the Title Page (and on the covers, if any) a title - distinct from that of the Document, and from those of previous - versions (which should, if there were any, be listed in the - History section of the Document). You may use the same title - as a previous version if the original publisher of that - version gives permission. - - B. List on the Title Page, as authors, one or more persons or - entities responsible for authorship of the modifications in - the Modified Version, together with at least five of the - principal authors of the Document (all of its principal - authors, if it has fewer than five), unless they release you - from this requirement. - - C. State on the Title page the name of the publisher of the - Modified Version, as the publisher. - - D. Preserve all the copyright notices of the Document. - - E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. - - F. Include, immediately after the copyright notices, a license - notice giving the public permission to use the Modified - Version under the terms of this License, in the form shown in - the Addendum below. - - G. Preserve in that license notice the full lists of Invariant - Sections and required Cover Texts given in the Document's - license notice. - - H. Include an unaltered copy of this License. - - I. Preserve the section Entitled "History", Preserve its Title, - and add to it an item stating at least the title, year, new - authors, and publisher of the Modified Version as given on the - Title Page. If there is no section Entitled "History" in the - Document, create one stating the title, year, authors, and - publisher of the Document as given on its Title Page, then add - an item describing the Modified Version as stated in the - previous sentence. - - J. Preserve the network location, if any, given in the Document - for public access to a Transparent copy of the Document, and - likewise the network locations given in the Document for - previous versions it was based on. These may be placed in the - "History" section. You may omit a network location for a work - that was published at least four years before the Document - itself, or if the original publisher of the version it refers - to gives permission. - - K. For any section Entitled "Acknowledgements" or "Dedications", - Preserve the Title of the section, and preserve in the section - all the substance and tone of each of the contributor - acknowledgements and/or dedications given therein. - - L. Preserve all the Invariant Sections of the Document, unaltered - in their text and in their titles. Section numbers or the - equivalent are not considered part of the section titles. - - M. Delete any section Entitled "Endorsements". Such a section - may not be included in the Modified Version. - - N. Do not retitle any existing section to be Entitled - "Endorsements" or to conflict in title with any Invariant - Section. - - O. Preserve any Warranty Disclaimers. - - If the Modified Version includes new front-matter sections or - appendices that qualify as Secondary Sections and contain no - material copied from the Document, you may at your option designate - some or all of these sections as invariant. To do this, add their - titles to the list of Invariant Sections in the Modified Version's - license notice. These titles must be distinct from any other - section titles. - - You may add a section Entitled "Endorsements", provided it contains - nothing but endorsements of your Modified Version by various - parties--for example, statements of peer review or that the text - has been approved by an organization as the authoritative - definition of a standard. - - You may add a passage of up to five words as a Front-Cover Text, - and a passage of up to 25 words as a Back-Cover Text, to the end of - the list of Cover Texts in the Modified Version. Only one passage - of Front-Cover Text and one of Back-Cover Text may be added by (or - through arrangements made by) any one entity. If the Document - already includes a cover text for the same cover, previously added - by you or by arrangement made by the same entity you are acting on - behalf of, you may not add another; but you may replace the old - one, on explicit permission from the previous publisher that added - the old one. - - The author(s) and publisher(s) of the Document do not by this - License give permission to use their names for publicity for or to - assert or imply endorsement of any Modified Version. - - 5. COMBINING DOCUMENTS - - You may combine the Document with other documents released under - this License, under the terms defined in section 4 above for - modified versions, provided that you include in the combination all - of the Invariant Sections of all of the original documents, - unmodified, and list them all as Invariant Sections of your - combined work in its license notice, and that you preserve all - their Warranty Disclaimers. - - The combined work need only contain one copy of this License, and - multiple identical Invariant Sections may be replaced with a single - copy. If there are multiple Invariant Sections with the same name - but different contents, make the title of each such section unique - by adding at the end of it, in parentheses, the name of the - original author or publisher of that section if known, or else a - unique number. Make the same adjustment to the section titles in - the list of Invariant Sections in the license notice of the - combined work. - - In the combination, you must combine any sections Entitled - "History" in the various original documents, forming one section - Entitled "History"; likewise combine any sections Entitled - "Acknowledgements", and any sections Entitled "Dedications". You - must delete all sections Entitled "Endorsements." - - 6. COLLECTIONS OF DOCUMENTS - - You may make a collection consisting of the Document and other - documents released under this License, and replace the individual - copies of this License in the various documents with a single copy - that is included in the collection, provided that you follow the - rules of this License for verbatim copying of each of the documents - in all other respects. - - You may extract a single document from such a collection, and - distribute it individually under this License, provided you insert - a copy of this License into the extracted document, and follow this - License in all other respects regarding verbatim copying of that - document. - - 7. AGGREGATION WITH INDEPENDENT WORKS - - A compilation of the Document or its derivatives with other - separate and independent documents or works, in or on a volume of a - storage or distribution medium, is called an "aggregate" if the - copyright resulting from the compilation is not used to limit the - legal rights of the compilation's users beyond what the individual - works permit. When the Document is included in an aggregate, this - License does not apply to the other works in the aggregate which - are not themselves derivative works of the Document. - - If the Cover Text requirement of section 3 is applicable to these - copies of the Document, then if the Document is less than one half - of the entire aggregate, the Document's Cover Texts may be placed - on covers that bracket the Document within the aggregate, or the - electronic equivalent of covers if the Document is in electronic - form. Otherwise they must appear on printed covers that bracket - the whole aggregate. - - 8. TRANSLATION - - Translation is considered a kind of modification, so you may - distribute translations of the Document under the terms of section - 4. Replacing Invariant Sections with translations requires special - permission from their copyright holders, but you may include - translations of some or all Invariant Sections in addition to the - original versions of these Invariant Sections. You may include a - translation of this License, and all the license notices in the - Document, and any Warranty Disclaimers, provided that you also - include the original English version of this License and the - original versions of those notices and disclaimers. In case of a - disagreement between the translation and the original version of - this License or a notice or disclaimer, the original version will - prevail. - - If a section in the Document is Entitled "Acknowledgements", - "Dedications", or "History", the requirement (section 4) to - Preserve its Title (section 1) will typically require changing the - actual title. - - 9. TERMINATION - - You may not copy, modify, sublicense, or distribute the Document - except as expressly provided under this License. Any attempt - otherwise to copy, modify, sublicense, or distribute it is void, - and will automatically terminate your rights under this License. - - However, if you cease all violation of this License, then your - license from a particular copyright holder is reinstated (a) - provisionally, unless and until the copyright holder explicitly and - finally terminates your license, and (b) permanently, if the - copyright holder fails to notify you of the violation by some - reasonable means prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is - reinstated permanently if the copyright holder notifies you of the - violation by some reasonable means, this is the first time you have - received notice of violation of this License (for any work) from - that copyright holder, and you cure the violation prior to 30 days - after your receipt of the notice. - - Termination of your rights under this section does not terminate - the licenses of parties who have received copies or rights from you - under this License. If your rights have been terminated and not - permanently reinstated, receipt of a copy of some or all of the - same material does not give you any rights to use it. - - 10. FUTURE REVISIONS OF THIS LICENSE - - The Free Software Foundation may publish new, revised versions of - the GNU Free Documentation License from time to time. Such new - versions will be similar in spirit to the present version, but may - differ in detail to address new problems or concerns. See - . - - Each version of the License is given a distinguishing version - number. If the Document specifies that a particular numbered - version of this License "or any later version" applies to it, you - have the option of following the terms and conditions either of - that specified version or of any later version that has been - published (not as a draft) by the Free Software Foundation. If the - Document does not specify a version number of this License, you may - choose any version ever published (not as a draft) by the Free - Software Foundation. If the Document specifies that a proxy can - decide which future versions of this License can be used, that - proxy's public statement of acceptance of a version permanently - authorizes you to choose that version for the Document. - - 11. RELICENSING - - "Massive Multiauthor Collaboration Site" (or "MMC Site") means any - World Wide Web server that publishes copyrightable works and also - provides prominent facilities for anybody to edit those works. A - public wiki that anybody can edit is an example of such a server. - A "Massive Multiauthor Collaboration" (or "MMC") contained in the - site means any set of copyrightable works thus published on the MMC - site. - - "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 - license published by Creative Commons Corporation, a not-for-profit - corporation with a principal place of business in San Francisco, - California, as well as future copyleft versions of that license - published by that same organization. - - "Incorporate" means to publish or republish a Document, in whole or - in part, as part of another Document. - - An MMC is "eligible for relicensing" if it is licensed under this - License, and if all works that were first published under this - License somewhere other than this MMC, and subsequently - incorporated in whole or in part into the MMC, (1) had no cover - texts or invariant sections, and (2) were thus incorporated prior - to November 1, 2008. - - The operator of an MMC Site may republish an MMC contained in the - site under CC-BY-SA on the same site at any time before August 1, - 2009, provided the MMC is eligible for relicensing. - -ADDENDUM: How to use this License for your documents -==================================================== - -To use this License in a document you have written, include a copy of -the License in the document and put the following copyright and license -notices just after the title page: - - Copyright (C) YEAR YOUR NAME. - Permission is granted to copy, distribute and/or modify - this document under the terms of the GNU Free - Documentation License, Version 1.3 or any later version - published by the Free Software Foundation; with no - Invariant Sections, no Front-Cover Texts, and no - Back-Cover Texts. A copy of the license is included in - the section entitled ``GNU Free Documentation License''. - - If you have Invariant Sections, Front-Cover Texts and Back-Cover -Texts, replace the "with...Texts." line with this: - - with the Invariant Sections being LIST THEIR - TITLES, with the Front-Cover Texts being LIST, and - with the Back-Cover Texts being LIST. - - If you have Invariant Sections without Cover Texts, or some other -combination of the three, merge those two alternatives to suit the -situation. - - If your document contains nontrivial examples of program code, we -recommend releasing these examples in parallel under your choice of free -software license, such as the GNU General Public License, to permit -their use in free software. + fprintf(stderr, "chisq/dof = %g\n", chisq / dof); - -File: gsl-ref.info, Node: Function Index, Next: Variable Index, Prev: GNU Free Documentation License, Up: Top + fprintf (stderr, "A = %.5f +/- %.5f\n", FIT(0), c*ERR(0)); + fprintf (stderr, "lambda = %.5f +/- %.5f\n", FIT(1), c*ERR(1)); + fprintf (stderr, "b = %.5f +/- %.5f\n", FIT(2), c*ERR(2)); + } -Function Index -************** + fprintf (stderr, "status = %s\n", gsl_strerror (status)); -[index] -* Menu: + gsl_multifit_nlinear_free (w); + gsl_matrix_free (covar); + gsl_rng_free (r); -* cblas_caxpy: Level 1 CBLAS Functions. - (line 90) -* cblas_ccopy: Level 1 CBLAS Functions. - (line 87) -* cblas_cdotc_sub: Level 1 CBLAS Functions. - (line 21) -* cblas_cdotu_sub: Level 1 CBLAS Functions. - (line 18) -* cblas_cgbmv: Level 2 CBLAS Functions. - (line 93) -* cblas_cgemm: Level 3 CBLAS Functions. - (line 76) -* cblas_cgemv: Level 2 CBLAS Functions. - (line 88) -* cblas_cgerc: Level 2 CBLAS Functions. - (line 264) -* cblas_cgeru: Level 2 CBLAS Functions. - (line 260) -* cblas_chbmv: Level 2 CBLAS Functions. - (line 250) -* cblas_chemm: Level 3 CBLAS Functions. - (line 146) -* cblas_chemv: Level 2 CBLAS Functions. - (line 245) -* cblas_cher: Level 2 CBLAS Functions. - (line 268) -* cblas_cher2: Level 2 CBLAS Functions. - (line 276) -* cblas_cher2k: Level 3 CBLAS Functions. - (line 157) -* cblas_cherk: Level 3 CBLAS Functions. - (line 152) -* cblas_chpmv: Level 2 CBLAS Functions. - (line 255) -* cblas_chpr: Level 2 CBLAS Functions. - (line 272) -* cblas_chpr2: Level 2 CBLAS Functions. - (line 281) -* cblas_cscal: Level 1 CBLAS Functions. - (line 132) -* cblas_csscal: Level 1 CBLAS Functions. - (line 138) -* cblas_cswap: Level 1 CBLAS Functions. - (line 84) -* cblas_csymm: Level 3 CBLAS Functions. - (line 82) -* cblas_csyr2k: Level 3 CBLAS Functions. - (line 93) -* cblas_csyrk: Level 3 CBLAS Functions. - (line 88) -* cblas_ctbmv: Level 2 CBLAS Functions. - (line 104) -* cblas_ctbsv: Level 2 CBLAS Functions. - (line 119) -* cblas_ctpmv: Level 2 CBLAS Functions. - (line 109) -* cblas_ctpsv: Level 2 CBLAS Functions. - (line 124) -* cblas_ctrmm: Level 3 CBLAS Functions. - (line 99) -* cblas_ctrmv: Level 2 CBLAS Functions. - (line 99) -* cblas_ctrsm: Level 3 CBLAS Functions. - (line 105) -* cblas_ctrsv: Level 2 CBLAS Functions. - (line 114) -* cblas_dasum: Level 1 CBLAS Functions. - (line 39) -* cblas_daxpy: Level 1 CBLAS Functions. - (line 81) -* cblas_dcopy: Level 1 CBLAS Functions. - (line 78) -* cblas_ddot: Level 1 CBLAS Functions. - (line 15) -* cblas_dgbmv: Level 2 CBLAS Functions. - (line 52) -* cblas_dgemm: Level 3 CBLAS Functions. - (line 41) -* cblas_dgemv: Level 2 CBLAS Functions. - (line 47) -* cblas_dger: Level 2 CBLAS Functions. - (line 222) -* cblas_dnrm2: Level 1 CBLAS Functions. - (line 36) -* cblas_drot: Level 1 CBLAS Functions. - (line 120) -* cblas_drotg: Level 1 CBLAS Functions. - (line 114) -* cblas_drotm: Level 1 CBLAS Functions. - (line 123) -* cblas_drotmg: Level 1 CBLAS Functions. - (line 117) -* cblas_dsbmv: Level 2 CBLAS Functions. - (line 212) -* cblas_dscal: Level 1 CBLAS Functions. - (line 129) -* cblas_dsdot: Level 1 CBLAS Functions. - (line 9) -* cblas_dspmv: Level 2 CBLAS Functions. - (line 217) -* cblas_dspr: Level 2 CBLAS Functions. - (line 231) -* cblas_dspr2: Level 2 CBLAS Functions. - (line 240) -* cblas_dswap: Level 1 CBLAS Functions. - (line 75) -* cblas_dsymm: Level 3 CBLAS Functions. - (line 47) -* cblas_dsymv: Level 2 CBLAS Functions. - (line 207) -* cblas_dsyr: Level 2 CBLAS Functions. - (line 227) -* cblas_dsyr2: Level 2 CBLAS Functions. - (line 235) -* cblas_dsyr2k: Level 3 CBLAS Functions. - (line 58) -* cblas_dsyrk: Level 3 CBLAS Functions. - (line 53) -* cblas_dtbmv: Level 2 CBLAS Functions. - (line 63) -* cblas_dtbsv: Level 2 CBLAS Functions. - (line 78) -* cblas_dtpmv: Level 2 CBLAS Functions. - (line 68) -* cblas_dtpsv: Level 2 CBLAS Functions. - (line 83) -* cblas_dtrmm: Level 3 CBLAS Functions. - (line 64) -* cblas_dtrmv: Level 2 CBLAS Functions. - (line 58) -* cblas_dtrsm: Level 3 CBLAS Functions. - (line 70) -* cblas_dtrsv: Level 2 CBLAS Functions. - (line 73) -* cblas_dzasum: Level 1 CBLAS Functions. - (line 51) -* cblas_dznrm2: Level 1 CBLAS Functions. - (line 48) -* cblas_icamax: Level 1 CBLAS Functions. - (line 60) -* cblas_idamax: Level 1 CBLAS Functions. - (line 57) -* cblas_isamax: Level 1 CBLAS Functions. - (line 54) -* cblas_izamax: Level 1 CBLAS Functions. - (line 63) -* cblas_sasum: Level 1 CBLAS Functions. - (line 33) -* cblas_saxpy: Level 1 CBLAS Functions. - (line 72) -* cblas_scasum: Level 1 CBLAS Functions. - (line 45) -* cblas_scnrm2: Level 1 CBLAS Functions. - (line 42) -* cblas_scopy: Level 1 CBLAS Functions. - (line 69) -* cblas_sdot: Level 1 CBLAS Functions. - (line 12) -* cblas_sdsdot: Level 1 CBLAS Functions. - (line 6) -* cblas_sgbmv: Level 2 CBLAS Functions. - (line 11) -* cblas_sgemm: Level 3 CBLAS Functions. - (line 6) -* cblas_sgemv: Level 2 CBLAS Functions. - (line 6) -* cblas_sger: Level 2 CBLAS Functions. - (line 185) -* cblas_snrm2: Level 1 CBLAS Functions. - (line 30) -* cblas_srot: Level 1 CBLAS Functions. - (line 108) -* cblas_srotg: Level 1 CBLAS Functions. - (line 102) -* cblas_srotm: Level 1 CBLAS Functions. - (line 111) -* cblas_srotmg: Level 1 CBLAS Functions. - (line 105) -* cblas_ssbmv: Level 2 CBLAS Functions. - (line 175) -* cblas_sscal: Level 1 CBLAS Functions. - (line 126) -* cblas_sspmv: Level 2 CBLAS Functions. - (line 180) -* cblas_sspr: Level 2 CBLAS Functions. - (line 194) -* cblas_sspr2: Level 2 CBLAS Functions. - (line 203) -* cblas_sswap: Level 1 CBLAS Functions. - (line 66) -* cblas_ssymm: Level 3 CBLAS Functions. - (line 12) -* cblas_ssymv: Level 2 CBLAS Functions. - (line 170) -* cblas_ssyr: Level 2 CBLAS Functions. - (line 190) -* cblas_ssyr2: Level 2 CBLAS Functions. - (line 198) -* cblas_ssyr2k: Level 3 CBLAS Functions. - (line 23) -* cblas_ssyrk: Level 3 CBLAS Functions. - (line 18) -* cblas_stbmv: Level 2 CBLAS Functions. - (line 22) -* cblas_stbsv: Level 2 CBLAS Functions. - (line 37) -* cblas_stpmv: Level 2 CBLAS Functions. - (line 27) -* cblas_stpsv: Level 2 CBLAS Functions. - (line 42) -* cblas_strmm: Level 3 CBLAS Functions. - (line 29) -* cblas_strmv: Level 2 CBLAS Functions. - (line 17) -* cblas_strsm: Level 3 CBLAS Functions. - (line 35) -* cblas_strsv: Level 2 CBLAS Functions. - (line 32) -* cblas_xerbla: Level 3 CBLAS Functions. - (line 180) -* cblas_zaxpy: Level 1 CBLAS Functions. - (line 99) -* cblas_zcopy: Level 1 CBLAS Functions. - (line 96) -* cblas_zdotc_sub: Level 1 CBLAS Functions. - (line 27) -* cblas_zdotu_sub: Level 1 CBLAS Functions. - (line 24) -* cblas_zdscal: Level 1 CBLAS Functions. - (line 141) -* cblas_zgbmv: Level 2 CBLAS Functions. - (line 134) -* cblas_zgemm: Level 3 CBLAS Functions. - (line 111) -* cblas_zgemv: Level 2 CBLAS Functions. - (line 129) -* cblas_zgerc: Level 2 CBLAS Functions. - (line 304) -* cblas_zgeru: Level 2 CBLAS Functions. - (line 300) -* cblas_zhbmv: Level 2 CBLAS Functions. - (line 290) -* cblas_zhemm: Level 3 CBLAS Functions. - (line 163) -* cblas_zhemv: Level 2 CBLAS Functions. - (line 285) -* cblas_zher: Level 2 CBLAS Functions. - (line 308) -* cblas_zher2: Level 2 CBLAS Functions. - (line 316) -* cblas_zher2k: Level 3 CBLAS Functions. - (line 174) -* cblas_zherk: Level 3 CBLAS Functions. - (line 169) -* cblas_zhpmv: Level 2 CBLAS Functions. - (line 295) -* cblas_zhpr: Level 2 CBLAS Functions. - (line 312) -* cblas_zhpr2: Level 2 CBLAS Functions. - (line 321) -* cblas_zscal: Level 1 CBLAS Functions. - (line 135) -* cblas_zswap: Level 1 CBLAS Functions. - (line 93) -* cblas_zsymm: Level 3 CBLAS Functions. - (line 117) -* cblas_zsyr2k: Level 3 CBLAS Functions. - (line 128) -* cblas_zsyrk: Level 3 CBLAS Functions. - (line 123) -* cblas_ztbmv: Level 2 CBLAS Functions. - (line 145) -* cblas_ztbsv: Level 2 CBLAS Functions. - (line 160) -* cblas_ztpmv: Level 2 CBLAS Functions. - (line 150) -* cblas_ztpsv: Level 2 CBLAS Functions. - (line 165) -* cblas_ztrmm: Level 3 CBLAS Functions. - (line 134) -* cblas_ztrmv: Level 2 CBLAS Functions. - (line 140) -* cblas_ztrsm: Level 3 CBLAS Functions. - (line 140) -* cblas_ztrsv: Level 2 CBLAS Functions. - (line 155) -* gsl_acosh: Elementary Functions. - (line 32) -* gsl_asinh: Elementary Functions. - (line 36) -* gsl_atanh: Elementary Functions. - (line 40) -* gsl_blas_caxpy: Level 1 GSL BLAS Interface. - (line 92) -* gsl_blas_ccopy: Level 1 GSL BLAS Interface. - (line 81) -* gsl_blas_cdotc: Level 1 GSL BLAS Interface. - (line 27) -* gsl_blas_cdotu: Level 1 GSL BLAS Interface. - (line 20) -* gsl_blas_cgemm: Level 3 GSL BLAS Interface. - (line 13) -* gsl_blas_cgemv: Level 2 GSL BLAS Interface. - (line 12) -* gsl_blas_cgerc: Level 2 GSL BLAS Interface. - (line 106) -* gsl_blas_cgeru: Level 2 GSL BLAS Interface. - (line 97) -* gsl_blas_chemm: Level 3 GSL BLAS Interface. - (line 47) -* gsl_blas_chemv: Level 2 GSL BLAS Interface. - (line 78) -* gsl_blas_cher: Level 2 GSL BLAS Interface. - (line 126) -* gsl_blas_cher2: Level 2 GSL BLAS Interface. - (line 150) -* gsl_blas_cher2k: Level 3 GSL BLAS Interface. - (line 168) -* gsl_blas_cherk: Level 3 GSL BLAS Interface. - (line 130) -* gsl_blas_cscal: Level 1 GSL BLAS Interface. - (line 101) -* gsl_blas_csscal: Level 1 GSL BLAS Interface. - (line 105) -* gsl_blas_cswap: Level 1 GSL BLAS Interface. - (line 72) -* gsl_blas_csymm: Level 3 GSL BLAS Interface. - (line 32) -* gsl_blas_csyr2k: Level 3 GSL BLAS Interface. - (line 151) -* gsl_blas_csyrk: Level 3 GSL BLAS Interface. - (line 115) -* gsl_blas_ctrmm: Level 3 GSL BLAS Interface. - (line 69) -* gsl_blas_ctrmv: Level 2 GSL BLAS Interface. - (line 30) -* gsl_blas_ctrsm: Level 3 GSL BLAS Interface. - (line 92) -* gsl_blas_ctrsv: Level 2 GSL BLAS Interface. - (line 51) -* gsl_blas_dasum: Level 1 GSL BLAS Interface. - (line 46) -* gsl_blas_daxpy: Level 1 GSL BLAS Interface. - (line 90) -* gsl_blas_dcopy: Level 1 GSL BLAS Interface. - (line 80) -* gsl_blas_ddot: Level 1 GSL BLAS Interface. - (line 15) -* gsl_blas_dgemm: Level 3 GSL BLAS Interface. - (line 10) -* gsl_blas_dgemv: Level 2 GSL BLAS Interface. - (line 9) -* gsl_blas_dger: Level 2 GSL BLAS Interface. - (line 95) -* gsl_blas_dnrm2: Level 1 GSL BLAS Interface. - (line 35) -* gsl_blas_drot: Level 1 GSL BLAS Interface. - (line 126) -* gsl_blas_drotg: Level 1 GSL BLAS Interface. - (line 114) -* gsl_blas_drotm: Level 1 GSL BLAS Interface. - (line 141) -* gsl_blas_drotmg: Level 1 GSL BLAS Interface. - (line 133) -* gsl_blas_dscal: Level 1 GSL BLAS Interface. - (line 100) -* gsl_blas_dsdot: Level 1 GSL BLAS Interface. - (line 13) -* gsl_blas_dswap: Level 1 GSL BLAS Interface. - (line 71) -* gsl_blas_dsymm: Level 3 GSL BLAS Interface. - (line 29) -* gsl_blas_dsymv: Level 2 GSL BLAS Interface. - (line 68) -* gsl_blas_dsyr: Level 2 GSL BLAS Interface. - (line 117) -* gsl_blas_dsyr2: Level 2 GSL BLAS Interface. - (line 141) -* gsl_blas_dsyr2k: Level 3 GSL BLAS Interface. - (line 148) -* gsl_blas_dsyrk: Level 3 GSL BLAS Interface. - (line 112) -* gsl_blas_dtrmm: Level 3 GSL BLAS Interface. - (line 66) -* gsl_blas_dtrmv: Level 2 GSL BLAS Interface. - (line 27) -* gsl_blas_dtrsm: Level 3 GSL BLAS Interface. - (line 89) -* gsl_blas_dtrsv: Level 2 GSL BLAS Interface. - (line 48) -* gsl_blas_dzasum: Level 1 GSL BLAS Interface. - (line 51) -* gsl_blas_dznrm2: Level 1 GSL BLAS Interface. - (line 40) -* gsl_blas_icamax: Level 1 GSL BLAS Interface. - (line 58) -* gsl_blas_idamax: Level 1 GSL BLAS Interface. - (line 57) -* gsl_blas_isamax: Level 1 GSL BLAS Interface. - (line 56) -* gsl_blas_izamax: Level 1 GSL BLAS Interface. - (line 60) -* gsl_blas_sasum: Level 1 GSL BLAS Interface. - (line 45) -* gsl_blas_saxpy: Level 1 GSL BLAS Interface. - (line 88) -* gsl_blas_scasum: Level 1 GSL BLAS Interface. - (line 50) -* gsl_blas_scnrm2: Level 1 GSL BLAS Interface. - (line 39) -* gsl_blas_scopy: Level 1 GSL BLAS Interface. - (line 78) -* gsl_blas_sdot: Level 1 GSL BLAS Interface. - (line 11) -* gsl_blas_sdsdot: Level 1 GSL BLAS Interface. - (line 6) -* gsl_blas_sgemm: Level 3 GSL BLAS Interface. - (line 6) -* gsl_blas_sgemv: Level 2 GSL BLAS Interface. - (line 6) -* gsl_blas_sger: Level 2 GSL BLAS Interface. - (line 93) -* gsl_blas_snrm2: Level 1 GSL BLAS Interface. - (line 34) -* gsl_blas_srot: Level 1 GSL BLAS Interface. - (line 124) -* gsl_blas_srotg: Level 1 GSL BLAS Interface. - (line 112) -* gsl_blas_srotm: Level 1 GSL BLAS Interface. - (line 139) -* gsl_blas_srotmg: Level 1 GSL BLAS Interface. - (line 131) -* gsl_blas_sscal: Level 1 GSL BLAS Interface. - (line 99) -* gsl_blas_sswap: Level 1 GSL BLAS Interface. - (line 69) -* gsl_blas_ssymm: Level 3 GSL BLAS Interface. - (line 26) -* gsl_blas_ssymv: Level 2 GSL BLAS Interface. - (line 65) -* gsl_blas_ssyr: Level 2 GSL BLAS Interface. - (line 115) -* gsl_blas_ssyr2: Level 2 GSL BLAS Interface. - (line 138) -* gsl_blas_ssyr2k: Level 3 GSL BLAS Interface. - (line 145) -* gsl_blas_ssyrk: Level 3 GSL BLAS Interface. - (line 109) -* gsl_blas_strmm: Level 3 GSL BLAS Interface. - (line 63) -* gsl_blas_strmv: Level 2 GSL BLAS Interface. - (line 24) -* gsl_blas_strsm: Level 3 GSL BLAS Interface. - (line 86) -* gsl_blas_strsv: Level 2 GSL BLAS Interface. - (line 45) -* gsl_blas_zaxpy: Level 1 GSL BLAS Interface. - (line 94) -* gsl_blas_zcopy: Level 1 GSL BLAS Interface. - (line 83) -* gsl_blas_zdotc: Level 1 GSL BLAS Interface. - (line 29) -* gsl_blas_zdotu: Level 1 GSL BLAS Interface. - (line 22) -* gsl_blas_zdscal: Level 1 GSL BLAS Interface. - (line 107) -* gsl_blas_zgemm: Level 3 GSL BLAS Interface. - (line 17) -* gsl_blas_zgemv: Level 2 GSL BLAS Interface. - (line 16) -* gsl_blas_zgerc: Level 2 GSL BLAS Interface. - (line 109) -* gsl_blas_zgeru: Level 2 GSL BLAS Interface. - (line 100) -* gsl_blas_zhemm: Level 3 GSL BLAS Interface. - (line 51) -* gsl_blas_zhemv: Level 2 GSL BLAS Interface. - (line 82) -* gsl_blas_zher: Level 2 GSL BLAS Interface. - (line 128) -* gsl_blas_zher2: Level 2 GSL BLAS Interface. - (line 154) -* gsl_blas_zher2k: Level 3 GSL BLAS Interface. - (line 172) -* gsl_blas_zherk: Level 3 GSL BLAS Interface. - (line 133) -* gsl_blas_zscal: Level 1 GSL BLAS Interface. - (line 103) -* gsl_blas_zswap: Level 1 GSL BLAS Interface. - (line 74) -* gsl_blas_zsymm: Level 3 GSL BLAS Interface. - (line 36) -* gsl_blas_zsyr2k: Level 3 GSL BLAS Interface. - (line 155) -* gsl_blas_zsyrk: Level 3 GSL BLAS Interface. - (line 119) -* gsl_blas_ztrmm: Level 3 GSL BLAS Interface. - (line 73) -* gsl_blas_ztrmv: Level 2 GSL BLAS Interface. - (line 33) -* gsl_blas_ztrsm: Level 3 GSL BLAS Interface. - (line 96) -* gsl_blas_ztrsv: Level 2 GSL BLAS Interface. - (line 54) -* gsl_block_alloc: Block allocation. (line 14) -* gsl_block_calloc: Block allocation. (line 24) -* gsl_block_fprintf: Reading and writing blocks. - (line 25) -* gsl_block_fread: Reading and writing blocks. - (line 16) -* gsl_block_free: Block allocation. (line 28) -* gsl_block_fscanf: Reading and writing blocks. - (line 33) -* gsl_block_fwrite: Reading and writing blocks. - (line 9) -* gsl_bspline_alloc: Initializing the B-splines solver. - (line 10) -* gsl_bspline_deriv_alloc: Initializing the B-splines solver. - (line 20) -* gsl_bspline_deriv_eval: Evaluation of B-spline basis function derivatives. - (line 6) -* gsl_bspline_deriv_eval_nonzero: Evaluation of B-spline basis function derivatives. - (line 20) -* gsl_bspline_deriv_free: Initializing the B-splines solver. - (line 26) -* gsl_bspline_eval: Evaluation of B-spline basis functions. - (line 6) -* gsl_bspline_eval_nonzero: Evaluation of B-spline basis functions. - (line 16) -* gsl_bspline_free: Initializing the B-splines solver. - (line 17) -* gsl_bspline_greville_abscissa: Working with the Greville abscissae. - (line 14) -* gsl_bspline_knots: Constructing the knots vector. - (line 6) -* gsl_bspline_knots_uniform: Constructing the knots vector. - (line 11) -* gsl_bspline_ncoeffs: Evaluation of B-spline basis functions. - (line 27) -* gsl_cdf_beta_P: The Beta Distribution. - (line 21) -* gsl_cdf_beta_Pinv: The Beta Distribution. - (line 23) -* gsl_cdf_beta_Q: The Beta Distribution. - (line 22) -* gsl_cdf_beta_Qinv: The Beta Distribution. - (line 24) -* gsl_cdf_binomial_P: The Binomial Distribution. - (line 24) -* gsl_cdf_binomial_Q: The Binomial Distribution. - (line 26) -* gsl_cdf_cauchy_P: The Cauchy Distribution. - (line 22) -* gsl_cdf_cauchy_Pinv: The Cauchy Distribution. - (line 24) -* gsl_cdf_cauchy_Q: The Cauchy Distribution. - (line 23) -* gsl_cdf_cauchy_Qinv: The Cauchy Distribution. - (line 25) -* gsl_cdf_chisq_P: The Chi-squared Distribution. - (line 29) -* gsl_cdf_chisq_Pinv: The Chi-squared Distribution. - (line 31) -* gsl_cdf_chisq_Q: The Chi-squared Distribution. - (line 30) -* gsl_cdf_chisq_Qinv: The Chi-squared Distribution. - (line 32) -* gsl_cdf_exponential_P: The Exponential Distribution. - (line 20) -* gsl_cdf_exponential_Pinv: The Exponential Distribution. - (line 22) -* gsl_cdf_exponential_Q: The Exponential Distribution. - (line 21) -* gsl_cdf_exponential_Qinv: The Exponential Distribution. - (line 23) -* gsl_cdf_exppow_P: The Exponential Power Distribution. - (line 24) -* gsl_cdf_exppow_Q: The Exponential Power Distribution. - (line 25) -* gsl_cdf_fdist_P: The F-distribution. (line 33) -* gsl_cdf_fdist_Pinv: The F-distribution. (line 35) -* gsl_cdf_fdist_Q: The F-distribution. (line 34) -* gsl_cdf_fdist_Qinv: The F-distribution. (line 37) -* gsl_cdf_flat_P: The Flat (Uniform) Distribution. - (line 20) -* gsl_cdf_flat_Pinv: The Flat (Uniform) Distribution. - (line 22) -* gsl_cdf_flat_Q: The Flat (Uniform) Distribution. - (line 21) -* gsl_cdf_flat_Qinv: The Flat (Uniform) Distribution. - (line 23) -* gsl_cdf_gamma_P: The Gamma Distribution. - (line 33) -* gsl_cdf_gamma_Pinv: The Gamma Distribution. - (line 35) -* gsl_cdf_gamma_Q: The Gamma Distribution. - (line 34) -* gsl_cdf_gamma_Qinv: The Gamma Distribution. - (line 36) -* gsl_cdf_gaussian_P: The Gaussian Distribution. - (line 41) -* gsl_cdf_gaussian_Pinv: The Gaussian Distribution. - (line 43) -* gsl_cdf_gaussian_Q: The Gaussian Distribution. - (line 42) -* gsl_cdf_gaussian_Qinv: The Gaussian Distribution. - (line 44) -* gsl_cdf_geometric_P: The Geometric Distribution. - (line 25) -* gsl_cdf_geometric_Q: The Geometric Distribution. - (line 26) -* gsl_cdf_gumbel1_P: The Type-1 Gumbel Distribution. - (line 21) -* gsl_cdf_gumbel1_Pinv: The Type-1 Gumbel Distribution. - (line 23) -* gsl_cdf_gumbel1_Q: The Type-1 Gumbel Distribution. - (line 22) -* gsl_cdf_gumbel1_Qinv: The Type-1 Gumbel Distribution. - (line 24) -* gsl_cdf_gumbel2_P: The Type-2 Gumbel Distribution. - (line 21) -* gsl_cdf_gumbel2_Pinv: The Type-2 Gumbel Distribution. - (line 23) -* gsl_cdf_gumbel2_Q: The Type-2 Gumbel Distribution. - (line 22) -* gsl_cdf_gumbel2_Qinv: The Type-2 Gumbel Distribution. - (line 24) -* gsl_cdf_hypergeometric_P: The Hypergeometric Distribution. - (line 29) -* gsl_cdf_hypergeometric_Q: The Hypergeometric Distribution. - (line 31) -* gsl_cdf_laplace_P: The Laplace Distribution. - (line 19) -* gsl_cdf_laplace_Pinv: The Laplace Distribution. - (line 21) -* gsl_cdf_laplace_Q: The Laplace Distribution. - (line 20) -* gsl_cdf_laplace_Qinv: The Laplace Distribution. - (line 22) -* gsl_cdf_logistic_P: The Logistic Distribution. - (line 20) -* gsl_cdf_logistic_Pinv: The Logistic Distribution. - (line 22) -* gsl_cdf_logistic_Q: The Logistic Distribution. - (line 21) -* gsl_cdf_logistic_Qinv: The Logistic Distribution. - (line 23) -* gsl_cdf_lognormal_P: The Lognormal Distribution. - (line 22) -* gsl_cdf_lognormal_Pinv: The Lognormal Distribution. - (line 26) -* gsl_cdf_lognormal_Q: The Lognormal Distribution. - (line 24) -* gsl_cdf_lognormal_Qinv: The Lognormal Distribution. - (line 28) -* gsl_cdf_negative_binomial_P: The Negative Binomial Distribution. - (line 24) -* gsl_cdf_negative_binomial_Q: The Negative Binomial Distribution. - (line 26) -* gsl_cdf_pareto_P: The Pareto Distribution. - (line 21) -* gsl_cdf_pareto_Pinv: The Pareto Distribution. - (line 23) -* gsl_cdf_pareto_Q: The Pareto Distribution. - (line 22) -* gsl_cdf_pareto_Qinv: The Pareto Distribution. - (line 24) -* gsl_cdf_pascal_P: The Pascal Distribution. - (line 23) -* gsl_cdf_pascal_Q: The Pascal Distribution. - (line 25) -* gsl_cdf_poisson_P: The Poisson Distribution. - (line 21) -* gsl_cdf_poisson_Q: The Poisson Distribution. - (line 22) -* gsl_cdf_rayleigh_P: The Rayleigh Distribution. - (line 20) -* gsl_cdf_rayleigh_Pinv: The Rayleigh Distribution. - (line 22) -* gsl_cdf_rayleigh_Q: The Rayleigh Distribution. - (line 21) -* gsl_cdf_rayleigh_Qinv: The Rayleigh Distribution. - (line 23) -* gsl_cdf_tdist_P: The t-distribution. (line 29) -* gsl_cdf_tdist_Pinv: The t-distribution. (line 31) -* gsl_cdf_tdist_Q: The t-distribution. (line 30) -* gsl_cdf_tdist_Qinv: The t-distribution. (line 32) -* gsl_cdf_ugaussian_P: The Gaussian Distribution. - (line 49) -* gsl_cdf_ugaussian_Pinv: The Gaussian Distribution. - (line 51) -* gsl_cdf_ugaussian_Q: The Gaussian Distribution. - (line 50) -* gsl_cdf_ugaussian_Qinv: The Gaussian Distribution. - (line 52) -* gsl_cdf_weibull_P: The Weibull Distribution. - (line 21) -* gsl_cdf_weibull_Pinv: The Weibull Distribution. - (line 23) -* gsl_cdf_weibull_Q: The Weibull Distribution. - (line 22) -* gsl_cdf_weibull_Qinv: The Weibull Distribution. - (line 24) -* gsl_cheb_alloc: Creation and Calculation of Chebyshev Series. - (line 6) -* gsl_cheb_calc_deriv: Derivatives and Integrals. - (line 12) -* gsl_cheb_calc_integ: Derivatives and Integrals. - (line 18) -* gsl_cheb_coeffs: Auxiliary Functions for Chebyshev Series. - (line 13) -* gsl_cheb_eval: Chebyshev Series Evaluation. - (line 6) -* gsl_cheb_eval_err: Chebyshev Series Evaluation. - (line 10) -* gsl_cheb_eval_n: Chebyshev Series Evaluation. - (line 17) -* gsl_cheb_eval_n_err: Chebyshev Series Evaluation. - (line 22) -* gsl_cheb_free: Creation and Calculation of Chebyshev Series. - (line 10) -* gsl_cheb_init: Creation and Calculation of Chebyshev Series. - (line 13) -* gsl_cheb_order: Auxiliary Functions for Chebyshev Series. - (line 9) -* gsl_cheb_size: Auxiliary Functions for Chebyshev Series. - (line 12) -* gsl_combination_alloc: Combination allocation. - (line 6) -* gsl_combination_calloc: Combination allocation. - (line 15) -* gsl_combination_data: Combination properties. - (line 13) -* gsl_combination_fprintf: Reading and writing combinations. - (line 27) -* gsl_combination_fread: Reading and writing combinations. - (line 17) -* gsl_combination_free: Combination allocation. - (line 30) -* gsl_combination_fscanf: Reading and writing combinations. - (line 36) -* gsl_combination_fwrite: Reading and writing combinations. - (line 9) -* gsl_combination_get: Accessing combination elements. - (line 9) -* gsl_combination_init_first: Combination allocation. - (line 22) -* gsl_combination_init_last: Combination allocation. - (line 26) -* gsl_combination_k: Combination properties. - (line 9) -* gsl_combination_memcpy: Combination allocation. - (line 33) -* gsl_combination_n: Combination properties. - (line 6) -* gsl_combination_next: Combination functions. - (line 6) -* gsl_combination_prev: Combination functions. - (line 14) -* gsl_combination_valid: Combination properties. - (line 17) -* gsl_complex_abs: Properties of complex numbers. - (line 10) -* gsl_complex_abs2: Properties of complex numbers. - (line 13) -* gsl_complex_add: Complex arithmetic operators. - (line 6) -* gsl_complex_add_imag: Complex arithmetic operators. - (line 38) -* gsl_complex_add_real: Complex arithmetic operators. - (line 22) -* gsl_complex_arccos: Inverse Complex Trigonometric Functions. - (line 19) -* gsl_complex_arccosh: Inverse Complex Hyperbolic Functions. - (line 11) -* gsl_complex_arccosh_real: Inverse Complex Hyperbolic Functions. - (line 18) -* gsl_complex_arccos_real: Inverse Complex Trigonometric Functions. - (line 24) -* gsl_complex_arccot: Inverse Complex Trigonometric Functions. - (line 52) -* gsl_complex_arccoth: Inverse Complex Hyperbolic Functions. - (line 39) -* gsl_complex_arccsc: Inverse Complex Trigonometric Functions. - (line 44) -* gsl_complex_arccsch: Inverse Complex Hyperbolic Functions. - (line 35) -* gsl_complex_arccsc_real: Inverse Complex Trigonometric Functions. - (line 48) -* gsl_complex_arcsec: Inverse Complex Trigonometric Functions. - (line 36) -* gsl_complex_arcsech: Inverse Complex Hyperbolic Functions. - (line 31) -* gsl_complex_arcsec_real: Inverse Complex Trigonometric Functions. - (line 40) -* gsl_complex_arcsin: Inverse Complex Trigonometric Functions. - (line 6) -* gsl_complex_arcsinh: Inverse Complex Hyperbolic Functions. - (line 6) -* gsl_complex_arcsin_real: Inverse Complex Trigonometric Functions. - (line 11) -* gsl_complex_arctan: Inverse Complex Trigonometric Functions. - (line 31) -* gsl_complex_arctanh: Inverse Complex Hyperbolic Functions. - (line 22) -* gsl_complex_arctanh_real: Inverse Complex Hyperbolic Functions. - (line 27) -* gsl_complex_arg: Properties of complex numbers. - (line 6) -* gsl_complex_conjugate: Complex arithmetic operators. - (line 54) -* gsl_complex_cos: Complex Trigonometric Functions. - (line 10) -* gsl_complex_cosh: Complex Hyperbolic Functions. - (line 10) -* gsl_complex_cot: Complex Trigonometric Functions. - (line 26) -* gsl_complex_coth: Complex Hyperbolic Functions. - (line 26) -* gsl_complex_csc: Complex Trigonometric Functions. - (line 22) -* gsl_complex_csch: Complex Hyperbolic Functions. - (line 22) -* gsl_complex_div: Complex arithmetic operators. - (line 18) -* gsl_complex_div_imag: Complex arithmetic operators. - (line 50) -* gsl_complex_div_real: Complex arithmetic operators. - (line 34) -* gsl_complex_exp: Elementary Complex Functions. - (line 24) -* gsl_complex_inverse: Complex arithmetic operators. - (line 58) -* gsl_complex_log: Elementary Complex Functions. - (line 28) -* gsl_complex_log10: Elementary Complex Functions. - (line 33) -* gsl_complex_logabs: Properties of complex numbers. - (line 17) -* gsl_complex_log_b: Elementary Complex Functions. - (line 37) -* gsl_complex_mul: Complex arithmetic operators. - (line 14) -* gsl_complex_mul_imag: Complex arithmetic operators. - (line 46) -* gsl_complex_mul_real: Complex arithmetic operators. - (line 30) -* gsl_complex_negative: Complex arithmetic operators. - (line 62) -* gsl_complex_polar: Representation of complex numbers. - (line 29) -* gsl_complex_poly_complex_eval: Polynomial Evaluation. - (line 21) -* gsl_complex_pow: Elementary Complex Functions. - (line 15) -* gsl_complex_pow_real: Elementary Complex Functions. - (line 20) -* gsl_complex_rect: Representation of complex numbers. - (line 24) -* gsl_complex_sec: Complex Trigonometric Functions. - (line 18) -* gsl_complex_sech: Complex Hyperbolic Functions. - (line 18) -* gsl_complex_sin: Complex Trigonometric Functions. - (line 6) -* gsl_complex_sinh: Complex Hyperbolic Functions. - (line 6) -* gsl_complex_sqrt: Elementary Complex Functions. - (line 6) -* gsl_complex_sqrt_real: Elementary Complex Functions. - (line 11) -* gsl_complex_sub: Complex arithmetic operators. - (line 10) -* gsl_complex_sub_imag: Complex arithmetic operators. - (line 42) -* gsl_complex_sub_real: Complex arithmetic operators. - (line 26) -* gsl_complex_tan: Complex Trigonometric Functions. - (line 14) -* gsl_complex_tanh: Complex Hyperbolic Functions. - (line 14) -* gsl_deriv_backward: Numerical Differentiation functions. - (line 40) -* gsl_deriv_central: Numerical Differentiation functions. - (line 6) -* gsl_deriv_forward: Numerical Differentiation functions. - (line 22) -* gsl_dht_alloc: Discrete Hankel Transform Functions. - (line 6) -* gsl_dht_apply: Discrete Hankel Transform Functions. - (line 22) -* gsl_dht_free: Discrete Hankel Transform Functions. - (line 19) -* gsl_dht_init: Discrete Hankel Transform Functions. - (line 10) -* gsl_dht_k_sample: Discrete Hankel Transform Functions. - (line 36) -* gsl_dht_new: Discrete Hankel Transform Functions. - (line 14) -* gsl_dht_x_sample: Discrete Hankel Transform Functions. - (line 31) -* gsl_eigen_gen: Real Generalized Nonsymmetric Eigensystems. - (line 72) -* gsl_eigen_genherm: Complex Generalized Hermitian-Definite Eigensystems. - (line 27) -* gsl_eigen_genhermv: Complex Generalized Hermitian-Definite Eigensystems. - (line 45) -* gsl_eigen_genhermv_alloc: Complex Generalized Hermitian-Definite Eigensystems. - (line 35) -* gsl_eigen_genhermv_free: Complex Generalized Hermitian-Definite Eigensystems. - (line 41) -* gsl_eigen_genhermv_sort: Sorting Eigenvalues and Eigenvectors. - (line 45) -* gsl_eigen_genherm_alloc: Complex Generalized Hermitian-Definite Eigensystems. - (line 17) -* gsl_eigen_genherm_free: Complex Generalized Hermitian-Definite Eigensystems. - (line 23) -* gsl_eigen_gensymm: Real Generalized Symmetric-Definite Eigensystems. - (line 32) -* gsl_eigen_gensymmv: Real Generalized Symmetric-Definite Eigensystems. - (line 49) -* gsl_eigen_gensymmv_alloc: Real Generalized Symmetric-Definite Eigensystems. - (line 39) -* gsl_eigen_gensymmv_free: Real Generalized Symmetric-Definite Eigensystems. - (line 45) -* gsl_eigen_gensymmv_sort: Sorting Eigenvalues and Eigenvectors. - (line 38) -* gsl_eigen_gensymm_alloc: Real Generalized Symmetric-Definite Eigensystems. - (line 22) -* gsl_eigen_gensymm_free: Real Generalized Symmetric-Definite Eigensystems. - (line 28) -* gsl_eigen_genv: Real Generalized Nonsymmetric Eigensystems. - (line 105) -* gsl_eigen_genv_alloc: Real Generalized Nonsymmetric Eigensystems. - (line 96) -* gsl_eigen_genv_free: Real Generalized Nonsymmetric Eigensystems. - (line 102) -* gsl_eigen_genv_QZ: Real Generalized Nonsymmetric Eigensystems. - (line 120) -* gsl_eigen_genv_sort: Sorting Eigenvalues and Eigenvectors. - (line 52) -* gsl_eigen_gen_alloc: Real Generalized Nonsymmetric Eigensystems. - (line 41) -* gsl_eigen_gen_free: Real Generalized Nonsymmetric Eigensystems. - (line 47) -* gsl_eigen_gen_params: Real Generalized Nonsymmetric Eigensystems. - (line 50) -* gsl_eigen_gen_QZ: Real Generalized Nonsymmetric Eigensystems. - (line 89) -* gsl_eigen_herm: Complex Hermitian Matrices. - (line 18) -* gsl_eigen_hermv: Complex Hermitian Matrices. - (line 37) -* gsl_eigen_hermv_alloc: Complex Hermitian Matrices. - (line 28) -* gsl_eigen_hermv_free: Complex Hermitian Matrices. - (line 34) -* gsl_eigen_hermv_sort: Sorting Eigenvalues and Eigenvectors. - (line 22) -* gsl_eigen_herm_alloc: Complex Hermitian Matrices. - (line 9) -* gsl_eigen_herm_free: Complex Hermitian Matrices. - (line 15) -* gsl_eigen_nonsymm: Real Nonsymmetric Matrices. - (line 60) -* gsl_eigen_nonsymmv: Real Nonsymmetric Matrices. - (line 97) -* gsl_eigen_nonsymmv_alloc: Real Nonsymmetric Matrices. - (line 78) -* gsl_eigen_nonsymmv_free: Real Nonsymmetric Matrices. - (line 84) -* gsl_eigen_nonsymmv_params: Real Nonsymmetric Matrices. - (line 88) -* gsl_eigen_nonsymmv_sort: Sorting Eigenvalues and Eigenvectors. - (line 29) -* gsl_eigen_nonsymmv_Z: Real Nonsymmetric Matrices. - (line 111) -* gsl_eigen_nonsymm_alloc: Real Nonsymmetric Matrices. - (line 17) -* gsl_eigen_nonsymm_free: Real Nonsymmetric Matrices. - (line 23) -* gsl_eigen_nonsymm_params: Real Nonsymmetric Matrices. - (line 27) -* gsl_eigen_nonsymm_Z: Real Nonsymmetric Matrices. - (line 72) -* gsl_eigen_symm: Real Symmetric Matrices. - (line 21) -* gsl_eigen_symmv: Real Symmetric Matrices. - (line 39) -* gsl_eigen_symmv_alloc: Real Symmetric Matrices. - (line 30) -* gsl_eigen_symmv_free: Real Symmetric Matrices. - (line 36) -* gsl_eigen_symmv_sort: Sorting Eigenvalues and Eigenvectors. - (line 6) -* gsl_eigen_symm_alloc: Real Symmetric Matrices. - (line 12) -* gsl_eigen_symm_free: Real Symmetric Matrices. - (line 18) -* GSL_ERROR: Using GSL error reporting in your own functions. - (line 15) -* GSL_ERROR_VAL: Using GSL error reporting in your own functions. - (line 36) -* gsl_expm1: Elementary Functions. - (line 17) -* gsl_fcmp: Approximate Comparison of Floating Point Numbers. - (line 12) -* gsl_fft_complex_backward: Mixed-radix FFT routines for complex data. - (line 124) -* gsl_fft_complex_forward: Mixed-radix FFT routines for complex data. - (line 117) -* gsl_fft_complex_inverse: Mixed-radix FFT routines for complex data. - (line 127) -* gsl_fft_complex_radix2_backward: Radix-2 FFT routines for complex data. - (line 23) -* gsl_fft_complex_radix2_dif_backward: Radix-2 FFT routines for complex data. - (line 47) -* gsl_fft_complex_radix2_dif_forward: Radix-2 FFT routines for complex data. - (line 40) -* gsl_fft_complex_radix2_dif_inverse: Radix-2 FFT routines for complex data. - (line 50) -* gsl_fft_complex_radix2_dif_transform: Radix-2 FFT routines for complex data. - (line 43) -* gsl_fft_complex_radix2_forward: Radix-2 FFT routines for complex data. - (line 16) -* gsl_fft_complex_radix2_inverse: Radix-2 FFT routines for complex data. - (line 26) -* gsl_fft_complex_radix2_transform: Radix-2 FFT routines for complex data. - (line 19) -* gsl_fft_complex_transform: Mixed-radix FFT routines for complex data. - (line 120) -* gsl_fft_complex_wavetable_alloc: Mixed-radix FFT routines for complex data. - (line 44) -* gsl_fft_complex_wavetable_free: Mixed-radix FFT routines for complex data. - (line 63) -* gsl_fft_complex_workspace_alloc: Mixed-radix FFT routines for complex data. - (line 104) -* gsl_fft_complex_workspace_free: Mixed-radix FFT routines for complex data. - (line 109) -* gsl_fft_halfcomplex_radix2_backward: Radix-2 FFT routines for real data. - (line 58) -* gsl_fft_halfcomplex_radix2_inverse: Radix-2 FFT routines for real data. - (line 56) -* gsl_fft_halfcomplex_radix2_unpack: Radix-2 FFT routines for real data. - (line 66) -* gsl_fft_halfcomplex_transform: Mixed-radix FFT routines for real data. - (line 122) -* gsl_fft_halfcomplex_unpack: Mixed-radix FFT routines for real data. - (line 153) -* gsl_fft_halfcomplex_wavetable_alloc: Mixed-radix FFT routines for real data. - (line 74) -* gsl_fft_halfcomplex_wavetable_free: Mixed-radix FFT routines for real data. - (line 95) -* gsl_fft_real_radix2_transform: Radix-2 FFT routines for real data. - (line 13) -* gsl_fft_real_transform: Mixed-radix FFT routines for real data. - (line 119) -* gsl_fft_real_unpack: Mixed-radix FFT routines for real data. - (line 136) -* gsl_fft_real_wavetable_alloc: Mixed-radix FFT routines for real data. - (line 72) -* gsl_fft_real_wavetable_free: Mixed-radix FFT routines for real data. - (line 93) -* gsl_fft_real_workspace_alloc: Mixed-radix FFT routines for real data. - (line 104) -* gsl_fft_real_workspace_free: Mixed-radix FFT routines for real data. - (line 110) -* gsl_finite: Infinities and Not-a-number. - (line 25) -* gsl_fit_linear: Linear regression. (line 9) -* gsl_fit_linear_est: Linear regression. (line 42) -* gsl_fit_mul: Linear fitting without a constant term. - (line 10) -* gsl_fit_mul_est: Linear fitting without a constant term. - (line 36) -* gsl_fit_wlinear: Linear regression. (line 25) -* gsl_fit_wmul: Linear fitting without a constant term. - (line 21) -* gsl_frexp: Elementary Functions. - (line 48) -* gsl_heapsort: Sorting objects. (line 16) -* gsl_heapsort_index: Sorting objects. (line 58) -* gsl_histogram2d_accumulate: Updating and accessing 2D histogram elements. - (line 25) -* gsl_histogram2d_add: 2D Histogram Operations. - (line 11) -* gsl_histogram2d_alloc: 2D Histogram allocation. - (line 14) -* gsl_histogram2d_clone: Copying 2D Histograms. - (line 12) -* gsl_histogram2d_cov: 2D Histogram Statistics. - (line 52) -* gsl_histogram2d_div: 2D Histogram Operations. - (line 31) -* gsl_histogram2d_equal_bins_p: 2D Histogram Operations. - (line 6) -* gsl_histogram2d_find: Searching 2D histogram ranges. - (line 9) -* gsl_histogram2d_fprintf: Reading and writing 2D histograms. - (line 27) -* gsl_histogram2d_fread: Reading and writing 2D histograms. - (line 17) -* gsl_histogram2d_free: 2D Histogram allocation. - (line 37) -* gsl_histogram2d_fscanf: Reading and writing 2D histograms. - (line 64) -* gsl_histogram2d_fwrite: Reading and writing 2D histograms. - (line 9) -* gsl_histogram2d_get: Updating and accessing 2D histogram elements. - (line 31) -* gsl_histogram2d_get_xrange: Updating and accessing 2D histogram elements. - (line 38) -* gsl_histogram2d_get_yrange: Updating and accessing 2D histogram elements. - (line 40) -* gsl_histogram2d_increment: Updating and accessing 2D histogram elements. - (line 12) -* gsl_histogram2d_max_bin: 2D Histogram Statistics. - (line 10) -* gsl_histogram2d_max_val: 2D Histogram Statistics. - (line 6) -* gsl_histogram2d_memcpy: Copying 2D Histograms. - (line 6) -* gsl_histogram2d_min_bin: 2D Histogram Statistics. - (line 21) -* gsl_histogram2d_min_val: 2D Histogram Statistics. - (line 17) -* gsl_histogram2d_mul: 2D Histogram Operations. - (line 24) -* gsl_histogram2d_nx: Updating and accessing 2D histogram elements. - (line 55) -* gsl_histogram2d_ny: Updating and accessing 2D histogram elements. - (line 58) -* gsl_histogram2d_pdf_alloc: Resampling from 2D histograms. - (line 38) -* gsl_histogram2d_pdf_free: Resampling from 2D histograms. - (line 54) -* gsl_histogram2d_pdf_init: Resampling from 2D histograms. - (line 46) -* gsl_histogram2d_pdf_sample: Resampling from 2D histograms. - (line 58) -* gsl_histogram2d_reset: Updating and accessing 2D histogram elements. - (line 64) -* gsl_histogram2d_scale: 2D Histogram Operations. - (line 38) -* gsl_histogram2d_set_ranges: 2D Histogram allocation. - (line 24) -* gsl_histogram2d_set_ranges_uniform: 2D Histogram allocation. - (line 31) -* gsl_histogram2d_shift: 2D Histogram Operations. - (line 43) -* gsl_histogram2d_sub: 2D Histogram Operations. - (line 17) -* gsl_histogram2d_sum: 2D Histogram Statistics. - (line 58) -* gsl_histogram2d_xmax: Updating and accessing 2D histogram elements. - (line 53) -* gsl_histogram2d_xmean: 2D Histogram Statistics. - (line 28) -* gsl_histogram2d_xmin: Updating and accessing 2D histogram elements. - (line 54) -* gsl_histogram2d_xsigma: 2D Histogram Statistics. - (line 40) -* gsl_histogram2d_ymax: Updating and accessing 2D histogram elements. - (line 56) -* gsl_histogram2d_ymean: 2D Histogram Statistics. - (line 34) -* gsl_histogram2d_ymin: Updating and accessing 2D histogram elements. - (line 57) -* gsl_histogram2d_ysigma: 2D Histogram Statistics. - (line 46) -* gsl_histogram_accumulate: Updating and accessing histogram elements. - (line 25) -* gsl_histogram_add: Histogram Operations. - (line 11) -* gsl_histogram_alloc: Histogram allocation. - (line 14) -* gsl_histogram_bins: Updating and accessing histogram elements. - (line 53) -* gsl_histogram_clone: Copying Histograms. (line 12) -* gsl_histogram_div: Histogram Operations. - (line 30) -* gsl_histogram_equal_bins_p: Histogram Operations. - (line 6) -* gsl_histogram_find: Searching histogram ranges. - (line 9) -* gsl_histogram_fprintf: Reading and writing histograms. - (line 26) -* gsl_histogram_fread: Reading and writing histograms. - (line 17) -* gsl_histogram_free: Histogram allocation. - (line 60) -* gsl_histogram_fscanf: Reading and writing histograms. - (line 51) -* gsl_histogram_fwrite: Reading and writing histograms. - (line 9) -* gsl_histogram_get: Updating and accessing histogram elements. - (line 31) -* gsl_histogram_get_range: Updating and accessing histogram elements. - (line 38) -* gsl_histogram_increment: Updating and accessing histogram elements. - (line 11) -* gsl_histogram_max: Updating and accessing histogram elements. - (line 51) -* gsl_histogram_max_bin: Histogram Statistics. - (line 10) -* gsl_histogram_max_val: Histogram Statistics. - (line 6) -* gsl_histogram_mean: Histogram Statistics. - (line 24) -* gsl_histogram_memcpy: Copying Histograms. (line 6) -* gsl_histogram_min: Updating and accessing histogram elements. - (line 52) -* gsl_histogram_min_bin: Histogram Statistics. - (line 19) -* gsl_histogram_min_val: Histogram Statistics. - (line 15) -* gsl_histogram_mul: Histogram Operations. - (line 23) -* gsl_histogram_pdf_alloc: The histogram probability distribution struct. - (line 33) -* gsl_histogram_pdf_free: The histogram probability distribution struct. - (line 47) -* gsl_histogram_pdf_init: The histogram probability distribution struct. - (line 40) -* gsl_histogram_pdf_sample: The histogram probability distribution struct. - (line 51) -* gsl_histogram_reset: Updating and accessing histogram elements. - (line 59) -* gsl_histogram_scale: Histogram Operations. - (line 37) -* gsl_histogram_set_ranges: Histogram allocation. - (line 23) -* gsl_histogram_set_ranges_uniform: Histogram allocation. - (line 48) -* gsl_histogram_shift: Histogram Operations. - (line 41) -* gsl_histogram_sigma: Histogram Statistics. - (line 30) -* gsl_histogram_sub: Histogram Operations. - (line 17) -* gsl_histogram_sum: Histogram Statistics. - (line 37) -* gsl_hypot: Elementary Functions. - (line 22) -* gsl_hypot3: Elementary Functions. - (line 27) -* gsl_ieee_env_setup: Setting up your IEEE environment. - (line 23) -* gsl_ieee_fprintf_double: Representation of floating point numbers. - (line 55) -* gsl_ieee_fprintf_float: Representation of floating point numbers. - (line 53) -* gsl_ieee_printf_double: Representation of floating point numbers. - (line 82) -* gsl_ieee_printf_float: Representation of floating point numbers. - (line 81) -* GSL_IMAG: Representation of complex numbers. - (line 35) -* gsl_integration_cquad: CQUAD doubly-adaptive integration. - (line 33) -* gsl_integration_cquad_workspace_alloc: CQUAD doubly-adaptive integration. - (line 20) -* gsl_integration_cquad_workspace_free: CQUAD doubly-adaptive integration. - (line 29) -* gsl_integration_glfixed: Fixed order Gauss-Legendre integration. - (line 22) -* gsl_integration_glfixed_point: Fixed order Gauss-Legendre integration. - (line 27) -* gsl_integration_glfixed_table_alloc: Fixed order Gauss-Legendre integration. - (line 14) -* gsl_integration_glfixed_table_free: Fixed order Gauss-Legendre integration. - (line 35) -* gsl_integration_qag: QAG adaptive integration. - (line 27) -* gsl_integration_qagi: QAGI adaptive integration on infinite intervals. - (line 6) -* gsl_integration_qagil: QAGI adaptive integration on infinite intervals. - (line 37) -* gsl_integration_qagiu: QAGI adaptive integration on infinite intervals. - (line 22) -* gsl_integration_qagp: QAGP adaptive integration with known singular points. - (line 6) -* gsl_integration_qags: QAGS adaptive integration with singularities. - (line 15) -* gsl_integration_qawc: QAWC adaptive integration for Cauchy principal values. - (line 6) -* gsl_integration_qawf: QAWF adaptive integration for Fourier integrals. - (line 6) -* gsl_integration_qawo: QAWO adaptive integration for oscillatory functions. - (line 53) -* gsl_integration_qawo_table_alloc: QAWO adaptive integration for oscillatory functions. - (line 11) -* gsl_integration_qawo_table_free: QAWO adaptive integration for oscillatory functions. - (line 49) -* gsl_integration_qawo_table_set: QAWO adaptive integration for oscillatory functions. - (line 38) -* gsl_integration_qawo_table_set_length: QAWO adaptive integration for oscillatory functions. - (line 44) -* gsl_integration_qaws: QAWS adaptive integration for singular functions. - (line 48) -* gsl_integration_qaws_table_alloc: QAWS adaptive integration for singular functions. - (line 11) -* gsl_integration_qaws_table_free: QAWS adaptive integration for singular functions. - (line 43) -* gsl_integration_qaws_table_set: QAWS adaptive integration for singular functions. - (line 37) -* gsl_integration_qng: QNG non-adaptive Gauss-Kronrod integration. - (line 10) -* gsl_integration_workspace_alloc: QAG adaptive integration. - (line 15) -* gsl_integration_workspace_free: QAG adaptive integration. - (line 23) -* gsl_interp_accel_alloc: Index Look-up and Acceleration. - (line 19) -* gsl_interp_accel_find: Index Look-up and Acceleration. - (line 25) -* gsl_interp_accel_free: Index Look-up and Acceleration. - (line 39) -* gsl_interp_accel_reset: Index Look-up and Acceleration. - (line 34) -* gsl_interp_akima: Interpolation Types. (line 34) -* gsl_interp_akima_periodic: Interpolation Types. (line 38) -* gsl_interp_alloc: Interpolation Functions. - (line 9) -* gsl_interp_bsearch: Index Look-up and Acceleration. - (line 12) -* gsl_interp_cspline: Interpolation Types. (line 19) -* gsl_interp_cspline_periodic: Interpolation Types. (line 25) -* gsl_interp_eval: Evaluation of Interpolating Functions. - (line 6) -* gsl_interp_eval_deriv: Evaluation of Interpolating Functions. - (line 17) -* gsl_interp_eval_deriv2: Evaluation of Interpolating Functions. - (line 27) -* gsl_interp_eval_deriv2_e: Evaluation of Interpolating Functions. - (line 30) -* gsl_interp_eval_deriv_e: Evaluation of Interpolating Functions. - (line 20) -* gsl_interp_eval_e: Evaluation of Interpolating Functions. - (line 9) -* gsl_interp_eval_integ: Evaluation of Interpolating Functions. - (line 37) -* gsl_interp_eval_integ_e: Evaluation of Interpolating Functions. - (line 40) -* gsl_interp_free: Interpolation Functions. - (line 24) -* gsl_interp_init: Interpolation Functions. - (line 14) -* gsl_interp_linear: Interpolation Types. (line 8) -* gsl_interp_min_size: Interpolation Types. (line 55) -* gsl_interp_name: Interpolation Types. (line 44) -* gsl_interp_polynomial: Interpolation Types. (line 12) -* gsl_interp_type_min_size: Interpolation Types. (line 57) -* gsl_isinf: Infinities and Not-a-number. - (line 21) -* gsl_isnan: Infinities and Not-a-number. - (line 18) -* GSL_IS_EVEN: Testing for Odd and Even Numbers. - (line 10) -* GSL_IS_ODD: Testing for Odd and Even Numbers. - (line 6) -* gsl_ldexp: Elementary Functions. - (line 44) -* gsl_linalg_balance_matrix: Balancing. (line 17) -* gsl_linalg_bidiag_decomp: Bidiagonalization. (line 15) -* gsl_linalg_bidiag_unpack: Bidiagonalization. (line 26) -* gsl_linalg_bidiag_unpack2: Bidiagonalization. (line 35) -* gsl_linalg_bidiag_unpack_B: Bidiagonalization. (line 42) -* gsl_linalg_cholesky_decomp: Cholesky Decomposition. - (line 19) -* gsl_linalg_cholesky_invert: Cholesky Decomposition. - (line 56) -* gsl_linalg_cholesky_solve: Cholesky Decomposition. - (line 36) -* gsl_linalg_cholesky_svx: Cholesky Decomposition. - (line 46) -* gsl_linalg_complex_cholesky_decomp: Cholesky Decomposition. - (line 20) -* gsl_linalg_complex_cholesky_invert: Cholesky Decomposition. - (line 57) -* gsl_linalg_complex_cholesky_solve: Cholesky Decomposition. - (line 38) -* gsl_linalg_complex_cholesky_svx: Cholesky Decomposition. - (line 48) -* gsl_linalg_complex_householder_hm: Householder Transformations. - (line 27) -* gsl_linalg_complex_householder_hv: Householder Transformations. - (line 43) -* gsl_linalg_complex_householder_mh: Householder Transformations. - (line 35) -* gsl_linalg_complex_householder_transform: Householder Transformations. - (line 18) -* gsl_linalg_complex_LU_decomp: LU Decomposition. (line 20) -* gsl_linalg_complex_LU_det: LU Decomposition. (line 83) -* gsl_linalg_complex_LU_invert: LU Decomposition. (line 71) -* gsl_linalg_complex_LU_lndet: LU Decomposition. (line 91) -* gsl_linalg_complex_LU_refine: LU Decomposition. (line 60) -* gsl_linalg_complex_LU_sgndet: LU Decomposition. (line 99) -* gsl_linalg_complex_LU_solve: LU Decomposition. (line 41) -* gsl_linalg_complex_LU_svx: LU Decomposition. (line 50) -* gsl_linalg_hermtd_decomp: Tridiagonal Decomposition of Hermitian Matrices. - (line 14) -* gsl_linalg_hermtd_unpack: Tridiagonal Decomposition of Hermitian Matrices. - (line 26) -* gsl_linalg_hermtd_unpack_T: Tridiagonal Decomposition of Hermitian Matrices. - (line 34) -* gsl_linalg_hessenberg_decomp: Hessenberg Decomposition of Real Matrices. - (line 16) -* gsl_linalg_hessenberg_set_zero: Hessenberg Decomposition of Real Matrices. - (line 42) -* gsl_linalg_hessenberg_unpack: Hessenberg Decomposition of Real Matrices. - (line 27) -* gsl_linalg_hessenberg_unpack_accum: Hessenberg Decomposition of Real Matrices. - (line 33) -* gsl_linalg_hesstri_decomp: Hessenberg-Triangular Decomposition of Real Matrices. - (line 17) -* gsl_linalg_HH_solve: Householder solver for linear systems. - (line 6) -* gsl_linalg_HH_svx: Householder solver for linear systems. - (line 13) -* gsl_linalg_householder_hm: Householder Transformations. - (line 25) -* gsl_linalg_householder_hv: Householder Transformations. - (line 41) -* gsl_linalg_householder_mh: Householder Transformations. - (line 33) -* gsl_linalg_householder_transform: Householder Transformations. - (line 17) -* gsl_linalg_LU_decomp: LU Decomposition. (line 18) -* gsl_linalg_LU_det: LU Decomposition. (line 82) -* gsl_linalg_LU_invert: LU Decomposition. (line 69) -* gsl_linalg_LU_lndet: LU Decomposition. (line 90) -* gsl_linalg_LU_refine: LU Decomposition. (line 57) -* gsl_linalg_LU_sgndet: LU Decomposition. (line 98) -* gsl_linalg_LU_solve: LU Decomposition. (line 39) -* gsl_linalg_LU_svx: LU Decomposition. (line 48) -* gsl_linalg_QRPT_decomp: QR Decomposition with Column Pivoting. - (line 18) -* gsl_linalg_QRPT_decomp2: QR Decomposition with Column Pivoting. - (line 39) -* gsl_linalg_QRPT_QRsolve: QR Decomposition with Column Pivoting. - (line 60) -* gsl_linalg_QRPT_Rsolve: QR Decomposition with Column Pivoting. - (line 76) -* gsl_linalg_QRPT_Rsvx: QR Decomposition with Column Pivoting. - (line 81) -* gsl_linalg_QRPT_solve: QR Decomposition with Column Pivoting. - (line 46) -* gsl_linalg_QRPT_svx: QR Decomposition with Column Pivoting. - (line 53) -* gsl_linalg_QRPT_update: QR Decomposition with Column Pivoting. - (line 67) -* gsl_linalg_QR_decomp: QR Decomposition. (line 19) -* gsl_linalg_QR_lssolve: QR Decomposition. (line 50) -* gsl_linalg_QR_QRsolve: QR Decomposition. (line 102) -* gsl_linalg_QR_QTmat: QR Decomposition. (line 76) -* gsl_linalg_QR_QTvec: QR Decomposition. (line 61) -* gsl_linalg_QR_Qvec: QR Decomposition. (line 69) -* gsl_linalg_QR_Rsolve: QR Decomposition. (line 84) -* gsl_linalg_QR_Rsvx: QR Decomposition. (line 90) -* gsl_linalg_QR_solve: QR Decomposition. (line 35) -* gsl_linalg_QR_svx: QR Decomposition. (line 42) -* gsl_linalg_QR_unpack: QR Decomposition. (line 97) -* gsl_linalg_QR_update: QR Decomposition. (line 108) -* gsl_linalg_R_solve: QR Decomposition. (line 115) -* gsl_linalg_R_svx: QR Decomposition. (line 120) -* gsl_linalg_solve_cyc_tridiag: Tridiagonal Systems. (line 39) -* gsl_linalg_solve_symm_cyc_tridiag: Tridiagonal Systems. (line 53) -* gsl_linalg_solve_symm_tridiag: Tridiagonal Systems. (line 26) -* gsl_linalg_solve_tridiag: Tridiagonal Systems. (line 13) -* gsl_linalg_SV_decomp: Singular Value Decomposition. - (line 37) -* gsl_linalg_SV_decomp_jacobi: Singular Value Decomposition. - (line 56) -* gsl_linalg_SV_decomp_mod: Singular Value Decomposition. - (line 50) -* gsl_linalg_SV_leverage: Singular Value Decomposition. - (line 79) -* gsl_linalg_SV_solve: Singular Value Decomposition. - (line 63) -* gsl_linalg_symmtd_decomp: Tridiagonal Decomposition of Real Symmetric Matrices. - (line 13) -* gsl_linalg_symmtd_unpack: Tridiagonal Decomposition of Real Symmetric Matrices. - (line 24) -* gsl_linalg_symmtd_unpack_T: Tridiagonal Decomposition of Real Symmetric Matrices. - (line 32) -* gsl_log1p: Elementary Functions. - (line 12) -* gsl_matrix_add: Matrix operations. (line 8) -* gsl_matrix_add_constant: Matrix operations. (line 38) -* gsl_matrix_alloc: Matrix allocation. (line 14) -* gsl_matrix_calloc: Matrix allocation. (line 21) -* gsl_matrix_column: Creating row and column views. - (line 24) -* gsl_matrix_const_column: Creating row and column views. - (line 26) -* gsl_matrix_const_diagonal: Creating row and column views. - (line 63) -* gsl_matrix_const_ptr: Accessing matrix elements. - (line 36) -* gsl_matrix_const_row: Creating row and column views. - (line 14) -* gsl_matrix_const_subcolumn: Creating row and column views. - (line 51) -* gsl_matrix_const_subdiagonal: Creating row and column views. - (line 76) -* gsl_matrix_const_submatrix: Matrix views. (line 20) -* gsl_matrix_const_subrow: Creating row and column views. - (line 38) -* gsl_matrix_const_superdiagonal: Creating row and column views. - (line 88) -* gsl_matrix_const_view_array: Matrix views. (line 51) -* gsl_matrix_const_view_array_with_tda: Matrix views. (line 75) -* gsl_matrix_const_view_vector: Matrix views. (line 101) -* gsl_matrix_const_view_vector_with_tda: Matrix views. (line 125) -* gsl_matrix_diagonal: Creating row and column views. - (line 62) -* gsl_matrix_div_elements: Matrix operations. (line 27) -* gsl_matrix_equal: Matrix properties. (line 20) -* gsl_matrix_fprintf: Reading and writing matrices. - (line 26) -* gsl_matrix_fread: Reading and writing matrices. - (line 17) -* gsl_matrix_free: Matrix allocation. (line 25) -* gsl_matrix_fscanf: Reading and writing matrices. - (line 34) -* gsl_matrix_fwrite: Reading and writing matrices. - (line 9) -* gsl_matrix_get: Accessing matrix elements. - (line 20) -* gsl_matrix_get_col: Copying rows and columns. - (line 19) -* gsl_matrix_get_row: Copying rows and columns. - (line 13) -* gsl_matrix_isneg: Matrix properties. (line 12) -* gsl_matrix_isnonneg: Matrix properties. (line 13) -* gsl_matrix_isnull: Matrix properties. (line 10) -* gsl_matrix_ispos: Matrix properties. (line 11) -* gsl_matrix_max: Finding maximum and minimum elements of matrices. - (line 8) -* gsl_matrix_max_index: Finding maximum and minimum elements of matrices. - (line 19) -* gsl_matrix_memcpy: Copying matrices. (line 6) -* gsl_matrix_min: Finding maximum and minimum elements of matrices. - (line 11) -* gsl_matrix_minmax: Finding maximum and minimum elements of matrices. - (line 14) -* gsl_matrix_minmax_index: Finding maximum and minimum elements of matrices. - (line 33) -* gsl_matrix_min_index: Finding maximum and minimum elements of matrices. - (line 26) -* gsl_matrix_mul_elements: Matrix operations. (line 20) -* gsl_matrix_ptr: Accessing matrix elements. - (line 34) -* gsl_matrix_row: Creating row and column views. - (line 13) -* gsl_matrix_scale: Matrix operations. (line 34) -* gsl_matrix_set: Accessing matrix elements. - (line 27) -* gsl_matrix_set_all: Initializing matrix elements. - (line 6) -* gsl_matrix_set_col: Copying rows and columns. - (line 31) -* gsl_matrix_set_identity: Initializing matrix elements. - (line 12) -* gsl_matrix_set_row: Copying rows and columns. - (line 25) -* gsl_matrix_set_zero: Initializing matrix elements. - (line 9) -* gsl_matrix_sub: Matrix operations. (line 14) -* gsl_matrix_subcolumn: Creating row and column views. - (line 49) -* gsl_matrix_subdiagonal: Creating row and column views. - (line 74) -* gsl_matrix_submatrix: Matrix views. (line 18) -* gsl_matrix_subrow: Creating row and column views. - (line 36) -* gsl_matrix_superdiagonal: Creating row and column views. - (line 86) -* gsl_matrix_swap: Copying matrices. (line 11) -* gsl_matrix_swap_columns: Exchanging rows and columns. - (line 14) -* gsl_matrix_swap_rowcol: Exchanging rows and columns. - (line 19) -* gsl_matrix_swap_rows: Exchanging rows and columns. - (line 9) -* gsl_matrix_transpose: Exchanging rows and columns. - (line 32) -* gsl_matrix_transpose_memcpy: Exchanging rows and columns. - (line 25) -* gsl_matrix_view_array: Matrix views. (line 49) -* gsl_matrix_view_array_with_tda: Matrix views. (line 73) -* gsl_matrix_view_vector: Matrix views. (line 99) -* gsl_matrix_view_vector_with_tda: Matrix views. (line 123) -* GSL_MAX: Maximum and Minimum functions. - (line 10) -* GSL_MAX_DBL: Maximum and Minimum functions. - (line 18) -* GSL_MAX_INT: Maximum and Minimum functions. - (line 32) -* GSL_MAX_LDBL: Maximum and Minimum functions. - (line 39) -* GSL_MIN: Maximum and Minimum functions. - (line 14) -* GSL_MIN_DBL: Maximum and Minimum functions. - (line 25) -* gsl_min_fminimizer_alloc: Initializing the Minimizer. - (line 6) -* gsl_min_fminimizer_brent: Minimization Algorithms. - (line 30) -* gsl_min_fminimizer_free: Initializing the Minimizer. - (line 39) -* gsl_min_fminimizer_f_lower: Minimization Iteration. - (line 45) -* gsl_min_fminimizer_f_minimum: Minimization Iteration. - (line 41) -* gsl_min_fminimizer_f_upper: Minimization Iteration. - (line 43) -* gsl_min_fminimizer_goldensection: Minimization Algorithms. - (line 13) -* gsl_min_fminimizer_iterate: Minimization Iteration. - (line 12) -* gsl_min_fminimizer_name: Initializing the Minimizer. - (line 42) -* gsl_min_fminimizer_quad_golden: Minimization Algorithms. - (line 46) -* gsl_min_fminimizer_set: Initializing the Minimizer. - (line 21) -* gsl_min_fminimizer_set_with_values: Initializing the Minimizer. - (line 31) -* gsl_min_fminimizer_x_lower: Minimization Iteration. - (line 36) -* gsl_min_fminimizer_x_minimum: Minimization Iteration. - (line 29) -* gsl_min_fminimizer_x_upper: Minimization Iteration. - (line 34) -* GSL_MIN_INT: Maximum and Minimum functions. - (line 33) -* GSL_MIN_LDBL: Maximum and Minimum functions. - (line 41) -* gsl_min_test_interval: Minimization Stopping Parameters. - (line 18) -* gsl_monte_miser_alloc: MISER. (line 45) -* gsl_monte_miser_free: MISER. (line 68) -* gsl_monte_miser_init: MISER. (line 50) -* gsl_monte_miser_integrate: MISER. (line 55) -* gsl_monte_miser_params_get: MISER. (line 75) -* gsl_monte_miser_params_set: MISER. (line 80) -* gsl_monte_plain_alloc: PLAIN Monte Carlo. (line 29) -* gsl_monte_plain_free: PLAIN Monte Carlo. (line 51) -* gsl_monte_plain_init: PLAIN Monte Carlo. (line 33) -* gsl_monte_plain_integrate: PLAIN Monte Carlo. (line 38) -* gsl_monte_vegas_alloc: VEGAS. (line 50) -* gsl_monte_vegas_chisq: VEGAS. (line 113) -* gsl_monte_vegas_free: VEGAS. (line 77) -* gsl_monte_vegas_init: VEGAS. (line 55) -* gsl_monte_vegas_integrate: VEGAS. (line 60) -* gsl_monte_vegas_params_get: VEGAS. (line 131) -* gsl_monte_vegas_params_set: VEGAS. (line 136) -* gsl_monte_vegas_runval: VEGAS. (line 122) -* gsl_multifit_covar: Computing the covariance matrix of best fit parameters. - (line 6) -* gsl_multifit_fdfsolver_alloc: Initializing the Nonlinear Least-Squares Solver. - (line 16) -* gsl_multifit_fdfsolver_dif_df: Finite Difference Jacobian. - (line 15) -* gsl_multifit_fdfsolver_dif_fdf: Finite Difference Jacobian. - (line 27) -* gsl_multifit_fdfsolver_driver: High Level Driver. (line 12) -* gsl_multifit_fdfsolver_free: Initializing the Nonlinear Least-Squares Solver. - (line 46) -* gsl_multifit_fdfsolver_iterate: Iteration of the Minimization Algorithm. - (line 14) -* gsl_multifit_fdfsolver_lmder: Minimization Algorithms using Derivatives. - (line 64) -* gsl_multifit_fdfsolver_lmsder: Minimization Algorithms using Derivatives. - (line 12) -* gsl_multifit_fdfsolver_name: Initializing the Nonlinear Least-Squares Solver. - (line 52) -* gsl_multifit_fdfsolver_position: Iteration of the Minimization Algorithm. - (line 43) -* gsl_multifit_fdfsolver_set: Initializing the Nonlinear Least-Squares Solver. - (line 40) -* gsl_multifit_fsolver_alloc: Initializing the Nonlinear Least-Squares Solver. - (line 6) -* gsl_multifit_fsolver_driver: High Level Driver. (line 9) -* gsl_multifit_fsolver_free: Initializing the Nonlinear Least-Squares Solver. - (line 45) -* gsl_multifit_fsolver_iterate: Iteration of the Minimization Algorithm. - (line 12) -* gsl_multifit_fsolver_name: Initializing the Nonlinear Least-Squares Solver. - (line 50) -* gsl_multifit_fsolver_position: Iteration of the Minimization Algorithm. - (line 41) -* gsl_multifit_fsolver_set: Initializing the Nonlinear Least-Squares Solver. - (line 35) -* gsl_multifit_gradient: Search Stopping Parameters for Minimization Algorithms. - (line 45) -* gsl_multifit_linear: Multi-parameter fitting. - (line 50) -* gsl_multifit_linear_alloc: Multi-parameter fitting. - (line 41) -* gsl_multifit_linear_est: Multi-parameter fitting. - (line 108) -* gsl_multifit_linear_free: Multi-parameter fitting. - (line 46) -* gsl_multifit_linear_residuals: Multi-parameter fitting. - (line 116) -* gsl_multifit_linear_svd: Multi-parameter fitting. - (line 85) -* gsl_multifit_linear_usvd: Multi-parameter fitting. - (line 97) -* gsl_multifit_robust: Robust linear regression. - (line 159) -* gsl_multifit_robust_alloc: Robust linear regression. - (line 70) -* gsl_multifit_robust_bisquare: Robust linear regression. - (line 81) -* gsl_multifit_robust_cauchy: Robust linear regression. - (line 90) -* gsl_multifit_robust_default: Robust linear regression. - (line 76) -* gsl_multifit_robust_est: Robust linear regression. - (line 173) -* gsl_multifit_robust_fair: Robust linear regression. - (line 101) -* gsl_multifit_robust_free: Robust linear regression. - (line 142) -* gsl_multifit_robust_huber: Robust linear regression. - (line 110) -* gsl_multifit_robust_name: Robust linear regression. - (line 146) -* gsl_multifit_robust_ols: Robust linear regression. - (line 123) -* gsl_multifit_robust_statistics: Robust linear regression. - (line 181) -* gsl_multifit_robust_tune: Robust linear regression. - (line 151) -* gsl_multifit_robust_welsch: Robust linear regression. - (line 133) -* gsl_multifit_test_delta: Search Stopping Parameters for Minimization Algorithms. - (line 19) -* gsl_multifit_test_gradient: Search Stopping Parameters for Minimization Algorithms. - (line 31) -* gsl_multifit_wlinear: Multi-parameter fitting. - (line 70) -* gsl_multifit_wlinear_svd: Multi-parameter fitting. - (line 89) -* gsl_multifit_wlinear_usvd: Multi-parameter fitting. - (line 101) -* gsl_multimin_fdfminimizer_alloc: Initializing the Multidimensional Minimizer. - (line 10) -* gsl_multimin_fdfminimizer_conjugate_fr: Multimin Algorithms with Derivatives. - (line 11) -* gsl_multimin_fdfminimizer_conjugate_pr: Multimin Algorithms with Derivatives. - (line 28) -* gsl_multimin_fdfminimizer_free: Initializing the Multidimensional Minimizer. - (line 46) -* gsl_multimin_fdfminimizer_gradient: Multimin Iteration. (line 34) -* gsl_multimin_fdfminimizer_iterate: Multimin Iteration. (line 11) -* gsl_multimin_fdfminimizer_minimum: Multimin Iteration. (line 30) -* gsl_multimin_fdfminimizer_name: Initializing the Multidimensional Minimizer. - (line 52) -* gsl_multimin_fdfminimizer_restart: Multimin Iteration. (line 42) -* gsl_multimin_fdfminimizer_set: Initializing the Multidimensional Minimizer. - (line 21) -* gsl_multimin_fdfminimizer_steepest_descent: Multimin Algorithms with Derivatives. - (line 55) -* gsl_multimin_fdfminimizer_vector_bfgs: Multimin Algorithms with Derivatives. - (line 36) -* gsl_multimin_fdfminimizer_vector_bfgs2: Multimin Algorithms with Derivatives. - (line 35) -* gsl_multimin_fdfminimizer_x: Multimin Iteration. (line 26) -* gsl_multimin_fminimizer_alloc: Initializing the Multidimensional Minimizer. - (line 13) -* gsl_multimin_fminimizer_free: Initializing the Multidimensional Minimizer. - (line 48) -* gsl_multimin_fminimizer_iterate: Multimin Iteration. (line 13) -* gsl_multimin_fminimizer_minimum: Multimin Iteration. (line 32) -* gsl_multimin_fminimizer_name: Initializing the Multidimensional Minimizer. - (line 54) -* gsl_multimin_fminimizer_nmsimplex: Multimin Algorithms without Derivatives. - (line 10) -* gsl_multimin_fminimizer_nmsimplex2: Multimin Algorithms without Derivatives. - (line 9) -* gsl_multimin_fminimizer_nmsimplex2rand: Multimin Algorithms without Derivatives. - (line 49) -* gsl_multimin_fminimizer_set: Initializing the Multidimensional Minimizer. - (line 24) -* gsl_multimin_fminimizer_size: Multimin Iteration. (line 36) -* gsl_multimin_fminimizer_x: Multimin Iteration. (line 28) -* gsl_multimin_test_gradient: Multimin Stopping Criteria. - (line 18) -* gsl_multimin_test_size: Multimin Stopping Criteria. - (line 32) -* gsl_multiroot_fdfsolver_alloc: Initializing the Multidimensional Solver. - (line 27) -* gsl_multiroot_fdfsolver_dx: Iteration of the multidimensional solver. - (line 48) -* gsl_multiroot_fdfsolver_f: Iteration of the multidimensional solver. - (line 41) -* gsl_multiroot_fdfsolver_free: Initializing the Multidimensional Solver. - (line 54) -* gsl_multiroot_fdfsolver_gnewton: Algorithms using Derivatives. - (line 90) -* gsl_multiroot_fdfsolver_hybridj: Algorithms using Derivatives. - (line 64) -* gsl_multiroot_fdfsolver_hybridsj: Algorithms using Derivatives. - (line 13) -* gsl_multiroot_fdfsolver_iterate: Iteration of the multidimensional solver. - (line 14) -* gsl_multiroot_fdfsolver_name: Initializing the Multidimensional Solver. - (line 60) -* gsl_multiroot_fdfsolver_newton: Algorithms using Derivatives. - (line 70) -* gsl_multiroot_fdfsolver_root: Iteration of the multidimensional solver. - (line 34) -* gsl_multiroot_fdfsolver_set: Initializing the Multidimensional Solver. - (line 45) -* gsl_multiroot_fsolver_alloc: Initializing the Multidimensional Solver. - (line 11) -* gsl_multiroot_fsolver_broyden: Algorithms without Derivatives. - (line 45) -* gsl_multiroot_fsolver_dnewton: Algorithms without Derivatives. - (line 25) -* gsl_multiroot_fsolver_dx: Iteration of the multidimensional solver. - (line 46) -* gsl_multiroot_fsolver_f: Iteration of the multidimensional solver. - (line 39) -* gsl_multiroot_fsolver_free: Initializing the Multidimensional Solver. - (line 52) -* gsl_multiroot_fsolver_hybrid: Algorithms without Derivatives. - (line 21) -* gsl_multiroot_fsolver_hybrids: Algorithms without Derivatives. - (line 13) -* gsl_multiroot_fsolver_iterate: Iteration of the multidimensional solver. - (line 12) -* gsl_multiroot_fsolver_name: Initializing the Multidimensional Solver. - (line 58) -* gsl_multiroot_fsolver_root: Iteration of the multidimensional solver. - (line 32) -* gsl_multiroot_fsolver_set: Initializing the Multidimensional Solver. - (line 43) -* gsl_multiroot_test_delta: Search Stopping Parameters for the multidimensional solver. - (line 20) -* gsl_multiroot_test_residual: Search Stopping Parameters for the multidimensional solver. - (line 32) -* gsl_multiset_alloc: Multiset allocation. (line 6) -* gsl_multiset_calloc: Multiset allocation. (line 14) -* gsl_multiset_data: Multiset properties. (line 12) -* gsl_multiset_fprintf: Reading and writing multisets. - (line 26) -* gsl_multiset_fread: Reading and writing multisets. - (line 17) -* gsl_multiset_free: Multiset allocation. (line 28) -* gsl_multiset_fscanf: Reading and writing multisets. - (line 35) -* gsl_multiset_fwrite: Reading and writing multisets. - (line 9) -* gsl_multiset_get: Accessing multiset elements. - (line 8) -* gsl_multiset_init_first: Multiset allocation. (line 20) -* gsl_multiset_init_last: Multiset allocation. (line 24) -* gsl_multiset_k: Multiset properties. (line 9) -* gsl_multiset_memcpy: Multiset allocation. (line 31) -* gsl_multiset_n: Multiset properties. (line 6) -* gsl_multiset_next: Multiset functions. (line 6) -* gsl_multiset_prev: Multiset functions. (line 14) -* gsl_multiset_valid: Multiset properties. (line 16) -* gsl_ntuple_bookdata: Writing ntuples. (line 10) -* gsl_ntuple_close: Closing an ntuple file. - (line 6) -* gsl_ntuple_create: Creating ntuples. (line 6) -* gsl_ntuple_open: Opening an existing ntuple file. - (line 6) -* gsl_ntuple_project: Histogramming ntuple values. - (line 35) -* gsl_ntuple_read: Reading ntuples. (line 6) -* gsl_ntuple_write: Writing ntuples. (line 6) -* gsl_odeiv2_control_alloc: Adaptive Step-size Control. - (line 73) -* gsl_odeiv2_control_errlevel: Adaptive Step-size Control. - (line 115) -* gsl_odeiv2_control_free: Adaptive Step-size Control. - (line 86) -* gsl_odeiv2_control_hadjust: Adaptive Step-size Control. - (line 90) -* gsl_odeiv2_control_init: Adaptive Step-size Control. - (line 80) -* gsl_odeiv2_control_name: Adaptive Step-size Control. - (line 105) -* gsl_odeiv2_control_scaled_new: Adaptive Step-size Control. - (line 60) -* gsl_odeiv2_control_set_driver: Adaptive Step-size Control. - (line 122) -* gsl_odeiv2_control_standard_new: Adaptive Step-size Control. - (line 10) -* gsl_odeiv2_control_yp_new: Adaptive Step-size Control. - (line 52) -* gsl_odeiv2_control_y_new: Adaptive Step-size Control. - (line 44) -* gsl_odeiv2_driver_alloc_scaled_new: Driver. (line 19) -* gsl_odeiv2_driver_alloc_standard_new: Driver. (line 15) -* gsl_odeiv2_driver_alloc_yp_new: Driver. (line 12) -* gsl_odeiv2_driver_alloc_y_new: Driver. (line 9) -* gsl_odeiv2_driver_apply: Driver. (line 46) -* gsl_odeiv2_driver_apply_fixed_step: Driver. (line 61) -* gsl_odeiv2_driver_free: Driver. (line 78) -* gsl_odeiv2_driver_reset: Driver. (line 69) -* gsl_odeiv2_driver_reset_hstart: Driver. (line 72) -* gsl_odeiv2_driver_set_hmax: Driver. (line 36) -* gsl_odeiv2_driver_set_hmin: Driver. (line 31) -* gsl_odeiv2_driver_set_nmax: Driver. (line 41) -* gsl_odeiv2_evolve_alloc: Evolution. (line 10) -* gsl_odeiv2_evolve_apply: Evolution. (line 14) -* gsl_odeiv2_evolve_apply_fixed_step: Evolution. (line 52) -* gsl_odeiv2_evolve_free: Evolution. (line 68) -* gsl_odeiv2_evolve_reset: Evolution. (line 63) -* gsl_odeiv2_evolve_set_driver: Evolution. (line 72) -* gsl_odeiv2_step_alloc: Stepping Functions. (line 10) -* gsl_odeiv2_step_apply: Stepping Functions. (line 51) -* gsl_odeiv2_step_bsimp: Stepping Functions. (line 122) -* gsl_odeiv2_step_free: Stepping Functions. (line 23) -* gsl_odeiv2_step_msadams: Stepping Functions. (line 127) -* gsl_odeiv2_step_msbdf: Stepping Functions. (line 135) -* gsl_odeiv2_step_name: Stepping Functions. (line 27) -* gsl_odeiv2_step_order: Stepping Functions. (line 37) -* gsl_odeiv2_step_reset: Stepping Functions. (line 18) -* gsl_odeiv2_step_rk1imp: Stepping Functions. (line 104) -* gsl_odeiv2_step_rk2: Stepping Functions. (line 86) -* gsl_odeiv2_step_rk2imp: Stepping Functions. (line 110) -* gsl_odeiv2_step_rk4: Stepping Functions. (line 89) -* gsl_odeiv2_step_rk4imp: Stepping Functions. (line 116) -* gsl_odeiv2_step_rk8pd: Stepping Functions. (line 101) -* gsl_odeiv2_step_rkck: Stepping Functions. (line 98) -* gsl_odeiv2_step_rkf45: Stepping Functions. (line 94) -* gsl_odeiv2_step_set_driver: Stepping Functions. (line 43) -* gsl_permutation_alloc: Permutation allocation. - (line 6) -* gsl_permutation_calloc: Permutation allocation. - (line 14) -* gsl_permutation_canonical_cycles: Permutations in cyclic form. - (line 67) -* gsl_permutation_canonical_to_linear: Permutations in cyclic form. - (line 49) -* gsl_permutation_data: Permutation properties. - (line 9) -* gsl_permutation_fprintf: Reading and writing permutations. - (line 27) -* gsl_permutation_fread: Reading and writing permutations. - (line 17) -* gsl_permutation_free: Permutation allocation. - (line 23) -* gsl_permutation_fscanf: Reading and writing permutations. - (line 36) -* gsl_permutation_fwrite: Reading and writing permutations. - (line 9) -* gsl_permutation_get: Accessing permutation elements. - (line 9) -* gsl_permutation_init: Permutation allocation. - (line 19) -* gsl_permutation_inverse: Permutation functions. - (line 9) -* gsl_permutation_inversions: Permutations in cyclic form. - (line 54) -* gsl_permutation_linear_cycles: Permutations in cyclic form. - (line 62) -* gsl_permutation_linear_to_canonical: Permutations in cyclic form. - (line 44) -* gsl_permutation_memcpy: Permutation allocation. - (line 26) -* gsl_permutation_mul: Applying Permutations. - (line 35) -* gsl_permutation_next: Permutation functions. - (line 14) -* gsl_permutation_prev: Permutation functions. - (line 22) -* gsl_permutation_reverse: Permutation functions. - (line 6) -* gsl_permutation_size: Permutation properties. - (line 6) -* gsl_permutation_swap: Accessing permutation elements. - (line 16) -* gsl_permutation_valid: Permutation properties. - (line 13) -* gsl_permute: Applying Permutations. - (line 6) -* gsl_permute_inverse: Applying Permutations. - (line 11) -* gsl_permute_vector: Applying Permutations. - (line 16) -* gsl_permute_vector_inverse: Applying Permutations. - (line 25) -* gsl_poly_complex_eval: Polynomial Evaluation. - (line 16) -* gsl_poly_complex_solve: General Polynomial Equations. - (line 25) -* gsl_poly_complex_solve_cubic: Cubic Equations. (line 24) -* gsl_poly_complex_solve_quadratic: Quadratic Equations. (line 28) -* gsl_poly_complex_workspace_alloc: General Polynomial Equations. - (line 11) -* gsl_poly_complex_workspace_free: General Polynomial Equations. - (line 21) -* gsl_poly_dd_eval: Divided Difference Representation of Polynomials. - (line 38) -* gsl_poly_dd_hermite_init: Divided Difference Representation of Polynomials. - (line 54) -* gsl_poly_dd_init: Divided Difference Representation of Polynomials. - (line 30) -* gsl_poly_dd_taylor: Divided Difference Representation of Polynomials. - (line 45) -* gsl_poly_eval: Polynomial Evaluation. - (line 11) -* gsl_poly_eval_derivs: Polynomial Evaluation. - (line 26) -* gsl_poly_solve_cubic: Cubic Equations. (line 6) -* gsl_poly_solve_quadratic: Quadratic Equations. (line 6) -* gsl_pow_2: Small integer powers. - (line 19) -* gsl_pow_3: Small integer powers. - (line 20) -* gsl_pow_4: Small integer powers. - (line 21) -* gsl_pow_5: Small integer powers. - (line 22) -* gsl_pow_6: Small integer powers. - (line 23) -* gsl_pow_7: Small integer powers. - (line 24) -* gsl_pow_8: Small integer powers. - (line 25) -* gsl_pow_9: Small integer powers. - (line 26) -* gsl_pow_int: Small integer powers. - (line 11) -* gsl_pow_uint: Small integer powers. - (line 12) -* gsl_qrng_alloc: Quasi-random number generator initialization. - (line 6) -* gsl_qrng_clone: Saving and resorting quasi-random number generator state. - (line 12) -* gsl_qrng_free: Quasi-random number generator initialization. - (line 14) -* gsl_qrng_get: Sampling from a quasi-random number generator. - (line 6) -* gsl_qrng_halton: Quasi-random number generator algorithms. - (line 18) -* gsl_qrng_init: Quasi-random number generator initialization. - (line 17) -* gsl_qrng_memcpy: Saving and resorting quasi-random number generator state. - (line 6) -* gsl_qrng_name: Auxiliary quasi-random number generator functions. - (line 6) -* gsl_qrng_niederreiter_2: Quasi-random number generator algorithms. - (line 8) -* gsl_qrng_reversehalton: Quasi-random number generator algorithms. - (line 19) -* gsl_qrng_size: Auxiliary quasi-random number generator functions. - (line 9) -* gsl_qrng_sobol: Quasi-random number generator algorithms. - (line 13) -* gsl_qrng_state: Auxiliary quasi-random number generator functions. - (line 10) -* gsl_ran_bernoulli: The Bernoulli Distribution. - (line 6) -* gsl_ran_bernoulli_pdf: The Bernoulli Distribution. - (line 15) -* gsl_ran_beta: The Beta Distribution. - (line 6) -* gsl_ran_beta_pdf: The Beta Distribution. - (line 15) -* gsl_ran_binomial: The Binomial Distribution. - (line 6) -* gsl_ran_binomial_pdf: The Binomial Distribution. - (line 17) -* gsl_ran_bivariate_gaussian: The Bivariate Gaussian Distribution. - (line 6) -* gsl_ran_bivariate_gaussian_pdf: The Bivariate Gaussian Distribution. - (line 18) -* gsl_ran_cauchy: The Cauchy Distribution. - (line 6) -* gsl_ran_cauchy_pdf: The Cauchy Distribution. - (line 16) -* gsl_ran_chisq: The Chi-squared Distribution. - (line 14) -* gsl_ran_chisq_pdf: The Chi-squared Distribution. - (line 23) -* gsl_ran_choose: Shuffling and Sampling. - (line 33) -* gsl_ran_dirichlet: The Dirichlet Distribution. - (line 6) -* gsl_ran_dirichlet_lnpdf: The Dirichlet Distribution. - (line 30) -* gsl_ran_dirichlet_pdf: The Dirichlet Distribution. - (line 24) -* gsl_ran_dir_2d: Spherical Vector Distributions. - (line 10) -* gsl_ran_dir_2d_trig_method: Spherical Vector Distributions. - (line 12) -* gsl_ran_dir_3d: Spherical Vector Distributions. - (line 31) -* gsl_ran_dir_nd: Spherical Vector Distributions. - (line 40) -* gsl_ran_discrete: General Discrete Distributions. - (line 59) -* gsl_ran_discrete_free: General Discrete Distributions. - (line 72) -* gsl_ran_discrete_pdf: General Discrete Distributions. - (line 64) -* gsl_ran_discrete_preproc: General Discrete Distributions. - (line 49) -* gsl_ran_exponential: The Exponential Distribution. - (line 6) -* gsl_ran_exponential_pdf: The Exponential Distribution. - (line 14) -* gsl_ran_exppow: The Exponential Power Distribution. - (line 6) -* gsl_ran_exppow_pdf: The Exponential Power Distribution. - (line 18) -* gsl_ran_fdist: The F-distribution. (line 13) -* gsl_ran_fdist_pdf: The F-distribution. (line 26) -* gsl_ran_flat: The Flat (Uniform) Distribution. - (line 6) -* gsl_ran_flat_pdf: The Flat (Uniform) Distribution. - (line 15) -* gsl_ran_gamma: The Gamma Distribution. - (line 6) -* gsl_ran_gamma_knuth: The Gamma Distribution. - (line 22) -* gsl_ran_gamma_pdf: The Gamma Distribution. - (line 27) -* gsl_ran_gaussian: The Gaussian Distribution. - (line 6) -* gsl_ran_gaussian_pdf: The Gaussian Distribution. - (line 19) -* gsl_ran_gaussian_ratio_method: The Gaussian Distribution. - (line 27) -* gsl_ran_gaussian_tail: The Gaussian Tail Distribution. - (line 6) -* gsl_ran_gaussian_tail_pdf: The Gaussian Tail Distribution. - (line 23) -* gsl_ran_gaussian_ziggurat: The Gaussian Distribution. - (line 25) -* gsl_ran_geometric: The Geometric Distribution. - (line 6) -* gsl_ran_geometric_pdf: The Geometric Distribution. - (line 19) -* gsl_ran_gumbel1: The Type-1 Gumbel Distribution. - (line 6) -* gsl_ran_gumbel1_pdf: The Type-1 Gumbel Distribution. - (line 15) -* gsl_ran_gumbel2: The Type-2 Gumbel Distribution. - (line 6) -* gsl_ran_gumbel2_pdf: The Type-2 Gumbel Distribution. - (line 15) -* gsl_ran_hypergeometric: The Hypergeometric Distribution. - (line 6) -* gsl_ran_hypergeometric_pdf: The Hypergeometric Distribution. - (line 22) -* gsl_ran_landau: The Landau Distribution. - (line 6) -* gsl_ran_landau_pdf: The Landau Distribution. - (line 17) -* gsl_ran_laplace: The Laplace Distribution. - (line 6) -* gsl_ran_laplace_pdf: The Laplace Distribution. - (line 14) -* gsl_ran_levy: The Levy alpha-Stable Distributions. - (line 6) -* gsl_ran_levy_skew: The Levy skew alpha-Stable Distribution. - (line 6) -* gsl_ran_logarithmic: The Logarithmic Distribution. - (line 6) -* gsl_ran_logarithmic_pdf: The Logarithmic Distribution. - (line 16) -* gsl_ran_logistic: The Logistic Distribution. - (line 6) -* gsl_ran_logistic_pdf: The Logistic Distribution. - (line 14) -* gsl_ran_lognormal: The Lognormal Distribution. - (line 6) -* gsl_ran_lognormal_pdf: The Lognormal Distribution. - (line 15) -* gsl_ran_multinomial: The Multinomial Distribution. - (line 6) -* gsl_ran_multinomial_lnpdf: The Multinomial Distribution. - (line 34) -* gsl_ran_multinomial_pdf: The Multinomial Distribution. - (line 28) -* gsl_ran_negative_binomial: The Negative Binomial Distribution. - (line 6) -* gsl_ran_negative_binomial_pdf: The Negative Binomial Distribution. - (line 17) -* gsl_ran_pareto: The Pareto Distribution. - (line 6) -* gsl_ran_pareto_pdf: The Pareto Distribution. - (line 15) -* gsl_ran_pascal: The Pascal Distribution. - (line 6) -* gsl_ran_pascal_pdf: The Pascal Distribution. - (line 16) -* gsl_ran_poisson: The Poisson Distribution. - (line 6) -* gsl_ran_poisson_pdf: The Poisson Distribution. - (line 16) -* gsl_ran_rayleigh: The Rayleigh Distribution. - (line 6) -* gsl_ran_rayleigh_pdf: The Rayleigh Distribution. - (line 14) -* gsl_ran_rayleigh_tail: The Rayleigh Tail Distribution. - (line 6) -* gsl_ran_rayleigh_tail_pdf: The Rayleigh Tail Distribution. - (line 16) -* gsl_ran_sample: Shuffling and Sampling. - (line 59) -* gsl_ran_shuffle: Shuffling and Sampling. - (line 13) -* gsl_ran_tdist: The t-distribution. (line 14) -* gsl_ran_tdist_pdf: The t-distribution. (line 23) -* gsl_ran_ugaussian: The Gaussian Distribution. - (line 34) -* gsl_ran_ugaussian_pdf: The Gaussian Distribution. - (line 35) -* gsl_ran_ugaussian_ratio_method: The Gaussian Distribution. - (line 36) -* gsl_ran_ugaussian_tail: The Gaussian Tail Distribution. - (line 30) -* gsl_ran_ugaussian_tail_pdf: The Gaussian Tail Distribution. - (line 32) -* gsl_ran_weibull: The Weibull Distribution. - (line 6) -* gsl_ran_weibull_pdf: The Weibull Distribution. - (line 15) -* GSL_REAL: Representation of complex numbers. - (line 34) -* gsl_rng_alloc: Random number generator initialization. - (line 6) -* gsl_rng_borosh13: Other random number generators. - (line 174) -* gsl_rng_clone: Copying random number generator state. - (line 16) -* gsl_rng_cmrg: Random number generator algorithms. - (line 98) -* gsl_rng_coveyou: Other random number generators. - (line 201) -* gsl_rng_env_setup: Random number environment variables. - (line 11) -* gsl_rng_fishman18: Other random number generators. - (line 175) -* gsl_rng_fishman20: Other random number generators. - (line 176) -* gsl_rng_fishman2x: Other random number generators. - (line 191) -* gsl_rng_fread: Reading and writing random number generator state. - (line 17) -* gsl_rng_free: Random number generator initialization. - (line 45) -* gsl_rng_fwrite: Reading and writing random number generator state. - (line 9) -* gsl_rng_get: Sampling from a random number generator. - (line 11) -* gsl_rng_gfsr4: Random number generator algorithms. - (line 173) -* gsl_rng_knuthran: Other random number generators. - (line 167) -* gsl_rng_knuthran2: Other random number generators. - (line 157) -* gsl_rng_knuthran2002: Other random number generators. - (line 166) -* gsl_rng_lecuyer21: Other random number generators. - (line 177) -* gsl_rng_max: Auxiliary random number generator functions. - (line 19) -* gsl_rng_memcpy: Copying random number generator state. - (line 11) -* gsl_rng_min: Auxiliary random number generator functions. - (line 23) -* gsl_rng_minstd: Other random number generators. - (line 113) -* gsl_rng_mrg: Random number generator algorithms. - (line 120) -* gsl_rng_mt19937: Random number generator algorithms. - (line 19) -* gsl_rng_name: Auxiliary random number generator functions. - (line 10) -* gsl_rng_r250: Other random number generators. - (line 59) -* gsl_rng_rand: Unix random number generators. - (line 17) -* gsl_rng_rand48: Unix random number generators. - (line 57) -* gsl_rng_random_bsd: Unix random number generators. - (line 26) -* gsl_rng_random_glibc2: Unix random number generators. - (line 28) -* gsl_rng_random_libc5: Unix random number generators. - (line 27) -* gsl_rng_randu: Other random number generators. - (line 104) -* gsl_rng_ranf: Other random number generators. - (line 22) -* gsl_rng_ranlux: Random number generator algorithms. - (line 71) -* gsl_rng_ranlux389: Random number generator algorithms. - (line 72) -* gsl_rng_ranlxd1: Random number generator algorithms. - (line 64) -* gsl_rng_ranlxd2: Random number generator algorithms. - (line 65) -* gsl_rng_ranlxs0: Random number generator algorithms. - (line 44) -* gsl_rng_ranlxs1: Random number generator algorithms. - (line 45) -* gsl_rng_ranlxs2: Random number generator algorithms. - (line 46) -* gsl_rng_ranmar: Other random number generators. - (line 53) -* gsl_rng_set: Random number generator initialization. - (line 25) -* gsl_rng_size: Auxiliary random number generator functions. - (line 30) -* gsl_rng_slatec: Other random number generators. - (line 140) -* gsl_rng_state: Auxiliary random number generator functions. - (line 29) -* gsl_rng_taus: Random number generator algorithms. - (line 137) -* gsl_rng_taus2: Random number generator algorithms. - (line 138) -* gsl_rng_transputer: Other random number generators. - (line 95) -* gsl_rng_tt800: Other random number generators. - (line 74) -* gsl_rng_types_setup: Auxiliary random number generator functions. - (line 40) -* gsl_rng_uni: Other random number generators. - (line 133) -* gsl_rng_uni32: Other random number generators. - (line 134) -* gsl_rng_uniform: Sampling from a random number generator. - (line 18) -* gsl_rng_uniform_int: Sampling from a random number generator. - (line 36) -* gsl_rng_uniform_pos: Sampling from a random number generator. - (line 28) -* gsl_rng_vax: Other random number generators. - (line 86) -* gsl_rng_waterman14: Other random number generators. - (line 178) -* gsl_rng_zuf: Other random number generators. - (line 144) -* gsl_root_fdfsolver_alloc: Initializing the Solver. - (line 21) -* gsl_root_fdfsolver_free: Initializing the Solver. - (line 48) -* gsl_root_fdfsolver_iterate: Root Finding Iteration. - (line 13) -* gsl_root_fdfsolver_name: Initializing the Solver. - (line 53) -* gsl_root_fdfsolver_newton: Root Finding Algorithms using Derivatives. - (line 15) -* gsl_root_fdfsolver_root: Root Finding Iteration. - (line 33) -* gsl_root_fdfsolver_secant: Root Finding Algorithms using Derivatives. - (line 29) -* gsl_root_fdfsolver_set: Initializing the Solver. - (line 42) -* gsl_root_fdfsolver_steffenson: Root Finding Algorithms using Derivatives. - (line 60) -* gsl_root_fsolver_alloc: Initializing the Solver. - (line 6) -* gsl_root_fsolver_bisection: Root Bracketing Algorithms. - (line 16) -* gsl_root_fsolver_brent: Root Bracketing Algorithms. - (line 49) -* gsl_root_fsolver_falsepos: Root Bracketing Algorithms. - (line 32) -* gsl_root_fsolver_free: Initializing the Solver. - (line 47) -* gsl_root_fsolver_iterate: Root Finding Iteration. - (line 12) -* gsl_root_fsolver_name: Initializing the Solver. - (line 51) -* gsl_root_fsolver_root: Root Finding Iteration. - (line 32) -* gsl_root_fsolver_set: Initializing the Solver. - (line 36) -* gsl_root_fsolver_x_lower: Root Finding Iteration. - (line 38) -* gsl_root_fsolver_x_upper: Root Finding Iteration. - (line 40) -* gsl_root_test_delta: Search Stopping Parameters. - (line 41) -* gsl_root_test_interval: Search Stopping Parameters. - (line 19) -* gsl_root_test_residual: Search Stopping Parameters. - (line 52) -* GSL_SET_COMPLEX: Representation of complex numbers. - (line 39) -* gsl_set_error_handler: Error Handlers. (line 43) -* gsl_set_error_handler_off: Error Handlers. (line 69) -* GSL_SET_IMAG: Representation of complex numbers. - (line 49) -* GSL_SET_REAL: Representation of complex numbers. - (line 48) -* gsl_sf_airy_Ai: Airy Functions. (line 6) -* gsl_sf_airy_Ai_deriv: Derivatives of Airy Functions. - (line 6) -* gsl_sf_airy_Ai_deriv_e: Derivatives of Airy Functions. - (line 7) -* gsl_sf_airy_Ai_deriv_scaled: Derivatives of Airy Functions. - (line 18) -* gsl_sf_airy_Ai_deriv_scaled_e: Derivatives of Airy Functions. - (line 20) -* gsl_sf_airy_Ai_e: Airy Functions. (line 7) -* gsl_sf_airy_Ai_scaled: Airy Functions. (line 18) -* gsl_sf_airy_Ai_scaled_e: Airy Functions. (line 19) -* gsl_sf_airy_Bi: Airy Functions. (line 12) -* gsl_sf_airy_Bi_deriv: Derivatives of Airy Functions. - (line 12) -* gsl_sf_airy_Bi_deriv_e: Derivatives of Airy Functions. - (line 13) -* gsl_sf_airy_Bi_deriv_scaled: Derivatives of Airy Functions. - (line 26) -* gsl_sf_airy_Bi_deriv_scaled_e: Derivatives of Airy Functions. - (line 28) -* gsl_sf_airy_Bi_e: Airy Functions. (line 13) -* gsl_sf_airy_Bi_scaled: Airy Functions. (line 25) -* gsl_sf_airy_Bi_scaled_e: Airy Functions. (line 26) -* gsl_sf_airy_zero_Ai: Zeros of Airy Functions. - (line 6) -* gsl_sf_airy_zero_Ai_deriv: Zeros of Derivatives of Airy Functions. - (line 6) -* gsl_sf_airy_zero_Ai_deriv_e: Zeros of Derivatives of Airy Functions. - (line 7) -* gsl_sf_airy_zero_Ai_e: Zeros of Airy Functions. - (line 7) -* gsl_sf_airy_zero_Bi: Zeros of Airy Functions. - (line 12) -* gsl_sf_airy_zero_Bi_deriv: Zeros of Derivatives of Airy Functions. - (line 12) -* gsl_sf_airy_zero_Bi_deriv_e: Zeros of Derivatives of Airy Functions. - (line 13) -* gsl_sf_airy_zero_Bi_e: Zeros of Airy Functions. - (line 13) -* gsl_sf_angle_restrict_pos: Restriction Functions. - (line 15) -* gsl_sf_angle_restrict_pos_e: Restriction Functions. - (line 16) -* gsl_sf_angle_restrict_symm: Restriction Functions. - (line 6) -* gsl_sf_angle_restrict_symm_e: Restriction Functions. - (line 7) -* gsl_sf_atanint: Arctangent Integral. (line 6) -* gsl_sf_atanint_e: Arctangent Integral. (line 7) -* gsl_sf_bessel_I0: Regular Modified Cylindrical Bessel Functions. - (line 6) -* gsl_sf_bessel_I0_e: Regular Modified Cylindrical Bessel Functions. - (line 7) -* gsl_sf_bessel_I0_scaled: Regular Modified Cylindrical Bessel Functions. - (line 31) -* gsl_sf_bessel_i0_scaled: Regular Modified Spherical Bessel Functions. - (line 10) -* gsl_sf_bessel_I0_scaled_e: Regular Modified Cylindrical Bessel Functions. - (line 32) -* gsl_sf_bessel_i0_scaled_e: Regular Modified Spherical Bessel Functions. - (line 11) -* gsl_sf_bessel_I1: Regular Modified Cylindrical Bessel Functions. - (line 11) -* gsl_sf_bessel_I1_e: Regular Modified Cylindrical Bessel Functions. - (line 12) -* gsl_sf_bessel_I1_scaled: Regular Modified Cylindrical Bessel Functions. - (line 37) -* gsl_sf_bessel_i1_scaled: Regular Modified Spherical Bessel Functions. - (line 16) -* gsl_sf_bessel_I1_scaled_e: Regular Modified Cylindrical Bessel Functions. - (line 38) -* gsl_sf_bessel_i1_scaled_e: Regular Modified Spherical Bessel Functions. - (line 17) -* gsl_sf_bessel_i2_scaled: Regular Modified Spherical Bessel Functions. - (line 22) -* gsl_sf_bessel_i2_scaled_e: Regular Modified Spherical Bessel Functions. - (line 23) -* gsl_sf_bessel_il_scaled: Regular Modified Spherical Bessel Functions. - (line 28) -* gsl_sf_bessel_il_scaled_array: Regular Modified Spherical Bessel Functions. - (line 34) -* gsl_sf_bessel_il_scaled_e: Regular Modified Spherical Bessel Functions. - (line 29) -* gsl_sf_bessel_In: Regular Modified Cylindrical Bessel Functions. - (line 16) -* gsl_sf_bessel_Inu: Regular Modified Bessel Functions - Fractional Order. - (line 6) -* gsl_sf_bessel_Inu_e: Regular Modified Bessel Functions - Fractional Order. - (line 7) -* gsl_sf_bessel_Inu_scaled: Regular Modified Bessel Functions - Fractional Order. - (line 12) -* gsl_sf_bessel_Inu_scaled_e: Regular Modified Bessel Functions - Fractional Order. - (line 13) -* gsl_sf_bessel_In_array: Regular Modified Cylindrical Bessel Functions. - (line 22) -* gsl_sf_bessel_In_e: Regular Modified Cylindrical Bessel Functions. - (line 17) -* gsl_sf_bessel_In_scaled: Regular Modified Cylindrical Bessel Functions. - (line 43) -* gsl_sf_bessel_In_scaled_array: Regular Modified Cylindrical Bessel Functions. - (line 49) -* gsl_sf_bessel_In_scaled_e: Regular Modified Cylindrical Bessel Functions. - (line 44) -* gsl_sf_bessel_J0: Regular Cylindrical Bessel Functions. - (line 6) -* gsl_sf_bessel_j0: Regular Spherical Bessel Functions. - (line 6) -* gsl_sf_bessel_J0_e: Regular Cylindrical Bessel Functions. - (line 7) -* gsl_sf_bessel_j0_e: Regular Spherical Bessel Functions. - (line 7) -* gsl_sf_bessel_J1: Regular Cylindrical Bessel Functions. - (line 11) -* gsl_sf_bessel_j1: Regular Spherical Bessel Functions. - (line 11) -* gsl_sf_bessel_J1_e: Regular Cylindrical Bessel Functions. - (line 12) -* gsl_sf_bessel_j1_e: Regular Spherical Bessel Functions. - (line 12) -* gsl_sf_bessel_j2: Regular Spherical Bessel Functions. - (line 16) -* gsl_sf_bessel_j2_e: Regular Spherical Bessel Functions. - (line 17) -* gsl_sf_bessel_jl: Regular Spherical Bessel Functions. - (line 21) -* gsl_sf_bessel_jl_array: Regular Spherical Bessel Functions. - (line 27) -* gsl_sf_bessel_jl_e: Regular Spherical Bessel Functions. - (line 22) -* gsl_sf_bessel_jl_steed_array: Regular Spherical Bessel Functions. - (line 35) -* gsl_sf_bessel_Jn: Regular Cylindrical Bessel Functions. - (line 16) -* gsl_sf_bessel_Jnu: Regular Bessel Function - Fractional Order. - (line 6) -* gsl_sf_bessel_Jnu_e: Regular Bessel Function - Fractional Order. - (line 7) -* gsl_sf_bessel_Jn_array: Regular Cylindrical Bessel Functions. - (line 22) -* gsl_sf_bessel_Jn_e: Regular Cylindrical Bessel Functions. - (line 17) -* gsl_sf_bessel_K0: Irregular Modified Cylindrical Bessel Functions. - (line 6) -* gsl_sf_bessel_K0_e: Irregular Modified Cylindrical Bessel Functions. - (line 7) -* gsl_sf_bessel_K0_scaled: Irregular Modified Cylindrical Bessel Functions. - (line 32) -* gsl_sf_bessel_k0_scaled: Irregular Modified Spherical Bessel Functions. - (line 10) -* gsl_sf_bessel_K0_scaled_e: Irregular Modified Cylindrical Bessel Functions. - (line 33) -* gsl_sf_bessel_k0_scaled_e: Irregular Modified Spherical Bessel Functions. - (line 11) -* gsl_sf_bessel_K1: Irregular Modified Cylindrical Bessel Functions. - (line 11) -* gsl_sf_bessel_K1_e: Irregular Modified Cylindrical Bessel Functions. - (line 12) -* gsl_sf_bessel_K1_scaled: Irregular Modified Cylindrical Bessel Functions. - (line 38) -* gsl_sf_bessel_k1_scaled: Irregular Modified Spherical Bessel Functions. - (line 16) -* gsl_sf_bessel_K1_scaled_e: Irregular Modified Cylindrical Bessel Functions. - (line 39) -* gsl_sf_bessel_k1_scaled_e: Irregular Modified Spherical Bessel Functions. - (line 17) -* gsl_sf_bessel_k2_scaled: Irregular Modified Spherical Bessel Functions. - (line 22) -* gsl_sf_bessel_k2_scaled_e: Irregular Modified Spherical Bessel Functions. - (line 23) -* gsl_sf_bessel_kl_scaled: Irregular Modified Spherical Bessel Functions. - (line 28) -* gsl_sf_bessel_kl_scaled_array: Irregular Modified Spherical Bessel Functions. - (line 34) -* gsl_sf_bessel_kl_scaled_e: Irregular Modified Spherical Bessel Functions. - (line 29) -* gsl_sf_bessel_Kn: Irregular Modified Cylindrical Bessel Functions. - (line 16) -* gsl_sf_bessel_Knu: Irregular Modified Bessel Functions - Fractional Order. - (line 6) -* gsl_sf_bessel_Knu_e: Irregular Modified Bessel Functions - Fractional Order. - (line 7) -* gsl_sf_bessel_Knu_scaled: Irregular Modified Bessel Functions - Fractional Order. - (line 19) -* gsl_sf_bessel_Knu_scaled_e: Irregular Modified Bessel Functions - Fractional Order. - (line 20) -* gsl_sf_bessel_Kn_array: Irregular Modified Cylindrical Bessel Functions. - (line 22) -* gsl_sf_bessel_Kn_e: Irregular Modified Cylindrical Bessel Functions. - (line 17) -* gsl_sf_bessel_Kn_scaled: Irregular Modified Cylindrical Bessel Functions. - (line 44) -* gsl_sf_bessel_Kn_scaled_array: Irregular Modified Cylindrical Bessel Functions. - (line 50) -* gsl_sf_bessel_Kn_scaled_e: Irregular Modified Cylindrical Bessel Functions. - (line 45) -* gsl_sf_bessel_lnKnu: Irregular Modified Bessel Functions - Fractional Order. - (line 12) -* gsl_sf_bessel_lnKnu_e: Irregular Modified Bessel Functions - Fractional Order. - (line 13) -* gsl_sf_bessel_sequence_Jnu_e: Regular Bessel Function - Fractional Order. - (line 12) -* gsl_sf_bessel_Y0: Irregular Cylindrical Bessel Functions. - (line 6) -* gsl_sf_bessel_y0: Irregular Spherical Bessel Functions. - (line 6) -* gsl_sf_bessel_Y0_e: Irregular Cylindrical Bessel Functions. - (line 7) -* gsl_sf_bessel_y0_e: Irregular Spherical Bessel Functions. - (line 7) -* gsl_sf_bessel_Y1: Irregular Cylindrical Bessel Functions. - (line 11) -* gsl_sf_bessel_y1: Irregular Spherical Bessel Functions. - (line 11) -* gsl_sf_bessel_Y1_e: Irregular Cylindrical Bessel Functions. - (line 12) -* gsl_sf_bessel_y1_e: Irregular Spherical Bessel Functions. - (line 12) -* gsl_sf_bessel_y2: Irregular Spherical Bessel Functions. - (line 16) -* gsl_sf_bessel_y2_e: Irregular Spherical Bessel Functions. - (line 17) -* gsl_sf_bessel_yl: Irregular Spherical Bessel Functions. - (line 21) -* gsl_sf_bessel_yl_array: Irregular Spherical Bessel Functions. - (line 27) -* gsl_sf_bessel_yl_e: Irregular Spherical Bessel Functions. - (line 22) -* gsl_sf_bessel_Yn: Irregular Cylindrical Bessel Functions. - (line 16) -* gsl_sf_bessel_Ynu: Irregular Bessel Functions - Fractional Order. - (line 6) -* gsl_sf_bessel_Ynu_e: Irregular Bessel Functions - Fractional Order. - (line 7) -* gsl_sf_bessel_Yn_array: Irregular Cylindrical Bessel Functions. - (line 22) -* gsl_sf_bessel_Yn_e: Irregular Cylindrical Bessel Functions. - (line 17) -* gsl_sf_bessel_zero_J0: Zeros of Regular Bessel Functions. - (line 6) -* gsl_sf_bessel_zero_J0_e: Zeros of Regular Bessel Functions. - (line 7) -* gsl_sf_bessel_zero_J1: Zeros of Regular Bessel Functions. - (line 12) -* gsl_sf_bessel_zero_J1_e: Zeros of Regular Bessel Functions. - (line 13) -* gsl_sf_bessel_zero_Jnu: Zeros of Regular Bessel Functions. - (line 18) -* gsl_sf_bessel_zero_Jnu_e: Zeros of Regular Bessel Functions. - (line 19) -* gsl_sf_beta: Beta Functions. (line 6) -* gsl_sf_beta_e: Beta Functions. (line 7) -* gsl_sf_beta_inc: Incomplete Beta Function. - (line 6) -* gsl_sf_beta_inc_e: Incomplete Beta Function. - (line 7) -* gsl_sf_Chi: Hyperbolic Integrals. - (line 11) -* gsl_sf_Chi_e: Hyperbolic Integrals. - (line 12) -* gsl_sf_choose: Factorials. (line 38) -* gsl_sf_choose_e: Factorials. (line 39) -* gsl_sf_Ci: Trigonometric Integrals. - (line 11) -* gsl_sf_Ci_e: Trigonometric Integrals. - (line 12) -* gsl_sf_clausen: Clausen Functions. (line 14) -* gsl_sf_clausen_e: Clausen Functions. (line 15) -* gsl_sf_complex_cos_e: Trigonometric Functions for Complex Arguments. - (line 11) -* gsl_sf_complex_dilog_e: Complex Argument. (line 6) -* gsl_sf_complex_logsin_e: Trigonometric Functions for Complex Arguments. - (line 16) -* gsl_sf_complex_log_e: Logarithm and Related Functions. - (line 19) -* gsl_sf_complex_sin_e: Trigonometric Functions for Complex Arguments. - (line 6) -* gsl_sf_conicalP_0: Conical Functions. (line 22) -* gsl_sf_conicalP_0_e: Conical Functions. (line 23) -* gsl_sf_conicalP_1: Conical Functions. (line 28) -* gsl_sf_conicalP_1_e: Conical Functions. (line 29) -* gsl_sf_conicalP_cyl_reg: Conical Functions. (line 41) -* gsl_sf_conicalP_cyl_reg_e: Conical Functions. (line 43) -* gsl_sf_conicalP_half: Conical Functions. (line 10) -* gsl_sf_conicalP_half_e: Conical Functions. (line 11) -* gsl_sf_conicalP_mhalf: Conical Functions. (line 16) -* gsl_sf_conicalP_mhalf_e: Conical Functions. (line 17) -* gsl_sf_conicalP_sph_reg: Conical Functions. (line 34) -* gsl_sf_conicalP_sph_reg_e: Conical Functions. (line 36) -* gsl_sf_cos: Circular Trigonometric Functions. - (line 10) -* gsl_sf_cos_e: Circular Trigonometric Functions. - (line 11) -* gsl_sf_cos_err_e: Trigonometric Functions With Error Estimates. - (line 13) -* gsl_sf_coulomb_CL_array: Coulomb Wave Function Normalization Constant. - (line 14) -* gsl_sf_coulomb_CL_e: Coulomb Wave Function Normalization Constant. - (line 9) -* gsl_sf_coulomb_wave_FGp_array: Coulomb Wave Functions. - (line 47) -* gsl_sf_coulomb_wave_FG_array: Coulomb Wave Functions. - (line 39) -* gsl_sf_coulomb_wave_FG_e: Coulomb Wave Functions. - (line 19) -* gsl_sf_coulomb_wave_F_array: Coulomb Wave Functions. - (line 33) -* gsl_sf_coulomb_wave_sphF_array: Coulomb Wave Functions. - (line 57) -* gsl_sf_coupling_3j: 3-j Symbols. (line 6) -* gsl_sf_coupling_3j_e: 3-j Symbols. (line 8) -* gsl_sf_coupling_6j: 6-j Symbols. (line 6) -* gsl_sf_coupling_6j_e: 6-j Symbols. (line 8) -* gsl_sf_coupling_9j: 9-j Symbols. (line 6) -* gsl_sf_coupling_9j_e: 9-j Symbols. (line 9) -* gsl_sf_dawson: Dawson Function. (line 11) -* gsl_sf_dawson_e: Dawson Function. (line 12) -* gsl_sf_debye_1: Debye Functions. (line 13) -* gsl_sf_debye_1_e: Debye Functions. (line 14) -* gsl_sf_debye_2: Debye Functions. (line 18) -* gsl_sf_debye_2_e: Debye Functions. (line 19) -* gsl_sf_debye_3: Debye Functions. (line 23) -* gsl_sf_debye_3_e: Debye Functions. (line 24) -* gsl_sf_debye_4: Debye Functions. (line 28) -* gsl_sf_debye_4_e: Debye Functions. (line 29) -* gsl_sf_debye_5: Debye Functions. (line 33) -* gsl_sf_debye_5_e: Debye Functions. (line 34) -* gsl_sf_debye_6: Debye Functions. (line 38) -* gsl_sf_debye_6_e: Debye Functions. (line 39) -* gsl_sf_dilog: Real Argument. (line 6) -* gsl_sf_dilog_e: Real Argument. (line 7) -* gsl_sf_doublefact: Factorials. (line 18) -* gsl_sf_doublefact_e: Factorials. (line 19) -* gsl_sf_ellint_D: Legendre Form of Incomplete Elliptic Integrals. - (line 34) -* gsl_sf_ellint_D_e: Legendre Form of Incomplete Elliptic Integrals. - (line 36) -* gsl_sf_ellint_E: Legendre Form of Incomplete Elliptic Integrals. - (line 15) -* gsl_sf_ellint_Ecomp: Legendre Form of Complete Elliptic Integrals. - (line 13) -* gsl_sf_ellint_Ecomp_e: Legendre Form of Complete Elliptic Integrals. - (line 14) -* gsl_sf_ellint_E_e: Legendre Form of Incomplete Elliptic Integrals. - (line 17) -* gsl_sf_ellint_F: Legendre Form of Incomplete Elliptic Integrals. - (line 6) -* gsl_sf_ellint_F_e: Legendre Form of Incomplete Elliptic Integrals. - (line 8) -* gsl_sf_ellint_Kcomp: Legendre Form of Complete Elliptic Integrals. - (line 6) -* gsl_sf_ellint_Kcomp_e: Legendre Form of Complete Elliptic Integrals. - (line 7) -* gsl_sf_ellint_P: Legendre Form of Incomplete Elliptic Integrals. - (line 24) -* gsl_sf_ellint_Pcomp: Legendre Form of Complete Elliptic Integrals. - (line 20) -* gsl_sf_ellint_Pcomp_e: Legendre Form of Complete Elliptic Integrals. - (line 22) -* gsl_sf_ellint_P_e: Legendre Form of Incomplete Elliptic Integrals. - (line 26) -* gsl_sf_ellint_RC: Carlson Forms. (line 6) -* gsl_sf_ellint_RC_e: Carlson Forms. (line 8) -* gsl_sf_ellint_RD: Carlson Forms. (line 13) -* gsl_sf_ellint_RD_e: Carlson Forms. (line 15) -* gsl_sf_ellint_RF: Carlson Forms. (line 20) -* gsl_sf_ellint_RF_e: Carlson Forms. (line 22) -* gsl_sf_ellint_RJ: Carlson Forms. (line 27) -* gsl_sf_ellint_RJ_e: Carlson Forms. (line 29) -* gsl_sf_elljac_e: Elliptic Functions (Jacobi). - (line 10) -* gsl_sf_erf: Error Function. (line 6) -* gsl_sf_erfc: Complementary Error Function. - (line 6) -* gsl_sf_erfc_e: Complementary Error Function. - (line 7) -* gsl_sf_erf_e: Error Function. (line 7) -* gsl_sf_erf_Q: Probability functions. - (line 14) -* gsl_sf_erf_Q_e: Probability functions. - (line 15) -* gsl_sf_erf_Z: Probability functions. - (line 9) -* gsl_sf_erf_Z_e: Probability functions. - (line 10) -* gsl_sf_eta: Eta Function. (line 12) -* gsl_sf_eta_e: Eta Function. (line 13) -* gsl_sf_eta_int: Eta Function. (line 8) -* gsl_sf_eta_int_e: Eta Function. (line 9) -* gsl_sf_exp: Exponential Function. - (line 6) -* gsl_sf_expint_3: Ei_3(x). (line 6) -* gsl_sf_expint_3_e: Ei_3(x). (line 7) -* gsl_sf_expint_E1: Exponential Integral. - (line 6) -* gsl_sf_expint_E1_e: Exponential Integral. - (line 7) -* gsl_sf_expint_E2: Exponential Integral. - (line 12) -* gsl_sf_expint_E2_e: Exponential Integral. - (line 13) -* gsl_sf_expint_Ei: Ei(x). (line 6) -* gsl_sf_expint_Ei_e: Ei(x). (line 7) -* gsl_sf_expint_En: Exponential Integral. - (line 19) -* gsl_sf_expint_En_e: Exponential Integral. - (line 20) -* gsl_sf_expm1: Relative Exponential Functions. - (line 6) -* gsl_sf_expm1_e: Relative Exponential Functions. - (line 7) -* gsl_sf_exprel: Relative Exponential Functions. - (line 11) -* gsl_sf_exprel_2: Relative Exponential Functions. - (line 18) -* gsl_sf_exprel_2_e: Relative Exponential Functions. - (line 19) -* gsl_sf_exprel_e: Relative Exponential Functions. - (line 12) -* gsl_sf_exprel_n: Relative Exponential Functions. - (line 25) -* gsl_sf_exprel_n_e: Relative Exponential Functions. - (line 26) -* gsl_sf_exp_e: Exponential Function. - (line 7) -* gsl_sf_exp_e10_e: Exponential Function. - (line 11) -* gsl_sf_exp_err_e: Exponentiation With Error Estimate. - (line 6) -* gsl_sf_exp_err_e10_e: Exponentiation With Error Estimate. - (line 10) -* gsl_sf_exp_mult: Exponential Function. - (line 18) -* gsl_sf_exp_mult_e: Exponential Function. - (line 19) -* gsl_sf_exp_mult_e10_e: Exponential Function. - (line 24) -* gsl_sf_exp_mult_err_e: Exponentiation With Error Estimate. - (line 16) -* gsl_sf_exp_mult_err_e10_e: Exponentiation With Error Estimate. - (line 21) -* gsl_sf_fact: Factorials. (line 11) -* gsl_sf_fact_e: Factorials. (line 12) -* gsl_sf_fermi_dirac_0: Complete Fermi-Dirac Integrals. - (line 19) -* gsl_sf_fermi_dirac_0_e: Complete Fermi-Dirac Integrals. - (line 20) -* gsl_sf_fermi_dirac_1: Complete Fermi-Dirac Integrals. - (line 25) -* gsl_sf_fermi_dirac_1_e: Complete Fermi-Dirac Integrals. - (line 26) -* gsl_sf_fermi_dirac_2: Complete Fermi-Dirac Integrals. - (line 31) -* gsl_sf_fermi_dirac_2_e: Complete Fermi-Dirac Integrals. - (line 32) -* gsl_sf_fermi_dirac_3half: Complete Fermi-Dirac Integrals. - (line 56) -* gsl_sf_fermi_dirac_3half_e: Complete Fermi-Dirac Integrals. - (line 57) -* gsl_sf_fermi_dirac_half: Complete Fermi-Dirac Integrals. - (line 50) -* gsl_sf_fermi_dirac_half_e: Complete Fermi-Dirac Integrals. - (line 51) -* gsl_sf_fermi_dirac_inc_0: Incomplete Fermi-Dirac Integrals. - (line 10) -* gsl_sf_fermi_dirac_inc_0_e: Incomplete Fermi-Dirac Integrals. - (line 11) -* gsl_sf_fermi_dirac_int: Complete Fermi-Dirac Integrals. - (line 37) -* gsl_sf_fermi_dirac_int_e: Complete Fermi-Dirac Integrals. - (line 38) -* gsl_sf_fermi_dirac_m1: Complete Fermi-Dirac Integrals. - (line 12) -* gsl_sf_fermi_dirac_m1_e: Complete Fermi-Dirac Integrals. - (line 13) -* gsl_sf_fermi_dirac_mhalf: Complete Fermi-Dirac Integrals. - (line 44) -* gsl_sf_fermi_dirac_mhalf_e: Complete Fermi-Dirac Integrals. - (line 45) -* gsl_sf_gamma: Gamma Functions. (line 14) -* gsl_sf_gammainv: Gamma Functions. (line 49) -* gsl_sf_gammainv_e: Gamma Functions. (line 50) -* gsl_sf_gammastar: Gamma Functions. (line 40) -* gsl_sf_gammastar_e: Gamma Functions. (line 41) -* gsl_sf_gamma_e: Gamma Functions. (line 15) -* gsl_sf_gamma_inc: Incomplete Gamma Functions. - (line 6) -* gsl_sf_gamma_inc_e: Incomplete Gamma Functions. - (line 7) -* gsl_sf_gamma_inc_P: Incomplete Gamma Functions. - (line 20) -* gsl_sf_gamma_inc_P_e: Incomplete Gamma Functions. - (line 21) -* gsl_sf_gamma_inc_Q: Incomplete Gamma Functions. - (line 13) -* gsl_sf_gamma_inc_Q_e: Incomplete Gamma Functions. - (line 14) -* gsl_sf_gegenpoly_1: Gegenbauer Functions. - (line 11) -* gsl_sf_gegenpoly_1_e: Gegenbauer Functions. - (line 14) -* gsl_sf_gegenpoly_2: Gegenbauer Functions. - (line 12) -* gsl_sf_gegenpoly_2_e: Gegenbauer Functions. - (line 16) -* gsl_sf_gegenpoly_3: Gegenbauer Functions. - (line 13) -* gsl_sf_gegenpoly_3_e: Gegenbauer Functions. - (line 18) -* gsl_sf_gegenpoly_array: Gegenbauer Functions. - (line 30) -* gsl_sf_gegenpoly_n: Gegenbauer Functions. - (line 23) -* gsl_sf_gegenpoly_n_e: Gegenbauer Functions. - (line 24) -* gsl_sf_hazard: Probability functions. - (line 27) -* gsl_sf_hazard_e: Probability functions. - (line 28) -* gsl_sf_hydrogenicR: Normalized Hydrogenic Bound States. - (line 12) -* gsl_sf_hydrogenicR_1: Normalized Hydrogenic Bound States. - (line 6) -* gsl_sf_hydrogenicR_1_e: Normalized Hydrogenic Bound States. - (line 7) -* gsl_sf_hydrogenicR_e: Normalized Hydrogenic Bound States. - (line 14) -* gsl_sf_hyperg_0F1: Hypergeometric Functions. - (line 10) -* gsl_sf_hyperg_0F1_e: Hypergeometric Functions. - (line 11) -* gsl_sf_hyperg_1F1: Hypergeometric Functions. - (line 21) -* gsl_sf_hyperg_1F1_e: Hypergeometric Functions. - (line 22) -* gsl_sf_hyperg_1F1_int: Hypergeometric Functions. - (line 15) -* gsl_sf_hyperg_1F1_int_e: Hypergeometric Functions. - (line 16) -* gsl_sf_hyperg_2F0: Hypergeometric Functions. - (line 85) -* gsl_sf_hyperg_2F0_e: Hypergeometric Functions. - (line 86) -* gsl_sf_hyperg_2F1: Hypergeometric Functions. - (line 51) -* gsl_sf_hyperg_2F1_conj: Hypergeometric Functions. - (line 63) -* gsl_sf_hyperg_2F1_conj_e: Hypergeometric Functions. - (line 65) -* gsl_sf_hyperg_2F1_conj_renorm: Hypergeometric Functions. - (line 77) -* gsl_sf_hyperg_2F1_conj_renorm_e: Hypergeometric Functions. - (line 79) -* gsl_sf_hyperg_2F1_e: Hypergeometric Functions. - (line 53) -* gsl_sf_hyperg_2F1_renorm: Hypergeometric Functions. - (line 70) -* gsl_sf_hyperg_2F1_renorm_e: Hypergeometric Functions. - (line 72) -* gsl_sf_hyperg_U: Hypergeometric Functions. - (line 39) -* gsl_sf_hyperg_U_e: Hypergeometric Functions. - (line 40) -* gsl_sf_hyperg_U_e10_e: Hypergeometric Functions. - (line 45) -* gsl_sf_hyperg_U_int: Hypergeometric Functions. - (line 27) -* gsl_sf_hyperg_U_int_e: Hypergeometric Functions. - (line 28) -* gsl_sf_hyperg_U_int_e10_e: Hypergeometric Functions. - (line 33) -* gsl_sf_hypot: Circular Trigonometric Functions. - (line 14) -* gsl_sf_hypot_e: Circular Trigonometric Functions. - (line 15) -* gsl_sf_hzeta: Hurwitz Zeta Function. - (line 9) -* gsl_sf_hzeta_e: Hurwitz Zeta Function. - (line 10) -* gsl_sf_laguerre_1: Laguerre Functions. (line 16) -* gsl_sf_laguerre_1_e: Laguerre Functions. (line 19) -* gsl_sf_laguerre_2: Laguerre Functions. (line 17) -* gsl_sf_laguerre_2_e: Laguerre Functions. (line 21) -* gsl_sf_laguerre_3: Laguerre Functions. (line 18) -* gsl_sf_laguerre_3_e: Laguerre Functions. (line 23) -* gsl_sf_laguerre_n: Laguerre Functions. (line 28) -* gsl_sf_laguerre_n_e: Laguerre Functions. (line 30) -* gsl_sf_lambert_W0: Lambert W Functions. (line 13) -* gsl_sf_lambert_W0_e: Lambert W Functions. (line 14) -* gsl_sf_lambert_Wm1: Lambert W Functions. (line 18) -* gsl_sf_lambert_Wm1_e: Lambert W Functions. (line 19) -* gsl_sf_legendre_array_size: Associated Legendre Polynomials and Spherical Harmonics. - (line 47) -* gsl_sf_legendre_H3d: Radial Functions for Hyperbolic Space. - (line 30) -* gsl_sf_legendre_H3d_0: Radial Functions for Hyperbolic Space. - (line 11) -* gsl_sf_legendre_H3d_0_e: Radial Functions for Hyperbolic Space. - (line 12) -* gsl_sf_legendre_H3d_1: Radial Functions for Hyperbolic Space. - (line 20) -* gsl_sf_legendre_H3d_1_e: Radial Functions for Hyperbolic Space. - (line 21) -* gsl_sf_legendre_H3d_array: Radial Functions for Hyperbolic Space. - (line 39) -* gsl_sf_legendre_H3d_e: Radial Functions for Hyperbolic Space. - (line 32) -* gsl_sf_legendre_P1: Legendre Polynomials. - (line 6) -* gsl_sf_legendre_P1_e: Legendre Polynomials. - (line 9) -* gsl_sf_legendre_P2: Legendre Polynomials. - (line 7) -* gsl_sf_legendre_P2_e: Legendre Polynomials. - (line 11) -* gsl_sf_legendre_P3: Legendre Polynomials. - (line 8) -* gsl_sf_legendre_P3_e: Legendre Polynomials. - (line 13) -* gsl_sf_legendre_Pl: Legendre Polynomials. - (line 18) -* gsl_sf_legendre_Plm: Associated Legendre Polynomials and Spherical Harmonics. - (line 17) -* gsl_sf_legendre_Plm_array: Associated Legendre Polynomials and Spherical Harmonics. - (line 23) -* gsl_sf_legendre_Plm_deriv_array: Associated Legendre Polynomials and Spherical Harmonics. - (line 25) -* gsl_sf_legendre_Plm_e: Associated Legendre Polynomials and Spherical Harmonics. - (line 18) -* gsl_sf_legendre_Pl_array: Legendre Polynomials. - (line 24) -* gsl_sf_legendre_Pl_deriv_array: Legendre Polynomials. - (line 26) -* gsl_sf_legendre_Pl_e: Legendre Polynomials. - (line 19) -* gsl_sf_legendre_Q0: Legendre Polynomials. - (line 32) -* gsl_sf_legendre_Q0_e: Legendre Polynomials. - (line 33) -* gsl_sf_legendre_Q1: Legendre Polynomials. - (line 38) -* gsl_sf_legendre_Q1_e: Legendre Polynomials. - (line 39) -* gsl_sf_legendre_Ql: Legendre Polynomials. - (line 44) -* gsl_sf_legendre_Ql_e: Legendre Polynomials. - (line 45) -* gsl_sf_legendre_sphPlm: Associated Legendre Polynomials and Spherical Harmonics. - (line 30) -* gsl_sf_legendre_sphPlm_array: Associated Legendre Polynomials and Spherical Harmonics. - (line 39) -* gsl_sf_legendre_sphPlm_deriv_array: Associated Legendre Polynomials and Spherical Harmonics. - (line 41) -* gsl_sf_legendre_sphPlm_e: Associated Legendre Polynomials and Spherical Harmonics. - (line 31) -* gsl_sf_lnbeta: Beta Functions. (line 13) -* gsl_sf_lnbeta_e: Beta Functions. (line 14) -* gsl_sf_lnchoose: Factorials. (line 44) -* gsl_sf_lnchoose_e: Factorials. (line 45) -* gsl_sf_lncosh: Hyperbolic Trigonometric Functions. - (line 10) -* gsl_sf_lncosh_e: Hyperbolic Trigonometric Functions. - (line 11) -* gsl_sf_lndoublefact: Factorials. (line 32) -* gsl_sf_lndoublefact_e: Factorials. (line 33) -* gsl_sf_lnfact: Factorials. (line 25) -* gsl_sf_lnfact_e: Factorials. (line 26) -* gsl_sf_lngamma: Gamma Functions. (line 22) -* gsl_sf_lngamma_complex_e: Gamma Functions. (line 54) -* gsl_sf_lngamma_e: Gamma Functions. (line 23) -* gsl_sf_lngamma_sgn_e: Gamma Functions. (line 30) -* gsl_sf_lnpoch: Pochhammer Symbol. (line 14) -* gsl_sf_lnpoch_e: Pochhammer Symbol. (line 15) -* gsl_sf_lnpoch_sgn_e: Pochhammer Symbol. (line 20) -* gsl_sf_lnsinh: Hyperbolic Trigonometric Functions. - (line 6) -* gsl_sf_lnsinh_e: Hyperbolic Trigonometric Functions. - (line 7) -* gsl_sf_log: Logarithm and Related Functions. - (line 10) -* gsl_sf_log_1plusx: Logarithm and Related Functions. - (line 25) -* gsl_sf_log_1plusx_e: Logarithm and Related Functions. - (line 26) -* gsl_sf_log_1plusx_mx: Logarithm and Related Functions. - (line 30) -* gsl_sf_log_1plusx_mx_e: Logarithm and Related Functions. - (line 31) -* gsl_sf_log_abs: Logarithm and Related Functions. - (line 14) -* gsl_sf_log_abs_e: Logarithm and Related Functions. - (line 15) -* gsl_sf_log_e: Logarithm and Related Functions. - (line 11) -* gsl_sf_log_erfc: Log Complementary Error Function. - (line 6) -* gsl_sf_log_erfc_e: Log Complementary Error Function. - (line 7) -* gsl_sf_mathieu_a: Mathieu Function Characteristic Values. - (line 6) -* gsl_sf_mathieu_alloc: Mathieu Function Workspace. - (line 10) -* gsl_sf_mathieu_a_array: Mathieu Function Characteristic Values. - (line 13) -* gsl_sf_mathieu_b: Mathieu Function Characteristic Values. - (line 8) -* gsl_sf_mathieu_b_array: Mathieu Function Characteristic Values. - (line 16) -* gsl_sf_mathieu_ce: Angular Mathieu Functions. - (line 6) -* gsl_sf_mathieu_ce_array: Angular Mathieu Functions. - (line 13) -* gsl_sf_mathieu_free: Mathieu Function Workspace. - (line 17) -* gsl_sf_mathieu_Mc: Radial Mathieu Functions. - (line 6) -* gsl_sf_mathieu_Mc_array: Radial Mathieu Functions. - (line 17) -* gsl_sf_mathieu_Ms: Radial Mathieu Functions. - (line 8) -* gsl_sf_mathieu_Ms_array: Radial Mathieu Functions. - (line 20) -* gsl_sf_mathieu_se: Angular Mathieu Functions. - (line 8) -* gsl_sf_mathieu_se_array: Angular Mathieu Functions. - (line 16) -* gsl_sf_multiply_e: Elementary Operations. - (line 10) -* gsl_sf_multiply_err_e: Elementary Operations. - (line 15) -* gsl_sf_poch: Pochhammer Symbol. (line 6) -* gsl_sf_pochrel: Pochhammer Symbol. (line 27) -* gsl_sf_pochrel_e: Pochhammer Symbol. (line 28) -* gsl_sf_poch_e: Pochhammer Symbol. (line 7) -* gsl_sf_polar_to_rect: Conversion Functions. - (line 6) -* gsl_sf_pow_int: Power Function. (line 10) -* gsl_sf_pow_int_e: Power Function. (line 11) -* gsl_sf_psi: Digamma Function. (line 11) -* gsl_sf_psi_1: Trigamma Function. (line 11) -* gsl_sf_psi_1piy: Digamma Function. (line 16) -* gsl_sf_psi_1piy_e: Digamma Function. (line 17) -* gsl_sf_psi_1_e: Trigamma Function. (line 12) -* gsl_sf_psi_1_int: Trigamma Function. (line 6) -* gsl_sf_psi_1_int_e: Trigamma Function. (line 7) -* gsl_sf_psi_e: Digamma Function. (line 12) -* gsl_sf_psi_int: Digamma Function. (line 6) -* gsl_sf_psi_int_e: Digamma Function. (line 7) -* gsl_sf_psi_n: Polygamma Function. (line 6) -* gsl_sf_psi_n_e: Polygamma Function. (line 7) -* gsl_sf_rect_to_polar: Conversion Functions. - (line 12) -* gsl_sf_Shi: Hyperbolic Integrals. - (line 6) -* gsl_sf_Shi_e: Hyperbolic Integrals. - (line 7) -* gsl_sf_Si: Trigonometric Integrals. - (line 6) -* gsl_sf_sin: Circular Trigonometric Functions. - (line 6) -* gsl_sf_sinc: Circular Trigonometric Functions. - (line 20) -* gsl_sf_sinc_e: Circular Trigonometric Functions. - (line 21) -* gsl_sf_sin_e: Circular Trigonometric Functions. - (line 7) -* gsl_sf_sin_err_e: Trigonometric Functions With Error Estimates. - (line 6) -* gsl_sf_Si_e: Trigonometric Integrals. - (line 7) -* gsl_sf_synchrotron_1: Synchrotron Functions. - (line 9) -* gsl_sf_synchrotron_1_e: Synchrotron Functions. - (line 10) -* gsl_sf_synchrotron_2: Synchrotron Functions. - (line 15) -* gsl_sf_synchrotron_2_e: Synchrotron Functions. - (line 16) -* gsl_sf_taylorcoeff: Factorials. (line 50) -* gsl_sf_taylorcoeff_e: Factorials. (line 51) -* gsl_sf_transport_2: Transport Functions. (line 10) -* gsl_sf_transport_2_e: Transport Functions. (line 11) -* gsl_sf_transport_3: Transport Functions. (line 15) -* gsl_sf_transport_3_e: Transport Functions. (line 16) -* gsl_sf_transport_4: Transport Functions. (line 20) -* gsl_sf_transport_4_e: Transport Functions. (line 21) -* gsl_sf_transport_5: Transport Functions. (line 25) -* gsl_sf_transport_5_e: Transport Functions. (line 26) -* gsl_sf_zeta: Riemann Zeta Function. - (line 14) -* gsl_sf_zetam1: Riemann Zeta Function Minus One. - (line 14) -* gsl_sf_zetam1_e: Riemann Zeta Function Minus One. - (line 15) -* gsl_sf_zetam1_int: Riemann Zeta Function Minus One. - (line 10) -* gsl_sf_zetam1_int_e: Riemann Zeta Function Minus One. - (line 11) -* gsl_sf_zeta_e: Riemann Zeta Function. - (line 15) -* gsl_sf_zeta_int: Riemann Zeta Function. - (line 9) -* gsl_sf_zeta_int_e: Riemann Zeta Function. - (line 10) -* GSL_SIGN: Testing the Sign of Numbers. - (line 6) -* gsl_siman_solve: Simulated Annealing functions. - (line 6) -* gsl_sort: Sorting vectors. (line 23) -* gsl_sort2: Sorting vectors. (line 28) -* gsl_sort_index: Sorting vectors. (line 44) -* gsl_sort_largest: Selecting the k smallest or largest elements. - (line 23) -* gsl_sort_largest_index: Selecting the k smallest or largest elements. - (line 49) -* gsl_sort_smallest: Selecting the k smallest or largest elements. - (line 16) -* gsl_sort_smallest_index: Selecting the k smallest or largest elements. - (line 41) -* gsl_sort_vector: Sorting vectors. (line 35) -* gsl_sort_vector2: Sorting vectors. (line 39) -* gsl_sort_vector_index: Sorting vectors. (line 54) -* gsl_sort_vector_largest: Selecting the k smallest or largest elements. - (line 32) -* gsl_sort_vector_largest_index: Selecting the k smallest or largest elements. - (line 59) -* gsl_sort_vector_smallest: Selecting the k smallest or largest elements. - (line 30) -* gsl_sort_vector_smallest_index: Selecting the k smallest or largest elements. - (line 57) -* gsl_spline_alloc: Higher-level Interface. - (line 13) -* gsl_spline_eval: Higher-level Interface. - (line 26) -* gsl_spline_eval_deriv: Higher-level Interface. - (line 31) -* gsl_spline_eval_deriv2: Higher-level Interface. - (line 36) -* gsl_spline_eval_deriv2_e: Higher-level Interface. - (line 38) -* gsl_spline_eval_deriv_e: Higher-level Interface. - (line 33) -* gsl_spline_eval_e: Higher-level Interface. - (line 28) -* gsl_spline_eval_integ: Higher-level Interface. - (line 41) -* gsl_spline_eval_integ_e: Higher-level Interface. - (line 43) -* gsl_spline_free: Higher-level Interface. - (line 19) -* gsl_spline_init: Higher-level Interface. - (line 16) -* gsl_spline_min_size: Higher-level Interface. - (line 23) -* gsl_spline_name: Higher-level Interface. - (line 21) -* gsl_stats_absdev: Absolute deviation. (line 6) -* gsl_stats_absdev_m: Absolute deviation. (line 19) -* gsl_stats_correlation: Correlation. (line 6) -* gsl_stats_covariance: Covariance. (line 6) -* gsl_stats_covariance_m: Covariance. (line 14) -* gsl_stats_kurtosis: Higher moments (skewness and kurtosis). - (line 29) -* gsl_stats_kurtosis_m_sd: Higher moments (skewness and kurtosis). - (line 40) -* gsl_stats_lag1_autocorrelation: Autocorrelation. (line 6) -* gsl_stats_lag1_autocorrelation_m: Autocorrelation. (line 15) -* gsl_stats_max: Maximum and Minimum values. - (line 12) -* gsl_stats_max_index: Maximum and Minimum values. - (line 37) -* gsl_stats_mean: Mean and standard deviation and variance. - (line 6) -* gsl_stats_median_from_sorted_data: Median and Percentiles. - (line 10) -* gsl_stats_min: Maximum and Minimum values. - (line 22) -* gsl_stats_minmax: Maximum and Minimum values. - (line 32) -* gsl_stats_minmax_index: Maximum and Minimum values. - (line 53) -* gsl_stats_min_index: Maximum and Minimum values. - (line 45) -* gsl_stats_quantile_from_sorted_data: Median and Percentiles. - (line 25) -* gsl_stats_sd: Mean and standard deviation and variance. - (line 44) -* gsl_stats_sd_m: Mean and standard deviation and variance. - (line 46) -* gsl_stats_sd_with_fixed_mean: Mean and standard deviation and variance. - (line 73) -* gsl_stats_skew: Higher moments (skewness and kurtosis). - (line 6) -* gsl_stats_skew_m_sd: Higher moments (skewness and kurtosis). - (line 19) -* gsl_stats_spearman: Correlation. (line 18) -* gsl_stats_tss: Mean and standard deviation and variance. - (line 52) -* gsl_stats_tss_m: Mean and standard deviation and variance. - (line 54) -* gsl_stats_variance: Mean and standard deviation and variance. - (line 18) -* gsl_stats_variance_m: Mean and standard deviation and variance. - (line 36) -* gsl_stats_variance_with_fixed_mean: Mean and standard deviation and variance. - (line 63) -* gsl_stats_wabsdev: Weighted Samples. (line 83) -* gsl_stats_wabsdev_m: Weighted Samples. (line 91) -* gsl_stats_wkurtosis: Weighted Samples. (line 110) -* gsl_stats_wkurtosis_m_sd: Weighted Samples. (line 116) -* gsl_stats_wmean: Weighted Samples. (line 14) -* gsl_stats_wsd: Weighted Samples. (line 42) -* gsl_stats_wsd_m: Weighted Samples. (line 48) -* gsl_stats_wsd_with_fixed_mean: Weighted Samples. (line 64) -* gsl_stats_wskew: Weighted Samples. (line 97) -* gsl_stats_wskew_m_sd: Weighted Samples. (line 103) -* gsl_stats_wtss: Weighted Samples. (line 71) -* gsl_stats_wtss_m: Weighted Samples. (line 73) -* gsl_stats_wvariance: Weighted Samples. (line 22) -* gsl_stats_wvariance_m: Weighted Samples. (line 36) -* gsl_stats_wvariance_with_fixed_mean: Weighted Samples. (line 53) -* gsl_strerror: Error Codes. (line 37) -* gsl_sum_levin_utrunc_accel: Acceleration functions without error estimation. - (line 32) -* gsl_sum_levin_utrunc_alloc: Acceleration functions without error estimation. - (line 22) -* gsl_sum_levin_utrunc_free: Acceleration functions without error estimation. - (line 28) -* gsl_sum_levin_u_accel: Acceleration functions. - (line 31) -* gsl_sum_levin_u_alloc: Acceleration functions. - (line 23) -* gsl_sum_levin_u_free: Acceleration functions. - (line 28) -* gsl_vector_add: Vector operations. (line 6) -* gsl_vector_add_constant: Vector operations. (line 32) -* gsl_vector_alloc: Vector allocation. (line 14) -* gsl_vector_calloc: Vector allocation. (line 21) -* gsl_vector_complex_const_imag: Vector views. (line 108) -* gsl_vector_complex_const_real: Vector views. (line 97) -* gsl_vector_complex_imag: Vector views. (line 106) -* gsl_vector_complex_real: Vector views. (line 95) -* gsl_vector_const_ptr: Accessing vector elements. - (line 52) -* gsl_vector_const_subvector: Vector views. (line 29) -* gsl_vector_const_subvector_with_stride: Vector views. (line 59) -* gsl_vector_const_view_array: Vector views. (line 119) -* gsl_vector_const_view_array_with_stride: Vector views. (line 142) -* gsl_vector_div: Vector operations. (line 23) -* gsl_vector_equal: Vector properties. (line 18) -* gsl_vector_fprintf: Reading and writing vectors. - (line 26) -* gsl_vector_fread: Reading and writing vectors. - (line 17) -* gsl_vector_free: Vector allocation. (line 25) -* gsl_vector_fscanf: Reading and writing vectors. - (line 34) -* gsl_vector_fwrite: Reading and writing vectors. - (line 9) -* gsl_vector_get: Accessing vector elements. - (line 39) -* gsl_vector_isneg: Vector properties. (line 12) -* gsl_vector_isnonneg: Vector properties. (line 13) -* gsl_vector_isnull: Vector properties. (line 10) -* gsl_vector_ispos: Vector properties. (line 11) -* gsl_vector_max: Finding maximum and minimum elements of vectors. - (line 8) -* gsl_vector_max_index: Finding maximum and minimum elements of vectors. - (line 19) -* gsl_vector_memcpy: Copying vectors. (line 12) -* gsl_vector_min: Finding maximum and minimum elements of vectors. - (line 11) -* gsl_vector_minmax: Finding maximum and minimum elements of vectors. - (line 14) -* gsl_vector_minmax_index: Finding maximum and minimum elements of vectors. - (line 29) -* gsl_vector_min_index: Finding maximum and minimum elements of vectors. - (line 24) -* gsl_vector_mul: Vector operations. (line 17) -* gsl_vector_ptr: Accessing vector elements. - (line 51) -* gsl_vector_reverse: Exchanging elements. (line 14) -* gsl_vector_scale: Vector operations. (line 28) -* gsl_vector_set: Accessing vector elements. - (line 45) -* gsl_vector_set_all: Initializing vector elements. - (line 6) -* gsl_vector_set_basis: Initializing vector elements. - (line 12) -* gsl_vector_set_zero: Initializing vector elements. - (line 9) -* gsl_vector_sub: Vector operations. (line 11) -* gsl_vector_subvector: Vector views. (line 27) -* gsl_vector_subvector_with_stride: Vector views. (line 57) -* gsl_vector_swap: Copying vectors. (line 17) -* gsl_vector_swap_elements: Exchanging elements. (line 9) -* gsl_vector_view_array: Vector views. (line 117) -* gsl_vector_view_array_with_stride: Vector views. (line 140) -* gsl_wavelet2d_nstransform: DWT in two dimension. - (line 64) -* gsl_wavelet2d_nstransform_forward: DWT in two dimension. - (line 67) -* gsl_wavelet2d_nstransform_inverse: DWT in two dimension. - (line 70) -* gsl_wavelet2d_nstransform_matrix: DWT in two dimension. - (line 76) -* gsl_wavelet2d_nstransform_matrix_forward: DWT in two dimension. - (line 79) -* gsl_wavelet2d_nstransform_matrix_inverse: DWT in two dimension. - (line 81) -* gsl_wavelet2d_transform: DWT in two dimension. - (line 29) -* gsl_wavelet2d_transform_forward: DWT in two dimension. - (line 32) -* gsl_wavelet2d_transform_inverse: DWT in two dimension. - (line 35) -* gsl_wavelet2d_transform_matrix: DWT in two dimension. - (line 54) -* gsl_wavelet2d_transform_matrix_forward: DWT in two dimension. - (line 57) -* gsl_wavelet2d_transform_matrix_inverse: DWT in two dimension. - (line 59) -* gsl_wavelet_alloc: DWT Initialization. (line 9) -* gsl_wavelet_bspline: DWT Initialization. (line 29) -* gsl_wavelet_bspline_centered: DWT Initialization. (line 30) -* gsl_wavelet_daubechies: DWT Initialization. (line 18) -* gsl_wavelet_daubechies_centered: DWT Initialization. (line 19) -* gsl_wavelet_free: DWT Initialization. (line 44) -* gsl_wavelet_haar: DWT Initialization. (line 24) -* gsl_wavelet_haar_centered: DWT Initialization. (line 25) -* gsl_wavelet_name: DWT Initialization. (line 40) -* gsl_wavelet_transform: DWT in one dimension. - (line 6) -* gsl_wavelet_transform_forward: DWT in one dimension. - (line 9) -* gsl_wavelet_transform_inverse: DWT in one dimension. - (line 12) -* gsl_wavelet_workspace_alloc: DWT Initialization. (line 51) -* gsl_wavelet_workspace_free: DWT Initialization. (line 61) + return 0; + } Binary files /tmp/tmpaGJtBH/yWoPyTywe5/gsl-doc-1.16/doc/gsl-ref.info-5 and /tmp/tmpaGJtBH/lZqC_hJ65y/gsl-doc-2.3/doc/gsl-ref.info-5 differ Binary files /tmp/tmpaGJtBH/yWoPyTywe5/gsl-doc-1.16/doc/gsl-ref.info-6 and /tmp/tmpaGJtBH/lZqC_hJ65y/gsl-doc-2.3/doc/gsl-ref.info-6 differ diff -Nru gsl-doc-1.16/doc/gsl-ref.texi gsl-doc-2.3/doc/gsl-ref.texi --- gsl-doc-1.16/doc/gsl-ref.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/gsl-ref.texi 2016-08-29 15:35:25.000000000 +0000 @@ -125,13 +125,19 @@ @set GSL @i{GNU Scientific Library} @copying -Copyright @copyright{} 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The GSL Team. +Copyright @copyright{} 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 The GSL Team. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or -any later version published by the Free Software Foundation; with no -Invariant Sections and no cover texts. A copy of the license is -included in the section entitled ``GNU Free Documentation License''. +any later version published by the Free Software Foundation; with the +Invariant Sections being ``GNU General Public License'' and ``Free Software +Needs Free Documentation'', the Front-Cover text being ``A GNU Manual'', +and with the Back-Cover Text being (a) (see below). A copy of the +license is included in the section entitled ``GNU Free Documentation +License''. + +(a) The Back-Cover Text is: ``You have the freedom to copy and modify this +GNU Manual.'' @end copying @titlepage @@ -251,6 +257,7 @@ * Quasi-Random Sequences:: * Random Number Distributions:: * Statistics:: +* Running Statistics:: * Histograms:: * N-tuples:: * Monte Carlo Integration:: @@ -268,7 +275,10 @@ * Multidimensional Minimization:: * Least-Squares Fitting:: * Nonlinear Least-Squares Fitting:: -* Basis Splines:: +* Basis Splines:: +* Sparse Matrices:: +* Sparse BLAS Support:: +* Sparse Linear Algebra:: * Physical Constants:: * IEEE floating-point arithmetic:: * Debugging Numerical Programs:: @@ -365,11 +375,15 @@ @chapter Random Number Distributions @include randist.texi -@node Statistics, Histograms, Random Number Distributions, Top +@node Statistics, Running Statistics, Random Number Distributions, Top @chapter Statistics @include statistics.texi -@node Histograms, N-tuples, Statistics, Top +@node Running Statistics, Histograms, Statistics, Top +@chapter Running Statistics +@include rstat.texi + +@node Histograms, N-tuples, Running Statistics, Top @chapter Histograms @include histogram.texi @@ -435,13 +449,25 @@ @node Nonlinear Least-Squares Fitting, Basis Splines, Least-Squares Fitting, Top @chapter Nonlinear Least-Squares Fitting -@include multifit.texi +@include multifit-nlinear.texi -@node Basis Splines, Physical Constants, Nonlinear Least-Squares Fitting, Top +@node Basis Splines, Sparse Matrices, Nonlinear Least-Squares Fitting, Top @chapter Basis Splines @include bspline.texi -@node Physical Constants, IEEE floating-point arithmetic, Basis Splines, Top +@node Sparse Matrices, Sparse BLAS Support, Basis Splines, Top +@chapter Sparse Matrices +@include spmatrix.texi + +@node Sparse BLAS Support, Sparse Linear Algebra, Sparse Matrices, Top +@chapter Sparse BLAS Support +@include spblas.texi + +@node Sparse Linear Algebra, Physical Constants, Sparse BLAS Support, Top +@chapter Sparse Linear Algebra +@include splinalg.texi + +@node Physical Constants, IEEE floating-point arithmetic, Sparse Linear Algebra, Top @chapter Physical Constants @include const.texi @@ -529,7 +555,7 @@ @item Patrick Alken Implementation of nonsymmetric and generalized eigensystems, B-splines, -and robust linear regression. +robust linear regression, and sparse matrices. @item Rhys Ulerich Wrote the multiset routines. diff -Nru gsl-doc-1.16/doc/ieee754.texi gsl-doc-2.3/doc/ieee754.texi --- gsl-doc-1.16/doc/ieee754.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/ieee754.texi 2015-11-03 16:21:55.000000000 +0000 @@ -232,7 +232,7 @@ function @code{gsl_ieee_env_setup}. @deftypefun void gsl_ieee_env_setup () -@vrindex @env{GSL_IEEE_MODE} +@vindex @env{GSL_IEEE_MODE} This function reads the environment variable @code{GSL_IEEE_MODE} and attempts to set up the corresponding specified IEEE modes. The environment variable should be a list of keywords, separated by diff -Nru gsl-doc-1.16/doc/integration.texi gsl-doc-2.3/doc/integration.texi --- gsl-doc-1.16/doc/integration.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/integration.texi 2015-11-09 05:23:40.000000000 +0000 @@ -227,7 +227,7 @@ estimates. @deftypefun {gsl_integration_workspace *} gsl_integration_workspace_alloc (size_t @var{n}) -@tpindex gsl_integration_workspace +@tindex gsl_integration_workspace This function allocates a workspace sufficient to hold @var{n} double precision intervals, their integration results and error estimates. One workspace may be used multiple times as all necessary reinitialization @@ -462,7 +462,7 @@ Chebyshev moments. @deftypefun {gsl_integration_qaws_table *} gsl_integration_qaws_table_alloc (double @var{alpha}, double @var{beta}, int @var{mu}, int @var{nu}) -@tpindex gsl_integration_qaws_table +@tindex gsl_integration_qaws_table This function allocates space for a @code{gsl_integration_qaws_table} struct describing a singular weight function @math{W(x)} with the parameters @math{(\alpha, \beta, \mu, \nu)}, @@ -571,7 +571,7 @@ which must be pre-computed with calls to the functions below. @deftypefun {gsl_integration_qawo_table *} gsl_integration_qawo_table_alloc (double @var{omega}, double @var{L}, enum gsl_integration_qawo_enum @var{sine}, size_t @var{n}) -@tpindex gsl_integration_qawo_table +@tindex gsl_integration_qawo_table This function allocates space for a @code{gsl_integration_qawo_table} struct and its associated workspace describing a sine or cosine weight function @math{W(x)} with the parameters @math{(\omega, L)}, @@ -802,7 +802,7 @@ rules is too large or a rule of maximum degree has been reached. @deftypefun {gsl_integration_cquad_workspace *} gsl_integration_cquad_workspace_alloc (size_t @var{n}) -@tpindex gsl_integration_cquad_workspace +@tindex gsl_integration_cquad_workspace This function allocates a workspace sufficient to hold the data for @var{n} intervals. The number @var{n} is not the maximum number of intervals that will be evaluated. If the workspace is full, intervals @@ -853,7 +853,7 @@ absolute or relative error bounds. @deftypefun {gsl_integration_glfixed_table *} gsl_integration_glfixed_table_alloc (size_t @var{n}) -@tpindex gsl_integration_glfixed_table +@tindex gsl_integration_glfixed_table This function determines the Gauss-Legendre abscissae and weights necessary for an @math{n}-point fixed order integration scheme. If possible, high precision precomputed coefficients are used. If precomputed weights are not available, @@ -874,7 +874,7 @@ @end deftypefun @deftypefun void gsl_integration_glfixed_table_free ({gsl_integration_glfixed_table *} @var{t}) -@tpindex gsl_integration_glfixed_table +@tindex gsl_integration_glfixed_table This function frees the memory associated with the table @var{t}. @end deftypefun @@ -932,7 +932,7 @@ @example $ ./a.out -@verbatiminclude examples/integration.out +@verbatiminclude examples/integration.txt @end example @noindent diff -Nru gsl-doc-1.16/doc/interp2d.eps gsl-doc-2.3/doc/interp2d.eps --- gsl-doc-1.16/doc/interp2d.eps 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/interp2d.eps 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,10717 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: interp2d.eps +%%Creator: gnuplot 4.6 patchlevel 5 +%%CreationDate: Thu May 1 10:20:59 2014 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 410 302 +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color true def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -46 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 410 50 lineto 410 302 lineto 50 302 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.6 (September 2012) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse + clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title (interp2d.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 5) + /Author (palken) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu May 1 10:20:59 2014) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.050 0.050 scale +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 7200.00 5040.00 BoxColFill} if +gsave % colour palette begin +/maxcolors 0 def +/HSV2RGB { exch dup 0.0 eq {pop exch pop dup dup} % achromatic gray + { /HSVs exch def /HSVv exch def 6.0 mul dup floor dup 3 1 roll sub + /HSVf exch def /HSVi exch cvi def /HSVp HSVv 1.0 HSVs sub mul def + /HSVq HSVv 1.0 HSVs HSVf mul sub mul def + /HSVt HSVv 1.0 HSVs 1.0 HSVf sub mul sub mul def + /HSVi HSVi 6 mod def 0 HSVi eq {HSVv HSVt HSVp} + {1 HSVi eq {HSVq HSVv HSVp}{2 HSVi eq {HSVp HSVv HSVt} + {3 HSVi eq {HSVp HSVq HSVv}{4 HSVi eq {HSVt HSVp HSVv} + {HSVv HSVp HSVq} ifelse} ifelse} ifelse} ifelse} ifelse + } ifelse} def +/Constrain { + dup 0 lt {0 exch pop}{dup 1 gt {1 exch pop} if} ifelse} def +/YIQ2RGB { + 3 copy -1.702 mul exch -1.105 mul add add Constrain 4 1 roll + 3 copy -0.647 mul exch -0.272 mul add add Constrain 5 1 roll + 0.621 mul exch -0.956 mul add add Constrain 3 1 roll } def +/CMY2RGB { 1 exch sub exch 1 exch sub 3 2 roll 1 exch sub 3 1 roll exch } def +/XYZ2RGB { 3 copy -0.9017 mul exch -0.1187 mul add exch 0.0585 mul exch add + Constrain 4 1 roll 3 copy -0.0279 mul exch 1.999 mul add exch + -0.9844 mul add Constrain 5 1 roll -0.2891 mul exch -0.5338 mul add + exch 1.91 mul exch add Constrain 3 1 roll} def +/SelectSpace {ColorSpace (HSV) eq {HSV2RGB}{ColorSpace (XYZ) eq { + XYZ2RGB}{ColorSpace (CMY) eq {CMY2RGB}{ColorSpace (YIQ) eq {YIQ2RGB} + if} ifelse} ifelse} ifelse} def +/InterpolatedColor true def +/grayindex {/gidx 0 def + {GrayA gidx get grayv ge {exit} if /gidx gidx 1 add def} loop} def +/dgdx {grayv GrayA gidx get sub GrayA gidx 1 sub get + GrayA gidx get sub div} def +/redvalue {RedA gidx get RedA gidx 1 sub get + RedA gidx get sub dgdxval mul add} def +/greenvalue {GreenA gidx get GreenA gidx 1 sub get + GreenA gidx get sub dgdxval mul add} def +/bluevalue {BlueA gidx get BlueA gidx 1 sub get + BlueA gidx get sub dgdxval mul add} def +/interpolate { + grayindex grayv GrayA gidx get sub abs 1e-5 le + {RedA gidx get GreenA gidx get BlueA gidx get} + {/dgdxval dgdx def redvalue greenvalue bluevalue} ifelse} def +/GrayA [0 .125 .25 .375 .5 .625 .75 .875 1 ] def +/RedA [0 0 0 .0588 .5647 1 1 .9333 .498 ] def +/GreenA [0 .0588 .5647 1 1 .9333 .4392 0 0 ] def +/BlueA [.5647 1 1 .9333 .4392 0 0 0 0 ] def +/pm3dround {maxcolors 0 gt {dup 1 ge + {pop 1} {maxcolors mul floor maxcolors 1 sub div} ifelse} if} def +/pm3dGamma 1.0 1.5 Gamma mul div def +/ColorSpace (RGB) def +Color InterpolatedColor or { % COLOUR vs. GRAY map + InterpolatedColor { %% Interpolation vs. RGB-Formula + /g {stroke pm3dround /grayv exch def interpolate + SelectSpace setrgbcolor} bind def + }{ + /g {stroke pm3dround dup cF7 Constrain exch dup cF5 Constrain exch cF15 Constrain + SelectSpace setrgbcolor} bind def + } ifelse +}{ + /g {stroke pm3dround pm3dGamma exp setgray} bind def +} ifelse +1.000 UL +LTb +LCb setrgbcolor +1.000 UP +% Begin plot #1 +LCb setrgbcolor +/Helvetica findfont 140 scalefont setfont +/vshift -46 def +5535 3979 M +('dat' us 1:2:3) Rshow +1.000 UL +LT0 +LC0 setrgbcolor +%pm3d_map_begin +1.000 UL +LT0 +LC0 setrgbcolor +.0101 g 1098 928 N -51 0 0 33 51 0 h +.0201 g 1098 961 N -51 0 0 34 51 0 h +.0301 g 1098 995 N -51 0 0 34 51 0 h +.0401 g 1098 1029 N -51 0 0 33 51 0 h +.0502 g 1098 1062 N -51 0 0 34 51 0 h +.0602 g 1098 1096 N -51 0 0 33 51 0 h +.0702 g 1098 1129 N -51 0 0 34 51 0 h +.0802 g 1098 1163 N -51 0 0 34 51 0 h +.0903 g 1098 1197 N -51 0 0 33 51 0 h +.1003 g 1098 1230 N -51 0 0 34 51 0 h +.1103 g 1098 1264 N -51 0 0 33 51 0 h +.1203 g 1098 1297 N -51 0 0 34 51 0 h +.1304 g 1098 1331 N -51 0 0 33 51 0 h +.1404 g 1098 1364 N -51 0 0 34 51 0 h +.1504 g 1098 1398 N -51 0 0 34 51 0 h +.1604 g 1098 1432 N -51 0 0 33 51 0 h +.1705 g 1098 1465 N -51 0 0 34 51 0 h +.1805 g 1098 1499 N -51 0 0 33 51 0 h +.1905 g 1098 1532 N -51 0 0 34 51 0 h +.2005 g 1098 1566 N -51 0 0 34 51 0 h +.2106 g 1098 1600 N -51 0 0 33 51 0 h +.2206 g 1098 1633 N -51 0 0 34 51 0 h +.2306 g 1098 1667 N -51 0 0 33 51 0 h +.2406 g 1098 1700 N -51 0 0 34 51 0 h +.2507 g 1098 1734 N -51 0 0 34 51 0 h +.2607 g 1098 1768 N -51 0 0 33 51 0 h +.2707 g 1098 1801 N -51 0 0 34 51 0 h +.2807 g 1098 1835 N -51 0 0 33 51 0 h +.2907 g 1098 1868 N -51 0 0 34 51 0 h +.3008 g 1098 1902 N -51 0 0 33 51 0 h +.3108 g 1098 1935 N -51 0 0 34 51 0 h +.3208 g 1098 1969 N -51 0 0 34 51 0 h +.3308 g 1098 2003 N -51 0 0 33 51 0 h +.3409 g 1098 2036 N -51 0 0 34 51 0 h +.3509 g 1098 2070 N -51 0 0 33 51 0 h +.3609 g 1098 2103 N -51 0 0 34 51 0 h +.3709 g 1098 2137 N -51 0 0 34 51 0 h +.381 g 1098 2171 N -51 0 0 33 51 0 h +.391 g 1098 2204 N -51 0 0 34 51 0 h +.401 g 1098 2238 N -51 0 0 33 51 0 h +.411 g 1098 2271 N -51 0 0 34 51 0 h +.4211 g 1098 2305 N -51 0 0 34 51 0 h +.4311 g 1098 2339 N -51 0 0 33 51 0 h +.4411 g 1098 2372 N -51 0 0 34 51 0 h +.4511 g 1098 2406 N -51 0 0 33 51 0 h +.4612 g 1098 2439 N -51 0 0 34 51 0 h +.4712 g 1098 2473 N -51 0 0 34 51 0 h +.4812 g 1098 2507 N -51 0 0 33 51 0 h +.4912 g 1098 2540 N -51 0 0 34 51 0 h +.5013 g 1098 2574 N -51 0 0 32 51 0 h +.5113 g 1098 2606 N -51 0 0 34 51 0 h +.5213 g 1098 2640 N -51 0 0 33 51 0 h +.5313 g 1098 2673 N -51 0 0 34 51 0 h +.5414 g 1098 2707 N -51 0 0 34 51 0 h +.5514 g 1098 2741 N -51 0 0 33 51 0 h +.5614 g 1098 2774 N -51 0 0 34 51 0 h +.5714 g 1098 2808 N -51 0 0 33 51 0 h +.5815 g 1098 2841 N -51 0 0 34 51 0 h +.5915 g 1098 2875 N -51 0 0 34 51 0 h +.6015 g 1098 2909 N -51 0 0 33 51 0 h +.6115 g 1098 2942 N -51 0 0 34 51 0 h +.6216 g 1098 2976 N -51 0 0 33 51 0 h +.6316 g 1098 3009 N -51 0 0 34 51 0 h +.6416 g 1098 3043 N -51 0 0 34 51 0 h +.6516 g 1098 3077 N -51 0 0 33 51 0 h +.6617 g 1098 3110 N -51 0 0 34 51 0 h +.6717 g 1098 3144 N -51 0 0 33 51 0 h +.6817 g 1098 3177 N -51 0 0 34 51 0 h +.6917 g 1098 3211 N -51 0 0 34 51 0 h +.7018 g 1098 3245 N -51 0 0 33 51 0 h +.7118 g 1098 3278 N -51 0 0 34 51 0 h +.7218 g 1098 3312 N -51 0 0 33 51 0 h +.7318 g 1098 3345 N -51 0 0 34 51 0 h +.7419 g 1098 3379 N -51 0 0 33 51 0 h +.7519 g 1098 3412 N -51 0 0 34 51 0 h +.7619 g 1098 3446 N -51 0 0 34 51 0 h +.7719 g 1098 3480 N -51 0 0 33 51 0 h +.7819 g 1098 3513 N -51 0 0 34 51 0 h +.792 g 1098 3547 N -51 0 0 33 51 0 h +.802 g 1098 3580 N -51 0 0 34 51 0 h +.812 g 1098 3614 N -51 0 0 34 51 0 h +.822 g 1098 3648 N -51 0 0 33 51 0 h +.8321 g 1098 3681 N -51 0 0 34 51 0 h +.8421 g 1098 3715 N -51 0 0 33 51 0 h +.8521 g 1098 3748 N -51 0 0 34 51 0 h +.8621 g 1098 3782 N -51 0 0 34 51 0 h +.8722 g 1098 3816 N -51 0 0 33 51 0 h +.8822 g 1098 3849 N -51 0 0 34 51 0 h +.8922 g 1098 3883 N -51 0 0 33 51 0 h +.9022 g 1098 3916 N -51 0 0 34 51 0 h +.9123 g 1098 3950 N -51 0 0 33 51 0 h +.9223 g 1098 3983 N -51 0 0 34 51 0 h +.9323 g 1098 4017 N -51 0 0 34 51 0 h +.9423 g 1098 4051 N -51 0 0 33 51 0 h +.9524 g 1098 4084 N -51 0 0 34 51 0 h +.9624 g 1098 4118 N -51 0 0 33 51 0 h +.9724 g 1098 4151 N -51 0 0 34 51 0 h +.9824 g 1098 4185 N -51 0 0 34 51 0 h +.9925 g 1098 4219 N -51 0 0 33 51 0 h +.0201 g 1149 928 N -50 0 0 33 50 0 h +.03 g 1149 961 N -50 0 0 34 50 0 h +.0398 g 1149 995 N -50 0 0 34 50 0 h +.0497 g 1149 1029 N -50 0 0 33 50 0 h +.0596 g 1149 1062 N -50 0 0 34 50 0 h +.0694 g 1149 1096 N -50 0 0 33 50 0 h +.0793 g 1149 1129 N -50 0 0 34 50 0 h +.0892 g 1149 1163 N -50 0 0 34 50 0 h +.0991 g 1149 1197 N -50 0 0 33 50 0 h +.1089 g 1149 1230 N -50 0 0 34 50 0 h +.1188 g 1149 1264 N -50 0 0 33 50 0 h +.1287 g 1149 1297 N -50 0 0 34 50 0 h +.1385 g 1149 1331 N -50 0 0 33 50 0 h +.1484 g 1149 1364 N -50 0 0 34 50 0 h +.1583 g 1149 1398 N -50 0 0 34 50 0 h +.1682 g 1149 1432 N -50 0 0 33 50 0 h +.178 g 1149 1465 N -50 0 0 34 50 0 h +.1879 g 1149 1499 N -50 0 0 33 50 0 h +.1978 g 1149 1532 N -50 0 0 34 50 0 h +.2076 g 1149 1566 N -50 0 0 34 50 0 h +.2175 g 1149 1600 N -50 0 0 33 50 0 h +.2274 g 1149 1633 N -50 0 0 34 50 0 h +.2373 g 1149 1667 N -50 0 0 33 50 0 h +.2471 g 1149 1700 N -50 0 0 34 50 0 h +.257 g 1149 1734 N -50 0 0 34 50 0 h +.2669 g 1149 1768 N -50 0 0 33 50 0 h +.2767 g 1149 1801 N -50 0 0 34 50 0 h +.2866 g 1149 1835 N -50 0 0 33 50 0 h +.2965 g 1149 1868 N -50 0 0 34 50 0 h +.3064 g 1149 1902 N -50 0 0 33 50 0 h +.3162 g 1149 1935 N -50 0 0 34 50 0 h +.3261 g 1149 1969 N -50 0 0 34 50 0 h +.336 g 1149 2003 N -50 0 0 33 50 0 h +.3458 g 1149 2036 N -50 0 0 34 50 0 h +.3557 g 1149 2070 N -50 0 0 33 50 0 h +.3656 g 1149 2103 N -50 0 0 34 50 0 h +.3755 g 1149 2137 N -50 0 0 34 50 0 h +.3853 g 1149 2171 N -50 0 0 33 50 0 h +.3952 g 1149 2204 N -50 0 0 34 50 0 h +.4051 g 1149 2238 N -50 0 0 33 50 0 h +.4149 g 1149 2271 N -50 0 0 34 50 0 h +.4248 g 1149 2305 N -50 0 0 34 50 0 h +.4347 g 1149 2339 N -50 0 0 33 50 0 h +.4446 g 1149 2372 N -50 0 0 34 50 0 h +.4544 g 1149 2406 N -50 0 0 33 50 0 h +.4643 g 1149 2439 N -50 0 0 34 50 0 h +.4742 g 1149 2473 N -50 0 0 34 50 0 h +.484 g 1149 2507 N -50 0 0 33 50 0 h +.4939 g 1149 2540 N -50 0 0 34 50 0 h +.5038 g 1149 2574 N -50 0 0 32 50 0 h +.5137 g 1149 2606 N -50 0 0 34 50 0 h +.5235 g 1149 2640 N -50 0 0 33 50 0 h +.5334 g 1149 2673 N -50 0 0 34 50 0 h +.5433 g 1149 2707 N -50 0 0 34 50 0 h +.5531 g 1149 2741 N -50 0 0 33 50 0 h +.563 g 1149 2774 N -50 0 0 34 50 0 h +.5729 g 1149 2808 N -50 0 0 33 50 0 h +.5828 g 1149 2841 N -50 0 0 34 50 0 h +.5926 g 1149 2875 N -50 0 0 34 50 0 h +.6025 g 1149 2909 N -50 0 0 33 50 0 h +.6124 g 1149 2942 N -50 0 0 34 50 0 h +.6222 g 1149 2976 N -50 0 0 33 50 0 h +.6321 g 1149 3009 N -50 0 0 34 50 0 h +.642 g 1149 3043 N -50 0 0 34 50 0 h +.6519 g 1149 3077 N -50 0 0 33 50 0 h +.6617 g 1149 3110 N -50 0 0 34 50 0 h +.6716 g 1149 3144 N -50 0 0 33 50 0 h +.6815 g 1149 3177 N -50 0 0 34 50 0 h +.6913 g 1149 3211 N -50 0 0 34 50 0 h +.7012 g 1149 3245 N -50 0 0 33 50 0 h +.7111 g 1149 3278 N -50 0 0 34 50 0 h +.721 g 1149 3312 N -50 0 0 33 50 0 h +.7308 g 1149 3345 N -50 0 0 34 50 0 h +.7407 g 1149 3379 N -50 0 0 33 50 0 h +.7506 g 1149 3412 N -50 0 0 34 50 0 h +.7604 g 1149 3446 N -50 0 0 34 50 0 h +.7703 g 1149 3480 N -50 0 0 33 50 0 h +.7802 g 1149 3513 N -50 0 0 34 50 0 h +.7901 g 1149 3547 N -50 0 0 33 50 0 h +.7999 g 1149 3580 N -50 0 0 34 50 0 h +.8098 g 1149 3614 N -50 0 0 34 50 0 h +.8197 g 1149 3648 N -50 0 0 33 50 0 h +.8295 g 1149 3681 N -50 0 0 34 50 0 h +.8394 g 1149 3715 N -50 0 0 33 50 0 h +.8493 g 1149 3748 N -50 0 0 34 50 0 h +.8592 g 1149 3782 N -50 0 0 34 50 0 h +.869 g 1149 3816 N -50 0 0 33 50 0 h +.8789 g 1149 3849 N -50 0 0 34 50 0 h +.8888 g 1149 3883 N -50 0 0 33 50 0 h +.8986 g 1149 3916 N -50 0 0 34 50 0 h +.9085 g 1149 3950 N -50 0 0 33 50 0 h +.9184 g 1149 3983 N -50 0 0 34 50 0 h +.9283 g 1149 4017 N -50 0 0 34 50 0 h +.9381 g 1149 4051 N -50 0 0 33 50 0 h +.948 g 1149 4084 N -50 0 0 34 50 0 h +.9579 g 1149 4118 N -50 0 0 33 50 0 h +.9677 g 1149 4151 N -50 0 0 34 50 0 h +.9776 g 1149 4185 N -50 0 0 34 50 0 h +.9875 g 1149 4219 N -50 0 0 33 50 0 h +.0301 g 1199 928 N -51 0 0 33 51 0 h +.0398 g 1199 961 N -51 0 0 34 51 0 h +.0495 g 1199 995 N -51 0 0 34 51 0 h +.0593 g 1199 1029 N -51 0 0 33 51 0 h +.069 g 1199 1062 N -51 0 0 34 51 0 h +.0787 g 1199 1096 N -51 0 0 33 51 0 h +.0884 g 1199 1129 N -51 0 0 34 51 0 h +.0981 g 1199 1163 N -51 0 0 34 51 0 h +.1079 g 1199 1197 N -51 0 0 33 51 0 h +.1176 g 1199 1230 N -51 0 0 34 51 0 h +.1273 g 1199 1264 N -51 0 0 33 51 0 h +.137 g 1199 1297 N -51 0 0 34 51 0 h +.1467 g 1199 1331 N -51 0 0 33 51 0 h +.1565 g 1199 1364 N -51 0 0 34 51 0 h +.1662 g 1199 1398 N -51 0 0 34 51 0 h +.1759 g 1199 1432 N -51 0 0 33 51 0 h +.1856 g 1199 1465 N -51 0 0 34 51 0 h +.1953 g 1199 1499 N -51 0 0 33 51 0 h +.205 g 1199 1532 N -51 0 0 34 51 0 h +.2148 g 1199 1566 N -51 0 0 34 51 0 h +.2245 g 1199 1600 N -51 0 0 33 51 0 h +.2342 g 1199 1633 N -51 0 0 34 51 0 h +.2439 g 1199 1667 N -51 0 0 33 51 0 h +.2536 g 1199 1700 N -51 0 0 34 51 0 h +.2634 g 1199 1734 N -51 0 0 34 51 0 h +.2731 g 1199 1768 N -51 0 0 33 51 0 h +.2828 g 1199 1801 N -51 0 0 34 51 0 h +.2925 g 1199 1835 N -51 0 0 33 51 0 h +.3022 g 1199 1868 N -51 0 0 34 51 0 h +.3119 g 1199 1902 N -51 0 0 33 51 0 h +.3217 g 1199 1935 N -51 0 0 34 51 0 h +.3314 g 1199 1969 N -51 0 0 34 51 0 h +.3411 g 1199 2003 N -51 0 0 33 51 0 h +.3508 g 1199 2036 N -51 0 0 34 51 0 h +.3605 g 1199 2070 N -51 0 0 33 51 0 h +.3703 g 1199 2103 N -51 0 0 34 51 0 h +.38 g 1199 2137 N -51 0 0 34 51 0 h +.3897 g 1199 2171 N -51 0 0 33 51 0 h +.3994 g 1199 2204 N -51 0 0 34 51 0 h +.4091 g 1199 2238 N -51 0 0 33 51 0 h +.4188 g 1199 2271 N -51 0 0 34 51 0 h +.4286 g 1199 2305 N -51 0 0 34 51 0 h +.4383 g 1199 2339 N -51 0 0 33 51 0 h +.448 g 1199 2372 N -51 0 0 34 51 0 h +.4577 g 1199 2406 N -51 0 0 33 51 0 h +.4674 g 1199 2439 N -51 0 0 34 51 0 h +.4772 g 1199 2473 N -51 0 0 34 51 0 h +.4869 g 1199 2507 N -51 0 0 33 51 0 h +.4966 g 1199 2540 N -51 0 0 34 51 0 h +.5063 g 1199 2574 N -51 0 0 32 51 0 h +.516 g 1199 2606 N -51 0 0 34 51 0 h +.5258 g 1199 2640 N -51 0 0 33 51 0 h +.5355 g 1199 2673 N -51 0 0 34 51 0 h +.5452 g 1199 2707 N -51 0 0 34 51 0 h +.5549 g 1199 2741 N -51 0 0 33 51 0 h +.5646 g 1199 2774 N -51 0 0 34 51 0 h +.5743 g 1199 2808 N -51 0 0 33 51 0 h +.5841 g 1199 2841 N -51 0 0 34 51 0 h +.5938 g 1199 2875 N -51 0 0 34 51 0 h +.6035 g 1199 2909 N -51 0 0 33 51 0 h +.6132 g 1199 2942 N -51 0 0 34 51 0 h +.6229 g 1199 2976 N -51 0 0 33 51 0 h +.6327 g 1199 3009 N -51 0 0 34 51 0 h +.6424 g 1199 3043 N -51 0 0 34 51 0 h +.6521 g 1199 3077 N -51 0 0 33 51 0 h +.6618 g 1199 3110 N -51 0 0 34 51 0 h +.6715 g 1199 3144 N -51 0 0 33 51 0 h +.6812 g 1199 3177 N -51 0 0 34 51 0 h +.691 g 1199 3211 N -51 0 0 34 51 0 h +.7007 g 1199 3245 N -51 0 0 33 51 0 h +.7104 g 1199 3278 N -51 0 0 34 51 0 h +.7201 g 1199 3312 N -51 0 0 33 51 0 h +.7298 g 1199 3345 N -51 0 0 34 51 0 h +.7396 g 1199 3379 N -51 0 0 33 51 0 h +.7493 g 1199 3412 N -51 0 0 34 51 0 h +.759 g 1199 3446 N -51 0 0 34 51 0 h +.7687 g 1199 3480 N -51 0 0 33 51 0 h +.7784 g 1199 3513 N -51 0 0 34 51 0 h +.7881 g 1199 3547 N -51 0 0 33 51 0 h +.7979 g 1199 3580 N -51 0 0 34 51 0 h +.8076 g 1199 3614 N -51 0 0 34 51 0 h +.8173 g 1199 3648 N -51 0 0 33 51 0 h +.827 g 1199 3681 N -51 0 0 34 51 0 h +.8367 g 1199 3715 N -51 0 0 33 51 0 h +.8465 g 1199 3748 N -51 0 0 34 51 0 h +.8562 g 1199 3782 N -51 0 0 34 51 0 h +.8659 g 1199 3816 N -51 0 0 33 51 0 h +.8756 g 1199 3849 N -51 0 0 34 51 0 h +.8853 g 1199 3883 N -51 0 0 33 51 0 h +.895 g 1199 3916 N -51 0 0 34 51 0 h +.9048 g 1199 3950 N -51 0 0 33 51 0 h +.9145 g 1199 3983 N -51 0 0 34 51 0 h +.9242 g 1199 4017 N -51 0 0 34 51 0 h +.9339 g 1199 4051 N -51 0 0 33 51 0 h +.9436 g 1199 4084 N -51 0 0 34 51 0 h +.9534 g 1199 4118 N -51 0 0 33 51 0 h +.9631 g 1199 4151 N -51 0 0 34 51 0 h +.9728 g 1199 4185 N -51 0 0 34 51 0 h +.9825 g 1199 4219 N -51 0 0 33 51 0 h +.0401 g 1250 928 N -50 0 0 33 50 0 h +.0497 g 1250 961 N -50 0 0 34 50 0 h +.0593 g 1250 995 N -50 0 0 34 50 0 h +.0688 g 1250 1029 N -50 0 0 33 50 0 h +.0784 g 1250 1062 N -50 0 0 34 50 0 h +.088 g 1250 1096 N -50 0 0 33 50 0 h +.0975 g 1250 1129 N -50 0 0 34 50 0 h +.1071 g 1250 1163 N -50 0 0 34 50 0 h +.1167 g 1250 1197 N -50 0 0 33 50 0 h +.1262 g 1250 1230 N -50 0 0 34 50 0 h +.1358 g 1250 1264 N -50 0 0 33 50 0 h +.1454 g 1250 1297 N -50 0 0 34 50 0 h +.1549 g 1250 1331 N -50 0 0 33 50 0 h +.1645 g 1250 1364 N -50 0 0 34 50 0 h +.1741 g 1250 1398 N -50 0 0 34 50 0 h +.1836 g 1250 1432 N -50 0 0 33 50 0 h +.1932 g 1250 1465 N -50 0 0 34 50 0 h +.2027 g 1250 1499 N -50 0 0 33 50 0 h +.2123 g 1250 1532 N -50 0 0 34 50 0 h +.2219 g 1250 1566 N -50 0 0 34 50 0 h +.2314 g 1250 1600 N -50 0 0 33 50 0 h +.241 g 1250 1633 N -50 0 0 34 50 0 h +.2506 g 1250 1667 N -50 0 0 33 50 0 h +.2601 g 1250 1700 N -50 0 0 34 50 0 h +.2697 g 1250 1734 N -50 0 0 34 50 0 h +.2793 g 1250 1768 N -50 0 0 33 50 0 h +.2888 g 1250 1801 N -50 0 0 34 50 0 h +.2984 g 1250 1835 N -50 0 0 33 50 0 h +.308 g 1250 1868 N -50 0 0 34 50 0 h +.3175 g 1250 1902 N -50 0 0 33 50 0 h +.3271 g 1250 1935 N -50 0 0 34 50 0 h +.3367 g 1250 1969 N -50 0 0 34 50 0 h +.3462 g 1250 2003 N -50 0 0 33 50 0 h +.3558 g 1250 2036 N -50 0 0 34 50 0 h +.3654 g 1250 2070 N -50 0 0 33 50 0 h +.3749 g 1250 2103 N -50 0 0 34 50 0 h +.3845 g 1250 2137 N -50 0 0 34 50 0 h +.3941 g 1250 2171 N -50 0 0 33 50 0 h +.4036 g 1250 2204 N -50 0 0 34 50 0 h +.4132 g 1250 2238 N -50 0 0 33 50 0 h +.4228 g 1250 2271 N -50 0 0 34 50 0 h +.4323 g 1250 2305 N -50 0 0 34 50 0 h +.4419 g 1250 2339 N -50 0 0 33 50 0 h +.4514 g 1250 2372 N -50 0 0 34 50 0 h +.461 g 1250 2406 N -50 0 0 33 50 0 h +.4706 g 1250 2439 N -50 0 0 34 50 0 h +.4801 g 1250 2473 N -50 0 0 34 50 0 h +.4897 g 1250 2507 N -50 0 0 33 50 0 h +.4993 g 1250 2540 N -50 0 0 34 50 0 h +.5088 g 1250 2574 N -50 0 0 32 50 0 h +.5184 g 1250 2606 N -50 0 0 34 50 0 h +.528 g 1250 2640 N -50 0 0 33 50 0 h +.5375 g 1250 2673 N -50 0 0 34 50 0 h +.5471 g 1250 2707 N -50 0 0 34 50 0 h +.5567 g 1250 2741 N -50 0 0 33 50 0 h +.5662 g 1250 2774 N -50 0 0 34 50 0 h +.5758 g 1250 2808 N -50 0 0 33 50 0 h +.5854 g 1250 2841 N -50 0 0 34 50 0 h +.5949 g 1250 2875 N -50 0 0 34 50 0 h +.6045 g 1250 2909 N -50 0 0 33 50 0 h +.6141 g 1250 2942 N -50 0 0 34 50 0 h +.6236 g 1250 2976 N -50 0 0 33 50 0 h +.6332 g 1250 3009 N -50 0 0 34 50 0 h +.6428 g 1250 3043 N -50 0 0 34 50 0 h +.6523 g 1250 3077 N -50 0 0 33 50 0 h +.6619 g 1250 3110 N -50 0 0 34 50 0 h +.6714 g 1250 3144 N -50 0 0 33 50 0 h +.681 g 1250 3177 N -50 0 0 34 50 0 h +.6906 g 1250 3211 N -50 0 0 34 50 0 h +.7001 g 1250 3245 N -50 0 0 33 50 0 h +.7097 g 1250 3278 N -50 0 0 34 50 0 h +.7193 g 1250 3312 N -50 0 0 33 50 0 h +.7288 g 1250 3345 N -50 0 0 34 50 0 h +.7384 g 1250 3379 N -50 0 0 33 50 0 h +.748 g 1250 3412 N -50 0 0 34 50 0 h +.7575 g 1250 3446 N -50 0 0 34 50 0 h +.7671 g 1250 3480 N -50 0 0 33 50 0 h +.7767 g 1250 3513 N -50 0 0 34 50 0 h +.7862 g 1250 3547 N -50 0 0 33 50 0 h +.7958 g 1250 3580 N -50 0 0 34 50 0 h +.8054 g 1250 3614 N -50 0 0 34 50 0 h +.8149 g 1250 3648 N -50 0 0 33 50 0 h +.8245 g 1250 3681 N -50 0 0 34 50 0 h +.8341 g 1250 3715 N -50 0 0 33 50 0 h +.8436 g 1250 3748 N -50 0 0 34 50 0 h +.8532 g 1250 3782 N -50 0 0 34 50 0 h +.8628 g 1250 3816 N -50 0 0 33 50 0 h +.8723 g 1250 3849 N -50 0 0 34 50 0 h +.8819 g 1250 3883 N -50 0 0 33 50 0 h +.8915 g 1250 3916 N -50 0 0 34 50 0 h +.901 g 1250 3950 N -50 0 0 33 50 0 h +.9106 g 1250 3983 N -50 0 0 34 50 0 h +.9201 g 1250 4017 N -50 0 0 34 50 0 h +.9297 g 1250 4051 N -50 0 0 33 50 0 h +.9393 g 1250 4084 N -50 0 0 34 50 0 h +.9488 g 1250 4118 N -50 0 0 33 50 0 h +.9584 g 1250 4151 N -50 0 0 34 50 0 h +.968 g 1250 4185 N -50 0 0 34 50 0 h +.9775 g 1250 4219 N -50 0 0 33 50 0 h +.0502 g 1300 928 N -51 0 0 33 51 0 h +.0596 g 1300 961 N -51 0 0 34 51 0 h +.069 g 1300 995 N -51 0 0 34 51 0 h +.0784 g 1300 1029 N -51 0 0 33 51 0 h +.0878 g 1300 1062 N -51 0 0 34 51 0 h +.0972 g 1300 1096 N -51 0 0 33 51 0 h +.1066 g 1300 1129 N -51 0 0 34 51 0 h +.116 g 1300 1163 N -51 0 0 34 51 0 h +.1255 g 1300 1197 N -51 0 0 33 51 0 h +.1349 g 1300 1230 N -51 0 0 34 51 0 h +.1443 g 1300 1264 N -51 0 0 33 51 0 h +.1537 g 1300 1297 N -51 0 0 34 51 0 h +.1631 g 1300 1331 N -51 0 0 33 51 0 h +.1725 g 1300 1364 N -51 0 0 34 51 0 h +.1819 g 1300 1398 N -51 0 0 34 51 0 h +.1913 g 1300 1432 N -51 0 0 33 51 0 h +.2008 g 1300 1465 N -51 0 0 34 51 0 h +.2102 g 1300 1499 N -51 0 0 33 51 0 h +.2196 g 1300 1532 N -51 0 0 34 51 0 h +.229 g 1300 1566 N -51 0 0 34 51 0 h +.2384 g 1300 1600 N -51 0 0 33 51 0 h +.2478 g 1300 1633 N -51 0 0 34 51 0 h +.2572 g 1300 1667 N -51 0 0 33 51 0 h +.2666 g 1300 1700 N -51 0 0 34 51 0 h +.2761 g 1300 1734 N -51 0 0 34 51 0 h +.2855 g 1300 1768 N -51 0 0 33 51 0 h +.2949 g 1300 1801 N -51 0 0 34 51 0 h +.3043 g 1300 1835 N -51 0 0 33 51 0 h +.3137 g 1300 1868 N -51 0 0 34 51 0 h +.3231 g 1300 1902 N -51 0 0 33 51 0 h +.3325 g 1300 1935 N -51 0 0 34 51 0 h +.3419 g 1300 1969 N -51 0 0 34 51 0 h +.3514 g 1300 2003 N -51 0 0 33 51 0 h +.3608 g 1300 2036 N -51 0 0 34 51 0 h +.3702 g 1300 2070 N -51 0 0 33 51 0 h +.3796 g 1300 2103 N -51 0 0 34 51 0 h +.389 g 1300 2137 N -51 0 0 34 51 0 h +.3984 g 1300 2171 N -51 0 0 33 51 0 h +.4078 g 1300 2204 N -51 0 0 34 51 0 h +.4172 g 1300 2238 N -51 0 0 33 51 0 h +.4267 g 1300 2271 N -51 0 0 34 51 0 h +.4361 g 1300 2305 N -51 0 0 34 51 0 h +.4455 g 1300 2339 N -51 0 0 33 51 0 h +.4549 g 1300 2372 N -51 0 0 34 51 0 h +.4643 g 1300 2406 N -51 0 0 33 51 0 h +.4737 g 1300 2439 N -51 0 0 34 51 0 h +.4831 g 1300 2473 N -51 0 0 34 51 0 h +.4925 g 1300 2507 N -51 0 0 33 51 0 h +.502 g 1300 2540 N -51 0 0 34 51 0 h +.5114 g 1300 2574 N -51 0 0 32 51 0 h +.5208 g 1300 2606 N -51 0 0 34 51 0 h +.5302 g 1300 2640 N -51 0 0 33 51 0 h +.5396 g 1300 2673 N -51 0 0 34 51 0 h +.549 g 1300 2707 N -51 0 0 34 51 0 h +.5584 g 1300 2741 N -51 0 0 33 51 0 h +.5678 g 1300 2774 N -51 0 0 34 51 0 h +.5772 g 1300 2808 N -51 0 0 33 51 0 h +.5867 g 1300 2841 N -51 0 0 34 51 0 h +.5961 g 1300 2875 N -51 0 0 34 51 0 h +.6055 g 1300 2909 N -51 0 0 33 51 0 h +.6149 g 1300 2942 N -51 0 0 34 51 0 h +.6243 g 1300 2976 N -51 0 0 33 51 0 h +.6337 g 1300 3009 N -51 0 0 34 51 0 h +.6431 g 1300 3043 N -51 0 0 34 51 0 h +.6525 g 1300 3077 N -51 0 0 33 51 0 h +.662 g 1300 3110 N -51 0 0 34 51 0 h +.6714 g 1300 3144 N -51 0 0 33 51 0 h +.6808 g 1300 3177 N -51 0 0 34 51 0 h +.6902 g 1300 3211 N -51 0 0 34 51 0 h +.6996 g 1300 3245 N -51 0 0 33 51 0 h +.709 g 1300 3278 N -51 0 0 34 51 0 h +.7184 g 1300 3312 N -51 0 0 33 51 0 h +.7278 g 1300 3345 N -51 0 0 34 51 0 h +.7373 g 1300 3379 N -51 0 0 33 51 0 h +.7467 g 1300 3412 N -51 0 0 34 51 0 h +.7561 g 1300 3446 N -51 0 0 34 51 0 h +.7655 g 1300 3480 N -51 0 0 33 51 0 h +.7749 g 1300 3513 N -51 0 0 34 51 0 h +.7843 g 1300 3547 N -51 0 0 33 51 0 h +.7937 g 1300 3580 N -51 0 0 34 51 0 h +.8031 g 1300 3614 N -51 0 0 34 51 0 h +.8126 g 1300 3648 N -51 0 0 33 51 0 h +.822 g 1300 3681 N -51 0 0 34 51 0 h +.8314 g 1300 3715 N -51 0 0 33 51 0 h +.8408 g 1300 3748 N -51 0 0 34 51 0 h +.8502 g 1300 3782 N -51 0 0 34 51 0 h +.8596 g 1300 3816 N -51 0 0 33 51 0 h +.869 g 1300 3849 N -51 0 0 34 51 0 h +.8784 g 1300 3883 N -51 0 0 33 51 0 h +.8879 g 1300 3916 N -51 0 0 34 51 0 h +.8973 g 1300 3950 N -51 0 0 33 51 0 h +.9067 g 1300 3983 N -51 0 0 34 51 0 h +.9161 g 1300 4017 N -51 0 0 34 51 0 h +.9255 g 1300 4051 N -51 0 0 33 51 0 h +.9349 g 1300 4084 N -51 0 0 34 51 0 h +.9443 g 1300 4118 N -51 0 0 33 51 0 h +.9537 g 1300 4151 N -51 0 0 34 51 0 h +.9632 g 1300 4185 N -51 0 0 34 51 0 h +.9726 g 1300 4219 N -51 0 0 33 51 0 h +.0602 g 1351 928 N -50 0 0 33 50 0 h +.0694 g 1351 961 N -50 0 0 34 50 0 h +.0787 g 1351 995 N -50 0 0 34 50 0 h +.088 g 1351 1029 N -50 0 0 33 50 0 h +.0972 g 1351 1062 N -50 0 0 34 50 0 h +.1065 g 1351 1096 N -50 0 0 33 50 0 h +.1157 g 1351 1129 N -50 0 0 34 50 0 h +.125 g 1351 1163 N -50 0 0 34 50 0 h +.1343 g 1351 1197 N -50 0 0 33 50 0 h +.1435 g 1351 1230 N -50 0 0 34 50 0 h +.1528 g 1351 1264 N -50 0 0 33 50 0 h +.162 g 1351 1297 N -50 0 0 34 50 0 h +.1713 g 1351 1331 N -50 0 0 33 50 0 h +.1806 g 1351 1364 N -50 0 0 34 50 0 h +.1898 g 1351 1398 N -50 0 0 34 50 0 h +.1991 g 1351 1432 N -50 0 0 33 50 0 h +.2083 g 1351 1465 N -50 0 0 34 50 0 h +.2176 g 1351 1499 N -50 0 0 33 50 0 h +.2269 g 1351 1532 N -50 0 0 34 50 0 h +.2361 g 1351 1566 N -50 0 0 34 50 0 h +.2454 g 1351 1600 N -50 0 0 33 50 0 h +.2546 g 1351 1633 N -50 0 0 34 50 0 h +.2639 g 1351 1667 N -50 0 0 33 50 0 h +.2731 g 1351 1700 N -50 0 0 34 50 0 h +.2824 g 1351 1734 N -50 0 0 34 50 0 h +.2917 g 1351 1768 N -50 0 0 33 50 0 h +.3009 g 1351 1801 N -50 0 0 34 50 0 h +.3102 g 1351 1835 N -50 0 0 33 50 0 h +.3194 g 1351 1868 N -50 0 0 34 50 0 h +.3287 g 1351 1902 N -50 0 0 33 50 0 h +.338 g 1351 1935 N -50 0 0 34 50 0 h +.3472 g 1351 1969 N -50 0 0 34 50 0 h +.3565 g 1351 2003 N -50 0 0 33 50 0 h +.3657 g 1351 2036 N -50 0 0 34 50 0 h +.375 g 1351 2070 N -50 0 0 33 50 0 h +.3843 g 1351 2103 N -50 0 0 34 50 0 h +.3935 g 1351 2137 N -50 0 0 34 50 0 h +.4028 g 1351 2171 N -50 0 0 33 50 0 h +.412 g 1351 2204 N -50 0 0 34 50 0 h +.4213 g 1351 2238 N -50 0 0 33 50 0 h +.4306 g 1351 2271 N -50 0 0 34 50 0 h +.4398 g 1351 2305 N -50 0 0 34 50 0 h +.4491 g 1351 2339 N -50 0 0 33 50 0 h +.4583 g 1351 2372 N -50 0 0 34 50 0 h +.4676 g 1351 2406 N -50 0 0 33 50 0 h +.4769 g 1351 2439 N -50 0 0 34 50 0 h +.4861 g 1351 2473 N -50 0 0 34 50 0 h +.4954 g 1351 2507 N -50 0 0 33 50 0 h +.5046 g 1351 2540 N -50 0 0 34 50 0 h +.5139 g 1351 2574 N -50 0 0 32 50 0 h +.5231 g 1351 2606 N -50 0 0 34 50 0 h +.5324 g 1351 2640 N -50 0 0 33 50 0 h +.5417 g 1351 2673 N -50 0 0 34 50 0 h +.5509 g 1351 2707 N -50 0 0 34 50 0 h +.5602 g 1351 2741 N -50 0 0 33 50 0 h +.5694 g 1351 2774 N -50 0 0 34 50 0 h +.5787 g 1351 2808 N -50 0 0 33 50 0 h +.588 g 1351 2841 N -50 0 0 34 50 0 h +.5972 g 1351 2875 N -50 0 0 34 50 0 h +.6065 g 1351 2909 N -50 0 0 33 50 0 h +.6157 g 1351 2942 N -50 0 0 34 50 0 h +.625 g 1351 2976 N -50 0 0 33 50 0 h +.6343 g 1351 3009 N -50 0 0 34 50 0 h +.6435 g 1351 3043 N -50 0 0 34 50 0 h +.6528 g 1351 3077 N -50 0 0 33 50 0 h +.662 g 1351 3110 N -50 0 0 34 50 0 h +.6713 g 1351 3144 N -50 0 0 33 50 0 h +.6806 g 1351 3177 N -50 0 0 34 50 0 h +.6898 g 1351 3211 N -50 0 0 34 50 0 h +.6991 g 1351 3245 N -50 0 0 33 50 0 h +.7083 g 1351 3278 N -50 0 0 34 50 0 h +.7176 g 1351 3312 N -50 0 0 33 50 0 h +.7269 g 1351 3345 N -50 0 0 34 50 0 h +.7361 g 1351 3379 N -50 0 0 33 50 0 h +.7454 g 1351 3412 N -50 0 0 34 50 0 h +.7546 g 1351 3446 N -50 0 0 34 50 0 h +.7639 g 1351 3480 N -50 0 0 33 50 0 h +.7731 g 1351 3513 N -50 0 0 34 50 0 h +.7824 g 1351 3547 N -50 0 0 33 50 0 h +.7917 g 1351 3580 N -50 0 0 34 50 0 h +.8009 g 1351 3614 N -50 0 0 34 50 0 h +.8102 g 1351 3648 N -50 0 0 33 50 0 h +.8194 g 1351 3681 N -50 0 0 34 50 0 h +.8287 g 1351 3715 N -50 0 0 33 50 0 h +.838 g 1351 3748 N -50 0 0 34 50 0 h +.8472 g 1351 3782 N -50 0 0 34 50 0 h +.8565 g 1351 3816 N -50 0 0 33 50 0 h +.8657 g 1351 3849 N -50 0 0 34 50 0 h +.875 g 1351 3883 N -50 0 0 33 50 0 h +.8843 g 1351 3916 N -50 0 0 34 50 0 h +.8935 g 1351 3950 N -50 0 0 33 50 0 h +.9028 g 1351 3983 N -50 0 0 34 50 0 h +.912 g 1351 4017 N -50 0 0 34 50 0 h +.9213 g 1351 4051 N -50 0 0 33 50 0 h +.9306 g 1351 4084 N -50 0 0 34 50 0 h +.9398 g 1351 4118 N -50 0 0 33 50 0 h +.9491 g 1351 4151 N -50 0 0 34 50 0 h +.9583 g 1351 4185 N -50 0 0 34 50 0 h +.9676 g 1351 4219 N -50 0 0 33 50 0 h +.0702 g 1401 928 N -51 0 0 33 51 0 h +.0793 g 1401 961 N -51 0 0 34 51 0 h +.0884 g 1401 995 N -51 0 0 34 51 0 h +.0975 g 1401 1029 N -51 0 0 33 51 0 h +.1066 g 1401 1062 N -51 0 0 34 51 0 h +.1157 g 1401 1096 N -51 0 0 33 51 0 h +.1248 g 1401 1129 N -51 0 0 34 51 0 h +.134 g 1401 1163 N -51 0 0 34 51 0 h +.1431 g 1401 1197 N -51 0 0 33 51 0 h +.1522 g 1401 1230 N -51 0 0 34 51 0 h +.1613 g 1401 1264 N -51 0 0 33 51 0 h +.1704 g 1401 1297 N -51 0 0 34 51 0 h +.1795 g 1401 1331 N -51 0 0 33 51 0 h +.1886 g 1401 1364 N -51 0 0 34 51 0 h +.1977 g 1401 1398 N -51 0 0 34 51 0 h +.2068 g 1401 1432 N -51 0 0 33 51 0 h +.2159 g 1401 1465 N -51 0 0 34 51 0 h +.225 g 1401 1499 N -51 0 0 33 51 0 h +.2341 g 1401 1532 N -51 0 0 34 51 0 h +.2432 g 1401 1566 N -51 0 0 34 51 0 h +.2523 g 1401 1600 N -51 0 0 33 51 0 h +.2614 g 1401 1633 N -51 0 0 34 51 0 h +.2705 g 1401 1667 N -51 0 0 33 51 0 h +.2797 g 1401 1700 N -51 0 0 34 51 0 h +.2888 g 1401 1734 N -51 0 0 34 51 0 h +.2979 g 1401 1768 N -51 0 0 33 51 0 h +.307 g 1401 1801 N -51 0 0 34 51 0 h +.3161 g 1401 1835 N -51 0 0 33 51 0 h +.3252 g 1401 1868 N -51 0 0 34 51 0 h +.3343 g 1401 1902 N -51 0 0 33 51 0 h +.3434 g 1401 1935 N -51 0 0 34 51 0 h +.3525 g 1401 1969 N -51 0 0 34 51 0 h +.3616 g 1401 2003 N -51 0 0 33 51 0 h +.3707 g 1401 2036 N -51 0 0 34 51 0 h +.3798 g 1401 2070 N -51 0 0 33 51 0 h +.3889 g 1401 2103 N -51 0 0 34 51 0 h +.398 g 1401 2137 N -51 0 0 34 51 0 h +.4071 g 1401 2171 N -51 0 0 33 51 0 h +.4162 g 1401 2204 N -51 0 0 34 51 0 h +.4254 g 1401 2238 N -51 0 0 33 51 0 h +.4345 g 1401 2271 N -51 0 0 34 51 0 h +.4436 g 1401 2305 N -51 0 0 34 51 0 h +.4527 g 1401 2339 N -51 0 0 33 51 0 h +.4618 g 1401 2372 N -51 0 0 34 51 0 h +.4709 g 1401 2406 N -51 0 0 33 51 0 h +.48 g 1401 2439 N -51 0 0 34 51 0 h +.4891 g 1401 2473 N -51 0 0 34 51 0 h +.4982 g 1401 2507 N -51 0 0 33 51 0 h +.5073 g 1401 2540 N -51 0 0 34 51 0 h +.5164 g 1401 2574 N -51 0 0 32 51 0 h +.5255 g 1401 2606 N -51 0 0 34 51 0 h +.5346 g 1401 2640 N -51 0 0 33 51 0 h +.5437 g 1401 2673 N -51 0 0 34 51 0 h +.5528 g 1401 2707 N -51 0 0 34 51 0 h +.5619 g 1401 2741 N -51 0 0 33 51 0 h +.5711 g 1401 2774 N -51 0 0 34 51 0 h +.5802 g 1401 2808 N -51 0 0 33 51 0 h +.5893 g 1401 2841 N -51 0 0 34 51 0 h +.5984 g 1401 2875 N -51 0 0 34 51 0 h +.6075 g 1401 2909 N -51 0 0 33 51 0 h +.6166 g 1401 2942 N -51 0 0 34 51 0 h +.6257 g 1401 2976 N -51 0 0 33 51 0 h +.6348 g 1401 3009 N -51 0 0 34 51 0 h +.6439 g 1401 3043 N -51 0 0 34 51 0 h +.653 g 1401 3077 N -51 0 0 33 51 0 h +.6621 g 1401 3110 N -51 0 0 34 51 0 h +.6712 g 1401 3144 N -51 0 0 33 51 0 h +.6803 g 1401 3177 N -51 0 0 34 51 0 h +.6894 g 1401 3211 N -51 0 0 34 51 0 h +.6985 g 1401 3245 N -51 0 0 33 51 0 h +.7076 g 1401 3278 N -51 0 0 34 51 0 h +.7168 g 1401 3312 N -51 0 0 33 51 0 h +.7259 g 1401 3345 N -51 0 0 34 51 0 h +.735 g 1401 3379 N -51 0 0 33 51 0 h +.7441 g 1401 3412 N -51 0 0 34 51 0 h +.7532 g 1401 3446 N -51 0 0 34 51 0 h +.7623 g 1401 3480 N -51 0 0 33 51 0 h +.7714 g 1401 3513 N -51 0 0 34 51 0 h +.7805 g 1401 3547 N -51 0 0 33 51 0 h +.7896 g 1401 3580 N -51 0 0 34 51 0 h +.7987 g 1401 3614 N -51 0 0 34 51 0 h +.8078 g 1401 3648 N -51 0 0 33 51 0 h +.8169 g 1401 3681 N -51 0 0 34 51 0 h +.826 g 1401 3715 N -51 0 0 33 51 0 h +.8351 g 1401 3748 N -51 0 0 34 51 0 h +.8442 g 1401 3782 N -51 0 0 34 51 0 h +.8533 g 1401 3816 N -51 0 0 33 51 0 h +.8625 g 1401 3849 N -51 0 0 34 51 0 h +.8716 g 1401 3883 N -51 0 0 33 51 0 h +.8807 g 1401 3916 N -51 0 0 34 51 0 h +.8898 g 1401 3950 N -51 0 0 33 51 0 h +.8989 g 1401 3983 N -51 0 0 34 51 0 h +.908 g 1401 4017 N -51 0 0 34 51 0 h +.9171 g 1401 4051 N -51 0 0 33 51 0 h +.9262 g 1401 4084 N -51 0 0 34 51 0 h +.9353 g 1401 4118 N -51 0 0 33 51 0 h +.9444 g 1401 4151 N -51 0 0 34 51 0 h +.9535 g 1401 4185 N -51 0 0 34 51 0 h +.9626 g 1401 4219 N -51 0 0 33 51 0 h +.0802 g 1452 928 N -50 0 0 33 50 0 h +.0892 g 1452 961 N -50 0 0 34 50 0 h +.0981 g 1452 995 N -50 0 0 34 50 0 h +.1071 g 1452 1029 N -50 0 0 33 50 0 h +.116 g 1452 1062 N -50 0 0 34 50 0 h +.125 g 1452 1096 N -50 0 0 33 50 0 h +.134 g 1452 1129 N -50 0 0 34 50 0 h +.1429 g 1452 1163 N -50 0 0 34 50 0 h +.1519 g 1452 1197 N -50 0 0 33 50 0 h +.1608 g 1452 1230 N -50 0 0 34 50 0 h +.1698 g 1452 1264 N -50 0 0 33 50 0 h +.1787 g 1452 1297 N -50 0 0 34 50 0 h +.1877 g 1452 1331 N -50 0 0 33 50 0 h +.1966 g 1452 1364 N -50 0 0 34 50 0 h +.2056 g 1452 1398 N -50 0 0 34 50 0 h +.2145 g 1452 1432 N -50 0 0 33 50 0 h +.2235 g 1452 1465 N -50 0 0 34 50 0 h +.2324 g 1452 1499 N -50 0 0 33 50 0 h +.2414 g 1452 1532 N -50 0 0 34 50 0 h +.2503 g 1452 1566 N -50 0 0 34 50 0 h +.2593 g 1452 1600 N -50 0 0 33 50 0 h +.2683 g 1452 1633 N -50 0 0 34 50 0 h +.2772 g 1452 1667 N -50 0 0 33 50 0 h +.2862 g 1452 1700 N -50 0 0 34 50 0 h +.2951 g 1452 1734 N -50 0 0 34 50 0 h +.3041 g 1452 1768 N -50 0 0 33 50 0 h +.313 g 1452 1801 N -50 0 0 34 50 0 h +.322 g 1452 1835 N -50 0 0 33 50 0 h +.3309 g 1452 1868 N -50 0 0 34 50 0 h +.3399 g 1452 1902 N -50 0 0 33 50 0 h +.3488 g 1452 1935 N -50 0 0 34 50 0 h +.3578 g 1452 1969 N -50 0 0 34 50 0 h +.3667 g 1452 2003 N -50 0 0 33 50 0 h +.3757 g 1452 2036 N -50 0 0 34 50 0 h +.3846 g 1452 2070 N -50 0 0 33 50 0 h +.3936 g 1452 2103 N -50 0 0 34 50 0 h +.4025 g 1452 2137 N -50 0 0 34 50 0 h +.4115 g 1452 2171 N -50 0 0 33 50 0 h +.4205 g 1452 2204 N -50 0 0 34 50 0 h +.4294 g 1452 2238 N -50 0 0 33 50 0 h +.4384 g 1452 2271 N -50 0 0 34 50 0 h +.4473 g 1452 2305 N -50 0 0 34 50 0 h +.4563 g 1452 2339 N -50 0 0 33 50 0 h +.4652 g 1452 2372 N -50 0 0 34 50 0 h +.4742 g 1452 2406 N -50 0 0 33 50 0 h +.4831 g 1452 2439 N -50 0 0 34 50 0 h +.4921 g 1452 2473 N -50 0 0 34 50 0 h +.501 g 1452 2507 N -50 0 0 33 50 0 h +.51 g 1452 2540 N -50 0 0 34 50 0 h +.5189 g 1452 2574 N -50 0 0 32 50 0 h +.5279 g 1452 2606 N -50 0 0 34 50 0 h +.5368 g 1452 2640 N -50 0 0 33 50 0 h +.5458 g 1452 2673 N -50 0 0 34 50 0 h +.5548 g 1452 2707 N -50 0 0 34 50 0 h +.5637 g 1452 2741 N -50 0 0 33 50 0 h +.5727 g 1452 2774 N -50 0 0 34 50 0 h +.5816 g 1452 2808 N -50 0 0 33 50 0 h +.5906 g 1452 2841 N -50 0 0 34 50 0 h +.5995 g 1452 2875 N -50 0 0 34 50 0 h +.6085 g 1452 2909 N -50 0 0 33 50 0 h +.6174 g 1452 2942 N -50 0 0 34 50 0 h +.6264 g 1452 2976 N -50 0 0 33 50 0 h +.6353 g 1452 3009 N -50 0 0 34 50 0 h +.6443 g 1452 3043 N -50 0 0 34 50 0 h +.6532 g 1452 3077 N -50 0 0 33 50 0 h +.6622 g 1452 3110 N -50 0 0 34 50 0 h +.6711 g 1452 3144 N -50 0 0 33 50 0 h +.6801 g 1452 3177 N -50 0 0 34 50 0 h +.689 g 1452 3211 N -50 0 0 34 50 0 h +.698 g 1452 3245 N -50 0 0 33 50 0 h +.707 g 1452 3278 N -50 0 0 34 50 0 h +.7159 g 1452 3312 N -50 0 0 33 50 0 h +.7249 g 1452 3345 N -50 0 0 34 50 0 h +.7338 g 1452 3379 N -50 0 0 33 50 0 h +.7428 g 1452 3412 N -50 0 0 34 50 0 h +.7517 g 1452 3446 N -50 0 0 34 50 0 h +.7607 g 1452 3480 N -50 0 0 33 50 0 h +.7696 g 1452 3513 N -50 0 0 34 50 0 h +.7786 g 1452 3547 N -50 0 0 33 50 0 h +.7875 g 1452 3580 N -50 0 0 34 50 0 h +.7965 g 1452 3614 N -50 0 0 34 50 0 h +.8054 g 1452 3648 N -50 0 0 33 50 0 h +.8144 g 1452 3681 N -50 0 0 34 50 0 h +.8233 g 1452 3715 N -50 0 0 33 50 0 h +.8323 g 1452 3748 N -50 0 0 34 50 0 h +.8413 g 1452 3782 N -50 0 0 34 50 0 h +.8502 g 1452 3816 N -50 0 0 33 50 0 h +.8592 g 1452 3849 N -50 0 0 34 50 0 h +.8681 g 1452 3883 N -50 0 0 33 50 0 h +.8771 g 1452 3916 N -50 0 0 34 50 0 h +.886 g 1452 3950 N -50 0 0 33 50 0 h +.895 g 1452 3983 N -50 0 0 34 50 0 h +.9039 g 1452 4017 N -50 0 0 34 50 0 h +.9129 g 1452 4051 N -50 0 0 33 50 0 h +.9218 g 1452 4084 N -50 0 0 34 50 0 h +.9308 g 1452 4118 N -50 0 0 33 50 0 h +.9397 g 1452 4151 N -50 0 0 34 50 0 h +.9487 g 1452 4185 N -50 0 0 34 50 0 h +.9576 g 1452 4219 N -50 0 0 33 50 0 h +.0903 g 1502 928 N -51 0 0 33 51 0 h +.0991 g 1502 961 N -51 0 0 34 51 0 h +.1079 g 1502 995 N -51 0 0 34 51 0 h +.1167 g 1502 1029 N -51 0 0 33 51 0 h +.1255 g 1502 1062 N -51 0 0 34 51 0 h +.1343 g 1502 1096 N -51 0 0 33 51 0 h +.1431 g 1502 1129 N -51 0 0 34 51 0 h +.1519 g 1502 1163 N -51 0 0 34 51 0 h +.1607 g 1502 1197 N -51 0 0 33 51 0 h +.1695 g 1502 1230 N -51 0 0 34 51 0 h +.1783 g 1502 1264 N -51 0 0 33 51 0 h +.1871 g 1502 1297 N -51 0 0 34 51 0 h +.1959 g 1502 1331 N -51 0 0 33 51 0 h +.2047 g 1502 1364 N -51 0 0 34 51 0 h +.2135 g 1502 1398 N -51 0 0 34 51 0 h +.2223 g 1502 1432 N -51 0 0 33 51 0 h +.2311 g 1502 1465 N -51 0 0 34 51 0 h +.2399 g 1502 1499 N -51 0 0 33 51 0 h +.2487 g 1502 1532 N -51 0 0 34 51 0 h +.2575 g 1502 1566 N -51 0 0 34 51 0 h +.2663 g 1502 1600 N -51 0 0 33 51 0 h +.2751 g 1502 1633 N -51 0 0 34 51 0 h +.2839 g 1502 1667 N -51 0 0 33 51 0 h +.2927 g 1502 1700 N -51 0 0 34 51 0 h +.3015 g 1502 1734 N -51 0 0 34 51 0 h +.3103 g 1502 1768 N -51 0 0 33 51 0 h +.3191 g 1502 1801 N -51 0 0 34 51 0 h +.3279 g 1502 1835 N -51 0 0 33 51 0 h +.3367 g 1502 1868 N -51 0 0 34 51 0 h +.3455 g 1502 1902 N -51 0 0 33 51 0 h +.3543 g 1502 1935 N -51 0 0 34 51 0 h +.3631 g 1502 1969 N -51 0 0 34 51 0 h +.3719 g 1502 2003 N -51 0 0 33 51 0 h +.3807 g 1502 2036 N -51 0 0 34 51 0 h +.3895 g 1502 2070 N -51 0 0 33 51 0 h +.3983 g 1502 2103 N -51 0 0 34 51 0 h +.4071 g 1502 2137 N -51 0 0 34 51 0 h +.4159 g 1502 2171 N -51 0 0 33 51 0 h +.4247 g 1502 2204 N -51 0 0 34 51 0 h +.4335 g 1502 2238 N -51 0 0 33 51 0 h +.4423 g 1502 2271 N -51 0 0 34 51 0 h +.4511 g 1502 2305 N -51 0 0 34 51 0 h +.4599 g 1502 2339 N -51 0 0 33 51 0 h +.4687 g 1502 2372 N -51 0 0 34 51 0 h +.4775 g 1502 2406 N -51 0 0 33 51 0 h +.4863 g 1502 2439 N -51 0 0 34 51 0 h +.4951 g 1502 2473 N -51 0 0 34 51 0 h +.5039 g 1502 2507 N -51 0 0 33 51 0 h +.5127 g 1502 2540 N -51 0 0 34 51 0 h +.5215 g 1502 2574 N -51 0 0 32 51 0 h +.5303 g 1502 2606 N -51 0 0 34 51 0 h +.5391 g 1502 2640 N -51 0 0 33 51 0 h +.5479 g 1502 2673 N -51 0 0 34 51 0 h +.5567 g 1502 2707 N -51 0 0 34 51 0 h +.5655 g 1502 2741 N -51 0 0 33 51 0 h +.5743 g 1502 2774 N -51 0 0 34 51 0 h +.5831 g 1502 2808 N -51 0 0 33 51 0 h +.5919 g 1502 2841 N -51 0 0 34 51 0 h +.6007 g 1502 2875 N -51 0 0 34 51 0 h +.6095 g 1502 2909 N -51 0 0 33 51 0 h +.6183 g 1502 2942 N -51 0 0 34 51 0 h +.6271 g 1502 2976 N -51 0 0 33 51 0 h +.6359 g 1502 3009 N -51 0 0 34 51 0 h +.6447 g 1502 3043 N -51 0 0 34 51 0 h +.6535 g 1502 3077 N -51 0 0 33 51 0 h +.6623 g 1502 3110 N -51 0 0 34 51 0 h +.6711 g 1502 3144 N -51 0 0 33 51 0 h +.6799 g 1502 3177 N -51 0 0 34 51 0 h +.6887 g 1502 3211 N -51 0 0 34 51 0 h +.6975 g 1502 3245 N -51 0 0 33 51 0 h +.7063 g 1502 3278 N -51 0 0 34 51 0 h +.7151 g 1502 3312 N -51 0 0 33 51 0 h +.7239 g 1502 3345 N -51 0 0 34 51 0 h +.7327 g 1502 3379 N -51 0 0 33 51 0 h +.7415 g 1502 3412 N -51 0 0 34 51 0 h +.7503 g 1502 3446 N -51 0 0 34 51 0 h +.7591 g 1502 3480 N -51 0 0 33 51 0 h +.7679 g 1502 3513 N -51 0 0 34 51 0 h +.7767 g 1502 3547 N -51 0 0 33 51 0 h +.7855 g 1502 3580 N -51 0 0 34 51 0 h +.7943 g 1502 3614 N -51 0 0 34 51 0 h +.8031 g 1502 3648 N -51 0 0 33 51 0 h +.8119 g 1502 3681 N -51 0 0 34 51 0 h +.8207 g 1502 3715 N -51 0 0 33 51 0 h +.8295 g 1502 3748 N -51 0 0 34 51 0 h +.8383 g 1502 3782 N -51 0 0 34 51 0 h +.8471 g 1502 3816 N -51 0 0 33 51 0 h +.8559 g 1502 3849 N -51 0 0 34 51 0 h +.8647 g 1502 3883 N -51 0 0 33 51 0 h +.8735 g 1502 3916 N -51 0 0 34 51 0 h +.8823 g 1502 3950 N -51 0 0 33 51 0 h +.8911 g 1502 3983 N -51 0 0 34 51 0 h +.8999 g 1502 4017 N -51 0 0 34 51 0 h +.9087 g 1502 4051 N -51 0 0 33 51 0 h +.9175 g 1502 4084 N -51 0 0 34 51 0 h +.9263 g 1502 4118 N -51 0 0 33 51 0 h +.9351 g 1502 4151 N -51 0 0 34 51 0 h +.9439 g 1502 4185 N -51 0 0 34 51 0 h +.9527 g 1502 4219 N -51 0 0 33 51 0 h +.1003 g 1553 928 N -51 0 0 33 51 0 h +.1089 g 1553 961 N -51 0 0 34 51 0 h +.1176 g 1553 995 N -51 0 0 34 51 0 h +.1262 g 1553 1029 N -51 0 0 33 51 0 h +.1349 g 1553 1062 N -51 0 0 34 51 0 h +.1435 g 1553 1096 N -51 0 0 33 51 0 h +.1522 g 1553 1129 N -51 0 0 34 51 0 h +.1608 g 1553 1163 N -51 0 0 34 51 0 h +.1695 g 1553 1197 N -51 0 0 33 51 0 h +.1781 g 1553 1230 N -51 0 0 34 51 0 h +.1868 g 1553 1264 N -51 0 0 33 51 0 h +.1954 g 1553 1297 N -51 0 0 34 51 0 h +.204 g 1553 1331 N -51 0 0 33 51 0 h +.2127 g 1553 1364 N -51 0 0 34 51 0 h +.2213 g 1553 1398 N -51 0 0 34 51 0 h +.23 g 1553 1432 N -51 0 0 33 51 0 h +.2386 g 1553 1465 N -51 0 0 34 51 0 h +.2473 g 1553 1499 N -51 0 0 33 51 0 h +.2559 g 1553 1532 N -51 0 0 34 51 0 h +.2646 g 1553 1566 N -51 0 0 34 51 0 h +.2732 g 1553 1600 N -51 0 0 33 51 0 h +.2819 g 1553 1633 N -51 0 0 34 51 0 h +.2905 g 1553 1667 N -51 0 0 33 51 0 h +.2992 g 1553 1700 N -51 0 0 34 51 0 h +.3078 g 1553 1734 N -51 0 0 34 51 0 h +.3165 g 1553 1768 N -51 0 0 33 51 0 h +.3251 g 1553 1801 N -51 0 0 34 51 0 h +.3338 g 1553 1835 N -51 0 0 33 51 0 h +.3424 g 1553 1868 N -51 0 0 34 51 0 h +.351 g 1553 1902 N -51 0 0 33 51 0 h +.3597 g 1553 1935 N -51 0 0 34 51 0 h +.3683 g 1553 1969 N -51 0 0 34 51 0 h +.377 g 1553 2003 N -51 0 0 33 51 0 h +.3856 g 1553 2036 N -51 0 0 34 51 0 h +.3943 g 1553 2070 N -51 0 0 33 51 0 h +.4029 g 1553 2103 N -51 0 0 34 51 0 h +.4116 g 1553 2137 N -51 0 0 34 51 0 h +.4202 g 1553 2171 N -51 0 0 33 51 0 h +.4289 g 1553 2204 N -51 0 0 34 51 0 h +.4375 g 1553 2238 N -51 0 0 33 51 0 h +.4462 g 1553 2271 N -51 0 0 34 51 0 h +.4548 g 1553 2305 N -51 0 0 34 51 0 h +.4635 g 1553 2339 N -51 0 0 33 51 0 h +.4721 g 1553 2372 N -51 0 0 34 51 0 h +.4808 g 1553 2406 N -51 0 0 33 51 0 h +.4894 g 1553 2439 N -51 0 0 34 51 0 h +.498 g 1553 2473 N -51 0 0 34 51 0 h +.5067 g 1553 2507 N -51 0 0 33 51 0 h +.5153 g 1553 2540 N -51 0 0 34 51 0 h +.524 g 1553 2574 N -51 0 0 32 51 0 h +.5326 g 1553 2606 N -51 0 0 34 51 0 h +.5413 g 1553 2640 N -51 0 0 33 51 0 h +.5499 g 1553 2673 N -51 0 0 34 51 0 h +.5586 g 1553 2707 N -51 0 0 34 51 0 h +.5672 g 1553 2741 N -51 0 0 33 51 0 h +.5759 g 1553 2774 N -51 0 0 34 51 0 h +.5845 g 1553 2808 N -51 0 0 33 51 0 h +.5932 g 1553 2841 N -51 0 0 34 51 0 h +.6018 g 1553 2875 N -51 0 0 34 51 0 h +.6105 g 1553 2909 N -51 0 0 33 51 0 h +.6191 g 1553 2942 N -51 0 0 34 51 0 h +.6278 g 1553 2976 N -51 0 0 33 51 0 h +.6364 g 1553 3009 N -51 0 0 34 51 0 h +.645 g 1553 3043 N -51 0 0 34 51 0 h +.6537 g 1553 3077 N -51 0 0 33 51 0 h +.6623 g 1553 3110 N -51 0 0 34 51 0 h +.671 g 1553 3144 N -51 0 0 33 51 0 h +.6796 g 1553 3177 N -51 0 0 34 51 0 h +.6883 g 1553 3211 N -51 0 0 34 51 0 h +.6969 g 1553 3245 N -51 0 0 33 51 0 h +.7056 g 1553 3278 N -51 0 0 34 51 0 h +.7142 g 1553 3312 N -51 0 0 33 51 0 h +.7229 g 1553 3345 N -51 0 0 34 51 0 h +.7315 g 1553 3379 N -51 0 0 33 51 0 h +.7402 g 1553 3412 N -51 0 0 34 51 0 h +.7488 g 1553 3446 N -51 0 0 34 51 0 h +.7575 g 1553 3480 N -51 0 0 33 51 0 h +.7661 g 1553 3513 N -51 0 0 34 51 0 h +.7748 g 1553 3547 N -51 0 0 33 51 0 h +.7834 g 1553 3580 N -51 0 0 34 51 0 h +.792 g 1553 3614 N -51 0 0 34 51 0 h +.8007 g 1553 3648 N -51 0 0 33 51 0 h +.8093 g 1553 3681 N -51 0 0 34 51 0 h +.818 g 1553 3715 N -51 0 0 33 51 0 h +.8266 g 1553 3748 N -51 0 0 34 51 0 h +.8353 g 1553 3782 N -51 0 0 34 51 0 h +.8439 g 1553 3816 N -51 0 0 33 51 0 h +.8526 g 1553 3849 N -51 0 0 34 51 0 h +.8612 g 1553 3883 N -51 0 0 33 51 0 h +.8699 g 1553 3916 N -51 0 0 34 51 0 h +.8785 g 1553 3950 N -51 0 0 33 51 0 h +.8872 g 1553 3983 N -51 0 0 34 51 0 h +.8958 g 1553 4017 N -51 0 0 34 51 0 h +.9045 g 1553 4051 N -51 0 0 33 51 0 h +.9131 g 1553 4084 N -51 0 0 34 51 0 h +.9218 g 1553 4118 N -51 0 0 33 51 0 h +.9304 g 1553 4151 N -51 0 0 34 51 0 h +.939 g 1553 4185 N -51 0 0 34 51 0 h +.9477 g 1553 4219 N -51 0 0 33 51 0 h +.1103 g 1604 928 N -50 0 0 33 50 0 h +.1188 g 1604 961 N -50 0 0 34 50 0 h +.1273 g 1604 995 N -50 0 0 34 50 0 h +.1358 g 1604 1029 N -50 0 0 33 50 0 h +.1443 g 1604 1062 N -50 0 0 34 50 0 h +.1528 g 1604 1096 N -50 0 0 33 50 0 h +.1613 g 1604 1129 N -50 0 0 34 50 0 h +.1698 g 1604 1163 N -50 0 0 34 50 0 h +.1783 g 1604 1197 N -50 0 0 33 50 0 h +.1868 g 1604 1230 N -50 0 0 34 50 0 h +.1952 g 1604 1264 N -50 0 0 33 50 0 h +.2037 g 1604 1297 N -50 0 0 34 50 0 h +.2122 g 1604 1331 N -50 0 0 33 50 0 h +.2207 g 1604 1364 N -50 0 0 34 50 0 h +.2292 g 1604 1398 N -50 0 0 34 50 0 h +.2377 g 1604 1432 N -50 0 0 33 50 0 h +.2462 g 1604 1465 N -50 0 0 34 50 0 h +.2547 g 1604 1499 N -50 0 0 33 50 0 h +.2632 g 1604 1532 N -50 0 0 34 50 0 h +.2717 g 1604 1566 N -50 0 0 34 50 0 h +.2802 g 1604 1600 N -50 0 0 33 50 0 h +.2887 g 1604 1633 N -50 0 0 34 50 0 h +.2972 g 1604 1667 N -50 0 0 33 50 0 h +.3057 g 1604 1700 N -50 0 0 34 50 0 h +.3142 g 1604 1734 N -50 0 0 34 50 0 h +.3227 g 1604 1768 N -50 0 0 33 50 0 h +.3312 g 1604 1801 N -50 0 0 34 50 0 h +.3396 g 1604 1835 N -50 0 0 33 50 0 h +.3481 g 1604 1868 N -50 0 0 34 50 0 h +.3566 g 1604 1902 N -50 0 0 33 50 0 h +.3651 g 1604 1935 N -50 0 0 34 50 0 h +.3736 g 1604 1969 N -50 0 0 34 50 0 h +.3821 g 1604 2003 N -50 0 0 33 50 0 h +.3906 g 1604 2036 N -50 0 0 34 50 0 h +.3991 g 1604 2070 N -50 0 0 33 50 0 h +.4076 g 1604 2103 N -50 0 0 34 50 0 h +.4161 g 1604 2137 N -50 0 0 34 50 0 h +.4246 g 1604 2171 N -50 0 0 33 50 0 h +.4331 g 1604 2204 N -50 0 0 34 50 0 h +.4416 g 1604 2238 N -50 0 0 33 50 0 h +.4501 g 1604 2271 N -50 0 0 34 50 0 h +.4586 g 1604 2305 N -50 0 0 34 50 0 h +.4671 g 1604 2339 N -50 0 0 33 50 0 h +.4756 g 1604 2372 N -50 0 0 34 50 0 h +.484 g 1604 2406 N -50 0 0 33 50 0 h +.4925 g 1604 2439 N -50 0 0 34 50 0 h +.501 g 1604 2473 N -50 0 0 34 50 0 h +.5095 g 1604 2507 N -50 0 0 33 50 0 h +.518 g 1604 2540 N -50 0 0 34 50 0 h +.5265 g 1604 2574 N -50 0 0 32 50 0 h +.535 g 1604 2606 N -50 0 0 34 50 0 h +.5435 g 1604 2640 N -50 0 0 33 50 0 h +.552 g 1604 2673 N -50 0 0 34 50 0 h +.5605 g 1604 2707 N -50 0 0 34 50 0 h +.569 g 1604 2741 N -50 0 0 33 50 0 h +.5775 g 1604 2774 N -50 0 0 34 50 0 h +.586 g 1604 2808 N -50 0 0 33 50 0 h +.5945 g 1604 2841 N -50 0 0 34 50 0 h +.603 g 1604 2875 N -50 0 0 34 50 0 h +.6115 g 1604 2909 N -50 0 0 33 50 0 h +.6199 g 1604 2942 N -50 0 0 34 50 0 h +.6284 g 1604 2976 N -50 0 0 33 50 0 h +.6369 g 1604 3009 N -50 0 0 34 50 0 h +.6454 g 1604 3043 N -50 0 0 34 50 0 h +.6539 g 1604 3077 N -50 0 0 33 50 0 h +.6624 g 1604 3110 N -50 0 0 34 50 0 h +.6709 g 1604 3144 N -50 0 0 33 50 0 h +.6794 g 1604 3177 N -50 0 0 34 50 0 h +.6879 g 1604 3211 N -50 0 0 34 50 0 h +.6964 g 1604 3245 N -50 0 0 33 50 0 h +.7049 g 1604 3278 N -50 0 0 34 50 0 h +.7134 g 1604 3312 N -50 0 0 33 50 0 h +.7219 g 1604 3345 N -50 0 0 34 50 0 h +.7304 g 1604 3379 N -50 0 0 33 50 0 h +.7389 g 1604 3412 N -50 0 0 34 50 0 h +.7474 g 1604 3446 N -50 0 0 34 50 0 h +.7559 g 1604 3480 N -50 0 0 33 50 0 h +.7643 g 1604 3513 N -50 0 0 34 50 0 h +.7728 g 1604 3547 N -50 0 0 33 50 0 h +.7813 g 1604 3580 N -50 0 0 34 50 0 h +.7898 g 1604 3614 N -50 0 0 34 50 0 h +.7983 g 1604 3648 N -50 0 0 33 50 0 h +.8068 g 1604 3681 N -50 0 0 34 50 0 h +.8153 g 1604 3715 N -50 0 0 33 50 0 h +.8238 g 1604 3748 N -50 0 0 34 50 0 h +.8323 g 1604 3782 N -50 0 0 34 50 0 h +.8408 g 1604 3816 N -50 0 0 33 50 0 h +.8493 g 1604 3849 N -50 0 0 34 50 0 h +.8578 g 1604 3883 N -50 0 0 33 50 0 h +.8663 g 1604 3916 N -50 0 0 34 50 0 h +.8748 g 1604 3950 N -50 0 0 33 50 0 h +.8833 g 1604 3983 N -50 0 0 34 50 0 h +.8918 g 1604 4017 N -50 0 0 34 50 0 h +.9003 g 1604 4051 N -50 0 0 33 50 0 h +.9087 g 1604 4084 N -50 0 0 34 50 0 h +.9172 g 1604 4118 N -50 0 0 33 50 0 h +.9257 g 1604 4151 N -50 0 0 34 50 0 h +.9342 g 1604 4185 N -50 0 0 34 50 0 h +.9427 g 1604 4219 N -50 0 0 33 50 0 h +.1203 g 1654 928 N -51 0 0 33 51 0 h +.1287 g 1654 961 N -51 0 0 34 51 0 h +.137 g 1654 995 N -51 0 0 34 51 0 h +.1454 g 1654 1029 N -51 0 0 33 51 0 h +.1537 g 1654 1062 N -51 0 0 34 51 0 h +.162 g 1654 1096 N -51 0 0 33 51 0 h +.1704 g 1654 1129 N -51 0 0 34 51 0 h +.1787 g 1654 1163 N -51 0 0 34 51 0 h +.1871 g 1654 1197 N -51 0 0 33 51 0 h +.1954 g 1654 1230 N -51 0 0 34 51 0 h +.2037 g 1654 1264 N -51 0 0 33 51 0 h +.2121 g 1654 1297 N -51 0 0 34 51 0 h +.2204 g 1654 1331 N -51 0 0 33 51 0 h +.2288 g 1654 1364 N -51 0 0 34 51 0 h +.2371 g 1654 1398 N -51 0 0 34 51 0 h +.2454 g 1654 1432 N -51 0 0 33 51 0 h +.2538 g 1654 1465 N -51 0 0 34 51 0 h +.2621 g 1654 1499 N -51 0 0 33 51 0 h +.2705 g 1654 1532 N -51 0 0 34 51 0 h +.2788 g 1654 1566 N -51 0 0 34 51 0 h +.2872 g 1654 1600 N -51 0 0 33 51 0 h +.2955 g 1654 1633 N -51 0 0 34 51 0 h +.3038 g 1654 1667 N -51 0 0 33 51 0 h +.3122 g 1654 1700 N -51 0 0 34 51 0 h +.3205 g 1654 1734 N -51 0 0 34 51 0 h +.3289 g 1654 1768 N -51 0 0 33 51 0 h +.3372 g 1654 1801 N -51 0 0 34 51 0 h +.3455 g 1654 1835 N -51 0 0 33 51 0 h +.3539 g 1654 1868 N -51 0 0 34 51 0 h +.3622 g 1654 1902 N -51 0 0 33 51 0 h +.3706 g 1654 1935 N -51 0 0 34 51 0 h +.3789 g 1654 1969 N -51 0 0 34 51 0 h +.3872 g 1654 2003 N -51 0 0 33 51 0 h +.3956 g 1654 2036 N -51 0 0 34 51 0 h +.4039 g 1654 2070 N -51 0 0 33 51 0 h +.4123 g 1654 2103 N -51 0 0 34 51 0 h +.4206 g 1654 2137 N -51 0 0 34 51 0 h +.4289 g 1654 2171 N -51 0 0 33 51 0 h +.4373 g 1654 2204 N -51 0 0 34 51 0 h +.4456 g 1654 2238 N -51 0 0 33 51 0 h +.454 g 1654 2271 N -51 0 0 34 51 0 h +.4623 g 1654 2305 N -51 0 0 34 51 0 h +.4707 g 1654 2339 N -51 0 0 33 51 0 h +.479 g 1654 2372 N -51 0 0 34 51 0 h +.4873 g 1654 2406 N -51 0 0 33 51 0 h +.4957 g 1654 2439 N -51 0 0 34 51 0 h +.504 g 1654 2473 N -51 0 0 34 51 0 h +.5124 g 1654 2507 N -51 0 0 33 51 0 h +.5207 g 1654 2540 N -51 0 0 34 51 0 h +.529 g 1654 2574 N -51 0 0 32 51 0 h +.5374 g 1654 2606 N -51 0 0 34 51 0 h +.5457 g 1654 2640 N -51 0 0 33 51 0 h +.5541 g 1654 2673 N -51 0 0 34 51 0 h +.5624 g 1654 2707 N -51 0 0 34 51 0 h +.5707 g 1654 2741 N -51 0 0 33 51 0 h +.5791 g 1654 2774 N -51 0 0 34 51 0 h +.5874 g 1654 2808 N -51 0 0 33 51 0 h +.5958 g 1654 2841 N -51 0 0 34 51 0 h +.6041 g 1654 2875 N -51 0 0 34 51 0 h +.6125 g 1654 2909 N -51 0 0 33 51 0 h +.6208 g 1654 2942 N -51 0 0 34 51 0 h +.6291 g 1654 2976 N -51 0 0 33 51 0 h +.6375 g 1654 3009 N -51 0 0 34 51 0 h +.6458 g 1654 3043 N -51 0 0 34 51 0 h +.6542 g 1654 3077 N -51 0 0 33 51 0 h +.6625 g 1654 3110 N -51 0 0 34 51 0 h +.6708 g 1654 3144 N -51 0 0 33 51 0 h +.6792 g 1654 3177 N -51 0 0 34 51 0 h +.6875 g 1654 3211 N -51 0 0 34 51 0 h +.6959 g 1654 3245 N -51 0 0 33 51 0 h +.7042 g 1654 3278 N -51 0 0 34 51 0 h +.7125 g 1654 3312 N -51 0 0 33 51 0 h +.7209 g 1654 3345 N -51 0 0 34 51 0 h +.7292 g 1654 3379 N -51 0 0 33 51 0 h +.7376 g 1654 3412 N -51 0 0 34 51 0 h +.7459 g 1654 3446 N -51 0 0 34 51 0 h +.7542 g 1654 3480 N -51 0 0 33 51 0 h +.7626 g 1654 3513 N -51 0 0 34 51 0 h +.7709 g 1654 3547 N -51 0 0 33 51 0 h +.7793 g 1654 3580 N -51 0 0 34 51 0 h +.7876 g 1654 3614 N -51 0 0 34 51 0 h +.796 g 1654 3648 N -51 0 0 33 51 0 h +.8043 g 1654 3681 N -51 0 0 34 51 0 h +.8126 g 1654 3715 N -51 0 0 33 51 0 h +.821 g 1654 3748 N -51 0 0 34 51 0 h +.8293 g 1654 3782 N -51 0 0 34 51 0 h +.8377 g 1654 3816 N -51 0 0 33 51 0 h +.846 g 1654 3849 N -51 0 0 34 51 0 h +.8543 g 1654 3883 N -51 0 0 33 51 0 h +.8627 g 1654 3916 N -51 0 0 34 51 0 h +.871 g 1654 3950 N -51 0 0 33 51 0 h +.8794 g 1654 3983 N -51 0 0 34 51 0 h +.8877 g 1654 4017 N -51 0 0 34 51 0 h +.896 g 1654 4051 N -51 0 0 33 51 0 h +.9044 g 1654 4084 N -51 0 0 34 51 0 h +.9127 g 1654 4118 N -51 0 0 33 51 0 h +.9211 g 1654 4151 N -51 0 0 34 51 0 h +.9294 g 1654 4185 N -51 0 0 34 51 0 h +.9377 g 1654 4219 N -51 0 0 33 51 0 h +.1304 g 1705 928 N -50 0 0 33 50 0 h +.1385 g 1705 961 N -50 0 0 34 50 0 h +.1467 g 1705 995 N -50 0 0 34 50 0 h +.1549 g 1705 1029 N -50 0 0 33 50 0 h +.1631 g 1705 1062 N -50 0 0 34 50 0 h +.1713 g 1705 1096 N -50 0 0 33 50 0 h +.1795 g 1705 1129 N -50 0 0 34 50 0 h +.1877 g 1705 1163 N -50 0 0 34 50 0 h +.1959 g 1705 1197 N -50 0 0 33 50 0 h +.204 g 1705 1230 N -50 0 0 34 50 0 h +.2122 g 1705 1264 N -50 0 0 33 50 0 h +.2204 g 1705 1297 N -50 0 0 34 50 0 h +.2286 g 1705 1331 N -50 0 0 33 50 0 h +.2368 g 1705 1364 N -50 0 0 34 50 0 h +.245 g 1705 1398 N -50 0 0 34 50 0 h +.2532 g 1705 1432 N -50 0 0 33 50 0 h +.2614 g 1705 1465 N -50 0 0 34 50 0 h +.2696 g 1705 1499 N -50 0 0 33 50 0 h +.2777 g 1705 1532 N -50 0 0 34 50 0 h +.2859 g 1705 1566 N -50 0 0 34 50 0 h +.2941 g 1705 1600 N -50 0 0 33 50 0 h +.3023 g 1705 1633 N -50 0 0 34 50 0 h +.3105 g 1705 1667 N -50 0 0 33 50 0 h +.3187 g 1705 1700 N -50 0 0 34 50 0 h +.3269 g 1705 1734 N -50 0 0 34 50 0 h +.3351 g 1705 1768 N -50 0 0 33 50 0 h +.3432 g 1705 1801 N -50 0 0 34 50 0 h +.3514 g 1705 1835 N -50 0 0 33 50 0 h +.3596 g 1705 1868 N -50 0 0 34 50 0 h +.3678 g 1705 1902 N -50 0 0 33 50 0 h +.376 g 1705 1935 N -50 0 0 34 50 0 h +.3842 g 1705 1969 N -50 0 0 34 50 0 h +.3924 g 1705 2003 N -50 0 0 33 50 0 h +.4006 g 1705 2036 N -50 0 0 34 50 0 h +.4087 g 1705 2070 N -50 0 0 33 50 0 h +.4169 g 1705 2103 N -50 0 0 34 50 0 h +.4251 g 1705 2137 N -50 0 0 34 50 0 h +.4333 g 1705 2171 N -50 0 0 33 50 0 h +.4415 g 1705 2204 N -50 0 0 34 50 0 h +.4497 g 1705 2238 N -50 0 0 33 50 0 h +.4579 g 1705 2271 N -50 0 0 34 50 0 h +.4661 g 1705 2305 N -50 0 0 34 50 0 h +.4743 g 1705 2339 N -50 0 0 33 50 0 h +.4824 g 1705 2372 N -50 0 0 34 50 0 h +.4906 g 1705 2406 N -50 0 0 33 50 0 h +.4988 g 1705 2439 N -50 0 0 34 50 0 h +.507 g 1705 2473 N -50 0 0 34 50 0 h +.5152 g 1705 2507 N -50 0 0 33 50 0 h +.5234 g 1705 2540 N -50 0 0 34 50 0 h +.5316 g 1705 2574 N -50 0 0 32 50 0 h +.5398 g 1705 2606 N -50 0 0 34 50 0 h +.5479 g 1705 2640 N -50 0 0 33 50 0 h +.5561 g 1705 2673 N -50 0 0 34 50 0 h +.5643 g 1705 2707 N -50 0 0 34 50 0 h +.5725 g 1705 2741 N -50 0 0 33 50 0 h +.5807 g 1705 2774 N -50 0 0 34 50 0 h +.5889 g 1705 2808 N -50 0 0 33 50 0 h +.5971 g 1705 2841 N -50 0 0 34 50 0 h +.6053 g 1705 2875 N -50 0 0 34 50 0 h +.6134 g 1705 2909 N -50 0 0 33 50 0 h +.6216 g 1705 2942 N -50 0 0 34 50 0 h +.6298 g 1705 2976 N -50 0 0 33 50 0 h +.638 g 1705 3009 N -50 0 0 34 50 0 h +.6462 g 1705 3043 N -50 0 0 34 50 0 h +.6544 g 1705 3077 N -50 0 0 33 50 0 h +.6626 g 1705 3110 N -50 0 0 34 50 0 h +.6708 g 1705 3144 N -50 0 0 33 50 0 h +.6789 g 1705 3177 N -50 0 0 34 50 0 h +.6871 g 1705 3211 N -50 0 0 34 50 0 h +.6953 g 1705 3245 N -50 0 0 33 50 0 h +.7035 g 1705 3278 N -50 0 0 34 50 0 h +.7117 g 1705 3312 N -50 0 0 33 50 0 h +.7199 g 1705 3345 N -50 0 0 34 50 0 h +.7281 g 1705 3379 N -50 0 0 33 50 0 h +.7363 g 1705 3412 N -50 0 0 34 50 0 h +.7445 g 1705 3446 N -50 0 0 34 50 0 h +.7526 g 1705 3480 N -50 0 0 33 50 0 h +.7608 g 1705 3513 N -50 0 0 34 50 0 h +.769 g 1705 3547 N -50 0 0 33 50 0 h +.7772 g 1705 3580 N -50 0 0 34 50 0 h +.7854 g 1705 3614 N -50 0 0 34 50 0 h +.7936 g 1705 3648 N -50 0 0 33 50 0 h +.8018 g 1705 3681 N -50 0 0 34 50 0 h +.81 g 1705 3715 N -50 0 0 33 50 0 h +.8181 g 1705 3748 N -50 0 0 34 50 0 h +.8263 g 1705 3782 N -50 0 0 34 50 0 h +.8345 g 1705 3816 N -50 0 0 33 50 0 h +.8427 g 1705 3849 N -50 0 0 34 50 0 h +.8509 g 1705 3883 N -50 0 0 33 50 0 h +.8591 g 1705 3916 N -50 0 0 34 50 0 h +.8673 g 1705 3950 N -50 0 0 33 50 0 h +.8755 g 1705 3983 N -50 0 0 34 50 0 h +.8836 g 1705 4017 N -50 0 0 34 50 0 h +.8918 g 1705 4051 N -50 0 0 33 50 0 h +.9 g 1705 4084 N -50 0 0 34 50 0 h +.9082 g 1705 4118 N -50 0 0 33 50 0 h +.9164 g 1705 4151 N -50 0 0 34 50 0 h +.9246 g 1705 4185 N -50 0 0 34 50 0 h +.9328 g 1705 4219 N -50 0 0 33 50 0 h +.1404 g 1755 928 N -51 0 0 33 51 0 h +.1484 g 1755 961 N -51 0 0 34 51 0 h +.1565 g 1755 995 N -51 0 0 34 51 0 h +.1645 g 1755 1029 N -51 0 0 33 51 0 h +.1725 g 1755 1062 N -51 0 0 34 51 0 h +.1806 g 1755 1096 N -51 0 0 33 51 0 h +.1886 g 1755 1129 N -51 0 0 34 51 0 h +.1966 g 1755 1163 N -51 0 0 34 51 0 h +.2047 g 1755 1197 N -51 0 0 33 51 0 h +.2127 g 1755 1230 N -51 0 0 34 51 0 h +.2207 g 1755 1264 N -51 0 0 33 51 0 h +.2288 g 1755 1297 N -51 0 0 34 51 0 h +.2368 g 1755 1331 N -51 0 0 33 51 0 h +.2448 g 1755 1364 N -51 0 0 34 51 0 h +.2529 g 1755 1398 N -51 0 0 34 51 0 h +.2609 g 1755 1432 N -51 0 0 33 51 0 h +.2689 g 1755 1465 N -51 0 0 34 51 0 h +.277 g 1755 1499 N -51 0 0 33 51 0 h +.285 g 1755 1532 N -51 0 0 34 51 0 h +.293 g 1755 1566 N -51 0 0 34 51 0 h +.3011 g 1755 1600 N -51 0 0 33 51 0 h +.3091 g 1755 1633 N -51 0 0 34 51 0 h +.3171 g 1755 1667 N -51 0 0 33 51 0 h +.3252 g 1755 1700 N -51 0 0 34 51 0 h +.3332 g 1755 1734 N -51 0 0 34 51 0 h +.3413 g 1755 1768 N -51 0 0 33 51 0 h +.3493 g 1755 1801 N -51 0 0 34 51 0 h +.3573 g 1755 1835 N -51 0 0 33 51 0 h +.3654 g 1755 1868 N -51 0 0 34 51 0 h +.3734 g 1755 1902 N -51 0 0 33 51 0 h +.3814 g 1755 1935 N -51 0 0 34 51 0 h +.3895 g 1755 1969 N -51 0 0 34 51 0 h +.3975 g 1755 2003 N -51 0 0 33 51 0 h +.4055 g 1755 2036 N -51 0 0 34 51 0 h +.4136 g 1755 2070 N -51 0 0 33 51 0 h +.4216 g 1755 2103 N -51 0 0 34 51 0 h +.4296 g 1755 2137 N -51 0 0 34 51 0 h +.4377 g 1755 2171 N -51 0 0 33 51 0 h +.4457 g 1755 2204 N -51 0 0 34 51 0 h +.4537 g 1755 2238 N -51 0 0 33 51 0 h +.4618 g 1755 2271 N -51 0 0 34 51 0 h +.4698 g 1755 2305 N -51 0 0 34 51 0 h +.4778 g 1755 2339 N -51 0 0 33 51 0 h +.4859 g 1755 2372 N -51 0 0 34 51 0 h +.4939 g 1755 2406 N -51 0 0 33 51 0 h +.502 g 1755 2439 N -51 0 0 34 51 0 h +.51 g 1755 2473 N -51 0 0 34 51 0 h +.518 g 1755 2507 N -51 0 0 33 51 0 h +.5261 g 1755 2540 N -51 0 0 34 51 0 h +.5341 g 1755 2574 N -51 0 0 32 51 0 h +.5421 g 1755 2606 N -51 0 0 34 51 0 h +.5502 g 1755 2640 N -51 0 0 33 51 0 h +.5582 g 1755 2673 N -51 0 0 34 51 0 h +.5662 g 1755 2707 N -51 0 0 34 51 0 h +.5743 g 1755 2741 N -51 0 0 33 51 0 h +.5823 g 1755 2774 N -51 0 0 34 51 0 h +.5903 g 1755 2808 N -51 0 0 33 51 0 h +.5984 g 1755 2841 N -51 0 0 34 51 0 h +.6064 g 1755 2875 N -51 0 0 34 51 0 h +.6144 g 1755 2909 N -51 0 0 33 51 0 h +.6225 g 1755 2942 N -51 0 0 34 51 0 h +.6305 g 1755 2976 N -51 0 0 33 51 0 h +.6385 g 1755 3009 N -51 0 0 34 51 0 h +.6466 g 1755 3043 N -51 0 0 34 51 0 h +.6546 g 1755 3077 N -51 0 0 33 51 0 h +.6626 g 1755 3110 N -51 0 0 34 51 0 h +.6707 g 1755 3144 N -51 0 0 33 51 0 h +.6787 g 1755 3177 N -51 0 0 34 51 0 h +.6868 g 1755 3211 N -51 0 0 34 51 0 h +.6948 g 1755 3245 N -51 0 0 33 51 0 h +.7028 g 1755 3278 N -51 0 0 34 51 0 h +.7109 g 1755 3312 N -51 0 0 33 51 0 h +.7189 g 1755 3345 N -51 0 0 34 51 0 h +.7269 g 1755 3379 N -51 0 0 33 51 0 h +.735 g 1755 3412 N -51 0 0 34 51 0 h +.743 g 1755 3446 N -51 0 0 34 51 0 h +.751 g 1755 3480 N -51 0 0 33 51 0 h +.7591 g 1755 3513 N -51 0 0 34 51 0 h +.7671 g 1755 3547 N -51 0 0 33 51 0 h +.7751 g 1755 3580 N -51 0 0 34 51 0 h +.7832 g 1755 3614 N -51 0 0 34 51 0 h +.7912 g 1755 3648 N -51 0 0 33 51 0 h +.7992 g 1755 3681 N -51 0 0 34 51 0 h +.8073 g 1755 3715 N -51 0 0 33 51 0 h +.8153 g 1755 3748 N -51 0 0 34 51 0 h +.8233 g 1755 3782 N -51 0 0 34 51 0 h +.8314 g 1755 3816 N -51 0 0 33 51 0 h +.8394 g 1755 3849 N -51 0 0 34 51 0 h +.8475 g 1755 3883 N -51 0 0 33 51 0 h +.8555 g 1755 3916 N -51 0 0 34 51 0 h +.8635 g 1755 3950 N -51 0 0 33 51 0 h +.8716 g 1755 3983 N -51 0 0 34 51 0 h +.8796 g 1755 4017 N -51 0 0 34 51 0 h +.8876 g 1755 4051 N -51 0 0 33 51 0 h +.8957 g 1755 4084 N -51 0 0 34 51 0 h +.9037 g 1755 4118 N -51 0 0 33 51 0 h +.9117 g 1755 4151 N -51 0 0 34 51 0 h +.9198 g 1755 4185 N -51 0 0 34 51 0 h +.9278 g 1755 4219 N -51 0 0 33 51 0 h +.1504 g 1806 928 N -50 0 0 33 50 0 h +.1583 g 1806 961 N -50 0 0 34 50 0 h +.1662 g 1806 995 N -50 0 0 34 50 0 h +.1741 g 1806 1029 N -50 0 0 33 50 0 h +.1819 g 1806 1062 N -50 0 0 34 50 0 h +.1898 g 1806 1096 N -50 0 0 33 50 0 h +.1977 g 1806 1129 N -50 0 0 34 50 0 h +.2056 g 1806 1163 N -50 0 0 34 50 0 h +.2135 g 1806 1197 N -50 0 0 33 50 0 h +.2213 g 1806 1230 N -50 0 0 34 50 0 h +.2292 g 1806 1264 N -50 0 0 33 50 0 h +.2371 g 1806 1297 N -50 0 0 34 50 0 h +.245 g 1806 1331 N -50 0 0 33 50 0 h +.2529 g 1806 1364 N -50 0 0 34 50 0 h +.2608 g 1806 1398 N -50 0 0 34 50 0 h +.2686 g 1806 1432 N -50 0 0 33 50 0 h +.2765 g 1806 1465 N -50 0 0 34 50 0 h +.2844 g 1806 1499 N -50 0 0 33 50 0 h +.2923 g 1806 1532 N -50 0 0 34 50 0 h +.3002 g 1806 1566 N -50 0 0 34 50 0 h +.308 g 1806 1600 N -50 0 0 33 50 0 h +.3159 g 1806 1633 N -50 0 0 34 50 0 h +.3238 g 1806 1667 N -50 0 0 33 50 0 h +.3317 g 1806 1700 N -50 0 0 34 50 0 h +.3396 g 1806 1734 N -50 0 0 34 50 0 h +.3475 g 1806 1768 N -50 0 0 33 50 0 h +.3553 g 1806 1801 N -50 0 0 34 50 0 h +.3632 g 1806 1835 N -50 0 0 33 50 0 h +.3711 g 1806 1868 N -50 0 0 34 50 0 h +.379 g 1806 1902 N -50 0 0 33 50 0 h +.3869 g 1806 1935 N -50 0 0 34 50 0 h +.3947 g 1806 1969 N -50 0 0 34 50 0 h +.4026 g 1806 2003 N -50 0 0 33 50 0 h +.4105 g 1806 2036 N -50 0 0 34 50 0 h +.4184 g 1806 2070 N -50 0 0 33 50 0 h +.4263 g 1806 2103 N -50 0 0 34 50 0 h +.4342 g 1806 2137 N -50 0 0 34 50 0 h +.442 g 1806 2171 N -50 0 0 33 50 0 h +.4499 g 1806 2204 N -50 0 0 34 50 0 h +.4578 g 1806 2238 N -50 0 0 33 50 0 h +.4657 g 1806 2271 N -50 0 0 34 50 0 h +.4736 g 1806 2305 N -50 0 0 34 50 0 h +.4814 g 1806 2339 N -50 0 0 33 50 0 h +.4893 g 1806 2372 N -50 0 0 34 50 0 h +.4972 g 1806 2406 N -50 0 0 33 50 0 h +.5051 g 1806 2439 N -50 0 0 34 50 0 h +.513 g 1806 2473 N -50 0 0 34 50 0 h +.5209 g 1806 2507 N -50 0 0 33 50 0 h +.5287 g 1806 2540 N -50 0 0 34 50 0 h +.5366 g 1806 2574 N -50 0 0 32 50 0 h +.5445 g 1806 2606 N -50 0 0 34 50 0 h +.5524 g 1806 2640 N -50 0 0 33 50 0 h +.5603 g 1806 2673 N -50 0 0 34 50 0 h +.5681 g 1806 2707 N -50 0 0 34 50 0 h +.576 g 1806 2741 N -50 0 0 33 50 0 h +.5839 g 1806 2774 N -50 0 0 34 50 0 h +.5918 g 1806 2808 N -50 0 0 33 50 0 h +.5997 g 1806 2841 N -50 0 0 34 50 0 h +.6076 g 1806 2875 N -50 0 0 34 50 0 h +.6154 g 1806 2909 N -50 0 0 33 50 0 h +.6233 g 1806 2942 N -50 0 0 34 50 0 h +.6312 g 1806 2976 N -50 0 0 33 50 0 h +.6391 g 1806 3009 N -50 0 0 34 50 0 h +.647 g 1806 3043 N -50 0 0 34 50 0 h +.6548 g 1806 3077 N -50 0 0 33 50 0 h +.6627 g 1806 3110 N -50 0 0 34 50 0 h +.6706 g 1806 3144 N -50 0 0 33 50 0 h +.6785 g 1806 3177 N -50 0 0 34 50 0 h +.6864 g 1806 3211 N -50 0 0 34 50 0 h +.6943 g 1806 3245 N -50 0 0 33 50 0 h +.7021 g 1806 3278 N -50 0 0 34 50 0 h +.71 g 1806 3312 N -50 0 0 33 50 0 h +.7179 g 1806 3345 N -50 0 0 34 50 0 h +.7258 g 1806 3379 N -50 0 0 33 50 0 h +.7337 g 1806 3412 N -50 0 0 34 50 0 h +.7415 g 1806 3446 N -50 0 0 34 50 0 h +.7494 g 1806 3480 N -50 0 0 33 50 0 h +.7573 g 1806 3513 N -50 0 0 34 50 0 h +.7652 g 1806 3547 N -50 0 0 33 50 0 h +.7731 g 1806 3580 N -50 0 0 34 50 0 h +.781 g 1806 3614 N -50 0 0 34 50 0 h +.7888 g 1806 3648 N -50 0 0 33 50 0 h +.7967 g 1806 3681 N -50 0 0 34 50 0 h +.8046 g 1806 3715 N -50 0 0 33 50 0 h +.8125 g 1806 3748 N -50 0 0 34 50 0 h +.8204 g 1806 3782 N -50 0 0 34 50 0 h +.8282 g 1806 3816 N -50 0 0 33 50 0 h +.8361 g 1806 3849 N -50 0 0 34 50 0 h +.844 g 1806 3883 N -50 0 0 33 50 0 h +.8519 g 1806 3916 N -50 0 0 34 50 0 h +.8598 g 1806 3950 N -50 0 0 33 50 0 h +.8677 g 1806 3983 N -50 0 0 34 50 0 h +.8755 g 1806 4017 N -50 0 0 34 50 0 h +.8834 g 1806 4051 N -50 0 0 33 50 0 h +.8913 g 1806 4084 N -50 0 0 34 50 0 h +.8992 g 1806 4118 N -50 0 0 33 50 0 h +.9071 g 1806 4151 N -50 0 0 34 50 0 h +.9149 g 1806 4185 N -50 0 0 34 50 0 h +.9228 g 1806 4219 N -50 0 0 33 50 0 h +.1604 g 1856 928 N -51 0 0 33 51 0 h +.1682 g 1856 961 N -51 0 0 34 51 0 h +.1759 g 1856 995 N -51 0 0 34 51 0 h +.1836 g 1856 1029 N -51 0 0 33 51 0 h +.1913 g 1856 1062 N -51 0 0 34 51 0 h +.1991 g 1856 1096 N -51 0 0 33 51 0 h +.2068 g 1856 1129 N -51 0 0 34 51 0 h +.2145 g 1856 1163 N -51 0 0 34 51 0 h +.2223 g 1856 1197 N -51 0 0 33 51 0 h +.23 g 1856 1230 N -51 0 0 34 51 0 h +.2377 g 1856 1264 N -51 0 0 33 51 0 h +.2454 g 1856 1297 N -51 0 0 34 51 0 h +.2532 g 1856 1331 N -51 0 0 33 51 0 h +.2609 g 1856 1364 N -51 0 0 34 51 0 h +.2686 g 1856 1398 N -51 0 0 34 51 0 h +.2764 g 1856 1432 N -51 0 0 33 51 0 h +.2841 g 1856 1465 N -51 0 0 34 51 0 h +.2918 g 1856 1499 N -51 0 0 33 51 0 h +.2995 g 1856 1532 N -51 0 0 34 51 0 h +.3073 g 1856 1566 N -51 0 0 34 51 0 h +.315 g 1856 1600 N -51 0 0 33 51 0 h +.3227 g 1856 1633 N -51 0 0 34 51 0 h +.3305 g 1856 1667 N -51 0 0 33 51 0 h +.3382 g 1856 1700 N -51 0 0 34 51 0 h +.3459 g 1856 1734 N -51 0 0 34 51 0 h +.3537 g 1856 1768 N -51 0 0 33 51 0 h +.3614 g 1856 1801 N -51 0 0 34 51 0 h +.3691 g 1856 1835 N -51 0 0 33 51 0 h +.3768 g 1856 1868 N -51 0 0 34 51 0 h +.3846 g 1856 1902 N -51 0 0 33 51 0 h +.3923 g 1856 1935 N -51 0 0 34 51 0 h +.4 g 1856 1969 N -51 0 0 34 51 0 h +.4078 g 1856 2003 N -51 0 0 33 51 0 h +.4155 g 1856 2036 N -51 0 0 34 51 0 h +.4232 g 1856 2070 N -51 0 0 33 51 0 h +.4309 g 1856 2103 N -51 0 0 34 51 0 h +.4387 g 1856 2137 N -51 0 0 34 51 0 h +.4464 g 1856 2171 N -51 0 0 33 51 0 h +.4541 g 1856 2204 N -51 0 0 34 51 0 h +.4619 g 1856 2238 N -51 0 0 33 51 0 h +.4696 g 1856 2271 N -51 0 0 34 51 0 h +.4773 g 1856 2305 N -51 0 0 34 51 0 h +.485 g 1856 2339 N -51 0 0 33 51 0 h +.4928 g 1856 2372 N -51 0 0 34 51 0 h +.5005 g 1856 2406 N -51 0 0 33 51 0 h +.5082 g 1856 2439 N -51 0 0 34 51 0 h +.516 g 1856 2473 N -51 0 0 34 51 0 h +.5237 g 1856 2507 N -51 0 0 33 51 0 h +.5314 g 1856 2540 N -51 0 0 34 51 0 h +.5391 g 1856 2574 N -51 0 0 32 51 0 h +.5469 g 1856 2606 N -51 0 0 34 51 0 h +.5546 g 1856 2640 N -51 0 0 33 51 0 h +.5623 g 1856 2673 N -51 0 0 34 51 0 h +.5701 g 1856 2707 N -51 0 0 34 51 0 h +.5778 g 1856 2741 N -51 0 0 33 51 0 h +.5855 g 1856 2774 N -51 0 0 34 51 0 h +.5932 g 1856 2808 N -51 0 0 33 51 0 h +.601 g 1856 2841 N -51 0 0 34 51 0 h +.6087 g 1856 2875 N -51 0 0 34 51 0 h +.6164 g 1856 2909 N -51 0 0 33 51 0 h +.6242 g 1856 2942 N -51 0 0 34 51 0 h +.6319 g 1856 2976 N -51 0 0 33 51 0 h +.6396 g 1856 3009 N -51 0 0 34 51 0 h +.6473 g 1856 3043 N -51 0 0 34 51 0 h +.6551 g 1856 3077 N -51 0 0 33 51 0 h +.6628 g 1856 3110 N -51 0 0 34 51 0 h +.6705 g 1856 3144 N -51 0 0 33 51 0 h +.6783 g 1856 3177 N -51 0 0 34 51 0 h +.686 g 1856 3211 N -51 0 0 34 51 0 h +.6937 g 1856 3245 N -51 0 0 33 51 0 h +.7014 g 1856 3278 N -51 0 0 34 51 0 h +.7092 g 1856 3312 N -51 0 0 33 51 0 h +.7169 g 1856 3345 N -51 0 0 34 51 0 h +.7246 g 1856 3379 N -51 0 0 33 51 0 h +.7324 g 1856 3412 N -51 0 0 34 51 0 h +.7401 g 1856 3446 N -51 0 0 34 51 0 h +.7478 g 1856 3480 N -51 0 0 33 51 0 h +.7555 g 1856 3513 N -51 0 0 34 51 0 h +.7633 g 1856 3547 N -51 0 0 33 51 0 h +.771 g 1856 3580 N -51 0 0 34 51 0 h +.7787 g 1856 3614 N -51 0 0 34 51 0 h +.7865 g 1856 3648 N -51 0 0 33 51 0 h +.7942 g 1856 3681 N -51 0 0 34 51 0 h +.8019 g 1856 3715 N -51 0 0 33 51 0 h +.8096 g 1856 3748 N -51 0 0 34 51 0 h +.8174 g 1856 3782 N -51 0 0 34 51 0 h +.8251 g 1856 3816 N -51 0 0 33 51 0 h +.8328 g 1856 3849 N -51 0 0 34 51 0 h +.8406 g 1856 3883 N -51 0 0 33 51 0 h +.8483 g 1856 3916 N -51 0 0 34 51 0 h +.856 g 1856 3950 N -51 0 0 33 51 0 h +.8638 g 1856 3983 N -51 0 0 34 51 0 h +.8715 g 1856 4017 N -51 0 0 34 51 0 h +.8792 g 1856 4051 N -51 0 0 33 51 0 h +.8869 g 1856 4084 N -51 0 0 34 51 0 h +.8947 g 1856 4118 N -51 0 0 33 51 0 h +.9024 g 1856 4151 N -51 0 0 34 51 0 h +.9101 g 1856 4185 N -51 0 0 34 51 0 h +.9179 g 1856 4219 N -51 0 0 33 51 0 h +.1705 g 1907 928 N -50 0 0 33 50 0 h +.178 g 1907 961 N -50 0 0 34 50 0 h +.1856 g 1907 995 N -50 0 0 34 50 0 h +.1932 g 1907 1029 N -50 0 0 33 50 0 h +.2008 g 1907 1062 N -50 0 0 34 50 0 h +.2083 g 1907 1096 N -50 0 0 33 50 0 h +.2159 g 1907 1129 N -50 0 0 34 50 0 h +.2235 g 1907 1163 N -50 0 0 34 50 0 h +.2311 g 1907 1197 N -50 0 0 33 50 0 h +.2386 g 1907 1230 N -50 0 0 34 50 0 h +.2462 g 1907 1264 N -50 0 0 33 50 0 h +.2538 g 1907 1297 N -50 0 0 34 50 0 h +.2614 g 1907 1331 N -50 0 0 33 50 0 h +.2689 g 1907 1364 N -50 0 0 34 50 0 h +.2765 g 1907 1398 N -50 0 0 34 50 0 h +.2841 g 1907 1432 N -50 0 0 33 50 0 h +.2917 g 1907 1465 N -50 0 0 34 50 0 h +.2992 g 1907 1499 N -50 0 0 33 50 0 h +.3068 g 1907 1532 N -50 0 0 34 50 0 h +.3144 g 1907 1566 N -50 0 0 34 50 0 h +.322 g 1907 1600 N -50 0 0 33 50 0 h +.3295 g 1907 1633 N -50 0 0 34 50 0 h +.3371 g 1907 1667 N -50 0 0 33 50 0 h +.3447 g 1907 1700 N -50 0 0 34 50 0 h +.3523 g 1907 1734 N -50 0 0 34 50 0 h +.3598 g 1907 1768 N -50 0 0 33 50 0 h +.3674 g 1907 1801 N -50 0 0 34 50 0 h +.375 g 1907 1835 N -50 0 0 33 50 0 h +.3826 g 1907 1868 N -50 0 0 34 50 0 h +.3902 g 1907 1902 N -50 0 0 33 50 0 h +.3977 g 1907 1935 N -50 0 0 34 50 0 h +.4053 g 1907 1969 N -50 0 0 34 50 0 h +.4129 g 1907 2003 N -50 0 0 33 50 0 h +.4205 g 1907 2036 N -50 0 0 34 50 0 h +.428 g 1907 2070 N -50 0 0 33 50 0 h +.4356 g 1907 2103 N -50 0 0 34 50 0 h +.4432 g 1907 2137 N -50 0 0 34 50 0 h +.4508 g 1907 2171 N -50 0 0 33 50 0 h +.4583 g 1907 2204 N -50 0 0 34 50 0 h +.4659 g 1907 2238 N -50 0 0 33 50 0 h +.4735 g 1907 2271 N -50 0 0 34 50 0 h +.4811 g 1907 2305 N -50 0 0 34 50 0 h +.4886 g 1907 2339 N -50 0 0 33 50 0 h +.4962 g 1907 2372 N -50 0 0 34 50 0 h +.5038 g 1907 2406 N -50 0 0 33 50 0 h +.5114 g 1907 2439 N -50 0 0 34 50 0 h +.5189 g 1907 2473 N -50 0 0 34 50 0 h +.5265 g 1907 2507 N -50 0 0 33 50 0 h +.5341 g 1907 2540 N -50 0 0 34 50 0 h +.5417 g 1907 2574 N -50 0 0 32 50 0 h +.5492 g 1907 2606 N -50 0 0 34 50 0 h +.5568 g 1907 2640 N -50 0 0 33 50 0 h +.5644 g 1907 2673 N -50 0 0 34 50 0 h +.572 g 1907 2707 N -50 0 0 34 50 0 h +.5795 g 1907 2741 N -50 0 0 33 50 0 h +.5871 g 1907 2774 N -50 0 0 34 50 0 h +.5947 g 1907 2808 N -50 0 0 33 50 0 h +.6023 g 1907 2841 N -50 0 0 34 50 0 h +.6098 g 1907 2875 N -50 0 0 34 50 0 h +.6174 g 1907 2909 N -50 0 0 33 50 0 h +.625 g 1907 2942 N -50 0 0 34 50 0 h +.6326 g 1907 2976 N -50 0 0 33 50 0 h +.6402 g 1907 3009 N -50 0 0 34 50 0 h +.6477 g 1907 3043 N -50 0 0 34 50 0 h +.6553 g 1907 3077 N -50 0 0 33 50 0 h +.6629 g 1907 3110 N -50 0 0 34 50 0 h +.6705 g 1907 3144 N -50 0 0 33 50 0 h +.678 g 1907 3177 N -50 0 0 34 50 0 h +.6856 g 1907 3211 N -50 0 0 34 50 0 h +.6932 g 1907 3245 N -50 0 0 33 50 0 h +.7008 g 1907 3278 N -50 0 0 34 50 0 h +.7083 g 1907 3312 N -50 0 0 33 50 0 h +.7159 g 1907 3345 N -50 0 0 34 50 0 h +.7235 g 1907 3379 N -50 0 0 33 50 0 h +.7311 g 1907 3412 N -50 0 0 34 50 0 h +.7386 g 1907 3446 N -50 0 0 34 50 0 h +.7462 g 1907 3480 N -50 0 0 33 50 0 h +.7538 g 1907 3513 N -50 0 0 34 50 0 h +.7614 g 1907 3547 N -50 0 0 33 50 0 h +.7689 g 1907 3580 N -50 0 0 34 50 0 h +.7765 g 1907 3614 N -50 0 0 34 50 0 h +.7841 g 1907 3648 N -50 0 0 33 50 0 h +.7917 g 1907 3681 N -50 0 0 34 50 0 h +.7992 g 1907 3715 N -50 0 0 33 50 0 h +.8068 g 1907 3748 N -50 0 0 34 50 0 h +.8144 g 1907 3782 N -50 0 0 34 50 0 h +.822 g 1907 3816 N -50 0 0 33 50 0 h +.8295 g 1907 3849 N -50 0 0 34 50 0 h +.8371 g 1907 3883 N -50 0 0 33 50 0 h +.8447 g 1907 3916 N -50 0 0 34 50 0 h +.8523 g 1907 3950 N -50 0 0 33 50 0 h +.8598 g 1907 3983 N -50 0 0 34 50 0 h +.8674 g 1907 4017 N -50 0 0 34 50 0 h +.875 g 1907 4051 N -50 0 0 33 50 0 h +.8826 g 1907 4084 N -50 0 0 34 50 0 h +.8902 g 1907 4118 N -50 0 0 33 50 0 h +.8977 g 1907 4151 N -50 0 0 34 50 0 h +.9053 g 1907 4185 N -50 0 0 34 50 0 h +.9129 g 1907 4219 N -50 0 0 33 50 0 h +.1805 g 1957 928 N -51 0 0 33 51 0 h +.1879 g 1957 961 N -51 0 0 34 51 0 h +.1953 g 1957 995 N -51 0 0 34 51 0 h +.2027 g 1957 1029 N -51 0 0 33 51 0 h +.2102 g 1957 1062 N -51 0 0 34 51 0 h +.2176 g 1957 1096 N -51 0 0 33 51 0 h +.225 g 1957 1129 N -51 0 0 34 51 0 h +.2324 g 1957 1163 N -51 0 0 34 51 0 h +.2399 g 1957 1197 N -51 0 0 33 51 0 h +.2473 g 1957 1230 N -51 0 0 34 51 0 h +.2547 g 1957 1264 N -51 0 0 33 51 0 h +.2621 g 1957 1297 N -51 0 0 34 51 0 h +.2696 g 1957 1331 N -51 0 0 33 51 0 h +.277 g 1957 1364 N -51 0 0 34 51 0 h +.2844 g 1957 1398 N -51 0 0 34 51 0 h +.2918 g 1957 1432 N -51 0 0 33 51 0 h +.2992 g 1957 1465 N -51 0 0 34 51 0 h +.3067 g 1957 1499 N -51 0 0 33 51 0 h +.3141 g 1957 1532 N -51 0 0 34 51 0 h +.3215 g 1957 1566 N -51 0 0 34 51 0 h +.3289 g 1957 1600 N -51 0 0 33 51 0 h +.3364 g 1957 1633 N -51 0 0 34 51 0 h +.3438 g 1957 1667 N -51 0 0 33 51 0 h +.3512 g 1957 1700 N -51 0 0 34 51 0 h +.3586 g 1957 1734 N -51 0 0 34 51 0 h +.366 g 1957 1768 N -51 0 0 33 51 0 h +.3735 g 1957 1801 N -51 0 0 34 51 0 h +.3809 g 1957 1835 N -51 0 0 33 51 0 h +.3883 g 1957 1868 N -51 0 0 34 51 0 h +.3957 g 1957 1902 N -51 0 0 33 51 0 h +.4032 g 1957 1935 N -51 0 0 34 51 0 h +.4106 g 1957 1969 N -51 0 0 34 51 0 h +.418 g 1957 2003 N -51 0 0 33 51 0 h +.4254 g 1957 2036 N -51 0 0 34 51 0 h +.4329 g 1957 2070 N -51 0 0 33 51 0 h +.4403 g 1957 2103 N -51 0 0 34 51 0 h +.4477 g 1957 2137 N -51 0 0 34 51 0 h +.4551 g 1957 2171 N -51 0 0 33 51 0 h +.4625 g 1957 2204 N -51 0 0 34 51 0 h +.47 g 1957 2238 N -51 0 0 33 51 0 h +.4774 g 1957 2271 N -51 0 0 34 51 0 h +.4848 g 1957 2305 N -51 0 0 34 51 0 h +.4922 g 1957 2339 N -51 0 0 33 51 0 h +.4997 g 1957 2372 N -51 0 0 34 51 0 h +.5071 g 1957 2406 N -51 0 0 33 51 0 h +.5145 g 1957 2439 N -51 0 0 34 51 0 h +.5219 g 1957 2473 N -51 0 0 34 51 0 h +.5293 g 1957 2507 N -51 0 0 33 51 0 h +.5368 g 1957 2540 N -51 0 0 34 51 0 h +.5442 g 1957 2574 N -51 0 0 32 51 0 h +.5516 g 1957 2606 N -51 0 0 34 51 0 h +.559 g 1957 2640 N -51 0 0 33 51 0 h +.5665 g 1957 2673 N -51 0 0 34 51 0 h +.5739 g 1957 2707 N -51 0 0 34 51 0 h +.5813 g 1957 2741 N -51 0 0 33 51 0 h +.5887 g 1957 2774 N -51 0 0 34 51 0 h +.5962 g 1957 2808 N -51 0 0 33 51 0 h +.6036 g 1957 2841 N -51 0 0 34 51 0 h +.611 g 1957 2875 N -51 0 0 34 51 0 h +.6184 g 1957 2909 N -51 0 0 33 51 0 h +.6258 g 1957 2942 N -51 0 0 34 51 0 h +.6333 g 1957 2976 N -51 0 0 33 51 0 h +.6407 g 1957 3009 N -51 0 0 34 51 0 h +.6481 g 1957 3043 N -51 0 0 34 51 0 h +.6555 g 1957 3077 N -51 0 0 33 51 0 h +.663 g 1957 3110 N -51 0 0 34 51 0 h +.6704 g 1957 3144 N -51 0 0 33 51 0 h +.6778 g 1957 3177 N -51 0 0 34 51 0 h +.6852 g 1957 3211 N -51 0 0 34 51 0 h +.6926 g 1957 3245 N -51 0 0 33 51 0 h +.7001 g 1957 3278 N -51 0 0 34 51 0 h +.7075 g 1957 3312 N -51 0 0 33 51 0 h +.7149 g 1957 3345 N -51 0 0 34 51 0 h +.7223 g 1957 3379 N -51 0 0 33 51 0 h +.7298 g 1957 3412 N -51 0 0 34 51 0 h +.7372 g 1957 3446 N -51 0 0 34 51 0 h +.7446 g 1957 3480 N -51 0 0 33 51 0 h +.752 g 1957 3513 N -51 0 0 34 51 0 h +.7595 g 1957 3547 N -51 0 0 33 51 0 h +.7669 g 1957 3580 N -51 0 0 34 51 0 h +.7743 g 1957 3614 N -51 0 0 34 51 0 h +.7817 g 1957 3648 N -51 0 0 33 51 0 h +.7891 g 1957 3681 N -51 0 0 34 51 0 h +.7966 g 1957 3715 N -51 0 0 33 51 0 h +.804 g 1957 3748 N -51 0 0 34 51 0 h +.8114 g 1957 3782 N -51 0 0 34 51 0 h +.8188 g 1957 3816 N -51 0 0 33 51 0 h +.8263 g 1957 3849 N -51 0 0 34 51 0 h +.8337 g 1957 3883 N -51 0 0 33 51 0 h +.8411 g 1957 3916 N -51 0 0 34 51 0 h +.8485 g 1957 3950 N -51 0 0 33 51 0 h +.8559 g 1957 3983 N -51 0 0 34 51 0 h +.8634 g 1957 4017 N -51 0 0 34 51 0 h +.8708 g 1957 4051 N -51 0 0 33 51 0 h +.8782 g 1957 4084 N -51 0 0 34 51 0 h +.8856 g 1957 4118 N -51 0 0 33 51 0 h +.8931 g 1957 4151 N -51 0 0 34 51 0 h +.9005 g 1957 4185 N -51 0 0 34 51 0 h +.9079 g 1957 4219 N -51 0 0 33 51 0 h +.1905 g 2008 928 N -51 0 0 33 51 0 h +.1978 g 2008 961 N -51 0 0 34 51 0 h +.205 g 2008 995 N -51 0 0 34 51 0 h +.2123 g 2008 1029 N -51 0 0 33 51 0 h +.2196 g 2008 1062 N -51 0 0 34 51 0 h +.2269 g 2008 1096 N -51 0 0 33 51 0 h +.2341 g 2008 1129 N -51 0 0 34 51 0 h +.2414 g 2008 1163 N -51 0 0 34 51 0 h +.2487 g 2008 1197 N -51 0 0 33 51 0 h +.2559 g 2008 1230 N -51 0 0 34 51 0 h +.2632 g 2008 1264 N -51 0 0 33 51 0 h +.2705 g 2008 1297 N -51 0 0 34 51 0 h +.2777 g 2008 1331 N -51 0 0 33 51 0 h +.285 g 2008 1364 N -51 0 0 34 51 0 h +.2923 g 2008 1398 N -51 0 0 34 51 0 h +.2995 g 2008 1432 N -51 0 0 33 51 0 h +.3068 g 2008 1465 N -51 0 0 34 51 0 h +.3141 g 2008 1499 N -51 0 0 33 51 0 h +.3214 g 2008 1532 N -51 0 0 34 51 0 h +.3286 g 2008 1566 N -51 0 0 34 51 0 h +.3359 g 2008 1600 N -51 0 0 33 51 0 h +.3432 g 2008 1633 N -51 0 0 34 51 0 h +.3504 g 2008 1667 N -51 0 0 33 51 0 h +.3577 g 2008 1700 N -51 0 0 34 51 0 h +.365 g 2008 1734 N -51 0 0 34 51 0 h +.3722 g 2008 1768 N -51 0 0 33 51 0 h +.3795 g 2008 1801 N -51 0 0 34 51 0 h +.3868 g 2008 1835 N -51 0 0 33 51 0 h +.3941 g 2008 1868 N -51 0 0 34 51 0 h +.4013 g 2008 1902 N -51 0 0 33 51 0 h +.4086 g 2008 1935 N -51 0 0 34 51 0 h +.4159 g 2008 1969 N -51 0 0 34 51 0 h +.4231 g 2008 2003 N -51 0 0 33 51 0 h +.4304 g 2008 2036 N -51 0 0 34 51 0 h +.4377 g 2008 2070 N -51 0 0 33 51 0 h +.4449 g 2008 2103 N -51 0 0 34 51 0 h +.4522 g 2008 2137 N -51 0 0 34 51 0 h +.4595 g 2008 2171 N -51 0 0 33 51 0 h +.4668 g 2008 2204 N -51 0 0 34 51 0 h +.474 g 2008 2238 N -51 0 0 33 51 0 h +.4813 g 2008 2271 N -51 0 0 34 51 0 h +.4886 g 2008 2305 N -51 0 0 34 51 0 h +.4958 g 2008 2339 N -51 0 0 33 51 0 h +.5031 g 2008 2372 N -51 0 0 34 51 0 h +.5104 g 2008 2406 N -51 0 0 33 51 0 h +.5176 g 2008 2439 N -51 0 0 34 51 0 h +.5249 g 2008 2473 N -51 0 0 34 51 0 h +.5322 g 2008 2507 N -51 0 0 33 51 0 h +.5394 g 2008 2540 N -51 0 0 34 51 0 h +.5467 g 2008 2574 N -51 0 0 32 51 0 h +.554 g 2008 2606 N -51 0 0 34 51 0 h +.5613 g 2008 2640 N -51 0 0 33 51 0 h +.5685 g 2008 2673 N -51 0 0 34 51 0 h +.5758 g 2008 2707 N -51 0 0 34 51 0 h +.5831 g 2008 2741 N -51 0 0 33 51 0 h +.5903 g 2008 2774 N -51 0 0 34 51 0 h +.5976 g 2008 2808 N -51 0 0 33 51 0 h +.6049 g 2008 2841 N -51 0 0 34 51 0 h +.6121 g 2008 2875 N -51 0 0 34 51 0 h +.6194 g 2008 2909 N -51 0 0 33 51 0 h +.6267 g 2008 2942 N -51 0 0 34 51 0 h +.634 g 2008 2976 N -51 0 0 33 51 0 h +.6412 g 2008 3009 N -51 0 0 34 51 0 h +.6485 g 2008 3043 N -51 0 0 34 51 0 h +.6558 g 2008 3077 N -51 0 0 33 51 0 h +.663 g 2008 3110 N -51 0 0 34 51 0 h +.6703 g 2008 3144 N -51 0 0 33 51 0 h +.6776 g 2008 3177 N -51 0 0 34 51 0 h +.6848 g 2008 3211 N -51 0 0 34 51 0 h +.6921 g 2008 3245 N -51 0 0 33 51 0 h +.6994 g 2008 3278 N -51 0 0 34 51 0 h +.7067 g 2008 3312 N -51 0 0 33 51 0 h +.7139 g 2008 3345 N -51 0 0 34 51 0 h +.7212 g 2008 3379 N -51 0 0 33 51 0 h +.7285 g 2008 3412 N -51 0 0 34 51 0 h +.7357 g 2008 3446 N -51 0 0 34 51 0 h +.743 g 2008 3480 N -51 0 0 33 51 0 h +.7503 g 2008 3513 N -51 0 0 34 51 0 h +.7575 g 2008 3547 N -51 0 0 33 51 0 h +.7648 g 2008 3580 N -51 0 0 34 51 0 h +.7721 g 2008 3614 N -51 0 0 34 51 0 h +.7793 g 2008 3648 N -51 0 0 33 51 0 h +.7866 g 2008 3681 N -51 0 0 34 51 0 h +.7939 g 2008 3715 N -51 0 0 33 51 0 h +.8012 g 2008 3748 N -51 0 0 34 51 0 h +.8084 g 2008 3782 N -51 0 0 34 51 0 h +.8157 g 2008 3816 N -51 0 0 33 51 0 h +.823 g 2008 3849 N -51 0 0 34 51 0 h +.8302 g 2008 3883 N -51 0 0 33 51 0 h +.8375 g 2008 3916 N -51 0 0 34 51 0 h +.8448 g 2008 3950 N -51 0 0 33 51 0 h +.852 g 2008 3983 N -51 0 0 34 51 0 h +.8593 g 2008 4017 N -51 0 0 34 51 0 h +.8666 g 2008 4051 N -51 0 0 33 51 0 h +.8739 g 2008 4084 N -51 0 0 34 51 0 h +.8811 g 2008 4118 N -51 0 0 33 51 0 h +.8884 g 2008 4151 N -51 0 0 34 51 0 h +.8957 g 2008 4185 N -51 0 0 34 51 0 h +.9029 g 2008 4219 N -51 0 0 33 51 0 h +.2005 g 2059 928 N -50 0 0 33 50 0 h +.2076 g 2059 961 N -50 0 0 34 50 0 h +.2148 g 2059 995 N -50 0 0 34 50 0 h +.2219 g 2059 1029 N -50 0 0 33 50 0 h +.229 g 2059 1062 N -50 0 0 34 50 0 h +.2361 g 2059 1096 N -50 0 0 33 50 0 h +.2432 g 2059 1129 N -50 0 0 34 50 0 h +.2503 g 2059 1163 N -50 0 0 34 50 0 h +.2575 g 2059 1197 N -50 0 0 33 50 0 h +.2646 g 2059 1230 N -50 0 0 34 50 0 h +.2717 g 2059 1264 N -50 0 0 33 50 0 h +.2788 g 2059 1297 N -50 0 0 34 50 0 h +.2859 g 2059 1331 N -50 0 0 33 50 0 h +.293 g 2059 1364 N -50 0 0 34 50 0 h +.3002 g 2059 1398 N -50 0 0 34 50 0 h +.3073 g 2059 1432 N -50 0 0 33 50 0 h +.3144 g 2059 1465 N -50 0 0 34 50 0 h +.3215 g 2059 1499 N -50 0 0 33 50 0 h +.3286 g 2059 1532 N -50 0 0 34 50 0 h +.3357 g 2059 1566 N -50 0 0 34 50 0 h +.3429 g 2059 1600 N -50 0 0 33 50 0 h +.35 g 2059 1633 N -50 0 0 34 50 0 h +.3571 g 2059 1667 N -50 0 0 33 50 0 h +.3642 g 2059 1700 N -50 0 0 34 50 0 h +.3713 g 2059 1734 N -50 0 0 34 50 0 h +.3784 g 2059 1768 N -50 0 0 33 50 0 h +.3856 g 2059 1801 N -50 0 0 34 50 0 h +.3927 g 2059 1835 N -50 0 0 33 50 0 h +.3998 g 2059 1868 N -50 0 0 34 50 0 h +.4069 g 2059 1902 N -50 0 0 33 50 0 h +.414 g 2059 1935 N -50 0 0 34 50 0 h +.4211 g 2059 1969 N -50 0 0 34 50 0 h +.4283 g 2059 2003 N -50 0 0 33 50 0 h +.4354 g 2059 2036 N -50 0 0 34 50 0 h +.4425 g 2059 2070 N -50 0 0 33 50 0 h +.4496 g 2059 2103 N -50 0 0 34 50 0 h +.4567 g 2059 2137 N -50 0 0 34 50 0 h +.4638 g 2059 2171 N -50 0 0 33 50 0 h +.471 g 2059 2204 N -50 0 0 34 50 0 h +.4781 g 2059 2238 N -50 0 0 33 50 0 h +.4852 g 2059 2271 N -50 0 0 34 50 0 h +.4923 g 2059 2305 N -50 0 0 34 50 0 h +.4994 g 2059 2339 N -50 0 0 33 50 0 h +.5065 g 2059 2372 N -50 0 0 34 50 0 h +.5137 g 2059 2406 N -50 0 0 33 50 0 h +.5208 g 2059 2439 N -50 0 0 34 50 0 h +.5279 g 2059 2473 N -50 0 0 34 50 0 h +.535 g 2059 2507 N -50 0 0 33 50 0 h +.5421 g 2059 2540 N -50 0 0 34 50 0 h +.5492 g 2059 2574 N -50 0 0 32 50 0 h +.5564 g 2059 2606 N -50 0 0 34 50 0 h +.5635 g 2059 2640 N -50 0 0 33 50 0 h +.5706 g 2059 2673 N -50 0 0 34 50 0 h +.5777 g 2059 2707 N -50 0 0 34 50 0 h +.5848 g 2059 2741 N -50 0 0 33 50 0 h +.5919 g 2059 2774 N -50 0 0 34 50 0 h +.5991 g 2059 2808 N -50 0 0 33 50 0 h +.6062 g 2059 2841 N -50 0 0 34 50 0 h +.6133 g 2059 2875 N -50 0 0 34 50 0 h +.6204 g 2059 2909 N -50 0 0 33 50 0 h +.6275 g 2059 2942 N -50 0 0 34 50 0 h +.6346 g 2059 2976 N -50 0 0 33 50 0 h +.6418 g 2059 3009 N -50 0 0 34 50 0 h +.6489 g 2059 3043 N -50 0 0 34 50 0 h +.656 g 2059 3077 N -50 0 0 33 50 0 h +.6631 g 2059 3110 N -50 0 0 34 50 0 h +.6702 g 2059 3144 N -50 0 0 33 50 0 h +.6773 g 2059 3177 N -50 0 0 34 50 0 h +.6845 g 2059 3211 N -50 0 0 34 50 0 h +.6916 g 2059 3245 N -50 0 0 33 50 0 h +.6987 g 2059 3278 N -50 0 0 34 50 0 h +.7058 g 2059 3312 N -50 0 0 33 50 0 h +.7129 g 2059 3345 N -50 0 0 34 50 0 h +.72 g 2059 3379 N -50 0 0 33 50 0 h +.7272 g 2059 3412 N -50 0 0 34 50 0 h +.7343 g 2059 3446 N -50 0 0 34 50 0 h +.7414 g 2059 3480 N -50 0 0 33 50 0 h +.7485 g 2059 3513 N -50 0 0 34 50 0 h +.7556 g 2059 3547 N -50 0 0 33 50 0 h +.7627 g 2059 3580 N -50 0 0 34 50 0 h +.7699 g 2059 3614 N -50 0 0 34 50 0 h +.777 g 2059 3648 N -50 0 0 33 50 0 h +.7841 g 2059 3681 N -50 0 0 34 50 0 h +.7912 g 2059 3715 N -50 0 0 33 50 0 h +.7983 g 2059 3748 N -50 0 0 34 50 0 h +.8054 g 2059 3782 N -50 0 0 34 50 0 h +.8126 g 2059 3816 N -50 0 0 33 50 0 h +.8197 g 2059 3849 N -50 0 0 34 50 0 h +.8268 g 2059 3883 N -50 0 0 33 50 0 h +.8339 g 2059 3916 N -50 0 0 34 50 0 h +.841 g 2059 3950 N -50 0 0 33 50 0 h +.8481 g 2059 3983 N -50 0 0 34 50 0 h +.8553 g 2059 4017 N -50 0 0 34 50 0 h +.8624 g 2059 4051 N -50 0 0 33 50 0 h +.8695 g 2059 4084 N -50 0 0 34 50 0 h +.8766 g 2059 4118 N -50 0 0 33 50 0 h +.8837 g 2059 4151 N -50 0 0 34 50 0 h +.8908 g 2059 4185 N -50 0 0 34 50 0 h +.898 g 2059 4219 N -50 0 0 33 50 0 h +.2106 g 2109 928 N -51 0 0 33 51 0 h +.2175 g 2109 961 N -51 0 0 34 51 0 h +.2245 g 2109 995 N -51 0 0 34 51 0 h +.2314 g 2109 1029 N -51 0 0 33 51 0 h +.2384 g 2109 1062 N -51 0 0 34 51 0 h +.2454 g 2109 1096 N -51 0 0 33 51 0 h +.2523 g 2109 1129 N -51 0 0 34 51 0 h +.2593 g 2109 1163 N -51 0 0 34 51 0 h +.2663 g 2109 1197 N -51 0 0 33 51 0 h +.2732 g 2109 1230 N -51 0 0 34 51 0 h +.2802 g 2109 1264 N -51 0 0 33 51 0 h +.2872 g 2109 1297 N -51 0 0 34 51 0 h +.2941 g 2109 1331 N -51 0 0 33 51 0 h +.3011 g 2109 1364 N -51 0 0 34 51 0 h +.308 g 2109 1398 N -51 0 0 34 51 0 h +.315 g 2109 1432 N -51 0 0 33 51 0 h +.322 g 2109 1465 N -51 0 0 34 51 0 h +.3289 g 2109 1499 N -51 0 0 33 51 0 h +.3359 g 2109 1532 N -51 0 0 34 51 0 h +.3429 g 2109 1566 N -51 0 0 34 51 0 h +.3498 g 2109 1600 N -51 0 0 33 51 0 h +.3568 g 2109 1633 N -51 0 0 34 51 0 h +.3638 g 2109 1667 N -51 0 0 33 51 0 h +.3707 g 2109 1700 N -51 0 0 34 51 0 h +.3777 g 2109 1734 N -51 0 0 34 51 0 h +.3846 g 2109 1768 N -51 0 0 33 51 0 h +.3916 g 2109 1801 N -51 0 0 34 51 0 h +.3986 g 2109 1835 N -51 0 0 33 51 0 h +.4055 g 2109 1868 N -51 0 0 34 51 0 h +.4125 g 2109 1902 N -51 0 0 33 51 0 h +.4195 g 2109 1935 N -51 0 0 34 51 0 h +.4264 g 2109 1969 N -51 0 0 34 51 0 h +.4334 g 2109 2003 N -51 0 0 33 51 0 h +.4404 g 2109 2036 N -51 0 0 34 51 0 h +.4473 g 2109 2070 N -51 0 0 33 51 0 h +.4543 g 2109 2103 N -51 0 0 34 51 0 h +.4612 g 2109 2137 N -51 0 0 34 51 0 h +.4682 g 2109 2171 N -51 0 0 33 51 0 h +.4752 g 2109 2204 N -51 0 0 34 51 0 h +.4821 g 2109 2238 N -51 0 0 33 51 0 h +.4891 g 2109 2271 N -51 0 0 34 51 0 h +.4961 g 2109 2305 N -51 0 0 34 51 0 h +.503 g 2109 2339 N -51 0 0 33 51 0 h +.51 g 2109 2372 N -51 0 0 34 51 0 h +.517 g 2109 2406 N -51 0 0 33 51 0 h +.5239 g 2109 2439 N -51 0 0 34 51 0 h +.5309 g 2109 2473 N -51 0 0 34 51 0 h +.5378 g 2109 2507 N -51 0 0 33 51 0 h +.5448 g 2109 2540 N -51 0 0 34 51 0 h +.5518 g 2109 2574 N -51 0 0 32 51 0 h +.5587 g 2109 2606 N -51 0 0 34 51 0 h +.5657 g 2109 2640 N -51 0 0 33 51 0 h +.5727 g 2109 2673 N -51 0 0 34 51 0 h +.5796 g 2109 2707 N -51 0 0 34 51 0 h +.5866 g 2109 2741 N -51 0 0 33 51 0 h +.5935 g 2109 2774 N -51 0 0 34 51 0 h +.6005 g 2109 2808 N -51 0 0 33 51 0 h +.6075 g 2109 2841 N -51 0 0 34 51 0 h +.6144 g 2109 2875 N -51 0 0 34 51 0 h +.6214 g 2109 2909 N -51 0 0 33 51 0 h +.6284 g 2109 2942 N -51 0 0 34 51 0 h +.6353 g 2109 2976 N -51 0 0 33 51 0 h +.6423 g 2109 3009 N -51 0 0 34 51 0 h +.6493 g 2109 3043 N -51 0 0 34 51 0 h +.6562 g 2109 3077 N -51 0 0 33 51 0 h +.6632 g 2109 3110 N -51 0 0 34 51 0 h +.6701 g 2109 3144 N -51 0 0 33 51 0 h +.6771 g 2109 3177 N -51 0 0 34 51 0 h +.6841 g 2109 3211 N -51 0 0 34 51 0 h +.691 g 2109 3245 N -51 0 0 33 51 0 h +.698 g 2109 3278 N -51 0 0 34 51 0 h +.705 g 2109 3312 N -51 0 0 33 51 0 h +.7119 g 2109 3345 N -51 0 0 34 51 0 h +.7189 g 2109 3379 N -51 0 0 33 51 0 h +.7259 g 2109 3412 N -51 0 0 34 51 0 h +.7328 g 2109 3446 N -51 0 0 34 51 0 h +.7398 g 2109 3480 N -51 0 0 33 51 0 h +.7467 g 2109 3513 N -51 0 0 34 51 0 h +.7537 g 2109 3547 N -51 0 0 33 51 0 h +.7607 g 2109 3580 N -51 0 0 34 51 0 h +.7676 g 2109 3614 N -51 0 0 34 51 0 h +.7746 g 2109 3648 N -51 0 0 33 51 0 h +.7816 g 2109 3681 N -51 0 0 34 51 0 h +.7885 g 2109 3715 N -51 0 0 33 51 0 h +.7955 g 2109 3748 N -51 0 0 34 51 0 h +.8025 g 2109 3782 N -51 0 0 34 51 0 h +.8094 g 2109 3816 N -51 0 0 33 51 0 h +.8164 g 2109 3849 N -51 0 0 34 51 0 h +.8233 g 2109 3883 N -51 0 0 33 51 0 h +.8303 g 2109 3916 N -51 0 0 34 51 0 h +.8373 g 2109 3950 N -51 0 0 33 51 0 h +.8442 g 2109 3983 N -51 0 0 34 51 0 h +.8512 g 2109 4017 N -51 0 0 34 51 0 h +.8582 g 2109 4051 N -51 0 0 33 51 0 h +.8651 g 2109 4084 N -51 0 0 34 51 0 h +.8721 g 2109 4118 N -51 0 0 33 51 0 h +.8791 g 2109 4151 N -51 0 0 34 51 0 h +.886 g 2109 4185 N -51 0 0 34 51 0 h +.893 g 2109 4219 N -51 0 0 33 51 0 h +.2206 g 2160 928 N -50 0 0 33 50 0 h +.2274 g 2160 961 N -50 0 0 34 50 0 h +.2342 g 2160 995 N -50 0 0 34 50 0 h +.241 g 2160 1029 N -50 0 0 33 50 0 h +.2478 g 2160 1062 N -50 0 0 34 50 0 h +.2546 g 2160 1096 N -50 0 0 33 50 0 h +.2614 g 2160 1129 N -50 0 0 34 50 0 h +.2683 g 2160 1163 N -50 0 0 34 50 0 h +.2751 g 2160 1197 N -50 0 0 33 50 0 h +.2819 g 2160 1230 N -50 0 0 34 50 0 h +.2887 g 2160 1264 N -50 0 0 33 50 0 h +.2955 g 2160 1297 N -50 0 0 34 50 0 h +.3023 g 2160 1331 N -50 0 0 33 50 0 h +.3091 g 2160 1364 N -50 0 0 34 50 0 h +.3159 g 2160 1398 N -50 0 0 34 50 0 h +.3227 g 2160 1432 N -50 0 0 33 50 0 h +.3295 g 2160 1465 N -50 0 0 34 50 0 h +.3364 g 2160 1499 N -50 0 0 33 50 0 h +.3432 g 2160 1532 N -50 0 0 34 50 0 h +.35 g 2160 1566 N -50 0 0 34 50 0 h +.3568 g 2160 1600 N -50 0 0 33 50 0 h +.3636 g 2160 1633 N -50 0 0 34 50 0 h +.3704 g 2160 1667 N -50 0 0 33 50 0 h +.3772 g 2160 1700 N -50 0 0 34 50 0 h +.384 g 2160 1734 N -50 0 0 34 50 0 h +.3908 g 2160 1768 N -50 0 0 33 50 0 h +.3977 g 2160 1801 N -50 0 0 34 50 0 h +.4045 g 2160 1835 N -50 0 0 33 50 0 h +.4113 g 2160 1868 N -50 0 0 34 50 0 h +.4181 g 2160 1902 N -50 0 0 33 50 0 h +.4249 g 2160 1935 N -50 0 0 34 50 0 h +.4317 g 2160 1969 N -50 0 0 34 50 0 h +.4385 g 2160 2003 N -50 0 0 33 50 0 h +.4453 g 2160 2036 N -50 0 0 34 50 0 h +.4521 g 2160 2070 N -50 0 0 33 50 0 h +.4589 g 2160 2103 N -50 0 0 34 50 0 h +.4658 g 2160 2137 N -50 0 0 34 50 0 h +.4726 g 2160 2171 N -50 0 0 33 50 0 h +.4794 g 2160 2204 N -50 0 0 34 50 0 h +.4862 g 2160 2238 N -50 0 0 33 50 0 h +.493 g 2160 2271 N -50 0 0 34 50 0 h +.4998 g 2160 2305 N -50 0 0 34 50 0 h +.5066 g 2160 2339 N -50 0 0 33 50 0 h +.5134 g 2160 2372 N -50 0 0 34 50 0 h +.5202 g 2160 2406 N -50 0 0 33 50 0 h +.5271 g 2160 2439 N -50 0 0 34 50 0 h +.5339 g 2160 2473 N -50 0 0 34 50 0 h +.5407 g 2160 2507 N -50 0 0 33 50 0 h +.5475 g 2160 2540 N -50 0 0 34 50 0 h +.5543 g 2160 2574 N -50 0 0 32 50 0 h +.5611 g 2160 2606 N -50 0 0 34 50 0 h +.5679 g 2160 2640 N -50 0 0 33 50 0 h +.5747 g 2160 2673 N -50 0 0 34 50 0 h +.5815 g 2160 2707 N -50 0 0 34 50 0 h +.5883 g 2160 2741 N -50 0 0 33 50 0 h +.5952 g 2160 2774 N -50 0 0 34 50 0 h +.602 g 2160 2808 N -50 0 0 33 50 0 h +.6088 g 2160 2841 N -50 0 0 34 50 0 h +.6156 g 2160 2875 N -50 0 0 34 50 0 h +.6224 g 2160 2909 N -50 0 0 33 50 0 h +.6292 g 2160 2942 N -50 0 0 34 50 0 h +.636 g 2160 2976 N -50 0 0 33 50 0 h +.6428 g 2160 3009 N -50 0 0 34 50 0 h +.6496 g 2160 3043 N -50 0 0 34 50 0 h +.6565 g 2160 3077 N -50 0 0 33 50 0 h +.6633 g 2160 3110 N -50 0 0 34 50 0 h +.6701 g 2160 3144 N -50 0 0 33 50 0 h +.6769 g 2160 3177 N -50 0 0 34 50 0 h +.6837 g 2160 3211 N -50 0 0 34 50 0 h +.6905 g 2160 3245 N -50 0 0 33 50 0 h +.6973 g 2160 3278 N -50 0 0 34 50 0 h +.7041 g 2160 3312 N -50 0 0 33 50 0 h +.7109 g 2160 3345 N -50 0 0 34 50 0 h +.7177 g 2160 3379 N -50 0 0 33 50 0 h +.7246 g 2160 3412 N -50 0 0 34 50 0 h +.7314 g 2160 3446 N -50 0 0 34 50 0 h +.7382 g 2160 3480 N -50 0 0 33 50 0 h +.745 g 2160 3513 N -50 0 0 34 50 0 h +.7518 g 2160 3547 N -50 0 0 33 50 0 h +.7586 g 2160 3580 N -50 0 0 34 50 0 h +.7654 g 2160 3614 N -50 0 0 34 50 0 h +.7722 g 2160 3648 N -50 0 0 33 50 0 h +.779 g 2160 3681 N -50 0 0 34 50 0 h +.7859 g 2160 3715 N -50 0 0 33 50 0 h +.7927 g 2160 3748 N -50 0 0 34 50 0 h +.7995 g 2160 3782 N -50 0 0 34 50 0 h +.8063 g 2160 3816 N -50 0 0 33 50 0 h +.8131 g 2160 3849 N -50 0 0 34 50 0 h +.8199 g 2160 3883 N -50 0 0 33 50 0 h +.8267 g 2160 3916 N -50 0 0 34 50 0 h +.8335 g 2160 3950 N -50 0 0 33 50 0 h +.8403 g 2160 3983 N -50 0 0 34 50 0 h +.8471 g 2160 4017 N -50 0 0 34 50 0 h +.854 g 2160 4051 N -50 0 0 33 50 0 h +.8608 g 2160 4084 N -50 0 0 34 50 0 h +.8676 g 2160 4118 N -50 0 0 33 50 0 h +.8744 g 2160 4151 N -50 0 0 34 50 0 h +.8812 g 2160 4185 N -50 0 0 34 50 0 h +.888 g 2160 4219 N -50 0 0 33 50 0 h +.2306 g 2210 928 N -51 0 0 33 51 0 h +.2373 g 2210 961 N -51 0 0 34 51 0 h +.2439 g 2210 995 N -51 0 0 34 51 0 h +.2506 g 2210 1029 N -51 0 0 33 51 0 h +.2572 g 2210 1062 N -51 0 0 34 51 0 h +.2639 g 2210 1096 N -51 0 0 33 51 0 h +.2705 g 2210 1129 N -51 0 0 34 51 0 h +.2772 g 2210 1163 N -51 0 0 34 51 0 h +.2839 g 2210 1197 N -51 0 0 33 51 0 h +.2905 g 2210 1230 N -51 0 0 34 51 0 h +.2972 g 2210 1264 N -51 0 0 33 51 0 h +.3038 g 2210 1297 N -51 0 0 34 51 0 h +.3105 g 2210 1331 N -51 0 0 33 51 0 h +.3171 g 2210 1364 N -51 0 0 34 51 0 h +.3238 g 2210 1398 N -51 0 0 34 51 0 h +.3305 g 2210 1432 N -51 0 0 33 51 0 h +.3371 g 2210 1465 N -51 0 0 34 51 0 h +.3438 g 2210 1499 N -51 0 0 33 51 0 h +.3504 g 2210 1532 N -51 0 0 34 51 0 h +.3571 g 2210 1566 N -51 0 0 34 51 0 h +.3638 g 2210 1600 N -51 0 0 33 51 0 h +.3704 g 2210 1633 N -51 0 0 34 51 0 h +.3771 g 2210 1667 N -51 0 0 33 51 0 h +.3837 g 2210 1700 N -51 0 0 34 51 0 h +.3904 g 2210 1734 N -51 0 0 34 51 0 h +.397 g 2210 1768 N -51 0 0 33 51 0 h +.4037 g 2210 1801 N -51 0 0 34 51 0 h +.4104 g 2210 1835 N -51 0 0 33 51 0 h +.417 g 2210 1868 N -51 0 0 34 51 0 h +.4237 g 2210 1902 N -51 0 0 33 51 0 h +.4303 g 2210 1935 N -51 0 0 34 51 0 h +.437 g 2210 1969 N -51 0 0 34 51 0 h +.4436 g 2210 2003 N -51 0 0 33 51 0 h +.4503 g 2210 2036 N -51 0 0 34 51 0 h +.457 g 2210 2070 N -51 0 0 33 51 0 h +.4636 g 2210 2103 N -51 0 0 34 51 0 h +.4703 g 2210 2137 N -51 0 0 34 51 0 h +.4769 g 2210 2171 N -51 0 0 33 51 0 h +.4836 g 2210 2204 N -51 0 0 34 51 0 h +.4902 g 2210 2238 N -51 0 0 33 51 0 h +.4969 g 2210 2271 N -51 0 0 34 51 0 h +.5036 g 2210 2305 N -51 0 0 34 51 0 h +.5102 g 2210 2339 N -51 0 0 33 51 0 h +.5169 g 2210 2372 N -51 0 0 34 51 0 h +.5235 g 2210 2406 N -51 0 0 33 51 0 h +.5302 g 2210 2439 N -51 0 0 34 51 0 h +.5368 g 2210 2473 N -51 0 0 34 51 0 h +.5435 g 2210 2507 N -51 0 0 33 51 0 h +.5502 g 2210 2540 N -51 0 0 34 51 0 h +.5568 g 2210 2574 N -51 0 0 32 51 0 h +.5635 g 2210 2606 N -51 0 0 34 51 0 h +.5701 g 2210 2640 N -51 0 0 33 51 0 h +.5768 g 2210 2673 N -51 0 0 34 51 0 h +.5834 g 2210 2707 N -51 0 0 34 51 0 h +.5901 g 2210 2741 N -51 0 0 33 51 0 h +.5968 g 2210 2774 N -51 0 0 34 51 0 h +.6034 g 2210 2808 N -51 0 0 33 51 0 h +.6101 g 2210 2841 N -51 0 0 34 51 0 h +.6167 g 2210 2875 N -51 0 0 34 51 0 h +.6234 g 2210 2909 N -51 0 0 33 51 0 h +.6301 g 2210 2942 N -51 0 0 34 51 0 h +.6367 g 2210 2976 N -51 0 0 33 51 0 h +.6434 g 2210 3009 N -51 0 0 34 51 0 h +.65 g 2210 3043 N -51 0 0 34 51 0 h +.6567 g 2210 3077 N -51 0 0 33 51 0 h +.6633 g 2210 3110 N -51 0 0 34 51 0 h +.67 g 2210 3144 N -51 0 0 33 51 0 h +.6767 g 2210 3177 N -51 0 0 34 51 0 h +.6833 g 2210 3211 N -51 0 0 34 51 0 h +.69 g 2210 3245 N -51 0 0 33 51 0 h +.6966 g 2210 3278 N -51 0 0 34 51 0 h +.7033 g 2210 3312 N -51 0 0 33 51 0 h +.7099 g 2210 3345 N -51 0 0 34 51 0 h +.7166 g 2210 3379 N -51 0 0 33 51 0 h +.7233 g 2210 3412 N -51 0 0 34 51 0 h +.7299 g 2210 3446 N -51 0 0 34 51 0 h +.7366 g 2210 3480 N -51 0 0 33 51 0 h +.7432 g 2210 3513 N -51 0 0 34 51 0 h +.7499 g 2210 3547 N -51 0 0 33 51 0 h +.7565 g 2210 3580 N -51 0 0 34 51 0 h +.7632 g 2210 3614 N -51 0 0 34 51 0 h +.7699 g 2210 3648 N -51 0 0 33 51 0 h +.7765 g 2210 3681 N -51 0 0 34 51 0 h +.7832 g 2210 3715 N -51 0 0 33 51 0 h +.7898 g 2210 3748 N -51 0 0 34 51 0 h +.7965 g 2210 3782 N -51 0 0 34 51 0 h +.8031 g 2210 3816 N -51 0 0 33 51 0 h +.8098 g 2210 3849 N -51 0 0 34 51 0 h +.8165 g 2210 3883 N -51 0 0 33 51 0 h +.8231 g 2210 3916 N -51 0 0 34 51 0 h +.8298 g 2210 3950 N -51 0 0 33 51 0 h +.8364 g 2210 3983 N -51 0 0 34 51 0 h +.8431 g 2210 4017 N -51 0 0 34 51 0 h +.8497 g 2210 4051 N -51 0 0 33 51 0 h +.8564 g 2210 4084 N -51 0 0 34 51 0 h +.8631 g 2210 4118 N -51 0 0 33 51 0 h +.8697 g 2210 4151 N -51 0 0 34 51 0 h +.8764 g 2210 4185 N -51 0 0 34 51 0 h +.883 g 2210 4219 N -51 0 0 33 51 0 h +.2406 g 2261 928 N -50 0 0 33 50 0 h +.2471 g 2261 961 N -50 0 0 34 50 0 h +.2536 g 2261 995 N -50 0 0 34 50 0 h +.2601 g 2261 1029 N -50 0 0 33 50 0 h +.2666 g 2261 1062 N -50 0 0 34 50 0 h +.2731 g 2261 1096 N -50 0 0 33 50 0 h +.2797 g 2261 1129 N -50 0 0 34 50 0 h +.2862 g 2261 1163 N -50 0 0 34 50 0 h +.2927 g 2261 1197 N -50 0 0 33 50 0 h +.2992 g 2261 1230 N -50 0 0 34 50 0 h +.3057 g 2261 1264 N -50 0 0 33 50 0 h +.3122 g 2261 1297 N -50 0 0 34 50 0 h +.3187 g 2261 1331 N -50 0 0 33 50 0 h +.3252 g 2261 1364 N -50 0 0 34 50 0 h +.3317 g 2261 1398 N -50 0 0 34 50 0 h +.3382 g 2261 1432 N -50 0 0 33 50 0 h +.3447 g 2261 1465 N -50 0 0 34 50 0 h +.3512 g 2261 1499 N -50 0 0 33 50 0 h +.3577 g 2261 1532 N -50 0 0 34 50 0 h +.3642 g 2261 1566 N -50 0 0 34 50 0 h +.3707 g 2261 1600 N -50 0 0 33 50 0 h +.3772 g 2261 1633 N -50 0 0 34 50 0 h +.3837 g 2261 1667 N -50 0 0 33 50 0 h +.3902 g 2261 1700 N -50 0 0 34 50 0 h +.3967 g 2261 1734 N -50 0 0 34 50 0 h +.4032 g 2261 1768 N -50 0 0 33 50 0 h +.4097 g 2261 1801 N -50 0 0 34 50 0 h +.4162 g 2261 1835 N -50 0 0 33 50 0 h +.4228 g 2261 1868 N -50 0 0 34 50 0 h +.4293 g 2261 1902 N -50 0 0 33 50 0 h +.4358 g 2261 1935 N -50 0 0 34 50 0 h +.4423 g 2261 1969 N -50 0 0 34 50 0 h +.4488 g 2261 2003 N -50 0 0 33 50 0 h +.4553 g 2261 2036 N -50 0 0 34 50 0 h +.4618 g 2261 2070 N -50 0 0 33 50 0 h +.4683 g 2261 2103 N -50 0 0 34 50 0 h +.4748 g 2261 2137 N -50 0 0 34 50 0 h +.4813 g 2261 2171 N -50 0 0 33 50 0 h +.4878 g 2261 2204 N -50 0 0 34 50 0 h +.4943 g 2261 2238 N -50 0 0 33 50 0 h +.5008 g 2261 2271 N -50 0 0 34 50 0 h +.5073 g 2261 2305 N -50 0 0 34 50 0 h +.5138 g 2261 2339 N -50 0 0 33 50 0 h +.5203 g 2261 2372 N -50 0 0 34 50 0 h +.5268 g 2261 2406 N -50 0 0 33 50 0 h +.5333 g 2261 2439 N -50 0 0 34 50 0 h +.5398 g 2261 2473 N -50 0 0 34 50 0 h +.5463 g 2261 2507 N -50 0 0 33 50 0 h +.5528 g 2261 2540 N -50 0 0 34 50 0 h +.5593 g 2261 2574 N -50 0 0 32 50 0 h +.5658 g 2261 2606 N -50 0 0 34 50 0 h +.5724 g 2261 2640 N -50 0 0 33 50 0 h +.5789 g 2261 2673 N -50 0 0 34 50 0 h +.5854 g 2261 2707 N -50 0 0 34 50 0 h +.5919 g 2261 2741 N -50 0 0 33 50 0 h +.5984 g 2261 2774 N -50 0 0 34 50 0 h +.6049 g 2261 2808 N -50 0 0 33 50 0 h +.6114 g 2261 2841 N -50 0 0 34 50 0 h +.6179 g 2261 2875 N -50 0 0 34 50 0 h +.6244 g 2261 2909 N -50 0 0 33 50 0 h +.6309 g 2261 2942 N -50 0 0 34 50 0 h +.6374 g 2261 2976 N -50 0 0 33 50 0 h +.6439 g 2261 3009 N -50 0 0 34 50 0 h +.6504 g 2261 3043 N -50 0 0 34 50 0 h +.6569 g 2261 3077 N -50 0 0 33 50 0 h +.6634 g 2261 3110 N -50 0 0 34 50 0 h +.6699 g 2261 3144 N -50 0 0 33 50 0 h +.6764 g 2261 3177 N -50 0 0 34 50 0 h +.6829 g 2261 3211 N -50 0 0 34 50 0 h +.6894 g 2261 3245 N -50 0 0 33 50 0 h +.6959 g 2261 3278 N -50 0 0 34 50 0 h +.7024 g 2261 3312 N -50 0 0 33 50 0 h +.7089 g 2261 3345 N -50 0 0 34 50 0 h +.7154 g 2261 3379 N -50 0 0 33 50 0 h +.722 g 2261 3412 N -50 0 0 34 50 0 h +.7285 g 2261 3446 N -50 0 0 34 50 0 h +.735 g 2261 3480 N -50 0 0 33 50 0 h +.7415 g 2261 3513 N -50 0 0 34 50 0 h +.748 g 2261 3547 N -50 0 0 33 50 0 h +.7545 g 2261 3580 N -50 0 0 34 50 0 h +.761 g 2261 3614 N -50 0 0 34 50 0 h +.7675 g 2261 3648 N -50 0 0 33 50 0 h +.774 g 2261 3681 N -50 0 0 34 50 0 h +.7805 g 2261 3715 N -50 0 0 33 50 0 h +.787 g 2261 3748 N -50 0 0 34 50 0 h +.7935 g 2261 3782 N -50 0 0 34 50 0 h +.8 g 2261 3816 N -50 0 0 33 50 0 h +.8065 g 2261 3849 N -50 0 0 34 50 0 h +.813 g 2261 3883 N -50 0 0 33 50 0 h +.8195 g 2261 3916 N -50 0 0 34 50 0 h +.826 g 2261 3950 N -50 0 0 33 50 0 h +.8325 g 2261 3983 N -50 0 0 34 50 0 h +.839 g 2261 4017 N -50 0 0 34 50 0 h +.8455 g 2261 4051 N -50 0 0 33 50 0 h +.852 g 2261 4084 N -50 0 0 34 50 0 h +.8585 g 2261 4118 N -50 0 0 33 50 0 h +.8651 g 2261 4151 N -50 0 0 34 50 0 h +.8716 g 2261 4185 N -50 0 0 34 50 0 h +.8781 g 2261 4219 N -50 0 0 33 50 0 h +.2507 g 2311 928 N -51 0 0 33 51 0 h +.257 g 2311 961 N -51 0 0 34 51 0 h +.2634 g 2311 995 N -51 0 0 34 51 0 h +.2697 g 2311 1029 N -51 0 0 33 51 0 h +.2761 g 2311 1062 N -51 0 0 34 51 0 h +.2824 g 2311 1096 N -51 0 0 33 51 0 h +.2888 g 2311 1129 N -51 0 0 34 51 0 h +.2951 g 2311 1163 N -51 0 0 34 51 0 h +.3015 g 2311 1197 N -51 0 0 33 51 0 h +.3078 g 2311 1230 N -51 0 0 34 51 0 h +.3142 g 2311 1264 N -51 0 0 33 51 0 h +.3205 g 2311 1297 N -51 0 0 34 51 0 h +.3269 g 2311 1331 N -51 0 0 33 51 0 h +.3332 g 2311 1364 N -51 0 0 34 51 0 h +.3396 g 2311 1398 N -51 0 0 34 51 0 h +.3459 g 2311 1432 N -51 0 0 33 51 0 h +.3523 g 2311 1465 N -51 0 0 34 51 0 h +.3586 g 2311 1499 N -51 0 0 33 51 0 h +.365 g 2311 1532 N -51 0 0 34 51 0 h +.3713 g 2311 1566 N -51 0 0 34 51 0 h +.3777 g 2311 1600 N -51 0 0 33 51 0 h +.384 g 2311 1633 N -51 0 0 34 51 0 h +.3904 g 2311 1667 N -51 0 0 33 51 0 h +.3967 g 2311 1700 N -51 0 0 34 51 0 h +.4031 g 2311 1734 N -51 0 0 34 51 0 h +.4094 g 2311 1768 N -51 0 0 33 51 0 h +.4158 g 2311 1801 N -51 0 0 34 51 0 h +.4221 g 2311 1835 N -51 0 0 33 51 0 h +.4285 g 2311 1868 N -51 0 0 34 51 0 h +.4348 g 2311 1902 N -51 0 0 33 51 0 h +.4412 g 2311 1935 N -51 0 0 34 51 0 h +.4475 g 2311 1969 N -51 0 0 34 51 0 h +.4539 g 2311 2003 N -51 0 0 33 51 0 h +.4602 g 2311 2036 N -51 0 0 34 51 0 h +.4666 g 2311 2070 N -51 0 0 33 51 0 h +.4729 g 2311 2103 N -51 0 0 34 51 0 h +.4793 g 2311 2137 N -51 0 0 34 51 0 h +.4857 g 2311 2171 N -51 0 0 33 51 0 h +.492 g 2311 2204 N -51 0 0 34 51 0 h +.4984 g 2311 2238 N -51 0 0 33 51 0 h +.5047 g 2311 2271 N -51 0 0 34 51 0 h +.5111 g 2311 2305 N -51 0 0 34 51 0 h +.5174 g 2311 2339 N -51 0 0 33 51 0 h +.5238 g 2311 2372 N -51 0 0 34 51 0 h +.5301 g 2311 2406 N -51 0 0 33 51 0 h +.5365 g 2311 2439 N -51 0 0 34 51 0 h +.5428 g 2311 2473 N -51 0 0 34 51 0 h +.5492 g 2311 2507 N -51 0 0 33 51 0 h +.5555 g 2311 2540 N -51 0 0 34 51 0 h +.5619 g 2311 2574 N -51 0 0 32 51 0 h +.5682 g 2311 2606 N -51 0 0 34 51 0 h +.5746 g 2311 2640 N -51 0 0 33 51 0 h +.5809 g 2311 2673 N -51 0 0 34 51 0 h +.5873 g 2311 2707 N -51 0 0 34 51 0 h +.5936 g 2311 2741 N -51 0 0 33 51 0 h +.6 g 2311 2774 N -51 0 0 34 51 0 h +.6063 g 2311 2808 N -51 0 0 33 51 0 h +.6127 g 2311 2841 N -51 0 0 34 51 0 h +.619 g 2311 2875 N -51 0 0 34 51 0 h +.6254 g 2311 2909 N -51 0 0 33 51 0 h +.6317 g 2311 2942 N -51 0 0 34 51 0 h +.6381 g 2311 2976 N -51 0 0 33 51 0 h +.6444 g 2311 3009 N -51 0 0 34 51 0 h +.6508 g 2311 3043 N -51 0 0 34 51 0 h +.6571 g 2311 3077 N -51 0 0 33 51 0 h +.6635 g 2311 3110 N -51 0 0 34 51 0 h +.6698 g 2311 3144 N -51 0 0 33 51 0 h +.6762 g 2311 3177 N -51 0 0 34 51 0 h +.6825 g 2311 3211 N -51 0 0 34 51 0 h +.6889 g 2311 3245 N -51 0 0 33 51 0 h +.6952 g 2311 3278 N -51 0 0 34 51 0 h +.7016 g 2311 3312 N -51 0 0 33 51 0 h +.708 g 2311 3345 N -51 0 0 34 51 0 h +.7143 g 2311 3379 N -51 0 0 33 51 0 h +.7207 g 2311 3412 N -51 0 0 34 51 0 h +.727 g 2311 3446 N -51 0 0 34 51 0 h +.7334 g 2311 3480 N -51 0 0 33 51 0 h +.7397 g 2311 3513 N -51 0 0 34 51 0 h +.7461 g 2311 3547 N -51 0 0 33 51 0 h +.7524 g 2311 3580 N -51 0 0 34 51 0 h +.7588 g 2311 3614 N -51 0 0 34 51 0 h +.7651 g 2311 3648 N -51 0 0 33 51 0 h +.7715 g 2311 3681 N -51 0 0 34 51 0 h +.7778 g 2311 3715 N -51 0 0 33 51 0 h +.7842 g 2311 3748 N -51 0 0 34 51 0 h +.7905 g 2311 3782 N -51 0 0 34 51 0 h +.7969 g 2311 3816 N -51 0 0 33 51 0 h +.8032 g 2311 3849 N -51 0 0 34 51 0 h +.8096 g 2311 3883 N -51 0 0 33 51 0 h +.8159 g 2311 3916 N -51 0 0 34 51 0 h +.8223 g 2311 3950 N -51 0 0 33 51 0 h +.8286 g 2311 3983 N -51 0 0 34 51 0 h +.835 g 2311 4017 N -51 0 0 34 51 0 h +.8413 g 2311 4051 N -51 0 0 33 51 0 h +.8477 g 2311 4084 N -51 0 0 34 51 0 h +.854 g 2311 4118 N -51 0 0 33 51 0 h +.8604 g 2311 4151 N -51 0 0 34 51 0 h +.8667 g 2311 4185 N -51 0 0 34 51 0 h +.8731 g 2311 4219 N -51 0 0 33 51 0 h +.2607 g 2362 928 N -50 0 0 33 50 0 h +.2669 g 2362 961 N -50 0 0 34 50 0 h +.2731 g 2362 995 N -50 0 0 34 50 0 h +.2793 g 2362 1029 N -50 0 0 33 50 0 h +.2855 g 2362 1062 N -50 0 0 34 50 0 h +.2917 g 2362 1096 N -50 0 0 33 50 0 h +.2979 g 2362 1129 N -50 0 0 34 50 0 h +.3041 g 2362 1163 N -50 0 0 34 50 0 h +.3103 g 2362 1197 N -50 0 0 33 50 0 h +.3165 g 2362 1230 N -50 0 0 34 50 0 h +.3227 g 2362 1264 N -50 0 0 33 50 0 h +.3289 g 2362 1297 N -50 0 0 34 50 0 h +.3351 g 2362 1331 N -50 0 0 33 50 0 h +.3413 g 2362 1364 N -50 0 0 34 50 0 h +.3475 g 2362 1398 N -50 0 0 34 50 0 h +.3537 g 2362 1432 N -50 0 0 33 50 0 h +.3598 g 2362 1465 N -50 0 0 34 50 0 h +.366 g 2362 1499 N -50 0 0 33 50 0 h +.3722 g 2362 1532 N -50 0 0 34 50 0 h +.3784 g 2362 1566 N -50 0 0 34 50 0 h +.3846 g 2362 1600 N -50 0 0 33 50 0 h +.3908 g 2362 1633 N -50 0 0 34 50 0 h +.397 g 2362 1667 N -50 0 0 33 50 0 h +.4032 g 2362 1700 N -50 0 0 34 50 0 h +.4094 g 2362 1734 N -50 0 0 34 50 0 h +.4156 g 2362 1768 N -50 0 0 33 50 0 h +.4218 g 2362 1801 N -50 0 0 34 50 0 h +.428 g 2362 1835 N -50 0 0 33 50 0 h +.4342 g 2362 1868 N -50 0 0 34 50 0 h +.4404 g 2362 1902 N -50 0 0 33 50 0 h +.4466 g 2362 1935 N -50 0 0 34 50 0 h +.4528 g 2362 1969 N -50 0 0 34 50 0 h +.459 g 2362 2003 N -50 0 0 33 50 0 h +.4652 g 2362 2036 N -50 0 0 34 50 0 h +.4714 g 2362 2070 N -50 0 0 33 50 0 h +.4776 g 2362 2103 N -50 0 0 34 50 0 h +.4838 g 2362 2137 N -50 0 0 34 50 0 h +.49 g 2362 2171 N -50 0 0 33 50 0 h +.4962 g 2362 2204 N -50 0 0 34 50 0 h +.5024 g 2362 2238 N -50 0 0 33 50 0 h +.5086 g 2362 2271 N -50 0 0 34 50 0 h +.5148 g 2362 2305 N -50 0 0 34 50 0 h +.521 g 2362 2339 N -50 0 0 33 50 0 h +.5272 g 2362 2372 N -50 0 0 34 50 0 h +.5334 g 2362 2406 N -50 0 0 33 50 0 h +.5396 g 2362 2439 N -50 0 0 34 50 0 h +.5458 g 2362 2473 N -50 0 0 34 50 0 h +.552 g 2362 2507 N -50 0 0 33 50 0 h +.5582 g 2362 2540 N -50 0 0 34 50 0 h +.5644 g 2362 2574 N -50 0 0 32 50 0 h +.5706 g 2362 2606 N -50 0 0 34 50 0 h +.5768 g 2362 2640 N -50 0 0 33 50 0 h +.583 g 2362 2673 N -50 0 0 34 50 0 h +.5892 g 2362 2707 N -50 0 0 34 50 0 h +.5954 g 2362 2741 N -50 0 0 33 50 0 h +.6016 g 2362 2774 N -50 0 0 34 50 0 h +.6078 g 2362 2808 N -50 0 0 33 50 0 h +.614 g 2362 2841 N -50 0 0 34 50 0 h +.6202 g 2362 2875 N -50 0 0 34 50 0 h +.6264 g 2362 2909 N -50 0 0 33 50 0 h +.6326 g 2362 2942 N -50 0 0 34 50 0 h +.6388 g 2362 2976 N -50 0 0 33 50 0 h +.645 g 2362 3009 N -50 0 0 34 50 0 h +.6512 g 2362 3043 N -50 0 0 34 50 0 h +.6574 g 2362 3077 N -50 0 0 33 50 0 h +.6636 g 2362 3110 N -50 0 0 34 50 0 h +.6698 g 2362 3144 N -50 0 0 33 50 0 h +.676 g 2362 3177 N -50 0 0 34 50 0 h +.6822 g 2362 3211 N -50 0 0 34 50 0 h +.6884 g 2362 3245 N -50 0 0 33 50 0 h +.6946 g 2362 3278 N -50 0 0 34 50 0 h +.7008 g 2362 3312 N -50 0 0 33 50 0 h +.707 g 2362 3345 N -50 0 0 34 50 0 h +.7132 g 2362 3379 N -50 0 0 33 50 0 h +.7194 g 2362 3412 N -50 0 0 34 50 0 h +.7256 g 2362 3446 N -50 0 0 34 50 0 h +.7317 g 2362 3480 N -50 0 0 33 50 0 h +.7379 g 2362 3513 N -50 0 0 34 50 0 h +.7441 g 2362 3547 N -50 0 0 33 50 0 h +.7503 g 2362 3580 N -50 0 0 34 50 0 h +.7565 g 2362 3614 N -50 0 0 34 50 0 h +.7627 g 2362 3648 N -50 0 0 33 50 0 h +.7689 g 2362 3681 N -50 0 0 34 50 0 h +.7751 g 2362 3715 N -50 0 0 33 50 0 h +.7813 g 2362 3748 N -50 0 0 34 50 0 h +.7875 g 2362 3782 N -50 0 0 34 50 0 h +.7937 g 2362 3816 N -50 0 0 33 50 0 h +.7999 g 2362 3849 N -50 0 0 34 50 0 h +.8061 g 2362 3883 N -50 0 0 33 50 0 h +.8123 g 2362 3916 N -50 0 0 34 50 0 h +.8185 g 2362 3950 N -50 0 0 33 50 0 h +.8247 g 2362 3983 N -50 0 0 34 50 0 h +.8309 g 2362 4017 N -50 0 0 34 50 0 h +.8371 g 2362 4051 N -50 0 0 33 50 0 h +.8433 g 2362 4084 N -50 0 0 34 50 0 h +.8495 g 2362 4118 N -50 0 0 33 50 0 h +.8557 g 2362 4151 N -50 0 0 34 50 0 h +.8619 g 2362 4185 N -50 0 0 34 50 0 h +.8681 g 2362 4219 N -50 0 0 33 50 0 h +.2707 g 2412 928 N -51 0 0 33 51 0 h +.2767 g 2412 961 N -51 0 0 34 51 0 h +.2828 g 2412 995 N -51 0 0 34 51 0 h +.2888 g 2412 1029 N -51 0 0 33 51 0 h +.2949 g 2412 1062 N -51 0 0 34 51 0 h +.3009 g 2412 1096 N -51 0 0 33 51 0 h +.307 g 2412 1129 N -51 0 0 34 51 0 h +.313 g 2412 1163 N -51 0 0 34 51 0 h +.3191 g 2412 1197 N -51 0 0 33 51 0 h +.3251 g 2412 1230 N -51 0 0 34 51 0 h +.3312 g 2412 1264 N -51 0 0 33 51 0 h +.3372 g 2412 1297 N -51 0 0 34 51 0 h +.3432 g 2412 1331 N -51 0 0 33 51 0 h +.3493 g 2412 1364 N -51 0 0 34 51 0 h +.3553 g 2412 1398 N -51 0 0 34 51 0 h +.3614 g 2412 1432 N -51 0 0 33 51 0 h +.3674 g 2412 1465 N -51 0 0 34 51 0 h +.3735 g 2412 1499 N -51 0 0 33 51 0 h +.3795 g 2412 1532 N -51 0 0 34 51 0 h +.3856 g 2412 1566 N -51 0 0 34 51 0 h +.3916 g 2412 1600 N -51 0 0 33 51 0 h +.3977 g 2412 1633 N -51 0 0 34 51 0 h +.4037 g 2412 1667 N -51 0 0 33 51 0 h +.4097 g 2412 1700 N -51 0 0 34 51 0 h +.4158 g 2412 1734 N -51 0 0 34 51 0 h +.4218 g 2412 1768 N -51 0 0 33 51 0 h +.4279 g 2412 1801 N -51 0 0 34 51 0 h +.4339 g 2412 1835 N -51 0 0 33 51 0 h +.44 g 2412 1868 N -51 0 0 34 51 0 h +.446 g 2412 1902 N -51 0 0 33 51 0 h +.4521 g 2412 1935 N -51 0 0 34 51 0 h +.4581 g 2412 1969 N -51 0 0 34 51 0 h +.4641 g 2412 2003 N -51 0 0 33 51 0 h +.4702 g 2412 2036 N -51 0 0 34 51 0 h +.4762 g 2412 2070 N -51 0 0 33 51 0 h +.4823 g 2412 2103 N -51 0 0 34 51 0 h +.4883 g 2412 2137 N -51 0 0 34 51 0 h +.4944 g 2412 2171 N -51 0 0 33 51 0 h +.5004 g 2412 2204 N -51 0 0 34 51 0 h +.5065 g 2412 2238 N -51 0 0 33 51 0 h +.5125 g 2412 2271 N -51 0 0 34 51 0 h +.5186 g 2412 2305 N -51 0 0 34 51 0 h +.5246 g 2412 2339 N -51 0 0 33 51 0 h +.5306 g 2412 2372 N -51 0 0 34 51 0 h +.5367 g 2412 2406 N -51 0 0 33 51 0 h +.5427 g 2412 2439 N -51 0 0 34 51 0 h +.5488 g 2412 2473 N -51 0 0 34 51 0 h +.5548 g 2412 2507 N -51 0 0 33 51 0 h +.5609 g 2412 2540 N -51 0 0 34 51 0 h +.5669 g 2412 2574 N -51 0 0 32 51 0 h +.573 g 2412 2606 N -51 0 0 34 51 0 h +.579 g 2412 2640 N -51 0 0 33 51 0 h +.5851 g 2412 2673 N -51 0 0 34 51 0 h +.5911 g 2412 2707 N -51 0 0 34 51 0 h +.5971 g 2412 2741 N -51 0 0 33 51 0 h +.6032 g 2412 2774 N -51 0 0 34 51 0 h +.6092 g 2412 2808 N -51 0 0 33 51 0 h +.6153 g 2412 2841 N -51 0 0 34 51 0 h +.6213 g 2412 2875 N -51 0 0 34 51 0 h +.6274 g 2412 2909 N -51 0 0 33 51 0 h +.6334 g 2412 2942 N -51 0 0 34 51 0 h +.6395 g 2412 2976 N -51 0 0 33 51 0 h +.6455 g 2412 3009 N -51 0 0 34 51 0 h +.6516 g 2412 3043 N -51 0 0 34 51 0 h +.6576 g 2412 3077 N -51 0 0 33 51 0 h +.6636 g 2412 3110 N -51 0 0 34 51 0 h +.6697 g 2412 3144 N -51 0 0 33 51 0 h +.6757 g 2412 3177 N -51 0 0 34 51 0 h +.6818 g 2412 3211 N -51 0 0 34 51 0 h +.6878 g 2412 3245 N -51 0 0 33 51 0 h +.6939 g 2412 3278 N -51 0 0 34 51 0 h +.6999 g 2412 3312 N -51 0 0 33 51 0 h +.706 g 2412 3345 N -51 0 0 34 51 0 h +.712 g 2412 3379 N -51 0 0 33 51 0 h +.7181 g 2412 3412 N -51 0 0 34 51 0 h +.7241 g 2412 3446 N -51 0 0 34 51 0 h +.7301 g 2412 3480 N -51 0 0 33 51 0 h +.7362 g 2412 3513 N -51 0 0 34 51 0 h +.7422 g 2412 3547 N -51 0 0 33 51 0 h +.7483 g 2412 3580 N -51 0 0 34 51 0 h +.7543 g 2412 3614 N -51 0 0 34 51 0 h +.7604 g 2412 3648 N -51 0 0 33 51 0 h +.7664 g 2412 3681 N -51 0 0 34 51 0 h +.7725 g 2412 3715 N -51 0 0 33 51 0 h +.7785 g 2412 3748 N -51 0 0 34 51 0 h +.7845 g 2412 3782 N -51 0 0 34 51 0 h +.7906 g 2412 3816 N -51 0 0 33 51 0 h +.7966 g 2412 3849 N -51 0 0 34 51 0 h +.8027 g 2412 3883 N -51 0 0 33 51 0 h +.8087 g 2412 3916 N -51 0 0 34 51 0 h +.8148 g 2412 3950 N -51 0 0 33 51 0 h +.8208 g 2412 3983 N -51 0 0 34 51 0 h +.8269 g 2412 4017 N -51 0 0 34 51 0 h +.8329 g 2412 4051 N -51 0 0 33 51 0 h +.839 g 2412 4084 N -51 0 0 34 51 0 h +.845 g 2412 4118 N -51 0 0 33 51 0 h +.851 g 2412 4151 N -51 0 0 34 51 0 h +.8571 g 2412 4185 N -51 0 0 34 51 0 h +.8631 g 2412 4219 N -51 0 0 33 51 0 h +.2807 g 2463 928 N -51 0 0 33 51 0 h +.2866 g 2463 961 N -51 0 0 34 51 0 h +.2925 g 2463 995 N -51 0 0 34 51 0 h +.2984 g 2463 1029 N -51 0 0 33 51 0 h +.3043 g 2463 1062 N -51 0 0 34 51 0 h +.3102 g 2463 1096 N -51 0 0 33 51 0 h +.3161 g 2463 1129 N -51 0 0 34 51 0 h +.322 g 2463 1163 N -51 0 0 34 51 0 h +.3279 g 2463 1197 N -51 0 0 33 51 0 h +.3338 g 2463 1230 N -51 0 0 34 51 0 h +.3396 g 2463 1264 N -51 0 0 33 51 0 h +.3455 g 2463 1297 N -51 0 0 34 51 0 h +.3514 g 2463 1331 N -51 0 0 33 51 0 h +.3573 g 2463 1364 N -51 0 0 34 51 0 h +.3632 g 2463 1398 N -51 0 0 34 51 0 h +.3691 g 2463 1432 N -51 0 0 33 51 0 h +.375 g 2463 1465 N -51 0 0 34 51 0 h +.3809 g 2463 1499 N -51 0 0 33 51 0 h +.3868 g 2463 1532 N -51 0 0 34 51 0 h +.3927 g 2463 1566 N -51 0 0 34 51 0 h +.3986 g 2463 1600 N -51 0 0 33 51 0 h +.4045 g 2463 1633 N -51 0 0 34 51 0 h +.4104 g 2463 1667 N -51 0 0 33 51 0 h +.4162 g 2463 1700 N -51 0 0 34 51 0 h +.4221 g 2463 1734 N -51 0 0 34 51 0 h +.428 g 2463 1768 N -51 0 0 33 51 0 h +.4339 g 2463 1801 N -51 0 0 34 51 0 h +.4398 g 2463 1835 N -51 0 0 33 51 0 h +.4457 g 2463 1868 N -51 0 0 34 51 0 h +.4516 g 2463 1902 N -51 0 0 33 51 0 h +.4575 g 2463 1935 N -51 0 0 34 51 0 h +.4634 g 2463 1969 N -51 0 0 34 51 0 h +.4693 g 2463 2003 N -51 0 0 33 51 0 h +.4752 g 2463 2036 N -51 0 0 34 51 0 h +.4811 g 2463 2070 N -51 0 0 33 51 0 h +.487 g 2463 2103 N -51 0 0 34 51 0 h +.4928 g 2463 2137 N -51 0 0 34 51 0 h +.4987 g 2463 2171 N -51 0 0 33 51 0 h +.5046 g 2463 2204 N -51 0 0 34 51 0 h +.5105 g 2463 2238 N -51 0 0 33 51 0 h +.5164 g 2463 2271 N -51 0 0 34 51 0 h +.5223 g 2463 2305 N -51 0 0 34 51 0 h +.5282 g 2463 2339 N -51 0 0 33 51 0 h +.5341 g 2463 2372 N -51 0 0 34 51 0 h +.54 g 2463 2406 N -51 0 0 33 51 0 h +.5459 g 2463 2439 N -51 0 0 34 51 0 h +.5518 g 2463 2473 N -51 0 0 34 51 0 h +.5577 g 2463 2507 N -51 0 0 33 51 0 h +.5636 g 2463 2540 N -51 0 0 34 51 0 h +.5694 g 2463 2574 N -51 0 0 32 51 0 h +.5753 g 2463 2606 N -51 0 0 34 51 0 h +.5812 g 2463 2640 N -51 0 0 33 51 0 h +.5871 g 2463 2673 N -51 0 0 34 51 0 h +.593 g 2463 2707 N -51 0 0 34 51 0 h +.5989 g 2463 2741 N -51 0 0 33 51 0 h +.6048 g 2463 2774 N -51 0 0 34 51 0 h +.6107 g 2463 2808 N -51 0 0 33 51 0 h +.6166 g 2463 2841 N -51 0 0 34 51 0 h +.6225 g 2463 2875 N -51 0 0 34 51 0 h +.6284 g 2463 2909 N -51 0 0 33 51 0 h +.6343 g 2463 2942 N -51 0 0 34 51 0 h +.6402 g 2463 2976 N -51 0 0 33 51 0 h +.646 g 2463 3009 N -51 0 0 34 51 0 h +.6519 g 2463 3043 N -51 0 0 34 51 0 h +.6578 g 2463 3077 N -51 0 0 33 51 0 h +.6637 g 2463 3110 N -51 0 0 34 51 0 h +.6696 g 2463 3144 N -51 0 0 33 51 0 h +.6755 g 2463 3177 N -51 0 0 34 51 0 h +.6814 g 2463 3211 N -51 0 0 34 51 0 h +.6873 g 2463 3245 N -51 0 0 33 51 0 h +.6932 g 2463 3278 N -51 0 0 34 51 0 h +.6991 g 2463 3312 N -51 0 0 33 51 0 h +.705 g 2463 3345 N -51 0 0 34 51 0 h +.7109 g 2463 3379 N -51 0 0 33 51 0 h +.7168 g 2463 3412 N -51 0 0 34 51 0 h +.7226 g 2463 3446 N -51 0 0 34 51 0 h +.7285 g 2463 3480 N -51 0 0 33 51 0 h +.7344 g 2463 3513 N -51 0 0 34 51 0 h +.7403 g 2463 3547 N -51 0 0 33 51 0 h +.7462 g 2463 3580 N -51 0 0 34 51 0 h +.7521 g 2463 3614 N -51 0 0 34 51 0 h +.758 g 2463 3648 N -51 0 0 33 51 0 h +.7639 g 2463 3681 N -51 0 0 34 51 0 h +.7698 g 2463 3715 N -51 0 0 33 51 0 h +.7757 g 2463 3748 N -51 0 0 34 51 0 h +.7816 g 2463 3782 N -51 0 0 34 51 0 h +.7875 g 2463 3816 N -51 0 0 33 51 0 h +.7934 g 2463 3849 N -51 0 0 34 51 0 h +.7992 g 2463 3883 N -51 0 0 33 51 0 h +.8051 g 2463 3916 N -51 0 0 34 51 0 h +.811 g 2463 3950 N -51 0 0 33 51 0 h +.8169 g 2463 3983 N -51 0 0 34 51 0 h +.8228 g 2463 4017 N -51 0 0 34 51 0 h +.8287 g 2463 4051 N -51 0 0 33 51 0 h +.8346 g 2463 4084 N -51 0 0 34 51 0 h +.8405 g 2463 4118 N -51 0 0 33 51 0 h +.8464 g 2463 4151 N -51 0 0 34 51 0 h +.8523 g 2463 4185 N -51 0 0 34 51 0 h +.8582 g 2463 4219 N -51 0 0 33 51 0 h +.2907 g 2514 928 N -50 0 0 33 50 0 h +.2965 g 2514 961 N -50 0 0 34 50 0 h +.3022 g 2514 995 N -50 0 0 34 50 0 h +.308 g 2514 1029 N -50 0 0 33 50 0 h +.3137 g 2514 1062 N -50 0 0 34 50 0 h +.3194 g 2514 1096 N -50 0 0 33 50 0 h +.3252 g 2514 1129 N -50 0 0 34 50 0 h +.3309 g 2514 1163 N -50 0 0 34 50 0 h +.3367 g 2514 1197 N -50 0 0 33 50 0 h +.3424 g 2514 1230 N -50 0 0 34 50 0 h +.3481 g 2514 1264 N -50 0 0 33 50 0 h +.3539 g 2514 1297 N -50 0 0 34 50 0 h +.3596 g 2514 1331 N -50 0 0 33 50 0 h +.3654 g 2514 1364 N -50 0 0 34 50 0 h +.3711 g 2514 1398 N -50 0 0 34 50 0 h +.3768 g 2514 1432 N -50 0 0 33 50 0 h +.3826 g 2514 1465 N -50 0 0 34 50 0 h +.3883 g 2514 1499 N -50 0 0 33 50 0 h +.3941 g 2514 1532 N -50 0 0 34 50 0 h +.3998 g 2514 1566 N -50 0 0 34 50 0 h +.4055 g 2514 1600 N -50 0 0 33 50 0 h +.4113 g 2514 1633 N -50 0 0 34 50 0 h +.417 g 2514 1667 N -50 0 0 33 50 0 h +.4228 g 2514 1700 N -50 0 0 34 50 0 h +.4285 g 2514 1734 N -50 0 0 34 50 0 h +.4342 g 2514 1768 N -50 0 0 33 50 0 h +.44 g 2514 1801 N -50 0 0 34 50 0 h +.4457 g 2514 1835 N -50 0 0 33 50 0 h +.4514 g 2514 1868 N -50 0 0 34 50 0 h +.4572 g 2514 1902 N -50 0 0 33 50 0 h +.4629 g 2514 1935 N -50 0 0 34 50 0 h +.4687 g 2514 1969 N -50 0 0 34 50 0 h +.4744 g 2514 2003 N -50 0 0 33 50 0 h +.4801 g 2514 2036 N -50 0 0 34 50 0 h +.4859 g 2514 2070 N -50 0 0 33 50 0 h +.4916 g 2514 2103 N -50 0 0 34 50 0 h +.4974 g 2514 2137 N -50 0 0 34 50 0 h +.5031 g 2514 2171 N -50 0 0 33 50 0 h +.5088 g 2514 2204 N -50 0 0 34 50 0 h +.5146 g 2514 2238 N -50 0 0 33 50 0 h +.5203 g 2514 2271 N -50 0 0 34 50 0 h +.5261 g 2514 2305 N -50 0 0 34 50 0 h +.5318 g 2514 2339 N -50 0 0 33 50 0 h +.5375 g 2514 2372 N -50 0 0 34 50 0 h +.5433 g 2514 2406 N -50 0 0 33 50 0 h +.549 g 2514 2439 N -50 0 0 34 50 0 h +.5548 g 2514 2473 N -50 0 0 34 50 0 h +.5605 g 2514 2507 N -50 0 0 33 50 0 h +.5662 g 2514 2540 N -50 0 0 34 50 0 h +.572 g 2514 2574 N -50 0 0 32 50 0 h +.5777 g 2514 2606 N -50 0 0 34 50 0 h +.5834 g 2514 2640 N -50 0 0 33 50 0 h +.5892 g 2514 2673 N -50 0 0 34 50 0 h +.5949 g 2514 2707 N -50 0 0 34 50 0 h +.6007 g 2514 2741 N -50 0 0 33 50 0 h +.6064 g 2514 2774 N -50 0 0 34 50 0 h +.6121 g 2514 2808 N -50 0 0 33 50 0 h +.6179 g 2514 2841 N -50 0 0 34 50 0 h +.6236 g 2514 2875 N -50 0 0 34 50 0 h +.6294 g 2514 2909 N -50 0 0 33 50 0 h +.6351 g 2514 2942 N -50 0 0 34 50 0 h +.6408 g 2514 2976 N -50 0 0 33 50 0 h +.6466 g 2514 3009 N -50 0 0 34 50 0 h +.6523 g 2514 3043 N -50 0 0 34 50 0 h +.6581 g 2514 3077 N -50 0 0 33 50 0 h +.6638 g 2514 3110 N -50 0 0 34 50 0 h +.6695 g 2514 3144 N -50 0 0 33 50 0 h +.6753 g 2514 3177 N -50 0 0 34 50 0 h +.681 g 2514 3211 N -50 0 0 34 50 0 h +.6868 g 2514 3245 N -50 0 0 33 50 0 h +.6925 g 2514 3278 N -50 0 0 34 50 0 h +.6982 g 2514 3312 N -50 0 0 33 50 0 h +.704 g 2514 3345 N -50 0 0 34 50 0 h +.7097 g 2514 3379 N -50 0 0 33 50 0 h +.7155 g 2514 3412 N -50 0 0 34 50 0 h +.7212 g 2514 3446 N -50 0 0 34 50 0 h +.7269 g 2514 3480 N -50 0 0 33 50 0 h +.7327 g 2514 3513 N -50 0 0 34 50 0 h +.7384 g 2514 3547 N -50 0 0 33 50 0 h +.7441 g 2514 3580 N -50 0 0 34 50 0 h +.7499 g 2514 3614 N -50 0 0 34 50 0 h +.7556 g 2514 3648 N -50 0 0 33 50 0 h +.7614 g 2514 3681 N -50 0 0 34 50 0 h +.7671 g 2514 3715 N -50 0 0 33 50 0 h +.7728 g 2514 3748 N -50 0 0 34 50 0 h +.7786 g 2514 3782 N -50 0 0 34 50 0 h +.7843 g 2514 3816 N -50 0 0 33 50 0 h +.7901 g 2514 3849 N -50 0 0 34 50 0 h +.7958 g 2514 3883 N -50 0 0 33 50 0 h +.8015 g 2514 3916 N -50 0 0 34 50 0 h +.8073 g 2514 3950 N -50 0 0 33 50 0 h +.813 g 2514 3983 N -50 0 0 34 50 0 h +.8188 g 2514 4017 N -50 0 0 34 50 0 h +.8245 g 2514 4051 N -50 0 0 33 50 0 h +.8302 g 2514 4084 N -50 0 0 34 50 0 h +.836 g 2514 4118 N -50 0 0 33 50 0 h +.8417 g 2514 4151 N -50 0 0 34 50 0 h +.8475 g 2514 4185 N -50 0 0 34 50 0 h +.8532 g 2514 4219 N -50 0 0 33 50 0 h +.3008 g 2564 928 N -51 0 0 33 51 0 h +.3064 g 2564 961 N -51 0 0 34 51 0 h +.3119 g 2564 995 N -51 0 0 34 51 0 h +.3175 g 2564 1029 N -51 0 0 33 51 0 h +.3231 g 2564 1062 N -51 0 0 34 51 0 h +.3287 g 2564 1096 N -51 0 0 33 51 0 h +.3343 g 2564 1129 N -51 0 0 34 51 0 h +.3399 g 2564 1163 N -51 0 0 34 51 0 h +.3455 g 2564 1197 N -51 0 0 33 51 0 h +.351 g 2564 1230 N -51 0 0 34 51 0 h +.3566 g 2564 1264 N -51 0 0 33 51 0 h +.3622 g 2564 1297 N -51 0 0 34 51 0 h +.3678 g 2564 1331 N -51 0 0 33 51 0 h +.3734 g 2564 1364 N -51 0 0 34 51 0 h +.379 g 2564 1398 N -51 0 0 34 51 0 h +.3846 g 2564 1432 N -51 0 0 33 51 0 h +.3902 g 2564 1465 N -51 0 0 34 51 0 h +.3957 g 2564 1499 N -51 0 0 33 51 0 h +.4013 g 2564 1532 N -51 0 0 34 51 0 h +.4069 g 2564 1566 N -51 0 0 34 51 0 h +.4125 g 2564 1600 N -51 0 0 33 51 0 h +.4181 g 2564 1633 N -51 0 0 34 51 0 h +.4237 g 2564 1667 N -51 0 0 33 51 0 h +.4293 g 2564 1700 N -51 0 0 34 51 0 h +.4348 g 2564 1734 N -51 0 0 34 51 0 h +.4404 g 2564 1768 N -51 0 0 33 51 0 h +.446 g 2564 1801 N -51 0 0 34 51 0 h +.4516 g 2564 1835 N -51 0 0 33 51 0 h +.4572 g 2564 1868 N -51 0 0 34 51 0 h +.4628 g 2564 1902 N -51 0 0 33 51 0 h +.4684 g 2564 1935 N -51 0 0 34 51 0 h +.4739 g 2564 1969 N -51 0 0 34 51 0 h +.4795 g 2564 2003 N -51 0 0 33 51 0 h +.4851 g 2564 2036 N -51 0 0 34 51 0 h +.4907 g 2564 2070 N -51 0 0 33 51 0 h +.4963 g 2564 2103 N -51 0 0 34 51 0 h +.5019 g 2564 2137 N -51 0 0 34 51 0 h +.5075 g 2564 2171 N -51 0 0 33 51 0 h +.513 g 2564 2204 N -51 0 0 34 51 0 h +.5186 g 2564 2238 N -51 0 0 33 51 0 h +.5242 g 2564 2271 N -51 0 0 34 51 0 h +.5298 g 2564 2305 N -51 0 0 34 51 0 h +.5354 g 2564 2339 N -51 0 0 33 51 0 h +.541 g 2564 2372 N -51 0 0 34 51 0 h +.5466 g 2564 2406 N -51 0 0 33 51 0 h +.5522 g 2564 2439 N -51 0 0 34 51 0 h +.5577 g 2564 2473 N -51 0 0 34 51 0 h +.5633 g 2564 2507 N -51 0 0 33 51 0 h +.5689 g 2564 2540 N -51 0 0 34 51 0 h +.5745 g 2564 2574 N -51 0 0 32 51 0 h +.5801 g 2564 2606 N -51 0 0 34 51 0 h +.5857 g 2564 2640 N -51 0 0 33 51 0 h +.5913 g 2564 2673 N -51 0 0 34 51 0 h +.5968 g 2564 2707 N -51 0 0 34 51 0 h +.6024 g 2564 2741 N -51 0 0 33 51 0 h +.608 g 2564 2774 N -51 0 0 34 51 0 h +.6136 g 2564 2808 N -51 0 0 33 51 0 h +.6192 g 2564 2841 N -51 0 0 34 51 0 h +.6248 g 2564 2875 N -51 0 0 34 51 0 h +.6304 g 2564 2909 N -51 0 0 33 51 0 h +.6359 g 2564 2942 N -51 0 0 34 51 0 h +.6415 g 2564 2976 N -51 0 0 33 51 0 h +.6471 g 2564 3009 N -51 0 0 34 51 0 h +.6527 g 2564 3043 N -51 0 0 34 51 0 h +.6583 g 2564 3077 N -51 0 0 33 51 0 h +.6639 g 2564 3110 N -51 0 0 34 51 0 h +.6695 g 2564 3144 N -51 0 0 33 51 0 h +.675 g 2564 3177 N -51 0 0 34 51 0 h +.6806 g 2564 3211 N -51 0 0 34 51 0 h +.6862 g 2564 3245 N -51 0 0 33 51 0 h +.6918 g 2564 3278 N -51 0 0 34 51 0 h +.6974 g 2564 3312 N -51 0 0 33 51 0 h +.703 g 2564 3345 N -51 0 0 34 51 0 h +.7086 g 2564 3379 N -51 0 0 33 51 0 h +.7141 g 2564 3412 N -51 0 0 34 51 0 h +.7197 g 2564 3446 N -51 0 0 34 51 0 h +.7253 g 2564 3480 N -51 0 0 33 51 0 h +.7309 g 2564 3513 N -51 0 0 34 51 0 h +.7365 g 2564 3547 N -51 0 0 33 51 0 h +.7421 g 2564 3580 N -51 0 0 34 51 0 h +.7477 g 2564 3614 N -51 0 0 34 51 0 h +.7533 g 2564 3648 N -51 0 0 33 51 0 h +.7588 g 2564 3681 N -51 0 0 34 51 0 h +.7644 g 2564 3715 N -51 0 0 33 51 0 h +.77 g 2564 3748 N -51 0 0 34 51 0 h +.7756 g 2564 3782 N -51 0 0 34 51 0 h +.7812 g 2564 3816 N -51 0 0 33 51 0 h +.7868 g 2564 3849 N -51 0 0 34 51 0 h +.7924 g 2564 3883 N -51 0 0 33 51 0 h +.7979 g 2564 3916 N -51 0 0 34 51 0 h +.8035 g 2564 3950 N -51 0 0 33 51 0 h +.8091 g 2564 3983 N -51 0 0 34 51 0 h +.8147 g 2564 4017 N -51 0 0 34 51 0 h +.8203 g 2564 4051 N -51 0 0 33 51 0 h +.8259 g 2564 4084 N -51 0 0 34 51 0 h +.8315 g 2564 4118 N -51 0 0 33 51 0 h +.837 g 2564 4151 N -51 0 0 34 51 0 h +.8426 g 2564 4185 N -51 0 0 34 51 0 h +.8482 g 2564 4219 N -51 0 0 33 51 0 h +.3108 g 2615 928 N -50 0 0 33 50 0 h +.3162 g 2615 961 N -50 0 0 34 50 0 h +.3217 g 2615 995 N -50 0 0 34 50 0 h +.3271 g 2615 1029 N -50 0 0 33 50 0 h +.3325 g 2615 1062 N -50 0 0 34 50 0 h +.338 g 2615 1096 N -50 0 0 33 50 0 h +.3434 g 2615 1129 N -50 0 0 34 50 0 h +.3488 g 2615 1163 N -50 0 0 34 50 0 h +.3543 g 2615 1197 N -50 0 0 33 50 0 h +.3597 g 2615 1230 N -50 0 0 34 50 0 h +.3651 g 2615 1264 N -50 0 0 33 50 0 h +.3706 g 2615 1297 N -50 0 0 34 50 0 h +.376 g 2615 1331 N -50 0 0 33 50 0 h +.3814 g 2615 1364 N -50 0 0 34 50 0 h +.3869 g 2615 1398 N -50 0 0 34 50 0 h +.3923 g 2615 1432 N -50 0 0 33 50 0 h +.3977 g 2615 1465 N -50 0 0 34 50 0 h +.4032 g 2615 1499 N -50 0 0 33 50 0 h +.4086 g 2615 1532 N -50 0 0 34 50 0 h +.414 g 2615 1566 N -50 0 0 34 50 0 h +.4195 g 2615 1600 N -50 0 0 33 50 0 h +.4249 g 2615 1633 N -50 0 0 34 50 0 h +.4303 g 2615 1667 N -50 0 0 33 50 0 h +.4358 g 2615 1700 N -50 0 0 34 50 0 h +.4412 g 2615 1734 N -50 0 0 34 50 0 h +.4466 g 2615 1768 N -50 0 0 33 50 0 h +.4521 g 2615 1801 N -50 0 0 34 50 0 h +.4575 g 2615 1835 N -50 0 0 33 50 0 h +.4629 g 2615 1868 N -50 0 0 34 50 0 h +.4684 g 2615 1902 N -50 0 0 33 50 0 h +.4738 g 2615 1935 N -50 0 0 34 50 0 h +.4792 g 2615 1969 N -50 0 0 34 50 0 h +.4847 g 2615 2003 N -50 0 0 33 50 0 h +.4901 g 2615 2036 N -50 0 0 34 50 0 h +.4955 g 2615 2070 N -50 0 0 33 50 0 h +.501 g 2615 2103 N -50 0 0 34 50 0 h +.5064 g 2615 2137 N -50 0 0 34 50 0 h +.5118 g 2615 2171 N -50 0 0 33 50 0 h +.5173 g 2615 2204 N -50 0 0 34 50 0 h +.5227 g 2615 2238 N -50 0 0 33 50 0 h +.5281 g 2615 2271 N -50 0 0 34 50 0 h +.5336 g 2615 2305 N -50 0 0 34 50 0 h +.539 g 2615 2339 N -50 0 0 33 50 0 h +.5444 g 2615 2372 N -50 0 0 34 50 0 h +.5499 g 2615 2406 N -50 0 0 33 50 0 h +.5553 g 2615 2439 N -50 0 0 34 50 0 h +.5607 g 2615 2473 N -50 0 0 34 50 0 h +.5662 g 2615 2507 N -50 0 0 33 50 0 h +.5716 g 2615 2540 N -50 0 0 34 50 0 h +.577 g 2615 2574 N -50 0 0 32 50 0 h +.5825 g 2615 2606 N -50 0 0 34 50 0 h +.5879 g 2615 2640 N -50 0 0 33 50 0 h +.5933 g 2615 2673 N -50 0 0 34 50 0 h +.5988 g 2615 2707 N -50 0 0 34 50 0 h +.6042 g 2615 2741 N -50 0 0 33 50 0 h +.6096 g 2615 2774 N -50 0 0 34 50 0 h +.6151 g 2615 2808 N -50 0 0 33 50 0 h +.6205 g 2615 2841 N -50 0 0 34 50 0 h +.6259 g 2615 2875 N -50 0 0 34 50 0 h +.6314 g 2615 2909 N -50 0 0 33 50 0 h +.6368 g 2615 2942 N -50 0 0 34 50 0 h +.6422 g 2615 2976 N -50 0 0 33 50 0 h +.6477 g 2615 3009 N -50 0 0 34 50 0 h +.6531 g 2615 3043 N -50 0 0 34 50 0 h +.6585 g 2615 3077 N -50 0 0 33 50 0 h +.664 g 2615 3110 N -50 0 0 34 50 0 h +.6694 g 2615 3144 N -50 0 0 33 50 0 h +.6748 g 2615 3177 N -50 0 0 34 50 0 h +.6802 g 2615 3211 N -50 0 0 34 50 0 h +.6857 g 2615 3245 N -50 0 0 33 50 0 h +.6911 g 2615 3278 N -50 0 0 34 50 0 h +.6965 g 2615 3312 N -50 0 0 33 50 0 h +.702 g 2615 3345 N -50 0 0 34 50 0 h +.7074 g 2615 3379 N -50 0 0 33 50 0 h +.7128 g 2615 3412 N -50 0 0 34 50 0 h +.7183 g 2615 3446 N -50 0 0 34 50 0 h +.7237 g 2615 3480 N -50 0 0 33 50 0 h +.7291 g 2615 3513 N -50 0 0 34 50 0 h +.7346 g 2615 3547 N -50 0 0 33 50 0 h +.74 g 2615 3580 N -50 0 0 34 50 0 h +.7454 g 2615 3614 N -50 0 0 34 50 0 h +.7509 g 2615 3648 N -50 0 0 33 50 0 h +.7563 g 2615 3681 N -50 0 0 34 50 0 h +.7617 g 2615 3715 N -50 0 0 33 50 0 h +.7672 g 2615 3748 N -50 0 0 34 50 0 h +.7726 g 2615 3782 N -50 0 0 34 50 0 h +.778 g 2615 3816 N -50 0 0 33 50 0 h +.7835 g 2615 3849 N -50 0 0 34 50 0 h +.7889 g 2615 3883 N -50 0 0 33 50 0 h +.7943 g 2615 3916 N -50 0 0 34 50 0 h +.7998 g 2615 3950 N -50 0 0 33 50 0 h +.8052 g 2615 3983 N -50 0 0 34 50 0 h +.8106 g 2615 4017 N -50 0 0 34 50 0 h +.8161 g 2615 4051 N -50 0 0 33 50 0 h +.8215 g 2615 4084 N -50 0 0 34 50 0 h +.8269 g 2615 4118 N -50 0 0 33 50 0 h +.8324 g 2615 4151 N -50 0 0 34 50 0 h +.8378 g 2615 4185 N -50 0 0 34 50 0 h +.8432 g 2615 4219 N -50 0 0 33 50 0 h +.3208 g 2665 928 N -51 0 0 33 51 0 h +.3261 g 2665 961 N -51 0 0 34 51 0 h +.3314 g 2665 995 N -51 0 0 34 51 0 h +.3367 g 2665 1029 N -51 0 0 33 51 0 h +.3419 g 2665 1062 N -51 0 0 34 51 0 h +.3472 g 2665 1096 N -51 0 0 33 51 0 h +.3525 g 2665 1129 N -51 0 0 34 51 0 h +.3578 g 2665 1163 N -51 0 0 34 51 0 h +.3631 g 2665 1197 N -51 0 0 33 51 0 h +.3683 g 2665 1230 N -51 0 0 34 51 0 h +.3736 g 2665 1264 N -51 0 0 33 51 0 h +.3789 g 2665 1297 N -51 0 0 34 51 0 h +.3842 g 2665 1331 N -51 0 0 33 51 0 h +.3895 g 2665 1364 N -51 0 0 34 51 0 h +.3947 g 2665 1398 N -51 0 0 34 51 0 h +.4 g 2665 1432 N -51 0 0 33 51 0 h +.4053 g 2665 1465 N -51 0 0 34 51 0 h +.4106 g 2665 1499 N -51 0 0 33 51 0 h +.4159 g 2665 1532 N -51 0 0 34 51 0 h +.4211 g 2665 1566 N -51 0 0 34 51 0 h +.4264 g 2665 1600 N -51 0 0 33 51 0 h +.4317 g 2665 1633 N -51 0 0 34 51 0 h +.437 g 2665 1667 N -51 0 0 33 51 0 h +.4423 g 2665 1700 N -51 0 0 34 51 0 h +.4475 g 2665 1734 N -51 0 0 34 51 0 h +.4528 g 2665 1768 N -51 0 0 33 51 0 h +.4581 g 2665 1801 N -51 0 0 34 51 0 h +.4634 g 2665 1835 N -51 0 0 33 51 0 h +.4687 g 2665 1868 N -51 0 0 34 51 0 h +.4739 g 2665 1902 N -51 0 0 33 51 0 h +.4792 g 2665 1935 N -51 0 0 34 51 0 h +.4845 g 2665 1969 N -51 0 0 34 51 0 h +.4898 g 2665 2003 N -51 0 0 33 51 0 h +.4951 g 2665 2036 N -51 0 0 34 51 0 h +.5003 g 2665 2070 N -51 0 0 33 51 0 h +.5056 g 2665 2103 N -51 0 0 34 51 0 h +.5109 g 2665 2137 N -51 0 0 34 51 0 h +.5162 g 2665 2171 N -51 0 0 33 51 0 h +.5215 g 2665 2204 N -51 0 0 34 51 0 h +.5267 g 2665 2238 N -51 0 0 33 51 0 h +.532 g 2665 2271 N -51 0 0 34 51 0 h +.5373 g 2665 2305 N -51 0 0 34 51 0 h +.5426 g 2665 2339 N -51 0 0 33 51 0 h +.5479 g 2665 2372 N -51 0 0 34 51 0 h +.5531 g 2665 2406 N -51 0 0 33 51 0 h +.5584 g 2665 2439 N -51 0 0 34 51 0 h +.5637 g 2665 2473 N -51 0 0 34 51 0 h +.569 g 2665 2507 N -51 0 0 33 51 0 h +.5743 g 2665 2540 N -51 0 0 34 51 0 h +.5795 g 2665 2574 N -51 0 0 32 51 0 h +.5848 g 2665 2606 N -51 0 0 34 51 0 h +.5901 g 2665 2640 N -51 0 0 33 51 0 h +.5954 g 2665 2673 N -51 0 0 34 51 0 h +.6007 g 2665 2707 N -51 0 0 34 51 0 h +.6059 g 2665 2741 N -51 0 0 33 51 0 h +.6112 g 2665 2774 N -51 0 0 34 51 0 h +.6165 g 2665 2808 N -51 0 0 33 51 0 h +.6218 g 2665 2841 N -51 0 0 34 51 0 h +.6271 g 2665 2875 N -51 0 0 34 51 0 h +.6323 g 2665 2909 N -51 0 0 33 51 0 h +.6376 g 2665 2942 N -51 0 0 34 51 0 h +.6429 g 2665 2976 N -51 0 0 33 51 0 h +.6482 g 2665 3009 N -51 0 0 34 51 0 h +.6535 g 2665 3043 N -51 0 0 34 51 0 h +.6587 g 2665 3077 N -51 0 0 33 51 0 h +.664 g 2665 3110 N -51 0 0 34 51 0 h +.6693 g 2665 3144 N -51 0 0 33 51 0 h +.6746 g 2665 3177 N -51 0 0 34 51 0 h +.6799 g 2665 3211 N -51 0 0 34 51 0 h +.6851 g 2665 3245 N -51 0 0 33 51 0 h +.6904 g 2665 3278 N -51 0 0 34 51 0 h +.6957 g 2665 3312 N -51 0 0 33 51 0 h +.701 g 2665 3345 N -51 0 0 34 51 0 h +.7063 g 2665 3379 N -51 0 0 33 51 0 h +.7115 g 2665 3412 N -51 0 0 34 51 0 h +.7168 g 2665 3446 N -51 0 0 34 51 0 h +.7221 g 2665 3480 N -51 0 0 33 51 0 h +.7274 g 2665 3513 N -51 0 0 34 51 0 h +.7327 g 2665 3547 N -51 0 0 33 51 0 h +.7379 g 2665 3580 N -51 0 0 34 51 0 h +.7432 g 2665 3614 N -51 0 0 34 51 0 h +.7485 g 2665 3648 N -51 0 0 33 51 0 h +.7538 g 2665 3681 N -51 0 0 34 51 0 h +.7591 g 2665 3715 N -51 0 0 33 51 0 h +.7643 g 2665 3748 N -51 0 0 34 51 0 h +.7696 g 2665 3782 N -51 0 0 34 51 0 h +.7749 g 2665 3816 N -51 0 0 33 51 0 h +.7802 g 2665 3849 N -51 0 0 34 51 0 h +.7855 g 2665 3883 N -51 0 0 33 51 0 h +.7907 g 2665 3916 N -51 0 0 34 51 0 h +.796 g 2665 3950 N -51 0 0 33 51 0 h +.8013 g 2665 3983 N -51 0 0 34 51 0 h +.8066 g 2665 4017 N -51 0 0 34 51 0 h +.8119 g 2665 4051 N -51 0 0 33 51 0 h +.8171 g 2665 4084 N -51 0 0 34 51 0 h +.8224 g 2665 4118 N -51 0 0 33 51 0 h +.8277 g 2665 4151 N -51 0 0 34 51 0 h +.833 g 2665 4185 N -51 0 0 34 51 0 h +.8383 g 2665 4219 N -51 0 0 33 51 0 h +.3308 g 2716 928 N -50 0 0 33 50 0 h +.336 g 2716 961 N -50 0 0 34 50 0 h +.3411 g 2716 995 N -50 0 0 34 50 0 h +.3462 g 2716 1029 N -50 0 0 33 50 0 h +.3514 g 2716 1062 N -50 0 0 34 50 0 h +.3565 g 2716 1096 N -50 0 0 33 50 0 h +.3616 g 2716 1129 N -50 0 0 34 50 0 h +.3667 g 2716 1163 N -50 0 0 34 50 0 h +.3719 g 2716 1197 N -50 0 0 33 50 0 h +.377 g 2716 1230 N -50 0 0 34 50 0 h +.3821 g 2716 1264 N -50 0 0 33 50 0 h +.3872 g 2716 1297 N -50 0 0 34 50 0 h +.3924 g 2716 1331 N -50 0 0 33 50 0 h +.3975 g 2716 1364 N -50 0 0 34 50 0 h +.4026 g 2716 1398 N -50 0 0 34 50 0 h +.4078 g 2716 1432 N -50 0 0 33 50 0 h +.4129 g 2716 1465 N -50 0 0 34 50 0 h +.418 g 2716 1499 N -50 0 0 33 50 0 h +.4231 g 2716 1532 N -50 0 0 34 50 0 h +.4283 g 2716 1566 N -50 0 0 34 50 0 h +.4334 g 2716 1600 N -50 0 0 33 50 0 h +.4385 g 2716 1633 N -50 0 0 34 50 0 h +.4436 g 2716 1667 N -50 0 0 33 50 0 h +.4488 g 2716 1700 N -50 0 0 34 50 0 h +.4539 g 2716 1734 N -50 0 0 34 50 0 h +.459 g 2716 1768 N -50 0 0 33 50 0 h +.4641 g 2716 1801 N -50 0 0 34 50 0 h +.4693 g 2716 1835 N -50 0 0 33 50 0 h +.4744 g 2716 1868 N -50 0 0 34 50 0 h +.4795 g 2716 1902 N -50 0 0 33 50 0 h +.4847 g 2716 1935 N -50 0 0 34 50 0 h +.4898 g 2716 1969 N -50 0 0 34 50 0 h +.4949 g 2716 2003 N -50 0 0 33 50 0 h +.5 g 2716 2036 N -50 0 0 34 50 0 h +.5052 g 2716 2070 N -50 0 0 33 50 0 h +.5103 g 2716 2103 N -50 0 0 34 50 0 h +.5154 g 2716 2137 N -50 0 0 34 50 0 h +.5205 g 2716 2171 N -50 0 0 33 50 0 h +.5257 g 2716 2204 N -50 0 0 34 50 0 h +.5308 g 2716 2238 N -50 0 0 33 50 0 h +.5359 g 2716 2271 N -50 0 0 34 50 0 h +.5411 g 2716 2305 N -50 0 0 34 50 0 h +.5462 g 2716 2339 N -50 0 0 33 50 0 h +.5513 g 2716 2372 N -50 0 0 34 50 0 h +.5564 g 2716 2406 N -50 0 0 33 50 0 h +.5616 g 2716 2439 N -50 0 0 34 50 0 h +.5667 g 2716 2473 N -50 0 0 34 50 0 h +.5718 g 2716 2507 N -50 0 0 33 50 0 h +.5769 g 2716 2540 N -50 0 0 34 50 0 h +.5821 g 2716 2574 N -50 0 0 32 50 0 h +.5872 g 2716 2606 N -50 0 0 34 50 0 h +.5923 g 2716 2640 N -50 0 0 33 50 0 h +.5975 g 2716 2673 N -50 0 0 34 50 0 h +.6026 g 2716 2707 N -50 0 0 34 50 0 h +.6077 g 2716 2741 N -50 0 0 33 50 0 h +.6128 g 2716 2774 N -50 0 0 34 50 0 h +.618 g 2716 2808 N -50 0 0 33 50 0 h +.6231 g 2716 2841 N -50 0 0 34 50 0 h +.6282 g 2716 2875 N -50 0 0 34 50 0 h +.6333 g 2716 2909 N -50 0 0 33 50 0 h +.6385 g 2716 2942 N -50 0 0 34 50 0 h +.6436 g 2716 2976 N -50 0 0 33 50 0 h +.6487 g 2716 3009 N -50 0 0 34 50 0 h +.6538 g 2716 3043 N -50 0 0 34 50 0 h +.659 g 2716 3077 N -50 0 0 33 50 0 h +.6641 g 2716 3110 N -50 0 0 34 50 0 h +.6692 g 2716 3144 N -50 0 0 33 50 0 h +.6744 g 2716 3177 N -50 0 0 34 50 0 h +.6795 g 2716 3211 N -50 0 0 34 50 0 h +.6846 g 2716 3245 N -50 0 0 33 50 0 h +.6897 g 2716 3278 N -50 0 0 34 50 0 h +.6949 g 2716 3312 N -50 0 0 33 50 0 h +.7 g 2716 3345 N -50 0 0 34 50 0 h +.7051 g 2716 3379 N -50 0 0 33 50 0 h +.7102 g 2716 3412 N -50 0 0 34 50 0 h +.7154 g 2716 3446 N -50 0 0 34 50 0 h +.7205 g 2716 3480 N -50 0 0 33 50 0 h +.7256 g 2716 3513 N -50 0 0 34 50 0 h +.7308 g 2716 3547 N -50 0 0 33 50 0 h +.7359 g 2716 3580 N -50 0 0 34 50 0 h +.741 g 2716 3614 N -50 0 0 34 50 0 h +.7461 g 2716 3648 N -50 0 0 33 50 0 h +.7513 g 2716 3681 N -50 0 0 34 50 0 h +.7564 g 2716 3715 N -50 0 0 33 50 0 h +.7615 g 2716 3748 N -50 0 0 34 50 0 h +.7666 g 2716 3782 N -50 0 0 34 50 0 h +.7718 g 2716 3816 N -50 0 0 33 50 0 h +.7769 g 2716 3849 N -50 0 0 34 50 0 h +.782 g 2716 3883 N -50 0 0 33 50 0 h +.7872 g 2716 3916 N -50 0 0 34 50 0 h +.7923 g 2716 3950 N -50 0 0 33 50 0 h +.7974 g 2716 3983 N -50 0 0 34 50 0 h +.8025 g 2716 4017 N -50 0 0 34 50 0 h +.8077 g 2716 4051 N -50 0 0 33 50 0 h +.8128 g 2716 4084 N -50 0 0 34 50 0 h +.8179 g 2716 4118 N -50 0 0 33 50 0 h +.823 g 2716 4151 N -50 0 0 34 50 0 h +.8282 g 2716 4185 N -50 0 0 34 50 0 h +.8333 g 2716 4219 N -50 0 0 33 50 0 h +.3409 g 2766 928 N -51 0 0 33 51 0 h +.3458 g 2766 961 N -51 0 0 34 51 0 h +.3508 g 2766 995 N -51 0 0 34 51 0 h +.3558 g 2766 1029 N -51 0 0 33 51 0 h +.3608 g 2766 1062 N -51 0 0 34 51 0 h +.3657 g 2766 1096 N -51 0 0 33 51 0 h +.3707 g 2766 1129 N -51 0 0 34 51 0 h +.3757 g 2766 1163 N -51 0 0 34 51 0 h +.3807 g 2766 1197 N -51 0 0 33 51 0 h +.3856 g 2766 1230 N -51 0 0 34 51 0 h +.3906 g 2766 1264 N -51 0 0 33 51 0 h +.3956 g 2766 1297 N -51 0 0 34 51 0 h +.4006 g 2766 1331 N -51 0 0 33 51 0 h +.4055 g 2766 1364 N -51 0 0 34 51 0 h +.4105 g 2766 1398 N -51 0 0 34 51 0 h +.4155 g 2766 1432 N -51 0 0 33 51 0 h +.4205 g 2766 1465 N -51 0 0 34 51 0 h +.4254 g 2766 1499 N -51 0 0 33 51 0 h +.4304 g 2766 1532 N -51 0 0 34 51 0 h +.4354 g 2766 1566 N -51 0 0 34 51 0 h +.4404 g 2766 1600 N -51 0 0 33 51 0 h +.4453 g 2766 1633 N -51 0 0 34 51 0 h +.4503 g 2766 1667 N -51 0 0 33 51 0 h +.4553 g 2766 1700 N -51 0 0 34 51 0 h +.4602 g 2766 1734 N -51 0 0 34 51 0 h +.4652 g 2766 1768 N -51 0 0 33 51 0 h +.4702 g 2766 1801 N -51 0 0 34 51 0 h +.4752 g 2766 1835 N -51 0 0 33 51 0 h +.4801 g 2766 1868 N -51 0 0 34 51 0 h +.4851 g 2766 1902 N -51 0 0 33 51 0 h +.4901 g 2766 1935 N -51 0 0 34 51 0 h +.4951 g 2766 1969 N -51 0 0 34 51 0 h +.5 g 2766 2003 N -51 0 0 33 51 0 h +.505 g 2766 2036 N -51 0 0 34 51 0 h +.51 g 2766 2070 N -51 0 0 33 51 0 h +.515 g 2766 2103 N -51 0 0 34 51 0 h +.5199 g 2766 2137 N -51 0 0 34 51 0 h +.5249 g 2766 2171 N -51 0 0 33 51 0 h +.5299 g 2766 2204 N -51 0 0 34 51 0 h +.5349 g 2766 2238 N -51 0 0 33 51 0 h +.5398 g 2766 2271 N -51 0 0 34 51 0 h +.5448 g 2766 2305 N -51 0 0 34 51 0 h +.5498 g 2766 2339 N -51 0 0 33 51 0 h +.5548 g 2766 2372 N -51 0 0 34 51 0 h +.5597 g 2766 2406 N -51 0 0 33 51 0 h +.5647 g 2766 2439 N -51 0 0 34 51 0 h +.5697 g 2766 2473 N -51 0 0 34 51 0 h +.5746 g 2766 2507 N -51 0 0 33 51 0 h +.5796 g 2766 2540 N -51 0 0 34 51 0 h +.5846 g 2766 2574 N -51 0 0 32 51 0 h +.5896 g 2766 2606 N -51 0 0 34 51 0 h +.5945 g 2766 2640 N -51 0 0 33 51 0 h +.5995 g 2766 2673 N -51 0 0 34 51 0 h +.6045 g 2766 2707 N -51 0 0 34 51 0 h +.6095 g 2766 2741 N -51 0 0 33 51 0 h +.6144 g 2766 2774 N -51 0 0 34 51 0 h +.6194 g 2766 2808 N -51 0 0 33 51 0 h +.6244 g 2766 2841 N -51 0 0 34 51 0 h +.6294 g 2766 2875 N -51 0 0 34 51 0 h +.6343 g 2766 2909 N -51 0 0 33 51 0 h +.6393 g 2766 2942 N -51 0 0 34 51 0 h +.6443 g 2766 2976 N -51 0 0 33 51 0 h +.6493 g 2766 3009 N -51 0 0 34 51 0 h +.6542 g 2766 3043 N -51 0 0 34 51 0 h +.6592 g 2766 3077 N -51 0 0 33 51 0 h +.6642 g 2766 3110 N -51 0 0 34 51 0 h +.6692 g 2766 3144 N -51 0 0 33 51 0 h +.6741 g 2766 3177 N -51 0 0 34 51 0 h +.6791 g 2766 3211 N -51 0 0 34 51 0 h +.6841 g 2766 3245 N -51 0 0 33 51 0 h +.689 g 2766 3278 N -51 0 0 34 51 0 h +.694 g 2766 3312 N -51 0 0 33 51 0 h +.699 g 2766 3345 N -51 0 0 34 51 0 h +.704 g 2766 3379 N -51 0 0 33 51 0 h +.7089 g 2766 3412 N -51 0 0 34 51 0 h +.7139 g 2766 3446 N -51 0 0 34 51 0 h +.7189 g 2766 3480 N -51 0 0 33 51 0 h +.7239 g 2766 3513 N -51 0 0 34 51 0 h +.7288 g 2766 3547 N -51 0 0 33 51 0 h +.7338 g 2766 3580 N -51 0 0 34 51 0 h +.7388 g 2766 3614 N -51 0 0 34 51 0 h +.7438 g 2766 3648 N -51 0 0 33 51 0 h +.7487 g 2766 3681 N -51 0 0 34 51 0 h +.7537 g 2766 3715 N -51 0 0 33 51 0 h +.7587 g 2766 3748 N -51 0 0 34 51 0 h +.7637 g 2766 3782 N -51 0 0 34 51 0 h +.7686 g 2766 3816 N -51 0 0 33 51 0 h +.7736 g 2766 3849 N -51 0 0 34 51 0 h +.7786 g 2766 3883 N -51 0 0 33 51 0 h +.7836 g 2766 3916 N -51 0 0 34 51 0 h +.7885 g 2766 3950 N -51 0 0 33 51 0 h +.7935 g 2766 3983 N -51 0 0 34 51 0 h +.7985 g 2766 4017 N -51 0 0 34 51 0 h +.8035 g 2766 4051 N -51 0 0 33 51 0 h +.8084 g 2766 4084 N -51 0 0 34 51 0 h +.8134 g 2766 4118 N -51 0 0 33 51 0 h +.8184 g 2766 4151 N -51 0 0 34 51 0 h +.8233 g 2766 4185 N -51 0 0 34 51 0 h +.8283 g 2766 4219 N -51 0 0 33 51 0 h +.3509 g 2817 928 N -50 0 0 33 50 0 h +.3557 g 2817 961 N -50 0 0 34 50 0 h +.3605 g 2817 995 N -50 0 0 34 50 0 h +.3654 g 2817 1029 N -50 0 0 33 50 0 h +.3702 g 2817 1062 N -50 0 0 34 50 0 h +.375 g 2817 1096 N -50 0 0 33 50 0 h +.3798 g 2817 1129 N -50 0 0 34 50 0 h +.3846 g 2817 1163 N -50 0 0 34 50 0 h +.3895 g 2817 1197 N -50 0 0 33 50 0 h +.3943 g 2817 1230 N -50 0 0 34 50 0 h +.3991 g 2817 1264 N -50 0 0 33 50 0 h +.4039 g 2817 1297 N -50 0 0 34 50 0 h +.4087 g 2817 1331 N -50 0 0 33 50 0 h +.4136 g 2817 1364 N -50 0 0 34 50 0 h +.4184 g 2817 1398 N -50 0 0 34 50 0 h +.4232 g 2817 1432 N -50 0 0 33 50 0 h +.428 g 2817 1465 N -50 0 0 34 50 0 h +.4329 g 2817 1499 N -50 0 0 33 50 0 h +.4377 g 2817 1532 N -50 0 0 34 50 0 h +.4425 g 2817 1566 N -50 0 0 34 50 0 h +.4473 g 2817 1600 N -50 0 0 33 50 0 h +.4521 g 2817 1633 N -50 0 0 34 50 0 h +.457 g 2817 1667 N -50 0 0 33 50 0 h +.4618 g 2817 1700 N -50 0 0 34 50 0 h +.4666 g 2817 1734 N -50 0 0 34 50 0 h +.4714 g 2817 1768 N -50 0 0 33 50 0 h +.4762 g 2817 1801 N -50 0 0 34 50 0 h +.4811 g 2817 1835 N -50 0 0 33 50 0 h +.4859 g 2817 1868 N -50 0 0 34 50 0 h +.4907 g 2817 1902 N -50 0 0 33 50 0 h +.4955 g 2817 1935 N -50 0 0 34 50 0 h +.5003 g 2817 1969 N -50 0 0 34 50 0 h +.5052 g 2817 2003 N -50 0 0 33 50 0 h +.51 g 2817 2036 N -50 0 0 34 50 0 h +.5148 g 2817 2070 N -50 0 0 33 50 0 h +.5196 g 2817 2103 N -50 0 0 34 50 0 h +.5244 g 2817 2137 N -50 0 0 34 50 0 h +.5293 g 2817 2171 N -50 0 0 33 50 0 h +.5341 g 2817 2204 N -50 0 0 34 50 0 h +.5389 g 2817 2238 N -50 0 0 33 50 0 h +.5437 g 2817 2271 N -50 0 0 34 50 0 h +.5486 g 2817 2305 N -50 0 0 34 50 0 h +.5534 g 2817 2339 N -50 0 0 33 50 0 h +.5582 g 2817 2372 N -50 0 0 34 50 0 h +.563 g 2817 2406 N -50 0 0 33 50 0 h +.5678 g 2817 2439 N -50 0 0 34 50 0 h +.5727 g 2817 2473 N -50 0 0 34 50 0 h +.5775 g 2817 2507 N -50 0 0 33 50 0 h +.5823 g 2817 2540 N -50 0 0 34 50 0 h +.5871 g 2817 2574 N -50 0 0 32 50 0 h +.5919 g 2817 2606 N -50 0 0 34 50 0 h +.5968 g 2817 2640 N -50 0 0 33 50 0 h +.6016 g 2817 2673 N -50 0 0 34 50 0 h +.6064 g 2817 2707 N -50 0 0 34 50 0 h +.6112 g 2817 2741 N -50 0 0 33 50 0 h +.616 g 2817 2774 N -50 0 0 34 50 0 h +.6209 g 2817 2808 N -50 0 0 33 50 0 h +.6257 g 2817 2841 N -50 0 0 34 50 0 h +.6305 g 2817 2875 N -50 0 0 34 50 0 h +.6353 g 2817 2909 N -50 0 0 33 50 0 h +.6402 g 2817 2942 N -50 0 0 34 50 0 h +.645 g 2817 2976 N -50 0 0 33 50 0 h +.6498 g 2817 3009 N -50 0 0 34 50 0 h +.6546 g 2817 3043 N -50 0 0 34 50 0 h +.6594 g 2817 3077 N -50 0 0 33 50 0 h +.6643 g 2817 3110 N -50 0 0 34 50 0 h +.6691 g 2817 3144 N -50 0 0 33 50 0 h +.6739 g 2817 3177 N -50 0 0 34 50 0 h +.6787 g 2817 3211 N -50 0 0 34 50 0 h +.6835 g 2817 3245 N -50 0 0 33 50 0 h +.6884 g 2817 3278 N -50 0 0 34 50 0 h +.6932 g 2817 3312 N -50 0 0 33 50 0 h +.698 g 2817 3345 N -50 0 0 34 50 0 h +.7028 g 2817 3379 N -50 0 0 33 50 0 h +.7076 g 2817 3412 N -50 0 0 34 50 0 h +.7125 g 2817 3446 N -50 0 0 34 50 0 h +.7173 g 2817 3480 N -50 0 0 33 50 0 h +.7221 g 2817 3513 N -50 0 0 34 50 0 h +.7269 g 2817 3547 N -50 0 0 33 50 0 h +.7317 g 2817 3580 N -50 0 0 34 50 0 h +.7366 g 2817 3614 N -50 0 0 34 50 0 h +.7414 g 2817 3648 N -50 0 0 33 50 0 h +.7462 g 2817 3681 N -50 0 0 34 50 0 h +.751 g 2817 3715 N -50 0 0 33 50 0 h +.7559 g 2817 3748 N -50 0 0 34 50 0 h +.7607 g 2817 3782 N -50 0 0 34 50 0 h +.7655 g 2817 3816 N -50 0 0 33 50 0 h +.7703 g 2817 3849 N -50 0 0 34 50 0 h +.7751 g 2817 3883 N -50 0 0 33 50 0 h +.78 g 2817 3916 N -50 0 0 34 50 0 h +.7848 g 2817 3950 N -50 0 0 33 50 0 h +.7896 g 2817 3983 N -50 0 0 34 50 0 h +.7944 g 2817 4017 N -50 0 0 34 50 0 h +.7992 g 2817 4051 N -50 0 0 33 50 0 h +.8041 g 2817 4084 N -50 0 0 34 50 0 h +.8089 g 2817 4118 N -50 0 0 33 50 0 h +.8137 g 2817 4151 N -50 0 0 34 50 0 h +.8185 g 2817 4185 N -50 0 0 34 50 0 h +.8233 g 2817 4219 N -50 0 0 33 50 0 h +.3609 g 2867 928 N -51 0 0 33 51 0 h +.3656 g 2867 961 N -51 0 0 34 51 0 h +.3703 g 2867 995 N -51 0 0 34 51 0 h +.3749 g 2867 1029 N -51 0 0 33 51 0 h +.3796 g 2867 1062 N -51 0 0 34 51 0 h +.3843 g 2867 1096 N -51 0 0 33 51 0 h +.3889 g 2867 1129 N -51 0 0 34 51 0 h +.3936 g 2867 1163 N -51 0 0 34 51 0 h +.3983 g 2867 1197 N -51 0 0 33 51 0 h +.4029 g 2867 1230 N -51 0 0 34 51 0 h +.4076 g 2867 1264 N -51 0 0 33 51 0 h +.4123 g 2867 1297 N -51 0 0 34 51 0 h +.4169 g 2867 1331 N -51 0 0 33 51 0 h +.4216 g 2867 1364 N -51 0 0 34 51 0 h +.4263 g 2867 1398 N -51 0 0 34 51 0 h +.4309 g 2867 1432 N -51 0 0 33 51 0 h +.4356 g 2867 1465 N -51 0 0 34 51 0 h +.4403 g 2867 1499 N -51 0 0 33 51 0 h +.4449 g 2867 1532 N -51 0 0 34 51 0 h +.4496 g 2867 1566 N -51 0 0 34 51 0 h +.4543 g 2867 1600 N -51 0 0 33 51 0 h +.4589 g 2867 1633 N -51 0 0 34 51 0 h +.4636 g 2867 1667 N -51 0 0 33 51 0 h +.4683 g 2867 1700 N -51 0 0 34 51 0 h +.4729 g 2867 1734 N -51 0 0 34 51 0 h +.4776 g 2867 1768 N -51 0 0 33 51 0 h +.4823 g 2867 1801 N -51 0 0 34 51 0 h +.487 g 2867 1835 N -51 0 0 33 51 0 h +.4916 g 2867 1868 N -51 0 0 34 51 0 h +.4963 g 2867 1902 N -51 0 0 33 51 0 h +.501 g 2867 1935 N -51 0 0 34 51 0 h +.5056 g 2867 1969 N -51 0 0 34 51 0 h +.5103 g 2867 2003 N -51 0 0 33 51 0 h +.515 g 2867 2036 N -51 0 0 34 51 0 h +.5196 g 2867 2070 N -51 0 0 33 51 0 h +.5243 g 2867 2103 N -51 0 0 34 51 0 h +.529 g 2867 2137 N -51 0 0 34 51 0 h +.5336 g 2867 2171 N -51 0 0 33 51 0 h +.5383 g 2867 2204 N -51 0 0 34 51 0 h +.543 g 2867 2238 N -51 0 0 33 51 0 h +.5476 g 2867 2271 N -51 0 0 34 51 0 h +.5523 g 2867 2305 N -51 0 0 34 51 0 h +.557 g 2867 2339 N -51 0 0 33 51 0 h +.5616 g 2867 2372 N -51 0 0 34 51 0 h +.5663 g 2867 2406 N -51 0 0 33 51 0 h +.571 g 2867 2439 N -51 0 0 34 51 0 h +.5756 g 2867 2473 N -51 0 0 34 51 0 h +.5803 g 2867 2507 N -51 0 0 33 51 0 h +.585 g 2867 2540 N -51 0 0 34 51 0 h +.5896 g 2867 2574 N -51 0 0 32 51 0 h +.5943 g 2867 2606 N -51 0 0 34 51 0 h +.599 g 2867 2640 N -51 0 0 33 51 0 h +.6037 g 2867 2673 N -51 0 0 34 51 0 h +.6083 g 2867 2707 N -51 0 0 34 51 0 h +.613 g 2867 2741 N -51 0 0 33 51 0 h +.6177 g 2867 2774 N -51 0 0 34 51 0 h +.6223 g 2867 2808 N -51 0 0 33 51 0 h +.627 g 2867 2841 N -51 0 0 34 51 0 h +.6317 g 2867 2875 N -51 0 0 34 51 0 h +.6363 g 2867 2909 N -51 0 0 33 51 0 h +.641 g 2867 2942 N -51 0 0 34 51 0 h +.6457 g 2867 2976 N -51 0 0 33 51 0 h +.6503 g 2867 3009 N -51 0 0 34 51 0 h +.655 g 2867 3043 N -51 0 0 34 51 0 h +.6597 g 2867 3077 N -51 0 0 33 51 0 h +.6643 g 2867 3110 N -51 0 0 34 51 0 h +.669 g 2867 3144 N -51 0 0 33 51 0 h +.6737 g 2867 3177 N -51 0 0 34 51 0 h +.6783 g 2867 3211 N -51 0 0 34 51 0 h +.683 g 2867 3245 N -51 0 0 33 51 0 h +.6877 g 2867 3278 N -51 0 0 34 51 0 h +.6923 g 2867 3312 N -51 0 0 33 51 0 h +.697 g 2867 3345 N -51 0 0 34 51 0 h +.7017 g 2867 3379 N -51 0 0 33 51 0 h +.7063 g 2867 3412 N -51 0 0 34 51 0 h +.711 g 2867 3446 N -51 0 0 34 51 0 h +.7157 g 2867 3480 N -51 0 0 33 51 0 h +.7203 g 2867 3513 N -51 0 0 34 51 0 h +.725 g 2867 3547 N -51 0 0 33 51 0 h +.7297 g 2867 3580 N -51 0 0 34 51 0 h +.7344 g 2867 3614 N -51 0 0 34 51 0 h +.739 g 2867 3648 N -51 0 0 33 51 0 h +.7437 g 2867 3681 N -51 0 0 34 51 0 h +.7484 g 2867 3715 N -51 0 0 33 51 0 h +.753 g 2867 3748 N -51 0 0 34 51 0 h +.7577 g 2867 3782 N -51 0 0 34 51 0 h +.7624 g 2867 3816 N -51 0 0 33 51 0 h +.767 g 2867 3849 N -51 0 0 34 51 0 h +.7717 g 2867 3883 N -51 0 0 33 51 0 h +.7764 g 2867 3916 N -51 0 0 34 51 0 h +.781 g 2867 3950 N -51 0 0 33 51 0 h +.7857 g 2867 3983 N -51 0 0 34 51 0 h +.7904 g 2867 4017 N -51 0 0 34 51 0 h +.795 g 2867 4051 N -51 0 0 33 51 0 h +.7997 g 2867 4084 N -51 0 0 34 51 0 h +.8044 g 2867 4118 N -51 0 0 33 51 0 h +.809 g 2867 4151 N -51 0 0 34 51 0 h +.8137 g 2867 4185 N -51 0 0 34 51 0 h +.8184 g 2867 4219 N -51 0 0 33 51 0 h +.3709 g 2918 928 N -51 0 0 33 51 0 h +.3755 g 2918 961 N -51 0 0 34 51 0 h +.38 g 2918 995 N -51 0 0 34 51 0 h +.3845 g 2918 1029 N -51 0 0 33 51 0 h +.389 g 2918 1062 N -51 0 0 34 51 0 h +.3935 g 2918 1096 N -51 0 0 33 51 0 h +.398 g 2918 1129 N -51 0 0 34 51 0 h +.4025 g 2918 1163 N -51 0 0 34 51 0 h +.4071 g 2918 1197 N -51 0 0 33 51 0 h +.4116 g 2918 1230 N -51 0 0 34 51 0 h +.4161 g 2918 1264 N -51 0 0 33 51 0 h +.4206 g 2918 1297 N -51 0 0 34 51 0 h +.4251 g 2918 1331 N -51 0 0 33 51 0 h +.4296 g 2918 1364 N -51 0 0 34 51 0 h +.4342 g 2918 1398 N -51 0 0 34 51 0 h +.4387 g 2918 1432 N -51 0 0 33 51 0 h +.4432 g 2918 1465 N -51 0 0 34 51 0 h +.4477 g 2918 1499 N -51 0 0 33 51 0 h +.4522 g 2918 1532 N -51 0 0 34 51 0 h +.4567 g 2918 1566 N -51 0 0 34 51 0 h +.4612 g 2918 1600 N -51 0 0 33 51 0 h +.4658 g 2918 1633 N -51 0 0 34 51 0 h +.4703 g 2918 1667 N -51 0 0 33 51 0 h +.4748 g 2918 1700 N -51 0 0 34 51 0 h +.4793 g 2918 1734 N -51 0 0 34 51 0 h +.4838 g 2918 1768 N -51 0 0 33 51 0 h +.4883 g 2918 1801 N -51 0 0 34 51 0 h +.4928 g 2918 1835 N -51 0 0 33 51 0 h +.4974 g 2918 1868 N -51 0 0 34 51 0 h +.5019 g 2918 1902 N -51 0 0 33 51 0 h +.5064 g 2918 1935 N -51 0 0 34 51 0 h +.5109 g 2918 1969 N -51 0 0 34 51 0 h +.5154 g 2918 2003 N -51 0 0 33 51 0 h +.5199 g 2918 2036 N -51 0 0 34 51 0 h +.5244 g 2918 2070 N -51 0 0 33 51 0 h +.529 g 2918 2103 N -51 0 0 34 51 0 h +.5335 g 2918 2137 N -51 0 0 34 51 0 h +.538 g 2918 2171 N -51 0 0 33 51 0 h +.5425 g 2918 2204 N -51 0 0 34 51 0 h +.547 g 2918 2238 N -51 0 0 33 51 0 h +.5515 g 2918 2271 N -51 0 0 34 51 0 h +.5561 g 2918 2305 N -51 0 0 34 51 0 h +.5606 g 2918 2339 N -51 0 0 33 51 0 h +.5651 g 2918 2372 N -51 0 0 34 51 0 h +.5696 g 2918 2406 N -51 0 0 33 51 0 h +.5741 g 2918 2439 N -51 0 0 34 51 0 h +.5786 g 2918 2473 N -51 0 0 34 51 0 h +.5831 g 2918 2507 N -51 0 0 33 51 0 h +.5877 g 2918 2540 N -51 0 0 34 51 0 h +.5922 g 2918 2574 N -51 0 0 32 51 0 h +.5967 g 2918 2606 N -51 0 0 34 51 0 h +.6012 g 2918 2640 N -51 0 0 33 51 0 h +.6057 g 2918 2673 N -51 0 0 34 51 0 h +.6102 g 2918 2707 N -51 0 0 34 51 0 h +.6147 g 2918 2741 N -51 0 0 33 51 0 h +.6193 g 2918 2774 N -51 0 0 34 51 0 h +.6238 g 2918 2808 N -51 0 0 33 51 0 h +.6283 g 2918 2841 N -51 0 0 34 51 0 h +.6328 g 2918 2875 N -51 0 0 34 51 0 h +.6373 g 2918 2909 N -51 0 0 33 51 0 h +.6418 g 2918 2942 N -51 0 0 34 51 0 h +.6463 g 2918 2976 N -51 0 0 33 51 0 h +.6509 g 2918 3009 N -51 0 0 34 51 0 h +.6554 g 2918 3043 N -51 0 0 34 51 0 h +.6599 g 2918 3077 N -51 0 0 33 51 0 h +.6644 g 2918 3110 N -51 0 0 34 51 0 h +.6689 g 2918 3144 N -51 0 0 33 51 0 h +.6734 g 2918 3177 N -51 0 0 34 51 0 h +.678 g 2918 3211 N -51 0 0 34 51 0 h +.6825 g 2918 3245 N -51 0 0 33 51 0 h +.687 g 2918 3278 N -51 0 0 34 51 0 h +.6915 g 2918 3312 N -51 0 0 33 51 0 h +.696 g 2918 3345 N -51 0 0 34 51 0 h +.7005 g 2918 3379 N -51 0 0 33 51 0 h +.705 g 2918 3412 N -51 0 0 34 51 0 h +.7096 g 2918 3446 N -51 0 0 34 51 0 h +.7141 g 2918 3480 N -51 0 0 33 51 0 h +.7186 g 2918 3513 N -51 0 0 34 51 0 h +.7231 g 2918 3547 N -51 0 0 33 51 0 h +.7276 g 2918 3580 N -51 0 0 34 51 0 h +.7321 g 2918 3614 N -51 0 0 34 51 0 h +.7366 g 2918 3648 N -51 0 0 33 51 0 h +.7412 g 2918 3681 N -51 0 0 34 51 0 h +.7457 g 2918 3715 N -51 0 0 33 51 0 h +.7502 g 2918 3748 N -51 0 0 34 51 0 h +.7547 g 2918 3782 N -51 0 0 34 51 0 h +.7592 g 2918 3816 N -51 0 0 33 51 0 h +.7637 g 2918 3849 N -51 0 0 34 51 0 h +.7683 g 2918 3883 N -51 0 0 33 51 0 h +.7728 g 2918 3916 N -51 0 0 34 51 0 h +.7773 g 2918 3950 N -51 0 0 33 51 0 h +.7818 g 2918 3983 N -51 0 0 34 51 0 h +.7863 g 2918 4017 N -51 0 0 34 51 0 h +.7908 g 2918 4051 N -51 0 0 33 51 0 h +.7953 g 2918 4084 N -51 0 0 34 51 0 h +.7999 g 2918 4118 N -51 0 0 33 51 0 h +.8044 g 2918 4151 N -51 0 0 34 51 0 h +.8089 g 2918 4185 N -51 0 0 34 51 0 h +.8134 g 2918 4219 N -51 0 0 33 51 0 h +.381 g 2969 928 N -50 0 0 33 50 0 h +.3853 g 2969 961 N -50 0 0 34 50 0 h +.3897 g 2969 995 N -50 0 0 34 50 0 h +.3941 g 2969 1029 N -50 0 0 33 50 0 h +.3984 g 2969 1062 N -50 0 0 34 50 0 h +.4028 g 2969 1096 N -50 0 0 33 50 0 h +.4071 g 2969 1129 N -50 0 0 34 50 0 h +.4115 g 2969 1163 N -50 0 0 34 50 0 h +.4159 g 2969 1197 N -50 0 0 33 50 0 h +.4202 g 2969 1230 N -50 0 0 34 50 0 h +.4246 g 2969 1264 N -50 0 0 33 50 0 h +.4289 g 2969 1297 N -50 0 0 34 50 0 h +.4333 g 2969 1331 N -50 0 0 33 50 0 h +.4377 g 2969 1364 N -50 0 0 34 50 0 h +.442 g 2969 1398 N -50 0 0 34 50 0 h +.4464 g 2969 1432 N -50 0 0 33 50 0 h +.4508 g 2969 1465 N -50 0 0 34 50 0 h +.4551 g 2969 1499 N -50 0 0 33 50 0 h +.4595 g 2969 1532 N -50 0 0 34 50 0 h +.4638 g 2969 1566 N -50 0 0 34 50 0 h +.4682 g 2969 1600 N -50 0 0 33 50 0 h +.4726 g 2969 1633 N -50 0 0 34 50 0 h +.4769 g 2969 1667 N -50 0 0 33 50 0 h +.4813 g 2969 1700 N -50 0 0 34 50 0 h +.4857 g 2969 1734 N -50 0 0 34 50 0 h +.49 g 2969 1768 N -50 0 0 33 50 0 h +.4944 g 2969 1801 N -50 0 0 34 50 0 h +.4987 g 2969 1835 N -50 0 0 33 50 0 h +.5031 g 2969 1868 N -50 0 0 34 50 0 h +.5075 g 2969 1902 N -50 0 0 33 50 0 h +.5118 g 2969 1935 N -50 0 0 34 50 0 h +.5162 g 2969 1969 N -50 0 0 34 50 0 h +.5205 g 2969 2003 N -50 0 0 33 50 0 h +.5249 g 2969 2036 N -50 0 0 34 50 0 h +.5293 g 2969 2070 N -50 0 0 33 50 0 h +.5336 g 2969 2103 N -50 0 0 34 50 0 h +.538 g 2969 2137 N -50 0 0 34 50 0 h +.5424 g 2969 2171 N -50 0 0 33 50 0 h +.5467 g 2969 2204 N -50 0 0 34 50 0 h +.5511 g 2969 2238 N -50 0 0 33 50 0 h +.5554 g 2969 2271 N -50 0 0 34 50 0 h +.5598 g 2969 2305 N -50 0 0 34 50 0 h +.5642 g 2969 2339 N -50 0 0 33 50 0 h +.5685 g 2969 2372 N -50 0 0 34 50 0 h +.5729 g 2969 2406 N -50 0 0 33 50 0 h +.5772 g 2969 2439 N -50 0 0 34 50 0 h +.5816 g 2969 2473 N -50 0 0 34 50 0 h +.586 g 2969 2507 N -50 0 0 33 50 0 h +.5903 g 2969 2540 N -50 0 0 34 50 0 h +.5947 g 2969 2574 N -50 0 0 32 50 0 h +.5991 g 2969 2606 N -50 0 0 34 50 0 h +.6034 g 2969 2640 N -50 0 0 33 50 0 h +.6078 g 2969 2673 N -50 0 0 34 50 0 h +.6121 g 2969 2707 N -50 0 0 34 50 0 h +.6165 g 2969 2741 N -50 0 0 33 50 0 h +.6209 g 2969 2774 N -50 0 0 34 50 0 h +.6252 g 2969 2808 N -50 0 0 33 50 0 h +.6296 g 2969 2841 N -50 0 0 34 50 0 h +.634 g 2969 2875 N -50 0 0 34 50 0 h +.6383 g 2969 2909 N -50 0 0 33 50 0 h +.6427 g 2969 2942 N -50 0 0 34 50 0 h +.647 g 2969 2976 N -50 0 0 33 50 0 h +.6514 g 2969 3009 N -50 0 0 34 50 0 h +.6558 g 2969 3043 N -50 0 0 34 50 0 h +.6601 g 2969 3077 N -50 0 0 33 50 0 h +.6645 g 2969 3110 N -50 0 0 34 50 0 h +.6688 g 2969 3144 N -50 0 0 33 50 0 h +.6732 g 2969 3177 N -50 0 0 34 50 0 h +.6776 g 2969 3211 N -50 0 0 34 50 0 h +.6819 g 2969 3245 N -50 0 0 33 50 0 h +.6863 g 2969 3278 N -50 0 0 34 50 0 h +.6907 g 2969 3312 N -50 0 0 33 50 0 h +.695 g 2969 3345 N -50 0 0 34 50 0 h +.6994 g 2969 3379 N -50 0 0 33 50 0 h +.7037 g 2969 3412 N -50 0 0 34 50 0 h +.7081 g 2969 3446 N -50 0 0 34 50 0 h +.7125 g 2969 3480 N -50 0 0 33 50 0 h +.7168 g 2969 3513 N -50 0 0 34 50 0 h +.7212 g 2969 3547 N -50 0 0 33 50 0 h +.7256 g 2969 3580 N -50 0 0 34 50 0 h +.7299 g 2969 3614 N -50 0 0 34 50 0 h +.7343 g 2969 3648 N -50 0 0 33 50 0 h +.7386 g 2969 3681 N -50 0 0 34 50 0 h +.743 g 2969 3715 N -50 0 0 33 50 0 h +.7474 g 2969 3748 N -50 0 0 34 50 0 h +.7517 g 2969 3782 N -50 0 0 34 50 0 h +.7561 g 2969 3816 N -50 0 0 33 50 0 h +.7604 g 2969 3849 N -50 0 0 34 50 0 h +.7648 g 2969 3883 N -50 0 0 33 50 0 h +.7692 g 2969 3916 N -50 0 0 34 50 0 h +.7735 g 2969 3950 N -50 0 0 33 50 0 h +.7779 g 2969 3983 N -50 0 0 34 50 0 h +.7823 g 2969 4017 N -50 0 0 34 50 0 h +.7866 g 2969 4051 N -50 0 0 33 50 0 h +.791 g 2969 4084 N -50 0 0 34 50 0 h +.7953 g 2969 4118 N -50 0 0 33 50 0 h +.7997 g 2969 4151 N -50 0 0 34 50 0 h +.8041 g 2969 4185 N -50 0 0 34 50 0 h +.8084 g 2969 4219 N -50 0 0 33 50 0 h +.391 g 3019 928 N -51 0 0 33 51 0 h +.3952 g 3019 961 N -51 0 0 34 51 0 h +.3994 g 3019 995 N -51 0 0 34 51 0 h +.4036 g 3019 1029 N -51 0 0 33 51 0 h +.4078 g 3019 1062 N -51 0 0 34 51 0 h +.412 g 3019 1096 N -51 0 0 33 51 0 h +.4162 g 3019 1129 N -51 0 0 34 51 0 h +.4205 g 3019 1163 N -51 0 0 34 51 0 h +.4247 g 3019 1197 N -51 0 0 33 51 0 h +.4289 g 3019 1230 N -51 0 0 34 51 0 h +.4331 g 3019 1264 N -51 0 0 33 51 0 h +.4373 g 3019 1297 N -51 0 0 34 51 0 h +.4415 g 3019 1331 N -51 0 0 33 51 0 h +.4457 g 3019 1364 N -51 0 0 34 51 0 h +.4499 g 3019 1398 N -51 0 0 34 51 0 h +.4541 g 3019 1432 N -51 0 0 33 51 0 h +.4583 g 3019 1465 N -51 0 0 34 51 0 h +.4625 g 3019 1499 N -51 0 0 33 51 0 h +.4668 g 3019 1532 N -51 0 0 34 51 0 h +.471 g 3019 1566 N -51 0 0 34 51 0 h +.4752 g 3019 1600 N -51 0 0 33 51 0 h +.4794 g 3019 1633 N -51 0 0 34 51 0 h +.4836 g 3019 1667 N -51 0 0 33 51 0 h +.4878 g 3019 1700 N -51 0 0 34 51 0 h +.492 g 3019 1734 N -51 0 0 34 51 0 h +.4962 g 3019 1768 N -51 0 0 33 51 0 h +.5004 g 3019 1801 N -51 0 0 34 51 0 h +.5046 g 3019 1835 N -51 0 0 33 51 0 h +.5088 g 3019 1868 N -51 0 0 34 51 0 h +.513 g 3019 1902 N -51 0 0 33 51 0 h +.5173 g 3019 1935 N -51 0 0 34 51 0 h +.5215 g 3019 1969 N -51 0 0 34 51 0 h +.5257 g 3019 2003 N -51 0 0 33 51 0 h +.5299 g 3019 2036 N -51 0 0 34 51 0 h +.5341 g 3019 2070 N -51 0 0 33 51 0 h +.5383 g 3019 2103 N -51 0 0 34 51 0 h +.5425 g 3019 2137 N -51 0 0 34 51 0 h +.5467 g 3019 2171 N -51 0 0 33 51 0 h +.5509 g 3019 2204 N -51 0 0 34 51 0 h +.5551 g 3019 2238 N -51 0 0 33 51 0 h +.5593 g 3019 2271 N -51 0 0 34 51 0 h +.5636 g 3019 2305 N -51 0 0 34 51 0 h +.5678 g 3019 2339 N -51 0 0 33 51 0 h +.572 g 3019 2372 N -51 0 0 34 51 0 h +.5762 g 3019 2406 N -51 0 0 33 51 0 h +.5804 g 3019 2439 N -51 0 0 34 51 0 h +.5846 g 3019 2473 N -51 0 0 34 51 0 h +.5888 g 3019 2507 N -51 0 0 33 51 0 h +.593 g 3019 2540 N -51 0 0 34 51 0 h +.5972 g 3019 2574 N -51 0 0 32 51 0 h +.6014 g 3019 2606 N -51 0 0 34 51 0 h +.6056 g 3019 2640 N -51 0 0 33 51 0 h +.6098 g 3019 2673 N -51 0 0 34 51 0 h +.6141 g 3019 2707 N -51 0 0 34 51 0 h +.6183 g 3019 2741 N -51 0 0 33 51 0 h +.6225 g 3019 2774 N -51 0 0 34 51 0 h +.6267 g 3019 2808 N -51 0 0 33 51 0 h +.6309 g 3019 2841 N -51 0 0 34 51 0 h +.6351 g 3019 2875 N -51 0 0 34 51 0 h +.6393 g 3019 2909 N -51 0 0 33 51 0 h +.6435 g 3019 2942 N -51 0 0 34 51 0 h +.6477 g 3019 2976 N -51 0 0 33 51 0 h +.6519 g 3019 3009 N -51 0 0 34 51 0 h +.6561 g 3019 3043 N -51 0 0 34 51 0 h +.6604 g 3019 3077 N -51 0 0 33 51 0 h +.6646 g 3019 3110 N -51 0 0 34 51 0 h +.6688 g 3019 3144 N -51 0 0 33 51 0 h +.673 g 3019 3177 N -51 0 0 34 51 0 h +.6772 g 3019 3211 N -51 0 0 34 51 0 h +.6814 g 3019 3245 N -51 0 0 33 51 0 h +.6856 g 3019 3278 N -51 0 0 34 51 0 h +.6898 g 3019 3312 N -51 0 0 33 51 0 h +.694 g 3019 3345 N -51 0 0 34 51 0 h +.6982 g 3019 3379 N -51 0 0 33 51 0 h +.7024 g 3019 3412 N -51 0 0 34 51 0 h +.7066 g 3019 3446 N -51 0 0 34 51 0 h +.7109 g 3019 3480 N -51 0 0 33 51 0 h +.7151 g 3019 3513 N -51 0 0 34 51 0 h +.7193 g 3019 3547 N -51 0 0 33 51 0 h +.7235 g 3019 3580 N -51 0 0 34 51 0 h +.7277 g 3019 3614 N -51 0 0 34 51 0 h +.7319 g 3019 3648 N -51 0 0 33 51 0 h +.7361 g 3019 3681 N -51 0 0 34 51 0 h +.7403 g 3019 3715 N -51 0 0 33 51 0 h +.7445 g 3019 3748 N -51 0 0 34 51 0 h +.7487 g 3019 3782 N -51 0 0 34 51 0 h +.7529 g 3019 3816 N -51 0 0 33 51 0 h +.7572 g 3019 3849 N -51 0 0 34 51 0 h +.7614 g 3019 3883 N -51 0 0 33 51 0 h +.7656 g 3019 3916 N -51 0 0 34 51 0 h +.7698 g 3019 3950 N -51 0 0 33 51 0 h +.774 g 3019 3983 N -51 0 0 34 51 0 h +.7782 g 3019 4017 N -51 0 0 34 51 0 h +.7824 g 3019 4051 N -51 0 0 33 51 0 h +.7866 g 3019 4084 N -51 0 0 34 51 0 h +.7908 g 3019 4118 N -51 0 0 33 51 0 h +.795 g 3019 4151 N -51 0 0 34 51 0 h +.7992 g 3019 4185 N -51 0 0 34 51 0 h +.8035 g 3019 4219 N -51 0 0 33 51 0 h +.401 g 3070 928 N -50 0 0 33 50 0 h +.4051 g 3070 961 N -50 0 0 34 50 0 h +.4091 g 3070 995 N -50 0 0 34 50 0 h +.4132 g 3070 1029 N -50 0 0 33 50 0 h +.4172 g 3070 1062 N -50 0 0 34 50 0 h +.4213 g 3070 1096 N -50 0 0 33 50 0 h +.4254 g 3070 1129 N -50 0 0 34 50 0 h +.4294 g 3070 1163 N -50 0 0 34 50 0 h +.4335 g 3070 1197 N -50 0 0 33 50 0 h +.4375 g 3070 1230 N -50 0 0 34 50 0 h +.4416 g 3070 1264 N -50 0 0 33 50 0 h +.4456 g 3070 1297 N -50 0 0 34 50 0 h +.4497 g 3070 1331 N -50 0 0 33 50 0 h +.4537 g 3070 1364 N -50 0 0 34 50 0 h +.4578 g 3070 1398 N -50 0 0 34 50 0 h +.4619 g 3070 1432 N -50 0 0 33 50 0 h +.4659 g 3070 1465 N -50 0 0 34 50 0 h +.47 g 3070 1499 N -50 0 0 33 50 0 h +.474 g 3070 1532 N -50 0 0 34 50 0 h +.4781 g 3070 1566 N -50 0 0 34 50 0 h +.4821 g 3070 1600 N -50 0 0 33 50 0 h +.4862 g 3070 1633 N -50 0 0 34 50 0 h +.4902 g 3070 1667 N -50 0 0 33 50 0 h +.4943 g 3070 1700 N -50 0 0 34 50 0 h +.4984 g 3070 1734 N -50 0 0 34 50 0 h +.5024 g 3070 1768 N -50 0 0 33 50 0 h +.5065 g 3070 1801 N -50 0 0 34 50 0 h +.5105 g 3070 1835 N -50 0 0 33 50 0 h +.5146 g 3070 1868 N -50 0 0 34 50 0 h +.5186 g 3070 1902 N -50 0 0 33 50 0 h +.5227 g 3070 1935 N -50 0 0 34 50 0 h +.5267 g 3070 1969 N -50 0 0 34 50 0 h +.5308 g 3070 2003 N -50 0 0 33 50 0 h +.5349 g 3070 2036 N -50 0 0 34 50 0 h +.5389 g 3070 2070 N -50 0 0 33 50 0 h +.543 g 3070 2103 N -50 0 0 34 50 0 h +.547 g 3070 2137 N -50 0 0 34 50 0 h +.5511 g 3070 2171 N -50 0 0 33 50 0 h +.5551 g 3070 2204 N -50 0 0 34 50 0 h +.5592 g 3070 2238 N -50 0 0 33 50 0 h +.5632 g 3070 2271 N -50 0 0 34 50 0 h +.5673 g 3070 2305 N -50 0 0 34 50 0 h +.5714 g 3070 2339 N -50 0 0 33 50 0 h +.5754 g 3070 2372 N -50 0 0 34 50 0 h +.5795 g 3070 2406 N -50 0 0 33 50 0 h +.5835 g 3070 2439 N -50 0 0 34 50 0 h +.5876 g 3070 2473 N -50 0 0 34 50 0 h +.5916 g 3070 2507 N -50 0 0 33 50 0 h +.5957 g 3070 2540 N -50 0 0 34 50 0 h +.5997 g 3070 2574 N -50 0 0 32 50 0 h +.6038 g 3070 2606 N -50 0 0 34 50 0 h +.6079 g 3070 2640 N -50 0 0 33 50 0 h +.6119 g 3070 2673 N -50 0 0 34 50 0 h +.616 g 3070 2707 N -50 0 0 34 50 0 h +.62 g 3070 2741 N -50 0 0 33 50 0 h +.6241 g 3070 2774 N -50 0 0 34 50 0 h +.6281 g 3070 2808 N -50 0 0 33 50 0 h +.6322 g 3070 2841 N -50 0 0 34 50 0 h +.6362 g 3070 2875 N -50 0 0 34 50 0 h +.6403 g 3070 2909 N -50 0 0 33 50 0 h +.6444 g 3070 2942 N -50 0 0 34 50 0 h +.6484 g 3070 2976 N -50 0 0 33 50 0 h +.6525 g 3070 3009 N -50 0 0 34 50 0 h +.6565 g 3070 3043 N -50 0 0 34 50 0 h +.6606 g 3070 3077 N -50 0 0 33 50 0 h +.6646 g 3070 3110 N -50 0 0 34 50 0 h +.6687 g 3070 3144 N -50 0 0 33 50 0 h +.6728 g 3070 3177 N -50 0 0 34 50 0 h +.6768 g 3070 3211 N -50 0 0 34 50 0 h +.6809 g 3070 3245 N -50 0 0 33 50 0 h +.6849 g 3070 3278 N -50 0 0 34 50 0 h +.689 g 3070 3312 N -50 0 0 33 50 0 h +.693 g 3070 3345 N -50 0 0 34 50 0 h +.6971 g 3070 3379 N -50 0 0 33 50 0 h +.7011 g 3070 3412 N -50 0 0 34 50 0 h +.7052 g 3070 3446 N -50 0 0 34 50 0 h +.7093 g 3070 3480 N -50 0 0 33 50 0 h +.7133 g 3070 3513 N -50 0 0 34 50 0 h +.7174 g 3070 3547 N -50 0 0 33 50 0 h +.7214 g 3070 3580 N -50 0 0 34 50 0 h +.7255 g 3070 3614 N -50 0 0 34 50 0 h +.7295 g 3070 3648 N -50 0 0 33 50 0 h +.7336 g 3070 3681 N -50 0 0 34 50 0 h +.7376 g 3070 3715 N -50 0 0 33 50 0 h +.7417 g 3070 3748 N -50 0 0 34 50 0 h +.7458 g 3070 3782 N -50 0 0 34 50 0 h +.7498 g 3070 3816 N -50 0 0 33 50 0 h +.7539 g 3070 3849 N -50 0 0 34 50 0 h +.7579 g 3070 3883 N -50 0 0 33 50 0 h +.762 g 3070 3916 N -50 0 0 34 50 0 h +.766 g 3070 3950 N -50 0 0 33 50 0 h +.7701 g 3070 3983 N -50 0 0 34 50 0 h +.7741 g 3070 4017 N -50 0 0 34 50 0 h +.7782 g 3070 4051 N -50 0 0 33 50 0 h +.7823 g 3070 4084 N -50 0 0 34 50 0 h +.7863 g 3070 4118 N -50 0 0 33 50 0 h +.7904 g 3070 4151 N -50 0 0 34 50 0 h +.7944 g 3070 4185 N -50 0 0 34 50 0 h +.7985 g 3070 4219 N -50 0 0 33 50 0 h +.411 g 3120 928 N -51 0 0 33 51 0 h +.4149 g 3120 961 N -51 0 0 34 51 0 h +.4188 g 3120 995 N -51 0 0 34 51 0 h +.4228 g 3120 1029 N -51 0 0 33 51 0 h +.4267 g 3120 1062 N -51 0 0 34 51 0 h +.4306 g 3120 1096 N -51 0 0 33 51 0 h +.4345 g 3120 1129 N -51 0 0 34 51 0 h +.4384 g 3120 1163 N -51 0 0 34 51 0 h +.4423 g 3120 1197 N -51 0 0 33 51 0 h +.4462 g 3120 1230 N -51 0 0 34 51 0 h +.4501 g 3120 1264 N -51 0 0 33 51 0 h +.454 g 3120 1297 N -51 0 0 34 51 0 h +.4579 g 3120 1331 N -51 0 0 33 51 0 h +.4618 g 3120 1364 N -51 0 0 34 51 0 h +.4657 g 3120 1398 N -51 0 0 34 51 0 h +.4696 g 3120 1432 N -51 0 0 33 51 0 h +.4735 g 3120 1465 N -51 0 0 34 51 0 h +.4774 g 3120 1499 N -51 0 0 33 51 0 h +.4813 g 3120 1532 N -51 0 0 34 51 0 h +.4852 g 3120 1566 N -51 0 0 34 51 0 h +.4891 g 3120 1600 N -51 0 0 33 51 0 h +.493 g 3120 1633 N -51 0 0 34 51 0 h +.4969 g 3120 1667 N -51 0 0 33 51 0 h +.5008 g 3120 1700 N -51 0 0 34 51 0 h +.5047 g 3120 1734 N -51 0 0 34 51 0 h +.5086 g 3120 1768 N -51 0 0 33 51 0 h +.5125 g 3120 1801 N -51 0 0 34 51 0 h +.5164 g 3120 1835 N -51 0 0 33 51 0 h +.5203 g 3120 1868 N -51 0 0 34 51 0 h +.5242 g 3120 1902 N -51 0 0 33 51 0 h +.5281 g 3120 1935 N -51 0 0 34 51 0 h +.532 g 3120 1969 N -51 0 0 34 51 0 h +.5359 g 3120 2003 N -51 0 0 33 51 0 h +.5398 g 3120 2036 N -51 0 0 34 51 0 h +.5437 g 3120 2070 N -51 0 0 33 51 0 h +.5476 g 3120 2103 N -51 0 0 34 51 0 h +.5515 g 3120 2137 N -51 0 0 34 51 0 h +.5554 g 3120 2171 N -51 0 0 33 51 0 h +.5593 g 3120 2204 N -51 0 0 34 51 0 h +.5632 g 3120 2238 N -51 0 0 33 51 0 h +.5671 g 3120 2271 N -51 0 0 34 51 0 h +.5711 g 3120 2305 N -51 0 0 34 51 0 h +.575 g 3120 2339 N -51 0 0 33 51 0 h +.5789 g 3120 2372 N -51 0 0 34 51 0 h +.5828 g 3120 2406 N -51 0 0 33 51 0 h +.5867 g 3120 2439 N -51 0 0 34 51 0 h +.5906 g 3120 2473 N -51 0 0 34 51 0 h +.5945 g 3120 2507 N -51 0 0 33 51 0 h +.5984 g 3120 2540 N -51 0 0 34 51 0 h +.6023 g 3120 2574 N -51 0 0 32 51 0 h +.6062 g 3120 2606 N -51 0 0 34 51 0 h +.6101 g 3120 2640 N -51 0 0 33 51 0 h +.614 g 3120 2673 N -51 0 0 34 51 0 h +.6179 g 3120 2707 N -51 0 0 34 51 0 h +.6218 g 3120 2741 N -51 0 0 33 51 0 h +.6257 g 3120 2774 N -51 0 0 34 51 0 h +.6296 g 3120 2808 N -51 0 0 33 51 0 h +.6335 g 3120 2841 N -51 0 0 34 51 0 h +.6374 g 3120 2875 N -51 0 0 34 51 0 h +.6413 g 3120 2909 N -51 0 0 33 51 0 h +.6452 g 3120 2942 N -51 0 0 34 51 0 h +.6491 g 3120 2976 N -51 0 0 33 51 0 h +.653 g 3120 3009 N -51 0 0 34 51 0 h +.6569 g 3120 3043 N -51 0 0 34 51 0 h +.6608 g 3120 3077 N -51 0 0 33 51 0 h +.6647 g 3120 3110 N -51 0 0 34 51 0 h +.6686 g 3120 3144 N -51 0 0 33 51 0 h +.6725 g 3120 3177 N -51 0 0 34 51 0 h +.6764 g 3120 3211 N -51 0 0 34 51 0 h +.6803 g 3120 3245 N -51 0 0 33 51 0 h +.6842 g 3120 3278 N -51 0 0 34 51 0 h +.6881 g 3120 3312 N -51 0 0 33 51 0 h +.692 g 3120 3345 N -51 0 0 34 51 0 h +.6959 g 3120 3379 N -51 0 0 33 51 0 h +.6998 g 3120 3412 N -51 0 0 34 51 0 h +.7037 g 3120 3446 N -51 0 0 34 51 0 h +.7076 g 3120 3480 N -51 0 0 33 51 0 h +.7115 g 3120 3513 N -51 0 0 34 51 0 h +.7154 g 3120 3547 N -51 0 0 33 51 0 h +.7194 g 3120 3580 N -51 0 0 34 51 0 h +.7233 g 3120 3614 N -51 0 0 34 51 0 h +.7272 g 3120 3648 N -51 0 0 33 51 0 h +.7311 g 3120 3681 N -51 0 0 34 51 0 h +.735 g 3120 3715 N -51 0 0 33 51 0 h +.7389 g 3120 3748 N -51 0 0 34 51 0 h +.7428 g 3120 3782 N -51 0 0 34 51 0 h +.7467 g 3120 3816 N -51 0 0 33 51 0 h +.7506 g 3120 3849 N -51 0 0 34 51 0 h +.7545 g 3120 3883 N -51 0 0 33 51 0 h +.7584 g 3120 3916 N -51 0 0 34 51 0 h +.7623 g 3120 3950 N -51 0 0 33 51 0 h +.7662 g 3120 3983 N -51 0 0 34 51 0 h +.7701 g 3120 4017 N -51 0 0 34 51 0 h +.774 g 3120 4051 N -51 0 0 33 51 0 h +.7779 g 3120 4084 N -51 0 0 34 51 0 h +.7818 g 3120 4118 N -51 0 0 33 51 0 h +.7857 g 3120 4151 N -51 0 0 34 51 0 h +.7896 g 3120 4185 N -51 0 0 34 51 0 h +.7935 g 3120 4219 N -51 0 0 33 51 0 h +.4211 g 3171 928 N -50 0 0 33 50 0 h +.4248 g 3171 961 N -50 0 0 34 50 0 h +.4286 g 3171 995 N -50 0 0 34 50 0 h +.4323 g 3171 1029 N -50 0 0 33 50 0 h +.4361 g 3171 1062 N -50 0 0 34 50 0 h +.4398 g 3171 1096 N -50 0 0 33 50 0 h +.4436 g 3171 1129 N -50 0 0 34 50 0 h +.4473 g 3171 1163 N -50 0 0 34 50 0 h +.4511 g 3171 1197 N -50 0 0 33 50 0 h +.4548 g 3171 1230 N -50 0 0 34 50 0 h +.4586 g 3171 1264 N -50 0 0 33 50 0 h +.4623 g 3171 1297 N -50 0 0 34 50 0 h +.4661 g 3171 1331 N -50 0 0 33 50 0 h +.4698 g 3171 1364 N -50 0 0 34 50 0 h +.4736 g 3171 1398 N -50 0 0 34 50 0 h +.4773 g 3171 1432 N -50 0 0 33 50 0 h +.4811 g 3171 1465 N -50 0 0 34 50 0 h +.4848 g 3171 1499 N -50 0 0 33 50 0 h +.4886 g 3171 1532 N -50 0 0 34 50 0 h +.4923 g 3171 1566 N -50 0 0 34 50 0 h +.4961 g 3171 1600 N -50 0 0 33 50 0 h +.4998 g 3171 1633 N -50 0 0 34 50 0 h +.5036 g 3171 1667 N -50 0 0 33 50 0 h +.5073 g 3171 1700 N -50 0 0 34 50 0 h +.5111 g 3171 1734 N -50 0 0 34 50 0 h +.5148 g 3171 1768 N -50 0 0 33 50 0 h +.5186 g 3171 1801 N -50 0 0 34 50 0 h +.5223 g 3171 1835 N -50 0 0 33 50 0 h +.5261 g 3171 1868 N -50 0 0 34 50 0 h +.5298 g 3171 1902 N -50 0 0 33 50 0 h +.5336 g 3171 1935 N -50 0 0 34 50 0 h +.5373 g 3171 1969 N -50 0 0 34 50 0 h +.5411 g 3171 2003 N -50 0 0 33 50 0 h +.5448 g 3171 2036 N -50 0 0 34 50 0 h +.5486 g 3171 2070 N -50 0 0 33 50 0 h +.5523 g 3171 2103 N -50 0 0 34 50 0 h +.5561 g 3171 2137 N -50 0 0 34 50 0 h +.5598 g 3171 2171 N -50 0 0 33 50 0 h +.5636 g 3171 2204 N -50 0 0 34 50 0 h +.5673 g 3171 2238 N -50 0 0 33 50 0 h +.5711 g 3171 2271 N -50 0 0 34 50 0 h +.5748 g 3171 2305 N -50 0 0 34 50 0 h +.5786 g 3171 2339 N -50 0 0 33 50 0 h +.5823 g 3171 2372 N -50 0 0 34 50 0 h +.5861 g 3171 2406 N -50 0 0 33 50 0 h +.5898 g 3171 2439 N -50 0 0 34 50 0 h +.5935 g 3171 2473 N -50 0 0 34 50 0 h +.5973 g 3171 2507 N -50 0 0 33 50 0 h +.601 g 3171 2540 N -50 0 0 34 50 0 h +.6048 g 3171 2574 N -50 0 0 32 50 0 h +.6085 g 3171 2606 N -50 0 0 34 50 0 h +.6123 g 3171 2640 N -50 0 0 33 50 0 h +.616 g 3171 2673 N -50 0 0 34 50 0 h +.6198 g 3171 2707 N -50 0 0 34 50 0 h +.6235 g 3171 2741 N -50 0 0 33 50 0 h +.6273 g 3171 2774 N -50 0 0 34 50 0 h +.631 g 3171 2808 N -50 0 0 33 50 0 h +.6348 g 3171 2841 N -50 0 0 34 50 0 h +.6385 g 3171 2875 N -50 0 0 34 50 0 h +.6423 g 3171 2909 N -50 0 0 33 50 0 h +.646 g 3171 2942 N -50 0 0 34 50 0 h +.6498 g 3171 2976 N -50 0 0 33 50 0 h +.6535 g 3171 3009 N -50 0 0 34 50 0 h +.6573 g 3171 3043 N -50 0 0 34 50 0 h +.661 g 3171 3077 N -50 0 0 33 50 0 h +.6648 g 3171 3110 N -50 0 0 34 50 0 h +.6685 g 3171 3144 N -50 0 0 33 50 0 h +.6723 g 3171 3177 N -50 0 0 34 50 0 h +.676 g 3171 3211 N -50 0 0 34 50 0 h +.6798 g 3171 3245 N -50 0 0 33 50 0 h +.6835 g 3171 3278 N -50 0 0 34 50 0 h +.6873 g 3171 3312 N -50 0 0 33 50 0 h +.691 g 3171 3345 N -50 0 0 34 50 0 h +.6948 g 3171 3379 N -50 0 0 33 50 0 h +.6985 g 3171 3412 N -50 0 0 34 50 0 h +.7023 g 3171 3446 N -50 0 0 34 50 0 h +.706 g 3171 3480 N -50 0 0 33 50 0 h +.7098 g 3171 3513 N -50 0 0 34 50 0 h +.7135 g 3171 3547 N -50 0 0 33 50 0 h +.7173 g 3171 3580 N -50 0 0 34 50 0 h +.721 g 3171 3614 N -50 0 0 34 50 0 h +.7248 g 3171 3648 N -50 0 0 33 50 0 h +.7285 g 3171 3681 N -50 0 0 34 50 0 h +.7323 g 3171 3715 N -50 0 0 33 50 0 h +.736 g 3171 3748 N -50 0 0 34 50 0 h +.7398 g 3171 3782 N -50 0 0 34 50 0 h +.7435 g 3171 3816 N -50 0 0 33 50 0 h +.7473 g 3171 3849 N -50 0 0 34 50 0 h +.751 g 3171 3883 N -50 0 0 33 50 0 h +.7548 g 3171 3916 N -50 0 0 34 50 0 h +.7585 g 3171 3950 N -50 0 0 33 50 0 h +.7623 g 3171 3983 N -50 0 0 34 50 0 h +.766 g 3171 4017 N -50 0 0 34 50 0 h +.7698 g 3171 4051 N -50 0 0 33 50 0 h +.7735 g 3171 4084 N -50 0 0 34 50 0 h +.7773 g 3171 4118 N -50 0 0 33 50 0 h +.781 g 3171 4151 N -50 0 0 34 50 0 h +.7848 g 3171 4185 N -50 0 0 34 50 0 h +.7885 g 3171 4219 N -50 0 0 33 50 0 h +.4311 g 3221 928 N -51 0 0 33 51 0 h +.4347 g 3221 961 N -51 0 0 34 51 0 h +.4383 g 3221 995 N -51 0 0 34 51 0 h +.4419 g 3221 1029 N -51 0 0 33 51 0 h +.4455 g 3221 1062 N -51 0 0 34 51 0 h +.4491 g 3221 1096 N -51 0 0 33 51 0 h +.4527 g 3221 1129 N -51 0 0 34 51 0 h +.4563 g 3221 1163 N -51 0 0 34 51 0 h +.4599 g 3221 1197 N -51 0 0 33 51 0 h +.4635 g 3221 1230 N -51 0 0 34 51 0 h +.4671 g 3221 1264 N -51 0 0 33 51 0 h +.4707 g 3221 1297 N -51 0 0 34 51 0 h +.4743 g 3221 1331 N -51 0 0 33 51 0 h +.4778 g 3221 1364 N -51 0 0 34 51 0 h +.4814 g 3221 1398 N -51 0 0 34 51 0 h +.485 g 3221 1432 N -51 0 0 33 51 0 h +.4886 g 3221 1465 N -51 0 0 34 51 0 h +.4922 g 3221 1499 N -51 0 0 33 51 0 h +.4958 g 3221 1532 N -51 0 0 34 51 0 h +.4994 g 3221 1566 N -51 0 0 34 51 0 h +.503 g 3221 1600 N -51 0 0 33 51 0 h +.5066 g 3221 1633 N -51 0 0 34 51 0 h +.5102 g 3221 1667 N -51 0 0 33 51 0 h +.5138 g 3221 1700 N -51 0 0 34 51 0 h +.5174 g 3221 1734 N -51 0 0 34 51 0 h +.521 g 3221 1768 N -51 0 0 33 51 0 h +.5246 g 3221 1801 N -51 0 0 34 51 0 h +.5282 g 3221 1835 N -51 0 0 33 51 0 h +.5318 g 3221 1868 N -51 0 0 34 51 0 h +.5354 g 3221 1902 N -51 0 0 33 51 0 h +.539 g 3221 1935 N -51 0 0 34 51 0 h +.5426 g 3221 1969 N -51 0 0 34 51 0 h +.5462 g 3221 2003 N -51 0 0 33 51 0 h +.5498 g 3221 2036 N -51 0 0 34 51 0 h +.5534 g 3221 2070 N -51 0 0 33 51 0 h +.557 g 3221 2103 N -51 0 0 34 51 0 h +.5606 g 3221 2137 N -51 0 0 34 51 0 h +.5642 g 3221 2171 N -51 0 0 33 51 0 h +.5678 g 3221 2204 N -51 0 0 34 51 0 h +.5714 g 3221 2238 N -51 0 0 33 51 0 h +.575 g 3221 2271 N -51 0 0 34 51 0 h +.5786 g 3221 2305 N -51 0 0 34 51 0 h +.5821 g 3221 2339 N -51 0 0 33 51 0 h +.5857 g 3221 2372 N -51 0 0 34 51 0 h +.5893 g 3221 2406 N -51 0 0 33 51 0 h +.5929 g 3221 2439 N -51 0 0 34 51 0 h +.5965 g 3221 2473 N -51 0 0 34 51 0 h +.6001 g 3221 2507 N -51 0 0 33 51 0 h +.6037 g 3221 2540 N -51 0 0 34 51 0 h +.6073 g 3221 2574 N -51 0 0 32 51 0 h +.6109 g 3221 2606 N -51 0 0 34 51 0 h +.6145 g 3221 2640 N -51 0 0 33 51 0 h +.6181 g 3221 2673 N -51 0 0 34 51 0 h +.6217 g 3221 2707 N -51 0 0 34 51 0 h +.6253 g 3221 2741 N -51 0 0 33 51 0 h +.6289 g 3221 2774 N -51 0 0 34 51 0 h +.6325 g 3221 2808 N -51 0 0 33 51 0 h +.6361 g 3221 2841 N -51 0 0 34 51 0 h +.6397 g 3221 2875 N -51 0 0 34 51 0 h +.6433 g 3221 2909 N -51 0 0 33 51 0 h +.6469 g 3221 2942 N -51 0 0 34 51 0 h +.6505 g 3221 2976 N -51 0 0 33 51 0 h +.6541 g 3221 3009 N -51 0 0 34 51 0 h +.6577 g 3221 3043 N -51 0 0 34 51 0 h +.6613 g 3221 3077 N -51 0 0 33 51 0 h +.6649 g 3221 3110 N -51 0 0 34 51 0 h +.6685 g 3221 3144 N -51 0 0 33 51 0 h +.6721 g 3221 3177 N -51 0 0 34 51 0 h +.6757 g 3221 3211 N -51 0 0 34 51 0 h +.6793 g 3221 3245 N -51 0 0 33 51 0 h +.6829 g 3221 3278 N -51 0 0 34 51 0 h +.6864 g 3221 3312 N -51 0 0 33 51 0 h +.69 g 3221 3345 N -51 0 0 34 51 0 h +.6936 g 3221 3379 N -51 0 0 33 51 0 h +.6972 g 3221 3412 N -51 0 0 34 51 0 h +.7008 g 3221 3446 N -51 0 0 34 51 0 h +.7044 g 3221 3480 N -51 0 0 33 51 0 h +.708 g 3221 3513 N -51 0 0 34 51 0 h +.7116 g 3221 3547 N -51 0 0 33 51 0 h +.7152 g 3221 3580 N -51 0 0 34 51 0 h +.7188 g 3221 3614 N -51 0 0 34 51 0 h +.7224 g 3221 3648 N -51 0 0 33 51 0 h +.726 g 3221 3681 N -51 0 0 34 51 0 h +.7296 g 3221 3715 N -51 0 0 33 51 0 h +.7332 g 3221 3748 N -51 0 0 34 51 0 h +.7368 g 3221 3782 N -51 0 0 34 51 0 h +.7404 g 3221 3816 N -51 0 0 33 51 0 h +.744 g 3221 3849 N -51 0 0 34 51 0 h +.7476 g 3221 3883 N -51 0 0 33 51 0 h +.7512 g 3221 3916 N -51 0 0 34 51 0 h +.7548 g 3221 3950 N -51 0 0 33 51 0 h +.7584 g 3221 3983 N -51 0 0 34 51 0 h +.762 g 3221 4017 N -51 0 0 34 51 0 h +.7656 g 3221 4051 N -51 0 0 33 51 0 h +.7692 g 3221 4084 N -51 0 0 34 51 0 h +.7728 g 3221 4118 N -51 0 0 33 51 0 h +.7764 g 3221 4151 N -51 0 0 34 51 0 h +.78 g 3221 4185 N -51 0 0 34 51 0 h +.7836 g 3221 4219 N -51 0 0 33 51 0 h +.4411 g 3272 928 N -50 0 0 33 50 0 h +.4446 g 3272 961 N -50 0 0 34 50 0 h +.448 g 3272 995 N -50 0 0 34 50 0 h +.4514 g 3272 1029 N -50 0 0 33 50 0 h +.4549 g 3272 1062 N -50 0 0 34 50 0 h +.4583 g 3272 1096 N -50 0 0 33 50 0 h +.4618 g 3272 1129 N -50 0 0 34 50 0 h +.4652 g 3272 1163 N -50 0 0 34 50 0 h +.4687 g 3272 1197 N -50 0 0 33 50 0 h +.4721 g 3272 1230 N -50 0 0 34 50 0 h +.4756 g 3272 1264 N -50 0 0 33 50 0 h +.479 g 3272 1297 N -50 0 0 34 50 0 h +.4824 g 3272 1331 N -50 0 0 33 50 0 h +.4859 g 3272 1364 N -50 0 0 34 50 0 h +.4893 g 3272 1398 N -50 0 0 34 50 0 h +.4928 g 3272 1432 N -50 0 0 33 50 0 h +.4962 g 3272 1465 N -50 0 0 34 50 0 h +.4997 g 3272 1499 N -50 0 0 33 50 0 h +.5031 g 3272 1532 N -50 0 0 34 50 0 h +.5065 g 3272 1566 N -50 0 0 34 50 0 h +.51 g 3272 1600 N -50 0 0 33 50 0 h +.5134 g 3272 1633 N -50 0 0 34 50 0 h +.5169 g 3272 1667 N -50 0 0 33 50 0 h +.5203 g 3272 1700 N -50 0 0 34 50 0 h +.5238 g 3272 1734 N -50 0 0 34 50 0 h +.5272 g 3272 1768 N -50 0 0 33 50 0 h +.5306 g 3272 1801 N -50 0 0 34 50 0 h +.5341 g 3272 1835 N -50 0 0 33 50 0 h +.5375 g 3272 1868 N -50 0 0 34 50 0 h +.541 g 3272 1902 N -50 0 0 33 50 0 h +.5444 g 3272 1935 N -50 0 0 34 50 0 h +.5479 g 3272 1969 N -50 0 0 34 50 0 h +.5513 g 3272 2003 N -50 0 0 33 50 0 h +.5548 g 3272 2036 N -50 0 0 34 50 0 h +.5582 g 3272 2070 N -50 0 0 33 50 0 h +.5616 g 3272 2103 N -50 0 0 34 50 0 h +.5651 g 3272 2137 N -50 0 0 34 50 0 h +.5685 g 3272 2171 N -50 0 0 33 50 0 h +.572 g 3272 2204 N -50 0 0 34 50 0 h +.5754 g 3272 2238 N -50 0 0 33 50 0 h +.5789 g 3272 2271 N -50 0 0 34 50 0 h +.5823 g 3272 2305 N -50 0 0 34 50 0 h +.5857 g 3272 2339 N -50 0 0 33 50 0 h +.5892 g 3272 2372 N -50 0 0 34 50 0 h +.5926 g 3272 2406 N -50 0 0 33 50 0 h +.5961 g 3272 2439 N -50 0 0 34 50 0 h +.5995 g 3272 2473 N -50 0 0 34 50 0 h +.603 g 3272 2507 N -50 0 0 33 50 0 h +.6064 g 3272 2540 N -50 0 0 34 50 0 h +.6098 g 3272 2574 N -50 0 0 32 50 0 h +.6133 g 3272 2606 N -50 0 0 34 50 0 h +.6167 g 3272 2640 N -50 0 0 33 50 0 h +.6202 g 3272 2673 N -50 0 0 34 50 0 h +.6236 g 3272 2707 N -50 0 0 34 50 0 h +.6271 g 3272 2741 N -50 0 0 33 50 0 h +.6305 g 3272 2774 N -50 0 0 34 50 0 h +.634 g 3272 2808 N -50 0 0 33 50 0 h +.6374 g 3272 2841 N -50 0 0 34 50 0 h +.6408 g 3272 2875 N -50 0 0 34 50 0 h +.6443 g 3272 2909 N -50 0 0 33 50 0 h +.6477 g 3272 2942 N -50 0 0 34 50 0 h +.6512 g 3272 2976 N -50 0 0 33 50 0 h +.6546 g 3272 3009 N -50 0 0 34 50 0 h +.6581 g 3272 3043 N -50 0 0 34 50 0 h +.6615 g 3272 3077 N -50 0 0 33 50 0 h +.6649 g 3272 3110 N -50 0 0 34 50 0 h +.6684 g 3272 3144 N -50 0 0 33 50 0 h +.6718 g 3272 3177 N -50 0 0 34 50 0 h +.6753 g 3272 3211 N -50 0 0 34 50 0 h +.6787 g 3272 3245 N -50 0 0 33 50 0 h +.6822 g 3272 3278 N -50 0 0 34 50 0 h +.6856 g 3272 3312 N -50 0 0 33 50 0 h +.689 g 3272 3345 N -50 0 0 34 50 0 h +.6925 g 3272 3379 N -50 0 0 33 50 0 h +.6959 g 3272 3412 N -50 0 0 34 50 0 h +.6994 g 3272 3446 N -50 0 0 34 50 0 h +.7028 g 3272 3480 N -50 0 0 33 50 0 h +.7063 g 3272 3513 N -50 0 0 34 50 0 h +.7097 g 3272 3547 N -50 0 0 33 50 0 h +.7132 g 3272 3580 N -50 0 0 34 50 0 h +.7166 g 3272 3614 N -50 0 0 34 50 0 h +.72 g 3272 3648 N -50 0 0 33 50 0 h +.7235 g 3272 3681 N -50 0 0 34 50 0 h +.7269 g 3272 3715 N -50 0 0 33 50 0 h +.7304 g 3272 3748 N -50 0 0 34 50 0 h +.7338 g 3272 3782 N -50 0 0 34 50 0 h +.7373 g 3272 3816 N -50 0 0 33 50 0 h +.7407 g 3272 3849 N -50 0 0 34 50 0 h +.7441 g 3272 3883 N -50 0 0 33 50 0 h +.7476 g 3272 3916 N -50 0 0 34 50 0 h +.751 g 3272 3950 N -50 0 0 33 50 0 h +.7545 g 3272 3983 N -50 0 0 34 50 0 h +.7579 g 3272 4017 N -50 0 0 34 50 0 h +.7614 g 3272 4051 N -50 0 0 33 50 0 h +.7648 g 3272 4084 N -50 0 0 34 50 0 h +.7683 g 3272 4118 N -50 0 0 33 50 0 h +.7717 g 3272 4151 N -50 0 0 34 50 0 h +.7751 g 3272 4185 N -50 0 0 34 50 0 h +.7786 g 3272 4219 N -50 0 0 33 50 0 h +.4511 g 3322 928 N -51 0 0 33 51 0 h +.4544 g 3322 961 N -51 0 0 34 51 0 h +.4577 g 3322 995 N -51 0 0 34 51 0 h +.461 g 3322 1029 N -51 0 0 33 51 0 h +.4643 g 3322 1062 N -51 0 0 34 51 0 h +.4676 g 3322 1096 N -51 0 0 33 51 0 h +.4709 g 3322 1129 N -51 0 0 34 51 0 h +.4742 g 3322 1163 N -51 0 0 34 51 0 h +.4775 g 3322 1197 N -51 0 0 33 51 0 h +.4808 g 3322 1230 N -51 0 0 34 51 0 h +.484 g 3322 1264 N -51 0 0 33 51 0 h +.4873 g 3322 1297 N -51 0 0 34 51 0 h +.4906 g 3322 1331 N -51 0 0 33 51 0 h +.4939 g 3322 1364 N -51 0 0 34 51 0 h +.4972 g 3322 1398 N -51 0 0 34 51 0 h +.5005 g 3322 1432 N -51 0 0 33 51 0 h +.5038 g 3322 1465 N -51 0 0 34 51 0 h +.5071 g 3322 1499 N -51 0 0 33 51 0 h +.5104 g 3322 1532 N -51 0 0 34 51 0 h +.5137 g 3322 1566 N -51 0 0 34 51 0 h +.517 g 3322 1600 N -51 0 0 33 51 0 h +.5202 g 3322 1633 N -51 0 0 34 51 0 h +.5235 g 3322 1667 N -51 0 0 33 51 0 h +.5268 g 3322 1700 N -51 0 0 34 51 0 h +.5301 g 3322 1734 N -51 0 0 34 51 0 h +.5334 g 3322 1768 N -51 0 0 33 51 0 h +.5367 g 3322 1801 N -51 0 0 34 51 0 h +.54 g 3322 1835 N -51 0 0 33 51 0 h +.5433 g 3322 1868 N -51 0 0 34 51 0 h +.5466 g 3322 1902 N -51 0 0 33 51 0 h +.5499 g 3322 1935 N -51 0 0 34 51 0 h +.5531 g 3322 1969 N -51 0 0 34 51 0 h +.5564 g 3322 2003 N -51 0 0 33 51 0 h +.5597 g 3322 2036 N -51 0 0 34 51 0 h +.563 g 3322 2070 N -51 0 0 33 51 0 h +.5663 g 3322 2103 N -51 0 0 34 51 0 h +.5696 g 3322 2137 N -51 0 0 34 51 0 h +.5729 g 3322 2171 N -51 0 0 33 51 0 h +.5762 g 3322 2204 N -51 0 0 34 51 0 h +.5795 g 3322 2238 N -51 0 0 33 51 0 h +.5828 g 3322 2271 N -51 0 0 34 51 0 h +.5861 g 3322 2305 N -51 0 0 34 51 0 h +.5893 g 3322 2339 N -51 0 0 33 51 0 h +.5926 g 3322 2372 N -51 0 0 34 51 0 h +.5959 g 3322 2406 N -51 0 0 33 51 0 h +.5992 g 3322 2439 N -51 0 0 34 51 0 h +.6025 g 3322 2473 N -51 0 0 34 51 0 h +.6058 g 3322 2507 N -51 0 0 33 51 0 h +.6091 g 3322 2540 N -51 0 0 34 51 0 h +.6124 g 3322 2574 N -51 0 0 32 51 0 h +.6157 g 3322 2606 N -51 0 0 34 51 0 h +.619 g 3322 2640 N -51 0 0 33 51 0 h +.6222 g 3322 2673 N -51 0 0 34 51 0 h +.6255 g 3322 2707 N -51 0 0 34 51 0 h +.6288 g 3322 2741 N -51 0 0 33 51 0 h +.6321 g 3322 2774 N -51 0 0 34 51 0 h +.6354 g 3322 2808 N -51 0 0 33 51 0 h +.6387 g 3322 2841 N -51 0 0 34 51 0 h +.642 g 3322 2875 N -51 0 0 34 51 0 h +.6453 g 3322 2909 N -51 0 0 33 51 0 h +.6486 g 3322 2942 N -51 0 0 34 51 0 h +.6519 g 3322 2976 N -51 0 0 33 51 0 h +.6552 g 3322 3009 N -51 0 0 34 51 0 h +.6584 g 3322 3043 N -51 0 0 34 51 0 h +.6617 g 3322 3077 N -51 0 0 33 51 0 h +.665 g 3322 3110 N -51 0 0 34 51 0 h +.6683 g 3322 3144 N -51 0 0 33 51 0 h +.6716 g 3322 3177 N -51 0 0 34 51 0 h +.6749 g 3322 3211 N -51 0 0 34 51 0 h +.6782 g 3322 3245 N -51 0 0 33 51 0 h +.6815 g 3322 3278 N -51 0 0 34 51 0 h +.6848 g 3322 3312 N -51 0 0 33 51 0 h +.6881 g 3322 3345 N -51 0 0 34 51 0 h +.6913 g 3322 3379 N -51 0 0 33 51 0 h +.6946 g 3322 3412 N -51 0 0 34 51 0 h +.6979 g 3322 3446 N -51 0 0 34 51 0 h +.7012 g 3322 3480 N -51 0 0 33 51 0 h +.7045 g 3322 3513 N -51 0 0 34 51 0 h +.7078 g 3322 3547 N -51 0 0 33 51 0 h +.7111 g 3322 3580 N -51 0 0 34 51 0 h +.7144 g 3322 3614 N -51 0 0 34 51 0 h +.7177 g 3322 3648 N -51 0 0 33 51 0 h +.721 g 3322 3681 N -51 0 0 34 51 0 h +.7243 g 3322 3715 N -51 0 0 33 51 0 h +.7275 g 3322 3748 N -51 0 0 34 51 0 h +.7308 g 3322 3782 N -51 0 0 34 51 0 h +.7341 g 3322 3816 N -51 0 0 33 51 0 h +.7374 g 3322 3849 N -51 0 0 34 51 0 h +.7407 g 3322 3883 N -51 0 0 33 51 0 h +.744 g 3322 3916 N -51 0 0 34 51 0 h +.7473 g 3322 3950 N -51 0 0 33 51 0 h +.7506 g 3322 3983 N -51 0 0 34 51 0 h +.7539 g 3322 4017 N -51 0 0 34 51 0 h +.7572 g 3322 4051 N -51 0 0 33 51 0 h +.7604 g 3322 4084 N -51 0 0 34 51 0 h +.7637 g 3322 4118 N -51 0 0 33 51 0 h +.767 g 3322 4151 N -51 0 0 34 51 0 h +.7703 g 3322 4185 N -51 0 0 34 51 0 h +.7736 g 3322 4219 N -51 0 0 33 51 0 h +.4612 g 3373 928 N -51 0 0 33 51 0 h +.4643 g 3373 961 N -51 0 0 34 51 0 h +.4674 g 3373 995 N -51 0 0 34 51 0 h +.4706 g 3373 1029 N -51 0 0 33 51 0 h +.4737 g 3373 1062 N -51 0 0 34 51 0 h +.4769 g 3373 1096 N -51 0 0 33 51 0 h +.48 g 3373 1129 N -51 0 0 34 51 0 h +.4831 g 3373 1163 N -51 0 0 34 51 0 h +.4863 g 3373 1197 N -51 0 0 33 51 0 h +.4894 g 3373 1230 N -51 0 0 34 51 0 h +.4925 g 3373 1264 N -51 0 0 33 51 0 h +.4957 g 3373 1297 N -51 0 0 34 51 0 h +.4988 g 3373 1331 N -51 0 0 33 51 0 h +.502 g 3373 1364 N -51 0 0 34 51 0 h +.5051 g 3373 1398 N -51 0 0 34 51 0 h +.5082 g 3373 1432 N -51 0 0 33 51 0 h +.5114 g 3373 1465 N -51 0 0 34 51 0 h +.5145 g 3373 1499 N -51 0 0 33 51 0 h +.5176 g 3373 1532 N -51 0 0 34 51 0 h +.5208 g 3373 1566 N -51 0 0 34 51 0 h +.5239 g 3373 1600 N -51 0 0 33 51 0 h +.5271 g 3373 1633 N -51 0 0 34 51 0 h +.5302 g 3373 1667 N -51 0 0 33 51 0 h +.5333 g 3373 1700 N -51 0 0 34 51 0 h +.5365 g 3373 1734 N -51 0 0 34 51 0 h +.5396 g 3373 1768 N -51 0 0 33 51 0 h +.5427 g 3373 1801 N -51 0 0 34 51 0 h +.5459 g 3373 1835 N -51 0 0 33 51 0 h +.549 g 3373 1868 N -51 0 0 34 51 0 h +.5522 g 3373 1902 N -51 0 0 33 51 0 h +.5553 g 3373 1935 N -51 0 0 34 51 0 h +.5584 g 3373 1969 N -51 0 0 34 51 0 h +.5616 g 3373 2003 N -51 0 0 33 51 0 h +.5647 g 3373 2036 N -51 0 0 34 51 0 h +.5678 g 3373 2070 N -51 0 0 33 51 0 h +.571 g 3373 2103 N -51 0 0 34 51 0 h +.5741 g 3373 2137 N -51 0 0 34 51 0 h +.5772 g 3373 2171 N -51 0 0 33 51 0 h +.5804 g 3373 2204 N -51 0 0 34 51 0 h +.5835 g 3373 2238 N -51 0 0 33 51 0 h +.5867 g 3373 2271 N -51 0 0 34 51 0 h +.5898 g 3373 2305 N -51 0 0 34 51 0 h +.5929 g 3373 2339 N -51 0 0 33 51 0 h +.5961 g 3373 2372 N -51 0 0 34 51 0 h +.5992 g 3373 2406 N -51 0 0 33 51 0 h +.6023 g 3373 2439 N -51 0 0 34 51 0 h +.6055 g 3373 2473 N -51 0 0 34 51 0 h +.6086 g 3373 2507 N -51 0 0 33 51 0 h +.6118 g 3373 2540 N -51 0 0 34 51 0 h +.6149 g 3373 2574 N -51 0 0 32 51 0 h +.618 g 3373 2606 N -51 0 0 34 51 0 h +.6212 g 3373 2640 N -51 0 0 33 51 0 h +.6243 g 3373 2673 N -51 0 0 34 51 0 h +.6274 g 3373 2707 N -51 0 0 34 51 0 h +.6306 g 3373 2741 N -51 0 0 33 51 0 h +.6337 g 3373 2774 N -51 0 0 34 51 0 h +.6369 g 3373 2808 N -51 0 0 33 51 0 h +.64 g 3373 2841 N -51 0 0 34 51 0 h +.6431 g 3373 2875 N -51 0 0 34 51 0 h +.6463 g 3373 2909 N -51 0 0 33 51 0 h +.6494 g 3373 2942 N -51 0 0 34 51 0 h +.6525 g 3373 2976 N -51 0 0 33 51 0 h +.6557 g 3373 3009 N -51 0 0 34 51 0 h +.6588 g 3373 3043 N -51 0 0 34 51 0 h +.662 g 3373 3077 N -51 0 0 33 51 0 h +.6651 g 3373 3110 N -51 0 0 34 51 0 h +.6682 g 3373 3144 N -51 0 0 33 51 0 h +.6714 g 3373 3177 N -51 0 0 34 51 0 h +.6745 g 3373 3211 N -51 0 0 34 51 0 h +.6776 g 3373 3245 N -51 0 0 33 51 0 h +.6808 g 3373 3278 N -51 0 0 34 51 0 h +.6839 g 3373 3312 N -51 0 0 33 51 0 h +.6871 g 3373 3345 N -51 0 0 34 51 0 h +.6902 g 3373 3379 N -51 0 0 33 51 0 h +.6933 g 3373 3412 N -51 0 0 34 51 0 h +.6965 g 3373 3446 N -51 0 0 34 51 0 h +.6996 g 3373 3480 N -51 0 0 33 51 0 h +.7027 g 3373 3513 N -51 0 0 34 51 0 h +.7059 g 3373 3547 N -51 0 0 33 51 0 h +.709 g 3373 3580 N -51 0 0 34 51 0 h +.7122 g 3373 3614 N -51 0 0 34 51 0 h +.7153 g 3373 3648 N -51 0 0 33 51 0 h +.7184 g 3373 3681 N -51 0 0 34 51 0 h +.7216 g 3373 3715 N -51 0 0 33 51 0 h +.7247 g 3373 3748 N -51 0 0 34 51 0 h +.7278 g 3373 3782 N -51 0 0 34 51 0 h +.731 g 3373 3816 N -51 0 0 33 51 0 h +.7341 g 3373 3849 N -51 0 0 34 51 0 h +.7373 g 3373 3883 N -51 0 0 33 51 0 h +.7404 g 3373 3916 N -51 0 0 34 51 0 h +.7435 g 3373 3950 N -51 0 0 33 51 0 h +.7467 g 3373 3983 N -51 0 0 34 51 0 h +.7498 g 3373 4017 N -51 0 0 34 51 0 h +.7529 g 3373 4051 N -51 0 0 33 51 0 h +.7561 g 3373 4084 N -51 0 0 34 51 0 h +.7592 g 3373 4118 N -51 0 0 33 51 0 h +.7624 g 3373 4151 N -51 0 0 34 51 0 h +.7655 g 3373 4185 N -51 0 0 34 51 0 h +.7686 g 3373 4219 N -51 0 0 33 51 0 h +.4712 g 3424 928 N -50 0 0 33 50 0 h +.4742 g 3424 961 N -50 0 0 34 50 0 h +.4772 g 3424 995 N -50 0 0 34 50 0 h +.4801 g 3424 1029 N -50 0 0 33 50 0 h +.4831 g 3424 1062 N -50 0 0 34 50 0 h +.4861 g 3424 1096 N -50 0 0 33 50 0 h +.4891 g 3424 1129 N -50 0 0 34 50 0 h +.4921 g 3424 1163 N -50 0 0 34 50 0 h +.4951 g 3424 1197 N -50 0 0 33 50 0 h +.498 g 3424 1230 N -50 0 0 34 50 0 h +.501 g 3424 1264 N -50 0 0 33 50 0 h +.504 g 3424 1297 N -50 0 0 34 50 0 h +.507 g 3424 1331 N -50 0 0 33 50 0 h +.51 g 3424 1364 N -50 0 0 34 50 0 h +.513 g 3424 1398 N -50 0 0 34 50 0 h +.516 g 3424 1432 N -50 0 0 33 50 0 h +.5189 g 3424 1465 N -50 0 0 34 50 0 h +.5219 g 3424 1499 N -50 0 0 33 50 0 h +.5249 g 3424 1532 N -50 0 0 34 50 0 h +.5279 g 3424 1566 N -50 0 0 34 50 0 h +.5309 g 3424 1600 N -50 0 0 33 50 0 h +.5339 g 3424 1633 N -50 0 0 34 50 0 h +.5368 g 3424 1667 N -50 0 0 33 50 0 h +.5398 g 3424 1700 N -50 0 0 34 50 0 h +.5428 g 3424 1734 N -50 0 0 34 50 0 h +.5458 g 3424 1768 N -50 0 0 33 50 0 h +.5488 g 3424 1801 N -50 0 0 34 50 0 h +.5518 g 3424 1835 N -50 0 0 33 50 0 h +.5548 g 3424 1868 N -50 0 0 34 50 0 h +.5577 g 3424 1902 N -50 0 0 33 50 0 h +.5607 g 3424 1935 N -50 0 0 34 50 0 h +.5637 g 3424 1969 N -50 0 0 34 50 0 h +.5667 g 3424 2003 N -50 0 0 33 50 0 h +.5697 g 3424 2036 N -50 0 0 34 50 0 h +.5727 g 3424 2070 N -50 0 0 33 50 0 h +.5756 g 3424 2103 N -50 0 0 34 50 0 h +.5786 g 3424 2137 N -50 0 0 34 50 0 h +.5816 g 3424 2171 N -50 0 0 33 50 0 h +.5846 g 3424 2204 N -50 0 0 34 50 0 h +.5876 g 3424 2238 N -50 0 0 33 50 0 h +.5906 g 3424 2271 N -50 0 0 34 50 0 h +.5935 g 3424 2305 N -50 0 0 34 50 0 h +.5965 g 3424 2339 N -50 0 0 33 50 0 h +.5995 g 3424 2372 N -50 0 0 34 50 0 h +.6025 g 3424 2406 N -50 0 0 33 50 0 h +.6055 g 3424 2439 N -50 0 0 34 50 0 h +.6085 g 3424 2473 N -50 0 0 34 50 0 h +.6115 g 3424 2507 N -50 0 0 33 50 0 h +.6144 g 3424 2540 N -50 0 0 34 50 0 h +.6174 g 3424 2574 N -50 0 0 32 50 0 h +.6204 g 3424 2606 N -50 0 0 34 50 0 h +.6234 g 3424 2640 N -50 0 0 33 50 0 h +.6264 g 3424 2673 N -50 0 0 34 50 0 h +.6294 g 3424 2707 N -50 0 0 34 50 0 h +.6323 g 3424 2741 N -50 0 0 33 50 0 h +.6353 g 3424 2774 N -50 0 0 34 50 0 h +.6383 g 3424 2808 N -50 0 0 33 50 0 h +.6413 g 3424 2841 N -50 0 0 34 50 0 h +.6443 g 3424 2875 N -50 0 0 34 50 0 h +.6473 g 3424 2909 N -50 0 0 33 50 0 h +.6503 g 3424 2942 N -50 0 0 34 50 0 h +.6532 g 3424 2976 N -50 0 0 33 50 0 h +.6562 g 3424 3009 N -50 0 0 34 50 0 h +.6592 g 3424 3043 N -50 0 0 34 50 0 h +.6622 g 3424 3077 N -50 0 0 33 50 0 h +.6652 g 3424 3110 N -50 0 0 34 50 0 h +.6682 g 3424 3144 N -50 0 0 33 50 0 h +.6711 g 3424 3177 N -50 0 0 34 50 0 h +.6741 g 3424 3211 N -50 0 0 34 50 0 h +.6771 g 3424 3245 N -50 0 0 33 50 0 h +.6801 g 3424 3278 N -50 0 0 34 50 0 h +.6831 g 3424 3312 N -50 0 0 33 50 0 h +.6861 g 3424 3345 N -50 0 0 34 50 0 h +.689 g 3424 3379 N -50 0 0 33 50 0 h +.692 g 3424 3412 N -50 0 0 34 50 0 h +.695 g 3424 3446 N -50 0 0 34 50 0 h +.698 g 3424 3480 N -50 0 0 33 50 0 h +.701 g 3424 3513 N -50 0 0 34 50 0 h +.704 g 3424 3547 N -50 0 0 33 50 0 h +.707 g 3424 3580 N -50 0 0 34 50 0 h +.7099 g 3424 3614 N -50 0 0 34 50 0 h +.7129 g 3424 3648 N -50 0 0 33 50 0 h +.7159 g 3424 3681 N -50 0 0 34 50 0 h +.7189 g 3424 3715 N -50 0 0 33 50 0 h +.7219 g 3424 3748 N -50 0 0 34 50 0 h +.7249 g 3424 3782 N -50 0 0 34 50 0 h +.7278 g 3424 3816 N -50 0 0 33 50 0 h +.7308 g 3424 3849 N -50 0 0 34 50 0 h +.7338 g 3424 3883 N -50 0 0 33 50 0 h +.7368 g 3424 3916 N -50 0 0 34 50 0 h +.7398 g 3424 3950 N -50 0 0 33 50 0 h +.7428 g 3424 3983 N -50 0 0 34 50 0 h +.7458 g 3424 4017 N -50 0 0 34 50 0 h +.7487 g 3424 4051 N -50 0 0 33 50 0 h +.7517 g 3424 4084 N -50 0 0 34 50 0 h +.7547 g 3424 4118 N -50 0 0 33 50 0 h +.7577 g 3424 4151 N -50 0 0 34 50 0 h +.7607 g 3424 4185 N -50 0 0 34 50 0 h +.7637 g 3424 4219 N -50 0 0 33 50 0 h +.4812 g 3474 928 N -51 0 0 33 51 0 h +.484 g 3474 961 N -51 0 0 34 51 0 h +.4869 g 3474 995 N -51 0 0 34 51 0 h +.4897 g 3474 1029 N -51 0 0 33 51 0 h +.4925 g 3474 1062 N -51 0 0 34 51 0 h +.4954 g 3474 1096 N -51 0 0 33 51 0 h +.4982 g 3474 1129 N -51 0 0 34 51 0 h +.501 g 3474 1163 N -51 0 0 34 51 0 h +.5039 g 3474 1197 N -51 0 0 33 51 0 h +.5067 g 3474 1230 N -51 0 0 34 51 0 h +.5095 g 3474 1264 N -51 0 0 33 51 0 h +.5124 g 3474 1297 N -51 0 0 34 51 0 h +.5152 g 3474 1331 N -51 0 0 33 51 0 h +.518 g 3474 1364 N -51 0 0 34 51 0 h +.5209 g 3474 1398 N -51 0 0 34 51 0 h +.5237 g 3474 1432 N -51 0 0 33 51 0 h +.5265 g 3474 1465 N -51 0 0 34 51 0 h +.5293 g 3474 1499 N -51 0 0 33 51 0 h +.5322 g 3474 1532 N -51 0 0 34 51 0 h +.535 g 3474 1566 N -51 0 0 34 51 0 h +.5378 g 3474 1600 N -51 0 0 33 51 0 h +.5407 g 3474 1633 N -51 0 0 34 51 0 h +.5435 g 3474 1667 N -51 0 0 33 51 0 h +.5463 g 3474 1700 N -51 0 0 34 51 0 h +.5492 g 3474 1734 N -51 0 0 34 51 0 h +.552 g 3474 1768 N -51 0 0 33 51 0 h +.5548 g 3474 1801 N -51 0 0 34 51 0 h +.5577 g 3474 1835 N -51 0 0 33 51 0 h +.5605 g 3474 1868 N -51 0 0 34 51 0 h +.5633 g 3474 1902 N -51 0 0 33 51 0 h +.5662 g 3474 1935 N -51 0 0 34 51 0 h +.569 g 3474 1969 N -51 0 0 34 51 0 h +.5718 g 3474 2003 N -51 0 0 33 51 0 h +.5746 g 3474 2036 N -51 0 0 34 51 0 h +.5775 g 3474 2070 N -51 0 0 33 51 0 h +.5803 g 3474 2103 N -51 0 0 34 51 0 h +.5831 g 3474 2137 N -51 0 0 34 51 0 h +.586 g 3474 2171 N -51 0 0 33 51 0 h +.5888 g 3474 2204 N -51 0 0 34 51 0 h +.5916 g 3474 2238 N -51 0 0 33 51 0 h +.5945 g 3474 2271 N -51 0 0 34 51 0 h +.5973 g 3474 2305 N -51 0 0 34 51 0 h +.6001 g 3474 2339 N -51 0 0 33 51 0 h +.603 g 3474 2372 N -51 0 0 34 51 0 h +.6058 g 3474 2406 N -51 0 0 33 51 0 h +.6086 g 3474 2439 N -51 0 0 34 51 0 h +.6115 g 3474 2473 N -51 0 0 34 51 0 h +.6143 g 3474 2507 N -51 0 0 33 51 0 h +.6171 g 3474 2540 N -51 0 0 34 51 0 h +.6199 g 3474 2574 N -51 0 0 32 51 0 h +.6228 g 3474 2606 N -51 0 0 34 51 0 h +.6256 g 3474 2640 N -51 0 0 33 51 0 h +.6284 g 3474 2673 N -51 0 0 34 51 0 h +.6313 g 3474 2707 N -51 0 0 34 51 0 h +.6341 g 3474 2741 N -51 0 0 33 51 0 h +.6369 g 3474 2774 N -51 0 0 34 51 0 h +.6398 g 3474 2808 N -51 0 0 33 51 0 h +.6426 g 3474 2841 N -51 0 0 34 51 0 h +.6454 g 3474 2875 N -51 0 0 34 51 0 h +.6483 g 3474 2909 N -51 0 0 33 51 0 h +.6511 g 3474 2942 N -51 0 0 34 51 0 h +.6539 g 3474 2976 N -51 0 0 33 51 0 h +.6568 g 3474 3009 N -51 0 0 34 51 0 h +.6596 g 3474 3043 N -51 0 0 34 51 0 h +.6624 g 3474 3077 N -51 0 0 33 51 0 h +.6653 g 3474 3110 N -51 0 0 34 51 0 h +.6681 g 3474 3144 N -51 0 0 33 51 0 h +.6709 g 3474 3177 N -51 0 0 34 51 0 h +.6737 g 3474 3211 N -51 0 0 34 51 0 h +.6766 g 3474 3245 N -51 0 0 33 51 0 h +.6794 g 3474 3278 N -51 0 0 34 51 0 h +.6822 g 3474 3312 N -51 0 0 33 51 0 h +.6851 g 3474 3345 N -51 0 0 34 51 0 h +.6879 g 3474 3379 N -51 0 0 33 51 0 h +.6907 g 3474 3412 N -51 0 0 34 51 0 h +.6936 g 3474 3446 N -51 0 0 34 51 0 h +.6964 g 3474 3480 N -51 0 0 33 51 0 h +.6992 g 3474 3513 N -51 0 0 34 51 0 h +.7021 g 3474 3547 N -51 0 0 33 51 0 h +.7049 g 3474 3580 N -51 0 0 34 51 0 h +.7077 g 3474 3614 N -51 0 0 34 51 0 h +.7106 g 3474 3648 N -51 0 0 33 51 0 h +.7134 g 3474 3681 N -51 0 0 34 51 0 h +.7162 g 3474 3715 N -51 0 0 33 51 0 h +.719 g 3474 3748 N -51 0 0 34 51 0 h +.7219 g 3474 3782 N -51 0 0 34 51 0 h +.7247 g 3474 3816 N -51 0 0 33 51 0 h +.7275 g 3474 3849 N -51 0 0 34 51 0 h +.7304 g 3474 3883 N -51 0 0 33 51 0 h +.7332 g 3474 3916 N -51 0 0 34 51 0 h +.736 g 3474 3950 N -51 0 0 33 51 0 h +.7389 g 3474 3983 N -51 0 0 34 51 0 h +.7417 g 3474 4017 N -51 0 0 34 51 0 h +.7445 g 3474 4051 N -51 0 0 33 51 0 h +.7474 g 3474 4084 N -51 0 0 34 51 0 h +.7502 g 3474 4118 N -51 0 0 33 51 0 h +.753 g 3474 4151 N -51 0 0 34 51 0 h +.7559 g 3474 4185 N -51 0 0 34 51 0 h +.7587 g 3474 4219 N -51 0 0 33 51 0 h +.4912 g 3525 928 N -50 0 0 33 50 0 h +.4939 g 3525 961 N -50 0 0 34 50 0 h +.4966 g 3525 995 N -50 0 0 34 50 0 h +.4993 g 3525 1029 N -50 0 0 33 50 0 h +.502 g 3525 1062 N -50 0 0 34 50 0 h +.5046 g 3525 1096 N -50 0 0 33 50 0 h +.5073 g 3525 1129 N -50 0 0 34 50 0 h +.51 g 3525 1163 N -50 0 0 34 50 0 h +.5127 g 3525 1197 N -50 0 0 33 50 0 h +.5153 g 3525 1230 N -50 0 0 34 50 0 h +.518 g 3525 1264 N -50 0 0 33 50 0 h +.5207 g 3525 1297 N -50 0 0 34 50 0 h +.5234 g 3525 1331 N -50 0 0 33 50 0 h +.5261 g 3525 1364 N -50 0 0 34 50 0 h +.5287 g 3525 1398 N -50 0 0 34 50 0 h +.5314 g 3525 1432 N -50 0 0 33 50 0 h +.5341 g 3525 1465 N -50 0 0 34 50 0 h +.5368 g 3525 1499 N -50 0 0 33 50 0 h +.5394 g 3525 1532 N -50 0 0 34 50 0 h +.5421 g 3525 1566 N -50 0 0 34 50 0 h +.5448 g 3525 1600 N -50 0 0 33 50 0 h +.5475 g 3525 1633 N -50 0 0 34 50 0 h +.5502 g 3525 1667 N -50 0 0 33 50 0 h +.5528 g 3525 1700 N -50 0 0 34 50 0 h +.5555 g 3525 1734 N -50 0 0 34 50 0 h +.5582 g 3525 1768 N -50 0 0 33 50 0 h +.5609 g 3525 1801 N -50 0 0 34 50 0 h +.5636 g 3525 1835 N -50 0 0 33 50 0 h +.5662 g 3525 1868 N -50 0 0 34 50 0 h +.5689 g 3525 1902 N -50 0 0 33 50 0 h +.5716 g 3525 1935 N -50 0 0 34 50 0 h +.5743 g 3525 1969 N -50 0 0 34 50 0 h +.5769 g 3525 2003 N -50 0 0 33 50 0 h +.5796 g 3525 2036 N -50 0 0 34 50 0 h +.5823 g 3525 2070 N -50 0 0 33 50 0 h +.585 g 3525 2103 N -50 0 0 34 50 0 h +.5877 g 3525 2137 N -50 0 0 34 50 0 h +.5903 g 3525 2171 N -50 0 0 33 50 0 h +.593 g 3525 2204 N -50 0 0 34 50 0 h +.5957 g 3525 2238 N -50 0 0 33 50 0 h +.5984 g 3525 2271 N -50 0 0 34 50 0 h +.601 g 3525 2305 N -50 0 0 34 50 0 h +.6037 g 3525 2339 N -50 0 0 33 50 0 h +.6064 g 3525 2372 N -50 0 0 34 50 0 h +.6091 g 3525 2406 N -50 0 0 33 50 0 h +.6118 g 3525 2439 N -50 0 0 34 50 0 h +.6144 g 3525 2473 N -50 0 0 34 50 0 h +.6171 g 3525 2507 N -50 0 0 33 50 0 h +.6198 g 3525 2540 N -50 0 0 34 50 0 h +.6225 g 3525 2574 N -50 0 0 32 50 0 h +.6252 g 3525 2606 N -50 0 0 34 50 0 h +.6278 g 3525 2640 N -50 0 0 33 50 0 h +.6305 g 3525 2673 N -50 0 0 34 50 0 h +.6332 g 3525 2707 N -50 0 0 34 50 0 h +.6359 g 3525 2741 N -50 0 0 33 50 0 h +.6385 g 3525 2774 N -50 0 0 34 50 0 h +.6412 g 3525 2808 N -50 0 0 33 50 0 h +.6439 g 3525 2841 N -50 0 0 34 50 0 h +.6466 g 3525 2875 N -50 0 0 34 50 0 h +.6493 g 3525 2909 N -50 0 0 33 50 0 h +.6519 g 3525 2942 N -50 0 0 34 50 0 h +.6546 g 3525 2976 N -50 0 0 33 50 0 h +.6573 g 3525 3009 N -50 0 0 34 50 0 h +.66 g 3525 3043 N -50 0 0 34 50 0 h +.6626 g 3525 3077 N -50 0 0 33 50 0 h +.6653 g 3525 3110 N -50 0 0 34 50 0 h +.668 g 3525 3144 N -50 0 0 33 50 0 h +.6707 g 3525 3177 N -50 0 0 34 50 0 h +.6734 g 3525 3211 N -50 0 0 34 50 0 h +.676 g 3525 3245 N -50 0 0 33 50 0 h +.6787 g 3525 3278 N -50 0 0 34 50 0 h +.6814 g 3525 3312 N -50 0 0 33 50 0 h +.6841 g 3525 3345 N -50 0 0 34 50 0 h +.6868 g 3525 3379 N -50 0 0 33 50 0 h +.6894 g 3525 3412 N -50 0 0 34 50 0 h +.6921 g 3525 3446 N -50 0 0 34 50 0 h +.6948 g 3525 3480 N -50 0 0 33 50 0 h +.6975 g 3525 3513 N -50 0 0 34 50 0 h +.7001 g 3525 3547 N -50 0 0 33 50 0 h +.7028 g 3525 3580 N -50 0 0 34 50 0 h +.7055 g 3525 3614 N -50 0 0 34 50 0 h +.7082 g 3525 3648 N -50 0 0 33 50 0 h +.7109 g 3525 3681 N -50 0 0 34 50 0 h +.7135 g 3525 3715 N -50 0 0 33 50 0 h +.7162 g 3525 3748 N -50 0 0 34 50 0 h +.7189 g 3525 3782 N -50 0 0 34 50 0 h +.7216 g 3525 3816 N -50 0 0 33 50 0 h +.7243 g 3525 3849 N -50 0 0 34 50 0 h +.7269 g 3525 3883 N -50 0 0 33 50 0 h +.7296 g 3525 3916 N -50 0 0 34 50 0 h +.7323 g 3525 3950 N -50 0 0 33 50 0 h +.735 g 3525 3983 N -50 0 0 34 50 0 h +.7376 g 3525 4017 N -50 0 0 34 50 0 h +.7403 g 3525 4051 N -50 0 0 33 50 0 h +.743 g 3525 4084 N -50 0 0 34 50 0 h +.7457 g 3525 4118 N -50 0 0 33 50 0 h +.7484 g 3525 4151 N -50 0 0 34 50 0 h +.751 g 3525 4185 N -50 0 0 34 50 0 h +.7537 g 3525 4219 N -50 0 0 33 50 0 h +.5013 g 3575 928 N -50 0 0 33 50 0 h +.5038 g 3575 961 N -50 0 0 34 50 0 h +.5063 g 3575 995 N -50 0 0 34 50 0 h +.5088 g 3575 1029 N -50 0 0 33 50 0 h +.5114 g 3575 1062 N -50 0 0 34 50 0 h +.5139 g 3575 1096 N -50 0 0 33 50 0 h +.5164 g 3575 1129 N -50 0 0 34 50 0 h +.5189 g 3575 1163 N -50 0 0 34 50 0 h +.5215 g 3575 1197 N -50 0 0 33 50 0 h +.524 g 3575 1230 N -50 0 0 34 50 0 h +.5265 g 3575 1264 N -50 0 0 33 50 0 h +.529 g 3575 1297 N -50 0 0 34 50 0 h +.5316 g 3575 1331 N -50 0 0 33 50 0 h +.5341 g 3575 1364 N -50 0 0 34 50 0 h +.5366 g 3575 1398 N -50 0 0 34 50 0 h +.5391 g 3575 1432 N -50 0 0 33 50 0 h +.5417 g 3575 1465 N -50 0 0 34 50 0 h +.5442 g 3575 1499 N -50 0 0 33 50 0 h +.5467 g 3575 1532 N -50 0 0 34 50 0 h +.5492 g 3575 1566 N -50 0 0 34 50 0 h +.5518 g 3575 1600 N -50 0 0 33 50 0 h +.5543 g 3575 1633 N -50 0 0 34 50 0 h +.5568 g 3575 1667 N -50 0 0 33 50 0 h +.5593 g 3575 1700 N -50 0 0 34 50 0 h +.5619 g 3575 1734 N -50 0 0 34 50 0 h +.5644 g 3575 1768 N -50 0 0 33 50 0 h +.5669 g 3575 1801 N -50 0 0 34 50 0 h +.5694 g 3575 1835 N -50 0 0 33 50 0 h +.572 g 3575 1868 N -50 0 0 34 50 0 h +.5745 g 3575 1902 N -50 0 0 33 50 0 h +.577 g 3575 1935 N -50 0 0 34 50 0 h +.5795 g 3575 1969 N -50 0 0 34 50 0 h +.5821 g 3575 2003 N -50 0 0 33 50 0 h +.5846 g 3575 2036 N -50 0 0 34 50 0 h +.5871 g 3575 2070 N -50 0 0 33 50 0 h +.5896 g 3575 2103 N -50 0 0 34 50 0 h +.5922 g 3575 2137 N -50 0 0 34 50 0 h +.5947 g 3575 2171 N -50 0 0 33 50 0 h +.5972 g 3575 2204 N -50 0 0 34 50 0 h +.5997 g 3575 2238 N -50 0 0 33 50 0 h +.6023 g 3575 2271 N -50 0 0 34 50 0 h +.6048 g 3575 2305 N -50 0 0 34 50 0 h +.6073 g 3575 2339 N -50 0 0 33 50 0 h +.6098 g 3575 2372 N -50 0 0 34 50 0 h +.6124 g 3575 2406 N -50 0 0 33 50 0 h +.6149 g 3575 2439 N -50 0 0 34 50 0 h +.6174 g 3575 2473 N -50 0 0 34 50 0 h +.6199 g 3575 2507 N -50 0 0 33 50 0 h +.6225 g 3575 2540 N -50 0 0 34 50 0 h +.625 g 3575 2574 N -50 0 0 32 50 0 h +.6275 g 3575 2606 N -50 0 0 34 50 0 h +.6301 g 3575 2640 N -50 0 0 33 50 0 h +.6326 g 3575 2673 N -50 0 0 34 50 0 h +.6351 g 3575 2707 N -50 0 0 34 50 0 h +.6376 g 3575 2741 N -50 0 0 33 50 0 h +.6402 g 3575 2774 N -50 0 0 34 50 0 h +.6427 g 3575 2808 N -50 0 0 33 50 0 h +.6452 g 3575 2841 N -50 0 0 34 50 0 h +.6477 g 3575 2875 N -50 0 0 34 50 0 h +.6503 g 3575 2909 N -50 0 0 33 50 0 h +.6528 g 3575 2942 N -50 0 0 34 50 0 h +.6553 g 3575 2976 N -50 0 0 33 50 0 h +.6578 g 3575 3009 N -50 0 0 34 50 0 h +.6604 g 3575 3043 N -50 0 0 34 50 0 h +.6629 g 3575 3077 N -50 0 0 33 50 0 h +.6654 g 3575 3110 N -50 0 0 34 50 0 h +.6679 g 3575 3144 N -50 0 0 33 50 0 h +.6705 g 3575 3177 N -50 0 0 34 50 0 h +.673 g 3575 3211 N -50 0 0 34 50 0 h +.6755 g 3575 3245 N -50 0 0 33 50 0 h +.678 g 3575 3278 N -50 0 0 34 50 0 h +.6806 g 3575 3312 N -50 0 0 33 50 0 h +.6831 g 3575 3345 N -50 0 0 34 50 0 h +.6856 g 3575 3379 N -50 0 0 33 50 0 h +.6881 g 3575 3412 N -50 0 0 34 50 0 h +.6907 g 3575 3446 N -50 0 0 34 50 0 h +.6932 g 3575 3480 N -50 0 0 33 50 0 h +.6957 g 3575 3513 N -50 0 0 34 50 0 h +.6982 g 3575 3547 N -50 0 0 33 50 0 h +.7008 g 3575 3580 N -50 0 0 34 50 0 h +.7033 g 3575 3614 N -50 0 0 34 50 0 h +.7058 g 3575 3648 N -50 0 0 33 50 0 h +.7083 g 3575 3681 N -50 0 0 34 50 0 h +.7109 g 3575 3715 N -50 0 0 33 50 0 h +.7134 g 3575 3748 N -50 0 0 34 50 0 h +.7159 g 3575 3782 N -50 0 0 34 50 0 h +.7184 g 3575 3816 N -50 0 0 33 50 0 h +.721 g 3575 3849 N -50 0 0 34 50 0 h +.7235 g 3575 3883 N -50 0 0 33 50 0 h +.726 g 3575 3916 N -50 0 0 34 50 0 h +.7285 g 3575 3950 N -50 0 0 33 50 0 h +.7311 g 3575 3983 N -50 0 0 34 50 0 h +.7336 g 3575 4017 N -50 0 0 34 50 0 h +.7361 g 3575 4051 N -50 0 0 33 50 0 h +.7386 g 3575 4084 N -50 0 0 34 50 0 h +.7412 g 3575 4118 N -50 0 0 33 50 0 h +.7437 g 3575 4151 N -50 0 0 34 50 0 h +.7462 g 3575 4185 N -50 0 0 34 50 0 h +.7487 g 3575 4219 N -50 0 0 33 50 0 h +.5113 g 3625 928 N -50 0 0 33 50 0 h +.5137 g 3625 961 N -50 0 0 34 50 0 h +.516 g 3625 995 N -50 0 0 34 50 0 h +.5184 g 3625 1029 N -50 0 0 33 50 0 h +.5208 g 3625 1062 N -50 0 0 34 50 0 h +.5231 g 3625 1096 N -50 0 0 33 50 0 h +.5255 g 3625 1129 N -50 0 0 34 50 0 h +.5279 g 3625 1163 N -50 0 0 34 50 0 h +.5303 g 3625 1197 N -50 0 0 33 50 0 h +.5326 g 3625 1230 N -50 0 0 34 50 0 h +.535 g 3625 1264 N -50 0 0 33 50 0 h +.5374 g 3625 1297 N -50 0 0 34 50 0 h +.5398 g 3625 1331 N -50 0 0 33 50 0 h +.5421 g 3625 1364 N -50 0 0 34 50 0 h +.5445 g 3625 1398 N -50 0 0 34 50 0 h +.5469 g 3625 1432 N -50 0 0 33 50 0 h +.5492 g 3625 1465 N -50 0 0 34 50 0 h +.5516 g 3625 1499 N -50 0 0 33 50 0 h +.554 g 3625 1532 N -50 0 0 34 50 0 h +.5564 g 3625 1566 N -50 0 0 34 50 0 h +.5587 g 3625 1600 N -50 0 0 33 50 0 h +.5611 g 3625 1633 N -50 0 0 34 50 0 h +.5635 g 3625 1667 N -50 0 0 33 50 0 h +.5658 g 3625 1700 N -50 0 0 34 50 0 h +.5682 g 3625 1734 N -50 0 0 34 50 0 h +.5706 g 3625 1768 N -50 0 0 33 50 0 h +.573 g 3625 1801 N -50 0 0 34 50 0 h +.5753 g 3625 1835 N -50 0 0 33 50 0 h +.5777 g 3625 1868 N -50 0 0 34 50 0 h +.5801 g 3625 1902 N -50 0 0 33 50 0 h +.5825 g 3625 1935 N -50 0 0 34 50 0 h +.5848 g 3625 1969 N -50 0 0 34 50 0 h +.5872 g 3625 2003 N -50 0 0 33 50 0 h +.5896 g 3625 2036 N -50 0 0 34 50 0 h +.5919 g 3625 2070 N -50 0 0 33 50 0 h +.5943 g 3625 2103 N -50 0 0 34 50 0 h +.5967 g 3625 2137 N -50 0 0 34 50 0 h +.5991 g 3625 2171 N -50 0 0 33 50 0 h +.6014 g 3625 2204 N -50 0 0 34 50 0 h +.6038 g 3625 2238 N -50 0 0 33 50 0 h +.6062 g 3625 2271 N -50 0 0 34 50 0 h +.6085 g 3625 2305 N -50 0 0 34 50 0 h +.6109 g 3625 2339 N -50 0 0 33 50 0 h +.6133 g 3625 2372 N -50 0 0 34 50 0 h +.6157 g 3625 2406 N -50 0 0 33 50 0 h +.618 g 3625 2439 N -50 0 0 34 50 0 h +.6204 g 3625 2473 N -50 0 0 34 50 0 h +.6228 g 3625 2507 N -50 0 0 33 50 0 h +.6252 g 3625 2540 N -50 0 0 34 50 0 h +.6275 g 3625 2574 N -50 0 0 32 50 0 h +.6299 g 3625 2606 N -50 0 0 34 50 0 h +.6323 g 3625 2640 N -50 0 0 33 50 0 h +.6346 g 3625 2673 N -50 0 0 34 50 0 h +.637 g 3625 2707 N -50 0 0 34 50 0 h +.6394 g 3625 2741 N -50 0 0 33 50 0 h +.6418 g 3625 2774 N -50 0 0 34 50 0 h +.6441 g 3625 2808 N -50 0 0 33 50 0 h +.6465 g 3625 2841 N -50 0 0 34 50 0 h +.6489 g 3625 2875 N -50 0 0 34 50 0 h +.6512 g 3625 2909 N -50 0 0 33 50 0 h +.6536 g 3625 2942 N -50 0 0 34 50 0 h +.656 g 3625 2976 N -50 0 0 33 50 0 h +.6584 g 3625 3009 N -50 0 0 34 50 0 h +.6607 g 3625 3043 N -50 0 0 34 50 0 h +.6631 g 3625 3077 N -50 0 0 33 50 0 h +.6655 g 3625 3110 N -50 0 0 34 50 0 h +.6679 g 3625 3144 N -50 0 0 33 50 0 h +.6702 g 3625 3177 N -50 0 0 34 50 0 h +.6726 g 3625 3211 N -50 0 0 34 50 0 h +.675 g 3625 3245 N -50 0 0 33 50 0 h +.6773 g 3625 3278 N -50 0 0 34 50 0 h +.6797 g 3625 3312 N -50 0 0 33 50 0 h +.6821 g 3625 3345 N -50 0 0 34 50 0 h +.6845 g 3625 3379 N -50 0 0 33 50 0 h +.6868 g 3625 3412 N -50 0 0 34 50 0 h +.6892 g 3625 3446 N -50 0 0 34 50 0 h +.6916 g 3625 3480 N -50 0 0 33 50 0 h +.6939 g 3625 3513 N -50 0 0 34 50 0 h +.6963 g 3625 3547 N -50 0 0 33 50 0 h +.6987 g 3625 3580 N -50 0 0 34 50 0 h +.7011 g 3625 3614 N -50 0 0 34 50 0 h +.7034 g 3625 3648 N -50 0 0 33 50 0 h +.7058 g 3625 3681 N -50 0 0 34 50 0 h +.7082 g 3625 3715 N -50 0 0 33 50 0 h +.7106 g 3625 3748 N -50 0 0 34 50 0 h +.7129 g 3625 3782 N -50 0 0 34 50 0 h +.7153 g 3625 3816 N -50 0 0 33 50 0 h +.7177 g 3625 3849 N -50 0 0 34 50 0 h +.72 g 3625 3883 N -50 0 0 33 50 0 h +.7224 g 3625 3916 N -50 0 0 34 50 0 h +.7248 g 3625 3950 N -50 0 0 33 50 0 h +.7272 g 3625 3983 N -50 0 0 34 50 0 h +.7295 g 3625 4017 N -50 0 0 34 50 0 h +.7319 g 3625 4051 N -50 0 0 33 50 0 h +.7343 g 3625 4084 N -50 0 0 34 50 0 h +.7366 g 3625 4118 N -50 0 0 33 50 0 h +.739 g 3625 4151 N -50 0 0 34 50 0 h +.7414 g 3625 4185 N -50 0 0 34 50 0 h +.7438 g 3625 4219 N -50 0 0 33 50 0 h +.5213 g 3675 928 N -51 0 0 33 51 0 h +.5235 g 3675 961 N -51 0 0 34 51 0 h +.5258 g 3675 995 N -51 0 0 34 51 0 h +.528 g 3675 1029 N -51 0 0 33 51 0 h +.5302 g 3675 1062 N -51 0 0 34 51 0 h +.5324 g 3675 1096 N -51 0 0 33 51 0 h +.5346 g 3675 1129 N -51 0 0 34 51 0 h +.5368 g 3675 1163 N -51 0 0 34 51 0 h +.5391 g 3675 1197 N -51 0 0 33 51 0 h +.5413 g 3675 1230 N -51 0 0 34 51 0 h +.5435 g 3675 1264 N -51 0 0 33 51 0 h +.5457 g 3675 1297 N -51 0 0 34 51 0 h +.5479 g 3675 1331 N -51 0 0 33 51 0 h +.5502 g 3675 1364 N -51 0 0 34 51 0 h +.5524 g 3675 1398 N -51 0 0 34 51 0 h +.5546 g 3675 1432 N -51 0 0 33 51 0 h +.5568 g 3675 1465 N -51 0 0 34 51 0 h +.559 g 3675 1499 N -51 0 0 33 51 0 h +.5613 g 3675 1532 N -51 0 0 34 51 0 h +.5635 g 3675 1566 N -51 0 0 34 51 0 h +.5657 g 3675 1600 N -51 0 0 33 51 0 h +.5679 g 3675 1633 N -51 0 0 34 51 0 h +.5701 g 3675 1667 N -51 0 0 33 51 0 h +.5724 g 3675 1700 N -51 0 0 34 51 0 h +.5746 g 3675 1734 N -51 0 0 34 51 0 h +.5768 g 3675 1768 N -51 0 0 33 51 0 h +.579 g 3675 1801 N -51 0 0 34 51 0 h +.5812 g 3675 1835 N -51 0 0 33 51 0 h +.5834 g 3675 1868 N -51 0 0 34 51 0 h +.5857 g 3675 1902 N -51 0 0 33 51 0 h +.5879 g 3675 1935 N -51 0 0 34 51 0 h +.5901 g 3675 1969 N -51 0 0 34 51 0 h +.5923 g 3675 2003 N -51 0 0 33 51 0 h +.5945 g 3675 2036 N -51 0 0 34 51 0 h +.5968 g 3675 2070 N -51 0 0 33 51 0 h +.599 g 3675 2103 N -51 0 0 34 51 0 h +.6012 g 3675 2137 N -51 0 0 34 51 0 h +.6034 g 3675 2171 N -51 0 0 33 51 0 h +.6056 g 3675 2204 N -51 0 0 34 51 0 h +.6079 g 3675 2238 N -51 0 0 33 51 0 h +.6101 g 3675 2271 N -51 0 0 34 51 0 h +.6123 g 3675 2305 N -51 0 0 34 51 0 h +.6145 g 3675 2339 N -51 0 0 33 51 0 h +.6167 g 3675 2372 N -51 0 0 34 51 0 h +.619 g 3675 2406 N -51 0 0 33 51 0 h +.6212 g 3675 2439 N -51 0 0 34 51 0 h +.6234 g 3675 2473 N -51 0 0 34 51 0 h +.6256 g 3675 2507 N -51 0 0 33 51 0 h +.6278 g 3675 2540 N -51 0 0 34 51 0 h +.6301 g 3675 2574 N -51 0 0 32 51 0 h +.6323 g 3675 2606 N -51 0 0 34 51 0 h +.6345 g 3675 2640 N -51 0 0 33 51 0 h +.6367 g 3675 2673 N -51 0 0 34 51 0 h +.6389 g 3675 2707 N -51 0 0 34 51 0 h +.6411 g 3675 2741 N -51 0 0 33 51 0 h +.6434 g 3675 2774 N -51 0 0 34 51 0 h +.6456 g 3675 2808 N -51 0 0 33 51 0 h +.6478 g 3675 2841 N -51 0 0 34 51 0 h +.65 g 3675 2875 N -51 0 0 34 51 0 h +.6522 g 3675 2909 N -51 0 0 33 51 0 h +.6545 g 3675 2942 N -51 0 0 34 51 0 h +.6567 g 3675 2976 N -51 0 0 33 51 0 h +.6589 g 3675 3009 N -51 0 0 34 51 0 h +.6611 g 3675 3043 N -51 0 0 34 51 0 h +.6633 g 3675 3077 N -51 0 0 33 51 0 h +.6656 g 3675 3110 N -51 0 0 34 51 0 h +.6678 g 3675 3144 N -51 0 0 33 51 0 h +.67 g 3675 3177 N -51 0 0 34 51 0 h +.6722 g 3675 3211 N -51 0 0 34 51 0 h +.6744 g 3675 3245 N -51 0 0 33 51 0 h +.6767 g 3675 3278 N -51 0 0 34 51 0 h +.6789 g 3675 3312 N -51 0 0 33 51 0 h +.6811 g 3675 3345 N -51 0 0 34 51 0 h +.6833 g 3675 3379 N -51 0 0 33 51 0 h +.6855 g 3675 3412 N -51 0 0 34 51 0 h +.6877 g 3675 3446 N -51 0 0 34 51 0 h +.69 g 3675 3480 N -51 0 0 33 51 0 h +.6922 g 3675 3513 N -51 0 0 34 51 0 h +.6944 g 3675 3547 N -51 0 0 33 51 0 h +.6966 g 3675 3580 N -51 0 0 34 51 0 h +.6988 g 3675 3614 N -51 0 0 34 51 0 h +.7011 g 3675 3648 N -51 0 0 33 51 0 h +.7033 g 3675 3681 N -51 0 0 34 51 0 h +.7055 g 3675 3715 N -51 0 0 33 51 0 h +.7077 g 3675 3748 N -51 0 0 34 51 0 h +.7099 g 3675 3782 N -51 0 0 34 51 0 h +.7122 g 3675 3816 N -51 0 0 33 51 0 h +.7144 g 3675 3849 N -51 0 0 34 51 0 h +.7166 g 3675 3883 N -51 0 0 33 51 0 h +.7188 g 3675 3916 N -51 0 0 34 51 0 h +.721 g 3675 3950 N -51 0 0 33 51 0 h +.7233 g 3675 3983 N -51 0 0 34 51 0 h +.7255 g 3675 4017 N -51 0 0 34 51 0 h +.7277 g 3675 4051 N -51 0 0 33 51 0 h +.7299 g 3675 4084 N -51 0 0 34 51 0 h +.7321 g 3675 4118 N -51 0 0 33 51 0 h +.7344 g 3675 4151 N -51 0 0 34 51 0 h +.7366 g 3675 4185 N -51 0 0 34 51 0 h +.7388 g 3675 4219 N -51 0 0 33 51 0 h +.5313 g 3726 928 N -50 0 0 33 50 0 h +.5334 g 3726 961 N -50 0 0 34 50 0 h +.5355 g 3726 995 N -50 0 0 34 50 0 h +.5375 g 3726 1029 N -50 0 0 33 50 0 h +.5396 g 3726 1062 N -50 0 0 34 50 0 h +.5417 g 3726 1096 N -50 0 0 33 50 0 h +.5437 g 3726 1129 N -50 0 0 34 50 0 h +.5458 g 3726 1163 N -50 0 0 34 50 0 h +.5479 g 3726 1197 N -50 0 0 33 50 0 h +.5499 g 3726 1230 N -50 0 0 34 50 0 h +.552 g 3726 1264 N -50 0 0 33 50 0 h +.5541 g 3726 1297 N -50 0 0 34 50 0 h +.5561 g 3726 1331 N -50 0 0 33 50 0 h +.5582 g 3726 1364 N -50 0 0 34 50 0 h +.5603 g 3726 1398 N -50 0 0 34 50 0 h +.5623 g 3726 1432 N -50 0 0 33 50 0 h +.5644 g 3726 1465 N -50 0 0 34 50 0 h +.5665 g 3726 1499 N -50 0 0 33 50 0 h +.5685 g 3726 1532 N -50 0 0 34 50 0 h +.5706 g 3726 1566 N -50 0 0 34 50 0 h +.5727 g 3726 1600 N -50 0 0 33 50 0 h +.5747 g 3726 1633 N -50 0 0 34 50 0 h +.5768 g 3726 1667 N -50 0 0 33 50 0 h +.5789 g 3726 1700 N -50 0 0 34 50 0 h +.5809 g 3726 1734 N -50 0 0 34 50 0 h +.583 g 3726 1768 N -50 0 0 33 50 0 h +.5851 g 3726 1801 N -50 0 0 34 50 0 h +.5871 g 3726 1835 N -50 0 0 33 50 0 h +.5892 g 3726 1868 N -50 0 0 34 50 0 h +.5913 g 3726 1902 N -50 0 0 33 50 0 h +.5933 g 3726 1935 N -50 0 0 34 50 0 h +.5954 g 3726 1969 N -50 0 0 34 50 0 h +.5975 g 3726 2003 N -50 0 0 33 50 0 h +.5995 g 3726 2036 N -50 0 0 34 50 0 h +.6016 g 3726 2070 N -50 0 0 33 50 0 h +.6037 g 3726 2103 N -50 0 0 34 50 0 h +.6057 g 3726 2137 N -50 0 0 34 50 0 h +.6078 g 3726 2171 N -50 0 0 33 50 0 h +.6098 g 3726 2204 N -50 0 0 34 50 0 h +.6119 g 3726 2238 N -50 0 0 33 50 0 h +.614 g 3726 2271 N -50 0 0 34 50 0 h +.616 g 3726 2305 N -50 0 0 34 50 0 h +.6181 g 3726 2339 N -50 0 0 33 50 0 h +.6202 g 3726 2372 N -50 0 0 34 50 0 h +.6222 g 3726 2406 N -50 0 0 33 50 0 h +.6243 g 3726 2439 N -50 0 0 34 50 0 h +.6264 g 3726 2473 N -50 0 0 34 50 0 h +.6284 g 3726 2507 N -50 0 0 33 50 0 h +.6305 g 3726 2540 N -50 0 0 34 50 0 h +.6326 g 3726 2574 N -50 0 0 32 50 0 h +.6346 g 3726 2606 N -50 0 0 34 50 0 h +.6367 g 3726 2640 N -50 0 0 33 50 0 h +.6388 g 3726 2673 N -50 0 0 34 50 0 h +.6408 g 3726 2707 N -50 0 0 34 50 0 h +.6429 g 3726 2741 N -50 0 0 33 50 0 h +.645 g 3726 2774 N -50 0 0 34 50 0 h +.647 g 3726 2808 N -50 0 0 33 50 0 h +.6491 g 3726 2841 N -50 0 0 34 50 0 h +.6512 g 3726 2875 N -50 0 0 34 50 0 h +.6532 g 3726 2909 N -50 0 0 33 50 0 h +.6553 g 3726 2942 N -50 0 0 34 50 0 h +.6574 g 3726 2976 N -50 0 0 33 50 0 h +.6594 g 3726 3009 N -50 0 0 34 50 0 h +.6615 g 3726 3043 N -50 0 0 34 50 0 h +.6636 g 3726 3077 N -50 0 0 33 50 0 h +.6656 g 3726 3110 N -50 0 0 34 50 0 h +.6677 g 3726 3144 N -50 0 0 33 50 0 h +.6698 g 3726 3177 N -50 0 0 34 50 0 h +.6718 g 3726 3211 N -50 0 0 34 50 0 h +.6739 g 3726 3245 N -50 0 0 33 50 0 h +.676 g 3726 3278 N -50 0 0 34 50 0 h +.678 g 3726 3312 N -50 0 0 33 50 0 h +.6801 g 3726 3345 N -50 0 0 34 50 0 h +.6822 g 3726 3379 N -50 0 0 33 50 0 h +.6842 g 3726 3412 N -50 0 0 34 50 0 h +.6863 g 3726 3446 N -50 0 0 34 50 0 h +.6884 g 3726 3480 N -50 0 0 33 50 0 h +.6904 g 3726 3513 N -50 0 0 34 50 0 h +.6925 g 3726 3547 N -50 0 0 33 50 0 h +.6946 g 3726 3580 N -50 0 0 34 50 0 h +.6966 g 3726 3614 N -50 0 0 34 50 0 h +.6987 g 3726 3648 N -50 0 0 33 50 0 h +.7008 g 3726 3681 N -50 0 0 34 50 0 h +.7028 g 3726 3715 N -50 0 0 33 50 0 h +.7049 g 3726 3748 N -50 0 0 34 50 0 h +.707 g 3726 3782 N -50 0 0 34 50 0 h +.709 g 3726 3816 N -50 0 0 33 50 0 h +.7111 g 3726 3849 N -50 0 0 34 50 0 h +.7132 g 3726 3883 N -50 0 0 33 50 0 h +.7152 g 3726 3916 N -50 0 0 34 50 0 h +.7173 g 3726 3950 N -50 0 0 33 50 0 h +.7194 g 3726 3983 N -50 0 0 34 50 0 h +.7214 g 3726 4017 N -50 0 0 34 50 0 h +.7235 g 3726 4051 N -50 0 0 33 50 0 h +.7256 g 3726 4084 N -50 0 0 34 50 0 h +.7276 g 3726 4118 N -50 0 0 33 50 0 h +.7297 g 3726 4151 N -50 0 0 34 50 0 h +.7317 g 3726 4185 N -50 0 0 34 50 0 h +.7338 g 3726 4219 N -50 0 0 33 50 0 h +.5414 g 3776 928 N -51 0 0 33 51 0 h +.5433 g 3776 961 N -51 0 0 34 51 0 h +.5452 g 3776 995 N -51 0 0 34 51 0 h +.5471 g 3776 1029 N -51 0 0 33 51 0 h +.549 g 3776 1062 N -51 0 0 34 51 0 h +.5509 g 3776 1096 N -51 0 0 33 51 0 h +.5528 g 3776 1129 N -51 0 0 34 51 0 h +.5548 g 3776 1163 N -51 0 0 34 51 0 h +.5567 g 3776 1197 N -51 0 0 33 51 0 h +.5586 g 3776 1230 N -51 0 0 34 51 0 h +.5605 g 3776 1264 N -51 0 0 33 51 0 h +.5624 g 3776 1297 N -51 0 0 34 51 0 h +.5643 g 3776 1331 N -51 0 0 33 51 0 h +.5662 g 3776 1364 N -51 0 0 34 51 0 h +.5681 g 3776 1398 N -51 0 0 34 51 0 h +.5701 g 3776 1432 N -51 0 0 33 51 0 h +.572 g 3776 1465 N -51 0 0 34 51 0 h +.5739 g 3776 1499 N -51 0 0 33 51 0 h +.5758 g 3776 1532 N -51 0 0 34 51 0 h +.5777 g 3776 1566 N -51 0 0 34 51 0 h +.5796 g 3776 1600 N -51 0 0 33 51 0 h +.5815 g 3776 1633 N -51 0 0 34 51 0 h +.5834 g 3776 1667 N -51 0 0 33 51 0 h +.5854 g 3776 1700 N -51 0 0 34 51 0 h +.5873 g 3776 1734 N -51 0 0 34 51 0 h +.5892 g 3776 1768 N -51 0 0 33 51 0 h +.5911 g 3776 1801 N -51 0 0 34 51 0 h +.593 g 3776 1835 N -51 0 0 33 51 0 h +.5949 g 3776 1868 N -51 0 0 34 51 0 h +.5968 g 3776 1902 N -51 0 0 33 51 0 h +.5988 g 3776 1935 N -51 0 0 34 51 0 h +.6007 g 3776 1969 N -51 0 0 34 51 0 h +.6026 g 3776 2003 N -51 0 0 33 51 0 h +.6045 g 3776 2036 N -51 0 0 34 51 0 h +.6064 g 3776 2070 N -51 0 0 33 51 0 h +.6083 g 3776 2103 N -51 0 0 34 51 0 h +.6102 g 3776 2137 N -51 0 0 34 51 0 h +.6121 g 3776 2171 N -51 0 0 33 51 0 h +.6141 g 3776 2204 N -51 0 0 34 51 0 h +.616 g 3776 2238 N -51 0 0 33 51 0 h +.6179 g 3776 2271 N -51 0 0 34 51 0 h +.6198 g 3776 2305 N -51 0 0 34 51 0 h +.6217 g 3776 2339 N -51 0 0 33 51 0 h +.6236 g 3776 2372 N -51 0 0 34 51 0 h +.6255 g 3776 2406 N -51 0 0 33 51 0 h +.6274 g 3776 2439 N -51 0 0 34 51 0 h +.6294 g 3776 2473 N -51 0 0 34 51 0 h +.6313 g 3776 2507 N -51 0 0 33 51 0 h +.6332 g 3776 2540 N -51 0 0 34 51 0 h +.6351 g 3776 2574 N -51 0 0 32 51 0 h +.637 g 3776 2606 N -51 0 0 34 51 0 h +.6389 g 3776 2640 N -51 0 0 33 51 0 h +.6408 g 3776 2673 N -51 0 0 34 51 0 h +.6428 g 3776 2707 N -51 0 0 34 51 0 h +.6447 g 3776 2741 N -51 0 0 33 51 0 h +.6466 g 3776 2774 N -51 0 0 34 51 0 h +.6485 g 3776 2808 N -51 0 0 33 51 0 h +.6504 g 3776 2841 N -51 0 0 34 51 0 h +.6523 g 3776 2875 N -51 0 0 34 51 0 h +.6542 g 3776 2909 N -51 0 0 33 51 0 h +.6561 g 3776 2942 N -51 0 0 34 51 0 h +.6581 g 3776 2976 N -51 0 0 33 51 0 h +.66 g 3776 3009 N -51 0 0 34 51 0 h +.6619 g 3776 3043 N -51 0 0 34 51 0 h +.6638 g 3776 3077 N -51 0 0 33 51 0 h +.6657 g 3776 3110 N -51 0 0 34 51 0 h +.6676 g 3776 3144 N -51 0 0 33 51 0 h +.6695 g 3776 3177 N -51 0 0 34 51 0 h +.6714 g 3776 3211 N -51 0 0 34 51 0 h +.6734 g 3776 3245 N -51 0 0 33 51 0 h +.6753 g 3776 3278 N -51 0 0 34 51 0 h +.6772 g 3776 3312 N -51 0 0 33 51 0 h +.6791 g 3776 3345 N -51 0 0 34 51 0 h +.681 g 3776 3379 N -51 0 0 33 51 0 h +.6829 g 3776 3412 N -51 0 0 34 51 0 h +.6848 g 3776 3446 N -51 0 0 34 51 0 h +.6868 g 3776 3480 N -51 0 0 33 51 0 h +.6887 g 3776 3513 N -51 0 0 34 51 0 h +.6906 g 3776 3547 N -51 0 0 33 51 0 h +.6925 g 3776 3580 N -51 0 0 34 51 0 h +.6944 g 3776 3614 N -51 0 0 34 51 0 h +.6963 g 3776 3648 N -51 0 0 33 51 0 h +.6982 g 3776 3681 N -51 0 0 34 51 0 h +.7001 g 3776 3715 N -51 0 0 33 51 0 h +.7021 g 3776 3748 N -51 0 0 34 51 0 h +.704 g 3776 3782 N -51 0 0 34 51 0 h +.7059 g 3776 3816 N -51 0 0 33 51 0 h +.7078 g 3776 3849 N -51 0 0 34 51 0 h +.7097 g 3776 3883 N -51 0 0 33 51 0 h +.7116 g 3776 3916 N -51 0 0 34 51 0 h +.7135 g 3776 3950 N -51 0 0 33 51 0 h +.7154 g 3776 3983 N -51 0 0 34 51 0 h +.7174 g 3776 4017 N -51 0 0 34 51 0 h +.7193 g 3776 4051 N -51 0 0 33 51 0 h +.7212 g 3776 4084 N -51 0 0 34 51 0 h +.7231 g 3776 4118 N -51 0 0 33 51 0 h +.725 g 3776 4151 N -51 0 0 34 51 0 h +.7269 g 3776 4185 N -51 0 0 34 51 0 h +.7288 g 3776 4219 N -51 0 0 33 51 0 h +.5514 g 3827 928 N -51 0 0 33 51 0 h +.5531 g 3827 961 N -51 0 0 34 51 0 h +.5549 g 3827 995 N -51 0 0 34 51 0 h +.5567 g 3827 1029 N -51 0 0 33 51 0 h +.5584 g 3827 1062 N -51 0 0 34 51 0 h +.5602 g 3827 1096 N -51 0 0 33 51 0 h +.5619 g 3827 1129 N -51 0 0 34 51 0 h +.5637 g 3827 1163 N -51 0 0 34 51 0 h +.5655 g 3827 1197 N -51 0 0 33 51 0 h +.5672 g 3827 1230 N -51 0 0 34 51 0 h +.569 g 3827 1264 N -51 0 0 33 51 0 h +.5707 g 3827 1297 N -51 0 0 34 51 0 h +.5725 g 3827 1331 N -51 0 0 33 51 0 h +.5743 g 3827 1364 N -51 0 0 34 51 0 h +.576 g 3827 1398 N -51 0 0 34 51 0 h +.5778 g 3827 1432 N -51 0 0 33 51 0 h +.5795 g 3827 1465 N -51 0 0 34 51 0 h +.5813 g 3827 1499 N -51 0 0 33 51 0 h +.5831 g 3827 1532 N -51 0 0 34 51 0 h +.5848 g 3827 1566 N -51 0 0 34 51 0 h +.5866 g 3827 1600 N -51 0 0 33 51 0 h +.5883 g 3827 1633 N -51 0 0 34 51 0 h +.5901 g 3827 1667 N -51 0 0 33 51 0 h +.5919 g 3827 1700 N -51 0 0 34 51 0 h +.5936 g 3827 1734 N -51 0 0 34 51 0 h +.5954 g 3827 1768 N -51 0 0 33 51 0 h +.5971 g 3827 1801 N -51 0 0 34 51 0 h +.5989 g 3827 1835 N -51 0 0 33 51 0 h +.6007 g 3827 1868 N -51 0 0 34 51 0 h +.6024 g 3827 1902 N -51 0 0 33 51 0 h +.6042 g 3827 1935 N -51 0 0 34 51 0 h +.6059 g 3827 1969 N -51 0 0 34 51 0 h +.6077 g 3827 2003 N -51 0 0 33 51 0 h +.6095 g 3827 2036 N -51 0 0 34 51 0 h +.6112 g 3827 2070 N -51 0 0 33 51 0 h +.613 g 3827 2103 N -51 0 0 34 51 0 h +.6147 g 3827 2137 N -51 0 0 34 51 0 h +.6165 g 3827 2171 N -51 0 0 33 51 0 h +.6183 g 3827 2204 N -51 0 0 34 51 0 h +.62 g 3827 2238 N -51 0 0 33 51 0 h +.6218 g 3827 2271 N -51 0 0 34 51 0 h +.6235 g 3827 2305 N -51 0 0 34 51 0 h +.6253 g 3827 2339 N -51 0 0 33 51 0 h +.6271 g 3827 2372 N -51 0 0 34 51 0 h +.6288 g 3827 2406 N -51 0 0 33 51 0 h +.6306 g 3827 2439 N -51 0 0 34 51 0 h +.6323 g 3827 2473 N -51 0 0 34 51 0 h +.6341 g 3827 2507 N -51 0 0 33 51 0 h +.6359 g 3827 2540 N -51 0 0 34 51 0 h +.6376 g 3827 2574 N -51 0 0 32 51 0 h +.6394 g 3827 2606 N -51 0 0 34 51 0 h +.6411 g 3827 2640 N -51 0 0 33 51 0 h +.6429 g 3827 2673 N -51 0 0 34 51 0 h +.6447 g 3827 2707 N -51 0 0 34 51 0 h +.6464 g 3827 2741 N -51 0 0 33 51 0 h +.6482 g 3827 2774 N -51 0 0 34 51 0 h +.6499 g 3827 2808 N -51 0 0 33 51 0 h +.6517 g 3827 2841 N -51 0 0 34 51 0 h +.6535 g 3827 2875 N -51 0 0 34 51 0 h +.6552 g 3827 2909 N -51 0 0 33 51 0 h +.657 g 3827 2942 N -51 0 0 34 51 0 h +.6587 g 3827 2976 N -51 0 0 33 51 0 h +.6605 g 3827 3009 N -51 0 0 34 51 0 h +.6623 g 3827 3043 N -51 0 0 34 51 0 h +.664 g 3827 3077 N -51 0 0 33 51 0 h +.6658 g 3827 3110 N -51 0 0 34 51 0 h +.6675 g 3827 3144 N -51 0 0 33 51 0 h +.6693 g 3827 3177 N -51 0 0 34 51 0 h +.6711 g 3827 3211 N -51 0 0 34 51 0 h +.6728 g 3827 3245 N -51 0 0 33 51 0 h +.6746 g 3827 3278 N -51 0 0 34 51 0 h +.6763 g 3827 3312 N -51 0 0 33 51 0 h +.6781 g 3827 3345 N -51 0 0 34 51 0 h +.6799 g 3827 3379 N -51 0 0 33 51 0 h +.6816 g 3827 3412 N -51 0 0 34 51 0 h +.6834 g 3827 3446 N -51 0 0 34 51 0 h +.6851 g 3827 3480 N -51 0 0 33 51 0 h +.6869 g 3827 3513 N -51 0 0 34 51 0 h +.6887 g 3827 3547 N -51 0 0 33 51 0 h +.6904 g 3827 3580 N -51 0 0 34 51 0 h +.6922 g 3827 3614 N -51 0 0 34 51 0 h +.6939 g 3827 3648 N -51 0 0 33 51 0 h +.6957 g 3827 3681 N -51 0 0 34 51 0 h +.6975 g 3827 3715 N -51 0 0 33 51 0 h +.6992 g 3827 3748 N -51 0 0 34 51 0 h +.701 g 3827 3782 N -51 0 0 34 51 0 h +.7027 g 3827 3816 N -51 0 0 33 51 0 h +.7045 g 3827 3849 N -51 0 0 34 51 0 h +.7063 g 3827 3883 N -51 0 0 33 51 0 h +.708 g 3827 3916 N -51 0 0 34 51 0 h +.7098 g 3827 3950 N -51 0 0 33 51 0 h +.7115 g 3827 3983 N -51 0 0 34 51 0 h +.7133 g 3827 4017 N -51 0 0 34 51 0 h +.7151 g 3827 4051 N -51 0 0 33 51 0 h +.7168 g 3827 4084 N -51 0 0 34 51 0 h +.7186 g 3827 4118 N -51 0 0 33 51 0 h +.7203 g 3827 4151 N -51 0 0 34 51 0 h +.7221 g 3827 4185 N -51 0 0 34 51 0 h +.7239 g 3827 4219 N -51 0 0 33 51 0 h +.5614 g 3878 928 N -50 0 0 33 50 0 h +.563 g 3878 961 N -50 0 0 34 50 0 h +.5646 g 3878 995 N -50 0 0 34 50 0 h +.5662 g 3878 1029 N -50 0 0 33 50 0 h +.5678 g 3878 1062 N -50 0 0 34 50 0 h +.5694 g 3878 1096 N -50 0 0 33 50 0 h +.5711 g 3878 1129 N -50 0 0 34 50 0 h +.5727 g 3878 1163 N -50 0 0 34 50 0 h +.5743 g 3878 1197 N -50 0 0 33 50 0 h +.5759 g 3878 1230 N -50 0 0 34 50 0 h +.5775 g 3878 1264 N -50 0 0 33 50 0 h +.5791 g 3878 1297 N -50 0 0 34 50 0 h +.5807 g 3878 1331 N -50 0 0 33 50 0 h +.5823 g 3878 1364 N -50 0 0 34 50 0 h +.5839 g 3878 1398 N -50 0 0 34 50 0 h +.5855 g 3878 1432 N -50 0 0 33 50 0 h +.5871 g 3878 1465 N -50 0 0 34 50 0 h +.5887 g 3878 1499 N -50 0 0 33 50 0 h +.5903 g 3878 1532 N -50 0 0 34 50 0 h +.5919 g 3878 1566 N -50 0 0 34 50 0 h +.5935 g 3878 1600 N -50 0 0 33 50 0 h +.5952 g 3878 1633 N -50 0 0 34 50 0 h +.5968 g 3878 1667 N -50 0 0 33 50 0 h +.5984 g 3878 1700 N -50 0 0 34 50 0 h +.6 g 3878 1734 N -50 0 0 34 50 0 h +.6016 g 3878 1768 N -50 0 0 33 50 0 h +.6032 g 3878 1801 N -50 0 0 34 50 0 h +.6048 g 3878 1835 N -50 0 0 33 50 0 h +.6064 g 3878 1868 N -50 0 0 34 50 0 h +.608 g 3878 1902 N -50 0 0 33 50 0 h +.6096 g 3878 1935 N -50 0 0 34 50 0 h +.6112 g 3878 1969 N -50 0 0 34 50 0 h +.6128 g 3878 2003 N -50 0 0 33 50 0 h +.6144 g 3878 2036 N -50 0 0 34 50 0 h +.616 g 3878 2070 N -50 0 0 33 50 0 h +.6177 g 3878 2103 N -50 0 0 34 50 0 h +.6193 g 3878 2137 N -50 0 0 34 50 0 h +.6209 g 3878 2171 N -50 0 0 33 50 0 h +.6225 g 3878 2204 N -50 0 0 34 50 0 h +.6241 g 3878 2238 N -50 0 0 33 50 0 h +.6257 g 3878 2271 N -50 0 0 34 50 0 h +.6273 g 3878 2305 N -50 0 0 34 50 0 h +.6289 g 3878 2339 N -50 0 0 33 50 0 h +.6305 g 3878 2372 N -50 0 0 34 50 0 h +.6321 g 3878 2406 N -50 0 0 33 50 0 h +.6337 g 3878 2439 N -50 0 0 34 50 0 h +.6353 g 3878 2473 N -50 0 0 34 50 0 h +.6369 g 3878 2507 N -50 0 0 33 50 0 h +.6385 g 3878 2540 N -50 0 0 34 50 0 h +.6402 g 3878 2574 N -50 0 0 32 50 0 h +.6418 g 3878 2606 N -50 0 0 34 50 0 h +.6434 g 3878 2640 N -50 0 0 33 50 0 h +.645 g 3878 2673 N -50 0 0 34 50 0 h +.6466 g 3878 2707 N -50 0 0 34 50 0 h +.6482 g 3878 2741 N -50 0 0 33 50 0 h +.6498 g 3878 2774 N -50 0 0 34 50 0 h +.6514 g 3878 2808 N -50 0 0 33 50 0 h +.653 g 3878 2841 N -50 0 0 34 50 0 h +.6546 g 3878 2875 N -50 0 0 34 50 0 h +.6562 g 3878 2909 N -50 0 0 33 50 0 h +.6578 g 3878 2942 N -50 0 0 34 50 0 h +.6594 g 3878 2976 N -50 0 0 33 50 0 h +.661 g 3878 3009 N -50 0 0 34 50 0 h +.6626 g 3878 3043 N -50 0 0 34 50 0 h +.6643 g 3878 3077 N -50 0 0 33 50 0 h +.6659 g 3878 3110 N -50 0 0 34 50 0 h +.6675 g 3878 3144 N -50 0 0 33 50 0 h +.6691 g 3878 3177 N -50 0 0 34 50 0 h +.6707 g 3878 3211 N -50 0 0 34 50 0 h +.6723 g 3878 3245 N -50 0 0 33 50 0 h +.6739 g 3878 3278 N -50 0 0 34 50 0 h +.6755 g 3878 3312 N -50 0 0 33 50 0 h +.6771 g 3878 3345 N -50 0 0 34 50 0 h +.6787 g 3878 3379 N -50 0 0 33 50 0 h +.6803 g 3878 3412 N -50 0 0 34 50 0 h +.6819 g 3878 3446 N -50 0 0 34 50 0 h +.6835 g 3878 3480 N -50 0 0 33 50 0 h +.6851 g 3878 3513 N -50 0 0 34 50 0 h +.6868 g 3878 3547 N -50 0 0 33 50 0 h +.6884 g 3878 3580 N -50 0 0 34 50 0 h +.69 g 3878 3614 N -50 0 0 34 50 0 h +.6916 g 3878 3648 N -50 0 0 33 50 0 h +.6932 g 3878 3681 N -50 0 0 34 50 0 h +.6948 g 3878 3715 N -50 0 0 33 50 0 h +.6964 g 3878 3748 N -50 0 0 34 50 0 h +.698 g 3878 3782 N -50 0 0 34 50 0 h +.6996 g 3878 3816 N -50 0 0 33 50 0 h +.7012 g 3878 3849 N -50 0 0 34 50 0 h +.7028 g 3878 3883 N -50 0 0 33 50 0 h +.7044 g 3878 3916 N -50 0 0 34 50 0 h +.706 g 3878 3950 N -50 0 0 33 50 0 h +.7076 g 3878 3983 N -50 0 0 34 50 0 h +.7093 g 3878 4017 N -50 0 0 34 50 0 h +.7109 g 3878 4051 N -50 0 0 33 50 0 h +.7125 g 3878 4084 N -50 0 0 34 50 0 h +.7141 g 3878 4118 N -50 0 0 33 50 0 h +.7157 g 3878 4151 N -50 0 0 34 50 0 h +.7173 g 3878 4185 N -50 0 0 34 50 0 h +.7189 g 3878 4219 N -50 0 0 33 50 0 h +.5714 g 3928 928 N -51 0 0 33 51 0 h +.5729 g 3928 961 N -51 0 0 34 51 0 h +.5743 g 3928 995 N -51 0 0 34 51 0 h +.5758 g 3928 1029 N -51 0 0 33 51 0 h +.5772 g 3928 1062 N -51 0 0 34 51 0 h +.5787 g 3928 1096 N -51 0 0 33 51 0 h +.5802 g 3928 1129 N -51 0 0 34 51 0 h +.5816 g 3928 1163 N -51 0 0 34 51 0 h +.5831 g 3928 1197 N -51 0 0 33 51 0 h +.5845 g 3928 1230 N -51 0 0 34 51 0 h +.586 g 3928 1264 N -51 0 0 33 51 0 h +.5874 g 3928 1297 N -51 0 0 34 51 0 h +.5889 g 3928 1331 N -51 0 0 33 51 0 h +.5903 g 3928 1364 N -51 0 0 34 51 0 h +.5918 g 3928 1398 N -51 0 0 34 51 0 h +.5932 g 3928 1432 N -51 0 0 33 51 0 h +.5947 g 3928 1465 N -51 0 0 34 51 0 h +.5962 g 3928 1499 N -51 0 0 33 51 0 h +.5976 g 3928 1532 N -51 0 0 34 51 0 h +.5991 g 3928 1566 N -51 0 0 34 51 0 h +.6005 g 3928 1600 N -51 0 0 33 51 0 h +.602 g 3928 1633 N -51 0 0 34 51 0 h +.6034 g 3928 1667 N -51 0 0 33 51 0 h +.6049 g 3928 1700 N -51 0 0 34 51 0 h +.6063 g 3928 1734 N -51 0 0 34 51 0 h +.6078 g 3928 1768 N -51 0 0 33 51 0 h +.6092 g 3928 1801 N -51 0 0 34 51 0 h +.6107 g 3928 1835 N -51 0 0 33 51 0 h +.6121 g 3928 1868 N -51 0 0 34 51 0 h +.6136 g 3928 1902 N -51 0 0 33 51 0 h +.6151 g 3928 1935 N -51 0 0 34 51 0 h +.6165 g 3928 1969 N -51 0 0 34 51 0 h +.618 g 3928 2003 N -51 0 0 33 51 0 h +.6194 g 3928 2036 N -51 0 0 34 51 0 h +.6209 g 3928 2070 N -51 0 0 33 51 0 h +.6223 g 3928 2103 N -51 0 0 34 51 0 h +.6238 g 3928 2137 N -51 0 0 34 51 0 h +.6252 g 3928 2171 N -51 0 0 33 51 0 h +.6267 g 3928 2204 N -51 0 0 34 51 0 h +.6281 g 3928 2238 N -51 0 0 33 51 0 h +.6296 g 3928 2271 N -51 0 0 34 51 0 h +.631 g 3928 2305 N -51 0 0 34 51 0 h +.6325 g 3928 2339 N -51 0 0 33 51 0 h +.634 g 3928 2372 N -51 0 0 34 51 0 h +.6354 g 3928 2406 N -51 0 0 33 51 0 h +.6369 g 3928 2439 N -51 0 0 34 51 0 h +.6383 g 3928 2473 N -51 0 0 34 51 0 h +.6398 g 3928 2507 N -51 0 0 33 51 0 h +.6412 g 3928 2540 N -51 0 0 34 51 0 h +.6427 g 3928 2574 N -51 0 0 32 51 0 h +.6441 g 3928 2606 N -51 0 0 34 51 0 h +.6456 g 3928 2640 N -51 0 0 33 51 0 h +.647 g 3928 2673 N -51 0 0 34 51 0 h +.6485 g 3928 2707 N -51 0 0 34 51 0 h +.6499 g 3928 2741 N -51 0 0 33 51 0 h +.6514 g 3928 2774 N -51 0 0 34 51 0 h +.6529 g 3928 2808 N -51 0 0 33 51 0 h +.6543 g 3928 2841 N -51 0 0 34 51 0 h +.6558 g 3928 2875 N -51 0 0 34 51 0 h +.6572 g 3928 2909 N -51 0 0 33 51 0 h +.6587 g 3928 2942 N -51 0 0 34 51 0 h +.6601 g 3928 2976 N -51 0 0 33 51 0 h +.6616 g 3928 3009 N -51 0 0 34 51 0 h +.663 g 3928 3043 N -51 0 0 34 51 0 h +.6645 g 3928 3077 N -51 0 0 33 51 0 h +.6659 g 3928 3110 N -51 0 0 34 51 0 h +.6674 g 3928 3144 N -51 0 0 33 51 0 h +.6688 g 3928 3177 N -51 0 0 34 51 0 h +.6703 g 3928 3211 N -51 0 0 34 51 0 h +.6718 g 3928 3245 N -51 0 0 33 51 0 h +.6732 g 3928 3278 N -51 0 0 34 51 0 h +.6747 g 3928 3312 N -51 0 0 33 51 0 h +.6761 g 3928 3345 N -51 0 0 34 51 0 h +.6776 g 3928 3379 N -51 0 0 33 51 0 h +.679 g 3928 3412 N -51 0 0 34 51 0 h +.6805 g 3928 3446 N -51 0 0 34 51 0 h +.6819 g 3928 3480 N -51 0 0 33 51 0 h +.6834 g 3928 3513 N -51 0 0 34 51 0 h +.6848 g 3928 3547 N -51 0 0 33 51 0 h +.6863 g 3928 3580 N -51 0 0 34 51 0 h +.6877 g 3928 3614 N -51 0 0 34 51 0 h +.6892 g 3928 3648 N -51 0 0 33 51 0 h +.6907 g 3928 3681 N -51 0 0 34 51 0 h +.6921 g 3928 3715 N -51 0 0 33 51 0 h +.6936 g 3928 3748 N -51 0 0 34 51 0 h +.695 g 3928 3782 N -51 0 0 34 51 0 h +.6965 g 3928 3816 N -51 0 0 33 51 0 h +.6979 g 3928 3849 N -51 0 0 34 51 0 h +.6994 g 3928 3883 N -51 0 0 33 51 0 h +.7008 g 3928 3916 N -51 0 0 34 51 0 h +.7023 g 3928 3950 N -51 0 0 33 51 0 h +.7037 g 3928 3983 N -51 0 0 34 51 0 h +.7052 g 3928 4017 N -51 0 0 34 51 0 h +.7066 g 3928 4051 N -51 0 0 33 51 0 h +.7081 g 3928 4084 N -51 0 0 34 51 0 h +.7096 g 3928 4118 N -51 0 0 33 51 0 h +.711 g 3928 4151 N -51 0 0 34 51 0 h +.7125 g 3928 4185 N -51 0 0 34 51 0 h +.7139 g 3928 4219 N -51 0 0 33 51 0 h +.5815 g 3979 928 N -50 0 0 33 50 0 h +.5828 g 3979 961 N -50 0 0 34 50 0 h +.5841 g 3979 995 N -50 0 0 34 50 0 h +.5854 g 3979 1029 N -50 0 0 33 50 0 h +.5867 g 3979 1062 N -50 0 0 34 50 0 h +.588 g 3979 1096 N -50 0 0 33 50 0 h +.5893 g 3979 1129 N -50 0 0 34 50 0 h +.5906 g 3979 1163 N -50 0 0 34 50 0 h +.5919 g 3979 1197 N -50 0 0 33 50 0 h +.5932 g 3979 1230 N -50 0 0 34 50 0 h +.5945 g 3979 1264 N -50 0 0 33 50 0 h +.5958 g 3979 1297 N -50 0 0 34 50 0 h +.5971 g 3979 1331 N -50 0 0 33 50 0 h +.5984 g 3979 1364 N -50 0 0 34 50 0 h +.5997 g 3979 1398 N -50 0 0 34 50 0 h +.601 g 3979 1432 N -50 0 0 33 50 0 h +.6023 g 3979 1465 N -50 0 0 34 50 0 h +.6036 g 3979 1499 N -50 0 0 33 50 0 h +.6049 g 3979 1532 N -50 0 0 34 50 0 h +.6062 g 3979 1566 N -50 0 0 34 50 0 h +.6075 g 3979 1600 N -50 0 0 33 50 0 h +.6088 g 3979 1633 N -50 0 0 34 50 0 h +.6101 g 3979 1667 N -50 0 0 33 50 0 h +.6114 g 3979 1700 N -50 0 0 34 50 0 h +.6127 g 3979 1734 N -50 0 0 34 50 0 h +.614 g 3979 1768 N -50 0 0 33 50 0 h +.6153 g 3979 1801 N -50 0 0 34 50 0 h +.6166 g 3979 1835 N -50 0 0 33 50 0 h +.6179 g 3979 1868 N -50 0 0 34 50 0 h +.6192 g 3979 1902 N -50 0 0 33 50 0 h +.6205 g 3979 1935 N -50 0 0 34 50 0 h +.6218 g 3979 1969 N -50 0 0 34 50 0 h +.6231 g 3979 2003 N -50 0 0 33 50 0 h +.6244 g 3979 2036 N -50 0 0 34 50 0 h +.6257 g 3979 2070 N -50 0 0 33 50 0 h +.627 g 3979 2103 N -50 0 0 34 50 0 h +.6283 g 3979 2137 N -50 0 0 34 50 0 h +.6296 g 3979 2171 N -50 0 0 33 50 0 h +.6309 g 3979 2204 N -50 0 0 34 50 0 h +.6322 g 3979 2238 N -50 0 0 33 50 0 h +.6335 g 3979 2271 N -50 0 0 34 50 0 h +.6348 g 3979 2305 N -50 0 0 34 50 0 h +.6361 g 3979 2339 N -50 0 0 33 50 0 h +.6374 g 3979 2372 N -50 0 0 34 50 0 h +.6387 g 3979 2406 N -50 0 0 33 50 0 h +.64 g 3979 2439 N -50 0 0 34 50 0 h +.6413 g 3979 2473 N -50 0 0 34 50 0 h +.6426 g 3979 2507 N -50 0 0 33 50 0 h +.6439 g 3979 2540 N -50 0 0 34 50 0 h +.6452 g 3979 2574 N -50 0 0 32 50 0 h +.6465 g 3979 2606 N -50 0 0 34 50 0 h +.6478 g 3979 2640 N -50 0 0 33 50 0 h +.6491 g 3979 2673 N -50 0 0 34 50 0 h +.6504 g 3979 2707 N -50 0 0 34 50 0 h +.6517 g 3979 2741 N -50 0 0 33 50 0 h +.653 g 3979 2774 N -50 0 0 34 50 0 h +.6543 g 3979 2808 N -50 0 0 33 50 0 h +.6556 g 3979 2841 N -50 0 0 34 50 0 h +.6569 g 3979 2875 N -50 0 0 34 50 0 h +.6582 g 3979 2909 N -50 0 0 33 50 0 h +.6595 g 3979 2942 N -50 0 0 34 50 0 h +.6608 g 3979 2976 N -50 0 0 33 50 0 h +.6621 g 3979 3009 N -50 0 0 34 50 0 h +.6634 g 3979 3043 N -50 0 0 34 50 0 h +.6647 g 3979 3077 N -50 0 0 33 50 0 h +.666 g 3979 3110 N -50 0 0 34 50 0 h +.6673 g 3979 3144 N -50 0 0 33 50 0 h +.6686 g 3979 3177 N -50 0 0 34 50 0 h +.6699 g 3979 3211 N -50 0 0 34 50 0 h +.6712 g 3979 3245 N -50 0 0 33 50 0 h +.6725 g 3979 3278 N -50 0 0 34 50 0 h +.6738 g 3979 3312 N -50 0 0 33 50 0 h +.6751 g 3979 3345 N -50 0 0 34 50 0 h +.6764 g 3979 3379 N -50 0 0 33 50 0 h +.6777 g 3979 3412 N -50 0 0 34 50 0 h +.679 g 3979 3446 N -50 0 0 34 50 0 h +.6803 g 3979 3480 N -50 0 0 33 50 0 h +.6816 g 3979 3513 N -50 0 0 34 50 0 h +.6829 g 3979 3547 N -50 0 0 33 50 0 h +.6842 g 3979 3580 N -50 0 0 34 50 0 h +.6855 g 3979 3614 N -50 0 0 34 50 0 h +.6868 g 3979 3648 N -50 0 0 33 50 0 h +.6881 g 3979 3681 N -50 0 0 34 50 0 h +.6894 g 3979 3715 N -50 0 0 33 50 0 h +.6907 g 3979 3748 N -50 0 0 34 50 0 h +.692 g 3979 3782 N -50 0 0 34 50 0 h +.6933 g 3979 3816 N -50 0 0 33 50 0 h +.6946 g 3979 3849 N -50 0 0 34 50 0 h +.6959 g 3979 3883 N -50 0 0 33 50 0 h +.6972 g 3979 3916 N -50 0 0 34 50 0 h +.6985 g 3979 3950 N -50 0 0 33 50 0 h +.6998 g 3979 3983 N -50 0 0 34 50 0 h +.7011 g 3979 4017 N -50 0 0 34 50 0 h +.7024 g 3979 4051 N -50 0 0 33 50 0 h +.7037 g 3979 4084 N -50 0 0 34 50 0 h +.705 g 3979 4118 N -50 0 0 33 50 0 h +.7063 g 3979 4151 N -50 0 0 34 50 0 h +.7076 g 3979 4185 N -50 0 0 34 50 0 h +.7089 g 3979 4219 N -50 0 0 33 50 0 h +.5915 g 4029 928 N -51 0 0 33 51 0 h +.5926 g 4029 961 N -51 0 0 34 51 0 h +.5938 g 4029 995 N -51 0 0 34 51 0 h +.5949 g 4029 1029 N -51 0 0 33 51 0 h +.5961 g 4029 1062 N -51 0 0 34 51 0 h +.5972 g 4029 1096 N -51 0 0 33 51 0 h +.5984 g 4029 1129 N -51 0 0 34 51 0 h +.5995 g 4029 1163 N -51 0 0 34 51 0 h +.6007 g 4029 1197 N -51 0 0 33 51 0 h +.6018 g 4029 1230 N -51 0 0 34 51 0 h +.603 g 4029 1264 N -51 0 0 33 51 0 h +.6041 g 4029 1297 N -51 0 0 34 51 0 h +.6053 g 4029 1331 N -51 0 0 33 51 0 h +.6064 g 4029 1364 N -51 0 0 34 51 0 h +.6076 g 4029 1398 N -51 0 0 34 51 0 h +.6087 g 4029 1432 N -51 0 0 33 51 0 h +.6098 g 4029 1465 N -51 0 0 34 51 0 h +.611 g 4029 1499 N -51 0 0 33 51 0 h +.6121 g 4029 1532 N -51 0 0 34 51 0 h +.6133 g 4029 1566 N -51 0 0 34 51 0 h +.6144 g 4029 1600 N -51 0 0 33 51 0 h +.6156 g 4029 1633 N -51 0 0 34 51 0 h +.6167 g 4029 1667 N -51 0 0 33 51 0 h +.6179 g 4029 1700 N -51 0 0 34 51 0 h +.619 g 4029 1734 N -51 0 0 34 51 0 h +.6202 g 4029 1768 N -51 0 0 33 51 0 h +.6213 g 4029 1801 N -51 0 0 34 51 0 h +.6225 g 4029 1835 N -51 0 0 33 51 0 h +.6236 g 4029 1868 N -51 0 0 34 51 0 h +.6248 g 4029 1902 N -51 0 0 33 51 0 h +.6259 g 4029 1935 N -51 0 0 34 51 0 h +.6271 g 4029 1969 N -51 0 0 34 51 0 h +.6282 g 4029 2003 N -51 0 0 33 51 0 h +.6294 g 4029 2036 N -51 0 0 34 51 0 h +.6305 g 4029 2070 N -51 0 0 33 51 0 h +.6317 g 4029 2103 N -51 0 0 34 51 0 h +.6328 g 4029 2137 N -51 0 0 34 51 0 h +.634 g 4029 2171 N -51 0 0 33 51 0 h +.6351 g 4029 2204 N -51 0 0 34 51 0 h +.6362 g 4029 2238 N -51 0 0 33 51 0 h +.6374 g 4029 2271 N -51 0 0 34 51 0 h +.6385 g 4029 2305 N -51 0 0 34 51 0 h +.6397 g 4029 2339 N -51 0 0 33 51 0 h +.6408 g 4029 2372 N -51 0 0 34 51 0 h +.642 g 4029 2406 N -51 0 0 33 51 0 h +.6431 g 4029 2439 N -51 0 0 34 51 0 h +.6443 g 4029 2473 N -51 0 0 34 51 0 h +.6454 g 4029 2507 N -51 0 0 33 51 0 h +.6466 g 4029 2540 N -51 0 0 34 51 0 h +.6477 g 4029 2574 N -51 0 0 32 51 0 h +.6489 g 4029 2606 N -51 0 0 34 51 0 h +.65 g 4029 2640 N -51 0 0 33 51 0 h +.6512 g 4029 2673 N -51 0 0 34 51 0 h +.6523 g 4029 2707 N -51 0 0 34 51 0 h +.6535 g 4029 2741 N -51 0 0 33 51 0 h +.6546 g 4029 2774 N -51 0 0 34 51 0 h +.6558 g 4029 2808 N -51 0 0 33 51 0 h +.6569 g 4029 2841 N -51 0 0 34 51 0 h +.6581 g 4029 2875 N -51 0 0 34 51 0 h +.6592 g 4029 2909 N -51 0 0 33 51 0 h +.6604 g 4029 2942 N -51 0 0 34 51 0 h +.6615 g 4029 2976 N -51 0 0 33 51 0 h +.6626 g 4029 3009 N -51 0 0 34 51 0 h +.6638 g 4029 3043 N -51 0 0 34 51 0 h +.6649 g 4029 3077 N -51 0 0 33 51 0 h +.6661 g 4029 3110 N -51 0 0 34 51 0 h +.6672 g 4029 3144 N -51 0 0 33 51 0 h +.6684 g 4029 3177 N -51 0 0 34 51 0 h +.6695 g 4029 3211 N -51 0 0 34 51 0 h +.6707 g 4029 3245 N -51 0 0 33 51 0 h +.6718 g 4029 3278 N -51 0 0 34 51 0 h +.673 g 4029 3312 N -51 0 0 33 51 0 h +.6741 g 4029 3345 N -51 0 0 34 51 0 h +.6753 g 4029 3379 N -51 0 0 33 51 0 h +.6764 g 4029 3412 N -51 0 0 34 51 0 h +.6776 g 4029 3446 N -51 0 0 34 51 0 h +.6787 g 4029 3480 N -51 0 0 33 51 0 h +.6799 g 4029 3513 N -51 0 0 34 51 0 h +.681 g 4029 3547 N -51 0 0 33 51 0 h +.6822 g 4029 3580 N -51 0 0 34 51 0 h +.6833 g 4029 3614 N -51 0 0 34 51 0 h +.6845 g 4029 3648 N -51 0 0 33 51 0 h +.6856 g 4029 3681 N -51 0 0 34 51 0 h +.6868 g 4029 3715 N -51 0 0 33 51 0 h +.6879 g 4029 3748 N -51 0 0 34 51 0 h +.689 g 4029 3782 N -51 0 0 34 51 0 h +.6902 g 4029 3816 N -51 0 0 33 51 0 h +.6913 g 4029 3849 N -51 0 0 34 51 0 h +.6925 g 4029 3883 N -51 0 0 33 51 0 h +.6936 g 4029 3916 N -51 0 0 34 51 0 h +.6948 g 4029 3950 N -51 0 0 33 51 0 h +.6959 g 4029 3983 N -51 0 0 34 51 0 h +.6971 g 4029 4017 N -51 0 0 34 51 0 h +.6982 g 4029 4051 N -51 0 0 33 51 0 h +.6994 g 4029 4084 N -51 0 0 34 51 0 h +.7005 g 4029 4118 N -51 0 0 33 51 0 h +.7017 g 4029 4151 N -51 0 0 34 51 0 h +.7028 g 4029 4185 N -51 0 0 34 51 0 h +.704 g 4029 4219 N -51 0 0 33 51 0 h +.6015 g 4080 928 N -50 0 0 33 50 0 h +.6025 g 4080 961 N -50 0 0 34 50 0 h +.6035 g 4080 995 N -50 0 0 34 50 0 h +.6045 g 4080 1029 N -50 0 0 33 50 0 h +.6055 g 4080 1062 N -50 0 0 34 50 0 h +.6065 g 4080 1096 N -50 0 0 33 50 0 h +.6075 g 4080 1129 N -50 0 0 34 50 0 h +.6085 g 4080 1163 N -50 0 0 34 50 0 h +.6095 g 4080 1197 N -50 0 0 33 50 0 h +.6105 g 4080 1230 N -50 0 0 34 50 0 h +.6115 g 4080 1264 N -50 0 0 33 50 0 h +.6125 g 4080 1297 N -50 0 0 34 50 0 h +.6134 g 4080 1331 N -50 0 0 33 50 0 h +.6144 g 4080 1364 N -50 0 0 34 50 0 h +.6154 g 4080 1398 N -50 0 0 34 50 0 h +.6164 g 4080 1432 N -50 0 0 33 50 0 h +.6174 g 4080 1465 N -50 0 0 34 50 0 h +.6184 g 4080 1499 N -50 0 0 33 50 0 h +.6194 g 4080 1532 N -50 0 0 34 50 0 h +.6204 g 4080 1566 N -50 0 0 34 50 0 h +.6214 g 4080 1600 N -50 0 0 33 50 0 h +.6224 g 4080 1633 N -50 0 0 34 50 0 h +.6234 g 4080 1667 N -50 0 0 33 50 0 h +.6244 g 4080 1700 N -50 0 0 34 50 0 h +.6254 g 4080 1734 N -50 0 0 34 50 0 h +.6264 g 4080 1768 N -50 0 0 33 50 0 h +.6274 g 4080 1801 N -50 0 0 34 50 0 h +.6284 g 4080 1835 N -50 0 0 33 50 0 h +.6294 g 4080 1868 N -50 0 0 34 50 0 h +.6304 g 4080 1902 N -50 0 0 33 50 0 h +.6314 g 4080 1935 N -50 0 0 34 50 0 h +.6323 g 4080 1969 N -50 0 0 34 50 0 h +.6333 g 4080 2003 N -50 0 0 33 50 0 h +.6343 g 4080 2036 N -50 0 0 34 50 0 h +.6353 g 4080 2070 N -50 0 0 33 50 0 h +.6363 g 4080 2103 N -50 0 0 34 50 0 h +.6373 g 4080 2137 N -50 0 0 34 50 0 h +.6383 g 4080 2171 N -50 0 0 33 50 0 h +.6393 g 4080 2204 N -50 0 0 34 50 0 h +.6403 g 4080 2238 N -50 0 0 33 50 0 h +.6413 g 4080 2271 N -50 0 0 34 50 0 h +.6423 g 4080 2305 N -50 0 0 34 50 0 h +.6433 g 4080 2339 N -50 0 0 33 50 0 h +.6443 g 4080 2372 N -50 0 0 34 50 0 h +.6453 g 4080 2406 N -50 0 0 33 50 0 h +.6463 g 4080 2439 N -50 0 0 34 50 0 h +.6473 g 4080 2473 N -50 0 0 34 50 0 h +.6483 g 4080 2507 N -50 0 0 33 50 0 h +.6493 g 4080 2540 N -50 0 0 34 50 0 h +.6503 g 4080 2574 N -50 0 0 32 50 0 h +.6512 g 4080 2606 N -50 0 0 34 50 0 h +.6522 g 4080 2640 N -50 0 0 33 50 0 h +.6532 g 4080 2673 N -50 0 0 34 50 0 h +.6542 g 4080 2707 N -50 0 0 34 50 0 h +.6552 g 4080 2741 N -50 0 0 33 50 0 h +.6562 g 4080 2774 N -50 0 0 34 50 0 h +.6572 g 4080 2808 N -50 0 0 33 50 0 h +.6582 g 4080 2841 N -50 0 0 34 50 0 h +.6592 g 4080 2875 N -50 0 0 34 50 0 h +.6602 g 4080 2909 N -50 0 0 33 50 0 h +.6612 g 4080 2942 N -50 0 0 34 50 0 h +.6622 g 4080 2976 N -50 0 0 33 50 0 h +.6632 g 4080 3009 N -50 0 0 34 50 0 h +.6642 g 4080 3043 N -50 0 0 34 50 0 h +.6652 g 4080 3077 N -50 0 0 33 50 0 h +.6662 g 4080 3110 N -50 0 0 34 50 0 h +.6672 g 4080 3144 N -50 0 0 33 50 0 h +.6682 g 4080 3177 N -50 0 0 34 50 0 h +.6692 g 4080 3211 N -50 0 0 34 50 0 h +.6701 g 4080 3245 N -50 0 0 33 50 0 h +.6711 g 4080 3278 N -50 0 0 34 50 0 h +.6721 g 4080 3312 N -50 0 0 33 50 0 h +.6731 g 4080 3345 N -50 0 0 34 50 0 h +.6741 g 4080 3379 N -50 0 0 33 50 0 h +.6751 g 4080 3412 N -50 0 0 34 50 0 h +.6761 g 4080 3446 N -50 0 0 34 50 0 h +.6771 g 4080 3480 N -50 0 0 33 50 0 h +.6781 g 4080 3513 N -50 0 0 34 50 0 h +.6791 g 4080 3547 N -50 0 0 33 50 0 h +.6801 g 4080 3580 N -50 0 0 34 50 0 h +.6811 g 4080 3614 N -50 0 0 34 50 0 h +.6821 g 4080 3648 N -50 0 0 33 50 0 h +.6831 g 4080 3681 N -50 0 0 34 50 0 h +.6841 g 4080 3715 N -50 0 0 33 50 0 h +.6851 g 4080 3748 N -50 0 0 34 50 0 h +.6861 g 4080 3782 N -50 0 0 34 50 0 h +.6871 g 4080 3816 N -50 0 0 33 50 0 h +.6881 g 4080 3849 N -50 0 0 34 50 0 h +.689 g 4080 3883 N -50 0 0 33 50 0 h +.69 g 4080 3916 N -50 0 0 34 50 0 h +.691 g 4080 3950 N -50 0 0 33 50 0 h +.692 g 4080 3983 N -50 0 0 34 50 0 h +.693 g 4080 4017 N -50 0 0 34 50 0 h +.694 g 4080 4051 N -50 0 0 33 50 0 h +.695 g 4080 4084 N -50 0 0 34 50 0 h +.696 g 4080 4118 N -50 0 0 33 50 0 h +.697 g 4080 4151 N -50 0 0 34 50 0 h +.698 g 4080 4185 N -50 0 0 34 50 0 h +.699 g 4080 4219 N -50 0 0 33 50 0 h +.6115 g 4130 928 N -51 0 0 33 51 0 h +.6124 g 4130 961 N -51 0 0 34 51 0 h +.6132 g 4130 995 N -51 0 0 34 51 0 h +.6141 g 4130 1029 N -51 0 0 33 51 0 h +.6149 g 4130 1062 N -51 0 0 34 51 0 h +.6157 g 4130 1096 N -51 0 0 33 51 0 h +.6166 g 4130 1129 N -51 0 0 34 51 0 h +.6174 g 4130 1163 N -51 0 0 34 51 0 h +.6183 g 4130 1197 N -51 0 0 33 51 0 h +.6191 g 4130 1230 N -51 0 0 34 51 0 h +.6199 g 4130 1264 N -51 0 0 33 51 0 h +.6208 g 4130 1297 N -51 0 0 34 51 0 h +.6216 g 4130 1331 N -51 0 0 33 51 0 h +.6225 g 4130 1364 N -51 0 0 34 51 0 h +.6233 g 4130 1398 N -51 0 0 34 51 0 h +.6242 g 4130 1432 N -51 0 0 33 51 0 h +.625 g 4130 1465 N -51 0 0 34 51 0 h +.6258 g 4130 1499 N -51 0 0 33 51 0 h +.6267 g 4130 1532 N -51 0 0 34 51 0 h +.6275 g 4130 1566 N -51 0 0 34 51 0 h +.6284 g 4130 1600 N -51 0 0 33 51 0 h +.6292 g 4130 1633 N -51 0 0 34 51 0 h +.6301 g 4130 1667 N -51 0 0 33 51 0 h +.6309 g 4130 1700 N -51 0 0 34 51 0 h +.6317 g 4130 1734 N -51 0 0 34 51 0 h +.6326 g 4130 1768 N -51 0 0 33 51 0 h +.6334 g 4130 1801 N -51 0 0 34 51 0 h +.6343 g 4130 1835 N -51 0 0 33 51 0 h +.6351 g 4130 1868 N -51 0 0 34 51 0 h +.6359 g 4130 1902 N -51 0 0 33 51 0 h +.6368 g 4130 1935 N -51 0 0 34 51 0 h +.6376 g 4130 1969 N -51 0 0 34 51 0 h +.6385 g 4130 2003 N -51 0 0 33 51 0 h +.6393 g 4130 2036 N -51 0 0 34 51 0 h +.6402 g 4130 2070 N -51 0 0 33 51 0 h +.641 g 4130 2103 N -51 0 0 34 51 0 h +.6418 g 4130 2137 N -51 0 0 34 51 0 h +.6427 g 4130 2171 N -51 0 0 33 51 0 h +.6435 g 4130 2204 N -51 0 0 34 51 0 h +.6444 g 4130 2238 N -51 0 0 33 51 0 h +.6452 g 4130 2271 N -51 0 0 34 51 0 h +.646 g 4130 2305 N -51 0 0 34 51 0 h +.6469 g 4130 2339 N -51 0 0 33 51 0 h +.6477 g 4130 2372 N -51 0 0 34 51 0 h +.6486 g 4130 2406 N -51 0 0 33 51 0 h +.6494 g 4130 2439 N -51 0 0 34 51 0 h +.6503 g 4130 2473 N -51 0 0 34 51 0 h +.6511 g 4130 2507 N -51 0 0 33 51 0 h +.6519 g 4130 2540 N -51 0 0 34 51 0 h +.6528 g 4130 2574 N -51 0 0 32 51 0 h +.6536 g 4130 2606 N -51 0 0 34 51 0 h +.6545 g 4130 2640 N -51 0 0 33 51 0 h +.6553 g 4130 2673 N -51 0 0 34 51 0 h +.6561 g 4130 2707 N -51 0 0 34 51 0 h +.657 g 4130 2741 N -51 0 0 33 51 0 h +.6578 g 4130 2774 N -51 0 0 34 51 0 h +.6587 g 4130 2808 N -51 0 0 33 51 0 h +.6595 g 4130 2841 N -51 0 0 34 51 0 h +.6604 g 4130 2875 N -51 0 0 34 51 0 h +.6612 g 4130 2909 N -51 0 0 33 51 0 h +.662 g 4130 2942 N -51 0 0 34 51 0 h +.6629 g 4130 2976 N -51 0 0 33 51 0 h +.6637 g 4130 3009 N -51 0 0 34 51 0 h +.6646 g 4130 3043 N -51 0 0 34 51 0 h +.6654 g 4130 3077 N -51 0 0 33 51 0 h +.6662 g 4130 3110 N -51 0 0 34 51 0 h +.6671 g 4130 3144 N -51 0 0 33 51 0 h +.6679 g 4130 3177 N -51 0 0 34 51 0 h +.6688 g 4130 3211 N -51 0 0 34 51 0 h +.6696 g 4130 3245 N -51 0 0 33 51 0 h +.6705 g 4130 3278 N -51 0 0 34 51 0 h +.6713 g 4130 3312 N -51 0 0 33 51 0 h +.6721 g 4130 3345 N -51 0 0 34 51 0 h +.673 g 4130 3379 N -51 0 0 33 51 0 h +.6738 g 4130 3412 N -51 0 0 34 51 0 h +.6747 g 4130 3446 N -51 0 0 34 51 0 h +.6755 g 4130 3480 N -51 0 0 33 51 0 h +.6763 g 4130 3513 N -51 0 0 34 51 0 h +.6772 g 4130 3547 N -51 0 0 33 51 0 h +.678 g 4130 3580 N -51 0 0 34 51 0 h +.6789 g 4130 3614 N -51 0 0 34 51 0 h +.6797 g 4130 3648 N -51 0 0 33 51 0 h +.6806 g 4130 3681 N -51 0 0 34 51 0 h +.6814 g 4130 3715 N -51 0 0 33 51 0 h +.6822 g 4130 3748 N -51 0 0 34 51 0 h +.6831 g 4130 3782 N -51 0 0 34 51 0 h +.6839 g 4130 3816 N -51 0 0 33 51 0 h +.6848 g 4130 3849 N -51 0 0 34 51 0 h +.6856 g 4130 3883 N -51 0 0 33 51 0 h +.6864 g 4130 3916 N -51 0 0 34 51 0 h +.6873 g 4130 3950 N -51 0 0 33 51 0 h +.6881 g 4130 3983 N -51 0 0 34 51 0 h +.689 g 4130 4017 N -51 0 0 34 51 0 h +.6898 g 4130 4051 N -51 0 0 33 51 0 h +.6907 g 4130 4084 N -51 0 0 34 51 0 h +.6915 g 4130 4118 N -51 0 0 33 51 0 h +.6923 g 4130 4151 N -51 0 0 34 51 0 h +.6932 g 4130 4185 N -51 0 0 34 51 0 h +.694 g 4130 4219 N -51 0 0 33 51 0 h +.6216 g 4181 928 N -50 0 0 33 50 0 h +.6222 g 4181 961 N -50 0 0 34 50 0 h +.6229 g 4181 995 N -50 0 0 34 50 0 h +.6236 g 4181 1029 N -50 0 0 33 50 0 h +.6243 g 4181 1062 N -50 0 0 34 50 0 h +.625 g 4181 1096 N -50 0 0 33 50 0 h +.6257 g 4181 1129 N -50 0 0 34 50 0 h +.6264 g 4181 1163 N -50 0 0 34 50 0 h +.6271 g 4181 1197 N -50 0 0 33 50 0 h +.6278 g 4181 1230 N -50 0 0 34 50 0 h +.6284 g 4181 1264 N -50 0 0 33 50 0 h +.6291 g 4181 1297 N -50 0 0 34 50 0 h +.6298 g 4181 1331 N -50 0 0 33 50 0 h +.6305 g 4181 1364 N -50 0 0 34 50 0 h +.6312 g 4181 1398 N -50 0 0 34 50 0 h +.6319 g 4181 1432 N -50 0 0 33 50 0 h +.6326 g 4181 1465 N -50 0 0 34 50 0 h +.6333 g 4181 1499 N -50 0 0 33 50 0 h +.634 g 4181 1532 N -50 0 0 34 50 0 h +.6346 g 4181 1566 N -50 0 0 34 50 0 h +.6353 g 4181 1600 N -50 0 0 33 50 0 h +.636 g 4181 1633 N -50 0 0 34 50 0 h +.6367 g 4181 1667 N -50 0 0 33 50 0 h +.6374 g 4181 1700 N -50 0 0 34 50 0 h +.6381 g 4181 1734 N -50 0 0 34 50 0 h +.6388 g 4181 1768 N -50 0 0 33 50 0 h +.6395 g 4181 1801 N -50 0 0 34 50 0 h +.6402 g 4181 1835 N -50 0 0 33 50 0 h +.6408 g 4181 1868 N -50 0 0 34 50 0 h +.6415 g 4181 1902 N -50 0 0 33 50 0 h +.6422 g 4181 1935 N -50 0 0 34 50 0 h +.6429 g 4181 1969 N -50 0 0 34 50 0 h +.6436 g 4181 2003 N -50 0 0 33 50 0 h +.6443 g 4181 2036 N -50 0 0 34 50 0 h +.645 g 4181 2070 N -50 0 0 33 50 0 h +.6457 g 4181 2103 N -50 0 0 34 50 0 h +.6463 g 4181 2137 N -50 0 0 34 50 0 h +.647 g 4181 2171 N -50 0 0 33 50 0 h +.6477 g 4181 2204 N -50 0 0 34 50 0 h +.6484 g 4181 2238 N -50 0 0 33 50 0 h +.6491 g 4181 2271 N -50 0 0 34 50 0 h +.6498 g 4181 2305 N -50 0 0 34 50 0 h +.6505 g 4181 2339 N -50 0 0 33 50 0 h +.6512 g 4181 2372 N -50 0 0 34 50 0 h +.6519 g 4181 2406 N -50 0 0 33 50 0 h +.6525 g 4181 2439 N -50 0 0 34 50 0 h +.6532 g 4181 2473 N -50 0 0 34 50 0 h +.6539 g 4181 2507 N -50 0 0 33 50 0 h +.6546 g 4181 2540 N -50 0 0 34 50 0 h +.6553 g 4181 2574 N -50 0 0 32 50 0 h +.656 g 4181 2606 N -50 0 0 34 50 0 h +.6567 g 4181 2640 N -50 0 0 33 50 0 h +.6574 g 4181 2673 N -50 0 0 34 50 0 h +.6581 g 4181 2707 N -50 0 0 34 50 0 h +.6587 g 4181 2741 N -50 0 0 33 50 0 h +.6594 g 4181 2774 N -50 0 0 34 50 0 h +.6601 g 4181 2808 N -50 0 0 33 50 0 h +.6608 g 4181 2841 N -50 0 0 34 50 0 h +.6615 g 4181 2875 N -50 0 0 34 50 0 h +.6622 g 4181 2909 N -50 0 0 33 50 0 h +.6629 g 4181 2942 N -50 0 0 34 50 0 h +.6636 g 4181 2976 N -50 0 0 33 50 0 h +.6643 g 4181 3009 N -50 0 0 34 50 0 h +.6649 g 4181 3043 N -50 0 0 34 50 0 h +.6656 g 4181 3077 N -50 0 0 33 50 0 h +.6663 g 4181 3110 N -50 0 0 34 50 0 h +.667 g 4181 3144 N -50 0 0 33 50 0 h +.6677 g 4181 3177 N -50 0 0 34 50 0 h +.6684 g 4181 3211 N -50 0 0 34 50 0 h +.6691 g 4181 3245 N -50 0 0 33 50 0 h +.6698 g 4181 3278 N -50 0 0 34 50 0 h +.6705 g 4181 3312 N -50 0 0 33 50 0 h +.6711 g 4181 3345 N -50 0 0 34 50 0 h +.6718 g 4181 3379 N -50 0 0 33 50 0 h +.6725 g 4181 3412 N -50 0 0 34 50 0 h +.6732 g 4181 3446 N -50 0 0 34 50 0 h +.6739 g 4181 3480 N -50 0 0 33 50 0 h +.6746 g 4181 3513 N -50 0 0 34 50 0 h +.6753 g 4181 3547 N -50 0 0 33 50 0 h +.676 g 4181 3580 N -50 0 0 34 50 0 h +.6767 g 4181 3614 N -50 0 0 34 50 0 h +.6773 g 4181 3648 N -50 0 0 33 50 0 h +.678 g 4181 3681 N -50 0 0 34 50 0 h +.6787 g 4181 3715 N -50 0 0 33 50 0 h +.6794 g 4181 3748 N -50 0 0 34 50 0 h +.6801 g 4181 3782 N -50 0 0 34 50 0 h +.6808 g 4181 3816 N -50 0 0 33 50 0 h +.6815 g 4181 3849 N -50 0 0 34 50 0 h +.6822 g 4181 3883 N -50 0 0 33 50 0 h +.6829 g 4181 3916 N -50 0 0 34 50 0 h +.6835 g 4181 3950 N -50 0 0 33 50 0 h +.6842 g 4181 3983 N -50 0 0 34 50 0 h +.6849 g 4181 4017 N -50 0 0 34 50 0 h +.6856 g 4181 4051 N -50 0 0 33 50 0 h +.6863 g 4181 4084 N -50 0 0 34 50 0 h +.687 g 4181 4118 N -50 0 0 33 50 0 h +.6877 g 4181 4151 N -50 0 0 34 50 0 h +.6884 g 4181 4185 N -50 0 0 34 50 0 h +.689 g 4181 4219 N -50 0 0 33 50 0 h +.6316 g 4231 928 N -51 0 0 33 51 0 h +.6321 g 4231 961 N -51 0 0 34 51 0 h +.6327 g 4231 995 N -51 0 0 34 51 0 h +.6332 g 4231 1029 N -51 0 0 33 51 0 h +.6337 g 4231 1062 N -51 0 0 34 51 0 h +.6343 g 4231 1096 N -51 0 0 33 51 0 h +.6348 g 4231 1129 N -51 0 0 34 51 0 h +.6353 g 4231 1163 N -51 0 0 34 51 0 h +.6359 g 4231 1197 N -51 0 0 33 51 0 h +.6364 g 4231 1230 N -51 0 0 34 51 0 h +.6369 g 4231 1264 N -51 0 0 33 51 0 h +.6375 g 4231 1297 N -51 0 0 34 51 0 h +.638 g 4231 1331 N -51 0 0 33 51 0 h +.6385 g 4231 1364 N -51 0 0 34 51 0 h +.6391 g 4231 1398 N -51 0 0 34 51 0 h +.6396 g 4231 1432 N -51 0 0 33 51 0 h +.6402 g 4231 1465 N -51 0 0 34 51 0 h +.6407 g 4231 1499 N -51 0 0 33 51 0 h +.6412 g 4231 1532 N -51 0 0 34 51 0 h +.6418 g 4231 1566 N -51 0 0 34 51 0 h +.6423 g 4231 1600 N -51 0 0 33 51 0 h +.6428 g 4231 1633 N -51 0 0 34 51 0 h +.6434 g 4231 1667 N -51 0 0 33 51 0 h +.6439 g 4231 1700 N -51 0 0 34 51 0 h +.6444 g 4231 1734 N -51 0 0 34 51 0 h +.645 g 4231 1768 N -51 0 0 33 51 0 h +.6455 g 4231 1801 N -51 0 0 34 51 0 h +.646 g 4231 1835 N -51 0 0 33 51 0 h +.6466 g 4231 1868 N -51 0 0 34 51 0 h +.6471 g 4231 1902 N -51 0 0 33 51 0 h +.6477 g 4231 1935 N -51 0 0 34 51 0 h +.6482 g 4231 1969 N -51 0 0 34 51 0 h +.6487 g 4231 2003 N -51 0 0 33 51 0 h +.6493 g 4231 2036 N -51 0 0 34 51 0 h +.6498 g 4231 2070 N -51 0 0 33 51 0 h +.6503 g 4231 2103 N -51 0 0 34 51 0 h +.6509 g 4231 2137 N -51 0 0 34 51 0 h +.6514 g 4231 2171 N -51 0 0 33 51 0 h +.6519 g 4231 2204 N -51 0 0 34 51 0 h +.6525 g 4231 2238 N -51 0 0 33 51 0 h +.653 g 4231 2271 N -51 0 0 34 51 0 h +.6535 g 4231 2305 N -51 0 0 34 51 0 h +.6541 g 4231 2339 N -51 0 0 33 51 0 h +.6546 g 4231 2372 N -51 0 0 34 51 0 h +.6552 g 4231 2406 N -51 0 0 33 51 0 h +.6557 g 4231 2439 N -51 0 0 34 51 0 h +.6562 g 4231 2473 N -51 0 0 34 51 0 h +.6568 g 4231 2507 N -51 0 0 33 51 0 h +.6573 g 4231 2540 N -51 0 0 34 51 0 h +.6578 g 4231 2574 N -51 0 0 32 51 0 h +.6584 g 4231 2606 N -51 0 0 34 51 0 h +.6589 g 4231 2640 N -51 0 0 33 51 0 h +.6594 g 4231 2673 N -51 0 0 34 51 0 h +.66 g 4231 2707 N -51 0 0 34 51 0 h +.6605 g 4231 2741 N -51 0 0 33 51 0 h +.661 g 4231 2774 N -51 0 0 34 51 0 h +.6616 g 4231 2808 N -51 0 0 33 51 0 h +.6621 g 4231 2841 N -51 0 0 34 51 0 h +.6626 g 4231 2875 N -51 0 0 34 51 0 h +.6632 g 4231 2909 N -51 0 0 33 51 0 h +.6637 g 4231 2942 N -51 0 0 34 51 0 h +.6643 g 4231 2976 N -51 0 0 33 51 0 h +.6648 g 4231 3009 N -51 0 0 34 51 0 h +.6653 g 4231 3043 N -51 0 0 34 51 0 h +.6659 g 4231 3077 N -51 0 0 33 51 0 h +.6664 g 4231 3110 N -51 0 0 34 51 0 h +.6669 g 4231 3144 N -51 0 0 33 51 0 h +.6675 g 4231 3177 N -51 0 0 34 51 0 h +.668 g 4231 3211 N -51 0 0 34 51 0 h +.6685 g 4231 3245 N -51 0 0 33 51 0 h +.6691 g 4231 3278 N -51 0 0 34 51 0 h +.6696 g 4231 3312 N -51 0 0 33 51 0 h +.6701 g 4231 3345 N -51 0 0 34 51 0 h +.6707 g 4231 3379 N -51 0 0 33 51 0 h +.6712 g 4231 3412 N -51 0 0 34 51 0 h +.6718 g 4231 3446 N -51 0 0 34 51 0 h +.6723 g 4231 3480 N -51 0 0 33 51 0 h +.6728 g 4231 3513 N -51 0 0 34 51 0 h +.6734 g 4231 3547 N -51 0 0 33 51 0 h +.6739 g 4231 3580 N -51 0 0 34 51 0 h +.6744 g 4231 3614 N -51 0 0 34 51 0 h +.675 g 4231 3648 N -51 0 0 33 51 0 h +.6755 g 4231 3681 N -51 0 0 34 51 0 h +.676 g 4231 3715 N -51 0 0 33 51 0 h +.6766 g 4231 3748 N -51 0 0 34 51 0 h +.6771 g 4231 3782 N -51 0 0 34 51 0 h +.6776 g 4231 3816 N -51 0 0 33 51 0 h +.6782 g 4231 3849 N -51 0 0 34 51 0 h +.6787 g 4231 3883 N -51 0 0 33 51 0 h +.6793 g 4231 3916 N -51 0 0 34 51 0 h +.6798 g 4231 3950 N -51 0 0 33 51 0 h +.6803 g 4231 3983 N -51 0 0 34 51 0 h +.6809 g 4231 4017 N -51 0 0 34 51 0 h +.6814 g 4231 4051 N -51 0 0 33 51 0 h +.6819 g 4231 4084 N -51 0 0 34 51 0 h +.6825 g 4231 4118 N -51 0 0 33 51 0 h +.683 g 4231 4151 N -51 0 0 34 51 0 h +.6835 g 4231 4185 N -51 0 0 34 51 0 h +.6841 g 4231 4219 N -51 0 0 33 51 0 h +.6416 g 4282 928 N -51 0 0 33 51 0 h +.642 g 4282 961 N -51 0 0 34 51 0 h +.6424 g 4282 995 N -51 0 0 34 51 0 h +.6428 g 4282 1029 N -51 0 0 33 51 0 h +.6431 g 4282 1062 N -51 0 0 34 51 0 h +.6435 g 4282 1096 N -51 0 0 33 51 0 h +.6439 g 4282 1129 N -51 0 0 34 51 0 h +.6443 g 4282 1163 N -51 0 0 34 51 0 h +.6447 g 4282 1197 N -51 0 0 33 51 0 h +.645 g 4282 1230 N -51 0 0 34 51 0 h +.6454 g 4282 1264 N -51 0 0 33 51 0 h +.6458 g 4282 1297 N -51 0 0 34 51 0 h +.6462 g 4282 1331 N -51 0 0 33 51 0 h +.6466 g 4282 1364 N -51 0 0 34 51 0 h +.647 g 4282 1398 N -51 0 0 34 51 0 h +.6473 g 4282 1432 N -51 0 0 33 51 0 h +.6477 g 4282 1465 N -51 0 0 34 51 0 h +.6481 g 4282 1499 N -51 0 0 33 51 0 h +.6485 g 4282 1532 N -51 0 0 34 51 0 h +.6489 g 4282 1566 N -51 0 0 34 51 0 h +.6493 g 4282 1600 N -51 0 0 33 51 0 h +.6496 g 4282 1633 N -51 0 0 34 51 0 h +.65 g 4282 1667 N -51 0 0 33 51 0 h +.6504 g 4282 1700 N -51 0 0 34 51 0 h +.6508 g 4282 1734 N -51 0 0 34 51 0 h +.6512 g 4282 1768 N -51 0 0 33 51 0 h +.6516 g 4282 1801 N -51 0 0 34 51 0 h +.6519 g 4282 1835 N -51 0 0 33 51 0 h +.6523 g 4282 1868 N -51 0 0 34 51 0 h +.6527 g 4282 1902 N -51 0 0 33 51 0 h +.6531 g 4282 1935 N -51 0 0 34 51 0 h +.6535 g 4282 1969 N -51 0 0 34 51 0 h +.6538 g 4282 2003 N -51 0 0 33 51 0 h +.6542 g 4282 2036 N -51 0 0 34 51 0 h +.6546 g 4282 2070 N -51 0 0 33 51 0 h +.655 g 4282 2103 N -51 0 0 34 51 0 h +.6554 g 4282 2137 N -51 0 0 34 51 0 h +.6558 g 4282 2171 N -51 0 0 33 51 0 h +.6561 g 4282 2204 N -51 0 0 34 51 0 h +.6565 g 4282 2238 N -51 0 0 33 51 0 h +.6569 g 4282 2271 N -51 0 0 34 51 0 h +.6573 g 4282 2305 N -51 0 0 34 51 0 h +.6577 g 4282 2339 N -51 0 0 33 51 0 h +.6581 g 4282 2372 N -51 0 0 34 51 0 h +.6584 g 4282 2406 N -51 0 0 33 51 0 h +.6588 g 4282 2439 N -51 0 0 34 51 0 h +.6592 g 4282 2473 N -51 0 0 34 51 0 h +.6596 g 4282 2507 N -51 0 0 33 51 0 h +.66 g 4282 2540 N -51 0 0 34 51 0 h +.6604 g 4282 2574 N -51 0 0 32 51 0 h +.6607 g 4282 2606 N -51 0 0 34 51 0 h +.6611 g 4282 2640 N -51 0 0 33 51 0 h +.6615 g 4282 2673 N -51 0 0 34 51 0 h +.6619 g 4282 2707 N -51 0 0 34 51 0 h +.6623 g 4282 2741 N -51 0 0 33 51 0 h +.6626 g 4282 2774 N -51 0 0 34 51 0 h +.663 g 4282 2808 N -51 0 0 33 51 0 h +.6634 g 4282 2841 N -51 0 0 34 51 0 h +.6638 g 4282 2875 N -51 0 0 34 51 0 h +.6642 g 4282 2909 N -51 0 0 33 51 0 h +.6646 g 4282 2942 N -51 0 0 34 51 0 h +.6649 g 4282 2976 N -51 0 0 33 51 0 h +.6653 g 4282 3009 N -51 0 0 34 51 0 h +.6657 g 4282 3043 N -51 0 0 34 51 0 h +.6661 g 4282 3077 N -51 0 0 33 51 0 h +.6665 g 4282 3110 N -51 0 0 34 51 0 h +.6669 g 4282 3144 N -51 0 0 33 51 0 h +.6672 g 4282 3177 N -51 0 0 34 51 0 h +.6676 g 4282 3211 N -51 0 0 34 51 0 h +.668 g 4282 3245 N -51 0 0 33 51 0 h +.6684 g 4282 3278 N -51 0 0 34 51 0 h +.6688 g 4282 3312 N -51 0 0 33 51 0 h +.6692 g 4282 3345 N -51 0 0 34 51 0 h +.6695 g 4282 3379 N -51 0 0 33 51 0 h +.6699 g 4282 3412 N -51 0 0 34 51 0 h +.6703 g 4282 3446 N -51 0 0 34 51 0 h +.6707 g 4282 3480 N -51 0 0 33 51 0 h +.6711 g 4282 3513 N -51 0 0 34 51 0 h +.6714 g 4282 3547 N -51 0 0 33 51 0 h +.6718 g 4282 3580 N -51 0 0 34 51 0 h +.6722 g 4282 3614 N -51 0 0 34 51 0 h +.6726 g 4282 3648 N -51 0 0 33 51 0 h +.673 g 4282 3681 N -51 0 0 34 51 0 h +.6734 g 4282 3715 N -51 0 0 33 51 0 h +.6737 g 4282 3748 N -51 0 0 34 51 0 h +.6741 g 4282 3782 N -51 0 0 34 51 0 h +.6745 g 4282 3816 N -51 0 0 33 51 0 h +.6749 g 4282 3849 N -51 0 0 34 51 0 h +.6753 g 4282 3883 N -51 0 0 33 51 0 h +.6757 g 4282 3916 N -51 0 0 34 51 0 h +.676 g 4282 3950 N -51 0 0 33 51 0 h +.6764 g 4282 3983 N -51 0 0 34 51 0 h +.6768 g 4282 4017 N -51 0 0 34 51 0 h +.6772 g 4282 4051 N -51 0 0 33 51 0 h +.6776 g 4282 4084 N -51 0 0 34 51 0 h +.678 g 4282 4118 N -51 0 0 33 51 0 h +.6783 g 4282 4151 N -51 0 0 34 51 0 h +.6787 g 4282 4185 N -51 0 0 34 51 0 h +.6791 g 4282 4219 N -51 0 0 33 51 0 h +.6516 g 4333 928 N -50 0 0 33 50 0 h +.6519 g 4333 961 N -50 0 0 34 50 0 h +.6521 g 4333 995 N -50 0 0 34 50 0 h +.6523 g 4333 1029 N -50 0 0 33 50 0 h +.6525 g 4333 1062 N -50 0 0 34 50 0 h +.6528 g 4333 1096 N -50 0 0 33 50 0 h +.653 g 4333 1129 N -50 0 0 34 50 0 h +.6532 g 4333 1163 N -50 0 0 34 50 0 h +.6535 g 4333 1197 N -50 0 0 33 50 0 h +.6537 g 4333 1230 N -50 0 0 34 50 0 h +.6539 g 4333 1264 N -50 0 0 33 50 0 h +.6542 g 4333 1297 N -50 0 0 34 50 0 h +.6544 g 4333 1331 N -50 0 0 33 50 0 h +.6546 g 4333 1364 N -50 0 0 34 50 0 h +.6548 g 4333 1398 N -50 0 0 34 50 0 h +.6551 g 4333 1432 N -50 0 0 33 50 0 h +.6553 g 4333 1465 N -50 0 0 34 50 0 h +.6555 g 4333 1499 N -50 0 0 33 50 0 h +.6558 g 4333 1532 N -50 0 0 34 50 0 h +.656 g 4333 1566 N -50 0 0 34 50 0 h +.6562 g 4333 1600 N -50 0 0 33 50 0 h +.6565 g 4333 1633 N -50 0 0 34 50 0 h +.6567 g 4333 1667 N -50 0 0 33 50 0 h +.6569 g 4333 1700 N -50 0 0 34 50 0 h +.6571 g 4333 1734 N -50 0 0 34 50 0 h +.6574 g 4333 1768 N -50 0 0 33 50 0 h +.6576 g 4333 1801 N -50 0 0 34 50 0 h +.6578 g 4333 1835 N -50 0 0 33 50 0 h +.6581 g 4333 1868 N -50 0 0 34 50 0 h +.6583 g 4333 1902 N -50 0 0 33 50 0 h +.6585 g 4333 1935 N -50 0 0 34 50 0 h +.6587 g 4333 1969 N -50 0 0 34 50 0 h +.659 g 4333 2003 N -50 0 0 33 50 0 h +.6592 g 4333 2036 N -50 0 0 34 50 0 h +.6594 g 4333 2070 N -50 0 0 33 50 0 h +.6597 g 4333 2103 N -50 0 0 34 50 0 h +.6599 g 4333 2137 N -50 0 0 34 50 0 h +.6601 g 4333 2171 N -50 0 0 33 50 0 h +.6604 g 4333 2204 N -50 0 0 34 50 0 h +.6606 g 4333 2238 N -50 0 0 33 50 0 h +.6608 g 4333 2271 N -50 0 0 34 50 0 h +.661 g 4333 2305 N -50 0 0 34 50 0 h +.6613 g 4333 2339 N -50 0 0 33 50 0 h +.6615 g 4333 2372 N -50 0 0 34 50 0 h +.6617 g 4333 2406 N -50 0 0 33 50 0 h +.662 g 4333 2439 N -50 0 0 34 50 0 h +.6622 g 4333 2473 N -50 0 0 34 50 0 h +.6624 g 4333 2507 N -50 0 0 33 50 0 h +.6626 g 4333 2540 N -50 0 0 34 50 0 h +.6629 g 4333 2574 N -50 0 0 32 50 0 h +.6631 g 4333 2606 N -50 0 0 34 50 0 h +.6633 g 4333 2640 N -50 0 0 33 50 0 h +.6636 g 4333 2673 N -50 0 0 34 50 0 h +.6638 g 4333 2707 N -50 0 0 34 50 0 h +.664 g 4333 2741 N -50 0 0 33 50 0 h +.6643 g 4333 2774 N -50 0 0 34 50 0 h +.6645 g 4333 2808 N -50 0 0 33 50 0 h +.6647 g 4333 2841 N -50 0 0 34 50 0 h +.6649 g 4333 2875 N -50 0 0 34 50 0 h +.6652 g 4333 2909 N -50 0 0 33 50 0 h +.6654 g 4333 2942 N -50 0 0 34 50 0 h +.6656 g 4333 2976 N -50 0 0 33 50 0 h +.6659 g 4333 3009 N -50 0 0 34 50 0 h +.6661 g 4333 3043 N -50 0 0 34 50 0 h +.6663 g 4333 3077 N -50 0 0 33 50 0 h +.6666 g 4333 3110 N -50 0 0 34 50 0 h +.6668 g 4333 3144 N -50 0 0 33 50 0 h +.667 g 4333 3177 N -50 0 0 34 50 0 h +.6672 g 4333 3211 N -50 0 0 34 50 0 h +.6675 g 4333 3245 N -50 0 0 33 50 0 h +.6677 g 4333 3278 N -50 0 0 34 50 0 h +.6679 g 4333 3312 N -50 0 0 33 50 0 h +.6682 g 4333 3345 N -50 0 0 34 50 0 h +.6684 g 4333 3379 N -50 0 0 33 50 0 h +.6686 g 4333 3412 N -50 0 0 34 50 0 h +.6688 g 4333 3446 N -50 0 0 34 50 0 h +.6691 g 4333 3480 N -50 0 0 33 50 0 h +.6693 g 4333 3513 N -50 0 0 34 50 0 h +.6695 g 4333 3547 N -50 0 0 33 50 0 h +.6698 g 4333 3580 N -50 0 0 34 50 0 h +.67 g 4333 3614 N -50 0 0 34 50 0 h +.6702 g 4333 3648 N -50 0 0 33 50 0 h +.6705 g 4333 3681 N -50 0 0 34 50 0 h +.6707 g 4333 3715 N -50 0 0 33 50 0 h +.6709 g 4333 3748 N -50 0 0 34 50 0 h +.6711 g 4333 3782 N -50 0 0 34 50 0 h +.6714 g 4333 3816 N -50 0 0 33 50 0 h +.6716 g 4333 3849 N -50 0 0 34 50 0 h +.6718 g 4333 3883 N -50 0 0 33 50 0 h +.6721 g 4333 3916 N -50 0 0 34 50 0 h +.6723 g 4333 3950 N -50 0 0 33 50 0 h +.6725 g 4333 3983 N -50 0 0 34 50 0 h +.6728 g 4333 4017 N -50 0 0 34 50 0 h +.673 g 4333 4051 N -50 0 0 33 50 0 h +.6732 g 4333 4084 N -50 0 0 34 50 0 h +.6734 g 4333 4118 N -50 0 0 33 50 0 h +.6737 g 4333 4151 N -50 0 0 34 50 0 h +.6739 g 4333 4185 N -50 0 0 34 50 0 h +.6741 g 4333 4219 N -50 0 0 33 50 0 h +.6617 g 4383 928 N -51 0 0 33 51 0 h +.6617 g 4383 961 N -51 0 0 34 51 0 h +.6618 g 4383 995 N -51 0 0 34 51 0 h +.6619 g 4383 1029 N -51 0 0 33 51 0 h +.662 g 4383 1062 N -51 0 0 34 51 0 h +.662 g 4383 1096 N -51 0 0 33 51 0 h +.6621 g 4383 1129 N -51 0 0 34 51 0 h +.6622 g 4383 1163 N -51 0 0 34 51 0 h +.6623 g 4383 1197 N -51 0 0 33 51 0 h +.6623 g 4383 1230 N -51 0 0 34 51 0 h +.6624 g 4383 1264 N -51 0 0 33 51 0 h +.6625 g 4383 1297 N -51 0 0 34 51 0 h +.6626 g 4383 1331 N -51 0 0 33 51 0 h +.6626 g 4383 1364 N -51 0 0 34 51 0 h +.6627 g 4383 1398 N -51 0 0 34 51 0 h +.6628 g 4383 1432 N -51 0 0 33 51 0 h +.6629 g 4383 1465 N -51 0 0 34 51 0 h +.663 g 4383 1499 N -51 0 0 33 51 0 h +.663 g 4383 1532 N -51 0 0 34 51 0 h +.6631 g 4383 1566 N -51 0 0 34 51 0 h +.6632 g 4383 1600 N -51 0 0 33 51 0 h +.6633 g 4383 1633 N -51 0 0 34 51 0 h +.6633 g 4383 1667 N -51 0 0 33 51 0 h +.6634 g 4383 1700 N -51 0 0 34 51 0 h +.6635 g 4383 1734 N -51 0 0 34 51 0 h +.6636 g 4383 1768 N -51 0 0 33 51 0 h +.6636 g 4383 1801 N -51 0 0 34 51 0 h +.6637 g 4383 1835 N -51 0 0 33 51 0 h +.6638 g 4383 1868 N -51 0 0 34 51 0 h +.6639 g 4383 1902 N -51 0 0 33 51 0 h +.664 g 4383 1935 N -51 0 0 34 51 0 h +.664 g 4383 1969 N -51 0 0 34 51 0 h +.6641 g 4383 2003 N -51 0 0 33 51 0 h +.6642 g 4383 2036 N -51 0 0 34 51 0 h +.6643 g 4383 2070 N -51 0 0 33 51 0 h +.6643 g 4383 2103 N -51 0 0 34 51 0 h +.6644 g 4383 2137 N -51 0 0 34 51 0 h +.6645 g 4383 2171 N -51 0 0 33 51 0 h +.6646 g 4383 2204 N -51 0 0 34 51 0 h +.6646 g 4383 2238 N -51 0 0 33 51 0 h +.6647 g 4383 2271 N -51 0 0 34 51 0 h +.6648 g 4383 2305 N -51 0 0 34 51 0 h +.6649 g 4383 2339 N -51 0 0 33 51 0 h +.6649 g 4383 2372 N -51 0 0 34 51 0 h +.665 g 4383 2406 N -51 0 0 33 51 0 h +.6651 g 4383 2439 N -51 0 0 34 51 0 h +.6652 g 4383 2473 N -51 0 0 34 51 0 h +.6653 g 4383 2507 N -51 0 0 33 51 0 h +.6653 g 4383 2540 N -51 0 0 34 51 0 h +.6654 g 4383 2574 N -51 0 0 32 51 0 h +.6655 g 4383 2606 N -51 0 0 34 51 0 h +.6656 g 4383 2640 N -51 0 0 33 51 0 h +.6656 g 4383 2673 N -51 0 0 34 51 0 h +.6657 g 4383 2707 N -51 0 0 34 51 0 h +.6658 g 4383 2741 N -51 0 0 33 51 0 h +.6659 g 4383 2774 N -51 0 0 34 51 0 h +.6659 g 4383 2808 N -51 0 0 33 51 0 h +.666 g 4383 2841 N -51 0 0 34 51 0 h +.6661 g 4383 2875 N -51 0 0 34 51 0 h +.6662 g 4383 2909 N -51 0 0 33 51 0 h +.6662 g 4383 2942 N -51 0 0 34 51 0 h +.6663 g 4383 2976 N -51 0 0 33 51 0 h +.6664 g 4383 3009 N -51 0 0 34 51 0 h +.6665 g 4383 3043 N -51 0 0 34 51 0 h +.6666 g 4383 3077 N -51 0 0 33 51 0 h +.6666 g 4383 3110 N -51 0 0 34 51 0 h +.6667 g 4383 3144 N -51 0 0 33 51 0 h +.6668 g 4383 3177 N -51 0 0 34 51 0 h +.6669 g 4383 3211 N -51 0 0 34 51 0 h +.6669 g 4383 3245 N -51 0 0 33 51 0 h +.667 g 4383 3278 N -51 0 0 34 51 0 h +.6671 g 4383 3312 N -51 0 0 33 51 0 h +.6672 g 4383 3345 N -51 0 0 34 51 0 h +.6672 g 4383 3379 N -51 0 0 33 51 0 h +.6673 g 4383 3412 N -51 0 0 34 51 0 h +.6674 g 4383 3446 N -51 0 0 34 51 0 h +.6675 g 4383 3480 N -51 0 0 33 51 0 h +.6675 g 4383 3513 N -51 0 0 34 51 0 h +.6676 g 4383 3547 N -51 0 0 33 51 0 h +.6677 g 4383 3580 N -51 0 0 34 51 0 h +.6678 g 4383 3614 N -51 0 0 34 51 0 h +.6679 g 4383 3648 N -51 0 0 33 51 0 h +.6679 g 4383 3681 N -51 0 0 34 51 0 h +.668 g 4383 3715 N -51 0 0 33 51 0 h +.6681 g 4383 3748 N -51 0 0 34 51 0 h +.6682 g 4383 3782 N -51 0 0 34 51 0 h +.6682 g 4383 3816 N -51 0 0 33 51 0 h +.6683 g 4383 3849 N -51 0 0 34 51 0 h +.6684 g 4383 3883 N -51 0 0 33 51 0 h +.6685 g 4383 3916 N -51 0 0 34 51 0 h +.6685 g 4383 3950 N -51 0 0 33 51 0 h +.6686 g 4383 3983 N -51 0 0 34 51 0 h +.6687 g 4383 4017 N -51 0 0 34 51 0 h +.6688 g 4383 4051 N -51 0 0 33 51 0 h +.6688 g 4383 4084 N -51 0 0 34 51 0 h +.6689 g 4383 4118 N -51 0 0 33 51 0 h +.669 g 4383 4151 N -51 0 0 34 51 0 h +.6691 g 4383 4185 N -51 0 0 34 51 0 h +.6692 g 4383 4219 N -51 0 0 33 51 0 h +.6717 g 4434 928 N -50 0 0 33 50 0 h +.6716 g 4434 961 N -50 0 0 34 50 0 h +.6715 g 4434 995 N -50 0 0 34 50 0 h +.6714 g 4434 1029 N -50 0 0 33 50 0 h +.6714 g 4434 1062 N -50 0 0 34 50 0 h +.6713 g 4434 1096 N -50 0 0 33 50 0 h +.6712 g 4434 1129 N -50 0 0 34 50 0 h +.6711 g 4434 1163 N -50 0 0 34 50 0 h +.6711 g 4434 1197 N -50 0 0 33 50 0 h +.671 g 4434 1230 N -50 0 0 34 50 0 h +.6709 g 4434 1264 N -50 0 0 33 50 0 h +.6708 g 4434 1297 N -50 0 0 34 50 0 h +.6708 g 4434 1331 N -50 0 0 33 50 0 h +.6707 g 4434 1364 N -50 0 0 34 50 0 h +.6706 g 4434 1398 N -50 0 0 34 50 0 h +.6705 g 4434 1432 N -50 0 0 33 50 0 h +.6705 g 4434 1465 N -50 0 0 34 50 0 h +.6704 g 4434 1499 N -50 0 0 33 50 0 h +.6703 g 4434 1532 N -50 0 0 34 50 0 h +.6702 g 4434 1566 N -50 0 0 34 50 0 h +.6701 g 4434 1600 N -50 0 0 33 50 0 h +.6701 g 4434 1633 N -50 0 0 34 50 0 h +.67 g 4434 1667 N -50 0 0 33 50 0 h +.6699 g 4434 1700 N -50 0 0 34 50 0 h +.6698 g 4434 1734 N -50 0 0 34 50 0 h +.6698 g 4434 1768 N -50 0 0 33 50 0 h +.6697 g 4434 1801 N -50 0 0 34 50 0 h +.6696 g 4434 1835 N -50 0 0 33 50 0 h +.6695 g 4434 1868 N -50 0 0 34 50 0 h +.6695 g 4434 1902 N -50 0 0 33 50 0 h +.6694 g 4434 1935 N -50 0 0 34 50 0 h +.6693 g 4434 1969 N -50 0 0 34 50 0 h +.6692 g 4434 2003 N -50 0 0 33 50 0 h +.6692 g 4434 2036 N -50 0 0 34 50 0 h +.6691 g 4434 2070 N -50 0 0 33 50 0 h +.669 g 4434 2103 N -50 0 0 34 50 0 h +.6689 g 4434 2137 N -50 0 0 34 50 0 h +.6688 g 4434 2171 N -50 0 0 33 50 0 h +.6688 g 4434 2204 N -50 0 0 34 50 0 h +.6687 g 4434 2238 N -50 0 0 33 50 0 h +.6686 g 4434 2271 N -50 0 0 34 50 0 h +.6685 g 4434 2305 N -50 0 0 34 50 0 h +.6685 g 4434 2339 N -50 0 0 33 50 0 h +.6684 g 4434 2372 N -50 0 0 34 50 0 h +.6683 g 4434 2406 N -50 0 0 33 50 0 h +.6682 g 4434 2439 N -50 0 0 34 50 0 h +.6682 g 4434 2473 N -50 0 0 34 50 0 h +.6681 g 4434 2507 N -50 0 0 33 50 0 h +.668 g 4434 2540 N -50 0 0 34 50 0 h +.6679 g 4434 2574 N -50 0 0 32 50 0 h +.6679 g 4434 2606 N -50 0 0 34 50 0 h +.6678 g 4434 2640 N -50 0 0 33 50 0 h +.6677 g 4434 2673 N -50 0 0 34 50 0 h +.6676 g 4434 2707 N -50 0 0 34 50 0 h +.6675 g 4434 2741 N -50 0 0 33 50 0 h +.6675 g 4434 2774 N -50 0 0 34 50 0 h +.6674 g 4434 2808 N -50 0 0 33 50 0 h +.6673 g 4434 2841 N -50 0 0 34 50 0 h +.6672 g 4434 2875 N -50 0 0 34 50 0 h +.6672 g 4434 2909 N -50 0 0 33 50 0 h +.6671 g 4434 2942 N -50 0 0 34 50 0 h +.667 g 4434 2976 N -50 0 0 33 50 0 h +.6669 g 4434 3009 N -50 0 0 34 50 0 h +.6669 g 4434 3043 N -50 0 0 34 50 0 h +.6668 g 4434 3077 N -50 0 0 33 50 0 h +.6667 g 4434 3110 N -50 0 0 34 50 0 h +.6666 g 4434 3144 N -50 0 0 33 50 0 h +.6666 g 4434 3177 N -50 0 0 34 50 0 h +.6665 g 4434 3211 N -50 0 0 34 50 0 h +.6664 g 4434 3245 N -50 0 0 33 50 0 h +.6663 g 4434 3278 N -50 0 0 34 50 0 h +.6662 g 4434 3312 N -50 0 0 33 50 0 h +.6662 g 4434 3345 N -50 0 0 34 50 0 h +.6661 g 4434 3379 N -50 0 0 33 50 0 h +.666 g 4434 3412 N -50 0 0 34 50 0 h +.6659 g 4434 3446 N -50 0 0 34 50 0 h +.6659 g 4434 3480 N -50 0 0 33 50 0 h +.6658 g 4434 3513 N -50 0 0 34 50 0 h +.6657 g 4434 3547 N -50 0 0 33 50 0 h +.6656 g 4434 3580 N -50 0 0 34 50 0 h +.6656 g 4434 3614 N -50 0 0 34 50 0 h +.6655 g 4434 3648 N -50 0 0 33 50 0 h +.6654 g 4434 3681 N -50 0 0 34 50 0 h +.6653 g 4434 3715 N -50 0 0 33 50 0 h +.6653 g 4434 3748 N -50 0 0 34 50 0 h +.6652 g 4434 3782 N -50 0 0 34 50 0 h +.6651 g 4434 3816 N -50 0 0 33 50 0 h +.665 g 4434 3849 N -50 0 0 34 50 0 h +.6649 g 4434 3883 N -50 0 0 33 50 0 h +.6649 g 4434 3916 N -50 0 0 34 50 0 h +.6648 g 4434 3950 N -50 0 0 33 50 0 h +.6647 g 4434 3983 N -50 0 0 34 50 0 h +.6646 g 4434 4017 N -50 0 0 34 50 0 h +.6646 g 4434 4051 N -50 0 0 33 50 0 h +.6645 g 4434 4084 N -50 0 0 34 50 0 h +.6644 g 4434 4118 N -50 0 0 33 50 0 h +.6643 g 4434 4151 N -50 0 0 34 50 0 h +.6643 g 4434 4185 N -50 0 0 34 50 0 h +.6642 g 4434 4219 N -50 0 0 33 50 0 h +.6817 g 4484 928 N -51 0 0 33 51 0 h +.6815 g 4484 961 N -51 0 0 34 51 0 h +.6812 g 4484 995 N -51 0 0 34 51 0 h +.681 g 4484 1029 N -51 0 0 33 51 0 h +.6808 g 4484 1062 N -51 0 0 34 51 0 h +.6806 g 4484 1096 N -51 0 0 33 51 0 h +.6803 g 4484 1129 N -51 0 0 34 51 0 h +.6801 g 4484 1163 N -51 0 0 34 51 0 h +.6799 g 4484 1197 N -51 0 0 33 51 0 h +.6796 g 4484 1230 N -51 0 0 34 51 0 h +.6794 g 4484 1264 N -51 0 0 33 51 0 h +.6792 g 4484 1297 N -51 0 0 34 51 0 h +.6789 g 4484 1331 N -51 0 0 33 51 0 h +.6787 g 4484 1364 N -51 0 0 34 51 0 h +.6785 g 4484 1398 N -51 0 0 34 51 0 h +.6783 g 4484 1432 N -51 0 0 33 51 0 h +.678 g 4484 1465 N -51 0 0 34 51 0 h +.6778 g 4484 1499 N -51 0 0 33 51 0 h +.6776 g 4484 1532 N -51 0 0 34 51 0 h +.6773 g 4484 1566 N -51 0 0 34 51 0 h +.6771 g 4484 1600 N -51 0 0 33 51 0 h +.6769 g 4484 1633 N -51 0 0 34 51 0 h +.6767 g 4484 1667 N -51 0 0 33 51 0 h +.6764 g 4484 1700 N -51 0 0 34 51 0 h +.6762 g 4484 1734 N -51 0 0 34 51 0 h +.676 g 4484 1768 N -51 0 0 33 51 0 h +.6757 g 4484 1801 N -51 0 0 34 51 0 h +.6755 g 4484 1835 N -51 0 0 33 51 0 h +.6753 g 4484 1868 N -51 0 0 34 51 0 h +.675 g 4484 1902 N -51 0 0 33 51 0 h +.6748 g 4484 1935 N -51 0 0 34 51 0 h +.6746 g 4484 1969 N -51 0 0 34 51 0 h +.6744 g 4484 2003 N -51 0 0 33 51 0 h +.6741 g 4484 2036 N -51 0 0 34 51 0 h +.6739 g 4484 2070 N -51 0 0 33 51 0 h +.6737 g 4484 2103 N -51 0 0 34 51 0 h +.6734 g 4484 2137 N -51 0 0 34 51 0 h +.6732 g 4484 2171 N -51 0 0 33 51 0 h +.673 g 4484 2204 N -51 0 0 34 51 0 h +.6728 g 4484 2238 N -51 0 0 33 51 0 h +.6725 g 4484 2271 N -51 0 0 34 51 0 h +.6723 g 4484 2305 N -51 0 0 34 51 0 h +.6721 g 4484 2339 N -51 0 0 33 51 0 h +.6718 g 4484 2372 N -51 0 0 34 51 0 h +.6716 g 4484 2406 N -51 0 0 33 51 0 h +.6714 g 4484 2439 N -51 0 0 34 51 0 h +.6711 g 4484 2473 N -51 0 0 34 51 0 h +.6709 g 4484 2507 N -51 0 0 33 51 0 h +.6707 g 4484 2540 N -51 0 0 34 51 0 h +.6705 g 4484 2574 N -51 0 0 32 51 0 h +.6702 g 4484 2606 N -51 0 0 34 51 0 h +.67 g 4484 2640 N -51 0 0 33 51 0 h +.6698 g 4484 2673 N -51 0 0 34 51 0 h +.6695 g 4484 2707 N -51 0 0 34 51 0 h +.6693 g 4484 2741 N -51 0 0 33 51 0 h +.6691 g 4484 2774 N -51 0 0 34 51 0 h +.6688 g 4484 2808 N -51 0 0 33 51 0 h +.6686 g 4484 2841 N -51 0 0 34 51 0 h +.6684 g 4484 2875 N -51 0 0 34 51 0 h +.6682 g 4484 2909 N -51 0 0 33 51 0 h +.6679 g 4484 2942 N -51 0 0 34 51 0 h +.6677 g 4484 2976 N -51 0 0 33 51 0 h +.6675 g 4484 3009 N -51 0 0 34 51 0 h +.6672 g 4484 3043 N -51 0 0 34 51 0 h +.667 g 4484 3077 N -51 0 0 33 51 0 h +.6668 g 4484 3110 N -51 0 0 34 51 0 h +.6666 g 4484 3144 N -51 0 0 33 51 0 h +.6663 g 4484 3177 N -51 0 0 34 51 0 h +.6661 g 4484 3211 N -51 0 0 34 51 0 h +.6659 g 4484 3245 N -51 0 0 33 51 0 h +.6656 g 4484 3278 N -51 0 0 34 51 0 h +.6654 g 4484 3312 N -51 0 0 33 51 0 h +.6652 g 4484 3345 N -51 0 0 34 51 0 h +.6649 g 4484 3379 N -51 0 0 33 51 0 h +.6647 g 4484 3412 N -51 0 0 34 51 0 h +.6645 g 4484 3446 N -51 0 0 34 51 0 h +.6643 g 4484 3480 N -51 0 0 33 51 0 h +.664 g 4484 3513 N -51 0 0 34 51 0 h +.6638 g 4484 3547 N -51 0 0 33 51 0 h +.6636 g 4484 3580 N -51 0 0 34 51 0 h +.6633 g 4484 3614 N -51 0 0 34 51 0 h +.6631 g 4484 3648 N -51 0 0 33 51 0 h +.6629 g 4484 3681 N -51 0 0 34 51 0 h +.6626 g 4484 3715 N -51 0 0 33 51 0 h +.6624 g 4484 3748 N -51 0 0 34 51 0 h +.6622 g 4484 3782 N -51 0 0 34 51 0 h +.662 g 4484 3816 N -51 0 0 33 51 0 h +.6617 g 4484 3849 N -51 0 0 34 51 0 h +.6615 g 4484 3883 N -51 0 0 33 51 0 h +.6613 g 4484 3916 N -51 0 0 34 51 0 h +.661 g 4484 3950 N -51 0 0 33 51 0 h +.6608 g 4484 3983 N -51 0 0 34 51 0 h +.6606 g 4484 4017 N -51 0 0 34 51 0 h +.6604 g 4484 4051 N -51 0 0 33 51 0 h +.6601 g 4484 4084 N -51 0 0 34 51 0 h +.6599 g 4484 4118 N -51 0 0 33 51 0 h +.6597 g 4484 4151 N -51 0 0 34 51 0 h +.6594 g 4484 4185 N -51 0 0 34 51 0 h +.6592 g 4484 4219 N -51 0 0 33 51 0 h +.6917 g 4535 928 N -50 0 0 33 50 0 h +.6913 g 4535 961 N -50 0 0 34 50 0 h +.691 g 4535 995 N -50 0 0 34 50 0 h +.6906 g 4535 1029 N -50 0 0 33 50 0 h +.6902 g 4535 1062 N -50 0 0 34 50 0 h +.6898 g 4535 1096 N -50 0 0 33 50 0 h +.6894 g 4535 1129 N -50 0 0 34 50 0 h +.689 g 4535 1163 N -50 0 0 34 50 0 h +.6887 g 4535 1197 N -50 0 0 33 50 0 h +.6883 g 4535 1230 N -50 0 0 34 50 0 h +.6879 g 4535 1264 N -50 0 0 33 50 0 h +.6875 g 4535 1297 N -50 0 0 34 50 0 h +.6871 g 4535 1331 N -50 0 0 33 50 0 h +.6868 g 4535 1364 N -50 0 0 34 50 0 h +.6864 g 4535 1398 N -50 0 0 34 50 0 h +.686 g 4535 1432 N -50 0 0 33 50 0 h +.6856 g 4535 1465 N -50 0 0 34 50 0 h +.6852 g 4535 1499 N -50 0 0 33 50 0 h +.6848 g 4535 1532 N -50 0 0 34 50 0 h +.6845 g 4535 1566 N -50 0 0 34 50 0 h +.6841 g 4535 1600 N -50 0 0 33 50 0 h +.6837 g 4535 1633 N -50 0 0 34 50 0 h +.6833 g 4535 1667 N -50 0 0 33 50 0 h +.6829 g 4535 1700 N -50 0 0 34 50 0 h +.6825 g 4535 1734 N -50 0 0 34 50 0 h +.6822 g 4535 1768 N -50 0 0 33 50 0 h +.6818 g 4535 1801 N -50 0 0 34 50 0 h +.6814 g 4535 1835 N -50 0 0 33 50 0 h +.681 g 4535 1868 N -50 0 0 34 50 0 h +.6806 g 4535 1902 N -50 0 0 33 50 0 h +.6802 g 4535 1935 N -50 0 0 34 50 0 h +.6799 g 4535 1969 N -50 0 0 34 50 0 h +.6795 g 4535 2003 N -50 0 0 33 50 0 h +.6791 g 4535 2036 N -50 0 0 34 50 0 h +.6787 g 4535 2070 N -50 0 0 33 50 0 h +.6783 g 4535 2103 N -50 0 0 34 50 0 h +.678 g 4535 2137 N -50 0 0 34 50 0 h +.6776 g 4535 2171 N -50 0 0 33 50 0 h +.6772 g 4535 2204 N -50 0 0 34 50 0 h +.6768 g 4535 2238 N -50 0 0 33 50 0 h +.6764 g 4535 2271 N -50 0 0 34 50 0 h +.676 g 4535 2305 N -50 0 0 34 50 0 h +.6757 g 4535 2339 N -50 0 0 33 50 0 h +.6753 g 4535 2372 N -50 0 0 34 50 0 h +.6749 g 4535 2406 N -50 0 0 33 50 0 h +.6745 g 4535 2439 N -50 0 0 34 50 0 h +.6741 g 4535 2473 N -50 0 0 34 50 0 h +.6737 g 4535 2507 N -50 0 0 33 50 0 h +.6734 g 4535 2540 N -50 0 0 34 50 0 h +.673 g 4535 2574 N -50 0 0 32 50 0 h +.6726 g 4535 2606 N -50 0 0 34 50 0 h +.6722 g 4535 2640 N -50 0 0 33 50 0 h +.6718 g 4535 2673 N -50 0 0 34 50 0 h +.6714 g 4535 2707 N -50 0 0 34 50 0 h +.6711 g 4535 2741 N -50 0 0 33 50 0 h +.6707 g 4535 2774 N -50 0 0 34 50 0 h +.6703 g 4535 2808 N -50 0 0 33 50 0 h +.6699 g 4535 2841 N -50 0 0 34 50 0 h +.6695 g 4535 2875 N -50 0 0 34 50 0 h +.6692 g 4535 2909 N -50 0 0 33 50 0 h +.6688 g 4535 2942 N -50 0 0 34 50 0 h +.6684 g 4535 2976 N -50 0 0 33 50 0 h +.668 g 4535 3009 N -50 0 0 34 50 0 h +.6676 g 4535 3043 N -50 0 0 34 50 0 h +.6672 g 4535 3077 N -50 0 0 33 50 0 h +.6669 g 4535 3110 N -50 0 0 34 50 0 h +.6665 g 4535 3144 N -50 0 0 33 50 0 h +.6661 g 4535 3177 N -50 0 0 34 50 0 h +.6657 g 4535 3211 N -50 0 0 34 50 0 h +.6653 g 4535 3245 N -50 0 0 33 50 0 h +.6649 g 4535 3278 N -50 0 0 34 50 0 h +.6646 g 4535 3312 N -50 0 0 33 50 0 h +.6642 g 4535 3345 N -50 0 0 34 50 0 h +.6638 g 4535 3379 N -50 0 0 33 50 0 h +.6634 g 4535 3412 N -50 0 0 34 50 0 h +.663 g 4535 3446 N -50 0 0 34 50 0 h +.6626 g 4535 3480 N -50 0 0 33 50 0 h +.6623 g 4535 3513 N -50 0 0 34 50 0 h +.6619 g 4535 3547 N -50 0 0 33 50 0 h +.6615 g 4535 3580 N -50 0 0 34 50 0 h +.6611 g 4535 3614 N -50 0 0 34 50 0 h +.6607 g 4535 3648 N -50 0 0 33 50 0 h +.6604 g 4535 3681 N -50 0 0 34 50 0 h +.66 g 4535 3715 N -50 0 0 33 50 0 h +.6596 g 4535 3748 N -50 0 0 34 50 0 h +.6592 g 4535 3782 N -50 0 0 34 50 0 h +.6588 g 4535 3816 N -50 0 0 33 50 0 h +.6584 g 4535 3849 N -50 0 0 34 50 0 h +.6581 g 4535 3883 N -50 0 0 33 50 0 h +.6577 g 4535 3916 N -50 0 0 34 50 0 h +.6573 g 4535 3950 N -50 0 0 33 50 0 h +.6569 g 4535 3983 N -50 0 0 34 50 0 h +.6565 g 4535 4017 N -50 0 0 34 50 0 h +.6561 g 4535 4051 N -50 0 0 33 50 0 h +.6558 g 4535 4084 N -50 0 0 34 50 0 h +.6554 g 4535 4118 N -50 0 0 33 50 0 h +.655 g 4535 4151 N -50 0 0 34 50 0 h +.6546 g 4535 4185 N -50 0 0 34 50 0 h +.6542 g 4535 4219 N -50 0 0 33 50 0 h +.7018 g 4585 928 N -51 0 0 33 51 0 h +.7012 g 4585 961 N -51 0 0 34 51 0 h +.7007 g 4585 995 N -51 0 0 34 51 0 h +.7001 g 4585 1029 N -51 0 0 33 51 0 h +.6996 g 4585 1062 N -51 0 0 34 51 0 h +.6991 g 4585 1096 N -51 0 0 33 51 0 h +.6985 g 4585 1129 N -51 0 0 34 51 0 h +.698 g 4585 1163 N -51 0 0 34 51 0 h +.6975 g 4585 1197 N -51 0 0 33 51 0 h +.6969 g 4585 1230 N -51 0 0 34 51 0 h +.6964 g 4585 1264 N -51 0 0 33 51 0 h +.6959 g 4585 1297 N -51 0 0 34 51 0 h +.6953 g 4585 1331 N -51 0 0 33 51 0 h +.6948 g 4585 1364 N -51 0 0 34 51 0 h +.6943 g 4585 1398 N -51 0 0 34 51 0 h +.6937 g 4585 1432 N -51 0 0 33 51 0 h +.6932 g 4585 1465 N -51 0 0 34 51 0 h +.6926 g 4585 1499 N -51 0 0 33 51 0 h +.6921 g 4585 1532 N -51 0 0 34 51 0 h +.6916 g 4585 1566 N -51 0 0 34 51 0 h +.691 g 4585 1600 N -51 0 0 33 51 0 h +.6905 g 4585 1633 N -51 0 0 34 51 0 h +.69 g 4585 1667 N -51 0 0 33 51 0 h +.6894 g 4585 1700 N -51 0 0 34 51 0 h +.6889 g 4585 1734 N -51 0 0 34 51 0 h +.6884 g 4585 1768 N -51 0 0 33 51 0 h +.6878 g 4585 1801 N -51 0 0 34 51 0 h +.6873 g 4585 1835 N -51 0 0 33 51 0 h +.6868 g 4585 1868 N -51 0 0 34 51 0 h +.6862 g 4585 1902 N -51 0 0 33 51 0 h +.6857 g 4585 1935 N -51 0 0 34 51 0 h +.6851 g 4585 1969 N -51 0 0 34 51 0 h +.6846 g 4585 2003 N -51 0 0 33 51 0 h +.6841 g 4585 2036 N -51 0 0 34 51 0 h +.6835 g 4585 2070 N -51 0 0 33 51 0 h +.683 g 4585 2103 N -51 0 0 34 51 0 h +.6825 g 4585 2137 N -51 0 0 34 51 0 h +.6819 g 4585 2171 N -51 0 0 33 51 0 h +.6814 g 4585 2204 N -51 0 0 34 51 0 h +.6809 g 4585 2238 N -51 0 0 33 51 0 h +.6803 g 4585 2271 N -51 0 0 34 51 0 h +.6798 g 4585 2305 N -51 0 0 34 51 0 h +.6793 g 4585 2339 N -51 0 0 33 51 0 h +.6787 g 4585 2372 N -51 0 0 34 51 0 h +.6782 g 4585 2406 N -51 0 0 33 51 0 h +.6776 g 4585 2439 N -51 0 0 34 51 0 h +.6771 g 4585 2473 N -51 0 0 34 51 0 h +.6766 g 4585 2507 N -51 0 0 33 51 0 h +.676 g 4585 2540 N -51 0 0 34 51 0 h +.6755 g 4585 2574 N -51 0 0 32 51 0 h +.675 g 4585 2606 N -51 0 0 34 51 0 h +.6744 g 4585 2640 N -51 0 0 33 51 0 h +.6739 g 4585 2673 N -51 0 0 34 51 0 h +.6734 g 4585 2707 N -51 0 0 34 51 0 h +.6728 g 4585 2741 N -51 0 0 33 51 0 h +.6723 g 4585 2774 N -51 0 0 34 51 0 h +.6718 g 4585 2808 N -51 0 0 33 51 0 h +.6712 g 4585 2841 N -51 0 0 34 51 0 h +.6707 g 4585 2875 N -51 0 0 34 51 0 h +.6701 g 4585 2909 N -51 0 0 33 51 0 h +.6696 g 4585 2942 N -51 0 0 34 51 0 h +.6691 g 4585 2976 N -51 0 0 33 51 0 h +.6685 g 4585 3009 N -51 0 0 34 51 0 h +.668 g 4585 3043 N -51 0 0 34 51 0 h +.6675 g 4585 3077 N -51 0 0 33 51 0 h +.6669 g 4585 3110 N -51 0 0 34 51 0 h +.6664 g 4585 3144 N -51 0 0 33 51 0 h +.6659 g 4585 3177 N -51 0 0 34 51 0 h +.6653 g 4585 3211 N -51 0 0 34 51 0 h +.6648 g 4585 3245 N -51 0 0 33 51 0 h +.6643 g 4585 3278 N -51 0 0 34 51 0 h +.6637 g 4585 3312 N -51 0 0 33 51 0 h +.6632 g 4585 3345 N -51 0 0 34 51 0 h +.6626 g 4585 3379 N -51 0 0 33 51 0 h +.6621 g 4585 3412 N -51 0 0 34 51 0 h +.6616 g 4585 3446 N -51 0 0 34 51 0 h +.661 g 4585 3480 N -51 0 0 33 51 0 h +.6605 g 4585 3513 N -51 0 0 34 51 0 h +.66 g 4585 3547 N -51 0 0 33 51 0 h +.6594 g 4585 3580 N -51 0 0 34 51 0 h +.6589 g 4585 3614 N -51 0 0 34 51 0 h +.6584 g 4585 3648 N -51 0 0 33 51 0 h +.6578 g 4585 3681 N -51 0 0 34 51 0 h +.6573 g 4585 3715 N -51 0 0 33 51 0 h +.6568 g 4585 3748 N -51 0 0 34 51 0 h +.6562 g 4585 3782 N -51 0 0 34 51 0 h +.6557 g 4585 3816 N -51 0 0 33 51 0 h +.6552 g 4585 3849 N -51 0 0 34 51 0 h +.6546 g 4585 3883 N -51 0 0 33 51 0 h +.6541 g 4585 3916 N -51 0 0 34 51 0 h +.6535 g 4585 3950 N -51 0 0 33 51 0 h +.653 g 4585 3983 N -51 0 0 34 51 0 h +.6525 g 4585 4017 N -51 0 0 34 51 0 h +.6519 g 4585 4051 N -51 0 0 33 51 0 h +.6514 g 4585 4084 N -51 0 0 34 51 0 h +.6509 g 4585 4118 N -51 0 0 33 51 0 h +.6503 g 4585 4151 N -51 0 0 34 51 0 h +.6498 g 4585 4185 N -51 0 0 34 51 0 h +.6493 g 4585 4219 N -51 0 0 33 51 0 h +.7118 g 4636 928 N -50 0 0 33 50 0 h +.7111 g 4636 961 N -50 0 0 34 50 0 h +.7104 g 4636 995 N -50 0 0 34 50 0 h +.7097 g 4636 1029 N -50 0 0 33 50 0 h +.709 g 4636 1062 N -50 0 0 34 50 0 h +.7083 g 4636 1096 N -50 0 0 33 50 0 h +.7076 g 4636 1129 N -50 0 0 34 50 0 h +.707 g 4636 1163 N -50 0 0 34 50 0 h +.7063 g 4636 1197 N -50 0 0 33 50 0 h +.7056 g 4636 1230 N -50 0 0 34 50 0 h +.7049 g 4636 1264 N -50 0 0 33 50 0 h +.7042 g 4636 1297 N -50 0 0 34 50 0 h +.7035 g 4636 1331 N -50 0 0 33 50 0 h +.7028 g 4636 1364 N -50 0 0 34 50 0 h +.7021 g 4636 1398 N -50 0 0 34 50 0 h +.7014 g 4636 1432 N -50 0 0 33 50 0 h +.7008 g 4636 1465 N -50 0 0 34 50 0 h +.7001 g 4636 1499 N -50 0 0 33 50 0 h +.6994 g 4636 1532 N -50 0 0 34 50 0 h +.6987 g 4636 1566 N -50 0 0 34 50 0 h +.698 g 4636 1600 N -50 0 0 33 50 0 h +.6973 g 4636 1633 N -50 0 0 34 50 0 h +.6966 g 4636 1667 N -50 0 0 33 50 0 h +.6959 g 4636 1700 N -50 0 0 34 50 0 h +.6952 g 4636 1734 N -50 0 0 34 50 0 h +.6946 g 4636 1768 N -50 0 0 33 50 0 h +.6939 g 4636 1801 N -50 0 0 34 50 0 h +.6932 g 4636 1835 N -50 0 0 33 50 0 h +.6925 g 4636 1868 N -50 0 0 34 50 0 h +.6918 g 4636 1902 N -50 0 0 33 50 0 h +.6911 g 4636 1935 N -50 0 0 34 50 0 h +.6904 g 4636 1969 N -50 0 0 34 50 0 h +.6897 g 4636 2003 N -50 0 0 33 50 0 h +.689 g 4636 2036 N -50 0 0 34 50 0 h +.6884 g 4636 2070 N -50 0 0 33 50 0 h +.6877 g 4636 2103 N -50 0 0 34 50 0 h +.687 g 4636 2137 N -50 0 0 34 50 0 h +.6863 g 4636 2171 N -50 0 0 33 50 0 h +.6856 g 4636 2204 N -50 0 0 34 50 0 h +.6849 g 4636 2238 N -50 0 0 33 50 0 h +.6842 g 4636 2271 N -50 0 0 34 50 0 h +.6835 g 4636 2305 N -50 0 0 34 50 0 h +.6829 g 4636 2339 N -50 0 0 33 50 0 h +.6822 g 4636 2372 N -50 0 0 34 50 0 h +.6815 g 4636 2406 N -50 0 0 33 50 0 h +.6808 g 4636 2439 N -50 0 0 34 50 0 h +.6801 g 4636 2473 N -50 0 0 34 50 0 h +.6794 g 4636 2507 N -50 0 0 33 50 0 h +.6787 g 4636 2540 N -50 0 0 34 50 0 h +.678 g 4636 2574 N -50 0 0 32 50 0 h +.6773 g 4636 2606 N -50 0 0 34 50 0 h +.6767 g 4636 2640 N -50 0 0 33 50 0 h +.676 g 4636 2673 N -50 0 0 34 50 0 h +.6753 g 4636 2707 N -50 0 0 34 50 0 h +.6746 g 4636 2741 N -50 0 0 33 50 0 h +.6739 g 4636 2774 N -50 0 0 34 50 0 h +.6732 g 4636 2808 N -50 0 0 33 50 0 h +.6725 g 4636 2841 N -50 0 0 34 50 0 h +.6718 g 4636 2875 N -50 0 0 34 50 0 h +.6711 g 4636 2909 N -50 0 0 33 50 0 h +.6705 g 4636 2942 N -50 0 0 34 50 0 h +.6698 g 4636 2976 N -50 0 0 33 50 0 h +.6691 g 4636 3009 N -50 0 0 34 50 0 h +.6684 g 4636 3043 N -50 0 0 34 50 0 h +.6677 g 4636 3077 N -50 0 0 33 50 0 h +.667 g 4636 3110 N -50 0 0 34 50 0 h +.6663 g 4636 3144 N -50 0 0 33 50 0 h +.6656 g 4636 3177 N -50 0 0 34 50 0 h +.6649 g 4636 3211 N -50 0 0 34 50 0 h +.6643 g 4636 3245 N -50 0 0 33 50 0 h +.6636 g 4636 3278 N -50 0 0 34 50 0 h +.6629 g 4636 3312 N -50 0 0 33 50 0 h +.6622 g 4636 3345 N -50 0 0 34 50 0 h +.6615 g 4636 3379 N -50 0 0 33 50 0 h +.6608 g 4636 3412 N -50 0 0 34 50 0 h +.6601 g 4636 3446 N -50 0 0 34 50 0 h +.6594 g 4636 3480 N -50 0 0 33 50 0 h +.6587 g 4636 3513 N -50 0 0 34 50 0 h +.6581 g 4636 3547 N -50 0 0 33 50 0 h +.6574 g 4636 3580 N -50 0 0 34 50 0 h +.6567 g 4636 3614 N -50 0 0 34 50 0 h +.656 g 4636 3648 N -50 0 0 33 50 0 h +.6553 g 4636 3681 N -50 0 0 34 50 0 h +.6546 g 4636 3715 N -50 0 0 33 50 0 h +.6539 g 4636 3748 N -50 0 0 34 50 0 h +.6532 g 4636 3782 N -50 0 0 34 50 0 h +.6525 g 4636 3816 N -50 0 0 33 50 0 h +.6519 g 4636 3849 N -50 0 0 34 50 0 h +.6512 g 4636 3883 N -50 0 0 33 50 0 h +.6505 g 4636 3916 N -50 0 0 34 50 0 h +.6498 g 4636 3950 N -50 0 0 33 50 0 h +.6491 g 4636 3983 N -50 0 0 34 50 0 h +.6484 g 4636 4017 N -50 0 0 34 50 0 h +.6477 g 4636 4051 N -50 0 0 33 50 0 h +.647 g 4636 4084 N -50 0 0 34 50 0 h +.6463 g 4636 4118 N -50 0 0 33 50 0 h +.6457 g 4636 4151 N -50 0 0 34 50 0 h +.645 g 4636 4185 N -50 0 0 34 50 0 h +.6443 g 4636 4219 N -50 0 0 33 50 0 h +.7218 g 4686 928 N -51 0 0 33 51 0 h +.721 g 4686 961 N -51 0 0 34 51 0 h +.7201 g 4686 995 N -51 0 0 34 51 0 h +.7193 g 4686 1029 N -51 0 0 33 51 0 h +.7184 g 4686 1062 N -51 0 0 34 51 0 h +.7176 g 4686 1096 N -51 0 0 33 51 0 h +.7168 g 4686 1129 N -51 0 0 34 51 0 h +.7159 g 4686 1163 N -51 0 0 34 51 0 h +.7151 g 4686 1197 N -51 0 0 33 51 0 h +.7142 g 4686 1230 N -51 0 0 34 51 0 h +.7134 g 4686 1264 N -51 0 0 33 51 0 h +.7125 g 4686 1297 N -51 0 0 34 51 0 h +.7117 g 4686 1331 N -51 0 0 33 51 0 h +.7109 g 4686 1364 N -51 0 0 34 51 0 h +.71 g 4686 1398 N -51 0 0 34 51 0 h +.7092 g 4686 1432 N -51 0 0 33 51 0 h +.7083 g 4686 1465 N -51 0 0 34 51 0 h +.7075 g 4686 1499 N -51 0 0 33 51 0 h +.7067 g 4686 1532 N -51 0 0 34 51 0 h +.7058 g 4686 1566 N -51 0 0 34 51 0 h +.705 g 4686 1600 N -51 0 0 33 51 0 h +.7041 g 4686 1633 N -51 0 0 34 51 0 h +.7033 g 4686 1667 N -51 0 0 33 51 0 h +.7024 g 4686 1700 N -51 0 0 34 51 0 h +.7016 g 4686 1734 N -51 0 0 34 51 0 h +.7008 g 4686 1768 N -51 0 0 33 51 0 h +.6999 g 4686 1801 N -51 0 0 34 51 0 h +.6991 g 4686 1835 N -51 0 0 33 51 0 h +.6982 g 4686 1868 N -51 0 0 34 51 0 h +.6974 g 4686 1902 N -51 0 0 33 51 0 h +.6965 g 4686 1935 N -51 0 0 34 51 0 h +.6957 g 4686 1969 N -51 0 0 34 51 0 h +.6949 g 4686 2003 N -51 0 0 33 51 0 h +.694 g 4686 2036 N -51 0 0 34 51 0 h +.6932 g 4686 2070 N -51 0 0 33 51 0 h +.6923 g 4686 2103 N -51 0 0 34 51 0 h +.6915 g 4686 2137 N -51 0 0 34 51 0 h +.6907 g 4686 2171 N -51 0 0 33 51 0 h +.6898 g 4686 2204 N -51 0 0 34 51 0 h +.689 g 4686 2238 N -51 0 0 33 51 0 h +.6881 g 4686 2271 N -51 0 0 34 51 0 h +.6873 g 4686 2305 N -51 0 0 34 51 0 h +.6864 g 4686 2339 N -51 0 0 33 51 0 h +.6856 g 4686 2372 N -51 0 0 34 51 0 h +.6848 g 4686 2406 N -51 0 0 33 51 0 h +.6839 g 4686 2439 N -51 0 0 34 51 0 h +.6831 g 4686 2473 N -51 0 0 34 51 0 h +.6822 g 4686 2507 N -51 0 0 33 51 0 h +.6814 g 4686 2540 N -51 0 0 34 51 0 h +.6806 g 4686 2574 N -51 0 0 32 51 0 h +.6797 g 4686 2606 N -51 0 0 34 51 0 h +.6789 g 4686 2640 N -51 0 0 33 51 0 h +.678 g 4686 2673 N -51 0 0 34 51 0 h +.6772 g 4686 2707 N -51 0 0 34 51 0 h +.6763 g 4686 2741 N -51 0 0 33 51 0 h +.6755 g 4686 2774 N -51 0 0 34 51 0 h +.6747 g 4686 2808 N -51 0 0 33 51 0 h +.6738 g 4686 2841 N -51 0 0 34 51 0 h +.673 g 4686 2875 N -51 0 0 34 51 0 h +.6721 g 4686 2909 N -51 0 0 33 51 0 h +.6713 g 4686 2942 N -51 0 0 34 51 0 h +.6705 g 4686 2976 N -51 0 0 33 51 0 h +.6696 g 4686 3009 N -51 0 0 34 51 0 h +.6688 g 4686 3043 N -51 0 0 34 51 0 h +.6679 g 4686 3077 N -51 0 0 33 51 0 h +.6671 g 4686 3110 N -51 0 0 34 51 0 h +.6662 g 4686 3144 N -51 0 0 33 51 0 h +.6654 g 4686 3177 N -51 0 0 34 51 0 h +.6646 g 4686 3211 N -51 0 0 34 51 0 h +.6637 g 4686 3245 N -51 0 0 33 51 0 h +.6629 g 4686 3278 N -51 0 0 34 51 0 h +.662 g 4686 3312 N -51 0 0 33 51 0 h +.6612 g 4686 3345 N -51 0 0 34 51 0 h +.6604 g 4686 3379 N -51 0 0 33 51 0 h +.6595 g 4686 3412 N -51 0 0 34 51 0 h +.6587 g 4686 3446 N -51 0 0 34 51 0 h +.6578 g 4686 3480 N -51 0 0 33 51 0 h +.657 g 4686 3513 N -51 0 0 34 51 0 h +.6561 g 4686 3547 N -51 0 0 33 51 0 h +.6553 g 4686 3580 N -51 0 0 34 51 0 h +.6545 g 4686 3614 N -51 0 0 34 51 0 h +.6536 g 4686 3648 N -51 0 0 33 51 0 h +.6528 g 4686 3681 N -51 0 0 34 51 0 h +.6519 g 4686 3715 N -51 0 0 33 51 0 h +.6511 g 4686 3748 N -51 0 0 34 51 0 h +.6503 g 4686 3782 N -51 0 0 34 51 0 h +.6494 g 4686 3816 N -51 0 0 33 51 0 h +.6486 g 4686 3849 N -51 0 0 34 51 0 h +.6477 g 4686 3883 N -51 0 0 33 51 0 h +.6469 g 4686 3916 N -51 0 0 34 51 0 h +.646 g 4686 3950 N -51 0 0 33 51 0 h +.6452 g 4686 3983 N -51 0 0 34 51 0 h +.6444 g 4686 4017 N -51 0 0 34 51 0 h +.6435 g 4686 4051 N -51 0 0 33 51 0 h +.6427 g 4686 4084 N -51 0 0 34 51 0 h +.6418 g 4686 4118 N -51 0 0 33 51 0 h +.641 g 4686 4151 N -51 0 0 34 51 0 h +.6402 g 4686 4185 N -51 0 0 34 51 0 h +.6393 g 4686 4219 N -51 0 0 33 51 0 h +.7318 g 4737 928 N -51 0 0 33 51 0 h +.7308 g 4737 961 N -51 0 0 34 51 0 h +.7298 g 4737 995 N -51 0 0 34 51 0 h +.7288 g 4737 1029 N -51 0 0 33 51 0 h +.7278 g 4737 1062 N -51 0 0 34 51 0 h +.7269 g 4737 1096 N -51 0 0 33 51 0 h +.7259 g 4737 1129 N -51 0 0 34 51 0 h +.7249 g 4737 1163 N -51 0 0 34 51 0 h +.7239 g 4737 1197 N -51 0 0 33 51 0 h +.7229 g 4737 1230 N -51 0 0 34 51 0 h +.7219 g 4737 1264 N -51 0 0 33 51 0 h +.7209 g 4737 1297 N -51 0 0 34 51 0 h +.7199 g 4737 1331 N -51 0 0 33 51 0 h +.7189 g 4737 1364 N -51 0 0 34 51 0 h +.7179 g 4737 1398 N -51 0 0 34 51 0 h +.7169 g 4737 1432 N -51 0 0 33 51 0 h +.7159 g 4737 1465 N -51 0 0 34 51 0 h +.7149 g 4737 1499 N -51 0 0 33 51 0 h +.7139 g 4737 1532 N -51 0 0 34 51 0 h +.7129 g 4737 1566 N -51 0 0 34 51 0 h +.7119 g 4737 1600 N -51 0 0 33 51 0 h +.7109 g 4737 1633 N -51 0 0 34 51 0 h +.7099 g 4737 1667 N -51 0 0 33 51 0 h +.7089 g 4737 1700 N -51 0 0 34 51 0 h +.708 g 4737 1734 N -51 0 0 34 51 0 h +.707 g 4737 1768 N -51 0 0 33 51 0 h +.706 g 4737 1801 N -51 0 0 34 51 0 h +.705 g 4737 1835 N -51 0 0 33 51 0 h +.704 g 4737 1868 N -51 0 0 34 51 0 h +.703 g 4737 1902 N -51 0 0 33 51 0 h +.702 g 4737 1935 N -51 0 0 34 51 0 h +.701 g 4737 1969 N -51 0 0 34 51 0 h +.7 g 4737 2003 N -51 0 0 33 51 0 h +.699 g 4737 2036 N -51 0 0 34 51 0 h +.698 g 4737 2070 N -51 0 0 33 51 0 h +.697 g 4737 2103 N -51 0 0 34 51 0 h +.696 g 4737 2137 N -51 0 0 34 51 0 h +.695 g 4737 2171 N -51 0 0 33 51 0 h +.694 g 4737 2204 N -51 0 0 34 51 0 h +.693 g 4737 2238 N -51 0 0 33 51 0 h +.692 g 4737 2271 N -51 0 0 34 51 0 h +.691 g 4737 2305 N -51 0 0 34 51 0 h +.69 g 4737 2339 N -51 0 0 33 51 0 h +.689 g 4737 2372 N -51 0 0 34 51 0 h +.6881 g 4737 2406 N -51 0 0 33 51 0 h +.6871 g 4737 2439 N -51 0 0 34 51 0 h +.6861 g 4737 2473 N -51 0 0 34 51 0 h +.6851 g 4737 2507 N -51 0 0 33 51 0 h +.6841 g 4737 2540 N -51 0 0 34 51 0 h +.6831 g 4737 2574 N -51 0 0 32 51 0 h +.6821 g 4737 2606 N -51 0 0 34 51 0 h +.6811 g 4737 2640 N -51 0 0 33 51 0 h +.6801 g 4737 2673 N -51 0 0 34 51 0 h +.6791 g 4737 2707 N -51 0 0 34 51 0 h +.6781 g 4737 2741 N -51 0 0 33 51 0 h +.6771 g 4737 2774 N -51 0 0 34 51 0 h +.6761 g 4737 2808 N -51 0 0 33 51 0 h +.6751 g 4737 2841 N -51 0 0 34 51 0 h +.6741 g 4737 2875 N -51 0 0 34 51 0 h +.6731 g 4737 2909 N -51 0 0 33 51 0 h +.6721 g 4737 2942 N -51 0 0 34 51 0 h +.6711 g 4737 2976 N -51 0 0 33 51 0 h +.6701 g 4737 3009 N -51 0 0 34 51 0 h +.6692 g 4737 3043 N -51 0 0 34 51 0 h +.6682 g 4737 3077 N -51 0 0 33 51 0 h +.6672 g 4737 3110 N -51 0 0 34 51 0 h +.6662 g 4737 3144 N -51 0 0 33 51 0 h +.6652 g 4737 3177 N -51 0 0 34 51 0 h +.6642 g 4737 3211 N -51 0 0 34 51 0 h +.6632 g 4737 3245 N -51 0 0 33 51 0 h +.6622 g 4737 3278 N -51 0 0 34 51 0 h +.6612 g 4737 3312 N -51 0 0 33 51 0 h +.6602 g 4737 3345 N -51 0 0 34 51 0 h +.6592 g 4737 3379 N -51 0 0 33 51 0 h +.6582 g 4737 3412 N -51 0 0 34 51 0 h +.6572 g 4737 3446 N -51 0 0 34 51 0 h +.6562 g 4737 3480 N -51 0 0 33 51 0 h +.6552 g 4737 3513 N -51 0 0 34 51 0 h +.6542 g 4737 3547 N -51 0 0 33 51 0 h +.6532 g 4737 3580 N -51 0 0 34 51 0 h +.6522 g 4737 3614 N -51 0 0 34 51 0 h +.6512 g 4737 3648 N -51 0 0 33 51 0 h +.6503 g 4737 3681 N -51 0 0 34 51 0 h +.6493 g 4737 3715 N -51 0 0 33 51 0 h +.6483 g 4737 3748 N -51 0 0 34 51 0 h +.6473 g 4737 3782 N -51 0 0 34 51 0 h +.6463 g 4737 3816 N -51 0 0 33 51 0 h +.6453 g 4737 3849 N -51 0 0 34 51 0 h +.6443 g 4737 3883 N -51 0 0 33 51 0 h +.6433 g 4737 3916 N -51 0 0 34 51 0 h +.6423 g 4737 3950 N -51 0 0 33 51 0 h +.6413 g 4737 3983 N -51 0 0 34 51 0 h +.6403 g 4737 4017 N -51 0 0 34 51 0 h +.6393 g 4737 4051 N -51 0 0 33 51 0 h +.6383 g 4737 4084 N -51 0 0 34 51 0 h +.6373 g 4737 4118 N -51 0 0 33 51 0 h +.6363 g 4737 4151 N -51 0 0 34 51 0 h +.6353 g 4737 4185 N -51 0 0 34 51 0 h +.6343 g 4737 4219 N -51 0 0 33 51 0 h +.7419 g 4788 928 N -50 0 0 33 50 0 h +.7407 g 4788 961 N -50 0 0 34 50 0 h +.7396 g 4788 995 N -50 0 0 34 50 0 h +.7384 g 4788 1029 N -50 0 0 33 50 0 h +.7373 g 4788 1062 N -50 0 0 34 50 0 h +.7361 g 4788 1096 N -50 0 0 33 50 0 h +.735 g 4788 1129 N -50 0 0 34 50 0 h +.7338 g 4788 1163 N -50 0 0 34 50 0 h +.7327 g 4788 1197 N -50 0 0 33 50 0 h +.7315 g 4788 1230 N -50 0 0 34 50 0 h +.7304 g 4788 1264 N -50 0 0 33 50 0 h +.7292 g 4788 1297 N -50 0 0 34 50 0 h +.7281 g 4788 1331 N -50 0 0 33 50 0 h +.7269 g 4788 1364 N -50 0 0 34 50 0 h +.7258 g 4788 1398 N -50 0 0 34 50 0 h +.7246 g 4788 1432 N -50 0 0 33 50 0 h +.7235 g 4788 1465 N -50 0 0 34 50 0 h +.7223 g 4788 1499 N -50 0 0 33 50 0 h +.7212 g 4788 1532 N -50 0 0 34 50 0 h +.72 g 4788 1566 N -50 0 0 34 50 0 h +.7189 g 4788 1600 N -50 0 0 33 50 0 h +.7177 g 4788 1633 N -50 0 0 34 50 0 h +.7166 g 4788 1667 N -50 0 0 33 50 0 h +.7154 g 4788 1700 N -50 0 0 34 50 0 h +.7143 g 4788 1734 N -50 0 0 34 50 0 h +.7132 g 4788 1768 N -50 0 0 33 50 0 h +.712 g 4788 1801 N -50 0 0 34 50 0 h +.7109 g 4788 1835 N -50 0 0 33 50 0 h +.7097 g 4788 1868 N -50 0 0 34 50 0 h +.7086 g 4788 1902 N -50 0 0 33 50 0 h +.7074 g 4788 1935 N -50 0 0 34 50 0 h +.7063 g 4788 1969 N -50 0 0 34 50 0 h +.7051 g 4788 2003 N -50 0 0 33 50 0 h +.704 g 4788 2036 N -50 0 0 34 50 0 h +.7028 g 4788 2070 N -50 0 0 33 50 0 h +.7017 g 4788 2103 N -50 0 0 34 50 0 h +.7005 g 4788 2137 N -50 0 0 34 50 0 h +.6994 g 4788 2171 N -50 0 0 33 50 0 h +.6982 g 4788 2204 N -50 0 0 34 50 0 h +.6971 g 4788 2238 N -50 0 0 33 50 0 h +.6959 g 4788 2271 N -50 0 0 34 50 0 h +.6948 g 4788 2305 N -50 0 0 34 50 0 h +.6936 g 4788 2339 N -50 0 0 33 50 0 h +.6925 g 4788 2372 N -50 0 0 34 50 0 h +.6913 g 4788 2406 N -50 0 0 33 50 0 h +.6902 g 4788 2439 N -50 0 0 34 50 0 h +.689 g 4788 2473 N -50 0 0 34 50 0 h +.6879 g 4788 2507 N -50 0 0 33 50 0 h +.6868 g 4788 2540 N -50 0 0 34 50 0 h +.6856 g 4788 2574 N -50 0 0 32 50 0 h +.6845 g 4788 2606 N -50 0 0 34 50 0 h +.6833 g 4788 2640 N -50 0 0 33 50 0 h +.6822 g 4788 2673 N -50 0 0 34 50 0 h +.681 g 4788 2707 N -50 0 0 34 50 0 h +.6799 g 4788 2741 N -50 0 0 33 50 0 h +.6787 g 4788 2774 N -50 0 0 34 50 0 h +.6776 g 4788 2808 N -50 0 0 33 50 0 h +.6764 g 4788 2841 N -50 0 0 34 50 0 h +.6753 g 4788 2875 N -50 0 0 34 50 0 h +.6741 g 4788 2909 N -50 0 0 33 50 0 h +.673 g 4788 2942 N -50 0 0 34 50 0 h +.6718 g 4788 2976 N -50 0 0 33 50 0 h +.6707 g 4788 3009 N -50 0 0 34 50 0 h +.6695 g 4788 3043 N -50 0 0 34 50 0 h +.6684 g 4788 3077 N -50 0 0 33 50 0 h +.6672 g 4788 3110 N -50 0 0 34 50 0 h +.6661 g 4788 3144 N -50 0 0 33 50 0 h +.6649 g 4788 3177 N -50 0 0 34 50 0 h +.6638 g 4788 3211 N -50 0 0 34 50 0 h +.6626 g 4788 3245 N -50 0 0 33 50 0 h +.6615 g 4788 3278 N -50 0 0 34 50 0 h +.6604 g 4788 3312 N -50 0 0 33 50 0 h +.6592 g 4788 3345 N -50 0 0 34 50 0 h +.6581 g 4788 3379 N -50 0 0 33 50 0 h +.6569 g 4788 3412 N -50 0 0 34 50 0 h +.6558 g 4788 3446 N -50 0 0 34 50 0 h +.6546 g 4788 3480 N -50 0 0 33 50 0 h +.6535 g 4788 3513 N -50 0 0 34 50 0 h +.6523 g 4788 3547 N -50 0 0 33 50 0 h +.6512 g 4788 3580 N -50 0 0 34 50 0 h +.65 g 4788 3614 N -50 0 0 34 50 0 h +.6489 g 4788 3648 N -50 0 0 33 50 0 h +.6477 g 4788 3681 N -50 0 0 34 50 0 h +.6466 g 4788 3715 N -50 0 0 33 50 0 h +.6454 g 4788 3748 N -50 0 0 34 50 0 h +.6443 g 4788 3782 N -50 0 0 34 50 0 h +.6431 g 4788 3816 N -50 0 0 33 50 0 h +.642 g 4788 3849 N -50 0 0 34 50 0 h +.6408 g 4788 3883 N -50 0 0 33 50 0 h +.6397 g 4788 3916 N -50 0 0 34 50 0 h +.6385 g 4788 3950 N -50 0 0 33 50 0 h +.6374 g 4788 3983 N -50 0 0 34 50 0 h +.6362 g 4788 4017 N -50 0 0 34 50 0 h +.6351 g 4788 4051 N -50 0 0 33 50 0 h +.634 g 4788 4084 N -50 0 0 34 50 0 h +.6328 g 4788 4118 N -50 0 0 33 50 0 h +.6317 g 4788 4151 N -50 0 0 34 50 0 h +.6305 g 4788 4185 N -50 0 0 34 50 0 h +.6294 g 4788 4219 N -50 0 0 33 50 0 h +.7519 g 4838 928 N -51 0 0 33 51 0 h +.7506 g 4838 961 N -51 0 0 34 51 0 h +.7493 g 4838 995 N -51 0 0 34 51 0 h +.748 g 4838 1029 N -51 0 0 33 51 0 h +.7467 g 4838 1062 N -51 0 0 34 51 0 h +.7454 g 4838 1096 N -51 0 0 33 51 0 h +.7441 g 4838 1129 N -51 0 0 34 51 0 h +.7428 g 4838 1163 N -51 0 0 34 51 0 h +.7415 g 4838 1197 N -51 0 0 33 51 0 h +.7402 g 4838 1230 N -51 0 0 34 51 0 h +.7389 g 4838 1264 N -51 0 0 33 51 0 h +.7376 g 4838 1297 N -51 0 0 34 51 0 h +.7363 g 4838 1331 N -51 0 0 33 51 0 h +.735 g 4838 1364 N -51 0 0 34 51 0 h +.7337 g 4838 1398 N -51 0 0 34 51 0 h +.7324 g 4838 1432 N -51 0 0 33 51 0 h +.7311 g 4838 1465 N -51 0 0 34 51 0 h +.7298 g 4838 1499 N -51 0 0 33 51 0 h +.7285 g 4838 1532 N -51 0 0 34 51 0 h +.7272 g 4838 1566 N -51 0 0 34 51 0 h +.7259 g 4838 1600 N -51 0 0 33 51 0 h +.7246 g 4838 1633 N -51 0 0 34 51 0 h +.7233 g 4838 1667 N -51 0 0 33 51 0 h +.722 g 4838 1700 N -51 0 0 34 51 0 h +.7207 g 4838 1734 N -51 0 0 34 51 0 h +.7194 g 4838 1768 N -51 0 0 33 51 0 h +.7181 g 4838 1801 N -51 0 0 34 51 0 h +.7168 g 4838 1835 N -51 0 0 33 51 0 h +.7155 g 4838 1868 N -51 0 0 34 51 0 h +.7141 g 4838 1902 N -51 0 0 33 51 0 h +.7128 g 4838 1935 N -51 0 0 34 51 0 h +.7115 g 4838 1969 N -51 0 0 34 51 0 h +.7102 g 4838 2003 N -51 0 0 33 51 0 h +.7089 g 4838 2036 N -51 0 0 34 51 0 h +.7076 g 4838 2070 N -51 0 0 33 51 0 h +.7063 g 4838 2103 N -51 0 0 34 51 0 h +.705 g 4838 2137 N -51 0 0 34 51 0 h +.7037 g 4838 2171 N -51 0 0 33 51 0 h +.7024 g 4838 2204 N -51 0 0 34 51 0 h +.7011 g 4838 2238 N -51 0 0 33 51 0 h +.6998 g 4838 2271 N -51 0 0 34 51 0 h +.6985 g 4838 2305 N -51 0 0 34 51 0 h +.6972 g 4838 2339 N -51 0 0 33 51 0 h +.6959 g 4838 2372 N -51 0 0 34 51 0 h +.6946 g 4838 2406 N -51 0 0 33 51 0 h +.6933 g 4838 2439 N -51 0 0 34 51 0 h +.692 g 4838 2473 N -51 0 0 34 51 0 h +.6907 g 4838 2507 N -51 0 0 33 51 0 h +.6894 g 4838 2540 N -51 0 0 34 51 0 h +.6881 g 4838 2574 N -51 0 0 32 51 0 h +.6868 g 4838 2606 N -51 0 0 34 51 0 h +.6855 g 4838 2640 N -51 0 0 33 51 0 h +.6842 g 4838 2673 N -51 0 0 34 51 0 h +.6829 g 4838 2707 N -51 0 0 34 51 0 h +.6816 g 4838 2741 N -51 0 0 33 51 0 h +.6803 g 4838 2774 N -51 0 0 34 51 0 h +.679 g 4838 2808 N -51 0 0 33 51 0 h +.6777 g 4838 2841 N -51 0 0 34 51 0 h +.6764 g 4838 2875 N -51 0 0 34 51 0 h +.6751 g 4838 2909 N -51 0 0 33 51 0 h +.6738 g 4838 2942 N -51 0 0 34 51 0 h +.6725 g 4838 2976 N -51 0 0 33 51 0 h +.6712 g 4838 3009 N -51 0 0 34 51 0 h +.6699 g 4838 3043 N -51 0 0 34 51 0 h +.6686 g 4838 3077 N -51 0 0 33 51 0 h +.6673 g 4838 3110 N -51 0 0 34 51 0 h +.666 g 4838 3144 N -51 0 0 33 51 0 h +.6647 g 4838 3177 N -51 0 0 34 51 0 h +.6634 g 4838 3211 N -51 0 0 34 51 0 h +.6621 g 4838 3245 N -51 0 0 33 51 0 h +.6608 g 4838 3278 N -51 0 0 34 51 0 h +.6595 g 4838 3312 N -51 0 0 33 51 0 h +.6582 g 4838 3345 N -51 0 0 34 51 0 h +.6569 g 4838 3379 N -51 0 0 33 51 0 h +.6556 g 4838 3412 N -51 0 0 34 51 0 h +.6543 g 4838 3446 N -51 0 0 34 51 0 h +.653 g 4838 3480 N -51 0 0 33 51 0 h +.6517 g 4838 3513 N -51 0 0 34 51 0 h +.6504 g 4838 3547 N -51 0 0 33 51 0 h +.6491 g 4838 3580 N -51 0 0 34 51 0 h +.6478 g 4838 3614 N -51 0 0 34 51 0 h +.6465 g 4838 3648 N -51 0 0 33 51 0 h +.6452 g 4838 3681 N -51 0 0 34 51 0 h +.6439 g 4838 3715 N -51 0 0 33 51 0 h +.6426 g 4838 3748 N -51 0 0 34 51 0 h +.6413 g 4838 3782 N -51 0 0 34 51 0 h +.64 g 4838 3816 N -51 0 0 33 51 0 h +.6387 g 4838 3849 N -51 0 0 34 51 0 h +.6374 g 4838 3883 N -51 0 0 33 51 0 h +.6361 g 4838 3916 N -51 0 0 34 51 0 h +.6348 g 4838 3950 N -51 0 0 33 51 0 h +.6335 g 4838 3983 N -51 0 0 34 51 0 h +.6322 g 4838 4017 N -51 0 0 34 51 0 h +.6309 g 4838 4051 N -51 0 0 33 51 0 h +.6296 g 4838 4084 N -51 0 0 34 51 0 h +.6283 g 4838 4118 N -51 0 0 33 51 0 h +.627 g 4838 4151 N -51 0 0 34 51 0 h +.6257 g 4838 4185 N -51 0 0 34 51 0 h +.6244 g 4838 4219 N -51 0 0 33 51 0 h +.7619 g 4889 928 N -50 0 0 33 50 0 h +.7604 g 4889 961 N -50 0 0 34 50 0 h +.759 g 4889 995 N -50 0 0 34 50 0 h +.7575 g 4889 1029 N -50 0 0 33 50 0 h +.7561 g 4889 1062 N -50 0 0 34 50 0 h +.7546 g 4889 1096 N -50 0 0 33 50 0 h +.7532 g 4889 1129 N -50 0 0 34 50 0 h +.7517 g 4889 1163 N -50 0 0 34 50 0 h +.7503 g 4889 1197 N -50 0 0 33 50 0 h +.7488 g 4889 1230 N -50 0 0 34 50 0 h +.7474 g 4889 1264 N -50 0 0 33 50 0 h +.7459 g 4889 1297 N -50 0 0 34 50 0 h +.7445 g 4889 1331 N -50 0 0 33 50 0 h +.743 g 4889 1364 N -50 0 0 34 50 0 h +.7415 g 4889 1398 N -50 0 0 34 50 0 h +.7401 g 4889 1432 N -50 0 0 33 50 0 h +.7386 g 4889 1465 N -50 0 0 34 50 0 h +.7372 g 4889 1499 N -50 0 0 33 50 0 h +.7357 g 4889 1532 N -50 0 0 34 50 0 h +.7343 g 4889 1566 N -50 0 0 34 50 0 h +.7328 g 4889 1600 N -50 0 0 33 50 0 h +.7314 g 4889 1633 N -50 0 0 34 50 0 h +.7299 g 4889 1667 N -50 0 0 33 50 0 h +.7285 g 4889 1700 N -50 0 0 34 50 0 h +.727 g 4889 1734 N -50 0 0 34 50 0 h +.7256 g 4889 1768 N -50 0 0 33 50 0 h +.7241 g 4889 1801 N -50 0 0 34 50 0 h +.7226 g 4889 1835 N -50 0 0 33 50 0 h +.7212 g 4889 1868 N -50 0 0 34 50 0 h +.7197 g 4889 1902 N -50 0 0 33 50 0 h +.7183 g 4889 1935 N -50 0 0 34 50 0 h +.7168 g 4889 1969 N -50 0 0 34 50 0 h +.7154 g 4889 2003 N -50 0 0 33 50 0 h +.7139 g 4889 2036 N -50 0 0 34 50 0 h +.7125 g 4889 2070 N -50 0 0 33 50 0 h +.711 g 4889 2103 N -50 0 0 34 50 0 h +.7096 g 4889 2137 N -50 0 0 34 50 0 h +.7081 g 4889 2171 N -50 0 0 33 50 0 h +.7066 g 4889 2204 N -50 0 0 34 50 0 h +.7052 g 4889 2238 N -50 0 0 33 50 0 h +.7037 g 4889 2271 N -50 0 0 34 50 0 h +.7023 g 4889 2305 N -50 0 0 34 50 0 h +.7008 g 4889 2339 N -50 0 0 33 50 0 h +.6994 g 4889 2372 N -50 0 0 34 50 0 h +.6979 g 4889 2406 N -50 0 0 33 50 0 h +.6965 g 4889 2439 N -50 0 0 34 50 0 h +.695 g 4889 2473 N -50 0 0 34 50 0 h +.6936 g 4889 2507 N -50 0 0 33 50 0 h +.6921 g 4889 2540 N -50 0 0 34 50 0 h +.6907 g 4889 2574 N -50 0 0 32 50 0 h +.6892 g 4889 2606 N -50 0 0 34 50 0 h +.6877 g 4889 2640 N -50 0 0 33 50 0 h +.6863 g 4889 2673 N -50 0 0 34 50 0 h +.6848 g 4889 2707 N -50 0 0 34 50 0 h +.6834 g 4889 2741 N -50 0 0 33 50 0 h +.6819 g 4889 2774 N -50 0 0 34 50 0 h +.6805 g 4889 2808 N -50 0 0 33 50 0 h +.679 g 4889 2841 N -50 0 0 34 50 0 h +.6776 g 4889 2875 N -50 0 0 34 50 0 h +.6761 g 4889 2909 N -50 0 0 33 50 0 h +.6747 g 4889 2942 N -50 0 0 34 50 0 h +.6732 g 4889 2976 N -50 0 0 33 50 0 h +.6718 g 4889 3009 N -50 0 0 34 50 0 h +.6703 g 4889 3043 N -50 0 0 34 50 0 h +.6688 g 4889 3077 N -50 0 0 33 50 0 h +.6674 g 4889 3110 N -50 0 0 34 50 0 h +.6659 g 4889 3144 N -50 0 0 33 50 0 h +.6645 g 4889 3177 N -50 0 0 34 50 0 h +.663 g 4889 3211 N -50 0 0 34 50 0 h +.6616 g 4889 3245 N -50 0 0 33 50 0 h +.6601 g 4889 3278 N -50 0 0 34 50 0 h +.6587 g 4889 3312 N -50 0 0 33 50 0 h +.6572 g 4889 3345 N -50 0 0 34 50 0 h +.6558 g 4889 3379 N -50 0 0 33 50 0 h +.6543 g 4889 3412 N -50 0 0 34 50 0 h +.6529 g 4889 3446 N -50 0 0 34 50 0 h +.6514 g 4889 3480 N -50 0 0 33 50 0 h +.6499 g 4889 3513 N -50 0 0 34 50 0 h +.6485 g 4889 3547 N -50 0 0 33 50 0 h +.647 g 4889 3580 N -50 0 0 34 50 0 h +.6456 g 4889 3614 N -50 0 0 34 50 0 h +.6441 g 4889 3648 N -50 0 0 33 50 0 h +.6427 g 4889 3681 N -50 0 0 34 50 0 h +.6412 g 4889 3715 N -50 0 0 33 50 0 h +.6398 g 4889 3748 N -50 0 0 34 50 0 h +.6383 g 4889 3782 N -50 0 0 34 50 0 h +.6369 g 4889 3816 N -50 0 0 33 50 0 h +.6354 g 4889 3849 N -50 0 0 34 50 0 h +.634 g 4889 3883 N -50 0 0 33 50 0 h +.6325 g 4889 3916 N -50 0 0 34 50 0 h +.631 g 4889 3950 N -50 0 0 33 50 0 h +.6296 g 4889 3983 N -50 0 0 34 50 0 h +.6281 g 4889 4017 N -50 0 0 34 50 0 h +.6267 g 4889 4051 N -50 0 0 33 50 0 h +.6252 g 4889 4084 N -50 0 0 34 50 0 h +.6238 g 4889 4118 N -50 0 0 33 50 0 h +.6223 g 4889 4151 N -50 0 0 34 50 0 h +.6209 g 4889 4185 N -50 0 0 34 50 0 h +.6194 g 4889 4219 N -50 0 0 33 50 0 h +.7719 g 4939 928 N -51 0 0 33 51 0 h +.7703 g 4939 961 N -51 0 0 34 51 0 h +.7687 g 4939 995 N -51 0 0 34 51 0 h +.7671 g 4939 1029 N -51 0 0 33 51 0 h +.7655 g 4939 1062 N -51 0 0 34 51 0 h +.7639 g 4939 1096 N -51 0 0 33 51 0 h +.7623 g 4939 1129 N -51 0 0 34 51 0 h +.7607 g 4939 1163 N -51 0 0 34 51 0 h +.7591 g 4939 1197 N -51 0 0 33 51 0 h +.7575 g 4939 1230 N -51 0 0 34 51 0 h +.7559 g 4939 1264 N -51 0 0 33 51 0 h +.7542 g 4939 1297 N -51 0 0 34 51 0 h +.7526 g 4939 1331 N -51 0 0 33 51 0 h +.751 g 4939 1364 N -51 0 0 34 51 0 h +.7494 g 4939 1398 N -51 0 0 34 51 0 h +.7478 g 4939 1432 N -51 0 0 33 51 0 h +.7462 g 4939 1465 N -51 0 0 34 51 0 h +.7446 g 4939 1499 N -51 0 0 33 51 0 h +.743 g 4939 1532 N -51 0 0 34 51 0 h +.7414 g 4939 1566 N -51 0 0 34 51 0 h +.7398 g 4939 1600 N -51 0 0 33 51 0 h +.7382 g 4939 1633 N -51 0 0 34 51 0 h +.7366 g 4939 1667 N -51 0 0 33 51 0 h +.735 g 4939 1700 N -51 0 0 34 51 0 h +.7334 g 4939 1734 N -51 0 0 34 51 0 h +.7317 g 4939 1768 N -51 0 0 33 51 0 h +.7301 g 4939 1801 N -51 0 0 34 51 0 h +.7285 g 4939 1835 N -51 0 0 33 51 0 h +.7269 g 4939 1868 N -51 0 0 34 51 0 h +.7253 g 4939 1902 N -51 0 0 33 51 0 h +.7237 g 4939 1935 N -51 0 0 34 51 0 h +.7221 g 4939 1969 N -51 0 0 34 51 0 h +.7205 g 4939 2003 N -51 0 0 33 51 0 h +.7189 g 4939 2036 N -51 0 0 34 51 0 h +.7173 g 4939 2070 N -51 0 0 33 51 0 h +.7157 g 4939 2103 N -51 0 0 34 51 0 h +.7141 g 4939 2137 N -51 0 0 34 51 0 h +.7125 g 4939 2171 N -51 0 0 33 51 0 h +.7109 g 4939 2204 N -51 0 0 34 51 0 h +.7093 g 4939 2238 N -51 0 0 33 51 0 h +.7076 g 4939 2271 N -51 0 0 34 51 0 h +.706 g 4939 2305 N -51 0 0 34 51 0 h +.7044 g 4939 2339 N -51 0 0 33 51 0 h +.7028 g 4939 2372 N -51 0 0 34 51 0 h +.7012 g 4939 2406 N -51 0 0 33 51 0 h +.6996 g 4939 2439 N -51 0 0 34 51 0 h +.698 g 4939 2473 N -51 0 0 34 51 0 h +.6964 g 4939 2507 N -51 0 0 33 51 0 h +.6948 g 4939 2540 N -51 0 0 34 51 0 h +.6932 g 4939 2574 N -51 0 0 32 51 0 h +.6916 g 4939 2606 N -51 0 0 34 51 0 h +.69 g 4939 2640 N -51 0 0 33 51 0 h +.6884 g 4939 2673 N -51 0 0 34 51 0 h +.6868 g 4939 2707 N -51 0 0 34 51 0 h +.6851 g 4939 2741 N -51 0 0 33 51 0 h +.6835 g 4939 2774 N -51 0 0 34 51 0 h +.6819 g 4939 2808 N -51 0 0 33 51 0 h +.6803 g 4939 2841 N -51 0 0 34 51 0 h +.6787 g 4939 2875 N -51 0 0 34 51 0 h +.6771 g 4939 2909 N -51 0 0 33 51 0 h +.6755 g 4939 2942 N -51 0 0 34 51 0 h +.6739 g 4939 2976 N -51 0 0 33 51 0 h +.6723 g 4939 3009 N -51 0 0 34 51 0 h +.6707 g 4939 3043 N -51 0 0 34 51 0 h +.6691 g 4939 3077 N -51 0 0 33 51 0 h +.6675 g 4939 3110 N -51 0 0 34 51 0 h +.6659 g 4939 3144 N -51 0 0 33 51 0 h +.6643 g 4939 3177 N -51 0 0 34 51 0 h +.6626 g 4939 3211 N -51 0 0 34 51 0 h +.661 g 4939 3245 N -51 0 0 33 51 0 h +.6594 g 4939 3278 N -51 0 0 34 51 0 h +.6578 g 4939 3312 N -51 0 0 33 51 0 h +.6562 g 4939 3345 N -51 0 0 34 51 0 h +.6546 g 4939 3379 N -51 0 0 33 51 0 h +.653 g 4939 3412 N -51 0 0 34 51 0 h +.6514 g 4939 3446 N -51 0 0 34 51 0 h +.6498 g 4939 3480 N -51 0 0 33 51 0 h +.6482 g 4939 3513 N -51 0 0 34 51 0 h +.6466 g 4939 3547 N -51 0 0 33 51 0 h +.645 g 4939 3580 N -51 0 0 34 51 0 h +.6434 g 4939 3614 N -51 0 0 34 51 0 h +.6418 g 4939 3648 N -51 0 0 33 51 0 h +.6402 g 4939 3681 N -51 0 0 34 51 0 h +.6385 g 4939 3715 N -51 0 0 33 51 0 h +.6369 g 4939 3748 N -51 0 0 34 51 0 h +.6353 g 4939 3782 N -51 0 0 34 51 0 h +.6337 g 4939 3816 N -51 0 0 33 51 0 h +.6321 g 4939 3849 N -51 0 0 34 51 0 h +.6305 g 4939 3883 N -51 0 0 33 51 0 h +.6289 g 4939 3916 N -51 0 0 34 51 0 h +.6273 g 4939 3950 N -51 0 0 33 51 0 h +.6257 g 4939 3983 N -51 0 0 34 51 0 h +.6241 g 4939 4017 N -51 0 0 34 51 0 h +.6225 g 4939 4051 N -51 0 0 33 51 0 h +.6209 g 4939 4084 N -51 0 0 34 51 0 h +.6193 g 4939 4118 N -51 0 0 33 51 0 h +.6177 g 4939 4151 N -51 0 0 34 51 0 h +.616 g 4939 4185 N -51 0 0 34 51 0 h +.6144 g 4939 4219 N -51 0 0 33 51 0 h +.7819 g 4990 928 N -50 0 0 33 50 0 h +.7802 g 4990 961 N -50 0 0 34 50 0 h +.7784 g 4990 995 N -50 0 0 34 50 0 h +.7767 g 4990 1029 N -50 0 0 33 50 0 h +.7749 g 4990 1062 N -50 0 0 34 50 0 h +.7731 g 4990 1096 N -50 0 0 33 50 0 h +.7714 g 4990 1129 N -50 0 0 34 50 0 h +.7696 g 4990 1163 N -50 0 0 34 50 0 h +.7679 g 4990 1197 N -50 0 0 33 50 0 h +.7661 g 4990 1230 N -50 0 0 34 50 0 h +.7643 g 4990 1264 N -50 0 0 33 50 0 h +.7626 g 4990 1297 N -50 0 0 34 50 0 h +.7608 g 4990 1331 N -50 0 0 33 50 0 h +.7591 g 4990 1364 N -50 0 0 34 50 0 h +.7573 g 4990 1398 N -50 0 0 34 50 0 h +.7555 g 4990 1432 N -50 0 0 33 50 0 h +.7538 g 4990 1465 N -50 0 0 34 50 0 h +.752 g 4990 1499 N -50 0 0 33 50 0 h +.7503 g 4990 1532 N -50 0 0 34 50 0 h +.7485 g 4990 1566 N -50 0 0 34 50 0 h +.7467 g 4990 1600 N -50 0 0 33 50 0 h +.745 g 4990 1633 N -50 0 0 34 50 0 h +.7432 g 4990 1667 N -50 0 0 33 50 0 h +.7415 g 4990 1700 N -50 0 0 34 50 0 h +.7397 g 4990 1734 N -50 0 0 34 50 0 h +.7379 g 4990 1768 N -50 0 0 33 50 0 h +.7362 g 4990 1801 N -50 0 0 34 50 0 h +.7344 g 4990 1835 N -50 0 0 33 50 0 h +.7327 g 4990 1868 N -50 0 0 34 50 0 h +.7309 g 4990 1902 N -50 0 0 33 50 0 h +.7291 g 4990 1935 N -50 0 0 34 50 0 h +.7274 g 4990 1969 N -50 0 0 34 50 0 h +.7256 g 4990 2003 N -50 0 0 33 50 0 h +.7239 g 4990 2036 N -50 0 0 34 50 0 h +.7221 g 4990 2070 N -50 0 0 33 50 0 h +.7203 g 4990 2103 N -50 0 0 34 50 0 h +.7186 g 4990 2137 N -50 0 0 34 50 0 h +.7168 g 4990 2171 N -50 0 0 33 50 0 h +.7151 g 4990 2204 N -50 0 0 34 50 0 h +.7133 g 4990 2238 N -50 0 0 33 50 0 h +.7115 g 4990 2271 N -50 0 0 34 50 0 h +.7098 g 4990 2305 N -50 0 0 34 50 0 h +.708 g 4990 2339 N -50 0 0 33 50 0 h +.7063 g 4990 2372 N -50 0 0 34 50 0 h +.7045 g 4990 2406 N -50 0 0 33 50 0 h +.7027 g 4990 2439 N -50 0 0 34 50 0 h +.701 g 4990 2473 N -50 0 0 34 50 0 h +.6992 g 4990 2507 N -50 0 0 33 50 0 h +.6975 g 4990 2540 N -50 0 0 34 50 0 h +.6957 g 4990 2574 N -50 0 0 32 50 0 h +.6939 g 4990 2606 N -50 0 0 34 50 0 h +.6922 g 4990 2640 N -50 0 0 33 50 0 h +.6904 g 4990 2673 N -50 0 0 34 50 0 h +.6887 g 4990 2707 N -50 0 0 34 50 0 h +.6869 g 4990 2741 N -50 0 0 33 50 0 h +.6851 g 4990 2774 N -50 0 0 34 50 0 h +.6834 g 4990 2808 N -50 0 0 33 50 0 h +.6816 g 4990 2841 N -50 0 0 34 50 0 h +.6799 g 4990 2875 N -50 0 0 34 50 0 h +.6781 g 4990 2909 N -50 0 0 33 50 0 h +.6763 g 4990 2942 N -50 0 0 34 50 0 h +.6746 g 4990 2976 N -50 0 0 33 50 0 h +.6728 g 4990 3009 N -50 0 0 34 50 0 h +.6711 g 4990 3043 N -50 0 0 34 50 0 h +.6693 g 4990 3077 N -50 0 0 33 50 0 h +.6675 g 4990 3110 N -50 0 0 34 50 0 h +.6658 g 4990 3144 N -50 0 0 33 50 0 h +.664 g 4990 3177 N -50 0 0 34 50 0 h +.6623 g 4990 3211 N -50 0 0 34 50 0 h +.6605 g 4990 3245 N -50 0 0 33 50 0 h +.6587 g 4990 3278 N -50 0 0 34 50 0 h +.657 g 4990 3312 N -50 0 0 33 50 0 h +.6552 g 4990 3345 N -50 0 0 34 50 0 h +.6535 g 4990 3379 N -50 0 0 33 50 0 h +.6517 g 4990 3412 N -50 0 0 34 50 0 h +.6499 g 4990 3446 N -50 0 0 34 50 0 h +.6482 g 4990 3480 N -50 0 0 33 50 0 h +.6464 g 4990 3513 N -50 0 0 34 50 0 h +.6447 g 4990 3547 N -50 0 0 33 50 0 h +.6429 g 4990 3580 N -50 0 0 34 50 0 h +.6411 g 4990 3614 N -50 0 0 34 50 0 h +.6394 g 4990 3648 N -50 0 0 33 50 0 h +.6376 g 4990 3681 N -50 0 0 34 50 0 h +.6359 g 4990 3715 N -50 0 0 33 50 0 h +.6341 g 4990 3748 N -50 0 0 34 50 0 h +.6323 g 4990 3782 N -50 0 0 34 50 0 h +.6306 g 4990 3816 N -50 0 0 33 50 0 h +.6288 g 4990 3849 N -50 0 0 34 50 0 h +.6271 g 4990 3883 N -50 0 0 33 50 0 h +.6253 g 4990 3916 N -50 0 0 34 50 0 h +.6235 g 4990 3950 N -50 0 0 33 50 0 h +.6218 g 4990 3983 N -50 0 0 34 50 0 h +.62 g 4990 4017 N -50 0 0 34 50 0 h +.6183 g 4990 4051 N -50 0 0 33 50 0 h +.6165 g 4990 4084 N -50 0 0 34 50 0 h +.6147 g 4990 4118 N -50 0 0 33 50 0 h +.613 g 4990 4151 N -50 0 0 34 50 0 h +.6112 g 4990 4185 N -50 0 0 34 50 0 h +.6095 g 4990 4219 N -50 0 0 33 50 0 h +.792 g 5040 928 N -51 0 0 33 51 0 h +.7901 g 5040 961 N -51 0 0 34 51 0 h +.7881 g 5040 995 N -51 0 0 34 51 0 h +.7862 g 5040 1029 N -51 0 0 33 51 0 h +.7843 g 5040 1062 N -51 0 0 34 51 0 h +.7824 g 5040 1096 N -51 0 0 33 51 0 h +.7805 g 5040 1129 N -51 0 0 34 51 0 h +.7786 g 5040 1163 N -51 0 0 34 51 0 h +.7767 g 5040 1197 N -51 0 0 33 51 0 h +.7748 g 5040 1230 N -51 0 0 34 51 0 h +.7728 g 5040 1264 N -51 0 0 33 51 0 h +.7709 g 5040 1297 N -51 0 0 34 51 0 h +.769 g 5040 1331 N -51 0 0 33 51 0 h +.7671 g 5040 1364 N -51 0 0 34 51 0 h +.7652 g 5040 1398 N -51 0 0 34 51 0 h +.7633 g 5040 1432 N -51 0 0 33 51 0 h +.7614 g 5040 1465 N -51 0 0 34 51 0 h +.7595 g 5040 1499 N -51 0 0 33 51 0 h +.7575 g 5040 1532 N -51 0 0 34 51 0 h +.7556 g 5040 1566 N -51 0 0 34 51 0 h +.7537 g 5040 1600 N -51 0 0 33 51 0 h +.7518 g 5040 1633 N -51 0 0 34 51 0 h +.7499 g 5040 1667 N -51 0 0 33 51 0 h +.748 g 5040 1700 N -51 0 0 34 51 0 h +.7461 g 5040 1734 N -51 0 0 34 51 0 h +.7441 g 5040 1768 N -51 0 0 33 51 0 h +.7422 g 5040 1801 N -51 0 0 34 51 0 h +.7403 g 5040 1835 N -51 0 0 33 51 0 h +.7384 g 5040 1868 N -51 0 0 34 51 0 h +.7365 g 5040 1902 N -51 0 0 33 51 0 h +.7346 g 5040 1935 N -51 0 0 34 51 0 h +.7327 g 5040 1969 N -51 0 0 34 51 0 h +.7308 g 5040 2003 N -51 0 0 33 51 0 h +.7288 g 5040 2036 N -51 0 0 34 51 0 h +.7269 g 5040 2070 N -51 0 0 33 51 0 h +.725 g 5040 2103 N -51 0 0 34 51 0 h +.7231 g 5040 2137 N -51 0 0 34 51 0 h +.7212 g 5040 2171 N -51 0 0 33 51 0 h +.7193 g 5040 2204 N -51 0 0 34 51 0 h +.7174 g 5040 2238 N -51 0 0 33 51 0 h +.7154 g 5040 2271 N -51 0 0 34 51 0 h +.7135 g 5040 2305 N -51 0 0 34 51 0 h +.7116 g 5040 2339 N -51 0 0 33 51 0 h +.7097 g 5040 2372 N -51 0 0 34 51 0 h +.7078 g 5040 2406 N -51 0 0 33 51 0 h +.7059 g 5040 2439 N -51 0 0 34 51 0 h +.704 g 5040 2473 N -51 0 0 34 51 0 h +.7021 g 5040 2507 N -51 0 0 33 51 0 h +.7001 g 5040 2540 N -51 0 0 34 51 0 h +.6982 g 5040 2574 N -51 0 0 32 51 0 h +.6963 g 5040 2606 N -51 0 0 34 51 0 h +.6944 g 5040 2640 N -51 0 0 33 51 0 h +.6925 g 5040 2673 N -51 0 0 34 51 0 h +.6906 g 5040 2707 N -51 0 0 34 51 0 h +.6887 g 5040 2741 N -51 0 0 33 51 0 h +.6868 g 5040 2774 N -51 0 0 34 51 0 h +.6848 g 5040 2808 N -51 0 0 33 51 0 h +.6829 g 5040 2841 N -51 0 0 34 51 0 h +.681 g 5040 2875 N -51 0 0 34 51 0 h +.6791 g 5040 2909 N -51 0 0 33 51 0 h +.6772 g 5040 2942 N -51 0 0 34 51 0 h +.6753 g 5040 2976 N -51 0 0 33 51 0 h +.6734 g 5040 3009 N -51 0 0 34 51 0 h +.6714 g 5040 3043 N -51 0 0 34 51 0 h +.6695 g 5040 3077 N -51 0 0 33 51 0 h +.6676 g 5040 3110 N -51 0 0 34 51 0 h +.6657 g 5040 3144 N -51 0 0 33 51 0 h +.6638 g 5040 3177 N -51 0 0 34 51 0 h +.6619 g 5040 3211 N -51 0 0 34 51 0 h +.66 g 5040 3245 N -51 0 0 33 51 0 h +.6581 g 5040 3278 N -51 0 0 34 51 0 h +.6561 g 5040 3312 N -51 0 0 33 51 0 h +.6542 g 5040 3345 N -51 0 0 34 51 0 h +.6523 g 5040 3379 N -51 0 0 33 51 0 h +.6504 g 5040 3412 N -51 0 0 34 51 0 h +.6485 g 5040 3446 N -51 0 0 34 51 0 h +.6466 g 5040 3480 N -51 0 0 33 51 0 h +.6447 g 5040 3513 N -51 0 0 34 51 0 h +.6428 g 5040 3547 N -51 0 0 33 51 0 h +.6408 g 5040 3580 N -51 0 0 34 51 0 h +.6389 g 5040 3614 N -51 0 0 34 51 0 h +.637 g 5040 3648 N -51 0 0 33 51 0 h +.6351 g 5040 3681 N -51 0 0 34 51 0 h +.6332 g 5040 3715 N -51 0 0 33 51 0 h +.6313 g 5040 3748 N -51 0 0 34 51 0 h +.6294 g 5040 3782 N -51 0 0 34 51 0 h +.6274 g 5040 3816 N -51 0 0 33 51 0 h +.6255 g 5040 3849 N -51 0 0 34 51 0 h +.6236 g 5040 3883 N -51 0 0 33 51 0 h +.6217 g 5040 3916 N -51 0 0 34 51 0 h +.6198 g 5040 3950 N -51 0 0 33 51 0 h +.6179 g 5040 3983 N -51 0 0 34 51 0 h +.616 g 5040 4017 N -51 0 0 34 51 0 h +.6141 g 5040 4051 N -51 0 0 33 51 0 h +.6121 g 5040 4084 N -51 0 0 34 51 0 h +.6102 g 5040 4118 N -51 0 0 33 51 0 h +.6083 g 5040 4151 N -51 0 0 34 51 0 h +.6064 g 5040 4185 N -51 0 0 34 51 0 h +.6045 g 5040 4219 N -51 0 0 33 51 0 h +.802 g 5091 928 N -50 0 0 33 50 0 h +.7999 g 5091 961 N -50 0 0 34 50 0 h +.7979 g 5091 995 N -50 0 0 34 50 0 h +.7958 g 5091 1029 N -50 0 0 33 50 0 h +.7937 g 5091 1062 N -50 0 0 34 50 0 h +.7917 g 5091 1096 N -50 0 0 33 50 0 h +.7896 g 5091 1129 N -50 0 0 34 50 0 h +.7875 g 5091 1163 N -50 0 0 34 50 0 h +.7855 g 5091 1197 N -50 0 0 33 50 0 h +.7834 g 5091 1230 N -50 0 0 34 50 0 h +.7813 g 5091 1264 N -50 0 0 33 50 0 h +.7793 g 5091 1297 N -50 0 0 34 50 0 h +.7772 g 5091 1331 N -50 0 0 33 50 0 h +.7751 g 5091 1364 N -50 0 0 34 50 0 h +.7731 g 5091 1398 N -50 0 0 34 50 0 h +.771 g 5091 1432 N -50 0 0 33 50 0 h +.7689 g 5091 1465 N -50 0 0 34 50 0 h +.7669 g 5091 1499 N -50 0 0 33 50 0 h +.7648 g 5091 1532 N -50 0 0 34 50 0 h +.7627 g 5091 1566 N -50 0 0 34 50 0 h +.7607 g 5091 1600 N -50 0 0 33 50 0 h +.7586 g 5091 1633 N -50 0 0 34 50 0 h +.7565 g 5091 1667 N -50 0 0 33 50 0 h +.7545 g 5091 1700 N -50 0 0 34 50 0 h +.7524 g 5091 1734 N -50 0 0 34 50 0 h +.7503 g 5091 1768 N -50 0 0 33 50 0 h +.7483 g 5091 1801 N -50 0 0 34 50 0 h +.7462 g 5091 1835 N -50 0 0 33 50 0 h +.7441 g 5091 1868 N -50 0 0 34 50 0 h +.7421 g 5091 1902 N -50 0 0 33 50 0 h +.74 g 5091 1935 N -50 0 0 34 50 0 h +.7379 g 5091 1969 N -50 0 0 34 50 0 h +.7359 g 5091 2003 N -50 0 0 33 50 0 h +.7338 g 5091 2036 N -50 0 0 34 50 0 h +.7317 g 5091 2070 N -50 0 0 33 50 0 h +.7297 g 5091 2103 N -50 0 0 34 50 0 h +.7276 g 5091 2137 N -50 0 0 34 50 0 h +.7256 g 5091 2171 N -50 0 0 33 50 0 h +.7235 g 5091 2204 N -50 0 0 34 50 0 h +.7214 g 5091 2238 N -50 0 0 33 50 0 h +.7194 g 5091 2271 N -50 0 0 34 50 0 h +.7173 g 5091 2305 N -50 0 0 34 50 0 h +.7152 g 5091 2339 N -50 0 0 33 50 0 h +.7132 g 5091 2372 N -50 0 0 34 50 0 h +.7111 g 5091 2406 N -50 0 0 33 50 0 h +.709 g 5091 2439 N -50 0 0 34 50 0 h +.707 g 5091 2473 N -50 0 0 34 50 0 h +.7049 g 5091 2507 N -50 0 0 33 50 0 h +.7028 g 5091 2540 N -50 0 0 34 50 0 h +.7008 g 5091 2574 N -50 0 0 32 50 0 h +.6987 g 5091 2606 N -50 0 0 34 50 0 h +.6966 g 5091 2640 N -50 0 0 33 50 0 h +.6946 g 5091 2673 N -50 0 0 34 50 0 h +.6925 g 5091 2707 N -50 0 0 34 50 0 h +.6904 g 5091 2741 N -50 0 0 33 50 0 h +.6884 g 5091 2774 N -50 0 0 34 50 0 h +.6863 g 5091 2808 N -50 0 0 33 50 0 h +.6842 g 5091 2841 N -50 0 0 34 50 0 h +.6822 g 5091 2875 N -50 0 0 34 50 0 h +.6801 g 5091 2909 N -50 0 0 33 50 0 h +.678 g 5091 2942 N -50 0 0 34 50 0 h +.676 g 5091 2976 N -50 0 0 33 50 0 h +.6739 g 5091 3009 N -50 0 0 34 50 0 h +.6718 g 5091 3043 N -50 0 0 34 50 0 h +.6698 g 5091 3077 N -50 0 0 33 50 0 h +.6677 g 5091 3110 N -50 0 0 34 50 0 h +.6656 g 5091 3144 N -50 0 0 33 50 0 h +.6636 g 5091 3177 N -50 0 0 34 50 0 h +.6615 g 5091 3211 N -50 0 0 34 50 0 h +.6594 g 5091 3245 N -50 0 0 33 50 0 h +.6574 g 5091 3278 N -50 0 0 34 50 0 h +.6553 g 5091 3312 N -50 0 0 33 50 0 h +.6532 g 5091 3345 N -50 0 0 34 50 0 h +.6512 g 5091 3379 N -50 0 0 33 50 0 h +.6491 g 5091 3412 N -50 0 0 34 50 0 h +.647 g 5091 3446 N -50 0 0 34 50 0 h +.645 g 5091 3480 N -50 0 0 33 50 0 h +.6429 g 5091 3513 N -50 0 0 34 50 0 h +.6408 g 5091 3547 N -50 0 0 33 50 0 h +.6388 g 5091 3580 N -50 0 0 34 50 0 h +.6367 g 5091 3614 N -50 0 0 34 50 0 h +.6346 g 5091 3648 N -50 0 0 33 50 0 h +.6326 g 5091 3681 N -50 0 0 34 50 0 h +.6305 g 5091 3715 N -50 0 0 33 50 0 h +.6284 g 5091 3748 N -50 0 0 34 50 0 h +.6264 g 5091 3782 N -50 0 0 34 50 0 h +.6243 g 5091 3816 N -50 0 0 33 50 0 h +.6222 g 5091 3849 N -50 0 0 34 50 0 h +.6202 g 5091 3883 N -50 0 0 33 50 0 h +.6181 g 5091 3916 N -50 0 0 34 50 0 h +.616 g 5091 3950 N -50 0 0 33 50 0 h +.614 g 5091 3983 N -50 0 0 34 50 0 h +.6119 g 5091 4017 N -50 0 0 34 50 0 h +.6098 g 5091 4051 N -50 0 0 33 50 0 h +.6078 g 5091 4084 N -50 0 0 34 50 0 h +.6057 g 5091 4118 N -50 0 0 33 50 0 h +.6037 g 5091 4151 N -50 0 0 34 50 0 h +.6016 g 5091 4185 N -50 0 0 34 50 0 h +.5995 g 5091 4219 N -50 0 0 33 50 0 h +.812 g 5141 928 N -51 0 0 33 51 0 h +.8098 g 5141 961 N -51 0 0 34 51 0 h +.8076 g 5141 995 N -51 0 0 34 51 0 h +.8054 g 5141 1029 N -51 0 0 33 51 0 h +.8031 g 5141 1062 N -51 0 0 34 51 0 h +.8009 g 5141 1096 N -51 0 0 33 51 0 h +.7987 g 5141 1129 N -51 0 0 34 51 0 h +.7965 g 5141 1163 N -51 0 0 34 51 0 h +.7943 g 5141 1197 N -51 0 0 33 51 0 h +.792 g 5141 1230 N -51 0 0 34 51 0 h +.7898 g 5141 1264 N -51 0 0 33 51 0 h +.7876 g 5141 1297 N -51 0 0 34 51 0 h +.7854 g 5141 1331 N -51 0 0 33 51 0 h +.7832 g 5141 1364 N -51 0 0 34 51 0 h +.781 g 5141 1398 N -51 0 0 34 51 0 h +.7787 g 5141 1432 N -51 0 0 33 51 0 h +.7765 g 5141 1465 N -51 0 0 34 51 0 h +.7743 g 5141 1499 N -51 0 0 33 51 0 h +.7721 g 5141 1532 N -51 0 0 34 51 0 h +.7699 g 5141 1566 N -51 0 0 34 51 0 h +.7676 g 5141 1600 N -51 0 0 33 51 0 h +.7654 g 5141 1633 N -51 0 0 34 51 0 h +.7632 g 5141 1667 N -51 0 0 33 51 0 h +.761 g 5141 1700 N -51 0 0 34 51 0 h +.7588 g 5141 1734 N -51 0 0 34 51 0 h +.7565 g 5141 1768 N -51 0 0 33 51 0 h +.7543 g 5141 1801 N -51 0 0 34 51 0 h +.7521 g 5141 1835 N -51 0 0 33 51 0 h +.7499 g 5141 1868 N -51 0 0 34 51 0 h +.7477 g 5141 1902 N -51 0 0 33 51 0 h +.7454 g 5141 1935 N -51 0 0 34 51 0 h +.7432 g 5141 1969 N -51 0 0 34 51 0 h +.741 g 5141 2003 N -51 0 0 33 51 0 h +.7388 g 5141 2036 N -51 0 0 34 51 0 h +.7366 g 5141 2070 N -51 0 0 33 51 0 h +.7344 g 5141 2103 N -51 0 0 34 51 0 h +.7321 g 5141 2137 N -51 0 0 34 51 0 h +.7299 g 5141 2171 N -51 0 0 33 51 0 h +.7277 g 5141 2204 N -51 0 0 34 51 0 h +.7255 g 5141 2238 N -51 0 0 33 51 0 h +.7233 g 5141 2271 N -51 0 0 34 51 0 h +.721 g 5141 2305 N -51 0 0 34 51 0 h +.7188 g 5141 2339 N -51 0 0 33 51 0 h +.7166 g 5141 2372 N -51 0 0 34 51 0 h +.7144 g 5141 2406 N -51 0 0 33 51 0 h +.7122 g 5141 2439 N -51 0 0 34 51 0 h +.7099 g 5141 2473 N -51 0 0 34 51 0 h +.7077 g 5141 2507 N -51 0 0 33 51 0 h +.7055 g 5141 2540 N -51 0 0 34 51 0 h +.7033 g 5141 2574 N -51 0 0 32 51 0 h +.7011 g 5141 2606 N -51 0 0 34 51 0 h +.6988 g 5141 2640 N -51 0 0 33 51 0 h +.6966 g 5141 2673 N -51 0 0 34 51 0 h +.6944 g 5141 2707 N -51 0 0 34 51 0 h +.6922 g 5141 2741 N -51 0 0 33 51 0 h +.69 g 5141 2774 N -51 0 0 34 51 0 h +.6877 g 5141 2808 N -51 0 0 33 51 0 h +.6855 g 5141 2841 N -51 0 0 34 51 0 h +.6833 g 5141 2875 N -51 0 0 34 51 0 h +.6811 g 5141 2909 N -51 0 0 33 51 0 h +.6789 g 5141 2942 N -51 0 0 34 51 0 h +.6767 g 5141 2976 N -51 0 0 33 51 0 h +.6744 g 5141 3009 N -51 0 0 34 51 0 h +.6722 g 5141 3043 N -51 0 0 34 51 0 h +.67 g 5141 3077 N -51 0 0 33 51 0 h +.6678 g 5141 3110 N -51 0 0 34 51 0 h +.6656 g 5141 3144 N -51 0 0 33 51 0 h +.6633 g 5141 3177 N -51 0 0 34 51 0 h +.6611 g 5141 3211 N -51 0 0 34 51 0 h +.6589 g 5141 3245 N -51 0 0 33 51 0 h +.6567 g 5141 3278 N -51 0 0 34 51 0 h +.6545 g 5141 3312 N -51 0 0 33 51 0 h +.6522 g 5141 3345 N -51 0 0 34 51 0 h +.65 g 5141 3379 N -51 0 0 33 51 0 h +.6478 g 5141 3412 N -51 0 0 34 51 0 h +.6456 g 5141 3446 N -51 0 0 34 51 0 h +.6434 g 5141 3480 N -51 0 0 33 51 0 h +.6411 g 5141 3513 N -51 0 0 34 51 0 h +.6389 g 5141 3547 N -51 0 0 33 51 0 h +.6367 g 5141 3580 N -51 0 0 34 51 0 h +.6345 g 5141 3614 N -51 0 0 34 51 0 h +.6323 g 5141 3648 N -51 0 0 33 51 0 h +.6301 g 5141 3681 N -51 0 0 34 51 0 h +.6278 g 5141 3715 N -51 0 0 33 51 0 h +.6256 g 5141 3748 N -51 0 0 34 51 0 h +.6234 g 5141 3782 N -51 0 0 34 51 0 h +.6212 g 5141 3816 N -51 0 0 33 51 0 h +.619 g 5141 3849 N -51 0 0 34 51 0 h +.6167 g 5141 3883 N -51 0 0 33 51 0 h +.6145 g 5141 3916 N -51 0 0 34 51 0 h +.6123 g 5141 3950 N -51 0 0 33 51 0 h +.6101 g 5141 3983 N -51 0 0 34 51 0 h +.6079 g 5141 4017 N -51 0 0 34 51 0 h +.6056 g 5141 4051 N -51 0 0 33 51 0 h +.6034 g 5141 4084 N -51 0 0 34 51 0 h +.6012 g 5141 4118 N -51 0 0 33 51 0 h +.599 g 5141 4151 N -51 0 0 34 51 0 h +.5968 g 5141 4185 N -51 0 0 34 51 0 h +.5945 g 5141 4219 N -51 0 0 33 51 0 h +.822 g 5192 928 N -51 0 0 33 51 0 h +.8197 g 5192 961 N -51 0 0 34 51 0 h +.8173 g 5192 995 N -51 0 0 34 51 0 h +.8149 g 5192 1029 N -51 0 0 33 51 0 h +.8126 g 5192 1062 N -51 0 0 34 51 0 h +.8102 g 5192 1096 N -51 0 0 33 51 0 h +.8078 g 5192 1129 N -51 0 0 34 51 0 h +.8054 g 5192 1163 N -51 0 0 34 51 0 h +.8031 g 5192 1197 N -51 0 0 33 51 0 h +.8007 g 5192 1230 N -51 0 0 34 51 0 h +.7983 g 5192 1264 N -51 0 0 33 51 0 h +.796 g 5192 1297 N -51 0 0 34 51 0 h +.7936 g 5192 1331 N -51 0 0 33 51 0 h +.7912 g 5192 1364 N -51 0 0 34 51 0 h +.7888 g 5192 1398 N -51 0 0 34 51 0 h +.7865 g 5192 1432 N -51 0 0 33 51 0 h +.7841 g 5192 1465 N -51 0 0 34 51 0 h +.7817 g 5192 1499 N -51 0 0 33 51 0 h +.7793 g 5192 1532 N -51 0 0 34 51 0 h +.777 g 5192 1566 N -51 0 0 34 51 0 h +.7746 g 5192 1600 N -51 0 0 33 51 0 h +.7722 g 5192 1633 N -51 0 0 34 51 0 h +.7699 g 5192 1667 N -51 0 0 33 51 0 h +.7675 g 5192 1700 N -51 0 0 34 51 0 h +.7651 g 5192 1734 N -51 0 0 34 51 0 h +.7627 g 5192 1768 N -51 0 0 33 51 0 h +.7604 g 5192 1801 N -51 0 0 34 51 0 h +.758 g 5192 1835 N -51 0 0 33 51 0 h +.7556 g 5192 1868 N -51 0 0 34 51 0 h +.7533 g 5192 1902 N -51 0 0 33 51 0 h +.7509 g 5192 1935 N -51 0 0 34 51 0 h +.7485 g 5192 1969 N -51 0 0 34 51 0 h +.7461 g 5192 2003 N -51 0 0 33 51 0 h +.7438 g 5192 2036 N -51 0 0 34 51 0 h +.7414 g 5192 2070 N -51 0 0 33 51 0 h +.739 g 5192 2103 N -51 0 0 34 51 0 h +.7366 g 5192 2137 N -51 0 0 34 51 0 h +.7343 g 5192 2171 N -51 0 0 33 51 0 h +.7319 g 5192 2204 N -51 0 0 34 51 0 h +.7295 g 5192 2238 N -51 0 0 33 51 0 h +.7272 g 5192 2271 N -51 0 0 34 51 0 h +.7248 g 5192 2305 N -51 0 0 34 51 0 h +.7224 g 5192 2339 N -51 0 0 33 51 0 h +.72 g 5192 2372 N -51 0 0 34 51 0 h +.7177 g 5192 2406 N -51 0 0 33 51 0 h +.7153 g 5192 2439 N -51 0 0 34 51 0 h +.7129 g 5192 2473 N -51 0 0 34 51 0 h +.7106 g 5192 2507 N -51 0 0 33 51 0 h +.7082 g 5192 2540 N -51 0 0 34 51 0 h +.7058 g 5192 2574 N -51 0 0 32 51 0 h +.7034 g 5192 2606 N -51 0 0 34 51 0 h +.7011 g 5192 2640 N -51 0 0 33 51 0 h +.6987 g 5192 2673 N -51 0 0 34 51 0 h +.6963 g 5192 2707 N -51 0 0 34 51 0 h +.6939 g 5192 2741 N -51 0 0 33 51 0 h +.6916 g 5192 2774 N -51 0 0 34 51 0 h +.6892 g 5192 2808 N -51 0 0 33 51 0 h +.6868 g 5192 2841 N -51 0 0 34 51 0 h +.6845 g 5192 2875 N -51 0 0 34 51 0 h +.6821 g 5192 2909 N -51 0 0 33 51 0 h +.6797 g 5192 2942 N -51 0 0 34 51 0 h +.6773 g 5192 2976 N -51 0 0 33 51 0 h +.675 g 5192 3009 N -51 0 0 34 51 0 h +.6726 g 5192 3043 N -51 0 0 34 51 0 h +.6702 g 5192 3077 N -51 0 0 33 51 0 h +.6679 g 5192 3110 N -51 0 0 34 51 0 h +.6655 g 5192 3144 N -51 0 0 33 51 0 h +.6631 g 5192 3177 N -51 0 0 34 51 0 h +.6607 g 5192 3211 N -51 0 0 34 51 0 h +.6584 g 5192 3245 N -51 0 0 33 51 0 h +.656 g 5192 3278 N -51 0 0 34 51 0 h +.6536 g 5192 3312 N -51 0 0 33 51 0 h +.6512 g 5192 3345 N -51 0 0 34 51 0 h +.6489 g 5192 3379 N -51 0 0 33 51 0 h +.6465 g 5192 3412 N -51 0 0 34 51 0 h +.6441 g 5192 3446 N -51 0 0 34 51 0 h +.6418 g 5192 3480 N -51 0 0 33 51 0 h +.6394 g 5192 3513 N -51 0 0 34 51 0 h +.637 g 5192 3547 N -51 0 0 33 51 0 h +.6346 g 5192 3580 N -51 0 0 34 51 0 h +.6323 g 5192 3614 N -51 0 0 34 51 0 h +.6299 g 5192 3648 N -51 0 0 33 51 0 h +.6275 g 5192 3681 N -51 0 0 34 51 0 h +.6252 g 5192 3715 N -51 0 0 33 51 0 h +.6228 g 5192 3748 N -51 0 0 34 51 0 h +.6204 g 5192 3782 N -51 0 0 34 51 0 h +.618 g 5192 3816 N -51 0 0 33 51 0 h +.6157 g 5192 3849 N -51 0 0 34 51 0 h +.6133 g 5192 3883 N -51 0 0 33 51 0 h +.6109 g 5192 3916 N -51 0 0 34 51 0 h +.6085 g 5192 3950 N -51 0 0 33 51 0 h +.6062 g 5192 3983 N -51 0 0 34 51 0 h +.6038 g 5192 4017 N -51 0 0 34 51 0 h +.6014 g 5192 4051 N -51 0 0 33 51 0 h +.5991 g 5192 4084 N -51 0 0 34 51 0 h +.5967 g 5192 4118 N -51 0 0 33 51 0 h +.5943 g 5192 4151 N -51 0 0 34 51 0 h +.5919 g 5192 4185 N -51 0 0 34 51 0 h +.5896 g 5192 4219 N -51 0 0 33 51 0 h +.8321 g 5243 928 N -50 0 0 33 50 0 h +.8295 g 5243 961 N -50 0 0 34 50 0 h +.827 g 5243 995 N -50 0 0 34 50 0 h +.8245 g 5243 1029 N -50 0 0 33 50 0 h +.822 g 5243 1062 N -50 0 0 34 50 0 h +.8194 g 5243 1096 N -50 0 0 33 50 0 h +.8169 g 5243 1129 N -50 0 0 34 50 0 h +.8144 g 5243 1163 N -50 0 0 34 50 0 h +.8119 g 5243 1197 N -50 0 0 33 50 0 h +.8093 g 5243 1230 N -50 0 0 34 50 0 h +.8068 g 5243 1264 N -50 0 0 33 50 0 h +.8043 g 5243 1297 N -50 0 0 34 50 0 h +.8018 g 5243 1331 N -50 0 0 33 50 0 h +.7992 g 5243 1364 N -50 0 0 34 50 0 h +.7967 g 5243 1398 N -50 0 0 34 50 0 h +.7942 g 5243 1432 N -50 0 0 33 50 0 h +.7917 g 5243 1465 N -50 0 0 34 50 0 h +.7891 g 5243 1499 N -50 0 0 33 50 0 h +.7866 g 5243 1532 N -50 0 0 34 50 0 h +.7841 g 5243 1566 N -50 0 0 34 50 0 h +.7816 g 5243 1600 N -50 0 0 33 50 0 h +.779 g 5243 1633 N -50 0 0 34 50 0 h +.7765 g 5243 1667 N -50 0 0 33 50 0 h +.774 g 5243 1700 N -50 0 0 34 50 0 h +.7715 g 5243 1734 N -50 0 0 34 50 0 h +.7689 g 5243 1768 N -50 0 0 33 50 0 h +.7664 g 5243 1801 N -50 0 0 34 50 0 h +.7639 g 5243 1835 N -50 0 0 33 50 0 h +.7614 g 5243 1868 N -50 0 0 34 50 0 h +.7588 g 5243 1902 N -50 0 0 33 50 0 h +.7563 g 5243 1935 N -50 0 0 34 50 0 h +.7538 g 5243 1969 N -50 0 0 34 50 0 h +.7513 g 5243 2003 N -50 0 0 33 50 0 h +.7487 g 5243 2036 N -50 0 0 34 50 0 h +.7462 g 5243 2070 N -50 0 0 33 50 0 h +.7437 g 5243 2103 N -50 0 0 34 50 0 h +.7412 g 5243 2137 N -50 0 0 34 50 0 h +.7386 g 5243 2171 N -50 0 0 33 50 0 h +.7361 g 5243 2204 N -50 0 0 34 50 0 h +.7336 g 5243 2238 N -50 0 0 33 50 0 h +.7311 g 5243 2271 N -50 0 0 34 50 0 h +.7285 g 5243 2305 N -50 0 0 34 50 0 h +.726 g 5243 2339 N -50 0 0 33 50 0 h +.7235 g 5243 2372 N -50 0 0 34 50 0 h +.721 g 5243 2406 N -50 0 0 33 50 0 h +.7184 g 5243 2439 N -50 0 0 34 50 0 h +.7159 g 5243 2473 N -50 0 0 34 50 0 h +.7134 g 5243 2507 N -50 0 0 33 50 0 h +.7109 g 5243 2540 N -50 0 0 34 50 0 h +.7083 g 5243 2574 N -50 0 0 32 50 0 h +.7058 g 5243 2606 N -50 0 0 34 50 0 h +.7033 g 5243 2640 N -50 0 0 33 50 0 h +.7008 g 5243 2673 N -50 0 0 34 50 0 h +.6982 g 5243 2707 N -50 0 0 34 50 0 h +.6957 g 5243 2741 N -50 0 0 33 50 0 h +.6932 g 5243 2774 N -50 0 0 34 50 0 h +.6907 g 5243 2808 N -50 0 0 33 50 0 h +.6881 g 5243 2841 N -50 0 0 34 50 0 h +.6856 g 5243 2875 N -50 0 0 34 50 0 h +.6831 g 5243 2909 N -50 0 0 33 50 0 h +.6806 g 5243 2942 N -50 0 0 34 50 0 h +.678 g 5243 2976 N -50 0 0 33 50 0 h +.6755 g 5243 3009 N -50 0 0 34 50 0 h +.673 g 5243 3043 N -50 0 0 34 50 0 h +.6705 g 5243 3077 N -50 0 0 33 50 0 h +.6679 g 5243 3110 N -50 0 0 34 50 0 h +.6654 g 5243 3144 N -50 0 0 33 50 0 h +.6629 g 5243 3177 N -50 0 0 34 50 0 h +.6604 g 5243 3211 N -50 0 0 34 50 0 h +.6578 g 5243 3245 N -50 0 0 33 50 0 h +.6553 g 5243 3278 N -50 0 0 34 50 0 h +.6528 g 5243 3312 N -50 0 0 33 50 0 h +.6503 g 5243 3345 N -50 0 0 34 50 0 h +.6477 g 5243 3379 N -50 0 0 33 50 0 h +.6452 g 5243 3412 N -50 0 0 34 50 0 h +.6427 g 5243 3446 N -50 0 0 34 50 0 h +.6402 g 5243 3480 N -50 0 0 33 50 0 h +.6376 g 5243 3513 N -50 0 0 34 50 0 h +.6351 g 5243 3547 N -50 0 0 33 50 0 h +.6326 g 5243 3580 N -50 0 0 34 50 0 h +.6301 g 5243 3614 N -50 0 0 34 50 0 h +.6275 g 5243 3648 N -50 0 0 33 50 0 h +.625 g 5243 3681 N -50 0 0 34 50 0 h +.6225 g 5243 3715 N -50 0 0 33 50 0 h +.6199 g 5243 3748 N -50 0 0 34 50 0 h +.6174 g 5243 3782 N -50 0 0 34 50 0 h +.6149 g 5243 3816 N -50 0 0 33 50 0 h +.6124 g 5243 3849 N -50 0 0 34 50 0 h +.6098 g 5243 3883 N -50 0 0 33 50 0 h +.6073 g 5243 3916 N -50 0 0 34 50 0 h +.6048 g 5243 3950 N -50 0 0 33 50 0 h +.6023 g 5243 3983 N -50 0 0 34 50 0 h +.5997 g 5243 4017 N -50 0 0 34 50 0 h +.5972 g 5243 4051 N -50 0 0 33 50 0 h +.5947 g 5243 4084 N -50 0 0 34 50 0 h +.5922 g 5243 4118 N -50 0 0 33 50 0 h +.5896 g 5243 4151 N -50 0 0 34 50 0 h +.5871 g 5243 4185 N -50 0 0 34 50 0 h +.5846 g 5243 4219 N -50 0 0 33 50 0 h +.8421 g 5293 928 N -51 0 0 33 51 0 h +.8394 g 5293 961 N -51 0 0 34 51 0 h +.8367 g 5293 995 N -51 0 0 34 51 0 h +.8341 g 5293 1029 N -51 0 0 33 51 0 h +.8314 g 5293 1062 N -51 0 0 34 51 0 h +.8287 g 5293 1096 N -51 0 0 33 51 0 h +.826 g 5293 1129 N -51 0 0 34 51 0 h +.8233 g 5293 1163 N -51 0 0 34 51 0 h +.8207 g 5293 1197 N -51 0 0 33 51 0 h +.818 g 5293 1230 N -51 0 0 34 51 0 h +.8153 g 5293 1264 N -51 0 0 33 51 0 h +.8126 g 5293 1297 N -51 0 0 34 51 0 h +.81 g 5293 1331 N -51 0 0 33 51 0 h +.8073 g 5293 1364 N -51 0 0 34 51 0 h +.8046 g 5293 1398 N -51 0 0 34 51 0 h +.8019 g 5293 1432 N -51 0 0 33 51 0 h +.7992 g 5293 1465 N -51 0 0 34 51 0 h +.7966 g 5293 1499 N -51 0 0 33 51 0 h +.7939 g 5293 1532 N -51 0 0 34 51 0 h +.7912 g 5293 1566 N -51 0 0 34 51 0 h +.7885 g 5293 1600 N -51 0 0 33 51 0 h +.7859 g 5293 1633 N -51 0 0 34 51 0 h +.7832 g 5293 1667 N -51 0 0 33 51 0 h +.7805 g 5293 1700 N -51 0 0 34 51 0 h +.7778 g 5293 1734 N -51 0 0 34 51 0 h +.7751 g 5293 1768 N -51 0 0 33 51 0 h +.7725 g 5293 1801 N -51 0 0 34 51 0 h +.7698 g 5293 1835 N -51 0 0 33 51 0 h +.7671 g 5293 1868 N -51 0 0 34 51 0 h +.7644 g 5293 1902 N -51 0 0 33 51 0 h +.7617 g 5293 1935 N -51 0 0 34 51 0 h +.7591 g 5293 1969 N -51 0 0 34 51 0 h +.7564 g 5293 2003 N -51 0 0 33 51 0 h +.7537 g 5293 2036 N -51 0 0 34 51 0 h +.751 g 5293 2070 N -51 0 0 33 51 0 h +.7484 g 5293 2103 N -51 0 0 34 51 0 h +.7457 g 5293 2137 N -51 0 0 34 51 0 h +.743 g 5293 2171 N -51 0 0 33 51 0 h +.7403 g 5293 2204 N -51 0 0 34 51 0 h +.7376 g 5293 2238 N -51 0 0 33 51 0 h +.735 g 5293 2271 N -51 0 0 34 51 0 h +.7323 g 5293 2305 N -51 0 0 34 51 0 h +.7296 g 5293 2339 N -51 0 0 33 51 0 h +.7269 g 5293 2372 N -51 0 0 34 51 0 h +.7243 g 5293 2406 N -51 0 0 33 51 0 h +.7216 g 5293 2439 N -51 0 0 34 51 0 h +.7189 g 5293 2473 N -51 0 0 34 51 0 h +.7162 g 5293 2507 N -51 0 0 33 51 0 h +.7135 g 5293 2540 N -51 0 0 34 51 0 h +.7109 g 5293 2574 N -51 0 0 32 51 0 h +.7082 g 5293 2606 N -51 0 0 34 51 0 h +.7055 g 5293 2640 N -51 0 0 33 51 0 h +.7028 g 5293 2673 N -51 0 0 34 51 0 h +.7001 g 5293 2707 N -51 0 0 34 51 0 h +.6975 g 5293 2741 N -51 0 0 33 51 0 h +.6948 g 5293 2774 N -51 0 0 34 51 0 h +.6921 g 5293 2808 N -51 0 0 33 51 0 h +.6894 g 5293 2841 N -51 0 0 34 51 0 h +.6868 g 5293 2875 N -51 0 0 34 51 0 h +.6841 g 5293 2909 N -51 0 0 33 51 0 h +.6814 g 5293 2942 N -51 0 0 34 51 0 h +.6787 g 5293 2976 N -51 0 0 33 51 0 h +.676 g 5293 3009 N -51 0 0 34 51 0 h +.6734 g 5293 3043 N -51 0 0 34 51 0 h +.6707 g 5293 3077 N -51 0 0 33 51 0 h +.668 g 5293 3110 N -51 0 0 34 51 0 h +.6653 g 5293 3144 N -51 0 0 33 51 0 h +.6626 g 5293 3177 N -51 0 0 34 51 0 h +.66 g 5293 3211 N -51 0 0 34 51 0 h +.6573 g 5293 3245 N -51 0 0 33 51 0 h +.6546 g 5293 3278 N -51 0 0 34 51 0 h +.6519 g 5293 3312 N -51 0 0 33 51 0 h +.6493 g 5293 3345 N -51 0 0 34 51 0 h +.6466 g 5293 3379 N -51 0 0 33 51 0 h +.6439 g 5293 3412 N -51 0 0 34 51 0 h +.6412 g 5293 3446 N -51 0 0 34 51 0 h +.6385 g 5293 3480 N -51 0 0 33 51 0 h +.6359 g 5293 3513 N -51 0 0 34 51 0 h +.6332 g 5293 3547 N -51 0 0 33 51 0 h +.6305 g 5293 3580 N -51 0 0 34 51 0 h +.6278 g 5293 3614 N -51 0 0 34 51 0 h +.6252 g 5293 3648 N -51 0 0 33 51 0 h +.6225 g 5293 3681 N -51 0 0 34 51 0 h +.6198 g 5293 3715 N -51 0 0 33 51 0 h +.6171 g 5293 3748 N -51 0 0 34 51 0 h +.6144 g 5293 3782 N -51 0 0 34 51 0 h +.6118 g 5293 3816 N -51 0 0 33 51 0 h +.6091 g 5293 3849 N -51 0 0 34 51 0 h +.6064 g 5293 3883 N -51 0 0 33 51 0 h +.6037 g 5293 3916 N -51 0 0 34 51 0 h +.601 g 5293 3950 N -51 0 0 33 51 0 h +.5984 g 5293 3983 N -51 0 0 34 51 0 h +.5957 g 5293 4017 N -51 0 0 34 51 0 h +.593 g 5293 4051 N -51 0 0 33 51 0 h +.5903 g 5293 4084 N -51 0 0 34 51 0 h +.5877 g 5293 4118 N -51 0 0 33 51 0 h +.585 g 5293 4151 N -51 0 0 34 51 0 h +.5823 g 5293 4185 N -51 0 0 34 51 0 h +.5796 g 5293 4219 N -51 0 0 33 51 0 h +.8521 g 5344 928 N -50 0 0 33 50 0 h +.8493 g 5344 961 N -50 0 0 34 50 0 h +.8465 g 5344 995 N -50 0 0 34 50 0 h +.8436 g 5344 1029 N -50 0 0 33 50 0 h +.8408 g 5344 1062 N -50 0 0 34 50 0 h +.838 g 5344 1096 N -50 0 0 33 50 0 h +.8351 g 5344 1129 N -50 0 0 34 50 0 h +.8323 g 5344 1163 N -50 0 0 34 50 0 h +.8295 g 5344 1197 N -50 0 0 33 50 0 h +.8266 g 5344 1230 N -50 0 0 34 50 0 h +.8238 g 5344 1264 N -50 0 0 33 50 0 h +.821 g 5344 1297 N -50 0 0 34 50 0 h +.8181 g 5344 1331 N -50 0 0 33 50 0 h +.8153 g 5344 1364 N -50 0 0 34 50 0 h +.8125 g 5344 1398 N -50 0 0 34 50 0 h +.8096 g 5344 1432 N -50 0 0 33 50 0 h +.8068 g 5344 1465 N -50 0 0 34 50 0 h +.804 g 5344 1499 N -50 0 0 33 50 0 h +.8012 g 5344 1532 N -50 0 0 34 50 0 h +.7983 g 5344 1566 N -50 0 0 34 50 0 h +.7955 g 5344 1600 N -50 0 0 33 50 0 h +.7927 g 5344 1633 N -50 0 0 34 50 0 h +.7898 g 5344 1667 N -50 0 0 33 50 0 h +.787 g 5344 1700 N -50 0 0 34 50 0 h +.7842 g 5344 1734 N -50 0 0 34 50 0 h +.7813 g 5344 1768 N -50 0 0 33 50 0 h +.7785 g 5344 1801 N -50 0 0 34 50 0 h +.7757 g 5344 1835 N -50 0 0 33 50 0 h +.7728 g 5344 1868 N -50 0 0 34 50 0 h +.77 g 5344 1902 N -50 0 0 33 50 0 h +.7672 g 5344 1935 N -50 0 0 34 50 0 h +.7643 g 5344 1969 N -50 0 0 34 50 0 h +.7615 g 5344 2003 N -50 0 0 33 50 0 h +.7587 g 5344 2036 N -50 0 0 34 50 0 h +.7559 g 5344 2070 N -50 0 0 33 50 0 h +.753 g 5344 2103 N -50 0 0 34 50 0 h +.7502 g 5344 2137 N -50 0 0 34 50 0 h +.7474 g 5344 2171 N -50 0 0 33 50 0 h +.7445 g 5344 2204 N -50 0 0 34 50 0 h +.7417 g 5344 2238 N -50 0 0 33 50 0 h +.7389 g 5344 2271 N -50 0 0 34 50 0 h +.736 g 5344 2305 N -50 0 0 34 50 0 h +.7332 g 5344 2339 N -50 0 0 33 50 0 h +.7304 g 5344 2372 N -50 0 0 34 50 0 h +.7275 g 5344 2406 N -50 0 0 33 50 0 h +.7247 g 5344 2439 N -50 0 0 34 50 0 h +.7219 g 5344 2473 N -50 0 0 34 50 0 h +.719 g 5344 2507 N -50 0 0 33 50 0 h +.7162 g 5344 2540 N -50 0 0 34 50 0 h +.7134 g 5344 2574 N -50 0 0 32 50 0 h +.7106 g 5344 2606 N -50 0 0 34 50 0 h +.7077 g 5344 2640 N -50 0 0 33 50 0 h +.7049 g 5344 2673 N -50 0 0 34 50 0 h +.7021 g 5344 2707 N -50 0 0 34 50 0 h +.6992 g 5344 2741 N -50 0 0 33 50 0 h +.6964 g 5344 2774 N -50 0 0 34 50 0 h +.6936 g 5344 2808 N -50 0 0 33 50 0 h +.6907 g 5344 2841 N -50 0 0 34 50 0 h +.6879 g 5344 2875 N -50 0 0 34 50 0 h +.6851 g 5344 2909 N -50 0 0 33 50 0 h +.6822 g 5344 2942 N -50 0 0 34 50 0 h +.6794 g 5344 2976 N -50 0 0 33 50 0 h +.6766 g 5344 3009 N -50 0 0 34 50 0 h +.6737 g 5344 3043 N -50 0 0 34 50 0 h +.6709 g 5344 3077 N -50 0 0 33 50 0 h +.6681 g 5344 3110 N -50 0 0 34 50 0 h +.6653 g 5344 3144 N -50 0 0 33 50 0 h +.6624 g 5344 3177 N -50 0 0 34 50 0 h +.6596 g 5344 3211 N -50 0 0 34 50 0 h +.6568 g 5344 3245 N -50 0 0 33 50 0 h +.6539 g 5344 3278 N -50 0 0 34 50 0 h +.6511 g 5344 3312 N -50 0 0 33 50 0 h +.6483 g 5344 3345 N -50 0 0 34 50 0 h +.6454 g 5344 3379 N -50 0 0 33 50 0 h +.6426 g 5344 3412 N -50 0 0 34 50 0 h +.6398 g 5344 3446 N -50 0 0 34 50 0 h +.6369 g 5344 3480 N -50 0 0 33 50 0 h +.6341 g 5344 3513 N -50 0 0 34 50 0 h +.6313 g 5344 3547 N -50 0 0 33 50 0 h +.6284 g 5344 3580 N -50 0 0 34 50 0 h +.6256 g 5344 3614 N -50 0 0 34 50 0 h +.6228 g 5344 3648 N -50 0 0 33 50 0 h +.6199 g 5344 3681 N -50 0 0 34 50 0 h +.6171 g 5344 3715 N -50 0 0 33 50 0 h +.6143 g 5344 3748 N -50 0 0 34 50 0 h +.6115 g 5344 3782 N -50 0 0 34 50 0 h +.6086 g 5344 3816 N -50 0 0 33 50 0 h +.6058 g 5344 3849 N -50 0 0 34 50 0 h +.603 g 5344 3883 N -50 0 0 33 50 0 h +.6001 g 5344 3916 N -50 0 0 34 50 0 h +.5973 g 5344 3950 N -50 0 0 33 50 0 h +.5945 g 5344 3983 N -50 0 0 34 50 0 h +.5916 g 5344 4017 N -50 0 0 34 50 0 h +.5888 g 5344 4051 N -50 0 0 33 50 0 h +.586 g 5344 4084 N -50 0 0 34 50 0 h +.5831 g 5344 4118 N -50 0 0 33 50 0 h +.5803 g 5344 4151 N -50 0 0 34 50 0 h +.5775 g 5344 4185 N -50 0 0 34 50 0 h +.5746 g 5344 4219 N -50 0 0 33 50 0 h +.8621 g 5394 928 N -51 0 0 33 51 0 h +.8592 g 5394 961 N -51 0 0 34 51 0 h +.8562 g 5394 995 N -51 0 0 34 51 0 h +.8532 g 5394 1029 N -51 0 0 33 51 0 h +.8502 g 5394 1062 N -51 0 0 34 51 0 h +.8472 g 5394 1096 N -51 0 0 33 51 0 h +.8442 g 5394 1129 N -51 0 0 34 51 0 h +.8413 g 5394 1163 N -51 0 0 34 51 0 h +.8383 g 5394 1197 N -51 0 0 33 51 0 h +.8353 g 5394 1230 N -51 0 0 34 51 0 h +.8323 g 5394 1264 N -51 0 0 33 51 0 h +.8293 g 5394 1297 N -51 0 0 34 51 0 h +.8263 g 5394 1331 N -51 0 0 33 51 0 h +.8233 g 5394 1364 N -51 0 0 34 51 0 h +.8204 g 5394 1398 N -51 0 0 34 51 0 h +.8174 g 5394 1432 N -51 0 0 33 51 0 h +.8144 g 5394 1465 N -51 0 0 34 51 0 h +.8114 g 5394 1499 N -51 0 0 33 51 0 h +.8084 g 5394 1532 N -51 0 0 34 51 0 h +.8054 g 5394 1566 N -51 0 0 34 51 0 h +.8025 g 5394 1600 N -51 0 0 33 51 0 h +.7995 g 5394 1633 N -51 0 0 34 51 0 h +.7965 g 5394 1667 N -51 0 0 33 51 0 h +.7935 g 5394 1700 N -51 0 0 34 51 0 h +.7905 g 5394 1734 N -51 0 0 34 51 0 h +.7875 g 5394 1768 N -51 0 0 33 51 0 h +.7845 g 5394 1801 N -51 0 0 34 51 0 h +.7816 g 5394 1835 N -51 0 0 33 51 0 h +.7786 g 5394 1868 N -51 0 0 34 51 0 h +.7756 g 5394 1902 N -51 0 0 33 51 0 h +.7726 g 5394 1935 N -51 0 0 34 51 0 h +.7696 g 5394 1969 N -51 0 0 34 51 0 h +.7666 g 5394 2003 N -51 0 0 33 51 0 h +.7637 g 5394 2036 N -51 0 0 34 51 0 h +.7607 g 5394 2070 N -51 0 0 33 51 0 h +.7577 g 5394 2103 N -51 0 0 34 51 0 h +.7547 g 5394 2137 N -51 0 0 34 51 0 h +.7517 g 5394 2171 N -51 0 0 33 51 0 h +.7487 g 5394 2204 N -51 0 0 34 51 0 h +.7458 g 5394 2238 N -51 0 0 33 51 0 h +.7428 g 5394 2271 N -51 0 0 34 51 0 h +.7398 g 5394 2305 N -51 0 0 34 51 0 h +.7368 g 5394 2339 N -51 0 0 33 51 0 h +.7338 g 5394 2372 N -51 0 0 34 51 0 h +.7308 g 5394 2406 N -51 0 0 33 51 0 h +.7278 g 5394 2439 N -51 0 0 34 51 0 h +.7249 g 5394 2473 N -51 0 0 34 51 0 h +.7219 g 5394 2507 N -51 0 0 33 51 0 h +.7189 g 5394 2540 N -51 0 0 34 51 0 h +.7159 g 5394 2574 N -51 0 0 32 51 0 h +.7129 g 5394 2606 N -51 0 0 34 51 0 h +.7099 g 5394 2640 N -51 0 0 33 51 0 h +.707 g 5394 2673 N -51 0 0 34 51 0 h +.704 g 5394 2707 N -51 0 0 34 51 0 h +.701 g 5394 2741 N -51 0 0 33 51 0 h +.698 g 5394 2774 N -51 0 0 34 51 0 h +.695 g 5394 2808 N -51 0 0 33 51 0 h +.692 g 5394 2841 N -51 0 0 34 51 0 h +.689 g 5394 2875 N -51 0 0 34 51 0 h +.6861 g 5394 2909 N -51 0 0 33 51 0 h +.6831 g 5394 2942 N -51 0 0 34 51 0 h +.6801 g 5394 2976 N -51 0 0 33 51 0 h +.6771 g 5394 3009 N -51 0 0 34 51 0 h +.6741 g 5394 3043 N -51 0 0 34 51 0 h +.6711 g 5394 3077 N -51 0 0 33 51 0 h +.6682 g 5394 3110 N -51 0 0 34 51 0 h +.6652 g 5394 3144 N -51 0 0 33 51 0 h +.6622 g 5394 3177 N -51 0 0 34 51 0 h +.6592 g 5394 3211 N -51 0 0 34 51 0 h +.6562 g 5394 3245 N -51 0 0 33 51 0 h +.6532 g 5394 3278 N -51 0 0 34 51 0 h +.6503 g 5394 3312 N -51 0 0 33 51 0 h +.6473 g 5394 3345 N -51 0 0 34 51 0 h +.6443 g 5394 3379 N -51 0 0 33 51 0 h +.6413 g 5394 3412 N -51 0 0 34 51 0 h +.6383 g 5394 3446 N -51 0 0 34 51 0 h +.6353 g 5394 3480 N -51 0 0 33 51 0 h +.6323 g 5394 3513 N -51 0 0 34 51 0 h +.6294 g 5394 3547 N -51 0 0 33 51 0 h +.6264 g 5394 3580 N -51 0 0 34 51 0 h +.6234 g 5394 3614 N -51 0 0 34 51 0 h +.6204 g 5394 3648 N -51 0 0 33 51 0 h +.6174 g 5394 3681 N -51 0 0 34 51 0 h +.6144 g 5394 3715 N -51 0 0 33 51 0 h +.6115 g 5394 3748 N -51 0 0 34 51 0 h +.6085 g 5394 3782 N -51 0 0 34 51 0 h +.6055 g 5394 3816 N -51 0 0 33 51 0 h +.6025 g 5394 3849 N -51 0 0 34 51 0 h +.5995 g 5394 3883 N -51 0 0 33 51 0 h +.5965 g 5394 3916 N -51 0 0 34 51 0 h +.5935 g 5394 3950 N -51 0 0 33 51 0 h +.5906 g 5394 3983 N -51 0 0 34 51 0 h +.5876 g 5394 4017 N -51 0 0 34 51 0 h +.5846 g 5394 4051 N -51 0 0 33 51 0 h +.5816 g 5394 4084 N -51 0 0 34 51 0 h +.5786 g 5394 4118 N -51 0 0 33 51 0 h +.5756 g 5394 4151 N -51 0 0 34 51 0 h +.5727 g 5394 4185 N -51 0 0 34 51 0 h +.5697 g 5394 4219 N -51 0 0 33 51 0 h +.8722 g 5445 928 N -50 0 0 33 50 0 h +.869 g 5445 961 N -50 0 0 34 50 0 h +.8659 g 5445 995 N -50 0 0 34 50 0 h +.8628 g 5445 1029 N -50 0 0 33 50 0 h +.8596 g 5445 1062 N -50 0 0 34 50 0 h +.8565 g 5445 1096 N -50 0 0 33 50 0 h +.8533 g 5445 1129 N -50 0 0 34 50 0 h +.8502 g 5445 1163 N -50 0 0 34 50 0 h +.8471 g 5445 1197 N -50 0 0 33 50 0 h +.8439 g 5445 1230 N -50 0 0 34 50 0 h +.8408 g 5445 1264 N -50 0 0 33 50 0 h +.8377 g 5445 1297 N -50 0 0 34 50 0 h +.8345 g 5445 1331 N -50 0 0 33 50 0 h +.8314 g 5445 1364 N -50 0 0 34 50 0 h +.8282 g 5445 1398 N -50 0 0 34 50 0 h +.8251 g 5445 1432 N -50 0 0 33 50 0 h +.822 g 5445 1465 N -50 0 0 34 50 0 h +.8188 g 5445 1499 N -50 0 0 33 50 0 h +.8157 g 5445 1532 N -50 0 0 34 50 0 h +.8126 g 5445 1566 N -50 0 0 34 50 0 h +.8094 g 5445 1600 N -50 0 0 33 50 0 h +.8063 g 5445 1633 N -50 0 0 34 50 0 h +.8031 g 5445 1667 N -50 0 0 33 50 0 h +.8 g 5445 1700 N -50 0 0 34 50 0 h +.7969 g 5445 1734 N -50 0 0 34 50 0 h +.7937 g 5445 1768 N -50 0 0 33 50 0 h +.7906 g 5445 1801 N -50 0 0 34 50 0 h +.7875 g 5445 1835 N -50 0 0 33 50 0 h +.7843 g 5445 1868 N -50 0 0 34 50 0 h +.7812 g 5445 1902 N -50 0 0 33 50 0 h +.778 g 5445 1935 N -50 0 0 34 50 0 h +.7749 g 5445 1969 N -50 0 0 34 50 0 h +.7718 g 5445 2003 N -50 0 0 33 50 0 h +.7686 g 5445 2036 N -50 0 0 34 50 0 h +.7655 g 5445 2070 N -50 0 0 33 50 0 h +.7624 g 5445 2103 N -50 0 0 34 50 0 h +.7592 g 5445 2137 N -50 0 0 34 50 0 h +.7561 g 5445 2171 N -50 0 0 33 50 0 h +.7529 g 5445 2204 N -50 0 0 34 50 0 h +.7498 g 5445 2238 N -50 0 0 33 50 0 h +.7467 g 5445 2271 N -50 0 0 34 50 0 h +.7435 g 5445 2305 N -50 0 0 34 50 0 h +.7404 g 5445 2339 N -50 0 0 33 50 0 h +.7373 g 5445 2372 N -50 0 0 34 50 0 h +.7341 g 5445 2406 N -50 0 0 33 50 0 h +.731 g 5445 2439 N -50 0 0 34 50 0 h +.7278 g 5445 2473 N -50 0 0 34 50 0 h +.7247 g 5445 2507 N -50 0 0 33 50 0 h +.7216 g 5445 2540 N -50 0 0 34 50 0 h +.7184 g 5445 2574 N -50 0 0 32 50 0 h +.7153 g 5445 2606 N -50 0 0 34 50 0 h +.7122 g 5445 2640 N -50 0 0 33 50 0 h +.709 g 5445 2673 N -50 0 0 34 50 0 h +.7059 g 5445 2707 N -50 0 0 34 50 0 h +.7027 g 5445 2741 N -50 0 0 33 50 0 h +.6996 g 5445 2774 N -50 0 0 34 50 0 h +.6965 g 5445 2808 N -50 0 0 33 50 0 h +.6933 g 5445 2841 N -50 0 0 34 50 0 h +.6902 g 5445 2875 N -50 0 0 34 50 0 h +.6871 g 5445 2909 N -50 0 0 33 50 0 h +.6839 g 5445 2942 N -50 0 0 34 50 0 h +.6808 g 5445 2976 N -50 0 0 33 50 0 h +.6776 g 5445 3009 N -50 0 0 34 50 0 h +.6745 g 5445 3043 N -50 0 0 34 50 0 h +.6714 g 5445 3077 N -50 0 0 33 50 0 h +.6682 g 5445 3110 N -50 0 0 34 50 0 h +.6651 g 5445 3144 N -50 0 0 33 50 0 h +.662 g 5445 3177 N -50 0 0 34 50 0 h +.6588 g 5445 3211 N -50 0 0 34 50 0 h +.6557 g 5445 3245 N -50 0 0 33 50 0 h +.6525 g 5445 3278 N -50 0 0 34 50 0 h +.6494 g 5445 3312 N -50 0 0 33 50 0 h +.6463 g 5445 3345 N -50 0 0 34 50 0 h +.6431 g 5445 3379 N -50 0 0 33 50 0 h +.64 g 5445 3412 N -50 0 0 34 50 0 h +.6369 g 5445 3446 N -50 0 0 34 50 0 h +.6337 g 5445 3480 N -50 0 0 33 50 0 h +.6306 g 5445 3513 N -50 0 0 34 50 0 h +.6274 g 5445 3547 N -50 0 0 33 50 0 h +.6243 g 5445 3580 N -50 0 0 34 50 0 h +.6212 g 5445 3614 N -50 0 0 34 50 0 h +.618 g 5445 3648 N -50 0 0 33 50 0 h +.6149 g 5445 3681 N -50 0 0 34 50 0 h +.6118 g 5445 3715 N -50 0 0 33 50 0 h +.6086 g 5445 3748 N -50 0 0 34 50 0 h +.6055 g 5445 3782 N -50 0 0 34 50 0 h +.6023 g 5445 3816 N -50 0 0 33 50 0 h +.5992 g 5445 3849 N -50 0 0 34 50 0 h +.5961 g 5445 3883 N -50 0 0 33 50 0 h +.5929 g 5445 3916 N -50 0 0 34 50 0 h +.5898 g 5445 3950 N -50 0 0 33 50 0 h +.5867 g 5445 3983 N -50 0 0 34 50 0 h +.5835 g 5445 4017 N -50 0 0 34 50 0 h +.5804 g 5445 4051 N -50 0 0 33 50 0 h +.5772 g 5445 4084 N -50 0 0 34 50 0 h +.5741 g 5445 4118 N -50 0 0 33 50 0 h +.571 g 5445 4151 N -50 0 0 34 50 0 h +.5678 g 5445 4185 N -50 0 0 34 50 0 h +.5647 g 5445 4219 N -50 0 0 33 50 0 h +.8822 g 5495 928 N -51 0 0 33 51 0 h +.8789 g 5495 961 N -51 0 0 34 51 0 h +.8756 g 5495 995 N -51 0 0 34 51 0 h +.8723 g 5495 1029 N -51 0 0 33 51 0 h +.869 g 5495 1062 N -51 0 0 34 51 0 h +.8657 g 5495 1096 N -51 0 0 33 51 0 h +.8625 g 5495 1129 N -51 0 0 34 51 0 h +.8592 g 5495 1163 N -51 0 0 34 51 0 h +.8559 g 5495 1197 N -51 0 0 33 51 0 h +.8526 g 5495 1230 N -51 0 0 34 51 0 h +.8493 g 5495 1264 N -51 0 0 33 51 0 h +.846 g 5495 1297 N -51 0 0 34 51 0 h +.8427 g 5495 1331 N -51 0 0 33 51 0 h +.8394 g 5495 1364 N -51 0 0 34 51 0 h +.8361 g 5495 1398 N -51 0 0 34 51 0 h +.8328 g 5495 1432 N -51 0 0 33 51 0 h +.8295 g 5495 1465 N -51 0 0 34 51 0 h +.8263 g 5495 1499 N -51 0 0 33 51 0 h +.823 g 5495 1532 N -51 0 0 34 51 0 h +.8197 g 5495 1566 N -51 0 0 34 51 0 h +.8164 g 5495 1600 N -51 0 0 33 51 0 h +.8131 g 5495 1633 N -51 0 0 34 51 0 h +.8098 g 5495 1667 N -51 0 0 33 51 0 h +.8065 g 5495 1700 N -51 0 0 34 51 0 h +.8032 g 5495 1734 N -51 0 0 34 51 0 h +.7999 g 5495 1768 N -51 0 0 33 51 0 h +.7966 g 5495 1801 N -51 0 0 34 51 0 h +.7934 g 5495 1835 N -51 0 0 33 51 0 h +.7901 g 5495 1868 N -51 0 0 34 51 0 h +.7868 g 5495 1902 N -51 0 0 33 51 0 h +.7835 g 5495 1935 N -51 0 0 34 51 0 h +.7802 g 5495 1969 N -51 0 0 34 51 0 h +.7769 g 5495 2003 N -51 0 0 33 51 0 h +.7736 g 5495 2036 N -51 0 0 34 51 0 h +.7703 g 5495 2070 N -51 0 0 33 51 0 h +.767 g 5495 2103 N -51 0 0 34 51 0 h +.7637 g 5495 2137 N -51 0 0 34 51 0 h +.7604 g 5495 2171 N -51 0 0 33 51 0 h +.7572 g 5495 2204 N -51 0 0 34 51 0 h +.7539 g 5495 2238 N -51 0 0 33 51 0 h +.7506 g 5495 2271 N -51 0 0 34 51 0 h +.7473 g 5495 2305 N -51 0 0 34 51 0 h +.744 g 5495 2339 N -51 0 0 33 51 0 h +.7407 g 5495 2372 N -51 0 0 34 51 0 h +.7374 g 5495 2406 N -51 0 0 33 51 0 h +.7341 g 5495 2439 N -51 0 0 34 51 0 h +.7308 g 5495 2473 N -51 0 0 34 51 0 h +.7275 g 5495 2507 N -51 0 0 33 51 0 h +.7243 g 5495 2540 N -51 0 0 34 51 0 h +.721 g 5495 2574 N -51 0 0 32 51 0 h +.7177 g 5495 2606 N -51 0 0 34 51 0 h +.7144 g 5495 2640 N -51 0 0 33 51 0 h +.7111 g 5495 2673 N -51 0 0 34 51 0 h +.7078 g 5495 2707 N -51 0 0 34 51 0 h +.7045 g 5495 2741 N -51 0 0 33 51 0 h +.7012 g 5495 2774 N -51 0 0 34 51 0 h +.6979 g 5495 2808 N -51 0 0 33 51 0 h +.6946 g 5495 2841 N -51 0 0 34 51 0 h +.6913 g 5495 2875 N -51 0 0 34 51 0 h +.6881 g 5495 2909 N -51 0 0 33 51 0 h +.6848 g 5495 2942 N -51 0 0 34 51 0 h +.6815 g 5495 2976 N -51 0 0 33 51 0 h +.6782 g 5495 3009 N -51 0 0 34 51 0 h +.6749 g 5495 3043 N -51 0 0 34 51 0 h +.6716 g 5495 3077 N -51 0 0 33 51 0 h +.6683 g 5495 3110 N -51 0 0 34 51 0 h +.665 g 5495 3144 N -51 0 0 33 51 0 h +.6617 g 5495 3177 N -51 0 0 34 51 0 h +.6584 g 5495 3211 N -51 0 0 34 51 0 h +.6552 g 5495 3245 N -51 0 0 33 51 0 h +.6519 g 5495 3278 N -51 0 0 34 51 0 h +.6486 g 5495 3312 N -51 0 0 33 51 0 h +.6453 g 5495 3345 N -51 0 0 34 51 0 h +.642 g 5495 3379 N -51 0 0 33 51 0 h +.6387 g 5495 3412 N -51 0 0 34 51 0 h +.6354 g 5495 3446 N -51 0 0 34 51 0 h +.6321 g 5495 3480 N -51 0 0 33 51 0 h +.6288 g 5495 3513 N -51 0 0 34 51 0 h +.6255 g 5495 3547 N -51 0 0 33 51 0 h +.6222 g 5495 3580 N -51 0 0 34 51 0 h +.619 g 5495 3614 N -51 0 0 34 51 0 h +.6157 g 5495 3648 N -51 0 0 33 51 0 h +.6124 g 5495 3681 N -51 0 0 34 51 0 h +.6091 g 5495 3715 N -51 0 0 33 51 0 h +.6058 g 5495 3748 N -51 0 0 34 51 0 h +.6025 g 5495 3782 N -51 0 0 34 51 0 h +.5992 g 5495 3816 N -51 0 0 33 51 0 h +.5959 g 5495 3849 N -51 0 0 34 51 0 h +.5926 g 5495 3883 N -51 0 0 33 51 0 h +.5893 g 5495 3916 N -51 0 0 34 51 0 h +.5861 g 5495 3950 N -51 0 0 33 51 0 h +.5828 g 5495 3983 N -51 0 0 34 51 0 h +.5795 g 5495 4017 N -51 0 0 34 51 0 h +.5762 g 5495 4051 N -51 0 0 33 51 0 h +.5729 g 5495 4084 N -51 0 0 34 51 0 h +.5696 g 5495 4118 N -51 0 0 33 51 0 h +.5663 g 5495 4151 N -51 0 0 34 51 0 h +.563 g 5495 4185 N -51 0 0 34 51 0 h +.5597 g 5495 4219 N -51 0 0 33 51 0 h +.8922 g 5546 928 N -50 0 0 33 50 0 h +.8888 g 5546 961 N -50 0 0 34 50 0 h +.8853 g 5546 995 N -50 0 0 34 50 0 h +.8819 g 5546 1029 N -50 0 0 33 50 0 h +.8784 g 5546 1062 N -50 0 0 34 50 0 h +.875 g 5546 1096 N -50 0 0 33 50 0 h +.8716 g 5546 1129 N -50 0 0 34 50 0 h +.8681 g 5546 1163 N -50 0 0 34 50 0 h +.8647 g 5546 1197 N -50 0 0 33 50 0 h +.8612 g 5546 1230 N -50 0 0 34 50 0 h +.8578 g 5546 1264 N -50 0 0 33 50 0 h +.8543 g 5546 1297 N -50 0 0 34 50 0 h +.8509 g 5546 1331 N -50 0 0 33 50 0 h +.8475 g 5546 1364 N -50 0 0 34 50 0 h +.844 g 5546 1398 N -50 0 0 34 50 0 h +.8406 g 5546 1432 N -50 0 0 33 50 0 h +.8371 g 5546 1465 N -50 0 0 34 50 0 h +.8337 g 5546 1499 N -50 0 0 33 50 0 h +.8302 g 5546 1532 N -50 0 0 34 50 0 h +.8268 g 5546 1566 N -50 0 0 34 50 0 h +.8233 g 5546 1600 N -50 0 0 33 50 0 h +.8199 g 5546 1633 N -50 0 0 34 50 0 h +.8165 g 5546 1667 N -50 0 0 33 50 0 h +.813 g 5546 1700 N -50 0 0 34 50 0 h +.8096 g 5546 1734 N -50 0 0 34 50 0 h +.8061 g 5546 1768 N -50 0 0 33 50 0 h +.8027 g 5546 1801 N -50 0 0 34 50 0 h +.7992 g 5546 1835 N -50 0 0 33 50 0 h +.7958 g 5546 1868 N -50 0 0 34 50 0 h +.7924 g 5546 1902 N -50 0 0 33 50 0 h +.7889 g 5546 1935 N -50 0 0 34 50 0 h +.7855 g 5546 1969 N -50 0 0 34 50 0 h +.782 g 5546 2003 N -50 0 0 33 50 0 h +.7786 g 5546 2036 N -50 0 0 34 50 0 h +.7751 g 5546 2070 N -50 0 0 33 50 0 h +.7717 g 5546 2103 N -50 0 0 34 50 0 h +.7683 g 5546 2137 N -50 0 0 34 50 0 h +.7648 g 5546 2171 N -50 0 0 33 50 0 h +.7614 g 5546 2204 N -50 0 0 34 50 0 h +.7579 g 5546 2238 N -50 0 0 33 50 0 h +.7545 g 5546 2271 N -50 0 0 34 50 0 h +.751 g 5546 2305 N -50 0 0 34 50 0 h +.7476 g 5546 2339 N -50 0 0 33 50 0 h +.7441 g 5546 2372 N -50 0 0 34 50 0 h +.7407 g 5546 2406 N -50 0 0 33 50 0 h +.7373 g 5546 2439 N -50 0 0 34 50 0 h +.7338 g 5546 2473 N -50 0 0 34 50 0 h +.7304 g 5546 2507 N -50 0 0 33 50 0 h +.7269 g 5546 2540 N -50 0 0 34 50 0 h +.7235 g 5546 2574 N -50 0 0 32 50 0 h +.72 g 5546 2606 N -50 0 0 34 50 0 h +.7166 g 5546 2640 N -50 0 0 33 50 0 h +.7132 g 5546 2673 N -50 0 0 34 50 0 h +.7097 g 5546 2707 N -50 0 0 34 50 0 h +.7063 g 5546 2741 N -50 0 0 33 50 0 h +.7028 g 5546 2774 N -50 0 0 34 50 0 h +.6994 g 5546 2808 N -50 0 0 33 50 0 h +.6959 g 5546 2841 N -50 0 0 34 50 0 h +.6925 g 5546 2875 N -50 0 0 34 50 0 h +.689 g 5546 2909 N -50 0 0 33 50 0 h +.6856 g 5546 2942 N -50 0 0 34 50 0 h +.6822 g 5546 2976 N -50 0 0 33 50 0 h +.6787 g 5546 3009 N -50 0 0 34 50 0 h +.6753 g 5546 3043 N -50 0 0 34 50 0 h +.6718 g 5546 3077 N -50 0 0 33 50 0 h +.6684 g 5546 3110 N -50 0 0 34 50 0 h +.6649 g 5546 3144 N -50 0 0 33 50 0 h +.6615 g 5546 3177 N -50 0 0 34 50 0 h +.6581 g 5546 3211 N -50 0 0 34 50 0 h +.6546 g 5546 3245 N -50 0 0 33 50 0 h +.6512 g 5546 3278 N -50 0 0 34 50 0 h +.6477 g 5546 3312 N -50 0 0 33 50 0 h +.6443 g 5546 3345 N -50 0 0 34 50 0 h +.6408 g 5546 3379 N -50 0 0 33 50 0 h +.6374 g 5546 3412 N -50 0 0 34 50 0 h +.634 g 5546 3446 N -50 0 0 34 50 0 h +.6305 g 5546 3480 N -50 0 0 33 50 0 h +.6271 g 5546 3513 N -50 0 0 34 50 0 h +.6236 g 5546 3547 N -50 0 0 33 50 0 h +.6202 g 5546 3580 N -50 0 0 34 50 0 h +.6167 g 5546 3614 N -50 0 0 34 50 0 h +.6133 g 5546 3648 N -50 0 0 33 50 0 h +.6098 g 5546 3681 N -50 0 0 34 50 0 h +.6064 g 5546 3715 N -50 0 0 33 50 0 h +.603 g 5546 3748 N -50 0 0 34 50 0 h +.5995 g 5546 3782 N -50 0 0 34 50 0 h +.5961 g 5546 3816 N -50 0 0 33 50 0 h +.5926 g 5546 3849 N -50 0 0 34 50 0 h +.5892 g 5546 3883 N -50 0 0 33 50 0 h +.5857 g 5546 3916 N -50 0 0 34 50 0 h +.5823 g 5546 3950 N -50 0 0 33 50 0 h +.5789 g 5546 3983 N -50 0 0 34 50 0 h +.5754 g 5546 4017 N -50 0 0 34 50 0 h +.572 g 5546 4051 N -50 0 0 33 50 0 h +.5685 g 5546 4084 N -50 0 0 34 50 0 h +.5651 g 5546 4118 N -50 0 0 33 50 0 h +.5616 g 5546 4151 N -50 0 0 34 50 0 h +.5582 g 5546 4185 N -50 0 0 34 50 0 h +.5548 g 5546 4219 N -50 0 0 33 50 0 h +.9022 g 5596 928 N -51 0 0 33 51 0 h +.8986 g 5596 961 N -51 0 0 34 51 0 h +.895 g 5596 995 N -51 0 0 34 51 0 h +.8915 g 5596 1029 N -51 0 0 33 51 0 h +.8879 g 5596 1062 N -51 0 0 34 51 0 h +.8843 g 5596 1096 N -51 0 0 33 51 0 h +.8807 g 5596 1129 N -51 0 0 34 51 0 h +.8771 g 5596 1163 N -51 0 0 34 51 0 h +.8735 g 5596 1197 N -51 0 0 33 51 0 h +.8699 g 5596 1230 N -51 0 0 34 51 0 h +.8663 g 5596 1264 N -51 0 0 33 51 0 h +.8627 g 5596 1297 N -51 0 0 34 51 0 h +.8591 g 5596 1331 N -51 0 0 33 51 0 h +.8555 g 5596 1364 N -51 0 0 34 51 0 h +.8519 g 5596 1398 N -51 0 0 34 51 0 h +.8483 g 5596 1432 N -51 0 0 33 51 0 h +.8447 g 5596 1465 N -51 0 0 34 51 0 h +.8411 g 5596 1499 N -51 0 0 33 51 0 h +.8375 g 5596 1532 N -51 0 0 34 51 0 h +.8339 g 5596 1566 N -51 0 0 34 51 0 h +.8303 g 5596 1600 N -51 0 0 33 51 0 h +.8267 g 5596 1633 N -51 0 0 34 51 0 h +.8231 g 5596 1667 N -51 0 0 33 51 0 h +.8195 g 5596 1700 N -51 0 0 34 51 0 h +.8159 g 5596 1734 N -51 0 0 34 51 0 h +.8123 g 5596 1768 N -51 0 0 33 51 0 h +.8087 g 5596 1801 N -51 0 0 34 51 0 h +.8051 g 5596 1835 N -51 0 0 33 51 0 h +.8015 g 5596 1868 N -51 0 0 34 51 0 h +.7979 g 5596 1902 N -51 0 0 33 51 0 h +.7943 g 5596 1935 N -51 0 0 34 51 0 h +.7907 g 5596 1969 N -51 0 0 34 51 0 h +.7872 g 5596 2003 N -51 0 0 33 51 0 h +.7836 g 5596 2036 N -51 0 0 34 51 0 h +.78 g 5596 2070 N -51 0 0 33 51 0 h +.7764 g 5596 2103 N -51 0 0 34 51 0 h +.7728 g 5596 2137 N -51 0 0 34 51 0 h +.7692 g 5596 2171 N -51 0 0 33 51 0 h +.7656 g 5596 2204 N -51 0 0 34 51 0 h +.762 g 5596 2238 N -51 0 0 33 51 0 h +.7584 g 5596 2271 N -51 0 0 34 51 0 h +.7548 g 5596 2305 N -51 0 0 34 51 0 h +.7512 g 5596 2339 N -51 0 0 33 51 0 h +.7476 g 5596 2372 N -51 0 0 34 51 0 h +.744 g 5596 2406 N -51 0 0 33 51 0 h +.7404 g 5596 2439 N -51 0 0 34 51 0 h +.7368 g 5596 2473 N -51 0 0 34 51 0 h +.7332 g 5596 2507 N -51 0 0 33 51 0 h +.7296 g 5596 2540 N -51 0 0 34 51 0 h +.726 g 5596 2574 N -51 0 0 32 51 0 h +.7224 g 5596 2606 N -51 0 0 34 51 0 h +.7188 g 5596 2640 N -51 0 0 33 51 0 h +.7152 g 5596 2673 N -51 0 0 34 51 0 h +.7116 g 5596 2707 N -51 0 0 34 51 0 h +.708 g 5596 2741 N -51 0 0 33 51 0 h +.7044 g 5596 2774 N -51 0 0 34 51 0 h +.7008 g 5596 2808 N -51 0 0 33 51 0 h +.6972 g 5596 2841 N -51 0 0 34 51 0 h +.6936 g 5596 2875 N -51 0 0 34 51 0 h +.69 g 5596 2909 N -51 0 0 33 51 0 h +.6864 g 5596 2942 N -51 0 0 34 51 0 h +.6829 g 5596 2976 N -51 0 0 33 51 0 h +.6793 g 5596 3009 N -51 0 0 34 51 0 h +.6757 g 5596 3043 N -51 0 0 34 51 0 h +.6721 g 5596 3077 N -51 0 0 33 51 0 h +.6685 g 5596 3110 N -51 0 0 34 51 0 h +.6649 g 5596 3144 N -51 0 0 33 51 0 h +.6613 g 5596 3177 N -51 0 0 34 51 0 h +.6577 g 5596 3211 N -51 0 0 34 51 0 h +.6541 g 5596 3245 N -51 0 0 33 51 0 h +.6505 g 5596 3278 N -51 0 0 34 51 0 h +.6469 g 5596 3312 N -51 0 0 33 51 0 h +.6433 g 5596 3345 N -51 0 0 34 51 0 h +.6397 g 5596 3379 N -51 0 0 33 51 0 h +.6361 g 5596 3412 N -51 0 0 34 51 0 h +.6325 g 5596 3446 N -51 0 0 34 51 0 h +.6289 g 5596 3480 N -51 0 0 33 51 0 h +.6253 g 5596 3513 N -51 0 0 34 51 0 h +.6217 g 5596 3547 N -51 0 0 33 51 0 h +.6181 g 5596 3580 N -51 0 0 34 51 0 h +.6145 g 5596 3614 N -51 0 0 34 51 0 h +.6109 g 5596 3648 N -51 0 0 33 51 0 h +.6073 g 5596 3681 N -51 0 0 34 51 0 h +.6037 g 5596 3715 N -51 0 0 33 51 0 h +.6001 g 5596 3748 N -51 0 0 34 51 0 h +.5965 g 5596 3782 N -51 0 0 34 51 0 h +.5929 g 5596 3816 N -51 0 0 33 51 0 h +.5893 g 5596 3849 N -51 0 0 34 51 0 h +.5857 g 5596 3883 N -51 0 0 33 51 0 h +.5821 g 5596 3916 N -51 0 0 34 51 0 h +.5786 g 5596 3950 N -51 0 0 33 51 0 h +.575 g 5596 3983 N -51 0 0 34 51 0 h +.5714 g 5596 4017 N -51 0 0 34 51 0 h +.5678 g 5596 4051 N -51 0 0 33 51 0 h +.5642 g 5596 4084 N -51 0 0 34 51 0 h +.5606 g 5596 4118 N -51 0 0 33 51 0 h +.557 g 5596 4151 N -51 0 0 34 51 0 h +.5534 g 5596 4185 N -51 0 0 34 51 0 h +.5498 g 5596 4219 N -51 0 0 33 51 0 h +.9123 g 5647 928 N -51 0 0 33 51 0 h +.9085 g 5647 961 N -51 0 0 34 51 0 h +.9048 g 5647 995 N -51 0 0 34 51 0 h +.901 g 5647 1029 N -51 0 0 33 51 0 h +.8973 g 5647 1062 N -51 0 0 34 51 0 h +.8935 g 5647 1096 N -51 0 0 33 51 0 h +.8898 g 5647 1129 N -51 0 0 34 51 0 h +.886 g 5647 1163 N -51 0 0 34 51 0 h +.8823 g 5647 1197 N -51 0 0 33 51 0 h +.8785 g 5647 1230 N -51 0 0 34 51 0 h +.8748 g 5647 1264 N -51 0 0 33 51 0 h +.871 g 5647 1297 N -51 0 0 34 51 0 h +.8673 g 5647 1331 N -51 0 0 33 51 0 h +.8635 g 5647 1364 N -51 0 0 34 51 0 h +.8598 g 5647 1398 N -51 0 0 34 51 0 h +.856 g 5647 1432 N -51 0 0 33 51 0 h +.8523 g 5647 1465 N -51 0 0 34 51 0 h +.8485 g 5647 1499 N -51 0 0 33 51 0 h +.8448 g 5647 1532 N -51 0 0 34 51 0 h +.841 g 5647 1566 N -51 0 0 34 51 0 h +.8373 g 5647 1600 N -51 0 0 33 51 0 h +.8335 g 5647 1633 N -51 0 0 34 51 0 h +.8298 g 5647 1667 N -51 0 0 33 51 0 h +.826 g 5647 1700 N -51 0 0 34 51 0 h +.8223 g 5647 1734 N -51 0 0 34 51 0 h +.8185 g 5647 1768 N -51 0 0 33 51 0 h +.8148 g 5647 1801 N -51 0 0 34 51 0 h +.811 g 5647 1835 N -51 0 0 33 51 0 h +.8073 g 5647 1868 N -51 0 0 34 51 0 h +.8035 g 5647 1902 N -51 0 0 33 51 0 h +.7998 g 5647 1935 N -51 0 0 34 51 0 h +.796 g 5647 1969 N -51 0 0 34 51 0 h +.7923 g 5647 2003 N -51 0 0 33 51 0 h +.7885 g 5647 2036 N -51 0 0 34 51 0 h +.7848 g 5647 2070 N -51 0 0 33 51 0 h +.781 g 5647 2103 N -51 0 0 34 51 0 h +.7773 g 5647 2137 N -51 0 0 34 51 0 h +.7735 g 5647 2171 N -51 0 0 33 51 0 h +.7698 g 5647 2204 N -51 0 0 34 51 0 h +.766 g 5647 2238 N -51 0 0 33 51 0 h +.7623 g 5647 2271 N -51 0 0 34 51 0 h +.7585 g 5647 2305 N -51 0 0 34 51 0 h +.7548 g 5647 2339 N -51 0 0 33 51 0 h +.751 g 5647 2372 N -51 0 0 34 51 0 h +.7473 g 5647 2406 N -51 0 0 33 51 0 h +.7435 g 5647 2439 N -51 0 0 34 51 0 h +.7398 g 5647 2473 N -51 0 0 34 51 0 h +.736 g 5647 2507 N -51 0 0 33 51 0 h +.7323 g 5647 2540 N -51 0 0 34 51 0 h +.7285 g 5647 2574 N -51 0 0 32 51 0 h +.7248 g 5647 2606 N -51 0 0 34 51 0 h +.721 g 5647 2640 N -51 0 0 33 51 0 h +.7173 g 5647 2673 N -51 0 0 34 51 0 h +.7135 g 5647 2707 N -51 0 0 34 51 0 h +.7098 g 5647 2741 N -51 0 0 33 51 0 h +.706 g 5647 2774 N -51 0 0 34 51 0 h +.7023 g 5647 2808 N -51 0 0 33 51 0 h +.6985 g 5647 2841 N -51 0 0 34 51 0 h +.6948 g 5647 2875 N -51 0 0 34 51 0 h +.691 g 5647 2909 N -51 0 0 33 51 0 h +.6873 g 5647 2942 N -51 0 0 34 51 0 h +.6835 g 5647 2976 N -51 0 0 33 51 0 h +.6798 g 5647 3009 N -51 0 0 34 51 0 h +.676 g 5647 3043 N -51 0 0 34 51 0 h +.6723 g 5647 3077 N -51 0 0 33 51 0 h +.6685 g 5647 3110 N -51 0 0 34 51 0 h +.6648 g 5647 3144 N -51 0 0 33 51 0 h +.661 g 5647 3177 N -51 0 0 34 51 0 h +.6573 g 5647 3211 N -51 0 0 34 51 0 h +.6535 g 5647 3245 N -51 0 0 33 51 0 h +.6498 g 5647 3278 N -51 0 0 34 51 0 h +.646 g 5647 3312 N -51 0 0 33 51 0 h +.6423 g 5647 3345 N -51 0 0 34 51 0 h +.6385 g 5647 3379 N -51 0 0 33 51 0 h +.6348 g 5647 3412 N -51 0 0 34 51 0 h +.631 g 5647 3446 N -51 0 0 34 51 0 h +.6273 g 5647 3480 N -51 0 0 33 51 0 h +.6235 g 5647 3513 N -51 0 0 34 51 0 h +.6198 g 5647 3547 N -51 0 0 33 51 0 h +.616 g 5647 3580 N -51 0 0 34 51 0 h +.6123 g 5647 3614 N -51 0 0 34 51 0 h +.6085 g 5647 3648 N -51 0 0 33 51 0 h +.6048 g 5647 3681 N -51 0 0 34 51 0 h +.601 g 5647 3715 N -51 0 0 33 51 0 h +.5973 g 5647 3748 N -51 0 0 34 51 0 h +.5935 g 5647 3782 N -51 0 0 34 51 0 h +.5898 g 5647 3816 N -51 0 0 33 51 0 h +.5861 g 5647 3849 N -51 0 0 34 51 0 h +.5823 g 5647 3883 N -51 0 0 33 51 0 h +.5786 g 5647 3916 N -51 0 0 34 51 0 h +.5748 g 5647 3950 N -51 0 0 33 51 0 h +.5711 g 5647 3983 N -51 0 0 34 51 0 h +.5673 g 5647 4017 N -51 0 0 34 51 0 h +.5636 g 5647 4051 N -51 0 0 33 51 0 h +.5598 g 5647 4084 N -51 0 0 34 51 0 h +.5561 g 5647 4118 N -51 0 0 33 51 0 h +.5523 g 5647 4151 N -51 0 0 34 51 0 h +.5486 g 5647 4185 N -51 0 0 34 51 0 h +.5448 g 5647 4219 N -51 0 0 33 51 0 h +.9223 g 5698 928 N -50 0 0 33 50 0 h +.9184 g 5698 961 N -50 0 0 34 50 0 h +.9145 g 5698 995 N -50 0 0 34 50 0 h +.9106 g 5698 1029 N -50 0 0 33 50 0 h +.9067 g 5698 1062 N -50 0 0 34 50 0 h +.9028 g 5698 1096 N -50 0 0 33 50 0 h +.8989 g 5698 1129 N -50 0 0 34 50 0 h +.895 g 5698 1163 N -50 0 0 34 50 0 h +.8911 g 5698 1197 N -50 0 0 33 50 0 h +.8872 g 5698 1230 N -50 0 0 34 50 0 h +.8833 g 5698 1264 N -50 0 0 33 50 0 h +.8794 g 5698 1297 N -50 0 0 34 50 0 h +.8755 g 5698 1331 N -50 0 0 33 50 0 h +.8716 g 5698 1364 N -50 0 0 34 50 0 h +.8677 g 5698 1398 N -50 0 0 34 50 0 h +.8638 g 5698 1432 N -50 0 0 33 50 0 h +.8598 g 5698 1465 N -50 0 0 34 50 0 h +.8559 g 5698 1499 N -50 0 0 33 50 0 h +.852 g 5698 1532 N -50 0 0 34 50 0 h +.8481 g 5698 1566 N -50 0 0 34 50 0 h +.8442 g 5698 1600 N -50 0 0 33 50 0 h +.8403 g 5698 1633 N -50 0 0 34 50 0 h +.8364 g 5698 1667 N -50 0 0 33 50 0 h +.8325 g 5698 1700 N -50 0 0 34 50 0 h +.8286 g 5698 1734 N -50 0 0 34 50 0 h +.8247 g 5698 1768 N -50 0 0 33 50 0 h +.8208 g 5698 1801 N -50 0 0 34 50 0 h +.8169 g 5698 1835 N -50 0 0 33 50 0 h +.813 g 5698 1868 N -50 0 0 34 50 0 h +.8091 g 5698 1902 N -50 0 0 33 50 0 h +.8052 g 5698 1935 N -50 0 0 34 50 0 h +.8013 g 5698 1969 N -50 0 0 34 50 0 h +.7974 g 5698 2003 N -50 0 0 33 50 0 h +.7935 g 5698 2036 N -50 0 0 34 50 0 h +.7896 g 5698 2070 N -50 0 0 33 50 0 h +.7857 g 5698 2103 N -50 0 0 34 50 0 h +.7818 g 5698 2137 N -50 0 0 34 50 0 h +.7779 g 5698 2171 N -50 0 0 33 50 0 h +.774 g 5698 2204 N -50 0 0 34 50 0 h +.7701 g 5698 2238 N -50 0 0 33 50 0 h +.7662 g 5698 2271 N -50 0 0 34 50 0 h +.7623 g 5698 2305 N -50 0 0 34 50 0 h +.7584 g 5698 2339 N -50 0 0 33 50 0 h +.7545 g 5698 2372 N -50 0 0 34 50 0 h +.7506 g 5698 2406 N -50 0 0 33 50 0 h +.7467 g 5698 2439 N -50 0 0 34 50 0 h +.7428 g 5698 2473 N -50 0 0 34 50 0 h +.7389 g 5698 2507 N -50 0 0 33 50 0 h +.735 g 5698 2540 N -50 0 0 34 50 0 h +.7311 g 5698 2574 N -50 0 0 32 50 0 h +.7272 g 5698 2606 N -50 0 0 34 50 0 h +.7233 g 5698 2640 N -50 0 0 33 50 0 h +.7194 g 5698 2673 N -50 0 0 34 50 0 h +.7154 g 5698 2707 N -50 0 0 34 50 0 h +.7115 g 5698 2741 N -50 0 0 33 50 0 h +.7076 g 5698 2774 N -50 0 0 34 50 0 h +.7037 g 5698 2808 N -50 0 0 33 50 0 h +.6998 g 5698 2841 N -50 0 0 34 50 0 h +.6959 g 5698 2875 N -50 0 0 34 50 0 h +.692 g 5698 2909 N -50 0 0 33 50 0 h +.6881 g 5698 2942 N -50 0 0 34 50 0 h +.6842 g 5698 2976 N -50 0 0 33 50 0 h +.6803 g 5698 3009 N -50 0 0 34 50 0 h +.6764 g 5698 3043 N -50 0 0 34 50 0 h +.6725 g 5698 3077 N -50 0 0 33 50 0 h +.6686 g 5698 3110 N -50 0 0 34 50 0 h +.6647 g 5698 3144 N -50 0 0 33 50 0 h +.6608 g 5698 3177 N -50 0 0 34 50 0 h +.6569 g 5698 3211 N -50 0 0 34 50 0 h +.653 g 5698 3245 N -50 0 0 33 50 0 h +.6491 g 5698 3278 N -50 0 0 34 50 0 h +.6452 g 5698 3312 N -50 0 0 33 50 0 h +.6413 g 5698 3345 N -50 0 0 34 50 0 h +.6374 g 5698 3379 N -50 0 0 33 50 0 h +.6335 g 5698 3412 N -50 0 0 34 50 0 h +.6296 g 5698 3446 N -50 0 0 34 50 0 h +.6257 g 5698 3480 N -50 0 0 33 50 0 h +.6218 g 5698 3513 N -50 0 0 34 50 0 h +.6179 g 5698 3547 N -50 0 0 33 50 0 h +.614 g 5698 3580 N -50 0 0 34 50 0 h +.6101 g 5698 3614 N -50 0 0 34 50 0 h +.6062 g 5698 3648 N -50 0 0 33 50 0 h +.6023 g 5698 3681 N -50 0 0 34 50 0 h +.5984 g 5698 3715 N -50 0 0 33 50 0 h +.5945 g 5698 3748 N -50 0 0 34 50 0 h +.5906 g 5698 3782 N -50 0 0 34 50 0 h +.5867 g 5698 3816 N -50 0 0 33 50 0 h +.5828 g 5698 3849 N -50 0 0 34 50 0 h +.5789 g 5698 3883 N -50 0 0 33 50 0 h +.575 g 5698 3916 N -50 0 0 34 50 0 h +.5711 g 5698 3950 N -50 0 0 33 50 0 h +.5671 g 5698 3983 N -50 0 0 34 50 0 h +.5632 g 5698 4017 N -50 0 0 34 50 0 h +.5593 g 5698 4051 N -50 0 0 33 50 0 h +.5554 g 5698 4084 N -50 0 0 34 50 0 h +.5515 g 5698 4118 N -50 0 0 33 50 0 h +.5476 g 5698 4151 N -50 0 0 34 50 0 h +.5437 g 5698 4185 N -50 0 0 34 50 0 h +.5398 g 5698 4219 N -50 0 0 33 50 0 h +.9323 g 5748 928 N -51 0 0 33 51 0 h +.9283 g 5748 961 N -51 0 0 34 51 0 h +.9242 g 5748 995 N -51 0 0 34 51 0 h +.9201 g 5748 1029 N -51 0 0 33 51 0 h +.9161 g 5748 1062 N -51 0 0 34 51 0 h +.912 g 5748 1096 N -51 0 0 33 51 0 h +.908 g 5748 1129 N -51 0 0 34 51 0 h +.9039 g 5748 1163 N -51 0 0 34 51 0 h +.8999 g 5748 1197 N -51 0 0 33 51 0 h +.8958 g 5748 1230 N -51 0 0 34 51 0 h +.8918 g 5748 1264 N -51 0 0 33 51 0 h +.8877 g 5748 1297 N -51 0 0 34 51 0 h +.8836 g 5748 1331 N -51 0 0 33 51 0 h +.8796 g 5748 1364 N -51 0 0 34 51 0 h +.8755 g 5748 1398 N -51 0 0 34 51 0 h +.8715 g 5748 1432 N -51 0 0 33 51 0 h +.8674 g 5748 1465 N -51 0 0 34 51 0 h +.8634 g 5748 1499 N -51 0 0 33 51 0 h +.8593 g 5748 1532 N -51 0 0 34 51 0 h +.8553 g 5748 1566 N -51 0 0 34 51 0 h +.8512 g 5748 1600 N -51 0 0 33 51 0 h +.8471 g 5748 1633 N -51 0 0 34 51 0 h +.8431 g 5748 1667 N -51 0 0 33 51 0 h +.839 g 5748 1700 N -51 0 0 34 51 0 h +.835 g 5748 1734 N -51 0 0 34 51 0 h +.8309 g 5748 1768 N -51 0 0 33 51 0 h +.8269 g 5748 1801 N -51 0 0 34 51 0 h +.8228 g 5748 1835 N -51 0 0 33 51 0 h +.8188 g 5748 1868 N -51 0 0 34 51 0 h +.8147 g 5748 1902 N -51 0 0 33 51 0 h +.8106 g 5748 1935 N -51 0 0 34 51 0 h +.8066 g 5748 1969 N -51 0 0 34 51 0 h +.8025 g 5748 2003 N -51 0 0 33 51 0 h +.7985 g 5748 2036 N -51 0 0 34 51 0 h +.7944 g 5748 2070 N -51 0 0 33 51 0 h +.7904 g 5748 2103 N -51 0 0 34 51 0 h +.7863 g 5748 2137 N -51 0 0 34 51 0 h +.7823 g 5748 2171 N -51 0 0 33 51 0 h +.7782 g 5748 2204 N -51 0 0 34 51 0 h +.7741 g 5748 2238 N -51 0 0 33 51 0 h +.7701 g 5748 2271 N -51 0 0 34 51 0 h +.766 g 5748 2305 N -51 0 0 34 51 0 h +.762 g 5748 2339 N -51 0 0 33 51 0 h +.7579 g 5748 2372 N -51 0 0 34 51 0 h +.7539 g 5748 2406 N -51 0 0 33 51 0 h +.7498 g 5748 2439 N -51 0 0 34 51 0 h +.7458 g 5748 2473 N -51 0 0 34 51 0 h +.7417 g 5748 2507 N -51 0 0 33 51 0 h +.7376 g 5748 2540 N -51 0 0 34 51 0 h +.7336 g 5748 2574 N -51 0 0 32 51 0 h +.7295 g 5748 2606 N -51 0 0 34 51 0 h +.7255 g 5748 2640 N -51 0 0 33 51 0 h +.7214 g 5748 2673 N -51 0 0 34 51 0 h +.7174 g 5748 2707 N -51 0 0 34 51 0 h +.7133 g 5748 2741 N -51 0 0 33 51 0 h +.7093 g 5748 2774 N -51 0 0 34 51 0 h +.7052 g 5748 2808 N -51 0 0 33 51 0 h +.7011 g 5748 2841 N -51 0 0 34 51 0 h +.6971 g 5748 2875 N -51 0 0 34 51 0 h +.693 g 5748 2909 N -51 0 0 33 51 0 h +.689 g 5748 2942 N -51 0 0 34 51 0 h +.6849 g 5748 2976 N -51 0 0 33 51 0 h +.6809 g 5748 3009 N -51 0 0 34 51 0 h +.6768 g 5748 3043 N -51 0 0 34 51 0 h +.6728 g 5748 3077 N -51 0 0 33 51 0 h +.6687 g 5748 3110 N -51 0 0 34 51 0 h +.6646 g 5748 3144 N -51 0 0 33 51 0 h +.6606 g 5748 3177 N -51 0 0 34 51 0 h +.6565 g 5748 3211 N -51 0 0 34 51 0 h +.6525 g 5748 3245 N -51 0 0 33 51 0 h +.6484 g 5748 3278 N -51 0 0 34 51 0 h +.6444 g 5748 3312 N -51 0 0 33 51 0 h +.6403 g 5748 3345 N -51 0 0 34 51 0 h +.6362 g 5748 3379 N -51 0 0 33 51 0 h +.6322 g 5748 3412 N -51 0 0 34 51 0 h +.6281 g 5748 3446 N -51 0 0 34 51 0 h +.6241 g 5748 3480 N -51 0 0 33 51 0 h +.62 g 5748 3513 N -51 0 0 34 51 0 h +.616 g 5748 3547 N -51 0 0 33 51 0 h +.6119 g 5748 3580 N -51 0 0 34 51 0 h +.6079 g 5748 3614 N -51 0 0 34 51 0 h +.6038 g 5748 3648 N -51 0 0 33 51 0 h +.5997 g 5748 3681 N -51 0 0 34 51 0 h +.5957 g 5748 3715 N -51 0 0 33 51 0 h +.5916 g 5748 3748 N -51 0 0 34 51 0 h +.5876 g 5748 3782 N -51 0 0 34 51 0 h +.5835 g 5748 3816 N -51 0 0 33 51 0 h +.5795 g 5748 3849 N -51 0 0 34 51 0 h +.5754 g 5748 3883 N -51 0 0 33 51 0 h +.5714 g 5748 3916 N -51 0 0 34 51 0 h +.5673 g 5748 3950 N -51 0 0 33 51 0 h +.5632 g 5748 3983 N -51 0 0 34 51 0 h +.5592 g 5748 4017 N -51 0 0 34 51 0 h +.5551 g 5748 4051 N -51 0 0 33 51 0 h +.5511 g 5748 4084 N -51 0 0 34 51 0 h +.547 g 5748 4118 N -51 0 0 33 51 0 h +.543 g 5748 4151 N -51 0 0 34 51 0 h +.5389 g 5748 4185 N -51 0 0 34 51 0 h +.5349 g 5748 4219 N -51 0 0 33 51 0 h +.9423 g 5799 928 N -50 0 0 33 50 0 h +.9381 g 5799 961 N -50 0 0 34 50 0 h +.9339 g 5799 995 N -50 0 0 34 50 0 h +.9297 g 5799 1029 N -50 0 0 33 50 0 h +.9255 g 5799 1062 N -50 0 0 34 50 0 h +.9213 g 5799 1096 N -50 0 0 33 50 0 h +.9171 g 5799 1129 N -50 0 0 34 50 0 h +.9129 g 5799 1163 N -50 0 0 34 50 0 h +.9087 g 5799 1197 N -50 0 0 33 50 0 h +.9045 g 5799 1230 N -50 0 0 34 50 0 h +.9003 g 5799 1264 N -50 0 0 33 50 0 h +.896 g 5799 1297 N -50 0 0 34 50 0 h +.8918 g 5799 1331 N -50 0 0 33 50 0 h +.8876 g 5799 1364 N -50 0 0 34 50 0 h +.8834 g 5799 1398 N -50 0 0 34 50 0 h +.8792 g 5799 1432 N -50 0 0 33 50 0 h +.875 g 5799 1465 N -50 0 0 34 50 0 h +.8708 g 5799 1499 N -50 0 0 33 50 0 h +.8666 g 5799 1532 N -50 0 0 34 50 0 h +.8624 g 5799 1566 N -50 0 0 34 50 0 h +.8582 g 5799 1600 N -50 0 0 33 50 0 h +.854 g 5799 1633 N -50 0 0 34 50 0 h +.8497 g 5799 1667 N -50 0 0 33 50 0 h +.8455 g 5799 1700 N -50 0 0 34 50 0 h +.8413 g 5799 1734 N -50 0 0 34 50 0 h +.8371 g 5799 1768 N -50 0 0 33 50 0 h +.8329 g 5799 1801 N -50 0 0 34 50 0 h +.8287 g 5799 1835 N -50 0 0 33 50 0 h +.8245 g 5799 1868 N -50 0 0 34 50 0 h +.8203 g 5799 1902 N -50 0 0 33 50 0 h +.8161 g 5799 1935 N -50 0 0 34 50 0 h +.8119 g 5799 1969 N -50 0 0 34 50 0 h +.8077 g 5799 2003 N -50 0 0 33 50 0 h +.8035 g 5799 2036 N -50 0 0 34 50 0 h +.7992 g 5799 2070 N -50 0 0 33 50 0 h +.795 g 5799 2103 N -50 0 0 34 50 0 h +.7908 g 5799 2137 N -50 0 0 34 50 0 h +.7866 g 5799 2171 N -50 0 0 33 50 0 h +.7824 g 5799 2204 N -50 0 0 34 50 0 h +.7782 g 5799 2238 N -50 0 0 33 50 0 h +.774 g 5799 2271 N -50 0 0 34 50 0 h +.7698 g 5799 2305 N -50 0 0 34 50 0 h +.7656 g 5799 2339 N -50 0 0 33 50 0 h +.7614 g 5799 2372 N -50 0 0 34 50 0 h +.7572 g 5799 2406 N -50 0 0 33 50 0 h +.7529 g 5799 2439 N -50 0 0 34 50 0 h +.7487 g 5799 2473 N -50 0 0 34 50 0 h +.7445 g 5799 2507 N -50 0 0 33 50 0 h +.7403 g 5799 2540 N -50 0 0 34 50 0 h +.7361 g 5799 2574 N -50 0 0 32 50 0 h +.7319 g 5799 2606 N -50 0 0 34 50 0 h +.7277 g 5799 2640 N -50 0 0 33 50 0 h +.7235 g 5799 2673 N -50 0 0 34 50 0 h +.7193 g 5799 2707 N -50 0 0 34 50 0 h +.7151 g 5799 2741 N -50 0 0 33 50 0 h +.7109 g 5799 2774 N -50 0 0 34 50 0 h +.7066 g 5799 2808 N -50 0 0 33 50 0 h +.7024 g 5799 2841 N -50 0 0 34 50 0 h +.6982 g 5799 2875 N -50 0 0 34 50 0 h +.694 g 5799 2909 N -50 0 0 33 50 0 h +.6898 g 5799 2942 N -50 0 0 34 50 0 h +.6856 g 5799 2976 N -50 0 0 33 50 0 h +.6814 g 5799 3009 N -50 0 0 34 50 0 h +.6772 g 5799 3043 N -50 0 0 34 50 0 h +.673 g 5799 3077 N -50 0 0 33 50 0 h +.6688 g 5799 3110 N -50 0 0 34 50 0 h +.6646 g 5799 3144 N -50 0 0 33 50 0 h +.6604 g 5799 3177 N -50 0 0 34 50 0 h +.6561 g 5799 3211 N -50 0 0 34 50 0 h +.6519 g 5799 3245 N -50 0 0 33 50 0 h +.6477 g 5799 3278 N -50 0 0 34 50 0 h +.6435 g 5799 3312 N -50 0 0 33 50 0 h +.6393 g 5799 3345 N -50 0 0 34 50 0 h +.6351 g 5799 3379 N -50 0 0 33 50 0 h +.6309 g 5799 3412 N -50 0 0 34 50 0 h +.6267 g 5799 3446 N -50 0 0 34 50 0 h +.6225 g 5799 3480 N -50 0 0 33 50 0 h +.6183 g 5799 3513 N -50 0 0 34 50 0 h +.6141 g 5799 3547 N -50 0 0 33 50 0 h +.6098 g 5799 3580 N -50 0 0 34 50 0 h +.6056 g 5799 3614 N -50 0 0 34 50 0 h +.6014 g 5799 3648 N -50 0 0 33 50 0 h +.5972 g 5799 3681 N -50 0 0 34 50 0 h +.593 g 5799 3715 N -50 0 0 33 50 0 h +.5888 g 5799 3748 N -50 0 0 34 50 0 h +.5846 g 5799 3782 N -50 0 0 34 50 0 h +.5804 g 5799 3816 N -50 0 0 33 50 0 h +.5762 g 5799 3849 N -50 0 0 34 50 0 h +.572 g 5799 3883 N -50 0 0 33 50 0 h +.5678 g 5799 3916 N -50 0 0 34 50 0 h +.5636 g 5799 3950 N -50 0 0 33 50 0 h +.5593 g 5799 3983 N -50 0 0 34 50 0 h +.5551 g 5799 4017 N -50 0 0 34 50 0 h +.5509 g 5799 4051 N -50 0 0 33 50 0 h +.5467 g 5799 4084 N -50 0 0 34 50 0 h +.5425 g 5799 4118 N -50 0 0 33 50 0 h +.5383 g 5799 4151 N -50 0 0 34 50 0 h +.5341 g 5799 4185 N -50 0 0 34 50 0 h +.5299 g 5799 4219 N -50 0 0 33 50 0 h +.9524 g 5849 928 N -51 0 0 33 51 0 h +.948 g 5849 961 N -51 0 0 34 51 0 h +.9436 g 5849 995 N -51 0 0 34 51 0 h +.9393 g 5849 1029 N -51 0 0 33 51 0 h +.9349 g 5849 1062 N -51 0 0 34 51 0 h +.9306 g 5849 1096 N -51 0 0 33 51 0 h +.9262 g 5849 1129 N -51 0 0 34 51 0 h +.9218 g 5849 1163 N -51 0 0 34 51 0 h +.9175 g 5849 1197 N -51 0 0 33 51 0 h +.9131 g 5849 1230 N -51 0 0 34 51 0 h +.9087 g 5849 1264 N -51 0 0 33 51 0 h +.9044 g 5849 1297 N -51 0 0 34 51 0 h +.9 g 5849 1331 N -51 0 0 33 51 0 h +.8957 g 5849 1364 N -51 0 0 34 51 0 h +.8913 g 5849 1398 N -51 0 0 34 51 0 h +.8869 g 5849 1432 N -51 0 0 33 51 0 h +.8826 g 5849 1465 N -51 0 0 34 51 0 h +.8782 g 5849 1499 N -51 0 0 33 51 0 h +.8739 g 5849 1532 N -51 0 0 34 51 0 h +.8695 g 5849 1566 N -51 0 0 34 51 0 h +.8651 g 5849 1600 N -51 0 0 33 51 0 h +.8608 g 5849 1633 N -51 0 0 34 51 0 h +.8564 g 5849 1667 N -51 0 0 33 51 0 h +.852 g 5849 1700 N -51 0 0 34 51 0 h +.8477 g 5849 1734 N -51 0 0 34 51 0 h +.8433 g 5849 1768 N -51 0 0 33 51 0 h +.839 g 5849 1801 N -51 0 0 34 51 0 h +.8346 g 5849 1835 N -51 0 0 33 51 0 h +.8302 g 5849 1868 N -51 0 0 34 51 0 h +.8259 g 5849 1902 N -51 0 0 33 51 0 h +.8215 g 5849 1935 N -51 0 0 34 51 0 h +.8171 g 5849 1969 N -51 0 0 34 51 0 h +.8128 g 5849 2003 N -51 0 0 33 51 0 h +.8084 g 5849 2036 N -51 0 0 34 51 0 h +.8041 g 5849 2070 N -51 0 0 33 51 0 h +.7997 g 5849 2103 N -51 0 0 34 51 0 h +.7953 g 5849 2137 N -51 0 0 34 51 0 h +.791 g 5849 2171 N -51 0 0 33 51 0 h +.7866 g 5849 2204 N -51 0 0 34 51 0 h +.7823 g 5849 2238 N -51 0 0 33 51 0 h +.7779 g 5849 2271 N -51 0 0 34 51 0 h +.7735 g 5849 2305 N -51 0 0 34 51 0 h +.7692 g 5849 2339 N -51 0 0 33 51 0 h +.7648 g 5849 2372 N -51 0 0 34 51 0 h +.7604 g 5849 2406 N -51 0 0 33 51 0 h +.7561 g 5849 2439 N -51 0 0 34 51 0 h +.7517 g 5849 2473 N -51 0 0 34 51 0 h +.7474 g 5849 2507 N -51 0 0 33 51 0 h +.743 g 5849 2540 N -51 0 0 34 51 0 h +.7386 g 5849 2574 N -51 0 0 32 51 0 h +.7343 g 5849 2606 N -51 0 0 34 51 0 h +.7299 g 5849 2640 N -51 0 0 33 51 0 h +.7256 g 5849 2673 N -51 0 0 34 51 0 h +.7212 g 5849 2707 N -51 0 0 34 51 0 h +.7168 g 5849 2741 N -51 0 0 33 51 0 h +.7125 g 5849 2774 N -51 0 0 34 51 0 h +.7081 g 5849 2808 N -51 0 0 33 51 0 h +.7037 g 5849 2841 N -51 0 0 34 51 0 h +.6994 g 5849 2875 N -51 0 0 34 51 0 h +.695 g 5849 2909 N -51 0 0 33 51 0 h +.6907 g 5849 2942 N -51 0 0 34 51 0 h +.6863 g 5849 2976 N -51 0 0 33 51 0 h +.6819 g 5849 3009 N -51 0 0 34 51 0 h +.6776 g 5849 3043 N -51 0 0 34 51 0 h +.6732 g 5849 3077 N -51 0 0 33 51 0 h +.6688 g 5849 3110 N -51 0 0 34 51 0 h +.6645 g 5849 3144 N -51 0 0 33 51 0 h +.6601 g 5849 3177 N -51 0 0 34 51 0 h +.6558 g 5849 3211 N -51 0 0 34 51 0 h +.6514 g 5849 3245 N -51 0 0 33 51 0 h +.647 g 5849 3278 N -51 0 0 34 51 0 h +.6427 g 5849 3312 N -51 0 0 33 51 0 h +.6383 g 5849 3345 N -51 0 0 34 51 0 h +.634 g 5849 3379 N -51 0 0 33 51 0 h +.6296 g 5849 3412 N -51 0 0 34 51 0 h +.6252 g 5849 3446 N -51 0 0 34 51 0 h +.6209 g 5849 3480 N -51 0 0 33 51 0 h +.6165 g 5849 3513 N -51 0 0 34 51 0 h +.6121 g 5849 3547 N -51 0 0 33 51 0 h +.6078 g 5849 3580 N -51 0 0 34 51 0 h +.6034 g 5849 3614 N -51 0 0 34 51 0 h +.5991 g 5849 3648 N -51 0 0 33 51 0 h +.5947 g 5849 3681 N -51 0 0 34 51 0 h +.5903 g 5849 3715 N -51 0 0 33 51 0 h +.586 g 5849 3748 N -51 0 0 34 51 0 h +.5816 g 5849 3782 N -51 0 0 34 51 0 h +.5772 g 5849 3816 N -51 0 0 33 51 0 h +.5729 g 5849 3849 N -51 0 0 34 51 0 h +.5685 g 5849 3883 N -51 0 0 33 51 0 h +.5642 g 5849 3916 N -51 0 0 34 51 0 h +.5598 g 5849 3950 N -51 0 0 33 51 0 h +.5554 g 5849 3983 N -51 0 0 34 51 0 h +.5511 g 5849 4017 N -51 0 0 34 51 0 h +.5467 g 5849 4051 N -51 0 0 33 51 0 h +.5424 g 5849 4084 N -51 0 0 34 51 0 h +.538 g 5849 4118 N -51 0 0 33 51 0 h +.5336 g 5849 4151 N -51 0 0 34 51 0 h +.5293 g 5849 4185 N -51 0 0 34 51 0 h +.5249 g 5849 4219 N -51 0 0 33 51 0 h +.9624 g 5900 928 N -50 0 0 33 50 0 h +.9579 g 5900 961 N -50 0 0 34 50 0 h +.9534 g 5900 995 N -50 0 0 34 50 0 h +.9488 g 5900 1029 N -50 0 0 33 50 0 h +.9443 g 5900 1062 N -50 0 0 34 50 0 h +.9398 g 5900 1096 N -50 0 0 33 50 0 h +.9353 g 5900 1129 N -50 0 0 34 50 0 h +.9308 g 5900 1163 N -50 0 0 34 50 0 h +.9263 g 5900 1197 N -50 0 0 33 50 0 h +.9218 g 5900 1230 N -50 0 0 34 50 0 h +.9172 g 5900 1264 N -50 0 0 33 50 0 h +.9127 g 5900 1297 N -50 0 0 34 50 0 h +.9082 g 5900 1331 N -50 0 0 33 50 0 h +.9037 g 5900 1364 N -50 0 0 34 50 0 h +.8992 g 5900 1398 N -50 0 0 34 50 0 h +.8947 g 5900 1432 N -50 0 0 33 50 0 h +.8902 g 5900 1465 N -50 0 0 34 50 0 h +.8856 g 5900 1499 N -50 0 0 33 50 0 h +.8811 g 5900 1532 N -50 0 0 34 50 0 h +.8766 g 5900 1566 N -50 0 0 34 50 0 h +.8721 g 5900 1600 N -50 0 0 33 50 0 h +.8676 g 5900 1633 N -50 0 0 34 50 0 h +.8631 g 5900 1667 N -50 0 0 33 50 0 h +.8585 g 5900 1700 N -50 0 0 34 50 0 h +.854 g 5900 1734 N -50 0 0 34 50 0 h +.8495 g 5900 1768 N -50 0 0 33 50 0 h +.845 g 5900 1801 N -50 0 0 34 50 0 h +.8405 g 5900 1835 N -50 0 0 33 50 0 h +.836 g 5900 1868 N -50 0 0 34 50 0 h +.8315 g 5900 1902 N -50 0 0 33 50 0 h +.8269 g 5900 1935 N -50 0 0 34 50 0 h +.8224 g 5900 1969 N -50 0 0 34 50 0 h +.8179 g 5900 2003 N -50 0 0 33 50 0 h +.8134 g 5900 2036 N -50 0 0 34 50 0 h +.8089 g 5900 2070 N -50 0 0 33 50 0 h +.8044 g 5900 2103 N -50 0 0 34 50 0 h +.7999 g 5900 2137 N -50 0 0 34 50 0 h +.7953 g 5900 2171 N -50 0 0 33 50 0 h +.7908 g 5900 2204 N -50 0 0 34 50 0 h +.7863 g 5900 2238 N -50 0 0 33 50 0 h +.7818 g 5900 2271 N -50 0 0 34 50 0 h +.7773 g 5900 2305 N -50 0 0 34 50 0 h +.7728 g 5900 2339 N -50 0 0 33 50 0 h +.7683 g 5900 2372 N -50 0 0 34 50 0 h +.7637 g 5900 2406 N -50 0 0 33 50 0 h +.7592 g 5900 2439 N -50 0 0 34 50 0 h +.7547 g 5900 2473 N -50 0 0 34 50 0 h +.7502 g 5900 2507 N -50 0 0 33 50 0 h +.7457 g 5900 2540 N -50 0 0 34 50 0 h +.7412 g 5900 2574 N -50 0 0 32 50 0 h +.7366 g 5900 2606 N -50 0 0 34 50 0 h +.7321 g 5900 2640 N -50 0 0 33 50 0 h +.7276 g 5900 2673 N -50 0 0 34 50 0 h +.7231 g 5900 2707 N -50 0 0 34 50 0 h +.7186 g 5900 2741 N -50 0 0 33 50 0 h +.7141 g 5900 2774 N -50 0 0 34 50 0 h +.7096 g 5900 2808 N -50 0 0 33 50 0 h +.705 g 5900 2841 N -50 0 0 34 50 0 h +.7005 g 5900 2875 N -50 0 0 34 50 0 h +.696 g 5900 2909 N -50 0 0 33 50 0 h +.6915 g 5900 2942 N -50 0 0 34 50 0 h +.687 g 5900 2976 N -50 0 0 33 50 0 h +.6825 g 5900 3009 N -50 0 0 34 50 0 h +.678 g 5900 3043 N -50 0 0 34 50 0 h +.6734 g 5900 3077 N -50 0 0 33 50 0 h +.6689 g 5900 3110 N -50 0 0 34 50 0 h +.6644 g 5900 3144 N -50 0 0 33 50 0 h +.6599 g 5900 3177 N -50 0 0 34 50 0 h +.6554 g 5900 3211 N -50 0 0 34 50 0 h +.6509 g 5900 3245 N -50 0 0 33 50 0 h +.6463 g 5900 3278 N -50 0 0 34 50 0 h +.6418 g 5900 3312 N -50 0 0 33 50 0 h +.6373 g 5900 3345 N -50 0 0 34 50 0 h +.6328 g 5900 3379 N -50 0 0 33 50 0 h +.6283 g 5900 3412 N -50 0 0 34 50 0 h +.6238 g 5900 3446 N -50 0 0 34 50 0 h +.6193 g 5900 3480 N -50 0 0 33 50 0 h +.6147 g 5900 3513 N -50 0 0 34 50 0 h +.6102 g 5900 3547 N -50 0 0 33 50 0 h +.6057 g 5900 3580 N -50 0 0 34 50 0 h +.6012 g 5900 3614 N -50 0 0 34 50 0 h +.5967 g 5900 3648 N -50 0 0 33 50 0 h +.5922 g 5900 3681 N -50 0 0 34 50 0 h +.5877 g 5900 3715 N -50 0 0 33 50 0 h +.5831 g 5900 3748 N -50 0 0 34 50 0 h +.5786 g 5900 3782 N -50 0 0 34 50 0 h +.5741 g 5900 3816 N -50 0 0 33 50 0 h +.5696 g 5900 3849 N -50 0 0 34 50 0 h +.5651 g 5900 3883 N -50 0 0 33 50 0 h +.5606 g 5900 3916 N -50 0 0 34 50 0 h +.5561 g 5900 3950 N -50 0 0 33 50 0 h +.5515 g 5900 3983 N -50 0 0 34 50 0 h +.547 g 5900 4017 N -50 0 0 34 50 0 h +.5425 g 5900 4051 N -50 0 0 33 50 0 h +.538 g 5900 4084 N -50 0 0 34 50 0 h +.5335 g 5900 4118 N -50 0 0 33 50 0 h +.529 g 5900 4151 N -50 0 0 34 50 0 h +.5244 g 5900 4185 N -50 0 0 34 50 0 h +.5199 g 5900 4219 N -50 0 0 33 50 0 h +.9724 g 5950 928 N -51 0 0 33 51 0 h +.9677 g 5950 961 N -51 0 0 34 51 0 h +.9631 g 5950 995 N -51 0 0 34 51 0 h +.9584 g 5950 1029 N -51 0 0 33 51 0 h +.9537 g 5950 1062 N -51 0 0 34 51 0 h +.9491 g 5950 1096 N -51 0 0 33 51 0 h +.9444 g 5950 1129 N -51 0 0 34 51 0 h +.9397 g 5950 1163 N -51 0 0 34 51 0 h +.9351 g 5950 1197 N -51 0 0 33 51 0 h +.9304 g 5950 1230 N -51 0 0 34 51 0 h +.9257 g 5950 1264 N -51 0 0 33 51 0 h +.9211 g 5950 1297 N -51 0 0 34 51 0 h +.9164 g 5950 1331 N -51 0 0 33 51 0 h +.9117 g 5950 1364 N -51 0 0 34 51 0 h +.9071 g 5950 1398 N -51 0 0 34 51 0 h +.9024 g 5950 1432 N -51 0 0 33 51 0 h +.8977 g 5950 1465 N -51 0 0 34 51 0 h +.8931 g 5950 1499 N -51 0 0 33 51 0 h +.8884 g 5950 1532 N -51 0 0 34 51 0 h +.8837 g 5950 1566 N -51 0 0 34 51 0 h +.8791 g 5950 1600 N -51 0 0 33 51 0 h +.8744 g 5950 1633 N -51 0 0 34 51 0 h +.8697 g 5950 1667 N -51 0 0 33 51 0 h +.8651 g 5950 1700 N -51 0 0 34 51 0 h +.8604 g 5950 1734 N -51 0 0 34 51 0 h +.8557 g 5950 1768 N -51 0 0 33 51 0 h +.851 g 5950 1801 N -51 0 0 34 51 0 h +.8464 g 5950 1835 N -51 0 0 33 51 0 h +.8417 g 5950 1868 N -51 0 0 34 51 0 h +.837 g 5950 1902 N -51 0 0 33 51 0 h +.8324 g 5950 1935 N -51 0 0 34 51 0 h +.8277 g 5950 1969 N -51 0 0 34 51 0 h +.823 g 5950 2003 N -51 0 0 33 51 0 h +.8184 g 5950 2036 N -51 0 0 34 51 0 h +.8137 g 5950 2070 N -51 0 0 33 51 0 h +.809 g 5950 2103 N -51 0 0 34 51 0 h +.8044 g 5950 2137 N -51 0 0 34 51 0 h +.7997 g 5950 2171 N -51 0 0 33 51 0 h +.795 g 5950 2204 N -51 0 0 34 51 0 h +.7904 g 5950 2238 N -51 0 0 33 51 0 h +.7857 g 5950 2271 N -51 0 0 34 51 0 h +.781 g 5950 2305 N -51 0 0 34 51 0 h +.7764 g 5950 2339 N -51 0 0 33 51 0 h +.7717 g 5950 2372 N -51 0 0 34 51 0 h +.767 g 5950 2406 N -51 0 0 33 51 0 h +.7624 g 5950 2439 N -51 0 0 34 51 0 h +.7577 g 5950 2473 N -51 0 0 34 51 0 h +.753 g 5950 2507 N -51 0 0 33 51 0 h +.7484 g 5950 2540 N -51 0 0 34 51 0 h +.7437 g 5950 2574 N -51 0 0 32 51 0 h +.739 g 5950 2606 N -51 0 0 34 51 0 h +.7344 g 5950 2640 N -51 0 0 33 51 0 h +.7297 g 5950 2673 N -51 0 0 34 51 0 h +.725 g 5950 2707 N -51 0 0 34 51 0 h +.7203 g 5950 2741 N -51 0 0 33 51 0 h +.7157 g 5950 2774 N -51 0 0 34 51 0 h +.711 g 5950 2808 N -51 0 0 33 51 0 h +.7063 g 5950 2841 N -51 0 0 34 51 0 h +.7017 g 5950 2875 N -51 0 0 34 51 0 h +.697 g 5950 2909 N -51 0 0 33 51 0 h +.6923 g 5950 2942 N -51 0 0 34 51 0 h +.6877 g 5950 2976 N -51 0 0 33 51 0 h +.683 g 5950 3009 N -51 0 0 34 51 0 h +.6783 g 5950 3043 N -51 0 0 34 51 0 h +.6737 g 5950 3077 N -51 0 0 33 51 0 h +.669 g 5950 3110 N -51 0 0 34 51 0 h +.6643 g 5950 3144 N -51 0 0 33 51 0 h +.6597 g 5950 3177 N -51 0 0 34 51 0 h +.655 g 5950 3211 N -51 0 0 34 51 0 h +.6503 g 5950 3245 N -51 0 0 33 51 0 h +.6457 g 5950 3278 N -51 0 0 34 51 0 h +.641 g 5950 3312 N -51 0 0 33 51 0 h +.6363 g 5950 3345 N -51 0 0 34 51 0 h +.6317 g 5950 3379 N -51 0 0 33 51 0 h +.627 g 5950 3412 N -51 0 0 34 51 0 h +.6223 g 5950 3446 N -51 0 0 34 51 0 h +.6177 g 5950 3480 N -51 0 0 33 51 0 h +.613 g 5950 3513 N -51 0 0 34 51 0 h +.6083 g 5950 3547 N -51 0 0 33 51 0 h +.6037 g 5950 3580 N -51 0 0 34 51 0 h +.599 g 5950 3614 N -51 0 0 34 51 0 h +.5943 g 5950 3648 N -51 0 0 33 51 0 h +.5896 g 5950 3681 N -51 0 0 34 51 0 h +.585 g 5950 3715 N -51 0 0 33 51 0 h +.5803 g 5950 3748 N -51 0 0 34 51 0 h +.5756 g 5950 3782 N -51 0 0 34 51 0 h +.571 g 5950 3816 N -51 0 0 33 51 0 h +.5663 g 5950 3849 N -51 0 0 34 51 0 h +.5616 g 5950 3883 N -51 0 0 33 51 0 h +.557 g 5950 3916 N -51 0 0 34 51 0 h +.5523 g 5950 3950 N -51 0 0 33 51 0 h +.5476 g 5950 3983 N -51 0 0 34 51 0 h +.543 g 5950 4017 N -51 0 0 34 51 0 h +.5383 g 5950 4051 N -51 0 0 33 51 0 h +.5336 g 5950 4084 N -51 0 0 34 51 0 h +.529 g 5950 4118 N -51 0 0 33 51 0 h +.5243 g 5950 4151 N -51 0 0 34 51 0 h +.5196 g 5950 4185 N -51 0 0 34 51 0 h +.515 g 5950 4219 N -51 0 0 33 51 0 h +.9824 g 6001 928 N -50 0 0 33 50 0 h +.9776 g 6001 961 N -50 0 0 34 50 0 h +.9728 g 6001 995 N -50 0 0 34 50 0 h +.968 g 6001 1029 N -50 0 0 33 50 0 h +.9632 g 6001 1062 N -50 0 0 34 50 0 h +.9583 g 6001 1096 N -50 0 0 33 50 0 h +.9535 g 6001 1129 N -50 0 0 34 50 0 h +.9487 g 6001 1163 N -50 0 0 34 50 0 h +.9439 g 6001 1197 N -50 0 0 33 50 0 h +.939 g 6001 1230 N -50 0 0 34 50 0 h +.9342 g 6001 1264 N -50 0 0 33 50 0 h +.9294 g 6001 1297 N -50 0 0 34 50 0 h +.9246 g 6001 1331 N -50 0 0 33 50 0 h +.9198 g 6001 1364 N -50 0 0 34 50 0 h +.9149 g 6001 1398 N -50 0 0 34 50 0 h +.9101 g 6001 1432 N -50 0 0 33 50 0 h +.9053 g 6001 1465 N -50 0 0 34 50 0 h +.9005 g 6001 1499 N -50 0 0 33 50 0 h +.8957 g 6001 1532 N -50 0 0 34 50 0 h +.8908 g 6001 1566 N -50 0 0 34 50 0 h +.886 g 6001 1600 N -50 0 0 33 50 0 h +.8812 g 6001 1633 N -50 0 0 34 50 0 h +.8764 g 6001 1667 N -50 0 0 33 50 0 h +.8716 g 6001 1700 N -50 0 0 34 50 0 h +.8667 g 6001 1734 N -50 0 0 34 50 0 h +.8619 g 6001 1768 N -50 0 0 33 50 0 h +.8571 g 6001 1801 N -50 0 0 34 50 0 h +.8523 g 6001 1835 N -50 0 0 33 50 0 h +.8475 g 6001 1868 N -50 0 0 34 50 0 h +.8426 g 6001 1902 N -50 0 0 33 50 0 h +.8378 g 6001 1935 N -50 0 0 34 50 0 h +.833 g 6001 1969 N -50 0 0 34 50 0 h +.8282 g 6001 2003 N -50 0 0 33 50 0 h +.8233 g 6001 2036 N -50 0 0 34 50 0 h +.8185 g 6001 2070 N -50 0 0 33 50 0 h +.8137 g 6001 2103 N -50 0 0 34 50 0 h +.8089 g 6001 2137 N -50 0 0 34 50 0 h +.8041 g 6001 2171 N -50 0 0 33 50 0 h +.7992 g 6001 2204 N -50 0 0 34 50 0 h +.7944 g 6001 2238 N -50 0 0 33 50 0 h +.7896 g 6001 2271 N -50 0 0 34 50 0 h +.7848 g 6001 2305 N -50 0 0 34 50 0 h +.78 g 6001 2339 N -50 0 0 33 50 0 h +.7751 g 6001 2372 N -50 0 0 34 50 0 h +.7703 g 6001 2406 N -50 0 0 33 50 0 h +.7655 g 6001 2439 N -50 0 0 34 50 0 h +.7607 g 6001 2473 N -50 0 0 34 50 0 h +.7559 g 6001 2507 N -50 0 0 33 50 0 h +.751 g 6001 2540 N -50 0 0 34 50 0 h +.7462 g 6001 2574 N -50 0 0 32 50 0 h +.7414 g 6001 2606 N -50 0 0 34 50 0 h +.7366 g 6001 2640 N -50 0 0 33 50 0 h +.7317 g 6001 2673 N -50 0 0 34 50 0 h +.7269 g 6001 2707 N -50 0 0 34 50 0 h +.7221 g 6001 2741 N -50 0 0 33 50 0 h +.7173 g 6001 2774 N -50 0 0 34 50 0 h +.7125 g 6001 2808 N -50 0 0 33 50 0 h +.7076 g 6001 2841 N -50 0 0 34 50 0 h +.7028 g 6001 2875 N -50 0 0 34 50 0 h +.698 g 6001 2909 N -50 0 0 33 50 0 h +.6932 g 6001 2942 N -50 0 0 34 50 0 h +.6884 g 6001 2976 N -50 0 0 33 50 0 h +.6835 g 6001 3009 N -50 0 0 34 50 0 h +.6787 g 6001 3043 N -50 0 0 34 50 0 h +.6739 g 6001 3077 N -50 0 0 33 50 0 h +.6691 g 6001 3110 N -50 0 0 34 50 0 h +.6643 g 6001 3144 N -50 0 0 33 50 0 h +.6594 g 6001 3177 N -50 0 0 34 50 0 h +.6546 g 6001 3211 N -50 0 0 34 50 0 h +.6498 g 6001 3245 N -50 0 0 33 50 0 h +.645 g 6001 3278 N -50 0 0 34 50 0 h +.6402 g 6001 3312 N -50 0 0 33 50 0 h +.6353 g 6001 3345 N -50 0 0 34 50 0 h +.6305 g 6001 3379 N -50 0 0 33 50 0 h +.6257 g 6001 3412 N -50 0 0 34 50 0 h +.6209 g 6001 3446 N -50 0 0 34 50 0 h +.616 g 6001 3480 N -50 0 0 33 50 0 h +.6112 g 6001 3513 N -50 0 0 34 50 0 h +.6064 g 6001 3547 N -50 0 0 33 50 0 h +.6016 g 6001 3580 N -50 0 0 34 50 0 h +.5968 g 6001 3614 N -50 0 0 34 50 0 h +.5919 g 6001 3648 N -50 0 0 33 50 0 h +.5871 g 6001 3681 N -50 0 0 34 50 0 h +.5823 g 6001 3715 N -50 0 0 33 50 0 h +.5775 g 6001 3748 N -50 0 0 34 50 0 h +.5727 g 6001 3782 N -50 0 0 34 50 0 h +.5678 g 6001 3816 N -50 0 0 33 50 0 h +.563 g 6001 3849 N -50 0 0 34 50 0 h +.5582 g 6001 3883 N -50 0 0 33 50 0 h +.5534 g 6001 3916 N -50 0 0 34 50 0 h +.5486 g 6001 3950 N -50 0 0 33 50 0 h +.5437 g 6001 3983 N -50 0 0 34 50 0 h +.5389 g 6001 4017 N -50 0 0 34 50 0 h +.5341 g 6001 4051 N -50 0 0 33 50 0 h +.5293 g 6001 4084 N -50 0 0 34 50 0 h +.5244 g 6001 4118 N -50 0 0 33 50 0 h +.5196 g 6001 4151 N -50 0 0 34 50 0 h +.5148 g 6001 4185 N -50 0 0 34 50 0 h +.51 g 6001 4219 N -50 0 0 33 50 0 h +.9925 g 6051 928 N -51 0 0 33 51 0 h +.9875 g 6051 961 N -51 0 0 34 51 0 h +.9825 g 6051 995 N -51 0 0 34 51 0 h +.9775 g 6051 1029 N -51 0 0 33 51 0 h +.9726 g 6051 1062 N -51 0 0 34 51 0 h +.9676 g 6051 1096 N -51 0 0 33 51 0 h +.9626 g 6051 1129 N -51 0 0 34 51 0 h +.9576 g 6051 1163 N -51 0 0 34 51 0 h +.9527 g 6051 1197 N -51 0 0 33 51 0 h +.9477 g 6051 1230 N -51 0 0 34 51 0 h +.9427 g 6051 1264 N -51 0 0 33 51 0 h +.9377 g 6051 1297 N -51 0 0 34 51 0 h +.9328 g 6051 1331 N -51 0 0 33 51 0 h +.9278 g 6051 1364 N -51 0 0 34 51 0 h +.9228 g 6051 1398 N -51 0 0 34 51 0 h +.9179 g 6051 1432 N -51 0 0 33 51 0 h +.9129 g 6051 1465 N -51 0 0 34 51 0 h +.9079 g 6051 1499 N -51 0 0 33 51 0 h +.9029 g 6051 1532 N -51 0 0 34 51 0 h +.898 g 6051 1566 N -51 0 0 34 51 0 h +.893 g 6051 1600 N -51 0 0 33 51 0 h +.888 g 6051 1633 N -51 0 0 34 51 0 h +.883 g 6051 1667 N -51 0 0 33 51 0 h +.8781 g 6051 1700 N -51 0 0 34 51 0 h +.8731 g 6051 1734 N -51 0 0 34 51 0 h +.8681 g 6051 1768 N -51 0 0 33 51 0 h +.8631 g 6051 1801 N -51 0 0 34 51 0 h +.8582 g 6051 1835 N -51 0 0 33 51 0 h +.8532 g 6051 1868 N -51 0 0 34 51 0 h +.8482 g 6051 1902 N -51 0 0 33 51 0 h +.8432 g 6051 1935 N -51 0 0 34 51 0 h +.8383 g 6051 1969 N -51 0 0 34 51 0 h +.8333 g 6051 2003 N -51 0 0 33 51 0 h +.8283 g 6051 2036 N -51 0 0 34 51 0 h +.8233 g 6051 2070 N -51 0 0 33 51 0 h +.8184 g 6051 2103 N -51 0 0 34 51 0 h +.8134 g 6051 2137 N -51 0 0 34 51 0 h +.8084 g 6051 2171 N -51 0 0 33 51 0 h +.8035 g 6051 2204 N -51 0 0 34 51 0 h +.7985 g 6051 2238 N -51 0 0 33 51 0 h +.7935 g 6051 2271 N -51 0 0 34 51 0 h +.7885 g 6051 2305 N -51 0 0 34 51 0 h +.7836 g 6051 2339 N -51 0 0 33 51 0 h +.7786 g 6051 2372 N -51 0 0 34 51 0 h +.7736 g 6051 2406 N -51 0 0 33 51 0 h +.7686 g 6051 2439 N -51 0 0 34 51 0 h +.7637 g 6051 2473 N -51 0 0 34 51 0 h +.7587 g 6051 2507 N -51 0 0 33 51 0 h +.7537 g 6051 2540 N -51 0 0 34 51 0 h +.7487 g 6051 2574 N -51 0 0 32 51 0 h +.7438 g 6051 2606 N -51 0 0 34 51 0 h +.7388 g 6051 2640 N -51 0 0 33 51 0 h +.7338 g 6051 2673 N -51 0 0 34 51 0 h +.7288 g 6051 2707 N -51 0 0 34 51 0 h +.7239 g 6051 2741 N -51 0 0 33 51 0 h +.7189 g 6051 2774 N -51 0 0 34 51 0 h +.7139 g 6051 2808 N -51 0 0 33 51 0 h +.7089 g 6051 2841 N -51 0 0 34 51 0 h +.704 g 6051 2875 N -51 0 0 34 51 0 h +.699 g 6051 2909 N -51 0 0 33 51 0 h +.694 g 6051 2942 N -51 0 0 34 51 0 h +.689 g 6051 2976 N -51 0 0 33 51 0 h +.6841 g 6051 3009 N -51 0 0 34 51 0 h +.6791 g 6051 3043 N -51 0 0 34 51 0 h +.6741 g 6051 3077 N -51 0 0 33 51 0 h +.6692 g 6051 3110 N -51 0 0 34 51 0 h +.6642 g 6051 3144 N -51 0 0 33 51 0 h +.6592 g 6051 3177 N -51 0 0 34 51 0 h +.6542 g 6051 3211 N -51 0 0 34 51 0 h +.6493 g 6051 3245 N -51 0 0 33 51 0 h +.6443 g 6051 3278 N -51 0 0 34 51 0 h +.6393 g 6051 3312 N -51 0 0 33 51 0 h +.6343 g 6051 3345 N -51 0 0 34 51 0 h +.6294 g 6051 3379 N -51 0 0 33 51 0 h +.6244 g 6051 3412 N -51 0 0 34 51 0 h +.6194 g 6051 3446 N -51 0 0 34 51 0 h +.6144 g 6051 3480 N -51 0 0 33 51 0 h +.6095 g 6051 3513 N -51 0 0 34 51 0 h +.6045 g 6051 3547 N -51 0 0 33 51 0 h +.5995 g 6051 3580 N -51 0 0 34 51 0 h +.5945 g 6051 3614 N -51 0 0 34 51 0 h +.5896 g 6051 3648 N -51 0 0 33 51 0 h +.5846 g 6051 3681 N -51 0 0 34 51 0 h +.5796 g 6051 3715 N -51 0 0 33 51 0 h +.5746 g 6051 3748 N -51 0 0 34 51 0 h +.5697 g 6051 3782 N -51 0 0 34 51 0 h +.5647 g 6051 3816 N -51 0 0 33 51 0 h +.5597 g 6051 3849 N -51 0 0 34 51 0 h +.5548 g 6051 3883 N -51 0 0 33 51 0 h +.5498 g 6051 3916 N -51 0 0 34 51 0 h +.5448 g 6051 3950 N -51 0 0 33 51 0 h +.5398 g 6051 3983 N -51 0 0 34 51 0 h +.5349 g 6051 4017 N -51 0 0 34 51 0 h +.5299 g 6051 4051 N -51 0 0 33 51 0 h +.5249 g 6051 4084 N -51 0 0 34 51 0 h +.5199 g 6051 4118 N -51 0 0 33 51 0 h +.515 g 6051 4151 N -51 0 0 34 51 0 h +.51 g 6051 4185 N -51 0 0 34 51 0 h +.505 g 6051 4219 N -51 0 0 33 51 0 h +%pm3d_map_end +% End plot #1 +1.000 UL +LTb +LCb setrgbcolor +1098 4252 N +0 -3324 V +5004 0 V +0 3324 V +-5004 0 V +Z stroke +1.000 UL +LTb +LCb setrgbcolor +1098 928 M +0 82 V +stroke +LTb +LCb setrgbcolor +1098 746 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +1098 4252 M +0 -82 V +stroke +LTb +LCb setrgbcolor +2099 928 M +0 82 V +stroke +LTb +LCb setrgbcolor +2099 746 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.2)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +2099 4252 M +0 -82 V +stroke +LTb +LCb setrgbcolor +3100 928 M +0 82 V +stroke +LTb +LCb setrgbcolor +3100 746 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.4)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +3100 4252 M +0 -82 V +stroke +LTb +LCb setrgbcolor +4100 928 M +0 82 V +stroke +LTb +LCb setrgbcolor +4100 746 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.6)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +4100 4252 M +0 -82 V +stroke +LTb +LCb setrgbcolor +5101 928 M +0 82 V +stroke +LTb +LCb setrgbcolor +5101 746 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.8)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +5101 4252 M +0 -82 V +stroke +LTb +LCb setrgbcolor +6102 928 M +0 82 V +stroke +LTb +LCb setrgbcolor +6102 746 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +6102 4252 M +0 -82 V +stroke +LCb setrgbcolor +3600 536 M +[ [(Helvetica) 140.0 0.0 true true 0 (x)] +] -46.7 MCshow +LTb +1.000 UL +LTb +LCb setrgbcolor +1098 928 M +82 0 V +stroke +989 928 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +6102 928 M +-82 0 V +stroke +LTb +LCb setrgbcolor +1098 1593 M +82 0 V +stroke +989 1593 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.2)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +6102 1593 M +-82 0 V +stroke +LTb +LCb setrgbcolor +1098 2258 M +82 0 V +stroke +989 2258 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.4)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +6102 2258 M +-82 0 V +stroke +LTb +LCb setrgbcolor +1098 2922 M +82 0 V +stroke +989 2922 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.6)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +6102 2922 M +-82 0 V +stroke +LTb +LCb setrgbcolor +1098 3587 M +82 0 V +stroke +989 3587 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.8)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +6102 3587 M +-82 0 V +stroke +LTb +LCb setrgbcolor +1098 4252 M +82 0 V +stroke +989 4252 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +6102 4252 M +-82 0 V +stroke +LCb setrgbcolor +611 2590 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 140.0 0.0 true true 0 (y)] +] -46.7 MCshow +grestore +LTb +1.000 UL +LTb +LCb setrgbcolor +1098 4252 N +0 -3324 V +5004 0 V +0 3324 V +-5004 0 V +Z stroke +stroke gsave %% draw gray scale smooth box +maxcolors 0 gt {/imax maxcolors def} {/imax 1024 def} ifelse +6227 928 translate 250 3324 scale 0 setlinewidth +/ystep 1 imax div def /y0 0 def /ii 0 def +{ y0 g 0 y0 N 1 0 V 0 ystep V -1 0 f +/y0 y0 ystep add def /ii ii 1 add def +ii imax ge {exit} if } loop +grestore 0 setgray +1.000 UL +LTb +LCb setrgbcolor +6227 928 N +250 0 V +0 3324 V +-250 0 V +0 -3324 V +Z stroke +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +6477 928 M +-63 0 V +stroke +6561 928 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6227 928 M +63 0 V +187 664 R +-63 0 V +stroke +6561 1592 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.2)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6227 1592 M +63 0 V +187 665 R +-63 0 V +stroke +6561 2257 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.4)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6227 2257 M +63 0 V +187 665 R +-63 0 V +stroke +6561 2922 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.6)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6227 2922 M +63 0 V +187 665 R +-63 0 V +stroke +6561 3587 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.8)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6227 3587 M +63 0 V +187 665 R +-63 0 V +stroke +6561 4252 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6227 4252 M +63 0 V +1.000 UP +stroke +1.00 1.00 1.00 C 1148 1094 M +[ [(Helvetica) 140.0 0.0 true true 0 (z = 0)] +] -46.7 MLshow +1.00 1.00 1.00 C 1148 4086 M +[ [(Helvetica) 140.0 0.0 true true 0 (z = 1)] +] -46.7 MLshow +1.00 1.00 1.00 C 6052 1094 M +[ [(Helvetica) 140.0 0.0 true true 0 (z = 1)] +] -46.7 MRshow +1.00 1.00 1.00 C 6052 4086 M +[ [(Helvetica) 140.0 0.0 true true 0 (z = 0.5)] +] -46.7 MRshow +grestore % colour palette end +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica diff -Nru gsl-doc-1.16/doc/interp_compare.eps gsl-doc-2.3/doc/interp_compare.eps --- gsl-doc-1.16/doc/interp_compare.eps 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/interp_compare.eps 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,1040 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: interp_compare.eps +%%Creator: gnuplot 4.6 patchlevel 5 +%%CreationDate: Mon Mar 31 16:17:38 2014 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 410 302 +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color true def +/Blacktext false def +/Solid true def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -46 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 410 50 lineto 410 302 lineto 50 302 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.6 (September 2012) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse + clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title (interp_compare.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 5) + /Author (palken) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Mon Mar 31 16:17:38 2014) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.050 0.050 scale +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 7200.00 5040.00 BoxColFill} if +1.000 UL +LTb +LCb setrgbcolor +546 280 M +63 0 V +6338 0 R +-63 0 V +stroke +462 280 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +546 1045 M +63 0 V +6338 0 R +-63 0 V +stroke +462 1045 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.2)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +546 1810 M +63 0 V +6338 0 R +-63 0 V +stroke +462 1810 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.4)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +546 2576 M +63 0 V +6338 0 R +-63 0 V +stroke +462 2576 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.6)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +546 3341 M +63 0 V +6338 0 R +-63 0 V +stroke +462 3341 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.8)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +546 4106 M +63 0 V +6338 0 R +-63 0 V +stroke +462 4106 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +546 4871 M +63 0 V +6338 0 R +-63 0 V +stroke +462 4871 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1.2)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +546 280 M +0 63 V +0 4528 R +0 -63 V +stroke +546 140 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 6)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1460 280 M +0 63 V +0 4528 R +0 -63 V +stroke +1460 140 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 8)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +2375 280 M +0 63 V +0 4528 R +0 -63 V +stroke +2375 140 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 10)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +3289 280 M +0 63 V +0 4528 R +0 -63 V +stroke +3289 140 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 12)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +4204 280 M +0 63 V +0 4528 R +0 -63 V +stroke +4204 140 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 14)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +5118 280 M +0 63 V +0 4528 R +0 -63 V +stroke +5118 140 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 16)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +6033 280 M +0 63 V +0 4528 R +0 -63 V +stroke +6033 140 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 18)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +6947 280 M +0 63 V +0 4528 R +0 -63 V +stroke +6947 140 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 20)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +546 4871 N +546 280 L +6401 0 V +0 4591 V +-6401 0 V +Z stroke +1.000 UP +1.000 UL +LTb +LCb setrgbcolor +% Begin plot #1 +1.500 UP +1.000 UL +LTb +LCb setrgbcolor +LCb setrgbcolor +6296 833 M +[ [(Helvetica) 140.0 0.0 true true 0 (Data)] +] -46.7 MRshow +LTb +1456 280 TriUF +1502 280 TriUF +1547 447 TriUF +1780 927 TriUF +2009 2076 TriUF +2375 3891 TriUF +3289 4101 TriUF +4661 4106 TriUF +6947 4106 TriUF +6579 833 TriUF +% End plot #1 +% Begin plot #2 +4.000 UL +LT0 +LC0 setrgbcolor +LCb setrgbcolor +6296 693 M +[ [(Helvetica) 140.0 0.0 true true 0 (Cubic)] +] -46.7 MRshow +LT0 +6380 693 M +399 0 V +1456 280 M +55 23 V +55 212 V +55 139 V +55 84 V +54 79 V +55 124 V +55 204 V +55 269 V +55 310 V +55 327 V +55 325 V +55 312 V +55 298 V +55 277 V +55 254 V +54 227 V +55 195 V +55 161 V +55 130 V +55 101 V +55 74 V +55 50 V +55 29 V +55 9 V +55 -7 V +55 -22 V +54 -34 V +55 -42 V +55 -50 V +55 -54 V +55 -56 V +55 -56 V +55 -52 V +55 -48 V +55 -41 V +55 -35 V +55 -29 V +54 -25 V +55 -19 V +55 -15 V +55 -10 V +55 -6 V +55 -2 V +55 1 V +55 4 V +55 7 V +55 10 V +55 12 V +55 13 V +54 16 V +55 17 V +55 18 V +55 18 V +55 19 V +55 19 V +55 19 V +55 19 V +55 17 V +55 17 V +55 15 V +54 15 V +55 13 V +55 12 V +55 11 V +55 9 V +55 9 V +55 8 V +55 7 V +55 6 V +55 5 V +55 5 V +54 3 V +55 3 V +55 1 V +55 1 V +55 1 V +55 -1 V +55 -1 V +55 -1 V +55 -3 V +55 -2 V +55 -4 V +55 -4 V +54 -4 V +55 -5 V +55 -5 V +55 -6 V +55 -6 V +55 -7 V +55 -6 V +55 -7 V +55 -8 V +55 -7 V +55 -8 V +54 -8 V +55 -8 V +55 -8 V +55 -8 V +55 -9 V +55 -8 V +% End plot #2 +% Begin plot #3 +stroke +LT1 +LC1 setrgbcolor +LCb setrgbcolor +6296 553 M +[ [(Helvetica) 140.0 0.0 true true 0 (Akima)] +] -46.7 MRshow +LT1 +6380 553 M +399 0 V +1456 280 M +55 29 V +55 184 V +55 85 V +55 61 V +54 103 V +55 209 V +55 273 V +55 277 V +55 278 V +55 276 V +55 281 V +55 289 V +55 291 V +55 285 V +55 271 V +54 251 V +55 223 V +55 180 V +55 139 V +55 101 V +55 67 V +55 37 V +55 12 V +55 -9 V +55 -27 V +55 -40 V +54 -49 V +55 -55 V +55 -54 V +55 -52 V +55 -44 V +55 -33 V +55 -17 V +55 -1 V +55 0 V +55 0 V +55 0 V +54 1 V +55 0 V +55 0 V +55 0 V +55 1 V +55 0 V +55 0 V +55 0 V +55 1 V +55 0 V +55 0 V +55 0 V +54 1 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 1 V +55 0 V +55 0 V +54 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +54 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +54 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +54 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +% End plot #3 +% Begin plot #4 +stroke +LT2 +LC2 setrgbcolor +LCb setrgbcolor +6296 413 M +[ [(Helvetica) 140.0 0.0 true true 0 (Steffen)] +] -46.7 MRshow +LT2 +6380 413 M +399 0 V +1456 280 M +55 13 V +55 211 V +55 117 V +55 77 V +54 91 V +55 156 V +55 235 V +55 282 V +55 302 V +55 291 V +55 302 V +55 343 V +55 353 V +55 328 V +55 272 V +54 181 V +55 63 V +55 24 V +55 23 V +55 21 V +55 19 V +55 18 V +55 16 V +55 15 V +55 14 V +55 11 V +54 11 V +55 9 V +55 7 V +55 6 V +55 5 V +55 3 V +55 1 V +55 1 V +55 0 V +55 1 V +55 0 V +54 0 V +55 1 V +55 0 V +55 0 V +55 0 V +55 1 V +55 0 V +55 0 V +55 0 V +55 0 V +55 1 V +55 0 V +54 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 1 V +55 0 V +55 0 V +54 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +54 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +54 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +54 0 V +55 0 V +55 0 V +55 0 V +55 0 V +55 0 V +% End plot #4 +stroke +1.000 UL +LTb +LCb setrgbcolor +546 4871 N +546 280 L +6401 0 V +0 4591 V +-6401 0 V +Z stroke +1.000 UP +1.000 UL +LTb +LCb setrgbcolor +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica diff -Nru gsl-doc-1.16/doc/interp.texi gsl-doc-2.3/doc/interp.texi --- gsl-doc-1.16/doc/interp.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/interp.texi 2016-07-02 23:02:41.000000000 +0000 @@ -2,12 +2,13 @@ @cindex spline This chapter describes functions for performing interpolation. The -library provides a variety of interpolation methods, including Cubic -splines and Akima splines. The interpolation types are interchangeable, +library provides a variety of interpolation methods, including Cubic, +Akima, and Steffen splines. The interpolation types are interchangeable, allowing different methods to be used without recompiling. Interpolations can be defined for both normal and periodic boundary conditions. Additional functions are available for computing -derivatives and integrals of interpolating functions. +derivatives and integrals of interpolating functions. Routines +are provided for interpolating both one and two dimensional datasets. These interpolation methods produce curves that pass through each datapoint. To interpolate noisy data with a smoothing curve see @@ -17,18 +18,25 @@ @file{gsl_interp.h} and @file{gsl_spline.h}. @menu -* Introduction to Interpolation:: -* Interpolation Functions:: -* Interpolation Types:: -* Index Look-up and Acceleration:: -* Evaluation of Interpolating Functions:: -* Higher-level Interface:: -* Interpolation Example programs:: -* Interpolation References and Further Reading:: +* 1D Introduction to Interpolation:: +* 1D Interpolation Functions:: +* 1D Interpolation Types:: +* 1D Index Look-up and Acceleration:: +* 1D Evaluation of Interpolating Functions:: +* 1D Higher-level Interface:: +* 1D Interpolation Example programs:: +* 1D Interpolation References and Further Reading:: +* 2D Introduction to Interpolation:: +* 2D Interpolation Functions:: +* 2D Interpolation Grids:: +* 2D Interpolation Types:: +* 2D Evaluation of Interpolating Functions:: +* 2D Higher-level Interface:: +* 2D Interpolation Example programs:: @end menu -@node Introduction to Interpolation -@section Introduction +@node 1D Introduction to Interpolation +@section Introduction to 1D Interpolation Given a set of data points @math{(x_1, y_1) \dots (x_n, y_n)} the routines described in this section compute a continuous interpolating @@ -36,14 +44,14 @@ is piecewise smooth, and its behavior at the end-points is determined by the type of interpolation used. -@node Interpolation Functions -@section Interpolation Functions +@node 1D Interpolation Functions +@section 1D Interpolation Functions The interpolation function for a given dataset is stored in a @code{gsl_interp} object. These are created by the following functions. @deftypefun {gsl_interp *} gsl_interp_alloc (const gsl_interp_type * @var{T}, size_t @var{size}) -@tpindex gsl_interp +@tindex gsl_interp This function returns a pointer to a newly allocated interpolation object of type @var{T} for @var{size} data-points. @end deftypefun @@ -62,10 +70,10 @@ This function frees the interpolation object @var{interp}. @end deftypefun -@node Interpolation Types -@section Interpolation Types -@tpindex gsl_interp_type -The interpolation library provides six interpolation types: +@node 1D Interpolation Types +@section 1D Interpolation Types +@tindex gsl_interp_type +The interpolation library provides the following interpolation types: @deffn {Interpolation Type} gsl_interp_linear @cindex linear interpolation @@ -112,6 +120,17 @@ uses the non-rounded corner algorithm of Wodicka. @end deffn +@deffn {Interpolation Type} gsl_interp_steffen +Steffen's method guarantees the monotonicity of the interpolating function +between the given data points. Therefore, minima and maxima can only occur +exactly at the data points, and there can never be spurious oscillations +between data points. The interpolated function is piecewise cubic +in each interval. The resulting curve and its first derivative +are guaranteed to be continuous, but the second derivative may be +discontinuous. +@end deffn + +@noindent The following related functions are available: @deftypefun {const char *} gsl_interp_name (const gsl_interp * @var{interp}) @@ -140,8 +159,8 @@ -@node Index Look-up and Acceleration -@section Index Look-up and Acceleration +@node 1D Index Look-up and Acceleration +@section 1D Index Look-up and Acceleration The state of searches can be stored in a @code{gsl_interp_accel} object, which is a kind of iterator for interpolation lookups. It caches the @@ -156,7 +175,7 @@ @end deftypefun @deftypefun {gsl_interp_accel *} gsl_interp_accel_alloc (void) -@tpindex gsl_interp_accel +@tindex gsl_interp_accel This function returns a pointer to an accelerator object, which is a kind of iterator for interpolation lookups. It tracks the state of lookups, thus allowing for application of various acceleration @@ -181,8 +200,8 @@ This function frees the accelerator object @var{acc}. @end deftypefun -@node Evaluation of Interpolating Functions -@section Evaluation of Interpolating Functions +@node 1D Evaluation of Interpolating Functions +@section 1D Evaluation of Interpolating Functions @deftypefun double gsl_interp_eval (const gsl_interp * @var{interp}, const double @var{xa}[], const double @var{ya}[], double @var{x}, gsl_interp_accel * @var{acc}) @deftypefunx int gsl_interp_eval_e (const gsl_interp * @var{interp}, const double @var{xa}[], const double @var{ya}[], double @var{x}, gsl_interp_accel * @var{acc}, double * @var{y}) @@ -218,8 +237,8 @@ the accelerator @var{acc}. @end deftypefun -@node Higher-level Interface -@section Higher-level Interface +@node 1D Higher-level Interface +@section 1D Higher-level Interface The functions described in the previous sections required the user to supply pointers to the @math{x} and @math{y} arrays on each call. The @@ -230,7 +249,7 @@ defined in the header file @file{gsl_spline.h}. @deftypefun {gsl_spline *} gsl_spline_alloc (const gsl_interp_type * @var{T}, size_t @var{size}) -@tpindex gsl_spline +@tindex gsl_spline @end deftypefun @deftypefun int gsl_spline_init (gsl_spline * @var{spline}, const double @var{xa}[], const double @var{ya}[], size_t @var{size}) @@ -261,8 +280,8 @@ @deftypefunx int gsl_spline_eval_integ_e (const gsl_spline * @var{spline}, double @var{a}, double @var{b}, gsl_interp_accel * @var{acc}, double * @var{result}) @end deftypefun -@node Interpolation Example programs -@section Examples +@node 1D Interpolation Example programs +@section Examples of 1D Interpolation The following program demonstrates the use of the interpolation and spline functions. It computes a cubic spline interpolation of the @@ -319,20 +338,316 @@ slope of the fitted curve is the same at the beginning and end of the data, and the second derivative is also. -@node Interpolation References and Further Reading +The next program illustrates the difference between the cubic spline, +Akima, and Steffen interpolation types on a difficult dataset. + +@example +@verbatiminclude examples/interp_compare.c +@end example + +@iftex +@sp 1 +@center @image{interp_compare,6in} +@end iftex + +@noindent +The cubic method exhibits a local maxima between the 6th and 7th data points +and continues oscillating for the rest of the data. Akima also shows a +local maxima but recovers and follows the data well after the 7th grid point. +Steffen preserves monotonicity in all intervals and does not exhibit oscillations, +at the expense of having a discontinuous second derivative. + +@node 1D Interpolation References and Further Reading @section References and Further Reading Descriptions of the interpolation algorithms and further references can -be found in the following books: +be found in the following publications: @itemize @w{} @item C.W. Ueberhuber, @cite{Numerical Computation (Volume 1), Chapter 9 ``Interpolation''}, Springer (1997), ISBN 3-540-62058-3. -@item D.M. Young, R.T. Gregory +@item D.M. Young, R.T. Gregory, @cite{A Survey of Numerical Mathematics (Volume 1), Chapter 6.8}, Dover (1988), ISBN 0-486-65691-8. + +@item M. Steffen, +@cite{A simple method for monotonic interpolation in one dimension}, +Astron. Astrophys. 239, 443-450, 1990. @end itemize +@node 2D Introduction to Interpolation +@section Introduction to 2D Interpolation + +Given a set of @math{x} coordinates @math{x_1,...,x_m} and a set of +@math{y} coordinates @math{y_1,...,y_n}, each in increasing order, +plus a set of function values @math{z_{ij}} +for each grid point @math{(x_i,y_j)}, the routines described in this +section compute a continuous interpolation function @math{z(x,y)} such +that @math{z(x_i,y_j) = z_{ij}}. + +@node 2D Interpolation Functions +@section 2D Interpolation Functions + +The interpolation function for a given dataset is stored in a +@code{gsl_interp2d} object. These are created by the following functions. + +@deftypefun {gsl_interp2d *} gsl_interp2d_alloc (const gsl_interp2d_type * @var{T}, const size_t @var{xsize}, const size_t @var{ysize}) +@tindex gsl_interp +This function returns a pointer to a newly allocated interpolation +object of type @var{T} for @var{xsize} grid points in the @math{x} +direction and @var{ysize} grid points in the @math{y} direction. +@end deftypefun + +@deftypefun int gsl_interp2d_init (gsl_interp2d * @var{interp}, const double @var{xa}[], const double @var{ya}[], const double @var{za}[], const size_t @var{xsize}, const size_t @var{ysize}) +This function initializes the interpolation object @var{interp} for the +data (@var{xa},@var{ya},@var{za}) where @var{xa} and @var{ya} are arrays of +the @math{x} and @math{y} grid points of size @var{xsize} and @var{ysize} +respectively, and @var{za} is an array of function values of size +@var{xsize}*@var{ysize}. The interpolation object (@code{gsl_interp2d}) does +not save the data arrays @var{xa}, @var{ya}, and @var{za} and only stores the +static state computed from the data. The @var{xa} and @var{ya} data arrays +are always assumed to be strictly ordered, with increasing @math{x,y} values; +the behavior for other arrangements is not defined. +@end deftypefun + +@deftypefun void gsl_interp2d_free (gsl_interp2d * @var{interp}) +This function frees the interpolation object @var{interp}. +@end deftypefun + +@node 2D Interpolation Grids +@section 2D Interpolation Grids + +The 2D interpolation routines access the function values @math{z_{ij}} +with the following ordering: +@tex +\beforedisplay +$$ +z_{ij} = za[j*xsize + i] +$$ +\afterdisplay +@end tex +@ifinfo + +@example +z_ij = za[j*xsize + i] +@end example + +@end ifinfo +with @math{i = 0,...,xsize-1} and @math{j = 0,...,ysize-1}. However, +for ease of use, the following functions are provided to add and retrieve +elements from the function grid without requiring knowledge of the +internal ordering. + +@deftypefun int gsl_interp2d_set (const gsl_interp2d * @var{interp}, double @var{za}[], const size_t @var{i}, const size_t @var{j}, const double @var{z}) +This function sets the value @math{z_{ij}} for grid point +(@var{i},@var{j}) of the array @var{za} to @var{z}. +@end deftypefun + +@deftypefun double gsl_interp2d_get (const gsl_interp2d * @var{interp}, const double @var{za}[], const size_t @var{i}, const size_t @var{j}) +This function returns the value @math{z_{ij}} for grid point +(@var{i},@var{j}) stored in the array @var{za}. +@end deftypefun + +@deftypefun size_t gsl_interp2d_idx (const gsl_interp2d * @var{interp}, const size_t @var{i}, const size_t @var{j}) +This function returns the index corresponding to the grid point +(@var{i},@var{j}). The index is given by @math{j*xsize + i}. +@end deftypefun + +@node 2D Interpolation Types +@section 2D Interpolation Types +@tindex gsl_interp2d_type +The interpolation library provides the following 2D interpolation types: + +@deffn {Interpolation Type} gsl_interp2d_bilinear +@cindex bilinear interpolation +Bilinear interpolation. This interpolation method does not require any +additional memory. +@end deffn + +@deffn {Interpolation Type} gsl_interp2d_bicubic +@cindex bicubic interpolation +Bicubic interpolation. +@end deffn + +@deftypefun {const char *} gsl_interp2d_name (const gsl_interp2d * @var{interp}) +This function returns the name of the interpolation type used by @var{interp}. +For example, + +@example +printf ("interp uses '%s' interpolation.\n", + gsl_interp2d_name (interp)); +@end example + @noindent +would print something like, + +@example +interp uses 'bilinear' interpolation. +@end example +@end deftypefun + +@deftypefun {unsigned int} gsl_interp2d_min_size (const gsl_interp2d * @var{interp}) +@deftypefunx {unsigned int} gsl_interp2d_type_min_size (const gsl_interp2d_type * @var{T}) +These functions return the minimum number of points required by the +interpolation object @var{interp} or interpolation type @var{T}. For +example, bicubic interpolation requires a minimum of 4 points. +@end deftypefun + +@node 2D Evaluation of Interpolating Functions +@section 2D Evaluation of Interpolating Functions + +@deftypefun double gsl_interp2d_eval (const gsl_interp2d * @var{interp}, const double @var{xa}[], const double @var{ya}[], const double @var{za}[], const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}) +@deftypefunx int gsl_interp2d_eval_e (const gsl_interp2d * @var{interp}, const double @var{xa}[], const double @var{ya}[], const double @var{za}[], const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}, double * @var{z}) +These functions return the interpolated value of @var{z} for a given +point (@var{x},@var{y}), using the interpolation object @var{interp}, data +arrays @var{xa}, @var{ya}, and @var{za} and the accelerators @var{xacc} +and @var{yacc}. When @var{x} is outside the range of @var{xa} or @var{y} +is outside the range of @var{ya}, the error code +@code{GSL_EDOM} is returned. +@end deftypefun + +@deftypefun double gsl_interp2d_eval_extrap (const gsl_interp2d * @var{interp}, const double @var{xa}[], const double @var{ya}[], const double @var{za}[], const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}) +@deftypefunx int gsl_interp2d_eval_extrap_e (const gsl_interp2d * @var{interp}, const double @var{xa}[], const double @var{ya}[], const double @var{za}[], const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}, double * @var{z}) +These functions return the interpolated value of @var{z} for a given +point (@var{x},@var{y}), using the interpolation object @var{interp}, data +arrays @var{xa}, @var{ya}, and @var{za} and the accelerators @var{xacc} +and @var{yacc}. The functions perform no bounds checking, so +when @var{x} is outside the range of @var{xa} or @var{y} +is outside the range of @var{ya}, extrapolation is performed. +@end deftypefun + +@deftypefun double gsl_interp2d_eval_deriv_x (const gsl_interp2d * @var{interp}, const double @var{xa}[], const double @var{ya}[], const double @var{za}[], const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}) +@deftypefunx int gsl_interp2d_eval_deriv_x_e (const gsl_interp2d * @var{interp}, const double @var{xa}[], const double @var{ya}[], const double @var{za}[], const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}, double * @var{d}) +These functions return the interpolated value @var{d} +@math{= \partial z / \partial x} for a given point (@var{x},@var{y}), +using the interpolation object @var{interp}, data +arrays @var{xa}, @var{ya}, and @var{za} and the accelerators @var{xacc} +and @var{yacc}. When @var{x} is outside the range of @var{xa} or @var{y} +is outside the range of @var{ya}, the error code +@code{GSL_EDOM} is returned. +@end deftypefun + +@deftypefun double gsl_interp2d_eval_deriv_y (const gsl_interp2d * @var{interp}, const double @var{xa}[], const double @var{ya}[], const double @var{za}[], const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}) +@deftypefunx int gsl_interp2d_eval_deriv_y_e (const gsl_interp2d * @var{interp}, const double @var{xa}[], const double @var{ya}[], const double @var{za}[], const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}, double * @var{d}) +These functions return the interpolated value @var{d} +@math{= \partial z / \partial y} for a given point (@var{x},@var{y}), +using the interpolation object @var{interp}, data +arrays @var{xa}, @var{ya}, and @var{za} and the accelerators @var{xacc} +and @var{yacc}. When @var{x} is outside the range of @var{xa} or @var{y} +is outside the range of @var{ya}, the error code +@code{GSL_EDOM} is returned. +@end deftypefun + +@deftypefun double gsl_interp2d_eval_deriv_xx (const gsl_interp2d * @var{interp}, const double @var{xa}[], const double @var{ya}[], const double @var{za}[], const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}) +@deftypefunx int gsl_interp2d_eval_deriv_xx_e (const gsl_interp2d * @var{interp}, const double @var{xa}[], const double @var{ya}[], const double @var{za}[], const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}, double * @var{d}) +These functions return the interpolated value @var{d} +@math{= \partial^2 z / \partial x^2} for a given point (@var{x},@var{y}), +using the interpolation object @var{interp}, data +arrays @var{xa}, @var{ya}, and @var{za} and the accelerators @var{xacc} +and @var{yacc}. When @var{x} is outside the range of @var{xa} or @var{y} +is outside the range of @var{ya}, the error code +@code{GSL_EDOM} is returned. +@end deftypefun + +@deftypefun double gsl_interp2d_eval_deriv_yy (const gsl_interp2d * @var{interp}, const double @var{xa}[], const double @var{ya}[], const double @var{za}[], const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}) +@deftypefunx int gsl_interp2d_eval_deriv_yy_e (const gsl_interp2d * @var{interp}, const double @var{xa}[], const double @var{ya}[], const double @var{za}[], const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}, double * @var{d}) +These functions return the interpolated value @var{d} +@math{= \partial^2 z / \partial y^2} for a given point (@var{x},@var{y}), +using the interpolation object @var{interp}, data +arrays @var{xa}, @var{ya}, and @var{za} and the accelerators @var{xacc} +and @var{yacc}. When @var{x} is outside the range of @var{xa} or @var{y} +is outside the range of @var{ya}, the error code +@code{GSL_EDOM} is returned. +@end deftypefun + +@deftypefun double gsl_interp2d_eval_deriv_xy (const gsl_interp2d * @var{interp}, const double @var{xa}[], const double @var{ya}[], const double @var{za}[], const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}) +@deftypefunx int gsl_interp2d_eval_deriv_xy_e (const gsl_interp2d * @var{interp}, const double @var{xa}[], const double @var{ya}[], const double @var{za}[], const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}, double * @var{d}) +These functions return the interpolated value @var{d} +@math{= \partial^2 z / \partial x \partial y} for a given point (@var{x},@var{y}), +using the interpolation object @var{interp}, data +arrays @var{xa}, @var{ya}, and @var{za} and the accelerators @var{xacc} +and @var{yacc}. When @var{x} is outside the range of @var{xa} or @var{y} +is outside the range of @var{ya}, the error code +@code{GSL_EDOM} is returned. +@end deftypefun + +@node 2D Higher-level Interface +@section 2D Higher-level Interface + +The functions described in the previous sections required the user to +supply pointers to the @math{x}, @math{y}, and @math{z} arrays on each call. +The following functions are equivalent to the corresponding +@code{gsl_interp2d} functions but maintain a copy of this data in the +@code{gsl_spline2d} object. This removes the need to pass @var{xa}, +@var{ya}, and @var{za} as arguments on each evaluation. These functions are +defined in the header file @file{gsl_spline2d.h}. + +@deftypefun {gsl_spline2d *} gsl_spline2d_alloc (const gsl_interp2d_type * @var{T}, size_t @var{xsize}, size_t @var{ysize}) +@tindex gsl_spline2d +@end deftypefun + +@deftypefun int gsl_spline2d_init (gsl_spline2d * @var{spline}, const double @var{xa}[], const double @var{ya}[], const double @var{za}[], size_t @var{xsize}, size_t @var{ysize}) +@end deftypefun + +@deftypefun void gsl_spline2d_free (gsl_spline2d * @var{spline}) +@end deftypefun + +@deftypefun {const char *} gsl_spline2d_name (const gsl_spline2d * @var{spline}) +@end deftypefun + +@deftypefun {unsigned int} gsl_spline2d_min_size (const gsl_spline2d * @var{spline}) +@end deftypefun + +@deftypefun double gsl_spline2d_eval (const gsl_spline2d * @var{spline}, const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}) +@deftypefunx int gsl_spline2d_eval_e (const gsl_spline2d * @var{spline}, const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}, double * @var{z}) +@end deftypefun + +@deftypefun double gsl_spline2d_eval_deriv_x (const gsl_spline2d * @var{spline}, const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}) +@deftypefunx int gsl_spline2d_eval_deriv_x_e (const gsl_spline2d * @var{spline}, const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}, double * @var{d}) +@end deftypefun + +@deftypefun double gsl_spline2d_eval_deriv_y (const gsl_spline2d * @var{spline}, const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}) +@deftypefunx int gsl_spline2d_eval_deriv_y_e (const gsl_spline2d * @var{spline}, const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}, double * @var{d}) +@end deftypefun + +@deftypefun double gsl_spline2d_eval_deriv_xx (const gsl_spline2d * @var{spline}, const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}) +@deftypefunx int gsl_spline2d_eval_deriv_xx_e (const gsl_spline2d * @var{spline}, const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}, double * @var{d}) +@end deftypefun + +@deftypefun double gsl_spline2d_eval_deriv_yy (const gsl_spline2d * @var{spline}, const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}) +@deftypefunx int gsl_spline2d_eval_deriv_yy_e (const gsl_spline2d * @var{spline}, const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}, double * @var{d}) +@end deftypefun + +@deftypefun double gsl_spline2d_eval_deriv_xy (const gsl_spline2d * @var{spline}, const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}) +@deftypefunx int gsl_spline2d_eval_deriv_xy_e (const gsl_spline2d * @var{spline}, const double @var{x}, const double @var{y}, gsl_interp_accel * @var{xacc}, gsl_interp_accel * @var{yacc}, double * @var{d}) +@end deftypefun + +@deftypefun int gsl_spline2d_set (const gsl_spline2d * @var{spline}, double @var{za}[], const size_t @var{i}, const size_t @var{j}, const double @var{z}) +@end deftypefun + +@deftypefun double gsl_spline2d_get (const gsl_spline2d * @var{spline}, const double @var{za}[], const size_t @var{i}, const size_t @var{j}) +This function returns the value @math{z_{ij}} for grid point +(@var{i},@var{j}) stored in the array @var{za}. +@end deftypefun + +@node 2D Interpolation Example programs +@section 2D Interpolation Example programs + +The following example performs bilinear interpolation on the unit +square, using @math{z} values of @math{(0,1,0.5,1)} going clockwise +around the square. + +@example +@verbatiminclude examples/interp2d.c +@end example + +@noindent +The results of the interpolation are shown in the following plot, +where the corners are labeled with their fixed @math{z} values. + +@iftex +@sp 1 +@center @image{interp2d,6in} +@end iftex diff -Nru gsl-doc-1.16/doc/linalg.texi gsl-doc-2.3/doc/linalg.texi --- gsl-doc-1.16/doc/linalg.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/linalg.texi 2016-11-29 21:55:39.000000000 +0000 @@ -16,17 +16,22 @@ @menu * LU Decomposition:: * QR Decomposition:: -* QR Decomposition with Column Pivoting:: +* QR Decomposition with Column Pivoting:: +* Complete Orthogonal Decomposition:: * Singular Value Decomposition:: * Cholesky Decomposition:: +* Pivoted Cholesky Decomposition:: +* Modified Cholesky Decomposition:: * Tridiagonal Decomposition of Real Symmetric Matrices:: * Tridiagonal Decomposition of Hermitian Matrices:: * Hessenberg Decomposition of Real Matrices:: * Hessenberg-Triangular Decomposition of Real Matrices:: * Bidiagonalization:: +* Givens Rotations:: * Householder Transformations:: * Householder solver for linear systems:: -* Tridiagonal Systems:: +* Tridiagonal Systems:: +* Triangular Systems:: * Balancing:: * Linear Algebra Examples:: * Linear Algebra References and Further Reading:: @@ -36,7 +41,7 @@ @section LU Decomposition @cindex LU decomposition -A general square matrix @math{A} has an @math{LU} decomposition into +A general @math{N}-by-@math{N} square matrix @math{A} has an @math{LU} decomposition into upper and lower triangular matrices, @tex \beforedisplay @@ -70,8 +75,9 @@ unity, and are not stored. The permutation matrix @math{P} is encoded in the permutation -@var{p}. The @math{j}-th column of the matrix @math{P} is given by the -@math{k}-th column of the identity matrix, where @math{k = p_j} the +@var{p} on output. The @math{j}-th column of the matrix @math{P} +is given by the @math{k}-th column of the identity matrix, where +@math{k = p_j} the @math{j}-th element of the permutation vector. The sign of the permutation is given by @var{signum}. It has the value @math{(-1)^n}, where @math{n} is the number of interchanges in the permutation. @@ -100,12 +106,11 @@ @cindex refinement of solutions in linear systems @cindex iterative refinement of solutions in linear systems @cindex linear systems, refinement of solutions -@deftypefun int gsl_linalg_LU_refine (const gsl_matrix * @var{A}, const gsl_matrix * @var{LU}, const gsl_permutation * @var{p}, const gsl_vector * @var{b}, gsl_vector * @var{x}, gsl_vector * @var{residual}) -@deftypefunx int gsl_linalg_complex_LU_refine (const gsl_matrix_complex * @var{A}, const gsl_matrix_complex * @var{LU}, const gsl_permutation * @var{p}, const gsl_vector_complex * @var{b}, gsl_vector_complex * @var{x}, gsl_vector_complex * @var{residual}) +@deftypefun int gsl_linalg_LU_refine (const gsl_matrix * @var{A}, const gsl_matrix * @var{LU}, const gsl_permutation * @var{p}, const gsl_vector * @var{b}, gsl_vector * @var{x}, gsl_vector * @var{work}) +@deftypefunx int gsl_linalg_complex_LU_refine (const gsl_matrix_complex * @var{A}, const gsl_matrix_complex * @var{LU}, const gsl_permutation * @var{p}, const gsl_vector_complex * @var{b}, gsl_vector_complex * @var{x}, gsl_vector_complex * @var{work}) These functions apply an iterative improvement to @var{x}, the solution of @math{A x = b}, from the precomputed @math{LU} decomposition of @math{A} into -(@var{LU},@var{p}). The initial residual @math{r = A x - b} is also -computed and stored in @var{residual}. +(@var{LU},@var{p}). Additional workspace of length @var{N} is required in @var{work}. @end deftypefun @cindex inverse of a matrix, by LU decomposition @@ -297,8 +302,8 @@ @section QR Decomposition with Column Pivoting @cindex QR decomposition with column pivoting -The @math{QR} decomposition can be extended to the rank deficient case -by introducing a column permutation @math{P}, +The @math{QR} decomposition of an @math{M}-by-@math{N} matrix @math{A} +can be extended to the rank deficient case by introducing a column permutation @math{P}, @tex \beforedisplay $$ @@ -320,7 +325,58 @@ b} into the triangular system @math{R y = Q^T b, x = P y}, which can be solved by back-substitution and permutation. We denote the @math{QR} decomposition with column pivoting by @math{QRP^T} since @math{A = Q R -P^T}. +P^T}. When @math{A} is rank deficient with @math{r = {\rm rank}(A)}, the matrix +@math{R} can be partitioned as +@tex +\beforedisplay +$$ +R = \left( +\matrix{ +R_{11} & R_{12} \cr +0 & R_{22} \cr +} +\right) \approx +\left( +\matrix{ +R_{11} & R_{12} \cr +0 & 0 \cr +} +\right) +$$ +\afterdisplay +@end tex +@ifinfo + +@example +R = [ R11 R12; 0 R22 ] =~ [ R11 R12; 0 0 ] +@end example + +@end ifinfo +where @math{R_{11}} is @math{r}-by-@math{r} and nonsingular. In this case, +a ``basic'' least squares solution for the overdetermined system @math{A x = b} +can be obtained as +@tex +\beforedisplay +$$ +x = P \left( +\matrix{ +R_{11}^{-1} c_1 \cr +0 \cr +} +\right) +$$ +\afterdisplay +@end tex +@ifinfo + +@example +x = P [ R11^-1 c1 ; 0 ] +@end example + +@end ifinfo +where @math{c_1} consists of the first @math{r} elements of @math{Q^T b}. +This basic solution is not guaranteed to be the minimum norm solution unless +@math{R_{12} = 0} (see @ref{Complete Orthogonal Decomposition}). @deftypefun int gsl_linalg_QRPT_decomp (gsl_matrix * @var{A}, gsl_vector * @var{tau}, gsl_permutation * @var{p}, int * @var{signum}, gsl_vector * @var{norm}) This function factorizes the @math{M}-by-@math{N} matrix @var{A} into @@ -364,6 +420,30 @@ right-hand side @math{b}, which is replaced by the solution on output. @end deftypefun +@deftypefun int gsl_linalg_QRPT_lssolve (const gsl_matrix * @var{QR}, const gsl_vector * @var{tau}, const gsl_permutation * @var{p}, const gsl_vector * @var{b}, gsl_vector * @var{x}, gsl_vector * @var{residual}) +This function finds the least squares solution to the overdetermined +system @math{A x = b} where the matrix @var{A} has more rows than +columns and is assumed to have full rank. The least squares solution minimizes +the Euclidean norm of the residual, @math{||b - A x||}. The routine requires as input +the @math{QR} decomposition of @math{A} into (@var{QR}, @var{tau}, @var{p}) given by +@code{gsl_linalg_QRPT_decomp}. The solution is returned in @var{x}. The +residual is computed as a by-product and stored in @var{residual}. For rank +deficient matrices, @code{gsl_linalg_QRPT_lssolve2} should be used instead. +@end deftypefun + +@deftypefun int gsl_linalg_QRPT_lssolve2 (const gsl_matrix * @var{QR}, const gsl_vector * @var{tau}, const gsl_permutation * @var{p}, const gsl_vector * @var{b}, const size_t @var{rank}, gsl_vector * @var{x}, gsl_vector * @var{residual}) +This function finds the least squares solution to the overdetermined +system @math{A x = b} where the matrix @var{A} has more rows than +columns and has rank given by the input @var{rank}. If the user does not +know the rank of @math{A}, the routine @code{gsl_linalg_QRPT_rank} can be +called to estimate it. The least squares solution is +the so-called ``basic'' solution discussed above and may not be the minimum +norm solution. The routine requires as input +the @math{QR} decomposition of @math{A} into (@var{QR}, @var{tau}, @var{p}) given by +@code{gsl_linalg_QRPT_decomp}. The solution is returned in @var{x}. The +residual is computed as a by-product and stored in @var{residual}. +@end deftypefun + @deftypefun int gsl_linalg_QRPT_QRsolve (const gsl_matrix * @var{Q}, const gsl_matrix * @var{R}, const gsl_permutation * @var{p}, const gsl_vector * @var{b}, gsl_vector * @var{x}) This function solves the square system @math{R P^T x = Q^T b} for @var{x}. It can be used when the @math{QR} decomposition of a matrix is @@ -390,6 +470,115 @@ replaced by the solution on output. @end deftypefun +@deftypefun size_t gsl_linalg_QRPT_rank (const gsl_matrix * @var{QR}, const double @var{tol}) +This function estimates the rank of the triangular matrix @math{R} contained in @var{QR}. +The algorithm simply counts the number of diagonal elements of @math{R} whose absolute value +is greater than the specified tolerance @var{tol}. If the input @var{tol} is negative, +a default value of @math{20 (M + N) eps(max(|diag(R)|))} is used. +@end deftypefun + +@deftypefun int gsl_linalg_QRPT_rcond (const gsl_matrix * @var{QR}, double * @var{rcond}, gsl_vector * @var{work}) +This function estimates the reciprocal condition number (using the 1-norm) of the @math{R} factor, +stored in the upper triangle of @var{QR}. The reciprocal condition number estimate, defined as +@math{1 / (||R||_1 \cdot ||R^{-1}||_1)}, is stored in @var{rcond}. +Additional workspace of size @math{3 N} is required in @var{work}. +@end deftypefun + +@node Complete Orthogonal Decomposition +@section Complete Orthogonal Decomposition + +The complete orthogonal decomposition of a @math{M}-by-@math{N} matrix +@math{A} is a generalization of the QR decomposition with column pivoting, given by +@tex +\beforedisplay +$$ +A P = Q +\left( +\matrix{ +R_{11} & 0 \cr +0 & 0 \cr +} +\right) Z +$$ +\afterdisplay +@end tex +@ifinfo + +@example +A P = Q [ R11 0 ] Z + [ 0 0 ] +@end example + +@end ifinfo +@noindent +where @math{P} is a @math{N}-by-@math{N} permutation matrix, +@math{Q} is @math{M}-by-@math{M} orthogonal, @math{R_{11}} is +@math{r}-by-@math{r} upper triangular, with @math{r = {\rm rank}(A)}, +and @math{Z} is @math{N}-by-@math{N} orthogonal. If @math{A} +has full rank, then @math{R_{11} = R}, @math{Z = I} and this reduces to the +QR decomposition with column pivoting. The advantage of using +the complete orthogonal decomposition for rank deficient matrices +is the ability to compute the minimum norm solution to the linear +least squares problem @math{Ax = b}, which is given by +@tex +\beforedisplay +$$ +x = P Z^T +\left( +\matrix{ +R_{11}^{-1} c_1 \cr +0 \cr +} +\right) +$$ +\afterdisplay +@end tex +@ifinfo + +@example +x = P Z^T [ R11^-1 c1 ] + [ 0 ] +@end example + +@end ifinfo +and the vector @math{c_1} is the first @math{r} elements of @math{Q^T b}. + +@deftypefun int gsl_linalg_COD_decomp (gsl_matrix * @var{A}, gsl_vector * @var{tau_Q}, gsl_vector * @var{tau_Z}, gsl_permutation * @var{p}, size_t * @var{rank}, gsl_vector * @var{work}) +@deftypefunx int gsl_linalg_COD_decomp_e (gsl_matrix * @var{A}, gsl_vector * @var{tau_Q}, gsl_vector * @var{tau_Z}, gsl_permutation * @var{p}, double @var{tol}, size_t * @var{rank}, gsl_vector * @var{work}) +These functions factor the @math{M}-by-@math{N} matrix @var{A} into the decomposition @math{A = Q R Z P^T}. The rank of @var{A} +is computed as the number of diagonal elements of @math{R} greater than the tolerance @var{tol} and output in @var{rank}. +If @var{tol} is not specified, a default value is used (see @code{gsl_linalg_QRPT_rank}). On output, the permutation +matrix @math{P} is stored in @var{p}. The matrix @math{R_{11}} is stored in the upper @var{rank}-by-@var{rank} block of @var{A}. +The matrices @math{Q} and @math{Z} are encoded in packed storage in @var{A} on output. The vectors @var{tau_Q} and @var{tau_Z} +contain the Householder scalars corresponding to the matrices @math{Q} and @math{Z} respectively and must be +of length @math{k = \min(M,N)}. The vector @var{work} is additional workspace of length @math{N}. +@end deftypefun + +@deftypefun int gsl_linalg_COD_lssolve (const gsl_matrix * @var{QRZ}, const gsl_vector * @var{tau_Q}, const gsl_vector * @var{tau_Z}, const gsl_permutation * @var{p}, const size_t @var{rank}, const gsl_vector * @var{b}, gsl_vector * @var{x}, gsl_vector * @var{residual}) +This function finds the least squares solution to the overdetermined +system @math{A x = b} where the matrix @var{A} has more rows than +columns. The least squares solution minimizes the Euclidean norm of the +residual, @math{||b - A x||}. The routine requires as input +the @math{QRZ} decomposition of @math{A} into (@var{QRZ}, @var{tau_Q}, @var{tau_Z}, @var{p}, @var{rank}) +given by @code{gsl_linalg_COD_decomp}. The solution is returned in @var{x}. The +residual is computed as a by-product and stored in @var{residual}. +@end deftypefun + +@deftypefun int gsl_linalg_COD_unpack (const gsl_matrix * @var{QRZ}, const gsl_vector * @var{tau_Q}, const gsl_vector * @var{tau_Z}, const size_t @var{rank}, gsl_matrix * @var{Q}, gsl_matrix * @var{R}, gsl_matrix * @var{Z}) +This function unpacks the encoded @math{QRZ} decomposition +(@var{QRZ}, @var{tau_Q}, @var{tau_Z}, @var{rank}) into the matrices +@var{Q}, @var{R}, and @var{Z}, where @var{Q} is @math{M}-by-@math{M}, +@var{R} is @math{M}-by-@math{N}, and @var{Z} is @math{N}-by-@math{N}. +@end deftypefun + +@deftypefun int gsl_linalg_COD_matZ (const gsl_matrix * @var{QRZ}, const gsl_vector * @var{tau_Z}, const size_t @var{rank}, gsl_matrix * @var{A}, gsl_vector * @var{work}) +This function multiplies the input matrix @var{A} on the right by @var{Z}, +@math{A' = A Z} using the encoded @math{QRZ} decomposition +(@var{QRZ}, @var{tau_Z}, @var{rank}). @var{A} must have @math{N} columns but may +have any number of rows. Additional workspace of length @math{M} is provided +in @var{work}. +@end deftypefun + @node Singular Value Decomposition @section Singular Value Decomposition @cindex SVD @@ -529,16 +718,38 @@ (@math{L y = b}, @math{L^T x = y}), which can be solved by forward and back-substitution. -@deftypefun int gsl_linalg_cholesky_decomp (gsl_matrix * @var{A}) +If the matrix @math{A} is near singular, it is sometimes possible to reduce +the condition number and recover a more accurate solution vector @math{x} +by scaling as +@tex +\beforedisplay +$$ +\left( S A S \right) \left( S^{-1} x \right) = S b +$$ +\afterdisplay +@end tex +@ifinfo + +@example +( S A S ) ( S^(-1) x ) = S b +@end example + +@end ifinfo +where @math{S} is a diagonal matrix whose elements are given by +@math{S_{ii} = 1/\sqrt{A_{ii}}}. This scaling is also known as +Jacobi preconditioning. There are routines below to solve +both the scaled and unscaled systems. + +@deftypefun int gsl_linalg_cholesky_decomp1 (gsl_matrix * @var{A}) @deftypefunx int gsl_linalg_complex_cholesky_decomp (gsl_matrix_complex * @var{A}) These functions factorize the symmetric, positive-definite square matrix @var{A} into the Cholesky decomposition @math{A = L L^T} (or @c{$A = L L^{\dagger}$} @math{A = L L^H} -for the complex case). On input, the values from the diagonal and lower-triangular part of the matrix @var{A} are used (the upper triangular part is ignored). On output the diagonal and lower triangular part of the input -matrix @var{A} contain the matrix @math{L}, while the upper triangular part -of the input matrix is overwritten with @math{L^T} (the diagonal terms being -identical for both @math{L} and @math{L^T}). If the matrix is not +for the complex case). On input, the values from the diagonal and lower-triangular +part of the matrix @var{A} are used (the upper triangular part is ignored). On output +the diagonal and lower triangular part of the input matrix @var{A} contain the matrix +@math{L}, while the upper triangular part is unmodified. If the matrix is not positive-definite then the decomposition will fail, returning the error code @code{GSL_EDOM}. @@ -546,6 +757,10 @@ handler first to avoid triggering an error. @end deftypefun +@deftypefun int gsl_linalg_cholesky_decomp (gsl_matrix * @var{A}) +This function is now deprecated and is provided only for backward compatibility. +@end deftypefun + @deftypefun int gsl_linalg_cholesky_solve (const gsl_matrix * @var{cholesky}, const gsl_vector * @var{b}, gsl_vector * @var{x}) @deftypefunx int gsl_linalg_complex_cholesky_solve (const gsl_matrix_complex * @var{cholesky}, const gsl_vector_complex * @var{b}, gsl_vector_complex * @var{x}) These functions solve the system @math{A x = b} using the Cholesky @@ -574,6 +789,233 @@ stored in-place in @var{cholesky}. @end deftypefun +@deftypefun int gsl_linalg_cholesky_decomp2 (gsl_matrix * @var{A}, gsl_vector * @var{S}) +This function calculates a diagonal scaling transformation @math{S} for +the symmetric, positive-definite square matrix @var{A}, and then +computes the Cholesky decomposition @math{S A S = L L^T}. +On input, the values from the diagonal and lower-triangular part of the matrix @var{A} are +used (the upper triangular part is ignored). On output the diagonal and lower triangular part +of the input matrix @var{A} contain the matrix @math{L}, while the upper triangular part +of the input matrix is overwritten with @math{L^T} (the diagonal terms being +identical for both @math{L} and @math{L^T}). If the matrix is not +positive-definite then the decomposition will fail, returning the +error code @code{GSL_EDOM}. The diagonal scale factors are stored in @var{S} +on output. + +When testing whether a matrix is positive-definite, disable the error +handler first to avoid triggering an error. +@end deftypefun + +@deftypefun int gsl_linalg_cholesky_solve2 (const gsl_matrix * @var{cholesky}, const gsl_vector * @var{S}, const gsl_vector * @var{b}, gsl_vector * @var{x}) +This function solves the system @math{(S A S) (S^{-1} x) = S b} using the Cholesky +decomposition of @math{S A S} held in the matrix @var{cholesky} which must +have been previously computed by @code{gsl_linalg_cholesky_decomp2}. +@end deftypefun + +@deftypefun int gsl_linalg_cholesky_svx2 (const gsl_matrix * @var{cholesky}, const gsl_vector * @var{S}, gsl_vector * @var{x}) +This function solves the system @math{(S A S) (S^{-1} x) = S b} in-place using the +Cholesky decomposition of @math{S A S} held in the matrix @var{cholesky} +which must have been previously computed by +@code{gsl_linalg_cholesky_decomp2}. On input @var{x} should +contain the right-hand side @math{b}, which is replaced by the +solution on output. +@end deftypefun + +@deftypefun int gsl_linalg_cholesky_scale (const gsl_matrix * @var{A}, gsl_vector * @var{S}) +This function calculates a diagonal scaling transformation of the +symmetric, positive definite matrix @var{A}, such that +@math{S A S} has a condition number within a factor of @math{N} +of the matrix of smallest possible condition number over all +possible diagonal scalings. On output, @var{S} contains the +scale factors, given by @math{S_i = 1/\sqrt{A_{ii}}}. +For any @math{A_{ii} \le 0}, the corresponding scale factor @math{S_i} +is set to @math{1}. +@end deftypefun + +@deftypefun int gsl_linalg_cholesky_scale_apply (gsl_matrix * @var{A}, const gsl_vector * @var{S}) +This function applies the scaling transformation @var{S} to the matrix @var{A}. On output, +@var{A} is replaced by @math{S A S}. +@end deftypefun + +@deftypefun int gsl_linalg_cholesky_rcond (const gsl_matrix * @var{cholesky}, double * @var{rcond}, gsl_vector * @var{work}) +This function estimates the reciprocal condition number (using the 1-norm) of the symmetric positive +definite matrix @math{A}, using its Cholesky decomposition provided in @var{cholesky}. +The reciprocal condition number estimate, defined as @math{1 / (||A||_1 \cdot ||A^{-1}||_1)}, is stored +in @var{rcond}. Additional workspace of size @math{3 N} is required in @var{work}. +@end deftypefun + +@node Pivoted Cholesky Decomposition +@section Pivoted Cholesky Decomposition +@cindex Cholesky decomposition, pivoted +@cindex Pivoted Cholesky Decomposition + +A symmetric, positive definite square matrix @math{A} has an alternate +Cholesky decomposition into a product of a lower unit triangular matrix @math{L}, +a diagonal matrix @math{D} and @math{L^T}, given by @math{L D L^T}. This is +equivalent to the Cholesky formulation discussed above, with +the standard Cholesky lower triangular factor given by @math{L D^{1 \over 2}}. +For ill-conditioned matrices, it can help to use a pivoting strategy to +prevent the entries of @math{D} and @math{L} from growing too large, and also +ensure @math{D_1 \ge D_2 \ge \cdots \ge D_n > 0}, where @math{D_i} are +the diagonal entries of @math{D}. The final decomposition is given by +@tex +\beforedisplay +$$ +P A P^T = L D L^T +$$ +\afterdisplay +@end tex +@ifinfo + +@example +P A P^T = L D L^T +@end example + +@end ifinfo +where @math{P} is a permutation matrix. + +@deftypefun int gsl_linalg_pcholesky_decomp (gsl_matrix * @var{A}, gsl_permutation * @var{p}) +This function factors the symmetric, positive-definite square matrix +@var{A} into the Pivoted Cholesky decomposition @math{P A P^T = L D L^T}. +On input, the values from the diagonal and lower-triangular part of the matrix @var{A} are +used to construct the factorization. On output the diagonal of the input matrix @var{A} stores +the diagonal elements of @math{D}, and the lower triangular portion of @var{A} +contains the matrix @math{L}. Since @math{L} has ones on its diagonal these +do not need to be explicitely stored. The upper triangular portion of @var{A} is +unmodified. The permutation matrix @math{P} is stored in @var{p} on output. +@end deftypefun + +@deftypefun int gsl_linalg_pcholesky_solve (const gsl_matrix * @var{LDLT}, const gsl_permutation * @var{p}, const gsl_vector * @var{b}, gsl_vector * @var{x}) +This function solves the system @math{A x = b} using the Pivoted Cholesky +decomposition of @math{A} held in the matrix @var{LDLT} and permutation +@var{p} which must have been previously computed by @code{gsl_linalg_pcholesky_decomp}. +@end deftypefun + +@deftypefun int gsl_linalg_pcholesky_svx (const gsl_matrix * @var{LDLT}, const gsl_permutation * @var{p}, gsl_vector * @var{x}) +This function solves the system @math{A x = b} in-place using the Pivoted Cholesky +decomposition of @math{A} held in the matrix @var{LDLT} and permutation +@var{p} which must have been previously computed by @code{gsl_linalg_pcholesky_decomp}. +On input, @var{x} contains the right hand side vector @math{b} which is +replaced by the solution vector on output. +@end deftypefun + +@deftypefun int gsl_linalg_pcholesky_decomp2 (gsl_matrix * @var{A}, gsl_permutation * @var{p}, gsl_vector * @var{S}) +This function computes the pivoted Cholesky factorization of the matrix +@math{S A S}, where the input matrix @var{A} is symmetric and positive +definite, and the diagonal scaling matrix @var{S} is computed to reduce the +condition number of @var{A} as much as possible. See +@ref{Cholesky Decomposition} for more information on the matrix @var{S}. +The Pivoted Cholesky decomposition satisfies @math{P S A S P^T = L D L^T}. +On input, the values from the diagonal and lower-triangular part of the matrix @var{A} are +used to construct the factorization. On output the diagonal of the input matrix @var{A} stores the diagonal +elements of @math{D}, and the lower triangular portion of @var{A} +contains the matrix @math{L}. Since @math{L} has ones on its diagonal these +do not need to be explicitely stored. The upper triangular portion of @var{A} +is unmodified. The permutation matrix @math{P} is stored in @var{p} on output. +The diagonal scaling transformation is stored in @var{S} on output. +@end deftypefun + +@deftypefun int gsl_linalg_pcholesky_solve2 (const gsl_matrix * @var{LDLT}, const gsl_permutation * @var{p}, const gsl_vector * @var{S}, const gsl_vector * @var{b}, gsl_vector * @var{x}) +This function solves the system @math{(S A S) (S^{-1} x) = S b} using the Pivoted Cholesky +decomposition of @math{S A S} held in the matrix @var{LDLT}, permutation +@var{p}, and vector @var{S}, which must have been previously computed by +@code{gsl_linalg_pcholesky_decomp2}. +@end deftypefun + +@deftypefun int gsl_linalg_pcholesky_svx2 (const gsl_matrix * @var{LDLT}, const gsl_permutation * @var{p}, const gsl_vector * @var{S}, gsl_vector * @var{x}) +This function solves the system @math{(S A S) (S^{-1} x) = S b} in-place using the Pivoted Cholesky +decomposition of @math{S A S} held in the matrix @var{LDLT}, permutation +@var{p} and vector @var{S}, which must have been previously computed by +@code{gsl_linalg_pcholesky_decomp2}. +On input, @var{x} contains the right hand side vector @math{b} which is +replaced by the solution vector on output. +@end deftypefun + +@deftypefun int gsl_linalg_pcholesky_invert (const gsl_matrix * @var{LDLT}, const gsl_permutation * @var{p}, gsl_matrix * @var{Ainv}) +This function computes the inverse of the matrix @math{A}, using the Pivoted +Cholesky decomposition stored in @var{LDLT} and @var{p}. On output, the +matrix @var{Ainv} contains @math{A^{-1}}. +@end deftypefun + +@deftypefun int gsl_linalg_pcholesky_rcond (const gsl_matrix * @var{LDLT}, const gsl_permutation * @var{p}, double * @var{rcond}, gsl_vector * @var{work}) +This function estimates the reciprocal condition number (using the 1-norm) of the symmetric positive +definite matrix @math{A}, using its pivoted Cholesky decomposition provided in @var{LDLT}. +The reciprocal condition number estimate, defined as @math{1 / (||A||_1 \cdot ||A^{-1}||_1)}, is stored +in @var{rcond}. Additional workspace of size @math{3 N} is required in @var{work}. +@end deftypefun + +@node Modified Cholesky Decomposition +@section Modified Cholesky Decomposition +@cindex Cholesky decomposition, modified +@cindex Modified Cholesky Decomposition + +The modified Cholesky decomposition is suitable for solving systems +@math{A x = b} where @math{A} is a symmetric indefinite matrix. Such +matrices arise in nonlinear optimization algorithms. The standard +Cholesky decomposition requires a positive definite matrix and would +fail in this case. Instead of resorting to a method like QR or SVD, +which do not take into account the symmetry of the matrix, we can +instead introduce a small perturbation to the matrix @math{A} to +make it positive definite, and then use a Cholesky decomposition on +the perturbed matrix. The resulting decomposition satisfies +@tex +\beforedisplay +$$ +P (A + E) P^T = L D L^T +$$ +\afterdisplay +@end tex +@ifinfo + +@example +P (A + E) P^T = L D L^T +@end example + +@end ifinfo +where @math{P} is a permutation matrix, @math{E} is a diagonal +perturbation matrix, @math{L} is unit lower triangular, and +@math{D} is diagonal. If @math{A} is sufficiently positive +definite, then the perturbation matrix @math{E} will be zero +and this method is equivalent to the pivoted Cholesky algorithm. +For indefinite matrices, the perturbation matrix @math{E} is +computed to ensure that @math{A + E} is positive definite and +well conditioned. + +@deftypefun int gsl_linalg_mcholesky_decomp (gsl_matrix * @var{A}, gsl_permutation * @var{p}, gsl_vector * @var{E}) +This function factors the symmetric, indefinite square matrix +@var{A} into the Modified Cholesky decomposition @math{P (A + E) P^T = L D L^T}. +On input, the values from the diagonal and lower-triangular part of the matrix @var{A} are +used to construct the factorization. On output the diagonal of the input matrix @var{A} stores the diagonal +elements of @math{D}, and the lower triangular portion of @var{A} +contains the matrix @math{L}. Since @math{L} has ones on its diagonal these +do not need to be explicitely stored. The upper triangular portion of @var{A} +is unmodified. The permutation matrix @math{P} is +stored in @var{p} on output. The diagonal perturbation matrix is stored in +@var{E} on output. The parameter @var{E} may be set to NULL if it is not +required. +@end deftypefun + +@deftypefun int gsl_linalg_mcholesky_solve (const gsl_matrix * @var{LDLT}, const gsl_permutation * @var{p}, const gsl_vector * @var{b}, gsl_vector * @var{x}) +This function solves the perturbed system @math{(A + E) x = b} using the Cholesky +decomposition of @math{A + E} held in the matrix @var{LDLT} and permutation +@var{p} which must have been previously computed by @code{gsl_linalg_mcholesky_decomp}. +@end deftypefun + +@deftypefun int gsl_linalg_mcholesky_svx (const gsl_matrix * @var{LDLT}, const gsl_permutation * @var{p}, gsl_vector * @var{x}) +This function solves the perturbed system @math{(A + E) x = b} in-place using the Cholesky +decomposition of @math{A + E} held in the matrix @var{LDLT} and permutation +@var{p} which must have been previously computed by @code{gsl_linalg_mcholesky_decomp}. +On input, @var{x} contains the right hand side vector @math{b} which is +replaced by the solution vector on output. +@end deftypefun + +@deftypefun int gsl_linalg_mcholesky_rcond (const gsl_matrix * @var{LDLT}, const gsl_permutation * @var{p}, double * @var{rcond}, gsl_vector * @var{work}) +This function estimates the reciprocal condition number (using the 1-norm) of the perturbed matrix +@math{A + E}, using its pivoted Cholesky decomposition provided in @var{LDLT}. +The reciprocal condition number estimate, defined as @math{1 / (||A + E||_1 \cdot ||(A + E)^{-1}||_1)}, is stored +in @var{rcond}. Additional workspace of size @math{3 N} is required in @var{work}. +@end deftypefun + @node Tridiagonal Decomposition of Real Symmetric Matrices @section Tridiagonal Decomposition of Real Symmetric Matrices @cindex tridiagonal decomposition @@ -831,6 +1273,84 @@ the diagonal vector @var{diag} and superdiagonal vector @var{superdiag}. @end deftypefun +@node Givens Rotations +@section Givens Rotations +@cindex Givens rotation + +A Givens rotation is a rotation in the plane acting on two elements +of a given vector. It can be represented in matrix form as +@tex +\beforedisplay +$$ +G(i,j,\theta) = +\left( +\matrix{ +1 & \ldots & 0 & \ldots & 0 & \ldots & 0 \cr +\vdots & \ddots & \vdots & & \vdots & & \vdots \cr +0 & \ldots & \cos{\theta} & \ldots & -\sin{\theta} & \ldots & 0 \cr +\vdots & & \vdots & \ddots & \vdots & & \vdots \cr +0 & \ldots & \sin{\theta} & \ldots & \cos{\theta} & \ldots & 0 \cr +\vdots & & \vdots & & \vdots & \ddots & \vdots \cr +0 & \ldots & 0 & \ldots & 0 & \ldots & 1 \cr +} +\right) +$$ +\afterdisplay +@end tex +@ifinfo +@example +@end example +@end ifinfo +where the @math{\cos{\theta}} and @math{\sin{\theta}} appear at +the intersection of the @math{i}th and @math{j}th rows and columns. +When acting on a vector @math{x}, @math{G(i,j,\theta) x} performs +a rotation of the @math{(i,j)} elements of @math{x}. Givens +rotations are typically used to introduce zeros in +vectors, such as during the QR decomposition of a matrix. In this +case, it is typically desired to find @math{c} and @math{s} such that +@tex +\beforedisplay +$$ +\left( +\matrix{ +c & -s \cr +s & c +} +\right) +\left( +\matrix{ +a \cr +b +} +\right) = +\left( +\matrix{ +r \cr +0 +} +\right) +$$ +\afterdisplay +@end tex +@ifinfo +@example +@end example +@end ifinfo +with @math{r = \sqrt{a^2 + b^2}}. + +@deftypefun void gsl_linalg_givens (const double @var{a}, const double @var{b}, double * @var{c}, double * @var{s}) +This function computes @math{c = \cos{\theta}} and @math{s = \sin{\theta}} +so that the Givens matrix @math{G(\theta)} acting on the +vector @math{(a,b)} produces @math{(r, 0)}, with @math{r = \sqrt{a^2 + b^2}}. +@end deftypefun + +@deftypefun void gsl_linalg_givens_gv (gsl_vector * @var{v}, const size_t @var{i}, const size_t @var{j}, const double @var{c}, const double @var{s}) +This function applies the Givens rotation defined by +@math{c = \cos{\theta}} and @math{s = \sin{\theta}} to the @var{i} +and @var{j} elements of @var{v}. On output, +@math{(v(i),v(j)) \leftarrow G(\theta) (v(i),v(j))}. +@end deftypefun + @node Householder Transformations @section Householder Transformations @cindex Householder matrix @@ -856,16 +1376,21 @@ @end ifinfo @noindent where @math{v} is a vector (called the @dfn{Householder vector}) and -@math{\tau = 2/(v^T v)}. The functions described in this section use the +@math{\tau = 2/(v^T v)}. The functions described in this section use the rank-1 structure of the Householder matrix to create and apply Householder transformations efficiently. -@deftypefun double gsl_linalg_householder_transform (gsl_vector * @var{v}) -@deftypefunx gsl_complex gsl_linalg_complex_householder_transform (gsl_vector_complex * @var{v}) +@deftypefun double gsl_linalg_householder_transform (gsl_vector * @var{w}) +@deftypefunx gsl_complex gsl_linalg_complex_householder_transform (gsl_vector_complex * @var{w}) This function prepares a Householder transformation @math{P = I - \tau v -v^T} which can be used to zero all the elements of the input vector except -the first. On output the transformation is stored in the vector @var{v} -and the scalar @math{\tau} is returned. +v^T} which can be used to zero all the elements of the input vector @var{w} +except the first. On output the Householder vector @var{v} is stored in +@var{w} and the scalar @math{\tau} is returned. The householder vector +@var{v} is normalized so that @var{v}[0] = 1, however this 1 is not +stored in the output vector. Instead, @var{w}[0] is set to +the first element of the transformed vector, so that if +@math{u = P w}, @var{w}[0] = @math{u}[0] on output and the remainder +of @math{u} is zero. @end deftypefun @deftypefun int gsl_linalg_householder_hm (double @var{tau}, const gsl_vector * @var{v}, gsl_matrix * @var{A}) @@ -1038,6 +1563,29 @@ @end ifinfo @end deftypefun +@node Triangular Systems +@section Triangular Systems +@cindex triangular systems + +@deftypefun int gsl_linalg_tri_upper_invert (gsl_matrix * @var{T}) +@deftypefunx int gsl_linalg_tri_lower_invert (gsl_matrix * @var{T}) +@deftypefunx int gsl_linalg_tri_upper_unit_invert (gsl_matrix * @var{T}) +@deftypefunx int gsl_linalg_tri_lower_unit_invert (gsl_matrix * @var{T}) +These functions calculate the in-place inverse of the triangular matrix @var{T}. When +the @code{upper} prefix is specified, then the upper triangle of @var{T} is used, and when +the @code{lower} prefix is specified, the lower triangle is used. If the @code{unit} +prefix is specified, then the diagonal elements of the matrix @var{T} are taken as +unity and are not referenced. Otherwise the diagonal elements are used in the inversion. +@end deftypefun + +@deftypefun int gsl_linalg_tri_upper_rcond (const gsl_matrix * @var{T}, double * @var{rcond}, gsl_vector * @var{work}) +@deftypefunx int gsl_linalg_tri_lower_rcond (const gsl_matrix * @var{T}, double * @var{rcond}, gsl_vector * @var{work}) +These functions estimate the reciprocal condition number, in the 1-norm, of the upper or lower +@math{N}-by-@math{N} triangular matrix @var{T}. The reciprocal condition number +is stored in @var{rcond} on output, and is defined by @math{1 / (||T||_1 \cdot ||T^{-1}||_1)}. +Additional workspace of size @math{3 N} is required in @var{work}. +@end deftypefun + @node Balancing @section Balancing @cindex balancing matrices @@ -1121,7 +1669,7 @@ Here is the output from the program, @example -@verbatiminclude examples/linalglu.out +@verbatiminclude examples/linalglu.txt @end example @noindent @@ -1207,5 +1755,13 @@ @code{lawnspdf} directories. @end itemize +@noindent +The algorithm for estimating a matrix condition number is described in +the following paper, - +@itemize @w{} +@item +N. J. Higham, "FORTRAN codes for estimating the one-norm of +a real or complex matrix, with applications to condition estimation", +ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988. +@end itemize diff -Nru gsl-doc-1.16/doc/Makefile.am gsl-doc-2.3/doc/Makefile.am --- gsl-doc-1.16/doc/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/Makefile.am 2016-10-27 11:20:46.000000000 +0000 @@ -1,18 +1,16 @@ ## Process this file with automake to produce Makefile.in +SUBDIRS = . examples + info_TEXINFOS = gsl-ref.texi noinst_TEXINFOS = gsl-design.texi -gsl_ref_TEXINFOS = err.texi cblas.texi blas.texi min.texi fft.texi rng.texi randist.texi roots.texi statistics.texi specfunc.texi specfunc-airy.texi specfunc-bessel.texi specfunc-clausen.texi specfunc-coulomb.texi specfunc-coupling.texi specfunc-dawson.texi specfunc-debye.texi specfunc-dilog.texi specfunc-elementary.texi specfunc-ellint.texi specfunc-elljac.texi specfunc-erf.texi specfunc-exp.texi specfunc-expint.texi specfunc-fermi-dirac.texi specfunc-gamma.texi specfunc-gegenbauer.texi specfunc-hyperg.texi specfunc-lambert.texi specfunc-laguerre.texi specfunc-legendre.texi specfunc-log.texi specfunc-mathieu.texi specfunc-pow-int.texi specfunc-psi.texi specfunc-synchrotron.texi specfunc-transport.texi specfunc-trig.texi specfunc-zeta.texi siman.texi vectors.texi debug.texi histogram.texi ode-initval.texi integration.texi ieee754.texi montecarlo.texi sum.texi intro.texi usage.texi dwt.texi dht.texi interp.texi poly.texi linalg.texi eigen.texi multiroots.texi sort.texi permutation.texi combination.texi multiset.texi complex.texi math.texi fitting.texi multifit.texi const.texi ntuple.texi diff.texi qrng.texi cheb.texi multimin.texi gpl.texi fdl.texi autoconf.texi bspline.texi +gsl_ref_TEXINFOS = err.texi cblas.texi blas.texi min.texi fft.texi rng.texi randist.texi roots.texi rstat.texi statistics.texi specfunc.texi specfunc-airy.texi specfunc-bessel.texi specfunc-clausen.texi specfunc-coulomb.texi specfunc-coupling.texi specfunc-dawson.texi specfunc-debye.texi specfunc-dilog.texi specfunc-elementary.texi specfunc-ellint.texi specfunc-elljac.texi specfunc-erf.texi specfunc-exp.texi specfunc-expint.texi specfunc-fermi-dirac.texi specfunc-gamma.texi specfunc-gegenbauer.texi specfunc-hyperg.texi specfunc-lambert.texi specfunc-laguerre.texi specfunc-legendre.texi specfunc-log.texi specfunc-mathieu.texi specfunc-pow-int.texi specfunc-psi.texi specfunc-synchrotron.texi specfunc-transport.texi specfunc-trig.texi specfunc-zeta.texi siman.texi vectors.texi debug.texi histogram.texi ode-initval.texi integration.texi ieee754.texi montecarlo.texi sum.texi intro.texi usage.texi dwt.texi dht.texi interp.texi poly.texi linalg.texi eigen.texi multiroots.texi sort.texi permutation.texi combination.texi multiset.texi complex.texi math.texi fitting.texi multifit-nlinear.texi const.texi ntuple.texi diff.texi qrng.texi cheb.texi multimin.texi gpl.texi fdl.texi autoconf.texi bspline.texi spblas.texi spmatrix.texi splinalg.texi man_MANS = gsl.3 gsl-config.1 gsl-randist.1 gsl-histogram.1 -figures = multimin.eps siman-test.eps siman-energy.eps 12-cities.eps initial-route.eps final-route.eps fft-complex-radix2-f.eps fft-complex-radix2-t.eps fft-complex-radix2.eps fft-real-mixedradix.eps roots-bisection.eps roots-false-position.eps roots-newtons-method.eps roots-secant-method.eps histogram.eps histogram2d.eps min-interval.eps fit-wlinear.eps fit-wlinear2.eps fit-exp.eps ntuple.eps qrng.eps cheb.eps vdp.eps interp2.eps rand-beta.tex rand-binomial.tex rand-cauchy.tex rand-chisq.tex rand-erlang.tex rand-exponential.tex rand-fdist.tex rand-flat.tex rand-gamma.tex rand-gaussian.tex rand-geometric.tex rand-laplace.tex rand-logarithmic.tex rand-logistic.tex rand-lognormal.tex rand-pareto.tex rand-poisson.tex rand-hypergeometric.tex rand-nbinomial.tex rand-pascal.tex rand-bivariate-gaussian.tex rand-rayleigh.tex rand-rayleigh-tail.tex rand-tdist.tex rand-weibull.tex random-walk.tex randplots.gnp rand-exppow.tex rand-levy.tex rand-levyskew.tex rand-gumbel.tex rand-bernoulli.tex rand-gaussian-tail.tex rand-gumbel1.tex rand-gumbel2.tex landau.dat rand-landau.tex dwt-orig.eps dwt-samp.eps interpp2.eps bspline.eps robust.eps - -examples_src = examples/blas.c examples/block.c examples/cblas.c examples/cdf.c examples/cheb.c examples/combination.c examples/multiset.c examples/const.c examples/demo_fn.c examples/diff.c examples/eigen.c examples/fft.c examples/fftmr.c examples/fftreal.c examples/fitting.c examples/fitting2.c examples/fitting3.c examples/histogram.c examples/histogram2d.c examples/ieee.c examples/ieeeround.c examples/integration.c examples/interp.c examples/intro.c examples/linalglu.c examples/matrix.c examples/matrixw.c examples/min.c examples/monte.c examples/ntupler.c examples/ntuplew.c examples/ode-initval.c examples/odefixed.c examples/permseq.c examples/permshuffle.c examples/polyroots.c examples/qrng.c examples/randpoisson.c examples/randwalk.c examples/rng.c examples/rngunif.c examples/robfit.c examples/rootnewt.c examples/roots.c examples/siman.c examples/sortsmall.c examples/specfun.c examples/specfun_e.c examples/stat.c examples/statsort.c examples/sum.c examples/vector.c examples/vectorr.c examples/vectorview.c examples/vectorw.c examples/demo_fn.h examples/dwt.c examples/expfit.c examples/nlfit.c examples/interpp.c examples/eigen_nonsymm.c examples/bspline.c examples/multimin.c examples/multiminfn.c examples/nmsimplex.c examples/ode-initval-low-level.c - -examples_out = examples/blas.out examples/block.out examples/cblas.out examples/cdf.out examples/combination.out examples/multiset.out examples/const.out examples/diff.out examples/integration.out examples/intro.out examples/linalglu.out examples/min.out examples/polyroots.out examples/randpoisson.2.out examples/randpoisson.out examples/rng.out examples/rngunif.2.out examples/rngunif.out examples/sortsmall.out examples/specfun.out examples/specfun_e.out examples/stat.out examples/statsort.out examples/sum.out examples/vectorview.out examples/ecg.dat examples/dwt.dat examples/multimin.out examples/nmsimplex.out +figures = multimin.eps siman-test.eps siman-energy.eps 12-cities.eps initial-route.eps final-route.eps fft-complex-radix2-f.eps fft-complex-radix2-t.eps fft-complex-radix2.eps fft-real-mixedradix.eps roots-bisection.eps roots-false-position.eps roots-newtons-method.eps roots-secant-method.eps histogram.eps histogram2d.eps min-interval.eps fit-wlinear.eps fit-wlinear2.eps fit-exp.eps ntuple.eps qrng.eps cheb.eps vdp.eps interp2.eps interp2d.eps nlfit2.eps nlfit3.eps rand-beta.tex rand-binomial.tex rand-cauchy.tex rand-chisq.tex rand-erlang.tex rand-exponential.tex rand-fdist.tex rand-flat.tex rand-gamma.tex rand-gaussian.tex rand-geometric.tex rand-laplace.tex rand-logarithmic.tex rand-logistic.tex rand-lognormal.tex rand-pareto.tex rand-poisson.tex rand-hypergeometric.tex rand-nbinomial.tex rand-pascal.tex rand-bivariate-gaussian.tex rand-rayleigh.tex rand-rayleigh-tail.tex rand-tdist.tex rand-weibull.tex random-walk.tex randplots.gnp rand-exppow.tex rand-levy.tex rand-levyskew.tex rand-gumbel.tex rand-bernoulli.tex rand-gaussian-tail.tex rand-gumbel1.tex rand-gumbel2.tex landau.dat rand-landau.tex dwt-orig.eps dwt-samp.eps interpp2.eps bspline.eps robust.eps sparse_poisson.eps interp_compare.eps regularized.eps regularized2.eps multilarge.eps -noinst_DATA = $(examples_src) $(examples_out) $(figures) +noinst_DATA = $(figures) EXTRA_DIST = $(man_MANS) $(noinst_DATA) gsl-design.texi fftalgorithms.tex fftalgorithms.bib algorithm.sty algorithmic.sty calc.sty statnotes.tex diff -Nru gsl-doc-1.16/doc/Makefile.in gsl-doc-2.3/doc/Makefile.in --- gsl-doc-1.16/doc/Makefile.in 2013-07-19 15:14:53.000000000 +0000 +++ gsl-doc-2.3/doc/Makefile.in 2016-12-09 00:04:21.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -145,6 +145,14 @@ MAKEINFOHTML = $(MAKEINFO) --html AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) DVIPS = dvips +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -184,12 +192,65 @@ NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -212,7 +273,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -326,13 +390,15 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ +SUBDIRS = . examples info_TEXINFOS = gsl-ref.texi noinst_TEXINFOS = gsl-design.texi gsl_ref_TEXINFOS = err.texi cblas.texi blas.texi min.texi fft.texi \ - rng.texi randist.texi roots.texi statistics.texi specfunc.texi \ - specfunc-airy.texi specfunc-bessel.texi specfunc-clausen.texi \ - specfunc-coulomb.texi specfunc-coupling.texi \ - specfunc-dawson.texi specfunc-debye.texi specfunc-dilog.texi \ + rng.texi randist.texi roots.texi rstat.texi statistics.texi \ + specfunc.texi specfunc-airy.texi specfunc-bessel.texi \ + specfunc-clausen.texi specfunc-coulomb.texi \ + specfunc-coupling.texi specfunc-dawson.texi \ + specfunc-debye.texi specfunc-dilog.texi \ specfunc-elementary.texi specfunc-ellint.texi \ specfunc-elljac.texi specfunc-erf.texi specfunc-exp.texi \ specfunc-expint.texi specfunc-fermi-dirac.texi \ @@ -347,9 +413,10 @@ sum.texi intro.texi usage.texi dwt.texi dht.texi interp.texi \ poly.texi linalg.texi eigen.texi multiroots.texi sort.texi \ permutation.texi combination.texi multiset.texi complex.texi \ - math.texi fitting.texi multifit.texi const.texi ntuple.texi \ - diff.texi qrng.texi cheb.texi multimin.texi gpl.texi fdl.texi \ - autoconf.texi bspline.texi + math.texi fitting.texi multifit-nlinear.texi const.texi \ + ntuple.texi diff.texi qrng.texi cheb.texi multimin.texi \ + gpl.texi fdl.texi autoconf.texi bspline.texi spblas.texi \ + spmatrix.texi splinalg.texi man_MANS = gsl.3 gsl-config.1 gsl-randist.1 gsl-histogram.1 figures = multimin.eps siman-test.eps siman-energy.eps 12-cities.eps \ initial-route.eps final-route.eps fft-complex-radix2-f.eps \ @@ -358,47 +425,26 @@ roots-false-position.eps roots-newtons-method.eps \ roots-secant-method.eps histogram.eps histogram2d.eps \ min-interval.eps fit-wlinear.eps fit-wlinear2.eps fit-exp.eps \ - ntuple.eps qrng.eps cheb.eps vdp.eps interp2.eps rand-beta.tex \ - rand-binomial.tex rand-cauchy.tex rand-chisq.tex \ - rand-erlang.tex rand-exponential.tex rand-fdist.tex \ - rand-flat.tex rand-gamma.tex rand-gaussian.tex \ - rand-geometric.tex rand-laplace.tex rand-logarithmic.tex \ - rand-logistic.tex rand-lognormal.tex rand-pareto.tex \ - rand-poisson.tex rand-hypergeometric.tex rand-nbinomial.tex \ - rand-pascal.tex rand-bivariate-gaussian.tex rand-rayleigh.tex \ + ntuple.eps qrng.eps cheb.eps vdp.eps interp2.eps interp2d.eps \ + nlfit2.eps nlfit3.eps rand-beta.tex rand-binomial.tex \ + rand-cauchy.tex rand-chisq.tex rand-erlang.tex \ + rand-exponential.tex rand-fdist.tex rand-flat.tex \ + rand-gamma.tex rand-gaussian.tex rand-geometric.tex \ + rand-laplace.tex rand-logarithmic.tex rand-logistic.tex \ + rand-lognormal.tex rand-pareto.tex rand-poisson.tex \ + rand-hypergeometric.tex rand-nbinomial.tex rand-pascal.tex \ + rand-bivariate-gaussian.tex rand-rayleigh.tex \ rand-rayleigh-tail.tex rand-tdist.tex rand-weibull.tex \ random-walk.tex randplots.gnp rand-exppow.tex rand-levy.tex \ rand-levyskew.tex rand-gumbel.tex rand-bernoulli.tex \ rand-gaussian-tail.tex rand-gumbel1.tex rand-gumbel2.tex \ landau.dat rand-landau.tex dwt-orig.eps dwt-samp.eps \ - interpp2.eps bspline.eps robust.eps -examples_src = examples/blas.c examples/block.c examples/cblas.c \ - examples/cdf.c examples/cheb.c examples/combination.c \ - examples/multiset.c examples/const.c examples/demo_fn.c \ - examples/diff.c examples/eigen.c examples/fft.c \ - examples/fftmr.c examples/fftreal.c examples/fitting.c \ - examples/fitting2.c examples/fitting3.c examples/histogram.c \ - examples/histogram2d.c examples/ieee.c examples/ieeeround.c \ - examples/integration.c examples/interp.c examples/intro.c \ - examples/linalglu.c examples/matrix.c examples/matrixw.c \ - examples/min.c examples/monte.c examples/ntupler.c \ - examples/ntuplew.c examples/ode-initval.c examples/odefixed.c \ - examples/permseq.c examples/permshuffle.c examples/polyroots.c \ - examples/qrng.c examples/randpoisson.c examples/randwalk.c \ - examples/rng.c examples/rngunif.c examples/robfit.c \ - examples/rootnewt.c examples/roots.c examples/siman.c \ - examples/sortsmall.c examples/specfun.c examples/specfun_e.c \ - examples/stat.c examples/statsort.c examples/sum.c \ - examples/vector.c examples/vectorr.c examples/vectorview.c \ - examples/vectorw.c examples/demo_fn.h examples/dwt.c \ - examples/expfit.c examples/nlfit.c examples/interpp.c \ - examples/eigen_nonsymm.c examples/bspline.c \ - examples/multimin.c examples/multiminfn.c examples/nmsimplex.c \ - examples/ode-initval-low-level.c -examples_out = examples/blas.out examples/block.out examples/cblas.out examples/cdf.out examples/combination.out examples/multiset.out examples/const.out examples/diff.out examples/integration.out examples/intro.out examples/linalglu.out examples/min.out examples/polyroots.out examples/randpoisson.2.out examples/randpoisson.out examples/rng.out examples/rngunif.2.out examples/rngunif.out examples/sortsmall.out examples/specfun.out examples/specfun_e.out examples/stat.out examples/statsort.out examples/sum.out examples/vectorview.out examples/ecg.dat examples/dwt.dat examples/multimin.out examples/nmsimplex.out -noinst_DATA = $(examples_src) $(examples_out) $(figures) + interpp2.eps bspline.eps robust.eps sparse_poisson.eps \ + interp_compare.eps regularized.eps regularized2.eps \ + multilarge.eps +noinst_DATA = $(figures) EXTRA_DIST = $(man_MANS) $(noinst_DATA) gsl-design.texi fftalgorithms.tex fftalgorithms.bib algorithm.sty algorithmic.sty calc.sty statnotes.tex -all: all-am +all: all-recursive .SUFFIXES: .SUFFIXES: .dvi .html .info .pdf .ps .texi @@ -688,12 +734,105 @@ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir) -tags TAGS: -ctags CTAGS: +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive -cscope cscopelist: +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ @@ -725,25 +864,51 @@ || exit 1; \ fi; \ done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info check-am: all-am -check: check-am +check: check-recursive all-am: Makefile $(INFO_DEPS) $(MANS) $(DATA) -installdirs: +installdirs: installdirs-recursive +installdirs-am: for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -installcheck: installcheck-am +installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ @@ -765,29 +930,29 @@ maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -clean: clean-am +clean: clean-recursive clean-am: clean-aminfo clean-generic clean-libtool mostlyclean-am -distclean: distclean-am +distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic +distclean-am: clean-am distclean-generic distclean-tags -dvi: dvi-am +dvi: dvi-recursive dvi-am: $(DVIS) -html: html-am +html: html-recursive html-am: $(HTMLS) -info: info-am +info: info-recursive info-am: $(INFO_DEPS) install-data-am: install-info-am install-man -install-dvi: install-dvi-am +install-dvi: install-dvi-recursive install-dvi-am: $(DVIS) @$(NORMAL_INSTALL) @@ -806,7 +971,7 @@ done install-exec-am: -install-html: install-html-am +install-html: install-html-recursive install-html-am: $(HTMLS) @$(NORMAL_INSTALL) @@ -833,7 +998,7 @@ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ done; } -install-info: install-info-am +install-info: install-info-recursive install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) @@ -870,7 +1035,7 @@ else : ; fi install-man: install-man1 install-man3 -install-pdf: install-pdf-am +install-pdf: install-pdf-recursive install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) @@ -886,7 +1051,7 @@ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done -install-ps: install-ps-am +install-ps: install-ps-recursive install-ps-am: $(PSS) @$(NORMAL_INSTALL) @@ -904,19 +1069,19 @@ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: -maintainer-clean: maintainer-clean-am +maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti -mostlyclean: mostlyclean-am +mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \ mostlyclean-libtool mostlyclean-vti pdf-am: $(PDFS) -ps: ps-am +ps: ps-recursive ps-am: $(PSS) @@ -925,24 +1090,26 @@ uninstall-man: uninstall-man1 uninstall-man3 -.MAKE: install-am install-strip +.MAKE: $(am__recursive_targets) install-am install-strip -.PHONY: all all-am check check-am clean clean-aminfo clean-generic \ - clean-libtool cscopelist-am ctags-am dist-info distclean \ - distclean-generic distclean-libtool distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-man1 install-man3 \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-aminfo \ - maintainer-clean-generic maintainer-clean-vti mostlyclean \ - mostlyclean-aminfo mostlyclean-generic mostlyclean-libtool \ - mostlyclean-vti pdf pdf-am ps ps-am tags-am uninstall \ - uninstall-am uninstall-dvi-am uninstall-html-am \ - uninstall-info-am uninstall-man uninstall-man1 uninstall-man3 \ - uninstall-pdf-am uninstall-ps-am +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-aminfo clean-generic clean-libtool \ + cscopelist-am ctags ctags-am dist-info distclean \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-man1 \ + install-man3 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-aminfo maintainer-clean-generic \ + maintainer-clean-vti mostlyclean mostlyclean-aminfo \ + mostlyclean-generic mostlyclean-libtool mostlyclean-vti pdf \ + pdf-am ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-dvi-am uninstall-html-am uninstall-info-am \ + uninstall-man uninstall-man1 uninstall-man3 uninstall-pdf-am \ + uninstall-ps-am # pdf disabled, use postscript and ps2pdf diff -Nru gsl-doc-1.16/doc/min.texi gsl-doc-2.3/doc/min.texi --- gsl-doc-1.16/doc/min.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/min.texi 2016-09-15 16:30:25.000000000 +0000 @@ -131,8 +131,8 @@ @section Initializing the Minimizer @deftypefun {gsl_min_fminimizer *} gsl_min_fminimizer_alloc (const gsl_min_fminimizer_type * @var{T}) -@tpindex gsl_min_fminimizer -@tpindex gsl_min_fminimizer_type +@tindex gsl_min_fminimizer +@tindex gsl_min_fminimizer_type This function returns a pointer to a newly allocated instance of a minimizer of type @var{T}. For example, the following code creates an instance of a golden section minimizer, @@ -334,7 +334,7 @@ On each iteration, the algorithm first compares the subintervals from the endpoints to the current minimum. The larger subinterval is divided in a golden section (using the famous ratio @math{(3-\sqrt 5)/2 = -0.3189660}@dots{}) and the value of the function at this new point is +0.3819660}@dots{}) and the value of the function at this new point is calculated. The new value is used with the constraint @math{f(a') > f(x') < f(b')} to a select new interval containing the minimum, by discarding the least useful point. This procedure can be continued @@ -390,7 +390,7 @@ @smallexample $ ./a.out -@verbatiminclude examples/min.out +@verbatiminclude examples/min.txt @end smallexample @node Minimization References and Further Reading diff -Nru gsl-doc-1.16/doc/montecarlo.texi gsl-doc-2.3/doc/montecarlo.texi --- gsl-doc-1.16/doc/montecarlo.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/montecarlo.texi 2015-11-03 16:21:55.000000000 +0000 @@ -195,7 +195,7 @@ @file{gsl_monte_plain.h}. @deftypefun {gsl_monte_plain_state *} gsl_monte_plain_alloc (size_t @var{dim}) -@tpindex gsl_monte_plain_state +@tindex gsl_monte_plain_state This function allocates and initializes a workspace for Monte Carlo integration in @var{dim} dimensions. @end deftypefun @@ -295,7 +295,7 @@ @file{gsl_monte_miser.h}. @deftypefun {gsl_monte_miser_state *} gsl_monte_miser_alloc (size_t @var{dim}) -@tpindex gsl_monte_miser_state +@tindex gsl_monte_miser_state This function allocates and initializes a workspace for Monte Carlo integration in @var{dim} dimensions. The workspace is used to maintain the state of the integration. @@ -485,7 +485,7 @@ @deftypefun {gsl_monte_vegas_state *} gsl_monte_vegas_alloc (size_t @var{dim}) -@tpindex gsl_monte_vegas_state +@tindex gsl_monte_vegas_state This function allocates and initializes a workspace for Monte Carlo integration in @var{dim} dimensions. The workspace is used to maintain the state of the integration. diff -Nru gsl-doc-1.16/doc/multifit-nlinear.texi gsl-doc-2.3/doc/multifit-nlinear.texi --- gsl-doc-1.16/doc/multifit-nlinear.texi 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/multifit-nlinear.texi 2016-11-21 18:05:19.000000000 +0000 @@ -0,0 +1,1963 @@ +@cindex nonlinear least squares +@cindex least squares, nonlinear + +This chapter describes functions for multidimensional nonlinear +least-squares fitting. There are generally two classes of +algorithms for solving nonlinear least squares problems, which +fall under line search methods and trust region methods. +GSL currently implements only trust region methods and +provides the user with +full access to intermediate steps of the iteration. The user +also has the ability to tune a number of parameters which affect +low-level aspects of the algorithm which can help to accelerate +convergence for the specific problem at hand. GSL provides +two separate interfaces for nonlinear least squares fitting. The +first is designed for small to moderate sized problems, and the +second is designed for very large problems, which may or may not +have significant sparse structure. + +The header file @file{gsl_multifit_nlinear.h} contains prototypes for the +multidimensional nonlinear fitting functions and related declarations +relating to the small to moderate sized systems. + +The header file @file{gsl_multilarge_nlinear.h} contains prototypes for the +multidimensional nonlinear fitting functions and related declarations +relating to large systems. + +@menu +* Nonlinear Least-Squares Overview:: +* Nonlinear Least-Squares TRS Overview:: +* Nonlinear Least-Squares Weighted Overview:: +* Nonlinear Least-Squares Tunable Parameters:: +* Nonlinear Least-Squares Initialization:: +* Nonlinear Least-Squares Function Definition:: +* Nonlinear Least-Squares Iteration:: +* Nonlinear Least-Squares Testing for Convergence:: +* Nonlinear Least-Squares High Level Driver:: +* Nonlinear Least-Squares Covariance Matrix:: +* Nonlinear Least-Squares Troubleshooting:: +* Nonlinear Least-Squares Examples:: +* Nonlinear Least-Squares References and Further Reading:: +@end menu + +@node Nonlinear Least-Squares Overview +@section Overview +@cindex nonlinear least squares, overview + +The problem of multidimensional nonlinear least-squares fitting requires +the minimization of the squared residuals of @math{n} functions, +@math{f_i}, in @math{p} parameters, @math{x_i}, +@tex +\beforedisplay +$$ +\Phi(x) = {1 \over 2} || f(x) ||^2 + = {1 \over 2} \sum_{i=1}^{n} f_i (x_1, \dots, x_p)^2 +$$ +\afterdisplay +@end tex +@ifinfo + +@example +\Phi(x) = (1/2) || f(x) ||^2 + = (1/2) \sum_@{i=1@}^@{n@} f_i(x_1, ..., x_p)^2 +@end example + +@end ifinfo +@noindent +In trust region methods, the objective (or cost) function @math{\Phi(x)} is approximated +by a model function @math{m_k(\delta)} in the vicinity of some point @math{x_k}. The +model function is often simply a second order Taylor series expansion around the +point @math{x_k}, ie: +@tex +\beforedisplay +$$ +\Phi(x_k + \delta) \approx m_k(\delta) = \Phi(x_k) + g_k^T \delta + {1 \over 2} \delta^T B_k \delta +$$ +\afterdisplay +@end tex +@ifinfo + +@example +\Phi(x_k + \delta) ~=~ m_k(\delta) = \Phi(x_k) + g_k^T \delta + 1/2 \delta^T B_k \delta +@end example + +@end ifinfo +where @math{g_k = \nabla \Phi(x_k) = J^T f} is the gradient vector at the point @math{x_k}, +@math{B_k = \nabla^2 \Phi(x_k)} is the Hessian matrix at @math{x_k}, or some +approximation to it, and @math{J} is the @math{n}-by-@math{p} Jacobian matrix +@c{$J_{ij} = \partial f_i / \partial x_j$} +@math{J_@{ij@} = d f_i / d x_j}. +In order to find the next step @math{\delta}, we minimize the model function +@math{m_k(\delta)}, but search for solutions only within a region where +we trust that @math{m_k(\delta)} is a good approximation to the objective +function @math{\Phi(x_k + \delta)}. In other words, +we seek a solution of the trust region subproblem (TRS) +@tex +\beforedisplay +$$ +\min_{\delta \in R^p} m_k(\delta) = \Phi(x_k) + g_k^T \delta + {1 \over 2} \delta^T B_k \delta, \qquad\hbox{s.t.}\quad || D_k \delta || \le \Delta_k +$$ +\afterdisplay +@end tex +@ifinfo + +@example +\min_(\delta \in R^p) m_k(\delta), s.t. || D_k \delta || <= \Delta_k +@end example + +@end ifinfo +where @math{\Delta_k > 0} is the trust region radius and @math{D_k} is +a scaling matrix. If @math{D_k = I}, then the trust region is a ball +of radius @math{\Delta_k} centered at @math{x_k}. In some applications, +the parameter vector @math{x} may have widely different scales. For +example, one parameter might be a temperature on the order of +@math{10^3} K, while another might be a length on the order of +@math{10^{-6}} m. In such cases, a spherical trust region may not +be the best choice, since if @math{\Phi} changes rapidly along +directions with one scale, and more slowly along directions with +a different scale, the model function @math{m_k} may be a poor +approximation to @math{\Phi} along the rapidly changing directions. +In such problems, it may be best to use an elliptical trust region, +by setting @math{D_k} to a diagonal matrix whose entries are designed +so that the scaled step @math{D_k \delta} has entries of approximately the same +order of magnitude. + +The trust region subproblem above normally amounts to solving a +linear least squares system (or multiple systems) for the step +@math{\delta}. Once @math{\delta} is computed, it is checked whether +or not it reduces the objective function @math{\Phi(x)}. A useful +statistic for this is to look at the ratio +@tex +\beforedisplay +$$ +\rho_k = { \Phi(x_k) - \Phi(x_k + \delta_k) \over m_k(0) - m_k(\delta_k) } +$$ +\afterdisplay +@end tex +@ifinfo + +@example +\rho_k = ( \Phi(x_k) - \Phi(x_k + \delta_k) / ( m_k(0) - m_k(\delta_k) ) +@end example + +@end ifinfo +where the numerator is the actual reduction of the objective function +due to the step @math{\delta_k}, and the denominator is the predicted +reduction due to the model @math{m_k}. If @math{\rho_k} is negative, +it means that the step @math{\delta_k} increased the objective function +and so it is rejected. If @math{\rho_k} is positive, +then we have found a step which reduced the objective function and +it is accepted. Furthermore, if @math{\rho_k} is close to 1, +then this indicates that the model function is a good approximation +to the objective function in the trust region, and so on the next +iteration the trust region is enlarged in order to take more ambitious +steps. When a step is rejected, the trust region is made smaller and +the TRS is solved again. An outline for the general trust region method +used by GSL can now be given. + +@noindent +@b{Trust Region Algorithm} +@enumerate + +@item Initialize: given @math{x_0}, construct @math{m_0(\delta)}, @math{D_0} and @math{\Delta_0 > 0} + +@item For k = 0, 1, 2, ... + +@enumerate a + +@item If converged, then stop + +@item Solve TRS for trial step @math{\delta_k} + +@item Evaluate trial step by computing @math{\rho_k} + +@enumerate +@item if step is accepted, set @math{x_{k+1} = x_k + \delta_k} and increase radius, @math{\Delta_{k+1} = \alpha \Delta_k} +@item if step is rejected, set @math{x_{k+1} = x_k} and decrease radius, @math{\Delta_{k+1} = {\Delta_k \over \beta}}; goto 2(b) +@end enumerate + +@item Construct @math{m_{k+1}(\delta)} and @math{D_{k+1}} + +@end enumerate + +@end enumerate + +@noindent +GSL offers the user a number of different algorithms for solving the trust +region subproblem in 2(b), as well as different choices of scaling matrices +@math{D_k} and different methods of updating the trust region radius +@math{\Delta_k}. Therefore, while reasonable default methods are provided, +the user has a lot of control to fine-tune the various steps of the +algorithm for their specific problem. + +@node Nonlinear Least-Squares TRS Overview +@section Solving the Trust Region Subproblem (TRS) + +@menu +* Nonlinear Least-Squares TRS Levenberg-Marquardt:: +* Nonlinear Least-Squares TRS Levenberg-Marquardt with Geodesic Acceleration:: +* Nonlinear Least-Squares TRS Dogleg:: +* Nonlinear Least-Squares TRS Double Dogleg:: +* Nonlinear Least-Squares TRS 2D Subspace:: +* Nonlinear Least-Squares TRS Steihaug-Toint Conjugate Gradient:: +@end menu + +Below we describe the methods available for solving the trust region +subproblem. The methods available provide either exact or approximate +solutions to the trust region subproblem. In all algorithms below, +the Hessian matrix @math{B_k} is approximated as @math{B_k \approx J_k^T J_k}, +where @math{J_k = J(x_k)}. In all methods, the solution of the TRS +involves solving a linear least squares system involving the Jacobian +matrix. For small to moderate sized problems (@code{gsl_multifit_nlinear} interface), +this is accomplished by factoring the full Jacobian matrix, which is provided +by the user, with the Cholesky, QR, or SVD decompositions. For large systems +(@code{gsl_multilarge_nlinear} interface), the user has two choices. One +is to solve the system iteratively, without needing to store the full +Jacobian matrix in memory. With this method, the user must provide a routine +to calculate the matrix-vector products @math{J u} or @math{J^T u} for a given vector @math{u}. +This iterative method is particularly useful for systems where the Jacobian has +sparse structure, since forming matrix-vector products can be done cheaply. The +second option for large systems involves forming the normal equations matrix +@math{J^T J} and then factoring it using a Cholesky decomposition. The normal +equations matrix is @math{p}-by-@math{p}, typically much smaller than the full +@math{n}-by-@math{p} Jacobian, and can usually be stored in memory even if the full +Jacobian matrix cannot. This option is useful for large, dense systems, or if the +iterative method has difficulty converging. + +@node Nonlinear Least-Squares TRS Levenberg-Marquardt +@subsection Levenberg-Marquardt +@cindex Levenberg-Marquardt algorithm +@cindex nonlinear least squares, levenberg-marquardt + +There is a theorem which states that if @math{\delta_k} is a solution +to the trust region subproblem given above, then there exists +@math{\mu_k \ge 0} such that +@tex +\beforedisplay +$$ +\left( B_k + \mu_k D_k^T D_k \right) \delta_k = -g_k +$$ +\afterdisplay +@end tex +@ifinfo + +@example +( B_k + \mu_k D_k^T D_k ) \delta_k = -g_k +@end example + +@end ifinfo +with @math{\mu_k (\Delta_k - ||D_k \delta_k||) = 0}. This +forms the basis of the Levenberg-Marquardt algorithm, which controls +the trust region size by adjusting the parameter @math{\mu_k} +rather than the radius @math{\Delta_k} directly. For each radius +@math{\Delta_k}, there is a unique parameter @math{\mu_k} which +solves the TRS, and they have an inverse relationship, so that large values of +@math{\mu_k} correspond to smaller trust regions, while small +values of @math{\mu_k} correspond to larger trust regions. + +@noindent +With the approximation @math{B_k \approx J_k^T J_k}, on each iteration, +in order to calculate the step @math{\delta_k}, +the following linear least squares problem is solved: +@tex +\beforedisplay +$$ +\left[ +\matrix{ +J_k \cr +\sqrt{\mu_k} D_k +} +\right] +\delta_k = +- +\left[ +\matrix{ +f_k \cr +0 +} +\right] +$$ +\afterdisplay +@end tex +@ifinfo + +@example +[J_k; sqrt(mu_k) D_k] \delta_k = - [f_k; 0] +@end example + +@end ifinfo +@noindent +If the step @math{\delta_k} is accepted, then +@math{\mu_k} is decreased on the next iteration in order +to take a larger step, otherwise it is increased to take +a smaller step. The Levenberg-Marquardt algorithm provides +an exact solution of the trust region subproblem, but +typically has a higher computational cost per iteration +than the approximate methods discussed below, since it +may need to solve the least squares system above several +times for different values of @math{\mu_k}. + +@node Nonlinear Least-Squares TRS Levenberg-Marquardt with Geodesic Acceleration +@subsection Levenberg-Marquardt with Geodesic Acceleration +@cindex Levenberg-Marquardt algorithm, geodesic acceleration +@cindex nonlinear least squares, levenberg-marquardt, geodesic acceleration + +This method applies a so-called geodesic acceleration correction to +the standard Levenberg-Marquardt step @math{\delta_k} (Transtrum et al, 2011). +By interpreting @math{\delta_k} as a first order step along a geodesic in the +model parameter space (ie: a velocity @math{\delta_k = v_k}), the geodesic +acceleration @math{a_k} is a second order correction along the +geodesic which is determined by solving the linear least squares system +@tex +\beforedisplay +$$ +\left[ +\matrix{ +J_k \cr +\sqrt{\mu_k} D_k +} +\right] +a_k = +- +\left[ +\matrix{ +f_{vv}(x_k) \cr +0 +} +\right] +$$ +\afterdisplay +@end tex +@ifinfo + +@example +[J_k; sqrt(mu_k) D_k] a_k = - [f_vv(x_k); 0] +@end example + +@end ifinfo +@noindent +where @math{f_{vv}} is the second directional derivative of +the residual vector in the velocity direction @math{v}, +@math{f_{vv}(x) = D_v^2 f = \sum_{\alpha\beta} v_{\alpha} v_{\beta} \partial_{\alpha} \partial_{\beta} f(x)}, +where @math{\alpha} and @math{\beta} are summed over the @math{p} +parameters. The new total step is then @math{\delta_k' = v_k + {1 \over 2}a_k}. +The second order correction @math{a_k} can be calculated with a modest additional +cost, and has been shown to dramatically reduce the number of iterations +(and expensive Jacobian evaluations) required to reach convergence on a variety +of different problems. In order to utilize the geodesic acceleration, the user must supply a +function which provides the second directional derivative vector +@math{f_{vv}(x)}, or alternatively the library can use a finite +difference method to estimate this vector with one additional function +evaluation of @math{f(x + h v)} where @math{h} is a tunable step size +(see the @code{h_fvv} parameter description). + +@node Nonlinear Least-Squares TRS Dogleg +@subsection Dogleg +@cindex Dogleg algorithm +@cindex nonlinear least squares, dogleg + +This is Powell's dogleg method, which finds an approximate +solution to the trust region subproblem, by restricting +its search to a piecewise linear ``dogleg'' path, +composed of the origin, the Cauchy point which represents +the model minimizer along the steepest descent direction, +and the Gauss-Newton point, which is the overall minimizer +of the unconstrained model. The Gauss-Newton step is calculated by +solving +@tex +\beforedisplay +$$ +J_k \delta_{gn} = -f_k +$$ +\afterdisplay +@end tex +@ifinfo + +@example +J_k \delta_gn = -f_k +@end example + +@end ifinfo +which is the main computational task for each iteration, +but only needs to be performed once per iteration. If +the Gauss-Newton point is inside the trust region, it is +selected as the step. If it is outside, the method then +calculates the Cauchy point, which is located along the +gradient direction. If the Cauchy point is also outside +the trust region, the method assumes that it is still far +from the minimum and so proceeds along the gradient +direction, truncating the step at the trust region +boundary. If the Cauchy point is inside the trust region, +with the Gauss-Newton point outside, the method +uses a dogleg step, which is a linear combination of the +gradient direction and the Gauss-Newton direction, stopping at the trust +region boundary. + +@node Nonlinear Least-Squares TRS Double Dogleg +@subsection Double Dogleg +@cindex double Dogleg algorithm +@cindex Dogleg algorithm, double +@cindex nonlinear least squares, double dogleg + +This method is an improvement over the classical dogleg +algorithm, which attempts to include information about +the Gauss-Newton step while the iteration is still far from +the minimum. When the Cauchy point is inside the trust region +and the Gauss-Newton point is outside, the method computes +a scaled Gauss-Newton point and then takes a dogleg step +between the Cauchy point and the scaled Gauss-Newton point. +The scaling is calculated to ensure that the reduction +in the model @math{m_k} is about the same as the reduction +provided by the Cauchy point. + +@node Nonlinear Least-Squares TRS 2D Subspace +@subsection Two Dimensional Subspace + +The dogleg methods restrict the search for the TRS solution +to a 1D curve defined by the Cauchy and Gauss-Newton points. +An improvement to this is to search for a solution using +the full two dimensional subspace spanned by the Cauchy +and Gauss-Newton directions. The dogleg path is of course +inside this subspace, and so this method solves the TRS +at least as accurately as the dogleg methods. Since this +method searches a larger subspace for a solution, it can +converge more quickly than dogleg on some problems. Because +the subspace is only two dimensional, this method is +very efficient and the main computation per iteration is +to determine the Gauss-Newton point. + +@node Nonlinear Least-Squares TRS Steihaug-Toint Conjugate Gradient +@subsection Steihaug-Toint Conjugate Gradient + +One difficulty of the dogleg methods is calculating the +Gauss-Newton step when the Jacobian matrix is singular. The +Steihaug-Toint method also computes a generalized dogleg +step, but avoids solving for the Gauss-Newton step directly, +instead using an iterative conjugate gradient algorithm. This +method performs well at points where the Jacobian is singular, +and is also suitable for large-scale problems where factoring +the Jacobian matrix could be prohibitively expensive. + +@node Nonlinear Least-Squares Weighted Overview +@section Weighted Nonlinear Least-Squares + +Weighted nonlinear least-squares fitting minimizes the function +@tex +\beforedisplay +$$ +\Phi(x) = {1 \over 2} || f ||_W^2 + = {1 \over 2} \sum_{i=1}^{n} w_i f_i (x_1, \dots, x_p)^2 +$$ +\afterdisplay +@end tex +@ifinfo + +@example +\Phi(x) = (1/2) || f(x) ||_W^2 + = (1/2) \sum_@{i=1@}^@{n@} f_i(x_1, ..., x_p)^2 +@end example + +@end ifinfo +where @math{W = diag(w_1,w_2,...,w_n)} is the weighting matrix, +and @math{||f||_W^2 = f^T W f}. +The weights @math{w_i} are commonly defined as @math{w_i = 1/\sigma_i^2}, +where @math{\sigma_i} is the error in the @math{i}th measurement. +A simple change of variables @math{\tilde{f} = W^{1 \over 2} f} yields +@math{\Phi(x) = {1 \over 2} ||\tilde{f}||^2}, which is in the +same form as the unweighted case. The user can either perform this +transform directly on their function residuals and Jacobian, or use +the @code{gsl_multifit_nlinear_winit} interface which automatically +performs the correct scaling. To manually perform this transformation, +the residuals and Jacobian should be modified according to +@tex +\beforedisplay +$$ +\eqalign{ +\tilde{f}_i & = \sqrt{w_i} f_i = {f_i \over \sigma_i} \cr +\tilde{J}_{ij} & = \sqrt{w_i} { \partial f_i \over \partial x_j } = { 1 \over \sigma_i} { \partial f_i \over \partial x_j } +} +$$ +\afterdisplay +@end tex +@ifinfo + +@example +f~_i = f_i / \sigma_i +J~_ij = 1 / \sigma_i df_i/dx_j +@end example + +@end ifinfo + +@noindent +For large systems, the user must perform their own weighting. + +@node Nonlinear Least-Squares Tunable Parameters +@section Tunable Parameters + +@noindent +The user can tune nearly all aspects of the iteration at allocation +time. For the @code{gsl_multifit_nlinear} interface, the user may +modify the @code{gsl_multifit_nlinear_parameters} structure, which is +defined as follows: + +@example +typedef struct +@{ + const gsl_multifit_nlinear_trs *trs; /* trust region subproblem method */ + const gsl_multifit_nlinear_scale *scale; /* scaling method */ + const gsl_multifit_nlinear_solver *solver; /* solver method */ + gsl_multifit_nlinear_fdtype fdtype; /* finite difference method */ + double factor_up; /* factor for increasing trust radius */ + double factor_down; /* factor for decreasing trust radius */ + double avmax; /* max allowed |a|/|v| */ + double h_df; /* step size for finite difference Jacobian */ + double h_fvv; /* step size for finite difference fvv */ +@} gsl_multifit_nlinear_parameters; +@end example + +@noindent +For the @code{gsl_multilarge_nlinear} interface, the user may +modify the @code{gsl_multilarge_nlinear_parameters} structure, which is +defined as follows: + +@example +typedef struct +@{ + const gsl_multilarge_nlinear_trs *trs; /* trust region subproblem method */ + const gsl_multilarge_nlinear_scale *scale; /* scaling method */ + const gsl_multilarge_nlinear_solver *solver; /* solver method */ + gsl_multilarge_nlinear_fdtype fdtype; /* finite difference method */ + double factor_up; /* factor for increasing trust radius */ + double factor_down; /* factor for decreasing trust radius */ + double avmax; /* max allowed |a|/|v| */ + double h_df; /* step size for finite difference Jacobian */ + double h_fvv; /* step size for finite difference fvv */ + size_t max_iter; /* maximum iterations for trs method */ + double tol; /* tolerance for solving trs */ +@} gsl_multilarge_nlinear_parameters; +@end example + +@noindent +Each of these parameters is discussed in further detail below. + +@deftypevr {Parameter} {const gsl_multifit_nlinear_trs *} trs +@deftypevrx {Parameter} {const gsl_multilarge_nlinear_trs *} trs + +This parameter determines the method used to solve the trust region +subproblem, and may be selected from the following choices, + +@defvr {Default} gsl_multifit_nlinear_trs_lm +@defvrx {Default} gsl_multilarge_nlinear_trs_lm +This selects the Levenberg-Marquardt algorithm. +@end defvr + +@defvr {Option} gsl_multifit_nlinear_trs_lmaccel +@defvrx {Option} gsl_multilarge_nlinear_trs_lmaccel +This selects the Levenberg-Marquardt algorithm with geodesic +acceleration. +@end defvr + +@defvr {Option} gsl_multifit_nlinear_trs_dogleg +@defvrx {Option} gsl_multilarge_nlinear_trs_dogleg +This selects the dogleg algorithm. +@end defvr + +@defvr {Option} gsl_multifit_nlinear_trs_ddogleg +@defvrx {Option} gsl_multilarge_nlinear_trs_ddogleg +This selects the double dogleg algorithm. +@end defvr + +@defvr {Option} gsl_multifit_nlinear_trs_subspace2D +@defvrx {Option} gsl_multilarge_nlinear_trs_subspace2D +This selects the 2D subspace algorithm. +@end defvr + +@defvr {Option} gsl_multilarge_nlinear_trs_cgst +This selects the Steihaug-Toint conjugate gradient algorithm. This +method is available only for large systems. +@end defvr + +@end deftypevr + +@deftypevr {Parameter} {const gsl_multifit_nlinear_scale *} scale +@deftypevrx {Parameter} {const gsl_multilarge_nlinear_scale *} scale + +This parameter determines the diagonal scaling matrix @math{D} and +may be selected from the following choices, + +@defvr {Default} gsl_multifit_nlinear_scale_more +@defvrx {Default} gsl_multilarge_nlinear_scale_more +This damping strategy was suggested by Mor@'e, and +corresponds to @math{D^T D = } max(diag(@math{J^T J})), +in other words the maximum elements of +diag(@math{J^T J}) encountered thus far in the iteration. +This choice of @math{D} makes the problem scale-invariant, +so that if the model parameters @math{x_i} are each scaled +by an arbitrary constant, @math{\tilde{x}_i = a_i x_i}, then +the sequence of iterates produced by the algorithm would +be unchanged. This method can work very well in cases +where the model parameters have widely different scales +(ie: if some parameters are measured in nanometers, while others +are measured in degrees Kelvin). This strategy has been proven +effective on a large class of problems and so it is the library +default, but it may not be the best choice for all problems. +@end defvr + +@defvr {Option} gsl_multifit_nlinear_scale_levenberg +@defvrx {Option} gsl_multilarge_nlinear_scale_levenberg +This damping strategy was originally suggested by Levenberg, and +corresponds to @math{D^T D = I}. This method has also proven +effective on a large class of problems, but is not scale-invariant. +However, some authors (e.g. Transtrum and Sethna 2012) argue +that this choice is better for problems which are susceptible +to parameter evaporation (ie: parameters go to infinity) +@end defvr + +@defvr {Option} gsl_multifit_nlinear_scale_marquardt +@defvrx {Option} gsl_multilarge_nlinear_scale_marquardt +This damping strategy was suggested by Marquardt, and +corresponds to @math{D^T D = } diag(@math{J^T J}). This +method is scale-invariant, but it is generally considered +inferior to both the Levenberg and Mor@'e strategies, though +may work well on certain classes of problems. +@end defvr + +@end deftypevr + +@deftypevr {Parameter} {const gsl_multifit_nlinear_solver *} solver +@deftypevrx {Parameter} {const gsl_multilarge_nlinear_solver *} solver + +@noindent +Solving the trust region subproblem on each iteration almost always +requires the solution of the following linear least squares system +@tex +\beforedisplay +$$ +\left[ +\matrix{ +J \cr +\sqrt{\mu} D +} +\right] +\delta = +- +\left[ +\matrix{ +f \cr +0 +} +\right] +$$ +\afterdisplay +@end tex +@ifinfo + +@example +[J; sqrt(mu) D] \delta = - [f; 0] +@end example + +@end ifinfo + +The @var{solver} parameter determines how the system is +solved and can be selected from the following choices: + +@defvr {Default} gsl_multifit_nlinear_solver_qr +This method solves the system using a rank revealing QR +decomposition of the Jacobian @math{J}. This method will +produce reliable solutions in cases where the Jacobian +is rank deficient or near-singular but does require about +twice as many operations as the Cholesky method discussed +below. +@end defvr + +@defvr {Option} gsl_multifit_nlinear_solver_cholesky +@defvrx {Default} gsl_multilarge_nlinear_solver_cholesky +This method solves the alternate normal equations problem +@tex +\beforedisplay +$$ +\left( J^T J + \mu D^T D \right) \delta = -J^T f +$$ +\afterdisplay +@end tex +@ifinfo + +@example +( J^T J + \mu D^T D ) \delta = -J^T f +@end example + +@end ifinfo + +by using a Cholesky decomposition of the matrix +@math{J^T J + \mu D^T D}. This method is faster than the +QR approach, however it is susceptible to numerical instabilities +if the Jacobian matrix is rank deficient or near-singular. In +these cases, an attempt is made to reduce the condition number +of the matrix using Jacobi preconditioning, but for highly +ill-conditioned problems the QR approach is better. If it is +known that the Jacobian matrix is well conditioned, this method +is accurate and will perform faster than the QR approach. +@end defvr + +@defvr {Option} gsl_multifit_nlinear_solver_svd +This method solves the system using a singular value +decomposition of the Jacobian @math{J}. This method will +produce the most reliable solutions for ill-conditioned Jacobians +but is also the slowest solver method. +@end defvr + +@end deftypevr + +@deftypevr {Parameter} {gsl_multifit_nlinear_fdtype} fdtype + +This parameter specifies whether to use forward or centered +differences when approximating the Jacobian. This is only +used when an analytic Jacobian is not provided to the solver. +This parameter may be set to one of the following choices. + +@defvr {Default} GSL_MULTIFIT_NLINEAR_FWDIFF +This specifies a forward finite difference to approximate +the Jacobian matrix. The Jacobian matrix will be calculated as +@tex +\beforedisplay +$$ +J_{ij} = {1 \over \Delta_j} \left( f_i(x + \Delta_j e_j) - f_i(x) \right) +$$ +\afterdisplay +@end tex +@ifinfo + +@example +J_ij = 1 / \Delta_j ( f_i(x + \Delta_j e_j) - f_i(x) ) +@end example + +@end ifinfo +where @math{\Delta_j = h |x_j|} and @math{e_j} is the standard +@math{j}th Cartesian unit basis vector so that +@math{x + \Delta_j e_j} represents a small (forward) perturbation of +the @math{j}th parameter by an amount @math{\Delta_j}. The perturbation +@math{\Delta_j} is proportional to the current value @math{|x_j|} which +helps to calculate an accurate Jacobian when the various parameters have +different scale sizes. The value of @math{h} is specified by the @code{h_df} +parameter. The accuracy of this method is @math{O(h)}, and evaluating this +matrix requires an additional @math{p} function evaluations. +@end defvr + +@defvr {Option} GSL_MULTIFIT_NLINEAR_CTRDIFF +This specifies a centered finite difference to approximate +the Jacobian matrix. The Jacobian matrix will be calculated as +@tex +\beforedisplay +$$ +J_{ij} = {1 \over \Delta_j} \left( f_i(x + {1 \over 2} \Delta_j e_j) - f_i(x - {1 \over 2} \Delta_j e_j) \right) +$$ +\afterdisplay +@end tex +@ifinfo + +@example +J_ij = 1 / \Delta_j ( f_i(x + 1/2 \Delta_j e_j) - f_i(x - 1/2 \Delta_j e_j) ) +@end example + +@end ifinfo +See above for a description of @math{\Delta_j}. The accuracy of this +method is @math{O(h^2)}, but evaluating this +matrix requires an additional @math{2p} function evaluations. +@end defvr + +@end deftypevr + +@deftypevr {Parameter} {double} factor_up + +When a step is accepted, the trust region radius will be increased +by this factor. The default value is @math{3}. + +@end deftypevr + +@deftypevr {Parameter} {double} factor_down + +When a step is rejected, the trust region radius will be decreased +by this factor. The default value is @math{2}. + +@end deftypevr + +@deftypevr {Parameter} {double} avmax + +When using geodesic acceleration to solve a nonlinear least squares problem, +an important parameter to monitor is the ratio of the acceleration term +to the velocity term, +@tex +\beforedisplay +$$ +{ ||a|| \over ||v|| } +$$ +\afterdisplay +@end tex +@ifinfo + +@example +|a| / |v| +@end example + +@end ifinfo + +If this ratio is small, it means the acceleration correction +is contributing very little to the step. This could be because +the problem is not ``nonlinear'' enough to benefit from +the acceleration. If the ratio is large (@math{> 1}) it +means that the acceleration is larger than the velocity, +which shouldn't happen since the step represents a truncated +series and so the second order term @math{a} should be smaller than +the first order term @math{v} to guarantee convergence. +Therefore any steps with a ratio larger than the parameter +@var{avmax} are rejected. @var{avmax} is set to 0.75 by default. +For problems which experience difficulty converging, this threshold +could be lowered. + +@end deftypevr + +@deftypevr {Parameter} {double} h_df + +This parameter specifies the step size for approximating the +Jacobian matrix with finite differences. It is set to +@math{\sqrt{\epsilon}} by default, where @math{\epsilon} +is @code{GSL_DBL_EPSILON}. + +@end deftypevr + +@deftypevr {Parameter} {double} h_fvv + +When using geodesic acceleration, the user must either supply +a function to calculate @math{f_{vv}(x)} or the library +can estimate this second directional derivative using a finite +difference method. When using finite differences, the library +must calculate @math{f(x + h v)} where @math{h} represents +a small step in the velocity direction. The parameter +@var{h_fvv} defines this step size and is set to 0.02 by +default. + +@end deftypevr + +@node Nonlinear Least-Squares Initialization +@section Initializing the Solver + +@deftypefun {gsl_multifit_nlinear_workspace *} gsl_multifit_nlinear_alloc (const gsl_multifit_nlinear_type * @var{T}, const gsl_multifit_nlinear_parameters * @var{params}, const size_t @var{n}, const size_t @var{p}) +@deftypefunx {gsl_multilarge_nlinear_workspace *} gsl_multilarge_nlinear_alloc (const gsl_multilarge_nlinear_type * @var{T}, const gsl_multilarge_nlinear_parameters * @var{params}, const size_t @var{n}, const size_t @var{p}) +@tindex gsl_multifit_nlinear_alloc +@tindex gsl_multifit_nlinear_type +These functions return a pointer to a newly allocated instance of a +derivative solver of type @var{T} for @var{n} observations and @var{p} +parameters. The @var{params} input specifies a tunable set of +parameters which will affect important details in each iteration +of the trust region subproblem algorithm. It is recommended to start +with the suggested default parameters (see +@code{gsl_multifit_nlinear_default_parameters} and +@code{gsl_multilarge_nlinear_default_parameters}) and then tune +the parameters once the code is working correctly. See +@ref{Nonlinear Least-Squares Tunable Parameters} +for descriptions of the various parameters. +For example, the following code creates an instance of a +Levenberg-Marquardt solver for 100 data points and 3 parameters, +using suggested defaults: + +@example +const gsl_multifit_nlinear_type * T + = gsl_multifit_nlinear_lm; +gsl_multifit_nlinear_parameters params + = gsl_multifit_nlinear_default_parameters(); +gsl_multifit_nlinear_workspace * w + = gsl_multifit_nlinear_alloc (T, ¶ms, 100, 3); +@end example + +@noindent +The number of observations @var{n} must be greater than or equal to +parameters @var{p}. + +If there is insufficient memory to create the solver then the function +returns a null pointer and the error handler is invoked with an error +code of @code{GSL_ENOMEM}. +@end deftypefun + +@deftypefun gsl_multifit_nlinear_parameters gsl_multifit_nlinear_default_parameters (void) +@deftypefunx gsl_multilarge_nlinear_parameters gsl_multilarge_nlinear_default_parameters (void) +These functions return a set of recommended default parameters +for use in solving nonlinear least squares problems. The user +can tune each parameter to improve the performance on their +particular problem, see +@ref{Nonlinear Least-Squares Tunable Parameters}. +@end deftypefun + +@deftypefun int gsl_multifit_nlinear_init (const gsl_vector * @var{x}, gsl_multifit_nlinear_fdf * @var{fdf}, gsl_multifit_nlinear_workspace * @var{w}) +@deftypefunx int gsl_multifit_nlinear_winit (const gsl_vector * @var{x}, const gsl_vector * @var{wts}, gsl_multifit_nlinear_fdf * @var{fdf}, gsl_multifit_nlinear_workspace * @var{w}) +@deftypefunx int gsl_multilarge_nlinear_init (const gsl_vector * @var{x}, gsl_multilarge_nlinear_fdf * @var{fdf}, gsl_multilarge_nlinear_workspace * @var{w}) +@deftypefunx int gsl_multilarge_nlinear_winit (const gsl_vector * @var{x}, const gsl_vector * @var{wts}, gsl_multilarge_nlinear_fdf * @var{fdf}, gsl_multilarge_nlinear_workspace * @var{w}) +These functions initialize, or reinitialize, an existing workspace @var{w} +to use the system @var{fdf} and the initial guess +@var{x}. See @ref{Nonlinear Least-Squares Function Definition} +for a description of the @var{fdf} structure. + +Optionally, a weight vector @var{wts} can be given to perform +a weighted nonlinear regression. Here, the weighting matrix is +@math{W = diag(w_1,w_2,...,w_n)}. +@end deftypefun + +@deftypefun void gsl_multifit_nlinear_free (gsl_multifit_nlinear_workspace * @var{w}) +@deftypefunx void gsl_multilarge_nlinear_free (gsl_multilarge_nlinear_workspace * @var{w}) +These functions free all the memory associated with the workspace @var{w}. +@end deftypefun + +@deftypefun {const char *} gsl_multifit_nlinear_name (const gsl_multifit_nlinear_workspace * @var{w}) +@deftypefunx {const char *} gsl_multilarge_nlinear_name (const gsl_multilarge_nlinear_workspace * @var{w}) +These functions return a pointer to the name of the solver. For example, + +@example +printf ("w is a '%s' solver\n", + gsl_multifit_nlinear_name (w)); +@end example + +@noindent +would print something like @code{w is a 'trust-region' solver}. +@end deftypefun + +@deftypefun {const char *} gsl_multifit_nlinear_trs_name (const gsl_multifit_nlinear_workspace * @var{w}) +@deftypefunx {const char *} gsl_multilarge_nlinear_trs_name (const gsl_multilarge_nlinear_workspace * @var{w}) +These functions return a pointer to the name of the trust region subproblem +method. For example, + +@example +printf ("w is a '%s' solver\n", + gsl_multifit_nlinear_trs_name (w)); +@end example + +@noindent +would print something like @code{w is a 'levenberg-marquardt' solver}. +@end deftypefun + +@node Nonlinear Least-Squares Function Definition +@section Providing the Function to be Minimized + +The user must provide @math{n} functions of @math{p} variables for the +minimization algorithm to operate on. In order to allow for +arbitrary parameters the functions are defined by the following data +types: + +@deftp {Data Type} gsl_multifit_nlinear_fdf +This data type defines a general system of functions with arbitrary parameters, +the corresponding Jacobian matrix of derivatives, and optionally the +second directional derivative of the functions for geodesic acceleration. + +@table @code +@item int (* f) (const gsl_vector * @var{x}, void * @var{params}, gsl_vector * @var{f}) +This function should store the @math{n} components of the vector +@c{$f(x)$} +@math{f(x)} in @var{f} for argument @var{x} and arbitrary parameters @var{params}, +returning an appropriate error code if the function cannot be computed. + +@item int (* df) (const gsl_vector * @var{x}, void * @var{params}, gsl_matrix * @var{J}) +This function should store the @var{n}-by-@var{p} matrix result +@c{$J_{ij} = \partial f_i(x) / \partial x_j$} +@math{J_ij = d f_i(x) / d x_j} in @var{J} for argument @var{x} +and arbitrary parameters @var{params}, returning an appropriate error code if the +matrix cannot be computed. If an analytic Jacobian is unavailable, or too expensive +to compute, this function pointer may be set to NULL, in which +case the Jacobian will be internally computed using finite difference approximations +of the function @var{f}. + +@item int (* fvv) (const gsl_vector * @var{x}, const gsl_vector * @var{v}, void * @var{params}, gsl_vector * @var{fvv}) +When geodesic acceleration is enabled, this function should store the +@math{n} components of the vector +@math{f_{vv}(x) = \sum_{\alpha\beta} v_{\alpha} v_{\beta} {\partial \over \partial x_{\alpha}} {\partial \over \partial x_{\beta}} f(x)}, +representing second directional derivatives of the function to be minimized, +into the output @var{fvv}. The parameter vector is provided in @var{x} and +the velocity vector is provided in @var{v}, both of which have @math{p} +components. The arbitrary parameters are given in @var{params}. If +analytic expressions for @math{f_{vv}(x)} are unavailable or too difficult +to compute, this function pointer may be set to NULL, in which case +@math{f_{vv}(x)} will be computed internally using a finite difference +approximation. + +@item size_t n +the number of functions, i.e. the number of components of the +vector @var{f}. + +@item size_t p +the number of independent variables, i.e. the number of components of +the vector @var{x}. + +@item void * params +a pointer to the arbitrary parameters of the function. + +@item size_t nevalf +This does not need to be set by the user. It counts the number of +function evaluations and is initialized by the @code{_init} function. + +@item size_t nevaldf +This does not need to be set by the user. It counts the number of +Jacobian evaluations and is initialized by the @code{_init} function. + +@item size_t nevalfvv +This does not need to be set by the user. It counts the number of +@math{f_{vv}(x)} evaluations and is initialized by the @code{_init} function. +@end table +@end deftp + +@deftp {Data Type} gsl_multilarge_nlinear_fdf +This data type defines a general system of functions with arbitrary parameters, +a function to compute @math{J u} or @math{J^T u} for a given vector @math{u}, +the normal equations matrix @math{J^T J}, +and optionally the second directional derivative of the functions for geodesic acceleration. + +@table @code +@item int (* f) (const gsl_vector * @var{x}, void * @var{params}, gsl_vector * @var{f}) +This function should store the @math{n} components of the vector +@c{$f(x)$} +@math{f(x)} in @var{f} for argument @var{x} and arbitrary parameters @var{params}, +returning an appropriate error code if the function cannot be computed. + +@item int (* df) (CBLAS_TRANSPOSE_t @var{TransJ}, const gsl_vector * @var{x}, const gsl_vector * @var{u}, void * @var{params}, gsl_vector * @var{v}, gsl_matrix * @var{JTJ}) +If @var{TransJ} is equal to @code{CblasNoTrans}, then this function should +compute the matrix-vector product @math{J u} and store the result in @var{v}. +If @var{TransJ} is equal to @code{CblasTrans}, then this function should +compute the matrix-vector product @math{J^T u} and store the result in @var{v}. +Additionally, the normal equations matrix @math{J^T J} should be stored in the +lower half of @var{JTJ}. The input matrix @var{JTJ} could be set to NULL, +for example by iterative methods which do not require this matrix, so the user +should check for this prior to constructing the matrix. +The input @var{params} contains the arbitrary parameters. + +@item int (* fvv) (const gsl_vector * @var{x}, const gsl_vector * @var{v}, void * @var{params}, gsl_vector * @var{fvv}) +When geodesic acceleration is enabled, this function should store the +@math{n} components of the vector +@math{f_{vv}(x) = \sum_{\alpha\beta} v_{\alpha} v_{\beta} {\partial \over \partial x_{\alpha}} {\partial \over \partial x_{\beta}} f(x)}, +representing second directional derivatives of the function to be minimized, +into the output @var{fvv}. The parameter vector is provided in @var{x} and +the velocity vector is provided in @var{v}, both of which have @math{p} +components. The arbitrary parameters are given in @var{params}. If +analytic expressions for @math{f_{vv}(x)} are unavailable or too difficult +to compute, this function pointer may be set to NULL, in which case +@math{f_{vv}(x)} will be computed internally using a finite difference +approximation. + +@item size_t n +the number of functions, i.e. the number of components of the +vector @var{f}. + +@item size_t p +the number of independent variables, i.e. the number of components of +the vector @var{x}. + +@item void * params +a pointer to the arbitrary parameters of the function. + +@item size_t nevalf +This does not need to be set by the user. It counts the number of +function evaluations and is initialized by the @code{_init} function. + +@item size_t nevaldfu +This does not need to be set by the user. It counts the number of +Jacobian matrix-vector evaluations (@math{J u} or @math{J^T u}) and +is initialized by the @code{_init} function. + +@item size_t nevaldf2 +This does not need to be set by the user. It counts the number of +@math{J^T J} evaluations and is initialized by the @code{_init} function. + +@item size_t nevalfvv +This does not need to be set by the user. It counts the number of +@math{f_{vv}(x)} evaluations and is initialized by the @code{_init} function. +@end table +@end deftp + +@noindent +Note that when fitting a non-linear model against experimental data, +the data is passed to the functions above using the +@var{params} argument and the trial best-fit parameters through the +@var{x} argument. + +@node Nonlinear Least-Squares Iteration +@section Iteration + +The following functions drive the iteration of each algorithm. Each +function performs one iteration of the trust region method and updates +the state of the solver. + +@deftypefun int gsl_multifit_nlinear_iterate (gsl_multifit_nlinear_workspace * @var{w}) +@deftypefunx int gsl_multilarge_nlinear_iterate (gsl_multilarge_nlinear_workspace * @var{w}) +These functions perform a single iteration of the solver @var{w}. If +the iteration encounters an unexpected problem then an error code will +be returned. The solver workspace maintains a current estimate of the +best-fit parameters at all times. +@end deftypefun + +@noindent +The solver workspace @var{w} contains the following entries, which can +be used to track the progress of the solution: + +@table @code +@item gsl_vector * x +The current position, length @math{p}. + +@item gsl_vector * f +The function residual vector at the current position @math{f(x)}, length +@math{n}. + +@item gsl_matrix * J +The Jacobian matrix at the current position @math{J(x)}, size +@math{n}-by-@math{p} (only for @code{gsl_multifit_nlinear} interface). + +@item gsl_vector * dx +The difference between the current position and the previous position, +i.e. the last step @math{\delta}, taken as a vector, length @math{p}. + +@end table + +@noindent +These quantities can be accessed with the following functions, + +@deftypefun {gsl_vector *} gsl_multifit_nlinear_position (const gsl_multifit_nlinear_workspace * @var{w}) +@deftypefunx {gsl_vector *} gsl_multilarge_nlinear_position (const gsl_multilarge_nlinear_workspace * @var{w}) +These functions return the current position @math{x} (i.e. best-fit +parameters) of the solver @var{w}. +@end deftypefun + +@deftypefun {gsl_vector *} gsl_multifit_nlinear_residual (const gsl_multifit_nlinear_workspace * @var{w}) +@deftypefunx {gsl_vector *} gsl_multilarge_nlinear_residual (const gsl_multilarge_nlinear_workspace * @var{w}) +These functions return the current residual vector @math{f(x)} of the +solver @var{w}. For weighted systems, the residual vector includes the +weighting factor @math{\sqrt{W}}. +@end deftypefun + +@deftypefun {gsl_matrix *} gsl_multifit_nlinear_jac (const gsl_multifit_nlinear_workspace * @var{w}) +This function returns a pointer to the @math{n}-by-@math{p} Jacobian matrix for the +current iteration of the solver @var{w}. This function is available only for the +@code{gsl_multifit_nlinear} interface. +@end deftypefun + +@deftypefun size_t gsl_multifit_nlinear_niter (const gsl_multifit_nlinear_workspace * @var{w}) +@deftypefunx size_t gsl_multilarge_nlinear_niter (const gsl_multilarge_nlinear_workspace * @var{w}) +These functions return the number of iterations performed so far. +The iteration counter is updated on each call to the +@code{_iterate} functions above, and reset to 0 in the +@code{_init} functions. +@end deftypefun + +@deftypefun int gsl_multifit_nlinear_rcond (double * @var{rcond}, const gsl_multifit_nlinear_workspace * @var{w}) +@deftypefunx int gsl_multilarge_nlinear_rcond (double * @var{rcond}, const gsl_multilarge_nlinear_workspace * @var{w}) +This function estimates the reciprocal condition number +of the Jacobian matrix at the current position @math{x} and +stores it in @var{rcond}. The computed value is only an estimate +to give the user a guideline as to the conditioning of their particular +problem. Its calculation is based on which factorization +method is used (Cholesky, QR, or SVD). + +@itemize @bullet + +@item For the Cholesky solver, the matrix @math{J^T J} is factored at each +iteration. Therefore this function will estimate the 1-norm condition number +@math{rcond^2 = 1/(||J^T J||_1 \cdot ||(J^T J)^{-1}||_1)} + +@item For the QR solver, @math{J} is factored as @math{J = Q R} at each +iteration. For simplicity, this function calculates the 1-norm conditioning of +only the @math{R} factor, @math{rcond = 1 / (||R||_1 \cdot ||R^{-1}||_1)}. +This can be computed efficiently since @math{R} is upper triangular. + +@item For the SVD solver, in order to efficiently solve the trust region +subproblem, the matrix which is factored is @math{J D^{-1}}, instead of +@math{J} itself. The resulting singular values are used to provide +the 2-norm reciprocal condition number, as @math{rcond = \sigma_{min} / \sigma_{max}}. +Note that when using Mor@'e scaling, @math{D \ne I} and the resulting +@var{rcond} estimate may be significantly different from the true +@var{rcond} of @math{J} itself. + +@end itemize +@end deftypefun + +@node Nonlinear Least-Squares Testing for Convergence +@section Testing for Convergence +@cindex nonlinear fitting, stopping parameters, convergence + +A minimization procedure should stop when one of the following conditions is +true: + +@itemize @bullet +@item +A minimum has been found to within the user-specified precision. + +@item +A user-specified maximum number of iterations has been reached. + +@item +An error has occurred. +@end itemize + +@noindent +The handling of these conditions is under user control. The functions +below allow the user to test the current estimate of the best-fit +parameters in several standard ways. + +@deftypefun int gsl_multifit_nlinear_test (const double @var{xtol}, const double @var{gtol}, const double @var{ftol}, int * @var{info}, const gsl_multifit_nlinear_workspace * @var{w}) +@deftypefunx int gsl_multilarge_nlinear_test (const double @var{xtol}, const double @var{gtol}, const double @var{ftol}, int * @var{info}, const gsl_multilarge_nlinear_workspace * @var{w}) +These functions test for convergence of the minimization method +using the following criteria: + +@itemize @bullet +@item +Testing for a small step size relative to the current parameter vector +@tex +\beforedisplay +$$ +|\delta_i| \le xtol (|x_i| + xtol) +$$ +\afterdisplay +@end tex +@ifinfo +@example +|\delta_i| <= xtol (|x_i| + xtol) +@end example +@end ifinfo +for each @math{0 <= i < p}. Each element of the step vector @math{\delta} +is tested individually in case the different parameters have widely +different scales. Adding @var{xtol} to @math{|x_i|} helps the test avoid +breaking down in situations where the true solution value @math{x_i = 0}. +If this test succeeds, @var{info} is set to 1 and the function +returns @code{GSL_SUCCESS}. + +A general guideline for selecting the step tolerance is to choose +@math{xtol = 10^{-d}} where @math{d} is the number of accurate +decimal digits desired in the solution @math{x}. See Dennis and +Schnabel for more information. + +@item +Testing for a small gradient (@math{g = \nabla \Phi(x) = J^T f}) +indicating a local function minimum: +@tex +\beforedisplay +$$ +max_i |g_i \times max(x_i, 1)| \le gtol \times max(\Phi(x), 1) +$$ +\afterdisplay +@end tex +@ifinfo +@example +||g||_inf <= gtol +@end example +@end ifinfo +This expression tests whether the ratio +@math{(\nabla \Phi)_i x_i / \Phi} is small. Testing this scaled gradient +is a better than @math{\nabla \Phi} alone since it is a dimensionless +quantity and so independent of the scale of the problem. The +@code{max} arguments help ensure the test doesn't break down in +regions where @math{x_i} or @math{\Phi(x)} are close to 0. +If this test succeeds, @var{info} is set to 2 and the function +returns @code{GSL_SUCCESS}. + +A general guideline for choosing the gradient tolerance is to set +@code{gtol = GSL_DBL_EPSILON^(1/3)}. See Dennis and Schnabel for +more information. + +@end itemize + +If none of the tests succeed, @var{info} is set to 0 and the +function returns @code{GSL_CONTINUE}, indicating further iterations +are required. + +@end deftypefun + +@node Nonlinear Least-Squares High Level Driver +@section High Level Driver + +These routines provide a high level wrapper that combines the iteration +and convergence testing for easy use. + +@deftypefun int gsl_multifit_nlinear_driver (const size_t @var{maxiter}, const double @var{xtol}, const double @var{gtol}, const double @var{ftol}, void (* @var{callback})(const size_t @var{iter}, void * @var{params}, const gsl_multifit_linear_workspace * @var{w}), void * @var{callback_params}, int * @var{info}, gsl_multifit_nlinear_workspace * @var{w}) +@deftypefunx int gsl_multilarge_nlinear_driver (const size_t @var{maxiter}, const double @var{xtol}, const double @var{gtol}, const double @var{ftol}, void (* @var{callback})(const size_t @var{iter}, void * @var{params}, const gsl_multilarge_linear_workspace * @var{w}), void * @var{callback_params}, int * @var{info}, gsl_multilarge_nlinear_workspace * @var{w}) +These functions iterate the nonlinear least squares solver @var{w} for a +maximum of @var{maxiter} iterations. After each iteration, the system is +tested for convergence with the error tolerances @var{xtol}, @var{gtol} and @var{ftol}. +Additionally, the user may supply a callback function @var{callback} +which is called after each iteration, so that the user may save or print +relevant quantities for each iteration. The parameter @var{callback_params} +is passed to the @var{callback} function. The parameters @var{callback} +and @var{callback_params} may be set to NULL to disable this feature. +Upon successful convergence, the function returns @code{GSL_SUCCESS} +and sets @var{info} to the reason for convergence (see +@code{gsl_multifit_nlinear_test}). If the function has not +converged after @var{maxiter} iterations, @code{GSL_EMAXITER} is +returned. In rare cases, during an iteration the algorithm may +be unable to find a new acceptable step @math{\delta} to take. In +this case, @code{GSL_ENOPROG} is returned indicating no further +progress can be made. If your problem is having difficulty converging, +see @ref{Nonlinear Least-Squares Troubleshooting} for further guidance. +@end deftypefun + +@node Nonlinear Least-Squares Covariance Matrix +@section Covariance matrix of best fit parameters +@cindex best-fit parameters, covariance +@cindex least squares, covariance of best-fit parameters +@cindex covariance matrix, nonlinear fits + +@deftypefun int gsl_multifit_nlinear_covar (const gsl_matrix * @var{J}, const double @var{epsrel}, gsl_matrix * @var{covar}) +@deftypefunx int gsl_multilarge_nlinear_covar (gsl_matrix * @var{covar}, gsl_multilarge_nlinear_workspace * @var{w}) +This function computes the covariance matrix of best-fit parameters +using the Jacobian matrix @var{J} and stores it in @var{covar}. +The parameter @var{epsrel} is used to remove linear-dependent columns +when @var{J} is rank deficient. + +The covariance matrix is given by, +@tex +\beforedisplay +$$ +C = (J^T J)^{-1} +$$ +\afterdisplay +@end tex +@ifinfo + +@example +covar = (J^T J)^@{-1@} +@end example + +@end ifinfo +or in the weighted case, +@tex +\beforedisplay +$$ +C = (J^T W J)^{-1} +$$ +\afterdisplay +@end tex +@ifinfo + +@example +covar = (J^T W J)^@{-1@} +@end example + +@end ifinfo +@noindent +and is computed using the factored form of the Jacobian (Cholesky, QR, or SVD). +Any columns of @math{R} which satisfy +@tex +\beforedisplay +$$ +|R_{kk}| \leq epsrel |R_{11}| +$$ +\afterdisplay +@end tex +@ifinfo + +@example +|R_@{kk@}| <= epsrel |R_@{11@}| +@end example + +@end ifinfo +@noindent +are considered linearly-dependent and are excluded from the covariance +matrix (the corresponding rows and columns of the covariance matrix are +set to zero). + +If the minimisation uses the weighted least-squares function +@math{f_i = (Y(x, t_i) - y_i) / \sigma_i} then the covariance +matrix above gives the statistical error on the best-fit parameters +resulting from the Gaussian errors @math{\sigma_i} on +the underlying data @math{y_i}. This can be verified from the relation +@math{\delta f = J \delta c} and the fact that the fluctuations in @math{f} +from the data @math{y_i} are normalised by @math{\sigma_i} and +so satisfy @c{$\langle \delta f \delta f^T \rangle = I$} +@math{<\delta f \delta f^T> = I}. + +For an unweighted least-squares function @math{f_i = (Y(x, t_i) - +y_i)} the covariance matrix above should be multiplied by the variance +of the residuals about the best-fit @math{\sigma^2 = \sum (y_i - Y(x,t_i))^2 / (n-p)} +to give the variance-covariance +matrix @math{\sigma^2 C}. This estimates the statistical error on the +best-fit parameters from the scatter of the underlying data. + +For more information about covariance matrices see @ref{Fitting Overview}. +@end deftypefun + +@node Nonlinear Least-Squares Troubleshooting +@section Troubleshooting + +When developing a code to solve a nonlinear least squares problem, +here are a few considerations to keep in mind. + +@enumerate + +@item +The most common difficulty is the accurate implementation of the Jacobian +matrix. If the analytic Jacobian is not properly provided to the +solver, this can hinder and many times prevent convergence of the method. +When developing a new nonlinear least squares code, it often helps +to compare the program output with the internally computed finite +difference Jacobian and the user supplied analytic Jacobian. If there +is a large difference in coefficients, it is likely the analytic +Jacobian is incorrectly implemented. + +@item +If your code is having difficulty converging, the next thing to +check is the starting point provided to the solver. The methods +of this chapter are local methods, meaning if you provide a starting +point far away from the true minimum, the method may converge to +a local minimum or not converge at all. Sometimes it is possible +to solve a linearized approximation to the nonlinear problem, +and use the linear solution as the starting point to the nonlinear +problem. + +@item +If the various parameters of the coefficient vector @math{x} +vary widely in magnitude, then the problem is said to be badly scaled. +The methods of this chapter do attempt to automatically rescale +the elements of @math{x} to have roughly the same order of magnitude, +but in extreme cases this could still cause problems for convergence. +In these cases it is recommended for the user to scale their +parameter vector @math{x} so that each parameter spans roughly the +same range, say @math{[-1,1]}. The solution vector can be backscaled +to recover the original units of the problem. + +@end enumerate + +@node Nonlinear Least-Squares Examples +@section Examples + +The following example programs demonstrate the nonlinear least +squares fitting capabilities. + +@menu +* Nonlinear Least-Squares Exponential Fit Example:: +* Nonlinear Least-Squares Geodesic Acceleration Example:: +* Nonlinear Least-Squares Comparison Example:: +* Nonlinear Least-Squares Large Example:: +@end menu + +@node Nonlinear Least-Squares Exponential Fit Example +@subsection Exponential Fitting Example + +The following example program fits a weighted exponential model with +background to experimental data, @math{Y = A \exp(-\lambda t) + b}. The +first part of the program sets up the functions @code{expb_f} and +@code{expb_df} to calculate the model and its Jacobian. The appropriate +fitting function is given by, +@tex +\beforedisplay +$$ +f_i = (A \exp(-\lambda t_i) + b) - y_i +$$ +\afterdisplay +@end tex +@ifinfo + +@example +f_i = (A \exp(-\lambda t_i) + b) - y_i +@end example + +@end ifinfo +@noindent +where we have chosen @math{t_i = i}. The Jacobian matrix @math{J} is +the derivative of these functions with respect to the three parameters +(@math{A}, @math{\lambda}, @math{b}). It is given by, +@tex +\beforedisplay +$$ +J_{ij} = {\partial f_i \over \partial x_j} +$$ +\afterdisplay +@end tex +@ifinfo + +@example +J_@{ij@} = d f_i / d x_j +@end example + +@end ifinfo +@noindent +where @math{x_0 = A}, @math{x_1 = \lambda} and @math{x_2 = b}. +The @math{i}th row of the Jacobian is therefore +@tex +\beforedisplay +$$ +J_{i\cdot} = \left( +\matrix{ +\exp(-\lambda t_i) & -t_i A \exp(-\lambda t_i) & 1 +} +\right) +$$ +\afterdisplay +@end tex +@ifinfo + +@example +@end example + +@end ifinfo + +@noindent +The main part of the program sets up a Levenberg-Marquardt solver and +some simulated random data. The data uses the known parameters +(5.0,0.1,1.0) combined with Gaussian noise (standard deviation = 0.1) +over a range of 40 timesteps. The initial guess for the parameters is +chosen as (1.0, 1.0, 0.0). The iteration terminates when the relative +change in x is smaller than @math{10^{-8}}, or when the magnitude of +the gradient falls below @math{10^{-8}}. Here are the results of running +the program: + +@smallexample +iter 0: A = 1.0000, lambda = 1.0000, b = 0.0000, cond(J) = inf, |f(x)| = 62.2029 +iter 1: A = 1.2196, lambda = 0.3663, b = 0.0436, cond(J) = 53.6368, |f(x)| = 59.8062 +iter 2: A = 1.6062, lambda = 0.1506, b = 0.1054, cond(J) = 23.8178, |f(x)| = 53.9039 +iter 3: A = 2.4528, lambda = 0.0583, b = 0.2470, cond(J) = 20.0493, |f(x)| = 28.8039 +iter 4: A = 2.9723, lambda = 0.0494, b = 0.3727, cond(J) = 94.5601, |f(x)| = 15.3252 +iter 5: A = 3.3473, lambda = 0.0477, b = 0.4410, cond(J) = 229.3627, |f(x)| = 10.7511 +iter 6: A = 3.6690, lambda = 0.0508, b = 0.4617, cond(J) = 298.3589, |f(x)| = 9.7373 +iter 7: A = 3.9907, lambda = 0.0580, b = 0.5433, cond(J) = 250.0194, |f(x)| = 8.7661 +iter 8: A = 4.2353, lambda = 0.0731, b = 0.7989, cond(J) = 154.8571, |f(x)| = 7.4299 +iter 9: A = 4.6573, lambda = 0.0958, b = 1.0302, cond(J) = 140.2265, |f(x)| = 6.1893 +iter 10: A = 5.0138, lambda = 0.1060, b = 1.0329, cond(J) = 109.4141, |f(x)| = 5.4961 +iter 11: A = 5.1505, lambda = 0.1103, b = 1.0497, cond(J) = 100.8762, |f(x)| = 5.4552 +iter 12: A = 5.1724, lambda = 0.1110, b = 1.0526, cond(J) = 97.3403, |f(x)| = 5.4542 +iter 13: A = 5.1737, lambda = 0.1110, b = 1.0528, cond(J) = 96.7136, |f(x)| = 5.4542 +iter 14: A = 5.1738, lambda = 0.1110, b = 1.0528, cond(J) = 96.6678, |f(x)| = 5.4542 +iter 15: A = 5.1738, lambda = 0.1110, b = 1.0528, cond(J) = 96.6663, |f(x)| = 5.4542 +iter 16: A = 5.1738, lambda = 0.1110, b = 1.0528, cond(J) = 96.6663, |f(x)| = 5.4542 +summary from method 'trust-region/levenberg-marquardt' +number of iterations: 16 +function evaluations: 23 +Jacobian evaluations: 17 +reason for stopping: small step size +initial |f(x)| = 62.202928 +final |f(x)| = 5.454180 +chisq/dof = 0.804002 +A = 5.17379 +/- 0.27938 +lambda = 0.11104 +/- 0.00817 +b = 1.05283 +/- 0.05365 +status = success +@end smallexample + +@noindent +The approximate values of the parameters are found correctly, and the +chi-squared value indicates a good fit (the chi-squared per degree of +freedom is approximately 1). In this case the errors on the parameters +can be estimated from the square roots of the diagonal elements of the +covariance matrix. If the chi-squared value shows a poor fit (i.e. +@c{$\chi^2/(n-p) \gg 1$} +@math{chi^2/dof >> 1}) then the error estimates obtained from the +covariance matrix will be too small. In the example program the error estimates +are multiplied by @c{$\sqrt{\chi^2/(n-p)}$} +@math{\sqrt@{\chi^2/dof@}} in this case, a common way of increasing the +errors for a poor fit. Note that a poor fit will result from the use +of an inappropriate model, and the scaled error estimates may then +be outside the range of validity for Gaussian errors. + +@noindent +Additionally, we see that the condition number of @math{J(x)} stays +reasonably small throughout the iteration. This indicates we could +safely switch to the Cholesky solver for speed improvement, +although this particular system is too small to really benefit. + +@iftex +@sp 1 +@center @image{fit-exp,3.4in} +@end iftex + +@example +@verbatiminclude examples/nlfit.c +@end example + +@node Nonlinear Least-Squares Geodesic Acceleration Example +@subsection Geodesic Acceleration Example + +The following example program minimizes a modified Rosenbrock function, +which is characterized by a narrow canyon with steep walls. The +starting point is selected high on the canyon wall, so the solver +must first find the canyon bottom and then navigate to the minimum. +The problem is solved both with and without using geodesic acceleration +for comparison. The cost function is given by +@tex +\beforedisplay +$$ +\eqalign{ +\Phi(x) &= {1 \over 2} (f_1^2 + f_2^2) \cr +f_1 &= 100 \left( x_2 - x_1^2 \right) \cr +f_2 &= 1 - x_1 +} +$$ +\afterdisplay +@end tex +@ifinfo + +@example +Phi(x) = 1/2 (f1^2 + f2^2) +f1 = 100 ( x2 - x1^2 ) +f2 = 1 - x1 +@end example + +@end ifinfo +@noindent +The Jacobian matrix is given by +@tex +\beforedisplay +$$ +J = +\left( +\matrix{ +{\partial f_1 \over \partial x_1} & {\partial f_1 \over \partial x_2} \cr +{\partial f_2 \over \partial x_1} & {\partial f_2 \over \partial x_2} +} +\right) = +\left( +\matrix{ +-200 x_1 & 100 \cr +-1 & 0 +} +\right) +$$ +\afterdisplay +@end tex +@ifinfo + +@example +J = [ -200*x1 100 ; -1 0 ] +@end example + +@end ifinfo +@noindent +In order to use geodesic acceleration, the user must provide +the second directional derivative of each residual in the +velocity direction, +@math{D_v^2 f_i = \sum_{\alpha\beta} v_{\alpha} v_{\beta} \partial_{\alpha} \partial_{\beta} f_i}. +The velocity vector @math{v} is provided by the solver. For this example, +these derivatives are given by +@tex +\beforedisplay +$$ +f_{vv} = +D_v^2 +\left( +\matrix{ +f_1 \cr +f_2 +} +\right) = +\left( +\matrix{ +-200 v_1^2 \cr +0 +} +\right) +$$ +\afterdisplay +@end tex +@ifinfo + +@example +fvv = [ -200 v1^2 ; 0 ] +@end example + +@end ifinfo +@noindent +The solution of this minimization problem is given by +@tex +\beforedisplay +$$ +\eqalign{ +x^{*} &= \left( +\matrix{ +1 \cr +1 +} +\right) \cr +\Phi(x^{*}) &= 0 +} +$$ +\afterdisplay +@end tex +@ifinfo + +@example +x* = [ 1 ; 1 ] +Phi(x*) = 0 +@end example + +@end ifinfo +@noindent +The program output is shown below. + +@smallexample +=== Solving system without acceleration === +NITER = 53 +NFEV = 56 +NJEV = 54 +NAEV = 0 +initial cost = 2.250225000000e+04 +final cost = 6.674986031430e-18 +final x = (9.999999974165e-01, 9.999999948328e-01) +final cond(J) = 6.000096055094e+02 +=== Solving system with acceleration === +NITER = 15 +NFEV = 17 +NJEV = 16 +NAEV = 16 +initial cost = 2.250225000000e+04 +final cost = 7.518932873279e-19 +final x = (9.999999991329e-01, 9.999999982657e-01) +final cond(J) = 6.000097233278e+02 +@end smallexample + +@noindent +We can see that enabling geodesic acceleration requires less +than a third of the number of Jacobian evaluations in order to locate +the minimum. The path taken by both methods is shown in the +figure below. The contours show the cost function +@math{\Phi(x_1,x_2)}. We see that both methods quickly +find the canyon bottom, but the geodesic acceleration method +navigates along the bottom to the solution with significantly +fewer iterations. + +@iftex +@sp 1 +@center @image{nlfit2,6in} +@end iftex + +@noindent +The program is given below. + +@example +@verbatiminclude examples/nlfit2.c +@end example + +@node Nonlinear Least-Squares Comparison Example +@subsection Comparing TRS Methods Example + +The following program compares all available nonlinear least squares +trust-region subproblem (TRS) methods on the Branin function, a common +optimization test problem. The cost function is given by +@tex +\beforedisplay +$$ +\eqalign{ +\Phi(x) &= {1 \over 2} (f_1^2 + f_2^2) \cr +f_1 &= x_2 + a_1 x_1^2 + a_2 x_1 + a_3 \cr +f_2 &= \sqrt{a_4} \sqrt{1 + (1 - a_5) \cos{x_1}} +} +$$ +\afterdisplay +@end tex +@ifinfo + +@example +\Phi(x) &= 1/2 (f_1^2 + f_2^2) +f_1 &= x_2 + a_1 x_1^2 + a_2 x_1 + a_3 +f_2 &= sqrt(a_4) sqrt(1 + (1 - a_5) cos(x_1)) +@end example + +@end ifinfo +with @math{a_1 = -{5.1 \over 4 \pi^2}, a_2 = {5 \over \pi}, a_3 = -6, a_4 = 10, a_5 = {1 \over 8\pi}}. +There are three minima of this function in the range +@math{(x_1,x_2) \in [-5,15] \times [-5,15]}. The program +below uses the starting point @math{(x_1,x_2) = (6,14.5)} +and calculates the solution with all available nonlinear +least squares TRS methods. The program output is shown below. + +@smallformat +@verbatim +Method NITER NFEV NJEV Initial Cost Final cost Final cond(J) Final x +levenberg-marquardt 20 27 21 1.9874e+02 3.9789e-01 6.1399e+07 (-3.14e+00, 1.23e+01) +levenberg-marquardt+accel 27 36 28 1.9874e+02 3.9789e-01 1.4465e+07 (3.14e+00, 2.27e+00) +dogleg 23 64 23 1.9874e+02 3.9789e-01 5.0692e+08 (3.14e+00, 2.28e+00) +double-dogleg 24 69 24 1.9874e+02 3.9789e-01 3.4879e+07 (3.14e+00, 2.27e+00) +2D-subspace 23 54 24 1.9874e+02 3.9789e-01 2.5142e+07 (3.14e+00, 2.27e+00) +@end verbatim +@end smallformat + +@noindent +The first row of output above corresponds to standard Levenberg-Marquardt, while +the second row includes geodesic acceleration. We see that the standard LM method +converges to the minimum at @math{(-\pi,12.275)} and also uses the least number +of iterations and Jacobian evaluations. All other methods converge to the minimum +@math{(\pi,2.275)} and perform similarly in terms of number of Jacobian evaluations. +We see that @math{J} is fairly ill-conditioned +at both minima, indicating that the QR (or SVD) solver is the best choice for this problem. +Since there are only two parameters in this optimization problem, we can easily +visualize the paths taken by each method, which are shown in the figure below. +The figure shows contours of the cost function @math{\Phi(x_1,x_2)} which exhibits +three global minima in the range @math{[-5,15] \times [-5,15]}. The paths taken +by each solver are shown as colored lines. + +@iftex +@sp 1 +@center @image{nlfit3,6in} +@end iftex + +@noindent +The program is given below. + +@example +@verbatiminclude examples/nlfit3.c +@end example + +@node Nonlinear Least-Squares Large Example +@subsection Large Nonlinear Least Squares Example + +The following program illustrates the large nonlinear least +squares solvers on a system with significant sparse structure +in the Jacobian. The cost function is given by +@tex +\beforedisplay +$$ +\eqalign{ +\Phi(x) &= {1 \over 2} \sum_{i=1}^{p+1} f_i^2 \cr +f_i &= \sqrt{\alpha} (x_i - 1), \quad 1 \le i \le p \cr +f_{p+1} &= ||x||^2 - {1 \over 4} +} +$$ +\afterdisplay +@end tex +@ifinfo + +@example +\Phi(x) &= 1/2 \sum_@{i=1@}^@{p+1@} f_i^2 +f_i &= \sqrt@{\alpha@} (x_i - 1), 1 \le i \le p +f_@{p+1@} &= ||x||^2 - 1/4 +@end example + +@end ifinfo +with @math{\alpha = 10^{-5}}. The residual @math{f_{p+1}} imposes a constraint on the @math{p} +parameters @math{x}, to ensure that @math{||x||^2 \approx {1 \over 4}}. +The @math{(p+1)}-by-@math{p} Jacobian for this system is given by +@tex +\beforedisplay +$$ +J(x) = +\left( +\matrix{ +\sqrt{\alpha} I_p \cr +2 x^T +} +\right) +$$ +\afterdisplay +@end tex +@ifinfo + +@example +J(x) = [ \sqrt@{alpha@} I_p; 2 x^T ] +@end example + +@end ifinfo +and the normal equations matrix is given by +@tex +\beforedisplay +$$ +J^T J = +\alpha I_p + 4 x x^T +$$ +\afterdisplay +@end tex +@ifinfo + +@example +J^T J = [ \alpha I_p + 4 x x^T ] +@end example + +@end ifinfo +@noindent +Finally, the second directional derivative of @math{f} for the +geodesic acceleration method is given by +@tex +\beforedisplay +$$ +f_{vv} = D_v^2 f = +\left( +\matrix{ +0 \cr +2 ||v||^2 +} +\right) +$$ +\afterdisplay +@end tex +@ifinfo + +@example +fvv = [ 0; 2 ||v||^2 ] +@end example + +@end ifinfo +@noindent +Since the upper @math{p}-by-@math{p} block of @math{J} is diagonal, +this sparse structure should be exploited in the nonlinear solver. +For comparison, the following program solves the system for @math{p = 2000} +using the dense direct Cholesky solver based on the normal equations matrix +@math{J^T J}, as well as the iterative Steihaug-Toint solver, based on +sparse matrix-vector products @math{J u} and @math{J^T u}. The +program output is shown below. + +@smallformat +@verbatim +Method NITER NFEV NJUEV NJTJEV NAEV Init Cost Final cost cond(J) Final |x|^2 Time (s) +levenberg-marquardt 25 31 26 26 0 7.1218e+18 1.9555e-02 447.50 2.5044e-01 46.28 +levenberg-marquardt+accel 22 23 45 23 22 7.1218e+18 1.9555e-02 447.64 2.5044e-01 33.92 +dogleg 37 87 36 36 0 7.1218e+18 1.9555e-02 447.59 2.5044e-01 56.05 +double-dogleg 35 88 34 34 0 7.1218e+18 1.9555e-02 447.62 2.5044e-01 52.65 +2D-subspace 37 88 36 36 0 7.1218e+18 1.9555e-02 447.71 2.5044e-01 59.75 +steihaug-toint 35 88 345 0 0 7.1218e+18 1.9555e-02 inf 2.5044e-01 0.09 +@end verbatim +@end smallformat + +@noindent +The first five rows use methods based on factoring the dense @math{J^T J} matrix +while the last row uses the iterative Steihaug-Toint method. While the number +of Jacobian matrix-vector products (NJUEV) is less for the dense methods, the added time +to construct and factor the @math{J^T J} matrix (NJTJEV) results in a much larger runtime than the +iterative method (see last column). + +@noindent +The program is given below. + +@example +@verbatiminclude examples/nlfit4.c +@end example + +@node Nonlinear Least-Squares References and Further Reading +@section References and Further Reading + +@noindent +The following publications are relevant to the algorithms described +in this section, + +@itemize @w{} +@item +J.J. Mor@'e, @cite{The Levenberg-Marquardt Algorithm: Implementation and +Theory}, Lecture Notes in Mathematics, v630 (1978), ed G. Watson. + +@item +H. B. Nielsen, ``Damping Parameter in Marquardt's Method'', +IMM Department of Mathematical Modeling, DTU, Tech. Report IMM-REP-1999-05 +(1999). + +@item +K. Madsen and H. B. Nielsen, ``Introduction to Optimization and Data +Fitting'', IMM Department of Mathematical Modeling, DTU, 2010. + +@item +J. E. Dennis and R. B. Schnabel, Numerical Methods for Unconstrained +Optimization and Nonlinear Equations, SIAM, 1996. + +@item +M. K. Transtrum, B. B. Machta, and J. P. Sethna, +Geometry of nonlinear least squares with applications to sloppy models and optimization, +Phys. Rev. E 83, 036701, 2011. + +@item +M. K. Transtrum and J. P. Sethna, Improvements to the Levenberg-Marquardt +algorithm for nonlinear least-squares minimization, arXiv:1201.5885, 2012. + +@item +J.J. Mor@'e, B.S. Garbow, K.E. Hillstrom, ``Testing Unconstrained +Optimization Software'', ACM Transactions on Mathematical Software, Vol +7, No 1 (1981), p 17--41. + +@item +H. B. Nielsen, ``UCTP Test Problems for Unconstrained Optimization'', +IMM Department of Mathematical Modeling, DTU, Tech. Report IMM-REP-2000-17 +(2000). +@end itemize diff -Nru gsl-doc-1.16/doc/multifit.texi gsl-doc-2.3/doc/multifit.texi --- gsl-doc-1.16/doc/multifit.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/multifit.texi 1970-01-01 00:00:00.000000000 +0000 @@ -1,708 +0,0 @@ -@cindex nonlinear least squares fitting -@cindex least squares fitting, nonlinear - -This chapter describes functions for multidimensional nonlinear -least-squares fitting. The library provides low level components for a -variety of iterative solvers and convergence tests. These can be -combined by the user to achieve the desired solution, with full access -to the intermediate steps of the iteration. Each class of methods uses -the same framework, so that you can switch between solvers at runtime -without needing to recompile your program. Each instance of a solver -keeps track of its own state, allowing the solvers to be used in -multi-threaded programs. - -The header file @file{gsl_multifit_nlin.h} contains prototypes for the -multidimensional nonlinear fitting functions and related declarations. - -@menu -* Overview of Nonlinear Least-Squares Fitting:: -* Initializing the Nonlinear Least-Squares Solver:: -* Providing the Function to be Minimized:: -* Finite Difference Jacobian:: -* Iteration of the Minimization Algorithm:: -* Search Stopping Parameters for Minimization Algorithms:: -* High Level Driver:: -* Minimization Algorithms using Derivatives:: -* Minimization Algorithms without Derivatives:: -* Computing the covariance matrix of best fit parameters:: -* Example programs for Nonlinear Least-Squares Fitting:: -* References and Further Reading for Nonlinear Least-Squares Fitting:: -@end menu - -@node Overview of Nonlinear Least-Squares Fitting -@section Overview -@cindex nonlinear least squares fitting, overview - -The problem of multidimensional nonlinear least-squares fitting requires -the minimization of the squared residuals of @math{n} functions, -@math{f_i}, in @math{p} parameters, @math{x_i}, -@tex -\beforedisplay -$$ -\Phi(x) = {1 \over 2} || F(x) ||^2 - = {1 \over 2} \sum_{i=1}^{n} f_i (x_1, \dots, x_p)^2 -$$ -\afterdisplay -@end tex -@ifinfo - -@example -\Phi(x) = (1/2) || F(x) ||^2 - = (1/2) \sum_@{i=1@}^@{n@} f_i(x_1, ..., x_p)^2 -@end example - -@end ifinfo -@noindent -All algorithms proceed from an initial guess using the linearization, -@tex -\beforedisplay -$$ -\psi(p) = || F(x+p) || \approx || F(x) + J p\, || -$$ -\afterdisplay -@end tex -@ifinfo - -@example -\psi(p) = || F(x+p) || ~=~ || F(x) + J p || -@end example - -@end ifinfo -@noindent -where @math{x} is the initial point, @math{p} is the proposed step -and @math{J} is the -Jacobian matrix @c{$J_{ij} = \partial f_i / \partial x_j$} -@math{J_@{ij@} = d f_i / d x_j}. -Additional strategies are used to enlarge the region of convergence. -These include requiring a decrease in the norm @math{||F||} on each -step or using a trust region to avoid steps which fall outside the linear -regime. - -To perform a weighted least-squares fit of a nonlinear model -@math{Y(x,t)} to data (@math{t_i}, @math{y_i}) with independent Gaussian -errors @math{\sigma_i}, use function components of the following form, -@tex -\beforedisplay -$$ -f_i = {(Y(x, t_i) - y_i) \over \sigma_i} -$$ -\afterdisplay -@end tex -@ifinfo - -@example -f_i = (Y(x, t_i) - y_i) / \sigma_i -@end example - -@end ifinfo -@noindent -Note that the model parameters are denoted by @math{x} in this chapter -since the non-linear least-squares algorithms are described -geometrically (i.e. finding the minimum of a surface). The -independent variable of any data to be fitted is denoted by @math{t}. - -@cindex Jacobian matrix, fitting -With the definition above the Jacobian is -@c{$J_{ij} = (1 / \sigma_i) \partial Y_i / \partial x_j$} -@math{J_@{ij@} =(1 / \sigma_i) d Y_i / d x_j}, where @math{Y_i = Y(x,t_i)}. - - -@node Initializing the Nonlinear Least-Squares Solver -@section Initializing the Solver - -@deftypefun {gsl_multifit_fsolver *} gsl_multifit_fsolver_alloc (const gsl_multifit_fsolver_type * @var{T}, size_t @var{n}, size_t @var{p}) -@tpindex gsl_multifit_fsolver -@tpindex gsl_multifit_fsolver_type -This function returns a pointer to a newly allocated instance of a -solver of type @var{T} for @var{n} observations and @var{p} parameters. -The number of observations @var{n} must be greater than or equal to -parameters @var{p}. - -If there is insufficient memory to create the solver then the function -returns a null pointer and the error handler is invoked with an error -code of @code{GSL_ENOMEM}. -@end deftypefun - -@deftypefun {gsl_multifit_fdfsolver *} gsl_multifit_fdfsolver_alloc (const gsl_multifit_fdfsolver_type * @var{T}, size_t @var{n}, size_t @var{p}) -@tpindex gsl_multifit_fdfsolver -@tpindex gsl_multifit_fdfsolver_type -This function returns a pointer to a newly allocated instance of a -derivative solver of type @var{T} for @var{n} observations and @var{p} -parameters. For example, the following code creates an instance of a -Levenberg-Marquardt solver for 100 data points and 3 parameters, - -@example -const gsl_multifit_fdfsolver_type * T - = gsl_multifit_fdfsolver_lmder; -gsl_multifit_fdfsolver * s - = gsl_multifit_fdfsolver_alloc (T, 100, 3); -@end example - -@noindent -The number of observations @var{n} must be greater than or equal to -parameters @var{p}. - -If there is insufficient memory to create the solver then the function -returns a null pointer and the error handler is invoked with an error -code of @code{GSL_ENOMEM}. -@end deftypefun - -@deftypefun int gsl_multifit_fsolver_set (gsl_multifit_fsolver * @var{s}, gsl_multifit_function * @var{f}, const gsl_vector * @var{x}) -This function initializes, or reinitializes, an existing solver @var{s} -to use the function @var{f} and the initial guess @var{x}. -@end deftypefun - -@deftypefun int gsl_multifit_fdfsolver_set (gsl_multifit_fdfsolver * @var{s}, gsl_multifit_function_fdf * @var{fdf}, const gsl_vector * @var{x}) -This function initializes, or reinitializes, an existing solver @var{s} -to use the function and derivative @var{fdf} and the initial guess -@var{x}. -@end deftypefun - -@deftypefun void gsl_multifit_fsolver_free (gsl_multifit_fsolver * @var{s}) -@deftypefunx void gsl_multifit_fdfsolver_free (gsl_multifit_fdfsolver * @var{s}) -These functions free all the memory associated with the solver @var{s}. -@end deftypefun - -@deftypefun {const char *} gsl_multifit_fsolver_name (const gsl_multifit_fsolver * @var{s}) -@deftypefunx {const char *} gsl_multifit_fdfsolver_name (const gsl_multifit_fdfsolver * @var{s}) -These functions return a pointer to the name of the solver. For example, - -@example -printf ("s is a '%s' solver\n", - gsl_multifit_fdfsolver_name (s)); -@end example - -@noindent -would print something like @code{s is a 'lmder' solver}. -@end deftypefun - -@node Providing the Function to be Minimized -@section Providing the Function to be Minimized - -You must provide @math{n} functions of @math{p} variables for the -minimization algorithms to operate on. In order to allow for -arbitrary parameters the functions are defined by the following data -types: - -@deftp {Data Type} gsl_multifit_function -This data type defines a general system of functions with arbitrary parameters. - -@table @code -@item int (* f) (const gsl_vector * @var{x}, void * @var{params}, gsl_vector * @var{f}) -this function should store the vector result -@c{$f(x,\hbox{\it params})$} -@math{f(x,params)} in @var{f} for argument @var{x} and arbitrary parameters @var{params}, -returning an appropriate error code if the function cannot be computed. - -@item size_t n -the number of functions, i.e. the number of components of the -vector @var{f}. - -@item size_t p -the number of independent variables, i.e. the number of components of -the vector @var{x}. - -@item void * params -a pointer to the arbitrary parameters of the function. -@end table -@end deftp - -@deftp {Data Type} gsl_multifit_function_fdf -This data type defines a general system of functions with arbitrary parameters and -the corresponding Jacobian matrix of derivatives, - -@table @code -@item int (* f) (const gsl_vector * @var{x}, void * @var{params}, gsl_vector * @var{f}) -this function should store the vector result -@c{$f(x,\hbox{\it params})$} -@math{f(x,params)} in @var{f} for argument @var{x} and arbitrary parameters @var{params}, -returning an appropriate error code if the function cannot be computed. - -@item int (* df) (const gsl_vector * @var{x}, void * @var{params}, gsl_matrix * @var{J}) -this function should store the @var{n}-by-@var{p} matrix result -@c{$J_{ij} = \partial f_i(x,\hbox{\it params}) / \partial x_j$} -@math{J_ij = d f_i(x,params) / d x_j} in @var{J} for argument @var{x} -and arbitrary parameters @var{params}, returning an appropriate error code if the -function cannot be computed. If an analytic Jacobian is unavailable, or too expensive -to compute, this function pointer may be set to NULL, in which -case the Jacobian will be internally computed using finite difference approximations -of the function @var{f}. - -@item int (* fdf) (const gsl_vector * @var{x}, void * @var{params}, gsl_vector * @var{f}, gsl_matrix * @var{J}) -This function should set the values of the @var{f} and @var{J} as above, -for arguments @var{x} and arbitrary parameters @var{params}. This function -provides an optimization of the separate functions for @math{f(x)} and -@math{J(x)}---it is always faster to compute the function and its -derivative at the same time. If an analytic Jacobian is unavailable, or too expensive -to compute, this function pointer may be set to NULL, in which -case the Jacobian will be internally computed using finite difference approximations -of the function @var{f}. - -@item size_t n -the number of functions, i.e. the number of components of the -vector @var{f}. - -@item size_t p -the number of independent variables, i.e. the number of components of -the vector @var{x}. - -@item void * params -a pointer to the arbitrary parameters of the function. -@end table -@end deftp - -Note that when fitting a non-linear model against experimental data, -the data is passed to the functions above using the -@var{params} argument and the trial best-fit parameters through the -@var{x} argument. - -@node Finite Difference Jacobian -@section Finite Difference Jacobian - -For the algorithms which require a Jacobian matrix of derivatives of -the fit functions, there are times when an analytic Jacobian may be -unavailable or too expensive to compute. Therefore GSL supports -approximating the Jacobian numerically using finite differences of the fit -functions. This is typically done by setting the relevant function pointers -of the @code{gsl_multifit_function_fdf} data type to NULL, however the -following functions allow the user to access the approximate Jacobian -directly if needed. - -@deftypefun int gsl_multifit_fdfsolver_dif_df (const gsl_vector * @var{x}, gsl_multifit_function_fdf * @var{fdf}, const gsl_vector * @var{f}, gsl_matrix * @var{J}) -This function takes as input the current position @var{x} with the function -values computed at the current position @var{f}, along with @var{fdf} -which specifies the fit function and parameters and approximates the -@var{n}-by-@var{p} Jacobian @var{J} using forward finite differences: -@c{$J_{ij} = \partial f_i(x,\hbox{\it params}) / \partial x_j \approx (f_i(x^{*}, \hbox{\it params}) - f_i(x, \hbox{\it params})) / \Delta x_j$} -@math{J_ij = d f_i(x,params) / d x_j = (f_i(x^*,params) - f_i(x,params)) / d x_j}. -where @math{x^*} has the @math{j}th element perturbed by @math{\Delta x_j} -and @math{\Delta x_j = \epsilon |x_j|}, where @math{\epsilon} is the -square root of the machine precision @code{GSL_DBL_EPSILON}. -@end deftypefun - -@deftypefun int gsl_multifit_fdfsolver_dif_fdf (const gsl_vector * @var{x}, gsl_multifit_function_fdf * @var{fdf}, gsl_vector * @var{f}, gsl_matrix * @var{J}) -This function computes the vector of function values @var{f} and -the approximate Jacobian @var{J} at the position vector @var{x} using -the system described in @var{fdf}. See @code{gsl_multifit_fdfsolver_dif_df} -for a description of how the Jacobian is computed. -@end deftypefun - -@node Iteration of the Minimization Algorithm -@section Iteration - -The following functions drive the iteration of each algorithm. Each -function performs one iteration to update the state of any solver of the -corresponding type. The same functions work for all solvers so that -different methods can be substituted at runtime without modifications to -the code. - -@deftypefun int gsl_multifit_fsolver_iterate (gsl_multifit_fsolver * @var{s}) -@deftypefunx int gsl_multifit_fdfsolver_iterate (gsl_multifit_fdfsolver * @var{s}) -These functions perform a single iteration of the solver @var{s}. If -the iteration encounters an unexpected problem then an error code will -be returned. The solver maintains a current estimate of the best-fit -parameters at all times. -@end deftypefun - -The solver struct @var{s} contains the following entries, which can -be used to track the progress of the solution: - -@table @code -@item gsl_vector * x -The current position. - -@item gsl_vector * f -The function value at the current position. - -@item gsl_vector * dx -The difference between the current position and the previous position, -i.e. the last step, taken as a vector. - -@item gsl_matrix * J -The Jacobian matrix at the current position (for the -@code{gsl_multifit_fdfsolver} struct only) -@end table - -The best-fit information also can be accessed with the following -auxiliary functions, - -@deftypefun {gsl_vector *} gsl_multifit_fsolver_position (const gsl_multifit_fsolver * @var{s}) -@deftypefunx {gsl_vector *} gsl_multifit_fdfsolver_position (const gsl_multifit_fdfsolver * @var{s}) -These functions return the current position (i.e. best-fit parameters) -@code{s->x} of the solver @var{s}. -@end deftypefun - -@node Search Stopping Parameters for Minimization Algorithms -@section Search Stopping Parameters -@cindex nonlinear fitting, stopping parameters - -A minimization procedure should stop when one of the following conditions is -true: - -@itemize @bullet -@item -A minimum has been found to within the user-specified precision. - -@item -A user-specified maximum number of iterations has been reached. - -@item -An error has occurred. -@end itemize - -@noindent -The handling of these conditions is under user control. The functions -below allow the user to test the current estimate of the best-fit -parameters in several standard ways. - -@deftypefun int gsl_multifit_test_delta (const gsl_vector * @var{dx}, const gsl_vector * @var{x}, double @var{epsabs}, double @var{epsrel}) - -This function tests for the convergence of the sequence by comparing the -last step @var{dx} with the absolute error @var{epsabs} and relative -error @var{epsrel} to the current position @var{x}. The test returns -@code{GSL_SUCCESS} if the following condition is achieved, -@tex -\beforedisplay -$$ -|dx_i| < \hbox{\it epsabs} + \hbox{\it epsrel\/}\, |x_i| -$$ -\afterdisplay -@end tex -@ifinfo - -@example -|dx_i| < epsabs + epsrel |x_i| -@end example - -@end ifinfo -@noindent -for each component of @var{x} and returns @code{GSL_CONTINUE} otherwise. -@end deftypefun - -@cindex residual, in nonlinear systems of equations -@deftypefun int gsl_multifit_test_gradient (const gsl_vector * @var{g}, double @var{epsabs}) -This function tests the residual gradient @var{g} against the absolute -error bound @var{epsabs}. Mathematically, the gradient should be -exactly zero at the minimum. The test returns @code{GSL_SUCCESS} if the -following condition is achieved, -@tex -\beforedisplay -$$ -\sum_i |g_i| < \hbox{\it epsabs} -$$ -\afterdisplay -@end tex -@ifinfo - -@example -\sum_i |g_i| < epsabs -@end example - -@end ifinfo -@noindent -and returns @code{GSL_CONTINUE} otherwise. This criterion is suitable -for situations where the precise location of the minimum, @math{x}, -is unimportant provided a value can be found where the gradient is small -enough. -@end deftypefun - - -@deftypefun int gsl_multifit_gradient (const gsl_matrix * @var{J}, const gsl_vector * @var{f}, gsl_vector * @var{g}) -This function computes the gradient @var{g} of @math{\Phi(x) = (1/2) -||F(x)||^2} from the Jacobian matrix @math{J} and the function values -@var{f}, using the formula @math{g = J^T f}. -@end deftypefun - -@node High Level Driver -@section High Level Driver - -These routines provide a high level wrapper that combine the iteration -and convergence testing for easy use. - -@deftypefun int gsl_multifit_fsolver_driver (gsl_multifit_fsolver * @var{s}, const size_t @var{maxiter}, const double @var{epsabs}, const double @var{epsrel}) -@deftypefunx int gsl_multifit_fdfsolver_driver (gsl_multifit_fdfsolver * @var{s}, const size_t @var{maxiter}, const double @var{epsabs}, const double @var{epsrel}) -These functions iterate the solver @var{s} for a maximum of @var{maxiter} -iterations. After each iteration, the system is tested for convergence -using @code{gsl_multifit_test_delta} with the error tolerances @var{epsabs} -and @var{epsrel}. -@end deftypefun - -@node Minimization Algorithms using Derivatives -@section Minimization Algorithms using Derivatives - -The minimization algorithms described in this section make use of both -the function and its derivative. They require an initial guess for the -location of the minimum. There is no absolute guarantee of -convergence---the function must be suitable for this technique and the -initial guess must be sufficiently close to the minimum for it to work. - -@comment ============================================================ -@cindex Levenberg-Marquardt algorithms -@deffn {Derivative Solver} gsl_multifit_fdfsolver_lmsder -@cindex LMDER algorithm -@cindex MINPACK, minimization algorithms -This is a robust and efficient version of the Levenberg-Marquardt -algorithm as implemented in the scaled @sc{lmder} routine in -@sc{minpack}. Minpack was written by Jorge J. Mor@'e, Burton S. Garbow -and Kenneth E. Hillstrom. - -The algorithm uses a generalized trust region to keep each step under -control. In order to be accepted a proposed new position @math{x'} must -satisfy the condition @math{|D (x' - x)| < \delta}, where @math{D} is a -diagonal scaling matrix and @math{\delta} is the size of the trust -region. The components of @math{D} are computed internally, using the -column norms of the Jacobian to estimate the sensitivity of the residual -to each component of @math{x}. This improves the behavior of the -algorithm for badly scaled functions. - -On each iteration the algorithm attempts to minimize the linear system -@math{|F + J p|} subject to the constraint @math{|D p| < \Delta}. The -solution to this constrained linear system is found using the -Levenberg-Marquardt method. - -The proposed step is now tested by evaluating the function at the -resulting point, @math{x'}. If the step reduces the norm of the -function sufficiently, and follows the predicted behavior of the -function within the trust region, then it is accepted and the size of the -trust region is increased. If the proposed step fails to improve the -solution, or differs significantly from the expected behavior within -the trust region, then the size of the trust region is decreased and -another trial step is computed. - -The algorithm also monitors the progress of the solution and returns an -error if the changes in the solution are smaller than the machine -precision. The possible error codes are, - -@table @code -@item GSL_ETOLF -the decrease in the function falls below machine precision - -@item GSL_ETOLX -the change in the position vector falls below machine precision - -@item GSL_ETOLG -the norm of the gradient, relative to the norm of the function, falls -below machine precision - -@item GSL_ENOPROG -the routine has made 10 or more attempts to find a suitable trial step -without success (but subsequent calls can be made to continue the -search).@footnote{The return code @code{GSL_CONTINUE} was used for -this case in versions prior to 1.14.} -@end table - -@noindent -These error codes indicate that further iterations will be unlikely to -change the solution from its current value. -@end deffn - -@deffn {Derivative Solver} gsl_multifit_fdfsolver_lmder -This is an unscaled version of the @sc{lmder} algorithm. The elements of the -diagonal scaling matrix @math{D} are set to 1. This algorithm may be -useful in circumstances where the scaled version of @sc{lmder} converges too -slowly, or the function is already scaled appropriately. -@end deffn - -@node Minimization Algorithms without Derivatives -@section Minimization Algorithms without Derivatives - -There are no algorithms implemented in this section at the moment. - -@node Computing the covariance matrix of best fit parameters -@section Computing the covariance matrix of best fit parameters -@cindex best-fit parameters, covariance -@cindex least squares, covariance of best-fit parameters -@cindex covariance matrix, nonlinear fits - -@deftypefun int gsl_multifit_covar (const gsl_matrix * @var{J}, double @var{epsrel}, gsl_matrix * @var{covar}) -This function uses the Jacobian matrix @var{J} to compute the covariance -matrix of the best-fit parameters, @var{covar}. The parameter -@var{epsrel} is used to remove linear-dependent columns when @var{J} is -rank deficient. - -The covariance matrix is given by, -@tex -\beforedisplay -$$ -C = (J^T J)^{-1} -$$ -\afterdisplay -@end tex -@ifinfo - -@example -covar = (J^T J)^@{-1@} -@end example - -@end ifinfo -@noindent -and is computed by QR decomposition of J with column-pivoting. Any -columns of @math{R} which satisfy -@tex -\beforedisplay -$$ -|R_{kk}| \leq epsrel |R_{11}| -$$ -\afterdisplay -@end tex -@ifinfo - -@example -|R_@{kk@}| <= epsrel |R_@{11@}| -@end example - -@end ifinfo -@noindent -are considered linearly-dependent and are excluded from the covariance -matrix (the corresponding rows and columns of the covariance matrix are -set to zero). - -If the minimisation uses the weighted least-squares function -@math{f_i = (Y(x, t_i) - y_i) / \sigma_i} then the covariance -matrix above gives the statistical error on the best-fit parameters -resulting from the Gaussian errors @math{\sigma_i} on -the underlying data @math{y_i}. This can be verified from the relation -@math{\delta f = J \delta c} and the fact that the fluctuations in @math{f} -from the data @math{y_i} are normalised by @math{\sigma_i} and -so satisfy @c{$\langle \delta f \delta f^T \rangle = I$} -@math{<\delta f \delta f^T> = I}. - -For an unweighted least-squares function @math{f_i = (Y(x, t_i) - -y_i)} the covariance matrix above should be multiplied by the variance -of the residuals about the best-fit @math{\sigma^2 = \sum (y_i - Y(x,t_i))^2 / (n-p)} -to give the variance-covariance -matrix @math{\sigma^2 C}. This estimates the statistical error on the -best-fit parameters from the scatter of the underlying data. - -For more information about covariance matrices see @ref{Fitting Overview}. -@end deftypefun - -@comment ============================================================ - -@node Example programs for Nonlinear Least-Squares Fitting -@section Examples - -The following example program fits a weighted exponential model with -background to experimental data, @math{Y = A \exp(-\lambda t) + b}. The -first part of the program sets up the functions @code{expb_f} and -@code{expb_df} to calculate the model and its Jacobian. The appropriate -fitting function is given by, -@tex -\beforedisplay -$$ -f_i = ((A \exp(-\lambda t_i) + b) - y_i)/\sigma_i -$$ -\afterdisplay -@end tex -@ifinfo - -@example -f_i = ((A \exp(-\lambda t_i) + b) - y_i)/\sigma_i -@end example - -@end ifinfo -@noindent -where we have chosen @math{t_i = i}. The Jacobian matrix @math{J} is -the derivative of these functions with respect to the three parameters -(@math{A}, @math{\lambda}, @math{b}). It is given by, -@tex -\beforedisplay -$$ -J_{ij} = {\partial f_i \over \partial x_j} -$$ -\afterdisplay -@end tex -@ifinfo - -@example -J_@{ij@} = d f_i / d x_j -@end example - -@end ifinfo -@noindent -where @math{x_0 = A}, @math{x_1 = \lambda} and @math{x_2 = b}. - -@example -@verbatiminclude examples/expfit.c -@end example - -@noindent -The main part of the program sets up a Levenberg-Marquardt solver and -some simulated random data. The data uses the known parameters -(1.0,5.0,0.1) combined with Gaussian noise (standard deviation = 0.1) -over a range of 40 timesteps. The initial guess for the parameters is -chosen as (0.0, 1.0, 0.0). - -@example -@verbatiminclude examples/nlfit.c -@end example - -@noindent -The iteration terminates when the change in x is smaller than 0.0001, as -both an absolute and relative change. Here are the results of running -the program: - -@smallexample -iter: 0 x=1.00000000 0.00000000 0.00000000 |f(x)|=117.349 -status=success -iter: 1 x=1.64659312 0.01814772 0.64659312 |f(x)|=76.4578 -status=success -iter: 2 x=2.85876037 0.08092095 1.44796363 |f(x)|=37.6838 -status=success -iter: 3 x=4.94899512 0.11942928 1.09457665 |f(x)|=9.58079 -status=success -iter: 4 x=5.02175572 0.10287787 1.03388354 |f(x)|=5.63049 -status=success -iter: 5 x=5.04520433 0.10405523 1.01941607 |f(x)|=5.44398 -status=success -iter: 6 x=5.04535782 0.10404906 1.01924871 |f(x)|=5.44397 -chisq/dof = 0.800996 -A = 5.04536 +/- 0.06028 -lambda = 0.10405 +/- 0.00316 -b = 1.01925 +/- 0.03782 -status = success -@end smallexample - -@noindent -The approximate values of the parameters are found correctly, and the -chi-squared value indicates a good fit (the chi-squared per degree of -freedom is approximately 1). In this case the errors on the parameters -can be estimated from the square roots of the diagonal elements of the -covariance matrix. - -If the chi-squared value shows a poor fit (i.e. @c{$\chi^2/(n-p) \gg 1$} -@math{chi^2/dof >> 1}) then the error estimates obtained from the -covariance matrix will be too small. In the example program the error estimates -are multiplied by @c{$\sqrt{\chi^2/(n-p)}$} -@math{\sqrt@{\chi^2/dof@}} in this case, a common way of increasing the -errors for a poor fit. Note that a poor fit will result from the use -an inappropriate model, and the scaled error estimates may then -be outside the range of validity for Gaussian errors. - -@iftex -@sp 1 -@center @image{fit-exp,3.4in} -@end iftex - -@node References and Further Reading for Nonlinear Least-Squares Fitting -@section References and Further Reading - -The @sc{minpack} algorithm is described in the following article, - -@itemize @w{} -@item -J.J. Mor@'e, @cite{The Levenberg-Marquardt Algorithm: Implementation and -Theory}, Lecture Notes in Mathematics, v630 (1978), ed G. Watson. -@end itemize - -@noindent -The following paper is also relevant to the algorithms described in this -section, - -@itemize @w{} -@item -J.J. Mor@'e, B.S. Garbow, K.E. Hillstrom, ``Testing Unconstrained -Optimization Software'', ACM Transactions on Mathematical Software, Vol -7, No 1 (1981), p 17--41. -@end itemize - diff -Nru gsl-doc-1.16/doc/multilarge.eps gsl-doc-2.3/doc/multilarge.eps --- gsl-doc-1.16/doc/multilarge.eps 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/multilarge.eps 2016-08-12 17:55:12.000000000 +0000 @@ -0,0 +1,3497 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: multilarge.eps +%%Creator: gnuplot 4.6 patchlevel 2 +%%CreationDate: Fri Aug 12 11:55:12 2016 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 482 +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color true def +/Blacktext false def +/Solid true def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -46 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 554 50 lineto 554 482 lineto 50 482 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.6 (September 2012) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse + clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title (multilarge.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 2) + /Author (palken) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Fri Aug 12 11:55:12 2016) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.050 0.050 scale +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 10080.00 8640.00 BoxColFill} if +1.000 UL +LTb +LCb setrgbcolor +686 4768 M +63 0 V +4038 0 R +-63 0 V +stroke +602 4768 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +686 5199 M +63 0 V +4038 0 R +-63 0 V +stroke +602 5199 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.5)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +686 5631 M +63 0 V +4038 0 R +-63 0 V +stroke +602 5631 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +686 6062 M +63 0 V +4038 0 R +-63 0 V +stroke +602 6062 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1.5)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +686 6494 M +63 0 V +4038 0 R +-63 0 V +stroke +602 6494 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 2)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +686 6925 M +63 0 V +4038 0 R +-63 0 V +stroke +602 6925 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 2.5)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +686 7356 M +63 0 V +4038 0 R +-63 0 V +stroke +602 7356 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 3)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +686 7788 M +63 0 V +4038 0 R +-63 0 V +stroke +602 7788 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 3.5)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +686 8219 M +63 0 V +4038 0 R +-63 0 V +stroke +602 8219 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 4)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +686 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +686 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1096 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +1096 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.1)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1506 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +1506 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.2)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1916 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +1916 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.3)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +2326 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +2326 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.4)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +2737 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +2737 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.5)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +3147 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +3147 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.6)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +3557 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +3557 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.7)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +3967 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +3967 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.8)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +4377 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +4377 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.9)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +4787 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +4787 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +686 8219 N +0 -3451 V +4101 0 V +0 3451 V +-4101 0 V +Z stroke +LCb setrgbcolor +112 6493 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 140.0 0.0 true true 0 (f\(t\))] +] -46.7 MCshow +grestore +LTb +LCb setrgbcolor +2736 4418 M +[ [(Helvetica) 140.0 0.0 true true 0 (t)] +] -46.7 MCshow +LTb +2736 8429 M +[ [(Helvetica) 140.0 0.0 true true 0 (Not regularized \()] +[(Symbol) 140.0 0.0 true true 0 (l)] +[(Helvetica) 140.0 0.0 true true 0 ( = 0\))] +] -46.7 MCshow +0.300 UP +1.000 UL +LTb +LCb setrgbcolor +% Begin plot #1 +0.500 UP +2.000 UL +LT0 +0.00 0.00 0.00 C LCb setrgbcolor +1274 8086 M +[ [(Helvetica) 140.0 0.0 true true 0 (Data)] +] -46.7 MRshow +LT0 +0.00 0.00 0.00 C 686 5642 CircleF +694 5680 CircleF +702 5637 CircleF +711 5635 CircleF +719 5660 CircleF +727 5630 CircleF +735 5607 CircleF +743 5710 CircleF +752 5655 CircleF +760 5629 CircleF +768 5554 CircleF +776 5783 CircleF +784 5846 CircleF +793 5522 CircleF +801 5628 CircleF +809 5776 CircleF +817 5667 CircleF +825 5593 CircleF +834 5659 CircleF +842 5645 CircleF +850 5558 CircleF +858 5769 CircleF +866 5743 CircleF +875 5747 CircleF +883 5720 CircleF +891 5689 CircleF +899 5840 CircleF +907 5812 CircleF +916 5878 CircleF +924 5775 CircleF +932 5865 CircleF +940 5837 CircleF +948 5845 CircleF +957 5905 CircleF +965 5881 CircleF +973 5697 CircleF +981 5945 CircleF +989 5917 CircleF +998 6187 CircleF +1006 5866 CircleF +1014 6014 CircleF +1022 5958 CircleF +1030 6219 CircleF +1039 6202 CircleF +1047 6163 CircleF +1055 6117 CircleF +1063 6477 CircleF +1072 6154 CircleF +1080 6247 CircleF +1088 6253 CircleF +1096 6352 CircleF +1104 6358 CircleF +1113 6385 CircleF +1121 6355 CircleF +1129 6577 CircleF +1137 6385 CircleF +1145 6690 CircleF +1154 6665 CircleF +1162 6952 CircleF +1170 6873 CircleF +1178 6903 CircleF +1186 6396 CircleF +1195 6835 CircleF +1203 6859 CircleF +1211 6954 CircleF +1219 7288 CircleF +1227 7045 CircleF +1236 6647 CircleF +1244 6979 CircleF +1252 6779 CircleF +1260 6910 CircleF +1268 7308 CircleF +1277 6817 CircleF +1285 7103 CircleF +1293 7050 CircleF +1301 6791 CircleF +1309 7098 CircleF +1318 7508 CircleF +1326 7341 CircleF +1334 7066 CircleF +1342 7198 CircleF +1350 6705 CircleF +1359 6716 CircleF +1367 6879 CircleF +1375 7318 CircleF +1383 7144 CircleF +1391 7427 CircleF +1400 6915 CircleF +1408 6884 CircleF +1416 6845 CircleF +1424 7180 CircleF +1432 6693 CircleF +1441 6742 CircleF +1449 6891 CircleF +1457 6566 CircleF +1465 6670 CircleF +1473 7094 CircleF +1482 6835 CircleF +1490 6647 CircleF +1498 6759 CircleF +1506 6714 CircleF +1514 6483 CircleF +1523 6397 CircleF +1531 6559 CircleF +1539 6223 CircleF +1547 6479 CircleF +1555 6511 CircleF +1564 6191 CircleF +1572 6462 CircleF +1580 6335 CircleF +1588 6534 CircleF +1596 6123 CircleF +1605 6125 CircleF +1613 5921 CircleF +1621 5957 CircleF +1629 6173 CircleF +1637 6166 CircleF +1646 5818 CircleF +1654 6182 CircleF +1662 6109 CircleF +1670 5968 CircleF +1678 6003 CircleF +1687 5858 CircleF +1695 5998 CircleF +1703 5722 CircleF +1711 5860 CircleF +1719 5776 CircleF +1728 5840 CircleF +1736 5842 CircleF +1744 5724 CircleF +1752 5814 CircleF +1760 5699 CircleF +1769 5680 CircleF +1777 5724 CircleF +1785 5861 CircleF +1793 5717 CircleF +1801 5622 CircleF +1810 5651 CircleF +1818 5836 CircleF +1826 5756 CircleF +1834 5686 CircleF +1843 5653 CircleF +1851 5736 CircleF +1859 5611 CircleF +1867 5659 CircleF +1875 5775 CircleF +1884 5708 CircleF +1892 5672 CircleF +1900 5626 CircleF +1908 5615 CircleF +1916 5600 CircleF +1925 5778 CircleF +1933 5553 CircleF +1941 5683 CircleF +1949 5688 CircleF +1957 5834 CircleF +1966 5616 CircleF +1974 5474 CircleF +1982 5780 CircleF +1990 5676 CircleF +1998 5595 CircleF +2007 5685 CircleF +2015 5670 CircleF +2023 5561 CircleF +2031 5482 CircleF +2039 5564 CircleF +2048 5596 CircleF +2056 5491 CircleF +2064 5712 CircleF +2072 5478 CircleF +2080 5615 CircleF +2089 5507 CircleF +2097 5570 CircleF +2105 5716 CircleF +2113 5555 CircleF +2121 5525 CircleF +2130 5523 CircleF +2138 5495 CircleF +2146 5532 CircleF +2154 5550 CircleF +2162 5586 CircleF +2171 5481 CircleF +2179 5454 CircleF +2187 5457 CircleF +2195 5426 CircleF +2203 5506 CircleF +2212 5556 CircleF +2220 5545 CircleF +2228 5427 CircleF +2236 5539 CircleF +2244 5495 CircleF +2253 5318 CircleF +2261 5400 CircleF +2269 5313 CircleF +2277 5476 CircleF +2285 5332 CircleF +2294 5392 CircleF +2302 5345 CircleF +2310 5275 CircleF +2318 5319 CircleF +2326 5350 CircleF +2335 5354 CircleF +2343 5250 CircleF +2351 5345 CircleF +2359 5337 CircleF +2367 5286 CircleF +2376 5365 CircleF +2384 5266 CircleF +2392 5185 CircleF +2400 5231 CircleF +2408 5203 CircleF +2417 5242 CircleF +2425 5194 CircleF +2433 5180 CircleF +2441 5120 CircleF +2449 5203 CircleF +2458 5166 CircleF +2466 5173 CircleF +2474 5201 CircleF +2482 5118 CircleF +2490 5129 CircleF +2499 5181 CircleF +2507 5131 CircleF +2515 5154 CircleF +2523 5092 CircleF +2531 5113 CircleF +2540 5090 CircleF +2548 5143 CircleF +2556 5133 CircleF +2564 5062 CircleF +2572 5126 CircleF +2581 5087 CircleF +2589 5101 CircleF +2597 5084 CircleF +2605 5073 CircleF +2614 5045 CircleF +2622 5132 CircleF +2630 5115 CircleF +2638 5058 CircleF +2646 5121 CircleF +2655 5100 CircleF +2663 5097 CircleF +2671 5077 CircleF +2679 5133 CircleF +2687 5157 CircleF +2696 5132 CircleF +2704 5102 CircleF +2712 5143 CircleF +2720 5125 CircleF +2728 5090 CircleF +2737 5195 CircleF +2745 5112 CircleF +2753 5051 CircleF +2761 5125 CircleF +2769 5241 CircleF +2778 5125 CircleF +2786 5127 CircleF +2794 5116 CircleF +2802 5172 CircleF +2810 5154 CircleF +2819 5212 CircleF +2827 5238 CircleF +2835 5273 CircleF +2843 5183 CircleF +2851 5236 CircleF +2860 5257 CircleF +2868 5320 CircleF +2876 5342 CircleF +2884 5397 CircleF +2892 5310 CircleF +2901 5411 CircleF +2909 5311 CircleF +2917 5420 CircleF +2925 5398 CircleF +2933 5233 CircleF +2942 5386 CircleF +2950 5332 CircleF +2958 5416 CircleF +2966 5416 CircleF +2974 5346 CircleF +2983 5536 CircleF +2991 5460 CircleF +2999 5542 CircleF +3007 5396 CircleF +3015 5522 CircleF +3024 5558 CircleF +3032 5459 CircleF +3040 5578 CircleF +3048 5494 CircleF +3056 5616 CircleF +3065 5459 CircleF +3073 5583 CircleF +3081 5501 CircleF +3089 5669 CircleF +3097 5624 CircleF +3106 5437 CircleF +3114 5545 CircleF +3122 5678 CircleF +3130 5587 CircleF +3138 5678 CircleF +3147 5597 CircleF +3155 5626 CircleF +3163 5581 CircleF +3171 5443 CircleF +3179 5512 CircleF +3188 5607 CircleF +3196 5703 CircleF +3204 5510 CircleF +3212 5584 CircleF +3220 5623 CircleF +3229 5748 CircleF +3237 5729 CircleF +3245 5696 CircleF +3253 5748 CircleF +3261 5622 CircleF +3270 5619 CircleF +3278 5599 CircleF +3286 5610 CircleF +3294 5746 CircleF +3302 5581 CircleF +3311 5683 CircleF +3319 5640 CircleF +3327 5646 CircleF +3335 5659 CircleF +3344 5651 CircleF +3352 5810 CircleF +3360 5656 CircleF +3368 5540 CircleF +3376 5660 CircleF +3385 5651 CircleF +3393 5607 CircleF +3401 5632 CircleF +3409 5682 CircleF +3417 5808 CircleF +3426 5882 CircleF +3434 5850 CircleF +3442 5649 CircleF +3450 5716 CircleF +3458 5847 CircleF +3467 5677 CircleF +3475 5839 CircleF +3483 5745 CircleF +3491 5810 CircleF +3499 5754 CircleF +3508 5793 CircleF +3516 5732 CircleF +3524 5646 CircleF +3532 5759 CircleF +3540 5896 CircleF +3549 5747 CircleF +3557 5924 CircleF +3565 5942 CircleF +3573 5811 CircleF +3581 6186 CircleF +3590 6047 CircleF +3598 6166 CircleF +3606 6089 CircleF +3614 6070 CircleF +3622 6107 CircleF +3631 6339 CircleF +3639 5795 CircleF +3647 6383 CircleF +3655 6328 CircleF +3663 6183 CircleF +3672 6404 CircleF +3680 6334 CircleF +3688 6725 CircleF +3696 6373 CircleF +3704 6415 CircleF +3713 6572 CircleF +3721 6759 CircleF +3729 6256 CircleF +3737 6611 CircleF +3745 6910 CircleF +3754 7131 CircleF +3762 6652 CircleF +3770 6930 CircleF +3778 6715 CircleF +3786 6694 CircleF +3795 6854 CircleF +3803 7135 CircleF +3811 6917 CircleF +3819 7004 CircleF +3827 7262 CircleF +3836 6875 CircleF +3844 7180 CircleF +3852 7255 CircleF +3860 7102 CircleF +3868 7240 CircleF +3877 7297 CircleF +3885 7007 CircleF +3893 7165 CircleF +3901 7001 CircleF +3909 6860 CircleF +3918 7779 CircleF +3926 7120 CircleF +3934 7201 CircleF +3942 7180 CircleF +3950 6734 CircleF +3959 7105 CircleF +3967 7239 CircleF +3975 6921 CircleF +3983 6909 CircleF +3991 7150 CircleF +4000 6876 CircleF +4008 6981 CircleF +4016 6632 CircleF +4024 7199 CircleF +4032 7087 CircleF +4041 6688 CircleF +4049 6696 CircleF +4057 6810 CircleF +4065 6322 CircleF +4073 6493 CircleF +4082 6599 CircleF +4090 6199 CircleF +4098 6535 CircleF +4106 6483 CircleF +4115 6543 CircleF +4123 6277 CircleF +4131 6524 CircleF +4139 6486 CircleF +4147 6436 CircleF +4156 6431 CircleF +4164 6085 CircleF +4172 6343 CircleF +4180 6017 CircleF +4188 5861 CircleF +4197 6127 CircleF +4205 6122 CircleF +4213 6029 CircleF +4221 5839 CircleF +4229 5963 CircleF +4238 6009 CircleF +4246 6026 CircleF +4254 5670 CircleF +4262 5766 CircleF +4270 5830 CircleF +4279 5683 CircleF +4287 5810 CircleF +4295 5888 CircleF +4303 5857 CircleF +4311 5694 CircleF +4320 5757 CircleF +4328 5726 CircleF +4336 5753 CircleF +4344 5709 CircleF +4352 5646 CircleF +4361 5911 CircleF +4369 5679 CircleF +4377 5617 CircleF +4385 5603 CircleF +4393 5598 CircleF +4402 5705 CircleF +4410 5566 CircleF +4418 5701 CircleF +4426 5588 CircleF +4434 5703 CircleF +4443 5730 CircleF +4451 5761 CircleF +4459 5801 CircleF +4467 5553 CircleF +4475 5562 CircleF +4484 5684 CircleF +4492 5517 CircleF +4500 5737 CircleF +4508 5398 CircleF +4516 5690 CircleF +4525 5675 CircleF +4533 5579 CircleF +4541 5453 CircleF +4549 5591 CircleF +4557 5587 CircleF +4566 5588 CircleF +4574 5490 CircleF +4582 5562 CircleF +4590 5664 CircleF +4598 5678 CircleF +4607 5459 CircleF +4615 5725 CircleF +4623 5656 CircleF +4631 5533 CircleF +4639 5705 CircleF +4648 5497 CircleF +4656 5480 CircleF +4664 5613 CircleF +4672 5460 CircleF +4680 5654 CircleF +4689 5688 CircleF +4697 5560 CircleF +4705 5694 CircleF +4713 5454 CircleF +4721 5639 CircleF +4730 5449 CircleF +4738 5646 CircleF +4746 5525 CircleF +4754 5639 CircleF +4762 5521 CircleF +4771 5515 CircleF +4779 5502 CircleF +1535 8086 CircleF +% End plot #1 +% Begin plot #2 +6.000 UL +LT1 +0.37 0.61 0.21 C LCb setrgbcolor +1274 7946 M +[ [(Helvetica) 140.0 0.0 true true 0 (Exact)] +] -46.7 MRshow +LT1 +0.37 0.61 0.21 C 1358 7946 M +354 0 V +686 5631 M +41 1 V +41 6 V +41 15 V +41 30 V +41 48 V +41 70 V +41 94 V +41 121 V +41 147 V +41 170 V +41 186 V +41 188 V +41 172 V +41 135 V +41 82 V +41 14 V +41 -54 V +41 -115 V +41 -160 V +41 -183 V +41 -189 V +41 -177 V +41 -158 V +41 -132 V +41 -105 V +41 -80 V +41 -56 V +41 -37 V +41 -21 V +41 -10 V +41 -2 V +41 0 V +41 -4 V +41 -11 V +41 -22 V +41 -35 V +41 -47 V +41 -58 V +41 -63 V +41 -64 V +41 -60 V +41 -54 V +41 -45 V +41 -36 V +41 -25 V +41 -16 V +41 -6 V +41 4 V +41 13 V +42 23 V +41 33 V +41 43 V +41 52 V +41 59 V +41 63 V +41 64 V +41 59 V +41 50 V +41 39 V +41 25 V +41 14 V +41 4 V +41 1 V +41 1 V +41 7 V +41 18 V +41 33 V +41 51 V +41 74 V +41 99 V +41 125 V +41 151 V +41 174 V +41 187 V +41 186 V +41 168 V +41 127 V +41 71 V +41 3 V +41 -66 V +41 -124 V +41 -164 V +41 -186 V +41 -188 V +41 -175 V +41 -153 V +41 -127 V +41 -101 V +41 -76 V +41 -53 V +41 -34 V +41 -19 V +41 -8 V +41 -1 V +41 -1 V +41 -4 V +41 -12 V +41 -25 V +41 -37 V +% End plot #2 +% Begin plot #3 +stroke +LT2 +0.00 0.38 0.68 C LCb setrgbcolor +1274 7806 M +[ [(Helvetica) 140.0 0.0 true true 0 (TSQR)] +] -46.7 MRshow +LT2 +0.00 0.38 0.68 C 1358 7806 M +354 0 V +686 5723 M +41 -123 V +41 30 V +41 49 V +41 34 V +41 29 V +41 46 V +41 82 V +41 124 V +41 164 V +41 192 V +41 199 V +41 188 V +41 158 V +41 114 V +41 60 V +41 3 V +41 -51 V +41 -100 V +41 -138 V +41 -163 V +41 -176 V +41 -176 V +41 -166 V +41 -146 V +41 -121 V +41 -94 V +41 -66 V +41 -41 V +41 -19 V +41 -4 V +41 5 V +41 8 V +41 5 V +41 -3 V +41 -14 V +41 -28 V +41 -41 V +41 -54 V +41 -64 V +41 -71 V +41 -73 V +41 -70 V +41 -64 V +41 -52 V +41 -38 V +41 -21 V +41 -3 V +41 15 V +41 31 V +42 45 V +41 57 V +41 63 V +41 66 V +41 64 V +41 59 V +41 51 V +41 39 V +41 29 V +41 17 V +41 7 V +41 1 V +41 -2 V +41 -1 V +41 6 V +41 18 V +41 34 V +41 54 V +41 75 V +41 98 V +41 120 V +41 137 V +41 151 V +41 156 V +41 154 V +41 143 V +41 123 V +41 94 V +41 57 V +41 14 V +41 -30 V +41 -74 V +41 -116 V +41 -149 V +41 -174 V +41 -184 V +41 -183 V +41 -167 V +41 -139 V +41 -102 V +41 -61 V +41 -23 V +41 10 V +41 27 V +41 29 V +41 11 V +41 -20 V +41 -52 V +41 -65 V +41 -30 V +% End plot #3 +% Begin plot #4 +stroke +LT3 +0.95 0.35 0.00 C LCb setrgbcolor +1274 7666 M +[ [(Helvetica) 140.0 0.0 true true 0 (Normal)] +] -46.7 MRshow +LT3 +0.95 0.35 0.00 C 1358 7666 M +354 0 V +686 6118 M +41 -447 V +41 -207 V +41 -35 V +41 80 V +41 150 V +41 187 V +41 199 V +41 194 V +41 174 V +41 149 V +41 118 V +41 86 V +41 54 V +41 24 V +41 -2 V +41 -26 V +41 -45 V +41 -62 V +41 -75 V +41 -84 V +41 -91 V +41 -94 V +41 -96 V +41 -97 V +41 -94 V +41 -92 V +41 -87 V +41 -84 V +41 -78 V +41 -72 V +41 -67 V +41 -61 V +41 -55 V +41 -48 V +41 -43 V +41 -38 V +41 -31 V +41 -26 V +41 -21 V +41 -16 V +41 -12 V +41 -8 V +41 -4 V +41 -1 V +41 1 V +41 3 V +41 5 V +41 7 V +41 7 V +42 8 V +41 8 V +41 8 V +41 10 V +41 10 V +41 11 V +41 14 V +41 16 V +41 19 V +41 24 V +41 29 V +41 35 V +41 43 V +41 51 V +41 59 V +41 69 V +41 78 V +41 86 V +41 95 V +41 102 V +41 106 V +41 110 V +41 110 V +41 108 V +41 101 V +41 92 V +41 78 V +41 60 V +41 40 V +41 16 V +41 -11 V +41 -38 V +41 -66 V +41 -93 V +41 -118 V +41 -137 V +41 -151 V +41 -159 V +41 -156 V +41 -144 V +41 -123 V +41 -92 V +41 -54 V +41 -12 V +41 29 V +41 63 V +41 76 V +41 59 V +41 -7 V +41 -140 V +% End plot #4 +stroke +1.000 UL +LTb +LCb setrgbcolor +686 8219 N +0 -3451 V +4101 0 V +0 3451 V +-4101 0 V +Z stroke +0.300 UP +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +5726 4768 M +63 0 V +4038 0 R +-63 0 V +stroke +5642 4768 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +5726 5199 M +63 0 V +4038 0 R +-63 0 V +stroke +5642 5199 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.5)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +5726 5631 M +63 0 V +4038 0 R +-63 0 V +stroke +5642 5631 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +5726 6062 M +63 0 V +4038 0 R +-63 0 V +stroke +5642 6062 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1.5)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +5726 6494 M +63 0 V +4038 0 R +-63 0 V +stroke +5642 6494 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 2)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +5726 6925 M +63 0 V +4038 0 R +-63 0 V +stroke +5642 6925 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 2.5)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +5726 7356 M +63 0 V +4038 0 R +-63 0 V +stroke +5642 7356 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 3)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +5726 7788 M +63 0 V +4038 0 R +-63 0 V +stroke +5642 7788 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 3.5)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +5726 8219 M +63 0 V +4038 0 R +-63 0 V +stroke +5642 8219 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 4)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +5726 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +5726 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +6136 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +6136 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.1)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +6546 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +6546 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.2)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +6956 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +6956 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.3)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +7366 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +7366 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.4)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +7777 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +7777 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.5)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +8187 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +8187 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.6)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +8597 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +8597 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.7)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +9007 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +9007 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.8)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +9417 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +9417 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.9)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +9827 4768 M +0 63 V +0 3388 R +0 -63 V +stroke +9827 4628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +5726 8219 N +0 -3451 V +4101 0 V +0 3451 V +-4101 0 V +Z stroke +LCb setrgbcolor +5152 6493 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 140.0 0.0 true true 0 (f\(t\))] +] -46.7 MCshow +grestore +LTb +LCb setrgbcolor +7776 4418 M +[ [(Helvetica) 140.0 0.0 true true 0 (t)] +] -46.7 MCshow +LTb +7776 8429 M +[ [(Helvetica) 140.0 0.0 true true 0 (Regularized \()] +[(Symbol) 140.0 0.0 true true 0 (l)] +[(Helvetica) 140.0 0.0 true true 0 ( = 1e-6\))] +] -46.7 MCshow +0.300 UP +1.000 UL +LTb +LCb setrgbcolor +% Begin plot #1 +0.500 UP +2.000 UL +LT0 +0.00 0.00 0.00 C 5726 5642 CircleF +5734 5680 CircleF +5742 5637 CircleF +5751 5635 CircleF +5759 5660 CircleF +5767 5630 CircleF +5775 5607 CircleF +5783 5710 CircleF +5792 5655 CircleF +5800 5629 CircleF +5808 5554 CircleF +5816 5783 CircleF +5824 5846 CircleF +5833 5522 CircleF +5841 5628 CircleF +5849 5776 CircleF +5857 5667 CircleF +5865 5593 CircleF +5874 5659 CircleF +5882 5645 CircleF +5890 5558 CircleF +5898 5769 CircleF +5906 5743 CircleF +5915 5747 CircleF +5923 5720 CircleF +5931 5689 CircleF +5939 5840 CircleF +5947 5812 CircleF +5956 5878 CircleF +5964 5775 CircleF +5972 5865 CircleF +5980 5837 CircleF +5988 5845 CircleF +5997 5905 CircleF +6005 5881 CircleF +6013 5697 CircleF +6021 5945 CircleF +6029 5917 CircleF +6038 6187 CircleF +6046 5866 CircleF +6054 6014 CircleF +6062 5958 CircleF +6070 6219 CircleF +6079 6202 CircleF +6087 6163 CircleF +6095 6117 CircleF +6103 6477 CircleF +6112 6154 CircleF +6120 6247 CircleF +6128 6253 CircleF +6136 6352 CircleF +6144 6358 CircleF +6153 6385 CircleF +6161 6355 CircleF +6169 6577 CircleF +6177 6385 CircleF +6185 6690 CircleF +6194 6665 CircleF +6202 6952 CircleF +6210 6873 CircleF +6218 6903 CircleF +6226 6396 CircleF +6235 6835 CircleF +6243 6859 CircleF +6251 6954 CircleF +6259 7288 CircleF +6267 7045 CircleF +6276 6647 CircleF +6284 6979 CircleF +6292 6779 CircleF +6300 6910 CircleF +6308 7308 CircleF +6317 6817 CircleF +6325 7103 CircleF +6333 7050 CircleF +6341 6791 CircleF +6349 7098 CircleF +6358 7508 CircleF +6366 7341 CircleF +6374 7066 CircleF +6382 7198 CircleF +6390 6705 CircleF +6399 6716 CircleF +6407 6879 CircleF +6415 7318 CircleF +6423 7144 CircleF +6431 7427 CircleF +6440 6915 CircleF +6448 6884 CircleF +6456 6845 CircleF +6464 7180 CircleF +6472 6693 CircleF +6481 6742 CircleF +6489 6891 CircleF +6497 6566 CircleF +6505 6670 CircleF +6513 7094 CircleF +6522 6835 CircleF +6530 6647 CircleF +6538 6759 CircleF +6546 6714 CircleF +6554 6483 CircleF +6563 6397 CircleF +6571 6559 CircleF +6579 6223 CircleF +6587 6479 CircleF +6595 6511 CircleF +6604 6191 CircleF +6612 6462 CircleF +6620 6335 CircleF +6628 6534 CircleF +6636 6123 CircleF +6645 6125 CircleF +6653 5921 CircleF +6661 5957 CircleF +6669 6173 CircleF +6677 6166 CircleF +6686 5818 CircleF +6694 6182 CircleF +6702 6109 CircleF +6710 5968 CircleF +6718 6003 CircleF +6727 5858 CircleF +6735 5998 CircleF +6743 5722 CircleF +6751 5860 CircleF +6759 5776 CircleF +6768 5840 CircleF +6776 5842 CircleF +6784 5724 CircleF +6792 5814 CircleF +6800 5699 CircleF +6809 5680 CircleF +6817 5724 CircleF +6825 5861 CircleF +6833 5717 CircleF +6841 5622 CircleF +6850 5651 CircleF +6858 5836 CircleF +6866 5756 CircleF +6874 5686 CircleF +6883 5653 CircleF +6891 5736 CircleF +6899 5611 CircleF +6907 5659 CircleF +6915 5775 CircleF +6924 5708 CircleF +6932 5672 CircleF +6940 5626 CircleF +6948 5615 CircleF +6956 5600 CircleF +6965 5778 CircleF +6973 5553 CircleF +6981 5683 CircleF +6989 5688 CircleF +6997 5834 CircleF +7006 5616 CircleF +7014 5474 CircleF +7022 5780 CircleF +7030 5676 CircleF +7038 5595 CircleF +7047 5685 CircleF +7055 5670 CircleF +7063 5561 CircleF +7071 5482 CircleF +7079 5564 CircleF +7088 5596 CircleF +7096 5491 CircleF +7104 5712 CircleF +7112 5478 CircleF +7120 5615 CircleF +7129 5507 CircleF +7137 5570 CircleF +7145 5716 CircleF +7153 5555 CircleF +7161 5525 CircleF +7170 5523 CircleF +7178 5495 CircleF +7186 5532 CircleF +7194 5550 CircleF +7202 5586 CircleF +7211 5481 CircleF +7219 5454 CircleF +7227 5457 CircleF +7235 5426 CircleF +7243 5506 CircleF +7252 5556 CircleF +7260 5545 CircleF +7268 5427 CircleF +7276 5539 CircleF +7284 5495 CircleF +7293 5318 CircleF +7301 5400 CircleF +7309 5313 CircleF +7317 5476 CircleF +7325 5332 CircleF +7334 5392 CircleF +7342 5345 CircleF +7350 5275 CircleF +7358 5319 CircleF +7366 5350 CircleF +7375 5354 CircleF +7383 5250 CircleF +7391 5345 CircleF +7399 5337 CircleF +7407 5286 CircleF +7416 5365 CircleF +7424 5266 CircleF +7432 5185 CircleF +7440 5231 CircleF +7448 5203 CircleF +7457 5242 CircleF +7465 5194 CircleF +7473 5180 CircleF +7481 5120 CircleF +7489 5203 CircleF +7498 5166 CircleF +7506 5173 CircleF +7514 5201 CircleF +7522 5118 CircleF +7530 5129 CircleF +7539 5181 CircleF +7547 5131 CircleF +7555 5154 CircleF +7563 5092 CircleF +7571 5113 CircleF +7580 5090 CircleF +7588 5143 CircleF +7596 5133 CircleF +7604 5062 CircleF +7612 5126 CircleF +7621 5087 CircleF +7629 5101 CircleF +7637 5084 CircleF +7645 5073 CircleF +7654 5045 CircleF +7662 5132 CircleF +7670 5115 CircleF +7678 5058 CircleF +7686 5121 CircleF +7695 5100 CircleF +7703 5097 CircleF +7711 5077 CircleF +7719 5133 CircleF +7727 5157 CircleF +7736 5132 CircleF +7744 5102 CircleF +7752 5143 CircleF +7760 5125 CircleF +7768 5090 CircleF +7777 5195 CircleF +7785 5112 CircleF +7793 5051 CircleF +7801 5125 CircleF +7809 5241 CircleF +7818 5125 CircleF +7826 5127 CircleF +7834 5116 CircleF +7842 5172 CircleF +7850 5154 CircleF +7859 5212 CircleF +7867 5238 CircleF +7875 5273 CircleF +7883 5183 CircleF +7891 5236 CircleF +7900 5257 CircleF +7908 5320 CircleF +7916 5342 CircleF +7924 5397 CircleF +7932 5310 CircleF +7941 5411 CircleF +7949 5311 CircleF +7957 5420 CircleF +7965 5398 CircleF +7973 5233 CircleF +7982 5386 CircleF +7990 5332 CircleF +7998 5416 CircleF +8006 5416 CircleF +8014 5346 CircleF +8023 5536 CircleF +8031 5460 CircleF +8039 5542 CircleF +8047 5396 CircleF +8055 5522 CircleF +8064 5558 CircleF +8072 5459 CircleF +8080 5578 CircleF +8088 5494 CircleF +8096 5616 CircleF +8105 5459 CircleF +8113 5583 CircleF +8121 5501 CircleF +8129 5669 CircleF +8137 5624 CircleF +8146 5437 CircleF +8154 5545 CircleF +8162 5678 CircleF +8170 5587 CircleF +8178 5678 CircleF +8187 5597 CircleF +8195 5626 CircleF +8203 5581 CircleF +8211 5443 CircleF +8219 5512 CircleF +8228 5607 CircleF +8236 5703 CircleF +8244 5510 CircleF +8252 5584 CircleF +8260 5623 CircleF +8269 5748 CircleF +8277 5729 CircleF +8285 5696 CircleF +8293 5748 CircleF +8301 5622 CircleF +8310 5619 CircleF +8318 5599 CircleF +8326 5610 CircleF +8334 5746 CircleF +8342 5581 CircleF +8351 5683 CircleF +8359 5640 CircleF +8367 5646 CircleF +8375 5659 CircleF +8384 5651 CircleF +8392 5810 CircleF +8400 5656 CircleF +8408 5540 CircleF +8416 5660 CircleF +8425 5651 CircleF +8433 5607 CircleF +8441 5632 CircleF +8449 5682 CircleF +8457 5808 CircleF +8466 5882 CircleF +8474 5850 CircleF +8482 5649 CircleF +8490 5716 CircleF +8498 5847 CircleF +8507 5677 CircleF +8515 5839 CircleF +8523 5745 CircleF +8531 5810 CircleF +8539 5754 CircleF +8548 5793 CircleF +8556 5732 CircleF +8564 5646 CircleF +8572 5759 CircleF +8580 5896 CircleF +8589 5747 CircleF +8597 5924 CircleF +8605 5942 CircleF +8613 5811 CircleF +8621 6186 CircleF +8630 6047 CircleF +8638 6166 CircleF +8646 6089 CircleF +8654 6070 CircleF +8662 6107 CircleF +8671 6339 CircleF +8679 5795 CircleF +8687 6383 CircleF +8695 6328 CircleF +8703 6183 CircleF +8712 6404 CircleF +8720 6334 CircleF +8728 6725 CircleF +8736 6373 CircleF +8744 6415 CircleF +8753 6572 CircleF +8761 6759 CircleF +8769 6256 CircleF +8777 6611 CircleF +8785 6910 CircleF +8794 7131 CircleF +8802 6652 CircleF +8810 6930 CircleF +8818 6715 CircleF +8826 6694 CircleF +8835 6854 CircleF +8843 7135 CircleF +8851 6917 CircleF +8859 7004 CircleF +8867 7262 CircleF +8876 6875 CircleF +8884 7180 CircleF +8892 7255 CircleF +8900 7102 CircleF +8908 7240 CircleF +8917 7297 CircleF +8925 7007 CircleF +8933 7165 CircleF +8941 7001 CircleF +8949 6860 CircleF +8958 7779 CircleF +8966 7120 CircleF +8974 7201 CircleF +8982 7180 CircleF +8990 6734 CircleF +8999 7105 CircleF +9007 7239 CircleF +9015 6921 CircleF +9023 6909 CircleF +9031 7150 CircleF +9040 6876 CircleF +9048 6981 CircleF +9056 6632 CircleF +9064 7199 CircleF +9072 7087 CircleF +9081 6688 CircleF +9089 6696 CircleF +9097 6810 CircleF +9105 6322 CircleF +9113 6493 CircleF +9122 6599 CircleF +9130 6199 CircleF +9138 6535 CircleF +9146 6483 CircleF +9155 6543 CircleF +9163 6277 CircleF +9171 6524 CircleF +9179 6486 CircleF +9187 6436 CircleF +9196 6431 CircleF +9204 6085 CircleF +9212 6343 CircleF +9220 6017 CircleF +9228 5861 CircleF +9237 6127 CircleF +9245 6122 CircleF +9253 6029 CircleF +9261 5839 CircleF +9269 5963 CircleF +9278 6009 CircleF +9286 6026 CircleF +9294 5670 CircleF +9302 5766 CircleF +9310 5830 CircleF +9319 5683 CircleF +9327 5810 CircleF +9335 5888 CircleF +9343 5857 CircleF +9351 5694 CircleF +9360 5757 CircleF +9368 5726 CircleF +9376 5753 CircleF +9384 5709 CircleF +9392 5646 CircleF +9401 5911 CircleF +9409 5679 CircleF +9417 5617 CircleF +9425 5603 CircleF +9433 5598 CircleF +9442 5705 CircleF +9450 5566 CircleF +9458 5701 CircleF +9466 5588 CircleF +9474 5703 CircleF +9483 5730 CircleF +9491 5761 CircleF +9499 5801 CircleF +9507 5553 CircleF +9515 5562 CircleF +9524 5684 CircleF +9532 5517 CircleF +9540 5737 CircleF +9548 5398 CircleF +9556 5690 CircleF +9565 5675 CircleF +9573 5579 CircleF +9581 5453 CircleF +9589 5591 CircleF +9597 5587 CircleF +9606 5588 CircleF +9614 5490 CircleF +9622 5562 CircleF +9630 5664 CircleF +9638 5678 CircleF +9647 5459 CircleF +9655 5725 CircleF +9663 5656 CircleF +9671 5533 CircleF +9679 5705 CircleF +9688 5497 CircleF +9696 5480 CircleF +9704 5613 CircleF +9712 5460 CircleF +9720 5654 CircleF +9729 5688 CircleF +9737 5560 CircleF +9745 5694 CircleF +9753 5454 CircleF +9761 5639 CircleF +9770 5449 CircleF +9778 5646 CircleF +9786 5525 CircleF +9794 5639 CircleF +9802 5521 CircleF +9811 5515 CircleF +9819 5502 CircleF +% End plot #1 +% Begin plot #2 +6.000 UL +LT1 +0.37 0.61 0.21 C 5726 5631 M +41 1 V +41 6 V +41 15 V +41 30 V +41 48 V +41 70 V +41 94 V +41 121 V +41 147 V +41 170 V +41 186 V +41 188 V +41 172 V +41 135 V +41 82 V +41 14 V +41 -54 V +41 -115 V +41 -160 V +41 -183 V +41 -189 V +41 -177 V +41 -158 V +41 -132 V +41 -105 V +41 -80 V +41 -56 V +41 -37 V +41 -21 V +41 -10 V +41 -2 V +41 0 V +41 -4 V +41 -11 V +41 -22 V +41 -35 V +41 -47 V +41 -58 V +41 -63 V +41 -64 V +41 -60 V +41 -54 V +41 -45 V +41 -36 V +41 -25 V +41 -16 V +41 -6 V +41 4 V +41 13 V +42 23 V +41 33 V +41 43 V +41 52 V +41 59 V +41 63 V +41 64 V +41 59 V +41 50 V +41 39 V +41 25 V +41 14 V +41 4 V +41 1 V +41 1 V +41 7 V +41 18 V +41 33 V +41 51 V +41 74 V +41 99 V +41 125 V +41 151 V +41 174 V +41 187 V +41 186 V +41 168 V +41 127 V +41 71 V +41 3 V +41 -66 V +41 -124 V +41 -164 V +41 -186 V +41 -188 V +41 -175 V +41 -153 V +41 -127 V +41 -101 V +41 -76 V +41 -53 V +41 -34 V +41 -19 V +41 -8 V +41 -1 V +41 -1 V +41 -4 V +41 -12 V +41 -25 V +41 -37 V +% End plot #2 +% Begin plot #3 +stroke +LT2 +0.00 0.38 0.68 C 5726 5907 M +41 -231 V +41 -132 V +41 -39 V +41 44 V +41 108 V +41 153 V +41 179 V +41 189 V +41 182 V +41 165 V +41 138 V +41 108 V +41 73 V +41 39 V +41 6 V +41 -24 V +41 -49 V +41 -70 V +41 -87 V +41 -98 V +41 -104 V +41 -108 V +41 -107 V +41 -104 V +41 -99 V +41 -93 V +41 -85 V +41 -78 V +41 -70 V +41 -63 V +41 -56 V +41 -51 V +41 -45 V +41 -41 V +41 -37 V +41 -33 V +41 -31 V +41 -27 V +41 -25 V +41 -22 V +41 -20 V +41 -16 V +41 -13 V +41 -9 V +41 -6 V +41 -3 V +41 1 V +41 4 V +41 8 V +42 9 V +41 13 V +41 14 V +41 16 V +41 18 V +41 19 V +41 20 V +41 22 V +41 24 V +41 27 V +41 30 V +41 35 V +41 39 V +41 46 V +41 54 V +41 61 V +41 71 V +41 79 V +41 89 V +41 97 V +41 104 V +41 109 V +41 112 V +41 112 V +41 107 V +41 98 V +41 86 V +41 68 V +41 46 V +41 20 V +41 -8 V +41 -39 V +41 -70 V +41 -99 V +41 -125 V +41 -147 V +41 -159 V +41 -165 V +41 -160 V +41 -143 V +41 -117 V +41 -82 V +41 -42 V +41 -1 V +41 37 V +41 60 V +41 64 V +41 38 V +41 -25 V +41 -129 V +% End plot #3 +% Begin plot #4 +stroke +LT3 +0.95 0.35 0.00 C 5726 6115 M +41 -445 V +41 -205 V +41 -35 V +41 80 V +41 149 V +41 187 V +41 199 V +41 193 V +41 174 V +41 149 V +41 118 V +41 86 V +41 54 V +41 25 V +41 -2 V +41 -25 V +41 -45 V +41 -62 V +41 -75 V +41 -84 V +41 -91 V +41 -94 V +41 -97 V +41 -96 V +41 -95 V +41 -92 V +41 -88 V +41 -84 V +41 -78 V +41 -72 V +41 -67 V +41 -61 V +41 -55 V +41 -48 V +41 -43 V +41 -37 V +41 -31 V +41 -26 V +41 -20 V +41 -16 V +41 -12 V +41 -8 V +41 -4 V +41 -1 V +41 1 V +41 3 V +41 5 V +41 6 V +41 7 V +42 7 V +41 8 V +41 9 V +41 9 V +41 10 V +41 11 V +41 13 V +41 16 V +41 20 V +41 24 V +41 30 V +41 35 V +41 44 V +41 51 V +41 59 V +41 69 V +41 78 V +41 87 V +41 94 V +41 102 V +41 106 V +41 110 V +41 109 V +41 108 V +41 100 V +41 92 V +41 77 V +41 61 V +41 39 V +41 16 V +41 -10 V +41 -38 V +41 -65 V +41 -93 V +41 -117 V +41 -136 V +41 -152 V +41 -158 V +41 -156 V +41 -145 V +41 -124 V +41 -93 V +41 -55 V +41 -12 V +41 29 V +41 63 V +41 78 V +41 61 V +41 -6 V +41 -142 V +% End plot #4 +stroke +1.000 UL +LTb +LCb setrgbcolor +5726 8219 N +0 -3451 V +4101 0 V +0 3451 V +-4101 0 V +Z stroke +0.300 UP +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +602 448 M +31 0 V +4154 0 R +-31 0 V +602 762 M +63 0 V +4122 0 R +-63 0 V +stroke +518 762 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (0)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 1076 M +31 0 V +4154 0 R +-31 0 V +602 1389 M +63 0 V +4122 0 R +-63 0 V +stroke +518 1389 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (2)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 1703 M +31 0 V +4154 0 R +-31 0 V +602 2017 M +63 0 V +4122 0 R +-63 0 V +stroke +518 2017 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (4)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 2331 M +31 0 V +4154 0 R +-31 0 V +602 2645 M +63 0 V +4122 0 R +-63 0 V +stroke +518 2645 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (6)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 2959 M +31 0 V +4154 0 R +-31 0 V +602 3272 M +63 0 V +4122 0 R +-63 0 V +stroke +518 3272 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (8)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 3586 M +31 0 V +4154 0 R +-31 0 V +602 3900 M +63 0 V +4122 0 R +-63 0 V +stroke +518 3900 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (10)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 448 M +0 63 V +0 3389 R +0 -63 V +stroke +602 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (1)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1232 448 M +0 31 V +0 3421 R +0 -31 V +1600 448 M +0 31 V +0 3421 R +0 -31 V +1862 448 M +0 31 V +0 3421 R +0 -31 V +2065 448 M +0 31 V +0 3421 R +0 -31 V +2230 448 M +0 31 V +0 3421 R +0 -31 V +2370 448 M +0 31 V +0 3421 R +0 -31 V +2492 448 M +0 31 V +0 3421 R +0 -31 V +2599 448 M +0 31 V +0 3421 R +0 -31 V +2695 448 M +0 63 V +0 3389 R +0 -63 V +stroke +2695 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (2)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +3324 448 M +0 31 V +0 3421 R +0 -31 V +3693 448 M +0 31 V +0 3421 R +0 -31 V +3954 448 M +0 31 V +0 3421 R +0 -31 V +4157 448 M +0 31 V +0 3421 R +0 -31 V +4323 448 M +0 31 V +0 3421 R +0 -31 V +4463 448 M +0 31 V +0 3421 R +0 -31 V +4584 448 M +0 31 V +0 3421 R +0 -31 V +4691 448 M +0 31 V +0 3421 R +0 -31 V +4787 448 M +0 63 V +0 3389 R +0 -63 V +stroke +4787 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (3)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +602 3900 N +602 448 L +4185 0 V +0 3452 V +-4185 0 V +Z stroke +LCb setrgbcolor +112 2174 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 140.0 0.0 true true 0 (solution norm ||c||)] +] -46.7 MCshow +grestore +LTb +LCb setrgbcolor +2694 98 M +[ [(Helvetica) 140.0 0.0 true true 0 (residual norm ||y - X c||)] +] -46.7 MCshow +LTb +2694 4110 M +[ [(Helvetica) 140.0 0.0 true true 0 (L-curve computed from TSQR method)] +] -46.7 MCshow +0.300 UP +1.000 UL +LTb +LCb setrgbcolor +% Begin plot #1 +6.000 UL +LT0 +0.45 0.59 0.90 C /Helvetica findfont 140 scalefont setfont +/vshift -46 def +3435 655 M +-48 19 V +-49 16 V +-46 14 V +-43 13 V +-38 11 V +-33 10 V +-28 9 V +-23 8 V +-18 7 V +-14 6 V +-12 6 V +-10 6 V +-9 6 V +-9 7 V +-9 8 V +-10 10 V +-11 12 V +-12 13 V +-13 15 V +-13 16 V +-14 15 V +-13 16 V +-13 14 V +-12 14 V +-10 13 V +-9 12 V +-9 12 V +-8 12 V +-9 13 V +-8 14 V +-10 16 V +-10 17 V +-12 19 V +-14 21 V +-16 22 V +-19 23 V +-22 24 V +-25 23 V +-28 23 V +-31 22 V +-33 20 V +-33 19 V +-32 17 V +-30 15 V +-27 13 V +-23 12 V +-20 11 V +-18 10 V +-15 9 V +-13 9 V +-12 9 V +-11 9 V +-11 9 V +-8 9 V +-8 9 V +-6 8 V +-6 7 V +-4 7 V +-3 6 V +-2 6 V +-2 5 V +-2 6 V +-1 6 V +-2 6 V +-1 7 V +-1 7 V +-1 8 V +-1 9 V +-2 11 V +-1 12 V +-1 14 V +-2 16 V +-1 19 V +-2 20 V +-2 22 V +-3 23 V +-3 24 V +-3 24 V +-3 24 V +-4 25 V +-5 26 V +-6 27 V +-6 27 V +-8 27 V +-9 28 V +-11 27 V +-13 27 V +-14 26 V +-16 25 V +-16 22 V +-17 21 V +-16 19 V +-14 17 V +-13 14 V +-11 13 V +-9 10 V +-6 9 V +-5 8 V +-4 7 V +-3 7 V +-3 6 V +-2 7 V +-2 7 V +-2 7 V +stroke 2131 2128 M +-2 9 V +-2 8 V +-1 9 V +-2 9 V +-1 10 V +-1 8 V +-1 9 V +-1 10 V +-1 10 V +-1 12 V +-1 14 V +-1 15 V +-1 17 V +-1 19 V +-2 19 V +-1 19 V +-1 18 V +-2 17 V +-1 15 V +-1 14 V +0 12 V +-1 10 V +0 10 V +-1 8 V +0 9 V +-1 9 V +0 9 V +0 12 V +-1 14 V +0 17 V +0 21 V +-1 22 V +-1 26 V +-1 27 V +-1 28 V +-1 30 V +-2 31 V +-3 31 V +-2 33 V +-4 32 V +-5 33 V +-5 32 V +-8 32 V +-8 32 V +-11 31 V +-14 31 V +-15 29 V +-18 27 V +-21 27 V +-22 24 V +-24 22 V +-23 20 V +-23 18 V +-20 16 V +-18 13 V +-14 12 V +-11 9 V +-8 8 V +-6 7 V +-4 5 V +-3 4 V +-2 4 V +-1 3 V +-1 2 V +-1 3 V +0 2 V +-1 3 V +0 3 V +-1 4 V +0 5 V +-1 6 V +0 7 V +0 7 V +-1 8 V +0 9 V +-1 10 V +0 12 V +-1 13 V +0 17 V +-1 19 V +0 23 V +-1 26 V +-2 28 V +-1 29 V +-2 31 V +-2 30 V +-3 31 V +-4 30 V +-4 29 V +-4 28 V +-5 27 V +-5 25 V +-6 23 V +-5 21 V +-5 19 V +% End plot #1 +stroke +1.000 UL +LTb +LCb setrgbcolor +602 3900 N +602 448 L +4185 0 V +0 3452 V +-4185 0 V +Z stroke +0.300 UP +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +5642 448 M +31 0 V +4154 0 R +-31 0 V +5642 762 M +63 0 V +4122 0 R +-63 0 V +stroke +5558 762 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (0)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +5642 1076 M +31 0 V +4154 0 R +-31 0 V +5642 1389 M +63 0 V +4122 0 R +-63 0 V +stroke +5558 1389 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (2)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +5642 1703 M +31 0 V +4154 0 R +-31 0 V +5642 2017 M +63 0 V +4122 0 R +-63 0 V +stroke +5558 2017 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (4)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +5642 2331 M +31 0 V +4154 0 R +-31 0 V +5642 2645 M +63 0 V +4122 0 R +-63 0 V +stroke +5558 2645 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (6)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +5642 2959 M +31 0 V +4154 0 R +-31 0 V +5642 3272 M +63 0 V +4122 0 R +-63 0 V +stroke +5558 3272 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (8)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +5642 3586 M +31 0 V +4154 0 R +-31 0 V +5642 3900 M +63 0 V +4122 0 R +-63 0 V +stroke +5558 3900 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (10)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +5642 448 M +0 63 V +0 3389 R +0 -63 V +stroke +5642 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (1)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +6272 448 M +0 31 V +0 3421 R +0 -31 V +6640 448 M +0 31 V +0 3421 R +0 -31 V +6902 448 M +0 31 V +0 3421 R +0 -31 V +7105 448 M +0 31 V +0 3421 R +0 -31 V +7270 448 M +0 31 V +0 3421 R +0 -31 V +7410 448 M +0 31 V +0 3421 R +0 -31 V +7532 448 M +0 31 V +0 3421 R +0 -31 V +7639 448 M +0 31 V +0 3421 R +0 -31 V +7735 448 M +0 63 V +0 3389 R +0 -63 V +stroke +7735 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (2)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +8364 448 M +0 31 V +0 3421 R +0 -31 V +8733 448 M +0 31 V +0 3421 R +0 -31 V +8994 448 M +0 31 V +0 3421 R +0 -31 V +9197 448 M +0 31 V +0 3421 R +0 -31 V +9363 448 M +0 31 V +0 3421 R +0 -31 V +9503 448 M +0 31 V +0 3421 R +0 -31 V +9624 448 M +0 31 V +0 3421 R +0 -31 V +9731 448 M +0 31 V +0 3421 R +0 -31 V +9827 448 M +0 63 V +0 3389 R +0 -63 V +stroke +9827 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (3)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +5642 3900 N +0 -3452 V +4185 0 V +0 3452 V +-4185 0 V +Z stroke +LCb setrgbcolor +5152 2174 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 140.0 0.0 true true 0 (solution norm ||c||)] +] -46.7 MCshow +grestore +LTb +LCb setrgbcolor +7734 98 M +[ [(Helvetica) 140.0 0.0 true true 0 (residual norm ||y - X c||)] +] -46.7 MCshow +LTb +7734 4110 M +[ [(Helvetica) 140.0 0.0 true true 0 (L-curve computed from normal equations method)] +] -46.7 MCshow +0.300 UP +1.000 UL +LTb +LCb setrgbcolor +% Begin plot #1 +6.000 UL +LT0 +0.45 0.59 0.90 C /Helvetica findfont 140 scalefont setfont +8475 655 M +-63 23 V +-61 20 V +-57 18 V +-50 14 V +-40 13 V +-32 10 V +-24 10 V +-18 8 V +-14 7 V +-12 8 V +-11 9 V +-12 11 V +-14 15 V +-16 17 V +-17 20 V +-17 20 V +-18 20 V +-16 19 V +-14 17 V +-13 16 V +-11 16 V +-11 16 V +-11 17 V +-12 20 V +-14 23 V +-16 26 V +-21 28 V +-25 31 V +-30 30 V +-35 30 V +-40 28 V +-43 26 V +-42 23 V +-39 20 V +-34 17 V +-28 14 V +-24 13 V +-19 12 V +-17 12 V +-15 12 V +-13 11 V +-11 12 V +-9 11 V +-7 9 V +-5 9 V +-3 8 V +-3 7 V +-2 7 V +-2 8 V +-2 8 V +-1 10 V +-2 11 V +-1 12 V +-2 15 V +-1 19 V +-2 22 V +-3 26 V +-3 28 V +-3 30 V +-4 31 V +-4 32 V +-6 33 V +-6 33 V +-8 35 V +-11 36 V +-13 36 V +-15 35 V +-19 34 V +-20 31 V +-22 28 V +-21 25 V +-18 21 V +-16 18 V +-12 14 V +-8 12 V +-6 10 V +-5 8 V +-3 8 V +-3 9 V +-3 9 V +-2 11 V +-2 11 V +-2 12 V +-2 12 V +-1 12 V +-1 11 V +-2 13 V +-1 15 V +-1 18 V +-2 21 V +-1 24 V +-2 24 V +-2 24 V +-1 23 V +-2 20 V +-1 17 V +-1 15 V +0 12 V +-1 10 V +0 11 V +-1 11 V +0 13 V +0 18 V +-1 22 V +stroke 7142 2505 M +0 25 V +-1 31 V +-4 83 V +2 -1 V +0 1 V +-2 41 V +-6 85 V +-18 113 V +24 -143 V +1 -24 V +0 3 V +0 3 V +0 1 V +0 2 V +0 -1 V +0 2 V +0 3 V +% End plot #1 +stroke +1.000 UL +LTb +LCb setrgbcolor +5642 3900 N +0 -3452 V +4185 0 V +0 3452 V +-4185 0 V +Z stroke +0.300 UP +1.000 UL +LTb +LCb setrgbcolor +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Symbol Helvetica diff -Nru gsl-doc-1.16/doc/multimin.texi gsl-doc-2.3/doc/multimin.texi --- gsl-doc-1.16/doc/multimin.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/multimin.texi 2016-07-07 20:36:10.000000000 +0000 @@ -115,10 +115,10 @@ @deftypefun {gsl_multimin_fdfminimizer *} gsl_multimin_fdfminimizer_alloc (const gsl_multimin_fdfminimizer_type * @var{T}, size_t @var{n}) @deftypefunx {gsl_multimin_fminimizer *} gsl_multimin_fminimizer_alloc (const gsl_multimin_fminimizer_type * @var{T}, size_t @var{n}) -@tpindex gsl_multimin_fdfminimizer -@tpindex gsl_multimin_fminimizer -@tpindex gsl_multimin_fdfminimizer_type -@tpindex gsl_multimin_fminimizer_type +@tindex gsl_multimin_fdfminimizer +@tindex gsl_multimin_fminimizer +@tindex gsl_multimin_fdfminimizer_type +@tindex gsl_multimin_fminimizer_type This function returns a pointer to a newly allocated instance of a minimizer of type @var{T} for an @var{n}-dimension function. If there is insufficient memory to create the minimizer then the function returns @@ -285,10 +285,11 @@ @deftypefunx double gsl_multimin_fdfminimizer_minimum (const gsl_multimin_fdfminimizer * @var{s}) @deftypefunx double gsl_multimin_fminimizer_minimum (const gsl_multimin_fminimizer * @var{s}) @deftypefunx {gsl_vector *} gsl_multimin_fdfminimizer_gradient (const gsl_multimin_fdfminimizer * @var{s}) +@deftypefunx {gsl_vector *} gsl_multimin_fdfminimizer_dx (const gsl_multimin_fdfminimizer * @var{s}) @deftypefunx double gsl_multimin_fminimizer_size (const gsl_multimin_fminimizer * @var{s}) These functions return the current best estimate of the location of the -minimum, the value of the function at that point, its gradient, -and minimizer specific characteristic size for the minimizer @var{s}. +minimum, the value of the function at that point, its gradient, the last +step increment of the estimate, and minimizer specific characteristic size for the minimizer @var{s}. @end deftypefun @deftypefun int gsl_multimin_fdfminimizer_restart (gsl_multimin_fdfminimizer * @var{s}) @@ -525,7 +526,7 @@ 0.001. The output of the program is shown below, @example -@verbatiminclude examples/multimin.out +@verbatiminclude examples/multimin.txt @end example @noindent @@ -555,7 +556,7 @@ shown below. @example -@verbatiminclude examples/nmsimplex.out +@verbatiminclude examples/nmsimplex.txt @end example @noindent diff -Nru gsl-doc-1.16/doc/multiroots.texi gsl-doc-2.3/doc/multiroots.texi --- gsl-doc-1.16/doc/multiroots.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/multiroots.texi 2015-11-03 16:21:55.000000000 +0000 @@ -121,8 +121,8 @@ different problems. @deftypefun {gsl_multiroot_fsolver *} gsl_multiroot_fsolver_alloc (const gsl_multiroot_fsolver_type * @var{T}, size_t @var{n}) -@tpindex gsl_multiroot_fsolver -@tpindex gsl_multiroot_fsolver_type +@tindex gsl_multiroot_fsolver +@tindex gsl_multiroot_fsolver_type This function returns a pointer to a newly allocated instance of a solver of type @var{T} for a system of @var{n} dimensions. For example, the following code creates an instance of a hybrid solver, @@ -142,8 +142,8 @@ @end deftypefun @deftypefun {gsl_multiroot_fdfsolver *} gsl_multiroot_fdfsolver_alloc (const gsl_multiroot_fdfsolver_type * @var{T}, size_t @var{n}) -@tpindex gsl_multiroot_fdfsolver -@tpindex gsl_multiroot_fdfsolver_type +@tindex gsl_multiroot_fdfsolver +@tindex gsl_multiroot_fdfsolver_type This function returns a pointer to a newly allocated instance of a derivative solver of type @var{T} for a system of @var{n} dimensions. For example, the following code creates an instance of a Newton-Raphson solver, diff -Nru gsl-doc-1.16/doc/multiset.texi gsl-doc-2.3/doc/multiset.texi --- gsl-doc-1.16/doc/multiset.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/multiset.texi 2015-11-09 05:23:40.000000000 +0000 @@ -24,7 +24,7 @@ @node The Multiset struct @section The Multiset struct -@tpindex gsl_multiset +@tindex gsl_multiset A multiset is defined by a structure containing three components, the values of @math{n} and @math{k}, and a pointer to the multiset array. The elements of the multiset array are all of type @code{size_t}, and @@ -194,7 +194,7 @@ @example $ ./a.out -@verbatiminclude examples/multiset.out +@verbatiminclude examples/multiset.txt @end example @noindent diff -Nru gsl-doc-1.16/doc/nlfit2.eps gsl-doc-2.3/doc/nlfit2.eps --- gsl-doc-1.16/doc/nlfit2.eps 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/nlfit2.eps 2016-07-07 20:36:10.000000000 +0000 @@ -0,0 +1,4753 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: nlfit2.eps +%%Creator: gnuplot 4.6 patchlevel 2 +%%CreationDate: Wed Jun 8 08:50:03 2016 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 410 302 +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color true def +/Blacktext false def +/Solid true def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -46 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 410 50 lineto 410 302 lineto 50 302 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.6 (September 2012) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse + clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title (nlfit2.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 2) + /Author (palken) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Wed Jun 8 08:50:03 2016) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.050 0.050 scale +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 7200.00 5040.00 BoxColFill} if +gsave % colour palette begin +/maxcolors 0 def +/HSV2RGB { exch dup 0.0 eq {pop exch pop dup dup} % achromatic gray + { /HSVs exch def /HSVv exch def 6.0 mul dup floor dup 3 1 roll sub + /HSVf exch def /HSVi exch cvi def /HSVp HSVv 1.0 HSVs sub mul def + /HSVq HSVv 1.0 HSVs HSVf mul sub mul def + /HSVt HSVv 1.0 HSVs 1.0 HSVf sub mul sub mul def + /HSVi HSVi 6 mod def 0 HSVi eq {HSVv HSVt HSVp} + {1 HSVi eq {HSVq HSVv HSVp}{2 HSVi eq {HSVp HSVv HSVt} + {3 HSVi eq {HSVp HSVq HSVv}{4 HSVi eq {HSVt HSVp HSVv} + {HSVv HSVp HSVq} ifelse} ifelse} ifelse} ifelse} ifelse + } ifelse} def +/Constrain { + dup 0 lt {0 exch pop}{dup 1 gt {1 exch pop} if} ifelse} def +/YIQ2RGB { + 3 copy -1.702 mul exch -1.105 mul add add Constrain 4 1 roll + 3 copy -0.647 mul exch -0.272 mul add add Constrain 5 1 roll + 0.621 mul exch -0.956 mul add add Constrain 3 1 roll } def +/CMY2RGB { 1 exch sub exch 1 exch sub 3 2 roll 1 exch sub 3 1 roll exch } def +/XYZ2RGB { 3 copy -0.9017 mul exch -0.1187 mul add exch 0.0585 mul exch add + Constrain 4 1 roll 3 copy -0.0279 mul exch 1.999 mul add exch + -0.9844 mul add Constrain 5 1 roll -0.2891 mul exch -0.5338 mul add + exch 1.91 mul exch add Constrain 3 1 roll} def +/SelectSpace {ColorSpace (HSV) eq {HSV2RGB}{ColorSpace (XYZ) eq { + XYZ2RGB}{ColorSpace (CMY) eq {CMY2RGB}{ColorSpace (YIQ) eq {YIQ2RGB} + if} ifelse} ifelse} ifelse} def +/InterpolatedColor true def +/grayindex {/gidx 0 def + {GrayA gidx get grayv ge {exit} if /gidx gidx 1 add def} loop} def +/dgdx {grayv GrayA gidx get sub GrayA gidx 1 sub get + GrayA gidx get sub div} def +/redvalue {RedA gidx get RedA gidx 1 sub get + RedA gidx get sub dgdxval mul add} def +/greenvalue {GreenA gidx get GreenA gidx 1 sub get + GreenA gidx get sub dgdxval mul add} def +/bluevalue {BlueA gidx get BlueA gidx 1 sub get + BlueA gidx get sub dgdxval mul add} def +/interpolate { + grayindex grayv GrayA gidx get sub abs 1e-5 le + {RedA gidx get GreenA gidx get BlueA gidx get} + {/dgdxval dgdx def redvalue greenvalue bluevalue} ifelse} def +/GrayA [0 .125 .25 .375 .5 .625 .75 .875 1 ] def +/RedA [0 0 0 0 .5 1 1 1 .5 ] def +/GreenA [0 0 .5 1 1 1 .5 0 0 ] def +/BlueA [.5 1 1 1 .5 0 0 0 0 ] def +/pm3dround {maxcolors 0 gt {dup 1 ge + {pop 1} {maxcolors mul floor maxcolors 1 sub div} ifelse} if} def +/pm3dGamma 1.0 1.5 Gamma mul div def +/ColorSpace (RGB) def +Color InterpolatedColor or { % COLOUR vs. GRAY map + InterpolatedColor { %% Interpolation vs. RGB-Formula + /g {stroke pm3dround /grayv exch def interpolate + SelectSpace setrgbcolor} bind def + }{ + /g {stroke pm3dround dup cF7 Constrain exch dup cF5 Constrain exch cF15 Constrain + SelectSpace setrgbcolor} bind def + } ifelse +}{ + /g {stroke pm3dround pm3dGamma exp setgray} bind def +} ifelse +1.000 UL +LTb +LCb setrgbcolor +686 588 M +63 0 V +5311 0 R +-63 0 V +stroke +602 588 M +[ [(Helvetica) 140.0 0.0 true true 0 (-0.5)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +686 1445 M +63 0 V +5311 0 R +-63 0 V +stroke +602 1445 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +686 2301 M +63 0 V +5311 0 R +-63 0 V +stroke +602 2301 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.5)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +686 3158 M +63 0 V +5311 0 R +-63 0 V +stroke +602 3158 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +686 4014 M +63 0 V +5311 0 R +-63 0 V +stroke +602 4014 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1.5)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +686 4871 M +63 0 V +5311 0 R +-63 0 V +stroke +602 4871 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 2)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +1134 588 M +0 63 V +0 4220 R +0 -63 V +stroke +1134 448 M +[ [(Helvetica) 140.0 0.0 true true 0 (-1)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +2253 588 M +0 63 V +0 4220 R +0 -63 V +stroke +2253 448 M +[ [(Helvetica) 140.0 0.0 true true 0 (-0.5)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +3373 588 M +0 63 V +0 4220 R +0 -63 V +stroke +3373 448 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +4493 588 M +0 63 V +0 4220 R +0 -63 V +stroke +4493 448 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.5)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +5612 588 M +0 63 V +0 4220 R +0 -63 V +stroke +5612 448 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +686 4871 N +686 588 L +5374 0 V +0 4283 V +-5374 0 V +Z stroke +LCb setrgbcolor +112 2729 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 140.0 0.0 true true 0 (x)] +[(Helvetica) 112.0 -42.0 true true 0 (2)] +] -32.7 MCshow +grestore +LTb +LCb setrgbcolor +3373 238 M +[ [(Helvetica) 140.0 0.0 true true 0 (x)] +[(Helvetica) 112.0 -42.0 true true 0 (1)] +] -32.7 MCshow +LTb +0.300 UP +1.000 UL +LTb +LCb setrgbcolor +% Begin plot #1 +2.000 UL +LT0 +0 g 1 g 3374 4871 M +1 g 3374 4871 M +-1 0 V +1 g 3373 4871 M +-1 0 V +0 g .975 g 3711 4871 M +.975 g 3711 4871 M +-114 -27 V +.975 g 3597 4844 M +-224 -17 V +.975 g 3373 4827 M +-224 17 V +.975 g 3149 4844 M +-114 27 V +0 g .95 g 3869 4871 M +.95 g 3869 4871 M +-48 -19 V +.95 g 3821 4852 M +-224 -52 V +.95 g 3597 4800 M +-224 -17 V +.95 g 3373 4783 M +-224 17 V +.95 g 3149 4800 M +-224 52 V +.95 g 2925 4852 M +-48 19 V +0 g .925 g 703 588 M +.925 g 703 588 M +-17 29 V +0 g .925 g 3985 4871 M +.925 g 3985 4871 M +-164 -64 V +.925 g 3821 4807 M +-224 -51 V +.925 g 3597 4756 M +-224 -17 V +.925 g 3373 4739 M +-224 17 V +.925 g 3149 4756 M +-224 51 V +.925 g 2925 4807 M +-164 64 V +0 g .925 g 6060 617 M +.925 g 6060 617 M +-17 -29 V +0 g .9 g 730 588 M +.9 g 730 588 M +-44 74 V +0 g .9 g 4086 4871 M +.9 g 4086 4871 M +-41 -22 V +.9 g 4045 4849 M +-224 -86 V +.9 g 3821 4763 M +-224 -51 V +.9 g 3597 4712 M +-164 -12 V +.9 g 3433 4700 M +-60 -5 V +.9 g 3373 4695 M +-60 5 V +.9 g 3313 4700 M +-164 12 V +.9 g 3149 4712 M +-224 51 V +.9 g 2925 4763 M +-224 86 V +.9 g 2701 4849 M +-41 22 V +0 g .9 g 6060 662 M +.9 g 6060 662 M +-44 -74 V +0 g .875 g 756 588 M +.875 g 756 588 M +686 708 L +0 g .875 g 4171 4871 M +.875 g 4171 4871 M +-126 -68 V +.875 g 4045 4803 M +-224 -85 V +.875 g 3821 4718 M +-80 -18 V +.875 g 3741 4700 M +-144 -34 V +.875 g 3597 4666 M +-224 -17 V +.875 g 3373 4649 M +-224 17 V +.875 g 3149 4666 M +-144 34 V +.875 g 3005 4700 M +-80 18 V +.875 g 2925 4718 M +-224 85 V +.875 g 2701 4803 M +-126 68 V +0 g .875 g 6060 707 M +.875 g 6060 707 M +5990 588 L +0 g .85 g 783 588 M +.85 g 783 588 M +686 753 L +0 g .85 g 4256 4871 M +.85 g 4256 4871 M +4045 4757 L +.85 g 4045 4757 M +-151 -57 V +.85 g 3894 4700 M +-73 -29 V +.85 g 3821 4671 M +-224 -51 V +.85 g 3597 4620 M +-224 -18 V +.85 g 3373 4602 M +-224 18 V +.85 g 3149 4620 M +-224 51 V +.85 g 2925 4671 M +-73 29 V +.85 g 2852 4700 M +-151 57 V +.85 g 2701 4757 M +-212 114 V +0 g .85 g 6060 753 M +.85 g 6060 753 M +5963 588 L +0 g .825 g 810 588 M +.825 g 810 588 M +710 759 L +.825 g 710 759 M +-24 42 V +0 g .825 g 4328 4871 M +.825 g 4328 4871 M +-59 -41 V +.825 g 4269 4830 M +4045 4711 L +.825 g 4045 4711 M +-29 -11 V +.825 g 4016 4700 M +-195 -76 V +.825 g 3821 4624 M +-224 -51 V +.825 g 3597 4573 M +-224 -17 V +.825 g 3373 4556 M +-224 17 V +.825 g 3149 4573 M +-224 51 V +.825 g 2925 4624 M +-195 76 V +.825 g 2730 4700 M +-29 11 V +.825 g 2701 4711 M +-224 119 V +.825 g 2477 4830 M +-59 41 V +0 g .825 g 6060 800 M +.825 g 6060 800 M +-24 -41 V +.825 g 6036 759 M +5936 588 L +0 g .8 g 836 588 M +.8 g 836 588 M +739 759 L +.8 g 739 759 M +-53 89 V +0 g .8 g 4397 4871 M +.8 g 4397 4871 M +-128 -89 V +.8 g 4269 4782 M +-156 -82 V +.8 g 4113 4700 M +-68 -37 V +.8 g 4045 4663 M +-224 -86 V +.8 g 3821 4577 M +-215 -49 V +.8 g 3606 4528 M +-9 -2 V +.8 g 3597 4526 M +-224 -17 V +.8 g 3373 4509 M +-224 17 V +.8 g 3149 4526 M +-9 2 V +.8 g 3140 4528 M +-215 49 V +.8 g 2925 4577 M +-224 86 V +.8 g 2701 4663 M +-68 37 V +.8 g 2633 4700 M +-156 82 V +.8 g 2477 4782 M +-128 89 V +0 g .8 g 6060 848 M +.8 g 6060 848 M +-52 -89 V +.8 g 6008 759 M +5910 588 L +0 g .775 g 863 588 M +.775 g 863 588 M +767 759 L +.775 g 767 759 M +686 896 L +0 g .775 g 4467 4871 M +.775 g 4467 4871 M +4269 4734 L +.775 g 4269 4734 M +-66 -34 V +.775 g 4203 4700 M +-158 -86 V +.775 g 4045 4614 M +-224 -85 V +.775 g 3821 4529 M +-5 -1 V +.775 g 3816 4528 M +-219 -51 V +.775 g 3597 4477 M +-224 -17 V +.775 g 3373 4460 M +-224 17 V +.775 g 3149 4477 M +-219 51 V +.775 g 2930 4528 M +-5 1 V +.775 g 2925 4529 M +-224 85 V +.775 g 2701 4614 M +-159 86 V +.775 g 2542 4700 M +-65 34 V +.775 g 2477 4734 M +-198 137 V +0 g .775 g 6060 896 M +.775 g 6060 896 M +5979 759 L +.775 g 5979 759 M +5883 588 L +0 g .75 g 890 588 M +.75 g 890 588 M +795 759 L +.75 g 795 759 M +694 931 L +.75 g 694 931 M +-8 14 V +0 g .75 g 4530 4871 M +.75 g 4530 4871 M +-37 -32 V +.75 g 4493 4839 M +4289 4700 L +.75 g 4289 4700 M +-20 -14 V +.75 g 4269 4686 M +4045 4565 L +.75 g 4045 4565 M +-98 -37 V +.75 g 3947 4528 M +-126 -49 V +.75 g 3821 4479 M +-224 -51 V +.75 g 3597 4428 M +-224 -17 V +.75 g 3373 4411 M +-224 17 V +.75 g 3149 4428 M +-224 51 V +.75 g 2925 4479 M +-126 49 V +.75 g 2799 4528 M +-98 37 V +.75 g 2701 4565 M +-224 121 V +.75 g 2477 4686 M +-20 14 V +.75 g 2457 4700 M +-204 139 V +.75 g 2253 4839 M +-37 32 V +0 g .75 g 6060 945 M +.75 g 6060 945 M +-8 -14 V +.75 g 6052 931 M +5951 759 L +.75 g 5951 759 M +5856 588 L +0 g .725 g 918 588 M +.725 g 918 588 M +-8 13 V +.725 g 910 601 M +823 759 L +.725 g 823 759 M +724 931 L +.725 g 724 931 M +-38 65 V +0 g .725 g 4590 4871 M +.725 g 4590 4871 M +-97 -82 V +.725 g 4493 4789 M +-131 -89 V +.725 g 4362 4700 M +-93 -65 V +.725 g 4269 4635 M +4068 4528 L +.725 g 4068 4528 M +-23 -12 V +.725 g 4045 4516 M +-224 -87 V +.725 g 3821 4429 M +-224 -50 V +.725 g 3597 4379 M +-224 -17 V +.725 g 3373 4362 M +-224 17 V +.725 g 3149 4379 M +-224 50 V +.725 g 2925 4429 M +-224 87 V +.725 g 2701 4516 M +-23 12 V +.725 g 2678 4528 M +-201 107 V +.725 g 2477 4635 M +-93 65 V +.725 g 2384 4700 M +-131 89 V +.725 g 2253 4789 M +-97 82 V +0 g .725 g 6060 995 M +.725 g 6060 995 M +-38 -64 V +.725 g 6022 931 M +5923 759 L +.725 g 5923 759 M +5836 600 L +.725 g 5836 600 M +-8 -12 V +0 g .7 g 951 588 M +.7 g 951 588 M +-41 64 V +.7 g 910 652 M +851 759 L +.7 g 851 759 M +754 931 L +.7 g 754 931 M +-68 115 V +0 g .7 g 4650 4871 M +.7 g 4650 4871 M +4493 4739 L +.7 g 4493 4739 M +-57 -39 V +.7 g 4436 4700 M +4269 4584 L +.7 g 4269 4584 M +-106 -56 V +.7 g 4163 4528 M +-118 -64 V +.7 g 4045 4464 M +-224 -85 V +.7 g 3821 4379 M +-99 -22 V +.7 g 3722 4357 M +-125 -29 V +.7 g 3597 4328 M +-224 -18 V +.7 g 3373 4310 M +-224 18 V +.7 g 3149 4328 M +-125 29 V +.7 g 3024 4357 M +-99 22 V +.7 g 2925 4379 M +-224 85 V +.7 g 2701 4464 M +-118 64 V +.7 g 2583 4528 M +-106 56 V +.7 g 2477 4584 M +-167 116 V +.7 g 2310 4700 M +-57 39 V +.7 g 2253 4739 M +-157 132 V +0 g .7 g 6060 1046 M +.7 g 6060 1046 M +5992 931 L +.7 g 5992 931 M +5895 759 L +.7 g 5895 759 M +5836 652 L +.7 g 5836 652 M +-41 -64 V +0 g .675 g 985 588 M +.675 g 985 588 M +910 704 L +.675 g 910 704 M +-30 55 V +.675 g 880 759 M +784 931 L +.675 g 784 931 M +-98 166 V +0 g .675 g 4710 4871 M +.675 g 4710 4871 M +4507 4700 L +.675 g 4507 4700 M +-14 -12 V +.675 g 4493 4688 M +4269 4534 L +.675 g 4269 4534 M +-10 -6 V +.675 g 4259 4528 M +4045 4413 L +.675 g 4045 4413 M +-148 -56 V +.675 g 3897 4357 M +-76 -30 V +.675 g 3821 4327 M +-224 -52 V +.675 g 3597 4275 M +-224 -17 V +.675 g 3373 4258 M +-224 17 V +.675 g 3149 4275 M +-224 52 V +.675 g 2925 4327 M +-76 30 V +.675 g 2849 4357 M +-148 56 V +.675 g 2701 4413 M +-214 115 V +.675 g 2487 4528 M +-10 6 V +.675 g 2477 4534 M +-224 154 V +.675 g 2253 4688 M +-14 12 V +.675 g 2239 4700 M +-203 171 V +0 g .675 g 6060 1097 M +.675 g 6060 1097 M +5962 931 L +.675 g 5962 931 M +5867 759 L +.675 g 5867 759 M +-31 -55 V +.675 g 5836 704 M +5762 588 L +0 g .65 g 1018 588 M +.65 g 1018 588 M +910 755 L +.65 g 910 755 M +-2 4 V +.65 g 908 759 M +814 931 L +.65 g 814 931 M +-99 171 V +.65 g 715 1102 M +-29 48 V +0 g .65 g 4766 4871 M +.65 g 4766 4871 M +-49 -48 V +.65 g 4717 4823 M +4571 4700 L +.65 g 4571 4700 M +-78 -66 V +.65 g 4493 4634 M +4339 4528 L +.65 g 4339 4528 M +-70 -48 V +.65 g 4269 4480 M +4045 4361 L +.65 g 4045 4361 M +-11 -4 V +.65 g 4034 4357 M +-213 -83 V +.65 g 3821 4274 M +-224 -51 V +.65 g 3597 4223 M +-224 -17 V +.65 g 3373 4206 M +-224 17 V +.65 g 3149 4223 M +-224 51 V +.65 g 2925 4274 M +-213 83 V +.65 g 2712 4357 M +-11 4 V +.65 g 2701 4361 M +-224 119 V +.65 g 2477 4480 M +-70 48 V +.65 g 2407 4528 M +-154 106 V +.65 g 2253 4634 M +-78 66 V +.65 g 2175 4700 M +-145 123 V +.65 g 2030 4823 M +-50 48 V +0 g .65 g 6060 1150 M +.65 g 6060 1150 M +-29 -48 V +.65 g 6031 1102 M +5932 931 L +.65 g 5932 931 M +5838 759 L +.65 g 5838 759 M +-2 -4 V +.65 g 5836 755 M +5728 588 L +0 g .625 g 1051 588 M +.625 g 1051 588 M +943 759 L +.625 g 943 759 M +-33 51 V +.625 g 910 810 M +844 931 L +.625 g 844 931 M +-97 171 V +.625 g 747 1102 M +-61 102 V +0 g .625 g 4820 4871 M +.625 g 4820 4871 M +4717 4769 L +.625 g 4717 4769 M +-82 -69 V +.625 g 4635 4700 M +4493 4581 L +.625 g 4493 4581 M +-76 -53 V +.625 g 4417 4528 M +4269 4426 L +.625 g 4269 4426 M +-131 -69 V +.625 g 4138 4357 M +-93 -51 V +.625 g 4045 4306 M +-224 -85 V +.625 g 3821 4221 M +-157 -35 V +.625 g 3664 4186 M +-67 -16 V +.625 g 3597 4170 M +-224 -17 V +.625 g 3373 4153 M +-224 17 V +.625 g 3149 4170 M +-67 16 V +.625 g 3082 4186 M +-157 35 V +.625 g 2925 4221 M +-224 85 V +.625 g 2701 4306 M +-93 51 V +.625 g 2608 4357 M +-131 69 V +.625 g 2477 4426 M +-148 102 V +.625 g 2329 4528 M +-76 52 V +.625 g 2253 4580 M +-142 120 V +.625 g 2111 4700 M +-81 69 V +.625 g 2030 4769 M +-104 102 V +0 g .625 g 6060 1204 M +.625 g 6060 1204 M +-61 -102 V +.625 g 5999 1102 M +5902 931 L +.625 g 5902 931 M +5836 810 L +.625 g 5836 810 M +-33 -51 V +.625 g 5803 759 M +5695 588 L +0 g .6 g 1084 588 M +.6 g 1084 588 M +978 759 L +.6 g 978 759 M +910 865 L +.6 g 910 865 M +-36 66 V +.6 g 874 931 M +-95 171 V +.6 g 779 1102 M +-93 156 V +0 g .6 g 4875 4871 M +.6 g 4875 4871 M +4717 4715 L +.6 g 4717 4715 M +-19 -15 V +.6 g 4698 4700 M +4494 4528 L +.6 g 4494 4528 M +-1 -1 V +.6 g 4493 4527 M +4269 4372 L +.6 g 4269 4372 M +-29 -15 V +.6 g 4240 4357 M +4045 4252 L +.6 g 4045 4252 M +-175 -66 V +.6 g 3870 4186 M +-49 -19 V +.6 g 3821 4167 M +-224 -53 V +.6 g 3597 4114 M +-224 -17 V +.6 g 3373 4097 M +-224 17 V +.6 g 3149 4114 M +-224 53 V +.6 g 2925 4167 M +-49 19 V +.6 g 2876 4186 M +-175 65 V +.6 g 2701 4251 M +-195 106 V +.6 g 2506 4357 M +-29 15 V +.6 g 2477 4372 M +-224 155 V +.6 g 2253 4527 M +-1 1 V +.6 g 2252 4528 M +-205 172 V +.6 g 2047 4700 M +-17 15 V +.6 g 2030 4715 M +-159 156 V +0 g .6 g 6060 1258 M +.6 g 6060 1258 M +-92 -156 V +.6 g 5968 1102 M +5872 931 L +.6 g 5872 931 M +-36 -66 V +.6 g 5836 865 M +5768 759 L +.6 g 5768 759 M +5662 588 L +0 g .575 g 1117 588 M +.575 g 1117 588 M +1014 759 L +.575 g 1014 759 M +910 920 L +.575 g 910 920 M +-6 11 V +.575 g 904 931 M +-94 171 V +.575 g 810 1102 M +-99 171 V +.575 g 711 1273 M +-25 42 V +0 g .575 g 4930 4871 M +.575 g 4930 4871 M +4758 4700 L +.575 g 4758 4700 M +-41 -41 V +.575 g 4717 4659 M +4562 4528 L +.575 g 4562 4528 M +-69 -58 V +.575 g 4493 4470 M +4328 4357 L +.575 g 4328 4357 M +-59 -41 V +.575 g 4269 4316 M +4045 4197 L +.575 g 4045 4197 M +-29 -11 V +.575 g 4016 4186 M +-195 -76 V +.575 g 3821 4110 M +-224 -51 V +.575 g 3597 4059 M +-224 -17 V +.575 g 3373 4042 M +-224 17 V +.575 g 3149 4059 M +-224 51 V +.575 g 2925 4110 M +-195 76 V +.575 g 2730 4186 M +-29 11 V +.575 g 2701 4197 M +-224 119 V +.575 g 2477 4316 M +-59 41 V +.575 g 2418 4357 M +-165 113 V +.575 g 2253 4470 M +-70 58 V +.575 g 2183 4528 M +-153 130 V +.575 g 2030 4658 M +-42 42 V +.575 g 1988 4700 M +-172 171 V +0 g .575 g 6060 1314 M +.575 g 6060 1314 M +-24 -41 V +.575 g 6036 1273 M +5936 1102 L +.575 g 5936 1102 M +5842 931 L +.575 g 5842 931 M +-6 -11 V +.575 g 5836 920 M +5733 759 L +.575 g 5733 759 M +5629 588 L +0 g .55 g 1155 588 M +.55 g 1155 588 M +-21 30 V +.55 g 1134 618 M +-85 141 V +.55 g 1049 759 M +940 931 L +.55 g 940 931 M +-30 47 V +.55 g 910 978 M +-68 124 V +.55 g 842 1102 M +-97 171 V +.55 g 745 1273 M +-59 99 V +0 g .55 g 4982 4871 M +.55 g 4982 4871 M +-42 -47 V +.55 g 4940 4824 M +4817 4700 L +.55 g 4817 4700 M +-100 -99 V +.55 g 4717 4601 M +-87 -73 V +.55 g 4630 4528 M +4493 4413 L +.55 g 4493 4413 M +-82 -56 V +.55 g 4411 4357 M +-142 -99 V +.55 g 4269 4258 M +-137 -72 V +.55 g 4132 4186 M +-87 -47 V +.55 g 4045 4139 M +-224 -86 V +.55 g 3821 4053 M +-173 -39 V +.55 g 3648 4014 M +-51 -12 V +.55 g 3597 4002 M +-224 -17 V +.55 g 3373 3985 M +-224 17 V +.55 g 3149 4002 M +-51 12 V +.55 g 3098 4014 M +-173 39 V +.55 g 2925 4053 M +-224 86 V +.55 g 2701 4139 M +-87 47 V +.55 g 2614 4186 M +-137 72 V +.55 g 2477 4258 M +-143 99 V +.55 g 2334 4357 M +-81 56 V +.55 g 2253 4413 M +-138 115 V +.55 g 2115 4528 M +-85 73 V +.55 g 2030 4601 M +-101 99 V +.55 g 1929 4700 M +-123 124 V +.55 g 1806 4824 M +-42 47 V +0 g .55 g 6060 1372 M +.55 g 6060 1372 M +-59 -99 V +.55 g 6001 1273 M +-97 -171 V +.55 g 5904 1102 M +5836 978 L +.55 g 5836 978 M +-30 -47 V +.55 g 5806 931 M +5697 759 L +.55 g 5697 759 M +5612 618 L +.55 g 5612 618 M +-21 -30 V +0 g .525 g 1197 588 M +.525 g 1197 588 M +-63 89 V +.525 g 1134 677 M +-50 82 V +.525 g 1084 759 M +978 931 L +.525 g 978 931 M +-68 106 V +.525 g 910 1037 M +-36 65 V +.525 g 874 1102 M +-95 171 V +.525 g 779 1273 M +-93 157 V +0 g .525 g 5034 4871 M +.525 g 5034 4871 M +-94 -106 V +.525 g 4940 4765 M +-65 -65 V +.525 g 4875 4700 M +4717 4544 L +.525 g 4717 4544 M +-18 -16 V +.525 g 4699 4528 M +4494 4357 L +.525 g 4494 4357 M +-1 -2 V +.525 g 4493 4355 M +4269 4201 L +.525 g 4269 4201 M +-29 -15 V +.525 g 4240 4186 M +4045 4080 L +.525 g 4045 4080 M +-175 -66 V +.525 g 3870 4014 M +-49 -19 V +.525 g 3821 3995 M +-224 -52 V +.525 g 3597 3943 M +-224 -17 V +.525 g 3373 3926 M +-224 17 V +.525 g 3149 3943 M +-224 52 V +.525 g 2925 3995 M +-49 19 V +.525 g 2876 4014 M +-175 66 V +.525 g 2701 4080 M +-195 106 V +.525 g 2506 4186 M +-29 15 V +.525 g 2477 4201 M +-224 154 V +.525 g 2253 4355 M +-2 2 V +.525 g 2251 4357 M +-204 171 V +.525 g 2047 4528 M +-17 15 V +.525 g 2030 4543 M +-159 157 V +.525 g 1871 4700 M +-65 65 V +.525 g 1806 4765 M +-94 106 V +0 g .525 g 6060 1429 M +.525 g 6060 1429 M +-93 -156 V +.525 g 5967 1273 M +-95 -171 V +.525 g 5872 1102 M +-36 -66 V +.525 g 5836 1036 M +5768 931 L +.525 g 5768 931 M +5662 759 L +.525 g 5662 759 M +-50 -82 V +.525 g 5612 677 M +-63 -89 V +0 g .5 g 1239 588 M +.5 g 1239 588 M +1134 736 L +.5 g 1134 736 M +-14 23 V +.5 g 1120 759 M +1016 931 L +.5 g 1016 931 M +910 1095 L +.5 g 910 1095 M +-4 7 V +.5 g 906 1102 M +-93 171 V +.5 g 813 1273 M +713 1445 L +.5 g 713 1445 M +-27 45 V +0 g .5 g 5086 4871 M +.5 g 5086 4871 M +4940 4707 L +.5 g 4940 4707 M +-7 -7 V +.5 g 4933 4700 M +4763 4528 L +.5 g 4763 4528 M +-46 -45 V +.5 g 4717 4483 M +4567 4357 L +.5 g 4567 4357 M +-74 -63 V +.5 g 4493 4294 M +4334 4186 L +.5 g 4334 4186 M +-65 -46 V +.5 g 4269 4140 M +4045 4021 L +.5 g 4045 4021 M +-19 -7 V +.5 g 4026 4014 M +-205 -80 V +.5 g 3821 3934 M +-224 -51 V +.5 g 3597 3883 M +-224 -16 V +.5 g 3373 3867 M +-224 16 V +.5 g 3149 3883 M +-224 51 V +.5 g 2925 3934 M +-205 80 V +.5 g 2720 4014 M +-19 7 V +.5 g 2701 4021 M +-224 119 V +.5 g 2477 4140 M +-65 46 V +.5 g 2412 4186 M +-159 108 V +.5 g 2253 4294 M +-75 63 V +.5 g 2178 4357 M +-148 126 V +.5 g 2030 4483 M +-47 45 V +.5 g 1983 4528 M +-171 172 V +.5 g 1812 4700 M +-6 6 V +.5 g 1806 4706 M +-146 165 V +0 g .5 g 6060 1490 M +.5 g 6060 1490 M +-27 -45 V +.5 g 6033 1445 M +5933 1273 L +.5 g 5933 1273 M +-93 -171 V +.5 g 5840 1102 M +-4 -7 V +.5 g 5836 1095 M +5730 931 L +.5 g 5730 931 M +5626 759 L +.5 g 5626 759 M +-14 -23 V +.5 g 5612 736 M +5507 588 L +0 g .475 g 1281 588 M +.475 g 1281 588 M +1161 759 L +.475 g 1161 759 M +-27 39 V +.475 g 1134 798 M +-80 133 V +.475 g 1054 931 M +946 1102 L +.475 g 946 1102 M +-36 56 V +.475 g 910 1158 M +-63 115 V +.475 g 847 1273 M +-97 172 V +.475 g 750 1445 M +-64 107 V +0 g .475 g 5138 4871 M +.475 g 5138 4871 M +4990 4700 L +.475 g 4990 4700 M +-50 -56 V +.475 g 4940 4644 M +4825 4528 L +.475 g 4825 4528 M +4717 4421 L +.475 g 4717 4421 M +-77 -64 V +.475 g 4640 4357 M +4493 4233 L +.475 g 4493 4233 M +-70 -47 V +.475 g 4423 4186 M +4269 4079 L +.475 g 4269 4079 M +-122 -65 V +.475 g 4147 4014 M +-102 -55 V +.475 g 4045 3959 M +-224 -85 V +.475 g 3821 3874 M +-137 -31 V +.475 g 3684 3843 M +-87 -20 V +.475 g 3597 3823 M +-224 -18 V +.475 g 3373 3805 M +-224 17 V +.475 g 3149 3822 M +-87 21 V +.475 g 3062 3843 M +-137 31 V +.475 g 2925 3874 M +-224 85 V +.475 g 2701 3959 M +-102 55 V +.475 g 2599 4014 M +-122 65 V +.475 g 2477 4079 M +-155 107 V +.475 g 2322 4186 M +-69 47 V +.475 g 2253 4233 M +-148 124 V +.475 g 2105 4357 M +-75 64 V +.475 g 2030 4421 M +-109 107 V +.475 g 1921 4528 M +-115 116 V +.475 g 1806 4644 M +-50 56 V +.475 g 1756 4700 M +-148 171 V +0 g .475 g 6060 1552 M +.475 g 6060 1552 M +-64 -107 V +.475 g 5996 1445 M +-97 -172 V +.475 g 5899 1273 M +-63 -116 V +.475 g 5836 1157 M +-36 -55 V +.475 g 5800 1102 M +5692 931 L +.475 g 5692 931 M +5612 797 L +.475 g 5612 797 M +-27 -38 V +.475 g 5585 759 M +5465 588 L +0 g .45 g 1323 588 M +.45 g 1323 588 M +1206 759 L +.45 g 1206 759 M +-72 102 V +.45 g 1134 861 M +-42 70 V +.45 g 1092 931 M +987 1102 L +.45 g 987 1102 M +-77 119 V +.45 g 910 1221 M +-29 52 V +.45 g 881 1273 M +-94 172 V +.45 g 787 1445 M +686 1614 L +0 g .45 g 5190 4871 M +.45 g 5190 4871 M +-26 -32 V +.45 g 5164 4839 M +5046 4700 L +.45 g 5046 4700 M +4940 4581 L +.45 g 4940 4581 M +-52 -53 V +.45 g 4888 4528 M +4717 4360 L +.45 g 4717 4360 M +-4 -3 V +.45 g 4713 4357 M +4510 4186 L +.45 g 4510 4186 M +-17 -15 V +.45 g 4493 4171 M +4269 4017 L +.45 g 4269 4017 M +-5 -3 V +.45 g 4264 4014 M +4045 3896 L +.45 g 4045 3896 M +-141 -53 V +.45 g 3904 3843 M +-83 -32 V +.45 g 3821 3811 M +-224 -52 V +.45 g 3597 3759 M +-224 -18 V +.45 g 3373 3741 M +-224 18 V +.45 g 3149 3759 M +-224 52 V +.45 g 2925 3811 M +-83 32 V +.45 g 2842 3843 M +-141 53 V +.45 g 2701 3896 M +-219 118 V +.45 g 2482 4014 M +-5 3 V +.45 g 2477 4017 M +-224 154 V +.45 g 2253 4171 M +-17 15 V +.45 g 2236 4186 M +-203 171 V +.45 g 2033 4357 M +-3 3 V +.45 g 2030 4360 M +-172 168 V +.45 g 1858 4528 M +-52 53 V +.45 g 1806 4581 M +-106 119 V +.45 g 1700 4700 M +-118 138 V +.45 g 1582 4838 M +-26 33 V +0 g .45 g 6060 1613 M +.45 g 6060 1613 M +5959 1445 L +.45 g 5959 1445 M +-94 -172 V +.45 g 5865 1273 M +-29 -53 V +.45 g 5836 1220 M +-77 -118 V +.45 g 5759 1102 M +5654 931 L +.45 g 5654 931 M +-42 -70 V +.45 g 5612 861 M +5540 759 L +.45 g 5540 759 M +5423 588 L +0 g .425 g 1367 588 M +.425 g 1367 588 M +-9 11 V +.425 g 1358 599 M +1251 759 L +.425 g 1251 759 M +1134 925 L +.425 g 1134 925 M +-4 6 V +.425 g 1130 931 M +-102 171 V +.425 g 1028 1102 M +917 1273 L +.425 g 917 1273 M +-7 12 V +.425 g 910 1285 M +-87 160 V +.425 g 823 1445 M +-99 171 V +.425 g 724 1616 M +-38 64 V +0 g .425 g 5242 4871 M +.425 g 5242 4871 M +-78 -98 V +.425 g 5164 4773 M +-63 -73 V +.425 g 5101 4700 M +4950 4528 L +.425 g 4950 4528 M +-10 -11 V +.425 g 4940 4517 M +4781 4357 L +.425 g 4781 4357 M +-64 -63 V +.425 g 4717 4294 M +4589 4186 L +.425 g 4589 4186 M +-96 -81 V +.425 g 4493 4105 M +-132 -91 V +.425 g 4361 4014 M +-92 -63 V +.425 g 4269 3951 M +4065 3843 L +.425 g 4065 3843 M +-20 -11 V +.425 g 4045 3832 M +-224 -87 V +.425 g 3821 3745 M +-224 -50 V +.425 g 3597 3695 M +-224 -17 V +.425 g 3373 3678 M +-224 17 V +.425 g 3149 3695 M +-224 50 V +.425 g 2925 3745 M +-224 87 V +.425 g 2701 3832 M +-20 11 V +.425 g 2681 3843 M +-204 108 V +.425 g 2477 3951 M +-92 63 V +.425 g 2385 4014 M +-132 91 V +.425 g 2253 4105 M +-96 81 V +.425 g 2157 4186 M +-127 107 V +.425 g 2030 4293 M +-65 64 V +.425 g 1965 4357 M +-159 160 V +.425 g 1806 4517 M +-10 11 V +.425 g 1796 4528 M +-152 172 V +.425 g 1644 4700 M +-62 73 V +.425 g 1582 4773 M +-78 98 V +0 g .425 g 6060 1679 M +.425 g 6060 1679 M +-38 -63 V +.425 g 6022 1616 M +-99 -171 V +.425 g 5923 1445 M +-87 -161 V +.425 g 5836 1284 M +-7 -11 V +.425 g 5829 1273 M +5718 1102 L +.425 g 5718 1102 M +5616 931 L +.425 g 5616 931 M +-4 -7 V +.425 g 5612 924 M +5495 759 L +.425 g 5495 759 M +5388 599 L +.425 g 5388 599 M +-8 -11 V +0 g .4 g 1420 588 M +.4 g 1420 588 M +-62 79 V +.4 g 1358 667 M +-61 92 V +.4 g 1297 759 M +1178 931 L +.4 g 1178 931 M +-44 62 V +.4 g 1134 993 M +-65 109 V +.4 g 1069 1102 M +961 1273 L +.4 g 961 1273 M +-51 80 V +.4 g 910 1353 M +-50 92 V +.4 g 860 1445 M +-96 171 V +.4 g 764 1616 M +-78 130 V +0 g .4 g 5293 4871 M +.4 g 5293 4871 M +5164 4708 L +.4 g 5164 4708 M +-7 -8 V +.4 g 5157 4700 M +5011 4528 L +.4 g 5011 4528 M +-71 -79 V +.4 g 4940 4449 M +-91 -92 V +.4 g 4849 4357 M +4717 4227 L +.4 g 4717 4227 M +-50 -41 V +.4 g 4667 4186 M +4493 4039 L +.4 g 4493 4039 M +-36 -25 V +.4 g 4457 4014 M +4269 3884 L +.4 g 4269 3884 M +-79 -41 V +.4 g 4190 3843 M +-145 -79 V +.4 g 4045 3764 M +-224 -84 V +.4 g 3821 3680 M +-36 -8 V +.4 g 3785 3672 M +-188 -45 V +.4 g 3597 3627 M +-224 -17 V +.4 g 3373 3610 M +-224 17 V +.4 g 3149 3627 M +-188 45 V +.4 g 2961 3672 M +-36 8 V +.4 g 2925 3680 M +-224 84 V +.4 g 2701 3764 M +-146 79 V +.4 g 2555 3843 M +-78 41 V +.4 g 2477 3884 M +-188 130 V +.4 g 2289 4014 M +-36 25 V +.4 g 2253 4039 M +-175 147 V +.4 g 2078 4186 M +-48 41 V +.4 g 2030 4227 M +-133 130 V +.4 g 1897 4357 M +-91 92 V +.4 g 1806 4449 M +-71 79 V +.4 g 1735 4528 M +-147 172 V +.4 g 1588 4700 M +-6 8 V +.4 g 1582 4708 M +-129 163 V +0 g .4 g 6060 1746 M +.4 g 6060 1746 M +-78 -130 V +.4 g 5982 1616 M +-96 -171 V +.4 g 5886 1445 M +-50 -93 V +.4 g 5836 1352 M +-51 -79 V +.4 g 5785 1273 M +5678 1102 L +.4 g 5678 1102 M +5612 992 L +.4 g 5612 992 M +-44 -61 V +.4 g 5568 931 M +5450 759 L +.4 g 5450 759 M +-62 -92 V +.4 g 5388 667 M +-62 -79 V +0 g .375 g 1474 588 M +.375 g 1474 588 M +1358 735 L +.375 g 1358 735 M +-16 24 V +.375 g 1342 759 M +1227 931 L +.375 g 1227 931 M +-93 130 V +.375 g 1134 1061 M +-25 41 V +.375 g 1109 1102 M +-103 171 V +.375 g 1006 1273 M +-96 147 V +.375 g 910 1420 M +-13 25 V +.375 g 897 1445 M +-93 171 V +.375 g 804 1616 M +702 1787 L +.375 g 702 1787 M +-16 28 V +0 g .375 g 5345 4871 M +.375 g 5345 4871 M +5213 4700 L +.375 g 5213 4700 M +-49 -62 V +.375 g 5164 4638 M +-93 -110 V +.375 g 5071 4528 M +4940 4381 L +.375 g 4940 4381 M +-24 -24 V +.375 g 4916 4357 M +4744 4186 L +.375 g 4744 4186 M +-27 -27 V +.375 g 4717 4159 M +4546 4014 L +.375 g 4546 4014 M +-53 -44 V +.375 g 4493 3970 M +4308 3843 L +.375 g 4308 3843 M +-39 -27 V +.375 g 4269 3816 M +4045 3696 L +.375 g 4045 3696 M +-65 -24 V +.375 g 3980 3672 M +-159 -62 V +.375 g 3821 3610 M +-224 -52 V +.375 g 3597 3558 M +-224 -17 V +.375 g 3373 3541 M +-224 17 V +.375 g 3149 3558 M +-224 52 V +.375 g 2925 3610 M +-159 62 V +.375 g 2766 3672 M +-65 24 V +.375 g 2701 3696 M +-224 120 V +.375 g 2477 3816 M +-39 27 V +.375 g 2438 3843 M +-185 127 V +.375 g 2253 3970 M +-53 44 V +.375 g 2200 4014 M +-170 144 V +.375 g 2030 4158 M +-28 28 V +.375 g 2002 4186 M +-172 171 V +.375 g 1830 4357 M +-24 24 V +.375 g 1806 4381 M +-131 147 V +.375 g 1675 4528 M +-93 109 V +.375 g 1582 4637 M +-50 63 V +.375 g 1532 4700 M +-131 171 V +0 g .375 g 6060 1814 M +.375 g 6060 1814 M +-16 -27 V +.375 g 6044 1787 M +5943 1616 L +.375 g 5943 1616 M +-94 -171 V +.375 g 5849 1445 M +-13 -25 V +.375 g 5836 1420 M +-96 -147 V +.375 g 5740 1273 M +5637 1102 L +.375 g 5637 1102 M +-25 -41 V +.375 g 5612 1061 M +5519 931 L +.375 g 5519 931 M +5404 759 L +.375 g 5404 759 M +-16 -24 V +.375 g 5388 735 M +5272 588 L +0 g .35 g 1528 588 M +.35 g 1528 588 M +1395 759 L +.35 g 1395 759 M +-37 48 V +.35 g 1358 807 M +-82 124 V +.35 g 1276 931 M +-121 171 V +.35 g 1155 1102 M +-21 30 V +.35 g 1134 1132 M +-84 141 V +.35 g 1050 1273 M +941 1445 L +.35 g 941 1445 M +-31 47 V +.35 g 910 1492 M +-67 124 V +.35 g 843 1616 M +-97 171 V +.35 g 746 1787 M +-60 100 V +0 g .35 g 5397 4871 M +.35 g 5397 4871 M +-9 -12 V +.35 g 5388 4859 M +5269 4700 L +.35 g 5269 4700 M +5164 4567 L +.35 g 5164 4567 M +-33 -39 V +.35 g 5131 4528 M +4983 4357 L +.35 g 4983 4357 M +-43 -47 V +.35 g 4940 4310 M +4817 4186 L +.35 g 4817 4186 M +-100 -99 V +.35 g 4717 4087 M +-86 -73 V +.35 g 4631 4014 M +4493 3898 L +.35 g 4493 3898 M +-81 -55 V +.35 g 4412 3843 M +-143 -99 V +.35 g 4269 3744 M +-137 -72 V +.35 g 4132 3672 M +-87 -48 V +.35 g 4045 3624 M +-224 -85 V +.35 g 3821 3539 M +-173 -39 V +.35 g 3648 3500 M +-51 -12 V +.35 g 3597 3488 M +-224 -17 V +.35 g 3373 3471 M +-224 17 V +.35 g 3149 3488 M +-51 12 V +.35 g 3098 3500 M +-173 39 V +.35 g 2925 3539 M +-224 85 V +.35 g 2701 3624 M +-87 48 V +.35 g 2614 3672 M +-137 72 V +.35 g 2477 3744 M +-143 99 V +.35 g 2334 3843 M +-81 55 V +.35 g 2253 3898 M +-138 116 V +.35 g 2115 4014 M +-85 72 V +.35 g 2030 4086 M +-102 100 V +.35 g 1928 4186 M +-122 123 V +.35 g 1806 4309 M +-43 48 V +.35 g 1763 4357 M +-149 171 V +.35 g 1614 4528 M +-32 39 V +.35 g 1582 4567 M +-106 133 V +.35 g 1476 4700 M +-118 159 V +.35 g 1358 4859 M +-9 12 V +0 g .35 g 6060 1886 M +.35 g 6060 1886 M +-60 -99 V +.35 g 6000 1787 M +-97 -171 V +.35 g 5903 1616 M +-67 -124 V +.35 g 5836 1492 M +-31 -47 V +.35 g 5805 1445 M +5696 1273 L +.35 g 5696 1273 M +-84 -141 V +.35 g 5612 1132 M +-21 -30 V +.35 g 5591 1102 M +5470 931 L +.35 g 5470 931 M +5388 807 L +.35 g 5388 807 M +-37 -48 V +.35 g 5351 759 M +5218 588 L +0 g .325 g 1582 588 M +.325 g 1582 588 M +1454 759 L +.325 g 1454 759 M +-96 122 V +.325 g 1358 881 M +-33 50 V +.325 g 1325 931 M +-116 171 V +.325 g 1209 1102 M +-75 105 V +.325 g 1134 1207 M +-40 66 V +.325 g 1094 1273 M +989 1445 L +.325 g 989 1445 M +-79 121 V +.325 g 910 1566 M +-27 50 V +.325 g 883 1616 M +-94 171 V +.325 g 789 1787 M +686 1959 L +.325 g 0 g .325 g 5451 4871 M +.325 g 5451 4871 M +-63 -87 V +.325 g 5388 4784 M +-62 -84 V +.325 g 5326 4700 M +5192 4528 L +.325 g 5192 4528 M +-28 -35 V +.325 g 5164 4493 M +5048 4357 L +.325 g 5048 4357 M +4940 4236 L +.325 g 4940 4236 M +-49 -50 V +.325 g 4891 4186 M +4717 4015 L +.325 g 4717 4015 M +-1 -1 V +.325 g 4716 4014 M +4514 3843 L +.325 g 4514 3843 M +-21 -17 V +.325 g 4493 3826 M +4269 3672 L +.325 g 4269 3672 M +-1 0 V +.325 g 4268 3672 M +4045 3551 L +.325 g 4045 3551 M +-134 -51 V +.325 g 3911 3500 M +-90 -35 V +.325 g 3821 3465 M +-224 -52 V +.325 g 3597 3413 M +-224 -17 V +.325 g 3373 3396 M +-224 17 V +.325 g 3149 3413 M +-224 52 V +.325 g 2925 3465 M +-90 35 V +.325 g 2835 3500 M +-134 50 V +.325 g 2701 3550 M +-223 122 V +.325 g 2478 3672 M +-1 0 V +.325 g 2477 3672 M +-224 153 V +.325 g 2253 3825 M +-21 18 V +.325 g 2232 3843 M +-202 171 V +.325 g 2030 4014 M +0 1 V +.325 g 2030 4015 M +-175 171 V +.325 g 1855 4186 M +-49 50 V +.325 g 1806 4236 M +-109 121 V +.325 g 1697 4357 M +-115 136 V +.325 g 1582 4493 M +-28 35 V +.325 g 1554 4528 M +-134 172 V +.325 g 1420 4700 M +-62 83 V +.325 g 1358 4783 M +-63 88 V +0 g .325 g 6060 1958 M +.325 g 6060 1958 M +5957 1787 L +.325 g 5957 1787 M +-94 -171 V +.325 g 5863 1616 M +-27 -50 V +.325 g 5836 1566 M +-79 -121 V +.325 g 5757 1445 M +5652 1273 L +.325 g 5652 1273 M +-40 -67 V +.325 g 5612 1206 M +-74 -104 V +.325 g 5538 1102 M +5421 931 L +.325 g 5421 931 M +-33 -51 V +.325 g 5388 880 M +5292 759 L +.325 g 5292 759 M +5165 588 L +0 g .3 g 1652 588 M +.3 g 1652 588 M +-70 79 V +.3 g 1582 667 M +-69 92 V +.3 g 1513 759 M +1379 931 L +.3 g 1379 931 M +-21 26 V +.3 g 1358 957 M +-96 145 V +.3 g 1262 1102 M +-122 171 V +.3 g 1140 1273 M +-6 9 V +.3 g 1134 1282 M +-96 163 V +.3 g 1038 1445 M +927 1616 L +.3 g 927 1616 M +-17 26 V +.3 g 910 1642 M +-78 145 V +.3 g 832 1787 M +-98 172 V +.3 g 734 1959 M +-48 78 V +0 g .3 g 5505 4871 M +.3 g 5505 4871 M +5388 4709 L +.3 g 5388 4709 M +-6 -9 V +.3 g 5382 4700 M +5254 4528 L +.3 g 5254 4528 M +-90 -112 V +.3 g 5164 4416 M +-50 -59 V +.3 g 5114 4357 M +4964 4186 L +.3 g 4964 4186 M +-24 -26 V +.3 g 4940 4160 M +4796 4014 L +.3 g 4796 4014 M +-79 -78 V +.3 g 4717 3936 M +-111 -93 V +.3 g 4606 3843 M +-113 -95 V +.3 g 4493 3748 M +-111 -76 V +.3 g 4382 3672 M +-113 -79 V +.3 g 4269 3593 M +-176 -93 V +.3 g 4093 3500 M +-48 -26 V +.3 g 4045 3474 M +-224 -86 V +.3 g 3821 3388 M +-224 -50 V +.3 g 3597 3338 M +-121 -9 V +.3 g 3476 3329 M +-103 -8 V +.3 g 3373 3321 M +-103 8 V +.3 g 3270 3329 M +-121 9 V +.3 g 3149 3338 M +-224 50 V +.3 g 2925 3388 M +-224 86 V +.3 g 2701 3474 M +-48 26 V +.3 g 2653 3500 M +-176 93 V +.3 g 2477 3593 M +-113 79 V +.3 g 2364 3672 M +-111 76 V +.3 g 2253 3748 M +-114 95 V +.3 g 2139 3843 M +-109 93 V +.3 g 2030 3936 M +-81 78 V +.3 g 1949 4014 M +-143 146 V +.3 g 1806 4160 M +-24 26 V +.3 g 1782 4186 M +-150 171 V +.3 g 1632 4357 M +-50 59 V +.3 g 1582 4416 M +-90 112 V +.3 g 1492 4528 M +-128 172 V +.3 g 1364 4700 M +-6 8 V +.3 g 1358 4708 M +-117 163 V +0 g .3 g 6060 2037 M +.3 g 6060 2037 M +-47 -78 V +.3 g 6013 1959 M +-99 -172 V +.3 g 5914 1787 M +-78 -145 V +.3 g 5836 1642 M +-17 -26 V +.3 g 5819 1616 M +5709 1445 L +.3 g 5709 1445 M +-97 -164 V +.3 g 5612 1281 M +-6 -8 V +.3 g 5606 1273 M +5484 1102 L +.3 g 5484 1102 M +5388 957 L +.3 g 5388 957 M +-20 -26 V +.3 g 5368 931 M +5234 759 L +.3 g 5234 759 M +-70 -93 V +.3 g 5164 666 M +-69 -78 V +0 g .275 g 1722 588 M +.275 g 1722 588 M +1582 745 L +.275 g 1582 745 M +-11 14 V +.275 g 1571 759 M +1443 931 L +.275 g 1443 931 M +-85 107 V +.275 g 1358 1038 M +-43 64 V +.275 g 1315 1102 M +-116 171 V +.275 g 1199 1273 M +-65 90 V +.275 g 1134 1363 M +-48 82 V +.275 g 1086 1445 M +980 1616 L +.275 g 980 1616 M +-70 107 V +.275 g 910 1723 M +-34 64 V +.275 g 876 1787 M +-95 172 V +.275 g 781 1959 M +-95 157 V +0 g .275 g 5558 4871 M +.275 g 5558 4871 M +5440 4700 L +.275 g 5440 4700 M +-52 -73 V +.275 g 5388 4627 M +-73 -99 V +.275 g 5315 4528 M +5180 4357 L +.275 g 5180 4357 M +-16 -20 V +.275 g 5164 4337 M +5036 4186 L +.275 g 5036 4186 M +-96 -107 V +.275 g 4940 4079 M +-64 -65 V +.275 g 4876 4014 M +4717 3858 L +.275 g 4717 3858 M +-18 -15 V +.275 g 4699 3843 M +4495 3672 L +.275 g 4495 3672 M +-2 -2 V +.275 g 4493 3670 M +4269 3515 L +.275 g 4269 3515 M +-28 -15 V +.275 g 4241 3500 M +4045 3394 L +.275 g 4045 3394 M +-173 -65 V +.275 g 3872 3329 M +-51 -20 V +.275 g 3821 3309 M +-224 -53 V +.275 g 3597 3256 M +-224 -17 V +.275 g 3373 3239 M +-224 17 V +.275 g 3149 3256 M +-224 53 V +.275 g 2925 3309 M +-51 20 V +.275 g 2874 3329 M +-173 65 V +.275 g 2701 3394 M +-197 106 V +.275 g 2504 3500 M +-27 15 V +.275 g 2477 3515 M +-224 154 V +.275 g 2253 3669 M +-2 3 V +.275 g 2251 3672 M +-205 171 V +.275 g 2046 3843 M +-16 14 V +.275 g 2030 3857 M +-161 157 V +.275 g 1869 4014 M +-63 65 V +.275 g 1806 4079 M +-96 107 V +.275 g 1710 4186 M +-128 151 V +.275 g 1582 4337 M +-16 20 V +.275 g 1566 4357 M +-135 171 V +.275 g 1431 4528 M +-73 99 V +.275 g 1358 4627 M +-53 73 V +.275 g 1305 4700 M +-118 171 V +0 g .275 g 6060 2115 M +.275 g 6060 2115 M +-95 -156 V +.275 g 5965 1959 M +-94 -172 V +.275 g 5871 1787 M +-35 -64 V +.275 g 5836 1723 M +-70 -107 V +.275 g 5766 1616 M +5660 1445 L +.275 g 5660 1445 M +-48 -82 V +.275 g 5612 1363 M +-64 -90 V +.275 g 5548 1273 M +5431 1102 L +.275 g 5431 1102 M +-43 -65 V +.275 g 5388 1037 M +5303 931 L +.275 g 5303 931 M +5175 759 L +.275 g 5175 759 M +-11 -14 V +.275 g 5164 745 M +5024 588 L +0 g .25 g 1792 588 M +.25 g 1792 588 M +1645 759 L +.25 g 1645 759 M +-63 71 V +.25 g 1582 830 M +-75 101 V +.25 g 1507 931 M +-135 171 V +.25 g 1372 1102 M +-14 18 V +.25 g 1358 1120 M +-101 153 V +.25 g 1257 1273 M +-123 172 V +.25 g .25 g 1134 1445 M +-101 171 V +.25 g 1033 1616 M +922 1787 L +.25 g 922 1787 M +-12 19 V +.25 g 910 1806 M +-81 153 V +.25 g 829 1959 M +729 2130 L +.25 g 729 2130 M +-43 71 V +0 g .25 g 5612 4871 M +.25 g 5612 4871 M +5500 4700 L +.25 g 5500 4700 M +5388 4545 L +.25 g 5388 4545 M +-12 -17 V +.25 g 5376 4528 M +5248 4357 L +.25 g 5248 4357 M +-84 -105 V +.25 g 5164 4252 M +-56 -66 V +.25 g 5108 4186 M +4956 4014 L +.25 g 4956 4014 M +-16 -18 V +.25 g 4940 3996 M +4789 3843 L +.25 g 4789 3843 M +-72 -71 V +.25 g 4717 3772 M +4597 3672 L +.25 g 4597 3672 M +-104 -88 V +.25 g 4493 3584 M +-122 -84 V +.25 g 4371 3500 M +-102 -70 V +.25 g 4269 3430 M +4078 3329 L +.25 g 4078 3329 M +-33 -18 V +.25 g 4045 3311 M +-224 -87 V +.25 g 3821 3224 M +-224 -50 V +.25 g 3597 3174 M +-223 -16 V +.25 g 3374 3158 M +-1 0 V +.25 g 3373 3158 M +-1 0 V +.25 g 3372 3158 M +-223 16 V +.25 g 3149 3174 M +-224 50 V +.25 g 2925 3224 M +-224 87 V +.25 g 2701 3311 M +-33 18 V +.25 g 2668 3329 M +-191 101 V +.25 g 2477 3430 M +-102 70 V +.25 g 2375 3500 M +-122 84 V +.25 g 2253 3584 M +-105 88 V +.25 g 2148 3672 M +-118 100 V +.25 g 2030 3772 M +-73 71 V +.25 g 1957 3843 M +-151 153 V +.25 g 1806 3996 M +-17 18 V +.25 g 1789 4014 M +-151 172 V +.25 g 1638 4186 M +-56 66 V +.25 g 1582 4252 M +-84 105 V +.25 g 1498 4357 M +-128 171 V +.25 g 1370 4528 M +-12 16 V +.25 g 1358 4544 M +-112 156 V +.25 g 1246 4700 M +-112 171 V +.25 g 0 g .25 g 6060 2200 M +.25 g 6060 2200 M +-43 -70 V +.25 g 6017 2130 M +-99 -171 V +.25 g 5918 1959 M +-82 -154 V +.25 g 5836 1805 M +-12 -18 V +.25 g 5824 1787 M +5713 1616 L +.25 g 5713 1616 M +5612 1445 L +.25 g 5612 1445 M +5489 1273 L +.25 g 5489 1273 M +5388 1120 L +.25 g 5388 1120 M +-14 -18 V +.25 g 5374 1102 M +5239 931 L +.25 g 5239 931 M +5164 830 L +.25 g 5164 830 M +-63 -71 V +.25 g 5101 759 M +4954 588 L +0 g .225 g 1880 588 M +.225 g 1880 588 M +-74 73 V +.225 g 1806 661 M +-84 98 V +.225 g 1722 759 M +1582 917 L +.225 g 1582 917 M +-11 14 V +.225 g 1571 931 M +-127 171 V +.225 g 1444 1102 M +-86 107 V +.225 g 1358 1209 M +-42 64 V +.225 g 1316 1273 M +-117 172 V +.225 g 1199 1445 M +-65 90 V +.225 g 1134 1535 M +-48 81 V +.225 g 1086 1616 M +981 1787 L +.225 g 981 1787 M +-71 108 V +.225 g 910 1895 M +-34 64 V +.225 g 876 1959 M +-94 171 V +.225 g 782 2130 M +-96 157 V +0 g .225 g 5672 4871 M +.225 g 5672 4871 M +-60 -90 V +.225 g 5612 4781 M +-53 -81 V +.225 g 5559 4700 M +5441 4528 L +.225 g 5441 4528 M +-53 -73 V +.225 g 5388 4455 M +-73 -98 V +.225 g 5315 4357 M +5181 4186 L +.225 g 5181 4186 M +-17 -21 V +.225 g 5164 4165 M +5036 4014 L +.225 g 5036 4014 M +-96 -107 V +.225 g 4940 3907 M +-63 -64 V +.225 g 4877 3843 M +4717 3686 L +.225 g 4717 3686 M +-17 -14 V +.225 g 4700 3672 M +4495 3500 L +.225 g 4495 3500 M +-2 -2 V +.225 g 4493 3498 M +4269 3343 L +.225 g 4269 3343 M +-27 -14 V +.225 g 4242 3329 M +4045 3222 L +.225 g 4045 3222 M +-172 -64 V +.225 g 3873 3158 M +-52 -21 V +.225 g 3821 3137 M +-224 -52 V +.225 g 3597 3085 M +-224 -17 V +.225 g 3373 3068 M +-224 17 V +.225 g 3149 3085 M +-224 52 V +.225 g 2925 3137 M +-52 21 V +.225 g 2873 3158 M +-172 64 V +.225 g 2701 3222 M +-197 107 V +.225 g 2504 3329 M +-27 14 V +.225 g 2477 3343 M +-224 155 V +.225 g 2253 3498 M +-3 2 V +.225 g 2250 3500 M +-204 172 V +.225 g 2046 3672 M +-16 14 V +.225 g 2030 3686 M +-161 157 V +.225 g 1869 3843 M +-63 64 V +.225 g 1806 3907 M +-97 107 V +.225 g 1709 4014 M +-127 151 V +.225 g 1582 4165 M +-17 21 V +.225 g 1565 4186 M +-135 171 V +.225 g 1430 4357 M +-72 98 V +.225 g 1358 4455 M +-53 73 V +.225 g 1305 4528 M +-118 172 V +.225 g 1187 4700 M +-53 80 V +.225 g 1134 4780 M +-60 91 V +0 g .225 g 6060 2287 M +.225 g 6060 2287 M +-96 -157 V +.225 g 5964 2130 M +-94 -171 V +.225 g 5870 1959 M +-34 -65 V +.225 g 5836 1894 M +-71 -107 V +.225 g 5765 1787 M +5660 1616 L +.225 g 5660 1616 M +-48 -81 V +.225 g 5612 1535 M +-65 -90 V +.225 g 5547 1445 M +5430 1273 L +.225 g 5430 1273 M +-42 -64 V +.225 g 5388 1209 M +-85 -107 V +.225 g 5303 1102 M +5175 931 L +.225 g 5175 931 M +-11 -15 V +.225 g 5164 916 M +5024 759 L +.225 g 5024 759 M +-84 -98 V +.225 g 4940 661 M +-74 -73 V +0 g .2 g 1974 588 M +.2 g 1974 588 M +1806 752 L +.2 g 1806 752 M +-6 7 V +.2 g 1800 759 M +1654 931 L +.2 g 1654 931 M +-72 80 V +.2 g 1582 1011 M +-67 91 V +.2 g 1515 1102 M +-135 171 V +.2 g 1380 1273 M +-22 29 V +.2 g 1358 1302 M +-94 143 V +.2 g 1264 1445 M +-123 171 V +.2 g 1141 1616 M +-7 10 V +.2 g 1134 1626 M +-94 161 V +.2 g 1040 1787 M +929 1959 L +.2 g 929 1959 M +-19 28 V +.2 g 910 1987 M +-76 143 V +.2 g 834 2130 M +-98 171 V +.2 g 736 2301 M +-50 81 V +0 g .2 g 5731 4871 M +.2 g 5731 4871 M +5619 4700 L +.2 g 5619 4700 M +-7 -10 V +.2 g 5612 4690 M +5507 4528 L +.2 g 5507 4528 M +5388 4364 L +.2 g 5388 4364 M +-5 -7 V +.2 g 5383 4357 M +5256 4186 L +.2 g 5256 4186 M +-92 -115 V +.2 g 5164 4071 M +-48 -57 V +.2 g 5116 4014 M +4966 3843 L +.2 g 4966 3843 M +-26 -28 V +.2 g 4940 3815 M +4799 3672 L +.2 g 4799 3672 M +-82 -81 V +.2 g 4717 3591 M +-108 -91 V +.2 g 4609 3500 M +-116 -97 V +.2 g 4493 3403 M +-108 -74 V +.2 g 4385 3329 M +-116 -80 V +.2 g 4269 3249 M +-173 -91 V +.2 g 4096 3158 M +-51 -28 V +.2 g 4045 3130 M +-224 -87 V +.2 g 3821 3043 M +-224 -49 V +.2 g 3597 2994 M +-98 -8 V +.2 g 3499 2986 M +-126 -10 V +.2 g 3373 2976 M +-126 10 V +.2 g 3247 2986 M +-98 8 V +.2 g 3149 2994 M +-224 49 V +.2 g 2925 3043 M +-224 87 V +.2 g 2701 3130 M +-51 28 V +.2 g 2650 3158 M +-173 90 V +.2 g 2477 3248 M +-116 81 V +.2 g 2361 3329 M +-108 74 V +.2 g 2253 3403 M +-116 97 V +.2 g 2137 3500 M +-107 91 V +.2 g 2030 3591 M +-83 81 V +.2 g 1947 3672 M +-141 143 V +.2 g 1806 3815 M +-26 28 V +.2 g 1780 3843 M +-150 171 V +.2 g 1630 4014 M +-48 57 V +.2 g 1582 4071 M +-92 115 V +.2 g 1490 4186 M +-127 171 V +.2 g 1363 4357 M +-5 7 V +.2 g 1358 4364 M +-119 164 V +.2 g 1239 4528 M +-105 161 V +.2 g 1134 4689 M +-7 11 V +.2 g 1127 4700 M +-113 171 V +0 g .2 g 6060 2382 M +.2 g 6060 2382 M +-49 -81 V +.2 g 6011 2301 M +-99 -171 V +.2 g 5912 2130 M +-76 -143 V +.2 g 5836 1987 M +-19 -28 V +.2 g 5817 1959 M +5706 1787 L +.2 g 5706 1787 M +-94 -161 V +.2 g 5612 1626 M +-7 -10 V +.2 g 5605 1616 M +5482 1445 L +.2 g 5482 1445 M +-94 -144 V +.2 g 5388 1301 M +-22 -28 V +.2 g 5366 1273 M +5232 1102 L +.2 g 5232 1102 M +-68 -91 V +.2 g 5164 1011 M +-72 -80 V +.2 g 5092 931 M +4947 759 L +.2 g 4947 759 M +-7 -7 V +.2 g 4940 752 M +4773 588 L +0 g .175 g 2080 588 M +.175 g 2080 588 M +-50 42 V +.175 g 2030 630 M +1902 759 L +.175 g 1902 759 M +-96 95 V +.175 g 1806 854 M +-66 77 V +.175 g 1740 931 M +-153 171 V +.175 g 1587 1102 M +-5 6 V +.175 g 1582 1108 M +-122 165 V +.175 g 1460 1273 M +-102 128 V +.175 g 1358 1401 M +-29 44 V +.175 g 1329 1445 M +-114 171 V +.175 g 1215 1616 M +-81 111 V +.175 g 1134 1727 M +-35 60 V +.175 g 1099 1787 M +995 1959 L +.175 g 995 1959 M +-85 128 V +.175 g 910 2087 M +-23 43 V +.175 g 887 2130 M +-92 171 V +.175 g 795 2301 M +690 2473 L +.175 g 690 2473 M +-4 6 V +0 g .175 g 5791 4871 M +.175 g 5791 4871 M +5686 4700 L +.175 g 5686 4700 M +-74 -111 V +.175 g 5612 4589 M +-39 -61 V +.175 g 5573 4528 M +5457 4357 L +.175 g 5457 4357 M +-69 -94 V +.175 g 5388 4263 M +-57 -77 V +.175 g 5331 4186 M +5198 4014 L +.175 g 5198 4014 M +-34 -41 V +.175 g 5164 3973 M +5055 3843 L +.175 g 5055 3843 M +4940 3715 L +.175 g 4940 3715 M +-43 -43 V +.175 g 4897 3672 M +4723 3500 L +.175 g 4723 3500 M +-6 -6 V +.175 g 4717 3494 M +4521 3329 L +.175 g 4521 3329 M +-28 -24 V +.175 g 4493 3305 M +4277 3158 L +.175 g 4277 3158 M +-8 -6 V +.175 g 4269 3152 M +4045 3030 L +.175 g 4045 3030 M +-118 -44 V +.175 g 3927 2986 M +-106 -41 V +.175 g 3821 2945 M +-224 -53 V +.175 g 3597 2892 M +-224 -16 V +.175 g 3373 2876 M +-224 16 V +.175 g 3149 2892 M +-224 52 V +.175 g 2925 2944 M +-106 42 V +.175 g 2819 2986 M +-118 44 V +.175 g 2701 3030 M +-224 122 V +.175 g 2477 3152 M +-9 6 V +.175 g 2468 3158 M +-215 147 V +.175 g 2253 3305 M +-29 24 V +.175 g 2224 3329 M +-194 165 V +.175 g 2030 3494 M +-7 6 V +.175 g 2023 3500 M +-174 172 V +.175 g 1849 3672 M +-43 43 V +.175 g 1806 3715 M +-115 128 V +.175 g 1691 3843 M +-109 129 V +.175 g 1582 3972 M +-34 42 V +.175 g 1548 4014 M +-133 172 V +.175 g 1415 4186 M +-57 77 V +.175 g 1358 4263 M +-69 94 V +.175 g 1289 4357 M +-116 171 V +.175 g 1173 4528 M +-39 60 V +.175 g 1134 4588 M +-74 112 V +.175 g 1060 4700 M +955 4871 L +0 g .175 g 6060 2479 M +.175 g 6060 2479 M +-4 -6 V +.175 g 6056 2473 M +5952 2301 L +.175 g 5952 2301 M +-93 -171 V +.175 g 5859 2130 M +-23 -44 V +.175 g 5836 2086 M +-85 -127 V +.175 g 5751 1959 M +5648 1787 L +.175 g 5648 1787 M +-36 -60 V +.175 g 5612 1727 M +-80 -111 V +.175 g 5532 1616 M +5417 1445 L +.175 g 5417 1445 M +-29 -44 V +.175 g 5388 1401 M +5286 1273 L +.175 g 5286 1273 M +5164 1108 L +.175 g 5164 1108 M +-5 -6 V +.175 g 5159 1102 M +5006 931 L +.175 g 5006 931 M +-66 -78 V +.175 g 4940 853 M +-96 -94 V +.175 g 4844 759 M +4717 630 L +.175 g 4717 630 M +-51 -42 V +0 g .15 g 2206 588 M +.15 g 2206 588 M +2030 736 L +.15 g 2030 736 M +-24 23 V +.15 g 2006 759 M +1835 931 L +.15 g 1835 931 M +-29 28 V +.15 g 1806 959 M +-121 143 V +.15 g 1685 1102 M +-103 115 V +.15 g 1582 1217 M +-42 56 V +.15 g 1540 1273 M +-131 172 V +.15 g 1409 1445 M +-51 63 V +.15 g 1358 1508 M +-70 108 V +.15 g 1288 1616 M +-120 171 V +.15 g 1168 1787 M +-34 46 V +.15 g 1134 1833 M +-73 126 V +.15 g 1061 1959 M +953 2130 L +.15 g 953 2130 M +-43 64 V +.15 g 910 2194 M +-56 107 V +.15 g 854 2301 M +-97 172 V +.15 g 757 2473 M +-71 115 V +0 g .15 g 5853 4871 M +.15 g 5853 4871 M +-17 -28 V +.15 g 5836 4843 M +-83 -143 V +.15 g 5753 4700 M +5643 4528 L +.15 g 5643 4528 M +-31 -45 V +.15 g 5612 4483 M +-81 -126 V +.15 g 5531 4357 M +5409 4186 L +.15 g 5409 4186 M +-21 -28 V +.15 g 5388 4158 M +5283 4014 L +.15 g 5283 4014 M +5164 3867 L +.15 g 5164 3867 M +-20 -24 V +.15 g 5144 3843 M +4997 3672 L +.15 g 4997 3672 M +-57 -63 V +.15 g 4940 3609 M +4834 3500 L +.15 g 4834 3500 M +4717 3386 L +.15 g 4717 3386 M +-68 -57 V +.15 g 4649 3329 M +4493 3198 L +.15 g 4493 3198 M +-59 -40 V +.15 g 4434 3158 M +4269 3043 L +.15 g 4269 3043 M +-108 -57 V +.15 g 4161 2986 M +-116 -63 V +.15 g 4045 2923 M +-224 -84 V +.15 g 3821 2839 M +-108 -24 V +.15 g 3713 2815 M +-116 -28 V +.15 g 3597 2787 M +-224 -18 V +.15 g 3373 2769 M +-224 18 V +.15 g 3149 2787 M +-117 28 V +.15 g 3032 2815 M +-107 24 V +.15 g 2925 2839 M +-224 84 V +.15 g 2701 2923 M +-116 63 V +.15 g 2585 2986 M +-108 57 V +.15 g 2477 3043 M +-165 115 V +.15 g 2312 3158 M +-59 40 V +.15 g 2253 3198 M +-157 131 V +.15 g 2096 3329 M +-66 57 V +.15 g 2030 3386 M +-118 114 V +.15 g 1912 3500 M +-106 108 V +.15 g 1806 3608 M +-58 64 V +.15 g 1748 3672 M +-147 171 V +.15 g 1601 3843 M +-19 23 V +.15 g 1582 3866 M +-119 148 V +.15 g 1463 4014 M +-105 143 V +.15 g 1358 4157 M +-21 29 V +.15 g 1337 4186 M +-122 171 V +.15 g 1215 4357 M +-81 125 V +.15 g 1134 4482 M +-31 46 V +.15 g 1103 4528 M +993 4700 L +.15 g 993 4700 M +-83 143 V +.15 g 910 4843 M +-18 28 V +0 g .15 g 6060 2587 M +.15 g 6060 2587 M +-71 -114 V +.15 g 5989 2473 M +-96 -172 V +.15 g 5893 2301 M +-57 -108 V +.15 g 5836 2193 M +-42 -63 V +.15 g 5794 2130 M +5685 1959 L +.15 g 5685 1959 M +-73 -126 V +.15 g 5612 1833 M +-33 -46 V +.15 g 5579 1787 M +5458 1616 L +.15 g 5458 1616 M +-70 -108 V +.15 g 5388 1508 M +-51 -63 V +.15 g 5337 1445 M +5206 1273 L +.15 g 5206 1273 M +-42 -57 V +.15 g 5164 1216 M +5061 1102 L +.15 g 5061 1102 M +4940 959 L +.15 g 4940 959 M +-28 -28 V +.15 g 4912 931 M +4740 759 L +.15 g 4740 759 M +-23 -23 V +.15 g 4717 736 M +4540 588 L +0 g .125 g 2364 588 M +.125 g 2364 588 M +-111 77 V +.125 g 2253 665 M +-111 94 V +.125 g 2142 759 M +-112 94 V +.125 g 2030 853 M +-77 78 V +.125 g 1953 931 M +-147 144 V +.125 g 1806 1075 M +-23 27 V +.125 g 1783 1102 M +-148 171 V +.125 g 1635 1273 M +-53 60 V +.125 g 1582 1333 M +-82 112 V +.125 g 1500 1445 M +-138 171 V +.125 g 1362 1616 M +-4 6 V +.125 g 1358 1622 M +-107 165 V +.125 g 1251 1787 M +-117 161 V +.125 g 1134 1948 M +-7 11 V +.125 g 1127 1959 M +-99 171 V +.125 g 1028 2130 M +914 2301 L +.125 g 914 2301 M +-4 6 V +.125 g 910 2307 M +-86 166 V +.125 g 824 2473 M +723 2644 L +.125 g 723 2644 M +-37 60 V +0 g .125 g 5926 4871 M +.125 g 5926 4871 M +-90 -144 V +.125 g 5836 4727 M +-16 -27 V +.125 g 5820 4700 M +5720 4528 L +.125 g 5720 4528 M +5612 4368 L +.125 g 5612 4368 M +-7 -11 V +.125 g 5605 4357 M +5493 4186 L +.125 g 5493 4186 M +5388 4042 L +.125 g 5388 4042 M +-20 -28 V +.125 g 5368 4014 M +5240 3843 L +.125 g 5240 3843 M +-76 -94 V +.125 g 5164 3749 M +-65 -77 V +.125 g 5099 3672 M +4945 3500 L +.125 g 4945 3500 M +-5 -5 V +.125 g 4940 3495 M +4777 3329 L +.125 g 4777 3329 M +-60 -59 V +.125 g 4717 3270 M +4584 3158 L +.125 g 4584 3158 M +-91 -77 V +.125 g 4493 3081 M +-139 -95 V +.125 g 4354 2986 M +-85 -59 V +.125 g 4269 2927 M +4055 2815 L +.125 g 4055 2815 M +-10 -5 V +.125 g 4045 2810 M +-224 -89 V +.125 g 3821 2721 M +-224 -50 V +.125 g 3597 2671 M +-224 -16 V +.125 g 3373 2655 M +-224 16 V +.125 g 3149 2671 M +-224 50 V +.125 g 2925 2721 M +-224 89 V +.125 g 2701 2810 M +-10 5 V +.125 g 2691 2815 M +-214 112 V +.125 g 2477 2927 M +-85 59 V +.125 g 2392 2986 M +-139 95 V +.125 g 2253 3081 M +-91 77 V +.125 g 2162 3158 M +-132 112 V +.125 g 2030 3270 M +-62 59 V +.125 g 1968 3329 M +-162 166 V +.125 g 1806 3495 M +-6 5 V +.125 g 1800 3500 M +-153 172 V +.125 g 1647 3672 M +-65 77 V +.125 g 1582 3749 M +-76 94 V +.125 g 1506 3843 M +-128 171 V +.125 g 1378 4014 M +-20 28 V +.125 g 1358 4042 M +-106 144 V +.125 g 1252 4186 M +-111 171 V +.125 g 1141 4357 M +-7 11 V +.125 g 1134 4368 M +-108 160 V +.125 g 1026 4528 M +926 4700 L +.125 g 926 4700 M +-16 27 V +.125 g 910 4727 M +-90 144 V +0 g .125 g 6060 2703 M +.125 g 6060 2703 M +-37 -59 V +.125 g 6023 2644 M +5922 2473 L +.125 g 5922 2473 M +-86 -166 V +.125 g 5836 2307 M +-4 -6 V +.125 g 5832 2301 M +5718 2130 L +.125 g 5718 2130 M +-99 -171 V +.125 g 5619 1959 M +-7 -12 V +.125 g 5612 1947 M +5495 1787 L +.125 g 5495 1787 M +5388 1621 L +.125 g 5388 1621 M +-4 -5 V +.125 g 5384 1616 M +5246 1445 L +.125 g 5246 1445 M +-82 -113 V +.125 g 5164 1332 M +-53 -59 V +.125 g 5111 1273 M +4964 1102 L +.125 g 4964 1102 M +-24 -28 V +.125 g 4940 1074 M +4793 931 L +.125 g 4793 931 M +-76 -78 V +.125 g 4717 853 M +4604 759 L +.125 g 4604 759 M +4493 665 L +.125 g 4493 665 M +4382 588 L +0 g .1 g 2569 588 M +.1 g 2569 588 M +-92 50 V +.1 g 2477 638 M +2300 759 L +.1 g 2300 759 M +-47 33 V +.1 g 2253 792 M +2090 931 L +.1 g 2090 931 M +-60 50 V +.1 g 2030 981 M +-119 121 V +.1 g 1911 1102 M +-105 102 V +.1 g 1806 1204 M +-58 69 V +.1 g 1748 1273 M +-153 172 V +.1 g 1595 1445 M +-13 14 V +.1 g 1582 1459 M +-114 157 V +.1 g 1468 1616 M +-110 135 V +.1 g 1358 1751 M +-23 36 V +.1 g 1335 1787 M +-113 172 V +.1 g 1222 1959 M +-88 119 V +.1 g 1134 2078 M +-30 52 V +.1 g 1104 2130 M +-102 171 V +.1 g 1002 2301 M +-92 136 V +.1 g 910 2437 M +-19 36 V +.1 g 891 2473 M +-90 171 V +.1 g 801 2644 M +695 2815 L +.1 g 695 2815 M +-9 15 V +0 g .1 g 5998 4871 M +.1 g 5998 4871 M +-97 -171 V +.1 g 5901 4700 M +-65 -102 V +.1 g 5836 4598 M +-40 -70 V +.1 g 5796 4528 M +5693 4357 L +.1 g 5693 4357 M +-81 -119 V +.1 g 5612 4238 M +-34 -52 V +.1 g 5578 4186 M +5464 4014 L +.1 g 5464 4014 M +-76 -101 V +.1 g 5388 3913 M +-50 -70 V +.1 g 5338 3843 M +5205 3672 L +.1 g 5205 3672 M +-41 -50 V +.1 g 5164 3622 M +5063 3500 L +.1 g 5063 3500 M +4940 3365 L +.1 g 4940 3365 M +-35 -36 V +.1 g 4905 3329 M +4731 3158 L +.1 g 4731 3158 M +-14 -14 V +.1 g 4717 3144 M +4531 2986 L +.1 g 4531 2986 M +-38 -32 V +.1 g 4493 2954 M +4289 2815 L +.1 g 4289 2815 M +-20 -14 V +.1 g 4269 2801 M +4045 2680 L +.1 g 4045 2680 M +-98 -36 V +.1 g 3947 2644 M +-126 -50 V +.1 g 3821 2594 M +-224 -52 V +.1 g 3597 2542 M +-224 -17 V +.1 g 3373 2525 M +-224 17 V +.1 g 3149 2542 M +-224 52 V +.1 g 2925 2594 M +-126 50 V +.1 g 2799 2644 M +-98 36 V +.1 g 2701 2680 M +-224 121 V +.1 g 2477 2801 M +-20 14 V +.1 g 2457 2815 M +-204 139 V +.1 g 2253 2954 M +-38 32 V +.1 g 2215 2986 M +-185 157 V +.1 g 2030 3143 M +-15 15 V +.1 g 2015 3158 M +-174 171 V +.1 g 1841 3329 M +-35 36 V +.1 g 1806 3365 M +-123 135 V +.1 g 1683 3500 M +-101 121 V +.1 g 1582 3621 M +-41 51 V +.1 g 1541 3672 M +-133 171 V +.1 g 1408 3843 M +-50 69 V +.1 g 1358 3912 M +-76 102 V +.1 g 1282 4014 M +-115 172 V +.1 g 1167 4186 M +-33 52 V +.1 g 1134 4238 M +-81 119 V +.1 g 1053 4357 M +949 4528 L +.1 g 949 4528 M +-39 69 V +.1 g 910 4597 M +-65 103 V +.1 g 845 4700 M +-97 171 V +0 g .1 g 6060 2829 M +.1 g 6060 2829 M +-9 -14 V +.1 g 6051 2815 M +5945 2644 L +.1 g 5945 2644 M +-90 -171 V +.1 g 5855 2473 M +-19 -37 V +.1 g 5836 2436 M +-92 -135 V +.1 g 5744 2301 M +5642 2130 L +.1 g 5642 2130 M +-30 -53 V +.1 g 5612 2077 M +-87 -118 V +.1 g 5525 1959 M +5412 1787 L +.1 g 5412 1787 M +-24 -36 V +.1 g 5388 1751 M +5279 1616 L +.1 g 5279 1616 M +5164 1459 L +.1 g 5164 1459 M +-12 -14 V +.1 g 5152 1445 M +4999 1273 L +.1 g 4999 1273 M +-59 -69 V +.1 g 4940 1204 M +4836 1102 L +.1 g 4836 1102 M +4717 981 L +.1 g 4717 981 M +-60 -50 V +.1 g 4657 931 M +4493 791 L +.1 g 4493 791 M +-47 -32 V +.1 g 4446 759 M +4269 638 L +.1 g 4269 638 M +-92 -50 V +0 g .075 g 2892 588 M +.075 g 2892 588 M +-191 77 V +.075 g 2701 665 M +-182 94 V +.075 g 2519 759 M +-42 23 V +.075 g 2477 782 M +2260 931 L +.075 g 2260 931 M +-7 4 V +.075 g 2253 935 M +-196 167 V +.075 g 2057 1102 M +-27 23 V +.075 g 2030 1125 M +-145 148 V +.075 g 1885 1273 M +-79 77 V +.075 g 1806 1350 M +-79 95 V +.075 g 1727 1445 M +-145 159 V +.075 g 1582 1604 M +-9 12 V +.075 g 1573 1616 M +-124 171 V +.075 g 1449 1787 M +-91 111 V +.075 g 1358 1898 M +-39 61 V +.075 g 1319 1959 M +-115 171 V +.075 g 1204 2130 M +-70 94 V +.075 g 1134 2224 M +-44 77 V +.075 g 1090 2301 M +986 2473 L +.075 g 986 2473 M +-76 110 V +.075 g 910 2583 M +-31 61 V +.075 g 879 2644 M +-91 171 V +.075 g 788 2815 M +686 2975 L +0 g .075 g 6060 4848 M +.075 g 6060 4848 M +-75 -148 V +.075 g 5985 4700 M +5885 4528 L +.075 g 5885 4528 M +-49 -76 V +.075 g 5836 4452 M +-54 -95 V +.075 g 5782 4357 M +5677 4186 L +.075 g 5677 4186 M +-65 -94 V +.075 g 5612 4092 M +-49 -78 V +.075 g 5563 4014 M +5446 3843 L +.075 g 5446 3843 M +-58 -76 V +.075 g 5388 3767 M +-68 -95 V +.075 g 5320 3672 M +5183 3500 L +.075 g 5183 3500 M +-19 -22 V +.075 g 5164 3478 M +5041 3329 L +.075 g 5041 3329 M +4940 3219 L +.075 g 4940 3219 M +-59 -61 V +.075 g 4881 3158 M +4717 2999 L +.075 g 4717 2999 M +-15 -13 V +.075 g 4702 2986 M +4498 2815 L +.075 g 4498 2815 M +-5 -4 V +.075 g 4493 2811 M +4269 2656 L +.075 g 4269 2656 M +-24 -12 V +.075 g 4245 2644 M +4045 2533 L +.075 g 4045 2533 M +-167 -60 V +.075 g 3878 2473 M +-57 -23 V +.075 g 3821 2450 M +-224 -54 V +.075 g 3597 2396 M +-224 -17 V +.075 g 3373 2379 M +-224 17 V +.075 g 3149 2396 M +-224 53 V +.075 g 2925 2449 M +-57 24 V +.075 g 2868 2473 M +-167 60 V +.075 g 2701 2533 M +-201 111 V +.075 g 2500 2644 M +-23 12 V +.075 g 2477 2656 M +-224 154 V +.075 g 2253 2810 M +-5 5 V +.075 g 2248 2815 M +-205 171 V +.075 g 2043 2986 M +-13 12 V +.075 g 2030 2998 M +-165 160 V +.075 g 1865 3158 M +-59 60 V +.075 g 1806 3218 M +-101 111 V +.075 g 1705 3329 M +-123 148 V +.075 g 1582 3477 M +-20 23 V +.075 g 1562 3500 M +-136 172 V +.075 g 1426 3672 M +-68 94 V +.075 g 1358 3766 M +-58 77 V +.075 g 1300 3843 M +-117 171 V +.075 g 1183 4014 M +-49 78 V +.075 g 1134 4092 M +-65 94 V +.075 g 1069 4186 M +963 4357 L +.075 g 963 4357 M +-53 94 V +.075 g 910 4451 M +-50 77 V +.075 g 860 4528 M +760 4700 L +.075 g 760 4700 M +-74 147 V +0 g .075 g 6060 2974 M +.075 g 6060 2974 M +5958 2815 L +.075 g 5958 2815 M +-91 -171 V +.075 g 5867 2644 M +-31 -61 V +.075 g 5836 2583 M +-76 -110 V +.075 g 5760 2473 M +5656 2301 L +.075 g 5656 2301 M +-44 -78 V +.075 g 5612 2223 M +-70 -93 V +.075 g 5542 2130 M +5427 1959 L +.075 g 5427 1959 M +-39 -61 V +.075 g 5388 1898 M +-90 -111 V +.075 g 5298 1787 M +5173 1616 L +.075 g 5173 1616 M +-9 -12 V +.075 g 5164 1604 M +5020 1445 L +.075 g 5020 1445 M +-80 -95 V +.075 g 4940 1350 M +-79 -77 V +.075 g 4861 1273 M +4717 1125 L +.075 g 4717 1125 M +-28 -23 V +.075 g 4689 1102 M +4493 935 L +.075 g 4493 935 M +-7 -4 V +.075 g 4486 931 M +4269 782 L +.075 g 4269 782 M +-42 -23 V +.075 g 4227 759 M +4045 664 L +.075 g 4045 664 M +3854 588 L +0 g .05 g 6060 4675 M +.05 g 6060 4675 M +-72 -147 V +.05 g 5988 4528 M +5888 4357 L +.05 g 5888 4357 M +-52 -78 V +.05 g 5836 4279 M +-52 -93 V +.05 g 5784 4186 M +5680 4014 L +.05 g 5680 4014 M +-68 -95 V +.05 g 5612 3919 M +-47 -76 V +.05 g 5565 3843 M +5448 3672 L +.05 g 5448 3672 M +-60 -78 V +.05 g 5388 3594 M +-66 -94 V +.05 g 5322 3500 M +5185 3329 L +.05 g 5185 3329 M +-21 -24 V +.05 g 5164 3305 M +5044 3158 L +.05 g 5044 3158 M +4940 3046 L +.05 g 4940 3046 M +-57 -60 V +.05 g 4883 2986 M +4717 2826 L +.05 g 4717 2826 M +-14 -11 V +.05 g 4703 2815 M +4499 2644 L +.05 g 4499 2644 M +-6 -6 V +.05 g 4493 2638 M +4269 2484 L +.05 g 4269 2484 M +-22 -11 V +.05 g 4247 2473 M +4045 2361 L +.05 g 4045 2361 M +-164 -60 V +.05 g 3881 2301 M +-60 -24 V +.05 g 3821 2277 M +-224 -54 V +.05 g 3597 2223 M +-224 -17 V +.05 g 3373 2206 M +-224 17 V +.05 g 3149 2223 M +-224 54 V +.05 g 2925 2277 M +-60 24 V +.05 g 2865 2301 M +-164 59 V +.05 g 2701 2360 M +-203 113 V +.05 g 2498 2473 M +-21 10 V +.05 g 2477 2483 M +-224 155 V +.05 g 2253 2638 M +-7 6 V +.05 g 2246 2644 M +-204 171 V +.05 g 2042 2815 M +-12 11 V +.05 g 2030 2826 M +-167 160 V +.05 g 1863 2986 M +-57 59 V +.05 g 1806 3045 M +-104 113 V +.05 g 1702 3158 M +-120 146 V +.05 g 1582 3304 M +-21 25 V +.05 g 1561 3329 M +-137 171 V +.05 g 1424 3500 M +-66 93 V +.05 g 1358 3593 M +-61 79 V +.05 g 1297 3672 M +-116 171 V +.05 g 1181 3843 M +-47 75 V +.05 g 1134 3918 M +-68 96 V +.05 g 1066 4014 M +961 4186 L +.05 g 961 4186 M +-51 92 V +.05 g 910 4278 M +-53 79 V +.05 g 857 4357 M +-99 171 V +.05 g 758 4528 M +-72 146 V +0 g .05 g 6060 3147 M +.05 g 6060 3147 M +5955 2986 L +.05 g 5955 2986 M +-89 -171 V +.05 g 5866 2815 M +-30 -59 V +.05 g 5836 2756 M +-79 -112 V +.05 g 5757 2644 M +5654 2473 L +.05 g 5654 2473 M +-42 -77 V +.05 g 5612 2396 M +-73 -95 V +.05 g 5539 2301 M +5425 2130 L +.05 g 5425 2130 M +-37 -60 V +.05 g 5388 2070 M +-93 -111 V +.05 g 5295 1959 M +5172 1787 L +.05 g 5172 1787 M +-8 -11 V +.05 g 5164 1776 M +5017 1616 L +.05 g 5017 1616 M +-77 -93 V +.05 g 4940 1523 M +-81 -78 V +.05 g 4859 1445 M +4717 1298 L +.05 g 4717 1298 M +-30 -25 V +.05 g 4687 1273 M +4493 1107 L +.05 g 4493 1107 M +-8 -5 V +.05 g 4485 1102 M +4269 955 L +.05 g 4269 955 M +-44 -24 V +.05 g 4225 931 M +4045 837 L +.05 g 4045 837 M +3851 759 L +.05 g 3851 759 M +-30 -11 V +.05 g 3821 748 M +3597 700 L +.05 g 3597 700 M +3373 683 L +.05 g 3373 683 M +-224 17 V +.05 g 3149 700 M +-224 48 V +.05 g 2925 748 M +-30 11 V +.05 g 2895 759 M +-194 79 V +.05 g 2701 838 M +-179 93 V +.05 g 2522 931 M +-45 24 V +.05 g 2477 955 M +-215 147 V +.05 g 2262 1102 M +-9 6 V +.05 g 2253 1108 M +-194 165 V +.05 g 2059 1273 M +-29 25 V +.05 g 2030 1298 M +-143 147 V +.05 g 1887 1445 M +-81 78 V +.05 g 1806 1523 M +-77 93 V +.05 g 1729 1616 M +-147 161 V +.05 g 1582 1777 M +-8 10 V +.05 g 1574 1787 M +-123 172 V +.05 g 1451 1959 M +-93 112 V +.05 g 1358 2071 M +-37 59 V +.05 g 1321 2130 M +-114 171 V +.05 g 1207 2301 M +-73 96 V +.05 g 1134 2397 M +-42 76 V +.05 g 1092 2473 M +990 2644 L +.05 g 990 2644 M +-80 113 V +.05 g 910 2757 M +-29 58 V +.05 g 881 2815 M +-90 171 V +.05 g 791 2986 M +686 3147 L +0 g .025 g 6060 4447 M +.025 g 6060 4447 M +-42 -90 V +.025 g 6018 4357 M +-90 -171 V +.025 g 5928 4186 M +-92 -132 V +.025 g 5836 4054 M +-21 -40 V +.025 g 5815 4014 M +-94 -171 V +.025 g 5721 3843 M +5612 3696 L +.025 g 5612 3696 M +-15 -24 V +.025 g 5597 3672 M +5492 3500 L +.025 g 5492 3500 M +5388 3369 L +.025 g 5388 3369 M +-28 -40 V +.025 g 5360 3329 M +5235 3158 L +.025 g 5235 3158 M +-71 -82 V +.025 g 5164 3076 M +-72 -90 V +.025 g 5092 2986 M +4940 2824 L +.025 g 4940 2824 M +-9 -9 V +.025 g 4931 2815 M +4765 2644 L +.025 g 4765 2644 M +-48 -46 V +.025 g 4717 2598 M +4570 2473 L +.025 g 4570 2473 M +-77 -65 V +.025 g 4493 2408 M +4335 2301 L +.025 g 4335 2301 M +-66 -46 V +.025 g 4269 2255 M +4045 2139 L +.025 g 4045 2139 M +-26 -9 V +.025 g 4019 2130 M +-198 -82 V +.025 g 3821 2048 M +-224 -50 V +.025 g 3597 1998 M +-224 -15 V +.025 g 3373 1983 M +-224 15 V +.025 g 3149 1998 M +-224 50 V +.025 g 2925 2048 M +-199 82 V +.025 g 2726 2130 M +-25 9 V +.025 g 2701 2139 M +-224 116 V +.025 g 2477 2255 M +-66 46 V +.025 g 2411 2301 M +-158 107 V +.025 g 2253 2408 M +-78 65 V +.025 g 2175 2473 M +-145 124 V +.025 g 2030 2597 M +-50 47 V +.025 g 1980 2644 M +-166 171 V +.025 g 1814 2815 M +-8 9 V +.025 g 1806 2824 M +-153 162 V +.025 g 1653 2986 M +-71 89 V +.025 g 1582 3075 M +-72 83 V +.025 g 1510 3158 M +-125 171 V +.025 g 1385 3329 M +-27 39 V +.025 g 1358 3368 M +-105 132 V +.025 g 1253 3500 M +-105 172 V +.025 g 1148 3672 M +-14 23 V +.025 g 1134 3695 M +-109 148 V +.025 g 1025 3843 M +-94 171 V +.025 g 931 4014 M +-21 39 V +.025 g 910 4053 M +-93 133 V +.025 g 817 4186 M +-90 171 V +.025 g 727 4357 M +-41 88 V +0 g .025 g 6060 3375 M +.025 g 6060 3375 M +-34 -46 V +.025 g 6026 3329 M +5920 3158 L +.025 g 5920 3158 M +-79 -172 V +.025 g 5841 2986 M +-5 -9 V +.025 g 5836 2977 M +5717 2815 L +.025 g 5717 2815 M +-92 -171 V +.025 g 5625 2644 M +-13 -25 V +.025 g 5612 2619 M +5496 2473 L +.025 g 5496 2473 M +5394 2301 L +.025 g 5394 2301 M +-6 -9 V +.025 g 5388 2292 M +5250 2130 L +.025 g 5250 2130 M +-86 -125 V +.025 g 5164 2005 M +-44 -46 V +.025 g 5120 1959 M +4973 1787 L +.025 g 4973 1787 M +-33 -40 V +.025 g 4940 1747 M +4802 1616 L +.025 g 4802 1616 M +-85 -90 V +.025 g 4717 1526 M +-99 -81 V +.025 g 4618 1445 M +4493 1338 L +.025 g 4493 1338 M +-92 -65 V +.025 g 4401 1273 M +-132 -89 V +.025 g 4269 1184 M +-146 -82 V +.025 g 4123 1102 M +-78 -40 V +.025 g 4045 1062 M +3821 977 L +.025 g 3821 977 M +3641 931 L +.025 g 3641 931 M +-44 -9 V +.025 g 3597 922 M +3373 906 L +.025 g 3373 906 M +-224 16 V +.025 g 3149 922 M +-43 9 V +.025 g 3106 931 M +-181 46 V +.025 g 2925 977 M +-224 85 V +.025 g 2701 1062 M +-77 40 V +.025 g 2624 1102 M +-147 82 V +.025 g 2477 1184 M +-131 89 V +.025 g 2346 1273 M +-93 65 V +.025 g 2253 1338 M +-124 107 V +.025 g 2129 1445 M +-99 82 V +.025 g 2030 1527 M +-86 89 V +.025 g 1944 1616 M +-138 132 V +.025 g 1806 1748 M +-32 39 V +.025 g 1774 1787 M +-148 172 V +.025 g 1626 1959 M +-44 47 V +.025 g 1582 2006 M +-86 124 V +.025 g 1496 2130 M +-138 163 V +.025 g 1358 2293 M +-5 8 V +.025 g 1353 2301 M +-103 172 V +.025 g 1250 2473 M +-116 147 V +.025 g 1134 2620 M +-13 24 V +.025 g 1121 2644 M +-91 171 V +.025 g 1030 2815 M +910 2978 L +.025 g 910 2978 M +-4 8 V +.025 g 906 2986 M +-79 172 V +.025 g 827 3158 M +721 3329 L +.025 g 721 3329 M +-35 48 V +% End plot #1 +% Begin plot #2 +1.500 UP +stroke +4.000 UL +LT0 +0.55 0.10 0.05 C 2253 4443 M +815 2975 L +313 159 V +189 -257 V +167 -223 V +171 -211 V +174 -194 V +176 -175 V +175 -153 V +174 -132 V +172 -109 V +168 -87 V +163 -67 V +158 -46 V +152 -29 V +144 -12 V +136 1 V +127 13 V +120 22 V +113 30 V +105 35 V +100 41 V +95 45 V +91 49 V +88 52 V +85 55 V +82 59 V +79 61 V +78 63 V +74 65 V +73 67 V +70 68 V +68 69 V +65 70 V +64 70 V +60 70 V +59 69 V +55 69 V +53 67 V +50 65 V +47 63 V +44 60 V +41 57 V +38 53 V +33 49 V +30 44 V +26 38 V +21 32 V +16 24 V +10 16 V +4 7 V +1 1 V +2253 4443 CircleF +815 2975 CircleF +1128 3134 CircleF +1317 2877 CircleF +1484 2654 CircleF +1655 2443 CircleF +1829 2249 CircleF +2005 2074 CircleF +2180 1921 CircleF +2354 1789 CircleF +2526 1680 CircleF +2694 1593 CircleF +2857 1526 CircleF +3015 1480 CircleF +3167 1451 CircleF +3311 1439 CircleF +3447 1440 CircleF +3574 1453 CircleF +3694 1475 CircleF +3807 1505 CircleF +3912 1540 CircleF +4012 1581 CircleF +4107 1626 CircleF +4198 1675 CircleF +4286 1727 CircleF +4371 1782 CircleF +4453 1841 CircleF +4532 1902 CircleF +4610 1965 CircleF +4684 2030 CircleF +4757 2097 CircleF +4827 2165 CircleF +4895 2234 CircleF +4960 2304 CircleF +5024 2374 CircleF +5084 2444 CircleF +5143 2513 CircleF +5198 2582 CircleF +5251 2649 CircleF +5301 2714 CircleF +5348 2777 CircleF +5392 2837 CircleF +5433 2894 CircleF +5471 2947 CircleF +5504 2996 CircleF +5534 3040 CircleF +5560 3078 CircleF +5581 3110 CircleF +5597 3134 CircleF +5607 3150 CircleF +5611 3157 CircleF +5612 3158 CircleF +5612 3158 CircleF +5612 3158 CircleF +% End plot #2 +% Begin plot #3 +1.500 UP +4.000 UL +LT2 +0.00 0.38 0.68 C 2253 4443 M +1255 3345 L +54 -444 V +516 -647 V +617 -526 V +628 -263 V +591 4 V +593 244 V +613 502 V +289 318 V +285 373 V +140 204 V +29 44 V +2 4 V +2253 4443 TriUF +1255 3345 TriUF +1309 2901 TriUF +1825 2254 TriUF +2442 1728 TriUF +3070 1465 TriUF +3661 1469 TriUF +4254 1713 TriUF +4867 2215 TriUF +5156 2533 TriUF +5441 2906 TriUF +5581 3110 TriUF +5610 3154 TriUF +5612 3158 TriUF +5612 3158 TriUF +5612 3158 TriUF +% End plot #3 +LCw setrgbcolor +1.000 3270 4528 2706 280 BoxColFill +% Begin plot #4 +2.000 UL +LT0 +0 g % End plot #4 +% Begin plot #5 +1.500 UP +4.000 UL +LT0 +0.55 0.10 0.05 C 5454 4738 M +[ [(Arial-Bold) 140.0 0.0 true true 0 (LM)] +] -46.7 MRshow +LT0 +0.55 0.10 0.05 C 5538 4738 M +354 0 V +5715 4738 CircleF +% End plot #5 +% Begin plot #6 +1.500 UP +4.000 UL +LT2 +0.00 0.38 0.68 C 5454 4598 M +[ [(Arial-Bold) 140.0 0.0 true true 0 (LM + geodesic acceleration)] +] -46.7 MRshow +LT2 +0.00 0.38 0.68 C 5538 4598 M +354 0 V +5715 4598 TriUF +% End plot #6 +1.000 UL +LTb +LCb setrgbcolor +686 4871 N +686 588 L +5374 0 V +0 4283 V +-5374 0 V +Z stroke +stroke gsave %% draw gray scale smooth box +maxcolors 0 gt {/imax maxcolors def} {/imax 1024 def} ifelse +6194 588 translate 268 4283 scale 0 setlinewidth +/ystep 1 imax div def /y0 0 def /ii 0 def +{ y0 g 0 y0 N 1 0 V 0 ystep V -1 0 f +/y0 y0 ystep add def /ii ii 1 add def +ii imax ge {exit} if } loop +grestore 0 setgray +1.000 UL +LTb +LCb setrgbcolor +6194 588 N +268 0 V +0 4283 V +-268 0 V +0 -4283 V +Z stroke +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +6462 588 M +-63 0 V +stroke +6546 588 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6194 588 M +63 0 V +205 535 R +-63 0 V +stroke +6546 1123 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 5000)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6194 1123 M +63 0 V +205 535 R +-63 0 V +stroke +6546 1658 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 10000)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6194 1658 M +63 0 V +205 536 R +-63 0 V +stroke +6546 2194 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 15000)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6194 2194 M +63 0 V +205 535 R +-63 0 V +stroke +6546 2729 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 20000)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6194 2729 M +63 0 V +205 535 R +-63 0 V +stroke +6546 3264 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 25000)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6194 3264 M +63 0 V +205 536 R +-63 0 V +stroke +6546 3800 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 30000)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6194 3800 M +63 0 V +205 535 R +-63 0 V +stroke +6546 4335 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 35000)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6194 4335 M +63 0 V +205 536 R +-63 0 V +stroke +6546 4871 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 40000)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6194 4871 M +63 0 V +0.300 UP +stroke +LTb +LCb setrgbcolor +grestore % colour palette end +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Arial-Bold Helvetica diff -Nru gsl-doc-1.16/doc/nlfit3.eps gsl-doc-2.3/doc/nlfit3.eps --- gsl-doc-1.16/doc/nlfit3.eps 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/nlfit3.eps 2016-07-07 20:36:10.000000000 +0000 @@ -0,0 +1,25232 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: nlfit3.eps +%%Creator: gnuplot 4.6 patchlevel 2 +%%CreationDate: Sat Jul 2 12:39:50 2016 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 410 302 +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color true def +/Blacktext false def +/Solid true def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -46 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 410 50 lineto 410 302 lineto 50 302 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.6 (September 2012) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse + clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title (nlfit3.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 2) + /Author (palken) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Sat Jul 2 12:39:50 2016) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.050 0.050 scale +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 7200.00 5040.00 BoxColFill} if +gsave % colour palette begin +/maxcolors 0 def +/HSV2RGB { exch dup 0.0 eq {pop exch pop dup dup} % achromatic gray + { /HSVs exch def /HSVv exch def 6.0 mul dup floor dup 3 1 roll sub + /HSVf exch def /HSVi exch cvi def /HSVp HSVv 1.0 HSVs sub mul def + /HSVq HSVv 1.0 HSVs HSVf mul sub mul def + /HSVt HSVv 1.0 HSVs 1.0 HSVf sub mul sub mul def + /HSVi HSVi 6 mod def 0 HSVi eq {HSVv HSVt HSVp} + {1 HSVi eq {HSVq HSVv HSVp}{2 HSVi eq {HSVp HSVv HSVt} + {3 HSVi eq {HSVp HSVq HSVv}{4 HSVi eq {HSVt HSVp HSVv} + {HSVv HSVp HSVq} ifelse} ifelse} ifelse} ifelse} ifelse + } ifelse} def +/Constrain { + dup 0 lt {0 exch pop}{dup 1 gt {1 exch pop} if} ifelse} def +/YIQ2RGB { + 3 copy -1.702 mul exch -1.105 mul add add Constrain 4 1 roll + 3 copy -0.647 mul exch -0.272 mul add add Constrain 5 1 roll + 0.621 mul exch -0.956 mul add add Constrain 3 1 roll } def +/CMY2RGB { 1 exch sub exch 1 exch sub 3 2 roll 1 exch sub 3 1 roll exch } def +/XYZ2RGB { 3 copy -0.9017 mul exch -0.1187 mul add exch 0.0585 mul exch add + Constrain 4 1 roll 3 copy -0.0279 mul exch 1.999 mul add exch + -0.9844 mul add Constrain 5 1 roll -0.2891 mul exch -0.5338 mul add + exch 1.91 mul exch add Constrain 3 1 roll} def +/SelectSpace {ColorSpace (HSV) eq {HSV2RGB}{ColorSpace (XYZ) eq { + XYZ2RGB}{ColorSpace (CMY) eq {CMY2RGB}{ColorSpace (YIQ) eq {YIQ2RGB} + if} ifelse} ifelse} ifelse} def +/InterpolatedColor true def +/grayindex {/gidx 0 def + {GrayA gidx get grayv ge {exit} if /gidx gidx 1 add def} loop} def +/dgdx {grayv GrayA gidx get sub GrayA gidx 1 sub get + GrayA gidx get sub div} def +/redvalue {RedA gidx get RedA gidx 1 sub get + RedA gidx get sub dgdxval mul add} def +/greenvalue {GreenA gidx get GreenA gidx 1 sub get + GreenA gidx get sub dgdxval mul add} def +/bluevalue {BlueA gidx get BlueA gidx 1 sub get + BlueA gidx get sub dgdxval mul add} def +/interpolate { + grayindex grayv GrayA gidx get sub abs 1e-5 le + {RedA gidx get GreenA gidx get BlueA gidx get} + {/dgdxval dgdx def redvalue greenvalue bluevalue} ifelse} def +/GrayA [0 .125 .25 .375 .5 .625 .75 .875 1 ] def +/RedA [0 0 0 0 .5 1 1 1 .5 ] def +/GreenA [0 0 .5 1 1 1 .5 0 0 ] def +/BlueA [.5 1 1 1 .5 0 0 0 0 ] def +/pm3dround {maxcolors 0 gt {dup 1 ge + {pop 1} {maxcolors mul floor maxcolors 1 sub div} ifelse} if} def +/pm3dGamma 1.0 1.5 Gamma mul div def +/ColorSpace (RGB) def +Color InterpolatedColor or { % COLOUR vs. GRAY map + InterpolatedColor { %% Interpolation vs. RGB-Formula + /g {stroke pm3dround /grayv exch def interpolate + SelectSpace setrgbcolor} bind def + }{ + /g {stroke pm3dround dup cF7 Constrain exch dup cF5 Constrain exch cF15 Constrain + SelectSpace setrgbcolor} bind def + } ifelse +}{ + /g {stroke pm3dround pm3dGamma exp setgray} bind def +} ifelse +1.000 UL +LTb +LCb setrgbcolor +602 588 M +63 0 V +5387 0 R +-63 0 V +stroke +518 588 M +[ [(Helvetica) 140.0 0.0 true true 0 (-5)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 1596 M +63 0 V +5387 0 R +-63 0 V +stroke +518 1596 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 2604 M +63 0 V +5387 0 R +-63 0 V +stroke +518 2604 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 5)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 3611 M +63 0 V +5387 0 R +-63 0 V +stroke +518 3611 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 10)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 4619 M +63 0 V +5387 0 R +-63 0 V +stroke +518 4619 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 15)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 588 M +0 63 V +0 3968 R +0 -63 V +stroke +602 448 M +[ [(Helvetica) 140.0 0.0 true true 0 (-5)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1965 588 M +0 63 V +0 3968 R +0 -63 V +stroke +1965 448 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +3327 588 M +0 63 V +0 3968 R +0 -63 V +stroke +3327 448 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 5)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +4690 588 M +0 63 V +0 3968 R +0 -63 V +stroke +4690 448 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 10)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +6052 588 M +0 63 V +0 3968 R +0 -63 V +stroke +6052 448 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 15)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +602 4619 N +602 588 L +5450 0 V +0 4031 V +-5450 0 V +Z stroke +LCb setrgbcolor +112 2603 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 140.0 0.0 true true 0 (x)] +[(Helvetica) 112.0 -42.0 true true 0 (2)] +] -32.7 MCshow +grestore +LTb +LCb setrgbcolor +3327 238 M +[ [(Helvetica) 140.0 0.0 true true 0 (x)] +[(Helvetica) 112.0 -42.0 true true 0 (1)] +] -32.7 MCshow +LTb +3327 4829 M +[ [(Helvetica) 140.0 0.0 true true 0 (Minimizing the Branin function)] +] -46.7 MCshow +0.300 UP +1.000 UL +LTb +LCb setrgbcolor +% Begin plot #1 +2.000 UL +LT0 +0 g 1 g 612 588 M +1 g 612 588 M +-9 20 V +1 g 603 608 M +-1 3 V +0 g .98 g 632 588 M +.98 g 632 588 M +-3 7 V +.98 g 629 595 M +-6 13 V +.98 g 623 608 M +-9 20 V +.98 g 614 628 M +-8 20 V +.98 g 606 648 M +-4 9 V +0 g .96 g 653 588 M +.96 g 653 588 M +-9 20 V +.96 g 644 608 M +-9 20 V +.96 g 635 628 M +-6 13 V +.96 g 629 641 M +-3 7 V +.96 g 626 648 M +-9 21 V +.96 g 617 669 M +-9 20 V +.96 g 608 689 M +-6 14 V +0 g .94 g 673 588 M +.94 g 673 588 M +-9 20 V +.94 g 664 608 M +-7 18 V +.94 g 657 626 M +-2 2 V +.94 g 655 628 M +-8 20 V +.94 g 647 648 M +-9 21 V +.94 g 638 669 M +-9 19 V +.94 g 629 688 M +0 1 V +.94 g 629 689 M +-9 20 V +.94 g 620 709 M +-9 20 V +.94 g 611 729 M +-9 20 V +.94 g 602 749 M +0 1 V +0 g .92 g 694 588 M +.92 g 694 588 M +-9 20 V +.92 g 685 608 M +-1 4 V +.92 g 684 612 M +-8 16 V +.92 g 676 628 M +-9 20 V +.92 g 667 648 M +-8 21 V +.92 g 659 669 M +-2 4 V +.92 g 657 673 M +-7 16 V +.92 g 650 689 M +-9 20 V +.92 g 641 709 M +-9 20 V +.92 g 632 729 M +-3 6 V +.92 g 629 735 M +-6 14 V +.92 g 623 749 M +-9 20 V +.92 g 614 769 M +-9 21 V +.92 g 605 790 M +-3 7 V +0 g .9 g 716 588 M +.9 g 716 588 M +-5 11 V +.9 g 711 599 M +-4 9 V +.9 g 707 608 M +-9 20 V +.9 g 698 628 M +-9 20 V +.9 g 689 648 M +-5 12 V +.9 g 684 660 M +-4 9 V +.9 g 680 669 M +-9 20 V +.9 g 671 689 M +-9 20 V +.9 g 662 709 M +-5 12 V +.9 g 657 721 M +-4 8 V +.9 g 653 729 M +-9 20 V +stroke 644 749 M +.9 g 644 749 M +-9 20 V +.9 g 635 769 M +-6 14 V +.9 g 629 783 M +-3 7 V +.9 g 626 790 M +-8 20 V +.9 g 618 810 M +-9 20 V +.9 g 609 830 M +-7 15 V +0 g .88 g 738 588 M +.88 g 738 588 M +-9 20 V +.88 g 729 608 M +-10 20 V +.88 g 719 628 M +-8 19 V +.88 g 711 647 M +-1 1 V +.88 g 710 648 M +-9 21 V +.88 g 701 669 M +-9 20 V +.88 g 692 689 M +-8 19 V +.88 g 684 708 M +-1 1 V +.88 g 683 709 M +-9 20 V +.88 g 674 729 M +-9 20 V +.88 g 665 749 M +-8 20 V +.88 g 657 769 M +-1 0 V +.88 g 656 769 M +-8 21 V +.88 g 648 790 M +-9 20 V +.88 g 639 810 M +-9 20 V +.88 g 630 830 M +-1 1 V +.88 g 629 831 M +-8 19 V +.88 g 621 850 M +-9 20 V +.88 g 612 870 M +-9 20 V +.88 g 603 890 M +-1 4 V +0 g .86 g 760 588 M +.86 g 760 588 M +-9 20 V +.86 g 751 608 M +-10 20 V +.86 g 741 628 M +-3 7 V +.86 g 738 635 M +-6 13 V +.86 g 732 648 M +-9 21 V +.86 g 723 669 M +-9 20 V +.86 g 714 689 M +-3 7 V +.86 g 711 696 M +-6 13 V +.86 g 705 709 M +-9 20 V +.86 g 696 729 M +-9 20 V +.86 g 687 749 M +-3 8 V +.86 g 684 757 M +-6 12 V +.86 g 678 769 M +-9 21 V +.86 g 669 790 M +-9 20 V +.86 g 660 810 M +-3 8 V +.86 g 657 818 M +-6 12 V +.86 g 651 830 M +-8 20 V +.86 g 643 850 M +-9 20 V +.86 g 634 870 M +-5 10 V +.86 g 629 880 M +-4 10 V +.86 g 625 890 M +-9 20 V +.86 g 616 910 M +-9 21 V +.86 g 607 931 M +-5 12 V +0 g .84 g 782 588 M +.84 g 782 588 M +-9 20 V +.84 g 773 608 M +-8 17 V +stroke 765 625 M +.84 g 765 625 M +-1 3 V +.84 g 764 628 M +-9 20 V +.84 g 755 648 M +-9 21 V +.84 g 746 669 M +-8 16 V +.84 g 738 685 M +-2 4 V +.84 g 736 689 M +-9 20 V +.84 g 727 709 M +-9 20 V +.84 g 718 729 M +-7 16 V +.84 g 711 745 M +-2 4 V +.84 g 709 749 M +-9 20 V +.84 g 700 769 M +-9 21 V +.84 g 691 790 M +-7 16 V +.84 g 684 806 M +-2 4 V +.84 g 682 810 M +-9 20 V +.84 g 673 830 M +-9 20 V +.84 g 664 850 M +-7 18 V +.84 g 657 868 M +-2 2 V +.84 g 655 870 M +-8 20 V +.84 g 647 890 M +-9 20 V +.84 g 638 910 M +-9 20 V +.84 g 629 930 M +0 1 V +.84 g 629 931 M +-9 20 V +.84 g 620 951 M +-9 20 V +.84 g 611 971 M +-8 20 V +.84 g 603 991 M +-1 1 V +0 g .82 g 806 588 M +.82 g 806 588 M +-10 20 V +.82 g 796 608 M +-3 7 V +.82 g 793 615 M +-6 13 V +.82 g 787 628 M +-9 20 V +.82 g 778 648 M +-10 21 V +.82 g 768 669 M +-3 6 V +.82 g 765 675 M +-6 14 V +.82 g 759 689 M +-9 20 V +.82 g 750 709 M +-9 20 V +.82 g 741 729 M +-3 6 V +.82 g 738 735 M +-6 14 V +.82 g 732 749 M +-9 20 V +.82 g 723 769 M +-9 21 V +.82 g 714 790 M +-3 5 V +.82 g 711 795 M +-6 15 V +.82 g 705 810 M +-9 20 V +.82 g 696 830 M +-9 20 V +.82 g 687 850 M +-3 6 V +.82 g 684 856 M +-6 14 V +.82 g 678 870 M +-9 20 V +.82 g 669 890 M +-9 20 V +.82 g 660 910 M +-3 8 V +.82 g 657 918 M +-6 13 V +.82 g 651 931 M +-9 20 V +.82 g 642 951 M +-9 20 V +.82 g 633 971 M +-4 9 V +.82 g 629 980 M +-5 11 V +stroke 624 991 M +.82 g 624 991 M +-8 20 V +.82 g 616 1011 M +-9 20 V +.82 g 607 1031 M +-5 12 V +0 g .8 g 829 588 M +.8 g 829 588 M +-9 19 V +.8 g 820 607 M +0 1 V +.8 g 820 608 M +-10 20 V +.8 g 810 628 M +-9 20 V +.8 g 801 648 M +-8 18 V +.8 g 793 666 M +-1 3 V +.8 g 792 669 M +-10 20 V +.8 g 782 689 M +-9 20 V +.8 g 773 709 M +-8 16 V +.8 g 765 725 M +-1 4 V +.8 g 764 729 M +-9 20 V +.8 g 755 749 M +-10 20 V +.8 g 745 769 M +-7 16 V +.8 g 738 785 M +-2 5 V +.8 g 736 790 M +-9 20 V +.8 g 727 810 M +-9 20 V +.8 g 718 830 M +-7 16 V +.8 g 711 846 M +-2 4 V +.8 g 709 850 M +-9 20 V +.8 g 700 870 M +-9 20 V +.8 g 691 890 M +-7 17 V +.8 g 684 907 M +-2 3 V +.8 g 682 910 M +-9 21 V +.8 g 673 931 M +-9 20 V +.8 g 664 951 M +-7 18 V +.8 g 657 969 M +-1 2 V +.8 g 656 971 M +-9 20 V +.8 g 647 991 M +-9 20 V +.8 g 638 1011 M +-9 20 V +.8 g .8 g 629 1031 M +-9 21 V +.8 g 620 1052 M +-8 20 V +.8 g 612 1072 M +-9 20 V +.8 g 603 1092 M +-1 1 V +0 g .78 g 853 588 M +.78 g 853 588 M +-6 13 V +.78 g 847 601 M +-3 7 V +.78 g 844 608 M +-10 20 V +.78 g 834 628 M +-9 20 V +.78 g 825 648 M +-5 10 V +.78 g 820 658 M +-5 11 V +.78 g 815 669 M +-9 20 V +.78 g 806 689 M +-9 20 V +.78 g 797 709 M +-4 8 V +.78 g 793 717 M +-6 12 V +.78 g 787 729 M +-9 20 V +.78 g 778 749 M +-9 20 V +.78 g 769 769 M +-4 7 V +.78 g 765 776 M +-5 14 V +.78 g 760 790 M +-10 20 V +stroke 750 810 M +.78 g 750 810 M +-9 20 V +.78 g 741 830 M +-3 6 V +.78 g 738 836 M +-6 14 V +.78 g 732 850 M +-9 20 V +.78 g 723 870 M +-9 20 V +.78 g 714 890 M +-3 7 V +.78 g 711 897 M +-6 13 V +.78 g 705 910 M +-9 21 V +.78 g 696 931 M +-9 20 V +.78 g 687 951 M +-3 7 V +.78 g 684 958 M +-6 13 V +.78 g 678 971 M +-9 20 V +.78 g 669 991 M +-9 20 V +.78 g 660 1011 M +-3 9 V +.78 g 657 1020 M +-5 11 V +.78 g 652 1031 M +-9 21 V +.78 g 643 1052 M +-9 20 V +.78 g 634 1072 M +-5 10 V +.78 g 629 1082 M +-4 10 V +.78 g 625 1092 M +-9 20 V +.78 g 616 1112 M +-8 20 V +.78 g 608 1132 M +-6 13 V +0 g .76 g 878 588 M +.76 g 878 588 M +-3 7 V +.76 g 875 595 M +-7 13 V +.76 g 868 608 M +-9 20 V +.76 g 859 628 M +-10 20 V +.76 g 849 648 M +-2 4 V +.76 g 847 652 M +-7 17 V +.76 g 840 669 M +-10 20 V +.76 g 830 689 M +-9 20 V +.76 g 821 709 M +-1 1 V +.76 g 820 710 M +-9 19 V +.76 g 811 729 M +-9 20 V +.76 g 802 749 M +-9 20 V +.76 g 793 769 M +-1 0 V +.76 g 792 769 M +-9 21 V +.76 g 783 790 M +-9 20 V +.76 g 774 810 M +-9 18 V +.76 g 765 828 M +0 2 V +.76 g 765 830 M +-9 20 V +.76 g 756 850 M +-9 20 V +.76 g 747 870 M +-9 18 V +.76 g 738 888 M +-1 2 V +.76 g 737 890 M +-9 20 V +.76 g 728 910 M +-9 21 V +.76 g 719 931 M +-8 18 V +.76 g 711 949 M +-1 2 V +.76 g 710 951 M +-9 20 V +.76 g 701 971 M +-9 20 V +.76 g 692 991 M +-8 19 V +.76 g 684 1010 M +-1 1 V +.76 g 683 1011 M +-8 20 V +stroke 675 1031 M +.76 g 675 1031 M +-9 21 V +.76 g 666 1052 M +-9 20 V +.76 g .76 g 657 1072 M +-9 20 V +.76 g 648 1092 M +-9 20 V +.76 g 639 1112 M +-9 20 V +.76 g 630 1132 M +-1 3 V +.76 g 629 1135 M +-7 17 V +.76 g 622 1152 M +-9 20 V +.76 g 613 1172 M +-9 21 V +.76 g 604 1193 M +-2 4 V +0 g .74 g 903 588 M +.74 g 903 588 M +-1 3 V +.74 g 902 591 M +-8 17 V +.74 g 894 608 M +-10 20 V +.74 g 884 628 M +-9 19 V +.74 g 875 647 M +-1 1 V +.74 g 874 648 M +-10 21 V +.74 g 864 669 M +-9 20 V +.74 g 855 689 M +-8 16 V +.74 g 847 705 M +-2 4 V +.74 g 845 709 M +-9 20 V +.74 g 836 729 M +-10 20 V +.74 g 826 749 M +-6 14 V +.74 g 820 763 M +-3 6 V +.74 g 817 769 M +-9 21 V +.74 g 808 790 M +-10 20 V +.74 g 798 810 M +-5 11 V +.74 g 793 821 M +-4 9 V +.74 g 789 830 M +-9 20 V +.74 g 780 850 M +-10 20 V +.74 g 770 870 M +-5 11 V +.74 g 765 881 M +-4 9 V +.74 g 761 890 M +-9 20 V +.74 g 752 910 M +-9 21 V +.74 g 743 931 M +-5 10 V +.74 g 738 941 M +-4 10 V +.74 g 734 951 M +-9 20 V +.74 g 725 971 M +-9 20 V +.74 g 716 991 M +-5 11 V +.74 g 711 1002 M +-4 9 V +.74 g 707 1011 M +-9 20 V +.74 g 698 1031 M +-9 21 V +.74 g 689 1052 M +-5 11 V +.74 g 684 1063 M +-4 9 V +.74 g 680 1072 M +-9 20 V +.74 g 671 1092 M +-9 20 V +.74 g 662 1112 M +-5 13 V +.74 g 657 1125 M +-4 7 V +.74 g 653 1132 M +-8 20 V +.74 g 645 1152 M +-9 20 V +.74 g 636 1172 M +-7 15 V +.74 g 629 1187 M +-2 6 V +.74 g 627 1193 M +-9 20 V +stroke 618 1213 M +.74 g 618 1213 M +-8 20 V +.74 g 610 1233 M +-8 17 V +0 g .72 g 929 588 M +.72 g 929 588 M +0 1 V +.72 g 929 589 M +-10 19 V +.72 g 919 608 M +-9 20 V +.72 g 910 628 M +-8 16 V +.72 g 902 644 M +-2 4 V +.72 g 900 648 M +-10 21 V +.72 g 890 669 M +-10 20 V +.72 g 880 689 M +-5 11 V +.72 g 875 700 M +-5 9 V +.72 g 870 709 M +-9 20 V +.72 g 861 729 M +-10 20 V +.72 g 851 749 M +-4 9 V +.72 g 847 758 M +-5 11 V +.72 g 842 769 M +-10 21 V +.72 g 832 790 M +-9 20 V +.72 g 823 810 M +-3 6 V +.72 g 820 816 M +-7 14 V +.72 g 813 830 M +-9 20 V +.72 g 804 850 M +-9 20 V +.72 g 795 870 M +-2 4 V +.72 g 793 874 M +-7 16 V +.72 g 786 890 M +-10 20 V +.72 g 776 910 M +-9 21 V +.72 g 767 931 M +-2 3 V +.72 g 765 934 M +-7 17 V +.72 g 758 951 M +-9 20 V +.72 g 749 971 M +-9 20 V +.72 g 740 991 M +-2 3 V +.72 g 738 994 M +-7 17 V +.72 g 731 1011 M +-9 20 V +.72 g 722 1031 M +-9 21 V +.72 g 713 1052 M +-2 3 V +.72 g 711 1055 M +-7 17 V +.72 g 704 1072 M +-9 20 V +.72 g 695 1092 M +-9 20 V +.72 g 686 1112 M +-2 5 V +.72 g 684 1117 M +-7 15 V +.72 g 677 1132 M +-9 20 V +.72 g 668 1152 M +-9 20 V +.72 g 659 1172 M +-2 7 V +.72 g 657 1179 M +-7 14 V +.72 g 650 1193 M +-8 20 V +.72 g 642 1213 M +-9 20 V +.72 g 633 1233 M +-4 8 V +.72 g 629 1241 M +-5 12 V +.72 g 624 1253 M +-9 20 V +.72 g 615 1273 M +-8 20 V +.72 g 607 1293 M +-5 11 V +0 g .7 g 956 588 M +.7 g 956 588 M +-10 20 V +stroke 946 608 M +.7 g 946 608 M +-10 20 V +.7 g 936 628 M +-7 14 V +.7 g 929 642 M +-3 6 V +.7 g 926 648 M +-10 21 V +.7 g 916 669 M +-10 20 V +.7 g 906 689 M +-4 9 V +.7 g 902 698 M +-6 11 V +.7 g 896 709 M +-9 20 V +.7 g 887 729 M +-10 20 V +.7 g 877 749 M +-2 5 V +.7 g 875 754 M +-8 15 V +.7 g 867 769 M +-9 21 V +.7 g 858 790 M +-10 20 V +.7 g 848 810 M +-1 1 V +.7 g 847 811 M +-8 19 V +.7 g 839 830 M +-10 20 V +.7 g 829 850 M +-9 20 V +.7 g .7 g 820 870 M +-10 20 V +.7 g 810 890 M +-9 20 V +.7 g 801 910 M +-8 18 V +.7 g 793 928 M +-1 3 V +.7 g 792 931 M +-9 20 V +.7 g 783 951 M +-10 20 V +.7 g 773 971 M +-8 17 V +.7 g 765 988 M +-1 3 V +.7 g 764 991 M +-9 20 V +.7 g 755 1011 M +-9 20 V +.7 g 746 1031 M +-8 17 V +.7 g 738 1048 M +-1 4 V +.7 g 737 1052 M +-9 20 V +.7 g 728 1072 M +-9 20 V +.7 g 719 1092 M +-8 17 V +.7 g 711 1109 M +-1 3 V +.7 g 710 1112 M +-9 20 V +.7 g 701 1132 M +-9 20 V +.7 g 692 1152 M +-8 19 V +.7 g 684 1171 M +-1 1 V +.7 g 683 1172 M +-9 21 V +.7 g 674 1193 M +-9 20 V +.7 g 665 1213 M +-8 20 V +.7 g 657 1233 M +-1 0 V +.7 g 656 1233 M +-8 20 V +.7 g 648 1253 M +-9 20 V +.7 g 639 1273 M +-9 20 V +.7 g 630 1293 M +-1 2 V +.7 g 629 1295 M +-8 19 V +.7 g 621 1314 M +-8 20 V +.7 g 613 1334 M +-9 20 V +.7 g 604 1354 M +-2 4 V +0 g .68 g 984 588 M +.68 g .68 g 984 588 M +-10 20 V +.68 g 974 608 M +-11 20 V +.68 g 963 628 M +-7 14 V +stroke 956 642 M +.68 g 956 642 M +-3 6 V +.68 g 953 648 M +-10 21 V +.68 g 943 669 M +-10 20 V +.68 g 933 689 M +-4 8 V +.68 g 929 697 M +-6 12 V +.68 g 923 709 M +-10 20 V +.68 g 913 729 M +-10 20 V +.68 g 903 749 M +-1 3 V +.68 g 902 752 M +-8 17 V +.68 g 894 769 M +-10 21 V +.68 g 884 790 M +-9 19 V +.68 g 875 809 M +-1 1 V +.68 g 874 810 M +-9 20 V +.68 g 865 830 M +-10 20 V +.68 g 855 850 M +-8 16 V +.68 g 847 866 M +-2 4 V +.68 g 845 870 M +-9 20 V +.68 g 836 890 M +-10 20 V +.68 g 826 910 M +-6 14 V +.68 g 820 924 M +-3 7 V +.68 g 817 931 M +-9 20 V +.68 g 808 951 M +-10 20 V +.68 g 798 971 M +-5 12 V +.68 g 793 983 M +-4 8 V +.68 g 789 991 M +-9 20 V +.68 g 780 1011 M +-9 20 V +.68 g 771 1031 M +-6 12 V +.68 g 765 1043 M +-3 9 V +.68 g 762 1052 M +-9 20 V +.68 g 753 1072 M +-10 20 V +.68 g 743 1092 M +-5 11 V +.68 g 738 1103 M +-4 9 V +.68 g 734 1112 M +-9 20 V +.68 g 725 1132 M +-9 20 V +.68 g 716 1152 M +-5 12 V +.68 g 711 1164 M +-4 8 V +.68 g 707 1172 M +-9 21 V +.68 g 698 1193 M +-8 20 V +.68 g 690 1213 M +-6 13 V +.68 g 684 1226 M +-3 7 V +.68 g 681 1233 M +-9 20 V +.68 g 672 1253 M +-9 20 V +.68 g 663 1273 M +-6 15 V +.68 g 657 1288 M +-3 5 V +.68 g 654 1293 M +-9 21 V +.68 g 645 1314 M +-8 20 V +.68 g 637 1334 M +-8 17 V +.68 g 629 1351 M +-1 3 V +.68 g 628 1354 M +-9 20 V +.68 g 619 1374 M +-9 20 V +.68 g 610 1394 M +-8 20 V +0 g .66 g 1012 588 M +.66 g 1012 588 M +-1 3 V +stroke 1011 591 M +.66 g 1011 591 M +-9 17 V +.66 g 1002 608 M +-11 20 V +.66 g 991 628 M +-7 16 V +.66 g 984 644 M +-3 4 V +.66 g 981 648 M +-10 21 V +.66 g 971 669 M +-10 20 V +.66 g 961 689 M +-5 8 V +.66 g 956 697 M +-5 12 V +.66 g 951 709 M +-11 20 V +.66 g 940 729 M +-10 20 V +.66 g 930 749 M +-1 3 V +.66 g 929 752 M +-8 17 V +.66 g 921 769 M +-10 21 V +.66 g 911 790 M +-9 18 V +.66 g 902 808 M +-1 2 V +.66 g 901 810 M +-10 20 V +.66 g 891 830 M +-10 20 V +.66 g 881 850 M +-6 14 V +.66 g 875 864 M +-3 6 V +.66 g 872 870 M +-10 20 V +.66 g 862 890 M +-9 20 V +.66 g 853 910 M +-6 12 V +.66 g 847 922 M +-4 9 V +.66 g 843 931 M +-9 20 V +.66 g 834 951 M +-10 20 V +.66 g 824 971 M +-4 9 V +.66 g 820 980 M +-5 11 V +.66 g 815 991 M +-10 20 V +.66 g 805 1011 M +-9 20 V +.66 g 796 1031 M +-3 8 V +.66 g 793 1039 M +-6 13 V +.66 g 787 1052 M +-9 20 V +.66 g 778 1072 M +-9 20 V +.66 g 769 1092 M +-4 7 V +.66 g 765 1099 M +-6 13 V +.66 g 759 1112 M +-9 20 V +.66 g 750 1132 M +-9 20 V +.66 g 741 1152 M +-3 7 V +.66 g 738 1159 M +-6 13 V +.66 g 732 1172 M +-9 21 V +.66 g 723 1193 M +-9 20 V +.66 g 714 1213 M +-3 7 V +.66 g 711 1220 M +-6 13 V +.66 g 705 1233 M +-9 20 V +.66 g 696 1253 M +-8 20 V +.66 g 688 1273 M +-4 9 V +.66 g 684 1282 M +-5 11 V +.66 g 679 1293 M +-9 21 V +.66 g 670 1314 M +-9 20 V +.66 g 661 1334 M +-4 10 V +.66 g 657 1344 M +-5 10 V +.66 g 652 1354 M +-9 20 V +stroke 643 1374 M +.66 g 643 1374 M +-8 20 V +.66 g 635 1394 M +-6 13 V +.66 g 629 1407 M +-3 7 V +.66 g 626 1414 M +-9 21 V +.66 g 617 1435 M +-8 20 V +.66 g 609 1455 M +-7 15 V +0 g .64 g 1042 588 M +.64 g 1042 588 M +-4 7 V +.64 g 1038 595 M +-7 13 V +.64 g 1031 608 M +-10 20 V +.64 g 1021 628 M +-10 19 V +.64 g 1011 647 M +-1 1 V +.64 g 1010 648 M +-10 21 V +.64 g 1000 669 M +-11 20 V +.64 g 989 689 M +-5 11 V +.64 g 984 700 M +-5 9 V +.64 g 979 709 M +-10 20 V +.64 g 969 729 M +-11 20 V +.64 g 958 749 M +-2 4 V +.64 g 956 753 M +-8 16 V +.64 g 948 769 M +-10 21 V +.64 g 938 790 M +-9 18 V +.64 g 929 808 M +-1 2 V +.64 g 928 810 M +-10 20 V +.64 g 918 830 M +-9 20 V +.64 g 909 850 M +-7 14 V +.64 g 902 864 M +-3 6 V +.64 g 899 870 M +-10 20 V +.64 g 889 890 M +-10 20 V +.64 g 879 910 M +-4 10 V +.64 g 875 920 M +-5 11 V +.64 g 870 931 M +-10 20 V +.64 g 860 951 M +-9 20 V +.64 g 851 971 M +-4 7 V +.64 g 847 978 M +-6 13 V +.64 g 841 991 M +-9 20 V +.64 g 832 1011 M +-10 20 V +.64 g 822 1031 M +-2 5 V +.64 g 820 1036 M +-7 16 V +.64 g 813 1052 M +-9 20 V +.64 g 804 1072 M +-10 20 V +.64 g 794 1092 M +-1 3 V +.64 g 793 1095 M +-8 17 V +.64 g 785 1112 M +-9 20 V +.64 g 776 1132 M +-9 20 V +.64 g 767 1152 M +-2 3 V +.64 g 765 1155 M +-7 17 V +.64 g 758 1172 M +-9 21 V +.64 g 749 1193 M +-9 20 V +.64 g 740 1213 M +-2 3 V +.64 g 738 1216 M +-7 17 V +.64 g 731 1233 M +-9 20 V +.64 g 722 1253 M +-9 20 V +stroke 713 1273 M +.64 g 713 1273 M +-2 4 V +.64 g 711 1277 M +-7 16 V +.64 g 704 1293 M +-9 21 V +.64 g 695 1314 M +-9 20 V +.64 g 686 1334 M +-2 5 V +.64 g 684 1339 M +-7 15 V +.64 g 677 1354 M +-9 20 V +.64 g 668 1374 M +-9 20 V +.64 g 659 1394 M +-2 7 V +.64 g 657 1401 M +-6 13 V +.64 g 651 1414 M +-9 21 V +.64 g 642 1435 M +-9 20 V +.64 g 633 1455 M +-4 9 V +.64 g 629 1464 M +-5 11 V +.64 g 624 1475 M +-8 20 V +.64 g 616 1495 M +-9 20 V +.64 g 607 1515 M +-5 12 V +0 g .62 g 1073 588 M +.62 g 1073 588 M +-8 13 V +.62 g 1065 601 M +-3 7 V +.62 g 1062 608 M +-11 20 V +.62 g 1051 628 M +-11 20 V +.62 g 1040 648 M +-2 4 V +.62 g 1038 652 M +-9 17 V +.62 g 1029 669 M +-10 20 V +.62 g 1019 689 M +-8 15 V +.62 g 1011 704 M +-3 5 V +.62 g 1008 709 M +-10 20 V +.62 g 998 729 M +-11 20 V +.62 g 987 749 M +-3 8 V +.62 g 984 757 M +-7 12 V +.62 g 977 769 M +-10 21 V +.62 g 967 790 M +-10 20 V +.62 g 957 810 M +-1 0 V +.62 g 956 810 M +-9 20 V +.62 g 947 830 M +-10 20 V +.62 g 937 850 M +-8 15 V +.62 g 929 865 M +-2 5 V +.62 g 927 870 M +-10 20 V +.62 g 917 890 M +-10 20 V +.62 g 907 910 M +-5 11 V +.62 g 902 921 M +-5 10 V +.62 g 897 931 M +-10 20 V +.62 g 887 951 M +-9 20 V +.62 g 878 971 M +-3 6 V +.62 g 875 977 M +-7 14 V +.62 g 868 991 M +-9 20 V +.62 g 859 1011 M +-10 20 V +.62 g 849 1031 M +-2 4 V +.62 g 847 1035 M +-7 17 V +.62 g 840 1052 M +-10 20 V +.62 g 830 1072 M +-9 20 V +.62 g 821 1092 M +-1 1 V +stroke 820 1093 M +.62 g 820 1093 M +-9 19 V +.62 g 811 1112 M +-9 20 V +.62 g 802 1132 M +-9 20 V +.62 g 793 1152 M +0 1 V +.62 g 793 1153 M +-9 19 V +.62 g 784 1172 M +-9 21 V +.62 g 775 1193 M +-10 19 V +.62 g 765 1212 M +0 1 V +.62 g 765 1213 M +-9 20 V +.62 g 756 1233 M +-9 20 V +.62 g 747 1253 M +-9 20 V +.62 g .62 g 738 1273 M +-9 20 V +.62 g 729 1293 M +-9 21 V +.62 g 720 1314 M +-9 20 V +.62 g .62 g 711 1334 M +-9 20 V +.62 g 702 1354 M +-8 20 V +.62 g 694 1374 M +-9 20 V +.62 g 685 1394 M +-1 2 V +.62 g 684 1396 M +-8 18 V +.62 g 676 1414 M +-9 21 V +.62 g 667 1435 M +-9 20 V +.62 g 658 1455 M +-1 4 V +.62 g 657 1459 M +-7 16 V +.62 g 650 1475 M +-9 20 V +.62 g 641 1495 M +-9 20 V +.62 g 632 1515 M +-3 7 V +.62 g 629 1522 M +-6 13 V +.62 g 623 1535 M +-8 20 V +.62 g 615 1555 M +-9 21 V +.62 g 606 1576 M +-4 9 V +0 g .6 g 1105 588 M +.6 g 1105 588 M +-12 20 V +.6 g 1093 608 M +0 2 V +.6 g 1093 610 M +-11 18 V +.6 g 1082 628 M +-11 20 V +.6 g 1071 648 M +-6 11 V +.6 g 1065 659 M +-5 10 V +.6 g 1060 669 M +-11 20 V +.6 g 1049 689 M +-10 20 V +.6 g 1039 709 M +-1 1 V +.6 g 1038 710 M +-10 19 V +.6 g 1028 729 M +-11 20 V +.6 g 1017 749 M +-6 13 V +.6 g 1011 762 M +-4 7 V +.6 g 1007 769 M +-11 21 V +.6 g 996 790 M +-10 20 V +.6 g 986 810 M +-2 4 V +.6 g 984 814 M +-8 16 V +.6 g 976 830 M +-10 20 V +.6 g 966 850 M +-10 18 V +.6 g 956 868 M +-1 2 V +.6 g 955 870 M +-10 20 V +.6 g 945 890 M +-10 20 V +stroke 935 910 M +.6 g 935 910 M +-6 13 V +.6 g 929 923 M +-4 8 V +.6 g 925 931 M +-10 20 V +.6 g 915 951 M +-9 20 V +.6 g 906 971 M +-4 8 V +.6 g 902 979 M +-6 12 V +.6 g 896 991 M +-10 20 V +.6 g 886 1011 M +-10 20 V +.6 g 876 1031 M +-1 5 V +.6 g 875 1036 M +-8 16 V +.6 g 867 1052 M +-10 20 V +.6 g 857 1072 M +-9 20 V +.6 g 848 1092 M +-1 1 V +.6 g 847 1093 M +-9 19 V +.6 g 838 1112 M +-9 20 V +.6 g 829 1132 M +-9 20 V +.6 g .6 g 820 1152 M +-10 20 V +.6 g 810 1172 M +-9 21 V +.6 g 801 1193 M +-8 18 V +.6 g 793 1211 M +-1 2 V +.6 g 792 1213 M +-9 20 V +.6 g 783 1233 M +-9 20 V +.6 g 774 1253 M +-9 18 V +.6 g 765 1271 M +-1 2 V +.6 g 764 1273 M +-9 20 V +.6 g 755 1293 M +-9 21 V +.6 g 746 1314 M +-8 18 V +.6 g 738 1332 M +-1 2 V +.6 g 737 1334 M +-9 20 V +.6 g 728 1354 M +-9 20 V +.6 g 719 1374 M +-8 19 V +.6 g 711 1393 M +-1 1 V +.6 g 710 1394 M +-8 20 V +.6 g 702 1414 M +-9 21 V +.6 g 693 1435 M +-9 20 V +.6 g .6 g 684 1455 M +-9 20 V +.6 g 675 1475 M +-9 20 V +.6 g 666 1495 M +-9 20 V +.6 g 657 1515 M +0 2 V +.6 g 657 1517 M +-8 18 V +.6 g 649 1535 M +-9 20 V +.6 g 640 1555 M +-9 21 V +.6 g 631 1576 M +-2 4 V +.6 g 629 1580 M +-6 16 V +.6 g 623 1596 M +-9 20 V +.6 g 614 1616 M +-9 20 V +.6 g 605 1636 M +-3 8 V +0 g .58 g 1138 588 M +.58 g 1138 588 M +-12 20 V +.58 g 1126 608 M +-6 12 V +.58 g 1120 620 M +-5 8 V +.58 g 1115 628 M +-11 20 V +.58 g 1104 648 M +-11 20 V +stroke 1093 668 M +.58 g 1093 668 M +-1 1 V +.58 g 1092 669 M +-11 20 V +.58 g 1081 689 M +-11 20 V +.58 g 1070 709 M +-5 9 V +.58 g 1065 718 M +-6 11 V +.58 g 1059 729 M +-11 20 V +.58 g 1048 749 M +-10 20 V +.58 g .58 g 1038 769 M +-11 21 V +.58 g 1027 790 M +-11 20 V +.58 g 1016 810 M +-5 10 V +.58 g 1011 820 M +-5 10 V +.58 g 1006 830 M +-10 20 V +.58 g 996 850 M +-11 20 V +.58 g 985 870 M +-1 3 V +.58 g 984 873 M +-9 17 V +.58 g 975 890 M +-10 20 V +.58 g 965 910 M +-9 17 V +.58 g 956 927 M +-1 4 V +.58 g 955 931 M +-10 20 V +.58 g 945 951 M +-10 20 V +.58 g 935 971 M +-6 11 V +.58 g 929 982 M +-4 9 V +.58 g 925 991 M +-10 20 V +.58 g 915 1011 M +-10 20 V +.58 g 905 1031 M +-3 7 V +.58 g 902 1038 M +-7 14 V +.58 g 895 1052 M +-9 20 V +.58 g 886 1072 M +-10 20 V +.58 g 876 1092 M +-1 3 V +.58 g 875 1095 M +-9 17 V +.58 g 866 1112 M +-9 20 V +.58 g 857 1132 M +-10 20 V +.58 g .58 g 847 1152 M +-9 20 V +.58 g 838 1172 M +-10 21 V +.58 g 828 1193 M +-8 18 V +.58 g 820 1211 M +-1 2 V +.58 g 819 1213 M +-9 20 V +.58 g 810 1233 M +-9 20 V +.58 g 801 1253 M +-8 17 V +.58 g 793 1270 M +-2 3 V +.58 g 791 1273 M +-9 20 V +.58 g 782 1293 M +-9 21 V +.58 g 773 1314 M +-8 16 V +.58 g 765 1330 M +-1 4 V +.58 g 764 1334 M +-9 20 V +.58 g 755 1354 M +-9 20 V +.58 g 746 1374 M +-8 17 V +.58 g 738 1391 M +-1 3 V +.58 g 737 1394 M +-9 20 V +.58 g 728 1414 M +-9 21 V +.58 g 719 1435 M +-8 18 V +.58 g 711 1453 M +-1 2 V +stroke 710 1455 M +.58 g 710 1455 M +-9 20 V +.58 g 701 1475 M +-9 20 V +.58 g 692 1495 M +-8 20 V +.58 g .58 g 684 1515 M +-9 20 V +.58 g 675 1535 M +-9 20 V +.58 g 666 1555 M +-9 21 V +.58 g 657 1576 M +0 1 V +.58 g 657 1577 M +-8 19 V +.58 g 649 1596 M +-9 20 V +.58 g 640 1616 M +-9 20 V +.58 g 631 1636 M +-2 4 V +.58 g 629 1640 M +-7 16 V +.58 g 622 1656 M +-8 20 V +.58 g 614 1676 M +-9 21 V +.58 g 605 1697 M +-3 7 V +0 g .56 g 1173 588 M +.56 g 1173 588 M +-12 20 V +.56 g 1161 608 M +-12 20 V +.56 g 1149 628 M +-2 4 V +.56 g 1147 632 M +-9 16 V +.56 g 1138 648 M +-12 21 V +.56 g 1126 669 M +-6 11 V +.56 g 1120 680 M +-5 9 V +.56 g 1115 689 M +-12 20 V +.56 g 1103 709 M +-10 19 V +.56 g 1093 728 M +-1 1 V +.56 g 1092 729 M +-11 20 V +.56 g 1081 749 M +-11 20 V +.56 g 1070 769 M +-5 9 V +.56 g 1065 778 M +-6 12 V +.56 g 1059 790 M +-11 20 V +.56 g 1048 810 M +-10 18 V +.56 g 1038 828 M +-1 2 V +.56 g 1037 830 M +-10 20 V +.56 g 1027 850 M +-11 20 V +.56 g 1016 870 M +-5 10 V +.56 g 1011 880 M +-5 10 V +.56 g 1006 890 M +-11 20 V +.56 g 995 910 M +-10 21 V +.56 g 985 931 M +-1 2 V +.56 g 984 933 M +-9 18 V +.56 g 975 951 M +-11 20 V +.56 g 964 971 M +-8 16 V +.56 g 956 987 M +-2 4 V +.56 g 954 991 M +-10 20 V +.56 g 944 1011 M +-10 20 V +.56 g 934 1031 M +-5 11 V +.56 g 929 1042 M +-5 10 V +.56 g 924 1052 M +-9 20 V +.56 g 915 1072 M +-10 20 V +.56 g 905 1092 M +-3 6 V +.56 g 902 1098 M +-7 14 V +.56 g 895 1112 M +-10 20 V +stroke 885 1132 M +.56 g 885 1132 M +-9 20 V +.56 g 876 1152 M +-1 3 V +.56 g 875 1155 M +-9 17 V +.56 g 866 1172 M +-9 21 V +.56 g 857 1193 M +-10 19 V +.56 g 847 1212 M +0 1 V +.56 g 847 1213 M +-9 20 V +.56 g 838 1233 M +-10 20 V +.56 g 828 1253 M +-8 18 V +.56 g 820 1271 M +-1 2 V +.56 g 819 1273 M +-9 20 V +.56 g 810 1293 M +-9 21 V +.56 g 801 1314 M +-8 17 V +.56 g 793 1331 M +-2 3 V +.56 g 791 1334 M +-9 20 V +.56 g 782 1354 M +-9 20 V +.56 g 773 1374 M +-8 17 V +.56 g 765 1391 M +-1 3 V +.56 g 764 1394 M +-9 20 V +.56 g 755 1414 M +-9 21 V +.56 g 746 1435 M +-8 17 V +.56 g 738 1452 M +-1 3 V +.56 g 737 1455 M +-9 20 V +.56 g 728 1475 M +-9 20 V +.56 g 719 1495 M +-8 18 V +.56 g 711 1513 M +-1 2 V +.56 g 710 1515 M +-9 20 V +.56 g 701 1535 M +-8 20 V +.56 g 693 1555 M +-9 20 V +.56 g 684 1575 M +0 1 V +.56 g 684 1576 M +-9 20 V +.56 g 675 1596 M +-9 20 V +.56 g 666 1616 M +-9 20 V +.56 g 657 1636 M +0 2 V +.56 g 657 1638 M +-8 18 V +.56 g 649 1656 M +-9 20 V +.56 g 640 1676 M +-9 21 V +.56 g 631 1697 M +-2 4 V +.56 g 629 1701 M +-6 16 V +.56 g 623 1717 M +-9 20 V +.56 g 614 1737 M +-9 20 V +.56 g 605 1757 M +-3 8 V +0 g .54 g 1210 588 M +.54 g 1210 588 M +-8 13 V +.54 g 1202 601 M +-5 7 V +.54 g 1197 608 M +-12 20 V +.54 g 1185 628 M +-11 19 V +.54 g 1174 647 M +-1 1 V +.54 g 1173 648 M +-12 21 V +.54 g 1161 669 M +-12 20 V +.54 g 1149 689 M +-2 4 V +.54 g 1147 693 M +-9 16 V +.54 g 1138 709 M +-12 20 V +stroke 1126 729 M +.54 g 1126 729 M +-6 11 V +.54 g 1120 740 M +-5 9 V +.54 g 1115 749 M +-12 20 V +.54 g 1103 769 M +-10 20 V +.54 g 1093 789 M +-1 1 V +.54 g 1092 790 M +-11 20 V +.54 g 1081 810 M +-11 20 V +.54 g 1070 830 M +-5 9 V +.54 g 1065 839 M +-6 11 V +.54 g 1059 850 M +-11 20 V +.54 g 1048 870 M +-10 19 V +.54 g 1038 889 M +-1 1 V +.54 g 1037 890 M +-10 20 V +.54 g 1027 910 M +-11 21 V +.54 g 1016 931 M +-5 10 V +.54 g 1011 941 M +-5 10 V +.54 g 1006 951 M +-11 20 V +.54 g 995 971 M +-10 20 V +.54 g 985 991 M +-1 3 V +.54 g 984 994 M +-9 17 V +.54 g 975 1011 M +-10 20 V +.54 g 965 1031 M +-9 17 V +.54 g 956 1048 M +-2 4 V +.54 g 954 1052 M +-9 20 V +.54 g 945 1072 M +-10 20 V +.54 g 935 1092 M +-6 11 V +.54 g 929 1103 M +-4 9 V +.54 g 925 1112 M +-10 20 V +.54 g 915 1132 M +-10 20 V +.54 g 905 1152 M +-3 7 V +.54 g 902 1159 M +-7 13 V +.54 g 895 1172 M +-9 21 V +.54 g 886 1193 M +-10 20 V +.54 g 876 1213 M +-1 3 V +.54 g 875 1216 M +-9 17 V +.54 g 866 1233 M +-9 20 V +.54 g 857 1253 M +-10 20 V +.54 g 847 1273 M +0 1 V +.54 g 847 1274 M +-9 19 V +.54 g 838 1293 M +-9 21 V +.54 g 829 1314 M +-9 18 V +.54 g 820 1332 M +-1 2 V +.54 g 819 1334 M +-9 20 V +.54 g 810 1354 M +-9 20 V +.54 g 801 1374 M +-8 18 V +.54 g 793 1392 M +-1 2 V +.54 g 792 1394 M +-9 20 V +.54 g 783 1414 M +-9 21 V +.54 g 774 1435 M +-9 17 V +.54 g 765 1452 M +-1 3 V +.54 g 764 1455 M +-9 20 V +.54 g 755 1475 M +-9 20 V +stroke 746 1495 M +.54 g 746 1495 M +-8 18 V +.54 g 738 1513 M +-1 2 V +.54 g 737 1515 M +-8 20 V +.54 g 729 1535 M +-9 20 V +.54 g 720 1555 M +-9 20 V +.54 g 711 1575 M +0 1 V +.54 g 711 1576 M +-9 20 V +.54 g 702 1596 M +-9 20 V +.54 g 693 1616 M +-9 20 V +.54 g 684 1636 M +0 1 V +.54 g 684 1637 M +-8 19 V +.54 g 676 1656 M +-9 20 V +.54 g 667 1676 M +-9 21 V +.54 g 658 1697 M +-1 3 V +.54 g 657 1700 M +-8 17 V +.54 g 649 1717 M +-8 20 V +.54 g 641 1737 M +-9 20 V +.54 g 632 1757 M +-3 6 V +.54 g 629 1763 M +-6 14 V +.54 g 623 1777 M +-8 20 V +.54 g 615 1797 M +-9 20 V +.54 g 606 1817 M +-4 10 V +0 g .52 g 1249 588 M +.52 g 1249 588 M +-13 20 V +.52 g 1236 608 M +-7 11 V +.52 g 1229 619 M +-6 9 V +.52 g 1223 628 M +-12 20 V +.52 g 1211 648 M +-9 15 V +.52 g 1202 663 M +-4 6 V +.52 g 1198 669 M +-12 20 V +.52 g 1186 689 M +-12 20 V +.52 g .52 g 1174 709 M +-12 20 V +.52 g 1162 729 M +-12 20 V +.52 g 1150 749 M +-3 6 V +.52 g 1147 755 M +-8 14 V +.52 g 1139 769 M +-12 21 V +.52 g 1127 790 M +-7 12 V +.52 g 1120 802 M +-4 8 V +.52 g 1116 810 M +-12 20 V +.52 g 1104 830 M +-11 20 V +.52 g 1093 850 M +0 1 V +.52 g 1093 851 M +-11 19 V +.52 g 1082 870 M +-11 20 V +.52 g 1071 890 M +-6 11 V +.52 g 1065 901 M +-5 9 V +.52 g 1060 910 M +-11 21 V +.52 g 1049 931 M +-11 20 V +.52 g .52 g 1038 951 M +-10 20 V +.52 g 1028 971 M +-11 20 V +.52 g 1017 991 M +-6 12 V +.52 g 1011 1003 M +-4 8 V +.52 g 1007 1011 M +-11 20 V +.52 g 996 1031 M +-10 21 V +stroke 986 1052 M +.52 g 986 1052 M +-2 4 V +.52 g 984 1056 M +-8 16 V +.52 g 976 1072 M +-11 20 V +.52 g 965 1092 M +-9 18 V +.52 g 956 1110 M +-1 2 V +.52 g 955 1112 M +-10 20 V +.52 g 945 1132 M +-10 20 V +.52 g 935 1152 M +-6 13 V +.52 g 929 1165 M +-4 7 V +.52 g 925 1172 M +-9 21 V +.52 g 916 1193 M +-10 20 V +.52 g 906 1213 M +-4 8 V +.52 g 902 1221 M +-6 12 V +.52 g 896 1233 M +-9 20 V +.52 g 887 1253 M +-10 20 V +.52 g 877 1273 M +-2 5 V +.52 g 875 1278 M +-8 15 V +.52 g 867 1293 M +-9 21 V +.52 g 858 1314 M +-10 20 V +.52 g 848 1334 M +-1 2 V +.52 g 847 1336 M +-8 18 V +.52 g 839 1354 M +-9 20 V +.52 g 830 1374 M +-10 20 V +.52 g 820 1394 M +0 1 V +.52 g 820 1395 M +-9 19 V +.52 g 811 1414 M +-9 21 V +.52 g 802 1435 M +-9 20 V +.52 g .52 g 793 1455 M +-9 20 V +.52 g 784 1475 M +-9 20 V +.52 g 775 1495 M +-10 20 V +.52 g .52 g 765 1515 M +-8 20 V +.52 g 757 1535 M +-9 20 V +.52 g 748 1555 M +-10 21 V +.52 g .52 g 738 1576 M +-8 20 V +.52 g 730 1596 M +-9 20 V +.52 g 721 1616 M +-9 20 V +.52 g 712 1636 M +-1 2 V +.52 g 711 1638 M +-8 18 V +.52 g 703 1656 M +-9 20 V +.52 g 694 1676 M +-9 21 V +.52 g 685 1697 M +-1 3 V +.52 g 684 1700 M +-7 17 V +.52 g 677 1717 M +-9 20 V +.52 g 668 1737 M +-9 20 V +.52 g 659 1757 M +-2 6 V +.52 g 657 1763 M +-6 14 V +.52 g 651 1777 M +-9 20 V +.52 g 642 1797 M +-9 20 V +.52 g 633 1817 M +-4 10 V +.52 g 629 1827 M +-4 11 V +.52 g 625 1838 M +-9 20 V +.52 g 616 1858 M +-9 20 V +stroke 607 1878 M +.52 g 607 1878 M +-5 12 V +0 g .52 g 6052 619 M +.52 g 6052 619 M +-7 -11 V +.52 g 6045 608 M +-13 -20 V +0 g .5 g 1290 588 M +.5 g 1290 588 M +-7 10 V +.5 g 1283 598 M +-7 10 V +.5 g 1276 608 M +-13 20 V +.5 g 1263 628 M +-7 12 V +.5 g 1256 640 M +-6 8 V +.5 g 1250 648 M +-12 21 V +.5 g 1238 669 M +-9 14 V +.5 g 1229 683 M +-4 6 V +.5 g 1225 689 M +-12 20 V +.5 g 1213 709 M +-11 18 V +.5 g 1202 727 M +-2 2 V +.5 g 1200 729 M +-12 20 V +.5 g 1188 749 M +-12 20 V +.5 g 1176 769 M +-2 3 V +.5 g 1174 772 M +-10 18 V +.5 g 1164 790 M +-12 20 V +.5 g 1152 810 M +-5 8 V +.5 g 1147 818 M +-7 12 V +.5 g 1140 830 M +-11 20 V +.5 g 1129 850 M +-9 15 V +.5 g 1120 865 M +-3 5 V +.5 g 1117 870 M +-11 20 V +.5 g 1106 890 M +-12 20 V +.5 g 1094 910 M +-1 4 V +.5 g 1093 914 M +-10 17 V +.5 g 1083 931 M +-11 20 V +.5 g 1072 951 M +-7 13 V +.5 g 1065 964 M +-4 7 V +.5 g 1061 971 M +-10 20 V +.5 g 1051 991 M +-11 20 V +.5 g 1040 1011 M +-2 3 V +.5 g 1038 1014 M +-9 17 V +.5 g 1029 1031 M +-10 21 V +.5 g 1019 1052 M +-8 14 V +.5 g 1011 1066 M +-3 6 V +.5 g 1008 1072 M +-10 20 V +.5 g 998 1092 M +-11 20 V +.5 g 987 1112 M +-3 7 V +.5 g 984 1119 M +-7 13 V +.5 g 977 1132 M +-10 20 V +.5 g 967 1152 M +-10 20 V +.5 g 957 1172 M +-1 1 V +.5 g 956 1173 M +-9 20 V +.5 g 947 1193 M +-10 20 V +.5 g 937 1213 M +-8 16 V +.5 g 929 1229 M +-2 4 V +.5 g 927 1233 M +-10 20 V +.5 g 917 1253 M +-10 20 V +stroke 907 1273 M +.5 g 907 1273 M +-5 12 V +.5 g 902 1285 M +-4 8 V +.5 g 898 1293 M +-10 21 V +.5 g 888 1314 M +-10 20 V +.5 g 878 1334 M +-3 8 V +.5 g 875 1342 M +-6 12 V +.5 g 869 1354 M +-10 20 V +.5 g 859 1374 M +-9 20 V +.5 g 850 1394 M +-3 6 V +.5 g 847 1400 M +-6 14 V +.5 g 841 1414 M +-10 21 V +.5 g 831 1435 M +-9 20 V +.5 g 822 1455 M +-2 4 V +.5 g 820 1459 M +-7 16 V +.5 g 813 1475 M +-9 20 V +.5 g 804 1495 M +-10 20 V +.5 g 794 1515 M +-1 3 V +.5 g 793 1518 M +-8 17 V +.5 g 785 1535 M +-9 20 V +.5 g 776 1555 M +-9 21 V +.5 g 767 1576 M +-2 3 V +.5 g 765 1579 M +-7 17 V +.5 g 758 1596 M +-9 20 V +.5 g 749 1616 M +-9 20 V +.5 g 740 1636 M +-2 4 V +.5 g 738 1640 M +-7 16 V +.5 g 731 1656 M +-9 20 V +.5 g 722 1676 M +-8 21 V +.5 g 714 1697 M +-3 5 V +.5 g 711 1702 M +-6 15 V +.5 g 705 1717 M +-9 20 V +.5 g 696 1737 M +-9 20 V +.5 g 687 1757 M +-3 8 V +.5 g 684 1765 M +-6 12 V +.5 g 678 1777 M +-8 20 V +.5 g 670 1797 M +-9 20 V +.5 g 661 1817 M +-4 11 V +.5 g 657 1828 M +-5 10 V +.5 g 652 1838 M +-8 20 V +.5 g 644 1858 M +-9 20 V +.5 g 635 1878 M +-6 13 V +.5 g 629 1891 M +-3 7 V +.5 g 626 1898 M +-8 20 V +.5 g 618 1918 M +-9 20 V +.5 g 609 1938 M +-7 17 V +0 g .5 g 6052 682 M +.5 g 6052 682 M +-9 -13 V +.5 g 6043 669 M +-13 -21 V +.5 g 6030 648 M +-5 -7 V +.5 g 6025 641 M +-9 -13 V +.5 g 6016 628 M +-13 -20 V +.5 g 6003 608 M +-5 -8 V +.5 g 5998 600 M +-9 -12 V +stroke 5989 588 M +0 g .48 g 1333 588 M +.48 g 1333 588 M +-13 20 V +.48 g 1320 608 M +-9 14 V +.48 g 1311 622 M +-5 6 V +.48 g 1306 628 M +-13 20 V +.48 g 1293 648 M +-10 14 V +.48 g 1283 662 M +-4 7 V +.48 g 1279 669 M +-13 20 V +.48 g 1266 689 M +-10 15 V +.48 g 1256 704 M +-3 5 V +.48 g 1253 709 M +-13 20 V +.48 g 1240 729 M +-11 18 V +.48 g 1229 747 M +-2 2 V +.48 g 1227 749 M +-12 20 V +.48 g 1215 769 M +-12 21 V +.48 g 1203 790 M +-1 1 V +.48 g 1202 791 M +-12 19 V +.48 g 1190 810 M +-12 20 V +.48 g 1178 830 M +-4 6 V +.48 g 1174 836 M +-8 14 V +.48 g 1166 850 M +-12 20 V +.48 g 1154 870 M +-7 13 V +.48 g 1147 883 M +-4 7 V +.48 g 1143 890 M +-12 20 V +.48 g 1131 910 M +-11 20 V +.48 g 1120 930 M +-1 1 V +.48 g 1119 931 M +-11 20 V +.48 g 1108 951 M +-11 20 V +.48 g 1097 971 M +-4 7 V +.48 g 1093 978 M +-7 13 V +.48 g 1086 991 M +-11 20 V +.48 g 1075 1011 M +-10 17 V +.48 g 1065 1028 M +-1 3 V +.48 g 1064 1031 M +-11 21 V +.48 g 1053 1052 M +-11 20 V +.48 g 1042 1072 M +-4 7 V +.48 g 1038 1079 M +-7 13 V +.48 g 1031 1092 M +-10 20 V +.48 g 1021 1112 M +-10 19 V +.48 g 1011 1131 M +-1 1 V +.48 g 1010 1132 M +-10 20 V +.48 g 1000 1152 M +-11 20 V +.48 g 989 1172 M +-5 12 V +.48 g 984 1184 M +-5 9 V +.48 g 979 1193 M +-10 20 V +.48 g 969 1213 M +-10 20 V +.48 g 959 1233 M +-3 5 V +.48 g 956 1238 M +-7 15 V +.48 g 949 1253 M +-10 20 V +.48 g 939 1273 M +-10 20 V +.48 g .48 g 929 1293 M +-10 21 V +.48 g 919 1314 M +-10 20 V +.48 g 909 1334 M +-7 15 V +stroke 902 1349 M +.48 g 902 1349 M +-2 5 V +.48 g 900 1354 M +-10 20 V +.48 g 890 1374 M +-10 20 V +.48 g 880 1394 M +-5 13 V +.48 g 875 1407 M +-4 7 V +.48 g 871 1414 M +-9 21 V +.48 g 862 1435 M +-10 20 V +.48 g 852 1455 M +-5 10 V +.48 g 847 1465 M +-4 10 V +.48 g 843 1475 M +-10 20 V +.48 g 833 1495 M +-9 20 V +.48 g 824 1515 M +-4 9 V +.48 g 820 1524 M +-5 11 V +.48 g 815 1535 M +-9 20 V +.48 g 806 1555 M +-10 21 V +.48 g 796 1576 M +-3 8 V +.48 g 793 1584 M +-6 12 V +.48 g 787 1596 M +-9 20 V +.48 g 778 1616 M +-9 20 V +.48 g 769 1636 M +-4 8 V +.48 g 765 1644 M +-5 12 V +.48 g 760 1656 M +-9 20 V +.48 g 751 1676 M +-9 21 V +.48 g 742 1697 M +-4 9 V +.48 g 738 1706 M +-5 11 V +.48 g 733 1717 M +-8 20 V +.48 g 725 1737 M +-9 20 V +.48 g 716 1757 M +-5 11 V +.48 g 711 1768 M +-4 9 V +.48 g 707 1777 M +-9 20 V +.48 g 698 1797 M +-9 20 V +.48 g 689 1817 M +-5 13 V +.48 g 684 1830 M +-3 8 V +.48 g 681 1838 M +-9 20 V +.48 g 672 1858 M +-9 20 V +.48 g 663 1878 M +-6 16 V +.48 g 657 1894 M +-2 4 V +.48 g 655 1898 M +-9 20 V +.48 g 646 1918 M +-9 20 V +.48 g 637 1938 M +-8 19 V +.48 g 629 1957 M +0 2 V +.48 g 629 1959 M +-9 20 V +.48 g 620 1979 M +-8 20 V +.48 g 612 1999 M +-9 20 V +.48 g 603 2019 M +-1 2 V +0 g .48 g 6052 747 M +.48 g 6052 747 M +-12 -18 V +.48 g 6040 729 M +-13 -20 V +.48 g 6027 709 M +-2 -3 V +.48 g 6025 706 M +-12 -17 V +.48 g 6013 689 M +-13 -20 V +.48 g 6000 669 M +-2 -4 V +.48 g 5998 665 M +-12 -17 V +stroke 5986 648 M +.48 g 5986 648 M +-14 -20 V +.48 g 5972 628 M +-2 -3 V +.48 g 5970 625 M +-12 -17 V +.48 g 5958 608 M +-14 -20 V +0 g .46 g 632 2019 M +.46 g 632 2019 M +-3 6 V +.46 g 629 2025 M +-6 14 V +.46 g 623 2039 M +-8 20 V +.46 g 615 2059 M +-9 20 V +.46 g 606 2079 M +-4 10 V +0 g .46 g 1380 588 M +.46 g 1380 588 M +-14 20 V +.46 g 1366 608 M +-1 1 V +.46 g 1365 609 M +-13 19 V +.46 g 1352 628 M +-14 20 V +.46 g 1338 648 M +-1 0 V +.46 g 1337 648 M +-13 21 V +.46 g 1324 669 M +-13 19 V +.46 g 1311 688 M +-1 1 V +.46 g 1310 689 M +-14 20 V +.46 g 1296 709 M +-13 19 V +.46 g 1283 728 M +0 1 V +.46 g 1283 729 M +-13 20 V +.46 g 1270 749 M +-13 20 V +.46 g 1257 769 M +-1 1 V +.46 g 1256 770 M +-12 20 V +.46 g 1244 790 M +-13 20 V +.46 g 1231 810 M +-2 3 V +.46 g 1229 813 M +-11 17 V +.46 g 1218 830 M +-12 20 V +.46 g 1206 850 M +-4 7 V +.46 g 1202 857 M +-8 13 V +.46 g 1194 870 M +-13 20 V +.46 g 1181 890 M +-7 12 V +.46 g 1174 902 M +-5 8 V +.46 g 1169 910 M +-12 21 V +.46 g 1157 931 M +-10 17 V +.46 g 1147 948 M +-1 3 V +.46 g 1146 951 M +-12 20 V +.46 g 1134 971 M +-12 20 V +.46 g 1122 991 M +-2 5 V +.46 g 1120 996 M +-9 15 V +.46 g 1111 1011 M +-11 20 V +.46 g 1100 1031 M +-7 13 V +.46 g 1093 1044 M +-4 8 V +.46 g 1089 1052 M +-12 20 V +.46 g 1077 1072 M +-11 20 V +.46 g 1066 1092 M +-1 2 V +.46 g 1065 1094 M +-9 18 V +.46 g 1056 1112 M +-11 20 V +.46 g 1045 1132 M +-7 13 V +.46 g 1038 1145 M +-4 7 V +.46 g 1034 1152 M +-10 20 V +stroke 1024 1172 M +.46 g 1024 1172 M +-11 21 V +.46 g 1013 1193 M +-2 4 V +.46 g 1011 1197 M +-8 16 V +.46 g 1003 1213 M +-11 20 V +.46 g 992 1233 M +-8 17 V +.46 g 984 1250 M +-2 3 V +.46 g 982 1253 M +-10 20 V +.46 g 972 1273 M +-10 20 V +.46 g 962 1293 M +-6 11 V +.46 g 956 1304 M +-4 10 V +.46 g 952 1314 M +-10 20 V +.46 g 942 1334 M +-10 20 V +.46 g 932 1354 M +-3 5 V +.46 g 929 1359 M +-7 15 V +.46 g 922 1374 M +-10 20 V +.46 g 912 1394 M +-10 20 V +.46 g 902 1414 M +0 2 V +.46 g 902 1416 M +-9 19 V +.46 g 893 1435 M +-10 20 V +.46 g 883 1455 M +-8 18 V +.46 g 875 1473 M +-1 2 V +.46 g 874 1475 M +-10 20 V +.46 g 864 1495 M +-9 20 V +.46 g 855 1515 M +-8 16 V +.46 g 847 1531 M +-2 4 V +.46 g 845 1535 M +-9 20 V +.46 g 836 1555 M +-9 21 V +.46 g 827 1576 M +-7 14 V +.46 g 820 1590 M +-2 6 V +.46 g 818 1596 M +-10 20 V +.46 g 808 1616 M +-9 20 V +.46 g 799 1636 M +-6 14 V +.46 g 793 1650 M +-3 6 V +.46 g 790 1656 M +-9 20 V +.46 g 781 1676 M +-9 21 V +.46 g 772 1697 M +-7 14 V +.46 g 765 1711 M +-2 6 V +.46 g 763 1717 M +-9 20 V +.46 g 754 1737 M +-9 20 V +.46 g 745 1757 M +-7 16 V +.46 g 738 1773 M +-2 4 V +.46 g 736 1777 M +-9 20 V +.46 g 727 1797 M +-8 20 V +.46 g 719 1817 M +-8 18 V +.46 g 711 1835 M +-1 3 V +.46 g 710 1838 M +-9 20 V +.46 g 701 1858 M +-9 20 V +.46 g 692 1878 M +-8 20 V +.46 g .46 g 684 1898 M +-9 20 V +.46 g 675 1918 M +-9 20 V +.46 g 666 1938 M +-8 21 V +.46 g 658 1959 M +-1 2 V +stroke 657 1961 M +.46 g 657 1961 M +-8 18 V +.46 g 649 1979 M +-9 20 V +.46 g 640 1999 M +-8 20 V +0 g .46 g 6052 813 M +.46 g 6052 813 M +-2 -3 V +.46 g 6050 810 M +-14 -20 V +.46 g 6036 790 M +-11 -18 V +.46 g 6025 772 M +-2 -3 V +.46 g 6023 769 M +-14 -20 V +.46 g 6009 749 M +-11 -18 V +.46 g 5998 731 M +-2 -2 V +.46 g 5996 729 M +-14 -20 V +.46 g 5982 709 M +-12 -17 V +.46 g 5970 692 M +-2 -3 V +.46 g 5968 689 M +-14 -20 V +.46 g 5954 669 M +-11 -16 V +.46 g 5943 653 M +-4 -5 V +.46 g 5939 648 M +-14 -20 V +.46 g 5925 628 M +-9 -12 V +.46 g 5916 616 M +-6 -8 V +.46 g 5910 608 M +-15 -20 V +0 g .44 g 670 1999 M +.44 g 670 1999 M +-9 20 V +.44 g 661 2019 M +-4 11 V +.44 g 657 2030 M +-4 9 V +.44 g 653 2039 M +-9 20 V +.44 g 644 2059 M +-9 20 V +.44 g 635 2079 M +-6 15 V +.44 g 629 2094 M +-2 6 V +.44 g 627 2100 M +-9 20 V +.44 g 618 2120 M +-8 20 V +.44 g 610 2140 M +-8 18 V +0 g .44 g 1430 588 M +.44 g 1430 588 M +-10 14 V +.44 g 1420 602 M +-5 6 V +.44 g 1415 608 M +-15 20 V +.44 g 1400 628 M +-8 11 V +.44 g 1392 639 M +-6 9 V +.44 g 1386 648 M +-15 21 V +.44 g 1371 669 M +-6 8 V +.44 g 1365 677 M +-8 12 V +.44 g 1357 689 M +-14 20 V +.44 g 1343 709 M +-5 7 V +.44 g 1338 716 M +-9 13 V +.44 g 1329 729 M +-14 20 V +.44 g 1315 749 M +-4 6 V +.44 g 1311 755 M +-10 14 V +.44 g 1301 769 M +-13 21 V +.44 g 1288 790 M +-5 6 V +.44 g 1283 796 M +-9 14 V +.44 g 1274 810 M +-13 20 V +.44 g 1261 830 M +-5 8 V +.44 g 1256 838 M +-8 12 V +.44 g 1248 850 M +-13 20 V +stroke 1235 870 M +.44 g 1235 870 M +-6 10 V +.44 g 1229 880 M +-6 10 V +.44 g 1223 890 M +-13 20 V +.44 g 1210 910 M +-8 14 V +.44 g 1202 924 M +-4 7 V +.44 g 1198 931 M +-12 20 V +.44 g 1186 951 M +-12 18 V +.44 g 1174 969 M +-1 2 V +.44 g 1173 971 M +-11 20 V +.44 g 1162 991 M +-12 20 V +.44 g 1150 1011 M +-3 5 V +.44 g 1147 1016 M +-9 15 V +.44 g 1138 1031 M +-12 21 V +.44 g 1126 1052 M +-6 11 V +.44 g 1120 1063 M +-5 9 V +.44 g 1115 1072 M +-11 20 V +.44 g 1104 1092 M +-11 20 V +.44 g 1093 1112 M +-1 0 V +.44 g 1092 1112 M +-11 20 V +.44 g 1081 1132 M +-11 20 V +.44 g 1070 1152 M +-5 9 V +.44 g 1065 1161 M +-6 11 V +.44 g 1059 1172 M +-11 21 V +.44 g 1048 1193 M +-10 19 V +.44 g 1038 1212 M +0 1 V +.44 g 1038 1213 M +-11 20 V +.44 g 1027 1233 M +-10 20 V +.44 g 1017 1253 M +-6 11 V +.44 g 1011 1264 M +-5 9 V +.44 g 1006 1273 M +-10 20 V +.44 g 996 1293 M +-11 21 V +.44 g 985 1314 M +-1 3 V +.44 g 984 1317 M +-9 17 V +.44 g 975 1334 M +-10 20 V +.44 g 965 1354 M +-9 18 V +.44 g 956 1372 M +-1 2 V +.44 g 955 1374 M +-10 20 V +.44 g 945 1394 M +-10 20 V +.44 g 935 1414 M +-6 13 V +.44 g 929 1427 M +-4 8 V +.44 g 925 1435 M +-9 20 V +.44 g 916 1455 M +-10 20 V +.44 g 906 1475 M +-4 8 V +.44 g 902 1483 M +-6 12 V +.44 g 896 1495 M +-9 20 V +.44 g 887 1515 M +-10 20 V +.44 g 877 1535 M +-2 6 V +.44 g 875 1541 M +-7 14 V +.44 g 868 1555 M +-10 21 V +.44 g 858 1576 M +-9 20 V +.44 g 849 1596 M +-2 3 V +.44 g 847 1599 M +-7 17 V +stroke 840 1616 M +.44 g 840 1616 M +-10 20 V +.44 g 830 1636 M +-9 20 V +.44 g 821 1656 M +-1 2 V +.44 g 820 1658 M +-8 18 V +.44 g 812 1676 M +-9 21 V +.44 g 803 1697 M +-9 20 V +.44 g 794 1717 M +-1 1 V +.44 g 793 1718 M +-8 19 V +.44 g 785 1737 M +-9 20 V +.44 g 776 1757 M +-10 20 V +.44 g 766 1777 M +-1 2 V +.44 g 765 1779 M +-7 18 V +.44 g 758 1797 M +-9 20 V +.44 g 749 1817 M +-9 21 V +.44 g 740 1838 M +-2 3 V +.44 g 738 1841 M +-7 17 V +.44 g 731 1858 M +-9 20 V +.44 g 722 1878 M +-9 20 V +.44 g 713 1898 M +-2 5 V +.44 g 711 1903 M +-6 15 V +.44 g 705 1918 M +-9 20 V +.44 g 696 1938 M +-9 21 V +.44 g 687 1959 M +-3 7 V +.44 g 684 1966 M +-6 13 V +.44 g 678 1979 M +-8 20 V +0 g .44 g 6052 881 M +.44 g 6052 881 M +-7 -11 V +.44 g 6045 870 M +-13 -20 V +.44 g 6032 850 M +-7 -11 V +.44 g 6025 839 M +-7 -9 V +.44 g 6018 830 M +-13 -20 V +.44 g 6005 810 M +-7 -11 V +.44 g 5998 799 M +-7 -9 V +.44 g 5991 790 M +-14 -21 V +.44 g 5977 769 M +-7 -9 V +.44 g 5970 760 M +-7 -11 V +.44 g 5963 749 M +-15 -20 V +.44 g 5948 729 M +-5 -8 V +.44 g 5943 721 M +-9 -12 V +.44 g 5934 709 M +-15 -20 V +.44 g 5919 689 M +-3 -5 V +.44 g 5916 684 M +-12 -15 V +.44 g 5904 669 M +-14 -21 V +.44 g 5890 648 M +-1 -1 V +.44 g 5889 647 M +-15 -19 V +.44 g 5874 628 M +-13 -17 V +.44 g 5861 611 M +-2 -3 V +.44 g 5859 608 M +-15 -20 V +0 g .42 g 709 1979 M +.42 g 709 1979 M +-9 20 V +.42 g 700 1999 M +-9 20 V +.42 g 691 2019 M +-7 18 V +.42 g 684 2037 M +-1 2 V +stroke 683 2039 M +.42 g 683 2039 M +-9 20 V +.42 g 674 2059 M +-9 20 V +.42 g 665 2079 M +-8 21 V +.42 g .42 g 657 2100 M +-9 20 V +.42 g 648 2120 M +-8 20 V +.42 g 640 2140 M +-9 20 V +.42 g 631 2160 M +-2 4 V +.42 g 629 2164 M +-6 16 V +.42 g 623 2180 M +-9 20 V +.42 g 614 2200 M +-8 21 V +.42 g 606 2221 M +-4 8 V +0 g .42 g 1484 588 M +.42 g 1484 588 M +-10 13 V +.42 g 1474 601 M +-6 7 V +.42 g 1468 608 M +-15 20 V +.42 g 1453 628 M +-6 8 V +.42 g 1447 636 M +-10 12 V +.42 g 1437 648 M +-15 21 V +.42 g 1422 669 M +-2 3 V +.42 g 1420 672 M +-13 17 V +.42 g 1407 689 M +-15 20 V +.42 g .42 g 1392 709 M +-14 20 V +.42 g 1378 729 M +-13 17 V +.42 g 1365 746 M +-2 3 V +.42 g 1363 749 M +-14 20 V +.42 g 1349 769 M +-11 16 V +.42 g 1338 785 M +-3 5 V +.42 g 1335 790 M +-14 20 V +.42 g 1321 810 M +-10 15 V +.42 g 1311 825 M +-4 5 V +.42 g 1307 830 M +-14 20 V +.42 g 1293 850 M +-10 15 V +.42 g 1283 865 M +-3 5 V +.42 g 1280 870 M +-13 20 V +.42 g 1267 890 M +-11 17 V +.42 g 1256 907 M +-2 3 V +.42 g 1254 910 M +-13 21 V +.42 g 1241 931 M +-12 18 V +.42 g 1229 949 M +-1 2 V +.42 g 1228 951 M +-13 20 V +.42 g 1215 971 M +-12 20 V +.42 g 1203 991 M +-1 2 V +.42 g 1202 993 M +-11 18 V +.42 g 1191 1011 M +-13 20 V +.42 g 1178 1031 M +-4 7 V +.42 g 1174 1038 M +-8 14 V +.42 g 1166 1052 M +-11 20 V +.42 g 1155 1072 M +-8 12 V +.42 g 1147 1084 M +-4 8 V +.42 g 1143 1092 M +-12 20 V +.42 g 1131 1112 M +-11 20 V +.42 g .42 g 1120 1132 M +-12 20 V +.42 g 1108 1152 M +-11 20 V +stroke 1097 1172 M +.42 g 1097 1172 M +-4 8 V +.42 g 1093 1180 M +-7 13 V +.42 g 1086 1193 M +-11 20 V +.42 g 1075 1213 M +-10 17 V +.42 g 1065 1230 M +-1 3 V +.42 g 1064 1233 M +-11 20 V +.42 g 1053 1253 M +-11 20 V +.42 g 1042 1273 M +-4 8 V +.42 g 1038 1281 M +-6 12 V +.42 g 1032 1293 M +-11 21 V +.42 g 1021 1314 M +-10 19 V +.42 g 1011 1333 M +-1 1 V +.42 g 1010 1334 M +-10 20 V +.42 g 1000 1354 M +-10 20 V +.42 g 990 1374 M +-6 12 V +.42 g 984 1386 M +-4 8 V +.42 g 980 1394 M +-11 20 V +.42 g 969 1414 M +-10 21 V +.42 g 959 1435 M +-3 6 V +.42 g 956 1441 M +-7 14 V +.42 g 949 1455 M +-10 20 V +.42 g 939 1475 M +-9 20 V +.42 g 930 1495 M +-1 1 V +.42 g 929 1496 M +-9 19 V +.42 g 920 1515 M +-10 20 V +.42 g 910 1535 M +-8 18 V +.42 g 902 1553 M +-2 2 V +.42 g 900 1555 M +-9 21 V +.42 g 891 1576 M +-10 20 V +.42 g 881 1596 M +-6 14 V +.42 g 875 1610 M +-3 6 V +.42 g 872 1616 M +-10 20 V +.42 g 862 1636 M +-9 20 V +.42 g 853 1656 M +-6 13 V +.42 g 847 1669 M +-3 7 V +.42 g 844 1676 M +-10 21 V +.42 g 834 1697 M +-9 20 V +.42 g 825 1717 M +-5 11 V +.42 g 820 1728 M +-4 9 V +.42 g 816 1737 M +-9 20 V +.42 g 807 1757 M +-9 20 V +.42 g 798 1777 M +-5 11 V +.42 g 793 1788 M +-4 9 V +.42 g 789 1797 M +-9 20 V +.42 g 780 1817 M +-9 21 V +.42 g 771 1838 M +-6 11 V +.42 g 765 1849 M +-3 9 V +.42 g 762 1858 M +-9 20 V +.42 g 753 1878 M +-9 20 V +.42 g 744 1898 M +-6 13 V +.42 g 738 1911 M +-3 7 V +.42 g 735 1918 M +-9 20 V +stroke 726 1938 M +.42 g 726 1938 M +-8 21 V +.42 g 718 1959 M +-7 15 V +.42 g 711 1974 M +-2 5 V +0 g .42 g 3821 4619 M +.42 g 3821 4619 M +-3 -1 V +.42 g 3818 4618 M +-28 -6 V +.42 g 3790 4612 M +-27 -5 V +.42 g 3763 4607 M +-27 -4 V +.42 g 3736 4603 M +-27 -3 V +.42 g 3709 4600 M +-24 -1 V +.42 g 3685 4599 M +-4 0 V +.42 g 3681 4599 M +-27 -1 V +.42 g 3654 4598 M +-12 1 V +.42 g 3642 4599 M +-15 0 V +.42 g 3627 4599 M +-27 3 V +.42 g 3600 4602 M +-28 3 V +.42 g 3572 4605 M +-27 5 V +.42 g 3545 4610 M +-27 5 V +.42 g 3518 4615 M +-15 4 V +0 g .42 g 6052 950 M +.42 g 6052 950 M +-13 -19 V +.42 g 6039 931 M +-13 -21 V +.42 g 6026 910 M +-1 -1 V +.42 g 6025 909 M +-13 -19 V +.42 g 6012 890 M +-13 -20 V +.42 g 5999 870 M +-1 -1 V +.42 g 5998 869 M +-13 -19 V +.42 g 5985 850 M +-14 -20 V +.42 g 5971 830 M +-1 -1 V +.42 g 5970 829 M +-14 -19 V +.42 g 5956 810 M +-13 -19 V +.42 g 5943 791 M +-1 -1 V +.42 g 5942 790 M +-15 -21 V +.42 g 5927 769 M +-11 -15 V +.42 g 5916 754 M +-3 -5 V +.42 g 5913 749 M +-15 -20 V +.42 g 5898 729 M +-9 -12 V +.42 g 5889 717 M +-7 -8 V +.42 g 5882 709 M +-15 -20 V +.42 g 5867 689 M +-6 -8 V +.42 g 5861 681 M +-9 -12 V +.42 g 5852 669 M +-16 -21 V +.42 g 5836 648 M +-2 -2 V +.42 g 5834 646 M +-14 -18 V +.42 g 5820 628 M +-13 -17 V +.42 g 5807 611 M +-2 -3 V +.42 g 5805 608 M +-16 -20 V +0 g .4 g 740 1979 M +.4 g 740 1979 M +-2 4 V +.4 g 738 1983 M +-7 16 V +.4 g 731 1999 M +-8 20 V +.4 g 723 2019 M +-9 20 V +.4 g 714 2039 M +-3 7 V +.4 g 711 2046 M +-6 13 V +stroke 705 2059 M +.4 g 705 2059 M +-9 20 V +.4 g 696 2079 M +-8 21 V +.4 g 688 2100 M +-4 9 V +.4 g 684 2109 M +-5 11 V +.4 g 679 2120 M +-8 20 V +.4 g 671 2140 M +-9 20 V +.4 g 662 2160 M +-5 13 V +.4 g 657 2173 M +-4 7 V +.4 g 653 2180 M +-8 20 V +.4 g 645 2200 M +-9 21 V +.4 g 636 2221 M +-7 16 V +.4 g 629 2237 M +-1 4 V +.4 g 628 2241 M +-9 20 V +.4 g 619 2261 M +-8 20 V +.4 g 611 2281 M +-9 20 V +.4 g 602 2301 M +0 1 V +0 g .4 g 1542 588 M +.4 g 1542 588 M +-13 17 V +.4 g 1529 605 M +-3 3 V +.4 g 1526 608 M +-17 20 V +.4 g 1509 628 M +-8 10 V +.4 g 1501 638 M +-8 10 V +.4 g 1493 648 M +-16 21 V +.4 g 1477 669 M +-3 4 V +.4 g 1474 673 M +-12 16 V +.4 g 1462 689 M +-15 19 V +.4 g 1447 708 M +-1 1 V +.4 g 1446 709 M +-15 20 V +.4 g 1431 729 M +-11 15 V +.4 g 1420 744 M +-5 5 V +.4 g 1415 749 M +-15 20 V +.4 g 1400 769 M +-8 11 V +.4 g 1392 780 M +-7 10 V +.4 g 1385 790 M +-14 20 V +.4 g 1371 810 M +-6 8 V +.4 g 1365 818 M +-9 12 V +.4 g 1356 830 M +-14 20 V +.4 g 1342 850 M +-4 6 V +.4 g 1338 856 M +-10 14 V +.4 g 1328 870 M +-14 20 V +.4 g 1314 890 M +-3 5 V +.4 g 1311 895 M +-11 15 V +.4 g 1300 910 M +-13 21 V +.4 g 1287 931 M +-4 5 V +.4 g 1283 936 M +-9 15 V +.4 g 1274 951 M +-14 20 V +.4 g 1260 971 M +-4 6 V +.4 g 1256 977 M +-9 14 V +.4 g 1247 991 M +-13 20 V +.4 g 1234 1011 M +-5 9 V +.4 g 1229 1020 M +-7 11 V +.4 g 1222 1031 M +-13 21 V +.4 g 1209 1052 M +-7 12 V +stroke 1202 1064 M +.4 g 1202 1064 M +-5 8 V +.4 g 1197 1072 M +-12 20 V +.4 g 1185 1092 M +-11 17 V +.4 g 1174 1109 M +-2 3 V +.4 g 1172 1112 M +-12 20 V +.4 g 1160 1132 M +-11 20 V +.4 g 1149 1152 M +-2 3 V +.4 g 1147 1155 M +-10 17 V +.4 g 1137 1172 M +-12 21 V +.4 g 1125 1193 M +-5 9 V +.4 g 1120 1202 M +-6 11 V +.4 g 1114 1213 M +-11 20 V +.4 g 1103 1233 M +-10 18 V +.4 g 1093 1251 M +-2 2 V +.4 g 1091 1253 M +-11 20 V +.4 g 1080 1273 M +-11 20 V +.4 g 1069 1293 M +-4 8 V +.4 g 1065 1301 M +-7 13 V +.4 g 1058 1314 M +-10 20 V +.4 g 1048 1334 M +-10 17 V +.4 g 1038 1351 M +-1 3 V +.4 g 1037 1354 M +-11 20 V +.4 g 1026 1374 M +-10 20 V +.4 g 1016 1394 M +-5 10 V +.4 g 1011 1404 M +-6 10 V +.4 g 1005 1414 M +-10 21 V +.4 g 995 1435 M +-10 20 V +.4 g 985 1455 M +-1 2 V +.4 g 984 1457 M +-9 18 V +.4 g 975 1475 M +-11 20 V +.4 g 964 1495 M +-8 16 V +.4 g 956 1511 M +-2 4 V +.4 g 954 1515 M +-9 20 V +.4 g 945 1535 M +-10 20 V +.4 g 935 1555 M +-6 12 V +.4 g 929 1567 M +-4 9 V +.4 g 925 1576 M +-10 20 V +.4 g 915 1596 M +-10 20 V +.4 g 905 1616 M +-3 7 V +.4 g 902 1623 M +-6 13 V +.4 g 896 1636 M +-10 20 V +.4 g 886 1656 M +-9 20 V +.4 g 877 1676 M +-2 5 V +.4 g 875 1681 M +-8 16 V +.4 g 867 1697 M +-9 20 V +.4 g 858 1717 M +-9 20 V +.4 g 849 1737 M +-2 3 V +.4 g 847 1740 M +-8 17 V +.4 g 839 1757 M +-9 20 V +.4 g 830 1777 M +-9 20 V +.4 g 821 1797 M +-1 2 V +.4 g 820 1799 M +-8 18 V +stroke 812 1817 M +.4 g 812 1817 M +-9 21 V +.4 g 803 1838 M +-9 20 V +.4 g 794 1858 M +-1 2 V +.4 g 793 1860 M +-8 18 V +.4 g 785 1878 M +-9 20 V +.4 g 776 1898 M +-9 20 V +.4 g 767 1918 M +-2 3 V +.4 g 765 1921 M +-7 17 V +.4 g 758 1938 M +-9 21 V +.4 g 749 1959 M +-9 20 V +0 g .4 g 4011 4619 M +.4 g 4011 4619 M +-3 -1 V +.4 g 4008 4618 M +-27 -14 V +.4 g 3981 4604 M +-12 -5 V +.4 g 3969 4599 M +-15 -7 V +.4 g 3954 4592 M +-27 -12 V +.4 g 3927 4580 M +-5 -1 V +.4 g 3922 4579 M +-23 -9 V +.4 g 3899 4570 M +-27 -10 V +.4 g 3872 4560 M +-5 -1 V +.4 g 3867 4559 M +-22 -7 V +.4 g 3845 4552 M +-27 -8 V +.4 g 3818 4544 M +-26 -6 V +.4 g 3792 4538 M +-2 0 V +.4 g 3790 4538 M +-27 -5 V +.4 g 3763 4533 M +-27 -4 V +.4 g 3736 4529 M +-27 -3 V +.4 g 3709 4526 M +-28 -1 V +.4 g 3681 4525 M +-27 -1 V +.4 g 3654 4524 M +-27 1 V +.4 g 3627 4525 M +-27 3 V +.4 g 3600 4528 M +-28 3 V +.4 g 3572 4531 M +-27 5 V +.4 g 3545 4536 M +-12 2 V +.4 g 3533 4538 M +-15 4 V +.4 g 3518 4542 M +-27 6 V +.4 g 3491 4548 M +-28 8 V +.4 g 3463 4556 M +-6 3 V +.4 g 3457 4559 M +-21 6 V +.4 g 3436 4565 M +-27 10 V +.4 g 3409 4575 M +-9 4 V +.4 g 3400 4579 M +-18 7 V +.4 g 3382 4586 M +-28 12 V +.4 g 3354 4598 M +-2 1 V +.4 g 3352 4599 M +-25 11 V +.4 g 3327 4610 M +-18 9 V +0 g .4 g 6052 1021 M +.4 g 6052 1021 M +-6 -10 V +.4 g 6046 1011 M +-14 -20 V +.4 g 6032 991 M +-7 -11 V +.4 g 6025 980 M +-6 -9 V +.4 g 6019 971 M +-14 -20 V +.4 g 6005 951 M +-7 -11 V +stroke 5998 940 M +.4 g 5998 940 M +-7 -9 V +.4 g 5991 931 M +-14 -21 V +.4 g 5977 910 M +-7 -9 V +.4 g 5970 901 M +-7 -11 V +.4 g 5963 890 M +-15 -20 V +.4 g 5948 870 M +-5 -8 V +.4 g 5943 862 M +-9 -12 V +.4 g 5934 850 M +-15 -20 V +.4 g 5919 830 M +-3 -5 V +.4 g 5916 825 M +-12 -15 V +.4 g 5904 810 M +-15 -20 V +.4 g 5889 790 M +0 -1 V +.4 g 5889 789 M +-15 -20 V +.4 g 5874 769 M +-13 -16 V +.4 g 5861 753 M +-2 -4 V +.4 g 5859 749 M +-16 -20 V +.4 g 5843 729 M +-9 -11 V +.4 g 5834 718 M +-7 -9 V +.4 g 5827 709 M +-16 -20 V +.4 g 5811 689 M +-4 -6 V +.4 g 5807 683 M +-12 -14 V +.4 g 5795 669 M +-15 -20 V +.4 g 5780 649 M +-1 -1 V +.4 g 5779 648 M +-16 -20 V +.4 g 5763 628 M +-11 -13 V +.4 g 5752 615 M +-6 -7 V +.4 g 5746 608 M +-16 -20 V +0 g .38 g 781 1959 M +.38 g 781 1959 M +-8 20 V +.38 g 773 1979 M +-8 15 V +.38 g 765 1994 M +-1 5 V +.38 g 764 1999 M +-9 20 V +.38 g 755 2019 M +-9 20 V +.38 g 746 2039 M +-8 18 V +.38 g 738 2057 M +-1 2 V +.38 g 737 2059 M +-9 20 V +.38 g 728 2079 M +-8 21 V +.38 g 720 2100 M +-9 19 V +.38 g 711 2119 M +0 1 V +.38 g 711 2120 M +-9 20 V +.38 g 702 2140 M +-8 20 V +.38 g 694 2160 M +-9 20 V +.38 g 685 2180 M +-1 3 V +.38 g 684 2183 M +-8 17 V +.38 g 676 2200 M +-8 21 V +.38 g 668 2221 M +-9 20 V +.38 g 659 2241 M +-2 6 V +.38 g 657 2247 M +-6 14 V +.38 g 651 2261 M +-9 20 V +.38 g 642 2281 M +-8 20 V +.38 g 634 2301 M +-5 10 V +.38 g 629 2311 M +-4 10 V +.38 g 625 2321 M +-8 20 V +stroke 617 2341 M +.38 g 617 2341 M +-9 21 V +.38 g 608 2362 M +-6 14 V +0 g .38 g 1605 588 M +.38 g 1605 588 M +-18 20 V +.38 g 1587 608 M +-4 5 V +.38 g 1583 613 M +-12 15 V +.38 g 1571 628 M +-15 18 V +.38 g 1556 646 M +-2 2 V +.38 g 1554 648 M +-17 21 V +.38 g 1537 669 M +-8 10 V +.38 g 1529 679 M +-9 10 V +.38 g 1520 689 M +-16 20 V +.38 g 1504 709 M +-3 3 V +.38 g 1501 712 M +-13 17 V +.38 g 1488 729 M +-14 17 V +.38 g 1474 746 M +-2 3 V +.38 g 1472 749 M +-16 20 V +.38 g 1456 769 M +-9 12 V +.38 g 1447 781 M +-7 9 V +.38 g 1440 790 M +-15 20 V +.38 g 1425 810 M +-5 7 V +.38 g 1420 817 M +-10 13 V +.38 g 1410 830 M +-15 20 V +.38 g 1395 850 M +-3 3 V +.38 g 1392 853 M +-12 17 V +.38 g 1380 870 M +-15 20 V +.38 g 1365 890 M +0 1 V +.38 g 1365 891 M +-14 19 V +.38 g 1351 910 M +-13 19 V +.38 g 1338 929 M +-1 2 V +.38 g 1337 931 M +-14 20 V +.38 g 1323 951 M +-12 17 V +.38 g 1311 968 M +-2 3 V +.38 g 1309 971 M +-14 20 V +.38 g 1295 991 M +-12 17 V +.38 g 1283 1008 M +-2 3 V +.38 g 1281 1011 M +-13 20 V +.38 g 1268 1031 M +-12 19 V +.38 g 1256 1050 M +-1 2 V +.38 g 1255 1052 M +-13 20 V +.38 g 1242 1072 M +-13 20 V +.38 g .38 g 1229 1092 M +-12 20 V +.38 g 1217 1112 M +-13 20 V +.38 g 1204 1132 M +-2 4 V +.38 g 1202 1136 M +-10 16 V +.38 g 1192 1152 M +-13 20 V +.38 g 1179 1172 M +-5 9 V +.38 g 1174 1181 M +-7 12 V +.38 g 1167 1193 M +-11 20 V +.38 g 1156 1213 M +-9 14 V +.38 g 1147 1227 M +-3 6 V +.38 g 1144 1233 M +-12 20 V +.38 g 1132 1253 M +-12 20 V +stroke 1120 1273 M +.38 g 1120 1273 M +0 1 V +.38 g 1120 1274 M +-11 19 V +.38 g 1109 1293 M +-11 21 V +.38 g 1098 1314 M +-5 9 V +.38 g 1093 1323 M +-6 11 V +.38 g 1087 1334 M +-11 20 V +.38 g 1076 1354 M +-11 19 V +.38 g 1065 1373 M +0 1 V +.38 g 1065 1374 M +-11 20 V +.38 g 1054 1394 M +-11 20 V +.38 g 1043 1414 M +-5 10 V +.38 g 1038 1424 M +-6 11 V +.38 g 1032 1435 M +-10 20 V +.38 g 1022 1455 M +-11 20 V +.38 g 1011 1475 M +0 1 V +.38 g 1011 1476 M +-10 19 V +.38 g 1001 1495 M +-10 20 V +.38 g 991 1515 M +-7 14 V +.38 g 984 1529 M +-3 6 V +.38 g 981 1535 M +-11 20 V +.38 g 970 1555 M +-10 21 V +.38 g 960 1576 M +-4 8 V +.38 g 956 1584 M +-6 12 V +.38 g 950 1596 M +-9 20 V +.38 g 941 1616 M +-10 20 V +.38 g 931 1636 M +-2 3 V +.38 g 929 1639 M +-8 17 V +.38 g 921 1656 M +-10 20 V +.38 g 911 1676 M +-9 20 V +.38 g 902 1696 M +0 1 V +.38 g 902 1697 M +-10 20 V +.38 g 892 1717 M +-9 20 V +.38 g 883 1737 M +-8 17 V +.38 g 875 1754 M +-2 3 V +.38 g 873 1757 M +-9 20 V +.38 g 864 1777 M +-10 20 V +.38 g 854 1797 M +-7 16 V +.38 g 847 1813 M +-2 4 V +.38 g 845 1817 M +-9 21 V +.38 g 836 1838 M +-9 20 V +.38 g 827 1858 M +-7 14 V +.38 g 820 1872 M +-2 6 V +.38 g 818 1878 M +-9 20 V +.38 g 809 1898 M +-10 20 V +.38 g 799 1918 M +-6 15 V +.38 g 793 1933 M +-3 5 V +.38 g 790 1938 M +-9 21 V +0 g .38 g 4143 4619 M +.38 g 4143 4619 M +-26 -16 V +.38 g 4117 4603 M +-7 -4 V +.38 g 4110 4599 M +-20 -12 V +.38 g 4090 4587 M +-15 -8 V +.38 g 4075 4579 M +-12 -7 V +stroke 4063 4572 M +.38 g 4063 4572 M +-25 -13 V +.38 g 4038 4559 M +-2 -2 V +.38 g 4036 4557 M +-28 -14 V +.38 g 4008 4543 M +-9 -5 V +.38 g 3999 4538 M +-18 -9 V +.38 g 3981 4529 M +-24 -11 V +.38 g 3957 4518 M +-3 -1 V +.38 g 3954 4517 M +-27 -12 V +.38 g 3927 4505 M +-18 -7 V +.38 g 3909 4498 M +-10 -4 V +.38 g 3899 4494 M +-27 -9 V +.38 g 3872 4485 M +-21 -7 V +.38 g 3851 4478 M +-6 -2 V +.38 g 3845 4476 M +-27 -8 V +.38 g 3818 4468 M +-28 -6 V +.38 g 3790 4462 M +-22 -4 V +.38 g 3768 4458 M +-5 -1 V +.38 g 3763 4457 M +-27 -4 V +.38 g 3736 4453 M +-27 -3 V +.38 g 3709 4450 M +-28 -1 V +.38 g 3681 4449 M +-27 -1 V +.38 g 3654 4448 M +-27 1 V +.38 g 3627 4449 M +-27 3 V +.38 g 3600 4452 M +-28 3 V +.38 g 3572 4455 M +-15 3 V +.38 g 3557 4458 M +-12 2 V +.38 g 3545 4460 M +-27 6 V +.38 g 3518 4466 M +-27 7 V +.38 g 3491 4473 M +-18 5 V +.38 g 3473 4478 M +-10 3 V +.38 g 3463 4481 M +-27 9 V +.38 g 3436 4490 M +-22 8 V +.38 g 3414 4498 M +-5 2 V +.38 g 3409 4500 M +-27 11 V +.38 g 3382 4511 M +-17 7 V +.38 g 3365 4518 M +-11 5 V +.38 g 3354 4523 M +-27 13 V +.38 g 3327 4536 M +-6 2 V +.38 g 3321 4538 M +-21 11 V +.38 g 3300 4549 M +-19 10 V +.38 g 3281 4559 M +-8 4 V +.38 g 3273 4563 M +-28 15 V +.38 g 3245 4578 M +-2 1 V +.38 g 3243 4579 M +-25 14 V +.38 g 3218 4593 M +-11 6 V +.38 g 3207 4599 M +-16 9 V +.38 g 3191 4608 M +-19 11 V +0 g .38 g 6052 1093 M +.38 g 6052 1093 M +-1 -1 V +.38 g 6051 1092 M +-14 -20 V +.38 g 6037 1072 M +-12 -19 V +.38 g 6025 1053 M +-1 -1 V +.38 g 6024 1052 M +-14 -21 V +stroke 6010 1031 M +.38 g 6010 1031 M +-12 -18 V +.38 g 5998 1013 M +-1 -2 V +.38 g 5997 1011 M +-15 -20 V +.38 g 5982 991 M +-12 -17 V +.38 g 5970 974 M +-2 -3 V +.38 g 5968 971 M +-14 -20 V +.38 g 5954 951 M +-11 -15 V +.38 g 5943 936 M +-4 -5 V +.38 g 5939 931 M +-15 -21 V +.38 g 5924 910 M +-8 -11 V +.38 g 5916 899 M +-6 -9 V +.38 g 5910 890 M +-16 -20 V +.38 g 5894 870 M +-5 -8 V +.38 g 5889 862 M +-10 -12 V +.38 g 5879 850 M +-15 -20 V +.38 g 5864 830 M +-3 -3 V +.38 g 5861 827 M +-13 -17 V +.38 g 5848 810 M +-14 -18 V +.38 g 5834 792 M +-2 -2 V +.38 g 5832 790 M +-16 -21 V +.38 g 5816 769 M +-9 -12 V +.38 g 5807 757 M +-7 -8 V +.38 g 5800 749 M +-16 -20 V +.38 g 5784 729 M +-4 -6 V +.38 g 5780 723 M +-12 -14 V +.38 g 5768 709 M +-16 -19 V +.38 g 5752 690 M +-1 -1 V +.38 g 5751 689 M +-16 -20 V +.38 g 5735 669 M +-10 -12 V +.38 g 5725 657 M +-7 -9 V +.38 g 5718 648 M +-17 -20 V +.38 g 5701 628 M +-3 -4 V +.38 g 5698 624 M +-14 -16 V +.38 g 5684 608 M +-13 -17 V +.38 g 5671 591 M +-3 -3 V +0 g .36 g 824 1938 M +.36 g 824 1938 M +-4 10 V +.36 g 820 1948 M +-5 11 V +.36 g 815 1959 M +-9 20 V +.36 g 806 1979 M +-9 20 V +.36 g 797 1999 M +-4 9 V +.36 g 793 2008 M +-5 11 V +.36 g 788 2019 M +-9 20 V +.36 g 779 2039 M +-9 20 V +.36 g 770 2059 M +-5 11 V +.36 g 765 2070 M +-4 9 V +.36 g 761 2079 M +-8 21 V +.36 g 753 2100 M +-9 20 V +.36 g 744 2120 M +-6 12 V +.36 g 738 2132 M +-3 8 V +.36 g 735 2140 M +-9 20 V +.36 g 726 2160 M +-8 20 V +.36 g 718 2180 M +-7 15 V +stroke 711 2195 M +.36 g 711 2195 M +-2 5 V +.36 g 709 2200 M +-9 21 V +.36 g 700 2221 M +-8 20 V +.36 g 692 2241 M +-8 18 V +.36 g 684 2259 M +-1 2 V +.36 g 683 2261 M +-9 20 V +.36 g 674 2281 M +-8 20 V +.36 g 666 2301 M +-9 20 V +.36 g 657 2321 M +0 2 V +.36 g 657 2323 M +-8 18 V +.36 g 649 2341 M +-9 21 V +.36 g 640 2362 M +-8 20 V +.36 g 632 2382 M +-3 6 V +.36 g 629 2388 M +-6 14 V +.36 g 623 2402 M +-8 20 V +.36 g 615 2422 M +-8 20 V +.36 g 607 2442 M +-5 11 V +0 g .36 g 1671 588 M +.36 g 1671 588 M +-6 7 V +.36 g 1665 595 M +-11 13 V +.36 g 1654 608 M +-16 19 V +.36 g 1638 627 M +-2 1 V +.36 g 1636 628 M +-17 20 V +.36 g 1619 648 M +-9 10 V +.36 g 1610 658 M +-9 11 V +.36 g 1601 669 M +-17 20 V +.36 g 1584 689 M +-1 1 V +.36 g 1583 690 M +-16 19 V +.36 g 1567 709 M +-11 13 V +.36 g 1556 722 M +-6 7 V +.36 g 1550 729 M +-17 20 V +.36 g 1533 749 M +-4 6 V +.36 g 1529 755 M +-12 14 V +.36 g 1517 769 M +-16 19 V +.36 g 1501 788 M +-1 2 V +.36 g 1500 790 M +-16 20 V +.36 g 1484 810 M +-10 12 V +.36 g 1474 822 M +-6 8 V +.36 g 1468 830 M +-16 20 V +.36 g 1452 850 M +-5 7 V +.36 g 1447 857 M +-11 13 V +.36 g 1436 870 M +-15 20 V +.36 g 1421 890 M +-1 2 V +.36 g 1420 892 M +-14 18 V +.36 g 1406 910 M +-14 18 V +.36 g 1392 928 M +-1 3 V +.36 g 1391 931 M +-15 20 V +.36 g 1376 951 M +-11 15 V +.36 g 1365 966 M +-4 5 V +.36 g 1361 971 M +-14 20 V +.36 g 1347 991 M +-9 13 V +.36 g 1338 1004 M +-5 7 V +.36 g 1333 1011 M +-14 20 V +stroke 1319 1031 M +.36 g 1319 1031 M +-8 12 V +.36 g 1311 1043 M +-6 9 V +.36 g 1305 1052 M +-14 20 V +.36 g 1291 1072 M +-8 11 V +.36 g 1283 1083 M +-6 9 V +.36 g 1277 1092 M +-13 20 V +.36 g 1264 1112 M +-8 12 V +.36 g 1256 1124 M +-5 8 V +.36 g 1251 1132 M +-13 20 V +.36 g 1238 1152 M +-9 15 V +.36 g 1229 1167 M +-4 5 V +.36 g 1225 1172 M +-12 21 V +.36 g 1213 1193 M +-11 17 V +.36 g 1202 1210 M +-2 3 V +.36 g 1200 1213 M +-12 20 V +.36 g 1188 1233 M +-12 20 V +.36 g 1176 1253 M +-2 2 V +.36 g 1174 1255 M +-10 18 V +.36 g 1164 1273 M +-12 20 V +.36 g 1152 1293 M +-5 8 V +.36 g 1147 1301 M +-7 13 V +.36 g 1140 1314 M +-12 20 V +.36 g 1128 1334 M +-8 15 V +.36 g 1120 1349 M +-3 5 V +.36 g 1117 1354 M +-11 20 V +.36 g 1106 1374 M +-12 20 V +.36 g 1094 1394 M +-1 3 V +.36 g 1093 1397 M +-10 17 V +.36 g 1083 1414 M +-11 21 V +.36 g 1072 1435 M +-7 12 V +.36 g 1065 1447 M +-4 8 V +.36 g 1061 1455 M +-11 20 V +.36 g 1050 1475 M +-10 20 V +.36 g 1040 1495 M +-2 3 V +.36 g 1038 1498 M +-9 17 V +.36 g 1029 1515 M +-10 20 V +.36 g 1019 1535 M +-8 15 V +.36 g 1011 1550 M +-3 5 V +.36 g 1008 1555 M +-10 21 V +.36 g 998 1576 M +-10 20 V +.36 g 988 1596 M +-4 8 V +.36 g 984 1604 M +-7 12 V +.36 g 977 1616 M +-10 20 V +.36 g 967 1636 M +-10 20 V +.36 g 957 1656 M +-1 2 V +.36 g 956 1658 M +-9 18 V +.36 g 947 1676 M +-9 21 V +.36 g 938 1697 M +-9 17 V +.36 g 929 1714 M +-1 3 V +.36 g 928 1717 M +-10 20 V +.36 g 918 1737 M +-10 20 V +.36 g 908 1757 M +-6 14 V +stroke 902 1771 M +.36 g 902 1771 M +-3 6 V +.36 g 899 1777 M +-10 20 V +.36 g 889 1797 M +-9 20 V +.36 g 880 1817 M +-5 12 V +.36 g 875 1829 M +-5 9 V +.36 g 870 1838 M +-9 20 V +.36 g 861 1858 M +-9 20 V +.36 g 852 1878 M +-5 10 V +.36 g 847 1888 M +-4 10 V +.36 g 843 1898 M +-10 20 V +.36 g 833 1918 M +-9 20 V +0 g .36 g 4261 4619 M +.36 g 4261 4619 M +-7 -5 V +.36 g 4254 4614 M +-23 -15 V +.36 g 4231 4599 M +-5 -3 V +.36 g 4226 4596 M +-26 -17 V +.36 g 4200 4579 M +-1 -1 V +.36 g 4199 4578 M +-27 -17 V +.36 g 4172 4561 M +-4 -2 V +.36 g 4168 4559 M +-23 -15 V +.36 g 4145 4544 M +-9 -6 V +.36 g 4136 4538 M +-19 -11 V +.36 g 4117 4527 M +-15 -9 V +.36 g 4102 4518 M +-12 -7 V +.36 g 4090 4511 M +-22 -13 V +.36 g 4068 4498 M +-5 -3 V +.36 g 4063 4495 M +-27 -15 V +.36 g 4036 4480 M +-5 -2 V +.36 g 4031 4478 M +-23 -12 V +.36 g 4008 4466 M +-16 -8 V +.36 g 3992 4458 M +-11 -6 V +.36 g 3981 4452 M +-27 -13 V +.36 g 3954 4439 M +-4 -1 V +.36 g 3950 4438 M +-23 -10 V +.36 g 3927 4428 M +-26 -11 V +.36 g 3901 4417 M +-2 0 V +.36 g 3899 4417 M +-27 -10 V +.36 g 3872 4407 M +-27 -9 V +.36 g 3845 4398 M +-3 -1 V +.36 g 3842 4397 M +-24 -7 V +.36 g 3818 4390 M +-28 -6 V +.36 g 3790 4384 M +-27 -6 V +.36 g 3763 4378 M +-9 -1 V +.36 g 3754 4377 M +-18 -3 V +.36 g 3736 4374 M +-27 -2 V +.36 g 3709 4372 M +-28 -2 V +.36 g 3681 4370 M +-27 0 V +.36 g 3654 4370 M +-27 1 V +.36 g 3627 4371 M +-27 2 V +.36 g 3600 4373 M +-28 4 V +.36 g 3572 4377 M +-1 0 V +.36 g 3571 4377 M +-26 5 V +.36 g 3545 4382 M +-27 6 V +stroke 3518 4388 M +.36 g 3518 4388 M +-27 7 V +.36 g 3491 4395 M +-8 2 V +.36 g 3483 4397 M +-20 6 V +.36 g 3463 4403 M +-27 9 V +.36 g 3436 4412 M +-13 5 V +.36 g 3423 4417 M +-14 6 V +.36 g 3409 4423 M +-27 11 V +.36 g 3382 4434 M +-9 4 V +.36 g 3373 4438 M +-19 8 V +.36 g 3354 4446 M +-25 12 V +.36 g 3329 4458 M +-2 1 V +.36 g 3327 4459 M +-27 13 V +.36 g 3300 4472 M +-11 6 V +.36 g 3289 4478 M +-16 9 V +.36 g 3273 4487 M +-22 11 V +.36 g 3251 4498 M +-6 3 V +.36 g 3245 4501 M +-27 16 V +.36 g 3218 4517 M +-3 1 V +.36 g 3215 4518 M +-24 14 V +.36 g 3191 4532 M +-11 6 V +.36 g 3180 4538 M +-16 10 V +.36 g 3164 4548 M +-18 11 V +.36 g 3146 4559 M +-10 6 V +.36 g 3136 4565 M +-23 14 V +.36 g 3113 4579 M +-4 2 V +.36 g 3109 4581 M +-27 17 V +.36 g 3082 4598 M +-2 1 V +.36 g 3080 4599 M +-25 15 V +.36 g 3055 4614 M +-8 5 V +0 g .36 g 6052 1168 M +.36 g 6052 1168 M +-11 -16 V +.36 g 6041 1152 M +-13 -20 V +.36 g 6028 1132 M +-3 -5 V +.36 g 6025 1127 M +-11 -15 V +.36 g 6014 1112 M +-14 -20 V +.36 g 6000 1092 M +-2 -4 V +.36 g 5998 1088 M +-12 -16 V +.36 g 5986 1072 M +-14 -20 V +.36 g 5972 1052 M +-2 -3 V +.36 g 5970 1049 M +-12 -18 V +.36 g 5958 1031 M +-15 -20 V +.36 g .36 g 5943 1011 M +-15 -20 V +.36 g 5928 991 M +-12 -17 V +.36 g 5916 974 M +-3 -3 V +.36 g 5913 971 M +-15 -20 V +.36 g 5898 951 M +-9 -13 V +.36 g 5889 938 M +-6 -7 V +.36 g 5883 931 M +-16 -21 V +.36 g 5867 910 M +-6 -8 V +.36 g 5861 902 M +-9 -12 V +.36 g 5852 890 M +-16 -20 V +.36 g 5836 870 M +-2 -2 V +.36 g 5834 868 M +-14 -18 V +stroke 5820 850 M +.36 g 5820 850 M +-13 -17 V +.36 g 5807 833 M +-3 -3 V +.36 g 5804 830 M +-16 -20 V +.36 g 5788 810 M +-8 -10 V +.36 g 5780 800 M +-9 -10 V +.36 g 5771 790 M +-16 -21 V +.36 g 5755 769 M +-3 -2 V +.36 g 5752 767 M +-14 -18 V +.36 g 5738 749 M +-13 -15 V +.36 g 5725 734 M +-4 -5 V +.36 g 5721 729 M +-17 -20 V +.36 g 5704 709 M +-6 -8 V +.36 g 5698 701 M +-11 -12 V +.36 g 5687 689 M +-16 -20 V +.36 g 5671 669 M +-1 0 V +.36 g 5670 669 M +-17 -21 V +.36 g 5653 648 M +-10 -12 V +.36 g 5643 636 M +-7 -8 V +.36 g 5636 628 M +-17 -20 V +.36 g 5619 608 M +-3 -4 V +.36 g 5616 604 M +-14 -16 V +0 g .34 g 869 1918 M +.34 g 869 1918 M +-9 20 V +.34 g 860 1938 M +-10 21 V +.34 g 850 1959 M +-3 6 V +.34 g 847 1965 M +-6 14 V +.34 g 841 1979 M +-9 20 V +.34 g 832 1999 M +-9 20 V +.34 g 823 2019 M +-3 6 V +.34 g 820 2025 M +-6 14 V +.34 g 814 2039 M +-9 20 V +.34 g 805 2059 M +-9 20 V +.34 g 796 2079 M +-3 7 V +.34 g 793 2086 M +-6 14 V +.34 g 787 2100 M +-9 20 V +.34 g 778 2120 M +-9 20 V +.34 g 769 2140 M +-4 8 V +.34 g 765 2148 M +-5 12 V +.34 g 760 2160 M +-9 20 V +.34 g 751 2180 M +-8 20 V +.34 g 743 2200 M +-5 10 V +.34 g 738 2210 M +-4 11 V +.34 g 734 2221 M +-9 20 V +.34 g 725 2241 M +-8 20 V +.34 g 717 2261 M +-6 13 V +.34 g 711 2274 M +-3 7 V +.34 g 708 2281 M +-9 20 V +.34 g 699 2301 M +-8 20 V +.34 g 691 2321 M +-7 16 V +.34 g 684 2337 M +-2 4 V +.34 g 682 2341 M +-8 21 V +.34 g 674 2362 M +-9 20 V +.34 g 665 2382 M +-8 20 V +stroke 657 2402 M +.34 g 657 2402 M +-9 20 V +.34 g 648 2422 M +-8 20 V +.34 g 640 2442 M +-9 20 V +.34 g 631 2462 M +-2 5 V +.34 g 629 2467 M +-6 16 V +.34 g 623 2483 M +-9 20 V +.34 g 614 2503 M +-8 20 V +.34 g 606 2523 M +-4 9 V +0 g .34 g 1742 588 M +.34 g 1742 588 M +-18 20 V +.34 g 1724 608 M +-5 5 V +.34 g 1719 613 M +-13 15 V +.34 g 1706 628 M +-14 16 V +.34 g 1692 644 M +-4 4 V +.34 g 1688 648 M +-18 21 V +.34 g 1670 669 M +-5 6 V +.34 g 1665 675 M +-12 14 V +.34 g 1653 689 M +-15 17 V +.34 g 1638 706 M +-3 3 V +.34 g 1635 709 M +-18 20 V +.34 g 1617 729 M +-7 8 V +.34 g 1610 737 M +-10 12 V +.34 g 1600 749 M +-17 20 V +.34 g 1583 769 M +-1 0 V +.34 g 1582 769 M +-17 21 V +.34 g 1565 790 M +-9 11 V +.34 g 1556 801 M +-8 9 V +.34 g 1548 810 M +-17 20 V +.34 g 1531 830 M +-2 3 V +.34 g 1529 833 M +-14 17 V +.34 g 1515 850 M +-14 16 V +.34 g 1501 866 M +-3 4 V +.34 g 1498 870 M +-16 20 V +.34 g 1482 890 M +-8 10 V +.34 g 1474 900 M +-8 10 V +.34 g 1466 910 M +-16 21 V +.34 g 1450 931 M +-3 3 V +.34 g 1447 934 M +-13 17 V +.34 g 1434 951 M +-14 19 V +.34 g 1420 970 M +-1 1 V +.34 g 1419 971 M +-16 20 V +.34 g 1403 991 M +-11 15 V +.34 g 1392 1006 M +-4 5 V +.34 g 1388 1011 M +-15 20 V +.34 g 1373 1031 M +-8 12 V +.34 g 1365 1043 M +-6 9 V +.34 g 1359 1052 M +-15 20 V +.34 g 1344 1072 M +-6 9 V +.34 g 1338 1081 M +-8 11 V +.34 g 1330 1092 M +-14 20 V +.34 g 1316 1112 M +-5 8 V +.34 g 1311 1120 M +-9 12 V +.34 g 1302 1132 M +-14 20 V +stroke 1288 1152 M +.34 g 1288 1152 M +-5 8 V +.34 g 1283 1160 M +-8 12 V +.34 g 1275 1172 M +-13 21 V +.34 g 1262 1193 M +-6 8 V +.34 g 1256 1201 M +-8 12 V +.34 g 1248 1213 M +-13 20 V +.34 g 1235 1233 M +-6 10 V +.34 g 1229 1243 M +-6 10 V +.34 g 1223 1253 M +-13 20 V +.34 g 1210 1273 M +-8 14 V +.34 g 1202 1287 M +-4 6 V +.34 g 1198 1293 M +-13 21 V +.34 g 1185 1314 M +-11 18 V +.34 g 1174 1332 M +-1 2 V +.34 g 1173 1334 M +-12 20 V +.34 g 1161 1354 M +-12 20 V +.34 g 1149 1374 M +-2 4 V +.34 g 1147 1378 M +-9 16 V +.34 g 1138 1394 M +-12 20 V +.34 g 1126 1414 M +-6 11 V +.34 g 1120 1425 M +-6 10 V +.34 g 1114 1435 M +-11 20 V +.34 g 1103 1455 M +-10 18 V +.34 g 1093 1473 M +-1 2 V +.34 g 1092 1475 M +-11 20 V +.34 g 1081 1495 M +-11 20 V +.34 g 1070 1515 M +-5 8 V +.34 g 1065 1523 M +-6 12 V +.34 g 1059 1535 M +-11 20 V +.34 g 1048 1555 M +-10 19 V +.34 g 1038 1574 M +-1 2 V +.34 g 1037 1576 M +-10 20 V +.34 g 1027 1596 M +-11 20 V +.34 g 1016 1616 M +-5 11 V +.34 g 1011 1627 M +-5 9 V +.34 g 1006 1636 M +-10 20 V +.34 g 996 1656 M +-11 20 V +.34 g 985 1676 M +-1 4 V +.34 g 984 1680 M +-9 17 V +.34 g 975 1697 M +-10 20 V +.34 g 965 1717 M +-9 18 V +.34 g 956 1735 M +-1 2 V +.34 g 955 1737 M +-9 20 V +.34 g 946 1757 M +-10 20 V +.34 g 936 1777 M +-7 14 V +.34 g 929 1791 M +-3 6 V +.34 g 926 1797 M +-10 20 V +.34 g 916 1817 M +-9 21 V +.34 g 907 1838 M +-5 10 V +.34 g 902 1848 M +-5 10 V +.34 g 897 1858 M +-9 20 V +.34 g 888 1878 M +-10 20 V +stroke 878 1898 M +.34 g 878 1898 M +-3 8 V +.34 g 875 1906 M +-6 12 V +0 g .34 g 4377 4619 M +.34 g 4377 4619 M +-14 -10 V +.34 g 4363 4609 M +-16 -10 V +.34 g 4347 4599 M +-12 -8 V +.34 g 4335 4591 M +-18 -12 V +.34 g 4317 4579 M +-9 -6 V +.34 g 4308 4573 M +-22 -14 V +.34 g 4286 4559 M +-5 -4 V +.34 g 4281 4555 M +-25 -17 V +.34 g 4256 4538 M +-2 -1 V +.34 g 4254 4537 M +-28 -18 V +.34 g 4226 4519 M +0 -1 V +.34 g 4226 4518 M +-27 -17 V +.34 g 4199 4501 M +-4 -3 V +.34 g 4195 4498 M +-23 -15 V +.34 g 4172 4483 M +-8 -5 V +.34 g 4164 4478 M +-19 -12 V +.34 g 4145 4466 M +-13 -8 V +.34 g 4132 4458 M +-15 -9 V +.34 g 4117 4449 M +-18 -11 V +.34 g 4099 4438 M +-9 -6 V +.34 g 4090 4432 M +-26 -15 V +.34 g 4064 4417 M +-1 -1 V +.34 g 4063 4416 M +-27 -15 V +.34 g 4036 4401 M +-8 -4 V +.34 g 4028 4397 M +-20 -10 V +.34 g 4008 4387 M +-18 -10 V +.34 g 3990 4377 M +-9 -4 V +.34 g 3981 4373 M +-27 -13 V +.34 g 3954 4360 M +-7 -3 V +.34 g 3947 4357 M +-20 -9 V +.34 g 3927 4348 M +-27 -11 V +.34 g 3900 4337 M +-1 0 V +.34 g 3899 4337 M +-27 -11 V +.34 g 3872 4326 M +-27 -8 V +.34 g 3845 4318 M +-3 -1 V +.34 g 3842 4317 M +-24 -7 V +.34 g 3818 4310 M +-28 -7 V +.34 g 3790 4303 M +-27 -5 V +.34 g 3763 4298 M +-8 -1 V +.34 g 3755 4297 M +-19 -3 V +.34 g 3736 4294 M +-27 -3 V +.34 g 3709 4291 M +-28 -2 V +.34 g 3681 4289 M +-27 0 V +.34 g 3654 4289 M +-27 1 V +.34 g 3627 4290 M +-27 3 V +.34 g 3600 4293 M +-28 3 V +.34 g 3572 4296 M +-1 1 V +.34 g 3571 4297 M +-26 4 V +.34 g 3545 4301 M +-27 6 V +.34 g 3518 4307 M +-27 8 V +stroke 3491 4315 M +.34 g 3491 4315 M +-7 2 V +.34 g 3484 4317 M +-21 6 V +.34 g 3463 4323 M +-27 9 V +.34 g 3436 4332 M +-11 5 V +.34 g 3425 4337 M +-16 6 V +.34 g 3409 4343 M +-27 11 V +.34 g 3382 4354 M +-6 3 V +.34 g 3376 4357 M +-22 10 V +.34 g 3354 4367 M +-22 10 V +.34 g 3332 4377 M +-5 3 V +.34 g 3327 4380 M +-27 14 V +.34 g 3300 4394 M +-7 3 V +.34 g 3293 4397 M +-20 11 V +.34 g 3273 4408 M +-18 9 V +.34 g 3255 4417 M +-10 6 V +.34 g 3245 4423 M +-26 15 V +.34 g 3219 4438 M +-1 0 V +.34 g 3218 4438 M +-27 16 V +.34 g 3191 4454 M +-6 4 V +.34 g 3185 4458 M +-21 13 V +.34 g 3164 4471 M +-13 7 V +.34 g 3151 4478 M +-15 9 V +.34 g 3136 4487 M +-18 11 V +.34 g 3118 4498 M +-9 6 V +.34 g 3109 4504 M +-23 14 V +.34 g 3086 4518 M +-4 3 V +.34 g 3082 4521 M +-27 16 V +.34 g 3055 4537 M +-2 1 V +.34 g 3053 4538 M +-26 16 V +.34 g 3027 4554 M +-6 5 V +.34 g 3021 4559 M +-21 12 V +.34 g 3000 4571 M +-12 8 V +.34 g 2988 4579 M +-15 9 V +.34 g 2973 4588 M +-18 11 V +.34 g 2955 4599 M +-9 6 V +.34 g 2946 4605 M +-24 14 V +0 g .34 g 6052 1245 M +.34 g 6052 1245 M +-8 -12 V +.34 g 6044 1233 M +-14 -20 V +.34 g 6030 1213 M +-5 -9 V +.34 g 6025 1204 M +-8 -11 V +.34 g 6017 1193 M +-14 -21 V +.34 g 6003 1172 M +-5 -7 V +.34 g 5998 1165 M +-9 -13 V +.34 g 5989 1152 M +-14 -20 V +.34 g 5975 1132 M +-5 -6 V +.34 g 5970 1126 M +-10 -14 V +.34 g 5960 1112 M +-15 -20 V +.34 g 5945 1092 M +-2 -4 V +.34 g 5943 1088 M +-12 -16 V +.34 g 5931 1072 M +-15 -20 V +.34 g .34 g 5916 1052 M +-16 -21 V +.34 g 5900 1031 M +-11 -15 V +stroke 5889 1016 M +.34 g 5889 1016 M +-4 -5 V +.34 g 5885 1011 M +-16 -20 V +.34 g 5869 991 M +-8 -11 V +.34 g 5861 980 M +-7 -9 V +.34 g 5854 971 M +-16 -20 V +.34 g 5838 951 M +-4 -5 V +.34 g 5834 946 M +-12 -15 V +.34 g 5822 931 M +-15 -19 V +.34 g 5807 912 M +-1 -2 V +.34 g 5806 910 M +-17 -20 V +.34 g 5789 890 M +-9 -11 V +.34 g 5780 879 M +-7 -9 V +.34 g 5773 870 M +-17 -20 V +.34 g 5756 850 M +-4 -4 V +.34 g 5752 846 M +-13 -16 V +.34 g 5739 830 M +-14 -17 V +.34 g 5725 813 M +-3 -3 V +.34 g 5722 810 M +-17 -20 V +.34 g 5705 790 M +-7 -9 V +.34 g 5698 781 M +-10 -12 V +.34 g 5688 769 M +-17 -20 V +.34 g 5671 749 M +0 -1 V +.34 g 5671 748 M +-17 -19 V +.34 g 5654 729 M +-11 -13 V +.34 g 5643 716 M +-6 -7 V +.34 g 5637 709 M +-17 -20 V +.34 g 5620 689 M +-4 -5 V +.34 g 5616 684 M +-14 -15 V +.34 g 5602 669 M +-13 -17 V +.34 g 5589 652 M +-4 -4 V +.34 g 5585 648 M +-17 -20 V +.34 g 5568 628 M +-6 -7 V +.34 g 5562 621 M +-11 -13 V +.34 g 5551 608 M +-17 -20 V +.34 g 0 g .32 g 916 1898 M +.32 g 916 1898 M +-10 20 V +.32 g 906 1918 M +-4 9 V +.32 g 902 1927 M +-6 11 V +.32 g 896 1938 M +-9 21 V +.32 g 887 1959 M +-9 20 V +.32 g 878 1979 M +-3 6 V +.32 g 875 1985 M +-7 14 V +.32 g 868 1999 M +-9 20 V +.32 g 859 2019 M +-9 20 V +.32 g 850 2039 M +-3 5 V +.32 g 847 2044 M +-6 15 V +.32 g 841 2059 M +-10 20 V +.32 g 831 2079 M +-9 21 V +.32 g 822 2100 M +-2 5 V +.32 g 820 2105 M +-7 15 V +.32 g 813 2120 M +-9 20 V +.32 g 804 2140 M +-9 20 V +.32 g 795 2160 M +-2 6 V +stroke 793 2166 M +.32 g 793 2166 M +-7 14 V +.32 g 786 2180 M +-8 20 V +.32 g 778 2200 M +-9 21 V +.32 g 769 2221 M +-4 7 V +.32 g 765 2228 M +-5 13 V +.32 g 760 2241 M +-9 20 V +.32 g 751 2261 M +-9 20 V +.32 g 742 2281 M +-4 10 V +.32 g 738 2291 M +-4 10 V +.32 g 734 2301 M +-9 20 V +.32 g 725 2321 M +-8 20 V +.32 g 717 2341 M +-6 13 V +.32 g 711 2354 M +-3 8 V +.32 g 708 2362 M +-9 20 V +.32 g 699 2382 M +-8 20 V +.32 g 691 2402 M +-7 16 V +.32 g 684 2418 M +-2 4 V +.32 g 682 2422 M +-8 20 V +.32 g 674 2442 M +-9 20 V +.32 g 665 2462 M +-8 21 V +.32 g .32 g 657 2483 M +-9 20 V +.32 g 648 2503 M +-8 20 V +.32 g 640 2523 M +-9 20 V +.32 g 631 2543 M +-2 5 V +.32 g 629 2548 M +-6 15 V +.32 g 623 2563 M +-8 20 V +.32 g 615 2583 M +-9 21 V +.32 g 606 2604 M +-4 10 V +0 g .32 g 1816 588 M +.32 g 1816 588 M +-15 17 V +.32 g 1801 605 M +-3 3 V +.32 g 1798 608 M +-18 20 V +.32 g 1780 628 M +-6 7 V +.32 g 1774 635 M +-12 13 V +.32 g 1762 648 M +-15 18 V +.32 g 1747 666 M +-3 3 V +.32 g 1744 669 M +-18 20 V +.32 g 1726 689 M +-7 7 V +.32 g 1719 696 M +-11 13 V +.32 g 1708 709 M +-16 17 V +.32 g 1692 726 M +-2 3 V +.32 g 1690 729 M +-18 20 V +.32 g 1672 749 M +-7 8 V +.32 g 1665 757 M +-11 12 V +.32 g 1654 769 M +-16 19 V +.32 g 1638 788 M +-2 2 V +.32 g 1636 790 M +-18 20 V +.32 g 1618 810 M +-8 9 V +.32 g 1610 819 M +-9 11 V +.32 g 1601 830 M +-18 20 V +.32 g .32 g 1583 850 M +-17 20 V +.32 g 1566 870 M +-10 12 V +.32 g 1556 882 M +-7 8 V +stroke 1549 890 M +.32 g 1549 890 M +-17 20 V +.32 g 1532 910 M +-3 4 V +.32 g 1529 914 M +-14 17 V +.32 g 1515 931 M +-14 16 V +.32 g 1501 947 M +-3 4 V +.32 g 1498 951 M +-16 20 V +.32 g 1482 971 M +-8 9 V +.32 g 1474 980 M +-8 11 V +.32 g 1466 991 M +-17 20 V +.32 g 1449 1011 M +-2 4 V +.32 g 1447 1015 M +-13 16 V +.32 g 1434 1031 M +-14 19 V +.32 g 1420 1050 M +-2 2 V +.32 g 1418 1052 M +-15 20 V +.32 g 1403 1072 M +-11 13 V +.32 g 1392 1085 M +-4 7 V +.32 g 1388 1092 M +-15 20 V +.32 g 1373 1112 M +-8 10 V +.32 g 1365 1122 M +-7 10 V +.32 g 1358 1132 M +-15 20 V +.32 g 1343 1152 M +-5 8 V +.32 g 1338 1160 M +-9 12 V +.32 g 1329 1172 M +-14 21 V +.32 g 1315 1193 M +-4 6 V +.32 g 1311 1199 M +-10 14 V +.32 g 1301 1213 M +-14 20 V +.32 g 1287 1233 M +-4 6 V +.32 g 1283 1239 M +-9 14 V +.32 g 1274 1253 M +-14 20 V +.32 g 1260 1273 M +-4 7 V +.32 g 1256 1280 M +-9 13 V +.32 g 1247 1293 M +-13 21 V +.32 g 1234 1314 M +-5 8 V +.32 g 1229 1322 M +-8 12 V +.32 g 1221 1334 M +-12 20 V +.32 g 1209 1354 M +-7 12 V +.32 g 1202 1366 M +-6 8 V +.32 g 1196 1374 M +-12 20 V +.32 g 1184 1394 M +-10 16 V +.32 g 1174 1410 M +-2 4 V +.32 g 1172 1414 M +-12 21 V +.32 g 1160 1435 M +-12 20 V +.32 g 1148 1455 M +-1 1 V +.32 g 1147 1456 M +-11 19 V +.32 g 1136 1475 M +-11 20 V +.32 g 1125 1495 M +-5 9 V +.32 g 1120 1504 M +-7 11 V +.32 g 1113 1515 M +-11 20 V +.32 g 1102 1535 M +-9 17 V +.32 g 1093 1552 M +-2 3 V +.32 g 1091 1555 M +-11 21 V +.32 g 1080 1576 M +-11 20 V +stroke 1069 1596 M +.32 g 1069 1596 M +-4 6 V +.32 g 1065 1602 M +-7 14 V +.32 g 1058 1616 M +-11 20 V +.32 g 1047 1636 M +-9 17 V +.32 g 1038 1653 M +-2 3 V +.32 g 1036 1656 M +-10 20 V +.32 g 1026 1676 M +-11 21 V +.32 g 1015 1697 M +-4 8 V +.32 g 1011 1705 M +-6 12 V +.32 g 1005 1717 M +-10 20 V +.32 g 995 1737 M +-10 20 V +.32 g 985 1757 M +-1 2 V +.32 g 984 1759 M +-9 18 V +.32 g 975 1777 M +-11 20 V +.32 g 964 1797 M +-8 17 V +.32 g 956 1814 M +-2 3 V +.32 g 954 1817 M +-9 21 V +.32 g 945 1838 M +-10 20 V +.32 g 935 1858 M +-6 12 V +.32 g 929 1870 M +-4 8 V +.32 g 925 1878 M +-9 20 V +0 g .32 g 2864 4575 M +.32 g 2864 4575 M +-6 4 V +.32 g 2858 4579 M +-21 12 V +.32 g 2837 4591 M +-14 8 V +.32 g 2823 4599 M +-14 8 V +.32 g 2809 4607 M +-21 12 V +0 g .32 g 4498 4619 M +.32 g 4498 4619 M +-26 -17 V +.32 g 4472 4602 M +-5 -3 V +.32 g 4467 4599 M +-23 -15 V +.32 g 4444 4584 M +-8 -5 V +.32 g 4436 4579 M +-19 -13 V +.32 g 4417 4566 M +-12 -7 V +.32 g 4405 4559 M +-15 -11 V +.32 g 4390 4548 M +-15 -10 V +.32 g 4375 4538 M +-12 -8 V +.32 g 4363 4530 M +-18 -12 V +.32 g 4345 4518 M +-10 -6 V +.32 g 4335 4512 M +-20 -14 V +.32 g 4315 4498 M +-7 -4 V +.32 g 4308 4494 M +-23 -16 V +.32 g 4285 4478 M +-4 -3 V +.32 g 4281 4475 M +-26 -17 V +.32 g 4255 4458 M +-1 -1 V +.32 g 4254 4457 M +-28 -18 V +.32 g 4226 4439 M +-1 -1 V +.32 g 4225 4438 M +-26 -17 V +.32 g 4199 4421 M +-5 -4 V +.32 g 4194 4417 M +-22 -14 V +.32 g 4172 4403 M +-9 -6 V +.32 g 4163 4397 M +-18 -12 V +.32 g 4145 4385 M +-13 -8 V +stroke 4132 4377 M +.32 g 4132 4377 M +-15 -9 V +.32 g 4117 4368 M +-18 -11 V +.32 g 4099 4357 M +-9 -6 V +.32 g 4090 4351 M +-24 -14 V +.32 g 4066 4337 M +-3 -2 V +.32 g 4063 4335 M +-27 -15 V +.32 g 4036 4320 M +-6 -3 V +.32 g 4030 4317 M +-22 -12 V +.32 g 4008 4305 M +-16 -8 V +.32 g 3992 4297 M +-11 -6 V +.32 g 3981 4291 M +-27 -14 V +.32 g 3954 4277 M +-3 -1 V +.32 g 3951 4276 M +-24 -11 V +.32 g 3927 4265 M +-22 -9 V +.32 g 3905 4256 M +-6 -2 V +.32 g 3899 4254 M +-27 -10 V +.32 g 3872 4244 M +-23 -8 V +.32 g 3849 4236 M +-4 -2 V +.32 g 3845 4234 M +-27 -7 V +.32 g 3818 4227 M +-28 -7 V +.32 g 3790 4220 M +-19 -4 V +.32 g 3771 4216 M +-8 -2 V +.32 g 3763 4214 M +-27 -4 V +.32 g 3736 4210 M +-27 -3 V +.32 g 3709 4207 M +-28 -1 V +.32 g 3681 4206 M +-27 0 V +.32 g 3654 4206 M +-27 1 V +.32 g 3627 4207 M +-27 2 V +.32 g 3600 4209 M +-28 4 V +.32 g 3572 4213 M +-16 3 V +.32 g 3556 4216 M +-11 2 V +.32 g 3545 4218 M +-27 6 V +.32 g 3518 4224 M +-27 8 V +.32 g 3491 4232 M +-14 4 V +.32 g 3477 4236 M +-14 4 V +.32 g 3463 4240 M +-27 10 V +.32 g 3436 4250 M +-16 6 V +.32 g 3420 4256 M +-11 5 V +.32 g 3409 4261 M +-27 11 V +.32 g 3382 4272 M +-10 4 V +.32 g 3372 4276 M +-18 9 V +.32 g 3354 4285 M +-24 12 V +.32 g 3330 4297 M +-3 1 V +.32 g 3327 4298 M +-27 14 V +.32 g 3300 4312 M +-9 5 V +.32 g 3291 4317 M +-18 10 V +.32 g 3273 4327 M +-18 10 V +.32 g 3255 4337 M +-10 5 V +.32 g 3245 4342 M +-26 15 V +.32 g 3219 4357 M +-1 1 V +.32 g 3218 4358 M +-27 16 V +.32 g 3191 4374 M +-6 3 V +stroke 3185 4377 M +.32 g 3185 4377 M +-21 13 V +.32 g 3164 4390 M +-12 7 V +.32 g 3152 4397 M +-16 10 V +.32 g 3136 4407 M +-16 10 V +.32 g 3120 4417 M +-11 7 V +.32 g 3109 4424 M +-22 14 V +.32 g 3087 4438 M +-5 3 V +.32 g 3082 4441 M +-27 17 V +.32 g .32 g 3055 4458 M +-28 17 V +.32 g 3027 4475 M +-4 3 V +.32 g 3023 4478 M +-23 14 V +.32 g 3000 4492 M +-9 6 V +.32 g 2991 4498 M +-18 11 V +.32 g 2973 4509 M +-15 9 V +.32 g 2958 4518 M +-12 8 V +.32 g 2946 4526 M +-21 12 V +.32 g 2925 4538 M +-7 5 V +.32 g 2918 4543 M +-26 16 V +.32 g 2892 4559 M +-1 0 V +.32 g 2891 4559 M +-27 16 V +0 g .32 g 6052 1324 M +.32 g 6052 1324 M +-7 -10 V +.32 g 6045 1314 M +-14 -21 V +.32 g 6031 1293 M +-6 -9 V +.32 g 6025 1284 M +-7 -11 V +.32 g 6018 1273 M +-14 -20 V +.32 g 6004 1253 M +-6 -9 V +.32 g 5998 1244 M +-8 -11 V +.32 g 5990 1233 M +-15 -20 V +.32 g 5975 1213 M +-5 -7 V +.32 g 5970 1206 M +-9 -13 V +.32 g 5961 1193 M +-15 -21 V +.32 g 5946 1172 M +-3 -4 V +.32 g 5943 1168 M +-12 -16 V +.32 g 5931 1152 M +-15 -20 V +.32 g .32 g 5916 1132 M +-15 -20 V +.32 g 5901 1112 M +-12 -16 V +.32 g 5889 1096 M +-4 -4 V +.32 g 5885 1092 M +-15 -20 V +.32 g 5870 1072 M +-9 -11 V +.32 g 5861 1061 M +-7 -9 V +.32 g 5854 1052 M +-16 -21 V +.32 g 5838 1031 M +-4 -4 V +.32 g 5834 1027 M +-13 -16 V +.32 g 5821 1011 M +-14 -18 V +.32 g 5807 993 M +-2 -2 V +.32 g 5805 991 M +-16 -20 V +.32 g 5789 971 M +-9 -11 V +.32 g 5780 960 M +-8 -9 V +.32 g 5772 951 M +-17 -20 V +.32 g 5755 931 M +-3 -4 V +.32 g 5752 927 M +-14 -17 V +.32 g 5738 910 M +-13 -15 V +stroke 5725 895 M +.32 g 5725 895 M +-4 -5 V +.32 g 5721 890 M +-17 -20 V +.32 g 5704 870 M +-6 -7 V +.32 g 5698 863 M +-11 -13 V +.32 g 5687 850 M +-16 -19 V +.32 g 5671 831 M +-1 -1 V +.32 g 5670 830 M +-17 -20 V +.32 g 5653 810 M +-10 -11 V +.32 g 5643 799 M +-8 -9 V +.32 g 5635 790 M +-17 -21 V +.32 g 5618 769 M +-2 -2 V +.32 g 5616 767 M +-15 -18 V +.32 g 5601 749 M +-12 -14 V +.32 g 5589 735 M +-6 -6 V +.32 g 5583 729 M +-17 -20 V +.32 g 5566 709 M +-4 -5 V +.32 g 5562 704 M +-13 -15 V +.32 g 5549 689 M +-15 -17 V +.32 g 5534 672 M +-2 -3 V +.32 g 5532 669 M +-17 -21 V +.32 g 5515 648 M +-8 -8 V +.32 g 5507 640 M +-10 -12 V +.32 g 5497 628 M +-16 -20 V +.32 g 5481 608 M +-1 -1 V +.32 g 5480 607 M +-16 -19 V +0 g .3 g 956 1895 M +.3 g 956 1895 M +-1 3 V +.3 g 955 1898 M +-10 20 V +.3 g 945 1918 M +-10 20 V +.3 g 935 1938 M +-6 13 V +.3 g 929 1951 M +-3 8 V +.3 g 926 1959 M +-10 20 V +.3 g 916 1979 M +-10 20 V +.3 g 906 1999 M +-4 10 V +.3 g 902 2009 M +-5 10 V +.3 g 897 2019 M +-9 20 V +.3 g 888 2039 M +-10 20 V +.3 g 878 2059 M +-3 8 V +.3 g 875 2067 M +-6 12 V +.3 g 869 2079 M +-9 21 V +.3 g 860 2100 M +-10 20 V +.3 g 850 2120 M +-3 7 V +.3 g 847 2127 M +-6 13 V +.3 g 841 2140 M +-9 20 V +.3 g 832 2160 M +-9 20 V +.3 g 823 2180 M +-3 7 V +.3 g 820 2187 M +-6 13 V +.3 g 814 2200 M +-9 21 V +.3 g 805 2221 M +-9 20 V +.3 g 796 2241 M +-3 8 V +.3 g 793 2249 M +-6 12 V +.3 g 787 2261 M +-8 20 V +.3 g 779 2281 M +-9 20 V +stroke 770 2301 M +.3 g 770 2301 M +-5 10 V +.3 g 765 2311 M +-4 10 V +.3 g 761 2321 M +-9 20 V +.3 g 752 2341 M +-8 21 V +.3 g 744 2362 M +-6 12 V +.3 g 738 2374 M +-3 8 V +.3 g 735 2382 M +-9 20 V +.3 g 726 2402 M +-8 20 V +.3 g 718 2422 M +-7 16 V +.3 g 711 2438 M +-2 4 V +.3 g 709 2442 M +-8 20 V +.3 g 701 2462 M +-9 21 V +.3 g 692 2483 M +-8 19 V +.3 g 684 2502 M +-1 1 V +.3 g 683 2503 M +-8 20 V +.3 g 675 2523 M +-8 20 V +.3 g 667 2543 M +-9 20 V +.3 g 658 2563 M +-1 4 V +.3 g 657 2567 M +-7 16 V +.3 g 650 2583 M +-9 21 V +.3 g 641 2604 M +-8 20 V +.3 g 633 2624 M +-4 9 V +.3 g 629 2633 M +-4 11 V +.3 g 625 2644 M +-9 20 V +.3 g 616 2664 M +-8 20 V +.3 g 608 2684 M +-6 14 V +0 g .3 g 1892 588 M +.3 g 1892 588 M +-9 10 V +.3 g 1883 598 M +-9 10 V +.3 g 1874 608 M +-18 20 V +.3 g 1856 628 M +0 1 V +.3 g 1856 629 M +-17 19 V +.3 g 1839 648 M +-11 12 V +.3 g 1828 660 M +-7 9 V +.3 g 1821 669 M +-18 20 V +.3 g 1803 689 M +-2 2 V +.3 g 1801 691 M +-16 18 V +.3 g 1785 709 M +-11 12 V +.3 g 1774 721 M +-8 8 V +.3 g 1766 729 M +-18 20 V +.3 g 1748 749 M +-1 2 V +.3 g 1747 751 M +-17 18 V +.3 g 1730 769 M +-11 12 V +.3 g 1719 781 M +-7 9 V +.3 g 1712 790 M +-18 20 V +.3 g 1694 810 M +-2 2 V +.3 g 1692 812 M +-16 18 V +.3 g 1676 830 M +-11 12 V +.3 g 1665 842 M +-7 8 V +.3 g 1658 850 M +-18 20 V +.3 g 1640 870 M +-2 3 V +.3 g 1638 873 M +-16 17 V +.3 g 1622 890 M +-12 13 V +stroke 1610 903 M +.3 g 1610 903 M +-6 7 V +.3 g 1604 910 M +-18 21 V +.3 g 1586 931 M +-3 3 V +.3 g 1583 934 M +-14 17 V +.3 g 1569 951 M +-13 15 V +.3 g 1556 966 M +-5 5 V +.3 g 1551 971 M +-17 20 V +.3 g 1534 991 M +-5 7 V +.3 g 1529 998 M +-12 13 V +.3 g 1517 1011 M +-16 19 V +.3 g 1501 1030 M +-1 1 V +.3 g 1500 1031 M +-16 21 V +.3 g 1484 1052 M +-10 12 V +.3 g 1474 1064 M +-7 8 V +.3 g 1467 1072 M +-16 20 V +.3 g 1451 1092 M +-4 5 V +.3 g 1447 1097 M +-12 15 V +.3 g 1435 1112 M +-15 20 V +.3 g 1420 1132 M +-16 20 V +.3 g 1404 1152 M +-12 16 V +.3 g 1392 1168 M +-3 4 V +.3 g 1389 1172 M +-15 21 V +.3 g 1374 1193 M +-9 11 V +.3 g 1365 1204 M +-6 9 V +.3 g 1359 1213 M +-15 20 V +.3 g 1344 1233 M +-6 9 V +.3 g 1338 1242 M +-8 11 V +.3 g 1330 1253 M +-14 20 V +.3 g 1316 1273 M +-5 8 V +.3 g 1311 1281 M +-9 12 V +.3 g 1302 1293 M +-14 21 V +.3 g 1288 1314 M +-5 6 V +.3 g 1283 1320 M +-9 14 V +.3 g 1274 1334 M +-13 20 V +.3 g 1261 1354 M +-5 7 V +.3 g 1256 1361 M +-8 13 V +.3 g 1248 1374 M +-13 20 V +.3 g 1235 1394 M +-6 9 V +.3 g 1229 1403 M +-7 11 V +.3 g 1222 1414 M +-13 21 V +.3 g 1209 1435 M +-7 12 V +.3 g 1202 1447 M +-5 8 V +.3 g 1197 1455 M +-13 20 V +.3 g 1184 1475 M +-10 16 V +.3 g 1174 1491 M +-2 4 V +.3 g 1172 1495 M +-12 20 V +.3 g 1160 1515 M +-12 20 V +.3 g 1148 1535 M +-1 2 V +.3 g 1147 1537 M +-10 18 V +.3 g 1137 1555 M +-12 21 V +.3 g 1125 1576 M +-5 9 V +.3 g 1120 1585 M +-6 11 V +stroke 1114 1596 M +.3 g 1114 1596 M +-12 20 V +.3 g 1102 1616 M +-9 17 V +.3 g 1093 1633 M +-2 3 V +.3 g 1091 1636 M +-11 20 V +.3 g 1080 1656 M +-11 20 V +.3 g 1069 1676 M +-4 7 V +.3 g 1065 1683 M +-7 14 V +.3 g 1058 1697 M +-11 20 V +.3 g 1047 1717 M +-9 17 V +.3 g 1038 1734 M +-1 3 V +.3 g 1037 1737 M +-11 20 V +.3 g 1026 1757 M +-10 20 V +.3 g 1016 1777 M +-5 10 V +.3 g 1011 1787 M +-6 10 V +.3 g 1005 1797 M +-10 20 V +.3 g 995 1817 M +-10 21 V +.3 g 985 1838 M +-1 2 V +.3 g 984 1840 M +-9 18 V +.3 g 975 1858 M +-10 20 V +.3 g 965 1878 M +-9 17 V +0 g .3 g 2989 4417 M +.3 g 2989 4417 M +-16 11 V +.3 g 2973 4428 M +-16 10 V +.3 g 2957 4438 M +-11 7 V +.3 g 2946 4445 M +-22 13 V +.3 g 2924 4458 M +-6 3 V +.3 g 2918 4461 M +-27 17 V +.3 g .3 g 2891 4478 M +-27 16 V +.3 g 2864 4494 M +-7 4 V +.3 g 2857 4498 M +-20 12 V +.3 g 2837 4510 M +-14 8 V +.3 g 2823 4518 M +-14 8 V +.3 g 2809 4526 M +-22 12 V +.3 g 2787 4538 M +-5 3 V +.3 g 2782 4541 M +-27 16 V +.3 g 2755 4557 M +-4 2 V +.3 g 2751 4559 M +-23 13 V +.3 g 2728 4572 M +-14 7 V +.3 g 2714 4579 M +-14 7 V +.3 g 2700 4586 M +-23 13 V +.3 g 2677 4599 M +-4 2 V +.3 g 2673 4601 M +-27 14 V +.3 g 2646 4615 M +-7 4 V +0 g .3 g 4630 4619 M +.3 g 4630 4619 M +-22 -13 V +.3 g 4608 4606 M +-11 -7 V +.3 g 4597 4599 M +-16 -10 V +.3 g 4581 4589 M +-18 -10 V +.3 g 4563 4579 M +-10 -7 V +.3 g 4553 4572 M +-22 -13 V +.3 g 4531 4559 M +-5 -3 V +.3 g 4526 4556 M +-27 -18 V +.3 g 4499 4538 M +-27 -17 V +stroke 4472 4521 M +.3 g 4472 4521 M +-5 -3 V +.3 g 4467 4518 M +-23 -15 V +.3 g 4444 4503 M +-7 -5 V +.3 g 4437 4498 M +-20 -13 V +.3 g 4417 4485 M +-11 -7 V +.3 g 4406 4478 M +-16 -11 V +.3 g 4390 4467 M +-14 -9 V +.3 g 4376 4458 M +-13 -9 V +.3 g 4363 4449 M +-17 -11 V +.3 g 4346 4438 M +-11 -8 V +.3 g 4335 4430 M +-19 -13 V +.3 g 4316 4417 M +-8 -5 V +.3 g 4308 4412 M +-21 -15 V +.3 g 4287 4397 M +-6 -4 V +.3 g 4281 4393 M +-24 -16 V +.3 g 4257 4377 M +-3 -2 V +.3 g 4254 4375 M +-26 -18 V +.3 g 4228 4357 M +-2 -1 V +.3 g 4226 4356 M +-27 -18 V +.3 g 4199 4338 M +-1 -1 V +.3 g 4198 4337 M +-26 -17 V +.3 g 4172 4320 M +-5 -3 V +.3 g 4167 4317 M +-22 -15 V +.3 g 4145 4302 M +-9 -5 V +.3 g 4136 4297 M +-19 -13 V +.3 g 4117 4284 M +-13 -8 V +.3 g 4104 4276 M +-14 -9 V +.3 g 4090 4267 M +-19 -11 V +.3 g 4071 4256 M +-8 -5 V +.3 g 4063 4251 M +-26 -15 V +.3 g 4037 4236 M +-1 -1 V +.3 g 4036 4235 M +-28 -15 V +.3 g 4008 4220 M +-8 -4 V +.3 g 4000 4216 M +-19 -10 V +.3 g 3981 4206 M +-20 -10 V +.3 g 3961 4196 M +-7 -4 V +.3 g 3954 4192 M +-27 -12 V +.3 g 3927 4180 M +-10 -4 V +.3 g 3917 4176 M +-18 -8 V +.3 g 3899 4168 M +-27 -10 V +.3 g 3872 4158 M +-7 -3 V +.3 g 3865 4155 M +-20 -7 V +.3 g 3845 4148 M +-27 -8 V +.3 g 3818 4140 M +-20 -5 V +.3 g 3798 4135 M +-8 -2 V +.3 g 3790 4133 M +-27 -5 V +.3 g 3763 4128 M +-27 -4 V +.3 g 3736 4124 M +-27 -3 V +.3 g 3709 4121 M +-28 -2 V +.3 g 3681 4119 M +-27 0 V +.3 g 3654 4119 M +-27 1 V +.3 g 3627 4120 M +-27 3 V +stroke 3600 4123 M +.3 g 3600 4123 M +-28 3 V +.3 g 3572 4126 M +-27 6 V +.3 g 3545 4132 M +-15 3 V +.3 g 3530 4135 M +-12 3 V +.3 g 3518 4138 M +-27 8 V +.3 g 3491 4146 M +-28 8 V +.3 g 3463 4154 M +-2 1 V +.3 g 3461 4155 M +-25 9 V +.3 g 3436 4164 M +-27 11 V +.3 g 3409 4175 M +-1 1 V +.3 g 3408 4176 M +-26 11 V +.3 g 3382 4187 M +-19 9 V +.3 g 3363 4196 M +-9 4 V +.3 g 3354 4200 M +-27 14 V +.3 g 3327 4214 M +-4 2 V +.3 g 3323 4216 M +-23 12 V +.3 g 3300 4228 M +-15 8 V +.3 g 3285 4236 M +-12 7 V +.3 g 3273 4243 M +-24 13 V +.3 g 3249 4256 M +-4 2 V +.3 g 3245 4258 M +-27 16 V +.3 g 3218 4274 M +-3 2 V +.3 g 3215 4276 M +-24 15 V +.3 g 3191 4291 M +-10 6 V +.3 g 3181 4297 M +-17 10 V +.3 g 3164 4307 M +-15 10 V +.3 g 3149 4317 M +-13 7 V +.3 g 3136 4324 M +-19 13 V +.3 g 3117 4337 M +-8 5 V +.3 g 3109 4342 M +-24 15 V +.3 g 3085 4357 M +-3 2 V +.3 g 3082 4359 M +-27 17 V +.3 g 3055 4376 M +-2 1 V +.3 g 3053 4377 M +-26 16 V +.3 g 3027 4393 M +-6 4 V +.3 g 3021 4397 M +-21 14 V +.3 g 3000 4411 M +-11 6 V +0 g .3 g 6052 1406 M +.3 g 6052 1406 M +-8 -12 V +.3 g 6044 1394 M +-13 -20 V +.3 g 6031 1374 M +-6 -9 V +.3 g 6025 1365 M +-8 -11 V +.3 g 6017 1354 M +-14 -20 V +.3 g 6003 1334 M +-5 -8 V +.3 g 5998 1326 M +-10 -12 V +.3 g 5988 1314 M +-14 -21 V +.3 g 5974 1293 M +-4 -5 V +.3 g 5970 1288 M +-11 -15 V +.3 g 5959 1273 M +-14 -20 V +.3 g 5945 1253 M +-2 -2 V +.3 g 5943 1251 M +-13 -18 V +.3 g 5930 1233 M +-14 -19 V +.3 g 5916 1214 M +-2 -1 V +stroke 5914 1213 M +.3 g 5914 1213 M +-15 -20 V +.3 g 5899 1193 M +-10 -14 V +.3 g 5889 1179 M +-6 -7 V +.3 g 5883 1172 M +-15 -20 V +.3 g 5868 1152 M +-7 -8 V +.3 g 5861 1144 M +-10 -12 V +.3 g 5851 1132 M +-16 -20 V +.3 g 5835 1112 M +-1 -2 V +.3 g 5834 1110 M +-15 -18 V +.3 g 5819 1092 M +-12 -15 V +.3 g 5807 1077 M +-5 -5 V +.3 g 5802 1072 M +-16 -20 V +.3 g 5786 1052 M +-6 -8 V +.3 g 5780 1044 M +-11 -13 V +.3 g 5769 1031 M +-17 -20 V +.3 g .3 g 5752 1011 M +-17 -20 V +.3 g 5735 991 M +-10 -12 V +.3 g 5725 979 M +-7 -8 V +.3 g 5718 971 M +-17 -20 V +.3 g 5701 951 M +-3 -4 V +.3 g 5698 947 M +-15 -16 V +.3 g 5683 931 M +-12 -15 V +.3 g 5671 916 M +-5 -6 V +.3 g 5666 910 M +-18 -20 V +.3 g 5648 890 M +-5 -6 V +.3 g 5643 884 M +-12 -14 V +.3 g 5631 870 M +-15 -17 V +.3 g 5616 853 M +-2 -3 V +.3 g 5614 850 M +-18 -20 V +.3 g 5596 830 M +-7 -9 V +.3 g 5589 821 M +-10 -11 V +.3 g 5579 810 M +-17 -20 V +.3 g 5562 790 M +-18 -21 V +.3 g 5544 769 M +-10 -11 V +.3 g 5534 758 M +-7 -9 V +.3 g 5527 749 M +-17 -20 V +.3 g 5510 729 M +-3 -3 V +.3 g 5507 726 M +-14 -17 V +.3 g 5493 709 M +-13 -15 V +.3 g 5480 694 M +-4 -5 V +.3 g 5476 689 M +-17 -20 V +.3 g 5459 669 M +-6 -8 V +.3 g 5453 661 M +-11 -13 V +.3 g 5442 648 M +-17 -20 V +.3 g .3 g 5425 628 M +-16 -20 V +.3 g 5409 608 M +-11 -13 V +.3 g 5398 595 M +-6 -7 V +0 g .28 g 1011 1871 M +.28 g 1011 1871 M +-4 7 V +.28 g 1007 1878 M +-10 20 V +.28 g 997 1898 M +-10 20 V +.28 g 987 1918 M +-3 6 V +.28 g 984 1924 M +-7 14 V +stroke 977 1938 M +.28 g 977 1938 M +-10 21 V +.28 g 967 1959 M +-10 20 V +.28 g 957 1979 M +-1 0 V +.28 g 956 1979 M +-9 20 V +.28 g 947 1999 M +-10 20 V +.28 g 937 2019 M +-8 17 V +.28 g 929 2036 M +-2 3 V +.28 g 927 2039 M +-9 20 V +.28 g 918 2059 M +-10 20 V +.28 g 908 2079 M +-6 14 V +.28 g 902 2093 M +-3 7 V +.28 g 899 2100 M +-10 20 V +.28 g 889 2120 M +-9 20 V +.28 g 880 2140 M +-5 12 V +.28 g 875 2152 M +-4 8 V +.28 g 871 2160 M +-9 20 V +.28 g 862 2180 M +-10 20 V +.28 g 852 2200 M +-5 12 V +.28 g 847 2212 M +-4 9 V +.28 g 843 2221 M +-9 20 V +.28 g 834 2241 M +-9 20 V +.28 g 825 2261 M +-5 11 V +.28 g 820 2272 M +-4 9 V +.28 g 816 2281 M +-9 20 V +.28 g 807 2301 M +-9 20 V +.28 g 798 2321 M +-5 13 V +.28 g 793 2334 M +-3 7 V +.28 g 790 2341 M +-9 21 V +.28 g 781 2362 M +-9 20 V +.28 g 772 2382 M +-7 15 V +.28 g 765 2397 M +-2 5 V +.28 g 763 2402 M +-8 20 V +.28 g 755 2422 M +-9 20 V +.28 g 746 2442 M +-8 18 V +.28 g 738 2460 M +-1 2 V +.28 g 737 2462 M +-8 21 V +.28 g 729 2483 M +-9 20 V +.28 g 720 2503 M +-8 20 V +.28 g 712 2523 M +-1 1 V +.28 g 711 2524 M +-8 19 V +.28 g 703 2543 M +-8 20 V +.28 g 695 2563 M +-9 20 V +.28 g 686 2583 M +-2 6 V +.28 g 684 2589 M +-6 15 V +.28 g 678 2604 M +-9 20 V +.28 g 669 2624 M +-8 20 V +.28 g 661 2644 M +-4 10 V +.28 g 657 2654 M +-5 10 V +.28 g 652 2664 M +-8 20 V +.28 g 644 2684 M +-8 20 V +.28 g 636 2704 M +-7 16 V +.28 g 629 2720 M +-2 4 V +stroke 627 2724 M +.28 g 627 2724 M +-8 21 V +.28 g 619 2745 M +-8 20 V +.28 g 611 2765 M +-9 20 V +.28 g 602 2785 M +0 1 V +0 g .28 g 1969 588 M +.28 g 1969 588 M +-4 6 V +.28 g 1965 594 M +-13 14 V +.28 g 1952 608 M +-15 17 V +.28 g 1937 625 M +-2 3 V +.28 g 1935 628 M +-18 20 V +.28 g 1917 648 M +-7 9 V +.28 g 1910 657 M +-10 12 V +.28 g 1900 669 M +-17 19 V +.28 g 1883 688 M +-1 1 V +.28 g 1882 689 M +-18 20 V +.28 g 1864 709 M +-8 10 V +.28 g 1856 719 M +-9 10 V +.28 g 1847 729 M +-18 20 V +.28 g 1829 749 M +-1 1 V +.28 g 1828 750 M +-17 19 V +.28 g 1811 769 M +-10 11 V +.28 g 1801 780 M +-9 10 V +.28 g 1792 790 M +-18 20 V +.28 g .28 g 1774 810 M +-18 20 V +.28 g 1756 830 M +-9 10 V +.28 g 1747 840 M +-9 10 V +.28 g 1738 850 M +-19 20 V +.28 g 1719 870 M +-18 20 V +.28 g 1701 890 M +-9 10 V +.28 g 1692 900 M +-9 10 V +.28 g 1683 910 M +-18 20 V +.28 g 1665 930 M +-1 1 V +.28 g 1664 931 M +-18 20 V +.28 g 1646 951 M +-8 9 V +.28 g 1638 960 M +-10 11 V +.28 g 1628 971 M +-18 20 V +.28 g .28 g 1610 991 M +-18 20 V +.28 g 1592 1011 M +-9 11 V +.28 g 1583 1022 M +-8 9 V +.28 g 1575 1031 M +-18 21 V +.28 g 1557 1052 M +-1 1 V +.28 g 1556 1053 M +-16 19 V +.28 g 1540 1072 M +-11 12 V +.28 g 1529 1084 M +-7 8 V +.28 g 1522 1092 M +-17 20 V +.28 g 1505 1112 M +-4 5 V +.28 g 1501 1117 M +-13 15 V +.28 g 1488 1132 M +-14 18 V +.28 g 1474 1150 M +-2 2 V +.28 g 1472 1152 M +-16 20 V +.28 g 1456 1172 M +-9 11 V +.28 g 1447 1183 M +-8 10 V +.28 g 1439 1193 M +-16 20 V +stroke 1423 1213 M +.28 g 1423 1213 M +-3 5 V +.28 g 1420 1218 M +-12 15 V +.28 g 1408 1233 M +-16 20 V +.28 g .28 g 1392 1253 M +-15 20 V +.28 g 1377 1273 M +-12 16 V +.28 g 1365 1289 M +-3 4 V +.28 g 1362 1293 M +-15 21 V +.28 g 1347 1314 M +-9 13 V +.28 g 1338 1327 M +-5 7 V +.28 g 1333 1334 M +-14 20 V +.28 g 1319 1354 M +-8 11 V +.28 g 1311 1365 M +-7 9 V +.28 g 1304 1374 M +-13 20 V +.28 g 1291 1394 M +-8 11 V +.28 g 1283 1405 M +-6 9 V +.28 g 1277 1414 M +-14 21 V +.28 g 1263 1435 M +-7 10 V +.28 g 1256 1445 M +-6 10 V +.28 g 1250 1455 M +-13 20 V +.28 g 1237 1475 M +-8 12 V +.28 g 1229 1487 M +-5 8 V +.28 g 1224 1495 M +-13 20 V +.28 g 1211 1515 M +-9 16 V +.28 g 1202 1531 M +-3 4 V +.28 g 1199 1535 M +-13 20 V +.28 g 1186 1555 M +-12 20 V +.28 g 1174 1575 M +0 1 V +.28 g 1174 1576 M +-12 20 V +.28 g 1162 1596 M +-12 20 V +.28 g 1150 1616 M +-3 5 V +.28 g 1147 1621 M +-9 15 V +.28 g 1138 1636 M +-11 20 V +.28 g 1127 1656 M +-7 12 V +.28 g 1120 1668 M +-5 8 V +.28 g 1115 1676 M +-11 21 V +.28 g 1104 1697 M +-11 20 V +.28 g .28 g 1093 1717 M +-11 20 V +.28 g 1082 1737 M +-11 20 V +.28 g 1071 1757 M +-6 10 V +.28 g 1065 1767 M +-5 10 V +.28 g 1060 1777 M +-11 20 V +.28 g 1049 1797 M +-11 20 V +.28 g 1038 1817 M +0 1 V +.28 g 1038 1818 M +-10 20 V +.28 g 1028 1838 M +-11 20 V +.28 g 1017 1858 M +-6 13 V +0 g .28 g 3173 4216 M +.28 g 3173 4216 M +-9 6 V +.28 g 3164 4222 M +-23 14 V +.28 g 3141 4236 M +-5 3 V +.28 g 3136 4239 M +-27 17 V +.28 g .28 g 3109 4256 M +-27 18 V +.28 g 3082 4274 M +-4 2 V +stroke 3078 4276 M +.28 g 3078 4276 M +-23 15 V +.28 g 3055 4291 M +-9 6 V +.28 g 3046 4297 M +-19 12 V +.28 g 3027 4309 M +-12 8 V +.28 g 3015 4317 M +-15 9 V +.28 g 3000 4326 M +-17 11 V +.28 g 2983 4337 M +-10 7 V +.28 g 2973 4344 M +-22 13 V +.28 g 2951 4357 M +-5 4 V +.28 g 2946 4361 M +-27 16 V +.28 g 2919 4377 M +-1 0 V +.28 g 2918 4377 M +-27 17 V +.28 g 2891 4394 M +-5 3 V +.28 g 2886 4397 M +-22 13 V +.28 g 2864 4410 M +-12 7 V +.28 g 2852 4417 M +-15 9 V +.28 g 2837 4426 M +-20 12 V +.28 g 2817 4438 M +-8 4 V +.28 g 2809 4442 M +-27 16 V +.28 g .28 g 2782 4458 M +-27 15 V +.28 g 2755 4473 M +-10 5 V +.28 g 2745 4478 M +-17 10 V +.28 g 2728 4488 M +-20 10 V +.28 g 2708 4498 M +-8 4 V +.28 g 2700 4502 M +-27 15 V +.28 g 2673 4517 M +-3 1 V +.28 g 2670 4518 M +-24 13 V +.28 g 2646 4531 M +-15 7 V +.28 g 2631 4538 M +-12 7 V +.28 g 2619 4545 M +-27 14 V +.28 g 2592 4559 M +-1 0 V +.28 g 2591 4559 M +-27 14 V +.28 g 2564 4573 M +-12 6 V +.28 g 2552 4579 M +-15 8 V +.28 g 2537 4587 M +-24 12 V +.28 g 2513 4599 M +-3 2 V +.28 g 2510 4601 M +-28 14 V +.28 g 2482 4615 M +-8 4 V +0 g .28 g 4778 4619 M +.28 g 4778 4619 M +-7 -4 V +.28 g 4771 4615 M +-27 -15 V +.28 g 4744 4600 M +-2 -1 V +.28 g 4742 4599 M +-25 -14 V +.28 g 4717 4585 M +-11 -6 V +.28 g 4706 4579 M +-16 -10 V +.28 g 4690 4569 M +-19 -10 V +.28 g 4671 4559 M +-9 -5 V +.28 g 4662 4554 M +-26 -16 V +.28 g 4636 4538 M +-1 0 V +.28 g 4635 4538 M +-27 -16 V +.28 g 4608 4522 M +-6 -4 V +.28 g 4602 4518 M +-21 -13 V +.28 g 4581 4505 M +-12 -7 V +stroke 4569 4498 M +.28 g 4569 4498 M +-16 -9 V +.28 g 4553 4489 M +-17 -11 V +.28 g 4536 4478 M +-10 -6 V +.28 g 4526 4472 M +-22 -14 V +.28 g 4504 4458 M +-5 -3 V +.28 g 4499 4455 M +-27 -17 V +.28 g 4472 4438 M +0 -1 V +.28 g 4472 4437 M +-28 -18 V +.28 g 4444 4419 M +-2 -2 V +.28 g 4442 4417 M +-25 -16 V +.28 g 4417 4401 M +-6 -4 V +.28 g 4411 4397 M +-21 -14 V +.28 g 4390 4383 M +-9 -6 V +.28 g 4381 4377 M +-18 -13 V +.28 g 4363 4364 M +-11 -7 V +.28 g 4352 4357 M +-17 -11 V +.28 g 4335 4346 M +-13 -9 V +.28 g 4322 4337 M +-14 -10 V +.28 g 4308 4327 M +-15 -10 V +.28 g 4293 4317 M +-12 -9 V +.28 g 4281 4308 M +-17 -11 V +.28 g 4264 4297 M +-10 -8 V +.28 g 4254 4289 M +-19 -13 V +.28 g 4235 4276 M +-9 -5 V +.28 g 4226 4271 M +-21 -15 V +.28 g 4205 4256 M +-6 -4 V +.28 g 4199 4252 M +-24 -16 V +.28 g 4175 4236 M +-3 -2 V +.28 g 4172 4234 M +-27 -18 V +.28 g .28 g 4145 4216 M +-28 -18 V +.28 g 4117 4198 M +-3 -2 V +.28 g 4114 4196 M +-24 -15 V +.28 g 4090 4181 M +-8 -5 V +.28 g 4082 4176 M +-19 -12 V +.28 g 4063 4164 M +-14 -9 V +.28 g 4049 4155 M +-13 -7 V +.28 g 4036 4148 M +-22 -13 V +.28 g 4014 4135 M +-6 -3 V +.28 g 4008 4132 M +-27 -14 V +.28 g 3981 4118 M +-5 -3 V +.28 g 3976 4115 M +-22 -11 V +.28 g 3954 4104 M +-19 -9 V +.28 g 3935 4095 M +-8 -4 V +.28 g 3927 4091 M +-28 -12 V +.28 g 3899 4079 M +-11 -4 V +.28 g 3888 4075 M +-16 -6 V +.28 g 3872 4069 M +-27 -10 V +.28 g 3845 4059 M +-15 -4 V +.28 g 3830 4055 M +-12 -4 V +.28 g 3818 4051 M +-28 -7 V +.28 g 3790 4044 M +-27 -6 V +.28 g 3763 4038 M +-22 -3 V +stroke 3741 4035 M +.28 g 3741 4035 M +-5 -1 V +.28 g 3736 4034 M +-27 -3 V +.28 g 3709 4031 M +-28 -2 V +.28 g 3681 4029 M +-27 0 V +.28 g 3654 4029 M +-27 1 V +.28 g 3627 4030 M +-27 3 V +.28 g 3600 4033 M +-12 2 V +.28 g 3588 4035 M +-16 2 V +.28 g 3572 4037 M +-27 5 V +.28 g 3545 4042 M +-27 7 V +.28 g 3518 4049 M +-21 6 V +.28 g 3497 4055 M +-6 1 V +.28 g 3491 4056 M +-28 9 V +.28 g 3463 4065 M +-25 10 V +.28 g 3438 4075 M +-2 1 V +.28 g 3436 4076 M +-27 11 V +.28 g 3409 4087 M +-19 8 V +.28 g 3390 4095 M +-8 4 V +.28 g 3382 4099 M +-28 13 V +.28 g 3354 4112 M +-6 3 V +.28 g 3348 4115 M +-21 11 V +.28 g 3327 4126 M +-17 9 V +.28 g 3310 4135 M +-10 6 V +.28 g 3300 4141 M +-27 14 V +.28 g 3273 4155 M +0 1 V +.28 g 3273 4156 M +-28 16 V +.28 g 3245 4172 M +-6 4 V +.28 g 3239 4176 M +-21 12 V +.28 g 3218 4188 M +-13 8 V +.28 g 3205 4196 M +-14 9 V +.28 g 3191 4205 M +-18 11 V +0 g .28 g 6052 1490 M +.28 g 6052 1490 M +-10 -15 V +.28 g 6042 1475 M +-14 -20 V +.28 g 6028 1455 M +-3 -5 V +.28 g 6025 1450 M +-11 -15 V +.28 g 6014 1435 M +-14 -21 V +.28 g 6000 1414 M +-2 -3 V +.28 g 5998 1411 M +-13 -17 V +.28 g 5985 1394 M +-14 -20 V +.28 g 5971 1374 M +-1 -1 V +.28 g 5970 1373 M +-14 -19 V +.28 g 5956 1354 M +-13 -18 V +.28 g 5943 1336 M +-2 -2 V +.28 g 5941 1334 M +-15 -20 V +.28 g 5926 1314 M +-10 -14 V +.28 g 5916 1300 M +-6 -7 V +.28 g 5910 1293 M +-15 -20 V +.28 g 5895 1273 M +-6 -8 V +.28 g 5889 1265 M +-10 -12 V +.28 g 5879 1253 M +-16 -20 V +.28 g 5863 1233 M +-2 -2 V +.28 g 5861 1231 M +-14 -18 V +stroke 5847 1213 M +.28 g 5847 1213 M +-13 -16 V +.28 g 5834 1197 M +-3 -4 V +.28 g 5831 1193 M +-17 -21 V +.28 g 5814 1172 M +-7 -8 V +.28 g 5807 1164 M +-10 -12 V +.28 g 5797 1152 M +-17 -20 V +.28 g 5780 1132 M +0 -1 V +.28 g 5780 1131 M +-17 -19 V +.28 g 5763 1112 M +-11 -13 V +.28 g 5752 1099 M +-6 -7 V +.28 g 5746 1092 M +-17 -20 V +.28 g 5729 1072 M +-4 -5 V +.28 g 5725 1067 M +-13 -15 V +.28 g 5712 1052 M +-14 -16 V +.28 g 5698 1036 M +-4 -5 V +.28 g 5694 1031 M +-17 -20 V +.28 g 5677 1011 M +-6 -7 V +.28 g 5671 1004 M +-12 -13 V +.28 g 5659 991 M +-16 -18 V +.28 g 5643 973 M +-1 -2 V +.28 g 5642 971 M +-18 -20 V +.28 g 5624 951 M +-8 -9 V +.28 g 5616 942 M +-10 -11 V +.28 g 5606 931 M +-17 -21 V +.28 g .28 g 5589 910 M +-18 -20 V +.28 g 5571 890 M +-9 -11 V +.28 g 5562 879 M +-8 -9 V +.28 g 5554 870 M +-17 -20 V +.28 g 5537 850 M +-3 -3 V +.28 g 5534 847 M +-15 -17 V +.28 g 5519 830 M +-12 -14 V +.28 g 5507 816 M +-5 -6 V +.28 g 5502 810 M +-17 -20 V +.28 g 5485 790 M +-5 -6 V +.28 g 5480 784 M +-12 -15 V +.28 g 5468 769 M +-15 -18 V +.28 g 5453 751 M +-2 -2 V +.28 g 5451 749 M +-17 -20 V +.28 g 5434 729 M +-9 -11 V +.28 g 5425 718 M +-8 -9 V +.28 g 5417 709 M +-16 -20 V +.28 g 5401 689 M +-3 -4 V +.28 g 5398 685 M +-14 -16 V +.28 g 5384 669 M +-13 -17 V +.28 g 5371 652 M +-3 -4 V +.28 g 5368 648 M +-16 -20 V +.28 g 5352 628 M +-8 -10 V +.28 g 5344 618 M +-9 -10 V +.28 g 5335 608 M +-16 -20 V +0 g .26 g 1074 1838 M +.26 g 1074 1838 M +-9 16 V +.26 g 1065 1854 M +-2 4 V +.26 g 1063 1858 M +-11 20 V +stroke 1052 1878 M +.26 g 1052 1878 M +-10 20 V +.26 g 1042 1898 M +-4 7 V +.26 g 1038 1905 M +-7 13 V +.26 g 1031 1918 M +-10 20 V +.26 g 1021 1938 M +-10 20 V +.26 g 1011 1958 M +-1 1 V +.26 g 1010 1959 M +-10 20 V +.26 g 1000 1979 M +-10 20 V +.26 g 990 1999 M +-6 13 V +.26 g 984 2012 M +-4 7 V +.26 g 980 2019 M +-10 20 V +.26 g 970 2039 M +-10 20 V +.26 g 960 2059 M +-4 8 V +.26 g 956 2067 M +-6 12 V +.26 g 950 2079 M +-10 21 V +.26 g 940 2100 M +-9 20 V +.26 g 931 2120 M +-2 3 V +.26 g 929 2123 M +-8 17 V +.26 g 921 2140 M +-9 20 V +.26 g 912 2160 M +-10 20 V +.26 g 902 2180 M +0 1 V +.26 g 902 2181 M +-9 19 V +.26 g 893 2200 M +-9 21 V +.26 g 884 2221 M +-9 19 V +.26 g 875 2240 M +-1 1 V +.26 g 874 2241 M +-9 20 V +.26 g 865 2261 M +-9 20 V +.26 g 856 2281 M +-9 19 V +.26 g 847 2300 M +0 1 V +.26 g 847 2301 M +-9 20 V +.26 g 838 2321 M +-9 20 V +.26 g 829 2341 M +-9 20 V +.26 g 820 2361 M +0 1 V +.26 g 820 2362 M +-9 20 V +.26 g 811 2382 M +-9 20 V +.26 g 802 2402 M +-9 20 V +.26 g 793 2422 M +0 1 V +.26 g 793 2423 M +-9 19 V +.26 g 784 2442 M +-8 20 V +.26 g 776 2462 M +-9 21 V +.26 g 767 2483 M +-2 3 V +.26 g 765 2486 M +-7 17 V +.26 g 758 2503 M +-8 20 V +.26 g 750 2523 M +-9 20 V +.26 g 741 2543 M +-3 6 V +.26 g 738 2549 M +-6 14 V +.26 g 732 2563 M +-8 20 V +.26 g 724 2583 M +-9 21 V +.26 g 715 2604 M +-4 10 V +.26 g 711 2614 M +-4 10 V +.26 g 707 2624 M +-8 20 V +.26 g 699 2644 M +-9 20 V +stroke 690 2664 M +.26 g 690 2664 M +-6 15 V +.26 g 684 2679 M +-2 5 V +.26 g 682 2684 M +-9 20 V +.26 g 673 2704 M +-8 20 V +.26 g 665 2724 M +-8 21 V +.26 g 657 2745 M +-9 20 V +.26 g 648 2765 M +-8 20 V +.26 g 640 2785 M +-8 20 V +.26 g 632 2805 M +-3 6 V +.26 g 629 2811 M +-6 14 V +.26 g 623 2825 M +-8 20 V +.26 g 615 2845 M +-8 21 V +.26 g 607 2866 M +-5 11 V +0 g .26 g 2047 588 M +.26 g 2047 588 M +-1 1 V +.26 g 2046 589 M +-15 19 V +.26 g 2031 608 M +-12 14 V +.26 g 2019 622 M +-5 6 V +.26 g 2014 628 M +-17 20 V +.26 g 1997 648 M +-5 7 V +.26 g 1992 655 M +-12 14 V +.26 g 1980 669 M +-15 18 V +.26 g 1965 687 M +-2 2 V +.26 g 1963 689 M +-17 20 V +.26 g 1946 709 M +-9 10 V +.26 g 1937 719 M +-8 10 V +.26 g 1929 729 M +-18 20 V +.26 g 1911 749 M +-1 2 V +.26 g 1910 751 M +-16 18 V +.26 g 1894 769 M +-11 13 V +.26 g 1883 782 M +-7 8 V +.26 g 1876 790 M +-18 20 V +.26 g 1858 810 M +-2 3 V +.26 g 1856 813 M +-16 17 V +.26 g 1840 830 M +-12 13 V +.26 g 1828 843 M +-6 7 V +.26 g 1822 850 M +-18 20 V +.26 g 1804 870 M +-3 3 V +.26 g 1801 873 M +-16 17 V +.26 g 1785 890 M +-11 13 V +.26 g 1774 903 M +-7 7 V +.26 g 1767 910 M +-18 21 V +.26 g 1749 931 M +-2 2 V +.26 g 1747 933 M +-17 18 V +.26 g 1730 951 M +-11 12 V +.26 g 1719 963 M +-7 8 V +.26 g 1712 971 M +-19 20 V +.26 g 1693 991 M +-1 1 V +.26 g 1692 992 M +-17 19 V +.26 g 1675 1011 M +-10 11 V +.26 g 1665 1022 M +-9 9 V +.26 g 1656 1031 M +-18 21 V +.26 g .26 g 1638 1052 M +-18 20 V +stroke 1620 1072 M +.26 g 1620 1072 M +-10 10 V +.26 g 1610 1082 M +-9 10 V +.26 g 1601 1092 M +-18 20 V +.26 g .26 g 1583 1112 M +-17 20 V +.26 g 1566 1132 M +-10 11 V +.26 g 1556 1143 M +-8 9 V +.26 g 1548 1152 M +-18 20 V +.26 g 1530 1172 M +-1 3 V +.26 g 1529 1175 M +-16 18 V +.26 g 1513 1193 M +-12 13 V +.26 g 1501 1206 M +-5 7 V +.26 g 1496 1213 M +-17 20 V +.26 g 1479 1233 M +-5 6 V +.26 g 1474 1239 M +-12 14 V +.26 g 1462 1253 M +-15 19 V +.26 g 1447 1272 M +-1 1 V +.26 g 1446 1273 M +-16 20 V +.26 g 1430 1293 M +-10 13 V +.26 g 1420 1306 M +-6 8 V +.26 g 1414 1314 M +-16 20 V +.26 g 1398 1334 M +-6 8 V +.26 g 1392 1342 M +-9 12 V +.26 g 1383 1354 M +-15 20 V +.26 g 1368 1374 M +-3 4 V +.26 g 1365 1378 M +-12 16 V +.26 g 1353 1394 M +-15 20 V +.26 g 1338 1414 M +0 1 V +.26 g 1338 1415 M +-14 20 V +.26 g 1324 1435 M +-13 18 V +.26 g 1311 1453 M +-2 2 V +.26 g 1309 1455 M +-14 20 V +.26 g 1295 1475 M +-12 17 V +.26 g 1283 1492 M +-2 3 V +.26 g 1281 1495 M +-13 20 V +.26 g 1268 1515 M +-12 18 V +.26 g 1256 1533 M +-2 2 V +.26 g 1254 1535 M +-13 20 V +.26 g 1241 1555 M +-12 20 V +.26 g 1229 1575 M +-1 1 V +.26 g 1228 1576 M +-13 20 V +.26 g 1215 1596 M +-12 20 V +.26 g 1203 1616 M +-1 2 V +.26 g 1202 1618 M +-12 18 V +.26 g 1190 1636 M +-12 20 V +.26 g 1178 1656 M +-4 6 V +.26 g 1174 1662 M +-8 14 V +.26 g 1166 1676 M +-12 21 V +.26 g 1154 1697 M +-7 11 V +.26 g 1147 1708 M +-5 9 V +.26 g 1142 1717 M +-12 20 V +.26 g 1130 1737 M +-10 18 V +.26 g 1120 1755 M +-1 2 V +stroke 1119 1757 M +.26 g 1119 1757 M +-11 20 V +.26 g 1108 1777 M +-12 20 V +.26 g 1096 1797 M +-3 7 V +.26 g 1093 1804 M +-8 13 V +.26 g 1085 1817 M +-11 21 V +0 g .26 g 3327 4035 M +.26 g 3327 4035 M +-27 15 V +.26 g 3300 4050 M +-9 5 V +.26 g 3291 4055 M +-18 10 V +.26 g 3273 4065 M +-16 10 V +.26 g 3257 4075 M +-12 7 V +.26 g 3245 4082 M +-22 13 V +.26 g 3223 4095 M +-5 3 V +.26 g 3218 4098 M +-27 17 V +.26 g .26 g 3191 4115 M +-27 18 V +.26 g 3164 4133 M +-5 2 V +.26 g 3159 4135 M +-23 15 V +.26 g 3136 4150 M +-8 5 V +.26 g 3128 4155 M +-19 13 V +.26 g 3109 4168 M +-12 8 V +.26 g 3097 4176 M +-15 10 V +.26 g 3082 4186 M +-16 10 V +.26 g 3066 4196 M +-11 7 V +.26 g 3055 4203 M +-20 13 V +.26 g 3035 4216 M +-8 5 V +.26 g 3027 4221 M +-23 15 V +.26 g 3004 4236 M +-4 3 V +.26 g 3000 4239 M +-27 17 V +.26 g 2973 4256 M +-27 17 V +.26 g 2946 4273 M +-5 3 V +.26 g 2941 4276 M +-23 14 V +.26 g 2918 4290 M +-10 7 V +.26 g 2908 4297 M +-17 10 V +.26 g 2891 4307 M +-16 10 V +.26 g 2875 4317 M +-11 6 V +.26 g 2864 4323 M +-23 14 V +.26 g 2841 4337 M +-4 3 V +.26 g 2837 4340 M +-28 15 V +.26 g 2809 4355 M +-3 2 V +.26 g 2806 4357 M +-24 14 V +.26 g 2782 4371 M +-12 6 V +.26 g 2770 4377 M +-15 9 V +.26 g 2755 4386 M +-21 11 V +.26 g 2734 4397 M +-6 4 V +.26 g 2728 4401 M +-28 14 V +.26 g 2700 4415 M +-4 2 V +.26 g 2696 4417 M +-23 12 V +.26 g 2673 4429 M +-16 9 V +.26 g 2657 4438 M +-11 5 V +.26 g 2646 4443 M +-27 14 V +.26 g 2619 4457 M +-2 1 V +.26 g 2617 4458 M +-26 13 V +.26 g 2591 4471 M +-14 7 V +stroke 2577 4478 M +.26 g 2577 4478 M +-13 7 V +.26 g 2564 4485 M +-27 13 V +.26 g .26 g 2537 4498 M +-27 14 V +.26 g 2510 4512 M +-13 6 V +.26 g 2497 4518 M +-15 8 V +.26 g 2482 4526 M +-24 12 V +.26 g 2458 4538 M +-3 2 V +.26 g 2455 4540 M +-27 14 V +.26 g 2428 4554 M +-8 5 V +.26 g 2420 4559 M +-19 10 V +.26 g 2401 4569 M +-18 10 V +.26 g 2383 4579 M +-10 5 V +.26 g 2373 4584 M +-25 15 V +.26 g 2348 4599 M +-2 1 V +.26 g 2346 4600 M +-27 16 V +.26 g 2319 4616 M +-5 3 V +0 g .26 g 4936 4619 M +.26 g 4936 4619 M +-1 -1 V +.26 g 4935 4618 M +-27 -15 V +.26 g 4908 4603 M +-7 -4 V +.26 g 4901 4599 M +-21 -12 V +.26 g 4880 4587 M +-15 -8 V +.26 g 4865 4579 M +-12 -7 V +.26 g 4853 4572 M +-24 -13 V +.26 g 4829 4559 M +-3 -2 V +.26 g 4826 4557 M +-27 -15 V +.26 g 4799 4542 M +-7 -4 V +.26 g 4792 4538 M +-21 -11 V +.26 g 4771 4527 M +-16 -9 V +.26 g 4755 4518 M +-11 -6 V +.26 g 4744 4512 M +-25 -14 V +.26 g 4719 4498 M +-2 -1 V +.26 g 4717 4497 M +-27 -15 V +.26 g 4690 4482 M +-7 -4 V +.26 g 4683 4478 M +-21 -12 V +.26 g 4662 4466 M +-15 -8 V +.26 g 4647 4458 M +-12 -7 V +.26 g 4635 4451 M +-22 -13 V +.26 g 4613 4438 M +-5 -3 V +.26 g 4608 4435 M +-27 -17 V +.26 g 4581 4418 M +-2 -1 V +.26 g 4579 4417 M +-26 -15 V +.26 g 4553 4402 M +-7 -5 V +.26 g 4546 4397 M +-20 -12 V +.26 g 4526 4385 M +-12 -8 V +.26 g 4514 4377 M +-15 -9 V +.26 g 4499 4368 M +-17 -11 V +.26 g 4482 4357 M +-10 -7 V +.26 g 4472 4350 M +-21 -13 V +.26 g 4451 4337 M +-7 -5 V +.26 g 4444 4332 M +-23 -15 V +.26 g 4421 4317 M +-4 -3 V +.26 g 4417 4314 M +-26 -17 V +stroke 4391 4297 M +.26 g 4391 4297 M +-1 -1 V +.26 g 4390 4296 M +-27 -19 V +.26 g 4363 4277 M +-1 -1 V +.26 g 4362 4276 M +-27 -18 V +.26 g 4335 4258 M +-2 -2 V +.26 g 4333 4256 M +-25 -17 V +.26 g 4308 4239 M +-4 -3 V +.26 g 4304 4236 M +-23 -16 V +.26 g 4281 4220 M +-6 -4 V +.26 g 4275 4216 M +-21 -15 V +.26 g 4254 4201 M +-8 -5 V +.26 g 4246 4196 M +-20 -14 V +.26 g 4226 4182 M +-9 -6 V +.26 g 4217 4176 M +-18 -13 V +.26 g 4199 4163 M +-11 -8 V +.26 g 4188 4155 M +-16 -11 V +.26 g 4172 4144 M +-14 -9 V +.26 g 4158 4135 M +-13 -9 V +.26 g 4145 4126 M +-17 -11 V +.26 g 4128 4115 M +-11 -7 V +.26 g 4117 4108 M +-20 -13 V +.26 g 4097 4095 M +-7 -5 V +.26 g 4090 4090 M +-25 -15 V +.26 g 4065 4075 M +-2 -2 V +.26 g 4063 4073 M +-27 -16 V +.26 g 4036 4057 M +-4 -2 V +.26 g 4032 4055 M +-24 -14 V +.26 g 4008 4041 M +-11 -6 V +.26 g 3997 4035 M +-16 -9 V +.26 g 3981 4026 M +-22 -12 V +.26 g 3959 4014 M +-5 -2 V +.26 g 3954 4012 M +-27 -13 V +.26 g 3927 3999 M +-11 -5 V +.26 g 3916 3994 M +-17 -7 V +.26 g 3899 3987 M +-27 -11 V +.26 g 3872 3976 M +-5 -2 V +.26 g 3867 3974 M +-22 -8 V +.26 g 3845 3966 M +-27 -9 V +.26 g 3818 3957 M +-14 -3 V +.26 g 3804 3954 M +-14 -4 V +.26 g 3790 3950 M +-27 -6 V +.26 g 3763 3944 M +-27 -4 V +.26 g 3736 3940 M +-27 -3 V +.26 g 3709 3937 M +-28 -2 V +.26 g 3681 3935 M +-27 0 V +.26 g 3654 3935 M +-27 1 V +.26 g 3627 3936 M +-27 3 V +.26 g 3600 3939 M +-28 4 V +.26 g 3572 3943 M +-27 6 V +.26 g 3545 3949 M +-21 5 V +.26 g 3524 3954 M +-6 1 V +.26 g 3518 3955 M +-27 8 V +stroke 3491 3963 M +.26 g 3491 3963 M +-28 10 V +.26 g 3463 3973 M +-3 1 V +.26 g 3460 3974 M +-24 9 V +.26 g 3436 3983 M +-26 11 V +.26 g 3410 3994 M +-1 1 V +.26 g 3409 3995 M +-27 12 V +.26 g 3382 4007 M +-15 7 V +.26 g 3367 4014 M +-13 7 V +.26 g 3354 4021 M +-27 14 V +.26 g 0 g .26 g 6052 1578 M +.26 g 6052 1578 M +-1 -2 V +.26 g 6051 1576 M +-14 -21 V +.26 g 6037 1555 M +-12 -17 V +.26 g 6025 1538 M +-2 -3 V +.26 g 6023 1535 M +-14 -20 V +.26 g 6009 1515 M +-11 -16 V +.26 g 5998 1499 M +-4 -4 V +.26 g 5994 1495 M +-14 -20 V +.26 g 5980 1475 M +-10 -13 V +.26 g 5970 1462 M +-5 -7 V +.26 g 5965 1455 M +-15 -20 V +.26 g 5950 1435 M +-7 -10 V +.26 g 5943 1425 M +-8 -11 V +.26 g 5935 1414 M +-15 -20 V +.26 g 5920 1394 M +-4 -5 V +.26 g 5916 1389 M +-12 -15 V +.26 g 5904 1374 M +-15 -20 V +.26 g 5889 1354 M +-1 0 V +.26 g 5888 1354 M +-16 -20 V +.26 g 5872 1334 M +-11 -14 V +.26 g 5861 1320 M +-5 -6 V +.26 g 5856 1314 M +-17 -21 V +.26 g 5839 1293 M +-5 -6 V +.26 g 5834 1287 M +-11 -14 V +.26 g 5823 1273 M +-16 -19 V +.26 g 5807 1254 M +-1 -1 V +.26 g 5806 1253 M +-17 -20 V +.26 g 5789 1233 M +-9 -11 V +.26 g 5780 1222 M +-8 -9 V +.26 g 5772 1213 M +-17 -20 V +.26 g 5755 1193 M +-3 -3 V +.26 g 5752 1190 M +-15 -18 V +.26 g 5737 1172 M +-12 -14 V +.26 g 5725 1158 M +-5 -6 V +.26 g 5720 1152 M +-18 -20 V +.26 g 5702 1132 M +-4 -5 V +.26 g 5698 1127 M +-14 -15 V +.26 g 5684 1112 M +-13 -16 V +.26 g 5671 1096 M +-4 -4 V +.26 g 5667 1092 M +-18 -20 V +.26 g 5649 1072 M +-6 -7 V +.26 g 5643 1065 M +-12 -13 V +.26 g 5631 1052 M +-15 -18 V +stroke 5616 1034 M +.26 g 5616 1034 M +-2 -3 V +.26 g 5614 1031 M +-18 -20 V +.26 g 5596 1011 M +-7 -8 V +.26 g 5589 1003 M +-11 -12 V +.26 g 5578 991 M +-16 -19 V +.26 g 5562 972 M +-1 -1 V +.26 g 5561 971 M +-18 -20 V +.26 g 5543 951 M +-9 -10 V +.26 g 5534 941 M +-8 -10 V +.26 g 5526 931 M +-18 -21 V +.26 g 5508 910 M +-1 -1 V +.26 g 5507 909 M +-16 -19 V +.26 g 5491 890 M +-11 -13 V +.26 g 5480 877 M +-6 -7 V +.26 g 5474 870 M +-17 -20 V +.26 g 5457 850 M +-4 -5 V +.26 g 5453 845 M +-13 -15 V +.26 g 5440 830 M +-15 -18 V +.26 g 5425 812 M +-2 -2 V +.26 g 5423 810 M +-16 -20 V +.26 g 5407 790 M +-9 -11 V +.26 g 5398 779 M +-8 -10 V +.26 g 5390 769 M +-16 -20 V +.26 g 5374 749 M +-3 -3 V +.26 g 5371 746 M +-14 -17 V +.26 g 5357 729 M +-13 -17 V +.26 g 5344 712 M +-3 -3 V +.26 g 5341 709 M +-16 -20 V +.26 g 5325 689 M +-9 -11 V +.26 g 5316 678 M +-7 -9 V +.26 g 5309 669 M +-16 -21 V +.26 g 5293 648 M +-4 -5 V +.26 g 5289 643 M +-12 -15 V +.26 g 5277 628 M +-15 -20 V +.26 g .26 g 5262 608 M +-16 -20 V +0 g .24 g 1124 1838 M +.24 g 1124 1838 M +-4 8 V +.24 g 1120 1846 M +-7 12 V +.24 g 1113 1858 M +-11 20 V +.24 g 1102 1878 M +-9 16 V +.24 g 1093 1894 M +-3 4 V +.24 g 1090 1898 M +-11 20 V +.24 g 1079 1918 M +-11 20 V +.24 g 1068 1938 M +-3 6 V +.24 g 1065 1944 M +-7 15 V +.24 g 1058 1959 M +-11 20 V +.24 g 1047 1979 M +-9 16 V +.24 g 1038 1995 M +-2 4 V +.24 g 1036 1999 M +-10 20 V +.24 g 1026 2019 M +-11 20 V +.24 g 1015 2039 M +-4 9 V +.24 g 1011 2048 M +-6 11 V +.24 g 1005 2059 M +-10 20 V +stroke 995 2079 M +.24 g 995 2079 M +-10 21 V +.24 g 985 2100 M +-1 2 V +.24 g 984 2102 M +-9 18 V +.24 g 975 2120 M +-10 20 V +.24 g 965 2140 M +-9 18 V +.24 g 956 2158 M +-1 2 V +.24 g 955 2160 M +-10 20 V +.24 g 945 2180 M +-9 20 V +.24 g 936 2200 M +-7 14 V +.24 g 929 2214 M +-3 7 V +.24 g 926 2221 M +-9 20 V +.24 g 917 2241 M +-10 20 V +.24 g 907 2261 M +-5 11 V +.24 g 902 2272 M +-4 9 V +.24 g 898 2281 M +-9 20 V +.24 g 889 2301 M +-10 20 V +.24 g 879 2321 M +-4 10 V +.24 g 875 2331 M +-5 10 V +.24 g 870 2341 M +-9 21 V +.24 g 861 2362 M +-9 20 V +.24 g 852 2382 M +-5 10 V +.24 g 847 2392 M +-4 10 V +.24 g 843 2402 M +-9 20 V +.24 g 834 2422 M +-9 20 V +.24 g 825 2442 M +-5 11 V +.24 g 820 2453 M +-4 9 V +.24 g 816 2462 M +-9 21 V +.24 g 807 2483 M +-9 20 V +.24 g 798 2503 M +-5 12 V +.24 g 793 2515 M +-3 8 V +.24 g 790 2523 M +-9 20 V +.24 g 781 2543 M +-9 20 V +.24 g 772 2563 M +-7 16 V +.24 g 765 2579 M +-2 4 V +.24 g 763 2583 M +-8 21 V +.24 g 755 2604 M +-9 20 V +.24 g 746 2624 M +-8 19 V +.24 g 738 2643 M +0 1 V +.24 g 738 2644 M +-9 20 V +.24 g 729 2664 M +-8 20 V +.24 g 721 2684 M +-9 20 V +.24 g 712 2704 M +-1 3 V +.24 g 711 2707 M +-7 17 V +.24 g 704 2724 M +-8 21 V +.24 g 696 2745 M +-9 20 V +.24 g 687 2765 M +-3 8 V +.24 g 684 2773 M +-5 12 V +.24 g 679 2785 M +-8 20 V +.24 g 671 2805 M +-9 20 V +.24 g 662 2825 M +-5 14 V +.24 g 657 2839 M +-3 6 V +.24 g 654 2845 M +-8 21 V +stroke 646 2866 M +.24 g 646 2866 M +-9 20 V +.24 g 637 2886 M +-8 19 V +.24 g 629 2905 M +0 1 V +.24 g 629 2906 M +-8 20 V +.24 g 621 2926 M +-8 20 V +.24 g 613 2946 M +-9 20 V +.24 g 604 2966 M +-2 6 V +0 g .24 g 2126 588 M +.24 g 2126 588 M +-16 20 V +.24 g 2110 608 M +-9 12 V +.24 g 2101 620 M +-7 8 V +.24 g 2094 628 M +-16 20 V +.24 g 2078 648 M +-4 6 V +.24 g 2074 654 M +-12 15 V +.24 g 2062 669 M +-16 18 V +.24 g 2046 687 M +-1 2 V +.24 g 2045 689 M +-16 20 V +.24 g 2029 709 M +-10 12 V +.24 g 2019 721 M +-7 8 V +.24 g 2012 729 M +-17 20 V +.24 g 1995 749 M +-3 4 V +.24 g 1992 753 M +-14 16 V +.24 g 1978 769 M +-13 17 V +.24 g 1965 786 M +-4 4 V +.24 g 1961 790 M +-17 20 V +.24 g 1944 810 M +-7 7 V +.24 g 1937 817 M +-11 13 V +.24 g 1926 830 M +-16 19 V +.24 g 1910 849 M +-1 1 V +.24 g 1909 850 M +-18 20 V +.24 g 1891 870 M +-8 10 V +.24 g 1883 880 M +-10 10 V +.24 g 1873 890 M +-17 20 V +.24 g 1856 910 M +-1 0 V +.24 g 1855 910 M +-18 21 V +.24 g 1837 931 M +-9 10 V +.24 g 1828 941 M +-9 10 V +.24 g 1819 951 M +-18 20 V +.24 g .24 g 1801 971 M +-19 20 V +.24 g 1782 991 M +-8 9 V +.24 g 1774 1000 M +-10 11 V +.24 g 1764 1011 M +-17 19 V +.24 g 1747 1030 M +-2 1 V +.24 g 1745 1031 M +-19 21 V +.24 g 1726 1052 M +-7 7 V +.24 g 1719 1059 M +-11 13 V +.24 g 1708 1072 M +-16 16 V +.24 g 1692 1088 M +-3 4 V +.24 g 1689 1092 M +-19 20 V +.24 g 1670 1112 M +-5 6 V +.24 g 1665 1118 M +-13 14 V +.24 g 1652 1132 M +-14 15 V +.24 g 1638 1147 M +-5 5 V +stroke 1633 1152 M +.24 g 1633 1152 M +-19 20 V +.24 g 1614 1172 M +-4 5 V +.24 g 1610 1177 M +-14 16 V +.24 g 1596 1193 M +-13 14 V +.24 g 1583 1207 M +-5 6 V +.24 g 1578 1213 M +-18 20 V +.24 g 1560 1233 M +-4 4 V +.24 g 1556 1237 M +-14 16 V +.24 g 1542 1253 M +-13 15 V +.24 g 1529 1268 M +-5 5 V +.24 g 1524 1273 M +-17 20 V +.24 g 1507 1293 M +-6 7 V +.24 g 1501 1300 M +-11 14 V +.24 g 1490 1314 M +-16 18 V +.24 g 1474 1332 M +-1 2 V +.24 g 1473 1334 M +-17 20 V +.24 g 1456 1354 M +-9 11 V +.24 g 1447 1365 M +-7 9 V +.24 g 1440 1374 M +-17 20 V +.24 g 1423 1394 M +-3 5 V +.24 g 1420 1399 M +-13 15 V +.24 g 1407 1414 M +-15 20 V +.24 g 1392 1434 M +0 1 V +.24 g 1392 1435 M +-16 20 V +.24 g 1376 1455 M +-11 14 V +.24 g 1365 1469 M +-4 6 V +.24 g 1361 1475 M +-15 20 V +.24 g 1346 1495 M +-8 11 V +.24 g 1338 1506 M +-7 9 V +.24 g 1331 1515 M +-14 20 V +.24 g 1317 1535 M +-6 9 V +.24 g 1311 1544 M +-8 11 V +.24 g 1303 1555 M +-14 21 V +.24 g 1289 1576 M +-6 7 V +.24 g 1283 1583 M +-8 13 V +.24 g 1275 1596 M +-14 20 V +.24 g 1261 1616 M +-5 8 V +.24 g 1256 1624 M +-8 12 V +.24 g 1248 1636 M +-13 20 V +.24 g 1235 1656 M +-6 9 V +.24 g 1229 1665 M +-7 11 V +.24 g 1222 1676 M +-13 21 V +.24 g 1209 1697 M +-7 11 V +.24 g 1202 1708 M +-6 9 V +.24 g 1196 1717 M +-12 20 V +.24 g 1184 1737 M +-10 16 V +.24 g 1174 1753 M +-2 4 V +.24 g 1172 1757 M +-12 20 V +.24 g 1160 1777 M +-12 20 V +.24 g 1148 1797 M +-1 1 V +.24 g 1147 1798 M +-11 19 V +.24 g 1136 1817 M +-12 21 V +stroke 1124 1838 M +0 g .24 g 3491 3866 M +.24 g 3491 3866 M +-20 7 V +.24 g 3471 3873 M +-8 3 V +.24 g 3463 3876 M +-27 11 V +.24 g 3436 3887 M +-16 6 V +.24 g 3420 3893 M +-11 5 V +.24 g 3409 3898 M +-27 13 V +.24 g 3382 3911 M +-5 3 V +.24 g 3377 3914 M +-23 11 V +.24 g 3354 3925 M +-16 9 V +.24 g 3338 3934 M +-11 6 V +.24 g 3327 3940 M +-25 14 V +.24 g 3302 3954 M +-2 1 V +.24 g 3300 3955 M +-27 16 V +.24 g 3273 3971 M +-5 3 V +.24 g 3268 3974 M +-23 14 V +.24 g 3245 3988 M +-10 6 V +.24 g 3235 3994 M +-17 11 V +.24 g 3218 4005 M +-15 9 V +.24 g 3203 4014 M +-12 8 V +.24 g 3191 4022 M +-19 13 V +.24 g 3172 4035 M +-8 5 V +.24 g 3164 4040 M +-23 15 V +.24 g 3141 4055 M +-5 3 V +.24 g 3136 4058 M +-26 17 V +.24 g 3110 4075 M +-1 1 V +.24 g 3109 4076 M +-27 18 V +.24 g 3082 4094 M +-2 1 V +.24 g 3080 4095 M +-25 17 V +.24 g 3055 4112 M +-5 3 V +.24 g 3050 4115 M +-23 15 V +.24 g 3027 4130 M +-8 5 V +.24 g 3019 4135 M +-19 13 V +.24 g 3000 4148 M +-12 7 V +.24 g 2988 4155 M +-15 10 V +.24 g 2973 4165 M +-16 11 V +.24 g 2957 4176 M +-11 7 V +.24 g 2946 4183 M +-21 13 V +.24 g 2925 4196 M +-7 4 V +.24 g 2918 4200 M +-26 16 V +.24 g 2892 4216 M +-1 1 V +.24 g 2891 4217 M +-27 16 V +.24 g 2864 4233 M +-5 3 V +.24 g 2859 4236 M +-22 13 V +.24 g 2837 4249 M +-13 7 V +.24 g 2824 4256 M +-15 9 V +.24 g 2809 4265 M +-20 11 V +.24 g 2789 4276 M +-7 4 V +.24 g 2782 4280 M +-27 15 V +.24 g 2755 4295 M +-2 2 V +.24 g 2753 4297 M +-25 13 V +.24 g 2728 4310 M +-13 7 V +.24 g 2715 4317 M +-15 7 V +stroke 2700 4324 M +.24 g 2700 4324 M +-24 13 V +.24 g 2676 4337 M +-3 2 V +.24 g 2673 4339 M +-27 13 V +.24 g 2646 4352 M +-9 5 V +.24 g 2637 4357 M +-18 9 V +.24 g 2619 4366 M +-23 11 V +.24 g 2596 4377 M +-5 2 V +.24 g 2591 4379 M +-27 14 V +.24 g 2564 4393 M +-9 4 V +.24 g 2555 4397 M +-18 9 V +.24 g 2537 4406 M +-23 11 V +.24 g 2514 4417 M +-4 3 V +.24 g 2510 4420 M +-28 13 V +.24 g 2482 4433 M +-9 5 V +.24 g 2473 4438 M +-18 9 V +.24 g 2455 4447 M +-22 11 V +.24 g 2433 4458 M +-5 3 V +.24 g 2428 4461 M +-27 14 V +.24 g 2401 4475 M +-6 3 V +.24 g 2395 4478 M +-22 12 V +.24 g 2373 4490 M +-15 8 V +.24 g 2358 4498 M +-12 7 V +.24 g 2346 4505 M +-22 13 V +.24 g 2324 4518 M +-5 3 V +.24 g 2319 4521 M +-27 17 V +.24 g 2292 4538 M +-1 0 V +.24 g 2291 4538 M +-27 17 V +.24 g 2264 4555 M +-5 4 V +.24 g 2259 4559 M +-22 15 V +.24 g 2237 4574 M +-7 5 V +.24 g 2230 4579 M +-20 14 V +.24 g 2210 4593 M +-8 6 V +.24 g 2202 4599 M +-19 15 V +.24 g 2183 4614 M +-7 5 V +0 g .24 g 5085 4619 M +.24 g 5085 4619 M +-14 -10 V +.24 g 5071 4609 M +-15 -10 V +.24 g 5056 4599 M +-12 -8 V +.24 g 5044 4591 M +-19 -12 V +.24 g 5025 4579 M +-8 -6 V +.24 g 5017 4573 M +-25 -14 V +.24 g 4992 4559 M +-3 -2 V +.24 g 4989 4557 M +-27 -17 V +.24 g 4962 4540 M +-4 -2 V +.24 g 4958 4538 M +-23 -13 V +.24 g 4935 4525 M +-12 -7 V +.24 g 4923 4518 M +-15 -9 V +.24 g 4908 4509 M +-21 -11 V +.24 g 4887 4498 M +-7 -4 V +.24 g 4880 4494 M +-27 -15 V +.24 g 4853 4479 M +-3 -1 V +.24 g 4850 4478 M +-24 -13 V +.24 g 4826 4465 M +-13 -7 V +stroke 4813 4458 M +.24 g 4813 4458 M +-14 -8 V +.24 g 4799 4450 M +-24 -12 V +.24 g 4775 4438 M +-4 -2 V +.24 g 4771 4436 M +-27 -15 V +.24 g 4744 4421 M +-6 -4 V +.24 g 4738 4417 M +-21 -11 V +.24 g 4717 4406 M +-16 -9 V +.24 g 4701 4397 M +-11 -6 V +.24 g 4690 4391 M +-25 -14 V +.24 g 4665 4377 M +-3 -1 V +.24 g 4662 4376 M +-27 -16 V +.24 g 4635 4360 M +-5 -3 V +.24 g 4630 4357 M +-22 -13 V +.24 g 4608 4344 M +-13 -7 V +.24 g 4595 4337 M +-14 -9 V +.24 g 4581 4328 M +-19 -11 V +.24 g 4562 4317 M +-9 -6 V +.24 g 4553 4311 M +-24 -14 V +.24 g 4529 4297 M +-3 -2 V +.24 g 4526 4295 M +-27 -18 V +.24 g 4499 4277 M +-2 -1 V +.24 g 4497 4276 M +-25 -16 V +.24 g 4472 4260 M +-6 -4 V +.24 g 4466 4256 M +-22 -14 V +.24 g 4444 4242 M +-8 -6 V +.24 g 4436 4236 M +-19 -13 V +.24 g 4417 4223 M +-11 -7 V +.24 g 4406 4216 M +-16 -11 V +.24 g 4390 4205 M +-13 -9 V +.24 g 4377 4196 M +-14 -10 V +.24 g 4363 4186 M +-15 -10 V +.24 g 4348 4176 M +-13 -9 V +.24 g 4335 4167 M +-16 -12 V +.24 g 4319 4155 M +-11 -7 V +.24 g 4308 4148 M +-17 -13 V +.24 g 4291 4135 M +-10 -7 V +.24 g 4281 4128 M +-19 -13 V +.24 g 4262 4115 M +-8 -6 V +.24 g 4254 4109 M +-20 -14 V +.24 g 4234 4095 M +-8 -5 V +.24 g 4226 4090 M +-21 -15 V +.24 g 4205 4075 M +-6 -5 V +.24 g 4199 4070 M +-22 -15 V +.24 g 4177 4055 M +-5 -4 V +.24 g 4172 4051 M +-25 -16 V +.24 g 4147 4035 M +-2 -3 V +.24 g 4145 4032 M +-27 -18 V +.24 g 4118 4014 M +-1 0 V +.24 g 4117 4014 M +-27 -18 V +.24 g 4090 3996 M +-3 -2 V +.24 g 4087 3994 M +-24 -16 V +.24 g 4063 3978 M +-7 -4 V +stroke 4056 3974 M +.24 g 4056 3974 M +-20 -12 V +.24 g 4036 3962 M +-14 -8 V +.24 g 4022 3954 M +-14 -9 V +.24 g 4008 3945 M +-21 -11 V +.24 g 3987 3934 M +-6 -4 V +.24 g 3981 3930 M +-27 -14 V +.24 g 3954 3916 M +-4 -2 V +.24 g 3950 3914 M +-23 -12 V +.24 g 3927 3902 M +-20 -9 V +.24 g 3907 3893 M +-8 -3 V +.24 g 3899 3890 M +-27 -11 V +.24 g 3872 3879 M +-14 -6 V +.24 g 3858 3873 M +-13 -4 V +.24 g 3845 3869 M +-27 -9 V +.24 g 3818 3860 M +-25 -7 V +.24 g 3793 3853 M +-3 -1 V +.24 g 3790 3852 M +-27 -6 V +.24 g 3763 3846 M +-27 -4 V +.24 g 3736 3842 M +-27 -3 V +.24 g 3709 3839 M +-28 -2 V +.24 g 3681 3837 M +-27 0 V +.24 g 3654 3837 M +-27 1 V +.24 g 3627 3838 M +-27 3 V +.24 g 3600 3841 M +-28 4 V +.24 g 3572 3845 M +-27 6 V +.24 g 3545 3851 M +-8 2 V +.24 g 3537 3853 M +-19 5 V +.24 g 3518 3858 M +-27 8 V +0 g .24 g 6052 1669 M +.24 g 6052 1669 M +-9 -13 V +.24 g 6043 1656 M +-14 -20 V +.24 g 6029 1636 M +-4 -7 V +.24 g 6025 1629 M +-10 -13 V +.24 g 6015 1616 M +-14 -20 V +.24 g 6001 1596 M +-3 -5 V +.24 g 5998 1591 M +-12 -15 V +.24 g 5986 1576 M +-14 -21 V +.24 g 5972 1555 M +-2 -2 V +.24 g 5970 1553 M +-13 -18 V +.24 g 5957 1535 M +-14 -18 V +.24 g 5943 1517 M +-2 -2 V +.24 g 5941 1515 M +-15 -20 V +.24 g 5926 1495 M +-10 -13 V +.24 g 5916 1482 M +-6 -7 V +.24 g 5910 1475 M +-16 -20 V +.24 g 5894 1455 M +-5 -8 V +.24 g 5889 1447 M +-11 -12 V +.24 g 5878 1435 M +-16 -21 V +.24 g 5862 1414 M +-1 0 V +.24 g 5861 1414 M +-16 -20 V +.24 g 5845 1394 M +-11 -13 V +.24 g 5834 1381 M +-5 -7 V +.24 g 5829 1374 M +-17 -20 V +stroke 5812 1354 M +.24 g 5812 1354 M +-5 -6 V +.24 g 5807 1348 M +-13 -14 V +.24 g 5794 1334 M +-14 -18 V +.24 g 5780 1316 M +-3 -2 V +.24 g 5777 1314 M +-17 -21 V +.24 g 5760 1293 M +-8 -8 V +.24 g 5752 1285 M +-10 -12 V +.24 g 5742 1273 M +-17 -19 V +.24 g 5725 1254 M +-1 -1 V +.24 g 5724 1253 M +-17 -20 V +.24 g 5707 1233 M +-9 -10 V +.24 g 5698 1223 M +-9 -10 V +.24 g 5689 1213 M +-18 -20 V +.24 g 5671 1193 M +0 -1 V +.24 g 5671 1192 M +-18 -20 V +.24 g 5653 1172 M +-10 -10 V +.24 g 5643 1162 M +-8 -10 V +.24 g 5635 1152 M +-18 -20 V +.24 g 5617 1132 M +-1 -1 V +.24 g 5616 1131 M +-17 -19 V +.24 g 5599 1112 M +-10 -12 V +.24 g 5589 1100 M +-8 -8 V +.24 g 5581 1092 M +-17 -20 V +.24 g 5564 1072 M +-2 -3 V +.24 g 5562 1069 M +-16 -17 V +.24 g 5546 1052 M +-12 -14 V +.24 g 5534 1038 M +-6 -7 V +.24 g 5528 1031 M +-17 -20 V +.24 g 5511 1011 M +-4 -4 V +.24 g 5507 1007 M +-14 -16 V +.24 g 5493 991 M +-13 -16 V +.24 g 5480 975 M +-4 -4 V +.24 g 5476 971 M +-17 -20 V +.24 g 5459 951 M +-6 -8 V +.24 g 5453 943 M +-11 -12 V +.24 g 5442 931 M +-17 -21 V +.24 g .24 g 5425 910 M +-16 -20 V +.24 g 5409 890 M +-11 -13 V +.24 g 5398 877 M +-6 -7 V +.24 g 5392 870 M +-16 -20 V +.24 g 5376 850 M +-5 -6 V +.24 g 5371 844 M +-12 -14 V +.24 g 5359 830 M +-15 -20 V +.24 g 5344 810 M +-1 0 V +.24 g 5343 810 M +-16 -20 V +.24 g 5327 790 M +-11 -14 V +.24 g 5316 776 M +-5 -7 V +.24 g 5311 769 M +-16 -20 V +.24 g 5295 749 M +-6 -8 V +.24 g 5289 741 M +-9 -12 V +.24 g 5280 729 M +-16 -20 V +.24 g 5264 709 M +-2 -3 V +stroke 5262 706 M +.24 g 5262 706 M +-14 -17 V +.24 g 5248 689 M +-13 -18 V +.24 g 5235 671 M +-2 -2 V +.24 g 5233 669 M +-15 -21 V +.24 g 5218 648 M +-11 -13 V +.24 g 5207 635 M +-5 -7 V +.24 g 5202 628 M +-15 -20 V +.24 g 5187 608 M +-7 -9 V +.24 g 5180 599 M +-8 -11 V +0 g .22 g 1192 1817 M +.22 g 1192 1817 M +-12 21 V +.22 g 1180 1838 M +-6 9 V +.22 g 1174 1847 M +-6 11 V +.22 g 1168 1858 M +-12 20 V +.22 g 1156 1878 M +-9 15 V +.22 g 1147 1893 M +-3 5 V +.22 g 1144 1898 M +-12 20 V +.22 g 1132 1918 M +-11 20 V +.22 g 1121 1938 M +-1 2 V +.22 g 1120 1940 M +-11 19 V +.22 g 1109 1959 M +-11 20 V +.22 g 1098 1979 M +-5 9 V +.22 g 1093 1988 M +-6 11 V +.22 g 1087 1999 M +-11 20 V +.22 g 1076 2019 M +-11 19 V +.22 g 1065 2038 M +0 1 V +.22 g 1065 2039 M +-11 20 V +.22 g 1054 2059 M +-11 20 V +.22 g 1043 2079 M +-5 11 V +.22 g 1038 2090 M +-5 10 V +.22 g 1033 2100 M +-10 20 V +.22 g 1023 2120 M +-11 20 V +.22 g 1012 2140 M +-1 3 V +.22 g 1011 2143 M +-9 17 V +.22 g 1002 2160 M +-10 20 V +.22 g 992 2180 M +-8 17 V +.22 g 984 2197 M +-2 3 V +.22 g 982 2200 M +-10 21 V +.22 g 972 2221 M +-10 20 V +.22 g 962 2241 M +-6 11 V +.22 g 956 2252 M +-4 9 V +.22 g 952 2261 M +-9 20 V +.22 g 943 2281 M +-10 20 V +.22 g 933 2301 M +-4 8 V +.22 g 929 2309 M +-6 12 V +.22 g 923 2321 M +-9 20 V +.22 g 914 2341 M +-9 21 V +.22 g 905 2362 M +-3 6 V +.22 g 902 2368 M +-7 14 V +.22 g 895 2382 M +-9 20 V +.22 g 886 2402 M +-9 20 V +.22 g 877 2422 M +-2 5 V +.22 g 875 2427 M +-7 15 V +stroke 868 2442 M +.22 g 868 2442 M +-9 20 V +.22 g 859 2462 M +-9 21 V +.22 g 850 2483 M +-3 5 V +.22 g 847 2488 M +-6 15 V +.22 g 841 2503 M +-9 20 V +.22 g 832 2523 M +-9 20 V +.22 g 823 2543 M +-3 6 V +.22 g 820 2549 M +-6 14 V +.22 g 814 2563 M +-9 20 V +.22 g 805 2583 M +-9 21 V +.22 g 796 2604 M +-3 8 V +.22 g 793 2612 M +-5 12 V +.22 g 788 2624 M +-9 20 V +.22 g 779 2644 M +-9 20 V +.22 g 770 2664 M +-5 12 V +.22 g 765 2676 M +-3 8 V +.22 g 762 2684 M +-9 20 V +.22 g 753 2704 M +-8 20 V +.22 g 745 2724 M +-7 16 V +.22 g 738 2740 M +-2 5 V +.22 g 736 2745 M +-8 20 V +.22 g 728 2765 M +-8 20 V +.22 g 720 2785 M +-9 20 V +.22 g .22 g 711 2805 M +-8 20 V +.22 g 703 2825 M +-9 20 V +.22 g 694 2845 M +-8 21 V +.22 g 686 2866 M +-2 5 V +.22 g 684 2871 M +-6 15 V +.22 g 678 2886 M +-8 20 V +.22 g 670 2906 M +-9 20 V +.22 g 661 2926 M +-4 12 V +.22 g 657 2938 M +-4 8 V +.22 g 653 2946 M +-8 20 V +.22 g 645 2966 M +-8 20 V +.22 g 637 2986 M +-8 19 V +.22 g 629 3005 M +-1 2 V +.22 g 628 3007 M +-8 20 V +.22 g 620 3027 M +-8 20 V +.22 g 612 3047 M +-8 20 V +.22 g 604 3067 M +-2 5 V +0 g .22 g 2206 588 M +.22 g 2206 588 M +-16 20 V +.22 g 2190 608 M +-7 10 V +.22 g 2183 618 M +-8 10 V +.22 g 2175 628 M +-16 20 V +.22 g 2159 648 M +-4 5 V +.22 g 2155 653 M +-12 16 V +.22 g 2143 669 M +-15 19 V +.22 g 2128 688 M +-1 1 V +.22 g 2127 689 M +-16 20 V +.22 g 2111 709 M +-10 13 V +.22 g 2101 722 M +-6 7 V +.22 g 2095 729 M +-16 20 V +stroke 2079 749 M +.22 g 2079 749 M +-5 8 V +.22 g 2074 757 M +-11 12 V +.22 g 2063 769 M +-16 21 V +.22 g 2047 790 M +-1 0 V +.22 g 2046 790 M +-16 20 V +.22 g 2030 810 M +-11 14 V +.22 g 2019 824 M +-5 6 V +.22 g 2014 830 M +-17 20 V +.22 g 1997 850 M +-5 6 V +.22 g 1992 856 M +-12 14 V +.22 g 1980 870 M +-15 19 V +.22 g 1965 889 M +-2 1 V +.22 g 1963 890 M +-17 20 V +.22 g 1946 910 M +-9 11 V +.22 g 1937 921 M +-8 10 V +.22 g 1929 931 M +-18 20 V +.22 g 1911 951 M +-1 1 V +.22 g 1910 952 M +-17 19 V +.22 g 1893 971 M +-10 12 V +.22 g 1883 983 M +-8 8 V +.22 g 1875 991 M +-18 20 V +.22 g 1857 1011 M +-1 2 V +.22 g 1856 1013 M +-17 18 V +.22 g 1839 1031 M +-11 12 V +.22 g 1828 1043 M +-7 9 V +.22 g 1821 1052 M +-19 20 V +.22 g 1802 1072 M +-1 1 V +.22 g 1801 1073 M +-18 19 V +.22 g 1783 1092 M +-9 10 V +.22 g 1774 1102 M +-9 10 V +.22 g 1765 1112 M +-18 19 V +.22 g 1747 1131 M +-1 1 V +.22 g 1746 1132 M +-19 20 V +.22 g 1727 1152 M +-8 8 V +.22 g 1719 1160 M +-11 12 V +.22 g 1708 1172 M +-16 17 V +.22 g 1692 1189 M +-3 4 V +.22 g 1689 1193 M +-19 20 V +.22 g 1670 1213 M +-5 5 V +.22 g 1665 1218 M +-14 15 V +.22 g 1651 1233 M +-13 14 V +.22 g 1638 1247 M +-6 6 V +.22 g 1632 1253 M +-19 20 V +.22 g 1613 1273 M +-3 4 V +.22 g 1610 1277 M +-15 16 V +.22 g 1595 1293 M +-12 13 V +.22 g 1583 1306 M +-7 8 V +.22 g 1576 1314 M +-18 20 V +.22 g 1558 1334 M +-2 2 V +.22 g 1556 1336 M +-16 18 V +.22 g 1540 1354 M +-11 13 V +.22 g 1529 1367 M +-7 7 V +stroke 1522 1374 M +.22 g 1522 1374 M +-18 20 V +.22 g 1504 1394 M +-3 4 V +.22 g 1501 1398 M +-14 16 V +.22 g 1487 1414 M +-13 15 V +.22 g 1474 1429 M +-4 6 V +.22 g 1470 1435 M +-17 20 V +.22 g 1453 1455 M +-6 7 V +.22 g 1447 1462 M +-11 13 V +.22 g 1436 1475 M +-16 20 V +.22 g .22 g 1420 1495 M +-16 20 V +.22 g 1404 1515 M +-12 15 V +.22 g 1392 1530 M +-4 5 V +.22 g 1388 1535 M +-15 20 V +.22 g 1373 1555 M +-8 10 V +.22 g 1365 1565 M +-8 11 V +.22 g 1357 1576 M +-15 20 V +.22 g 1342 1596 M +-4 6 V +.22 g 1338 1602 M +-11 14 V +.22 g 1327 1616 M +-14 20 V +.22 g 1313 1636 M +-2 3 V +.22 g 1311 1639 M +-12 17 V +.22 g 1299 1656 M +-14 20 V +.22 g 1285 1676 M +-2 2 V +.22 g 1283 1678 M +-12 19 V +.22 g 1271 1697 M +-14 20 V +.22 g 1257 1717 M +-1 1 V +.22 g 1256 1718 M +-12 19 V +.22 g 1244 1737 M +-13 20 V +.22 g 1231 1757 M +-2 3 V +.22 g 1229 1760 M +-11 17 V +.22 g 1218 1777 M +-13 20 V +.22 g 1205 1797 M +-3 6 V +.22 g 1202 1803 M +-10 14 V +0 g .22 g 2149 4538 M +.22 g 2149 4538 M +-21 18 V +.22 g 2128 4556 M +-3 3 V +.22 g 2125 4559 M +-23 20 V +.22 g 2102 4579 M +-1 1 V +.22 g 2101 4580 M +-21 19 V +.22 g 2080 4599 M +-6 6 V +.22 g 2074 4605 M +-15 14 V +0 g .22 g 3736 3739 M +.22 g 3736 3739 M +-27 -3 V +.22 g 3709 3736 M +-28 -2 V +.22 g 3681 3734 M +-27 0 V +.22 g 3654 3734 M +-27 1 V +.22 g 3627 3735 M +-27 3 V +.22 g 3600 3738 M +-28 4 V +.22 g 3572 3742 M +-27 6 V +.22 g 3545 3748 M +-15 4 V +.22 g 3530 3752 M +-12 4 V +.22 g 3518 3756 M +-27 8 V +.22 g 3491 3764 M +-23 8 V +stroke 3468 3772 M +.22 g 3468 3772 M +-5 2 V +.22 g 3463 3774 M +-27 11 V +.22 g 3436 3785 M +-17 8 V +.22 g 3419 3793 M +-10 4 V +.22 g 3409 3797 M +-27 14 V +.22 g 3382 3811 M +-5 2 V +.22 g 3377 3813 M +-23 12 V +.22 g 3354 3825 M +-14 8 V +.22 g 3340 3833 M +-13 7 V +.22 g 3327 3840 M +-23 13 V +.22 g 3304 3853 M +-4 3 V +.22 g 3300 3856 M +-27 16 V +.22 g 3273 3872 M +-2 1 V +.22 g 3271 3873 M +-26 16 V +.22 g 3245 3889 M +-6 4 V +.22 g 3239 3893 M +-21 14 V +.22 g 3218 3907 M +-10 7 V +.22 g 3208 3914 M +-17 11 V +.22 g 3191 3925 M +-14 9 V +.22 g 3177 3934 M +-13 9 V +.22 g 3164 3943 M +-17 11 V +.22 g 3147 3954 M +-11 7 V +.22 g 3136 3961 M +-19 13 V +.22 g 3117 3974 M +-8 5 V +.22 g 3109 3979 M +-22 15 V +.22 g 3087 3994 M +-5 4 V +.22 g 3082 3998 M +-25 16 V +.22 g 3057 4014 M +-2 2 V +.22 g 3055 4016 M +-28 19 V +.22 g .22 g 3027 4035 M +-27 18 V +.22 g 3000 4053 M +-3 2 V +.22 g 2997 4055 M +-24 16 V +.22 g 2973 4071 M +-7 4 V +.22 g 2966 4075 M +-20 13 V +.22 g 2946 4088 M +-11 7 V +.22 g 2935 4095 M +-17 10 V +.22 g 2918 4105 M +-15 10 V +.22 g 2903 4115 M +-12 7 V +.22 g 2891 4122 M +-21 13 V +.22 g 2870 4135 M +-6 4 V +.22 g 2864 4139 M +-27 16 V +.22 g 2837 4155 M +-1 0 V +.22 g 2836 4155 M +-27 16 V +.22 g 2809 4171 M +-8 5 V +.22 g 2801 4176 M +-19 10 V +.22 g 2782 4186 M +-17 10 V +.22 g 2765 4196 M +-10 5 V +.22 g 2755 4201 M +-27 15 V +.22 g 2728 4216 M +-1 0 V +.22 g 2727 4216 M +-27 14 V +.22 g 2700 4230 M +-12 6 V +.22 g 2688 4236 M +-15 8 V +stroke 2673 4244 M +.22 g 2673 4244 M +-25 12 V +.22 g 2648 4256 M +-2 1 V +.22 g 2646 4257 M +-27 14 V +.22 g 2619 4271 M +-12 5 V +.22 g 2607 4276 M +-16 8 V +.22 g 2591 4284 M +-26 13 V +.22 g 2565 4297 M +-1 0 V +.22 g 2564 4297 M +-27 13 V +.22 g 2537 4310 M +-14 7 V +.22 g 2523 4317 M +-13 6 V +.22 g 2510 4323 M +-28 13 V +.22 g 2482 4336 M +-1 1 V +.22 g 2481 4337 M +-26 12 V +.22 g 2455 4349 M +-15 8 V +.22 g 2440 4357 M +-12 6 V +.22 g 2428 4363 M +-27 14 V +.22 g 2401 4377 M +-1 0 V +.22 g 2400 4377 M +-27 14 V +.22 g 2373 4391 M +-11 6 V +.22 g 2362 4397 M +-16 9 V +.22 g 2346 4406 M +-20 11 V +.22 g 2326 4417 M +-7 4 V +.22 g 2319 4421 M +-27 17 V +.22 g .22 g 2292 4438 M +-28 17 V +.22 g 2264 4455 M +-4 3 V +.22 g 2260 4458 M +-23 15 V +.22 g 2237 4473 M +-7 5 V +.22 g 2230 4478 M +-20 14 V +.22 g 2210 4492 M +-9 6 V +.22 g 2201 4498 M +-18 14 V +.22 g 2183 4512 M +-8 6 V +.22 g 2175 4518 M +-20 15 V +.22 g 2155 4533 M +-6 5 V +0 g .22 g 5214 4619 M +.22 g 5214 4619 M +-7 -6 V +.22 g 5207 4613 M +-16 -14 V +.22 g 5191 4599 M +-11 -9 V +.22 g 5180 4590 M +-14 -11 V +.22 g 5166 4579 M +-13 -11 V +.22 g 5153 4568 M +-13 -9 V +.22 g 5140 4559 M +-14 -12 V +.22 g 5126 4547 M +-13 -9 V +.22 g 5113 4538 M +-15 -10 V +.22 g 5098 4528 M +-14 -10 V +.22 g 5084 4518 M +-13 -9 V +.22 g 5071 4509 M +-17 -11 V +.22 g 5054 4498 M +-10 -7 V +.22 g 5044 4491 M +-22 -13 V +.22 g 5022 4478 M +-5 -4 V +.22 g 5017 4474 M +-28 -16 V +.22 g .22 g 4989 4458 M +-27 -16 V +.22 g 4962 4442 M +-8 -4 V +.22 g 4954 4438 M +-19 -11 V +stroke 4935 4427 M +.22 g 4935 4427 M +-17 -10 V +.22 g 4918 4417 M +-10 -5 V +.22 g 4908 4412 M +-28 -15 V +.22 g .22 g 4880 4397 M +-27 -14 V +.22 g 4853 4383 M +-11 -6 V +.22 g 4842 4377 M +-16 -9 V +.22 g 4826 4368 M +-22 -11 V +.22 g 4804 4357 M +-5 -3 V +.22 g 4799 4354 M +-28 -14 V +.22 g 4771 4340 M +-6 -3 V +.22 g 4765 4337 M +-21 -12 V +.22 g 4744 4325 M +-16 -8 V +.22 g 4728 4317 M +-11 -6 V +.22 g 4717 4311 M +-27 -14 V +.22 g 4690 4297 M +0 -1 V +.22 g 4690 4296 M +-28 -15 V +.22 g 4662 4281 M +-8 -5 V +.22 g 4654 4276 M +-19 -10 V +.22 g 4635 4266 M +-16 -10 V +.22 g 4619 4256 M +-11 -6 V +.22 g 4608 4250 M +-24 -14 V +.22 g 4584 4236 M +-3 -2 V +.22 g 4581 4234 M +-28 -17 V +.22 g 4553 4217 M +-2 -1 V +.22 g 4551 4216 M +-25 -16 V +.22 g 4526 4200 M +-7 -4 V +.22 g 4519 4196 M +-20 -13 V +.22 g 4499 4183 M +-12 -7 V +.22 g 4487 4176 M +-15 -11 V +.22 g 4472 4165 M +-16 -10 V +.22 g 4456 4155 M +-12 -8 V +.22 g 4444 4147 M +-18 -12 V +.22 g 4426 4135 M +-9 -6 V +.22 g 4417 4129 M +-20 -14 V +.22 g 4397 4115 M +-7 -5 V +.22 g 4390 4110 M +-22 -15 V +.22 g 4368 4095 M +-5 -4 V +.22 g 4363 4091 M +-23 -16 V +.22 g 4340 4075 M +-5 -3 V +.22 g 4335 4072 M +-24 -17 V +.22 g 4311 4055 M +-3 -3 V +.22 g 4308 4052 M +-25 -17 V +.22 g 4283 4035 M +-2 -2 V +.22 g 4281 4033 M +-25 -19 V +.22 g 4256 4014 M +-2 -1 V +.22 g 4254 4013 M +-26 -19 V +.22 g 4228 3994 M +-2 -1 V +.22 g 4226 3993 M +-26 -19 V +.22 g 4200 3974 M +-1 -1 V +.22 g 4199 3973 M +-27 -19 V +.22 g .22 g 4172 3954 M +-27 -19 V +.22 g 4145 3935 M +-2 -1 V +stroke 4143 3934 M +.22 g 4143 3934 M +-26 -18 V +.22 g 4117 3916 M +-3 -2 V +.22 g 4114 3914 M +-24 -17 V +.22 g 4090 3897 M +-6 -4 V +.22 g 4084 3893 M +-21 -14 V +.22 g 4063 3879 M +-10 -6 V +.22 g 4053 3873 M +-17 -11 V +.22 g 4036 3862 M +-15 -9 V +.22 g 4021 3853 M +-13 -8 V +.22 g 4008 3845 M +-21 -12 V +.22 g 3987 3833 M +-6 -3 V +.22 g 3981 3830 M +-27 -15 V +.22 g 3954 3815 M +-4 -2 V +.22 g 3950 3813 M +-23 -12 V +.22 g 3927 3801 M +-18 -8 V +.22 g 3909 3793 M +-10 -5 V +.22 g 3899 3788 M +-27 -11 V +.22 g 3872 3777 M +-11 -5 V +.22 g 3861 3772 M +-16 -6 V +.22 g 3845 3766 M +-27 -9 V +.22 g 3818 3757 M +-18 -5 V +.22 g 3800 3752 M +-10 -2 V +.22 g 3790 3750 M +-27 -7 V +.22 g 3763 3743 M +-27 -4 V +0 g .22 g 6052 1764 M +.22 g 6052 1764 M +-5 -7 V +.22 g 6047 1757 M +-14 -20 V +.22 g 6033 1737 M +-8 -12 V +.22 g 6025 1725 M +-6 -8 V +.22 g 6019 1717 M +-14 -20 V +.22 g 6005 1697 M +-7 -10 V +.22 g 5998 1687 M +-8 -11 V +.22 g 5990 1676 M +-15 -20 V +.22 g 5975 1656 M +-5 -6 V +.22 g 5970 1650 M +-10 -14 V +.22 g 5960 1636 M +-15 -20 V +.22 g 5945 1616 M +-2 -2 V +.22 g 5943 1614 M +-14 -18 V +.22 g 5929 1596 M +-13 -17 V +.22 g 5916 1579 M +-3 -3 V +.22 g 5913 1576 M +-16 -21 V +.22 g 5897 1555 M +-8 -11 V +.22 g 5889 1544 M +-8 -9 V +.22 g 5881 1535 M +-17 -20 V +.22 g 5864 1515 M +-3 -4 V +.22 g 5861 1511 M +-13 -16 V +.22 g 5848 1495 M +-14 -16 V +.22 g 5834 1479 M +-3 -4 V +.22 g 5831 1475 M +-17 -20 V +.22 g 5814 1455 M +-7 -8 V +.22 g 5807 1447 M +-11 -12 V +.22 g 5796 1435 M +-16 -20 V +.22 g 5780 1415 M +-1 -1 V +stroke 5779 1414 M +.22 g 5779 1414 M +-18 -20 V +.22 g 5761 1394 M +-9 -10 V +.22 g 5752 1384 M +-9 -10 V +.22 g 5743 1374 M +-18 -20 V +.22 g .22 g 5725 1354 M +-18 -20 V +.22 g 5707 1334 M +-9 -11 V +.22 g 5698 1323 M +-9 -9 V +.22 g 5689 1314 M +-18 -21 V +.22 g .22 g 5671 1293 M +-18 -20 V +.22 g 5653 1273 M +-10 -10 V +.22 g 5643 1263 M +-8 -10 V +.22 g 5635 1253 M +-19 -20 V +.22 g .22 g 5616 1233 M +-18 -20 V +.22 g 5598 1213 M +-9 -11 V +.22 g 5589 1202 M +-9 -9 V +.22 g 5580 1193 M +-18 -21 V +.22 g .22 g 5562 1172 M +-18 -20 V +.22 g 5544 1152 M +-10 -11 V +.22 g 5534 1141 M +-7 -9 V +.22 g 5527 1132 M +-18 -20 V +.22 g 5509 1112 M +-2 -2 V +.22 g 5507 1110 M +-15 -18 V +.22 g 5492 1092 M +-12 -14 V +.22 g 5480 1078 M +-6 -6 V +.22 g 5474 1072 M +-17 -20 V +.22 g 5457 1052 M +-4 -6 V +.22 g 5453 1046 M +-13 -15 V +.22 g 5440 1031 M +-15 -17 V +.22 g 5425 1014 M +-2 -3 V +.22 g 5423 1011 M +-16 -20 V +.22 g 5407 991 M +-9 -10 V +.22 g 5398 981 M +-8 -10 V +.22 g 5390 971 M +-16 -20 V +.22 g 5374 951 M +-3 -4 V +.22 g 5371 947 M +-14 -16 V +.22 g 5357 931 M +-13 -18 V +.22 g 5344 913 M +-3 -3 V +.22 g 5341 910 M +-16 -20 V +.22 g 5325 890 M +-9 -11 V +.22 g 5316 879 M +-7 -9 V +.22 g 5309 870 M +-15 -20 V +.22 g 5294 850 M +-5 -6 V +.22 g 5289 844 M +-11 -14 V +.22 g 5278 830 M +-15 -20 V +.22 g 5263 810 M +-1 -1 V +.22 g 5262 809 M +-15 -19 V +.22 g 5247 790 M +-12 -17 V +.22 g 5235 773 M +-3 -4 V +.22 g 5232 769 M +-16 -20 V +.22 g 5216 749 M +-9 -12 V +.22 g 5207 737 M +-6 -8 V +.22 g 5201 729 M +-15 -20 V +stroke 5186 709 M +.22 g 5186 709 M +-6 -8 V +.22 g 5180 701 M +-9 -12 V +.22 g 5171 689 M +-15 -20 V +.22 g 5156 669 M +-3 -5 V +.22 g 5153 664 M +-12 -16 V +.22 g 5141 648 M +-15 -20 V +.22 g .22 g 5126 628 M +-15 -20 V +.22 g 5111 608 M +-13 -17 V +.22 g 5098 591 M +-2 -3 V +0 g .2 g 1256 1817 M +.2 g 1256 1817 M +0 1 V +.2 g 1256 1818 M +-13 20 V +.2 g 1243 1838 M +-14 20 V +.2 g 1229 1858 M +0 1 V +.2 g 1229 1859 M +-12 19 V +.2 g 1217 1878 M +-13 20 V +.2 g 1204 1898 M +-2 3 V +.2 g 1202 1901 M +-11 17 V +.2 g 1191 1918 M +-12 20 V +.2 g 1179 1938 M +-5 8 V +.2 g 1174 1946 M +-7 13 V +.2 g 1167 1959 M +-12 20 V +.2 g 1155 1979 M +-8 12 V +.2 g 1147 1991 M +-4 8 V +.2 g 1143 1999 M +-12 20 V +.2 g 1131 2019 M +-11 19 V +.2 g 1120 2038 M +-1 1 V +.2 g 1119 2039 M +-11 20 V +.2 g 1108 2059 M +-11 20 V +.2 g 1097 2079 M +-4 8 V +.2 g 1093 2087 M +-7 13 V +.2 g 1086 2100 M +-11 20 V +.2 g 1075 2120 M +-10 17 V +.2 g 1065 2137 M +-1 3 V +.2 g 1064 2140 M +-11 20 V +.2 g 1053 2160 M +-11 20 V +.2 g 1042 2180 M +-4 8 V +.2 g 1038 2188 M +-6 12 V +.2 g 1032 2200 M +-10 21 V +.2 g 1022 2221 M +-11 20 V +.2 g .2 g 1011 2241 M +-10 20 V +.2 g 1001 2261 M +-10 20 V +.2 g 991 2281 M +-7 15 V +.2 g 984 2296 M +-3 5 V +.2 g 981 2301 M +-10 20 V +.2 g 971 2321 M +-10 20 V +.2 g 961 2341 M +-5 11 V +.2 g 956 2352 M +-4 10 V +.2 g 952 2362 M +-10 20 V +.2 g 942 2382 M +-10 20 V +.2 g 932 2402 M +-3 7 V +.2 g 929 2409 M +-6 13 V +.2 g 923 2422 M +-9 20 V +stroke 914 2442 M +.2 g 914 2442 M +-10 20 V +.2 g 904 2462 M +-2 5 V +.2 g 902 2467 M +-7 16 V +.2 g 895 2483 M +-9 20 V +.2 g 886 2503 M +-10 20 V +.2 g 876 2523 M +-1 4 V +.2 g 875 2527 M +-8 16 V +.2 g 867 2543 M +-9 20 V +.2 g 858 2563 M +-9 20 V +.2 g 849 2583 M +-2 5 V +.2 g 847 2588 M +-6 16 V +.2 g 841 2604 M +-9 20 V +.2 g 832 2624 M +-9 20 V +.2 g 823 2644 M +-3 6 V +.2 g 820 2650 M +-6 14 V +.2 g 814 2664 M +-9 20 V +.2 g 805 2684 M +-8 20 V +.2 g 797 2704 M +-4 9 V +.2 g 793 2713 M +-5 11 V +.2 g 788 2724 M +-8 21 V +.2 g 780 2745 M +-9 20 V +.2 g 771 2765 M +-6 12 V +.2 g 765 2777 M +-3 8 V +.2 g 762 2785 M +-8 20 V +.2 g 754 2805 M +-8 20 V +.2 g 746 2825 M +-8 17 V +.2 g 738 2842 M +-1 3 V +.2 g 737 2845 M +-8 21 V +.2 g 729 2866 M +-9 20 V +.2 g 720 2886 M +-8 20 V +.2 g 712 2906 M +-1 2 V +.2 g 711 2908 M +-7 18 V +.2 g 704 2926 M +-9 20 V +.2 g 695 2946 M +-8 20 V +.2 g 687 2966 M +-3 9 V +.2 g 684 2975 M +-5 11 V +.2 g 679 2986 M +-8 21 V +.2 g 671 3007 M +-8 20 V +.2 g 663 3027 M +-6 15 V +.2 g 657 3042 M +-3 5 V +.2 g 654 3047 M +-8 20 V +.2 g 646 3067 M +-8 20 V +.2 g 638 3087 M +-8 20 V +.2 g 630 3107 M +-1 2 V +.2 g 629 3109 M +-7 19 V +.2 g 622 3128 M +-8 20 V +.2 g 614 3148 M +-8 20 V +.2 g 606 3168 M +-4 9 V +0 g .2 g 2288 588 M +.2 g 2288 588 M +-16 20 V +.2 g 2272 608 M +-8 10 V +.2 g 2264 618 M +-7 10 V +.2 g 2257 628 M +-16 20 V +stroke 2241 648 M +.2 g 2241 648 M +-4 6 V +.2 g 2237 654 M +-11 15 V +.2 g 2226 669 M +-15 20 V +.2 g 2211 689 M +-1 1 V +.2 g 2210 690 M +-15 19 V +.2 g 2195 709 M +-12 16 V +.2 g 2183 725 M +-3 4 V +.2 g 2180 729 M +-16 20 V +.2 g 2164 749 M +-9 12 V +.2 g 2155 761 M +-6 8 V +.2 g 2149 769 M +-16 21 V +.2 g 2133 790 M +-5 6 V +.2 g 2128 796 M +-11 14 V +.2 g 2117 810 M +-15 20 V +.2 g 2102 830 M +-1 1 V +.2 g 2101 831 M +-15 19 V +.2 g 2086 850 M +-12 15 V +.2 g 2074 865 M +-4 5 V +.2 g 2070 870 M +-17 20 V +.2 g 2053 890 M +-7 9 V +.2 g 2046 899 M +-9 11 V +.2 g 2037 910 M +-16 21 V +.2 g 2021 931 M +-2 2 V +.2 g 2019 933 M +-15 18 V +.2 g 2004 951 M +-12 15 V +.2 g 1992 966 M +-5 5 V +.2 g 1987 971 M +-17 20 V +.2 g 1970 991 M +-5 7 V +.2 g 1965 998 M +-12 13 V +.2 g 1953 1011 M +-16 19 V +.2 g 1937 1030 M +-1 1 V +.2 g 1936 1031 M +-18 21 V +.2 g 1918 1052 M +-8 9 V +.2 g 1910 1061 M +-10 11 V +.2 g 1900 1072 M +-17 20 V +.2 g .2 g 1883 1092 M +-19 20 V +.2 g 1864 1112 M +-8 10 V +.2 g 1856 1122 M +-10 10 V +.2 g 1846 1132 M +-18 20 V +.2 g .2 g 1828 1152 M +-19 20 V +.2 g 1809 1172 M +-8 9 V +.2 g 1801 1181 M +-11 12 V +.2 g 1790 1193 M +-16 17 V +.2 g 1774 1210 M +-3 3 V +.2 g 1771 1213 M +-19 20 V +.2 g 1752 1233 M +-5 6 V +.2 g 1747 1239 M +-14 14 V +.2 g 1733 1253 M +-14 14 V +.2 g 1719 1267 M +-5 6 V +.2 g 1714 1273 M +-20 20 V +.2 g 1694 1293 M +-2 3 V +.2 g 1692 1296 M +-17 18 V +stroke 1675 1314 M +.2 g 1675 1314 M +-10 10 V +.2 g 1665 1324 M +-9 10 V +.2 g 1656 1334 M +-18 19 V +.2 g 1638 1353 M +-2 1 V +.2 g 1636 1354 M +-19 20 V +.2 g 1617 1374 M +-7 7 V +.2 g 1610 1381 M +-12 13 V +.2 g 1598 1394 M +-15 17 V +.2 g 1583 1411 M +-4 3 V +.2 g 1579 1414 M +-18 21 V +.2 g 1561 1435 M +-5 5 V +.2 g 1556 1440 M +-14 15 V +.2 g 1542 1455 M +-13 15 V +.2 g 1529 1470 M +-5 5 V +.2 g 1524 1475 M +-18 20 V +.2 g 1506 1495 M +-5 5 V +.2 g 1501 1500 M +-12 15 V +.2 g 1489 1515 M +-15 17 V +.2 g 1474 1532 M +-3 3 V +.2 g 1471 1535 M +-17 20 V +.2 g 1454 1555 M +-7 9 V +.2 g 1447 1564 M +-10 12 V +.2 g 1437 1576 M +-17 20 V +.2 g 1420 1596 M +0 1 V +.2 g 1420 1597 M +-16 19 V +.2 g 1404 1616 M +-12 15 V +.2 g 1392 1631 M +-4 5 V +.2 g 1388 1636 M +-16 20 V +.2 g 1372 1656 M +-7 10 V +.2 g 1365 1666 M +-8 10 V +.2 g 1357 1676 M +-15 21 V +.2 g 1342 1697 M +-4 5 V +.2 g 1338 1702 M +-11 15 V +.2 g 1327 1717 M +-15 20 V +.2 g 1312 1737 M +-1 2 V +.2 g 1311 1739 M +-13 18 V +.2 g 1298 1757 M +-14 20 V +.2 g 1284 1777 M +-1 1 V +.2 g 1283 1778 M +-13 19 V +.2 g 1270 1797 M +-14 20 V +0 g .2 g 2292 4332 M +.2 g 2292 4332 M +-8 5 V +.2 g 2284 4337 M +-20 12 V +.2 g 2264 4349 M +-12 8 V +.2 g 2252 4357 M +-15 9 V +.2 g 2237 4366 M +-16 11 V +.2 g 2221 4377 M +-11 8 V +.2 g 2210 4385 M +-17 12 V +.2 g 2193 4397 M +-10 8 V +.2 g 2183 4405 M +-17 12 V +.2 g 2166 4417 M +-11 9 V +.2 g 2155 4426 M +-14 12 V +.2 g 2141 4438 M +-13 10 V +stroke 2128 4448 M +.2 g 2128 4448 M +-11 10 V +.2 g 2117 4458 M +-16 14 V +.2 g 2101 4472 M +-7 6 V +.2 g 2094 4478 M +-20 19 V +.2 g 2074 4497 M +-2 1 V +.2 g 2072 4498 M +-21 20 V +.2 g 2051 4518 M +-5 5 V +.2 g 2046 4523 M +-15 15 V +.2 g 2031 4538 M +-12 13 V +.2 g 2019 4551 M +-7 8 V +.2 g 2012 4559 M +-18 20 V +.2 g 1994 4579 M +-2 2 V +.2 g 1992 4581 M +-16 18 V +.2 g 1976 4599 M +-11 13 V +.2 g 1965 4612 M +-6 7 V +0 g .2 g 3922 3692 M +.2 g 3922 3692 M +-23 -11 V +.2 g 3899 3681 M +-21 -9 V +.2 g 3878 3672 M +-6 -3 V +.2 g 3872 3669 M +-27 -11 V +.2 g 3845 3658 M +-20 -6 V +.2 g 3825 3652 M +-7 -3 V +.2 g 3818 3649 M +-28 -8 V +.2 g 3790 3641 M +-27 -6 V +.2 g 3763 3635 M +-18 -4 V +.2 g 3745 3631 M +-9 -1 V +.2 g 3736 3630 M +-27 -4 V +.2 g 3709 3626 M +-28 -1 V +.2 g 3681 3625 M +-27 0 V +.2 g 3654 3625 M +-27 1 V +.2 g 3627 3626 M +-27 3 V +.2 g 3600 3629 M +-13 2 V +.2 g 3587 3631 M +-15 3 V +.2 g 3572 3634 M +-27 6 V +.2 g 3545 3640 M +-27 7 V +.2 g 3518 3647 M +-13 5 V +.2 g 3505 3652 M +-14 4 V +.2 g 3491 3656 M +-28 11 V +.2 g 3463 3667 M +-11 5 V +.2 g 3452 3672 M +-16 6 V +.2 g 3436 3678 M +-27 13 V +.2 g 3409 3691 M +-2 1 V +.2 g 3407 3692 M +-25 13 V +.2 g 3382 3705 M +-14 7 V +.2 g 3368 3712 M +-14 7 V +.2 g 3354 3719 M +-22 13 V +.2 g 3332 3732 M +-5 3 V +.2 g 3327 3735 M +-27 16 V +.2 g 3300 3751 M +-2 1 V +.2 g 3298 3752 M +-25 16 V +.2 g 3273 3768 M +-7 4 V +.2 g 3266 3772 M +-21 14 V +.2 g 3245 3786 M +-10 7 V +stroke 3235 3793 M +.2 g 3235 3793 M +-17 11 V +.2 g 3218 3804 M +-13 9 V +.2 g 3205 3813 M +-14 9 V +.2 g 3191 3822 M +-16 11 V +.2 g 3175 3833 M +-11 8 V +.2 g 3164 3841 M +-18 12 V +.2 g 3146 3853 M +-10 7 V +.2 g 3136 3860 M +-19 13 V +.2 g 3117 3873 M +-8 6 V +.2 g 3109 3879 M +-22 14 V +.2 g 3087 3893 M +-5 4 V +.2 g 3082 3897 M +-24 17 V +.2 g 3058 3914 M +-3 2 V +.2 g 3055 3916 M +-26 18 V +.2 g 3029 3934 M +-2 1 V +.2 g 3027 3935 M +-27 18 V +.2 g 3000 3953 M +-1 1 V +.2 g 2999 3954 M +-26 17 V +.2 g 2973 3971 M +-4 3 V +.2 g 2969 3974 M +-23 15 V +.2 g 2946 3989 M +-8 5 V +.2 g 2938 3994 M +-20 13 V +.2 g 2918 4007 M +-12 7 V +.2 g 2906 4014 M +-15 10 V +.2 g 2891 4024 M +-18 11 V +.2 g 2873 4035 M +-9 5 V +.2 g 2864 4040 M +-24 15 V +.2 g 2840 4055 M +-3 1 V +.2 g 2837 4056 M +-28 16 V +.2 g 2809 4072 M +-4 3 V +.2 g 2805 4075 M +-23 13 V +.2 g 2782 4088 M +-14 7 V +.2 g 2768 4095 M +-13 7 V +.2 g 2755 4102 M +-24 13 V +.2 g 2731 4115 M +-3 2 V +.2 g 2728 4117 M +-28 14 V +.2 g 2700 4131 M +-8 4 V +.2 g 2692 4135 M +-19 10 V +.2 g 2673 4145 M +-22 10 V +.2 g 2651 4155 M +-5 3 V +.2 g 2646 4158 M +-27 13 V +.2 g 2619 4171 M +-10 5 V +.2 g 2609 4176 M +-18 8 V +.2 g 2591 4184 M +-25 12 V +.2 g 2566 4196 M +-2 1 V +.2 g 2564 4197 M +-27 12 V +.2 g 2537 4209 M +-15 7 V +.2 g 2522 4216 M +-12 6 V +.2 g 2510 4222 M +-28 12 V +.2 g 2482 4234 M +-3 2 V +.2 g 2479 4236 M +-24 11 V +.2 g 2455 4247 M +-19 9 V +stroke 2436 4256 M +.2 g 2436 4256 M +-8 4 V +.2 g 2428 4260 M +-27 14 V +.2 g 2401 4274 M +-6 2 V +.2 g 2395 4276 M +-22 11 V +.2 g 2373 4287 M +-17 10 V +.2 g 2356 4297 M +-10 5 V +.2 g 2346 4302 M +-27 15 V +.2 g .2 g 2319 4317 M +-27 15 V +0 g .2 g 5325 4619 M +.2 g 5325 4619 M +-9 -9 V +.2 g 5316 4610 M +-10 -11 V +.2 g 5306 4599 M +-17 -18 V +.2 g 5289 4581 M +-3 -2 V +.2 g 5286 4579 M +-20 -20 V +.2 g 5266 4559 M +-4 -5 V +.2 g 5262 4554 M +-17 -16 V +.2 g 5245 4538 M +-10 -9 V +.2 g 5235 4529 M +-13 -11 V +.2 g 5222 4518 M +-15 -13 V +.2 g 5207 4505 M +-8 -7 V +.2 g 5199 4498 M +-19 -16 V +.2 g 5180 4482 M +-6 -4 V +.2 g 5174 4478 M +-21 -17 V +.2 g 5153 4461 M +-5 -3 V +.2 g 5148 4458 M +-22 -17 V +.2 g 5126 4441 M +-5 -3 V +.2 g 5121 4438 M +-23 -16 V +.2 g 5098 4422 M +-6 -5 V +.2 g 5092 4417 M +-21 -14 V +.2 g 5071 4403 M +-10 -6 V +.2 g 5061 4397 M +-17 -11 V +.2 g 5044 4386 M +-15 -9 V +.2 g 5029 4377 M +-12 -7 V +.2 g 5017 4370 M +-22 -13 V +.2 g 4995 4357 M +-6 -3 V +.2 g 4989 4354 M +-27 -15 V +.2 g 4962 4339 M +-3 -2 V +.2 g 4959 4337 M +-24 -13 V +.2 g 4935 4324 M +-14 -7 V +.2 g 4921 4317 M +-13 -8 V +.2 g 4908 4309 M +-25 -12 V +.2 g 4883 4297 M +-3 -2 V +.2 g 4880 4295 M +-27 -14 V +.2 g 4853 4281 M +-10 -5 V +.2 g 4843 4276 M +-17 -9 V +.2 g 4826 4267 M +-22 -11 V +.2 g 4804 4256 M +-5 -2 V +.2 g 4799 4254 M +-28 -14 V +.2 g 4771 4240 M +-7 -4 V +.2 g 4764 4236 M +-20 -10 V +.2 g 4744 4226 M +-19 -10 V +.2 g 4725 4216 M +-8 -5 V +.2 g 4717 4211 M +-27 -14 V +stroke 4690 4197 M +.2 g 4690 4197 M +-2 -1 V +.2 g 4688 4196 M +-26 -14 V +.2 g 4662 4182 M +-11 -6 V +.2 g 4651 4176 M +-16 -9 V +.2 g 4635 4167 M +-20 -12 V +.2 g 4615 4155 M +-7 -4 V +.2 g 4608 4151 M +-27 -16 V +.2 g .2 g 4581 4135 M +-28 -16 V +.2 g 4553 4119 M +-6 -4 V +.2 g 4547 4115 M +-21 -13 V +.2 g 4526 4102 M +-11 -7 V +.2 g 4515 4095 M +-16 -11 V +.2 g 4499 4084 M +-15 -9 V +.2 g 4484 4075 M +-12 -8 V +.2 g 4472 4067 M +-19 -12 V +.2 g 4453 4055 M +-9 -6 V +.2 g 4444 4049 M +-20 -14 V +.2 g 4424 4035 M +-7 -5 V +.2 g 4417 4030 M +-22 -16 V +.2 g 4395 4014 M +-5 -3 V +.2 g 4390 4011 M +-24 -17 V +.2 g 4366 3994 M +-3 -2 V +.2 g 4363 3992 M +-25 -18 V +.2 g 4338 3974 M +-3 -2 V +.2 g 4335 3972 M +-25 -18 V +.2 g 4310 3954 M +-2 -2 V +.2 g 4308 3952 M +-25 -18 V +.2 g 4283 3934 M +-2 -2 V +.2 g 4281 3932 M +-25 -18 V +.2 g 4256 3914 M +-2 -2 V +.2 g 4254 3912 M +-26 -19 V +.2 g 4228 3893 M +-2 -1 V +.2 g 4226 3892 M +-25 -19 V +.2 g 4201 3873 M +-2 -1 V +.2 g 4199 3872 M +-25 -19 V +.2 g 4174 3853 M +-2 -1 V +.2 g 4172 3852 M +-26 -19 V +.2 g 4146 3833 M +-1 -1 V +.2 g 4145 3832 M +-28 -19 V +.2 g .2 g 4117 3813 M +-27 -19 V +.2 g 4090 3794 M +-1 -1 V +.2 g 4089 3793 M +-26 -18 V +.2 g 4063 3775 M +-4 -3 V +.2 g 4059 3772 M +-23 -15 V +.2 g 4036 3757 M +-8 -5 V +.2 g 4028 3752 M +-20 -12 V +.2 g 4008 3740 M +-13 -8 V +.2 g 3995 3732 M +-14 -8 V +.2 g 3981 3724 M +-21 -12 V +.2 g 3960 3712 M +-6 -3 V +.2 g 3954 3709 M +-27 -15 V +.2 g 3927 3694 M +-5 -2 V +stroke 3922 3692 M +0 g .2 g 5047 628 M +.2 g 5047 628 M +-3 -4 V +.2 g 5044 624 M +-12 -16 V +.2 g 5032 608 M +-15 -20 V +0 g .2 g 6052 1864 M +.2 g 6052 1864 M +-4 -6 V +.2 g 6048 1858 M +-14 -20 V +.2 g 6034 1838 M +-9 -13 V +.2 g 6025 1825 M +-6 -8 V +.2 g 6019 1817 M +-14 -20 V +.2 g 6005 1797 M +-7 -10 V +.2 g 5998 1787 M +-8 -10 V +.2 g 5990 1777 M +-15 -20 V +.2 g 5975 1757 M +-5 -7 V +.2 g 5970 1750 M +-10 -13 V +.2 g 5960 1737 M +-16 -20 V +.2 g 5944 1717 M +-1 -2 V +.2 g 5943 1715 M +-14 -18 V +.2 g 5929 1697 M +-13 -17 V +.2 g 5916 1680 M +-3 -4 V +.2 g 5913 1676 M +-17 -20 V +.2 g 5896 1656 M +-7 -9 V +.2 g 5889 1647 M +-9 -11 V +.2 g 5880 1636 M +-17 -20 V +.2 g 5863 1616 M +-2 -2 V +.2 g 5861 1614 M +-15 -18 V +.2 g 5846 1596 M +-12 -14 V +.2 g 5834 1582 M +-5 -6 V +.2 g 5829 1576 M +-18 -21 V +.2 g 5811 1555 M +-4 -5 V +.2 g 5807 1550 M +-14 -15 V +.2 g 5793 1535 M +-13 -16 V +.2 g 5780 1519 M +-4 -4 V +.2 g 5776 1515 M +-18 -20 V +.2 g 5758 1495 M +-6 -6 V +.2 g 5752 1489 M +-13 -14 V +.2 g 5739 1475 M +-14 -16 V +.2 g 5725 1459 M +-4 -4 V +.2 g 5721 1455 M +-18 -20 V +.2 g 5703 1435 M +-5 -6 V +.2 g 5698 1429 M +-14 -15 V +.2 g 5684 1414 M +-13 -15 V +.2 g 5671 1399 M +-5 -5 V +.2 g 5666 1394 M +-19 -20 V +.2 g 5647 1374 M +-4 -5 V +.2 g 5643 1369 M +-14 -15 V +.2 g 5629 1354 M +-13 -14 V +.2 g 5616 1340 M +-5 -6 V +.2 g 5611 1334 M +-19 -20 V +.2 g 5592 1314 M +-3 -4 V +.2 g 5589 1310 M +-15 -17 V +.2 g 5574 1293 M +-12 -13 V +.2 g 5562 1280 M +-6 -7 V +stroke 5556 1273 M +.2 g 5556 1273 M +-18 -20 V +.2 g 5538 1253 M +-4 -4 V +.2 g 5534 1249 M +-14 -16 V +.2 g 5520 1233 M +-13 -15 V +.2 g 5507 1218 M +-5 -5 V +.2 g 5502 1213 M +-17 -20 V +.2 g 5485 1193 M +-5 -6 V +.2 g 5480 1187 M +-13 -15 V +.2 g 5467 1172 M +-14 -17 V +.2 g 5453 1155 M +-3 -3 V +.2 g 5450 1152 M +-17 -20 V +.2 g 5433 1132 M +-8 -9 V +.2 g 5425 1123 M +-9 -11 V +.2 g 5416 1112 M +-16 -20 V +.2 g 5400 1092 M +-2 -2 V +.2 g 5398 1090 M +-15 -18 V +.2 g 5383 1072 M +-12 -16 V +.2 g 5371 1056 M +-4 -4 V +.2 g 5367 1052 M +-16 -21 V +.2 g 5351 1031 M +-7 -9 V +.2 g 5344 1022 M +-9 -11 V +.2 g 5335 1011 M +-16 -20 V +.2 g 5319 991 M +-3 -3 V +.2 g 5316 988 M +-13 -17 V +.2 g 5303 971 M +-14 -18 V +.2 g 5289 953 M +-1 -2 V +.2 g 5288 951 M +-16 -20 V +.2 g 5272 931 M +-10 -14 V +.2 g 5262 917 M +-5 -7 V +.2 g 5257 910 M +-16 -20 V +.2 g 5241 890 M +-6 -9 V +.2 g 5235 881 M +-9 -11 V +.2 g 5226 870 M +-15 -20 V +.2 g 5211 850 M +-4 -5 V +.2 g 5207 845 M +-11 -15 V +.2 g 5196 830 M +-15 -20 V +.2 g 5181 810 M +-1 -2 V +.2 g 5180 808 M +-14 -18 V +.2 g 5166 790 M +-13 -19 V +.2 g 5153 771 M +-2 -2 V +.2 g 5151 769 M +-15 -20 V +.2 g 5136 749 M +-10 -15 V +.2 g 5126 734 M +-4 -5 V +.2 g 5122 729 M +-15 -20 V +.2 g 5107 709 M +-9 -12 V +.2 g 5098 697 M +-6 -8 V +.2 g 5092 689 M +-15 -20 V +.2 g 5077 669 M +-6 -8 V +.2 g 5071 661 M +-9 -13 V +.2 g 5062 648 M +-15 -20 V +0 g .18 g 618 3248 M +.18 g 618 3248 M +-8 21 V +.18 g 610 3269 M +-8 19 V +stroke 602 3288 M +0 g .18 g 1338 1807 M +.18 g 1338 1807 M +-8 10 V +.18 g 1330 1817 M +-15 21 V +.18 g 1315 1838 M +-4 6 V +.18 g 1311 1844 M +-10 14 V +.18 g 1301 1858 M +-15 20 V +.18 g 1286 1878 M +-3 4 V +.18 g 1283 1882 M +-11 16 V +.18 g 1272 1898 M +-13 20 V +.18 g 1259 1918 M +-3 4 V +.18 g 1256 1922 M +-11 16 V +.18 g 1245 1938 M +-13 21 V +.18 g 1232 1959 M +-3 4 V +.18 g 1229 1963 M +-10 16 V +.18 g 1219 1979 M +-13 20 V +.18 g 1206 1999 M +-4 6 V +.18 g 1202 2005 M +-9 14 V +.18 g 1193 2019 M +-12 20 V +.18 g 1181 2039 M +-7 10 V +.18 g 1174 2049 M +-6 10 V +.18 g 1168 2059 M +-12 20 V +.18 g 1156 2079 M +-9 16 V +.18 g 1147 2095 M +-3 5 V +.18 g 1144 2100 M +-11 20 V +.18 g 1133 2120 M +-12 20 V +.18 g 1121 2140 M +-1 2 V +.18 g 1120 2142 M +-10 18 V +.18 g 1110 2160 M +-12 20 V +.18 g 1098 2180 M +-5 11 V +.18 g 1093 2191 M +-6 9 V +.18 g 1087 2200 M +-11 21 V +.18 g 1076 2221 M +-11 20 V +.18 g .18 g 1065 2241 M +-10 20 V +.18 g 1055 2261 M +-11 20 V +.18 g 1044 2281 M +-6 11 V +.18 g 1038 2292 M +-5 9 V +.18 g 1033 2301 M +-10 20 V +.18 g 1023 2321 M +-10 20 V +.18 g 1013 2341 M +-2 4 V +.18 g 1011 2345 M +-8 17 V +.18 g 1003 2362 M +-10 20 V +.18 g 993 2382 M +-9 18 V +.18 g 984 2400 M +-1 2 V +.18 g 983 2402 M +-10 20 V +.18 g 973 2422 M +-10 20 V +.18 g 963 2442 M +-7 14 V +.18 g 956 2456 M +-3 6 V +.18 g 953 2462 M +-9 21 V +.18 g 944 2483 M +-10 20 V +.18 g 934 2503 M +-5 11 V +.18 g 929 2514 M +-4 9 V +.18 g 925 2523 M +-10 20 V +.18 g 915 2543 M +-9 20 V +stroke 906 2563 M +.18 g 906 2563 M +-4 10 V +.18 g 902 2573 M +-5 10 V +.18 g 897 2583 M +-9 21 V +.18 g 888 2604 M +-9 20 V +.18 g 879 2624 M +-4 9 V +.18 g 875 2633 M +-5 11 V +.18 g 870 2644 M +-9 20 V +.18 g 861 2664 M +-9 20 V +.18 g 852 2684 M +-5 10 V +.18 g 847 2694 M +-4 10 V +.18 g 843 2704 M +-9 20 V +.18 g 834 2724 M +-9 21 V +.18 g 825 2745 M +-5 12 V +.18 g 820 2757 M +-3 8 V +.18 g 817 2765 M +-9 20 V +.18 g 808 2785 M +-9 20 V +.18 g 799 2805 M +-6 15 V +.18 g 793 2820 M +-2 5 V +.18 g 791 2825 M +-9 20 V +.18 g 782 2845 M +-8 21 V +.18 g 774 2866 M +-9 19 V +.18 g 765 2885 M +0 1 V +.18 g 765 2886 M +-8 20 V +.18 g 757 2906 M +-9 20 V +.18 g 748 2926 M +-8 20 V +.18 g 740 2946 M +-2 4 V +.18 g 738 2950 M +-6 16 V +.18 g 732 2966 M +-8 20 V +.18 g 724 2986 M +-9 21 V +.18 g 715 3007 M +-4 10 V +.18 g 711 3017 M +-4 10 V +.18 g 707 3027 M +-8 20 V +.18 g 699 3047 M +-8 20 V +.18 g 691 3067 M +-7 17 V +.18 g 684 3084 M +-2 3 V +.18 g 682 3087 M +-8 20 V +.18 g 674 3107 M +-8 21 V +.18 g 666 3128 M +-8 20 V +.18 g 658 3148 M +-1 3 V +.18 g 657 3151 M +-7 17 V +.18 g 650 3168 M +-8 20 V +.18 g 642 3188 M +-8 20 V +.18 g 634 3208 M +-5 12 V +.18 g 629 3220 M +-3 8 V +.18 g 626 3228 M +-8 20 V +0 g .18 g 2373 588 M +.18 g 2373 588 M +-16 20 V +.18 g 2357 608 M +-11 15 V +.18 g 2346 623 M +-4 5 V +.18 g 2342 628 M +-16 20 V +.18 g 2326 648 M +-7 11 V +.18 g 2319 659 M +-8 10 V +.18 g 2311 669 M +-15 20 V +stroke 2296 689 M +.18 g 2296 689 M +-4 6 V +.18 g 2292 695 M +-11 14 V +.18 g 2281 709 M +-15 20 V +.18 g 2266 729 M +-2 2 V +.18 g 2264 731 M +-14 18 V +.18 g 2250 749 M +-13 18 V +.18 g 2237 767 M +-2 2 V +.18 g 2235 769 M +-15 21 V +.18 g 2220 790 M +-10 13 V +.18 g 2210 803 M +-5 7 V +.18 g 2205 810 M +-15 20 V +.18 g 2190 830 M +-7 9 V +.18 g 2183 839 M +-9 11 V +.18 g 2174 850 M +-15 20 V +.18 g 2159 870 M +-4 5 V +.18 g 2155 875 M +-11 15 V +.18 g 2144 890 M +-16 20 V +.18 g 2128 910 M +0 1 V +.18 g 2128 911 M +-15 20 V +.18 g 2113 931 M +-12 15 V +.18 g 2101 946 M +-4 5 V +.18 g 2097 951 M +-16 20 V +.18 g 2081 971 M +-7 10 V +.18 g 2074 981 M +-9 10 V +.18 g 2065 991 M +-16 20 V +.18 g 2049 1011 M +-3 4 V +.18 g 2046 1015 M +-13 16 V +.18 g 2033 1031 M +-14 18 V +.18 g 2019 1049 M +-2 3 V +.18 g 2017 1052 M +-17 20 V +.18 g 2000 1072 M +-8 10 V +.18 g 1992 1082 M +-9 10 V +.18 g 1983 1092 M +-17 20 V +.18 g 1966 1112 M +-1 2 V +.18 g 1965 1114 M +-16 18 V +.18 g 1949 1132 M +-12 14 V +.18 g 1937 1146 M +-5 6 V +.18 g 1932 1152 M +-18 20 V +.18 g 1914 1172 M +-4 5 V +.18 g 1910 1177 M +-14 16 V +.18 g 1896 1193 M +-13 14 V +.18 g 1883 1207 M +-5 6 V +.18 g 1878 1213 M +-18 20 V +.18 g 1860 1233 M +-4 4 V +.18 g 1856 1237 M +-15 16 V +.18 g 1841 1253 M +-13 14 V +.18 g 1828 1267 M +-6 6 V +.18 g 1822 1273 M +-19 20 V +.18 g 1803 1293 M +-2 3 V +.18 g 1801 1296 M +-17 18 V +.18 g 1784 1314 M +-10 10 V +.18 g 1774 1324 M +-9 10 V +stroke 1765 1334 M +.18 g 1765 1334 M +-18 19 V +.18 g 1747 1353 M +-2 1 V +.18 g 1745 1354 M +-19 20 V +.18 g 1726 1374 M +-7 7 V +.18 g 1719 1381 M +-13 13 V +.18 g 1706 1394 M +-14 15 V +.18 g 1692 1409 M +-6 5 V +.18 g 1686 1414 M +-19 21 V +.18 g 1667 1435 M +-2 1 V +.18 g 1665 1436 M +-18 19 V +.18 g 1647 1455 M +-9 9 V +.18 g 1638 1464 M +-11 11 V +.18 g 1627 1475 M +-17 18 V +.18 g 1610 1493 M +-2 2 V +.18 g 1608 1495 M +-19 20 V +.18 g 1589 1515 M +-6 6 V +.18 g 1583 1521 M +-13 14 V +.18 g 1570 1535 M +-14 15 V +.18 g 1556 1550 M +-5 5 V +.18 g 1551 1555 M +-19 21 V +.18 g 1532 1576 M +-3 3 V +.18 g 1529 1579 M +-16 17 V +.18 g 1513 1596 M +-12 13 V +.18 g 1501 1609 M +-6 7 V +.18 g 1495 1616 M +-18 20 V +.18 g 1477 1636 M +-3 4 V +.18 g 1474 1640 M +-14 16 V +.18 g 1460 1656 M +-13 15 V +.18 g 1447 1671 M +-5 5 V +.18 g 1442 1676 M +-17 21 V +.18 g 1425 1697 M +-5 7 V +.18 g 1420 1704 M +-11 13 V +.18 g 1409 1717 M +-17 20 V +.18 g .18 g 1392 1737 M +-15 20 V +.18 g 1377 1757 M +-12 15 V +.18 g 1365 1772 M +-4 5 V +.18 g 1361 1777 M +-16 20 V +.18 g 1345 1797 M +-7 10 V +0 g .18 g 2455 4139 M +.18 g 2455 4139 M +-27 13 V +.18 g 2428 4152 M +-9 3 V +.18 g 2419 4155 M +-18 9 V +.18 g 2401 4164 M +-24 12 V +.18 g 2377 4176 M +-4 2 V +.18 g 2373 4178 M +-27 13 V +.18 g 2346 4191 M +-9 5 V +.18 g 2337 4196 M +-18 10 V +.18 g 2319 4206 M +-19 10 V +.18 g 2300 4216 M +-8 5 V +.18 g 2292 4221 M +-27 15 V +.18 g 2265 4236 M +-1 1 V +.18 g 2264 4237 M +-27 17 V +.18 g 2237 4254 M +-4 2 V +stroke 2233 4256 M +.18 g 2233 4256 M +-23 16 V +.18 g 2210 4272 M +-7 4 V +.18 g 2203 4276 M +-20 15 V +.18 g 2183 4291 M +-8 6 V +.18 g 2175 4297 M +-20 14 V +.18 g 2155 4311 M +-7 6 V +.18 g 2148 4317 M +-20 16 V +.18 g 2128 4333 M +-4 4 V +.18 g 2124 4337 M +-23 19 V +.18 g 2101 4356 M +-1 1 V +.18 g 2100 4357 M +-22 20 V +.18 g 2078 4377 M +-4 4 V +.18 g 2074 4381 M +-17 16 V +.18 g 2057 4397 M +-11 10 V +.18 g 2046 4407 M +-10 10 V +.18 g 2036 4417 M +-17 18 V +.18 g 2019 4435 M +-2 3 V +.18 g 2017 4438 M +-19 20 V +.18 g 1998 4458 M +-6 7 V +.18 g 1992 4465 M +-12 13 V +.18 g 1980 4478 M +-15 18 V +.18 g 1965 4496 M +-2 2 V +.18 g 1963 4498 M +-17 20 V +.18 g 1946 4518 M +-9 11 V +.18 g 1937 4529 M +-7 9 V +.18 g 1930 4538 M +-16 21 V +.18 g 1914 4559 M +-4 5 V +.18 g 1910 4564 M +-11 15 V +.18 g 1899 4579 M +-16 20 V +.18 g 1883 4599 M +0 1 V +.18 g 1883 4600 M +-14 19 V +0 g .18 g 4043 3652 M +.18 g 4043 3652 M +-7 -6 V +.18 g 4036 3646 M +-23 -15 V +.18 g 4013 3631 M +-5 -2 V +.18 g 4008 3629 M +-27 -17 V +.18 g 3981 3612 M +-1 -1 V +.18 g 3980 3611 M +-26 -15 V +.18 g 3954 3596 M +-9 -5 V +.18 g 3945 3591 M +-18 -10 V +.18 g 3927 3581 M +-20 -10 V +.18 g 3907 3571 M +-8 -4 V +.18 g 3899 3567 M +-27 -12 V +.18 g 3872 3555 M +-9 -4 V +.18 g 3863 3551 M +-18 -8 V +.18 g 3845 3543 M +-27 -9 V +.18 g 3818 3534 M +-11 -3 V +.18 g 3807 3531 M +-17 -5 V +.18 g 3790 3526 M +-27 -7 V +.18 g 3763 3519 M +-27 -5 V +.18 g 3736 3514 M +-27 -4 V +.18 g .18 g 3709 3510 M +-28 -1 V +.18 g 3681 3509 M +-27 0 V +stroke 3654 3509 M +.18 g 3654 3509 M +-27 1 V +.18 g 3627 3510 M +-3 0 V +.18 g 3624 3510 M +-24 3 V +.18 g 3600 3513 M +-28 5 V +.18 g 3572 3518 M +-27 7 V +.18 g 3545 3525 M +-20 6 V +.18 g 3525 3531 M +-7 2 V +.18 g 3518 3533 M +-27 9 V +.18 g 3491 3542 M +-23 9 V +.18 g 3468 3551 M +-5 2 V +.18 g 3463 3553 M +-27 12 V +.18 g 3436 3565 M +-13 6 V +.18 g 3423 3571 M +-14 7 V +.18 g 3409 3578 M +-25 13 V +.18 g 3384 3591 M +-2 1 V +.18 g 3382 3592 M +-28 16 V +.18 g 3354 3608 M +-6 3 V +.18 g 3348 3611 M +-21 13 V +.18 g 3327 3624 M +-12 7 V +.18 g 3315 3631 M +-15 10 V +.18 g 3300 3641 M +-17 11 V +.18 g 3283 3652 M +-10 6 V +.18 g 3273 3658 M +-20 14 V +.18 g 3253 3672 M +-8 5 V +.18 g 3245 3677 M +-22 15 V +.18 g 3223 3692 M +-5 3 V +.18 g 3218 3695 M +-24 17 V +.18 g 3194 3712 M +-3 2 V +.18 g 3191 3714 M +-26 18 V +.18 g 3165 3732 M +-1 1 V +.18 g 3164 3733 M +-27 19 V +.18 g 3137 3752 M +-1 1 V +.18 g 3136 3753 M +-27 19 V +.18 g 3109 3772 M +-1 0 V +.18 g 3108 3772 M +-26 19 V +.18 g 3082 3791 M +-2 2 V +.18 g 3080 3793 M +-25 18 V +.18 g 3055 3811 M +-4 2 V +.18 g 3051 3813 M +-24 17 V +.18 g 3027 3830 M +-5 3 V +.18 g 3022 3833 M +-22 15 V +.18 g 3000 3848 M +-7 5 V +.18 g 2993 3853 M +-20 14 V +.18 g 2973 3867 M +-10 6 V +.18 g 2963 3873 M +-17 12 V +.18 g 2946 3885 M +-14 8 V +.18 g 2932 3893 M +-14 10 V +.18 g 2918 3903 M +-17 11 V +.18 g 2901 3914 M +-10 6 V +.18 g 2891 3920 M +-23 14 V +.18 g 2868 3934 M +-4 3 V +.18 g 2864 3937 M +-27 16 V +stroke 2837 3953 M +.18 g 2837 3953 M +-2 1 V +.18 g 2835 3954 M +-26 15 V +.18 g 2809 3969 M +-9 5 V +.18 g 2800 3974 M +-18 10 V +.18 g 2782 3984 M +-19 10 V +.18 g 2763 3994 M +-8 5 V +.18 g 2755 3999 M +-27 14 V +.18 g 2728 4013 M +-3 1 V +.18 g 2725 4014 M +-25 13 V +.18 g 2700 4027 M +-15 8 V +.18 g 2685 4035 M +-12 5 V +.18 g 2673 4040 M +-27 13 V +.18 g 2646 4053 M +-3 2 V +.18 g 2643 4055 M +-24 11 V +.18 g 2619 4066 M +-20 9 V +.18 g 2599 4075 M +-8 3 V +.18 g 2591 4078 M +-27 13 V +.18 g 2564 4091 M +-10 4 V +.18 g 2554 4095 M +-17 8 V +.18 g 2537 4103 M +-27 12 V +.18 g 2510 4115 M +-1 0 V +.18 g 2509 4115 M +-27 12 V +.18 g 2482 4127 M +-18 8 V +.18 g 2464 4135 M +-9 4 V +0 g .18 g 5422 4619 M +.18 g 5422 4619 M +-15 -20 V +.18 g 5407 4599 M +-9 -11 V +.18 g 5398 4588 M +-8 -9 V +.18 g 5390 4579 M +-16 -20 V +.18 g 5374 4559 M +-3 -4 V +.18 g 5371 4555 M +-15 -17 V +.18 g 5356 4538 M +-12 -14 V +.18 g 5344 4524 M +-5 -6 V +.18 g 5339 4518 M +-19 -20 V +.18 g 5320 4498 M +-4 -4 V +.18 g 5316 4494 M +-15 -16 V +.18 g 5301 4478 M +-12 -12 V +.18 g 5289 4466 M +-8 -8 V +.18 g 5281 4458 M +-19 -19 V +.18 g 5262 4439 M +-2 -1 V +.18 g 5260 4438 M +-22 -21 V +.18 g 5238 4417 M +-3 -3 V +.18 g 5235 4414 M +-20 -17 V +.18 g 5215 4397 M +-8 -7 V +.18 g 5207 4390 M +-16 -13 V +.18 g 5191 4377 M +-11 -9 V +.18 g 5180 4368 M +-15 -11 V +.18 g 5165 4357 M +-12 -10 V +.18 g 5153 4347 M +-15 -10 V +.18 g 5138 4337 M +-12 -9 V +.18 g 5126 4328 M +-17 -11 V +.18 g 5109 4317 M +-11 -8 V +.18 g 5098 4309 M +-19 -12 V +stroke 5079 4297 M +.18 g 5079 4297 M +-8 -5 V +.18 g 5071 4292 M +-25 -16 V +.18 g 5046 4276 M +-2 -1 V +.18 g 5044 4275 M +-27 -16 V +.18 g 5017 4259 M +-6 -3 V +.18 g 5011 4256 M +-22 -12 V +.18 g 4989 4244 M +-14 -8 V +.18 g 4975 4236 M +-13 -7 V +.18 g 4962 4229 M +-26 -13 V +.18 g 4936 4216 M +-1 -1 V +.18 g 4935 4215 M +-27 -14 V +.18 g 4908 4201 M +-12 -5 V +.18 g 4896 4196 M +-16 -8 V +.18 g 4880 4188 M +-24 -12 V +.18 g 4856 4176 M +-3 -2 V +.18 g 4853 4174 M +-27 -13 V +.18 g 4826 4161 M +-11 -6 V +.18 g 4815 4155 M +-16 -7 V +.18 g 4799 4148 M +-25 -13 V +.18 g 4774 4135 M +-3 -1 V +.18 g 4771 4134 M +-27 -14 V +.18 g 4744 4120 M +-10 -5 V +.18 g 4734 4115 M +-17 -9 V +.18 g 4717 4106 M +-22 -11 V +.18 g 4695 4095 M +-5 -3 V +.18 g 4690 4092 M +-28 -14 V +.18 g 4662 4078 M +-5 -3 V +.18 g 4657 4075 M +-22 -12 V +.18 g 4635 4063 M +-14 -8 V +.18 g 4621 4055 M +-13 -8 V +.18 g 4608 4047 M +-22 -12 V +.18 g 4586 4035 M +-5 -4 V +.18 g 4581 4031 M +-28 -16 V +.18 g 4553 4015 M +-1 -1 V +.18 g 4552 4014 M +-26 -16 V +.18 g 4526 3998 M +-6 -4 V +.18 g 4520 3994 M +-21 -13 V +.18 g 4499 3981 M +-11 -7 V +.18 g 4488 3974 M +-16 -11 V +.18 g 4472 3963 M +-14 -9 V +.18 g 4458 3954 M +-14 -9 V +.18 g 4444 3945 M +-15 -11 V +.18 g 4429 3934 M +-12 -8 V +.18 g 4417 3926 M +-17 -12 V +.18 g 4400 3914 M +-10 -7 V +.18 g 4390 3907 M +-19 -14 V +.18 g 4371 3893 M +-8 -6 V +.18 g 4363 3887 M +-19 -14 V +.18 g 4344 3873 M +-9 -6 V +.18 g 4335 3867 M +-18 -14 V +.18 g 4317 3853 M +-9 -6 V +.18 g 4308 3847 M +-18 -14 V +stroke 4290 3833 M +.18 g 4290 3833 M +-9 -7 V +.18 g 4281 3826 M +-18 -13 V +.18 g 4263 3813 M +-9 -7 V +.18 g 4254 3806 M +-18 -13 V +.18 g 4236 3793 M +-10 -8 V +.18 g 4226 3785 M +-16 -13 V +.18 g 4210 3772 M +-11 -8 V +.18 g 4199 3764 M +-16 -12 V +.18 g 4183 3752 M +-11 -8 V +.18 g 4172 3744 M +-16 -12 V +.18 g 4156 3732 M +-11 -8 V +.18 g 4145 3724 M +-16 -12 V +.18 g 4129 3712 M +-12 -8 V +.18 g 4117 3704 M +-16 -12 V +.18 g 4101 3692 M +-11 -8 V +.18 g 4090 3684 M +-17 -12 V +.18 g 4073 3672 M +-10 -7 V +.18 g 4063 3665 M +-20 -13 V +0 g .18 g 5039 729 M +.18 g 5039 729 M +-14 -20 V +.18 g 5025 709 M +-8 -11 V +.18 g 5017 698 M +-7 -9 V +.18 g 5010 689 M +-15 -20 V +.18 g 4995 669 M +-6 -8 V +.18 g 4989 661 M +-9 -13 V +.18 g 4980 648 M +-15 -20 V +.18 g 4965 628 M +-3 -3 V +.18 g 4962 625 M +-13 -17 V +.18 g 4949 608 M +-14 -19 V +.18 g 4935 589 M +-1 -1 V +0 g .18 g 6052 1969 M +.18 g 6052 1969 M +-7 -10 V +.18 g 6045 1959 M +-14 -21 V +.18 g 6031 1938 M +-6 -8 V +.18 g 6025 1930 M +-9 -12 V +.18 g 6016 1918 M +-15 -20 V +.18 g 6001 1898 M +-3 -5 V +.18 g 5998 1893 M +-12 -15 V +.18 g 5986 1878 M +-15 -20 V +.18 g 5971 1858 M +-1 -2 V +.18 g 5970 1856 M +-14 -18 V +.18 g 5956 1838 M +-13 -17 V +.18 g 5943 1821 M +-3 -4 V +.18 g 5940 1817 M +-16 -20 V +.18 g 5924 1797 M +-8 -10 V +.18 g 5916 1787 M +-9 -10 V +.18 g 5907 1777 M +-16 -20 V +.18 g 5891 1757 M +-2 -3 V +.18 g 5889 1754 M +-15 -17 V +.18 g 5874 1737 M +-13 -15 V +.18 g 5861 1722 M +-5 -5 V +.18 g 5856 1717 M +-17 -20 V +.18 g 5839 1697 M +-5 -6 V +stroke 5834 1691 M +.18 g 5834 1691 M +-13 -15 V +.18 g 5821 1676 M +-14 -16 V +.18 g 5807 1660 M +-4 -4 V +.18 g 5803 1656 M +-18 -20 V +.18 g 5785 1636 M +-5 -6 V +.18 g 5780 1630 M +-13 -14 V +.18 g 5767 1616 M +-15 -16 V +.18 g 5752 1600 M +-4 -4 V +.18 g 5748 1596 M +-18 -20 V +.18 g 5730 1576 M +-5 -6 V +.18 g 5725 1570 M +-14 -15 V +.18 g 5711 1555 M +-13 -14 V +.18 g 5698 1541 M +-6 -6 V +.18 g 5692 1535 M +-18 -20 V +.18 g 5674 1515 M +-3 -3 V +.18 g 5671 1512 M +-16 -17 V +.18 g 5655 1495 M +-12 -12 V +.18 g 5643 1483 M +-7 -8 V +.18 g 5636 1475 M +-19 -20 V +.18 g 5617 1455 M +-1 -2 V +.18 g 5616 1453 M +-18 -18 V +.18 g 5598 1435 M +-9 -11 V +.18 g 5589 1424 M +-9 -10 V +.18 g 5580 1414 M +-18 -20 V +.18 g 5562 1394 M +-19 -20 V +.18 g 5543 1374 M +-9 -10 V +.18 g 5534 1364 M +-9 -10 V +.18 g 5525 1354 M +-18 -20 V +.18 g .18 g 5507 1334 M +-18 -20 V +.18 g 5489 1314 M +-9 -12 V +.18 g 5480 1302 M +-8 -9 V +.18 g 5472 1293 M +-17 -20 V +.18 g 5455 1273 M +-2 -2 V +.18 g 5453 1271 M +-16 -18 V +.18 g 5437 1253 M +-12 -14 V +.18 g 5425 1239 M +-4 -6 V +.18 g 5421 1233 M +-17 -20 V +.18 g 5404 1213 M +-6 -7 V +.18 g 5398 1206 M +-11 -13 V +.18 g 5387 1193 M +-16 -21 V +.18 g .18 g 5371 1172 M +-16 -20 V +.18 g 5355 1152 M +-11 -14 V +.18 g 5344 1138 M +-5 -6 V +.18 g 5339 1132 M +-16 -20 V +.18 g 5323 1112 M +-7 -8 V +.18 g 5316 1104 M +-9 -12 V +.18 g 5307 1092 M +-15 -20 V +.18 g 5292 1072 M +-3 -4 V +.18 g 5289 1068 M +-13 -16 V +.18 g 5276 1052 M +-14 -20 V +.18 g 5262 1032 M +-1 -1 V +.18 g 5261 1031 M +-15 -20 V +stroke 5246 1011 M +.18 g 5246 1011 M +-11 -15 V +.18 g 5235 996 M +-4 -5 V +.18 g 5231 991 M +-15 -20 V +.18 g 5216 971 M +-9 -12 V +.18 g 5207 959 M +-6 -8 V +.18 g 5201 951 M +-15 -20 V +.18 g 5186 931 M +-6 -9 V +.18 g 5180 922 M +-9 -12 V +.18 g 5171 910 M +-14 -20 V +.18 g 5157 890 M +-4 -5 V +.18 g 5153 885 M +-11 -15 V +.18 g 5142 870 M +-15 -20 V +.18 g 5127 850 M +-1 -3 V +.18 g 5126 847 M +-13 -17 V +.18 g 5113 830 M +-15 -20 V +.18 g .18 g 5098 810 M +-15 -20 V +.18 g 5083 790 M +-12 -18 V +.18 g 5071 772 M +-2 -3 V +.18 g 5069 769 M +-15 -20 V +.18 g 5054 749 M +-10 -14 V +.18 g 5044 735 M +-5 -6 V +0 g .16 g 681 3208 M +.16 g 681 3208 M +-8 20 V +.16 g 673 3228 M +-8 20 V +.16 g 665 3248 M +-8 21 V +.16 g 657 3269 M +-1 0 V +.16 g 656 3269 M +-7 20 V +.16 g 649 3289 M +-8 20 V +.16 g 641 3309 M +-8 20 V +.16 g 633 3329 M +-4 8 V +.16 g 629 3337 M +-4 12 V +.16 g 625 3349 M +-8 20 V +.16 g 617 3369 M +-8 21 V +.16 g 609 3390 M +-7 17 V +0 g .16 g 1437 1797 M +.16 g 1437 1797 M +-17 20 V +.16 g 1420 1817 M +-1 0 V +.16 g 1419 1817 M +-17 21 V +.16 g 1402 1838 M +-10 12 V +.16 g 1392 1850 M +-6 8 V +.16 g 1386 1858 M +-16 20 V +.16 g 1370 1878 M +-5 6 V +.16 g 1365 1884 M +-11 14 V +.16 g 1354 1898 M +-16 20 V +.16 g 1338 1918 M +0 1 V +.16 g 1338 1919 M +-15 19 V +.16 g 1323 1938 M +-12 17 V +.16 g 1311 1955 M +-3 4 V +.16 g 1308 1959 M +-14 20 V +.16 g 1294 1979 M +-11 14 V +.16 g 1283 1993 M +-4 6 V +.16 g 1279 1999 M +-14 20 V +.16 g 1265 2019 M +-9 13 V +stroke 1256 2032 M +.16 g 1256 2032 M +-4 7 V +.16 g 1252 2039 M +-14 20 V +.16 g 1238 2059 M +-9 14 V +.16 g 1229 2073 M +-4 6 V +.16 g 1225 2079 M +-13 21 V +.16 g 1212 2100 M +-10 15 V +.16 g 1202 2115 M +-3 5 V +.16 g 1199 2120 M +-13 20 V +.16 g 1186 2140 M +-12 19 V +.16 g 1174 2159 M +0 1 V +.16 g 1174 2160 M +-12 20 V +.16 g 1162 2180 M +-12 20 V +.16 g 1150 2200 M +-3 5 V +.16 g 1147 2205 M +-9 16 V +.16 g 1138 2221 M +-12 20 V +.16 g 1126 2241 M +-6 11 V +.16 g 1120 2252 M +-5 9 V +.16 g 1115 2261 M +-12 20 V +.16 g 1103 2281 M +-10 19 V +.16 g 1093 2300 M +-1 1 V +.16 g 1092 2301 M +-11 20 V +.16 g 1081 2321 M +-11 20 V +.16 g 1070 2341 M +-5 9 V +.16 g 1065 2350 M +-6 12 V +.16 g 1059 2362 M +-10 20 V +.16 g 1049 2382 M +-11 20 V +.16 g .16 g 1038 2402 M +-10 20 V +.16 g 1028 2422 M +-10 20 V +.16 g 1018 2442 M +-7 13 V +.16 g 1011 2455 M +-4 7 V +.16 g 1007 2462 M +-10 21 V +.16 g 997 2483 M +-10 20 V +.16 g 987 2503 M +-3 7 V +.16 g 984 2510 M +-7 13 V +.16 g 977 2523 M +-9 20 V +.16 g 968 2543 M +-10 20 V +.16 g 958 2563 M +-2 4 V +.16 g 956 2567 M +-8 16 V +.16 g 948 2583 M +-9 21 V +.16 g 939 2604 M +-10 20 V +.16 g 929 2624 M +0 1 V +.16 g 929 2625 M +-9 19 V +.16 g 920 2644 M +-9 20 V +.16 g 911 2664 M +-9 20 V +.16 g .16 g 902 2684 M +-9 20 V +.16 g 893 2704 M +-9 20 V +.16 g 884 2724 M +-9 20 V +.16 g 875 2744 M +-1 1 V +.16 g 874 2745 M +-8 20 V +.16 g 866 2765 M +-9 20 V +.16 g 857 2785 M +-9 20 V +.16 g 848 2805 M +-1 1 V +stroke 847 2806 M +.16 g 847 2806 M +-8 19 V +.16 g 839 2825 M +-8 20 V +.16 g 831 2845 M +-9 21 V +.16 g 822 2866 M +-2 4 V +.16 g 820 2870 M +-7 16 V +.16 g 813 2886 M +-8 20 V +.16 g 805 2906 M +-9 20 V +.16 g 796 2926 M +-3 8 V +.16 g 793 2934 M +-5 12 V +.16 g 788 2946 M +-9 20 V +.16 g 779 2966 M +-8 20 V +.16 g 771 2986 M +-6 13 V +.16 g 765 2999 M +-3 8 V +.16 g 762 3007 M +-8 20 V +.16 g 754 3027 M +-8 20 V +.16 g 746 3047 M +-8 18 V +.16 g 738 3065 M +0 2 V +.16 g 738 3067 M +-9 20 V +.16 g 729 3087 M +-8 20 V +.16 g 721 3107 M +-8 21 V +.16 g 713 3128 M +-2 4 V +.16 g 711 3132 M +-6 16 V +.16 g 705 3148 M +-8 20 V +.16 g 697 3168 M +-8 20 V +.16 g 689 3188 M +-5 12 V +.16 g 684 3200 M +-3 8 V +0 g .16 g 2465 588 M +.16 g 2465 588 M +-10 12 V +.16 g 2455 600 M +-7 8 V +.16 g 2448 608 M +-16 20 V +.16 g 2432 628 M +-4 6 V +.16 g 2428 634 M +-12 14 V +.16 g 2416 648 M +-15 21 V +.16 g .16 g 2401 669 M +-16 20 V +.16 g 2385 689 M +-12 15 V +.16 g 2373 704 M +-3 5 V +.16 g 2370 709 M +-15 20 V +.16 g 2355 729 M +-9 12 V +.16 g 2346 741 M +-7 8 V +.16 g 2339 749 M +-15 20 V +.16 g 2324 769 M +-5 8 V +.16 g 2319 777 M +-10 13 V +.16 g 2309 790 M +-14 20 V +.16 g 2295 810 M +-3 4 V +.16 g 2292 814 M +-12 16 V +.16 g 2280 830 M +-15 20 V +.16 g 2265 850 M +-1 1 V +.16 g 2264 851 M +-14 19 V +.16 g 2250 870 M +-13 18 V +.16 g 2237 888 M +-2 2 V +.16 g 2235 890 M +-15 20 V +.16 g 2220 910 M +-10 15 V +.16 g 2210 925 M +-5 6 V +stroke 2205 931 M +.16 g 2205 931 M +-15 20 V +.16 g 2190 951 M +-7 10 V +.16 g 2183 961 M +-8 10 V +.16 g 2175 971 M +-15 20 V +.16 g 2160 991 M +-5 7 V +.16 g 2155 998 M +-10 13 V +.16 g 2145 1011 M +-15 20 V +.16 g 2130 1031 M +-2 3 V +.16 g 2128 1034 M +-13 18 V +.16 g 2115 1052 M +-14 18 V +.16 g 2101 1070 M +-2 2 V +.16 g 2099 1072 M +-15 20 V +.16 g 2084 1092 M +-10 13 V +.16 g 2074 1105 M +-6 7 V +.16 g 2068 1112 M +-16 20 V +.16 g 2052 1132 M +-6 7 V +.16 g 2046 1139 M +-10 13 V +.16 g 2036 1152 M +-17 20 V +.16 g 2019 1172 M +0 1 V +.16 g 2019 1173 M +-16 20 V +.16 g 2003 1193 M +-11 13 V +.16 g 1992 1206 M +-6 7 V +.16 g 1986 1213 M +-17 20 V +.16 g 1969 1233 M +-4 6 V +.16 g 1965 1239 M +-13 14 V +.16 g 1952 1253 M +-15 17 V +.16 g 1937 1270 M +-2 3 V +.16 g 1935 1273 M +-18 20 V +.16 g 1917 1293 M +-7 8 V +.16 g 1910 1301 M +-11 13 V +.16 g 1899 1314 M +-16 18 V +.16 g 1883 1332 M +-2 2 V +.16 g 1881 1334 M +-19 20 V +.16 g 1862 1354 M +-6 7 V +.16 g 1856 1361 M +-12 13 V +.16 g 1844 1374 M +-16 16 V +.16 g 1828 1390 M +-3 4 V +.16 g 1825 1394 M +-20 20 V +.16 g 1805 1414 M +-4 5 V +.16 g 1801 1419 M +-15 16 V +.16 g 1786 1435 M +-12 12 V +.16 g 1774 1447 M +-8 8 V +.16 g 1766 1455 M +-19 20 V +.16 g 1747 1475 M +-1 0 V +.16 g 1746 1475 M +-20 20 V +.16 g 1726 1495 M +-7 7 V +.16 g 1719 1502 M +-13 13 V +.16 g 1706 1515 M +-14 14 V +.16 g 1692 1529 M +-6 6 V +.16 g 1686 1535 M +-20 20 V +.16 g 1666 1555 M +-1 1 V +.16 g 1665 1556 M +-19 20 V +stroke 1646 1576 M +.16 g 1646 1576 M +-8 8 V +.16 g 1638 1584 M +-12 12 V +.16 g 1626 1596 M +-16 15 V +.16 g 1610 1611 M +-5 5 V +.16 g 1605 1616 M +-19 20 V +.16 g 1586 1636 M +-3 3 V +.16 g 1583 1639 M +-17 17 V +.16 g 1566 1656 M +-10 11 V +.16 g 1556 1667 M +-9 9 V +.16 g 1547 1676 M +-18 19 V +.16 g 1529 1695 M +-2 2 V +.16 g 1527 1697 M +-18 20 V +.16 g 1509 1717 M +-8 8 V +.16 g 1501 1725 M +-11 12 V +.16 g 1490 1737 M +-16 17 V +.16 g 1474 1754 M +-2 3 V +.16 g 1472 1757 M +-18 20 V +.16 g 1454 1777 M +-7 8 V +.16 g 1447 1785 M +-10 12 V +0 g .16 g 2619 3955 M +.16 g 2619 3955 M +-28 12 V +.16 g 2591 3967 M +-17 7 V +.16 g 2574 3974 M +-10 4 V +.16 g 2564 3978 M +-27 12 V +.16 g 2537 3990 M +-10 4 V +.16 g 2527 3994 M +-17 7 V +.16 g 2510 4001 M +-28 12 V +.16 g 2482 4013 M +-3 1 V +.16 g 2479 4014 M +-24 10 V +.16 g 2455 4024 M +-24 11 V +.16 g 2431 4035 M +-3 1 V +.16 g 2428 4036 M +-27 12 V +.16 g 2401 4048 M +-15 7 V +.16 g 2386 4055 M +-13 6 V +.16 g 2373 4061 M +-27 13 V +.16 g 2346 4074 M +-3 1 V +.16 g 2343 4075 M +-24 12 V +.16 g 2319 4087 M +-15 8 V +.16 g 2304 4095 M +-12 6 V +.16 g 2292 4101 M +-25 14 V +.16 g 2267 4115 M +-3 2 V +.16 g 2264 4117 M +-27 16 V +.16 g 2237 4133 M +-4 2 V +.16 g 2233 4135 M +-23 15 V +.16 g 2210 4150 M +-8 5 V +.16 g 2202 4155 M +-19 14 V +.16 g 2183 4169 M +-10 7 V +.16 g 2173 4176 M +-18 13 V +.16 g 2155 4189 M +-9 7 V +.16 g 2146 4196 M +-18 14 V +.16 g 2128 4210 M +-7 6 V +.16 g 2121 4216 M +-20 17 V +.16 g 2101 4233 M +-4 3 V +stroke 2097 4236 M +.16 g 2097 4236 M +-23 20 V +.16 g 2074 4256 M +0 1 V +.16 g 2074 4257 M +-21 19 V +.16 g 2053 4276 M +-7 7 V +.16 g 2046 4283 M +-13 14 V +.16 g 2033 4297 M +-14 14 V +.16 g 2019 4311 M +-5 6 V +.16 g 2014 4317 M +-19 20 V +.16 g 1995 4337 M +-3 3 V +.16 g 1992 4340 M +-15 17 V +.16 g 1977 4357 M +-12 14 V +.16 g 1965 4371 M +-5 6 V +.16 g 1960 4377 M +-17 20 V +.16 g 1943 4397 M +-6 7 V +.16 g 1937 4404 M +-10 13 V +.16 g 1927 4417 M +-16 21 V +.16 g 1911 4438 M +-1 1 V +.16 g 1910 4439 M +-14 19 V +.16 g 1896 4458 M +-13 18 V +.16 g 1883 4476 M +-2 2 V +.16 g 1881 4478 M +-14 20 V +.16 g 1867 4498 M +-11 16 V +.16 g 1856 4514 M +-4 4 V +.16 g 1852 4518 M +-13 20 V +.16 g 1839 4538 M +-11 15 V +.16 g 1828 4553 M +-3 6 V +.16 g 1825 4559 M +-13 20 V +.16 g 1812 4579 M +-11 16 V +.16 g 1801 4595 M +-3 4 V +.16 g 1798 4599 M +-12 20 V +0 g .16 g 4174 3631 M +.16 g 4174 3631 M +-2 -2 V +.16 g 4172 3629 M +-24 -18 V +.16 g 4148 3611 M +-3 -3 V +.16 g 4145 3608 M +-23 -17 V +.16 g 4122 3591 M +-5 -4 V +.16 g 4117 3587 M +-22 -16 V +.16 g 4095 3571 M +-5 -4 V +.16 g 4090 3567 M +-22 -16 V +.16 g 4068 3551 M +-5 -4 V +.16 g 4063 3547 M +-24 -16 V +.16 g 4039 3531 M +-3 -3 V +.16 g 4036 3528 M +-26 -18 V +.16 g 4010 3510 M +-2 0 V +.16 g 4008 3510 M +-27 -18 V +.16 g 3981 3492 M +-3 -2 V +.16 g 3978 3490 M +-24 -15 V +.16 g 3954 3475 M +-9 -5 V +.16 g 3945 3470 M +-18 -10 V +.16 g 3927 3460 M +-19 -10 V +.16 g 3908 3450 M +-9 -5 V +.16 g 3899 3445 M +-27 -13 V +.16 g 3872 3432 M +-5 -2 V +stroke 3867 3430 M +.16 g 3867 3430 M +-22 -10 V +.16 g 3845 3420 M +-27 -10 V +.16 g 3818 3410 M +-2 0 V +.16 g 3816 3410 M +-26 -8 V +.16 g 3790 3402 M +-27 -7 V +.16 g 3763 3395 M +-26 -5 V +.16 g 3737 3390 M +-1 -1 V +.16 g 3736 3389 M +-27 -3 V +.16 g 3709 3386 M +-28 -2 V +.16 g 3681 3384 M +-27 0 V +.16 g 3654 3384 M +-27 2 V +.16 g 3627 3386 M +-27 3 V +.16 g 3600 3389 M +-3 1 V +.16 g 3597 3390 M +-25 4 V +.16 g 3572 3394 M +-27 7 V +.16 g 3545 3401 M +-27 8 V +.16 g 3518 3409 M +-1 1 V +.16 g 3517 3410 M +-26 9 V +.16 g 3491 3419 M +-26 11 V +.16 g 3465 3430 M +-2 1 V +.16 g 3463 3431 M +-27 12 V +.16 g 3436 3443 M +-13 7 V +.16 g 3423 3450 M +-14 7 V +.16 g 3409 3457 M +-24 13 V +.16 g 3385 3470 M +-3 2 V +.16 g 3382 3472 M +-28 16 V +.16 g 3354 3488 M +-3 2 V +.16 g 3351 3490 M +-24 15 V +.16 g 3327 3505 M +-8 5 V +.16 g 3319 3510 M +-19 13 V +.16 g 3300 3523 M +-12 8 V +.16 g 3288 3531 M +-15 10 V +.16 g 3273 3541 M +-14 10 V +.16 g 3259 3551 M +-14 9 V +.16 g 3245 3560 M +-15 11 V +.16 g 3230 3571 M +-12 9 V +.16 g 3218 3580 M +-16 11 V +.16 g 3202 3591 M +-11 8 V +.16 g 3191 3599 M +-17 12 V +.16 g 3174 3611 M +-10 8 V +.16 g 3164 3619 M +-17 12 V +.16 g 3147 3631 M +-11 8 V +.16 g 3136 3639 M +-17 13 V +.16 g 3119 3652 M +-10 7 V +.16 g 3109 3659 M +-17 13 V +.16 g 3092 3672 M +-10 7 V +.16 g 3082 3679 M +-18 13 V +.16 g 3064 3692 M +-9 7 V +.16 g 3055 3699 M +-19 13 V +.16 g 3036 3712 M +-9 6 V +.16 g 3027 3718 M +-19 14 V +.16 g 3008 3732 M +-8 5 V +stroke 3000 3737 M +.16 g 3000 3737 M +-22 15 V +.16 g 2978 3752 M +-5 4 V +.16 g 2973 3756 M +-24 16 V +.16 g 2949 3772 M +-3 3 V +.16 g 2946 3775 M +-28 18 V +.16 g 2918 3793 M +-27 17 V +.16 g 2891 3810 M +-4 3 V +.16 g 2887 3813 M +-23 14 V +.16 g 2864 3827 M +-10 6 V +.16 g 2854 3833 M +-17 10 V +.16 g 2837 3843 M +-18 10 V +.16 g 2819 3853 M +-10 6 V +.16 g 2809 3859 M +-25 14 V +.16 g 2784 3873 M +-2 1 V +.16 g 2782 3874 M +-27 15 V +.16 g 2755 3889 M +-9 4 V +.16 g 2746 3893 M +-18 10 V +.16 g 2728 3903 M +-22 11 V +.16 g 2706 3914 M +-6 3 V +.16 g 2700 3917 M +-27 13 V +.16 g 2673 3930 M +-9 4 V +.16 g 2664 3934 M +-18 8 V +.16 g 2646 3942 M +-26 12 V +.16 g 2620 3954 M +-1 1 V +0 g .16 g 5511 4619 M +.16 g 5511 4619 M +-4 -6 V +.16 g 5507 4613 M +-10 -14 V +.16 g 5497 4599 M +-13 -20 V +.16 g 5484 4579 M +-4 -6 V +.16 g 5480 4573 M +-11 -14 V +.16 g 5469 4559 M +-14 -21 V +.16 g 5455 4538 M +-2 -3 V +.16 g 5453 4535 M +-13 -17 V +.16 g 5440 4518 M +-15 -20 V +.16 g .16 g 5425 4498 M +-16 -20 V +.16 g 5409 4478 M +-11 -15 V +.16 g 5398 4463 M +-5 -5 V +.16 g 5393 4458 M +-16 -20 V +.16 g 5377 4438 M +-6 -8 V +.16 g 5371 4430 M +-11 -13 V +.16 g 5360 4417 M +-16 -18 V +.16 g 5344 4399 M +-2 -2 V +.16 g 5342 4397 M +-19 -20 V +.16 g 5323 4377 M +-7 -8 V +.16 g 5316 4369 M +-12 -12 V +.16 g 5304 4357 M +-15 -15 V +.16 g 5289 4342 M +-5 -5 V +.16 g 5284 4337 M +-21 -20 V +.16 g 5263 4317 M +-1 -2 V +.16 g 5262 4315 M +-21 -18 V +.16 g 5241 4297 M +-6 -6 V +.16 g 5235 4291 M +-17 -15 V +.16 g 5218 4276 M +-11 -8 V +stroke 5207 4268 M +.16 g 5207 4268 M +-14 -12 V +.16 g 5193 4256 M +-13 -10 V +.16 g 5180 4246 M +-13 -10 V +.16 g 5167 4236 M +-14 -10 V +.16 g 5153 4226 M +-14 -10 V +.16 g 5139 4216 M +-13 -9 V +.16 g 5126 4207 M +-17 -11 V +.16 g 5109 4196 M +-11 -7 V +.16 g 5098 4189 M +-21 -13 V +.16 g 5077 4176 M +-6 -4 V +.16 g 5071 4172 M +-27 -16 V +.16 g 5044 4156 M +-2 -1 V +.16 g 5042 4155 M +-25 -14 V +.16 g 5017 4141 M +-11 -6 V +.16 g 5006 4135 M +-17 -8 V +.16 g 4989 4127 M +-22 -12 V +.16 g 4967 4115 M +-5 -2 V +.16 g 4962 4113 M +-27 -14 V +.16 g 4935 4099 M +-9 -4 V +.16 g 4926 4095 M +-18 -9 V +.16 g 4908 4086 M +-25 -11 V +.16 g 4883 4075 M +-3 -2 V +.16 g 4880 4073 M +-27 -12 V +.16 g 4853 4061 M +-13 -6 V +.16 g 4840 4055 M +-14 -7 V +.16 g 4826 4048 M +-27 -13 V +.16 g 4799 4035 M +-2 0 V +.16 g 4797 4035 M +-26 -13 V +.16 g 4771 4022 M +-16 -8 V +.16 g 4755 4014 M +-11 -5 V +.16 g 4744 4009 M +-27 -13 V +.16 g 4717 3996 M +-3 -2 V +.16 g 4714 3994 M +-24 -12 V +.16 g 4690 3982 M +-15 -8 V +.16 g 4675 3974 M +-13 -7 V +.16 g 4662 3967 M +-25 -13 V +.16 g 4637 3954 M +-2 -1 V +.16 g 4635 3953 M +-27 -16 V +.16 g 4608 3937 M +-7 -3 V +.16 g 4601 3934 M +-20 -12 V +.16 g 4581 3922 M +-14 -8 V +.16 g 4567 3914 M +-14 -9 V +.16 g 4553 3905 M +-19 -12 V +.16 g 4534 3893 M +-8 -4 V +.16 g 4526 3889 M +-24 -16 V +.16 g 4502 3873 M +-3 -2 V +.16 g 4499 3871 M +-27 -18 V +.16 g 4472 3853 M +-1 0 V +.16 g 4471 3853 M +-27 -18 V +.16 g 4444 3835 M +-2 -2 V +.16 g 4442 3833 M +-25 -17 V +.16 g 4417 3816 M +-4 -3 V +stroke 4413 3813 M +.16 g 4413 3813 M +-23 -17 V +.16 g 4390 3796 M +-5 -3 V +.16 g 4385 3793 M +-22 -17 V +.16 g 4363 3776 M +-5 -4 V +.16 g 4358 3772 M +-23 -16 V +.16 g 4335 3756 M +-4 -4 V +.16 g 4331 3752 M +-23 -17 V +.16 g 4308 3735 M +-4 -3 V +.16 g 4304 3732 M +-23 -18 V +.16 g 4281 3714 M +-3 -2 V +.16 g 4278 3712 M +-24 -19 V +.16 g 4254 3693 M +-2 -1 V +.16 g 4252 3692 M +-26 -20 V +.16 g .16 g 4226 3672 M +-26 -20 V +.16 g 4200 3652 M +-1 -2 V +.16 g 4199 3650 M +-25 -19 V +0 g .16 g 5044 854 M +.16 g 5044 854 M +-3 -4 V +.16 g 5041 850 M +-14 -20 V +.16 g 5027 830 M +-10 -14 V +.16 g 5017 816 M +-5 -6 V +.16 g 5012 810 M +-15 -20 V +.16 g 4997 790 M +-8 -12 V +.16 g 4989 778 M +-6 -9 V +.16 g 4983 769 M +-15 -20 V +.16 g 4968 749 M +-6 -8 V +.16 g 4962 741 M +-9 -12 V +.16 g 4953 729 M +-15 -20 V +.16 g 4938 709 M +-3 -4 V +.16 g 4935 705 M +-12 -16 V +.16 g 4923 689 M +-15 -20 V +.16 g 4908 669 M +-1 0 V +.16 g 4907 669 M +-16 -21 V +.16 g 4891 648 M +-11 -14 V +.16 g 4880 634 M +-4 -6 V +.16 g 4876 628 M +-17 -20 V +.16 g 4859 608 M +-6 -8 V +.16 g 4853 600 M +-10 -12 V +0 g .16 g 6052 2080 M +.16 g 6052 2080 M +0 -1 V +.16 g 6052 2079 M +-15 -20 V +.16 g 6037 2059 M +-12 -17 V +.16 g 6025 2042 M +-2 -3 V +.16 g 6023 2039 M +-15 -20 V +.16 g 6008 2019 M +-10 -14 V +.16 g 5998 2005 M +-5 -6 V +.16 g 5993 1999 M +-15 -20 V +.16 g 5978 1979 M +-8 -10 V +.16 g 5970 1969 M +-8 -10 V +.16 g 5962 1959 M +-16 -21 V +.16 g 5946 1938 M +-3 -3 V +.16 g 5943 1935 M +-13 -17 V +.16 g 5930 1918 M +-14 -17 V +stroke 5916 1901 M +.16 g 5916 1901 M +-3 -3 V +.16 g 5913 1898 M +-17 -20 V +.16 g 5896 1878 M +-7 -9 V +.16 g 5889 1869 M +-10 -11 V +.16 g 5879 1858 M +-18 -20 V +.16 g 5861 1838 M +0 -1 V +.16 g 5861 1837 M +-17 -20 V +.16 g 5844 1817 M +-10 -10 V +.16 g 5834 1807 M +-9 -10 V +.16 g 5825 1797 M +-18 -20 V +.16 g .16 g 5807 1777 M +-18 -20 V +.16 g 5789 1757 M +-9 -10 V +.16 g 5780 1747 M +-10 -10 V +.16 g 5770 1737 M +-18 -19 V +.16 g 5752 1718 M +-1 -1 V +.16 g 5751 1717 M +-19 -20 V +.16 g 5732 1697 M +-7 -8 V +.16 g 5725 1689 M +-12 -13 V +.16 g 5713 1676 M +-15 -15 V +.16 g 5698 1661 M +-5 -5 V +.16 g 5693 1656 M +-19 -20 V +.16 g 5674 1636 M +-3 -4 V +.16 g 5671 1632 M +-16 -16 V +.16 g 5655 1616 M +-12 -12 V +.16 g 5643 1604 M +-8 -8 V +.16 g 5635 1596 M +-19 -20 V +.16 g 5616 1576 M +0 -1 V +.16 g 5616 1575 M +-19 -20 V +.16 g 5597 1555 M +-8 -9 V +.16 g 5589 1546 M +-11 -11 V +.16 g 5578 1535 M +-16 -18 V +.16 g 5562 1517 M +-2 -2 V +.16 g 5560 1515 M +-19 -20 V +.16 g 5541 1495 M +-7 -7 V +.16 g 5534 1488 M +-11 -13 V +.16 g 5523 1475 M +-16 -18 V +.16 g 5507 1457 M +-2 -2 V +.16 g 5505 1455 M +-18 -20 V +.16 g 5487 1435 M +-7 -8 V +.16 g 5480 1427 M +-11 -13 V +.16 g 5469 1414 M +-16 -19 V +.16 g 5453 1395 M +-1 -1 V +.16 g 5452 1394 M +-18 -20 V +.16 g 5434 1374 M +-9 -11 V +.16 g 5425 1363 M +-8 -9 V +.16 g 5417 1354 M +-16 -20 V +.16 g 5401 1334 M +-3 -4 V +.16 g 5398 1330 M +-14 -16 V +.16 g 5384 1314 M +-13 -17 V +.16 g 5371 1297 M +-3 -4 V +.16 g 5368 1293 M +-16 -20 V +.16 g 5352 1273 M +-8 -10 V +stroke 5344 1263 M +.16 g 5344 1263 M +-8 -10 V +.16 g 5336 1253 M +-16 -20 V +.16 g 5320 1233 M +-4 -5 V +.16 g 5316 1228 M +-11 -15 V +.16 g 5305 1213 M +-16 -20 V +.16 g 5289 1193 M +0 -1 V +.16 g 5289 1192 M +-15 -20 V +.16 g 5274 1172 M +-12 -16 V +.16 g 5262 1156 M +-3 -4 V +.16 g 5259 1152 M +-15 -20 V +.16 g 5244 1132 M +-9 -13 V +.16 g 5235 1119 M +-6 -7 V +.16 g 5229 1112 M +-15 -20 V +.16 g 5214 1092 M +-7 -10 V +.16 g 5207 1082 M +-7 -10 V +.16 g 5200 1072 M +-15 -20 V +.16 g 5185 1052 M +-5 -7 V +.16 g 5180 1045 M +-9 -14 V +.16 g 5171 1031 M +-15 -20 V +.16 g 5156 1011 M +-3 -4 V +.16 g 5153 1007 M +-11 -16 V +.16 g 5142 991 M +-15 -20 V +.16 g 5127 971 M +-1 -3 V +.16 g 5126 968 M +-13 -17 V +.16 g 5113 951 M +-14 -20 V +.16 g 5099 931 M +-1 -1 V +.16 g 5098 930 M +-14 -20 V +.16 g 5084 910 M +-13 -18 V +.16 g 5071 892 M +-1 -2 V +.16 g 5070 890 M +-15 -20 V +.16 g 5055 870 M +-11 -16 V +0 g .14 g 738 3188 M +.14 g 738 3188 M +-8 20 V +.14 g 730 3208 M +-8 20 V +.14 g 722 3228 M +-8 20 V +.14 g 714 3248 M +-3 8 V +.14 g 711 3256 M +-5 13 V +.14 g 706 3269 M +-8 20 V +.14 g 698 3289 M +-8 20 V +.14 g 690 3309 M +-6 16 V +.14 g 684 3325 M +-2 4 V +.14 g 682 3329 M +-8 20 V +.14 g 674 3349 M +-8 20 V +.14 g 666 3369 M +-8 21 V +.14 g 658 3390 M +-1 4 V +.14 g 657 3394 M +-6 16 V +.14 g 651 3410 M +-8 20 V +.14 g 643 3430 M +-8 20 V +.14 g 635 3450 M +-6 14 V +.14 g 629 3464 M +-2 6 V +.14 g 627 3470 M +-8 20 V +.14 g 619 3490 M +-8 20 V +.14 g 611 3510 M +-7 21 V +stroke 604 3531 M +.14 g 604 3531 M +-2 4 V +0 g .14 g 1551 1797 M +.14 g 1551 1797 M +-20 20 V +.14 g 1531 1817 M +-2 3 V +.14 g 1529 1820 M +-17 18 V +.14 g 1512 1838 M +-11 10 V +.14 g 1501 1848 M +-8 10 V +.14 g 1493 1858 M +-19 19 V +.14 g 1474 1877 M +0 1 V +.14 g 1474 1878 M +-19 20 V +.14 g 1455 1898 M +-8 9 V +.14 g 1447 1907 M +-10 11 V +.14 g 1437 1918 M +-17 20 V +.14 g 1420 1938 M +-18 21 V +.14 g 1402 1959 M +-10 11 V +.14 g 1392 1970 M +-6 9 V +.14 g 1386 1979 M +-17 20 V +.14 g 1369 1999 M +-4 5 V +.14 g 1365 2004 M +-12 15 V +.14 g 1353 2019 M +-15 19 V +.14 g 1338 2038 M +-1 1 V +.14 g 1337 2039 M +-15 20 V +.14 g 1322 2059 M +-11 15 V +.14 g 1311 2074 M +-4 5 V +.14 g 1307 2079 M +-15 21 V +.14 g 1292 2100 M +-9 11 V +.14 g 1283 2111 M +-6 9 V +.14 g 1277 2120 M +-14 20 V +.14 g 1263 2140 M +-7 10 V +.14 g 1256 2150 M +-7 10 V +.14 g 1249 2160 M +-13 20 V +.14 g 1236 2180 M +-7 11 V +.14 g 1229 2191 M +-7 9 V +.14 g 1222 2200 M +-13 21 V +.14 g 1209 2221 M +-7 12 V +.14 g 1202 2233 M +-6 8 V +.14 g 1196 2241 M +-12 20 V +.14 g 1184 2261 M +-10 15 V +.14 g 1174 2276 M +-3 5 V +.14 g 1171 2281 M +-12 20 V +.14 g 1159 2301 M +-12 20 V +.14 g .14 g 1147 2321 M +-12 20 V +.14 g 1135 2341 M +-11 21 V +.14 g 1124 2362 M +-4 6 V +.14 g 1120 2368 M +-8 14 V +.14 g 1112 2382 M +-11 20 V +.14 g 1101 2402 M +-8 15 V +.14 g 1093 2417 M +-3 5 V +.14 g 1090 2422 M +-11 20 V +.14 g 1079 2442 M +-11 20 V +.14 g 1068 2462 M +-3 5 V +.14 g 1065 2467 M +-8 16 V +.14 g 1057 2483 M +-10 20 V +stroke 1047 2503 M +.14 g 1047 2503 M +-9 16 V +.14 g 1038 2519 M +-2 4 V +.14 g 1036 2523 M +-10 20 V +.14 g 1026 2543 M +-10 20 V +.14 g 1016 2563 M +-5 10 V +.14 g 1011 2573 M +-5 10 V +.14 g 1006 2583 M +-10 21 V +.14 g 996 2604 M +-10 20 V +.14 g 986 2624 M +-2 4 V +.14 g 984 2628 M +-8 16 V +.14 g 976 2644 M +-10 20 V +.14 g 966 2664 M +-10 20 V +.14 g 956 2684 M +0 1 V +.14 g 956 2685 M +-9 19 V +.14 g 947 2704 M +-9 20 V +.14 g 938 2724 M +-9 19 V +.14 g 929 2743 M +-1 2 V +.14 g 928 2745 M +-9 20 V +.14 g 919 2765 M +-9 20 V +.14 g 910 2785 M +-8 18 V +.14 g 902 2803 M +-1 2 V +.14 g 901 2805 M +-9 20 V +.14 g 892 2825 M +-9 20 V +.14 g 883 2845 M +-8 19 V +.14 g 875 2864 M +-1 2 V +.14 g 874 2866 M +-9 20 V +.14 g 865 2886 M +-9 20 V +.14 g 856 2906 M +-9 20 V +.14 g .14 g 847 2926 M +-8 20 V +.14 g 839 2946 M +-9 20 V +.14 g 830 2966 M +-8 20 V +.14 g 822 2986 M +-2 4 V +.14 g 820 2990 M +-7 17 V +.14 g 813 3007 M +-8 20 V +.14 g 805 3027 M +-9 20 V +.14 g 796 3047 M +-3 8 V +.14 g 793 3055 M +-5 12 V +.14 g 788 3067 M +-8 20 V +.14 g 780 3087 M +-9 20 V +.14 g 771 3107 M +-6 14 V +.14 g 765 3121 M +-2 7 V +.14 g 763 3128 M +-8 20 V +.14 g 755 3148 M +-8 20 V +.14 g 747 3168 M +-9 20 V +.14 g 0 g .14 g 2568 588 M +.14 g 2568 588 M +-4 4 V +.14 g 2564 592 M +-14 16 V +.14 g 2550 608 M +-13 15 V +.14 g 2537 623 M +-5 5 V +.14 g 2532 628 M +-17 20 V +.14 g 2515 648 M +-5 7 V +.14 g 2510 655 M +-11 14 V +.14 g 2499 669 M +-17 19 V +stroke 2482 688 M +.14 g 2482 688 M +0 1 V +.14 g 2482 689 M +-16 20 V +.14 g 2466 709 M +-11 14 V +.14 g 2455 723 M +-5 6 V +.14 g 2450 729 M +-16 20 V +.14 g 2434 749 M +-6 9 V +.14 g 2428 758 M +-9 11 V +.14 g 2419 769 M +-15 21 V +.14 g 2404 790 M +-3 4 V +.14 g 2401 794 M +-12 16 V +.14 g 2389 810 M +-16 20 V +.14 g .14 g 2373 830 M +-14 20 V +.14 g 2359 850 M +-13 17 V +.14 g 2346 867 M +-2 3 V +.14 g 2344 870 M +-15 20 V +.14 g 2329 890 M +-10 15 V +.14 g 2319 905 M +-4 5 V +.14 g 2315 910 M +-15 21 V +.14 g 2300 931 M +-8 11 V +.14 g 2292 942 M +-7 9 V +.14 g 2285 951 M +-14 20 V +.14 g 2271 971 M +-7 9 V +.14 g 2264 980 M +-8 11 V +.14 g 2256 991 M +-14 20 V +.14 g 2242 1011 M +-5 7 V +.14 g 2237 1018 M +-10 13 V +.14 g 2227 1031 M +-14 21 V +.14 g 2213 1052 M +-3 4 V +.14 g 2210 1056 M +-12 16 V +.14 g 2198 1072 M +-14 20 V +.14 g 2184 1092 M +-1 2 V +.14 g 2183 1094 M +-14 18 V +.14 g 2169 1112 M +-14 19 V +.14 g 2155 1131 M +-1 1 V +.14 g 2154 1132 M +-15 20 V +.14 g 2139 1152 M +-11 16 V +.14 g 2128 1168 M +-4 4 V +.14 g 2124 1172 M +-15 21 V +.14 g 2109 1193 M +-8 11 V +.14 g 2101 1204 M +-7 9 V +.14 g 2094 1213 M +-16 20 V +.14 g 2078 1233 M +-4 6 V +.14 g 2074 1239 M +-11 14 V +.14 g 2063 1253 M +-16 20 V +.14 g 2047 1273 M +-1 1 V +.14 g 2046 1274 M +-15 19 V +.14 g 2031 1293 M +-12 15 V +.14 g 2019 1308 M +-4 6 V +.14 g 2015 1314 M +-17 20 V +.14 g 1998 1334 M +-6 8 V +.14 g 1992 1342 M +-10 12 V +.14 g 1982 1354 M +-17 20 V +stroke 1965 1374 M +.14 g .14 g 1965 1374 M +-18 20 V +.14 g 1947 1394 M +-10 12 V +.14 g 1937 1406 M +-7 8 V +.14 g 1930 1414 M +-18 21 V +.14 g 1912 1435 M +-2 2 V +.14 g 1910 1437 M +-16 18 V +.14 g 1894 1455 M +-11 12 V +.14 g 1883 1467 M +-8 8 V +.14 g 1875 1475 M +-19 20 V +.14 g 1856 1495 M +0 1 V +.14 g 1856 1496 M +-19 19 V +.14 g 1837 1515 M +-9 10 V +.14 g 1828 1525 M +-10 10 V +.14 g 1818 1535 M +-17 17 V +.14 g 1801 1552 M +-3 3 V +.14 g 1798 1555 M +-20 21 V +.14 g 1778 1576 M +-4 4 V +.14 g 1774 1580 M +-16 16 V +.14 g 1758 1596 M +-11 11 V +.14 g 1747 1607 M +-10 9 V +.14 g 1737 1616 M +-18 17 V +.14 g 1719 1633 M +-3 3 V +.14 g 1716 1636 M +-20 20 V +.14 g 1696 1656 M +-4 4 V +.14 g 1692 1660 M +-17 16 V +.14 g 1675 1676 M +-10 10 V +.14 g 1665 1686 M +-11 11 V +.14 g 1654 1697 M +-16 15 V +.14 g 1638 1712 M +-5 5 V +.14 g 1633 1717 M +-21 20 V +.14 g 1612 1737 M +-2 2 V +.14 g 1610 1739 M +-18 18 V +.14 g 1592 1757 M +-9 8 V +.14 g 1583 1765 M +-12 12 V +.14 g 1571 1777 M +-15 15 V +.14 g 1556 1792 M +-5 5 V +.0005 g .14 g 2809 3742 M +.14 g 2809 3742 M +-18 10 V +.14 g 2791 3752 M +-9 5 V +.14 g 2782 3757 M +-27 15 V +.14 g 2755 3772 M +-1 0 V +.14 g 2754 3772 M +-26 14 V +.14 g 2728 3786 M +-15 7 V +.14 g 2713 3793 M +-13 6 V +.14 g 2700 3799 M +-27 13 V +.14 g 2673 3812 M +-2 1 V +.14 g 2671 3813 M +-25 11 V +.14 g 2646 3824 M +-21 9 V +.14 g 2625 3833 M +-6 3 V +.14 g 2619 3836 M +-28 11 V +.14 g 2591 3847 M +-14 6 V +.14 g 2577 3853 M +-13 5 V +.14 g 2564 3858 M +-27 11 V +stroke 2537 3869 M +.14 g 2537 3869 M +-10 4 V +.14 g 2527 3873 M +-17 7 V +.14 g 2510 3880 M +-28 11 V +.14 g 2482 3891 M +-7 2 V +.14 g 2475 3893 M +-20 8 V +.14 g 2455 3901 M +-27 11 V +.14 g 2428 3912 M +-4 2 V +.14 g 2424 3914 M +-23 9 V +.14 g 2401 3923 M +-25 11 V +.14 g 2376 3934 M +-3 1 V +.14 g 2373 3935 M +-27 12 V +.14 g 2346 3947 M +-15 7 V +.14 g 2331 3954 M +-12 5 V +.14 g 2319 3959 M +-27 14 V +.14 g 2292 3973 M +-3 1 V +.14 g 2289 3974 M +-25 13 V +.14 g 2264 3987 M +-12 7 V +.14 g 2252 3994 M +-15 8 V +.14 g 2237 4002 M +-20 12 V +.14 g 2217 4014 M +-7 5 V +.14 g 2210 4019 M +-24 16 V +.14 g 2186 4035 M +-3 2 V +.14 g 2183 4037 M +-26 18 V +.14 g 2157 4055 M +-2 1 V +.14 g 2155 4056 M +-25 19 V +.14 g 2130 4075 M +-2 1 V +.14 g 2128 4076 M +-23 19 V +.14 g 2105 4095 M +-4 4 V +.14 g 2101 4099 M +-19 16 V +.14 g 2082 4115 M +-8 7 V +.14 g 2074 4122 M +-14 13 V +.14 g 2060 4135 M +-14 13 V +.14 g 2046 4148 M +-7 7 V +.14 g 2039 4155 M +-20 20 V +.14 g 2019 4175 M +0 1 V +.14 g 2019 4176 M +-19 20 V +.14 g 2000 4196 M +-8 9 V +.14 g 1992 4205 M +-10 11 V +.14 g 1982 4216 M +-17 20 V +.14 g 1965 4236 M +-1 0 V +.14 g 1964 4236 M +-16 20 V +.14 g 1948 4256 M +-11 13 V +.14 g 1937 4269 M +-6 7 V +.14 g 1931 4276 M +-15 21 V +.14 g 1916 4297 M +-6 7 V +.14 g 1910 4304 M +-10 13 V +.14 g 1900 4317 M +-15 20 V +.14 g 1885 4337 M +-2 4 V +.14 g 1883 4341 M +-12 16 V +.14 g 1871 4357 M +-14 20 V +.14 g 1857 4377 M +-1 2 V +.14 g 1856 4379 M +-13 18 V +stroke 1843 4397 M +.14 g 1843 4397 M +-13 20 V +.14 g 1830 4417 M +-2 2 V +.14 g 1828 4419 M +-12 19 V +.14 g 1816 4438 M +-13 20 V +.14 g 1803 4458 M +-2 3 V +.14 g 1801 4461 M +-10 17 V +.14 g 1791 4478 M +-13 20 V +.14 g 1778 4498 M +-4 7 V +.14 g 1774 4505 M +-8 13 V +.14 g 1766 4518 M +-13 20 V +.14 g 1753 4538 M +-6 12 V +.14 g 1747 4550 M +-6 9 V +.14 g 1741 4559 M +-11 20 V +.14 g 1730 4579 M +-11 17 V +.14 g 1719 4596 M +-1 3 V +.14 g 1718 4599 M +-12 20 V +0 g .14 g 4302 3611 M +.14 g 4302 3611 M +-21 -17 V +.14 g 4281 3594 M +-4 -3 V +.14 g 4277 3591 M +-23 -19 V +.14 g 4254 3572 M +-2 -1 V +.14 g 4252 3571 M +-25 -20 V +.14 g 4227 3551 M +-1 -1 V +.14 g 4226 3550 M +-24 -19 V +.14 g 4202 3531 M +-3 -3 V +.14 g 4199 3528 M +-22 -18 V +.14 g 4177 3510 M +-5 -4 V +.14 g 4172 3506 M +-20 -16 V +.14 g 4152 3490 M +-7 -6 V +.14 g 4145 3484 M +-19 -14 V +.14 g 4126 3470 M +-9 -7 V +.14 g 4117 3463 M +-16 -13 V +.14 g 4101 3450 M +-11 -8 V +.14 g 4090 3442 M +-15 -12 V +.14 g 4075 3430 M +-12 -9 V +.14 g 4063 3421 M +-15 -11 V +.14 g 4048 3410 M +-12 -9 V +.14 g 4036 3401 M +-16 -11 V +.14 g 4020 3390 M +-12 -9 V +.14 g 4008 3381 M +-17 -12 V +.14 g 3991 3369 M +-10 -7 V +.14 g 3981 3362 M +-21 -13 V +.14 g 3960 3349 M +-6 -4 V +.14 g 3954 3345 M +-27 -16 V +.14 g 3927 3329 M +0 -1 V +.14 g 3927 3328 M +-28 -15 V +.14 g 3899 3313 M +-8 -4 V +.14 g 3891 3309 M +-19 -10 V +.14 g 3872 3299 M +-23 -10 V +.14 g 3849 3289 M +-4 -2 V +.14 g 3845 3287 M +-27 -11 V +.14 g 3818 3276 M +-23 -7 V +.14 g 3795 3269 M +-5 -2 V +stroke 3790 3267 M +.14 g 3790 3267 M +-27 -7 V +.14 g 3763 3260 M +-27 -6 V +.14 g 3736 3254 M +-27 -4 V +.14 g 3709 3250 M +-27 -2 V +.14 g 3682 3248 M +-1 0 V +.14 g 3681 3248 M +-27 0 V +.14 g 3654 3248 M +-1 0 V +.14 g 3653 3248 M +-26 2 V +.14 g 3627 3250 M +-27 4 V +.14 g 3600 3254 M +-28 5 V +.14 g 3572 3259 M +-27 8 V +.14 g 3545 3267 M +-6 2 V +.14 g 3539 3269 M +-21 7 V +.14 g 3518 3276 M +-27 10 V +.14 g 3491 3286 M +-6 3 V +.14 g 3485 3289 M +-22 9 V +.14 g 3463 3298 M +-21 11 V +.14 g 3442 3309 M +-6 3 V +.14 g 3436 3312 M +-27 15 V +.14 g 3409 3327 M +-4 2 V +.14 g 3405 3329 M +-23 14 V +.14 g 3382 3343 M +-11 6 V +.14 g 3371 3349 M +-17 11 V +.14 g 3354 3360 M +-15 9 V +.14 g 3339 3369 M +-12 8 V +.14 g 3327 3377 M +-18 13 V +.14 g 3309 3390 M +-9 6 V +.14 g 3300 3396 M +-19 14 V +.14 g 3281 3410 M +-8 5 V +.14 g 3273 3415 M +-20 15 V +.14 g 3253 3430 M +-8 5 V +.14 g 3245 3435 M +-20 15 V +.14 g 3225 3450 M +-7 6 V +.14 g 3218 3456 M +-19 14 V +.14 g 3199 3470 M +-8 6 V +.14 g 3191 3476 M +-19 14 V +.14 g 3172 3490 M +-8 7 V +.14 g 3164 3497 M +-18 13 V +.14 g 3146 3510 M +-10 8 V +.14 g 3136 3518 M +-17 13 V +.14 g 3119 3531 M +-10 7 V +.14 g 3109 3538 M +-16 13 V +.14 g 3093 3551 M +-11 8 V +.14 g 3082 3559 M +-16 12 V +.14 g 3066 3571 M +-11 8 V +.14 g 3055 3579 M +-16 12 V +.14 g 3039 3591 M +-12 8 V +.14 g 3027 3599 M +-16 12 V +.14 g 3011 3611 M +-11 8 V +.14 g 3000 3619 M +-17 12 V +.14 g 2983 3631 M +-10 7 V +.14 g 2973 3638 M +-19 14 V +stroke 2954 3652 M +.14 g 2954 3652 M +-8 5 V +.14 g 2946 3657 M +-22 15 V +.14 g 2924 3672 M +-6 3 V +.14 g 2918 3675 M +-25 17 V +.14 g 2893 3692 M +-2 1 V +.14 g 2891 3693 M +-27 17 V +.14 g 2864 3710 M +-4 2 V +.14 g 2860 3712 M +-23 14 V +.14 g 2837 3726 M +-10 6 V +.14 g 2827 3732 M +-18 10 V +0 g .14 g 5594 4619 M +.14 g 5594 4619 M +-5 -9 V +.14 g 5589 4610 M +-7 -11 V +.14 g 5582 4599 M +-12 -20 V +.14 g 5570 4579 M +-8 -14 V +.14 g 5562 4565 M +-4 -6 V +.14 g 5558 4559 M +-13 -21 V +.14 g 5545 4538 M +-11 -17 V +.14 g 5534 4521 M +-1 -3 V +.14 g 5533 4518 M +-13 -20 V +.14 g 5520 4498 M +-13 -19 V +.14 g 5507 4479 M +0 -1 V +.14 g 5507 4478 M +-14 -20 V +.14 g 5493 4458 M +-13 -20 V +.14 g 5480 4438 M +-1 0 V +.14 g 5479 4438 M +-14 -21 V +.14 g 5465 4417 M +-12 -17 V +.14 g 5453 4400 M +-2 -3 V +.14 g 5451 4397 M +-15 -20 V +.14 g 5436 4377 M +-11 -14 V +.14 g 5425 4363 M +-4 -6 V +.14 g 5421 4357 M +-16 -20 V +.14 g 5405 4337 M +-7 -9 V +.14 g 5398 4328 M +-9 -11 V +.14 g 5389 4317 M +-17 -20 V +.14 g 5372 4297 M +-1 -2 V +.14 g 5371 4295 M +-16 -19 V +.14 g 5355 4276 M +-11 -12 V +.14 g 5344 4264 M +-7 -8 V +.14 g 5337 4256 M +-19 -20 V +.14 g 5318 4236 M +-2 -2 V +.14 g 5316 4234 M +-18 -18 V +.14 g 5298 4216 M +-9 -9 V +.14 g 5289 4207 M +-12 -11 V +.14 g 5277 4196 M +-15 -15 V +.14 g 5262 4181 M +-6 -5 V +.14 g 5256 4176 M +-21 -19 V +.14 g 5235 4157 M +-2 -2 V +.14 g 5233 4155 M +-25 -20 V +.14 g 5208 4135 M +-1 0 V +.14 g 5207 4135 M +-25 -20 V +.14 g 5182 4115 M +-2 -1 V +.14 g 5180 4114 M +-26 -19 V +stroke 5154 4095 M +.14 g 5154 4095 M +-1 -1 V +.14 g 5153 4094 M +-27 -18 V +.14 g 5126 4076 M +-3 -1 V +.14 g 5123 4075 M +-25 -16 V +.14 g 5098 4059 M +-7 -4 V +.14 g 5091 4055 M +-20 -12 V +.14 g 5071 4043 M +-16 -8 V +.14 g 5055 4035 M +-11 -7 V +.14 g 5044 4028 M +-27 -14 V +.14 g .14 g 5017 4014 M +-28 -13 V +.14 g 4989 4001 M +-13 -7 V +.14 g 4976 3994 M +-14 -6 V +.14 g 4962 3988 M +-27 -13 V +.14 g 4935 3975 M +-3 -1 V +.14 g 4932 3974 M +-24 -11 V +.14 g 4908 3963 M +-21 -9 V +.14 g 4887 3954 M +-7 -3 V +.14 g 4880 3951 M +-27 -12 V +.14 g 4853 3939 M +-12 -5 V +.14 g 4841 3934 M +-15 -7 V +.14 g 4826 3927 M +-27 -12 V +.14 g 4799 3915 M +-3 -1 V +.14 g 4796 3914 M +-25 -11 V +.14 g 4771 3903 M +-20 -10 V +.14 g 4751 3893 M +-7 -3 V +.14 g 4744 3890 M +-27 -13 V +.14 g 4717 3877 M +-8 -4 V +.14 g 4709 3873 M +-19 -9 V +.14 g 4690 3864 M +-21 -11 V +.14 g 4669 3853 M +-7 -3 V +.14 g 4662 3850 M +-27 -15 V +.14 g 4635 3835 M +-5 -2 V +.14 g 4630 3833 M +-22 -13 V +.14 g 4608 3820 M +-14 -7 V +.14 g 4594 3813 M +-13 -8 V +.14 g 4581 3805 M +-21 -12 V +.14 g 4560 3793 M +-7 -4 V +.14 g 4553 3789 M +-26 -17 V +.14 g 4527 3772 M +-1 0 V +.14 g 4526 3772 M +-27 -18 V +.14 g 4499 3754 M +-3 -2 V +.14 g 4496 3752 M +-24 -16 V +.14 g 4472 3736 M +-6 -4 V +.14 g 4466 3732 M +-22 -14 V +.14 g 4444 3718 M +-7 -6 V +.14 g 4437 3712 M +-20 -14 V +.14 g 4417 3698 M +-9 -6 V +.14 g 4408 3692 M +-18 -14 V +.14 g 4390 3678 M +-9 -6 V +.14 g 4381 3672 M +-18 -14 V +.14 g 4363 3658 M +-9 -6 V +.14 g 4354 3652 M +-19 -15 V +stroke 4335 3637 M +.14 g 4335 3637 M +-7 -6 V +.14 g 4328 3631 M +-20 -15 V +.14 g 4308 3616 M +-6 -5 V +0 g .14 g 5022 951 M +.14 g 5022 951 M +-5 -8 V +.14 g 5017 943 M +-9 -12 V +.14 g 5008 931 M +-14 -21 V +.14 g 4994 910 M +-5 -6 V +.14 g 4989 904 M +-10 -14 V +.14 g 4979 890 M +-14 -20 V +.14 g 4965 870 M +-3 -4 V +.14 g 4962 866 M +-12 -16 V +.14 g 4950 850 M +-15 -20 V +.14 g 4935 830 M +0 -1 V +.14 g 4935 829 M +-15 -19 V +.14 g 4920 810 M +-12 -18 V +.14 g 4908 792 M +-3 -2 V +.14 g 4905 790 M +-15 -21 V +.14 g 4890 769 M +-10 -12 V +.14 g 4880 757 M +-5 -8 V +.14 g 4875 749 M +-16 -20 V +.14 g 4859 729 M +-6 -7 V +.14 g 4853 722 M +-10 -13 V +.14 g 4843 709 M +-17 -20 V +.14 g 4826 689 M +0 -1 V +.14 g 4826 688 M +-16 -19 V +.14 g 4810 669 M +-11 -14 V +.14 g 4799 655 M +-7 -7 V +.14 g 4792 648 M +-17 -20 V +.14 g 4775 628 M +-4 -4 V +.14 g 4771 624 M +-14 -16 V +.14 g 4757 608 M +-13 -14 V +.14 g 4744 594 M +-6 -6 V +0 g .14 g 6052 2198 M +.14 g 6052 2198 M +-13 -18 V +.14 g 6039 2180 M +-14 -19 V +.14 g 6025 2161 M +-1 -1 V +.14 g 6024 2160 M +-15 -20 V +.14 g 6009 2140 M +-11 -16 V +.14 g 5998 2124 M +-4 -4 V +.14 g 5994 2120 M +-16 -20 V +.14 g 5978 2100 M +-8 -10 V +.14 g 5970 2090 M +-8 -11 V +.14 g 5962 2079 M +-16 -20 V +.14 g 5946 2059 M +-3 -3 V +.14 g 5943 2056 M +-14 -17 V +.14 g 5929 2039 M +-13 -16 V +.14 g 5916 2023 M +-4 -4 V +.14 g 5912 2019 M +-17 -20 V +.14 g 5895 1999 M +-6 -7 V +.14 g 5889 1992 M +-12 -13 V +.14 g 5877 1979 M +-16 -18 V +.14 g 5861 1961 M +-2 -2 V +stroke 5859 1959 M +.14 g 5859 1959 M +-18 -21 V +.14 g 5841 1938 M +-7 -7 V +.14 g 5834 1931 M +-12 -13 V +.14 g 5822 1918 M +-15 -16 V +.14 g 5807 1902 M +-4 -4 V +.14 g 5803 1898 M +-19 -20 V +.14 g 5784 1878 M +-4 -5 V +.14 g 5780 1873 M +-16 -15 V +.14 g 5764 1858 M +-12 -13 V +.14 g 5752 1845 M +-7 -7 V +.14 g 5745 1838 M +-20 -20 V +.14 g 5725 1818 M +0 -1 V +.14 g 5725 1817 M +-20 -20 V +.14 g 5705 1797 M +-7 -7 V +.14 g 5698 1790 M +-13 -13 V +.14 g 5685 1777 M +-14 -15 V +.14 g 5671 1762 M +-6 -5 V +.14 g 5665 1757 M +-20 -20 V +.14 g 5645 1737 M +-2 -2 V +.14 g 5643 1735 M +-18 -18 V +.14 g 5625 1717 M +-9 -10 V +.14 g 5616 1707 M +-10 -10 V +.14 g 5606 1697 M +-17 -18 V +.14 g 5589 1679 M +-3 -3 V +.14 g 5586 1676 M +-19 -20 V +.14 g 5567 1656 M +-5 -6 V +.14 g 5562 1650 M +-14 -14 V +.14 g 5548 1636 M +-14 -15 V +.14 g 5534 1621 M +-5 -5 V +.14 g 5529 1616 M +-18 -20 V +.14 g 5511 1596 M +-4 -4 V +.14 g 5507 1592 M +-15 -16 V +.14 g 5492 1576 M +-12 -14 V +.14 g 5480 1562 M +-6 -7 V +.14 g 5474 1555 M +-17 -20 V +.14 g 5457 1535 M +-4 -4 V +.14 g 5453 1531 M +-14 -16 V +.14 g 5439 1515 M +-14 -16 V +.14 g 5425 1499 M +-3 -4 V +.14 g 5422 1495 M +-17 -20 V +.14 g 5405 1475 M +-7 -9 V +.14 g 5398 1466 M +-9 -11 V +.14 g 5389 1455 M +-17 -20 V +.14 g 5372 1435 M +-1 -2 V +.14 g 5371 1433 M +-15 -19 V +.14 g 5356 1414 M +-12 -16 V +.14 g 5344 1398 M +-4 -4 V +.14 g 5340 1394 M +-15 -20 V +.14 g 5325 1374 M +-9 -11 V +.14 g 5316 1363 M +-7 -9 V +.14 g 5309 1354 M +-15 -20 V +.14 g 5294 1334 M +-5 -7 V +stroke 5289 1327 M +.14 g 5289 1327 M +-10 -13 V +.14 g 5279 1314 M +-15 -21 V +.14 g 5264 1293 M +-2 -3 V +.14 g 5262 1290 M +-13 -17 V +.14 g 5249 1273 M +-14 -20 V +.14 g 5235 1253 M +-15 -20 V +.14 g 5220 1233 M +-13 -18 V +.14 g 5207 1215 M +-1 -2 V +.14 g 5206 1213 M +-15 -20 V +.14 g 5191 1193 M +-11 -16 V +.14 g 5180 1177 M +-3 -5 V +.14 g 5177 1172 M +-14 -20 V +.14 g 5163 1152 M +-10 -14 V +.14 g 5153 1138 M +-4 -6 V +.14 g 5149 1132 M +-14 -20 V +.14 g 5135 1112 M +-9 -13 V +.14 g 5126 1099 M +-6 -7 V +.14 g 5120 1092 M +-14 -20 V +.14 g 5106 1072 M +-8 -12 V +.14 g 5098 1060 M +-6 -8 V +.14 g 5092 1052 M +-14 -21 V +.14 g 5078 1031 M +-7 -10 V +.14 g 5071 1021 M +-7 -10 V +.14 g 5064 1011 M +-14 -20 V +.14 g 5050 991 M +-6 -9 V +.14 g 5044 982 M +-8 -11 V +.14 g 5036 971 M +-14 -20 V +0 g .12 g 809 3148 M +.12 g 809 3148 M +-8 20 V +.12 g 801 3168 M +-8 19 V +.12 g 793 3187 M +-1 1 V +.12 g 792 3188 M +-8 20 V +.12 g 784 3208 M +-8 20 V +.12 g 776 3228 M +-8 20 V +.12 g 768 3248 M +-3 6 V +.12 g 765 3254 M +-5 15 V +.12 g 760 3269 M +-8 20 V +.12 g 752 3289 M +-8 20 V +.12 g 744 3309 M +-6 13 V +.12 g 738 3322 M +-2 7 V +.12 g 736 3329 M +-8 20 V +.12 g 728 3349 M +-8 20 V +.12 g 720 3369 M +-8 21 V +.12 g 712 3390 M +-1 1 V +.12 g 711 3391 M +-7 19 V +.12 g 704 3410 M +-8 20 V +.12 g 696 3430 M +-8 20 V +.12 g 688 3450 M +-4 11 V +.12 g 684 3461 M +-4 9 V +.12 g 680 3470 M +-7 20 V +.12 g 673 3490 M +-8 20 V +.12 g 665 3510 M +-8 21 V +.12 g 657 3531 M +0 1 V +stroke 657 3532 M +.12 g 657 3532 M +-8 19 V +.12 g 649 3551 M +-8 20 V +.12 g 641 3571 M +-7 20 V +.12 g 634 3591 M +-5 12 V +.12 g 629 3603 M +-3 8 V +.12 g 626 3611 M +-8 20 V +.12 g 618 3631 M +-7 21 V +.12 g 611 3652 M +-8 20 V +.12 g 603 3672 M +-1 2 V +0 g .12 g 1676 1817 M +.12 g 1676 1817 M +-11 11 V +.12 g 1665 1828 M +-11 10 V +.12 g 1654 1838 M +-16 15 V +.12 g 1638 1853 M +-6 5 V +.12 g 1632 1858 M +-22 20 V +.12 g .12 g 1610 1878 M +-21 20 V +.12 g 1589 1898 M +-6 5 V +.12 g 1583 1903 M +-15 15 V +.12 g 1568 1918 M +-12 11 V +.12 g 1556 1929 M +-9 9 V +.12 g 1547 1938 M +-18 18 V +.12 g 1529 1956 M +-3 3 V +.12 g 1526 1959 M +-20 20 V +.12 g 1506 1979 M +-5 4 V +.12 g 1501 1983 M +-15 16 V +.12 g 1486 1999 M +-12 12 V +.12 g 1474 2011 M +-8 8 V +.12 g 1466 2019 M +-19 20 V +.12 g 1447 2039 M +0 1 V +.12 g 1447 2040 M +-18 19 V +.12 g 1429 2059 M +-9 11 V +.12 g 1420 2070 M +-9 9 V +.12 g 1411 2079 M +-18 21 V +.12 g 1393 2100 M +-1 1 V +.12 g 1392 2101 M +-16 19 V +.12 g 1376 2120 M +-11 13 V +.12 g 1365 2133 M +-5 7 V +.12 g 1360 2140 M +-17 20 V +.12 g 1343 2160 M +-5 7 V +.12 g 1338 2167 M +-10 13 V +.12 g 1328 2180 M +-16 20 V +.12 g 1312 2200 M +-1 2 V +.12 g 1311 2202 M +-14 19 V +.12 g 1297 2221 M +-14 18 V +.12 g 1283 2239 M +-1 2 V +.12 g 1282 2241 M +-14 20 V +.12 g 1268 2261 M +-12 16 V +.12 g 1256 2277 M +-3 4 V +.12 g 1253 2281 M +-13 20 V +.12 g 1240 2301 M +-11 16 V +.12 g 1229 2317 M +-3 4 V +.12 g 1226 2321 M +-13 20 V +.12 g 1213 2341 M +-11 18 V +stroke 1202 2359 M +.12 g 1202 2359 M +-2 3 V +.12 g 1200 2362 M +-13 20 V +.12 g 1187 2382 M +-13 20 V +.12 g .12 g 1174 2402 M +-12 20 V +.12 g 1162 2422 M +-12 20 V +.12 g 1150 2442 M +-3 5 V +.12 g 1147 2447 M +-9 15 V +.12 g 1138 2462 M +-12 21 V +.12 g 1126 2483 M +-6 11 V +.12 g 1120 2494 M +-5 9 V +.12 g 1115 2503 M +-11 20 V +.12 g 1104 2523 M +-11 19 V +.12 g 1093 2542 M +-1 1 V +.12 g 1092 2543 M +-11 20 V +.12 g 1081 2563 M +-11 20 V +.12 g 1070 2583 M +-5 10 V +.12 g 1065 2593 M +-5 11 V +.12 g 1060 2604 M +-11 20 V +.12 g 1049 2624 M +-10 20 V +.12 g 1039 2644 M +-1 1 V +.12 g 1038 2645 M +-10 19 V +.12 g 1028 2664 M +-10 20 V +.12 g 1018 2684 M +-7 15 V +.12 g 1011 2699 M +-3 5 V +.12 g 1008 2704 M +-10 20 V +.12 g 998 2724 M +-10 21 V +.12 g 988 2745 M +-4 9 V +.12 g 984 2754 M +-5 11 V +.12 g 979 2765 M +-10 20 V +.12 g 969 2785 M +-10 20 V +.12 g 959 2805 M +-3 7 V +.12 g 956 2812 M +-6 13 V +.12 g 950 2825 M +-9 20 V +.12 g 941 2845 M +-10 21 V +.12 g 931 2866 M +-2 4 V +.12 g 929 2870 M +-7 16 V +.12 g 922 2886 M +-9 20 V +.12 g 913 2906 M +-9 20 V +.12 g 904 2926 M +-2 5 V +.12 g 902 2931 M +-7 15 V +.12 g 895 2946 M +-9 20 V +.12 g 886 2966 M +-9 20 V +.12 g 877 2986 M +-2 7 V +.12 g 875 2993 M +-6 14 V +.12 g 869 3007 M +-9 20 V +.12 g 860 3027 M +-9 20 V +.12 g 851 3047 M +-4 9 V +.12 g 847 3056 M +-4 11 V +.12 g 843 3067 M +-9 20 V +.12 g 834 3087 M +-8 20 V +.12 g 826 3107 M +-6 14 V +.12 g 820 3121 M +-3 7 V +stroke 817 3128 M +.12 g 817 3128 M +-8 20 V +0 g .12 g 2697 588 M +.12 g 2697 588 M +-23 20 V +.12 g 2674 608 M +-1 1 V +.12 g 2673 609 M +-20 19 V +.12 g 2653 628 M +-7 7 V +.12 g 2646 635 M +-14 13 V +.12 g 2632 648 M +-13 14 V +.12 g 2619 662 M +-6 7 V +.12 g 2613 669 M +-19 20 V +.12 g 2594 689 M +-3 2 V +.12 g 2591 691 M +-15 18 V +.12 g 2576 709 M +-12 13 V +.12 g 2564 722 M +-6 7 V +.12 g 2558 729 M +-18 20 V +.12 g 2540 749 M +-3 5 V +.12 g 2537 754 M +-13 15 V +.12 g 2524 769 M +-14 18 V +.12 g 2510 787 M +-3 3 V +.12 g 2507 790 M +-16 20 V +.12 g 2491 810 M +-9 11 V +.12 g 2482 821 M +-7 9 V +.12 g 2475 830 M +-15 20 V +.12 g 2460 850 M +-5 6 V +.12 g 2455 856 M +-11 14 V +.12 g 2444 870 M +-15 20 V +.12 g 2429 890 M +-1 2 V +.12 g 2428 892 M +-14 18 V +.12 g 2414 910 M +-13 19 V +.12 g 2401 929 M +-1 2 V +.12 g 2400 931 M +-15 20 V +.12 g 2385 951 M +-12 16 V +.12 g 2373 967 M +-3 4 V +.12 g 2370 971 M +-14 20 V +.12 g 2356 991 M +-10 14 V +.12 g 2346 1005 M +-4 6 V +.12 g 2342 1011 M +-14 20 V +.12 g 2328 1031 M +-9 13 V +.12 g 2319 1044 M +-6 8 V +.12 g 2313 1052 M +-14 20 V +.12 g 2299 1072 M +-7 11 V +.12 g 2292 1083 M +-7 9 V +.12 g 2285 1092 M +-14 20 V +.12 g 2271 1112 M +-7 10 V +.12 g 2264 1122 M +-7 10 V +.12 g 2257 1132 M +-14 20 V +.12 g 2243 1152 M +-6 9 V +.12 g 2237 1161 M +-8 11 V +.12 g 2229 1172 M +-14 21 V +.12 g 2215 1193 M +-5 7 V +.12 g 2210 1200 M +-9 13 V +.12 g 2201 1213 M +-14 20 V +.12 g 2187 1233 M +-4 6 V +stroke 2183 1239 M +.12 g 2183 1239 M +-11 14 V +.12 g 2172 1253 M +-14 20 V +.12 g 2158 1273 M +-3 4 V +.12 g 2155 1277 M +-12 16 V +.12 g 2143 1293 M +-14 21 V +.12 g 2129 1314 M +-1 1 V +.12 g 2128 1315 M +-14 19 V +.12 g 2114 1334 M +-13 18 V +.12 g 2101 1352 M +-2 2 V +.12 g 2099 1354 M +-15 20 V +.12 g 2084 1374 M +-10 14 V +.12 g 2074 1388 M +-5 6 V +.12 g 2069 1394 M +-16 20 V +.12 g 2053 1414 M +-7 9 V +.12 g 2046 1423 M +-9 12 V +.12 g 2037 1435 M +-15 20 V +.12 g 2022 1455 M +-3 3 V +.12 g 2019 1458 M +-14 17 V +.12 g 2005 1475 M +-13 16 V +.12 g 1992 1491 M +-3 4 V +.12 g 1989 1495 M +-17 20 V +.12 g 1972 1515 M +-7 9 V +.12 g 1965 1524 M +-10 11 V +.12 g 1955 1535 M +-18 20 V +.12 g 1937 1555 M +0 1 V +.12 g 1937 1556 M +-17 20 V +.12 g 1920 1576 M +-10 10 V +.12 g 1910 1586 M +-9 10 V +.12 g 1901 1596 M +-18 20 V +.12 g .12 g 1883 1616 M +-19 20 V +.12 g 1864 1636 M +-8 9 V +.12 g 1856 1645 M +-12 11 V +.12 g 1844 1656 M +-16 16 V +.12 g 1828 1672 M +-4 4 V +.12 g 1824 1676 M +-20 21 V +.12 g 1804 1697 M +-3 3 V +.12 g 1801 1700 M +-18 17 V +.12 g 1783 1717 M +-9 9 V +.12 g 1774 1726 M +-12 11 V +.12 g 1762 1737 M +-15 15 V +.12 g 1747 1752 M +-6 5 V +.12 g 1741 1757 M +-21 20 V +.12 g 1720 1777 M +-1 0 V +.12 g 1719 1777 M +-21 20 V +.12 g 1698 1797 M +-6 6 V +.12 g 1692 1803 M +-16 14 V +0 g .12 g 1672 4538 M +.12 g 1672 4538 M +-7 13 V +.12 g 1665 4551 M +-4 8 V +.12 g 1661 4559 M +-11 20 V +.12 g 1650 4579 M +-11 20 V +.12 g 1639 4599 M +-1 3 V +.12 g 1638 4602 M +-9 17 V +stroke 1629 4619 M +0 g .12 g 2973 3511 M +.12 g 2973 3511 M +-27 20 V +.12 g .12 g 2946 3531 M +-28 18 V +.12 g 2918 3549 M +-2 2 V +.12 g 2916 3551 M +-25 16 V +.12 g 2891 3567 M +-6 4 V +.12 g 2885 3571 M +-21 13 V +.12 g 2864 3584 M +-11 7 V +.12 g 2853 3591 M +-16 10 V +.12 g 2837 3601 M +-18 10 V +.12 g 2819 3611 M +-10 6 V +.12 g 2809 3617 M +-26 14 V +.12 g 2783 3631 M +-1 1 V +.12 g 2782 3632 M +-27 14 V +.12 g 2755 3646 M +-11 6 V +.12 g 2744 3652 M +-16 8 V +.12 g 2728 3660 M +-26 12 V +.12 g 2702 3672 M +-2 1 V +.12 g 2700 3673 M +-27 12 V +.12 g 2673 3685 M +-16 7 V +.12 g 2657 3692 M +-11 5 V +.12 g 2646 3697 M +-27 11 V +.12 g 2619 3708 M +-11 4 V +.12 g 2608 3712 M +-17 7 V +.12 g 2591 3719 M +-27 10 V +.12 g 2564 3729 M +-9 3 V +.12 g 2555 3732 M +-18 7 V +.12 g 2537 3739 M +-27 10 V +.12 g 2510 3749 M +-11 3 V +.12 g 2499 3752 M +-17 6 V +.12 g 2482 3758 M +-27 10 V +.12 g 2455 3768 M +-13 4 V +.12 g 2442 3772 M +-14 6 V +.12 g 2428 3778 M +-27 10 V +.12 g 2401 3788 M +-14 5 V +.12 g 2387 3793 M +-14 5 V +.12 g 2373 3798 M +-27 11 V +.12 g 2346 3809 M +-10 4 V +.12 g 2336 3813 M +-17 7 V +.12 g 2319 3820 M +-27 12 V +.12 g 2292 3832 M +-2 1 V +.12 g 2290 3833 M +-26 12 V +.12 g 2264 3845 M +-15 8 V +.12 g 2249 3853 M +-12 6 V +.12 g 2237 3859 M +-24 14 V +.12 g 2213 3873 M +-3 2 V +.12 g 2210 3875 M +-27 16 V +.12 g 2183 3891 M +-3 2 V +.12 g 2180 3893 M +-25 17 V +.12 g 2155 3910 M +-5 4 V +.12 g 2150 3914 M +-22 15 V +.12 g 2128 3929 M +-6 5 V +.12 g 2122 3934 M +-21 17 V +stroke 2101 3951 M +.12 g 2101 3951 M +-4 3 V +.12 g 2097 3954 M +-23 20 V +.12 g 2074 3974 M +-1 0 V +.12 g 2073 3974 M +-22 20 V +.12 g 2051 3994 M +-5 5 V +.12 g 2046 3999 M +-15 15 V +.12 g 2031 4014 M +-12 12 V +.12 g 2019 4026 M +-8 9 V +.12 g 2011 4035 M +-19 20 V +.12 g .12 g 1992 4055 M +-18 20 V +.12 g 1974 4075 M +-9 11 V +.12 g 1965 4086 M +-8 9 V +.12 g 1957 4095 M +-16 20 V +.12 g 1941 4115 M +-4 4 V +.12 g 1937 4119 M +-12 16 V +.12 g 1925 4135 M +-15 19 V +.12 g 1910 4154 M +-1 1 V +.12 g 1909 4155 M +-15 21 V +.12 g 1894 4176 M +-11 15 V +.12 g 1883 4191 M +-3 5 V +.12 g 1880 4196 M +-14 20 V +.12 g 1866 4216 M +-10 14 V +.12 g 1856 4230 M +-4 6 V +.12 g 1852 4236 M +-14 20 V +.12 g 1838 4256 M +-10 15 V +.12 g 1828 4271 M +-3 5 V +.12 g 1825 4276 M +-13 21 V +.12 g 1812 4297 M +-11 17 V +.12 g 1801 4314 M +-2 3 V +.12 g 1799 4317 M +-12 20 V +.12 g 1787 4337 M +-12 20 V +.12 g 1775 4357 M +-1 2 V +.12 g 1774 4359 M +-11 18 V +.12 g 1763 4377 M +-12 20 V +.12 g 1751 4397 M +-4 8 V +.12 g 1747 4405 M +-8 12 V +.12 g 1739 4417 M +-11 21 V +.12 g 1728 4438 M +-9 14 V +.12 g 1719 4452 M +-3 6 V +.12 g 1716 4458 M +-11 20 V +.12 g 1705 4478 M +-11 20 V +.12 g 1694 4498 M +-2 3 V +.12 g 1692 4501 M +-9 17 V +.12 g 1683 4518 M +-11 20 V +0 g .12 g 4417 3572 M +.12 g 4417 3572 M +-1 -1 V +.12 g 4416 3571 M +-26 -19 V +.12 g 4390 3552 M +-1 -1 V +.12 g 4389 3551 M +-26 -20 V +.12 g 4363 3531 M +-1 0 V +.12 g 4362 3531 M +-25 -21 V +.12 g 4337 3510 M +-2 -1 V +.12 g 4335 3509 M +-23 -19 V +stroke 4312 3490 M +.12 g 4312 3490 M +-4 -3 V +.12 g 4308 3487 M +-21 -17 V +.12 g 4287 3470 M +-6 -5 V +.12 g 4281 3465 M +-18 -15 V +.12 g 4263 3450 M +-9 -8 V +.12 g 4254 3442 M +-15 -12 V +.12 g 4239 3430 M +-13 -11 V +.12 g 4226 3419 M +-11 -9 V +.12 g 4215 3410 M +-16 -14 V +.12 g 4199 3396 M +-8 -6 V +.12 g 4191 3390 M +-19 -17 V +.12 g 4172 3373 M +-5 -4 V +.12 g 4167 3369 M +-22 -19 V +.12 g 4145 3350 M +-2 -1 V +.12 g 4143 3349 M +-24 -20 V +.12 g 4119 3329 M +-2 -2 V +.12 g 4117 3327 M +-22 -18 V +.12 g 4095 3309 M +-5 -4 V +.12 g 4090 3305 M +-20 -16 V +.12 g 4070 3289 M +-7 -6 V +.12 g 4063 3283 M +-18 -14 V +.12 g 4045 3269 M +-9 -8 V +.12 g 4036 3261 M +-18 -13 V +.12 g 4018 3248 M +-10 -7 V +.12 g 4008 3241 M +-17 -13 V +.12 g 3991 3228 M +-10 -7 V +.12 g 3981 3221 M +-19 -13 V +.12 g 3962 3208 M +-8 -6 V +.12 g 3954 3202 M +-22 -14 V +.12 g 3932 3188 M +-5 -3 V +.12 g 3927 3185 M +-28 -17 V +.12 g 3899 3168 M +-1 0 V +.12 g 3898 3168 M +-26 -15 V +.12 g 3872 3153 M +-12 -5 V +.12 g 3860 3148 M +-15 -8 V +.12 g 3845 3140 M +-27 -12 V +.12 g 3818 3128 M +-3 0 V +.12 g 3815 3128 M +-25 -9 V +.12 g 3790 3119 M +-27 -8 V +.12 g 3763 3111 M +-15 -4 V +.12 g 3748 3107 M +-12 -2 V +.12 g 3736 3105 M +-27 -4 V +.12 g 3709 3101 M +-28 -2 V +.12 g 3681 3099 M +-27 0 V +.12 g 3654 3099 M +-27 2 V +.12 g 3627 3101 M +-27 4 V +.12 g 3600 3105 M +-12 2 V +.12 g 3588 3107 M +-16 4 V +.12 g 3572 3111 M +-27 8 V +.12 g 3545 3119 M +-24 9 V +.12 g 3521 3128 M +-3 1 V +.12 g 3518 3129 M +-27 11 V +stroke 3491 3140 M +.12 g 3491 3140 M +-17 8 V +.12 g 3474 3148 M +-11 5 V +.12 g 3463 3153 M +-27 15 V +.12 g .12 g 3436 3168 M +-27 15 V +.12 g 3409 3183 M +-7 5 V +.12 g 3402 3188 M +-20 13 V +.12 g 3382 3201 M +-12 7 V +.12 g 3370 3208 M +-16 11 V +.12 g 3354 3219 M +-13 9 V +.12 g 3341 3228 M +-14 10 V +.12 g 3327 3238 M +-14 10 V +.12 g 3313 3248 M +-13 10 V +.12 g 3300 3258 M +-15 11 V +.12 g 3285 3269 M +-12 9 V +.12 g 3273 3278 M +-14 11 V +.12 g 3259 3289 M +-14 10 V +.12 g 3245 3299 M +-12 10 V +.12 g 3233 3309 M +-15 12 V +.12 g 3218 3321 M +-10 8 V +.12 g 3208 3329 M +-17 14 V +.12 g 3191 3343 M +-9 6 V +.12 g 3182 3349 M +-18 15 V +.12 g 3164 3364 M +-7 5 V +.12 g 3157 3369 M +-21 17 V +.12 g 3136 3386 M +-4 4 V +.12 g 3132 3390 M +-23 18 V +.12 g 3109 3408 M +-2 2 V +.12 g 3107 3410 M +-25 19 V +.12 g 3082 3429 M +-1 1 V +.12 g 3081 3430 M +-26 20 V +.12 g 3055 3450 M +0 1 V +.12 g 3055 3451 M +-26 19 V +.12 g 3029 3470 M +-2 1 V +.12 g 3027 3471 M +-25 19 V +.12 g 3002 3490 M +-2 2 V +.12 g 3000 3492 M +-26 18 V +.12 g 2974 3510 M +-1 1 V +0 g .12 g 5674 4619 M +.12 g 5674 4619 M +-3 -7 V +.12 g 5671 4612 M +-7 -13 V +.12 g 5664 4599 M +-11 -20 V +.12 g 5653 4579 M +-10 -18 V +.12 g 5643 4561 M +-1 -2 V +.12 g 5642 4559 M +-11 -21 V +.12 g 5631 4538 M +-11 -20 V +.12 g 5620 4518 M +-4 -6 V +.12 g 5616 4512 M +-8 -14 V +.12 g 5608 4498 M +-11 -20 V +.12 g 5597 4478 M +-8 -14 V +.12 g 5589 4464 M +-4 -6 V +.12 g 5585 4458 M +-12 -20 V +.12 g 5573 4438 M +-11 -20 V +.12 g 5562 4418 M +-1 -1 V +stroke 5561 4417 M +.12 g 5561 4417 M +-12 -20 V +.12 g 5549 4397 M +-12 -20 V +.12 g 5537 4377 M +-3 -4 V +.12 g 5534 4373 M +-10 -16 V +.12 g 5524 4357 M +-13 -20 V +.12 g 5511 4337 M +-4 -7 V +.12 g 5507 4330 M +-9 -13 V +.12 g 5498 4317 M +-13 -20 V +.12 g 5485 4297 M +-5 -8 V +.12 g 5480 4289 M +-9 -13 V +.12 g 5471 4276 M +-14 -20 V +.12 g 5457 4256 M +-4 -6 V +.12 g 5453 4250 M +-11 -14 V +.12 g 5442 4236 M +-15 -20 V +.12 g 5427 4216 M +-2 -3 V +.12 g 5425 4213 M +-13 -17 V +.12 g 5412 4196 M +-14 -18 V +.12 g 5398 4178 M +-2 -2 V +.12 g 5396 4176 M +-17 -21 V +.12 g 5379 4155 M +-8 -10 V +.12 g 5371 4145 M +-9 -10 V +.12 g 5362 4135 M +-18 -20 V +.12 g 5344 4115 M +0 -1 V +.12 g 5344 4114 M +-18 -19 V +.12 g 5326 4095 M +-10 -10 V +.12 g 5316 4085 M +-10 -10 V +.12 g 5306 4075 M +-17 -17 V +.12 g 5289 4058 M +-4 -3 V +.12 g 5285 4055 M +-22 -20 V +.12 g 5263 4035 M +-1 -2 V +.12 g 5262 4033 M +-22 -19 V +.12 g 5240 4014 M +-5 -4 V +.12 g 5235 4010 M +-20 -16 V +.12 g 5215 3994 M +-8 -6 V +.12 g 5207 3988 M +-19 -14 V +.12 g 5188 3974 M +-8 -6 V +.12 g 5180 3968 M +-21 -14 V +.12 g 5159 3954 M +-6 -4 V +.12 g 5153 3950 M +-26 -16 V +.12 g 5127 3934 M +-1 -1 V +.12 g 5126 3933 M +-28 -16 V +.12 g 5098 3917 M +-6 -3 V +.12 g 5092 3914 M +-21 -12 V +.12 g 5071 3902 M +-17 -9 V +.12 g 5054 3893 M +-10 -5 V +.12 g 5044 3888 M +-27 -12 V +.12 g 5017 3876 M +-6 -3 V +.12 g 5011 3873 M +-22 -10 V +.12 g 4989 3863 M +-23 -10 V +.12 g 4966 3853 M +-4 -1 V +.12 g 4962 3852 M +-27 -12 V +.12 g 4935 3840 M +-18 -7 V +stroke 4917 3833 M +.12 g 4917 3833 M +-9 -4 V +.12 g 4908 3829 M +-28 -11 V +.12 g 4880 3818 M +-13 -5 V +.12 g 4867 3813 M +-14 -6 V +.12 g 4853 3807 M +-27 -11 V +.12 g 4826 3796 M +-9 -3 V +.12 g 4817 3793 M +-18 -8 V +.12 g 4799 3785 M +-28 -11 V +.12 g 4771 3774 M +-2 -2 V +.12 g 4769 3772 M +-25 -10 V +.12 g 4744 3762 M +-21 -10 V +.12 g 4723 3752 M +-6 -3 V +.12 g 4717 3749 M +-27 -12 V +.12 g 4690 3737 M +-10 -5 V +.12 g 4680 3732 M +-18 -9 V +.12 g 4662 3723 M +-22 -11 V +.12 g 4640 3712 M +-5 -3 V +.12 g 4635 3709 M +-27 -14 V +.12 g 4608 3695 M +-5 -3 V +.12 g 4603 3692 M +-22 -13 V +.12 g 4581 3679 M +-13 -7 V +.12 g 4568 3672 M +-15 -9 V +.12 g 4553 3663 M +-19 -11 V +.12 g 4534 3652 M +-8 -6 V +.12 g 4526 3646 M +-23 -15 V +.12 g 4503 3631 M +-4 -2 V +.12 g 4499 3629 M +-26 -18 V +.12 g 4473 3611 M +-1 0 V +.12 g 4472 3611 M +-28 -19 V +.12 g 4444 3592 M +0 -1 V +.12 g 4444 3591 M +-27 -19 V +0 g .12 g 5037 1112 M +.12 g 5037 1112 M +-13 -20 V +.12 g 5024 1092 M +-7 -11 V +.12 g 5017 1081 M +-7 -9 V +.12 g 5010 1072 M +-14 -20 V +.12 g 4996 1052 M +-7 -10 V +.12 g 4989 1042 M +-7 -11 V +.12 g 4982 1031 M +-14 -20 V +.12 g 4968 1011 M +-6 -9 V +.12 g 4962 1002 M +-8 -11 V +.12 g 4954 991 M +-14 -20 V +.12 g 4940 971 M +-5 -7 V +.12 g 4935 964 M +-10 -13 V +.12 g 4925 951 M +-14 -20 V +.12 g 4911 931 M +-3 -5 V +.12 g 4908 926 M +-12 -16 V +.12 g 4896 910 M +-15 -20 V +.12 g 4881 890 M +-1 -1 V +.12 g 4880 889 M +-14 -19 V +.12 g 4866 870 M +-13 -17 V +.12 g 4853 853 M +-3 -3 V +.12 g 4850 850 M +-15 -20 V +stroke 4835 830 M +.12 g 4835 830 M +-9 -11 V +.12 g 4826 819 M +-8 -9 V +.12 g 4818 810 M +-16 -20 V +.12 g 4802 790 M +-3 -5 V +.12 g 4799 785 M +-14 -16 V +.12 g 4785 769 M +-14 -16 V +.12 g 4771 753 M +-3 -4 V +.12 g 4768 749 M +-18 -20 V +.12 g 4750 729 M +-6 -7 V +.12 g 4744 722 M +-12 -13 V +.12 g 4732 709 M +-15 -16 V +.12 g 4717 693 M +-4 -4 V +.12 g 4713 689 M +-20 -20 V +.12 g 4693 669 M +-3 -4 V +.12 g 4690 665 M +-18 -17 V +.12 g 4672 648 M +-10 -9 V +.12 g 4662 639 M +-12 -11 V +.12 g 4650 628 M +-15 -13 V +.12 g 4635 615 M +-8 -7 V +.12 g 4627 608 M +-19 -16 V +.12 g 4608 592 M +-6 -4 V +0 g .12 g 6052 2326 M +.12 g 6052 2326 M +-4 -5 V +.12 g 6048 2321 M +-15 -20 V +.12 g 6033 2301 M +-8 -12 V +.12 g 6025 2289 M +-7 -8 V +.12 g 6018 2281 M +-15 -20 V +.12 g 6003 2261 M +-5 -7 V +.12 g 5998 2254 M +-11 -13 V +.12 g 5987 2241 M +-16 -20 V +.12 g 5971 2221 M +-1 -1 V +.12 g 5970 2220 M +-16 -20 V +.12 g 5954 2200 M +-11 -13 V +.12 g 5943 2187 M +-6 -7 V +.12 g 5937 2180 M +-17 -20 V +.12 g 5920 2160 M +-4 -5 V +.12 g 5916 2155 M +-14 -15 V +.12 g 5902 2140 M +-13 -15 V +.12 g 5889 2125 M +-5 -5 V +.12 g 5884 2120 M +-19 -20 V +.12 g 5865 2100 M +-4 -5 V +.12 g 5861 2095 M +-15 -16 V +.12 g 5846 2079 M +-12 -13 V +.12 g 5834 2066 M +-7 -7 V +.12 g 5827 2059 M +-20 -20 V +.12 g 5807 2039 M +0 -1 V +.12 g 5807 2038 M +-20 -19 V +.12 g 5787 2019 M +-7 -8 V +.12 g 5780 2011 M +-13 -12 V +.12 g 5767 1999 M +-15 -15 V +.12 g 5752 1984 M +-6 -5 V +.12 g 5746 1979 M +-20 -20 V +.12 g 5726 1959 M +-1 -1 V +stroke 5725 1958 M +.12 g 5725 1958 M +-20 -20 V +.12 g 5705 1938 M +-7 -7 V +.12 g 5698 1931 M +-14 -13 V +.12 g 5684 1918 M +-13 -13 V +.12 g 5671 1905 M +-8 -7 V +.12 g 5663 1898 M +-20 -19 V +.12 g 5643 1879 M +0 -1 V +.12 g 5643 1878 M +-21 -20 V +.12 g 5622 1858 M +-6 -6 V +.12 g 5616 1852 M +-14 -14 V +.12 g 5602 1838 M +-13 -13 V +.12 g 5589 1825 M +-8 -8 V +.12 g 5581 1817 M +-19 -20 V +.12 g .12 g 5562 1797 M +-20 -20 V +.12 g 5542 1777 M +-8 -8 V +.12 g 5534 1769 M +-11 -12 V +.12 g 5523 1757 M +-16 -17 V +.12 g 5507 1740 M +-3 -3 V +.12 g 5504 1737 M +-19 -20 V +.12 g 5485 1717 M +-5 -7 V +.12 g 5480 1710 M +-13 -13 V +.12 g 5467 1697 M +-14 -17 V +.12 g 5453 1680 M +-4 -4 V +.12 g 5449 1676 M +-17 -20 V +.12 g 5432 1656 M +-7 -8 V +.12 g 5425 1648 M +-10 -12 V +.12 g 5415 1636 M +-17 -20 V +.12 g .12 g 5398 1616 M +-16 -20 V +.12 g 5382 1596 M +-11 -14 V +.12 g 5371 1582 M +-6 -6 V +.12 g 5365 1576 M +-15 -21 V +.12 g 5350 1555 M +-6 -7 V +.12 g 5344 1548 M +-10 -13 V +.12 g 5334 1535 M +-16 -20 V +.12 g 5318 1515 M +-2 -3 V +.12 g 5316 1512 M +-13 -17 V +.12 g 5303 1495 M +-14 -19 V +.12 g 5289 1476 M +-1 -1 V +.12 g 5288 1475 M +-15 -20 V +.12 g 5273 1455 M +-11 -16 V +.12 g 5262 1439 M +-3 -4 V +.12 g 5259 1435 M +-15 -21 V +.12 g 5244 1414 M +-9 -13 V +.12 g 5235 1401 M +-5 -7 V +.12 g 5230 1394 M +-14 -20 V +.12 g 5216 1374 M +-9 -12 V +.12 g 5207 1362 M +-5 -8 V +.12 g 5202 1354 M +-14 -20 V +.12 g 5188 1334 M +-8 -12 V +.12 g 5180 1322 M +-6 -8 V +.12 g 5174 1314 M +-14 -21 V +.12 g 5160 1293 M +-7 -10 V +stroke 5153 1283 M +.12 g 5153 1283 M +-7 -10 V +.12 g 5146 1273 M +-13 -20 V +.12 g 5133 1253 M +-7 -11 V +.12 g 5126 1242 M +-7 -9 V +.12 g 5119 1233 M +-14 -20 V +.12 g 5105 1213 M +-7 -11 V +.12 g 5098 1202 M +-6 -9 V +.12 g 5092 1193 M +-14 -21 V +.12 g 5078 1172 M +-7 -10 V +.12 g 5071 1162 M +-6 -10 V +.12 g 5065 1152 M +-14 -20 V +.12 g 5051 1132 M +-7 -11 V +.12 g 5044 1121 M +-7 -9 V +0 g .1 g 912 3047 M +.1 g 912 3047 M +-9 20 V +.1 g 903 3067 M +-1 4 V +.1 g 902 3071 M +-7 16 V +.1 g 895 3087 M +-9 20 V +.1 g 886 3107 M +-9 21 V +.1 g 877 3128 M +-2 6 V +.1 g 875 3134 M +-6 14 V +.1 g 869 3148 M +-9 20 V +.1 g 860 3168 M +-8 20 V +.1 g 852 3188 M +-5 10 V +.1 g 847 3198 M +-4 10 V +.1 g 843 3208 M +-8 20 V +.1 g 835 3228 M +-9 20 V +.1 g 826 3248 M +-6 16 V +.1 g 820 3264 M +-2 5 V +.1 g 818 3269 M +-8 20 V +.1 g 810 3289 M +-8 20 V +.1 g 802 3309 M +-8 20 V +.1 g 794 3329 M +-1 2 V +.1 g 793 3331 M +-7 18 V +.1 g 786 3349 M +-8 20 V +.1 g 778 3369 M +-8 21 V +.1 g 770 3390 M +-5 10 V +.1 g 765 3400 M +-3 10 V +.1 g 762 3410 M +-8 20 V +.1 g 754 3430 M +-8 20 V +.1 g 746 3450 M +-8 19 V +.1 g 738 3469 M +0 1 V +.1 g 738 3470 M +-8 20 V +.1 g 730 3490 M +-8 20 V +.1 g 722 3510 M +-7 21 V +.1 g 715 3531 M +-4 9 V +.1 g 711 3540 M +-4 11 V +.1 g 707 3551 M +-8 20 V +.1 g 699 3571 M +-7 20 V +.1 g 692 3591 M +-8 20 V +.1 g 684 3611 M +-8 20 V +.1 g 676 3631 M +-7 21 V +.1 g 669 3652 M +-8 20 V +stroke 661 3672 M +.1 g 661 3672 M +-4 11 V +.1 g 657 3683 M +-4 9 V +.1 g 653 3692 M +-7 20 V +.1 g 646 3712 M +-8 20 V +.1 g 638 3732 M +-7 20 V +.1 g 631 3752 M +-2 4 V +.1 g 629 3756 M +-6 16 V +.1 g 623 3772 M +-7 21 V +.1 g 616 3793 M +-8 20 V +.1 g 608 3813 M +-6 16 V +0 g .1 g 1883 1785 M +.1 g 1883 1785 M +-13 12 V +.1 g 1870 1797 M +-14 16 V +.1 g 1856 1813 M +-5 4 V +.1 g 1851 1817 M +-21 21 V +.1 g 1830 1838 M +-2 1 V +.1 g 1828 1839 M +-19 19 V +.1 g 1809 1858 M +-8 7 V +.1 g 1801 1865 M +-13 13 V +.1 g 1788 1878 M +-14 13 V +.1 g 1774 1891 M +-8 7 V +.1 g 1766 1898 M +-19 17 V +.1 g 1747 1915 M +-4 3 V +.1 g 1743 1918 M +-23 20 V +.1 g 1720 1938 M +-1 1 V +.1 g 1719 1939 M +-22 20 V +.1 g 1697 1959 M +-5 4 V +.1 g 1692 1963 M +-19 16 V +.1 g 1673 1979 M +-8 7 V +.1 g 1665 1986 M +-15 13 V +.1 g 1650 1999 M +-12 11 V +.1 g 1638 2010 M +-11 9 V +.1 g 1627 2019 M +-17 14 V +.1 g 1610 2033 M +-7 6 V +.1 g 1603 2039 M +-20 18 V +.1 g 1583 2057 M +-3 2 V +.1 g 1580 2059 M +-23 20 V +.1 g 1557 2079 M +-1 2 V +.1 g 1556 2081 M +-21 19 V +.1 g 1535 2100 M +-6 6 V +.1 g 1529 2106 M +-15 14 V +.1 g 1514 2120 M +-13 11 V +.1 g 1501 2131 M +-8 9 V +.1 g 1493 2140 M +-19 18 V +.1 g 1474 2158 M +-2 2 V +.1 g 1472 2160 M +-20 20 V +.1 g 1452 2180 M +-5 5 V +.1 g 1447 2185 M +-15 15 V +.1 g 1432 2200 M +-12 14 V +.1 g 1420 2214 M +-6 7 V +.1 g 1414 2221 M +-19 20 V +.1 g 1395 2241 M +-3 3 V +.1 g 1392 2244 M +-15 17 V +stroke 1377 2261 M +.1 g 1377 2261 M +-12 14 V +.1 g 1365 2275 M +-5 6 V +.1 g 1360 2281 M +-17 20 V +.1 g 1343 2301 M +-5 7 V +.1 g 1338 2308 M +-11 13 V +.1 g 1327 2321 M +-16 20 V +.1 g 1311 2341 M +0 1 V +.1 g 1311 2342 M +-15 20 V +.1 g 1296 2362 M +-13 16 V +.1 g 1283 2378 M +-3 4 V +.1 g 1280 2382 M +-14 20 V +.1 g 1266 2402 M +-10 13 V +.1 g 1256 2415 M +-5 7 V +.1 g 1251 2422 M +-14 20 V +.1 g 1237 2442 M +-8 13 V +.1 g 1229 2455 M +-5 7 V +.1 g 1224 2462 M +-14 21 V +.1 g 1210 2483 M +-8 13 V +.1 g 1202 2496 M +-5 7 V +.1 g 1197 2503 M +-13 20 V +.1 g 1184 2523 M +-10 16 V +.1 g 1174 2539 M +-2 4 V +.1 g 1172 2543 M +-12 20 V +.1 g 1160 2563 M +-13 20 V +.1 g 1147 2583 M +0 1 V +.1 g 1147 2584 M +-11 20 V +.1 g 1136 2604 M +-12 20 V +.1 g 1124 2624 M +-4 6 V +.1 g 1120 2630 M +-8 14 V +.1 g 1112 2644 M +-11 20 V +.1 g 1101 2664 M +-8 15 V +.1 g 1093 2679 M +-3 5 V +.1 g 1090 2684 M +-11 20 V +.1 g 1079 2704 M +-11 20 V +.1 g 1068 2724 M +-3 5 V +.1 g 1065 2729 M +-8 16 V +.1 g 1057 2745 M +-10 20 V +.1 g 1047 2765 M +-9 17 V +.1 g 1038 2782 M +-2 3 V +.1 g 1036 2785 M +-10 20 V +.1 g 1026 2805 M +-10 20 V +.1 g 1016 2825 M +-5 11 V +.1 g 1011 2836 M +-5 9 V +.1 g 1006 2845 M +-9 21 V +.1 g 997 2866 M +-10 20 V +.1 g 987 2886 M +-3 6 V +.1 g 984 2892 M +-7 14 V +.1 g 977 2906 M +-9 20 V +.1 g 968 2926 M +-10 20 V +.1 g 958 2946 M +-2 4 V +.1 g 956 2950 M +-7 16 V +.1 g 949 2966 M +-9 20 V +stroke 940 2986 M +.1 g 940 2986 M +-10 21 V +.1 g 930 3007 M +-1 3 V +.1 g 929 3010 M +-8 17 V +.1 g 921 3027 M +-9 20 V +0 g .1 g 2927 588 M +.1 g 2927 588 M +-9 3 V +.1 g 2918 591 M +-27 10 V +.1 g 2891 601 M +-18 7 V +.1 g 2873 608 M +-9 4 V +.1 g 2864 612 M +-27 14 V +.1 g 2837 626 M +-5 2 V +.1 g 2832 628 M +-23 14 V +.1 g 2809 642 M +-11 6 V +.1 g 2798 648 M +-16 11 V +.1 g 2782 659 M +-14 10 V +.1 g 2768 669 M +-13 9 V +.1 g 2755 678 M +-14 11 V +.1 g 2741 689 M +-13 11 V +.1 g 2728 700 M +-12 9 V +.1 g 2716 709 M +-16 14 V +.1 g 2700 723 M +-7 6 V +.1 g 2693 729 M +-20 18 V +.1 g 2673 747 M +-2 2 V +.1 g 2671 749 M +-21 20 V +.1 g 2650 769 M +-4 5 V +.1 g 2646 774 M +-15 16 V +.1 g 2631 790 M +-12 12 V +.1 g 2619 802 M +-7 8 V +.1 g 2612 810 M +-19 20 V +.1 g 2593 830 M +-2 2 V +.1 g 2591 832 M +-15 18 V +.1 g 2576 850 M +-12 14 V +.1 g 2564 864 M +-5 6 V +.1 g 2559 870 M +-17 20 V +.1 g 2542 890 M +-5 7 V +.1 g 2537 897 M +-11 13 V +.1 g 2526 910 M +-16 21 V +.1 g .1 g 2510 931 M +-16 20 V +.1 g 2494 951 M +-12 15 V +.1 g 2482 966 M +-3 5 V +.1 g 2479 971 M +-15 20 V +.1 g 2464 991 M +-9 12 V +.1 g 2455 1003 M +-6 8 V +.1 g 2449 1011 M +-15 20 V +.1 g 2434 1031 M +-6 10 V +.1 g 2428 1041 M +-8 11 V +.1 g 2420 1052 M +-14 20 V +.1 g 2406 1072 M +-5 7 V +.1 g 2401 1079 M +-9 13 V +.1 g 2392 1092 M +-14 20 V +.1 g 2378 1112 M +-5 7 V +.1 g 2373 1119 M +-9 13 V +.1 g 2364 1132 M +-14 20 V +stroke 2350 1152 M +.1 g 2350 1152 M +-4 7 V +.1 g 2346 1159 M +-9 13 V +.1 g 2337 1172 M +-14 21 V +.1 g 2323 1193 M +-4 6 V +.1 g 2319 1199 M +-10 14 V +.1 g 2309 1213 M +-13 20 V +.1 g 2296 1233 M +-4 7 V +.1 g 2292 1240 M +-10 13 V +.1 g 2282 1253 M +-13 20 V +.1 g 2269 1273 M +-5 7 V +.1 g 2264 1280 M +-8 13 V +.1 g 2256 1293 M +-14 21 V +.1 g 2242 1314 M +-5 7 V +.1 g 2237 1321 M +-8 13 V +.1 g 2229 1334 M +-14 20 V +.1 g 2215 1354 M +-5 8 V +.1 g 2210 1362 M +-9 12 V +.1 g 2201 1374 M +-13 20 V +.1 g 2188 1394 M +-5 8 V +.1 g 2183 1402 M +-9 12 V +.1 g 2174 1414 M +-14 21 V +.1 g 2160 1435 M +-5 7 V +.1 g 2155 1442 M +-9 13 V +.1 g 2146 1455 M +-14 20 V +.1 g 2132 1475 M +-4 6 V +.1 g 2128 1481 M +-10 14 V +.1 g 2118 1495 M +-15 20 V +.1 g 2103 1515 M +-2 4 V +.1 g 2101 1519 M +-12 16 V +.1 g 2089 1535 M +-15 20 V +.1 g 2074 1555 M +0 1 V +.1 g 2074 1556 M +-15 20 V +.1 g 2059 1576 M +-13 16 V +.1 g 2046 1592 M +-3 4 V +.1 g 2043 1596 M +-15 20 V +.1 g 2028 1616 M +-9 11 V +.1 g 2019 1627 M +-7 9 V +.1 g 2012 1636 M +-16 20 V +.1 g 1996 1656 M +-4 5 V +.1 g 1992 1661 M +-13 15 V +.1 g 1979 1676 M +-14 18 V +.1 g 1965 1694 M +-3 3 V +.1 g 1962 1697 M +-17 20 V +.1 g 1945 1717 M +-8 8 V +.1 g 1937 1725 M +-10 12 V +.1 g 1927 1737 M +-17 19 V +.1 g 1910 1756 M +-1 1 V +.1 g 1909 1757 M +-19 20 V +.1 g 1890 1777 M +-7 8 V +0 g .1 g 1761 4216 M +.1 g 1761 4216 M +-11 20 V +.1 g 1750 4236 M +-3 6 V +.1 g 1747 4242 M +-9 14 V +stroke 1738 4256 M +.1 g 1738 4256 M +-11 20 V +.1 g 1727 4276 M +-8 15 V +.1 g 1719 4291 M +-3 6 V +.1 g 1716 4297 M +-11 20 V +.1 g 1705 4317 M +-11 20 V +.1 g 1694 4337 M +-2 4 V +.1 g 1692 4341 M +-8 16 V +.1 g 1684 4357 M +-11 20 V +.1 g 1673 4377 M +-8 16 V +.1 g 1665 4393 M +-3 4 V +.1 g 1662 4397 M +-10 20 V +.1 g 1652 4417 M +-10 21 V +.1 g 1642 4438 M +-4 7 V +.1 g 1638 4445 M +-7 13 V +.1 g 1631 4458 M +-10 20 V +.1 g 1621 4478 M +-10 20 V +.1 g 1611 4498 M +-1 1 V +.1 g 1610 4499 M +-9 19 V +.1 g 1601 4518 M +-10 20 V +.1 g 1591 4538 M +-8 16 V +.1 g 1583 4554 M +-2 5 V +.1 g 1581 4559 M +-10 20 V +.1 g 1571 4579 M +-10 20 V +.1 g 1561 4599 M +-5 10 V +.1 g 1556 4609 M +-5 10 V +0 g .1 g 3128 3248 M +.1 g 3128 3248 M +-19 17 V +.1 g 3109 3265 M +-5 4 V +.1 g 3104 3269 M +-22 18 V +.1 g 3082 3287 M +-2 2 V +.1 g 3080 3289 M +-25 20 V +.1 g 3055 3309 M +0 1 V +.1 g 3055 3310 M +-25 19 V +.1 g 3030 3329 M +-3 2 V +.1 g 3027 3331 M +-23 18 V +.1 g 3004 3349 M +-4 4 V +.1 g 3000 3353 M +-22 16 V +.1 g 2978 3369 M +-5 4 V +.1 g 2973 3373 M +-23 17 V +.1 g 2950 3390 M +-4 3 V +.1 g 2946 3393 M +-24 17 V +.1 g 2922 3410 M +-4 2 V +.1 g 2918 3412 M +-26 18 V +.1 g 2892 3430 M +-1 0 V +.1 g 2891 3430 M +-27 18 V +.1 g 2864 3448 M +-4 2 V +.1 g 2860 3450 M +-23 14 V +.1 g 2837 3464 M +-10 6 V +.1 g 2827 3470 M +-18 10 V +.1 g 2809 3480 M +-18 10 V +.1 g 2791 3490 M +-9 5 V +.1 g 2782 3495 M +-27 14 V +.1 g 2755 3509 M +-3 1 V +stroke 2752 3510 M +.1 g 2752 3510 M +-24 13 V +.1 g 2728 3523 M +-18 8 V +.1 g 2710 3531 M +-10 4 V +.1 g 2700 3535 M +-27 12 V +.1 g 2673 3547 M +-10 4 V +.1 g 2663 3551 M +-17 7 V +.1 g 2646 3558 M +-27 10 V +.1 g 2619 3568 M +-8 3 V +.1 g 2611 3571 M +-20 7 V +.1 g 2591 3578 M +-27 9 V +.1 g 2564 3587 M +-12 4 V +.1 g 2552 3591 M +-15 5 V +.1 g 2537 3596 M +-27 8 V +.1 g 2510 3604 M +-23 7 V +.1 g 2487 3611 M +-5 2 V +.1 g 2482 3613 M +-27 8 V +.1 g 2455 3621 M +-27 8 V +.1 g 2428 3629 M +-7 2 V +.1 g 2421 3631 M +-20 7 V +.1 g 2401 3638 M +-28 8 V +.1 g 2373 3646 M +-16 6 V +.1 g 2357 3652 M +-11 3 V +.1 g 2346 3655 M +-27 10 V +.1 g 2319 3665 M +-17 7 V +.1 g 2302 3672 M +-10 4 V +.1 g 2292 3676 M +-28 11 V +.1 g 2264 3687 M +-10 5 V +.1 g 2254 3692 M +-17 7 V +.1 g 2237 3699 M +-25 13 V +.1 g 2212 3712 M +-2 1 V +.1 g 2210 3713 M +-27 15 V +.1 g 2183 3728 M +-7 4 V +.1 g 2176 3732 M +-21 13 V +.1 g 2155 3745 M +-11 7 V +.1 g 2144 3752 M +-16 11 V +.1 g 2128 3763 M +-12 9 V +.1 g 2116 3772 M +-15 12 V +.1 g 2101 3784 M +-11 9 V +.1 g 2090 3793 M +-16 13 V +.1 g 2074 3806 M +-8 7 V +.1 g 2066 3813 M +-20 17 V +.1 g 2046 3830 M +-3 3 V +.1 g 2043 3833 M +-20 20 V +.1 g 2023 3853 M +-4 4 V +.1 g 2019 3857 M +-16 16 V +.1 g 2003 3873 M +-11 12 V +.1 g 1992 3885 M +-7 8 V +.1 g 1985 3893 M +-18 21 V +.1 g 1967 3914 M +-2 2 V +.1 g 1965 3916 M +-15 18 V +.1 g 1950 3934 M +-13 15 V +.1 g 1937 3949 M +-3 5 V +stroke 1934 3954 M +.1 g 1934 3954 M +-16 20 V +.1 g 1918 3974 M +-8 11 V +.1 g 1910 3985 M +-7 9 V +.1 g 1903 3994 M +-14 20 V +.1 g 1889 4014 M +-6 9 V +.1 g 1883 4023 M +-8 12 V +.1 g 1875 4035 M +-14 20 V +.1 g 1861 4055 M +-5 7 V +.1 g 1856 4062 M +-9 13 V +.1 g 1847 4075 M +-13 20 V +.1 g 1834 4095 M +-6 9 V +.1 g 1828 4104 M +-6 11 V +.1 g 1822 4115 M +-13 20 V +.1 g 1809 4135 M +-8 13 V +.1 g 1801 4148 M +-4 7 V +.1 g 1797 4155 M +-12 21 V +.1 g 1785 4176 M +-11 18 V +.1 g 1774 4194 M +-1 2 V +.1 g 1773 4196 M +-12 20 V +0 g .1 g 4560 3531 M +.1 g 4560 3531 M +-7 -4 V +.1 g 4553 3527 M +-26 -17 V +.1 g 4527 3510 M +-1 0 V +.1 g 4526 3510 M +-27 -18 V +.1 g 4499 3492 M +-3 -2 V +.1 g 4496 3490 M +-24 -16 V +.1 g 4472 3474 M +-5 -4 V +.1 g 4467 3470 M +-23 -16 V +.1 g 4444 3454 M +-6 -4 V +.1 g 4438 3450 M +-21 -16 V +.1 g 4417 3434 M +-6 -4 V +.1 g 4411 3430 M +-21 -17 V +.1 g 4390 3413 M +-5 -3 V +.1 g 4385 3410 M +-22 -18 V +.1 g 4363 3392 M +-3 -2 V +.1 g 4360 3390 M +-25 -20 V +.1 g 4335 3370 M +0 -1 V +.1 g 4335 3369 M +-24 -20 V +.1 g 4311 3349 M +-3 -2 V +.1 g 4308 3347 M +-21 -18 V +.1 g 4287 3329 M +-6 -6 V +.1 g 4281 3323 M +-17 -14 V +.1 g 4264 3309 M +-10 -9 V +.1 g 4254 3300 M +-13 -11 V +.1 g 4241 3289 M +-15 -14 V +.1 g 4226 3275 M +-7 -6 V +.1 g 4219 3269 M +-20 -18 V +.1 g 4199 3251 M +-3 -3 V +.1 g 4196 3248 M +-22 -20 V +.1 g 4174 3228 M +-2 -2 V +.1 g 4172 3226 M +-21 -18 V +.1 g 4151 3208 M +-6 -6 V +.1 g 4145 3202 M +-16 -14 V +stroke 4129 3188 M +.1 g 4129 3188 M +-12 -10 V +.1 g 4117 3178 M +-11 -10 V +.1 g 4106 3168 M +-16 -15 V +.1 g 4090 3153 M +-7 -5 V +.1 g 4083 3148 M +-20 -18 V +.1 g 4063 3130 M +-3 -2 V +.1 g 4060 3128 M +-24 -21 V +.1 g .1 g 4036 3107 M +-24 -20 V +.1 g 4012 3087 M +-4 -3 V +.1 g 4008 3084 M +-22 -17 V +.1 g 3986 3067 M +-5 -4 V +.1 g 3981 3063 M +-21 -16 V +.1 g 3960 3047 M +-6 -5 V +.1 g 3954 3042 M +-22 -15 V +.1 g 3932 3027 M +-5 -4 V +.1 g 3927 3023 M +-26 -16 V +.1 g 3901 3007 M +-2 -2 V +.1 g 3899 3005 M +-27 -16 V +.1 g 3872 2989 M +-5 -3 V +.1 g 3867 2986 M +-22 -12 V +.1 g 3845 2974 M +-18 -8 V +.1 g 3827 2966 M +-9 -4 V +.1 g 3818 2962 M +-28 -11 V +.1 g 3790 2951 M +-14 -5 V +.1 g 3776 2946 M +-13 -4 V +.1 g 3763 2942 M +-27 -7 V +.1 g 3736 2935 M +-27 -4 V +.1 g 3709 2931 M +-28 -2 V +.1 g 3681 2929 M +-27 0 V +.1 g 3654 2929 M +-27 2 V +.1 g 3627 2931 M +-27 5 V +.1 g 3600 2936 M +-28 7 V +.1 g 3572 2943 M +-10 3 V +.1 g 3562 2946 M +-17 6 V +.1 g 3545 2952 M +-27 10 V +.1 g 3518 2962 M +-8 4 V +.1 g 3510 2966 M +-19 9 V +.1 g 3491 2975 M +-22 11 V +.1 g 3469 2986 M +-6 4 V +.1 g 3463 2990 M +-27 16 V +.1 g 3436 3006 M +-1 1 V +.1 g 3435 3007 M +-26 16 V +.1 g 3409 3023 M +-5 4 V +.1 g 3404 3027 M +-22 15 V +.1 g 3382 3042 M +-7 5 V +.1 g 3375 3047 M +-21 15 V +.1 g 3354 3062 M +-7 5 V +.1 g 3347 3067 M +-20 16 V +.1 g 3327 3083 M +-6 4 V +.1 g 3321 3087 M +-21 17 V +.1 g 3300 3104 M +-4 3 V +.1 g 3296 3107 M +-23 19 V +stroke 3273 3126 M +.1 g 3273 3126 M +-2 2 V +.1 g 3271 3128 M +-24 20 V +.1 g 3247 3148 M +-2 1 V +.1 g 3245 3149 M +-22 19 V +.1 g 3223 3168 M +-5 4 V +.1 g 3218 3172 M +-19 16 V +.1 g 3199 3188 M +-8 7 V +.1 g 3191 3195 M +-15 13 V +.1 g 3176 3208 M +-12 11 V +.1 g 3164 3219 M +-12 9 V +.1 g 3152 3228 M +-16 14 V +.1 g 3136 3242 M +-8 6 V +0 g .1 g 5754 4619 M +.1 g 5754 4619 M +-2 -4 V +.1 g 5752 4615 M +-8 -16 V +.1 g 5744 4599 M +-10 -20 V +.1 g 5734 4579 M +-9 -19 V +.1 g 5725 4560 M +-1 -1 V +.1 g 5724 4559 M +-10 -21 V +.1 g 5714 4538 M +-10 -20 V +.1 g 5704 4518 M +-6 -13 V +.1 g 5698 4505 M +-4 -7 V +.1 g 5694 4498 M +-10 -20 V +.1 g 5684 4478 M +-11 -20 V +.1 g 5673 4458 M +-2 -6 V +.1 g 5671 4452 M +-8 -14 V +.1 g 5663 4438 M +-11 -21 V +.1 g 5652 4417 M +-9 -17 V +.1 g 5643 4400 M +-1 -3 V +.1 g 5642 4397 M +-11 -20 V +.1 g 5631 4377 M +-11 -20 V +.1 g 5620 4357 M +-4 -8 V +.1 g 5616 4349 M +-7 -12 V +.1 g 5609 4337 M +-11 -20 V +.1 g 5598 4317 M +-9 -17 V +.1 g 5589 4300 M +-2 -3 V +.1 g 5587 4297 M +-12 -21 V +.1 g 5575 4276 M +-11 -20 V +.1 g 5564 4256 M +-2 -4 V +.1 g 5562 4252 M +-10 -16 V +.1 g 5552 4236 M +-12 -20 V +.1 g 5540 4216 M +-6 -10 V +.1 g 5534 4206 M +-6 -10 V +.1 g 5528 4196 M +-13 -20 V +.1 g 5515 4176 M +-8 -13 V +.1 g 5507 4163 M +-5 -8 V +.1 g 5502 4155 M +-13 -20 V +.1 g 5489 4135 M +-9 -14 V +.1 g 5480 4121 M +-4 -6 V +.1 g 5476 4115 M +-14 -20 V +.1 g 5462 4095 M +-9 -14 V +.1 g 5453 4081 M +-5 -6 V +.1 g 5448 4075 M +-15 -20 V +stroke 5433 4055 M +.1 g 5433 4055 M +-8 -12 V +.1 g 5425 4043 M +-7 -8 V +.1 g 5418 4035 M +-15 -21 V +.1 g 5403 4014 M +-5 -6 V +.1 g 5398 4008 M +-11 -14 V +.1 g 5387 3994 M +-16 -19 V +.1 g 5371 3975 M +-1 -1 V +.1 g 5370 3974 M +-18 -20 V +.1 g 5352 3954 M +-8 -10 V +.1 g 5344 3944 M +-11 -10 V +.1 g 5333 3934 M +-17 -18 V +.1 g 5316 3916 M +-2 -2 V +.1 g 5314 3914 M +-21 -21 V +.1 g 5293 3893 M +-4 -3 V +.1 g 5289 3890 M +-18 -17 V +.1 g 5271 3873 M +-9 -7 V +.1 g 5262 3866 M +-15 -13 V +.1 g 5247 3853 M +-12 -10 V +.1 g 5235 3843 M +-14 -10 V +.1 g 5221 3833 M +-14 -10 V +.1 g 5207 3823 M +-15 -10 V +.1 g 5192 3813 M +-12 -8 V +.1 g 5180 3805 M +-19 -12 V +.1 g 5161 3793 M +-8 -5 V +.1 g 5153 3788 M +-27 -16 V +.1 g .1 g 5126 3772 M +-28 -14 V +.1 g 5098 3758 M +-12 -6 V +.1 g 5086 3752 M +-15 -7 V +.1 g 5071 3745 M +-27 -12 V +.1 g 5044 3733 M +-2 -1 V +.1 g 5042 3732 M +-25 -10 V +.1 g 5017 3722 M +-25 -10 V +.1 g 4992 3712 M +-3 -1 V +.1 g 4989 3711 M +-27 -10 V +.1 g 4962 3701 M +-26 -9 V +.1 g 4936 3692 M +-1 -1 V +.1 g 4935 3691 M +-27 -9 V +.1 g 4908 3682 M +-28 -10 V +.1 g 4880 3672 M +-1 0 V +.1 g 4879 3672 M +-26 -9 V +.1 g 4853 3663 M +-27 -10 V +.1 g 4826 3653 M +-4 -1 V +.1 g 4822 3652 M +-23 -9 V +.1 g 4799 3643 M +-28 -10 V +.1 g 4771 3633 M +-3 -2 V +.1 g 4768 3631 M +-24 -9 V +.1 g 4744 3622 M +-25 -11 V +.1 g 4719 3611 M +-2 -1 V +.1 g 4717 3610 M +-27 -12 V +.1 g 4690 3598 M +-16 -7 V +.1 g 4674 3591 M +-12 -6 V +.1 g 4662 3585 M +-27 -13 V +stroke 4635 3572 M +.1 g 4635 3572 M +-2 -1 V +.1 g 4633 3571 M +-25 -13 V +.1 g 4608 3558 M +-13 -7 V +.1 g 4595 3551 M +-14 -8 V +.1 g 4581 3543 M +-21 -12 V +0 g .1 g 3436 659 M +.1 g 3436 659 M +-27 -10 V +.1 g 3409 649 M +-3 -1 V +.1 g 3406 648 M +-24 -8 V +.1 g 3382 640 M +-28 -9 V +.1 g 3354 631 M +-7 -3 V +.1 g 3347 628 M +-20 -6 V +.1 g 3327 622 M +-27 -9 V +.1 g 3300 613 M +-14 -5 V +.1 g 3286 608 M +-13 -4 V +.1 g 3273 604 M +-28 -8 V +.1 g 3245 596 M +-27 -7 V +.1 g 3218 589 M +-3 -1 V +0 g .1 g 5028 1253 M +.1 g 5028 1253 M +-11 -18 V +.1 g 5017 1235 M +-2 -2 V +.1 g 5015 1233 M +-13 -20 V +.1 g 5002 1213 M +-13 -19 V +.1 g 4989 1194 M +-1 -1 V +.1 g 4988 1193 M +-13 -21 V +.1 g 4975 1172 M +-13 -19 V +.1 g 4962 1153 M +0 -1 V +.1 g 4962 1152 M +-14 -20 V +.1 g 4948 1132 M +-13 -19 V +.1 g 4935 1113 M +-1 -1 V +.1 g 4934 1112 M +-14 -20 V +.1 g 4920 1092 M +-12 -18 V +.1 g 4908 1074 M +-2 -2 V +.1 g 4906 1072 M +-14 -20 V +.1 g 4892 1052 M +-12 -17 V +.1 g 4880 1035 M +-3 -4 V +.1 g 4877 1031 M +-14 -20 V +.1 g 4863 1011 M +-10 -13 V +.1 g 4853 998 M +-5 -7 V +.1 g 4848 991 M +-15 -20 V +.1 g 4833 971 M +-7 -9 V +.1 g 4826 962 M +-9 -11 V +.1 g 4817 951 M +-16 -20 V +.1 g 4801 931 M +-2 -4 V +.1 g 4799 927 M +-14 -17 V +.1 g 4785 910 M +-14 -16 V +.1 g 4771 894 M +-3 -4 V +.1 g 4768 890 M +-17 -20 V +.1 g 4751 870 M +-7 -8 V +.1 g 4744 862 M +-11 -12 V +.1 g 4733 850 M +-16 -18 V +.1 g 4717 832 M +-3 -2 V +.1 g 4714 830 M +-19 -20 V +stroke 4695 810 M +.1 g 4695 810 M +-5 -6 V +.1 g 4690 804 M +-15 -14 V +.1 g 4675 790 M +-13 -13 V +.1 g 4662 777 M +-8 -8 V +.1 g 4654 769 M +-19 -17 V +.1 g 4635 752 M +-3 -3 V +.1 g 4632 749 M +-24 -20 V +.1 g .1 g 4608 729 M +-26 -20 V +.1 g 4582 709 M +-1 -1 V +.1 g 4581 708 M +-27 -19 V +.1 g 4554 689 M +-1 -1 V +.1 g 4553 688 M +-27 -17 V +.1 g 4526 671 M +-4 -2 V +.1 g 4522 669 M +-23 -14 V +.1 g 4499 655 M +-14 -7 V +.1 g 4485 648 M +-13 -6 V +.1 g 4472 642 M +-28 -12 V +.1 g 4444 630 M +-4 -2 V +.1 g 4440 628 M +-23 -8 V +.1 g 4417 620 M +-27 -8 V +.1 g 4390 612 M +-15 -4 V +.1 g 4375 608 M +-12 -3 V +.1 g 4363 605 M +-28 -4 V +.1 g 4335 601 M +-27 -4 V +.1 g 4308 597 M +-27 -1 V +.1 g 4281 596 M +-27 0 V +.1 g 4254 596 M +-28 1 V +.1 g 4226 597 M +-27 3 V +.1 g 4199 600 M +-27 4 V +.1 g 4172 604 M +-26 4 V +.1 g 4146 608 M +-1 0 V +.1 g 4145 608 M +-28 6 V +.1 g 4117 614 M +-27 7 V +.1 g 4090 621 M +-27 7 V +.1 g 4063 628 M +-2 0 V +.1 g 4061 628 M +-25 7 V +.1 g 4036 635 M +-28 8 V +.1 g 4008 643 M +-17 5 V +.1 g 3991 648 M +-10 3 V +.1 g 3981 651 M +-27 8 V +.1 g 3954 659 M +-27 8 V +.1 g 3927 667 M +-5 2 V +.1 g 3922 669 M +-23 6 V +.1 g 3899 675 M +-27 7 V +.1 g 3872 682 M +-27 6 V +.1 g 3845 688 M +-3 1 V +.1 g 3842 689 M +-24 5 V +.1 g 3818 694 M +-28 5 V +.1 g 3790 699 M +-27 3 V +.1 g 3763 702 M +-27 3 V +.1 g 3736 705 M +-27 1 V +.1 g 3709 706 M +-28 0 V +stroke 3681 706 M +.1 g 3681 706 M +-27 -1 V +.1 g 3654 705 M +-27 -2 V +.1 g 3627 703 M +-27 -3 V +.1 g 3600 700 M +-28 -5 V +.1 g 3572 695 M +-27 -6 V +.1 g 3545 689 M +-2 0 V +.1 g 3543 689 M +-25 -6 V +.1 g 3518 683 M +-27 -8 V +.1 g 3491 675 M +-23 -6 V +.1 g 3468 669 M +-5 -2 V +.1 g 3463 667 M +-27 -8 V +0 g .1 g 6052 2466 M +.1 g 6052 2466 M +-3 -4 V +.1 g 6049 2462 M +-15 -20 V +.1 g 6034 2442 M +-9 -12 V +.1 g 6025 2430 M +-6 -8 V +.1 g 6019 2422 M +-16 -20 V +.1 g 6003 2402 M +-5 -7 V +.1 g 5998 2395 M +-12 -13 V +.1 g 5986 2382 M +-16 -20 V +.1 g .1 g 5970 2362 M +-18 -21 V +.1 g 5952 2341 M +-9 -10 V +.1 g 5943 2331 M +-8 -10 V +.1 g 5935 2321 M +-18 -20 V +.1 g 5917 2301 M +-1 -1 V +.1 g 5916 2300 M +-18 -19 V +.1 g 5898 2281 M +-9 -10 V +.1 g 5889 2271 M +-11 -10 V +.1 g 5878 2261 M +-17 -18 V +.1 g 5861 2243 M +-2 -2 V +.1 g 5859 2241 M +-20 -20 V +.1 g 5839 2221 M +-5 -5 V +.1 g 5834 2216 M +-16 -16 V +.1 g 5818 2200 M +-11 -10 V +.1 g 5807 2190 M +-10 -10 V +.1 g 5797 2180 M +-17 -16 V +.1 g 5780 2164 M +-5 -4 V +.1 g 5775 2160 M +-21 -20 V +.1 g 5754 2140 M +-2 -1 V +.1 g 5752 2139 M +-21 -19 V +.1 g 5731 2120 M +-6 -6 V +.1 g 5725 2114 M +-16 -14 V +.1 g 5709 2100 M +-11 -11 V +.1 g 5698 2089 M +-11 -10 V +.1 g 5687 2079 M +-16 -15 V +.1 g 5671 2064 M +-6 -5 V +.1 g 5665 2059 M +-22 -19 V +.1 g 5643 2040 M +0 -1 V +.1 g 5643 2039 M +-22 -20 V +.1 g 5621 2019 M +-5 -4 V +.1 g 5616 2015 M +-17 -16 V +.1 g 5599 1999 M +-10 -10 V +.1 g 5589 1989 M +-11 -10 V +stroke 5578 1979 M +.1 g 5578 1979 M +-16 -16 V +.1 g 5562 1963 M +-5 -4 V +.1 g 5557 1959 M +-20 -21 V +.1 g 5537 1938 M +-3 -2 V +.1 g 5534 1936 M +-17 -18 V +.1 g 5517 1918 M +-10 -10 V +.1 g 5507 1908 M +-9 -10 V +.1 g 5498 1898 M +-18 -19 V +.1 g 5480 1879 M +-1 -1 V +.1 g 5479 1878 M +-19 -20 V +.1 g 5460 1858 M +-7 -9 V +.1 g 5453 1849 M +-11 -11 V +.1 g 5442 1838 M +-17 -20 V +.1 g 5425 1818 M +0 -1 V +.1 g 5425 1817 M +-17 -20 V +.1 g 5408 1797 M +-10 -11 V +.1 g 5398 1786 M +-7 -9 V +.1 g 5391 1777 M +-16 -20 V +.1 g 5375 1757 M +-4 -5 V +.1 g 5371 1752 M +-12 -15 V +.1 g 5359 1737 M +-15 -20 V +.1 g 5344 1717 M +-1 0 V +.1 g 5343 1717 M +-15 -20 V +.1 g 5328 1697 M +-12 -16 V +.1 g 5316 1681 M +-3 -5 V +.1 g 5313 1676 M +-15 -20 V +.1 g 5298 1656 M +-9 -12 V +.1 g 5289 1644 M +-6 -8 V +.1 g 5283 1636 M +-14 -20 V +.1 g 5269 1616 M +-7 -10 V +.1 g 5262 1606 M +-7 -10 V +.1 g 5255 1596 M +-14 -20 V +.1 g 5241 1576 M +-6 -9 V +.1 g 5235 1567 M +-8 -12 V +.1 g 5227 1555 M +-14 -20 V +.1 g 5213 1535 M +-6 -8 V +.1 g 5207 1527 M +-8 -12 V +.1 g 5199 1515 M +-13 -20 V +.1 g 5186 1495 M +-6 -9 V +.1 g 5180 1486 M +-7 -11 V +.1 g 5173 1475 M +-14 -20 V +.1 g 5159 1455 M +-6 -10 V +.1 g 5153 1445 M +-7 -10 V +.1 g 5146 1435 M +-13 -21 V +.1 g 5133 1414 M +-7 -11 V +.1 g 5126 1403 M +-6 -9 V +.1 g 5120 1394 M +-13 -20 V +.1 g 5107 1374 M +-9 -13 V +.1 g 5098 1361 M +-4 -7 V +.1 g 5094 1354 M +-13 -20 V +.1 g 5081 1334 M +-10 -15 V +.1 g 5071 1319 M +-4 -5 V +stroke 5067 1314 M +.1 g 5067 1314 M +-13 -21 V +.1 g 5054 1293 M +-10 -16 V +.1 g 5044 1277 M +-3 -4 V +.1 g 5041 1273 M +-13 -20 V +0 g .08 g 1863 3853 M +.08 g 1863 3853 M +-7 12 V +.08 g 1856 3865 M +-6 8 V +.08 g 1850 3873 M +-13 20 V +.08 g 1837 3893 M +-9 15 V +.08 g 1828 3908 M +-3 6 V +.08 g 1825 3914 M +-12 20 V +.08 g 1813 3934 M +-12 20 V +.08 g 1801 3954 M +-12 20 V +.08 g 1789 3974 M +-11 20 V +.08 g 1778 3994 M +-4 8 V +.08 g 1774 4002 M +-7 12 V +.08 g 1767 4014 M +-11 21 V +.08 g 1756 4035 M +-9 16 V +.08 g 1747 4051 M +-2 4 V +.08 g 1745 4055 M +-11 20 V +.08 g 1734 4075 M +-11 20 V +.08 g 1723 4095 M +-4 8 V +.08 g 1719 4103 M +-6 12 V +.08 g 1713 4115 M +-10 20 V +.08 g 1703 4135 M +-11 20 V +.08 g 1692 4155 M +0 1 V +.08 g 1692 4156 M +-10 20 V +.08 g 1682 4176 M +-10 20 V +.08 g 1672 4196 M +-7 14 V +.08 g 1665 4210 M +-3 6 V +.08 g 1662 4216 M +-10 20 V +.08 g 1652 4236 M +-10 20 V +.08 g 1642 4256 M +-4 9 V +.08 g 1638 4265 M +-6 11 V +.08 g 1632 4276 M +-10 21 V +.08 g 1622 4297 M +-9 20 V +.08 g 1613 4317 M +-3 5 V +.08 g 1610 4322 M +-7 15 V +.08 g 1603 4337 M +-10 20 V +.08 g 1593 4357 M +-9 20 V +.08 g 1584 4377 M +-1 2 V +.08 g 1583 4379 M +-9 18 V +.08 g 1574 4397 M +-9 20 V +.08 g 1565 4417 M +-9 19 V +.08 g 1556 4436 M +-1 2 V +.08 g 1555 4438 M +-9 20 V +.08 g 1546 4458 M +-10 20 V +.08 g 1536 4478 M +-7 16 V +.08 g 1529 4494 M +-2 4 V +.08 g 1527 4498 M +-10 20 V +.08 g 1517 4518 M +-9 20 V +.08 g 1508 4538 M +-7 14 V +.08 g 1501 4552 M +-3 7 V +stroke 1498 4559 M +.08 g 1498 4559 M +-9 20 V +.08 g 1489 4579 M +-10 20 V +.08 g 1479 4599 M +-5 11 V +.08 g 1474 4610 M +-4 9 V +0 g .08 g 3303 2926 M +.08 g 3303 2926 M +-3 3 V +.08 g 3300 2929 M +-19 17 V +.08 g 3281 2946 M +-8 8 V +.08 g 3273 2954 M +-14 12 V +.08 g 3259 2966 M +-14 13 V +.08 g 3245 2979 M +-8 7 V +.08 g 3237 2986 M +-19 18 V +.08 g 3218 3004 M +-3 3 V +.08 g 3215 3007 M +-21 20 V +.08 g 3194 3027 M +-3 2 V +.08 g 3191 3029 M +-19 18 V +.08 g 3172 3047 M +-8 8 V +.08 g 3164 3055 M +-14 12 V +.08 g 3150 3067 M +-14 13 V +.08 g 3136 3080 M +-8 7 V +.08 g 3128 3087 M +-19 17 V +.08 g 3109 3104 M +-3 3 V +.08 g 3106 3107 M +-23 21 V +.08 g 3083 3128 M +-1 1 V +.08 g 3082 3129 M +-22 19 V +.08 g 3060 3148 M +-5 4 V +.08 g 3055 3152 M +-19 16 V +.08 g 3036 3168 M +-9 7 V +.08 g 3027 3175 M +-15 13 V +.08 g 3012 3188 M +-12 10 V +.08 g 3000 3198 M +-13 10 V +.08 g 2987 3208 M +-14 11 V +.08 g 2973 3219 M +-12 9 V +.08 g 2961 3228 M +-15 12 V +.08 g 2946 3240 M +-12 8 V +.08 g 2934 3248 M +-16 12 V +.08 g 2918 3260 M +-12 9 V +.08 g 2906 3269 M +-15 10 V +.08 g 2891 3279 M +-16 10 V +.08 g 2875 3289 M +-11 7 V +.08 g 2864 3296 M +-20 13 V +.08 g 2844 3309 M +-7 4 V +.08 g 2837 3313 M +-28 16 V +.08 g 2809 3329 M +-27 15 V +.08 g 2782 3344 M +-11 5 V +.08 g 2771 3349 M +-16 9 V +.08 g 2755 3358 M +-25 11 V +.08 g 2730 3369 M +-2 1 V +.08 g 2728 3370 M +-28 12 V +.08 g 2700 3382 M +-18 8 V +.08 g 2682 3390 M +-9 3 V +.08 g 2673 3393 M +-27 10 V +.08 g 2646 3403 M +-19 7 V +stroke 2627 3410 M +.08 g 2627 3410 M +-8 2 V +.08 g 2619 3412 M +-28 9 V +.08 g 2591 3421 M +-27 8 V +.08 g 2564 3429 M +-4 1 V +.08 g 2560 3430 M +-23 6 V +.08 g 2537 3436 M +-27 7 V +.08 g 2510 3443 M +-28 6 V +.08 g 2482 3449 M +-3 1 V +.08 g 2479 3450 M +-24 5 V +.08 g 2455 3455 M +-27 6 V +.08 g 2428 3461 M +-27 7 V +.08 g 2401 3468 M +-12 2 V +.08 g 2389 3470 M +-16 4 V +.08 g 2373 3474 M +-27 6 V +.08 g 2346 3480 M +-27 8 V +.08 g 2319 3488 M +-10 2 V +.08 g 2309 3490 M +-17 6 V +.08 g 2292 3496 M +-28 8 V +.08 g 2264 3504 M +-17 6 V +.08 g 2247 3510 M +-10 4 V +.08 g 2237 3514 M +-27 11 V +.08 g 2210 3525 M +-11 6 V +.08 g 2199 3531 M +-16 7 V +.08 g 2183 3538 M +-24 13 V +.08 g 2159 3551 M +-4 2 V +.08 g 2155 3553 M +-27 16 V +.08 g 2128 3569 M +-3 2 V +.08 g 2125 3571 M +-24 16 V +.08 g 2101 3587 M +-5 4 V +.08 g 2096 3591 M +-22 17 V +.08 g 2074 3608 M +-4 3 V +.08 g 2070 3611 M +-24 20 V +.08 g .08 g 2046 3631 M +-22 21 V +.08 g 2024 3652 M +-5 4 V +.08 g 2019 3656 M +-15 16 V +.08 g 2004 3672 M +-12 13 V +.08 g 1992 3685 M +-7 7 V +.08 g 1985 3692 M +-18 20 V +.08 g 1967 3712 M +-2 3 V +.08 g 1965 3715 M +-14 17 V +.08 g 1951 3732 M +-14 17 V +.08 g 1937 3749 M +-3 3 V +.08 g 1934 3752 M +-15 20 V +.08 g 1919 3772 M +-9 13 V +.08 g 1910 3785 M +-6 8 V +.08 g 1904 3793 M +-14 20 V +.08 g 1890 3813 M +-7 10 V +.08 g 1883 3823 M +-7 10 V +.08 g 1876 3833 M +-13 20 V +0 g .08 g 4744 3466 M +.08 g 4744 3466 M +-27 -11 V +.08 g 4717 3455 M +-13 -5 V +.08 g 4704 3450 M +-14 -6 V +stroke 4690 3444 M +.08 g 4690 3444 M +-28 -12 V +.08 g 4662 3432 M +-5 -2 V +.08 g 4657 3430 M +-22 -10 V +.08 g 4635 3420 M +-20 -10 V +.08 g 4615 3410 M +-7 -4 V +.08 g 4608 3406 M +-27 -15 V +.08 g 4581 3391 M +-3 -1 V +.08 g 4578 3390 M +-25 -15 V +.08 g 4553 3375 M +-10 -6 V +.08 g 4543 3369 M +-17 -10 V +.08 g 4526 3359 M +-14 -10 V +.08 g 4512 3349 M +-13 -8 V +.08 g 4499 3341 M +-17 -12 V +.08 g 4482 3329 M +-10 -7 V +.08 g 4472 3322 M +-19 -13 V +.08 g 4453 3309 M +-9 -7 V +.08 g 4444 3302 M +-18 -13 V +.08 g 4426 3289 M +-9 -7 V +.08 g 4417 3282 M +-16 -13 V +.08 g 4401 3269 M +-11 -9 V +.08 g 4390 3260 M +-14 -12 V +.08 g 4376 3248 M +-13 -11 V +.08 g 4363 3237 M +-11 -9 V +.08 g 4352 3228 M +-17 -14 V +.08 g 4335 3214 M +-7 -6 V +.08 g 4328 3208 M +-20 -18 V +.08 g 4308 3190 M +-2 -2 V +.08 g 4306 3188 M +-22 -20 V +.08 g 4284 3168 M +-3 -3 V +.08 g 4281 3165 M +-19 -17 V +.08 g 4262 3148 M +-8 -8 V +.08 g 4254 3140 M +-13 -12 V +.08 g 4241 3128 M +-15 -14 V +.08 g 4226 3114 M +-7 -7 V +.08 g 4219 3107 M +-20 -19 V +.08 g 4199 3088 M +-1 -1 V +.08 g 4198 3087 M +-20 -20 V +.08 g 4178 3067 M +-6 -6 V +.08 g 4172 3061 M +-15 -14 V +.08 g 4157 3047 M +-12 -12 V +.08 g 4145 3035 M +-9 -8 V +.08 g 4136 3027 M +-19 -19 V +.08 g 4117 3008 M +-1 -1 V +.08 g 4116 3007 M +-21 -21 V +.08 g 4095 2986 M +-5 -5 V +.08 g 4090 2981 M +-16 -15 V +.08 g 4074 2966 M +-11 -11 V +.08 g 4063 2955 M +-10 -9 V +.08 g 4053 2946 M +-17 -16 V +.08 g 4036 2930 M +-5 -4 V +.08 g 4031 2926 M +-22 -20 V +.08 g 4009 2906 M +-1 -1 V +stroke 4008 2905 M +.08 g 4008 2905 M +-21 -19 V +.08 g 3987 2886 M +-6 -5 V +.08 g 3981 2881 M +-18 -15 V +.08 g 3963 2866 M +-9 -8 V +.08 g 3954 2858 M +-16 -13 V +.08 g 3938 2845 M +-11 -9 V +.08 g 3927 2836 M +-15 -11 V +.08 g 3912 2825 M +-13 -9 V +.08 g 3899 2816 M +-15 -11 V +.08 g 3884 2805 M +-12 -8 V +.08 g 3872 2797 M +-20 -12 V +.08 g 3852 2785 M +-7 -5 V +.08 g 3845 2780 M +-27 -14 V +.08 g 3818 2766 M +-2 -1 V +.08 g 3816 2765 M +-26 -12 V +.08 g 3790 2753 M +-23 -8 V +.08 g 3767 2745 M +-4 -2 V +.08 g 3763 2743 M +-27 -8 V +.08 g 3736 2735 M +-27 -5 V +.08 g 3709 2730 M +-28 -2 V +.08 g 3681 2728 M +-27 0 V +.08 g 3654 2728 M +-27 3 V +.08 g 3627 2731 M +-27 5 V +.08 g 3600 2736 M +-28 9 V +.08 g .08 g 3572 2745 M +-27 10 V +.08 g 3545 2755 M +-21 10 V +.08 g 3524 2765 M +-6 3 V +.08 g 3518 2768 M +-27 14 V +.08 g 3491 2782 M +-5 3 V +.08 g 3486 2785 M +-23 14 V +.08 g 3463 2799 M +-9 6 V +.08 g 3454 2805 M +-18 12 V +.08 g 3436 2817 M +-10 8 V +.08 g 3426 2825 M +-17 12 V +.08 g 3409 2837 M +-10 8 V +.08 g 3399 2845 M +-17 14 V +.08 g 3382 2859 M +-9 7 V +.08 g 3373 2866 M +-19 15 V +.08 g 3354 2881 M +-5 5 V +.08 g 3349 2886 M +-22 19 V +.08 g 3327 2905 M +-1 1 V +.08 g 3326 2906 M +-23 20 V +0 g .08 g 5836 4619 M +.08 g 5836 4619 M +-2 -4 V +.08 g 5834 4615 M +-7 -16 V +.08 g 5827 4599 M +-10 -20 V +.08 g 5817 4579 M +-9 -20 V +.08 g 5808 4559 M +-1 -3 V +.08 g 5807 4556 M +-8 -18 V +.08 g 5799 4538 M +-10 -20 V +.08 g 5789 4518 M +-9 -20 V +.08 g 5780 4498 M +0 -1 V +.08 g 5780 4497 M +-9 -19 V +stroke 5771 4478 M +.08 g 5771 4478 M +-10 -20 V +.08 g 5761 4458 M +-9 -20 V +.08 g .08 g 5752 4438 M +-10 -21 V +.08 g 5742 4417 M +-9 -20 V +.08 g 5733 4397 M +-8 -16 V +.08 g 5725 4381 M +-2 -4 V +.08 g 5723 4377 M +-9 -20 V +.08 g 5714 4357 M +-10 -20 V +.08 g 5704 4337 M +-6 -13 V +.08 g 5698 4324 M +-4 -7 V +.08 g 5694 4317 M +-9 -20 V +.08 g 5685 4297 M +-10 -21 V +.08 g 5675 4276 M +-4 -8 V +.08 g 5671 4268 M +-6 -12 V +.08 g 5665 4256 M +-10 -20 V +.08 g 5655 4236 M +-10 -20 V +.08 g 5645 4216 M +-2 -3 V +.08 g 5643 4213 M +-9 -17 V +.08 g 5634 4196 M +-10 -20 V +.08 g 5624 4176 M +-8 -16 V +.08 g 5616 4160 M +-2 -5 V +.08 g 5614 4155 M +-11 -20 V +.08 g 5603 4135 M +-11 -20 V +.08 g 5592 4115 M +-3 -7 V +.08 g 5589 4108 M +-7 -13 V +.08 g 5582 4095 M +-11 -20 V +.08 g 5571 4075 M +-9 -17 V +.08 g 5562 4058 M +-3 -3 V +.08 g 5559 4055 M +-11 -20 V +.08 g 5548 4035 M +-12 -21 V +.08 g 5536 4014 M +-2 -3 V +.08 g 5534 4011 M +-10 -17 V +.08 g 5524 3994 M +-12 -20 V +.08 g 5512 3974 M +-5 -9 V +.08 g 5507 3965 M +-7 -11 V +.08 g 5500 3954 M +-13 -20 V +.08 g 5487 3934 M +-7 -12 V +.08 g 5480 3922 M +-6 -8 V +.08 g 5474 3914 M +-13 -21 V +.08 g 5461 3893 M +-8 -12 V +.08 g 5453 3881 M +-6 -8 V +.08 g 5447 3873 M +-14 -20 V +.08 g 5433 3853 M +-8 -10 V +.08 g 5425 3843 M +-7 -10 V +.08 g 5418 3833 M +-16 -20 V +.08 g 5402 3813 M +-4 -6 V +.08 g 5398 3807 M +-12 -14 V +.08 g 5386 3793 M +-15 -19 V +.08 g 5371 3774 M +-2 -2 V +.08 g 5369 3772 M +-18 -20 V +.08 g 5351 3752 M +-7 -8 V +.08 g 5344 3744 M +-12 -12 V +stroke 5332 3732 M +.08 g 5332 3732 M +-16 -16 V +.08 g 5316 3716 M +-4 -4 V +.08 g 5312 3712 M +-22 -20 V +.08 g 5290 3692 M +-1 -1 V +.08 g 5289 3691 M +-23 -19 V +.08 g 5266 3672 M +-4 -3 V +.08 g 5262 3669 M +-23 -17 V +.08 g 5239 3652 M +-4 -4 V +.08 g 5235 3648 M +-26 -17 V +.08 g 5209 3631 M +-2 -1 V +.08 g 5207 3630 M +-27 -16 V +.08 g 5180 3614 M +-4 -3 V +.08 g 5176 3611 M +-23 -12 V +.08 g 5153 3599 M +-17 -8 V +.08 g 5136 3591 M +-10 -5 V +.08 g 5126 3586 M +-28 -12 V +.08 g 5098 3574 M +-9 -3 V +.08 g 5089 3571 M +-18 -7 V +.08 g 5071 3564 M +-27 -9 V +.08 g 5044 3555 M +-12 -4 V +.08 g 5032 3551 M +-15 -5 V +.08 g 5017 3546 M +-28 -8 V +.08 g 4989 3538 M +-25 -7 V +.08 g 4964 3531 M +-2 -1 V +.08 g 4962 3530 M +-27 -7 V +.08 g 4935 3523 M +-27 -8 V +.08 g 4908 3515 M +-18 -5 V +.08 g 4890 3510 M +-10 -2 V +.08 g 4880 3508 M +-27 -8 V +.08 g 4853 3500 M +-27 -8 V +.08 g 4826 3492 M +-7 -2 V +.08 g 4819 3490 M +-20 -6 V +.08 g 4799 3484 M +-28 -9 V +.08 g 4771 3475 M +-14 -5 V +.08 g 4757 3470 M +-13 -4 V +0 g .08 g 1107 2805 M +.08 g 1107 2805 M +-12 20 V +.08 g 1095 2825 M +-2 5 V +.08 g 1093 2830 M +-9 15 V +.08 g 1084 2845 M +-10 21 V +.08 g 1074 2866 M +-9 15 V +.08 g 1065 2881 M +-2 5 V +.08 g 1063 2886 M +-11 20 V +.08 g 1052 2906 M +-10 20 V +.08 g 1042 2926 M +-4 7 V +.08 g 1038 2933 M +-6 13 V +.08 g 1032 2946 M +-10 20 V +.08 g 1022 2966 M +-10 20 V +.08 g 1012 2986 M +-1 2 V +.08 g 1011 2988 M +-9 19 V +.08 g 1002 3007 M +-10 20 V +.08 g 992 3027 M +-8 18 V +.08 g 984 3045 M +-1 2 V +stroke 983 3047 M +.08 g 983 3047 M +-10 20 V +.08 g 973 3067 M +-9 20 V +.08 g 964 3087 M +-8 17 V +.08 g 956 3104 M +-1 3 V +.08 g 955 3107 M +-9 21 V +.08 g 946 3128 M +-9 20 V +.08 g 937 3148 M +-8 16 V +.08 g 929 3164 M +-2 4 V +.08 g 927 3168 M +-8 20 V +.08 g 919 3188 M +-9 20 V +.08 g 910 3208 M +-8 19 V +.08 g 902 3227 M +-1 1 V +.08 g 901 3228 M +-8 20 V +.08 g 893 3248 M +-9 21 V +.08 g 884 3269 M +-9 20 V +.08 g 875 3289 M +0 2 V +.08 g 875 3291 M +-8 18 V +.08 g 867 3309 M +-8 20 V +.08 g 859 3329 M +-9 20 V +.08 g 850 3349 M +-3 8 V +.08 g 847 3357 M +-5 12 V +.08 g 842 3369 M +-8 21 V +.08 g 834 3390 M +-8 20 V +.08 g 826 3410 M +-6 14 V +.08 g 820 3424 M +-2 6 V +.08 g 818 3430 M +-8 20 V +.08 g 810 3450 M +-8 20 V +.08 g 802 3470 M +-8 20 V +.08 g 794 3490 M +-1 3 V +.08 g 793 3493 M +-7 17 V +.08 g 786 3510 M +-8 21 V +.08 g 778 3531 M +-7 20 V +.08 g 771 3551 M +-6 13 V +.08 g 765 3564 M +-2 7 V +.08 g 763 3571 M +-8 20 V +.08 g 755 3591 M +-8 20 V +.08 g 747 3611 M +-7 20 V +.08 g 740 3631 M +-2 4 V +.08 g 738 3635 M +-6 17 V +.08 g 732 3652 M +-7 20 V +.08 g 725 3672 M +-8 20 V +.08 g 717 3692 M +-6 16 V +.08 g 711 3708 M +-1 4 V +.08 g 710 3712 M +-8 20 V +.08 g 702 3732 M +-7 20 V +.08 g 695 3752 M +-8 20 V +.08 g 687 3772 M +-3 10 V +.08 g 684 3782 M +-4 11 V +.08 g 680 3793 M +-7 20 V +.08 g 673 3813 M +-8 20 V +.08 g 665 3833 M +-7 20 V +.08 g 658 3853 M +-1 3 V +stroke 657 3856 M +.08 g 657 3856 M +-7 17 V +.08 g 650 3873 M +-7 20 V +.08 g 643 3893 M +-7 21 V +.08 g 636 3914 M +-7 18 V +.08 g 629 3932 M +-1 2 V +.08 g 628 3934 M +-7 20 V +.08 g 621 3954 M +-7 20 V +.08 g 614 3974 M +-7 20 V +.08 g 607 3994 M +-5 13 V +0 g .08 g 2167 1616 M +.08 g 2167 1616 M +-12 18 V +.08 g 2155 1634 M +-1 2 V +.08 g 2154 1636 M +-13 20 V +.08 g 2141 1656 M +-13 19 V +.08 g 2128 1675 M +-1 1 V +.08 g 2127 1676 M +-14 21 V +.08 g 2113 1697 M +-12 18 V +.08 g 2101 1715 M +-1 2 V +.08 g 2100 1717 M +-14 20 V +.08 g 2086 1737 M +-12 17 V +.08 g 2074 1754 M +-3 3 V +.08 g 2071 1757 M +-14 20 V +.08 g 2057 1777 M +-11 14 V +.08 g 2046 1791 M +-4 6 V +.08 g 2042 1797 M +-15 20 V +.08 g 2027 1817 M +-8 10 V +.08 g 2019 1827 M +-8 11 V +.08 g 2011 1838 M +-16 20 V +.08 g 1995 1858 M +-3 4 V +.08 g 1992 1862 M +-13 16 V +.08 g 1979 1878 M +-14 17 V +.08 g 1965 1895 M +-3 3 V +.08 g 1962 1898 M +-18 20 V +.08 g 1944 1918 M +-7 8 V +.08 g 1937 1926 M +-11 12 V +.08 g 1926 1938 M +-16 18 V +.08 g 1910 1956 M +-3 3 V +.08 g 1907 1959 M +-19 20 V +.08 g 1888 1979 M +-5 5 V +.08 g 1883 1984 M +-15 15 V +.08 g 1868 1999 M +-12 12 V +.08 g 1856 2011 M +-10 8 V +.08 g 1846 2019 M +-18 17 V +.08 g 1828 2036 M +-3 3 V +.08 g 1825 2039 M +-23 20 V +.08 g 1802 2059 M +-1 1 V +.08 g 1801 2060 M +-23 19 V +.08 g 1778 2079 M +-4 4 V +.08 g 1774 2083 M +-20 17 V +.08 g 1754 2100 M +-7 5 V +.08 g 1747 2105 M +-19 15 V +.08 g 1728 2120 M +-9 7 V +.08 g 1719 2127 M +-17 13 V +stroke 1702 2140 M +.08 g 1702 2140 M +-10 8 V +.08 g 1692 2148 M +-16 12 V +.08 g 1676 2160 M +-11 9 V +.08 g 1665 2169 M +-15 11 V +.08 g 1650 2180 M +-12 10 V +.08 g 1638 2190 M +-14 10 V +.08 g 1624 2200 M +-14 10 V +.08 g 1610 2210 M +-13 11 V +.08 g 1597 2221 M +-14 11 V +.08 g 1583 2232 M +-11 9 V +.08 g 1572 2241 M +-16 12 V +.08 g 1556 2253 M +-9 8 V +.08 g 1547 2261 M +-18 15 V +.08 g 1529 2276 M +-6 5 V +.08 g 1523 2281 M +-22 18 V +.08 g 1501 2299 M +-2 2 V +.08 g 1499 2301 M +-23 20 V +.08 g 1476 2321 M +-2 2 V +.08 g 1474 2323 M +-19 18 V +.08 g 1455 2341 M +-8 8 V +.08 g 1447 2349 M +-13 13 V +.08 g 1434 2362 M +-14 14 V +.08 g 1420 2376 M +-6 6 V +.08 g 1414 2382 M +-20 20 V +.08 g 1394 2402 M +-2 2 V +.08 g 1392 2404 M +-17 18 V +.08 g 1375 2422 M +-10 11 V +.08 g 1365 2433 M +-8 9 V +.08 g 1357 2442 M +-17 20 V +.08 g 1340 2462 M +-2 3 V +.08 g 1338 2465 M +-15 18 V +.08 g 1323 2483 M +-12 15 V +.08 g 1311 2498 M +-4 5 V +.08 g 1307 2503 M +-16 20 V +.08 g 1291 2523 M +-8 9 V +.08 g 1283 2532 M +-8 11 V +.08 g 1275 2543 M +-15 20 V +.08 g 1260 2563 M +-4 6 V +.08 g 1256 2569 M +-10 14 V +.08 g 1246 2583 M +-14 21 V +.08 g 1232 2604 M +-3 3 V +.08 g 1229 2607 M +-11 17 V +.08 g 1218 2624 M +-14 20 V +.08 g 1204 2644 M +-2 4 V +.08 g 1202 2648 M +-11 16 V +.08 g 1191 2664 M +-13 20 V +.08 g 1178 2684 M +-4 6 V +.08 g 1174 2690 M +-8 14 V +.08 g 1166 2704 M +-12 20 V +.08 g 1154 2724 M +-7 11 V +.08 g 1147 2735 M +-6 10 V +.08 g 1141 2745 M +-11 20 V +stroke 1130 2765 M +.08 g 1130 2765 M +-10 16 V +.08 g 1120 2781 M +-2 4 V +.08 g 1118 2785 M +-11 20 V +0 g .08 g 3463 858 M +.08 g 3463 858 M +-19 -8 V +.08 g 3444 850 M +-8 -3 V +.08 g 3436 847 M +-27 -12 V +.08 g 3409 835 M +-12 -5 V +.08 g 3397 830 M +-15 -7 V +.08 g 3382 823 M +-28 -12 V +.08 g 3354 811 M +-3 -1 V +.08 g 3351 810 M +-24 -10 V +.08 g 3327 800 M +-23 -10 V +.08 g 3304 790 M +-4 -2 V +.08 g 3300 788 M +-27 -11 V +.08 g 3273 777 M +-20 -8 V +.08 g 3253 769 M +-8 -3 V +.08 g 3245 766 M +-27 -9 V +.08 g 3218 757 M +-24 -8 V +.08 g 3194 749 M +-3 -1 V +.08 g 3191 748 M +-27 -7 V +.08 g 3164 741 M +-28 -6 V +.08 g 3136 735 M +-27 -5 V +.08 g 3109 730 M +-5 -1 V +.08 g 3104 729 M +-22 -3 V +.08 g 3082 726 M +-27 -1 V +.08 g 3055 725 M +-28 0 V +.08 g 3027 725 M +-27 1 V +.08 g 3000 726 M +-21 3 V +.08 g 2979 729 M +-6 1 V +.08 g 2973 730 M +-27 5 V +.08 g 2946 735 M +-28 8 V +.08 g 2918 743 M +-19 6 V +.08 g 2899 749 M +-8 3 V +.08 g 2891 752 M +-27 12 V +.08 g 2864 764 M +-12 5 V +.08 g 2852 769 M +-15 8 V +.08 g 2837 777 M +-22 13 V +.08 g 2815 790 M +-6 3 V +.08 g 2809 793 M +-26 17 V +.08 g 2783 810 M +-1 0 V +.08 g 2782 810 M +-27 20 V +.08 g 2755 830 M +-26 20 V +.08 g 2729 850 M +-1 2 V +.08 g 2728 852 M +-22 18 V +.08 g 2706 870 M +-6 5 V +.08 g 2700 875 M +-16 15 V +.08 g 2684 890 M +-11 11 V +.08 g 2673 901 M +-9 9 V +.08 g 2664 910 M +-18 18 V +.08 g 2646 928 M +-2 3 V +.08 g 2644 931 M +-19 20 V +.08 g 2625 951 M +-6 7 V +stroke 2619 958 M +.08 g 2619 958 M +-12 13 V +.08 g 2607 971 M +-16 18 V +.08 g 2591 989 M +-1 2 V +.08 g 2590 991 M +-17 20 V +.08 g 2573 1011 M +-9 11 V +.08 g 2564 1022 M +-7 9 V +.08 g 2557 1031 M +-16 21 V +.08 g 2541 1052 M +-4 4 V +.08 g 2537 1056 M +-12 16 V +.08 g 2525 1072 M +-15 20 V +.08 g .08 g 2510 1092 M +-15 20 V +.08 g 2495 1112 M +-13 18 V +.08 g 2482 1130 M +-1 2 V +.08 g 2481 1132 M +-15 20 V +.08 g 2466 1152 M +-11 17 V +.08 g 2455 1169 M +-3 3 V +.08 g 2452 1172 M +-13 21 V +.08 g 2439 1193 M +-11 16 V +.08 g 2428 1209 M +-3 4 V +.08 g 2425 1213 M +-14 20 V +.08 g 2411 1233 M +-10 16 V +.08 g 2401 1249 M +-3 4 V +.08 g 2398 1253 M +-13 20 V +.08 g 2385 1273 M +-12 18 V +.08 g 2373 1291 M +-1 2 V +.08 g 2372 1293 M +-13 21 V +.08 g 2359 1314 M +-13 20 V +.08 g .08 g 2346 1334 M +-13 20 V +.08 g 2333 1354 M +-13 20 V +.08 g 2320 1374 M +-1 2 V +.08 g 2319 1376 M +-11 18 V +.08 g 2308 1394 M +-13 20 V +.08 g 2295 1414 M +-3 6 V +.08 g 2292 1420 M +-10 15 V +.08 g 2282 1435 M +-12 20 V +.08 g 2270 1455 M +-6 8 V +.08 g 2264 1463 M +-7 12 V +.08 g 2257 1475 M +-13 20 V +.08 g 2244 1495 M +-7 11 V +.08 g 2237 1506 M +-6 9 V +.08 g 2231 1515 M +-12 20 V +.08 g 2219 1535 M +-9 14 V +.08 g 2210 1549 M +-4 6 V +.08 g 2206 1555 M +-13 21 V +.08 g 2193 1576 M +-10 16 V +.08 g 2183 1592 M +-3 4 V +.08 g 2180 1596 M +-13 20 V +0 g .08 g 5017 1411 M +.08 g 5017 1411 M +-11 -17 V +.08 g 5006 1394 M +-12 -20 V +.08 g 4994 1374 M +-5 -7 V +.08 g 4989 1367 M +-8 -13 V +.08 g 4981 1354 M +-13 -20 V +stroke 4968 1334 M +.08 g 4968 1334 M +-6 -10 V +.08 g 4962 1324 M +-7 -10 V +.08 g 4955 1314 M +-13 -21 V +.08 g 4942 1293 M +-7 -12 V +.08 g 4935 1281 M +-6 -8 V +.08 g 4929 1273 M +-13 -20 V +.08 g 4916 1253 M +-8 -13 V +.08 g 4908 1240 M +-5 -7 V +.08 g 4903 1233 M +-14 -20 V +.08 g 4889 1213 M +-9 -13 V +.08 g 4880 1200 M +-5 -7 V +.08 g 4875 1193 M +-14 -21 V +.08 g 4861 1172 M +-8 -12 V +.08 g 4853 1160 M +-6 -8 V +.08 g 4847 1152 M +-14 -20 V +.08 g 4833 1132 M +-7 -9 V +.08 g 4826 1123 M +-8 -11 V +.08 g 4818 1112 M +-15 -20 V +.08 g 4803 1092 M +-4 -6 V +.08 g 4799 1086 M +-12 -14 V +.08 g 4787 1072 M +-16 -20 V +.08 g 4771 1052 M +0 -1 V +.08 g 4771 1051 M +-16 -20 V +.08 g 4755 1031 M +-11 -13 V +.08 g 4744 1018 M +-6 -7 V +.08 g 4738 1011 M +-18 -20 V +.08 g 4720 991 M +-3 -4 V +.08 g 4717 987 M +-15 -16 V +.08 g 4702 971 M +-12 -13 V +.08 g 4690 958 M +-7 -7 V +.08 g 4683 951 M +-20 -20 V +.08 g 4663 931 M +-1 -1 V +.08 g 4662 930 M +-21 -20 V +.08 g 4641 910 M +-6 -6 V +.08 g 4635 904 M +-16 -14 V +.08 g 4619 890 M +-11 -9 V +.08 g 4608 881 M +-14 -11 V +.08 g 4594 870 M +-13 -11 V +.08 g 4581 859 M +-13 -9 V +.08 g 4568 850 M +-15 -10 V +.08 g 4553 840 M +-15 -10 V +.08 g 4538 830 M +-12 -8 V +.08 g 4526 822 M +-22 -12 V +.08 g 4504 810 M +-5 -3 V +.08 g 4499 807 M +-27 -14 V +.08 g 4472 793 M +-9 -3 V +.08 g 4463 790 M +-19 -8 V +.08 g 4444 782 M +-27 -10 V +.08 g 4417 772 M +-11 -3 V +.08 g 4406 769 M +-16 -4 V +.08 g 4390 765 M +-27 -5 V +.08 g 4363 760 M +-28 -4 V +stroke 4335 756 M +.08 g 4335 756 M +-27 -2 V +.08 g 4308 754 M +-27 0 V +.08 g 4281 754 M +-27 2 V +.08 g 4254 756 M +-28 3 V +.08 g 4226 759 M +-27 4 V +.08 g 4199 763 M +-27 6 V +.08 g 4172 769 M +-2 0 V +.08 g 4170 769 M +-25 7 V +.08 g 4145 776 M +-28 8 V +.08 g 4117 784 M +-17 6 V +.08 g 4100 790 M +-10 3 V +.08 g 4090 793 M +-27 9 V +.08 g 4063 802 M +-20 8 V +.08 g 4043 810 M +-7 2 V +.08 g 4036 812 M +-28 11 V +.08 g 4008 823 M +-18 7 V +.08 g 3990 830 M +-9 4 V +.08 g 3981 834 M +-27 10 V +.08 g 3954 844 M +-16 6 V +.08 g 3938 850 M +-11 5 V +.08 g 3927 855 M +-28 10 V +.08 g 3899 865 M +-16 5 V +.08 g 3883 870 M +-11 4 V +.08 g 3872 874 M +-27 8 V +.08 g 3845 882 M +-27 8 V +.08 g 3818 890 M +-2 0 V +.08 g 3816 890 M +-26 6 V +.08 g 3790 896 M +-27 5 V +.08 g 3763 901 M +-27 4 V +.08 g 3736 905 M +-27 2 V +.08 g 3709 907 M +-28 0 V +.08 g 3681 907 M +-27 -1 V +.08 g 3654 906 M +-27 -3 V +.08 g 3627 903 M +-27 -4 V +.08 g 3600 899 M +-28 -6 V +.08 g 3572 893 M +-10 -3 V +.08 g 3562 890 M +-17 -4 V +.08 g 3545 886 M +-27 -8 V +.08 g 3518 878 M +-21 -8 V +.08 g 3497 870 M +-6 -2 V +.08 g 3491 868 M +-28 -10 V +0 g .08 g 6052 2621 M +.08 g 6052 2621 M +-14 -17 V +.08 g 6038 2604 M +-13 -18 V +.08 g 6025 2586 M +-3 -3 V +.08 g 6022 2583 M +-16 -20 V +.08 g 6006 2563 M +-8 -10 V +.08 g 5998 2553 M +-9 -10 V +.08 g 5989 2543 M +-18 -20 V +.08 g 5971 2523 M +-1 -1 V +.08 g 5970 2522 M +-17 -19 V +.08 g 5953 2503 M +-10 -11 V +.08 g 5943 2492 M +-9 -9 V +stroke 5934 2483 M +.08 g 5934 2483 M +-18 -20 V +.08 g 5916 2463 M +-1 -1 V +.08 g 5915 2462 M +-20 -20 V +.08 g 5895 2442 M +-6 -6 V +.08 g 5889 2436 M +-15 -14 V +.08 g 5874 2422 M +-13 -12 V +.08 g 5861 2410 M +-9 -8 V +.08 g 5852 2402 M +-18 -17 V +.08 g 5834 2385 M +-4 -3 V +.08 g 5830 2382 M +-23 -20 V +.08 g 5807 2362 M +0 -1 V +.08 g 5807 2361 M +-23 -20 V +.08 g 5784 2341 M +-4 -3 V +.08 g 5780 2338 M +-21 -17 V +.08 g 5759 2321 M +-7 -6 V +.08 g 5752 2315 M +-17 -14 V +.08 g 5735 2301 M +-10 -8 V +.08 g 5725 2293 M +-15 -12 V +.08 g 5710 2281 M +-12 -10 V +.08 g 5698 2271 M +-13 -10 V +.08 g 5685 2261 M +-14 -12 V +.08 g 5671 2249 M +-11 -8 V +.08 g 5660 2241 M +-17 -14 V +.08 g 5643 2227 M +-7 -6 V +.08 g 5636 2221 M +-20 -17 V +.08 g 5616 2204 M +-4 -4 V +.08 g 5612 2200 M +-23 -19 V +.08 g 5589 2181 M +-1 -1 V +.08 g 5588 2180 M +-23 -20 V +.08 g 5565 2160 M +-3 -3 V +.08 g 5562 2157 M +-19 -17 V +.08 g 5543 2140 M +-9 -8 V +.08 g 5534 2132 M +-12 -12 V +.08 g 5522 2120 M +-15 -15 V +.08 g 5507 2105 M +-6 -5 V +.08 g 5501 2100 M +-20 -21 V +.08 g 5481 2079 M +-1 -1 V +.08 g 5480 2078 M +-18 -19 V +.08 g 5462 2059 M +-9 -10 V +.08 g 5453 2049 M +-9 -10 V +.08 g 5444 2039 M +-18 -20 V +.08 g 5426 2019 M +-1 0 V +.08 g 5425 2019 M +-17 -20 V +.08 g 5408 1999 M +-10 -12 V +.08 g 5398 1987 M +-6 -8 V +.08 g 5392 1979 M +-17 -20 V +.08 g 5375 1959 M +-4 -6 V +.08 g 5371 1953 M +-12 -15 V +.08 g 5359 1938 M +-15 -20 V +.08 g .08 g 5344 1918 M +-15 -20 V +.08 g 5329 1898 M +-13 -17 V +.08 g 5316 1881 M +-2 -3 V +stroke 5314 1878 M +.08 g 5314 1878 M +-14 -20 V +.08 g 5300 1858 M +-11 -15 V +.08 g 5289 1843 M +-3 -5 V +.08 g 5286 1838 M +-14 -21 V +.08 g 5272 1817 M +-10 -14 V +.08 g 5262 1803 M +-4 -6 V +.08 g 5258 1797 M +-13 -20 V +.08 g 5245 1777 M +-10 -15 V +.08 g 5235 1762 M +-4 -5 V +.08 g 5231 1757 M +-13 -20 V +.08 g 5218 1737 M +-11 -17 V +.08 g 5207 1720 M +-2 -3 V +.08 g 5205 1717 M +-13 -20 V +.08 g 5192 1697 M +-12 -20 V +.08 g 5180 1677 M +0 -1 V +.08 g 5180 1676 M +-13 -20 V +.08 g 5167 1656 M +-13 -20 V +.08 g 5154 1636 M +-1 -3 V +.08 g 5153 1633 M +-11 -17 V +.08 g 5142 1616 M +-12 -20 V +.08 g 5130 1596 M +-4 -7 V +.08 g 5126 1589 M +-9 -13 V +.08 g 5117 1576 M +-12 -21 V +.08 g 5105 1555 M +-7 -10 V +.08 g 5098 1545 M +-5 -10 V +.08 g 5093 1535 M +-13 -20 V +.08 g 5080 1515 M +-9 -15 V +.08 g 5071 1500 M +-3 -5 V +.08 g 5068 1495 M +-12 -20 V +.08 g 5056 1475 M +-12 -20 V +.08 g 5044 1455 M +-1 0 V +.08 g 5043 1455 M +-12 -20 V +.08 g 5031 1435 M +-12 -21 V +.08 g 5019 1414 M +-2 -3 V +0 g .06 g 2028 3390 M +.06 g 2028 3390 M +-9 8 V +.06 g 2019 3398 M +-12 12 V +.06 g 2007 3410 M +-15 15 V +.06 g 1992 3425 M +-5 5 V +.06 g 1987 3430 M +-18 20 V +.06 g 1969 3450 M +-4 5 V +.06 g 1965 3455 M +-13 15 V +.06 g 1952 3470 M +-15 19 V +.06 g 1937 3489 M +-1 1 V +.06 g 1936 3490 M +-15 20 V +.06 g 1921 3510 M +-11 16 V +.06 g 1910 3526 M +-3 5 V +.06 g 1907 3531 M +-14 20 V +.06 g 1893 3551 M +-10 16 V +.06 g 1883 3567 M +-3 4 V +.06 g 1880 3571 M +-12 20 V +.06 g 1868 3591 M +-12 20 V +.06 g 1856 3611 M +-1 0 V +stroke 1855 3611 M +.06 g 1855 3611 M +-12 20 V +.06 g 1843 3631 M +-11 21 V +.06 g 1832 3652 M +-4 6 V +.06 g 1828 3658 M +-8 14 V +.06 g 1820 3672 M +-11 20 V +.06 g 1809 3692 M +-8 15 V +.06 g 1801 3707 M +-3 5 V +.06 g 1798 3712 M +-10 20 V +.06 g 1788 3732 M +-11 20 V +.06 g 1777 3752 M +-3 7 V +.06 g 1774 3759 M +-7 13 V +.06 g 1767 3772 M +-10 21 V +.06 g 1757 3793 M +-10 20 V +.06 g 1747 3813 M +0 1 V +.06 g 1747 3814 M +-10 19 V +.06 g 1737 3833 M +-10 20 V +.06 g 1727 3853 M +-8 17 V +.06 g 1719 3870 M +-1 3 V +.06 g 1718 3873 M +-10 20 V +.06 g 1708 3893 M +-9 21 V +.06 g 1699 3914 M +-7 14 V +.06 g 1692 3928 M +-3 6 V +.06 g 1689 3934 M +-9 20 V +.06 g 1680 3954 M +-9 20 V +.06 g 1671 3974 M +-6 13 V +.06 g 1665 3987 M +-4 7 V +.06 g 1661 3994 M +-9 20 V +.06 g 1652 4014 M +-9 21 V +.06 g 1643 4035 M +-5 12 V +.06 g 1638 4047 M +-4 8 V +.06 g 1634 4055 M +-9 20 V +.06 g 1625 4075 M +-9 20 V +.06 g 1616 4095 M +-6 13 V +.06 g 1610 4108 M +-3 7 V +.06 g 1607 4115 M +-9 20 V +.06 g 1598 4135 M +-9 20 V +.06 g 1589 4155 M +-6 14 V +.06 g 1583 4169 M +-3 7 V +.06 g 1580 4176 M +-9 20 V +.06 g 1571 4196 M +-9 20 V +.06 g 1562 4216 M +-6 15 V +.06 g 1556 4231 M +-3 5 V +.06 g 1553 4236 M +-9 20 V +.06 g 1544 4256 M +-8 20 V +.06 g 1536 4276 M +-7 17 V +.06 g 1529 4293 M +-2 4 V +.06 g 1527 4297 M +-9 20 V +.06 g 1518 4317 M +-9 20 V +.06 g 1509 4337 M +-8 17 V +.06 g 1501 4354 M +-1 3 V +.06 g 1500 4357 M +-9 20 V +.06 g 1491 4377 M +-9 20 V +stroke 1482 4397 M +.06 g 1482 4397 M +-8 19 V +.06 g 1474 4416 M +-1 1 V +.06 g 1473 4417 M +-9 21 V +.06 g 1464 4438 M +-9 20 V +.06 g 1455 4458 M +-8 19 V +.06 g 1447 4477 M +-1 1 V +.06 g 1446 4478 M +-9 20 V +.06 g 1437 4498 M +-9 20 V +.06 g 1428 4518 M +-8 20 V +.06 g 1420 4538 M +-1 0 V +.06 g 1419 4538 M +-9 21 V +.06 g 1410 4559 M +-9 20 V +.06 g 1401 4579 M +-9 19 V +.06 g 1392 4598 M +0 1 V +.06 g 1392 4599 M +-9 20 V +0 g .06 g 3545 2504 M +.06 g 3545 2504 M +-27 16 V +.06 g 3518 2520 M +-4 3 V +.06 g 3514 2523 M +-23 16 V +.06 g 3491 2539 M +-5 4 V +.06 g 3486 2543 M +-23 18 V +.06 g 3463 2561 M +-3 2 V +.06 g 3460 2563 M +-24 20 V +.06 g 3436 2583 M +0 1 V +.06 g 3436 2584 M +-22 20 V +.06 g 3414 2604 M +-5 4 V +.06 g 3409 2608 M +-16 16 V +.06 g 3393 2624 M +-11 11 V +.06 g 3382 2635 M +-10 9 V +.06 g 3372 2644 M +-18 18 V +.06 g 3354 2662 M +-2 2 V +.06 g 3352 2664 M +-19 20 V +.06 g 3333 2684 M +-6 6 V +.06 g 3327 2690 M +-14 14 V +.06 g 3313 2704 M +-13 14 V +.06 g 3300 2718 M +-6 6 V +.06 g 3294 2724 M +-19 21 V +.06 g 3275 2745 M +-2 2 V +.06 g 3273 2747 M +-17 18 V +.06 g 3256 2765 M +-11 12 V +.06 g 3245 2777 M +-7 8 V +.06 g 3238 2785 M +-19 20 V +.06 g 3219 2805 M +-1 1 V +.06 g 3218 2806 M +-18 19 V +.06 g 3200 2825 M +-9 10 V +.06 g 3191 2835 M +-10 10 V +.06 g 3181 2845 M +-17 18 V +.06 g 3164 2863 M +-3 3 V +.06 g 3161 2866 M +-19 20 V +.06 g 3142 2886 M +-6 5 V +.06 g 3136 2891 M +-14 15 V +.06 g 3122 2906 M +-13 13 V +.06 g 3109 2919 M +-7 7 V +stroke 3102 2926 M +.06 g 3102 2926 M +-20 20 V +.06 g 3082 2946 M +-1 0 V +.06 g 3081 2946 M +-21 20 V +.06 g 3060 2966 M +-5 6 V +.06 g 3055 2972 M +-17 14 V +.06 g 3038 2986 M +-11 11 V +.06 g 3027 2997 M +-11 10 V +.06 g 3016 3007 M +-16 14 V +.06 g 3000 3021 M +-7 6 V +.06 g 2993 3027 M +-20 17 V +.06 g 2973 3044 M +-4 3 V +.06 g 2969 3047 M +-23 19 V +.06 g 2946 3066 M +-2 1 V +.06 g 2944 3067 M +-26 20 V +.06 g 2918 3087 M +-1 0 V +.06 g 2917 3087 M +-26 19 V +.06 g 2891 3106 M +-2 1 V +.06 g 2889 3107 M +-25 17 V +.06 g 2864 3124 M +-5 4 V +.06 g 2859 3128 M +-22 13 V +.06 g 2837 3141 M +-11 7 V +.06 g 2826 3148 M +-17 9 V +.06 g 2809 3157 M +-20 11 V +.06 g 2789 3168 M +-7 4 V +.06 g 2782 3172 M +-27 13 V +.06 g 2755 3185 M +-7 3 V +.06 g 2748 3188 M +-20 9 V +.06 g 2728 3197 M +-28 11 V +.06 g 2700 3208 M +-27 10 V +.06 g 2673 3218 M +-27 8 V +.06 g 2646 3226 M +-7 2 V +.06 g 2639 3228 M +-20 6 V +.06 g 2619 3234 M +-28 6 V +.06 g 2591 3240 M +-27 6 V +.06 g 2564 3246 M +-13 2 V +.06 g 2551 3248 M +-14 3 V +.06 g 2537 3251 M +-27 4 V +.06 g 2510 3255 M +-28 3 V +.06 g 2482 3258 M +-27 3 V +.06 g 2455 3261 M +-27 3 V +.06 g 2428 3264 M +-27 2 V +.06 g 2401 3266 M +-28 2 V +.06 g 2373 3268 M +-2 1 V +.06 g 2371 3269 M +-25 2 V +.06 g 2346 3271 M +-27 2 V +.06 g 2319 3273 M +-27 4 V +.06 g 2292 3277 M +-28 4 V +.06 g 2264 3281 M +-27 5 V +.06 g 2237 3286 M +-12 3 V +.06 g 2225 3289 M +-15 3 V +.06 g 2210 3292 M +-27 8 V +.06 g 2183 3300 M +-24 9 V +stroke 2159 3309 M +.06 g 2159 3309 M +-4 1 V +.06 g 2155 3310 M +-27 12 V +.06 g 2128 3322 M +-13 7 V +.06 g 2115 3329 M +-14 8 V +.06 g 2101 3337 M +-20 12 V +.06 g 2081 3349 M +-7 5 V +.06 g 2074 3354 M +-21 15 V +.06 g 2053 3369 M +-7 5 V +.06 g 2046 3374 M +-18 16 V +0 g .06 g 4989 3331 M +.06 g 4989 3331 M +-14 -2 V +.06 g 4975 3329 M +-13 -2 V +.06 g 4962 3327 M +-27 -3 V +.06 g 4935 3324 M +-27 -4 V +.06 g 4908 3320 M +-28 -4 V +.06 g 4880 3316 M +-27 -4 V +.06 g 4853 3312 M +-14 -3 V +.06 g 4839 3309 M +-13 -3 V +.06 g 4826 3306 M +-27 -5 V +.06 g 4799 3301 M +-28 -7 V +.06 g 4771 3294 M +-19 -5 V +.06 g 4752 3289 M +-8 -2 V +.06 g 4744 3287 M +-27 -9 V +.06 g 4717 3278 M +-27 -9 V +.06 g .06 g 4690 3269 M +-28 -11 V +.06 g 4662 3258 M +-22 -10 V +.06 g 4640 3248 M +-5 -2 V +.06 g 4635 3246 M +-27 -13 V +.06 g 4608 3233 M +-10 -5 V +.06 g 4598 3228 M +-17 -9 V +.06 g 4581 3219 M +-20 -11 V +.06 g 4561 3208 M +-8 -4 V +.06 g 4553 3204 M +-25 -16 V +.06 g 4528 3188 M +-2 -1 V +.06 g 4526 3187 M +-27 -18 V +.06 g 4499 3169 M +-2 -1 V +.06 g 4497 3168 M +-25 -18 V +.06 g 4472 3150 M +-3 -2 V +.06 g 4469 3148 M +-25 -19 V +.06 g 4444 3129 M +-2 -1 V +.06 g 4442 3128 M +-25 -20 V +.06 g 4417 3108 M +0 -1 V +.06 g 4417 3107 M +-25 -20 V +.06 g 4392 3087 M +-2 -2 V +.06 g 4390 3085 M +-21 -18 V +.06 g 4369 3067 M +-6 -6 V +.06 g 4363 3061 M +-16 -14 V +.06 g 4347 3047 M +-12 -11 V +.06 g 4335 3036 M +-9 -9 V +.06 g 4326 3027 M +-18 -17 V +.06 g 4308 3010 M +-3 -3 V +.06 g 4305 3007 M +-21 -21 V +.06 g 4284 2986 M +-3 -3 V +stroke 4281 2983 M +.06 g 4281 2983 M +-17 -17 V +.06 g 4264 2966 M +-10 -11 V +.06 g 4254 2955 M +-9 -9 V +.06 g 4245 2946 M +-19 -19 V +.06 g 4226 2927 M +0 -1 V +.06 g 4226 2926 M +-19 -20 V +.06 g 4207 2906 M +-8 -9 V +.06 g 4199 2897 M +-11 -11 V +.06 g 4188 2886 M +-16 -18 V +.06 g 4172 2868 M +-2 -2 V +.06 g 4170 2866 M +-18 -21 V +.06 g 4152 2845 M +-7 -8 V +.06 g 4145 2837 M +-12 -12 V +.06 g 4133 2825 M +-16 -18 V +.06 g 4117 2807 M +-2 -2 V +.06 g 4115 2805 M +-18 -20 V +.06 g 4097 2785 M +-7 -8 V +.06 g 4090 2777 M +-11 -12 V +.06 g 4079 2765 M +-16 -19 V +.06 g 4063 2746 M +-2 -1 V +.06 g 4061 2745 M +-18 -21 V +.06 g 4043 2724 M +-7 -8 V +.06 g 4036 2716 M +-12 -12 V +.06 g 4024 2704 M +-16 -17 V +.06 g 4008 2687 M +-2 -3 V +.06 g 4006 2684 M +-19 -20 V +.06 g 3987 2664 M +-6 -6 V +.06 g 3981 2658 M +-14 -14 V +.06 g 3967 2644 M +-13 -14 V +.06 g 3954 2630 M +-7 -6 V +.06 g 3947 2624 M +-20 -20 V +.06 g 3927 2604 M +-1 0 V +.06 g 3926 2604 M +-22 -21 V +.06 g 3904 2583 M +-5 -4 V +.06 g 3899 2579 M +-18 -16 V +.06 g 3881 2563 M +-9 -8 V +.06 g 3872 2555 M +-16 -12 V +.06 g 3856 2543 M +-11 -9 V +.06 g 3845 2534 M +-17 -11 V +.06 g 3828 2523 M +-10 -7 V +.06 g 3818 2516 M +-23 -13 V +.06 g 3795 2503 M +-5 -3 V +.06 g 3790 2500 M +-27 -13 V +.06 g 3763 2487 M +-12 -4 V +.06 g 3751 2483 M +-15 -6 V +.06 g 3736 2477 M +-27 -7 V +.06 g 3709 2470 M +-28 -3 V +.06 g 3681 2467 M +-27 1 V +.06 g 3654 2468 M +-27 4 V +.06 g 3627 2472 M +-27 7 V +.06 g 3600 2479 M +-8 4 V +.06 g 3592 2483 M +-20 7 V +stroke 3572 2490 M +.06 g 3572 2490 M +-25 13 V +.06 g 3547 2503 M +-2 1 V +0 g .06 g 5923 4619 M +.06 g 5923 4619 M +-7 -16 V +.06 g 5916 4603 M +-2 -4 V +.06 g 5914 4599 M +-9 -20 V +.06 g 5905 4579 M +-9 -20 V +.06 g 5896 4559 M +-7 -18 V +.06 g 5889 4541 M +-2 -3 V +.06 g 5887 4538 M +-8 -20 V +.06 g 5879 4518 M +-9 -20 V +.06 g 5870 4498 M +-9 -20 V +.06 g .06 g 5861 4478 M +-8 -20 V +.06 g 5853 4458 M +-9 -20 V +.06 g 5844 4438 M +-9 -21 V +.06 g 5835 4417 M +-1 -2 V +.06 g 5834 4415 M +-8 -18 V +.06 g 5826 4397 M +-8 -20 V +.06 g 5818 4377 M +-9 -20 V +.06 g 5809 4357 M +-2 -5 V +.06 g 5807 4352 M +-7 -15 V +.06 g 5800 4337 M +-8 -20 V +.06 g 5792 4317 M +-9 -20 V +.06 g 5783 4297 M +-3 -8 V +.06 g 5780 4289 M +-6 -13 V +.06 g 5774 4276 M +-9 -20 V +.06 g 5765 4256 M +-8 -20 V +.06 g 5757 4236 M +-5 -10 V +.06 g 5752 4226 M +-4 -10 V +.06 g 5748 4216 M +-9 -20 V +.06 g 5739 4196 M +-9 -20 V +.06 g 5730 4176 M +-5 -13 V +.06 g 5725 4163 M +-4 -8 V +.06 g 5721 4155 M +-8 -20 V +.06 g 5713 4135 M +-9 -20 V +.06 g 5704 4115 M +-6 -13 V +.06 g 5698 4102 M +-3 -7 V +.06 g 5695 4095 M +-9 -20 V +.06 g 5686 4075 M +-9 -20 V +.06 g 5677 4055 M +-6 -14 V +.06 g 5671 4041 M +-4 -6 V +.06 g 5667 4035 M +-9 -21 V +.06 g 5658 4014 M +-9 -20 V +.06 g 5649 3994 M +-6 -12 V +.06 g 5643 3982 M +-3 -8 V +.06 g 5640 3974 M +-10 -20 V +.06 g 5630 3954 M +-9 -20 V +.06 g 5621 3934 M +-5 -10 V +.06 g 5616 3924 M +-5 -10 V +.06 g 5611 3914 M +-10 -21 V +.06 g 5601 3893 M +-9 -20 V +.06 g 5592 3873 M +-3 -6 V +.06 g 5589 3867 M +-7 -14 V +stroke 5582 3853 M +.06 g 5582 3853 M +-10 -20 V +.06 g 5572 3833 M +-10 -20 V +.06 g 5562 3813 M +-1 0 V +.06 g 5561 3813 M +-10 -20 V +.06 g 5551 3793 M +-11 -21 V +.06 g 5540 3772 M +-6 -11 V +.06 g 5534 3761 M +-5 -9 V +.06 g 5529 3752 M +-11 -20 V +.06 g 5518 3732 M +-11 -20 V +.06 g .06 g 5507 3712 M +-12 -20 V +.06 g 5495 3692 M +-12 -20 V +.06 g 5483 3672 M +-3 -6 V +.06 g 5480 3666 M +-9 -14 V +.06 g 5471 3652 M +-13 -21 V +.06 g 5458 3631 M +-5 -8 V +.06 g 5453 3623 M +-8 -12 V +.06 g 5445 3611 M +-14 -20 V +.06 g 5431 3591 M +-6 -8 V +.06 g 5425 3583 M +-9 -12 V +.06 g 5416 3571 M +-15 -20 V +.06 g 5401 3551 M +-3 -4 V +.06 g 5398 3547 M +-13 -16 V +.06 g 5385 3531 M +-14 -17 V +.06 g 5371 3514 M +-4 -4 V +.06 g 5367 3510 M +-18 -20 V +.06 g 5349 3490 M +-5 -5 V +.06 g 5344 3485 M +-16 -15 V +.06 g 5328 3470 M +-12 -11 V +.06 g 5316 3459 M +-10 -9 V +.06 g 5306 3450 M +-17 -14 V +.06 g 5289 3436 M +-9 -6 V +.06 g 5280 3430 M +-18 -13 V +.06 g 5262 3417 M +-12 -7 V +.06 g 5250 3410 M +-15 -10 V +.06 g 5235 3400 M +-21 -10 V +.06 g 5214 3390 M +-7 -4 V +.06 g 5207 3386 M +-27 -12 V +.06 g 5180 3374 M +-13 -5 V +.06 g 5167 3369 M +-14 -5 V +.06 g 5153 3364 M +-27 -8 V +.06 g 5126 3356 M +-28 -7 V +.06 g 5098 3349 M +-1 0 V +.06 g 5097 3349 M +-26 -5 V +.06 g 5071 3344 M +-27 -5 V +.06 g 5044 3339 M +-27 -4 V +.06 g 5017 3335 M +-28 -4 V +0 g .06 g 1173 2866 M +.06 g 1173 2866 M +-13 20 V +.06 g 1160 2886 M +-12 20 V +.06 g 1148 2906 M +-1 1 V +.06 g 1147 2907 M +-11 19 V +.06 g 1136 2926 M +-12 20 V +.06 g 1124 2946 M +-4 7 V +stroke 1120 2953 M +.06 g 1120 2953 M +-7 13 V +.06 g 1113 2966 M +-12 20 V +.06 g 1101 2986 M +-8 16 V +.06 g 1093 3002 M +-3 5 V +.06 g 1090 3007 M +-11 20 V +.06 g 1079 3027 M +-11 20 V +.06 g 1068 3047 M +-3 6 V +.06 g 1065 3053 M +-7 14 V +.06 g 1058 3067 M +-10 20 V +.06 g 1048 3087 M +-10 19 V +.06 g 1038 3106 M +-1 1 V +.06 g 1037 3107 M +-9 21 V +.06 g 1028 3128 M +-10 20 V +.06 g 1018 3148 M +-7 14 V +.06 g 1011 3162 M +-3 6 V +.06 g 1008 3168 M +-10 20 V +.06 g 998 3188 M +-9 20 V +.06 g 989 3208 M +-5 11 V +.06 g 984 3219 M +-5 9 V +.06 g 979 3228 M +-9 20 V +.06 g 970 3248 M +-9 21 V +.06 g 961 3269 M +-5 10 V +.06 g 956 3279 M +-4 10 V +.06 g 952 3289 M +-9 20 V +.06 g 943 3309 M +-9 20 V +.06 g 934 3329 M +-5 12 V +.06 g 929 3341 M +-3 8 V +.06 g 926 3349 M +-9 20 V +.06 g 917 3369 M +-8 21 V +.06 g 909 3390 M +-7 15 V +.06 g 902 3405 M +-2 5 V +.06 g 900 3410 M +-8 20 V +.06 g 892 3430 M +-9 20 V +.06 g 883 3450 M +-8 20 V +.06 g 875 3470 M +0 2 V +.06 g 875 3472 M +-8 18 V +.06 g 867 3490 M +-8 20 V +.06 g 859 3510 M +-8 21 V +.06 g 851 3531 M +-4 9 V +.06 g 847 3540 M +-4 11 V +.06 g 843 3551 M +-8 20 V +.06 g 835 3571 M +-8 20 V +.06 g 827 3591 M +-7 19 V +.06 g 820 3610 M +-1 1 V +.06 g 819 3611 M +-7 20 V +.06 g 812 3631 M +-8 21 V +.06 g 804 3652 M +-7 20 V +.06 g 797 3672 M +-4 10 V +.06 g 793 3682 M +-4 10 V +.06 g 789 3692 M +-7 20 V +.06 g 782 3712 M +-8 20 V +.06 g 774 3732 M +-8 20 V +stroke 766 3752 M +.06 g 766 3752 M +-1 3 V +.06 g 765 3755 M +-6 17 V +.06 g 759 3772 M +-7 21 V +.06 g 752 3793 M +-7 20 V +.06 g 745 3813 M +-7 17 V +.06 g 738 3830 M +-1 3 V +.06 g 737 3833 M +-7 20 V +.06 g 730 3853 M +-7 20 V +.06 g 723 3873 M +-7 20 V +.06 g 716 3893 M +-5 13 V +.06 g 711 3906 M +-3 8 V +.06 g 708 3914 M +-7 20 V +.06 g 701 3934 M +-7 20 V +.06 g 694 3954 M +-7 20 V +.06 g 687 3974 M +-3 10 V +.06 g 684 3984 M +-4 10 V +.06 g 680 3994 M +-7 20 V +.06 g 673 4014 M +-7 21 V +.06 g 666 4035 M +-7 20 V +.06 g 659 4055 M +-2 8 V +.06 g 657 4063 M +-5 12 V +.06 g 652 4075 M +-7 20 V +.06 g 645 4095 M +-6 20 V +.06 g 639 4115 M +-7 20 V +.06 g 632 4135 M +-3 7 V +.06 g 629 4142 M +-4 13 V +.06 g 625 4155 M +-7 21 V +.06 g 618 4176 M +-7 20 V +.06 g 611 4196 M +-7 20 V +.06 g 604 4216 M +-2 6 V +0 g .06 g 2259 1697 M +.06 g 2259 1697 M +-12 20 V +.06 g 2247 1717 M +-10 18 V +.06 g 2237 1735 M +-1 2 V +.06 g 2236 1737 M +-12 20 V +.06 g 2224 1757 M +-11 20 V +.06 g 2213 1777 M +-3 6 V +.06 g 2210 1783 M +-9 14 V +.06 g 2201 1797 M +-11 20 V +.06 g 2190 1817 M +-7 13 V +.06 g 2183 1830 M +-5 8 V +.06 g 2178 1838 M +-12 20 V +.06 g 2166 1858 M +-11 18 V +.06 g 2155 1876 M +-1 2 V +.06 g 2154 1878 M +-12 20 V +.06 g 2142 1898 M +-12 20 V +.06 g 2130 1918 M +-2 4 V +.06 g 2128 1922 M +-10 16 V +.06 g 2118 1938 M +-13 21 V +.06 g 2105 1959 M +-4 7 V +.06 g 2101 1966 M +-9 13 V +.06 g 2092 1979 M +-13 20 V +.06 g 2079 1999 M +-5 9 V +stroke 2074 2008 M +.06 g 2074 2008 M +-8 11 V +.06 g 2066 2019 M +-14 20 V +.06 g 2052 2039 M +-6 9 V +.06 g 2046 2048 M +-8 11 V +.06 g 2038 2059 M +-14 20 V +.06 g 2024 2079 M +-5 7 V +.06 g 2019 2086 M +-10 14 V +.06 g 2009 2100 M +-16 20 V +.06 g 1993 2120 M +-1 2 V +.06 g 1992 2122 M +-15 18 V +.06 g 1977 2140 M +-12 15 V +.06 g 1965 2155 M +-5 5 V +.06 g 1960 2160 M +-18 20 V +.06 g 1942 2180 M +-5 6 V +.06 g 1937 2186 M +-13 14 V +.06 g 1924 2200 M +-14 14 V +.06 g 1910 2214 M +-6 7 V +.06 g 1904 2221 M +-21 19 V +.06 g 1883 2240 M +-1 1 V +.06 g 1882 2241 M +-22 20 V +.06 g 1860 2261 M +-4 3 V +.06 g 1856 2264 M +-21 17 V +.06 g 1835 2281 M +-7 5 V +.06 g 1828 2286 M +-20 15 V +.06 g 1808 2301 M +-7 6 V +.06 g 1801 2307 M +-21 14 V +.06 g 1780 2321 M +-6 4 V +.06 g 1774 2325 M +-25 16 V +.06 g 1749 2341 M +-2 2 V +.06 g 1747 2343 M +-28 17 V +.06 g 1719 2360 M +-3 2 V +.06 g 1716 2362 M +-24 14 V +.06 g 1692 2376 M +-9 6 V +.06 g 1683 2382 M +-18 10 V +.06 g 1665 2392 M +-17 10 V +.06 g 1648 2402 M +-10 6 V +.06 g 1638 2408 M +-23 14 V +.06 g 1615 2422 M +-5 3 V +.06 g 1610 2425 M +-27 16 V +.06 g 1583 2441 M +-1 1 V +.06 g 1582 2442 M +-26 17 V +.06 g 1556 2459 M +-5 3 V +.06 g 1551 2462 M +-22 15 V +.06 g 1529 2477 M +-8 6 V +.06 g 1521 2483 M +-20 14 V +.06 g 1501 2497 M +-7 6 V +.06 g 1494 2503 M +-20 15 V +.06 g 1474 2518 M +-6 5 V +.06 g 1468 2523 M +-21 17 V +.06 g 1447 2540 M +-4 3 V +.06 g 1443 2543 M +-23 20 V +.06 g .06 g 1420 2563 M +-22 20 V +stroke 1398 2583 M +.06 g 1398 2583 M +-6 6 V +.06 g 1392 2589 M +-14 15 V +.06 g 1378 2604 M +-13 12 V +.06 g 1365 2616 M +-7 8 V +.06 g 1358 2624 M +-19 20 V +.06 g 1339 2644 M +-1 1 V +.06 g 1338 2645 M +-17 19 V +.06 g 1321 2664 M +-10 12 V +.06 g 1311 2676 M +-7 8 V +.06 g 1304 2684 M +-17 20 V +.06 g 1287 2704 M +-4 5 V +.06 g 1283 2709 M +-11 15 V +.06 g 1272 2724 M +-16 20 V +.06 g 1256 2744 M +0 1 V +.06 g 1256 2745 M +-15 20 V +.06 g 1241 2765 M +-12 17 V +.06 g 1229 2782 M +-2 3 V +.06 g 1227 2785 M +-14 20 V +.06 g 1213 2805 M +-11 16 V +.06 g 1202 2821 M +-3 4 V +.06 g 1199 2825 M +-13 20 V +.06 g 1186 2845 M +-12 18 V +.06 g 1174 2863 M +-1 3 V +0 g .06 g 3534 1132 M +.06 g 3534 1132 M +-16 -7 V +.06 g 3518 1125 M +-26 -13 V +.06 g 3492 1112 M +-1 -1 V +.06 g 3491 1111 M +-28 -15 V +.06 g 3463 1096 M +-7 -4 V +.06 g 3456 1092 M +-20 -11 V +.06 g 3436 1081 M +-15 -9 V +.06 g 3421 1072 M +-12 -8 V +.06 g 3409 1064 M +-21 -12 V +.06 g 3388 1052 M +-6 -4 V +.06 g 3382 1048 M +-27 -17 V +.06 g 3355 1031 M +-1 0 V +.06 g 3354 1031 M +-27 -17 V +.06 g 3327 1014 M +-5 -3 V +.06 g 3322 1011 M +-22 -13 V +.06 g 3300 998 M +-13 -7 V +.06 g 3287 991 M +-14 -8 V +.06 g 3273 983 M +-23 -12 V +.06 g 3250 971 M +-5 -2 V +.06 g 3245 969 M +-27 -14 V +.06 g 3218 955 M +-10 -4 V +.06 g 3208 951 M +-17 -8 V +.06 g 3191 943 M +-27 -11 V +.06 g 3164 932 M +-5 -1 V +.06 g 3159 931 M +-23 -8 V +.06 g 3136 923 M +-27 -8 V +.06 g 3109 915 M +-22 -5 V +.06 g 3087 910 M +-5 -1 V +.06 g 3082 909 M +-27 -4 V +stroke 3055 905 M +.06 g 3055 905 M +-28 -2 V +.06 g 3027 903 M +-27 0 V +.06 g 3000 903 M +-27 2 V +.06 g 2973 905 M +-27 5 V +.06 g 2946 910 M +-4 0 V +.06 g 2942 910 M +-24 6 V +.06 g 2918 916 M +-27 9 V +.06 g 2891 925 M +-15 6 V +.06 g 2876 931 M +-12 5 V +.06 g 2864 936 M +-27 13 V +.06 g 2837 949 M +-4 2 V +.06 g 2833 951 M +-24 13 V +.06 g 2809 964 M +-10 7 V +.06 g 2799 971 M +-17 11 V +.06 g 2782 982 M +-12 9 V +.06 g 2770 991 M +-15 11 V +.06 g 2755 1002 M +-11 9 V +.06 g 2744 1011 M +-16 14 V +.06 g 2728 1025 M +-8 6 V +.06 g 2720 1031 M +-20 18 V +.06 g 2700 1049 M +-2 3 V +.06 g 2698 1052 M +-20 20 V +.06 g 2678 1072 M +-5 4 V +.06 g 2673 1076 M +-15 16 V +.06 g 2658 1092 M +-12 13 V +.06 g 2646 1105 M +-6 7 V +.06 g 2640 1112 M +-18 20 V +.06 g 2622 1132 M +-3 4 V +.06 g 2619 1136 M +-14 16 V +.06 g 2605 1152 M +-14 17 V +.06 g 2591 1169 M +-2 3 V +.06 g 2589 1172 M +-16 21 V +.06 g 2573 1193 M +-9 12 V +.06 g 2564 1205 M +-6 8 V +.06 g 2558 1213 M +-15 20 V +.06 g 2543 1233 M +-6 9 V +.06 g 2537 1242 M +-8 11 V +.06 g 2529 1253 M +-15 20 V +.06 g 2514 1273 M +-4 7 V +.06 g 2510 1280 M +-9 13 V +.06 g 2501 1293 M +-14 21 V +.06 g 2487 1314 M +-5 7 V +.06 g 2482 1321 M +-8 13 V +.06 g 2474 1334 M +-13 20 V +.06 g 2461 1354 M +-6 9 V +.06 g 2455 1363 M +-7 11 V +.06 g 2448 1374 M +-13 20 V +.06 g 2435 1394 M +-7 12 V +.06 g 2428 1406 M +-5 8 V +.06 g 2423 1414 M +-13 21 V +.06 g 2410 1435 M +-9 16 V +.06 g 2401 1451 M +-3 4 V +stroke 2398 1455 M +.06 g 2398 1455 M +-12 20 V +.06 g 2386 1475 M +-12 20 V +.06 g 2374 1495 M +-1 2 V +.06 g 2373 1497 M +-11 18 V +.06 g 2362 1515 M +-11 20 V +.06 g 2351 1535 M +-5 8 V +.06 g 2346 1543 M +-7 12 V +.06 g 2339 1555 M +-12 21 V +.06 g 2327 1576 M +-8 15 V +.06 g 2319 1591 M +-3 5 V +.06 g 2316 1596 M +-12 20 V +.06 g 2304 1616 M +-11 20 V +.06 g 2293 1636 M +-1 2 V +.06 g 2292 1638 M +-11 18 V +.06 g 2281 1656 M +-11 20 V +.06 g 2270 1676 M +-6 11 V +.06 g 2264 1687 M +-5 10 V +0 g .06 g 5002 1596 M +.06 g 5002 1596 M +-12 -20 V +.06 g 4990 1576 M +-1 -2 V +.06 g 4989 1574 M +-10 -19 V +.06 g 4979 1555 M +-12 -20 V +.06 g 4967 1535 M +-5 -8 V +.06 g 4962 1527 M +-7 -12 V +.06 g 4955 1515 M +-12 -20 V +.06 g 4943 1495 M +-8 -15 V +.06 g 4935 1480 M +-4 -5 V +.06 g 4931 1475 M +-12 -20 V +.06 g 4919 1455 M +-11 -20 V +.06 g 4908 1435 M +-1 0 V +.06 g 4907 1435 M +-12 -21 V +.06 g 4895 1414 M +-13 -20 V +.06 g 4882 1394 M +-2 -3 V +.06 g 4880 1391 M +-11 -17 V +.06 g 4869 1374 M +-13 -20 V +.06 g 4856 1354 M +-3 -5 V +.06 g 4853 1349 M +-10 -15 V +.06 g 4843 1334 M +-14 -20 V +.06 g 4829 1314 M +-3 -5 V +.06 g 4826 1309 M +-11 -16 V +.06 g 4815 1293 M +-14 -20 V +.06 g 4801 1273 M +-2 -3 V +.06 g 4799 1270 M +-13 -17 V +.06 g 4786 1253 M +-14 -20 V +.06 g 4772 1233 M +-1 0 V +.06 g 4771 1233 M +-15 -20 V +.06 g 4756 1213 M +-12 -15 V +.06 g 4744 1198 M +-4 -5 V +.06 g 4740 1193 M +-17 -21 V +.06 g 4723 1172 M +-6 -8 V +.06 g 4717 1164 M +-11 -12 V +.06 g 4706 1152 M +-16 -19 V +.06 g 4690 1133 M +-2 -1 V +stroke 4688 1132 M +.06 g 4688 1132 M +-19 -20 V +.06 g 4669 1112 M +-7 -7 V +.06 g 4662 1105 M +-13 -13 V +.06 g 4649 1092 M +-14 -14 V +.06 g 4635 1078 M +-7 -6 V +.06 g 4628 1072 M +-20 -19 V +.06 g 4608 1053 M +-3 -1 V +.06 g 4605 1052 M +-24 -21 V +.06 g .06 g 4581 1031 M +-28 -20 V +.06 g .06 g 4553 1011 M +-27 -17 V +.06 g 4526 994 M +-5 -3 V +.06 g 4521 991 M +-22 -12 V +.06 g 4499 979 M +-16 -8 V +.06 g 4483 971 M +-11 -5 V +.06 g 4472 966 M +-28 -11 V +.06 g 4444 955 M +-13 -4 V +.06 g 4431 951 M +-14 -5 V +.06 g 4417 946 M +-27 -6 V +.06 g 4390 940 M +-27 -4 V +.06 g 4363 936 M +-28 -2 V +.06 g 4335 934 M +-27 0 V +.06 g 4308 934 M +-27 2 V +.06 g 4281 936 M +-27 4 V +.06 g 4254 940 M +-28 6 V +.06 g 4226 946 M +-17 5 V +.06 g 4209 951 M +-10 2 V +.06 g 4199 953 M +-27 10 V +.06 g 4172 963 M +-22 8 V +.06 g 4150 971 M +-5 2 V +.06 g 4145 973 M +-28 12 V +.06 g 4117 985 M +-14 6 V +.06 g 4103 991 M +-13 7 V +.06 g 4090 998 M +-27 13 V +.06 g 4063 1011 M +-27 15 V +.06 g 4036 1026 M +-11 5 V +.06 g 4025 1031 M +-17 10 V +.06 g 4008 1041 M +-19 11 V +.06 g 3989 1052 M +-8 4 V +.06 g 3981 1056 M +-27 16 V +.06 g .06 g 3954 1072 M +-27 15 V +.06 g 3927 1087 M +-10 5 V +.06 g 3917 1092 M +-18 10 V +.06 g 3899 1102 M +-20 10 V +.06 g 3879 1112 M +-7 3 V +.06 g 3872 1115 M +-27 13 V +.06 g 3845 1128 M +-10 4 V +.06 g 3835 1132 M +-17 8 V +.06 g 3818 1140 M +-28 10 V +.06 g 3790 1150 M +-10 2 V +.06 g 3780 1152 M +-17 5 V +.06 g 3763 1157 M +-27 6 V +.06 g 3736 1163 M +-27 4 V +stroke 3709 1167 M +.06 g 3709 1167 M +-28 1 V +.06 g 3681 1168 M +-27 -2 V +.06 g 3654 1166 M +-27 -4 V +.06 g 3627 1162 M +-27 -6 V +.06 g 3600 1156 M +-12 -4 V +.06 g 3588 1152 M +-16 -4 V +.06 g 3572 1148 M +-27 -11 V +.06 g 3545 1137 M +-11 -5 V +0 g .06 g 6052 2799 M +.06 g 6052 2799 M +-12 -14 V +.06 g 6040 2785 M +-15 -19 V +.06 g 6025 2766 M +-1 -1 V +.06 g 6024 2765 M +-18 -20 V +.06 g 6006 2745 M +-8 -10 V +.06 g 5998 2735 M +-10 -11 V +.06 g 5988 2724 M +-18 -18 V +.06 g 5970 2706 M +-1 -2 V +.06 g 5969 2704 M +-21 -20 V +.06 g 5948 2684 M +-5 -5 V +.06 g 5943 2679 M +-16 -15 V +.06 g 5927 2664 M +-11 -11 V +.06 g 5916 2653 M +-11 -9 V +.06 g 5905 2644 M +-16 -15 V +.06 g 5889 2629 M +-7 -5 V +.06 g 5882 2624 M +-21 -17 V +.06 g 5861 2607 M +-4 -3 V +.06 g 5857 2604 M +-23 -19 V +.06 g 5834 2585 M +-3 -2 V +.06 g 5831 2583 M +-24 -18 V +.06 g 5807 2565 M +-3 -2 V +.06 g 5804 2563 M +-24 -17 V +.06 g 5780 2546 M +-5 -3 V +.06 g 5775 2543 M +-23 -15 V +.06 g 5752 2528 M +-8 -5 V +.06 g 5744 2523 M +-19 -13 V +.06 g 5725 2510 M +-12 -7 V +.06 g 5713 2503 M +-15 -10 V +.06 g 5698 2493 M +-17 -10 V +.06 g 5681 2483 M +-10 -7 V +.06 g 5671 2476 M +-21 -14 V +.06 g 5650 2462 M +-7 -4 V +.06 g 5643 2458 M +-24 -16 V +.06 g 5619 2442 M +-3 -2 V +.06 g 5616 2440 M +-26 -18 V +.06 g 5590 2422 M +-1 -1 V +.06 g 5589 2421 M +-27 -19 V +.06 g .06 g 5562 2402 M +-26 -20 V +.06 g 5536 2382 M +-2 -1 V +.06 g 5534 2381 M +-23 -19 V +.06 g 5511 2362 M +-4 -4 V +.06 g 5507 2358 M +-19 -17 V +.06 g 5488 2341 M +-8 -7 V +.06 g 5480 2334 M +-13 -13 V +stroke 5467 2321 M +.06 g 5467 2321 M +-14 -14 V +.06 g 5453 2307 M +-6 -6 V +.06 g 5447 2301 M +-19 -20 V +.06 g 5428 2281 M +-3 -3 V +.06 g 5425 2278 M +-15 -17 V +.06 g 5410 2261 M +-12 -14 V +.06 g 5398 2247 M +-5 -6 V +.06 g 5393 2241 M +-16 -20 V +.06 g 5377 2221 M +-6 -8 V +.06 g 5371 2213 M +-10 -13 V +.06 g 5361 2200 M +-15 -20 V +.06 g 5346 2180 M +-2 -3 V +.06 g 5344 2177 M +-12 -17 V +.06 g 5332 2160 M +-15 -20 V +.06 g 5317 2140 M +-1 -2 V +.06 g 5316 2138 M +-12 -18 V +.06 g 5304 2120 M +-14 -20 V +.06 g 5290 2100 M +-1 -3 V +.06 g 5289 2097 M +-11 -18 V +.06 g 5278 2079 M +-13 -20 V +.06 g 5265 2059 M +-3 -4 V +.06 g 5262 2055 M +-10 -16 V +.06 g 5252 2039 M +-12 -20 V +.06 g 5240 2019 M +-5 -9 V +.06 g 5235 2010 M +-7 -11 V +.06 g 5228 1999 M +-12 -20 V +.06 g 5216 1979 M +-9 -15 V +.06 g 5207 1964 M +-3 -5 V +.06 g 5204 1959 M +-11 -21 V +.06 g 5193 1938 M +-12 -20 V +.06 g 5181 1918 M +-1 -2 V +.06 g 5180 1916 M +-10 -18 V +.06 g 5170 1898 M +-12 -20 V +.06 g 5158 1878 M +-5 -10 V +.06 g 5153 1868 M +-6 -10 V +.06 g 5147 1858 M +-11 -20 V +.06 g 5136 1838 M +-10 -19 V +.06 g 5126 1819 M +-1 -2 V +.06 g 5125 1817 M +-11 -20 V +.06 g 5114 1797 M +-12 -20 V +.06 g 5102 1777 M +-4 -7 V +.06 g 5098 1770 M +-7 -13 V +.06 g 5091 1757 M +-11 -20 V +.06 g 5080 1737 M +-9 -17 V +.06 g 5071 1720 M +-2 -3 V +.06 g 5069 1717 M +-11 -20 V +.06 g 5058 1697 M +-11 -21 V +.06 g 5047 1676 M +-3 -5 V +.06 g 5044 1671 M +-9 -15 V +.06 g 5035 1656 M +-11 -20 V +.06 g 5024 1636 M +-7 -14 V +.06 g 5017 1622 M +-4 -6 V +stroke 5013 1616 M +.06 g 5013 1616 M +-11 -20 V +0 g .04 g 1708 3551 M +.04 g 1708 3551 M +-8 20 V +.04 g 1700 3571 M +-7 20 V +.04 g 1693 3591 M +-1 3 V +.04 g 1692 3594 M +-6 17 V +.04 g 1686 3611 M +-8 20 V +.04 g 1678 3631 M +-7 21 V +.04 g 1671 3652 M +-6 16 V +.04 g 1665 3668 M +-2 4 V +.04 g 1663 3672 M +-7 20 V +.04 g 1656 3692 M +-7 20 V +.04 g 1649 3712 M +-8 20 V +.04 g 1641 3732 M +-3 10 V +.04 g 1638 3742 M +-4 10 V +.04 g 1634 3752 M +-8 20 V +.04 g 1626 3772 M +-7 21 V +.04 g 1619 3793 M +-8 20 V +.04 g 1611 3813 M +-1 2 V +.04 g 1610 3815 M +-6 18 V +.04 g 1604 3833 M +-8 20 V +.04 g 1596 3853 M +-7 20 V +.04 g 1589 3873 M +-6 15 V +.04 g 1583 3888 M +-2 5 V +.04 g 1581 3893 M +-8 21 V +.04 g 1573 3914 M +-7 20 V +.04 g 1566 3934 M +-8 20 V +.04 g 1558 3954 M +-2 6 V +.04 g 1556 3960 M +-6 14 V +.04 g 1550 3974 M +-7 20 V +.04 g 1543 3994 M +-8 20 V +.04 g 1535 4014 M +-6 17 V +.04 g 1529 4031 M +-2 4 V +.04 g 1527 4035 M +-8 20 V +.04 g 1519 4055 M +-8 20 V +.04 g 1511 4075 M +-7 20 V +.04 g 1504 4095 M +-3 6 V +.04 g 1501 4101 M +-5 14 V +.04 g 1496 4115 M +-8 20 V +.04 g 1488 4135 M +-8 20 V +.04 g 1480 4155 M +-6 15 V +.04 g 1474 4170 M +-2 6 V +.04 g 1472 4176 M +-8 20 V +.04 g 1464 4196 M +-8 20 V +.04 g 1456 4216 M +-8 20 V +.04 g 1448 4236 M +-1 2 V +.04 g 1447 4238 M +-8 18 V +.04 g 1439 4256 M +-8 20 V +.04 g 1431 4276 M +-8 21 V +.04 g 1423 4297 M +-3 8 V +.04 g 1420 4305 M +-6 12 V +.04 g 1414 4317 M +-8 20 V +.04 g 1406 4337 M +-8 20 V +stroke 1398 4357 M +.04 g 1398 4357 M +-6 13 V +.04 g 1392 4370 M +-3 7 V +.04 g 1389 4377 M +-8 20 V +.04 g 1381 4397 M +-9 20 V +.04 g 1372 4417 M +-7 17 V +.04 g 1365 4434 M +-2 4 V +.04 g 1363 4438 M +-8 20 V +.04 g 1355 4458 M +-9 20 V +.04 g 1346 4478 M +-8 19 V +.04 g 1338 4497 M +-1 1 V +.04 g 1337 4498 M +-9 20 V +.04 g 1328 4518 M +-9 20 V +.04 g 1319 4538 M +-8 20 V +.04 g 1311 4558 M +-1 1 V +.04 g 1310 4559 M +-9 20 V +.04 g 1301 4579 M +-9 20 V +.04 g 1292 4599 M +-9 18 V +.04 g 1283 4617 M +0 2 V +0 g .04 g 3023 2785 M +.04 g 3023 2785 M +-21 20 V +.04 g 3002 2805 M +-2 2 V +.04 g 3000 2807 M +-19 18 V +.04 g 2981 2825 M +-8 8 V +.04 g 2973 2833 M +-14 12 V +.04 g 2959 2845 M +-13 12 V +.04 g 2946 2857 M +-11 9 V +.04 g 2935 2866 M +-17 14 V +.04 g 2918 2880 M +-8 6 V +.04 g 2910 2886 M +-19 14 V +.04 g 2891 2900 M +-8 6 V +.04 g 2883 2906 M +-19 14 V +.04 g 2864 2920 M +-10 6 V +.04 g 2854 2926 M +-17 11 V +.04 g 2837 2937 M +-16 9 V +.04 g 2821 2946 M +-12 7 V +.04 g 2809 2953 M +-25 13 V +.04 g 2784 2966 M +-2 1 V +.04 g 2782 2967 M +-27 13 V +.04 g 2755 2980 M +-17 6 V +.04 g 2738 2986 M +-10 5 V +.04 g 2728 2991 M +-28 9 V +.04 g 2700 3000 M +-24 7 V +.04 g 2676 3007 M +-3 1 V +.04 g 2673 3008 M +-27 6 V +.04 g 2646 3014 M +-27 4 V +.04 g 2619 3018 M +-28 3 V +.04 g 2591 3021 M +-27 2 V +.04 g 2564 3023 M +-27 0 V +.04 g 2537 3023 M +-27 -1 V +.04 g 2510 3022 M +-28 -3 V +.04 g 2482 3019 M +-27 -4 V +.04 g 2455 3015 M +-27 -4 V +.04 g 2428 3011 M +-19 -4 V +stroke 2409 3007 M +.04 g 2409 3007 M +-8 -2 V +.04 g 2401 3005 M +-28 -7 V +.04 g 2373 2998 M +-27 -8 V +.04 g 2346 2990 M +-12 -4 V +.04 g 2334 2986 M +-15 -5 V +.04 g 2319 2981 M +-27 -9 V +.04 g 2292 2972 M +-18 -6 V +.04 g 2274 2966 M +-10 -4 V +.04 g 2264 2962 M +-27 -10 V +.04 g 2237 2952 M +-17 -6 V +.04 g 2220 2946 M +-10 -4 V +.04 g 2210 2942 M +-27 -10 V +.04 g 2183 2932 M +-17 -6 V +.04 g 2166 2926 M +-11 -4 V +.04 g 2155 2922 M +-27 -10 V +.04 g 2128 2912 M +-22 -6 V +.04 g 2106 2906 M +-5 -2 V +.04 g 2101 2904 M +-27 -7 V +.04 g 2074 2897 M +-28 -3 V +.04 g 2046 2894 M +-27 2 V +.04 g 2019 2896 M +-23 10 V +.04 g 1996 2906 M +-4 2 V +.04 g 1992 2908 M +-21 18 V +.04 g 1971 2926 M +-6 6 V +.04 g 1965 2932 M +-11 14 V +.04 g 1954 2946 M +-13 20 V +.04 g 1941 2966 M +-4 6 V +.04 g 1937 2972 M +-7 14 V +.04 g 1930 2986 M +-11 21 V +.04 g 1919 3007 M +-9 18 V +.04 g 1910 3025 M +-1 2 V +.04 g 1909 3027 M +-9 20 V +.04 g 1900 3047 M +-9 20 V +.04 g 1891 3067 M +-8 20 V +.04 g .04 g 1883 3087 M +-9 20 V +.04 g 1874 3107 M +-8 21 V +.04 g 1866 3128 M +-8 20 V +.04 g 1858 3148 M +-2 6 V +.04 g 1856 3154 M +-6 14 V +.04 g 1850 3168 M +-8 20 V +.04 g 1842 3188 M +-7 20 V +.04 g 1835 3208 M +-7 17 V +.04 g 1828 3225 M +-1 3 V +.04 g 1827 3228 M +-8 20 V +.04 g 1819 3248 M +-7 21 V +.04 g 1812 3269 M +-8 20 V +.04 g 1804 3289 M +-3 8 V +.04 g 1801 3297 M +-4 12 V +.04 g 1797 3309 M +-8 20 V +.04 g 1789 3329 M +-7 20 V +.04 g 1782 3349 M +-8 20 V +.04 g 1774 3369 M +0 2 V +stroke 1774 3371 M +.04 g 1774 3371 M +-7 19 V +.04 g 1767 3390 M +-8 20 V +.04 g 1759 3410 M +-7 20 V +.04 g 1752 3430 M +-5 15 V +.04 g 1747 3445 M +-2 5 V +.04 g 1745 3450 M +-8 20 V +.04 g 1737 3470 M +-7 20 V +.04 g 1730 3490 M +-7 20 V +.04 g 1723 3510 M +-4 9 V +.04 g 1719 3519 M +-4 12 V +.04 g 1715 3531 M +-7 20 V +0 g .04 g 3993 2362 M +.04 g 3993 2362 M +-12 -20 V +.04 g 3981 2342 M +0 -1 V +.04 g 3981 2341 M +-13 -20 V +.04 g 3968 2321 M +-13 -20 V +.04 g 3955 2301 M +-1 -2 V +.04 g 3954 2299 M +-12 -18 V +.04 g 3942 2281 M +-13 -20 V +.04 g 3929 2261 M +-2 -5 V +.04 g 3927 2256 M +-11 -15 V +.04 g 3916 2241 M +-12 -20 V +.04 g 3904 2221 M +-5 -8 V +.04 g 3899 2213 M +-8 -13 V +.04 g 3891 2200 M +-13 -20 V +.04 g 3878 2180 M +-6 -10 V +.04 g 3872 2170 M +-7 -10 V +.04 g 3865 2160 M +-13 -20 V +.04 g 3852 2140 M +-7 -12 V +.04 g 3845 2128 M +-6 -8 V +.04 g 3839 2120 M +-13 -20 V +.04 g 3826 2100 M +-8 -13 V +.04 g 3818 2087 M +-6 -8 V +.04 g 3812 2079 M +-14 -20 V +.04 g 3798 2059 M +-8 -12 V +.04 g 3790 2047 M +-6 -8 V +.04 g 3784 2039 M +-15 -20 V +.04 g 3769 2019 M +-6 -9 V +.04 g 3763 2010 M +-11 -11 V +.04 g 3752 1999 M +-16 -20 V +.04 g 3736 1979 M +-1 0 V +.04 g 3735 1979 M +-23 -20 V +.04 g 3712 1959 M +-3 -3 V +.04 g 3709 1956 M +-28 -11 V +.04 g 3681 1945 M +-27 4 V +.04 g 3654 1949 M +-13 10 V +.04 g 3641 1959 M +-14 8 V +.04 g 3627 1967 M +-10 12 V +.04 g 3617 1979 M +-17 17 V +.04 g 3600 1996 M +-3 3 V +.04 g 3597 1999 M +-16 20 V +.04 g 3581 2019 M +-9 10 V +.04 g 3572 2029 M +-6 10 V +stroke 3566 2039 M +.04 g 3566 2039 M +-15 20 V +.04 g 3551 2059 M +-6 8 V +.04 g 3545 2067 M +-8 12 V +.04 g 3537 2079 M +-14 21 V +.04 g 3523 2100 M +-5 6 V +.04 g 3518 2106 M +-9 14 V +.04 g 3509 2120 M +-13 20 V +.04 g 3496 2140 M +-5 7 V +.04 g 3491 2147 M +-9 13 V +.04 g 3482 2160 M +-13 20 V +.04 g 3469 2180 M +-6 9 V +.04 g 3463 2189 M +-7 11 V +.04 g 3456 2200 M +-13 21 V +.04 g 3443 2221 M +-7 9 V +.04 g 3436 2230 M +-7 11 V +.04 g 3429 2241 M +-13 20 V +.04 g 3416 2261 M +-7 11 V +.04 g 3409 2272 M +-6 9 V +.04 g 3403 2281 M +-13 20 V +.04 g 3390 2301 M +-8 13 V +.04 g 3382 2314 M +-5 7 V +.04 g 3377 2321 M +-14 20 V +.04 g 3363 2341 M +-9 14 V +.04 g 3354 2355 M +-4 7 V +.04 g 3350 2362 M +-13 20 V +.04 g 3337 2382 M +-10 14 V +.04 g 3327 2396 M +-4 6 V +.04 g 3323 2402 M +-14 20 V +.04 g 3309 2422 M +-9 14 V +.04 g 3300 2436 M +-5 6 V +.04 g 3295 2442 M +-14 20 V +.04 g 3281 2462 M +-8 13 V +.04 g 3273 2475 M +-6 8 V +.04 g 3267 2483 M +-14 20 V +.04 g 3253 2503 M +-8 11 V +.04 g 3245 2514 M +-6 9 V +.04 g 3239 2523 M +-15 20 V +.04 g 3224 2543 M +-6 8 V +.04 g 3218 2551 M +-9 12 V +.04 g 3209 2563 M +-15 20 V +.04 g 3194 2583 M +-3 5 V +.04 g 3191 2588 M +-12 16 V +.04 g 3179 2604 M +-15 19 V +.04 g 3164 2623 M +-1 1 V +.04 g 3163 2624 M +-16 20 V +.04 g 3147 2644 M +-11 13 V +.04 g 3136 2657 M +-5 7 V +.04 g 3131 2664 M +-17 20 V +.04 g 3114 2684 M +-5 6 V +.04 g 3109 2690 M +-12 14 V +.04 g 3097 2704 M +-15 18 V +.04 g 3082 2722 M +-3 2 V +stroke 3079 2724 M +.04 g 3079 2724 M +-18 21 V +.04 g 3061 2745 M +-6 7 V +.04 g 3055 2752 M +-13 13 V +.04 g 3042 2765 M +-15 15 V +.04 g 3027 2780 M +-4 5 V +0 g .04 g 5425 3071 M +.04 g 5425 3071 M +-2 -4 V +.04 g 5423 3067 M +-11 -20 V +.04 g 5412 3047 M +-13 -20 V +.04 g 5399 3027 M +-1 -2 V +.04 g 5398 3025 M +-15 -18 V +.04 g 5383 3007 M +-12 -13 V +.04 g 5371 2994 M +-12 -8 V +.04 g 5359 2986 M +-15 -9 V +.04 g 5344 2977 M +-28 -6 V +.04 g 5316 2971 M +-27 1 V +.04 g 5289 2972 M +-27 4 V +.04 g 5262 2976 M +-27 7 V +.04 g 5235 2983 M +-13 3 V +.04 g 5222 2986 M +-15 4 V +.04 g 5207 2990 M +-27 9 V +.04 g 5180 2999 M +-22 8 V +.04 g 5158 3007 M +-5 1 V +.04 g 5153 3008 M +-27 9 V +.04 g 5126 3017 M +-28 9 V +.04 g 5098 3026 M +-2 1 V +.04 g 5096 3027 M +-25 8 V +.04 g 5071 3035 M +-27 8 V +.04 g 5044 3043 M +-15 4 V +.04 g 5029 3047 M +-12 3 V +.04 g 5017 3050 M +-28 7 V +.04 g 4989 3057 M +-27 6 V +.04 g 4962 3063 M +-22 4 V +.04 g 4940 3067 M +-5 1 V +.04 g 4935 3068 M +-27 4 V +.04 g 4908 3072 M +-28 3 V +.04 g 4880 3075 M +-27 1 V +.04 g 4853 3076 M +-27 1 V +.04 g 4826 3077 M +-27 -1 V +.04 g 4799 3076 M +-28 -3 V +.04 g 4771 3073 M +-27 -3 V +.04 g 4744 3070 M +-13 -3 V +.04 g 4731 3067 M +-14 -3 V +.04 g 4717 3064 M +-27 -7 V +.04 g 4690 3057 M +-28 -8 V +.04 g 4662 3049 M +-6 -2 V +.04 g 4656 3047 M +-21 -8 V +.04 g 4635 3039 M +-27 -12 V +.04 g 4608 3027 M +-2 0 V +.04 g 4606 3027 M +-25 -13 V +.04 g 4581 3014 M +-14 -7 V +.04 g 4567 3007 M +-14 -8 V +.04 g 4553 2999 M +-21 -13 V +stroke 4532 2986 M +.04 g 4532 2986 M +-6 -3 V +.04 g 4526 2983 M +-24 -17 V +.04 g 4502 2966 M +-3 -2 V +.04 g 4499 2964 M +-25 -18 V +.04 g 4474 2946 M +-2 -1 V +.04 g 4472 2945 M +-24 -19 V +.04 g 4448 2926 M +-4 -3 V +.04 g 4444 2923 M +-20 -17 V +.04 g 4424 2906 M +-7 -6 V +.04 g 4417 2900 M +-15 -14 V +.04 g 4402 2886 M +-12 -11 V +.04 g 4390 2875 M +-10 -9 V +.04 g 4380 2866 M +-17 -17 V +.04 g 4363 2849 M +-4 -4 V +.04 g 4359 2845 M +-19 -20 V +.04 g 4340 2825 M +-5 -4 V +.04 g 4335 2821 M +-14 -16 V +.04 g 4321 2805 M +-13 -14 V +.04 g 4308 2791 M +-6 -6 V +.04 g 4302 2785 M +-17 -20 V +.04 g 4285 2765 M +-4 -5 V +.04 g 4281 2760 M +-14 -15 V +.04 g 4267 2745 M +-13 -17 V +.04 g 4254 2728 M +-3 -4 V +.04 g 4251 2724 M +-17 -20 V +.04 g 4234 2704 M +-8 -10 V +.04 g 4226 2694 M +-8 -10 V +.04 g 4218 2684 M +-15 -20 V +.04 g 4203 2664 M +-4 -5 V +.04 g 4199 2659 M +-12 -15 V +.04 g 4187 2644 M +-15 -20 V +.04 g 4172 2624 M +0 -1 V +.04 g 4172 2623 M +-15 -19 V +.04 g 4157 2604 M +-12 -18 V +.04 g 4145 2586 M +-2 -3 V +.04 g 4143 2583 M +-15 -20 V +.04 g 4128 2563 M +-11 -16 V +.04 g 4117 2547 M +-3 -4 V +.04 g 4114 2543 M +-14 -20 V +.04 g 4100 2523 M +-10 -15 V +.04 g 4090 2508 M +-3 -5 V +.04 g 4087 2503 M +-14 -20 V +.04 g 4073 2483 M +-10 -16 V +.04 g 4063 2467 M +-4 -5 V +.04 g 4059 2462 M +-13 -20 V +.04 g 4046 2442 M +-10 -16 V +.04 g 4036 2426 M +-3 -4 V +.04 g 4033 2422 M +-13 -20 V +.04 g 4020 2402 M +-12 -18 V +.04 g 4008 2384 M +-1 -2 V +.04 g 4007 2382 M +-14 -20 V +0 g .04 g 6021 4619 M +.04 g 6021 4619 M +-9 -20 V +stroke 6012 4599 M +.04 g 6012 4599 M +-8 -20 V +.04 g 6004 4579 M +-6 -14 V +.04 g 5998 4565 M +-3 -6 V +.04 g 5995 4559 M +-8 -21 V +.04 g 5987 4538 M +-9 -20 V +.04 g 5978 4518 M +-8 -18 V +.04 g 5970 4500 M +0 -2 V +.04 g 5970 4498 M +-9 -20 V +.04 g 5961 4478 M +-8 -20 V +.04 g 5953 4458 M +-8 -20 V +.04 g 5945 4438 M +-2 -4 V +.04 g 5943 4434 M +-6 -17 V +.04 g 5937 4417 M +-9 -20 V +.04 g 5928 4397 M +-8 -20 V +.04 g 5920 4377 M +-4 -11 V +.04 g 5916 4366 M +-4 -9 V +.04 g 5912 4357 M +-8 -20 V +.04 g 5904 4337 M +-8 -20 V +.04 g 5896 4317 M +-7 -20 V +.04 g 5889 4297 M +-1 0 V +.04 g 5888 4297 M +-8 -21 V +.04 g 5880 4276 M +-7 -20 V +.04 g 5873 4256 M +-8 -20 V +.04 g 5865 4236 M +-4 -9 V +.04 g 5861 4227 M +-4 -11 V +.04 g 5857 4216 M +-8 -20 V +.04 g 5849 4196 M +-8 -20 V +.04 g 5841 4176 M +-7 -20 V +.04 g 5834 4156 M +0 -1 V +.04 g 5834 4155 M +-8 -20 V +.04 g 5826 4135 M +-8 -20 V +.04 g 5818 4115 M +-7 -20 V +.04 g 5811 4095 M +-4 -11 V +.04 g 5807 4084 M +-4 -9 V +.04 g 5803 4075 M +-7 -20 V +.04 g 5796 4055 M +-8 -20 V +.04 g 5788 4035 M +-7 -21 V +.04 g 5781 4014 M +-1 -3 V +.04 g 5780 4011 M +-7 -17 V +.04 g 5773 3994 M +-7 -20 V +.04 g 5766 3974 M +-8 -20 V +.04 g 5758 3954 M +-6 -16 V +.04 g 5752 3938 M +-1 -4 V +.04 g 5751 3934 M +-8 -20 V +.04 g 5743 3914 M +-7 -21 V +.04 g 5736 3893 M +-7 -20 V +.04 g 5729 3873 M +-4 -10 V +.04 g 5725 3863 M +-4 -10 V +.04 g 5721 3853 M +-7 -20 V +.04 g 5714 3833 M +-7 -20 V +.04 g 5707 3813 M +-8 -20 V +.04 g 5699 3793 M +-1 -5 V +stroke 5698 3788 M +.04 g 5698 3788 M +-6 -16 V +.04 g 5692 3772 M +-7 -20 V +.04 g 5685 3752 M +-8 -20 V +.04 g 5677 3732 M +-6 -19 V +.04 g 5671 3713 M +-1 -1 V +.04 g 5670 3712 M +-7 -20 V +.04 g 5663 3692 M +-7 -20 V +.04 g 5656 3672 M +-8 -20 V +.04 g 5648 3652 M +-5 -15 V +.04 g 5643 3637 M +-2 -6 V +.04 g 5641 3631 M +-7 -20 V +.04 g 5634 3611 M +-7 -20 V +.04 g 5627 3591 M +-8 -20 V +.04 g 5619 3571 M +-3 -10 V +.04 g 5616 3561 M +-4 -10 V +.04 g 5612 3551 M +-7 -20 V +.04 g 5605 3531 M +-7 -21 V +.04 g 5598 3510 M +-8 -20 V +.04 g 5590 3490 M +-1 -4 V +.04 g 5589 3486 M +-6 -16 V +.04 g 5583 3470 M +-7 -20 V +.04 g 5576 3450 M +-8 -20 V +.04 g 5568 3430 M +-6 -19 V +.04 g 5562 3411 M +-1 -1 V +.04 g 5561 3410 M +-7 -20 V +.04 g 5554 3390 M +-8 -21 V +.04 g 5546 3369 M +-7 -20 V +.04 g 5539 3349 M +-5 -13 V +.04 g 5534 3336 M +-3 -7 V +.04 g 5531 3329 M +-7 -20 V +.04 g 5524 3309 M +-8 -20 V +.04 g 5516 3289 M +-7 -20 V +.04 g 5509 3269 M +-2 -5 V +.04 g 5507 3264 M +-6 -16 V +.04 g 5501 3248 M +-8 -20 V +.04 g 5493 3228 M +-8 -20 V +.04 g 5485 3208 M +-5 -14 V +.04 g 5480 3194 M +-3 -6 V +.04 g 5477 3188 M +-8 -20 V +.04 g 5469 3168 M +-8 -20 V +.04 g 5461 3148 M +-8 -19 V +.04 g 5453 3129 M +-1 -1 V +.04 g 5452 3128 M +-9 -21 V +.04 g 5443 3107 M +-10 -20 V +.04 g 5433 3087 M +-8 -16 V +0 g .04 g 739 4075 M +.04 g 739 4075 M +-1 2 V +.04 g 738 4077 M +-6 18 V +.04 g 732 4095 M +-6 20 V +.04 g 726 4115 M +-7 20 V +.04 g 719 4135 M +-6 20 V +.04 g 713 4155 M +-2 6 V +.04 g 711 4161 M +-5 15 V +stroke 706 4176 M +.04 g 706 4176 M +-6 20 V +.04 g 700 4196 M +-6 20 V +.04 g 694 4216 M +-7 20 V +.04 g 687 4236 M +-3 11 V +.04 g 684 4247 M +-3 9 V +.04 g 681 4256 M +-6 20 V +.04 g 675 4276 M +-7 21 V +.04 g 668 4297 M +-6 20 V +.04 g 662 4317 M +-5 18 V +.04 g 657 4335 M +-1 2 V +.04 g 656 4337 M +-6 20 V +.04 g 650 4357 M +-6 20 V +.04 g 644 4377 M +-6 20 V +.04 g 638 4397 M +-7 20 V +.04 g 631 4417 M +-2 8 V +.04 g 629 4425 M +-4 13 V +.04 g 625 4438 M +-5 20 V +.04 g 620 4458 M +-6 20 V +.04 g 614 4478 M +-7 20 V +.04 g 607 4498 M +-5 18 V +0 g .04 g 1583 2722 M +.04 g 1583 2722 M +-8 2 V +.04 g 1575 2724 M +-19 6 V +.04 g 1556 2730 M +-27 9 V +.04 g 1529 2739 M +-14 6 V +.04 g 1515 2745 M +-14 5 V +.04 g 1501 2750 M +-27 13 V +.04 g 1474 2763 M +-2 2 V +.04 g 1472 2765 M +-25 14 V +.04 g 1447 2779 M +-9 6 V +.04 g 1438 2785 M +-18 12 V +.04 g 1420 2797 M +-11 8 V +.04 g 1409 2805 M +-17 12 V +.04 g 1392 2817 M +-10 8 V +.04 g 1382 2825 M +-17 14 V +.04 g 1365 2839 M +-6 6 V +.04 g 1359 2845 M +-21 19 V +.04 g 1338 2864 M +-1 2 V +.04 g 1337 2866 M +-20 20 V +.04 g 1317 2886 M +-6 6 V +.04 g 1311 2892 M +-13 14 V +.04 g 1298 2906 M +-15 16 V +.04 g 1283 2922 M +-3 4 V +.04 g 1280 2926 M +-17 20 V +.04 g 1263 2946 M +-7 9 V +.04 g 1256 2955 M +-9 11 V +.04 g 1247 2966 M +-16 20 V +.04 g 1231 2986 M +-2 4 V +.04 g 1229 2990 M +-12 17 V +.04 g 1217 3007 M +-15 20 V +.04 g 1202 3027 M +0 1 V +.04 g 1202 3028 M +-13 19 V +.04 g 1189 3047 M +-14 20 V +stroke 1175 3067 M +.04 g 1175 3067 M +-1 1 V +.04 g 1174 3068 M +-11 19 V +.04 g 1163 3087 M +-13 20 V +.04 g 1150 3107 M +-3 5 V +.04 g 1147 3112 M +-9 16 V +.04 g 1138 3128 M +-12 20 V +.04 g 1126 3148 M +-6 10 V +.04 g 1120 3158 M +-6 10 V +.04 g 1114 3168 M +-11 20 V +.04 g 1103 3188 M +-10 18 V +.04 g 1093 3206 M +-2 2 V +.04 g 1091 3208 M +-10 20 V +.04 g 1081 3228 M +-11 20 V +.04 g 1070 3248 M +-5 10 V +.04 g 1065 3258 M +-5 11 V +.04 g 1060 3269 M +-10 20 V +.04 g 1050 3289 M +-11 20 V +.04 g 1039 3309 M +-1 3 V +.04 g 1038 3312 M +-8 17 V +.04 g 1030 3329 M +-10 20 V +.04 g 1020 3349 M +-9 19 V +.04 g 1011 3368 M +-1 1 V +.04 g 1010 3369 M +-9 21 V +.04 g 1001 3390 M +-9 20 V +.04 g 992 3410 M +-8 18 V +.04 g 984 3428 M +-1 2 V +.04 g 983 3430 M +-9 20 V +.04 g 974 3450 M +-9 20 V +.04 g 965 3470 M +-9 20 V +.04 g .04 g 956 3490 M +-8 20 V +.04 g 948 3510 M +-9 21 V +.04 g 939 3531 M +-8 20 V +.04 g 931 3551 M +-2 4 V +.04 g 929 3555 M +-7 16 V +.04 g 922 3571 M +-8 20 V +.04 g 914 3591 M +-8 20 V +.04 g 906 3611 M +-4 11 V +.04 g 902 3622 M +-4 9 V +.04 g 898 3631 M +-8 21 V +.04 g 890 3652 M +-8 20 V +.04 g 882 3672 M +-7 20 V +.04 g 875 3692 M +-1 0 V +.04 g 874 3692 M +-7 20 V +.04 g 867 3712 M +-8 20 V +.04 g 859 3732 M +-7 20 V +.04 g 852 3752 M +-5 12 V +.04 g 847 3764 M +-3 8 V +.04 g 844 3772 M +-7 21 V +.04 g 837 3793 M +-7 20 V +.04 g 830 3813 M +-8 20 V +.04 g 822 3833 M +-2 6 V +.04 g 820 3839 M +-5 14 V +stroke 815 3853 M +.04 g 815 3853 M +-7 20 V +.04 g 808 3873 M +-7 20 V +.04 g 801 3893 M +-7 21 V +.04 g 794 3914 M +-1 2 V +.04 g 793 3916 M +-6 18 V +.04 g 787 3934 M +-7 20 V +.04 g 780 3954 M +-7 20 V +.04 g 773 3974 M +-7 20 V +.04 g 766 3994 M +-1 1 V +.04 g 765 3995 M +-6 19 V +.04 g 759 4014 M +-6 21 V +.04 g 753 4035 M +-7 20 V +.04 g 746 4055 M +-7 20 V +0 g .04 g 2547 1455 M +.04 g 2547 1455 M +-10 15 V +.04 g 2537 1470 M +-3 5 V +.04 g 2534 1475 M +-13 20 V +.04 g 2521 1495 M +-11 19 V +.04 g 2510 1514 M +-1 1 V +.04 g 2509 1515 M +-12 20 V +.04 g 2497 1535 M +-12 20 V +.04 g 2485 1555 M +-3 5 V +.04 g 2482 1560 M +-9 16 V +.04 g 2473 1576 M +-11 20 V +.04 g 2462 1596 M +-7 13 V +.04 g 2455 1609 M +-4 7 V +.04 g 2451 1616 M +-11 20 V +.04 g 2440 1636 M +-11 20 V +.04 g 2429 1656 M +-1 3 V +.04 g 2428 1659 M +-9 17 V +.04 g 2419 1676 M +-10 21 V +.04 g 2409 1697 M +-8 15 V +.04 g 2401 1712 M +-3 5 V +.04 g 2398 1717 M +-10 20 V +.04 g 2388 1737 M +-10 20 V +.04 g 2378 1757 M +-5 10 V +.04 g 2373 1767 M +-5 10 V +.04 g 2368 1777 M +-9 20 V +.04 g 2359 1797 M +-10 20 V +.04 g 2349 1817 M +-3 7 V +.04 g 2346 1824 M +-6 14 V +.04 g 2340 1838 M +-10 20 V +.04 g 2330 1858 M +-9 20 V +.04 g 2321 1878 M +-2 5 V +.04 g 2319 1883 M +-7 15 V +.04 g 2312 1898 M +-9 20 V +.04 g 2303 1918 M +-9 20 V +.04 g 2294 1938 M +-2 5 V +.04 g 2292 1943 M +-7 16 V +.04 g 2285 1959 M +-9 20 V +.04 g 2276 1979 M +-9 20 V +.04 g 2267 1999 M +-3 6 V +.04 g 2264 2005 M +-6 14 V +stroke 2258 2019 M +.04 g 2258 2019 M +-9 20 V +.04 g 2249 2039 M +-8 20 V +.04 g 2241 2059 M +-4 9 V +.04 g 2237 2068 M +-5 11 V +.04 g 2232 2079 M +-8 21 V +.04 g 2224 2100 M +-9 20 V +.04 g 2215 2120 M +-5 13 V +.04 g 2210 2133 M +-3 7 V +.04 g 2207 2140 M +-9 20 V +.04 g 2198 2160 M +-8 20 V +.04 g 2190 2180 M +-7 18 V +.04 g 2183 2198 M +-1 2 V +.04 g 2182 2200 M +-9 21 V +.04 g 2173 2221 M +-8 20 V +.04 g 2165 2241 M +-8 20 V +.04 g 2157 2261 M +-2 4 V +.04 g 2155 2265 M +-6 16 V +.04 g 2149 2281 M +-9 20 V +.04 g 2140 2301 M +-8 20 V +.04 g 2132 2321 M +-4 11 V +.04 g 2128 2332 M +-4 9 V +.04 g 2124 2341 M +-8 21 V +.04 g 2116 2362 M +-9 20 V +.04 g 2107 2382 M +-6 16 V +.04 g 2101 2398 M +-2 4 V +.04 g 2099 2402 M +-8 20 V +.04 g 2091 2422 M +-8 20 V +.04 g 2083 2442 M +-9 20 V +.04 g 2074 2462 M +0 2 V +.04 g 2074 2464 M +-8 19 V +.04 g 2066 2483 M +-9 20 V +.04 g 2057 2503 M +-9 20 V +.04 g 2048 2523 M +-2 5 V +.04 g 2046 2528 M +-7 15 V +.04 g 2039 2543 M +-9 20 V +.04 g 2030 2563 M +-9 20 V +.04 g 2021 2583 M +-2 4 V +.04 g 2019 2587 M +-8 17 V +.04 g 2011 2604 M +-11 20 V +.04 g 2000 2624 M +-8 15 V +.04 g 1992 2639 M +-4 5 V +.04 g 1988 2644 M +-13 20 V +.04 g 1975 2664 M +-10 14 V +.04 g 1965 2678 M +-7 6 V +.04 g 1958 2684 M +-21 19 V +.04 g 1937 2703 M +-2 1 V +.04 g 1935 2704 M +-25 12 V +.04 g 1910 2716 M +-27 5 V +.04 g 1883 2721 M +-27 0 V +.04 g 1856 2721 M +-28 -2 V +.04 g 1828 2719 M +-27 -2 V +.04 g 1801 2717 M +-27 -3 V +stroke 1774 2714 M +.04 g 1774 2714 M +-27 -2 V +.04 g 1747 2712 M +-28 -2 V +.04 g 1719 2710 M +-27 0 V +.04 g 1692 2710 M +-27 1 V +.04 g 1665 2711 M +-27 2 V +.04 g 1638 2713 M +-28 4 V +.04 g 1610 2717 M +-27 5 V +0 g .04 g 3828 1555 M +.04 g 3828 1555 M +-10 14 V +.04 g 3818 1569 M +-7 7 V +.04 g 3811 1576 M +-16 20 V +.04 g 3795 1596 M +-5 6 V +.04 g 3790 1602 M +-12 14 V +.04 g 3778 1616 M +-15 18 V +.04 g 3763 1634 M +-3 2 V +.04 g 3760 1636 M +-20 20 V +.04 g 3740 1656 M +-4 5 V +.04 g 3736 1661 M +-21 15 V +.04 g 3715 1676 M +-6 6 V +.04 g 3709 1682 M +-28 9 V +.04 g 3681 1691 M +-27 -6 V +.04 g 3654 1685 M +-12 -9 V +.04 g 3642 1676 M +-15 -9 V +.04 g 3627 1667 M +-10 -11 V +.04 g 3617 1656 M +-17 -16 V +.04 g 3600 1640 M +-3 -4 V +.04 g 3597 1636 M +-17 -20 V +.04 g 3580 1616 M +-8 -8 V +.04 g 3572 1608 M +-9 -12 V +.04 g 3563 1596 M +-16 -20 V +.04 g 3547 1576 M +-2 -2 V +.04 g 3545 1574 M +-14 -19 V +.04 g 3531 1555 M +-13 -16 V +.04 g 3518 1539 M +-3 -4 V +.04 g 3515 1535 M +-15 -20 V +.04 g 3500 1515 M +-9 -12 V +.04 g 3491 1503 M +-7 -8 V +.04 g 3484 1495 M +-15 -20 V +.04 g 3469 1475 M +-6 -7 V +.04 g 3463 1468 M +-10 -13 V +.04 g 3453 1455 M +-16 -20 V +.04 g 3437 1435 M +-1 -1 V +.04 g 3436 1434 M +-16 -20 V +.04 g 3420 1414 M +-11 -13 V +.04 g 3409 1401 M +-5 -7 V +.04 g 3404 1394 M +-17 -20 V +.04 g 3387 1374 M +-5 -6 V +.04 g 3382 1368 M +-13 -14 V +.04 g 3369 1354 M +-15 -16 V +.04 g 3354 1338 M +-3 -4 V +.04 g 3351 1334 M +-19 -20 V +.04 g 3332 1314 M +-5 -6 V +.04 g 3327 1308 M +-15 -15 V +stroke 3312 1293 M +.04 g 3312 1293 M +-12 -12 V +.04 g 3300 1281 M +-8 -8 V +.04 g 3292 1273 M +-19 -18 V +.04 g 3273 1255 M +-3 -2 V +.04 g 3270 1253 M +-23 -20 V +.04 g 3247 1233 M +-2 -2 V +.04 g 3245 1231 M +-23 -18 V +.04 g 3222 1213 M +-4 -3 V +.04 g 3218 1210 M +-23 -17 V +.04 g 3195 1193 M +-4 -3 V +.04 g 3191 1190 M +-27 -18 V +.04 g .04 g 3164 1172 M +-28 -15 V +.04 g 3136 1157 M +-10 -5 V +.04 g 3126 1152 M +-17 -8 V +.04 g 3109 1144 M +-27 -10 V +.04 g 3082 1134 M +-5 -2 V +.04 g 3077 1132 M +-22 -7 V +.04 g 3055 1125 M +-28 -5 V +.04 g 3027 1120 M +-27 -3 V +.04 g 3000 1117 M +-27 -1 V +.04 g 2973 1116 M +-27 2 V +.04 g 2946 1118 M +-28 5 V +.04 g 2918 1123 M +-27 7 V +.04 g 2891 1130 M +-5 2 V +.04 g 2886 1132 M +-22 8 V +.04 g 2864 1140 M +-26 12 V +.04 g 2838 1152 M +-1 1 V +.04 g 2837 1153 M +-28 16 V +.04 g 2809 1169 M +-5 3 V +.04 g 2804 1172 M +-22 15 V +.04 g 2782 1187 M +-7 6 V +.04 g 2775 1193 M +-20 15 V +.04 g 2755 1208 M +-6 5 V +.04 g 2749 1213 M +-21 18 V +.04 g 2728 1231 M +-2 2 V +.04 g 2726 1233 M +-21 20 V +.04 g 2705 1253 M +-5 5 V +.04 g 2700 1258 M +-14 15 V +.04 g 2686 1273 M +-13 14 V +.04 g 2673 1287 M +-6 6 V +.04 g 2667 1293 M +-17 21 V +.04 g 2650 1314 M +-4 4 V +.04 g 2646 1318 M +-13 16 V +.04 g 2633 1334 M +-14 18 V +.04 g 2619 1352 M +-2 2 V +.04 g 2617 1354 M +-15 20 V +.04 g 2602 1374 M +-11 15 V +.04 g 2591 1389 M +-3 5 V +.04 g 2588 1394 M +-14 20 V +.04 g 2574 1414 M +-10 14 V +.04 g 2564 1428 M +-4 7 V +.04 g 2560 1435 M +-13 20 V +stroke 2547 1455 M +0 g .04 g 4989 1848 M +.04 g 4989 1848 M +-5 -10 V +.04 g 4984 1838 M +-9 -21 V +.04 g 4975 1817 M +-10 -20 V +.04 g 4965 1797 M +-3 -6 V +.04 g 4962 1791 M +-7 -14 V +.04 g 4955 1777 M +-10 -20 V +.04 g 4945 1757 M +-10 -20 V +.04 g 4935 1737 M +0 -1 V +.04 g 4935 1736 M +-10 -19 V +.04 g 4925 1717 M +-11 -20 V +.04 g 4914 1697 M +-6 -14 V +.04 g 4908 1683 M +-4 -7 V +.04 g 4904 1676 M +-11 -20 V +.04 g 4893 1656 M +-11 -20 V +.04 g 4882 1636 M +-2 -3 V +.04 g 4880 1633 M +-9 -17 V +.04 g 4871 1616 M +-12 -20 V +.04 g 4859 1596 M +-6 -12 V +.04 g 4853 1584 M +-5 -8 V +.04 g 4848 1576 M +-12 -21 V +.04 g 4836 1555 M +-10 -17 V +.04 g 4826 1538 M +-2 -3 V +.04 g 4824 1535 M +-13 -20 V +.04 g 4811 1515 M +-12 -20 V +.04 g .04 g 4799 1495 M +-14 -20 V +.04 g 4785 1475 M +-13 -20 V +.04 g 4772 1455 M +-1 -2 V +.04 g 4771 1453 M +-13 -18 V +.04 g 4758 1435 M +-14 -21 V +.04 g .04 g 4744 1414 M +-15 -20 V +.04 g 4729 1394 M +-12 -16 V +.04 g 4717 1378 M +-4 -4 V +.04 g 4713 1374 M +-16 -20 V +.04 g 4697 1354 M +-7 -9 V +.04 g 4690 1345 M +-10 -11 V +.04 g 4680 1334 M +-18 -20 V +.04 g 4662 1314 M +0 -1 V +.04 g 4662 1313 M +-19 -20 V +.04 g 4643 1293 M +-8 -8 V +.04 g 4635 1285 M +-12 -12 V +.04 g 4623 1273 M +-15 -14 V +.04 g 4608 1259 M +-8 -6 V +.04 g 4600 1253 M +-19 -17 V +.04 g 4581 1236 M +-5 -3 V +.04 g 4576 1233 M +-23 -17 V +.04 g 4553 1216 M +-4 -3 V +.04 g 4549 1213 M +-23 -15 V +.04 g 4526 1198 M +-10 -5 V +.04 g 4516 1193 M +-17 -10 V +.04 g 4499 1183 M +-24 -11 V +.04 g 4475 1172 M +-3 -1 V +.04 g 4472 1171 M +-28 -10 V +stroke 4444 1161 M +.04 g 4444 1161 M +-27 -7 V +.04 g 4417 1154 M +-13 -2 V +.04 g 4404 1152 M +-14 -2 V +.04 g 4390 1150 M +-27 -1 V +.04 g 4363 1149 M +-28 0 V +.04 g 4335 1149 M +-22 3 V +.04 g 4313 1152 M +-5 1 V +.04 g 4308 1153 M +-27 6 V +.04 g 4281 1159 M +-27 9 V +.04 g 4254 1168 M +-13 4 V +.04 g 4241 1172 M +-15 6 V +.04 g 4226 1178 M +-27 14 V +.04 g 4199 1192 M +-2 1 V +.04 g 4197 1193 M +-25 14 V +.04 g 4172 1207 M +-9 6 V +.04 g 4163 1213 M +-18 12 V +.04 g 4145 1225 M +-12 8 V +.04 g 4133 1233 M +-16 12 V +.04 g 4117 1245 M +-11 8 V +.04 g 4106 1253 M +-16 14 V +.04 g 4090 1267 M +-8 6 V +.04 g 4082 1273 M +-19 17 V +.04 g 4063 1290 M +-4 3 V +.04 g 4059 1293 M +-21 21 V +.04 g 4038 1314 M +-2 2 V +.04 g 4036 1316 M +-19 18 V +.04 g 4017 1334 M +-9 9 V +.04 g 4008 1343 M +-10 11 V +.04 g 3998 1354 M +-17 18 V +.04 g 3981 1372 M +-2 2 V +.04 g 3979 1374 M +-18 20 V +.04 g 3961 1394 M +-7 9 V +.04 g 3954 1403 M +-11 11 V +.04 g 3943 1414 M +-16 20 V +.04 g 3927 1434 M +-1 1 V +.04 g 3926 1435 M +-17 20 V +.04 g 3909 1455 M +-10 12 V +.04 g 3899 1467 M +-6 8 V +.04 g 3893 1475 M +-17 20 V +.04 g 3876 1495 M +-4 6 V +.04 g 3872 1501 M +-12 14 V +.04 g 3860 1515 M +-15 20 V +.04 g 3845 1535 M +-1 0 V +.04 g 3844 1535 M +-16 20 V +0 g .04 g 6052 3014 M +.04 g 6052 3014 M +-7 -7 V +.04 g 6045 3007 M +-18 -21 V +.04 g 6027 2986 M +-2 -2 V +.04 g 6025 2984 M +-18 -18 V +.04 g 6007 2966 M +-9 -9 V +.04 g 5998 2957 M +-13 -11 V +.04 g 5985 2946 M +-15 -14 V +.04 g 5970 2932 M +-8 -6 V +stroke 5962 2926 M +.04 g 5962 2926 M +-19 -16 V +.04 g 5943 2910 M +-6 -4 V +.04 g 5937 2906 M +-21 -16 V +.04 g 5916 2890 M +-7 -4 V +.04 g 5909 2886 M +-20 -13 V +.04 g 5889 2873 M +-13 -7 V +.04 g 5876 2866 M +-15 -9 V +.04 g 5861 2857 M +-24 -12 V +.04 g 5837 2845 M +-3 -1 V +.04 g 5834 2844 M +-27 -11 V +.04 g 5807 2833 M +-22 -8 V +.04 g 5785 2825 M +-5 -2 V +.04 g 5780 2823 M +-28 -7 V +.04 g 5752 2816 M +-27 -6 V +.04 g 5725 2810 M +-27 -4 V +.04 g 5698 2806 M +-14 -1 V +.04 g 5684 2805 M +-13 -1 V +.04 g 5671 2804 M +-28 -1 V +.04 g 5643 2803 M +-27 -1 V +.04 g 5616 2802 M +-27 1 V +.04 g 5589 2803 M +-27 1 V +.04 g 5562 2804 M +-14 1 V +.04 g 5548 2805 M +-14 1 V +.04 g 5534 2806 M +-27 1 V +.04 g 5507 2807 M +-27 -1 V +.04 g 5480 2806 M +-6 -1 V +.04 g 5474 2805 M +-21 -3 V +.04 g 5453 2802 M +-28 -11 V +.04 g 5425 2791 M +-8 -6 V +.04 g 5417 2785 M +-19 -16 V +.04 g 5398 2769 M +-4 -4 V +.04 g 5394 2765 M +-15 -20 V +.04 g 5379 2745 M +-8 -11 V +.04 g 5371 2734 M +-5 -10 V +.04 g 5366 2724 M +-12 -20 V +.04 g 5354 2704 M +-10 -20 V +.04 g 5344 2684 M +-10 -20 V +.04 g 5334 2664 M +-9 -20 V +.04 g 5325 2644 M +-9 -18 V +.04 g 5316 2626 M +-1 -2 V +.04 g 5315 2624 M +-8 -20 V +.04 g 5307 2604 M +-9 -21 V +.04 g 5298 2583 M +-8 -20 V +.04 g 5290 2563 M +-1 -1 V +.04 g 5289 2562 M +-8 -19 V +.04 g 5281 2543 M +-8 -20 V +.04 g 5273 2523 M +-8 -20 V +.04 g 5265 2503 M +-3 -8 V +.04 g 5262 2495 M +-5 -12 V +.04 g 5257 2483 M +-8 -21 V +.04 g 5249 2462 M +-9 -20 V +.04 g 5240 2442 M +-5 -14 V +stroke 5235 2428 M +.04 g 5235 2428 M +-3 -6 V +.04 g 5232 2422 M +-8 -20 V +.04 g 5224 2402 M +-8 -20 V +.04 g 5216 2382 M +-8 -20 V +.04 g 5208 2362 M +-1 -3 V +.04 g 5207 2359 M +-7 -18 V +.04 g 5200 2341 M +-8 -20 V +.04 g 5192 2321 M +-8 -20 V +.04 g 5184 2301 M +-4 -9 V +.04 g 5180 2292 M +-4 -11 V +.04 g 5176 2281 M +-8 -20 V +.04 g 5168 2261 M +-9 -20 V +.04 g 5159 2241 M +-6 -17 V +.04 g 5153 2224 M +-2 -3 V +.04 g 5151 2221 M +-8 -21 V +.04 g 5143 2200 M +-8 -20 V +.04 g 5135 2180 M +-9 -20 V +.04 g 5126 2160 M +0 -2 V +.04 g 5126 2158 M +-8 -18 V +.04 g 5118 2140 M +-8 -20 V +.04 g 5110 2120 M +-9 -20 V +.04 g 5101 2100 M +-3 -7 V +.04 g 5098 2093 M +-5 -14 V +.04 g 5093 2079 M +-9 -20 V +.04 g 5084 2059 M +-9 -20 V +.04 g 5075 2039 M +-4 -10 V +.04 g 5071 2029 M +-4 -10 V +.04 g 5067 2019 M +-9 -20 V +.04 g 5058 1999 M +-9 -20 V +.04 g 5049 1979 M +-5 -12 V +.04 g 5044 1967 M +-4 -8 V +.04 g 5040 1959 M +-9 -21 V +.04 g 5031 1938 M +-9 -20 V +.04 g 5022 1918 M +-5 -11 V +.04 g 5017 1907 M +-4 -9 V +.04 g 5013 1898 M +-10 -20 V +.04 g 5003 1878 M +-9 -20 V +.04 g 4994 1858 M +-5 -10 V +0 g .02 g 2394 2321 M +.02 g 2394 2321 M +-1 20 V +.02 g 2393 2341 M +0 21 V +.02 g 2393 2362 M +0 20 V +.02 g 2393 2382 M +1 20 V +.02 g 2394 2402 M +1 20 V +.02 g 2395 2422 M +2 20 V +.02 g 2397 2442 M +3 20 V +.02 g 2400 2462 M +1 3 V +.02 g 2401 2465 M +3 18 V +.02 g 2404 2483 M +5 20 V +.02 g 2409 2503 M +5 20 V +.02 g 2414 2523 M +7 20 V +.02 g 2421 2543 M +7 16 V +.02 g 2428 2559 M +2 4 V +stroke 2430 2563 M +.02 g 2430 2563 M +10 20 V +.02 g 2440 2583 M +11 21 V +.02 g 2451 2604 M +4 6 V +.02 g 2455 2610 M +10 14 V +.02 g 2465 2624 M +16 20 V +.02 g 2481 2644 M +1 1 V +.02 g 2482 2645 M +20 19 V +.02 g 2502 2664 M +8 6 V +.02 g 2510 2670 M +18 14 V +.02 g 2528 2684 M +9 6 V +.02 g 2537 2690 M +27 14 V +.02 g .02 g 2564 2704 M +27 11 V +.02 g 2591 2715 M +28 6 V +.02 g 2619 2721 M +23 3 V +.02 g 2642 2724 M +4 1 V +.02 g 2646 2725 M +27 0 V +.02 g 2673 2725 M +8 -1 V +.02 g 2681 2724 M +19 -1 V +.02 g 2700 2723 M +28 -6 V +.02 g 2728 2717 M +27 -8 V +.02 g 2755 2709 M +12 -5 V +.02 g 2767 2704 M +15 -6 V +.02 g 2782 2698 M +27 -13 V +.02 g 2809 2685 M +2 -1 V +.02 g 2811 2684 M +26 -15 V +.02 g 2837 2669 M +7 -5 V +.02 g 2844 2664 M +20 -13 V +.02 g 2864 2651 M +9 -7 V +.02 g 2873 2644 M +18 -15 V +.02 g 2891 2629 M +7 -5 V +.02 g 2898 2624 M +20 -18 V +.02 g 2918 2606 M +2 -2 V +.02 g 2920 2604 M +21 -21 V +.02 g 2941 2583 M +5 -4 V +.02 g 2946 2579 M +14 -16 V +.02 g 2960 2563 M +13 -13 V +.02 g 2973 2550 M +5 -7 V +.02 g 2978 2543 M +18 -20 V +.02 g 2996 2523 M +4 -6 V +.02 g 3000 2517 M +11 -14 V +.02 g 3011 2503 M +16 -20 V +.02 g 3027 2483 M +0 -1 V +.02 g 3027 2482 M +14 -20 V +.02 g 3041 2462 M +14 -19 V +.02 g 3055 2443 M +0 -1 V +.02 g 3055 2442 M +13 -20 V +.02 g 3068 2422 M +13 -20 V +.02 g 3081 2402 M +1 -1 V +.02 g 3082 2401 M +11 -19 V +.02 g 3093 2382 M +12 -20 V +.02 g 3105 2362 M +4 -8 V +.02 g 3109 2354 M +7 -13 V +stroke 3116 2341 M +.02 g 3116 2341 M +11 -20 V +.02 g 3127 2321 M +9 -19 V +.02 g 3136 2302 M +1 -1 V +.02 g 3137 2301 M +10 -20 V +.02 g 3147 2281 M +9 -20 V +.02 g 3156 2261 M +8 -17 V +.02 g 3164 2244 M +1 -3 V +.02 g 3165 2241 M +8 -20 V +.02 g 3173 2221 M +8 -21 V +.02 g 3181 2200 M +8 -20 V +.02 g 3189 2180 M +2 -5 V +.02 g 3191 2175 M +5 -15 V +.02 g 3196 2160 M +7 -20 V +.02 g 3203 2140 M +6 -20 V +.02 g 3209 2120 M +6 -20 V +.02 g 3215 2100 M +3 -11 V +.02 g 3218 2089 M +3 -10 V +.02 g 3221 2079 M +5 -20 V +.02 g 3226 2059 M +4 -20 V +.02 g 3230 2039 M +4 -20 V +.02 g 3234 2019 M +4 -20 V +.02 g 3238 1999 M +3 -20 V +.02 g 3241 1979 M +3 -20 V +.02 g 3244 1959 M +1 -17 V +.02 g 3245 1942 M +1 -4 V +.02 g 3246 1938 M +1 -20 V +.02 g 3247 1918 M +1 -20 V +.02 g 3248 1898 M +1 -20 V +.02 g 3249 1878 M +-1 -20 V +.02 g 3248 1858 M +0 -20 V +.02 g 3248 1838 M +-1 -21 V +0 g .02 g 3247 1817 M +.02 g 3247 1817 M +-2 -13 V +.02 g 3245 1804 M +0 -7 V +.02 g 3245 1797 M +-3 -20 V +.02 g 3242 1777 M +-3 -20 V +.02 g 3239 1757 M +-4 -20 V +.02 g 3235 1737 M +-4 -20 V +.02 g 3231 1717 M +-6 -20 V +.02 g 3225 1697 M +-5 -21 V +.02 g 3220 1676 M +-2 -5 V +.02 g 3218 1671 M +-5 -15 V +.02 g 3213 1656 M +-8 -20 V +.02 g 3205 1636 M +-8 -20 V +.02 g 3197 1616 M +-6 -14 V +.02 g 3191 1602 M +-3 -6 V +.02 g 3188 1596 M +-11 -20 V +.02 g 3177 1576 M +-11 -21 V +.02 g 3166 1555 M +-2 -3 V +.02 g 3164 1552 M +-11 -17 V +.02 g 3153 1535 M +-14 -20 V +.02 g 3139 1515 M +-3 -3 V +.02 g 3136 1512 M +-14 -17 V +stroke 3122 1495 M +.02 g 3122 1495 M +-13 -15 V +.02 g 3109 1480 M +-5 -5 V +.02 g 3104 1475 M +-22 -20 V +.02 g 3082 1455 M +0 -1 V +.02 g 3082 1454 M +-26 -19 V +.02 g 3056 1435 M +-1 -1 V +.02 g 3055 1434 M +-28 -16 V +.02 g 3027 1418 M +-8 -4 V +.02 g 3019 1414 M +-19 -7 V +.02 g 3000 1407 M +-27 -7 V +.02 g 2973 1400 M +-27 -4 V +.02 g 2946 1396 M +-28 1 V +.02 g 2918 1397 M +-27 4 V +.02 g 2891 1401 M +-27 8 V +.02 g 2864 1409 M +-12 5 V +.02 g 2852 1414 M +-15 7 V +.02 g 2837 1421 M +-24 14 V +.02 g 2813 1435 M +-4 2 V +.02 g 2809 1437 M +-26 18 V +.02 g 2783 1455 M +-1 1 V +.02 g 2782 1456 M +-23 19 V +.02 g 2759 1475 M +-4 3 V +.02 g 2755 1478 M +-17 17 V +.02 g 2738 1495 M +-10 10 V +.02 g 2728 1505 M +-10 10 V +.02 g 2718 1515 M +-18 20 V +.02 g .02 g 2700 1535 M +-16 20 V +.02 g 2684 1555 M +-11 14 V +.02 g 2673 1569 M +-5 7 V +.02 g 2668 1576 M +-14 20 V +.02 g 2654 1596 M +-8 11 V +.02 g 2646 1607 M +-6 9 V +.02 g 2640 1616 M +-13 20 V +.02 g 2627 1636 M +-8 13 V +.02 g 2619 1649 M +-5 7 V +.02 g 2614 1656 M +-12 20 V +.02 g 2602 1676 M +-11 19 V +.02 g 2591 1695 M +0 2 V +.02 g 2591 1697 M +-11 20 V +.02 g 2580 1717 M +-11 20 V +.02 g 2569 1737 M +-5 9 V +.02 g 2564 1746 M +-5 11 V +.02 g 2559 1757 M +-10 20 V +.02 g 2549 1777 M +-10 20 V +.02 g 2539 1797 M +-2 6 V +.02 g 2537 1803 M +-7 14 V +.02 g 2530 1817 M +-9 21 V +.02 g 2521 1838 M +-9 20 V +.02 g 2512 1858 M +-2 7 V +.02 g 2510 1865 M +-6 13 V +.02 g 2504 1878 M +-8 20 V +.02 g 2496 1898 M +-8 20 V +stroke 2488 1918 M +.02 g 2488 1918 M +-6 17 V +.02 g 2482 1935 M +-1 3 V +.02 g 2481 1938 M +-7 21 V +.02 g 2474 1959 M +-7 20 V +.02 g 2467 1979 M +-7 20 V +.02 g 2460 1999 M +-5 15 V +.02 g 2455 2014 M +-1 5 V +.02 g 2454 2019 M +-7 20 V +.02 g 2447 2039 M +-5 20 V +.02 g 2442 2059 M +-6 20 V +.02 g 2436 2079 M +-5 21 V +.02 g 2431 2100 M +-3 11 V +.02 g 2428 2111 M +-2 9 V +.02 g 2426 2120 M +-5 20 V +.02 g 2421 2140 M +-5 20 V +.02 g 2416 2160 M +-4 20 V +.02 g 2412 2180 M +-3 20 V +.02 g 2409 2200 M +-4 21 V +.02 g 2405 2221 M +-3 20 V +.02 g 2402 2241 M +-1 11 V +.02 g 2401 2252 M +-2 9 V +.02 g 2399 2261 M +-2 20 V +.02 g 2397 2281 M +-2 20 V +.02 g 2395 2301 M +-1 20 V +0 g .02 g 4110 1979 M +.02 g 4110 1979 M +2 20 V +.02 g 4112 1999 M +3 20 V +.02 g 4115 2019 M +2 10 V +.02 g 4117 2029 M +2 10 V +.02 g 4119 2039 M +4 20 V +.02 g 4123 2059 M +4 20 V +.02 g 4127 2079 M +5 21 V +.02 g 4132 2100 M +6 20 V +.02 g 4138 2120 M +5 20 V +.02 g 4143 2140 M +2 3 V +.02 g 4145 2143 M +5 17 V +.02 g 4150 2160 M +6 20 V +.02 g 4156 2180 M +7 20 V +.02 g 4163 2200 M +8 21 V +.02 g 4171 2221 M +1 2 V +.02 g 4172 2223 M +7 18 V +.02 g 4179 2241 M +8 20 V +.02 g 4187 2261 M +8 20 V +.02 g 4195 2281 M +4 8 V +.02 g 4199 2289 M +6 12 V +.02 g 4205 2301 M +9 20 V +.02 g 4214 2321 M +10 20 V +.02 g 4224 2341 M +2 5 V +.02 g 4226 2346 M +8 16 V +.02 g 4234 2362 M +11 20 V +.02 g 4245 2382 M +9 16 V +.02 g 4254 2398 M +2 4 V +.02 g 4256 2402 M +12 20 V +stroke 4268 2422 M +.02 g 4268 2422 M +12 20 V +.02 g 4280 2442 M +1 2 V +.02 g 4281 2444 M +11 18 V +.02 g 4292 2462 M +13 21 V +.02 g 4305 2483 M +3 4 V +.02 g 4308 2487 M +11 16 V +.02 g 4319 2503 M +14 20 V +.02 g 4333 2523 M +2 2 V +.02 g 4335 2525 M +14 18 V +.02 g 4349 2543 M +14 18 V +.02 g 4363 2561 M +1 2 V +.02 g 4364 2563 M +17 20 V +.02 g 4381 2583 M +9 10 V +.02 g 4390 2593 M +9 11 V +.02 g 4399 2604 M +18 19 V +.02 g 4417 2623 M +0 1 V +.02 g 4417 2624 M +21 20 V +.02 g 4438 2644 M +6 6 V +.02 g 4444 2650 M +16 14 V +.02 g 4460 2664 M +12 10 V +.02 g 4472 2674 M +12 10 V +.02 g 4484 2684 M +15 12 V +.02 g 4499 2696 M +12 8 V +.02 g 4511 2704 M +15 11 V +.02 g 4526 2715 M +16 9 V +.02 g 4542 2724 M +11 7 V +.02 g 4553 2731 M +27 14 V +.02 g 4580 2745 M +1 0 V +.02 g 4581 2745 M +27 11 V +.02 g 4608 2756 M +27 8 V +.02 g 4635 2764 M +1 1 V +.02 g 4636 2765 M +26 5 V +.02 g 4662 2770 M +28 3 V +.02 g 4690 2773 M +27 0 V +.02 g 4717 2773 M +27 -3 V +.02 g 4744 2770 M +21 -5 V +.02 g 4765 2765 M +6 -2 V +.02 g 4771 2763 M +28 -10 V +.02 g 4799 2753 M +15 -8 V +.02 g 4814 2745 M +12 -7 V +.02 g 4826 2738 M +19 -14 V +.02 g 4845 2724 M +8 -6 V +.02 g 4853 2718 M +14 -14 V +.02 g 4867 2704 M +13 -13 V +.02 g 4880 2691 M +6 -7 V +.02 g 4886 2684 M +14 -20 V +.02 g 4900 2664 M +8 -11 V +.02 g 4908 2653 M +5 -9 V +.02 g 4913 2644 M +10 -20 V +.02 g 4923 2624 M +9 -20 V +.02 g 4932 2604 M +3 -9 V +.02 g 4935 2595 M +4 -12 V +stroke 4939 2583 M +.02 g 4939 2583 M +5 -20 V +.02 g 4944 2563 M +5 -20 V +.02 g 4949 2543 M +4 -20 V +.02 g 4953 2523 M +3 -20 V +.02 g 4956 2503 M +2 -20 V +.02 g 4958 2483 M +2 -21 V +.02 g 4960 2462 M +1 -20 V +.02 g 4961 2442 M +0 -20 V +.02 g 4961 2422 M +-1 -20 V +.02 g 4960 2402 M +-1 -20 V +.02 g 4959 2382 M +-1 -20 V +.02 g 4958 2362 M +-2 -21 V +.02 g 4956 2341 M +-2 -20 V +.02 g 4954 2321 M +-3 -20 V +.02 g 4951 2301 M +-3 -20 V +.02 g 4948 2281 M +-3 -20 V +.02 g 4945 2261 M +-4 -20 V +.02 g 4941 2241 M +-4 -20 V +0 g .02 g 4937 2221 M +.02 g 4937 2221 M +-2 -12 V +.02 g 4935 2209 M +-2 -9 V +.02 g 4933 2200 M +-5 -20 V +.02 g 4928 2180 M +-5 -20 V +.02 g 4923 2160 M +-5 -20 V +.02 g 4918 2140 M +-6 -20 V +.02 g 4912 2120 M +-4 -18 V +.02 g 4908 2102 M +-1 -2 V +.02 g 4907 2100 M +-6 -21 V +.02 g 4901 2079 M +-7 -20 V +.02 g 4894 2059 M +-6 -20 V +.02 g 4888 2039 M +-7 -20 V +.02 g 4881 2019 M +-1 -2 V +.02 g 4880 2017 M +-6 -18 V +.02 g 4874 1999 M +-7 -20 V +.02 g 4867 1979 M +-8 -20 V +.02 g 4859 1959 M +-6 -16 V +.02 g 4853 1943 M +-2 -5 V +.02 g 4851 1938 M +-8 -20 V +.02 g 4843 1918 M +-8 -20 V +.02 g 4835 1898 M +-9 -20 V +.02 g 4826 1878 M +0 -1 V +.02 g 4826 1877 M +-9 -19 V +.02 g 4817 1858 M +-9 -20 V +.02 g 4808 1838 M +-9 -21 V +.02 g .02 g 4799 1817 M +-11 -20 V +.02 g 4788 1797 M +-10 -20 V +.02 g 4778 1777 M +-7 -14 V +.02 g 4771 1763 M +-3 -6 V +.02 g 4768 1757 M +-11 -20 V +.02 g 4757 1737 M +-12 -20 V +.02 g 4745 1717 M +-1 -3 V +.02 g 4744 1714 M +-11 -17 V +.02 g 4733 1697 M +-12 -21 V +stroke 4721 1676 M +.02 g 4721 1676 M +-4 -6 V +.02 g 4717 1670 M +-9 -14 V +.02 g 4708 1656 M +-14 -20 V +.02 g 4694 1636 M +-4 -7 V +.02 g 4690 1629 M +-10 -13 V +.02 g 4680 1616 M +-15 -20 V +.02 g 4665 1596 M +-3 -4 V +.02 g 4662 1592 M +-14 -16 V +.02 g 4648 1576 M +-13 -16 V +.02 g 4635 1560 M +-4 -5 V +.02 g 4631 1555 M +-19 -20 V +.02 g 4612 1535 M +-4 -4 V +.02 g 4608 1531 M +-17 -16 V +.02 g 4591 1515 M +-10 -9 V +.02 g 4581 1506 M +-14 -11 V +.02 g 4567 1495 M +-14 -11 V +.02 g 4553 1484 M +-14 -9 V +.02 g 4539 1475 M +-13 -9 V +.02 g 4526 1466 M +-22 -11 V +.02 g 4504 1455 M +-5 -3 V +.02 g 4499 1452 M +-27 -11 V +.02 g 4472 1441 M +-26 -6 V +.02 g 4446 1435 M +-2 -1 V +.02 g 4444 1434 M +-27 -3 V +.02 g 4417 1431 M +-27 1 V +.02 g 4390 1432 M +-18 3 V +.02 g 4372 1435 M +-9 1 V +.02 g 4363 1436 M +-28 9 V +.02 g 4335 1445 M +-21 10 V +.02 g 4314 1455 M +-6 3 V +.02 g 4308 1458 M +-27 17 V +.02 g .02 g 4281 1475 M +-24 20 V +.02 g 4257 1495 M +-3 3 V +.02 g 4254 1498 M +-18 17 V +.02 g 4236 1515 M +-10 11 V +.02 g 4226 1526 M +-7 9 V +.02 g 4219 1535 M +-15 20 V +.02 g 4204 1555 M +-5 7 V +.02 g 4199 1562 M +-9 14 V +.02 g 4190 1576 M +-12 20 V +.02 g 4178 1596 M +-6 11 V +.02 g 4172 1607 M +-5 9 V +.02 g 4167 1616 M +-9 20 V +.02 g 4158 1636 M +-9 20 V +.02 g 4149 1656 M +-4 11 V +.02 g 4145 1667 M +-4 9 V +.02 g 4141 1676 M +-7 21 V +.02 g 4134 1697 M +-6 20 V +.02 g 4128 1717 M +-5 20 V +.02 g 4123 1737 M +-5 20 V +.02 g 4118 1757 M +-1 5 V +.02 g 4117 1762 M +-3 15 V +stroke 4114 1777 M +.02 g 4114 1777 M +-3 20 V +.02 g 4111 1797 M +-2 20 V +.02 g 4109 1817 M +-2 21 V +.02 g 4107 1838 M +-1 20 V +.02 g 4106 1858 M +-1 20 V +.02 g 4105 1878 M +0 20 V +.02 g 4105 1898 M +0 20 V +.02 g 4105 1918 M +1 20 V +.02 g 4106 1938 M +2 21 V +.02 g 4108 1959 M +2 20 V +0 g .02 g 1287 3208 M +.02 g 1287 3208 M +-4 3 V +.02 g 1283 3211 M +-18 17 V +.02 g 1265 3228 M +-9 9 V +.02 g 1256 3237 M +-10 11 V +.02 g 1246 3248 M +-17 19 V +.02 g 1229 3267 M +-1 2 V +.02 g 1228 3269 M +-16 20 V +.02 g 1212 3289 M +-10 12 V +.02 g 1202 3301 M +-6 8 V +.02 g 1196 3309 M +-14 20 V +.02 g 1182 3329 M +-8 10 V +.02 g 1174 3339 M +-6 10 V +.02 g 1168 3349 M +-14 20 V +.02 g 1154 3369 M +-7 11 V +.02 g 1147 3380 M +-5 10 V +.02 g 1142 3390 M +-13 20 V +.02 g 1129 3410 M +-9 15 V +.02 g 1120 3425 M +-3 5 V +.02 g 1117 3430 M +-11 20 V +.02 g 1106 3450 M +-11 20 V +.02 g 1095 3470 M +-2 4 V +.02 g 1093 3474 M +-9 16 V +.02 g 1084 3490 M +-10 20 V +.02 g 1074 3510 M +-9 17 V +.02 g 1065 3527 M +-2 4 V +.02 g 1063 3531 M +-9 20 V +.02 g 1054 3551 M +-10 20 V +.02 g 1044 3571 M +-6 12 V +.02 g 1038 3583 M +-4 8 V +.02 g 1034 3591 M +-9 20 V +.02 g 1025 3611 M +-9 20 V +.02 g 1016 3631 M +-5 11 V +.02 g 1011 3642 M +-4 10 V +.02 g 1007 3652 M +-9 20 V +.02 g 998 3672 M +-8 20 V +.02 g 990 3692 M +-6 14 V +.02 g 984 3706 M +-3 6 V +.02 g 981 3712 M +-8 20 V +.02 g 973 3732 M +-8 20 V +.02 g 965 3752 M +-8 20 V +.02 g 957 3772 M +-1 1 V +.02 g 956 3773 M +-7 20 V +stroke 949 3793 M +.02 g 949 3793 M +-8 20 V +.02 g 941 3813 M +-7 20 V +.02 g 934 3833 M +-5 12 V +.02 g 929 3845 M +-3 8 V +.02 g 926 3853 M +-7 20 V +.02 g 919 3873 M +-7 20 V +.02 g 912 3893 M +-8 21 V +.02 g 904 3914 M +-2 6 V +.02 g 902 3920 M +-5 14 V +.02 g 897 3934 M +-7 20 V +.02 g 890 3954 M +-7 20 V +.02 g 883 3974 M +-7 20 V +.02 g 876 3994 M +-1 6 V +.02 g 875 4000 M +-5 14 V +.02 g 870 4014 M +-7 21 V +.02 g 863 4035 M +-6 20 V +.02 g 857 4055 M +-7 20 V +.02 g 850 4075 M +-3 10 V +.02 g 847 4085 M +-3 10 V +.02 g 844 4095 M +-6 20 V +.02 g 838 4115 M +-6 20 V +.02 g 832 4135 M +-6 20 V +.02 g 826 4155 M +-6 19 V +.02 g 820 4174 M +0 2 V +.02 g 820 4176 M +-6 20 V +.02 g 814 4196 M +-6 20 V +.02 g 808 4216 M +-5 20 V +.02 g 803 4236 M +-6 20 V +.02 g 797 4256 M +-4 15 V +.02 g 793 4271 M +-2 5 V +.02 g 791 4276 M +-5 21 V +.02 g 786 4297 M +-5 20 V +.02 g 781 4317 M +-6 20 V +.02 g 775 4337 M +-5 20 V +.02 g 770 4357 M +-5 17 V +.02 g 765 4374 M +0 3 V +.02 g 765 4377 M +-5 20 V +.02 g 760 4397 M +-5 20 V +.02 g 755 4417 M +-5 21 V +.02 g 750 4438 M +-4 20 V +.02 g 746 4458 M +-5 20 V +.02 g 741 4478 M +-3 11 V +.02 g 738 4489 M +-2 9 V +.02 g 736 4498 M +-4 20 V +.02 g 732 4518 M +-4 20 V +.02 g 728 4538 M +-4 21 V +.02 g 724 4559 M +-4 20 V +.02 g 720 4579 M +-4 20 V +.02 g 716 4599 M +-4 20 V +0 g .02 g 1149 4619 M +.02 g 1149 4619 M +10 -20 V +.02 g 1159 4599 M +11 -20 V +.02 g 1170 4579 M +4 -9 V +stroke 1174 4570 M +.02 g 1174 4570 M +6 -11 V +.02 g 1180 4559 M +9 -21 V +.02 g 1189 4538 M +10 -20 V +.02 g 1199 4518 M +3 -4 V +.02 g 1202 4514 M +7 -16 V +.02 g 1209 4498 M +9 -20 V +.02 g 1218 4478 M +9 -20 V +.02 g 1227 4458 M +2 -3 V +.02 g 1229 4455 M +7 -17 V +.02 g 1236 4438 M +9 -21 V +.02 g 1245 4417 M +9 -20 V +.02 g 1254 4397 M +2 -4 V +.02 g 1256 4393 M +7 -16 V +.02 g 1263 4377 M +8 -20 V +.02 g 1271 4357 M +9 -20 V +.02 g 1280 4337 M +3 -8 V +.02 g 1283 4329 M +5 -12 V +.02 g 1288 4317 M +8 -20 V +.02 g 1296 4297 M +8 -21 V +.02 g 1304 4276 M +7 -15 V +.02 g 1311 4261 M +1 -5 V +.02 g 1312 4256 M +8 -20 V +.02 g 1320 4236 M +8 -20 V +.02 g 1328 4216 M +8 -20 V +.02 g 1336 4196 M +2 -6 V +.02 g 1338 4190 M +5 -14 V +.02 g 1343 4176 M +7 -21 V +.02 g 1350 4155 M +8 -20 V +.02 g 1358 4135 M +7 -19 V +.02 g 1365 4116 M +0 -1 V +.02 g 1365 4115 M +7 -20 V +.02 g 1372 4095 M +7 -20 V +.02 g 1379 4075 M +7 -20 V +.02 g 1386 4055 M +6 -18 V +.02 g 1392 4037 M +1 -2 V +.02 g 1393 4035 M +7 -21 V +.02 g 1400 4014 M +6 -20 V +.02 g 1406 3994 M +7 -20 V +.02 g 1413 3974 M +6 -20 V +.02 g 1419 3954 M +1 0 V +.02 g 1420 3954 M +6 -20 V +.02 g 1426 3934 M +6 -20 V +.02 g 1432 3914 M +6 -21 V +.02 g 1438 3893 M +6 -20 V +.02 g 1444 3873 M +3 -10 V +.02 g 1447 3863 M +3 -10 V +.02 g 1450 3853 M +5 -20 V +.02 g 1455 3833 M +6 -20 V +.02 g 1461 3813 M +5 -20 V +.02 g 1466 3793 M +6 -21 V +.02 g 1472 3772 M +2 -8 V +.02 g 1474 3764 M +3 -12 V +stroke 1477 3752 M +.02 g 1477 3752 M +5 -20 V +.02 g 1482 3732 M +5 -20 V +.02 g 1487 3712 M +5 -20 V +.02 g 1492 3692 M +4 -20 V +.02 g 1496 3672 M +5 -20 V +.02 g 1501 3652 M +0 -2 V +.02 g 1501 3650 M +4 -19 V +.02 g 1505 3631 M +4 -20 V +.02 g 1509 3611 M +4 -20 V +.02 g 1513 3591 M +3 -20 V +.02 g 1516 3571 M +4 -20 V +.02 g 1520 3551 M +3 -20 V +.02 g 1523 3531 M +3 -21 V +.02 g 1526 3510 M +3 -18 V +.02 g 1529 3492 M +0 -2 V +.02 g 1529 3490 M +2 -20 V +.02 g 1531 3470 M +2 -20 V +.02 g 1533 3450 M +1 -20 V +.02 g 1534 3430 M +1 -20 V +.02 g 1535 3410 M +1 -20 V +.02 g 1536 3390 M +0 -21 V +.02 g 1536 3369 M +0 -20 V +.02 g 1536 3349 M +-1 -20 V +.02 g 1535 3329 M +-2 -20 V +.02 g 1533 3309 M +-3 -20 V +.02 g 1530 3289 M +-1 -10 V +.02 g 1529 3279 M +-3 -10 V +.02 g 1526 3269 M +-5 -21 V +.02 g 1521 3248 M +-7 -20 V +.02 g 1514 3228 M +-9 -20 V +.02 g 1505 3208 M +-4 -6 V +.02 g 1501 3202 M +-10 -14 V +.02 g 1491 3188 M +-17 -19 V +.02 g 1474 3169 M +-2 -1 V +.02 g 1472 3168 M +-25 -14 V +.02 g 1447 3154 M +-27 -6 V +.02 g 1420 3148 M +-28 2 V +.02 g 1392 3150 M +-27 8 V +.02 g 1365 3158 M +-21 10 V +.02 g 1344 3168 M +-6 3 V +.02 g 1338 3171 M +-27 17 V +.02 g 1311 3188 M +0 1 V +.02 g 1311 3189 M +-24 19 V +0 g .02 g 6052 3307 M +.02 g 6052 3307 M +-25 -18 V +.02 g 6027 3289 M +-2 -2 V +.02 g 6025 3287 M +-27 -16 V +.02 g 5998 3271 M +-6 -2 V +.02 g 5992 3269 M +-22 -9 V +.02 g 5970 3260 M +-27 -5 V +.02 g 5943 3255 M +-27 1 V +.02 g 5916 3256 M +-27 11 V +.02 g 5889 3267 M +-3 2 V +stroke 5886 3269 M +.02 g 5886 3269 M +-23 20 V +.02 g 5863 3289 M +-2 2 V +.02 g 5861 3291 M +-11 18 V +.02 g 5850 3309 M +-10 20 V +.02 g 5840 3329 M +-6 15 V +.02 g 5834 3344 M +-2 5 V +.02 g 5832 3349 M +-5 20 V +.02 g 5827 3369 M +-4 21 V +.02 g 5823 3390 M +-2 20 V +.02 g 5821 3410 M +-2 20 V +.02 g 5819 3430 M +-1 20 V +.02 g 5818 3450 M +-1 20 V +.02 g 5817 3470 M +0 20 V +.02 g 5817 3490 M +1 20 V +.02 g 5818 3510 M +1 21 V +.02 g 5819 3531 M +2 20 V +.02 g 5821 3551 M +2 20 V +.02 g 5823 3571 M +2 20 V +.02 g 5825 3591 M +2 20 V +.02 g 5827 3611 M +3 20 V +.02 g 5830 3631 M +3 21 V +.02 g 5833 3652 M +1 4 V +.02 g 5834 3656 M +3 16 V +.02 g 5837 3672 M +3 20 V +.02 g 5840 3692 M +4 20 V +.02 g 5844 3712 M +4 20 V +.02 g 5848 3732 M +4 20 V +.02 g 5852 3752 M +5 20 V +.02 g 5857 3772 M +4 21 V +.02 g 5861 3793 M +0 1 V +.02 g 5861 3794 M +5 19 V +.02 g 5866 3813 M +5 20 V +.02 g 5871 3833 M +5 20 V +.02 g 5876 3853 M +5 20 V +.02 g 5881 3873 M +5 20 V +.02 g 5886 3893 M +3 10 V +.02 g 5889 3903 M +2 11 V +.02 g 5891 3914 M +6 20 V +.02 g 5897 3934 M +6 20 V +.02 g 5903 3954 M +5 20 V +.02 g 5908 3974 M +6 20 V +.02 g 5914 3994 M +2 6 V +.02 g 5916 4000 M +4 14 V +.02 g 5920 4014 M +6 21 V +.02 g 5926 4035 M +6 20 V +.02 g 5932 4055 M +7 20 V +.02 g 5939 4075 M +4 14 V +.02 g 5943 4089 M +2 6 V +.02 g 5945 4095 M +7 20 V +.02 g 5952 4115 M +6 20 V +.02 g 5958 4135 M +7 20 V +.02 g 5965 4155 M +5 17 V +stroke 5970 4172 M +.02 g 5970 4172 M +1 4 V +.02 g 5971 4176 M +8 20 V +.02 g 5979 4196 M +7 20 V +.02 g 5986 4216 M +6 20 V +.02 g 5992 4236 M +6 15 V +.02 g 5998 4251 M +2 5 V +.02 g 6000 4256 M +7 20 V +.02 g 6007 4276 M +7 21 V +.02 g 6014 4297 M +8 20 V +.02 g 6022 4317 M +3 8 V +.02 g 6025 4325 M +4 12 V +.02 g 6029 4337 M +8 20 V +.02 g 6037 4357 M +8 20 V +.02 g 6045 4377 M +7 19 V +% End plot #1 +% Begin plot #2 +1.500 UP +stroke +6.000 UL +LT0 +0.55 0.10 0.05 C 3600 4518 M +1299 3219 L +-57 460 V +-117 320 V +-35 91 V +26 -27 V +-12 11 V +6 -6 V +-2 2 V +1 0 V +-1 0 V +3600 4518 CircleF +1299 3219 CircleF +1242 3679 CircleF +1125 3999 CircleF +1090 4090 CircleF +1116 4063 CircleF +1104 4074 CircleF +1110 4068 CircleF +1108 4070 CircleF +1109 4070 CircleF +1108 4070 CircleF +1108 4070 CircleF +1108 4070 CircleF +1108 4070 CircleF +1108 4070 CircleF +1108 4070 CircleF +1108 4070 CircleF +1108 4070 CircleF +1108 4070 CircleF +1108 4070 CircleF +1108 4070 CircleF +% End plot #2 +% Begin plot #3 +1.500 UP +6.000 UL +LT1 +0.37 0.61 0.21 C 3600 4518 M +-155 -79 V +3289 4222 L +3077 3729 L +2848 2964 L +2525 2442 L +223 -256 V +136 -138 V +-92 15 V +55 -16 V +-30 5 V +5 1 V +-2 1 V +1 0 V +3600 4518 TriUF +3445 4439 TriUF +3289 4222 TriUF +3077 3729 TriUF +2848 2964 TriUF +2525 2442 TriUF +2748 2186 TriUF +2884 2048 TriUF +2792 2063 TriUF +2847 2047 TriUF +2817 2052 TriUF +2822 2053 TriUF +2820 2054 TriUF +2821 2054 TriUF +2821 2054 TriUF +2821 2054 TriUF +2821 2054 TriUF +2821 2054 TriUF +2821 2054 TriUF +2821 2054 TriUF +2821 2054 TriUF +2821 2054 TriUF +2821 2054 TriUF +2821 2054 TriUF +2821 2054 TriUF +2821 2054 TriUF +2821 2054 TriUF +2821 2054 TriUF +% End plot #3 +% Begin plot #4 +1.500 UP +6.000 UL +LT2 +0.00 0.38 0.68 C 3600 4518 M +1988 3715 L +3160 1440 L +-415 600 V +158 -40 V +-158 91 V +137 -41 V +-69 -20 V +12 17 V +-7 6 V +4 2 V +-2 -1 V +1 1 V +0 -1 V +3600 4518 Circle +1988 3715 Circle +3160 1440 Circle +2745 2040 Circle +2903 2000 Circle +2745 2091 Circle +2882 2050 Circle +2813 2030 Circle +2825 2047 Circle +2818 2053 Circle +2822 2055 Circle +2820 2054 Circle +2821 2055 Circle +2821 2054 Circle +2821 2054 Circle +2821 2054 Circle +2821 2054 Circle +2821 2054 Circle +2821 2054 Circle +2821 2054 Circle +2821 2054 Circle +2821 2054 Circle +2821 2054 Circle +2821 2054 Circle +% End plot #4 +% Begin plot #5 +1.500 UP +6.000 UL +LT3 +0.95 0.35 0.00 C 3600 4518 M +1988 3715 L +3198 1467 L +-475 568 V +163 -26 V +-66 7 V +7 21 V +-16 28 V +12 -6 V +-5 -5 V +3 1 V +-1 -1 V +1 0 V +-1 0 V +1 0 V +3600 4518 Crs +1988 3715 Crs +3198 1467 Crs +2723 2035 Crs +2886 2009 Crs +2820 2016 Crs +2827 2037 Crs +2811 2065 Crs +2823 2059 Crs +2818 2054 Crs +2821 2055 Crs +2820 2054 Crs +2821 2054 Crs +2820 2054 Crs +2821 2054 Crs +2821 2054 Crs +2821 2054 Crs +2821 2054 Crs +2821 2054 Crs +2821 2054 Crs +2821 2054 Crs +2821 2054 Crs +2821 2054 Crs +2821 2054 Crs +2821 2054 Crs +% End plot #5 +% Begin plot #6 +1.500 UP +6.000 UL +LT4 +0.46 0.44 0.70 C 3600 4518 M +2085 3705 L +3289 1441 L +-655 583 V +230 -13 V +-56 33 V +15 4 V +-3 4 V +2 1 V +-2 1 V +1 0 V +-1 0 V +1 0 V +3600 4518 Star +2085 3705 Star +3289 1441 Star +2634 2024 Star +2864 2011 Star +2808 2044 Star +2823 2048 Star +2820 2052 Star +2822 2053 Star +2820 2054 Star +2821 2054 Star +2820 2054 Star +2821 2054 Star +2821 2054 Star +2821 2054 Star +2821 2054 Star +2821 2054 Star +2821 2054 Star +2821 2054 Star +2821 2054 Star +2821 2054 Star +2821 2054 Star +2821 2054 Star +2821 2054 Star +% End plot #6 +LCw setrgbcolor +1.000 3262 651 2706 700 BoxColFill +% Begin plot #7 +2.000 UL +LT0 +0 g % End plot #7 +% Begin plot #8 +1.500 UP +6.000 UL +LT0 +0.55 0.10 0.05 C 5446 1281 M +[ [(Arial-Bold) 140.0 0.0 true true 0 (LM)] +] -46.7 MRshow +LT0 +0.55 0.10 0.05 C 5530 1281 M +354 0 V +5707 1281 CircleF +% End plot #8 +% Begin plot #9 +1.500 UP +6.000 UL +LT1 +0.37 0.61 0.21 C 5446 1141 M +[ [(Arial-Bold) 140.0 0.0 true true 0 (LM + geodesic acceleration)] +] -46.7 MRshow +LT1 +0.37 0.61 0.21 C 5530 1141 M +354 0 V +5707 1141 TriUF +% End plot #9 +% Begin plot #10 +1.500 UP +6.000 UL +LT2 +0.00 0.38 0.68 C 5446 1001 M +[ [(Arial-Bold) 140.0 0.0 true true 0 (Dogleg)] +] -46.7 MRshow +LT2 +0.00 0.38 0.68 C 5530 1001 M +354 0 V +5707 1001 Circle +% End plot #10 +% Begin plot #11 +1.500 UP +6.000 UL +LT3 +0.95 0.35 0.00 C 5446 861 M +[ [(Arial-Bold) 140.0 0.0 true true 0 (Double Dogleg)] +] -46.7 MRshow +LT3 +0.95 0.35 0.00 C 5530 861 M +354 0 V +5707 861 Crs +% End plot #11 +% Begin plot #12 +1.500 UP +6.000 UL +LT4 +0.46 0.44 0.70 C 5446 721 M +[ [(Arial-Bold) 140.0 0.0 true true 0 (2D Subspace)] +] -46.7 MRshow +LT4 +0.46 0.44 0.70 C 5530 721 M +354 0 V +5707 721 Star +% End plot #12 +1.000 UL +LTb +LCb setrgbcolor +602 4619 N +602 588 L +5450 0 V +0 4031 V +-5450 0 V +Z stroke +stroke gsave %% draw gray scale smooth box +maxcolors 0 gt {/imax maxcolors def} {/imax 1024 def} ifelse +6188 588 translate 272 4031 scale 0 setlinewidth +/ystep 1 imax div def /y0 0 def /ii 0 def +{ y0 g 0 y0 N 1 0 V 0 ystep V -1 0 f +/y0 y0 ystep add def /ii ii 1 add def +ii imax ge {exit} if } loop +grestore 0 setgray +1.000 UL +LTb +LCb setrgbcolor +6188 588 N +272 0 V +0 4031 V +-272 0 V +0 -4031 V +Z stroke +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +6460 588 M +-63 0 V +stroke +6544 588 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6188 588 M +63 0 V +209 403 R +-63 0 V +stroke +6544 991 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 50)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6188 991 M +63 0 V +209 403 R +-63 0 V +stroke +6544 1394 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 100)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6188 1394 M +63 0 V +209 403 R +-63 0 V +stroke +6544 1797 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 150)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6188 1797 M +63 0 V +209 403 R +-63 0 V +stroke +6544 2200 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 200)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6188 2200 M +63 0 V +209 403 R +-63 0 V +stroke +6544 2603 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 250)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6188 2603 M +63 0 V +209 403 R +-63 0 V +stroke +6544 3006 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 300)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6188 3006 M +63 0 V +209 403 R +-63 0 V +stroke +6544 3409 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 350)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6188 3409 M +63 0 V +209 403 R +-63 0 V +stroke +6544 3812 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 400)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6188 3812 M +63 0 V +209 403 R +-63 0 V +stroke +6544 4215 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 450)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6188 4215 M +63 0 V +209 404 R +-63 0 V +stroke +6544 4619 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 500)] +] -46.7 MLshow +1.000 UL +LTb +LCb setrgbcolor +6188 4619 M +63 0 V +0.300 UP +stroke +LTb +LCb setrgbcolor +grestore % colour palette end +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Arial-Bold Helvetica diff -Nru gsl-doc-1.16/doc/ntuple.texi gsl-doc-2.3/doc/ntuple.texi --- gsl-doc-1.16/doc/ntuple.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/ntuple.texi 2015-11-03 16:21:55.000000000 +0000 @@ -33,7 +33,7 @@ @node The ntuple struct @section The ntuple struct -@tpindex gsl_ntuple +@tindex gsl_ntuple Ntuples are manipulated using the @code{gsl_ntuple} struct. This struct contains information on the file where the ntuple data is stored, a pointer to the current ntuple data row and the size of the user-defined @@ -109,7 +109,7 @@ parameters as a second argument. @cindex selection function, ntuples -@tpindex gsl_ntuple_select_fn +@tindex gsl_ntuple_select_fn The @dfn{selection function} determines which ntuple rows are selected for histogramming. It is defined by the following struct, @@ -125,7 +125,7 @@ each ntuple row that is to be included in the histogram. @cindex value function, ntuples -@tpindex gsl_ntuple_value_fn +@tindex gsl_ntuple_value_fn The @dfn{value function} computes scalar values for those ntuple rows selected by the selection function, diff -Nru gsl-doc-1.16/doc/ode-initval.texi gsl-doc-2.3/doc/ode-initval.texi --- gsl-doc-1.16/doc/ode-initval.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/ode-initval.texi 2015-11-03 16:21:55.000000000 +0000 @@ -67,9 +67,11 @@ The function should return @code{GSL_SUCCESS} if the calculation was completed successfully. Any other return value indicates an error. A special return value @code{GSL_EBADFUNC} causes @code{gsl_odeiv2} -routines to immediately stop and return. The user must call an -appropriate reset function (e.g. @code{gsl_odeiv2_driver_reset} or -@code{gsl_odeiv2_step_reset}) before continuing. Use return values +routines to immediately stop and return. If @code{function} +is modified (for example contents of @var{params}), the user must call an +appropriate reset function (@code{gsl_odeiv2_driver_reset}, +@code{gsl_odeiv2_evolve_reset} or @code{gsl_odeiv2_step_reset}) +before continuing. Use return values distinct from standard GSL error codes to distinguish your function as the source of the error. @@ -90,9 +92,11 @@ The function should return @code{GSL_SUCCESS} if the calculation was completed successfully. Any other return value indicates an error. A special return value @code{GSL_EBADFUNC} causes @code{gsl_odeiv2} -routines to immediately stop and return. The user must call an -appropriate reset function (e.g. @code{gsl_odeiv2_driver_reset} or -@code{gsl_odeiv2_step_reset}) before continuing. Use return values +routines to immediately stop and return. If @code{jacobian} +is modified (for example contents of @var{params}), the user must call an +appropriate reset function (@code{gsl_odeiv2_driver_reset}, +@code{gsl_odeiv2_evolve_reset} or @code{gsl_odeiv2_step_reset}) +before continuing. Use return values distinct from standard GSL error codes to distinguish your function as the source of the error. @@ -112,8 +116,8 @@ step-size @math{h} and estimate the resulting local error. @deftypefun {gsl_odeiv2_step *} gsl_odeiv2_step_alloc (const gsl_odeiv2_step_type * @var{T}, size_t @var{dim}) -@tpindex gsl_odeiv2_step -@tpindex gsl_odeiv2_step_type +@tindex gsl_odeiv2_step +@tindex gsl_odeiv2_step_type This function returns a pointer to a newly allocated instance of a stepping function of type @var{T} for a system of @var{dim} dimensions. Please note that if you use a stepper method that @@ -291,8 +295,8 @@ step-size for a user-specified level of error. @deftypefun {gsl_odeiv2_control *} gsl_odeiv2_control_standard_new (double @var{eps_abs}, double @var{eps_rel}, double @var{a_y}, double @var{a_dydt}) -@tpindex gsl_odeiv2_control -@tpindex gsl_odeiv2_control_type +@tindex gsl_odeiv2_control +@tindex gsl_odeiv2_control_type The standard control object is a four parameter heuristic based on absolute and relative errors @var{eps_abs} and @var{eps_rel}, and scaling factors @var{a_y} and @var{a_dydt} for the system state @@ -467,7 +471,7 @@ using an acceptable step-size. @deftypefun {gsl_odeiv2_evolve *} gsl_odeiv2_evolve_alloc (size_t @var{dim}) -@tpindex gsl_odeiv2_evolve +@tindex gsl_odeiv2_evolve This function returns a pointer to a newly allocated instance of an evolution function for a system of @var{dim} dimensions. @end deftypefun diff -Nru gsl-doc-1.16/doc/permutation.texi gsl-doc-2.3/doc/permutation.texi --- gsl-doc-1.16/doc/permutation.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/permutation.texi 2016-07-07 20:36:10.000000000 +0000 @@ -34,7 +34,7 @@ @node The Permutation struct @section The Permutation struct -@tpindex gsl_permutation +@tindex gsl_permutation A permutation is defined by a structure containing two components, the size of the permutation and a pointer to the permutation array. The elements of the permutation array are all of type @code{size_t}. The @@ -185,6 +185,15 @@ and the vector @var{v} must have the same length. @end deftypefun +@deftypefun int gsl_permute_matrix (const gsl_permutation * @var{p}, gsl_matrix * @var{A}) +This function applies the permutation @var{p} to the matrix @var{A} from +the right, @math{A' = A P}. The @math{j}-th column of the +permutation matrix @math{P} is given by the @math{@var{p}_j}-th column of the +identity matrix. This effectively permutes the columns of @var{A} according +to the permutation @var{p}, and so the number of columns of @var{A} must +equal the size of the permutation @var{p}. +@end deftypefun + @deftypefun int gsl_permutation_mul (gsl_permutation * @var{p}, const gsl_permutation * @var{pa}, const gsl_permutation * @var{pb}) This function combines the two permutations @var{pa} and @var{pb} into a single permutation @var{p}, where @c{$@var{p} = @var{pa} \ast @var{pb}$} diff -Nru gsl-doc-1.16/doc/poly.texi gsl-doc-2.3/doc/poly.texi --- gsl-doc-1.16/doc/poly.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/poly.texi 2015-11-09 05:23:40.000000000 +0000 @@ -276,7 +276,7 @@ approximate locations of roots of higher order polynomials. @deftypefun {gsl_poly_complex_workspace *} gsl_poly_complex_workspace_alloc (size_t @var{n}) -@tpindex gsl_poly_complex_workspace +@tindex gsl_poly_complex_workspace This function allocates space for a @code{gsl_poly_complex_workspace} struct and a workspace suitable for solving a polynomial with @var{n} coefficients using the routine @code{gsl_poly_complex_solve}. @@ -344,7 +344,7 @@ @example $ ./a.out -@verbatiminclude examples/polyroots.out +@verbatiminclude examples/polyroots.txt @end example @noindent diff -Nru gsl-doc-1.16/doc/qrng.texi gsl-doc-2.3/doc/qrng.texi --- gsl-doc-1.16/doc/qrng.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/qrng.texi 2015-11-03 16:21:55.000000000 +0000 @@ -17,7 +17,7 @@ * Quasi-random number generator initialization:: * Sampling from a quasi-random number generator:: * Auxiliary quasi-random number generator functions:: -* Saving and resorting quasi-random number generator state:: +* Saving and restoring quasi-random number generator state:: * Quasi-random number generator algorithms:: * Quasi-random number generator examples:: * Quasi-random number references:: @@ -27,8 +27,8 @@ @section Quasi-random number generator initialization @deftypefun {gsl_qrng *} gsl_qrng_alloc (const gsl_qrng_type * @var{T}, unsigned int @var{d}) -@tpindex gsl_qrng -@tpindex gsl_qrng_type +@tindex gsl_qrng +@tindex gsl_qrng_type This function returns a pointer to a newly-created instance of a quasi-random sequence generator of type @var{T} and dimension @var{d}. If there is insufficient memory to create the generator then the @@ -79,8 +79,8 @@ @end deftypefun -@node Saving and resorting quasi-random number generator state -@section Saving and resorting quasi-random number generator state +@node Saving and restoring quasi-random number generator state +@section Saving and restoring quasi-random number generator state @deftypefun int gsl_qrng_memcpy (gsl_qrng * @var{dest}, const gsl_qrng * @var{src}) This function copies the quasi-random sequence generator @var{src} into the diff -Nru gsl-doc-1.16/doc/randist.texi gsl-doc-2.3/doc/randist.texi --- gsl-doc-1.16/doc/randist.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/randist.texi 2016-08-10 21:24:45.000000000 +0000 @@ -41,6 +41,7 @@ * The Gaussian Distribution:: * The Gaussian Tail Distribution:: * The Bivariate Gaussian Distribution:: +* The Multivariate Gaussian Distribution:: * The Exponential Distribution:: * The Laplace Distribution:: * The Exponential Power Distribution:: @@ -366,6 +367,87 @@ @end tex @page +@node The Multivariate Gaussian Distribution +@section The Multivariate Gaussian Distribution + +@deftypefun int gsl_ran_multivariate_gaussian (const gsl_rng * @var{r}, const gsl_vector * @var{mu}, const gsl_matrix * @var{L}, gsl_vector * @var{result}) +@cindex Bivariate Gaussian distribution +@cindex two dimensional Gaussian distribution +@cindex Gaussian distribution, bivariate +This function generates a random vector satisfying the @math{k}-dimensional multivariate Gaussian +distribution with mean @math{\mu} and variance-covariance matrix +@math{\Sigma}. On input, the @math{k}-vector @math{\mu} is given in @var{mu}, and +the Cholesky factor of the @math{k}-by-@math{k} matrix @math{\Sigma = L L^T} is +given in the lower triangle of @var{L}, as output from @code{gsl_linalg_cholesky_decomp}. +The random vector is stored in @var{result} on output. The probability distribution +for multivariate Gaussian random variates is +@tex +\beforedisplay +$$ +p(x_1,\dots,x_k) dx_1 \dots dx_k = {1 \over \sqrt{(2 \pi)^k |\Sigma|}} \exp \left(-{1 \over 2} (x - \mu)^T \Sigma^{-1} (x - \mu)\right) dx_1 \dots dx_k +$$ +\afterdisplay +@end tex +@ifinfo + +@example +p(x_1,...,x_k) dx_1 ... dx_k = @{1 \over \sqrt@{(2 \pi)^k |\Sigma|@} \exp \left(-@{1 \over 2@} (x - \mu)^T \Sigma^@{-1@} (x - \mu)\right) dx_1 \dots dx_k +@end example + +@end ifinfo +@end deftypefun + +@deftypefun int gsl_ran_multivariate_gaussian_pdf (const gsl_vector * @var{x}, const gsl_vector * @var{mu}, const gsl_matrix * @var{L}, double * @var{result}, gsl_vector * @var{work}) +@deftypefunx int gsl_ran_multivariate_gaussian_log_pdf (const gsl_vector * @var{x}, const gsl_vector * @var{mu}, const gsl_matrix * @var{L}, double * @var{result}, gsl_vector * @var{work}) +These functions compute @math{p(x)} or @math{\log{p(x)}} at the point @var{x}, using mean vector +@var{mu} and variance-covariance matrix specified by its Cholesky factor @var{L} using the formula +above. Additional workspace of length @math{k} is required in @var{work}. +@end deftypefun + +@deftypefun int gsl_ran_multivariate_gaussian_mean (const gsl_matrix * @var{X}, gsl_vector * @var{mu_hat}) +Given a set of @math{n} samples @math{X_j} from a @math{k}-dimensional multivariate Gaussian distribution, +this function computes the maximum likelihood estimate of the mean of the distribution, given by +@tex +\beforedisplay +$$ +\Hat{\mu} = {1 \over n} \sum_{j=1}^n X_j +$$ +\afterdisplay +@end tex +@ifinfo + +@example +\Hat@{\mu@} = @{1 \over n@} \sum_@{j=1@}^n X_j +@end example + +@end ifinfo +The samples @math{X_1,X_2,\dots,X_n} are given in the @math{n}-by-@math{k} matrix @var{X}, and the maximum +likelihood estimate of the mean is stored in @var{mu_hat} on output. +@end deftypefun + +@deftypefun int gsl_ran_multivariate_gaussian_vcov (const gsl_matrix * @var{X}, gsl_matrix * @var{sigma_hat}) +Given a set of @math{n} samples @math{X_j} from a @math{k}-dimensional multivariate Gaussian distribution, +this function computes the maximum likelihood estimate of the variance-covariance matrix of the distribution, +given by +@tex +\beforedisplay +$$ +\Hat{\Sigma} = {1 \over n} \sum_{j=1}^n \left( X_j - \Hat{\mu} \right) \left( X_j - \Hat{\mu} \right)^T +$$ +\afterdisplay +@end tex +@ifinfo + +@example +\Hat@{\Sigma@} = @{1 \over n@} \sum_@{j=1@}^n \left( X_j - \Hat@{\mu@} \right) \left( X_j - \Hat@{\mu@} \right)^T +@end example + +@end ifinfo +The samples @math{X_1,X_2,\dots,X_n} are given in the @math{n}-by-@math{k} matrix @var{X} and the maximum +likelihood estimate of the variance-covariance matrix is stored in @var{sigma_hat} on output. +@end deftypefun + +@page @node The Exponential Distribution @section The Exponential Distribution @deftypefun double gsl_ran_exponential (const gsl_rng * @var{r}, double @var{mu}) @@ -1626,7 +1708,7 @@ be made, since it only takes a finite set of @math{K} outcomes. @deftypefun {gsl_ran_discrete_t *} gsl_ran_discrete_preproc (size_t @var{K}, const double * @var{P}) -@tpindex gsl_ran_discrete_t +@tindex gsl_ran_discrete_t @cindex Discrete random numbers @cindex Discrete random numbers, preprocessing This function returns a pointer to a structure that contains the lookup @@ -2180,7 +2262,7 @@ @example $ ./a.out -@verbatiminclude examples/randpoisson.out +@verbatiminclude examples/randpoisson.txt @end example @noindent @@ -2191,7 +2273,7 @@ @example $ GSL_RNG_SEED=123 ./a.out -@verbatiminclude examples/randpoisson.2.out +@verbatiminclude examples/randpoisson2.txt @end example @noindent @@ -2220,7 +2302,7 @@ Here is the output of the program, @example -@verbatiminclude examples/cdf.out +@verbatiminclude examples/cdf.txt @end example @node Random Number Distribution References and Further Reading diff -Nru gsl-doc-1.16/doc/regularized2.eps gsl-doc-2.3/doc/regularized2.eps --- gsl-doc-1.16/doc/regularized2.eps 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/regularized2.eps 2016-10-27 11:20:46.000000000 +0000 @@ -0,0 +1,1769 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: regularized2.eps +%%Creator: gnuplot 4.6 patchlevel 2 +%%CreationDate: Wed Oct 26 06:04:23 2016 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 626 338 +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color true def +/Blacktext false def +/Solid true def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -46 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 626 50 lineto 626 338 lineto 50 338 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.6 (September 2012) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse + clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title (regularized2.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 2) + /Author (palken) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Wed Oct 26 06:04:23 2016) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.050 0.050 scale +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 11520.00 5760.00 BoxColFill} if +1.000 UL +LTb +LCb setrgbcolor +602 448 M +63 0 V +4842 0 R +-63 0 V +stroke +518 448 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (-1)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 893 M +63 0 V +4842 0 R +-63 0 V +stroke +518 893 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (0)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 1337 M +63 0 V +4842 0 R +-63 0 V +stroke +518 1337 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (1)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 1782 M +63 0 V +4842 0 R +-63 0 V +stroke +518 1782 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (2)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 2227 M +63 0 V +4842 0 R +-63 0 V +stroke +518 2227 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (3)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 2671 M +63 0 V +4842 0 R +-63 0 V +stroke +518 2671 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (4)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 3116 M +63 0 V +4842 0 R +-63 0 V +stroke +518 3116 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (5)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 3560 M +63 0 V +4842 0 R +-63 0 V +stroke +518 3560 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (6)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 4005 M +63 0 V +4842 0 R +-63 0 V +stroke +518 4005 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (7)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 4450 M +63 0 V +4842 0 R +-63 0 V +stroke +518 4450 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (8)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 4894 M +63 0 V +4842 0 R +-63 0 V +stroke +518 4894 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (9)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 5339 M +63 0 V +4842 0 R +-63 0 V +stroke +518 5339 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (10)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 448 M +0 63 V +0 4828 R +0 -63 V +stroke +602 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (2.3)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +5507 448 M +0 63 V +0 4828 R +0 -63 V +stroke +5507 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (3.2)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +602 5339 N +602 448 L +4905 0 V +0 4891 V +-4905 0 V +Z stroke +LCb setrgbcolor +112 2893 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 140.0 0.0 true true 0 (solution norm ||c||)] +] -46.7 MCshow +grestore +LTb +LCb setrgbcolor +3054 98 M +[ [(Helvetica) 140.0 0.0 true true 0 (residual norm ||y - X c||)] +] -46.7 MCshow +LTb +3054 5549 M +[ [(Helvetica) 140.0 0.0 true true 0 (L-curve)] +] -46.7 MCshow +0.300 UP +1.000 UL +LTb +LCb setrgbcolor +% Begin plot #1 +0.300 UP +2.000 UL +LTb +LCb setrgbcolor +/Helvetica findfont 140 scalefont setfont +/vshift -46 def +5214 512 M +-13 27 V +-13 27 V +-13 26 V +-15 27 V +-16 27 V +-17 28 V +-19 29 V +-22 29 V +-23 29 V +-26 30 V +-27 28 V +-27 28 V +-28 26 V +-28 24 V +-26 22 V +-23 21 V +-21 18 V +-18 17 V +-16 14 V +-12 14 V +-11 11 V +-8 12 V +-8 10 V +-7 12 V +-7 12 V +-7 13 V +-8 16 V +-8 17 V +-10 21 V +-10 22 V +-11 24 V +-12 24 V +-12 25 V +-13 24 V +-13 24 V +-12 22 V +-11 21 V +-11 19 V +-9 18 V +-9 17 V +-8 17 V +-7 16 V +-8 16 V +-7 18 V +-8 20 V +-9 23 V +-11 25 V +-13 29 V +-15 31 V +-18 33 V +-21 34 V +-25 35 V +-29 35 V +-34 35 V +-37 34 V +-42 33 V +-45 31 V +-47 30 V +-47 28 V +-48 26 V +-45 24 V +-41 21 V +-37 19 V +-31 17 V +-26 15 V +-21 12 V +-16 11 V +-12 10 V +-10 8 V +-7 6 V +-5 7 V +-4 5 V +-4 6 V +-3 6 V +-3 7 V +-4 8 V +-3 11 V +-5 13 V +-4 17 V +-6 20 V +-7 22 V +-7 26 V +-9 27 V +-10 28 V +-10 29 V +-11 28 V +-11 27 V +-11 25 V +-11 24 V +-10 22 V +-10 20 V +-8 18 V +-7 17 V +-6 14 V +-5 14 V +-5 13 V +-4 13 V +-4 13 V +-4 15 V +-4 17 V +-6 21 V +-6 23 V +-7 28 V +-9 30 V +stroke 3666 2673 M +-10 34 V +-14 35 V +-16 38 V +-19 38 V +-24 38 V +-29 39 V +-34 39 V +-41 38 V +-48 37 V +-55 37 V +-63 35 V +-70 34 V +-76 33 V +-81 31 V +-84 28 V +-83 27 V +-81 24 V +-76 22 V +-67 20 V +-59 17 V +-48 16 V +-40 13 V +-30 11 V +-24 9 V +-17 8 V +-12 7 V +-9 5 V +-7 5 V +-4 4 V +-3 3 V +-2 3 V +-2 3 V +-2 3 V +-1 3 V +-1 3 V +-2 5 V +-1 6 V +-2 9 V +-2 11 V +-3 15 V +-3 18 V +-4 23 V +-5 26 V +-5 28 V +-7 31 V +-7 32 V +-8 31 V +-9 32 V +-9 31 V +-11 29 V +-10 28 V +-10 26 V +-10 23 V +-9 22 V +-8 19 V +-7 18 V +-6 15 V +-4 13 V +-4 11 V +-3 11 V +-2 9 V +-2 9 V +-2 8 V +-2 9 V +-1 11 V +-2 13 V +-2 15 V +-2 19 V +-3 24 V +-4 27 V +-4 31 V +-6 35 V +-6 36 V +-9 39 V +-10 39 V +-13 41 V +-16 41 V +-20 41 V +-24 41 V +-29 41 V +-37 41 V +-44 40 V +-54 40 V +-65 40 V +-77 39 V +-91 38 V +-106 37 V +-123 35 V +-138 35 V +-152 33 V +-165 31 V +-174 29 V +-176 27 V +-122 18 V +5214 512 CircleF +5201 539 CircleF +5188 566 CircleF +5175 592 CircleF +5160 619 CircleF +5144 646 CircleF +5127 674 CircleF +5108 703 CircleF +5086 732 CircleF +5063 761 CircleF +5037 791 CircleF +5010 819 CircleF +4983 847 CircleF +4955 873 CircleF +4927 897 CircleF +4901 919 CircleF +4878 940 CircleF +4857 958 CircleF +4839 975 CircleF +4823 989 CircleF +4811 1003 CircleF +4800 1014 CircleF +4792 1026 CircleF +4784 1036 CircleF +4777 1048 CircleF +4770 1060 CircleF +4763 1073 CircleF +4755 1089 CircleF +4747 1106 CircleF +4737 1127 CircleF +4727 1149 CircleF +4716 1173 CircleF +4704 1197 CircleF +4692 1222 CircleF +4679 1246 CircleF +4666 1270 CircleF +4654 1292 CircleF +4643 1313 CircleF +4632 1332 CircleF +4623 1350 CircleF +4614 1367 CircleF +4606 1384 CircleF +4599 1400 CircleF +4591 1416 CircleF +4584 1434 CircleF +4576 1454 CircleF +4567 1477 CircleF +4556 1502 CircleF +4543 1531 CircleF +4528 1562 CircleF +4510 1595 CircleF +4489 1629 CircleF +4464 1664 CircleF +4435 1699 CircleF +4401 1734 CircleF +4364 1768 CircleF +4322 1801 CircleF +4277 1832 CircleF +4230 1862 CircleF +4183 1890 CircleF +4135 1916 CircleF +4090 1940 CircleF +4049 1961 CircleF +4012 1980 CircleF +3981 1997 CircleF +3955 2012 CircleF +3934 2024 CircleF +3918 2035 CircleF +3906 2045 CircleF +3896 2053 CircleF +3889 2059 CircleF +3884 2066 CircleF +3880 2071 CircleF +3876 2077 CircleF +3873 2083 CircleF +3870 2090 CircleF +3866 2098 CircleF +3863 2109 CircleF +3858 2122 CircleF +3854 2139 CircleF +3848 2159 CircleF +3841 2181 CircleF +3834 2207 CircleF +3825 2234 CircleF +3815 2262 CircleF +3805 2291 CircleF +3794 2319 CircleF +3783 2346 CircleF +3772 2371 CircleF +3761 2395 CircleF +3751 2417 CircleF +3741 2437 CircleF +3733 2455 CircleF +3726 2472 CircleF +3720 2486 CircleF +3715 2500 CircleF +3710 2513 CircleF +3706 2526 CircleF +3702 2539 CircleF +3698 2554 CircleF +3694 2571 CircleF +3688 2592 CircleF +3682 2615 CircleF +3675 2643 CircleF +3666 2673 CircleF +3656 2707 CircleF +3642 2742 CircleF +3626 2780 CircleF +3607 2818 CircleF +3583 2856 CircleF +3554 2895 CircleF +3520 2934 CircleF +3479 2972 CircleF +3431 3009 CircleF +3376 3046 CircleF +3313 3081 CircleF +3243 3115 CircleF +3167 3148 CircleF +3086 3179 CircleF +3002 3207 CircleF +2919 3234 CircleF +2838 3258 CircleF +2762 3280 CircleF +2695 3300 CircleF +2636 3317 CircleF +2588 3333 CircleF +2548 3346 CircleF +2518 3357 CircleF +2494 3366 CircleF +2477 3374 CircleF +2465 3381 CircleF +2456 3386 CircleF +2449 3391 CircleF +2445 3395 CircleF +2442 3398 CircleF +2440 3401 CircleF +2438 3404 CircleF +2436 3407 CircleF +2435 3410 CircleF +2434 3413 CircleF +2432 3418 CircleF +2431 3424 CircleF +2429 3433 CircleF +2427 3444 CircleF +2424 3459 CircleF +2421 3477 CircleF +2417 3500 CircleF +2412 3526 CircleF +2407 3554 CircleF +2400 3585 CircleF +2393 3617 CircleF +2385 3648 CircleF +2376 3680 CircleF +2367 3711 CircleF +2356 3740 CircleF +2346 3768 CircleF +2336 3794 CircleF +2326 3817 CircleF +2317 3839 CircleF +2309 3858 CircleF +2302 3876 CircleF +2296 3891 CircleF +2292 3904 CircleF +2288 3915 CircleF +2285 3926 CircleF +2283 3935 CircleF +2281 3944 CircleF +2279 3952 CircleF +2277 3961 CircleF +2276 3972 CircleF +2274 3985 CircleF +2272 4000 CircleF +2270 4019 CircleF +2267 4043 CircleF +2263 4070 CircleF +2259 4101 CircleF +2253 4136 CircleF +2247 4172 CircleF +2238 4211 CircleF +2228 4250 CircleF +2215 4291 CircleF +2199 4332 CircleF +2179 4373 CircleF +2155 4414 CircleF +2126 4455 CircleF +2089 4496 CircleF +2045 4536 CircleF +1991 4576 CircleF +1926 4616 CircleF +1849 4655 CircleF +1758 4693 CircleF +1652 4730 CircleF +1529 4765 CircleF +1391 4800 CircleF +1239 4833 CircleF +1074 4864 CircleF +900 4893 CircleF +724 4920 CircleF +% End plot #1 +% Begin plot #2 +3.000 UP +2.000 UL +LT6 +0.90 0.17 0.09 C /Helvetica findfont 140 scalefont setfont +2445 3395 Circle +% End plot #2 +1.000 UL +LTb +LCb setrgbcolor +602 5339 N +602 448 L +4905 0 V +0 4891 V +-4905 0 V +Z stroke +0.300 UP +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +6362 448 M +63 0 V +4842 0 R +-63 0 V +stroke +6278 448 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (-1)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +6362 1920 M +31 0 V +4874 0 R +-31 0 V +6362 2782 M +31 0 V +4874 0 R +-31 0 V +6362 3393 M +31 0 V +4874 0 R +-31 0 V +6362 3867 M +31 0 V +4874 0 R +-31 0 V +6362 4254 M +31 0 V +4874 0 R +-31 0 V +6362 4581 M +31 0 V +4874 0 R +-31 0 V +6362 4865 M +31 0 V +4874 0 R +-31 0 V +6362 5115 M +31 0 V +4874 0 R +-31 0 V +6362 5339 M +63 0 V +4842 0 R +-63 0 V +stroke +6278 5339 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (0)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +6362 448 M +0 63 V +0 4828 R +0 -63 V +stroke +6362 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (-10)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +6808 448 M +0 63 V +0 4828 R +0 -63 V +stroke +6808 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (-9)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +7254 448 M +0 63 V +0 4828 R +0 -63 V +stroke +7254 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (-8)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +7700 448 M +0 63 V +0 4828 R +0 -63 V +stroke +7700 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (-7)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +8146 448 M +0 63 V +0 4828 R +0 -63 V +stroke +8146 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (-6)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +8592 448 M +0 63 V +0 4828 R +0 -63 V +stroke +8592 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (-5)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +9037 448 M +0 63 V +0 4828 R +0 -63 V +stroke +9037 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (-4)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +9483 448 M +0 63 V +0 4828 R +0 -63 V +stroke +9483 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (-3)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +9929 448 M +0 63 V +0 4828 R +0 -63 V +stroke +9929 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (-2)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +10375 448 M +0 63 V +0 4828 R +0 -63 V +stroke +10375 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (-1)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +10821 448 M +0 63 V +0 4828 R +0 -63 V +stroke +10821 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (0)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +11267 448 M +0 63 V +0 4828 R +0 -63 V +stroke +11267 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (1)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +6362 5339 N +0 -4891 V +4905 0 V +0 4891 V +-4905 0 V +Z stroke +LCb setrgbcolor +5872 2893 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 140.0 0.0 true true 0 (G\()] +[(Symbol) 140.0 0.0 true true 0 (l)] +[(Helvetica) 140.0 0.0 true true 0 (\))] +] -46.7 MCshow +grestore +LTb +LCb setrgbcolor +8814 98 M +[ [(Symbol) 140.0 0.0 true true 0 (l)] +] -46.7 MCshow +LTb +8814 5549 M +[ [(Helvetica) 140.0 0.0 true true 0 (GCV curve)] +] -46.7 MCshow +0.300 UP +1.000 UL +LTb +LCb setrgbcolor +% Begin plot #1 +0.300 UP +2.000 UL +LTb +LCb setrgbcolor +/Helvetica findfont 140 scalefont setfont +10926 647 M +-21 25 V +-21 25 V +-22 25 V +-21 25 V +-22 23 V +-21 23 V +-21 22 V +-22 22 V +-21 21 V +-22 21 V +-21 22 V +-21 22 V +-22 24 V +-21 24 V +-22 24 V +-21 26 V +-21 25 V +-22 25 V +-21 24 V +-22 24 V +-21 22 V +-21 21 V +-22 19 V +-21 19 V +-22 17 V +-21 17 V +-21 17 V +-22 18 V +-21 18 V +-22 19 V +-21 21 V +-22 23 V +-21 24 V +-21 26 V +-22 28 V +-21 29 V +-22 30 V +-21 29 V +-21 29 V +-22 28 V +-21 26 V +-22 24 V +-21 22 V +-21 20 V +-22 17 V +-21 15 V +-22 13 V +-21 12 V +-21 11 V +-22 10 V +-21 10 V +-22 9 V +-21 10 V +-21 10 V +-22 12 V +-21 13 V +-22 15 V +-21 17 V +-21 19 V +-22 21 V +-21 23 V +-22 25 V +-21 27 V +-21 26 V +-22 27 V +-21 26 V +-22 25 V +-21 23 V +-21 20 V +-22 19 V +-21 17 V +-22 16 V +-21 13 V +-21 13 V +-22 12 V +-21 12 V +-22 11 V +-21 12 V +-21 13 V +-22 15 V +-21 16 V +-22 18 V +-21 21 V +-22 24 V +-21 27 V +-21 30 V +-22 34 V +-21 36 V +-22 38 V +-21 40 V +-21 41 V +-22 40 V +-21 39 V +-22 36 V +-21 34 V +-21 31 V +-22 27 V +-21 24 V +-22 21 V +-21 18 V +-21 15 V +-22 13 V +-21 11 V +-22 9 V +stroke 8700 2897 M +-21 7 V +-21 7 V +-22 6 V +-21 6 V +-22 5 V +-21 5 V +-21 6 V +-22 6 V +-21 7 V +-22 8 V +-21 10 V +-21 12 V +-22 14 V +-21 17 V +-22 21 V +-21 24 V +-21 27 V +-22 31 V +-21 33 V +-22 35 V +-21 35 V +-21 36 V +-22 34 V +-21 32 V +-22 29 V +-21 26 V +-21 24 V +-22 20 V +-21 18 V +-22 15 V +-21 13 V +-22 12 V +-21 10 V +-21 9 V +-22 9 V +-21 8 V +-22 8 V +-21 9 V +-21 9 V +-22 11 V +-21 12 V +-22 15 V +-21 16 V +-21 21 V +-22 23 V +-21 28 V +-22 33 V +-21 38 V +-21 43 V +-22 49 V +-21 54 V +-22 58 V +-21 63 V +-21 64 V +-22 65 V +-21 64 V +-22 62 V +-21 59 V +-21 54 V +-22 49 V +-21 43 V +-22 38 V +-21 32 V +-21 28 V +-22 23 V +-21 20 V +-22 16 V +-21 13 V +-21 11 V +-22 9 V +-21 7 V +-22 6 V +-21 5 V +-21 4 V +-22 4 V +-21 2 V +-22 3 V +-21 2 V +-22 2 V +-21 3 V +-21 2 V +-22 3 V +-21 3 V +-22 3 V +-21 5 V +-21 6 V +-22 7 V +-21 10 V +-22 12 V +-21 17 V +-21 20 V +-22 26 V +-21 32 V +-22 39 V +-21 45 V +10926 647 CircleF +10905 672 CircleF +10884 697 CircleF +10862 722 CircleF +10841 747 CircleF +10819 770 CircleF +10798 793 CircleF +10777 815 CircleF +10755 837 CircleF +10734 858 CircleF +10712 879 CircleF +10691 901 CircleF +10670 923 CircleF +10648 947 CircleF +10627 971 CircleF +10605 995 CircleF +10584 1021 CircleF +10563 1046 CircleF +10541 1071 CircleF +10520 1095 CircleF +10498 1119 CircleF +10477 1141 CircleF +10456 1162 CircleF +10434 1181 CircleF +10413 1200 CircleF +10391 1217 CircleF +10370 1234 CircleF +10349 1251 CircleF +10327 1269 CircleF +10306 1287 CircleF +10284 1306 CircleF +10263 1327 CircleF +10241 1350 CircleF +10220 1374 CircleF +10199 1400 CircleF +10177 1428 CircleF +10156 1457 CircleF +10134 1487 CircleF +10113 1516 CircleF +10092 1545 CircleF +10070 1573 CircleF +10049 1599 CircleF +10027 1623 CircleF +10006 1645 CircleF +9985 1665 CircleF +9963 1682 CircleF +9942 1697 CircleF +9920 1710 CircleF +9899 1722 CircleF +9878 1733 CircleF +9856 1743 CircleF +9835 1753 CircleF +9813 1762 CircleF +9792 1772 CircleF +9771 1782 CircleF +9749 1794 CircleF +9728 1807 CircleF +9706 1822 CircleF +9685 1839 CircleF +9664 1858 CircleF +9642 1879 CircleF +9621 1902 CircleF +9599 1927 CircleF +9578 1954 CircleF +9557 1980 CircleF +9535 2007 CircleF +9514 2033 CircleF +9492 2058 CircleF +9471 2081 CircleF +9450 2101 CircleF +9428 2120 CircleF +9407 2137 CircleF +9385 2153 CircleF +9364 2166 CircleF +9343 2179 CircleF +9321 2191 CircleF +9300 2203 CircleF +9278 2214 CircleF +9257 2226 CircleF +9236 2239 CircleF +9214 2254 CircleF +9193 2270 CircleF +9171 2288 CircleF +9150 2309 CircleF +9128 2333 CircleF +9107 2360 CircleF +9086 2390 CircleF +9064 2424 CircleF +9043 2460 CircleF +9021 2498 CircleF +9000 2538 CircleF +8979 2579 CircleF +8957 2619 CircleF +8936 2658 CircleF +8914 2694 CircleF +8893 2728 CircleF +8872 2759 CircleF +8850 2786 CircleF +8829 2810 CircleF +8807 2831 CircleF +8786 2849 CircleF +8765 2864 CircleF +8743 2877 CircleF +8722 2888 CircleF +8700 2897 CircleF +8679 2904 CircleF +8658 2911 CircleF +8636 2917 CircleF +8615 2923 CircleF +8593 2928 CircleF +8572 2933 CircleF +8551 2939 CircleF +8529 2945 CircleF +8508 2952 CircleF +8486 2960 CircleF +8465 2970 CircleF +8444 2982 CircleF +8422 2996 CircleF +8401 3013 CircleF +8379 3034 CircleF +8358 3058 CircleF +8337 3085 CircleF +8315 3116 CircleF +8294 3149 CircleF +8272 3184 CircleF +8251 3219 CircleF +8230 3255 CircleF +8208 3289 CircleF +8187 3321 CircleF +8165 3350 CircleF +8144 3376 CircleF +8123 3400 CircleF +8101 3420 CircleF +8080 3438 CircleF +8058 3453 CircleF +8037 3466 CircleF +8015 3478 CircleF +7994 3488 CircleF +7973 3497 CircleF +7951 3506 CircleF +7930 3514 CircleF +7908 3522 CircleF +7887 3531 CircleF +7866 3540 CircleF +7844 3551 CircleF +7823 3563 CircleF +7801 3578 CircleF +7780 3594 CircleF +7759 3615 CircleF +7737 3638 CircleF +7716 3666 CircleF +7694 3699 CircleF +7673 3737 CircleF +7652 3780 CircleF +7630 3829 CircleF +7609 3883 CircleF +7587 3941 CircleF +7566 4004 CircleF +7545 4068 CircleF +7523 4133 CircleF +7502 4197 CircleF +7480 4259 CircleF +7459 4318 CircleF +7438 4372 CircleF +7416 4421 CircleF +7395 4464 CircleF +7373 4502 CircleF +7352 4534 CircleF +7331 4562 CircleF +7309 4585 CircleF +7288 4605 CircleF +7266 4621 CircleF +7245 4634 CircleF +7224 4645 CircleF +7202 4654 CircleF +7181 4661 CircleF +7159 4667 CircleF +7138 4672 CircleF +7117 4676 CircleF +7095 4680 CircleF +7074 4682 CircleF +7052 4685 CircleF +7031 4687 CircleF +7009 4689 CircleF +6988 4692 CircleF +6967 4694 CircleF +6945 4697 CircleF +6924 4700 CircleF +6902 4703 CircleF +6881 4708 CircleF +6860 4714 CircleF +6838 4721 CircleF +6817 4731 CircleF +6795 4743 CircleF +6774 4760 CircleF +6753 4780 CircleF +6731 4806 CircleF +6710 4838 CircleF +6688 4877 CircleF +6667 4922 CircleF +% End plot #1 +% Begin plot #2 +3.000 UP +2.000 UL +LT6 +0.90 0.17 0.09 C /Helvetica findfont 140 scalefont setfont +10926 647 Circle +% End plot #2 +1.000 UL +LTb +LCb setrgbcolor +6362 5339 N +0 -4891 V +4905 0 V +0 4891 V +-4905 0 V +Z stroke +0.300 UP +1.000 UL +LTb +LCb setrgbcolor +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Symbol Helvetica diff -Nru gsl-doc-1.16/doc/regularized.eps gsl-doc-2.3/doc/regularized.eps --- gsl-doc-1.16/doc/regularized.eps 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/regularized.eps 2016-10-27 11:20:46.000000000 +0000 @@ -0,0 +1,1857 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: regularized.eps +%%Creator: gnuplot 4.6 patchlevel 2 +%%CreationDate: Wed Oct 26 06:06:41 2016 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 626 338 +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color true def +/Blacktext false def +/Solid true def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -46 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 626 50 lineto 626 338 lineto 50 338 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.6 (September 2012) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse + clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title (regularized.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 2) + /Author (palken) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Wed Oct 26 06:06:41 2016) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.050 0.050 scale +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 11520.00 5760.00 BoxColFill} if +1.000 UL +LTb +LCb setrgbcolor +602 448 M +63 0 V +4842 0 R +-63 0 V +stroke +518 448 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (-1)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 939 M +31 0 V +4874 0 R +-31 0 V +602 1226 M +31 0 V +4874 0 R +-31 0 V +602 1430 M +31 0 V +4874 0 R +-31 0 V +602 1588 M +31 0 V +4874 0 R +-31 0 V +602 1717 M +31 0 V +4874 0 R +-31 0 V +602 1826 M +31 0 V +4874 0 R +-31 0 V +602 1920 M +31 0 V +4874 0 R +-31 0 V +602 2004 M +31 0 V +4874 0 R +-31 0 V +602 2078 M +63 0 V +4842 0 R +-63 0 V +stroke +518 2078 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (0)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 2569 M +31 0 V +4874 0 R +-31 0 V +602 2856 M +31 0 V +4874 0 R +-31 0 V +602 3060 M +31 0 V +4874 0 R +-31 0 V +602 3218 M +31 0 V +4874 0 R +-31 0 V +602 3347 M +31 0 V +4874 0 R +-31 0 V +602 3456 M +31 0 V +4874 0 R +-31 0 V +602 3551 M +31 0 V +4874 0 R +-31 0 V +602 3634 M +31 0 V +4874 0 R +-31 0 V +602 3709 M +63 0 V +4842 0 R +-63 0 V +stroke +518 3709 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (1)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 4199 M +31 0 V +4874 0 R +-31 0 V +602 4487 M +31 0 V +4874 0 R +-31 0 V +602 4690 M +31 0 V +4874 0 R +-31 0 V +602 4848 M +31 0 V +4874 0 R +-31 0 V +602 4977 M +31 0 V +4874 0 R +-31 0 V +602 5086 M +31 0 V +4874 0 R +-31 0 V +602 5181 M +31 0 V +4874 0 R +-31 0 V +602 5264 M +31 0 V +4874 0 R +-31 0 V +602 5339 M +63 0 V +4842 0 R +-63 0 V +stroke +518 5339 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (2)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +602 448 M +0 63 V +0 4828 R +0 -63 V +stroke +602 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (1)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1340 448 M +0 31 V +0 4860 R +0 -31 V +1772 448 M +0 31 V +0 4860 R +0 -31 V +2079 448 M +0 31 V +0 4860 R +0 -31 V +2316 448 M +0 31 V +0 4860 R +0 -31 V +2510 448 M +0 31 V +0 4860 R +0 -31 V +2675 448 M +0 31 V +0 4860 R +0 -31 V +2817 448 M +0 31 V +0 4860 R +0 -31 V +2942 448 M +0 31 V +0 4860 R +0 -31 V +3055 448 M +0 63 V +0 4828 R +0 -63 V +stroke +3055 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (2)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +3793 448 M +0 31 V +0 4860 R +0 -31 V +4225 448 M +0 31 V +0 4860 R +0 -31 V +4531 448 M +0 31 V +0 4860 R +0 -31 V +4769 448 M +0 31 V +0 4860 R +0 -31 V +4963 448 M +0 31 V +0 4860 R +0 -31 V +5127 448 M +0 31 V +0 4860 R +0 -31 V +5269 448 M +0 31 V +0 4860 R +0 -31 V +5395 448 M +0 31 V +0 4860 R +0 -31 V +5507 448 M +0 63 V +0 4828 R +0 -63 V +stroke +5507 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (3)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +602 5339 N +602 448 L +4905 0 V +0 4891 V +-4905 0 V +Z stroke +LCb setrgbcolor +112 2893 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 140.0 0.0 true true 0 (solution norm ||c||)] +] -46.7 MCshow +grestore +LTb +LCb setrgbcolor +3054 98 M +[ [(Helvetica) 140.0 0.0 true true 0 (residual norm ||y - X c||)] +] -46.7 MCshow +LTb +3054 5549 M +[ [(Helvetica) 140.0 0.0 true true 0 (L-curve)] +] -46.7 MCshow +0.300 UP +1.000 UL +LTb +LCb setrgbcolor +% Begin plot #1 +0.300 UP +2.000 UL +LTb +LCb setrgbcolor +/Helvetica findfont 140 scalefont setfont +/vshift -46 def +3561 1835 M +-49 32 V +-50 30 V +-53 30 V +-54 27 V +-56 26 V +-58 25 V +-59 23 V +-60 22 V +-62 20 V +-62 20 V +-64 18 V +-63 17 V +-64 15 V +-64 15 V +-64 13 V +-62 13 V +-62 12 V +-60 10 V +-59 11 V +-56 9 V +-54 8 V +-51 8 V +-48 7 V +-45 7 V +-41 6 V +-38 6 V +-35 5 V +-31 5 V +-29 4 V +-24 4 V +-22 4 V +-20 3 V +-16 3 V +-15 3 V +-12 3 V +-11 2 V +-9 2 V +-8 2 V +-7 2 V +-5 1 V +-5 2 V +-4 1 V +-4 2 V +-2 1 V +-3 1 V +-2 1 V +-1 1 V +-2 0 V +-1 1 V +-1 1 V +-1 0 V +0 1 V +-1 0 V +0 1 V +-1 0 V +0 1 V +-1 0 V +0 1 V +0 1 V +-1 0 V +0 1 V +0 1 V +0 1 V +0 1 V +0 1 V +0 1 V +0 1 V +0 1 V +0 2 V +0 2 V +0 2 V +0 2 V +0 3 V +0 3 V +0 4 V +0 5 V +0 6 V +0 6 V +0 8 V +0 10 V +0 10 V +0 13 V +0 14 V +0 17 V +0 19 V +0 21 V +0 25 V +0 26 V +0 30 V +0 33 V +0 35 V +0 38 V +0 41 V +0 43 V +0 46 V +0 47 V +0 49 V +0 51 V +0 52 V +0 54 V +0 54 V +0 55 V +0 56 V +0 56 V +stroke 1829 3270 M +0 56 V +0 56 V +0 57 V +0 56 V +0 56 V +0 55 V +0 55 V +0 55 V +0 54 V +0 53 V +0 52 V +0 52 V +0 50 V +0 50 V +0 48 V +0 48 V +0 46 V +0 45 V +0 44 V +0 42 V +0 41 V +0 39 V +0 38 V +0 37 V +0 35 V +0 34 V +3561 1835 CircleF +3512 1867 CircleF +3462 1897 CircleF +3409 1927 CircleF +3355 1954 CircleF +3299 1980 CircleF +3241 2005 CircleF +3182 2028 CircleF +3122 2050 CircleF +3060 2070 CircleF +2998 2090 CircleF +2934 2108 CircleF +2871 2125 CircleF +2807 2140 CircleF +2743 2155 CircleF +2679 2168 CircleF +2617 2181 CircleF +2555 2193 CircleF +2495 2203 CircleF +2436 2214 CircleF +2380 2223 CircleF +2326 2231 CircleF +2275 2239 CircleF +2227 2246 CircleF +2182 2253 CircleF +2141 2259 CircleF +2103 2265 CircleF +2068 2270 CircleF +2037 2275 CircleF +2008 2279 CircleF +1984 2283 CircleF +1962 2287 CircleF +1942 2290 CircleF +1926 2293 CircleF +1911 2296 CircleF +1899 2299 CircleF +1888 2301 CircleF +1879 2303 CircleF +1871 2305 CircleF +1864 2307 CircleF +1859 2308 CircleF +1854 2310 CircleF +1850 2311 CircleF +1846 2313 CircleF +1844 2314 CircleF +1841 2315 CircleF +1839 2316 CircleF +1838 2317 CircleF +1836 2317 CircleF +1835 2318 CircleF +1834 2319 CircleF +1833 2319 CircleF +1833 2320 CircleF +1832 2320 CircleF +1832 2321 CircleF +1831 2321 CircleF +1831 2322 CircleF +1831 2322 CircleF +1830 2322 CircleF +1830 2323 CircleF +1830 2323 CircleF +1830 2323 CircleF +1830 2323 CircleF +1830 2324 CircleF +1830 2324 CircleF +1830 2324 CircleF +1830 2324 CircleF +1830 2324 CircleF +1829 2324 CircleF +1829 2324 CircleF +1829 2324 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2325 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2326 CircleF +1829 2327 CircleF +1829 2327 CircleF +1829 2327 CircleF +1829 2327 CircleF +1829 2328 CircleF +1829 2328 CircleF +1829 2329 CircleF +1829 2330 CircleF +1829 2330 CircleF +1829 2331 CircleF +1829 2332 CircleF +1829 2334 CircleF +1829 2336 CircleF +1829 2338 CircleF +1829 2340 CircleF +1829 2343 CircleF +1829 2346 CircleF +1829 2350 CircleF +1829 2355 CircleF +1829 2361 CircleF +1829 2367 CircleF +1829 2375 CircleF +1829 2385 CircleF +1829 2395 CircleF +1829 2408 CircleF +1829 2422 CircleF +1829 2439 CircleF +1829 2458 CircleF +1829 2479 CircleF +1829 2504 CircleF +1829 2530 CircleF +1829 2560 CircleF +1829 2593 CircleF +1829 2628 CircleF +1829 2666 CircleF +1829 2707 CircleF +1829 2750 CircleF +1829 2796 CircleF +1829 2843 CircleF +1829 2892 CircleF +1829 2943 CircleF +1829 2995 CircleF +1829 3049 CircleF +1829 3103 CircleF +1829 3158 CircleF +1829 3214 CircleF +1829 3270 CircleF +1829 3326 CircleF +1829 3382 CircleF +1829 3439 CircleF +1829 3495 CircleF +1829 3551 CircleF +1829 3606 CircleF +1829 3661 CircleF +1829 3716 CircleF +1829 3770 CircleF +1829 3823 CircleF +1829 3875 CircleF +1829 3927 CircleF +1829 3977 CircleF +1829 4027 CircleF +1829 4075 CircleF +1829 4123 CircleF +1829 4169 CircleF +1829 4214 CircleF +1829 4258 CircleF +1829 4300 CircleF +1829 4341 CircleF +1829 4380 CircleF +1829 4418 CircleF +1829 4455 CircleF +1829 4490 CircleF +1829 4524 CircleF +% End plot #1 +% Begin plot #2 +3.000 UP +2.000 UL +LT6 +0.90 0.17 0.09 C /Helvetica findfont 140 scalefont setfont +1829 2325 Circle +% End plot #2 +1.000 UL +LTb +LCb setrgbcolor +602 5339 N +602 448 L +4905 0 V +0 4891 V +-4905 0 V +Z stroke +0.300 UP +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +6362 448 M +63 0 V +4842 0 R +-63 0 V +stroke +6278 448 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (-4)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +6362 939 M +31 0 V +4874 0 R +-31 0 V +6362 1226 M +31 0 V +4874 0 R +-31 0 V +6362 1430 M +31 0 V +4874 0 R +-31 0 V +6362 1588 M +31 0 V +4874 0 R +-31 0 V +6362 1717 M +31 0 V +4874 0 R +-31 0 V +6362 1826 M +31 0 V +4874 0 R +-31 0 V +-4874 94 R +31 0 V +4874 0 R +-31 0 V +-4874 84 R +31 0 V +4874 0 R +-31 0 V +-4874 74 R +63 0 V +4842 0 R +-63 0 V +stroke +6278 2078 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (-3)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +6362 2569 M +31 0 V +4874 0 R +-31 0 V +6362 2856 M +31 0 V +4874 0 R +-31 0 V +6362 3060 M +31 0 V +4874 0 R +-31 0 V +6362 3218 M +31 0 V +4874 0 R +-31 0 V +6362 3347 M +31 0 V +4874 0 R +-31 0 V +6362 3456 M +31 0 V +4874 0 R +-31 0 V +-4874 95 R +31 0 V +4874 0 R +-31 0 V +-4874 83 R +31 0 V +4874 0 R +-31 0 V +-4874 75 R +63 0 V +4842 0 R +-63 0 V +stroke +6278 3709 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (-2)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +6362 4199 M +31 0 V +4874 0 R +-31 0 V +6362 4487 M +31 0 V +4874 0 R +-31 0 V +6362 4690 M +31 0 V +4874 0 R +-31 0 V +6362 4848 M +31 0 V +4874 0 R +-31 0 V +6362 4977 M +31 0 V +4874 0 R +-31 0 V +6362 5086 M +31 0 V +4874 0 R +-31 0 V +-4874 95 R +31 0 V +4874 0 R +-31 0 V +-4874 83 R +31 0 V +4874 0 R +-31 0 V +-4874 75 R +63 0 V +4842 0 R +-63 0 V +stroke +6278 5339 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (-1)] +] -60.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +6362 448 M +0 63 V +0 4828 R +0 -63 V +stroke +6362 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (-2)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +6657 448 M +0 31 V +0 4860 R +0 -31 V +7048 448 M +0 31 V +0 4860 R +0 -31 V +7248 448 M +0 31 V +0 4860 R +0 -31 V +7343 448 M +0 63 V +0 4828 R +0 -63 V +stroke +7343 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (-1)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +7638 448 M +0 31 V +0 4860 R +0 -31 V +8029 448 M +0 31 V +0 4860 R +0 -31 V +8229 448 M +0 31 V +0 4860 R +0 -31 V +8324 448 M +0 63 V +0 4828 R +0 -63 V +stroke +8324 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (0)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +8619 448 M +0 31 V +0 4860 R +0 -31 V +9010 448 M +0 31 V +0 4860 R +0 -31 V +9210 448 M +0 31 V +0 4860 R +0 -31 V +9305 448 M +0 63 V +0 4828 R +0 -63 V +stroke +9305 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (1)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +9600 448 M +0 31 V +0 4860 R +0 -31 V +9991 448 M +0 31 V +0 4860 R +0 -31 V +10191 448 M +0 31 V +0 4860 R +0 -31 V +95 -4860 R +0 63 V +0 4828 R +0 -63 V +stroke +10286 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (2)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +10581 448 M +0 31 V +0 4860 R +0 -31 V +10972 448 M +0 31 V +0 4860 R +0 -31 V +11172 448 M +0 31 V +0 4860 R +0 -31 V +95 -4860 R +0 63 V +0 4828 R +0 -63 V +stroke +11267 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (10)] +[(Helvetica) 112.0 70.0 true true 0 (3)] +] -60.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +6362 5339 N +0 -4891 V +4905 0 V +0 4891 V +-4905 0 V +Z stroke +LCb setrgbcolor +5872 2893 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 140.0 0.0 true true 0 (G\()] +[(Symbol) 140.0 0.0 true true 0 (l)] +[(Helvetica) 140.0 0.0 true true 0 (\))] +] -46.7 MCshow +grestore +LTb +LCb setrgbcolor +8814 98 M +[ [(Symbol) 140.0 0.0 true true 0 (l)] +] -46.7 MCshow +LTb +8814 5549 M +[ [(Helvetica) 140.0 0.0 true true 0 (GCV curve)] +] -46.7 MCshow +0.300 UP +1.000 UL +LTb +LCb setrgbcolor +% Begin plot #1 +0.300 UP +2.000 UL +LTb +LCb setrgbcolor +/Helvetica findfont 140 scalefont setfont +10627 4383 M +-20 -65 V +-20 -67 V +-20 -70 V +-19 -72 V +-20 -74 V +-20 -77 V +-20 -79 V +-20 -80 V +-19 -82 V +-20 -83 V +-20 -84 V +-20 -85 V +-19 -85 V +-20 -85 V +-20 -84 V +-20 -83 V +-19 -82 V +-20 -80 V +-20 -78 V +-20 -75 V +-20 -71 V +-19 -68 V +-20 -64 V +-20 -60 V +-20 -55 V +-19 -51 V +-20 -46 V +-20 -41 V +-20 -38 V +-19 -33 V +-20 -29 V +-20 -26 V +-20 -22 V +-20 -19 V +-19 -17 V +-20 -14 V +-20 -12 V +-20 -11 V +-19 -9 V +-20 -7 V +-20 -6 V +-20 -6 V +-20 -4 V +-19 -4 V +-20 -3 V +-20 -3 V +-20 -2 V +-19 -2 V +-20 -1 V +-20 -1 V +-20 -2 V +-19 0 V +-20 -1 V +-20 -1 V +-20 0 V +-20 -1 V +-19 0 V +-20 0 V +-20 -1 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 -1 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +stroke 8570 2081 M +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +-20 0 V +-20 0 V +-19 0 V +-20 0 V +-20 0 V +10627 4383 CircleF +10607 4318 CircleF +10587 4251 CircleF +10567 4181 CircleF +10548 4109 CircleF +10528 4035 CircleF +10508 3958 CircleF +10488 3879 CircleF +10468 3799 CircleF +10449 3717 CircleF +10429 3634 CircleF +10409 3550 CircleF +10389 3465 CircleF +10370 3380 CircleF +10350 3295 CircleF +10330 3211 CircleF +10310 3128 CircleF +10291 3046 CircleF +10271 2966 CircleF +10251 2888 CircleF +10231 2813 CircleF +10211 2742 CircleF +10192 2674 CircleF +10172 2610 CircleF +10152 2550 CircleF +10132 2495 CircleF +10113 2444 CircleF +10093 2398 CircleF +10073 2357 CircleF +10053 2319 CircleF +10034 2286 CircleF +10014 2257 CircleF +9994 2231 CircleF +9974 2209 CircleF +9954 2190 CircleF +9935 2173 CircleF +9915 2159 CircleF +9895 2147 CircleF +9875 2136 CircleF +9856 2127 CircleF +9836 2120 CircleF +9816 2114 CircleF +9796 2108 CircleF +9776 2104 CircleF +9757 2100 CircleF +9737 2097 CircleF +9717 2094 CircleF +9697 2092 CircleF +9678 2090 CircleF +9658 2089 CircleF +9638 2088 CircleF +9618 2086 CircleF +9599 2086 CircleF +9579 2085 CircleF +9559 2084 CircleF +9539 2084 CircleF +9519 2083 CircleF +9500 2083 CircleF +9480 2083 CircleF +9460 2082 CircleF +9440 2082 CircleF +9421 2082 CircleF +9401 2082 CircleF +9381 2082 CircleF +9361 2082 CircleF +9342 2082 CircleF +9322 2081 CircleF +9302 2081 CircleF +9282 2081 CircleF +9262 2081 CircleF +9243 2081 CircleF +9223 2081 CircleF +9203 2081 CircleF +9183 2081 CircleF +9164 2081 CircleF +9144 2081 CircleF +9124 2081 CircleF +9104 2081 CircleF +9084 2081 CircleF +9065 2081 CircleF +9045 2081 CircleF +9025 2081 CircleF +9005 2081 CircleF +8986 2081 CircleF +8966 2081 CircleF +8946 2081 CircleF +8926 2081 CircleF +8907 2081 CircleF +8887 2081 CircleF +8867 2081 CircleF +8847 2081 CircleF +8827 2081 CircleF +8808 2081 CircleF +8788 2081 CircleF +8768 2081 CircleF +8748 2081 CircleF +8729 2081 CircleF +8709 2081 CircleF +8689 2081 CircleF +8669 2081 CircleF +8649 2081 CircleF +8630 2081 CircleF +8610 2081 CircleF +8590 2081 CircleF +8570 2081 CircleF +8551 2081 CircleF +8531 2081 CircleF +8511 2081 CircleF +8491 2081 CircleF +8472 2081 CircleF +8452 2081 CircleF +8432 2081 CircleF +8412 2081 CircleF +8392 2081 CircleF +8373 2081 CircleF +8353 2081 CircleF +8333 2081 CircleF +8313 2081 CircleF +8294 2081 CircleF +8274 2081 CircleF +8254 2081 CircleF +8234 2081 CircleF +8215 2081 CircleF +8195 2081 CircleF +8175 2081 CircleF +8155 2081 CircleF +8135 2081 CircleF +8116 2081 CircleF +8096 2081 CircleF +8076 2081 CircleF +8056 2081 CircleF +8037 2081 CircleF +8017 2081 CircleF +7997 2081 CircleF +7977 2081 CircleF +7957 2081 CircleF +7938 2081 CircleF +7918 2081 CircleF +7898 2081 CircleF +7878 2081 CircleF +7859 2081 CircleF +7839 2081 CircleF +7819 2081 CircleF +7799 2081 CircleF +7780 2081 CircleF +7760 2081 CircleF +7740 2081 CircleF +7720 2081 CircleF +7700 2081 CircleF +7681 2081 CircleF +7661 2081 CircleF +7641 2081 CircleF +7621 2081 CircleF +7602 2081 CircleF +7582 2081 CircleF +7562 2081 CircleF +7542 2081 CircleF +7523 2081 CircleF +7503 2081 CircleF +7483 2081 CircleF +7463 2081 CircleF +7443 2081 CircleF +7424 2081 CircleF +7404 2081 CircleF +7384 2081 CircleF +7364 2081 CircleF +7345 2081 CircleF +7325 2081 CircleF +7305 2081 CircleF +7285 2081 CircleF +7265 2081 CircleF +7246 2081 CircleF +7226 2081 CircleF +7206 2081 CircleF +7186 2081 CircleF +7167 2081 CircleF +7147 2081 CircleF +7127 2081 CircleF +7107 2081 CircleF +7088 2081 CircleF +7068 2081 CircleF +7048 2081 CircleF +7028 2081 CircleF +7008 2081 CircleF +6989 2081 CircleF +6969 2081 CircleF +6949 2081 CircleF +6929 2081 CircleF +6910 2081 CircleF +6890 2081 CircleF +6870 2081 CircleF +6850 2081 CircleF +6831 2081 CircleF +6811 2081 CircleF +6791 2081 CircleF +6771 2081 CircleF +6751 2081 CircleF +6732 2081 CircleF +6712 2081 CircleF +6692 2081 CircleF +% End plot #1 +% Begin plot #2 +3.000 UP +2.000 UL +LT6 +0.90 0.17 0.09 C /Helvetica findfont 140 scalefont setfont +6721 2081 Circle +% End plot #2 +1.000 UL +LTb +LCb setrgbcolor +6362 5339 N +0 -4891 V +4905 0 V +0 4891 V +-4905 0 V +Z stroke +0.300 UP +1.000 UL +LTb +LCb setrgbcolor +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Symbol Helvetica diff -Nru gsl-doc-1.16/doc/rng.texi gsl-doc-2.3/doc/rng.texi --- gsl-doc-1.16/doc/rng.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/rng.texi 2015-11-10 19:35:58.000000000 +0000 @@ -83,7 +83,7 @@ generators, you do not need to know the details of what comprises the state, and besides that varies from algorithm to algorithm. -@tpindex gsl_rng_type +@tindex gsl_rng_type The random number generator library uses two special structs, @code{gsl_rng_type} which holds static information about each type of generator and @code{gsl_rng} which describes an instance of a generator @@ -96,7 +96,7 @@ @section Random number generator initialization @deftypefun {gsl_rng *} gsl_rng_alloc (const gsl_rng_type * @var{T}) -@tpindex gsl_rng +@tindex gsl_rng This function returns a pointer to a newly-created instance of a random number generator of type @var{T}. For example, the following code creates an instance of the Tausworthe @@ -110,8 +110,8 @@ function returns a null pointer and the error handler is invoked with an error code of @code{GSL_ENOMEM}. -@vrindex gsl_rng_default_seed -@vrindex @env{GSL_RNG_SEED} +@vindex gsl_rng_default_seed +@vindex @env{GSL_RNG_SEED} @cindex @code{GSL_RNG_SEED} The generator is automatically initialized with the default seed, @code{gsl_rng_default_seed}. This is zero by default but can be changed @@ -282,10 +282,10 @@ different generators and seeds without having to recompile your program. @deftypefun {const gsl_rng_type *} gsl_rng_env_setup (void) -@vrindex @env{GSL_RNG_TYPE} -@vrindex @env{GSL_RNG_SEED} -@vrindex gsl_rng_default -@vrindex gsl_rng_default_seed +@vindex @env{GSL_RNG_TYPE} +@vindex @env{GSL_RNG_SEED} +@vindex gsl_rng_default +@vindex gsl_rng_default_seed This function reads the environment variables @code{GSL_RNG_TYPE} and @code{GSL_RNG_SEED} and uses their values to set the corresponding library variables @code{gsl_rng_default} and @@ -325,7 +325,7 @@ @example $ ./a.out -@verbatiminclude examples/rng.out +@verbatiminclude examples/rng.txt @end example @noindent @@ -1376,7 +1376,7 @@ @example $ ./a.out -@verbatiminclude examples/rngunif.out +@verbatiminclude examples/rngunif.txt @end example @noindent @@ -1389,7 +1389,7 @@ @example $ GSL_RNG_SEED=123 GSL_RNG_TYPE=mrg ./a.out -@verbatiminclude examples/rngunif.2.out +@verbatiminclude examples/rngunif2.txt @end example @node Random Number References and Further Reading diff -Nru gsl-doc-1.16/doc/roots.texi gsl-doc-2.3/doc/roots.texi --- gsl-doc-1.16/doc/roots.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/roots.texi 2015-11-03 16:21:55.000000000 +0000 @@ -116,8 +116,8 @@ @section Initializing the Solver @deftypefun {gsl_root_fsolver *} gsl_root_fsolver_alloc (const gsl_root_fsolver_type * @var{T}) -@tpindex gsl_root_fsolver -@tpindex gsl_root_fsolver_type +@tindex gsl_root_fsolver +@tindex gsl_root_fsolver_type This function returns a pointer to a newly allocated instance of a solver of type @var{T}. For example, the following code creates an instance of a bisection solver, @@ -135,8 +135,8 @@ @end deftypefun @deftypefun {gsl_root_fdfsolver *} gsl_root_fdfsolver_alloc (const gsl_root_fdfsolver_type * @var{T}) -@tpindex gsl_root_fdfsolver -@tpindex gsl_root_fdfsolver_type +@tindex gsl_root_fdfsolver +@tindex gsl_root_fdfsolver_type This function returns a pointer to a newly allocated instance of a derivative-based solver of type @var{T}. For example, the following code creates an instance of a Newton-Raphson solver, diff -Nru gsl-doc-1.16/doc/rstat.texi gsl-doc-2.3/doc/rstat.texi --- gsl-doc-1.16/doc/rstat.texi 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/rstat.texi 2016-10-03 09:08:46.000000000 +0000 @@ -0,0 +1,276 @@ +@cindex running statistics +@cindex online statistics + +This chapter describes routines for computing running statistics, +also known as online statistics, of data. These routines are +suitable for handling large datasets for which it may be +inconvenient or impractical to store in memory all at once. +The data can be processed in a single pass, one point at a time. +Each time a data point is added to the accumulator, internal +parameters are updated in order to compute the current mean, variance, +standard deviation, skewness, and kurtosis. These statistics are +exact, and are updated with numerically stable single-pass algorithms. +The median and arbitrary quantiles are also available, however these +calculations use algorithms which provide approximations, and grow +more accurate as more data is added to the accumulator. + +The functions described in this chapter are declared in the header file +@file{gsl_rstat.h}. + +@menu +* Running Statistics Initializing the Accumulator:: +* Running Statistics Adding Data to the Accumulator:: +* Running Statistics Current Statistics:: +* Running Statistics Quantiles:: +* Running Statistics Example programs:: +* Running Statistics References and Further Reading:: +@end menu + +@node Running Statistics Initializing the Accumulator +@section Initializing the Accumulator + +@deftypefun {gsl_rstat_workspace *} gsl_rstat_alloc (void) +This function allocates a workspace for computing running statistics. +The size of the workspace is @math{O(1)}. +@end deftypefun + +@deftypefun void gsl_rstat_free (gsl_rstat_workspace * @var{w}) +This function frees the memory associated with the workspace @var{w}. +@end deftypefun + +@deftypefun int gsl_rstat_reset (gsl_rstat_workspace * @var{w}) +This function resets the workspace @var{w} to its initial state, +so it can begin working on a new set of data. +@end deftypefun + +@node Running Statistics Adding Data to the Accumulator +@section Adding Data to the Accumulator + +@deftypefun int gsl_rstat_add (const double @var{x}, gsl_rstat_workspace * @var{w}) +This function adds the data point @var{x} to the statistical +accumulator, updating calculations of the mean, variance, +standard deviation, skewness, kurtosis, and median. +@end deftypefun + +@deftypefun size_t gsl_rstat_n (gsl_rstat_workspace * @var{w}) +This function returns the number of data so far added to the accumulator. +@end deftypefun + +@node Running Statistics Current Statistics +@section Current Statistics + +@deftypefun double gsl_rstat_min (gsl_rstat_workspace * @var{w}) +This function returns the minimum value added to the accumulator. +@end deftypefun + +@deftypefun double gsl_rstat_max (gsl_rstat_workspace * @var{w}) +This function returns the maximum value added to the accumulator. +@end deftypefun + +@deftypefun double gsl_rstat_mean (gsl_rstat_workspace * @var{w}) +This function returns the mean of all data added to the accumulator, +defined as +@tex +\beforedisplay +$$ +{\Hat\mu} = {1 \over N} \sum x_i +$$ +\afterdisplay +@end tex +@ifinfo + +@example +\Hat\mu = (1/N) \sum x_i +@end example + +@end ifinfo +@end deftypefun + +@deftypefun double gsl_rstat_variance (gsl_rstat_workspace * @var{w}) +This function returns the variance of all data added to the accumulator, +defined as +@tex +\beforedisplay +$$ +{\Hat\sigma}^2 = {1 \over (N-1)} \sum (x_i - {\Hat\mu})^2 +$$ +\afterdisplay +@end tex +@ifinfo + +@example +\Hat\sigma^2 = (1/(N-1)) \sum (x_i - \Hat\mu)^2 +@end example + +@end ifinfo +@end deftypefun + +@deftypefun double gsl_rstat_sd (gsl_rstat_workspace * @var{w}) +This function returns the standard deviation of all data added to the +accumulator, defined as the square root of the variance given above. +@end deftypefun + +@deftypefun double gsl_rstat_sd_mean (gsl_rstat_workspace * @var{w}) +This function returns the standard deviation of the mean, defined as +@tex +\beforedisplay +$$ +\Hat\sigma_{\Hat\mu} = {\Hat\sigma \over \sqrt{N}} +$$ +\afterdisplay +@end tex +@ifinfo + +@example +sd_mean = \Hat\sigma / \sqrt@{N@} +@end example + +@end ifinfo +@end deftypefun + +@deftypefun double gsl_rstat_rms (gsl_rstat_workspace * @var{w}) +This function returns the root mean square of all data added to the +accumulator, defined as +@tex +\beforedisplay +$$ +rms = \sqrt{{1 \over N} \sum x_i^2} +$$ +\afterdisplay +@end tex +@ifinfo + +@example +rms = \sqrt ( 1/N \sum x_i^2 ) +@end example + +@end ifinfo +@end deftypefun + +@deftypefun double gsl_rstat_skew (gsl_rstat_workspace * @var{w}) +This function returns the skewness of all data added to the accumulator, +defined as +@tex +\beforedisplay +$$ +skew = {1 \over N} \sum + {\left( x_i - {\Hat\mu} \over {\Hat\sigma} \right)}^3 +$$ +\afterdisplay +@end tex +@ifinfo + +@example +skew = (1/N) \sum ((x_i - \Hat\mu)/\Hat\sigma)^3 +@end example + +@end ifinfo +@end deftypefun + +@deftypefun double gsl_rstat_kurtosis (gsl_rstat_workspace * @var{w}) +This function returns the kurtosis of all data added to the accumulator, +defined as +@tex +\beforedisplay +$$ +kurtosis = \left( {1 \over N} \sum + {\left(x_i - {\Hat\mu} \over {\Hat\sigma} \right)}^4 + \right) + - 3 +$$ +\afterdisplay +@end tex +@ifinfo + +@example +kurtosis = ((1/N) \sum ((x_i - \Hat\mu)/\Hat\sigma)^4) - 3 +@end example + +@end ifinfo +@end deftypefun + +@deftypefun double gsl_rstat_median (gsl_rstat_workspace * @var{w}) +This function returns an estimate of the median of the data added to +the accumulator. +@end deftypefun + +@node Running Statistics Quantiles +@section Quantiles + +The functions in this section estimate quantiles dynamically without +storing the entire dataset, using the algorithm of Jain and Chlamtec, 1985. +Only five points (markers) are stored which represent the minimum +and maximum of the data, as well as current estimates of the +@math{p/2}-, @math{p}-, and @math{(1+p)/2}-quantiles. Each time +a new data point is added, the marker positions and heights are +updated. + +@deftypefun {gsl_rstat_quantile_workspace *} gsl_rstat_quantile_alloc (const double @var{p}) +This function allocates a workspace for the dynamic estimation of +@var{p}-quantiles, where @var{p} is between @math{0} and @math{1}. +The median corresponds to @math{p = 0.5}. The size of the workspace +is @math{O(1)}. +@end deftypefun + +@deftypefun void gsl_rstat_quantile_free (gsl_rstat_quantile_workspace * @var{w}) +This function frees the memory associated with the workspace @var{w}. +@end deftypefun + +@deftypefun int gsl_rstat_quantile_reset (gsl_rstat_quantile_workspace * @var{w}) +This function resets the workspace @var{w} to its initial state, +so it can begin working on a new set of data. +@end deftypefun + +@deftypefun int gsl_rstat_quantile_add (const double @var{x}, gsl_rstat_quantile_workspace * @var{w}) +This function updates the estimate of the @math{p}-quantile with +the new data point @var{x}. +@end deftypefun + +@deftypefun double gsl_rstat_quantile_get (gsl_rstat_quantile_workspace * @var{w}) +This function returns the current estimate of the @math{p}-quantile. +@end deftypefun + +@node Running Statistics Example programs +@section Examples + +Here is a basic example of how to use the statistical functions: + +@example +@verbatiminclude examples/rstat.c +@end example + +The program should produce the following output, + +@example +@verbatiminclude examples/rstat.txt +@end example + +@noindent +This next program estimates the lower quartile, median and upper +quartile from 10,000 samples of a random Rayleigh distribution, +using the @math{P^2} algorithm of Jain and Chlamtec. For +comparison, the exact values are also computed from the sorted +dataset. + +@example +@verbatiminclude examples/rquantile.c +@end example + +The program should produce the following output, + +@example +@verbatiminclude examples/rquantile.txt +@end example + +@node Running Statistics References and Further Reading +@section References and Further Reading + +The algorithm used to dynamically estimate @math{p}-quantiles is described +in the paper, +@itemize @w{} +@item +R. Jain and I. Chlamtac. +@cite{The P^2 algorithm for dynamic calculation of quantiles and histograms without storing observations}, +Communications of the ACM, Volume 28 (October), Number 10, 1985, +p. 1076-1085. +@end itemize diff -Nru gsl-doc-1.16/doc/sort.texi gsl-doc-2.3/doc/sort.texi --- gsl-doc-1.16/doc/sort.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/sort.texi 2015-11-09 05:23:40.000000000 +0000 @@ -301,7 +301,7 @@ @example $ ./a.out -@verbatiminclude examples/sortsmall.out +@verbatiminclude examples/sortsmall.txt @end example @node Sorting References and Further Reading diff -Nru gsl-doc-1.16/doc/sparse_poisson.eps gsl-doc-2.3/doc/sparse_poisson.eps --- gsl-doc-1.16/doc/sparse_poisson.eps 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/sparse_poisson.eps 2016-07-02 23:02:41.000000000 +0000 @@ -0,0 +1,1190 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: sparse_poisson.eps +%%Creator: gnuplot 4.6 patchlevel 2 +%%CreationDate: Sun Jan 31 14:49:44 2016 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 410 302 +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color true def +/Blacktext false def +/Solid true def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -46 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 410 50 lineto 410 302 lineto 50 302 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.6 (September 2012) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse + clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title (sparse_poisson.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 2) + /Author (palken) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Sun Jan 31 14:49:44 2016) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.050 0.050 scale +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 7200.00 5040.00 BoxColFill} if +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +686 448 M +6261 0 V +stroke +LTb +LCb setrgbcolor +686 448 M +63 0 V +6198 0 R +-63 0 V +stroke +602 448 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +686 827 M +6261 0 V +stroke +LTb +LCb setrgbcolor +686 827 M +63 0 V +6198 0 R +-63 0 V +stroke +602 827 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.1)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +686 1206 M +6261 0 V +stroke +LTb +LCb setrgbcolor +686 1206 M +63 0 V +6198 0 R +-63 0 V +stroke +602 1206 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.2)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +686 1586 M +6261 0 V +stroke +LTb +LCb setrgbcolor +686 1586 M +63 0 V +6198 0 R +-63 0 V +stroke +602 1586 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.3)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +686 1965 M +6261 0 V +stroke +LTb +LCb setrgbcolor +686 1965 M +63 0 V +6198 0 R +-63 0 V +stroke +602 1965 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.4)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +686 2344 M +6261 0 V +stroke +LTb +LCb setrgbcolor +686 2344 M +63 0 V +6198 0 R +-63 0 V +stroke +602 2344 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.5)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +686 2723 M +6261 0 V +stroke +LTb +LCb setrgbcolor +686 2723 M +63 0 V +6198 0 R +-63 0 V +stroke +602 2723 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.6)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +686 3102 M +6261 0 V +stroke +LTb +LCb setrgbcolor +686 3102 M +63 0 V +6198 0 R +-63 0 V +stroke +602 3102 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.7)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +686 3481 M +6261 0 V +stroke +LTb +LCb setrgbcolor +686 3481 M +63 0 V +6198 0 R +-63 0 V +stroke +602 3481 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.8)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +686 3861 M +6261 0 V +stroke +LTb +LCb setrgbcolor +686 3861 M +63 0 V +6198 0 R +-63 0 V +stroke +602 3861 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.9)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +686 4240 M +6261 0 V +stroke +LTb +LCb setrgbcolor +686 4240 M +63 0 V +6198 0 R +-63 0 V +stroke +602 4240 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +686 4619 M +6261 0 V +stroke +LTb +LCb setrgbcolor +686 4619 M +63 0 V +6198 0 R +-63 0 V +stroke +602 4619 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1.1)] +] -46.7 MRshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +686 448 M +0 4171 V +stroke +LTb +LCb setrgbcolor +686 448 M +0 63 V +0 4108 R +0 -63 V +stroke +686 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +1312 448 M +0 4171 V +stroke +LTb +LCb setrgbcolor +1312 448 M +0 63 V +0 4108 R +0 -63 V +stroke +1312 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.1)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +1938 448 M +0 4171 V +stroke +LTb +LCb setrgbcolor +1938 448 M +0 63 V +0 4108 R +0 -63 V +stroke +1938 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.2)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +2564 448 M +0 4171 V +stroke +LTb +LCb setrgbcolor +2564 448 M +0 63 V +0 4108 R +0 -63 V +stroke +2564 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.3)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +3190 448 M +0 4171 V +stroke +LTb +LCb setrgbcolor +3190 448 M +0 63 V +0 4108 R +0 -63 V +stroke +3190 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.4)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +3817 448 M +0 4171 V +stroke +LTb +LCb setrgbcolor +3817 448 M +0 63 V +0 4108 R +0 -63 V +stroke +3817 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.5)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +4443 448 M +0 4171 V +stroke +LTb +LCb setrgbcolor +4443 448 M +0 63 V +0 4108 R +0 -63 V +stroke +4443 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.6)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +5069 448 M +0 4171 V +stroke +LTb +LCb setrgbcolor +5069 448 M +0 63 V +0 4108 R +0 -63 V +stroke +5069 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.7)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +5695 448 M +0 3828 V +0 280 R +0 63 V +stroke +LTb +LCb setrgbcolor +5695 448 M +0 63 V +0 4108 R +0 -63 V +stroke +5695 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.8)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +6321 448 M +0 3828 V +0 280 R +0 63 V +stroke +LTb +LCb setrgbcolor +6321 448 M +0 63 V +0 4108 R +0 -63 V +stroke +6321 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.9)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTa +LCa setrgbcolor +6947 448 M +0 4171 V +stroke +LTb +LCb setrgbcolor +6947 448 M +0 63 V +0 4108 R +0 -63 V +stroke +6947 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1)] +] -46.7 MCshow +1.000 UL +LTb +LCb setrgbcolor +1.000 UL +LTb +LCb setrgbcolor +686 4619 N +686 448 L +6261 0 V +0 4171 V +-6261 0 V +Z stroke +LCb setrgbcolor +112 2533 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 140.0 0.0 true true 0 (u\(x\))] +] -46.7 MCshow +grestore +LTb +LCb setrgbcolor +3816 98 M +[ [(Helvetica) 140.0 0.0 true true 0 (x)] +] -46.7 MCshow +LTb +3816 4829 M +[ [(Helvetica) 140.0 0.0 true true 0 (1D Poisson solution - offset deliberately added to GSL solution)] +] -46.7 MCshow +0.300 UP +1.000 UL +LTb +LCb setrgbcolor +% Begin plot #1 +4.000 UL +LT0 +0.55 0.10 0.05 C LCb setrgbcolor +6341 4486 M +[ [(Helvetica) 140.0 0.0 true true 0 (GSL + )] +[(Symbol) 140.0 0.0 true true 0 (e)] +] -46.7 MRshow +LT0 +0.55 0.10 0.05 C 6425 4486 M +354 0 V +749 606 M +63 120 V +64 120 V +63 120 V +63 119 V +63 119 V +64 117 V +63 117 V +63 116 V +63 115 V +64 114 V +63 112 V +63 111 V +63 110 V +64 108 V +63 106 V +63 104 V +63 102 V +64 100 V +63 98 V +63 96 V +63 93 V +64 91 V +63 89 V +63 86 V +63 83 V +64 80 V +63 77 V +63 75 V +63 71 V +64 68 V +63 65 V +63 62 V +63 59 V +63 55 V +64 51 V +63 49 V +63 44 V +63 41 V +64 38 V +63 34 V +63 30 V +63 27 V +64 22 V +63 19 V +63 16 V +63 11 V +64 8 V +63 4 V +63 0 V +63 -4 V +64 -8 V +63 -11 V +63 -16 V +63 -19 V +64 -22 V +63 -27 V +63 -30 V +63 -34 V +64 -38 V +63 -41 V +63 -44 V +63 -49 V +64 -51 V +63 -55 V +63 -59 V +63 -62 V +63 -65 V +64 -68 V +63 -71 V +63 -75 V +63 -77 V +64 -80 V +63 -83 V +63 -86 V +63 -89 V +64 -91 V +63 -93 V +63 -96 V +63 -98 V +64 -100 V +63 -102 V +63 -104 V +63 -106 V +64 -108 V +63 -110 V +63 -111 V +63 -112 V +64 -114 V +63 -115 V +63 -116 V +63 -117 V +64 -117 V +63 -119 V +63 -119 V +63 -120 V +64 -120 V +63 -120 V +% End plot #1 +% Begin plot #2 +stroke +LT2 +0.00 0.38 0.68 C LCb setrgbcolor +6341 4346 M +[ [(Helvetica) 140.0 0.0 true true 0 (Analytic)] +] -46.7 MRshow +LT2 +0.00 0.38 0.68 C 6425 4346 M +354 0 V +749 568 M +63 120 V +64 120 V +63 120 V +63 119 V +63 119 V +64 117 V +63 117 V +63 116 V +63 115 V +64 114 V +63 112 V +63 111 V +63 110 V +64 108 V +63 106 V +63 104 V +63 102 V +64 100 V +63 98 V +63 96 V +63 93 V +64 91 V +63 89 V +63 85 V +63 83 V +64 81 V +63 77 V +63 74 V +63 72 V +64 68 V +63 65 V +63 62 V +63 58 V +63 55 V +64 52 V +63 48 V +63 45 V +63 41 V +64 38 V +63 34 V +63 30 V +63 26 V +64 23 V +63 19 V +63 15 V +63 12 V +64 8 V +63 3 V +63 0 V +63 -3 V +64 -8 V +63 -12 V +63 -15 V +63 -19 V +64 -23 V +63 -26 V +63 -30 V +63 -34 V +64 -38 V +63 -41 V +63 -45 V +63 -48 V +64 -52 V +63 -55 V +63 -58 V +63 -62 V +63 -65 V +64 -68 V +63 -72 V +63 -74 V +63 -77 V +64 -81 V +63 -83 V +63 -85 V +63 -89 V +64 -91 V +63 -93 V +63 -96 V +63 -98 V +64 -100 V +63 -102 V +63 -104 V +63 -106 V +64 -108 V +63 -110 V +63 -111 V +63 -112 V +64 -114 V +63 -115 V +63 -116 V +63 -117 V +64 -117 V +63 -119 V +63 -119 V +63 -120 V +64 -120 V +63 -120 V +% End plot #2 +stroke +1.000 UL +LTb +LCb setrgbcolor +686 4619 N +686 448 L +6261 0 V +0 4171 V +-6261 0 V +Z stroke +0.300 UP +1.000 UL +LTb +LCb setrgbcolor +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Symbol Helvetica diff -Nru gsl-doc-1.16/doc/spblas.texi gsl-doc-2.3/doc/spblas.texi --- gsl-doc-1.16/doc/spblas.texi 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/spblas.texi 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,49 @@ +@cindex sparse BLAS +@cindex BLAS, sparse + +The Sparse Basic Linear Algebra Subprograms (@sc{blas}) define a set of +fundamental operations on vectors and sparse matrices which can be used +to create optimized higher-level linear algebra functionality. +GSL supports a limited number of BLAS operations for sparse matrices. + +@noindent +The header file @file{gsl_spblas.h} contains the prototypes for the +sparse BLAS functions and related declarations. + +@menu +* Sparse BLAS operations:: +* Sparse BLAS References and Further Reading:: +@end menu + +@node Sparse BLAS operations +@section Sparse BLAS operations +@cindex sparse matrices, BLAS operations + +@deftypefun int gsl_spblas_dgemv (const CBLAS_TRANSPOSE_t TransA, const double @var{alpha}, const gsl_spmatrix * @var{A}, const gsl_vector * @var{x}, const double @var{beta}, gsl_vector * @var{y}) +This function computes the matrix-vector product and sum +@math{y \leftarrow \alpha op(A) x + \beta y}, where +@math{op(A) = A}, @math{A^T} for @var{TransA} = @code{CblasNoTrans}, +@code{CblasTrans}. In-place computations are not supported, so +@var{x} and @var{y} must be distinct vectors. +The matrix @var{A} may be in triplet or compressed format. +@end deftypefun + +@deftypefun int gsl_spblas_dgemm (const double @var{alpha}, const gsl_spmatrix * @var{A}, const gsl_spmatrix * @var{B}, gsl_spmatrix * @var{C}) +This function computes the sparse matrix-matrix product +@math{C = \alpha A B}. The matrices must be in compressed format. +@end deftypefun + +@node Sparse BLAS References and Further Reading +@section References and Further Reading +@cindex sparse matrices, references + +The algorithms used by these functions are described in the +following sources: + +@itemize @w{} +@item +T. A. Davis, Direct Methods for Sparse Linear Systems, SIAM, 2006. + +@item +CSparse software library, @uref{https://www.cise.ufl.edu/research/sparse/CSparse} +@end itemize diff -Nru gsl-doc-1.16/doc/specfunc-bessel.texi gsl-doc-2.3/doc/specfunc-bessel.texi --- gsl-doc-1.16/doc/specfunc-bessel.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/specfunc-bessel.texi 2015-11-03 16:21:55.000000000 +0000 @@ -405,7 +405,7 @@ @deftypefun int gsl_sf_bessel_il_scaled_array (int @var{lmax}, double @var{x}, double @var{result_array}[]) This routine computes the values of the scaled regular modified -cylindrical Bessel functions @math{\exp(-|x|) i_l(x)} for @math{l} from +spherical Bessel functions @math{\exp(-|x|) i_l(x)} for @math{l} from 0 to @var{lmax} inclusive for @c{$lmax \geq 0$} @math{lmax >= 0}, storing the results in the array @var{result_array}. diff -Nru gsl-doc-1.16/doc/specfunc-ellint.texi gsl-doc-2.3/doc/specfunc-ellint.texi --- gsl-doc-1.16/doc/specfunc-ellint.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/specfunc-ellint.texi 2015-11-03 16:21:55.000000000 +0000 @@ -142,25 +142,24 @@ @comment Exceptional Return Values: GSL_EDOM @end deftypefun -@deftypefun double gsl_sf_ellint_D (double @var{phi}, double @var{k}, double @var{n}, gsl_mode_t @var{mode}) -@deftypefunx int gsl_sf_ellint_D_e (double @var{phi}, double @var{k}, double @var{n}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result}) +@deftypefun double gsl_sf_ellint_D (double @var{phi}, double @var{k}, gsl_mode_t @var{mode}) +@deftypefunx int gsl_sf_ellint_D_e (double @var{phi}, double @var{k}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result}) These functions compute the incomplete elliptic integral @math{D(\phi,k)} which is defined through the Carlson form @math{RD(x,y,z)} by the following relation, @tex \beforedisplay $$ -D(\phi,k,n) = {1 \over 3} (\sin \phi)^3 RD (1-\sin^2(\phi), 1-k^2 \sin^2(\phi), 1). +D(\phi,k) = {1 \over 3} (\sin \phi)^3 RD (1-\sin^2(\phi), 1-k^2 \sin^2(\phi), 1). $$ \afterdisplay @end tex @ifinfo @example -D(\phi,k,n) = (1/3)(\sin(\phi))^3 RD (1-\sin^2(\phi), 1-k^2 \sin^2(\phi), 1). +D(\phi,k) = (1/3)(\sin(\phi))^3 RD (1-\sin^2(\phi), 1-k^2 \sin^2(\phi), 1). @end example @end ifinfo -The argument @var{n} is not used and will be removed in a future release. @comment Exceptional Return Values: GSL_EDOM @end deftypefun diff -Nru gsl-doc-1.16/doc/specfunc-legendre.texi gsl-doc-2.3/doc/specfunc-legendre.texi --- gsl-doc-1.16/doc/specfunc-legendre.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/specfunc-legendre.texi 2015-11-03 16:21:55.000000000 +0000 @@ -84,17 +84,233 @@ @node Associated Legendre Polynomials and Spherical Harmonics @subsection Associated Legendre Polynomials and Spherical Harmonics -The following functions compute the associated Legendre Polynomials -@math{P_l^m(x)}. Note that this function grows combinatorially with -@math{l} and can overflow for @math{l} larger than about 150. There is -no trouble for small @math{m}, but overflow occurs when @math{m} and -@math{l} are both large. Rather than allow overflows, these functions -refuse to calculate @math{P_l^m(x)} and return @code{GSL_EOVRFLW} when -they can sense that @math{l} and @math{m} are too big. - -If you want to calculate a spherical harmonic, then @emph{do not} use -these functions. Instead use @code{gsl_sf_legendre_sphPlm} below, -which uses a similar recursion, but with the normalized functions. +The following functions compute the associated Legendre polynomials +@math{P_l^m(x)} which are solutions of the differential equation +@tex +\beforedisplay +$$ +(1 - x^2) {d^2 \over dx^2} P_l^m(x) - 2x {d \over dx} P_l^m(x) + +\left( l(l+1) - {m^2 \over 1 - x^2} \right) P_l^m(x) = 0 +$$ +\afterdisplay +@end tex +@ifinfo + +@example +(1 - x^2) d^2 P_l^m(x) / dx^2 P_l^m(x) - 2x d/dx P_l^m(x) + +( l(l+1) - m^2 / (1 - x^2) ) P_l^m(x) = 0 +@end example + +@end ifinfo +where the degree @math{l} and order @math{m} satisfy @math{0 \le l} and +@math{0 \le m \le l}. +The functions @math{P_l^m(x)} grow combinatorially with +@math{l} and can overflow for @math{l} larger than about 150. +Alternatively, one may calculate normalized associated Legendre +polynomials. There are a number of different normalization conventions, +and these +functions can be stably computed up to degree and order 2700. The +following normalizations are provided: +@table @code +@item Schmidt semi-normalization +Schmidt semi-normalized associated Legendre polynomials are often +used in the magnetics community and are defined as +@tex +\beforedisplay +$$ +\eqalign{ +S_l^0(x) &= P_l^0(x) \cr +S_l^m(x) &= (-1)^m \sqrt{2 {(l-m)! \over (l+m)!}} P_l^m(x), m > 0 +} +$$ +\afterdisplay +@end tex +@ifinfo +@example +S_l^0(x) = P_l^0(x) +S_l^m(x) = (-1)^m \sqrt((2(l-m)! / (l+m)!)) P_l^m(x), m > 0 +@end example +@end ifinfo +The factor of @math{(-1)^m} is called the Condon-Shortley phase +factor and can be excluded if desired by setting the parameter +@code{csphase = 1} in the functions below. + +@item Spherical Harmonic Normalization +The associated Legendre polynomials suitable for calculating spherical +harmonics are defined as +@tex +\beforedisplay +$$ +Y_l^m(x) = (-1)^m \sqrt{{2l + 1 \over 4 \pi} {(l-m)! \over (l+m)!}} P_l^m(x) +$$ +\afterdisplay +@end tex +@ifinfo +@example +Y_l^m(x) = (-1)^m \sqrt((2l + 1) * (l-m)! / (4 \pi) / (l+m)!) P_l^m(x) +@end example +@end ifinfo +where again the phase factor @math{(-1)^m} can be included or excluded +if desired. + +@item Full Normalization +The fully normalized associated Legendre polynomials are defined as +@tex +\beforedisplay +$$ +N_l^m(x) = (-1)^m \sqrt{(l + {1 \over 2}) {(l-m)! \over (l+m)!}} P_l^m(x) +$$ +\afterdisplay +@end tex +@ifinfo +@example +N_l^m(x) = (-1)^m \sqrt((l + 1/2) * (l-m)! / (l+m)!) P_l^m(x) +@end example +@end ifinfo +and have the property +@tex +\beforedisplay +$$ +\int_{-1}^1 N_l^m(x)^2 dx = 1 +$$ +\afterdisplay +@end tex +@ifinfo +@example +\int_(-1)^1 ( N_l^m(x) )^2 dx = 1 +@end example +@end ifinfo + +@end table +The normalized associated Legendre routines below use a recurrence +relation which is stable up to a degree and order of about 2700. +Beyond this, the computed functions could suffer from underflow +leading to incorrect results. Routines are provided to compute +first and second derivatives +@math{dP_l^m(x)/dx} and @math{d^2 P_l^m(x)/dx^2} as well as their alternate +versions @math{d P_l^m(\cos{\theta})/d\theta} and +@math{d^2 P_l^m(\cos{\theta})/d\theta^2}. While there is a simple +scaling relationship between the two forms, the derivatives +involving @math{\theta} are heavily used in spherical harmonic +expansions and so these routines are also provided. + +In the functions below, a parameter of type @code{gsl_sf_legendre_t} +specifies the type of normalization to use. The possible values are +@table @code +@item GSL_SF_LEGENDRE_NONE +This specifies the computation of the unnormalized associated +Legendre polynomials @math{P_l^m(x)}. + +@item GSL_SF_LEGENDRE_SCHMIDT +This specifies the computation of the Schmidt semi-normalized associated +Legendre polynomials @math{S_l^m(x)}. + +@item GSL_SF_LEGENDRE_SPHARM +This specifies the computation of the spherical harmonic associated +Legendre polynomials @math{Y_l^m(x)}. + +@item GSL_SF_LEGENDRE_FULL +This specifies the computation of the fully normalized associated +Legendre polynomials @math{N_l^m(x)}. +@end table + +@deftypefun int gsl_sf_legendre_array (const gsl_sf_legendre_t @var{norm}, const size_t @var{lmax}, const double @var{x}, double @var{result_array}[]) +@deftypefunx int gsl_sf_legendre_array_e (const gsl_sf_legendre_t @var{norm}, const size_t @var{lmax}, const double @var{x}, const double @var{csphase}, double @var{result_array}[]) +These functions calculate all normalized associated Legendre +polynomials for @math{0 \le l \le lmax} and +@math{0 \le m \le l} for +@c{$|x| \le 1$} +@math{|x| <= 1}. +The @var{norm} parameter specifies which normalization is used. +The normalized @math{P_l^m(x)} values are stored in @var{result_array}, whose +minimum size can be obtained from calling @code{gsl_sf_legendre_array_n}. +The array index of @math{P_l^m(x)} is obtained from calling +@code{gsl_sf_legendre_array_index(l, m)}. To include or exclude +the Condon-Shortley phase factor of @math{(-1)^m}, set the parameter +@var{csphase} to either @math{-1} or @math{1} respectively in the +@code{_e} function. This factor is included by default. +@end deftypefun + +@deftypefun int gsl_sf_legendre_deriv_array (const gsl_sf_legendre_t @var{norm}, const size_t @var{lmax}, const double @var{x}, double @var{result_array}[], double @var{result_deriv_array}[]) +@deftypefunx int gsl_sf_legendre_deriv_array_e (const gsl_sf_legendre_t @var{norm}, const size_t @var{lmax}, const double @var{x}, const double @var{csphase}, double @var{result_array}[], double @var{result_deriv_array}[]) +These functions calculate all normalized associated Legendre +functions and their first derivatives up to degree @var{lmax} for +@c{$|x| < 1$} +@math{|x| < 1}. +The parameter @var{norm} specifies the normalization used. The +normalized @math{P_l^m(x)} values and their derivatives +@math{dP_l^m(x)/dx} are stored in @var{result_array} and +@var{result_deriv_array} respectively. +To include or exclude +the Condon-Shortley phase factor of @math{(-1)^m}, set the parameter +@var{csphase} to either @math{-1} or @math{1} respectively in the +@code{_e} function. This factor is included by default. +@end deftypefun + +@deftypefun int gsl_sf_legendre_deriv_alt_array (const gsl_sf_legendre_t @var{norm}, const size_t @var{lmax}, const double @var{x}, double @var{result_array}[], double @var{result_deriv_array}[]) +@deftypefunx int gsl_sf_legendre_deriv_alt_array_e (const gsl_sf_legendre_t @var{norm}, const size_t @var{lmax}, const double @var{x}, const double @var{csphase}, double @var{result_array}[], double @var{result_deriv_array}[]) +These functions calculate all normalized associated Legendre +functions and their (alternate) first derivatives up to degree @var{lmax} for +@c{$|x| < 1$} +@math{|x| < 1}. +The normalized @math{P_l^m(x)} values and their derivatives +@math{dP_l^m(\cos{\theta})/d\theta} are stored in @var{result_array} and +@var{result_deriv_array} respectively. +To include or exclude +the Condon-Shortley phase factor of @math{(-1)^m}, set the parameter +@var{csphase} to either @math{-1} or @math{1} respectively in the +@code{_e} function. This factor is included by default. +@end deftypefun + +@deftypefun int gsl_sf_legendre_deriv2_array (const gsl_sf_legendre_t @var{norm}, const size_t @var{lmax}, const double @var{x}, double @var{result_array}[], double @var{result_deriv_array}[], double @var{result_deriv2_array}[]) +@deftypefunx int gsl_sf_legendre_deriv2_array_e (const gsl_sf_legendre_t @var{norm}, const size_t @var{lmax}, const double @var{x}, const double @var{csphase}, double @var{result_array}[], double @var{result_deriv_array}[], double @var{result_deriv2_array}[]) +These functions calculate all normalized associated Legendre +functions and their first and second derivatives up to degree @var{lmax} for +@c{$|x| < 1$} +@math{|x| < 1}. +The parameter @var{norm} specifies the normalization used. The +normalized @math{P_l^m(x)}, their first derivatives +@math{dP_l^m(x)/dx}, and their second derivatives +@math{d^2 P_l^m(x)/dx^2} are stored in @var{result_array}, +@var{result_deriv_array}, and @var{result_deriv2_array} respectively. +To include or exclude +the Condon-Shortley phase factor of @math{(-1)^m}, set the parameter +@var{csphase} to either @math{-1} or @math{1} respectively in the +@code{_e} function. This factor is included by default. +@end deftypefun + +@deftypefun int gsl_sf_legendre_deriv2_alt_array (const gsl_sf_legendre_t @var{norm}, const size_t @var{lmax}, const double @var{x}, double @var{result_array}[], double @var{result_deriv_array}[], double @var{result_deriv2_array}[]) +@deftypefunx int gsl_sf_legendre_deriv2_alt_array_e (const gsl_sf_legendre_t @var{norm}, const size_t @var{lmax}, const double @var{x}, const double @var{csphase}, double @var{result_array}[], double @var{result_deriv_array}[], double @var{result_deriv2_array}[]) +These functions calculate all normalized associated Legendre +functions and their (alternate) first and second derivatives up to degree +@var{lmax} for +@c{$|x| < 1$} +@math{|x| < 1}. +The parameter @var{norm} specifies the normalization used. The +normalized @math{P_l^m(x)}, their first derivatives +@math{dP_l^m(\cos{\theta})/d\theta}, and their second derivatives +@math{d^2 P_l^m(\cos{\theta})/d\theta^2} are stored in @var{result_array}, +@var{result_deriv_array}, and @var{result_deriv2_array} respectively. +To include or exclude +the Condon-Shortley phase factor of @math{(-1)^m}, set the parameter +@var{csphase} to either @math{-1} or @math{1} respectively in the +@code{_e} function. This factor is included by default. +@end deftypefun + +@deftypefun size_t gsl_sf_legendre_array_n (const size_t @var{lmax}) +This function returns the minimum array size for maximum degree @var{lmax} +needed for the array versions of the associated Legendre functions. +Size is calculated as the total number of @math{P_l^m(x)} functions, +plus extra space for precomputing multiplicative factors used in the +recurrence relations. +@end deftypefun + +@deftypefun size_t gsl_sf_legendre_array_index (const size_t @var{l}, const size_t @var{m}) +This function returns the index into @var{result_array}, +@var{result_deriv_array}, or @var{result_deriv2_array} corresponding +to @math{P_l^m(x)}, @math{P_l^{'m}(x)}, or @math{P_l^{''m}(x)}. The +index is given by @math{l(l+1)/2 + m}. +@end deftypefun @deftypefun double gsl_sf_legendre_Plm (int @var{l}, int @var{m}, double @var{x}) @deftypefunx int gsl_sf_legendre_Plm_e (int @var{l}, int @var{m}, double @var{x}, gsl_sf_result * @var{result}) @@ -106,18 +322,6 @@ @comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW @end deftypefun -@deftypefun int gsl_sf_legendre_Plm_array (int @var{lmax}, int @var{m}, double @var{x}, double @var{result_array}[]) -@deftypefunx int gsl_sf_legendre_Plm_deriv_array (int @var{lmax}, int @var{m}, double @var{x}, double @var{result_array}[], double @var{result_deriv_array}[]) -These functions compute arrays of Legendre polynomials -@math{P_l^m(x)} and derivatives @math{dP_l^m(x)/dx}, -for @c{$m \ge 0$} -@math{m >= 0}, @c{$l = |m|, \dots, lmax$} -@math{l = |m|, ..., lmax}, @c{$|x| \le 1$} -@math{|x| <= 1}. -@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW -@end deftypefun - - @deftypefun double gsl_sf_legendre_sphPlm (int @var{l}, int @var{m}, double @var{x}) @deftypefunx int gsl_sf_legendre_sphPlm_e (int @var{l}, int @var{m}, double @var{x}, gsl_sf_result * @var{result}) These routines compute the normalized associated Legendre polynomial @@ -131,23 +335,23 @@ @comment Exceptional Return Values: GSL_EDOM @end deftypefun +@deftypefun int gsl_sf_legendre_Plm_array (int @var{lmax}, int @var{m}, double @var{x}, double @var{result_array}[]) +@deftypefunx int gsl_sf_legendre_Plm_deriv_array (int @var{lmax}, int @var{m}, double @var{x}, double @var{result_array}[], double @var{result_deriv_array}[]) +These functions are now deprecated and will be removed in a future +release; see @code{gsl_sf_legendre_array} and +@code{gsl_sf_legendre_deriv_array}. +@end deftypefun + @deftypefun int gsl_sf_legendre_sphPlm_array (int @var{lmax}, int @var{m}, double @var{x}, double @var{result_array}[]) @deftypefunx int gsl_sf_legendre_sphPlm_deriv_array (int @var{lmax}, int @var{m}, double @var{x}, double @var{result_array}[], double @var{result_deriv_array}[]) -These functions compute arrays of normalized associated Legendre functions -@c{$\sqrt{(2l+1)/(4\pi)} \sqrt{(l-m)!/(l+m)!} P_l^m(x)$} -@math{\sqrt@{(2l+1)/(4\pi)@} \sqrt@{(l-m)!/(l+m)!@} P_l^m(x)}, -and derivatives, -for @c{$m \ge 0$} -@math{m >= 0}, @c{$l = |m|, \dots, lmax$} -@math{l = |m|, ..., lmax}, @c{$|x| \le 1$} -@math{|x| <= 1.0} -@comment Exceptional Return Values: GSL_EDOM +These functions are now deprecated and will be removed in a future +release; see @code{gsl_sf_legendre_array} and +@code{gsl_sf_legendre_deriv_array}. @end deftypefun @deftypefun int gsl_sf_legendre_array_size (const int @var{lmax}, const int @var{m}) -This function returns the size of @var{result_array}[] needed for the array -versions of @math{P_l^m(x)}, @math{@var{lmax} - @var{m} + 1}. @inlinefn{} -@comment Exceptional Return Values: none +This function is now deprecated and will be removed in a future +release. @end deftypefun @node Conical Functions diff -Nru gsl-doc-1.16/doc/specfunc-mathieu.texi gsl-doc-2.3/doc/specfunc-mathieu.texi --- gsl-doc-1.16/doc/specfunc-mathieu.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/specfunc-mathieu.texi 2015-11-03 16:21:55.000000000 +0000 @@ -170,7 +170,7 @@ routines require a preallocated workspace. @deftypefun {gsl_sf_mathieu_workspace *} gsl_sf_mathieu_alloc (size_t @var{n}, double @var{qmax}) -@tpindex gsl_sf_mathieu_workspace +@tindex gsl_sf_mathieu_workspace This function returns a workspace for the array versions of the Mathieu routines. The arguments @var{n} and @var{qmax} specify the maximum order and @math{q}-value of Mathieu functions which can be @@ -190,8 +190,10 @@ @subsection Mathieu Function Characteristic Values @cindex Mathieu Function Characteristic Values -@deftypefun int gsl_sf_mathieu_a (int @var{n}, double @var{q}, gsl_sf_result * @var{result}) -@deftypefunx int gsl_sf_mathieu_b (int @var{n}, double @var{q}, gsl_sf_result * @var{result}) +@deftypefun int gsl_sf_mathieu_a (int @var{n}, double @var{q}) +@deftypefunx int gsl_sf_mathieu_a_e (int @var{n}, double @var{q}, gsl_sf_result * @var{result}) +@deftypefunx int gsl_sf_mathieu_b (int @var{n}, double @var{q}) +@deftypefunx int gsl_sf_mathieu_b_e (int @var{n}, double @var{q}, gsl_sf_result * @var{result}) These routines compute the characteristic values @math{a_n(q)}, @math{b_n(q)} of the Mathieu functions @math{ce_n(q,x)} and @math{se_n(q,x)}, respectively. @@ -210,8 +212,10 @@ @cindex @math{ce(q,x)}, Mathieu function @cindex @math{se(q,x)}, Mathieu function -@deftypefun int gsl_sf_mathieu_ce (int @var{n}, double @var{q}, double @var{x}, gsl_sf_result * @var{result}) -@deftypefunx int gsl_sf_mathieu_se (int @var{n}, double @var{q}, double @var{x}, gsl_sf_result * @var{result}) +@deftypefun int gsl_sf_mathieu_ce (int @var{n}, double @var{q}, double @var{x}) +@deftypefunx int gsl_sf_mathieu_ce_e (int @var{n}, double @var{q}, double @var{x}, gsl_sf_result * @var{result}) +@deftypefunx int gsl_sf_mathieu_se (int @var{n}, double @var{q}, double @var{x}) +@deftypefunx int gsl_sf_mathieu_se_e (int @var{n}, double @var{q}, double @var{x}, gsl_sf_result * @var{result}) These routines compute the angular Mathieu functions @math{ce_n(q,x)} and @math{se_n(q,x)}, respectively. @end deftypefun @@ -228,8 +232,10 @@ @subsection Radial Mathieu Functions @cindex Radial Mathieu Functions -@deftypefun int gsl_sf_mathieu_Mc (int @var{j}, int @var{n}, double @var{q}, double @var{x}, gsl_sf_result * @var{result}) -@deftypefunx int gsl_sf_mathieu_Ms (int @var{j}, int @var{n}, double @var{q}, double @var{x}, gsl_sf_result * @var{result}) +@deftypefun int gsl_sf_mathieu_Mc (int @var{j}, int @var{n}, double @var{q}, double @var{x}) +@deftypefunx int gsl_sf_mathieu_Mc_e (int @var{j}, int @var{n}, double @var{q}, double @var{x}, gsl_sf_result * @var{result}) +@deftypefunx int gsl_sf_mathieu_Ms (int @var{j}, int @var{n}, double @var{q}, double @var{x}) +@deftypefunx int gsl_sf_mathieu_Ms_e (int @var{j}, int @var{n}, double @var{q}, double @var{x}, gsl_sf_result * @var{result}) These routines compute the radial @var{j}-th kind Mathieu functions @c{$Mc_n^{(j)}(q,x)$} @math{Mc_n^@{(j)@}(q,x)} and diff -Nru gsl-doc-1.16/doc/specfunc.texi gsl-doc-2.3/doc/specfunc.texi --- gsl-doc-1.16/doc/specfunc.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/specfunc.texi 2015-11-09 05:23:40.000000000 +0000 @@ -91,8 +91,8 @@ @section The gsl_sf_result struct @cindex gsl_sf_result @cindex gsl_sf_result_e10 -@tpindex gsl_sf_result -@tpindex gsl_sf_result_e10 +@tindex gsl_sf_result +@tindex gsl_sf_result_e10 The error handling form of the special functions always calculate an error estimate along with the value of the result. Therefore, @@ -288,7 +288,7 @@ @example $ ./a.out -@verbatiminclude examples/specfun_e.out +@verbatiminclude examples/specfun_e.txt @end example @noindent @@ -305,7 +305,7 @@ @example $ ./a.out -@verbatiminclude examples/specfun.out +@verbatiminclude examples/specfun.txt @end example @@ -353,6 +353,12 @@ Y.Y. Luke, Algorithms for the Computation of Mathematical Functions, Academic Press, New York (1977). +@item +S. A. Holmes and W. E. Featherstone, A unified approach to the Clenshaw +summation and the recursive computation of very high degree and order +normalised associated Legendre functions, Journal of Geodesy, 76, +pg. 279-299, 2002. + @comment @item @comment Fermi-Dirac functions of orders @math{-1/2}, @math{1/2}, @math{3/2}, and @comment @math{5/2}. @cite{ACM Trans. Math. Soft.}, vol. 24, 1998, 1-12. diff -Nru gsl-doc-1.16/doc/splinalg.texi gsl-doc-2.3/doc/splinalg.texi --- gsl-doc-1.16/doc/splinalg.texi 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/splinalg.texi 2016-01-31 21:50:21.000000000 +0000 @@ -0,0 +1,296 @@ +@cindex sparse linear algebra +@cindex linear algebra, sparse + +This chapter describes functions for solving sparse linear systems +of equations. The library provides linear algebra routines which +operate directly on the @code{gsl_spmatrix} and @code{gsl_vector} +objects. + +@noindent +The functions described in this chapter are declared in the header file +@file{gsl_splinalg.h}. + +@menu +* Overview of Sparse Linear Algebra:: +* Sparse Iterative Solvers:: +* Sparse Linear Algebra Examples:: +* Sparse Linear Algebra References and Further Reading:: +@end menu + +@node Overview of Sparse Linear Algebra +@section Overview +@cindex sparse linear algebra, overview + +This chapter is primarily concerned with the solution of the +linear system +@tex +\beforedisplay +$$ +A x = b +$$ +\afterdisplay +@end tex +@ifinfo +@example +A x = b +@end example +@end ifinfo +where @math{A} is a general square @math{n}-by-@math{n} non-singular +sparse matrix, @math{x} is an unknown @math{n}-by-@math{1} vector, and +@math{b} is a given @math{n}-by-1 right hand side vector. There exist +many methods for solving such sparse linear systems, which broadly +fall into either direct or iterative categories. Direct methods include +LU and QR decompositions, while iterative methods start with an +initial guess for the vector @math{x} and update the guess through +iteration until convergence. GSL does not currently provide any +direct sparse solvers. + +@node Sparse Iterative Solvers +@section Sparse Iterative Solvers +@cindex sparse matrices, iterative solvers +@cindex sparse linear algebra, iterative solvers +@cindex sparse, iterative solvers + +@menu +* Sparse Iterative Solver Overview:: +* Sparse Iterative Solvers Types:: +* Iterating the Sparse Linear System:: +@end menu + +@node Sparse Iterative Solver Overview +@subsection Overview + +Many practical iterative methods of solving large @math{n}-by-@math{n} +sparse linear systems involve projecting an approximate solution for +@var{x} onto a subspace of @math{{\bf R}^n}. If we define a @math{m}-dimensional +subspace @math{{\cal K}} as the subspace of approximations to the solution +@var{x}, then @math{m} constraints must be imposed to determine +the next approximation. These @math{m} constraints define another +@math{m}-dimensional subspace denoted by @math{{\cal L}}. The +subspace dimension @math{m} is typically chosen to be much smaller than +@math{n} in order to reduce the computational +effort needed to generate the next approximate solution vector. +The many iterative algorithms which exist differ mainly +in their choice of @math{{\cal K}} and @math{{\cal L}}. + +@node Sparse Iterative Solvers Types +@subsection Types of Sparse Iterative Solvers + +The sparse linear algebra library provides the following types +of iterative solvers: + +@deffn {Sparse Iterative Type} gsl_splinalg_itersolve_gmres +@cindex gmres +This specifies the Generalized Minimum Residual Method (GMRES). +This is a projection method using @math{{\cal K} = {\cal K}_m} +and @math{{\cal L} = A {\cal K}_m} where @math{{\cal K}_m} is +the @math{m}-th Krylov subspace +@tex +\beforedisplay +$$ +{\cal K}_m = span \left\{ r_0, A r_0, ..., A^{m-1} r_0 \right\} +$$ +\afterdisplay +@end tex +@ifinfo +@example +K_m = span( r_0, A r_0, ..., A^(m-1) r_0) +@end example +@end ifinfo +and @math{r_0 = b - A x_0} is the residual vector of the initial guess +@math{x_0}. If @math{m} is set equal to @math{n}, then the Krylov +subspace is @math{{\bf R}^n} and GMRES will provide the exact solution +@var{x}. However, the goal is for the method to arrive at a very good +approximation to @var{x} using a much smaller subspace @math{{\cal K}_m}. By +default, the GMRES method selects @math{m = MIN(n,10)} but the user +may specify a different value for @math{m}. The GMRES storage +requirements grow as @math{O(n(m+1))} and the number of flops +grow as @math{O(4 m^2 n - 4 m^3 / 3)}. + +In the below function @code{gsl_splinalg_itersolve_iterate}, one +GMRES iteration is defined as projecting the approximate solution +vector onto each Krylov subspace @math{{\cal K}_1, ..., {\cal K}_m}, +and so @math{m} can be kept smaller by "restarting" the method +and calling @code{gsl_splinalg_itersolve_iterate} multiple times, +providing the updated approximation @var{x} to each new call. If +the method is not adequately converging, the user may try increasing +the parameter @math{m}. + +GMRES is considered a robust general purpose iterative solver, however +there are cases where the method stagnates if the matrix is not +positive-definite and fails to reduce the residual until the very last +projection onto the subspace @math{{\cal K}_n = {\bf R}^n}. In these +cases, preconditioning the linear system can help, but GSL does not +currently provide any preconditioners. +@end deffn + +@node Iterating the Sparse Linear System +@subsection Iterating the Sparse Linear System + +The following functions are provided to allocate storage for the +sparse linear solvers and iterate the system to a solution. + +@deftypefun {gsl_splinalg_itersolve *} gsl_splinalg_itersolve_alloc (const gsl_splinalg_itersolve_type * @var{T}, const size_t @var{n}, const size_t @var{m}) +This function allocates a workspace for the iterative solution of +@var{n}-by-@var{n} sparse matrix systems. The iterative solver type +is specified by @var{T}. The argument @var{m} specifies the size +of the solution candidate subspace @math{{\cal K}_m}. The dimension +@var{m} may be set to 0 in which case a reasonable default value is used. +@end deftypefun + +@deftypefun void gsl_splinalg_itersolve_free (gsl_splinalg_itersolve * @var{w}) +This function frees the memory associated with the workspace @var{w}. +@end deftypefun + +@deftypefun {const char *} gsl_splinalg_itersolve_name (const gsl_splinalg_itersolve * @var{w}) +This function returns a string pointer to the name of the solver. +@end deftypefun + +@deftypefun int gsl_splinalg_itersolve_iterate (const gsl_spmatrix *@var{A}, const gsl_vector *@var{b}, const double @var{tol}, gsl_vector *@var{x}, gsl_splinalg_itersolve *@var{w}) +This function performs one iteration of the iterative method for +the sparse linear system specfied by the matrix @var{A}, right hand +side vector @var{b} and solution vector @var{x}. On input, @var{x} +must be set to an initial guess for the solution. On output, +@var{x} is updated to give the current solution estimate. The +parameter @var{tol} specifies the relative tolerance between the residual +norm and norm of @var{b} in order to check for convergence. +When the following condition is satisfied: +@tex +\beforedisplay +$$ +|| A x - b || \le tol \times || b || +$$ +\afterdisplay +@end tex +@ifinfo +@example +|| A x - b || <= tol * || b || +@end example +@end ifinfo +the method has converged, the function returns @code{GSL_SUCCESS} and +the final solution is provided in @var{x}. Otherwise, the function +returns @code{GSL_CONTINUE} to signal that more iterations are +required. Here, @math{|| \cdot ||} represents the Euclidean norm. +The input matrix @var{A} may be in triplet or compressed column +format. +@end deftypefun + +@deftypefun double gsl_splinalg_itersolve_normr (const gsl_splinalg_itersolve *@var{w}) +This function returns the current residual norm +@math{||r|| = ||A x - b||}, which is updated after each call to +@code{gsl_splinalg_itersolve_iterate}. +@end deftypefun + +@node Sparse Linear Algebra Examples +@section Examples +@cindex sparse linear algebra, examples + +This example program demonstrates the sparse linear algebra routines on +the solution of a simple 1D Poisson equation on @math{[0,1]}: +@tex +\beforedisplay +$$ +{d^2 u(x) \over dx^2} = f(x) = -\pi^2 \sin{(\pi x)} +$$ +\afterdisplay +@end tex +@ifinfo +@example +u''(x) = f(x) = -\pi^2 \sin(\pi x) +@end example +@end ifinfo +with boundary conditions @math{u(0) = u(1) = 0}. The analytic solution of +this simple problem is @math{u(x) = \sin{\pi x}}. We will solve this +problem by finite differencing the left hand side to give +@tex +\beforedisplay +$$ +{1 \over h^2} \left( u_{i+1} - 2 u_i + u_{i-1} \right) = f_i +$$ +\afterdisplay +@end tex +@ifinfo +@example +1/h^2 ( u_(i+1) - 2 u_i + u_(i-1) ) = f_i +@end example +@end ifinfo +Defining a grid of @math{N} points, @math{h = 1/(N-1)}. In the finite +difference equation above, @math{u_0 = u_{N-1} = 0} are known from +the boundary conditions, so we will only put the equations for +@math{i = 1, ..., N-2} into the matrix system. The resulting +@math{(N-2) \times (N-2)} matrix equation is +@tex +\beforedisplay +$$ +{1 \over h^2} +\left( +\matrix{ +-2 & 1 & 0 & 0 & \ldots & 0 \cr +1 & -2 & 1 & 0 & \ldots & 0 \cr +0 & 1 & -2 & 1 & \ldots & 0 \cr +\vdots & \vdots & \ddots & \ddots & \ddots & \vdots \cr +0 & \ldots & \ldots & 1 & -2 & 1 \cr +0 & \ldots & \ldots & \ldots & 1 & -2 \cr +} +\right) +\left( +\matrix{ +u_1 \cr +u_2 \cr +u_3 \cr +\vdots \cr +u_{N-3} \cr +u_{N-2} \cr +} +\right) = +\left( +\matrix{ +f_1 \cr +f_2 \cr +f_3 \cr +\vdots \cr +f_{N-3} \cr +f_{N-2} \cr +} +\right) +$$ +\afterdisplay +@end tex +An example program which constructs and solves this system is given below. +The system is solved using the iterative GMRES solver. Here is +the output of the program: + +@example +iter 0 residual = 4.297275996844e-11 +Converged +@end example +@noindent +showing that the method converged in a single iteration. +The calculated solution is shown in the following plot. + +@page +@iftex +@center @image{sparse_poisson,6in} +@end iftex + +@example +@verbatiminclude examples/poisson.c +@end example + +@node Sparse Linear Algebra References and Further Reading +@section References and Further Reading +@cindex sparse linear algebra, references + +The implementation of the GMRES iterative solver closely follows +the publications + +@itemize @w{} +@item +H. F. Walker, Implementation of the GMRES method using +Householder transformations, SIAM J. Sci. Stat. Comput. +9(1), 1988. + +@item +Y. Saad, Iterative methods for sparse linear systems, 2nd edition, +SIAM, 2003. +@end itemize diff -Nru gsl-doc-1.16/doc/spmatrix.texi gsl-doc-2.3/doc/spmatrix.texi --- gsl-doc-1.16/doc/spmatrix.texi 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/doc/spmatrix.texi 2016-07-02 23:02:41.000000000 +0000 @@ -0,0 +1,445 @@ +@cindex sparse matrices +@cindex matrices, sparse + +This chapter describes functions for the construction and +manipulation of sparse matrices, matrices which are populated +primarily with zeros and contain only a few non-zero elements. +Sparse matrices often appear in the solution of partial +differential equations. It is beneficial to use specialized +data structures and algorithms for storing and working with +sparse matrices, since dense matrix algorithms and structures +can be very slow and use huge amounts of memory when applied +to sparse matrices. + +@noindent +The header file @file{gsl_spmatrix.h} contains the prototypes for the +sparse matrix functions and related declarations. + +@menu +* Sparse Matrices Overview:: +* Sparse Matrices Allocation:: +* Sparse Matrices Accessing Elements:: +* Sparse Matrices Initializing Elements:: +* Sparse Matrices Reading and Writing:: +* Sparse Matrices Copying:: +* Sparse Matrices Exchanging Rows and Columns:: +* Sparse Matrices Operations:: +* Sparse Matrices Properties:: +* Sparse Matrices Finding Maximum and Minimum Elements:: +* Sparse Matrices Compressed Format:: +* Sparse Matrices Conversion Between Sparse and Dense:: +* Sparse Matrices Examples:: +* Sparse Matrices References and Further Reading:: +@end menu + +@node Sparse Matrices Overview +@section Overview +@cindex sparse matrices, overview + +These routines provide support for constructing and manipulating +sparse matrices in GSL, using an API similar to @code{gsl_matrix}. +The basic structure is called @code{gsl_spmatrix}. There are +three supported storage formats for sparse matrices: the triplet, +compressed column storage (CCS) and compressed row storage (CRS) +formats. The triplet format stores triplets @math{(i,j,x)} for each +non-zero element of the matrix. This notation means that the +@math{(i,j)} element of the matrix @math{A} +is @math{A_{ij} = x}. Compressed column storage stores each column of +non-zero values in the sparse matrix in a continuous memory block, keeping +pointers to the beginning of each column in that memory block, and storing +the row indices of each non-zero element. Compressed row storage stores +each row of non-zero values in a continuous memory block, keeping pointers +to the beginning of each row in the block and storing the column indices +of each non-zero element. The triplet format is ideal +for adding elements to the sparse matrix structure while it is being +constructed, while the compressed storage formats are better suited for +matrix-matrix multiplication or linear solvers. + +@tindex gsl_spmatrix +@noindent +The @code{gsl_spmatrix} structure is defined as + +@example +typedef struct +@{ + size_t size1; + size_t size2; + size_t *i; + double *data; + size_t *p; + size_t nzmax; + size_t nz; + gsl_spmatrix_tree *tree_data; + void *work; + size_t sptype; +@} gsl_spmatrix; +@end example + +@noindent +This defines a @var{size1}-by-@var{size2} sparse matrix. The number of non-zero +elements currently in the matrix is given by @var{nz}. For the triplet +representation, @var{i}, @var{p}, and @var{data} are arrays of size @var{nz} +which contain the row indices, column indices, and element value, respectively. +So if @math{data[k] = A(i,j)}, then @math{i = i[k]} and @math{j = p[k]}. + +@noindent +For compressed column storage, @var{i} and @var{data} are arrays of size +@var{nz} containing the row indices and element values, identical to the triplet +case. @var{p} is an array of size @math{size2 + 1} where @math{p[j]} points +to the index in @var{data} of the start of column @var{j}. Thus, if +@math{data[k] = A(i,j)}, then @math{i = i[k]} and @math{p[j] <= k < p[j+1]}. + +@noindent +For compressed row storage, @var{i} and @var{data} are arrays of size +@var{nz} containing the column indices and element values, identical to the triplet +case. @var{p} is an array of size @math{size1 + 1} where @math{p[i]} points +to the index in @var{data} of the start of row @var{i}. Thus, if +@math{data[k] = A(i,j)}, then @math{j = i[k]} and @math{p[i] <= k < p[i+1]}. + +@noindent +The parameter @var{tree_data} is a binary tree structure used in the triplet +representation, specifically a balanced AVL tree. This speeds up element +searches and duplicate detection during the matrix assembly process. +The parameter @var{work} is additional workspace needed for various operations like +converting from triplet to compressed storage. @var{sptype} indicates +the type of storage format being used (triplet, CCS or CRS). + +@noindent +The compressed storage format defined above makes it very simple +to interface with sophisticated external linear solver libraries +which accept compressed storage input. The user can simply +pass the arrays @var{i}, @var{p}, and @var{data} as the +inputs to external libraries. + +@node Sparse Matrices Allocation +@section Allocation +@cindex sparse matrices, allocation + +The functions for allocating memory for a sparse matrix follow the style of +@code{malloc} and @code{free}. They also perform their own error checking. If +there is insufficient memory available to allocate a matrix then the functions +call the GSL error handler with an error code of @code{GSL_ENOMEM} in addition +to returning a null pointer. + +@deftypefun {gsl_spmatrix *} gsl_spmatrix_alloc (const size_t @var{n1}, const size_t @var{n2}) +This function allocates a sparse matrix of size @var{n1}-by-@var{n2} and +initializes it to all zeros. If the size of the matrix is not known at allocation +time, both @var{n1} and @var{n2} may be set to 1, and they will automatically +grow as elements are added to the matrix. This function sets the +matrix to the triplet representation, which is the easiest for adding +and accessing matrix elements. This function tries to make a reasonable guess +for the number of non-zero elements (@var{nzmax}) which will be added to the matrix by +assuming a sparse density of @math{10\%}. The function +@code{gsl_spmatrix_alloc_nzmax} can be used if this number is known more +accurately. The workspace is of size @math{O(nzmax)}. +@end deftypefun + +@deftypefun {gsl_spmatrix *} gsl_spmatrix_alloc_nzmax (const size_t @var{n1}, const size_t @var{n2}, const size_t @var{nzmax}, const size_t @var{sptype}) +This function allocates a sparse matrix of size @var{n1}-by-@var{n2} and +initializes it to all zeros. If the size of the matrix is not known at allocation +time, both @var{n1} and @var{n2} may be set to 1, and they will automatically +grow as elements are added to the matrix. The parameter @var{nzmax} specifies +the maximum number of non-zero elements which will be added to the matrix. +It does not need to be precisely known in advance, since storage space will +automatically grow using @code{gsl_spmatrix_realloc} if @var{nzmax} is not +large enough. Accurate knowledge of this parameter reduces the number of +reallocation calls required. The parameter @var{sptype} specifies the +storage format of the sparse matrix. Possible values are +@table @code +@item GSL_SPMATRIX_TRIPLET +This flag specifies triplet storage. + +@item GSL_SPMATRIX_CCS +This flag specifies compressed column storage. + +@item GSL_SPMATRIX_CRS +This flag specifies compressed row storage. +@end table +The allocated @code{gsl_spmatrix} structure is of size @math{O(nzmax)}. +@end deftypefun + +@deftypefun int gsl_spmatrix_realloc (const size_t @var{nzmax}, gsl_spmatrix * @var{m}) +This function reallocates the storage space for @var{m} to accomodate +@var{nzmax} non-zero elements. It is typically called internally by +@code{gsl_spmatrix_set} if the user wants to add more elements to the +sparse matrix than the previously specified @var{nzmax}. +@end deftypefun + +@deftypefun void gsl_spmatrix_free (gsl_spmatrix * @var{m}) +This function frees the memory associated with the sparse matrix @var{m}. +@end deftypefun + +@node Sparse Matrices Accessing Elements +@section Accessing Matrix Elements +@cindex sparse matrices, accessing elements + +@deftypefun double gsl_spmatrix_get (const gsl_spmatrix * @var{m}, const size_t @var{i}, const size_t @var{j}) +This function returns element (@var{i},@var{j}) of the matrix @var{m}. +The matrix may be in triplet or compressed format. +@end deftypefun + +@deftypefun int gsl_spmatrix_set (gsl_spmatrix * @var{m}, const size_t @var{i}, const size_t @var{j}, const double @var{x}) +This function sets element (@var{i},@var{j}) of the matrix @var{m} to +the value @var{x}. The matrix must be in triplet representation. +@end deftypefun + +@deftypefun {double *} gsl_spmatrix_ptr (gsl_spmatrix * @var{m}, const size_t @var{i}, const size_t @var{j}) +This function returns a pointer to the (@var{i},@var{j}) element of the matrix @var{m}. +If the (@var{i},@var{j}) element is not explicitly stored in the matrix, +a null pointer is returned. +@end deftypefun + +@node Sparse Matrices Initializing Elements +@section Initializing Matrix Elements +@cindex sparse matrices, initializing elements + +Since the sparse matrix format only stores the non-zero elements, it is automatically +initialized to zero upon allocation. The function @code{gsl_spmatrix_set_zero} may +be used to re-initialize a matrix to zero after elements have been added to it. + +@deftypefun int gsl_spmatrix_set_zero (gsl_spmatrix * @var{m}) +This function sets (or resets) all the elements of the matrix @var{m} to zero. +@end deftypefun + +@node Sparse Matrices Reading and Writing +@section Reading and Writing Matrices +@cindex sparse matrices, reading +@cindex sparse matrices, writing + +@deftypefun int gsl_spmatrix_fwrite (FILE * @var{stream}, const gsl_spmatrix * @var{m}) +This function writes the elements of the matrix @var{m} to the stream +@var{stream} in binary format. The return value is 0 for success and +@code{GSL_EFAILED} if there was a problem writing to the file. Since the +data is written in the native binary format it may not be portable +between different architectures. +@end deftypefun + +@deftypefun int gsl_spmatrix_fread (FILE * @var{stream}, gsl_spmatrix * @var{m}) +This function reads into the matrix @var{m} from the open stream +@var{stream} in binary format. The matrix @var{m} must be preallocated +with the correct storage format, dimensions and have a sufficiently large @code{nzmax} +in order to read in all matrix elements, otherwise @code{GSL_EBADLEN} +is returned. The return value is 0 for success and +@code{GSL_EFAILED} if there was a problem reading from the file. The +data is assumed to have been written in the native binary format on the +same architecture. +@end deftypefun + +@deftypefun int gsl_spmatrix_fprintf (FILE * @var{stream}, const gsl_spmatrix * @var{m}, const char * @var{format}) +This function writes the elements of the matrix @var{m} line-by-line to +the stream @var{stream} using the format specifier @var{format}, which +should be one of the @code{%g}, @code{%e} or @code{%f} formats for +floating point numbers. The function returns 0 for success and +@code{GSL_EFAILED} if there was a problem writing to the file. The +input matrix @var{m} may be in any storage format, and the output file +will be written in MatrixMarket format. +@end deftypefun + +@deftypefun {gsl_spmatrix *} gsl_spmatrix_fscanf (FILE * @var{stream}) +This function reads sparse matrix data in the MatrixMarket format +from the stream @var{stream} and stores it in a newly allocated matrix +which is returned in triplet format. The function returns 0 for success and +@code{GSL_EFAILED} if there was a problem reading from the file. The +user should free the returned matrix when it is no longer needed. +@end deftypefun + +@node Sparse Matrices Copying +@section Copying Matrices +@cindex sparse matrices, copying + +@deftypefun int gsl_spmatrix_memcpy (gsl_spmatrix * @var{dest}, const gsl_spmatrix * @var{src}) +This function copies the elements of the sparse matrix @var{src} into +@var{dest}. The two matrices must have the same dimensions and be in the +same storage format. +@end deftypefun + +@node Sparse Matrices Exchanging Rows and Columns +@section Exchanging Rows and Columns +@cindex sparse matrices, exchanging rows and columns + +@deftypefun int gsl_spmatrix_transpose_memcpy (gsl_spmatrix * @var{dest}, const gsl_spmatrix * @var{src}) +This function copies the transpose of the sparse matrix @var{src} into +@var{dest}. The dimensions of @var{dest} must match the transpose of the +matrix @var{src}. Also, both matrices must use the same sparse storage +format. +@end deftypefun + +@deftypefun int gsl_spmatrix_transpose (gsl_spmatrix * @var{m}) +This function replaces the matrix @var{m} by its transpose, +preserving the storage format of the input matrix. Currently, +only triplet matrix inputs are supported. +@end deftypefun + +@deftypefun int gsl_spmatrix_transpose2 (gsl_spmatrix * @var{m}) +This function replaces the matrix @var{m} by its transpose, but +changes the storage format for compressed matrix inputs. Since +compressed column storage is the transpose of compressed row storage, +this function simply converts a CCS matrix to CRS and vice versa. +This is the most efficient way to transpose a compressed storage +matrix, but the user should note that the storage format of their +compressed matrix will change on output. For triplet matrices, +the output matrix is also in triplet storage. +@end deftypefun + + +@node Sparse Matrices Operations +@section Matrix Operations +@cindex sparse matrices, operations + +@deftypefun int gsl_spmatrix_add (gsl_spmatrix * @var{c}, const gsl_spmatrix * @var{a}, const gsl_spmatrix * @var{b}) +This function computes the sum @math{c = a + b}. The three matrices must +have the same dimensions and be stored in a compressed format. +@end deftypefun + +@deftypefun int gsl_spmatrix_scale (gsl_spmatrix * @var{m}, const double @var{x}) +This function scales all elements of the matrix @var{m} by the constant +factor @var{x}. The result @math{m(i,j) \leftarrow x m(i,j)} is stored in @var{m}. +@end deftypefun + +@node Sparse Matrices Properties +@section Matrix Properties +@cindex sparse matrices, properties + +@deftypefun size_t gsl_spmatrix_nnz (const gsl_spmatrix * @var{m}) +This function returns the number of non-zero elements in @var{m}. +@end deftypefun + +@deftypefun int gsl_spmatrix_equal (const gsl_spmatrix * @var{a}, const gsl_spmatrix * @var{b}) +This function returns 1 if the matrices @var{a} and @var{b} are equal (by comparison of +element values) and 0 otherwise. The matrices @var{a} and @var{b} must be in the same +sparse storage format for comparison. +@end deftypefun + +@node Sparse Matrices Finding Maximum and Minimum Elements +@section Finding Maximum and Minimum Elements +@cindex sparse matrices, min/max elements + +@deftypefun int gsl_spmatrix_minmax (const gsl_spmatrix * @var{m}, double * @var{min_out}, double * @var{max_out}) +This function returns the minimum and maximum elements of the matrix +@var{m}, storing them in @var{min_out} and @var{max_out}, and searching +only the non-zero values. +@end deftypefun + +@node Sparse Matrices Compressed Format +@section Compressed Format +@cindex sparse matrices, compression + +GSL supports compressed column storage (CCS) and compressed row storage (CRS) +formats. + +@deftypefun {gsl_spmatrix *} gsl_spmatrix_ccs (const gsl_spmatrix * @var{T}) +This function creates a sparse matrix in compressed column format +from the input sparse matrix @var{T} which must be in triplet format. +A pointer to a newly allocated matrix is returned. The calling function +should free the newly allocated matrix when it is no longer needed. +@end deftypefun + +@deftypefun {gsl_spmatrix *} gsl_spmatrix_crs (const gsl_spmatrix * @var{T}) +This function creates a sparse matrix in compressed row format +from the input sparse matrix @var{T} which must be in triplet format. +A pointer to a newly allocated matrix is returned. The calling function +should free the newly allocated matrix when it is no longer needed. +@end deftypefun + +@node Sparse Matrices Conversion Between Sparse and Dense +@section Conversion Between Sparse and Dense Matrices +@cindex sparse matrices, conversion + +The @code{gsl_spmatrix} structure can be converted into the dense @code{gsl_matrix} +format and vice versa with the following routines. + +@deftypefun int gsl_spmatrix_d2sp (gsl_spmatrix * @var{S}, const gsl_matrix * @var{A}) +This function converts the dense matrix @var{A} into sparse triplet format +and stores the result in @var{S}. +@end deftypefun + +@deftypefun int gsl_spmatrix_sp2d (gsl_matrix * @var{A}, const gsl_spmatrix * @var{S}) +This function converts the sparse matrix @var{S} into a dense matrix and +stores the result in @var{A}. @var{S} must be in triplet format. +@end deftypefun + +@node Sparse Matrices Examples +@section Examples +@cindex sparse matrices, examples + +The following example program builds a 5-by-4 sparse matrix +and prints it in triplet, compressed column, and compressed +row format. The matrix which is constructed is +@tex +\beforedisplay +$$ +\left( +\matrix{ +0 & 0 & 3.1 & 4.6 \cr +1 & 0 & 7.2 & 0 \cr +0 & 0 & 0 & 0 \cr +2.1 & 2.9 & 0 & 8.5 \cr +4.1 & 0 & 0 & 0 \cr +} +\right) +$$ +\afterdisplay +@end tex +The output of the program is + +@example +printing all matrix elements: +A(0,0) = 0 +A(0,1) = 0 +A(0,2) = 3.1 +A(0,3) = 4.6 +A(1,0) = 1 +. +. +. +A(4,0) = 4.1 +A(4,1) = 0 +A(4,2) = 0 +A(4,3) = 0 +matrix in triplet format (i,j,Aij): +(0, 2, 3.1) +(0, 3, 4.6) +(1, 0, 1.0) +(1, 2, 7.2) +(3, 0, 2.1) +(3, 1, 2.9) +(3, 3, 8.5) +(4, 0, 4.1) +matrix in compressed column format: +i = [ 1, 3, 4, 3, 0, 1, 0, 3, ] +p = [ 0, 3, 4, 6, 8, ] +d = [ 1, 2.1, 4.1, 2.9, 3.1, 7.2, 4.6, 8.5, ] +matrix in compressed row format: +i = [ 2, 3, 0, 2, 0, 1, 3, 0, ] +p = [ 0, 2, 4, 4, 7, 8, ] +d = [ 3.1, 4.6, 1, 7.2, 2.1, 2.9, 8.5, 4.1, ] +@end example +@noindent +We see in the compressed column output, the data array stores +each column contiguously, the array @math{i} stores +the row index of the corresponding data element, and the +array @math{p} stores the index of the start of each column in the +data array. Similarly, for the compressed row output, the +data array stores each row contiguously, the array @math{i} +stores the column index of the corresponding data element, and +the @math{p} array stores the index of the start of each row +in the data array. + +@example +@verbatiminclude examples/spmatrix.c +@end example + +@node Sparse Matrices References and Further Reading +@section References and Further Reading +@cindex sparse matrices, references + +The algorithms used by these functions are described in the +following sources: + +@itemize @w{} +@item +T. A. Davis, Direct Methods for Sparse Linear Systems, SIAM, 2006. + +@item +CSparse software library, @uref{https://www.cise.ufl.edu/research/sparse/CSparse} +@end itemize diff -Nru gsl-doc-1.16/doc/stamp-vti gsl-doc-2.3/doc/stamp-vti --- gsl-doc-1.16/doc/stamp-vti 2013-07-19 15:17:08.000000000 +0000 +++ gsl-doc-2.3/doc/stamp-vti 2016-12-09 00:06:07.000000000 +0000 @@ -1,4 +1,4 @@ -@set UPDATED 17 July 2013 -@set UPDATED-MONTH July 2013 -@set EDITION 1.16 -@set VERSION 1.16 +@set UPDATED 29 August 2016 +@set UPDATED-MONTH August 2016 +@set EDITION 2.3 +@set VERSION 2.3 diff -Nru gsl-doc-1.16/doc/statistics.texi gsl-doc-2.3/doc/statistics.texi --- gsl-doc-1.16/doc/statistics.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/statistics.texi 2016-07-07 20:36:10.000000000 +0000 @@ -336,7 +336,7 @@ @tex \beforedisplay $$ -a_1 = {\sum_{i = 1}^{n} (x_{i} - \Hat\mu) (x_{i-1} - \Hat\mu) +a_1 = {\sum_{i = 2}^{n} (x_{i} - \Hat\mu) (x_{i-1} - \Hat\mu) \over \sum_{i = 1}^{n} (x_{i} - \Hat\mu) (x_{i} - \Hat\mu)} $$ @@ -345,7 +345,7 @@ @ifinfo @example -a_1 = @{\sum_@{i = 1@}^@{n@} (x_@{i@} - \Hat\mu) (x_@{i-1@} - \Hat\mu) +a_1 = @{\sum_@{i = 2@}^@{n@} (x_@{i@} - \Hat\mu) (x_@{i-1@} - \Hat\mu) \over \sum_@{i = 1@}^@{n@} (x_@{i@} - \Hat\mu) (x_@{i@} - \Hat\mu)@} @end example @@ -767,7 +767,7 @@ The program should produce the following output, @example -@verbatiminclude examples/stat.out +@verbatiminclude examples/stat.txt @end example @@ -780,7 +780,7 @@ This program should produce the following output, @example -@verbatiminclude examples/statsort.out +@verbatiminclude examples/statsort.txt @end example @node Statistics References and Further Reading diff -Nru gsl-doc-1.16/doc/sum.texi gsl-doc-2.3/doc/sum.texi --- gsl-doc-1.16/doc/sum.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/sum.texi 2015-11-09 05:23:40.000000000 +0000 @@ -42,7 +42,7 @@ does give a reliable error estimate. @deftypefun {gsl_sum_levin_u_workspace *} gsl_sum_levin_u_alloc (size_t @var{n}) -@tpindex gsl_sum_levin_u_workspace +@tindex gsl_sum_levin_u_workspace This function allocates a workspace for a Levin @math{u}-transform of @var{n} terms. The size of the workspace is @math{O(2n^2 + 3n)}. @end deftypefun @@ -85,7 +85,7 @@ results. @deftypefun {gsl_sum_levin_utrunc_workspace *} gsl_sum_levin_utrunc_alloc (size_t @var{n}) -@tpindex gsl_sum_levin_utrunc_workspace +@tindex gsl_sum_levin_utrunc_workspace This function allocates a workspace for a Levin @math{u}-transform of @var{n} terms, without error estimation. The size of the workspace is @math{O(3n)}. @@ -147,7 +147,7 @@ @example $ ./a.out -@verbatiminclude examples/sum.out +@verbatiminclude examples/sum.txt @end example @noindent diff -Nru gsl-doc-1.16/doc/usage.texi gsl-doc-2.3/doc/usage.texi --- gsl-doc-1.16/doc/usage.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/usage.texi 2015-11-09 05:23:40.000000000 +0000 @@ -38,7 +38,7 @@ the compiler and platform used---this is normal.} @example -@verbatiminclude examples/intro.out +@verbatiminclude examples/intro.txt @end example @noindent @@ -235,8 +235,8 @@ @node Inline functions @section Inline functions -@vrindex @code{HAVE_INLINE} -@vrindex @code{GSL_C99_INLINE} +@vindex @code{HAVE_INLINE} +@vindex @code{GSL_C99_INLINE} @cindex inline functions @cindex HAVE_INLINE @cindex GSL_C99_INLINE diff -Nru gsl-doc-1.16/doc/vectors.texi gsl-doc-2.3/doc/vectors.texi --- gsl-doc-1.16/doc/vectors.texi 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/doc/vectors.texi 2015-11-09 05:23:40.000000000 +0000 @@ -55,7 +55,7 @@ @node Blocks @section Blocks -@tpindex gsl_block +@tindex gsl_block For consistency all memory is allocated through a @code{gsl_block} structure. The structure contains two components, the size of an area of memory and a pointer to the memory. The @code{gsl_block} structure looks @@ -174,7 +174,7 @@ Here is the output from the program, @example -@verbatiminclude examples/block.out +@verbatiminclude examples/block.txt @end example @comment @@ -188,7 +188,7 @@ same block. A vector slice is a set of equally-spaced elements of an area of memory. -@tpindex gsl_vector +@tindex gsl_vector The @code{gsl_vector} structure contains five components, the @dfn{size}, the @dfn{stride}, a pointer to the memory where the elements are stored, @var{data}, a pointer to the block owned by the vector, @@ -293,7 +293,7 @@ the preprocessor macro @code{HAVE_INLINE} defined to use these functions. -@vrindex @code{GSL_RANGE_CHECK_OFF} +@vindex @code{GSL_RANGE_CHECK_OFF} If necessary you can turn off range checking completely without modifying any source files by recompiling your program with the preprocessor definition @code{GSL_RANGE_CHECK_OFF}. Provided your @@ -304,14 +304,14 @@ penalty for using the range checking functions when range checking is turned off. -@vrindex @code{GSL_C99_INLINE} +@vindex @code{GSL_C99_INLINE} If you use a C99 compiler which requires inline functions in header files to be declared @code{inline} instead of @code{extern inline}, define the macro @code{GSL_C99_INLINE} (@pxref{Inline functions}). With GCC this is selected automatically when compiling in C99 mode (@code{-std=c99}). -@vrindex gsl_check_range +@vindex gsl_check_range If inline functions are not used, calls to the functions @code{gsl_vector_get} and @code{gsl_vector_set} will link to the compiled versions of these functions in the library itself. The range @@ -321,13 +321,13 @@ overhead, there is less benefit in disabling range checking here than for inline functions. -@deftypefun double gsl_vector_get (const gsl_vector * @var{v}, size_t @var{i}) +@deftypefun double gsl_vector_get (const gsl_vector * @var{v}, const size_t @var{i}) This function returns the @var{i}-th element of a vector @var{v}. If @var{i} lies outside the allowed range of 0 to @math{@var{n}-1} then the error handler is invoked and 0 is returned. @inlinefn{} @end deftypefun -@deftypefun void gsl_vector_set (gsl_vector * @var{v}, size_t @var{i}, double @var{x}) +@deftypefun void gsl_vector_set (gsl_vector * @var{v}, const size_t @var{i}, double @var{x}) This function sets the value of the @var{i}-th element of a vector @var{v} to @var{x}. If @var{i} lies outside the allowed range of 0 to @math{@var{n}-1} then the error handler is invoked. @inlinefn{} @@ -410,8 +410,8 @@ can be made which provide access to the even and odd elements of a vector. -@tpindex gsl_vector_view -@tpindex gsl_vector_const_view +@tindex gsl_vector_view +@tindex gsl_vector_const_view A vector view is a temporary object, stored on the stack, which can be used to operate on a subset of vector elements. Vector views can be defined for both constant and non-constant vectors, using separate types @@ -843,7 +843,7 @@ generalized slice of a block. Like a vector it represents a set of elements in an area of memory, but uses two indices instead of one. -@tpindex gsl_matrix +@tindex gsl_matrix The @code{gsl_matrix} structure contains six components, the two dimensions of the matrix, a physical dimension, a pointer to the memory where the elements of the matrix are stored, @var{data}, a pointer to @@ -974,14 +974,14 @@ @noindent where @var{tda} is the physical row-length of the matrix. -@deftypefun double gsl_matrix_get (const gsl_matrix * @var{m}, size_t @var{i}, size_t @var{j}) +@deftypefun double gsl_matrix_get (const gsl_matrix * @var{m}, const size_t @var{i}, const size_t @var{j}) This function returns the @math{(i,j)}-th element of a matrix @var{m}. If @var{i} or @var{j} lie outside the allowed range of 0 to @math{@var{n1}-1} and 0 to @math{@var{n2}-1} then the error handler is invoked and 0 is returned. @inlinefn{} @end deftypefun -@deftypefun void gsl_matrix_set (gsl_matrix * @var{m}, size_t @var{i}, size_t @var{j}, double @var{x}) +@deftypefun void gsl_matrix_set (gsl_matrix * @var{m}, const size_t @var{i}, const size_t @var{j}, double @var{x}) This function sets the value of the @math{(i,j)}-th element of a matrix @var{m} to @var{x}. If @var{i} or @var{j} lies outside the allowed range of 0 to @math{@var{n1}-1} and 0 to @math{@var{n2}-1} then the error @@ -1066,8 +1066,8 @@ @node Matrix views @subsection Matrix views -@tpindex gsl_matrix_view -@tpindex gsl_matrix_const_view +@tindex gsl_matrix_view +@tindex gsl_matrix_const_view A matrix view is a temporary object, stored on the stack, which can be used to operate on a subset of matrix elements. Matrix views can be @@ -1663,7 +1663,7 @@ @example $ ./a.out -@verbatiminclude examples/vectorview.out +@verbatiminclude examples/vectorview.txt @end example @noindent diff -Nru gsl-doc-1.16/doc/version.texi gsl-doc-2.3/doc/version.texi --- gsl-doc-1.16/doc/version.texi 2013-07-19 15:17:08.000000000 +0000 +++ gsl-doc-2.3/doc/version.texi 2016-12-09 00:06:07.000000000 +0000 @@ -1,4 +1,4 @@ -@set UPDATED 17 July 2013 -@set UPDATED-MONTH July 2013 -@set EDITION 1.16 -@set VERSION 1.16 +@set UPDATED 29 August 2016 +@set UPDATED-MONTH August 2016 +@set EDITION 2.3 +@set VERSION 2.3 diff -Nru gsl-doc-1.16/eigen/francis.c gsl-doc-2.3/eigen/francis.c --- gsl-doc-1.16/eigen/francis.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/eigen/francis.c 2016-07-07 20:36:10.000000000 +0000 @@ -27,7 +27,6 @@ #include #include #include -#include #include #include diff -Nru gsl-doc-1.16/eigen/gen.c gsl-doc-2.3/eigen/gen.c --- gsl-doc-1.16/eigen/gen.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/eigen/gen.c 2016-08-19 15:37:27.000000000 +0000 @@ -94,7 +94,6 @@ /*FIX**/ inline static double normF (gsl_matrix * A); -inline static void create_givens (const double a, const double b, double *c, double *s); /* gsl_eigen_gen_alloc() @@ -606,7 +605,7 @@ temp2; size_t j; /* looping */ gsl_vector_view xv, yv; /* temporary views */ - size_t top; + size_t top = 0; size_t rows; if (w->n_iter % 10 == 0) @@ -703,7 +702,7 @@ temp = scale1*gsl_matrix_get(H, 0, 0) - wr1*gsl_matrix_get(R, 0, 0); temp2 = scale1*gsl_matrix_get(H, 1, 0); - create_givens(temp, temp2, &cs, &sn); + gsl_linalg_givens(temp, temp2, &cs, &sn); sn = -sn; for (j = 0; j < N - 1; ++j) @@ -712,7 +711,7 @@ { temp = gsl_matrix_get(H, j, j - 1); temp2 = gsl_matrix_get(H, j + 1, j - 1); - create_givens(temp, temp2, &cs, &sn); + gsl_linalg_givens(temp, temp2, &cs, &sn); sn = -sn; /* apply to column (j - 1) */ @@ -760,7 +759,7 @@ temp = gsl_matrix_get(R, j + 1, j + 1); temp2 = gsl_matrix_get(R, j + 1, j); - create_givens(temp, temp2, &cs, &sn); + gsl_linalg_givens(temp, temp2, &cs, &sn); rows = GSL_MIN(j + 3, N); @@ -826,7 +825,7 @@ gsl_matrix_view m; /* temporary view */ double tmp; size_t q, r; - size_t top; /* location of H in original matrix */ + size_t top = 0; /* location of H in original matrix */ double scale; double AB11, /* various matrix element ratios */ AB22, @@ -1229,7 +1228,7 @@ gen_tri_split_top(gsl_matrix *H, gsl_matrix *R, gsl_eigen_gen_workspace *w) { const size_t N = H->size1; - size_t j, top; + size_t j, top = 0; double cs, sn; gsl_vector_view xv, yv; @@ -1238,10 +1237,10 @@ j = 0; - create_givens(gsl_matrix_get(H, j, j), - gsl_matrix_get(H, j + 1, j), - &cs, - &sn); + gsl_linalg_givens(gsl_matrix_get(H, j, j), + gsl_matrix_get(H, j + 1, j), + &cs, + &sn); sn = -sn; if (w->compute_s) @@ -1296,7 +1295,7 @@ gsl_eigen_gen_workspace *w) { const size_t N = H->size1; - size_t j, top; + size_t j, top = 0; double cs, sn; gsl_vector_view xv, yv; @@ -1305,10 +1304,10 @@ for (j = q; j < N - 1; ++j) { - create_givens(gsl_matrix_get(R, j, j + 1), - gsl_matrix_get(R, j + 1, j + 1), - &cs, - &sn); + gsl_linalg_givens(gsl_matrix_get(R, j, j + 1), + gsl_matrix_get(R, j + 1, j + 1), + &cs, + &sn); sn = -sn; if (w->compute_t) @@ -1346,10 +1345,10 @@ gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); } - create_givens(gsl_matrix_get(H, j + 1, j), - gsl_matrix_get(H, j + 1, j - 1), - &cs, - &sn); + gsl_linalg_givens(gsl_matrix_get(H, j + 1, j), + gsl_matrix_get(H, j + 1, j - 1), + &cs, + &sn); sn = -sn; if (w->compute_s) @@ -1400,17 +1399,17 @@ gen_tri_zero_H(gsl_matrix *H, gsl_matrix *R, gsl_eigen_gen_workspace *w) { const size_t N = H->size1; - size_t top; + size_t top = 0; double cs, sn; gsl_vector_view xv, yv; if (w->needtop) top = gen_get_submatrix(w->H, H); - create_givens(gsl_matrix_get(H, N - 1, N - 1), - gsl_matrix_get(H, N - 1, N - 2), - &cs, - &sn); + gsl_linalg_givens(gsl_matrix_get(H, N - 1, N - 1), + gsl_matrix_get(H, N - 1, N - 2), + &cs, + &sn); sn = -sn; if (w->compute_s) @@ -1555,7 +1554,7 @@ double *beta, gsl_eigen_gen_workspace *w) { size_t i; - size_t top; + size_t top = 0; /* * it is a 1-by-1 block - the only requirement is that @@ -1635,7 +1634,7 @@ gsl_vector_view sv = gsl_vector_view_array(datS, 2); gsl_vector_view wv = gsl_vector_view_array(work, 2); double B11, B22; - size_t top; + size_t top = 0; double det; double cr, sr, cl, sl; gsl_vector_view xv, yv; @@ -2086,31 +2085,3 @@ return sum; } - -/* Generate a Givens rotation (cos,sin) which takes v=(x,y) to (|v|,0) - - From Golub and Van Loan, "Matrix Computations", Section 5.1.8 */ - -inline static void -create_givens (const double a, const double b, double *c, double *s) -{ - if (b == 0) - { - *c = 1; - *s = 0; - } - else if (fabs (b) > fabs (a)) - { - double t = -a / b; - double s1 = 1.0 / sqrt (1 + t * t); - *s = s1; - *c = s1 * t; - } - else - { - double t = -b / a; - double c1 = 1.0 / sqrt (1 + t * t); - *c = c1; - *s = c1 * t; - } -} diff -Nru gsl-doc-1.16/eigen/gensymm.c gsl-doc-2.3/eigen/gensymm.c --- gsl-doc-1.16/eigen/gensymm.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/eigen/gensymm.c 2016-08-30 15:14:04.000000000 +0000 @@ -136,7 +136,7 @@ int s; /* compute Cholesky factorization of B */ - s = gsl_linalg_cholesky_decomp(B); + s = gsl_linalg_cholesky_decomp1(B); if (s != GSL_SUCCESS) return s; /* B is not positive definite */ diff -Nru gsl-doc-1.16/eigen/gensymmv.c gsl-doc-2.3/eigen/gensymmv.c --- gsl-doc-1.16/eigen/gensymmv.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/eigen/gensymmv.c 2016-08-30 15:14:12.000000000 +0000 @@ -147,7 +147,7 @@ int s; /* compute Cholesky factorization of B */ - s = gsl_linalg_cholesky_decomp(B); + s = gsl_linalg_cholesky_decomp1(B); if (s != GSL_SUCCESS) return s; /* B is not positive definite */ diff -Nru gsl-doc-1.16/eigen/Makefile.am gsl-doc-2.3/eigen/Makefile.am --- gsl-doc-1.16/eigen/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/eigen/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -5,7 +5,7 @@ pkginclude_HEADERS = gsl_eigen.h libgsleigen_la_SOURCES = jacobi.c symm.c symmv.c nonsymm.c nonsymmv.c herm.c hermv.c gensymm.c gensymmv.c genherm.c genhermv.c gen.c genv.c sort.c francis.c schur.c -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) noinst_HEADERS = qrstep.c diff -Nru gsl-doc-1.16/eigen/Makefile.in gsl-doc-2.3/eigen/Makefile.in --- gsl-doc-1.16/eigen/Makefile.in 2013-07-19 15:14:53.000000000 +0000 +++ gsl-doc-2.3/eigen/Makefile.in 2016-12-09 00:04:21.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -384,6 +384,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -406,7 +407,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -523,7 +527,7 @@ noinst_LTLIBRARIES = libgsleigen.la pkginclude_HEADERS = gsl_eigen.h libgsleigen_la_SOURCES = jacobi.c symm.c symmv.c nonsymm.c nonsymmv.c herm.c hermv.c gensymm.c gensymmv.c genherm.c genhermv.c gen.c genv.c sort.c francis.c schur.c -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) noinst_HEADERS = qrstep.c TESTS = $(check_PROGRAMS) test_LDADD = libgsleigen.la ../test/libgsltest.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../sys/libgslsys.la ../err/libgslerr.la ../utils/libutils.la ../rng/libgslrng.la ../sort/libgslsort.la diff -Nru gsl-doc-1.16/eigen/nonsymmv.c gsl-doc-2.3/eigen/nonsymmv.c --- gsl-doc-1.16/eigen/nonsymmv.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/eigen/nonsymmv.c 2016-07-07 20:36:10.000000000 +0000 @@ -27,7 +27,6 @@ #include #include #include -#include #include #include #include diff -Nru gsl-doc-1.16/eigen/sort.c gsl-doc-2.3/eigen/sort.c --- gsl-doc-1.16/eigen/sort.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/eigen/sort.c 2016-08-12 14:46:36.000000000 +0000 @@ -26,6 +26,15 @@ #include #include +/* Compares real parts of a and b and, if they are not approximately equal, + * returns Re(a) < Re(b); otherwise returns Im(a) < Im(b). */ +static int +complex_less(gsl_complex a, gsl_complex b) +{ + return gsl_fcmp(GSL_REAL(a), GSL_REAL(b), GSL_DBL_EPSILON) == 0 ? + GSL_IMAG(a) < GSL_IMAG(b) : GSL_REAL(a) < GSL_REAL(b); +} + /* The eigen_sort below is not very good, but it is simple and * self-contained. We can always implement an improved sort later. */ @@ -208,7 +217,11 @@ test = (gsl_complex_abs (ej) > gsl_complex_abs (ek)); break; case GSL_EIGEN_SORT_VAL_ASC: + test = complex_less(ej, ek); + break; case GSL_EIGEN_SORT_VAL_DESC: + test = complex_less(ek, ej); + break; default: GSL_ERROR ("invalid sort type", GSL_EINVAL); } diff -Nru gsl-doc-1.16/eigen/symm.c gsl-doc-2.3/eigen/symm.c --- gsl-doc-1.16/eigen/symm.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/eigen/symm.c 2016-07-07 20:36:10.000000000 +0000 @@ -84,7 +84,7 @@ int gsl_eigen_symm (gsl_matrix * A, gsl_vector * eval, - gsl_eigen_symm_workspace * w) + gsl_eigen_symm_workspace * w) { if (A->size1 != A->size2) { @@ -94,6 +94,10 @@ { GSL_ERROR ("eigenvalue vector must match matrix size", GSL_EBADLEN); } + else if (A->size1 != w->size) + { + GSL_ERROR ("matrix does not match workspace", GSL_EBADLEN); + } else { const size_t N = A->size1; diff -Nru gsl-doc-1.16/eigen/test.c gsl-doc-2.3/eigen/test.c --- gsl-doc-1.16/eigen/test.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/eigen/test.c 2016-08-12 14:45:17.000000000 +0000 @@ -1267,8 +1267,8 @@ } /* sort eval and evalv and test them */ - gsl_eigen_nonsymmv_sort(w->eval, NULL, GSL_EIGEN_SORT_ABS_ASC); - gsl_eigen_nonsymmv_sort(w->evalv, NULL, GSL_EIGEN_SORT_ABS_ASC); + gsl_eigen_nonsymmv_sort(w->eval, NULL, GSL_EIGEN_SORT_VAL_ASC); + gsl_eigen_nonsymmv_sort(w->evalv, NULL, GSL_EIGEN_SORT_VAL_ASC); test_eigenvalues_complex(w->evalv, w->eval, "gen", desc); gsl_eigen_genv_sort(w->alphav, w->betav, w->evec, GSL_EIGEN_SORT_ABS_ASC); diff -Nru gsl-doc-1.16/err/Makefile.in gsl-doc-2.3/err/Makefile.in --- gsl-doc-1.16/err/Makefile.in 2013-07-19 15:14:53.000000000 +0000 +++ gsl-doc-2.3/err/Makefile.in 2016-12-09 00:04:21.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -375,6 +375,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -397,7 +398,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ diff -Nru gsl-doc-1.16/fft/Makefile.am gsl-doc-2.3/fft/Makefile.am --- gsl-doc-1.16/fft/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/fft/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ pkginclude_HEADERS = gsl_fft.h gsl_fft_complex.h gsl_fft_halfcomplex.h gsl_fft_real.h gsl_dft_complex.h gsl_dft_complex_float.h gsl_fft_complex_float.h gsl_fft_halfcomplex_float.h gsl_fft_real_float.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslfft_la_SOURCES = dft.c fft.c diff -Nru gsl-doc-1.16/fft/Makefile.in gsl-doc-2.3/fft/Makefile.in --- gsl-doc-1.16/fft/Makefile.in 2013-07-19 15:14:53.000000000 +0000 +++ gsl-doc-2.3/fft/Makefile.in 2016-12-09 00:04:21.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -377,6 +377,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -399,7 +400,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -515,7 +519,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslfft.la pkginclude_HEADERS = gsl_fft.h gsl_fft_complex.h gsl_fft_halfcomplex.h gsl_fft_real.h gsl_dft_complex.h gsl_dft_complex_float.h gsl_fft_complex_float.h gsl_fft_halfcomplex_float.h gsl_fft_real_float.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslfft_la_SOURCES = dft.c fft.c noinst_HEADERS = c_pass.h hc_pass.h real_pass.h signals.h signals_source.c c_main.c c_init.c c_pass_2.c c_pass_3.c c_pass_4.c c_pass_5.c c_pass_6.c c_pass_7.c c_pass_n.c c_radix2.c bitreverse.c bitreverse.h factorize.c factorize.h hc_init.c hc_pass_2.c hc_pass_3.c hc_pass_4.c hc_pass_5.c hc_pass_n.c hc_radix2.c hc_unpack.c real_init.c real_pass_2.c real_pass_3.c real_pass_4.c real_pass_5.c real_pass_n.c real_radix2.c real_unpack.c compare.h compare_source.c dft_source.c hc_main.c real_main.c test_complex_source.c test_real_source.c test_trap_source.c urand.c complex_internal.h TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/fit/Makefile.am gsl-doc-2.3/fit/Makefile.am --- gsl-doc-1.16/fit/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/fit/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ pkginclude_HEADERS = gsl_fit.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslfit_la_SOURCES = linear.c diff -Nru gsl-doc-1.16/fit/Makefile.in gsl-doc-2.3/fit/Makefile.in --- gsl-doc-1.16/fit/Makefile.in 2013-07-19 15:14:53.000000000 +0000 +++ gsl-doc-2.3/fit/Makefile.in 2016-12-09 00:04:21.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -376,6 +376,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -398,7 +399,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -514,7 +518,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslfit.la pkginclude_HEADERS = gsl_fit.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslfit_la_SOURCES = linear.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c diff -Nru gsl-doc-1.16/gsl/Makefile.am gsl-doc-2.3/gsl/Makefile.am --- gsl-doc-1.16/gsl/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/gsl/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -12,6 +12,5 @@ all: all-am header-links -clean: clean-am remove-links -distclean: distclean-am remove-links - -rm -f Makefile +clean-local: remove-links +distclean-local: remove-links diff -Nru gsl-doc-1.16/gsl/Makefile.in gsl-doc-2.3/gsl/Makefile.in --- gsl-doc-1.16/gsl/Makefile.in 2013-07-19 15:14:53.000000000 +0000 +++ gsl-doc-2.3/gsl/Makefile.in 2016-12-09 00:04:21.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -113,6 +113,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -135,7 +136,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -359,9 +363,13 @@ maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -clean-am: clean-generic clean-libtool mostlyclean-am +clean: clean-am -distclean-am: clean-am distclean-generic +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am @@ -424,16 +432,17 @@ .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ - cscopelist-am ctags-am distclean distclean-generic \ - distclean-libtool distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags-am uninstall uninstall-am + clean-local cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distclean-local distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ + uninstall-am header-links: remove-links @@ -448,9 +457,8 @@ all: all-am header-links -clean: clean-am remove-links -distclean: distclean-am remove-links - -rm -f Makefile +clean-local: remove-links +distclean-local: remove-links # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gsl-doc-1.16/gsl-histogram.c gsl-doc-2.3/gsl-histogram.c --- gsl-doc-1.16/gsl-histogram.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/gsl-histogram.c 2015-11-03 16:21:55.000000000 +0000 @@ -20,34 +20,54 @@ #include #include #include +#include #include +void +print_help(void) +{ + fprintf (stderr, "Usage: gsl-histogram [-u] xmin xmax [n]\n"); + fprintf (stderr, "Computes a histogram of the data on stdin using n bins from xmin to xmax.\n" + "If n is unspecified then bins of integer width are used.\n" + "If -u is given, histogram is normalized so that sum of all bins is unity.\n"); +} + int main (int argc, char **argv) { double a = 0.0, b = 1.0; size_t n = 10; + int unit = 0; + int c; - if (argc != 3 && argc !=4) + while ((c = getopt(argc, argv, "u")) != (-1)) { - printf ("Usage: gsl-histogram xmin xmax [n]\n"); - printf ( -"Computes a histogram of the data on stdin using n bins from xmin to xmax.\n" -"If n is unspecified then bins of integer width are used.\n"); - exit (0); + switch (c) + { + case 'u': + unit = 1; + break; + + default: + print_help(); + exit(0); + break; + } } - a = atof (argv[1]); - b = atof (argv[2]); - - if (argc == 4) + if (argc - optind < 2) { - n = atoi (argv[3]); + print_help(); + exit(0); } + + a = atof (argv[optind++]); + b = atof (argv[optind++]); + + if (argc - optind > 0) + n = atoi (argv[optind++]); else - { - n = (int)(b - a) ; - } + n = (int)(b - a) ; { double x; @@ -69,6 +89,15 @@ } #endif + /* normalize histogram if needed */ + if (unit) + { + double sum = gsl_histogram_sum(h); + + if (sum > 0.0) + gsl_histogram_scale(h, 1.0 / sum); + } + gsl_histogram_fprintf (stdout, h, "%g", "%g"); gsl_histogram_free (h); diff -Nru gsl-doc-1.16/gsl_version.h gsl-doc-2.3/gsl_version.h --- gsl-doc-1.16/gsl_version.h 2013-07-19 15:16:58.000000000 +0000 +++ gsl-doc-2.3/gsl_version.h 2016-12-09 00:04:34.000000000 +0000 @@ -15,9 +15,9 @@ __BEGIN_DECLS -#define GSL_VERSION "1.16" -#define GSL_MAJOR_VERSION 1 -#define GSL_MINOR_VERSION 16 +#define GSL_VERSION "2.3" +#define GSL_MAJOR_VERSION 2 +#define GSL_MINOR_VERSION 3 GSL_VAR const char * gsl_version; diff -Nru gsl-doc-1.16/histogram/Makefile.am gsl-doc-2.3/histogram/Makefile.am --- gsl-doc-1.16/histogram/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/histogram/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ pkginclude_HEADERS = gsl_histogram.h gsl_histogram2d.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslhistogram_la_SOURCES = add.c get.c init.c params.c reset.c file.c pdf.c gsl_histogram.h add2d.c get2d.c init2d.c params2d.c reset2d.c file2d.c pdf2d.c gsl_histogram2d.h calloc_range.c calloc_range2d.c copy.c copy2d.c maxval.c maxval2d.c oper.c oper2d.c stat.c stat2d.c diff -Nru gsl-doc-1.16/histogram/Makefile.in gsl-doc-2.3/histogram/Makefile.in --- gsl-doc-1.16/histogram/Makefile.in 2013-07-19 15:14:53.000000000 +0000 +++ gsl-doc-2.3/histogram/Makefile.in 2016-12-09 00:04:21.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -383,6 +383,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -405,7 +406,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -521,7 +525,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslhistogram.la pkginclude_HEADERS = gsl_histogram.h gsl_histogram2d.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslhistogram_la_SOURCES = add.c get.c init.c params.c reset.c file.c pdf.c gsl_histogram.h add2d.c get2d.c init2d.c params2d.c reset2d.c file2d.c pdf2d.c gsl_histogram2d.h calloc_range.c calloc_range2d.c copy.c copy2d.c maxval.c maxval2d.c oper.c oper2d.c stat.c stat2d.c noinst_HEADERS = urand.c find.c find2d.c TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/ieee-utils/env.c gsl-doc-2.3/ieee-utils/env.c --- gsl-doc-1.16/ieee-utils/env.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/ieee-utils/env.c 2015-11-03 16:21:55.000000000 +0000 @@ -31,12 +31,21 @@ int comma = 0 ; +#if defined( _MSC_VER ) + + extern const char *fp_env_string; + p = fp_env_string; + +#else + if (p == 0) /* GSL_IEEE_MODE environment variable is not set */ return ; if (*p == '\0') /* GSL_IEEE_MODE environment variable is empty */ return ; +#endif + gsl_ieee_read_mode_string (p, &precision, &rounding, &exception_mask) ; gsl_ieee_set_mode (precision, rounding, exception_mask) ; diff -Nru gsl-doc-1.16/ieee-utils/Makefile.am gsl-doc-2.3/ieee-utils/Makefile.am --- gsl-doc-1.16/ieee-utils/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/ieee-utils/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -6,7 +6,7 @@ noinst_HEADERS = fp-aix.c fp-darwin.c fp-darwin86.c fp-hpux.c fp-hpux11.c fp-irix.c fp-gnum68k.c fp-gnuppc.c fp-solaris.c fp-gnusparc.c fp-sunos4.c fp-tru64.c fp-unknown.c fp-gnux86.c fp-freebsd.c fp-os2emx.c fp-netbsd.c fp-openbsd.c fp-gnuc99.c endian.c standardize.c -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) check_PROGRAMS = test diff -Nru gsl-doc-1.16/ieee-utils/Makefile.in gsl-doc-2.3/ieee-utils/Makefile.in --- gsl-doc-1.16/ieee-utils/Makefile.in 2013-07-19 15:14:53.000000000 +0000 +++ gsl-doc-2.3/ieee-utils/Makefile.in 2016-12-09 00:04:21.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -377,6 +377,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -399,7 +400,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -517,7 +521,7 @@ pkginclude_HEADERS = gsl_ieee_utils.h libgslieeeutils_la_SOURCES = print.c make_rep.c gsl_ieee_utils.h env.c fp.c read.c noinst_HEADERS = fp-aix.c fp-darwin.c fp-darwin86.c fp-hpux.c fp-hpux11.c fp-irix.c fp-gnum68k.c fp-gnuppc.c fp-solaris.c fp-gnusparc.c fp-sunos4.c fp-tru64.c fp-unknown.c fp-gnux86.c fp-freebsd.c fp-os2emx.c fp-netbsd.c fp-openbsd.c fp-gnuc99.c endian.c standardize.c -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_LDADD = libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c diff -Nru gsl-doc-1.16/ieee-utils/read.c gsl-doc-2.3/ieee-utils/read.c --- gsl-doc-1.16/ieee-utils/read.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/ieee-utils/read.c 2016-08-19 15:37:27.000000000 +0000 @@ -79,23 +79,29 @@ status = lookup_string (p, &new_precision, &new_rounding, &new_exception) ; if (status) - GSL_ERROR ("unrecognized GSL_IEEE_MODE string.\nValid settings are:\n\n" - " single-precision double-precision extended-precision\n" - " round-to-nearest round-down round-up round-to-zero\n" - " mask-invalid mask-denormalized mask-division-by-zero\n" - " mask-overflow mask-underflow mask-all\n" - " trap-common trap-inexact\n" - "\n" - "separated by commas. " - "(e.g. GSL_IEEE_MODE=\"round-down,mask-underflow\")", - GSL_EINVAL) ; + { + free(start); + GSL_ERROR ("unrecognized GSL_IEEE_MODE string.\nValid settings are:\n\n" + " single-precision double-precision extended-precision\n" + " round-to-nearest round-down round-up round-to-zero\n" + " mask-invalid mask-denormalized mask-division-by-zero\n" + " mask-overflow mask-underflow mask-all\n" + " trap-common trap-inexact\n" + "\n" + "separated by commas. " + "(e.g. GSL_IEEE_MODE=\"round-down,mask-underflow\")", + GSL_EINVAL) ; + } if (new_precision) { *precision = new_precision ; precision_count ++ ; if (precision_count > 1) - GSL_ERROR ("attempted to set IEEE precision twice", GSL_EINVAL) ; + { + free(start); + GSL_ERROR ("attempted to set IEEE precision twice", GSL_EINVAL) ; + } } if (new_rounding) @@ -103,7 +109,10 @@ *rounding = new_rounding ; rounding_count ++ ; if (rounding_count > 1) - GSL_ERROR ("attempted to set IEEE rounding mode twice", GSL_EINVAL) ; + { + free(start); + GSL_ERROR ("attempted to set IEEE rounding mode twice", GSL_EINVAL) ; + } } if (new_exception) diff -Nru gsl-doc-1.16/INSTALL gsl-doc-2.3/INSTALL --- gsl-doc-1.16/INSTALL 2013-07-18 21:29:23.000000000 +0000 +++ gsl-doc-2.3/INSTALL 2015-12-03 18:34:33.000000000 +0000 @@ -1,426 +1,80 @@ -GSL - GNU Scientific Library -============================ - Installation Instructions -========================= - -GSL follows the standard GNU installation procedure. To compile GSL -you will need an ANSI C-compiler. After unpacking the distribution -the Makefiles can be prepared using the configure command, - - ./configure - -You can then build the library by typing, - - make - -Both static and shared versions of the libraries will be compiled by -default. Compilation of shared libraries can be turned off by -specifying the `--disable-shared' option to `configure', e.g. - - ./configure --disable-shared - -If you encounter problems building the library try using the above -option, because some platforms do not support shared libraries. If -you change any compilation options you will need to remove any -existing compiled files with, - - make clean - -before running "make" again, so the new settings take effect. - -For notes about problems with specific platforms and compilers see the -next section of this file (below). - -An extensive test suite is available. After compiling the library -with "make", it can be invoked with "make check" at the top level. -The test output should be directed to a file rather than a terminal, -with the command, - - make check > log 2>&1 - -to allow any errors to be examined in detail. By default, only test -failures are shown. To see the complete output, set the environment -variable GSL_TEST_VERBOSE=1. Use "make -k check" to continue running -the remaining tests in the event of failures. - -If you run the tests and get some failures, please see the notes on -platform specific problems below. If you find failures that are not -mentioned, please report them to bug-gsl@gnu.org. - -The library can be installed using the command, - - make install - -The default installation directory prefix is /usr/local. Installing -in this directory will require root privileges on most systems (use -"su" or "sudo"). - -The installation directory can be changed with the --prefix option to -configure. Consult the "Further Information" section below for -instructions on installing the library in another location or changing -other default compilation options. - -When building from source, GNU packages are compiled with debugging -symbols enabled by default (CFLAGS="-g -O2"). It's part of the -philosophy that anyone should be able to examine any program on the -system. - - ------------------------------ - -Platform Specific Compilation Notes -=================================== - -This section documents any known issues with installing GSL on -specific platforms. - - * General hints for all platforms - * AIX - * Compaq/DEC Alpha - * HP-UX - * IRIX - * MacOS X / PowerPC - * Microsoft Windows - * OpenBSD - * OS/2 - * Solaris - -Hints for any platform -====================== - -1) If there are problems building the library try using - - ./configure --disable-shared --disable-dependency-tracking - -This will turn off the compilation of shared libraries and dependency -tracking and may allow the build process to complete successfully. - -If you get any problems try this first. - -2) If your compiler uses the C99-style inline keyword, use - - ./configure CFLAGS="-DGSL_C99_INLINE -g -O2" - -to avoid problems with duplicate function definitions. For gcc this -is handled automatically. See the file gsl_inline.h for the -preprocessor definitions that are used. - -3) If you want to pass C++ functions with exceptions to GSL, the -library needs to be compiled with the GCC option -fexceptions - - ./confugire CFLAGS="-fexceptions ..." - -to allow C++ exceptions to be handled. - -4) With gcc-4.3.2 the tests in the poly/ directory fail due to a -compiler optimization bug which is fixed in later versions of GCC -(http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38478). - -FAIL: y.real, gsl_complex_poly_complex_eval ({-2.31 + 0.44i, 4.21 - 3.19i, 0.93 + 1.04i, -0.42 + 0.68i}, 0.49 + 0.95i) (-1.68450788000000018 observed vs 1.82462012000000007 expected) [9] -FAIL: y.imag, gsl_complex_poly_complex_eval ({-2.31 + 0.44i, 4.21 - 3.19i, 0.93 + 1.04i, -0.42 + 0.68i}, 0.49 + 0.95i) (-0.30943988 observed vs 2.30389411999999982 expected) [10] - -With gcc-2.95/2.96 the tests fail in the eigen/ directory. This is -due to a compiler optimization bug which causes errors in the -manipulation of complex numbers. - -If you encounter these problems, install a different version of gcc. - -5) Attempts to run 'strip' on the static library libgsl.a will probably -produce a broken library (it is known to happen with GNU binutils -strip, and probably affects others too). The libgsl.a ar archive made -by libtool contains files with the same filenames from different -directories, and this causes the strip program to overwrite these -archive entries. If you need to produce a compact version of the -library compile without -g instead of using strip. - -make install-strip does not work, due to a minor problem with autoconf -which is fixed in the 2.5 development version of autoconf. In the -meantime compile without -g instead if you need to reduce the file size. - -6) The configure script can fail with a segmentation fault on bash-2.01 - - $ ./configure - Segmentation fault - -This is due to a bug in bash, related to the MAIL environment -variable. To work around it use - - $ unset ENV MAIL MAILPATH - $ ./configure - -which should avoid the problem. - -Hints for AIX -============= - -For compilation problems with the native compiler xlc, try disabling -shared libraries, - - setenv CC 'xlc' - setenv CFLAGS '-O -qmaxmem=8192' - ./configure --disable-shared - make - -If you compile with higher optimisation -O3 you will also need --qstrict. The -O3 flag causes the -nostrict option to be -enabled. This affects the accuracy of the results and causes some of -the tests to fail. - -If you get errors like - - ld: 0711-593 SEVERE ERROR: Symbol C_BSTAT (entry 635) in object siman_tsp.o: - The symbol refers to a csect with symbol number 0, which was not - found. The new symbol cannot be associated with a csect and - is being ignored. - -this is due to problems with some versions of the IBM assembler. Try -compiling with CFLAGS="-g0" as a workaround. For details and other -solutions see https://www-304.ibm.com/support/docview.wss?uid=isg1IZ98134 and -http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46072 - -If you get the error, - - ld: 0711-781 ERROR: TOC overflow. - -you can try building the library with a larger linker -table-of-contents by setting LDFLAGS before compilation, - - ./configure LDFLAGS="-Wl,-bbigtoc" - -On older versions of AIX (e.g. 4.2) the size of the command-line is -limited to 24kb, which causes linking to fail (due to the large number -of files to be linked). Unfortunately this limit cannot be increased. -To link the library you may need to use a manual approach of -incrementally combining the object files in smaller groups. - -On more recent versions of AIX (e.g >= 5.1) use - - chdev -l sys0 -a ncargs=NNN - -to increase the allowed number of arguments. NNN is the amount of -space measured in 4k blocks (default 6, maximum 1024) - -Hints for Compaq/DEC Alpha -========================== - -When comping with GCC use the -mieee and -mfp-rounding-mode options -as appropriate, e.g. - - ./configure CFLAGS="-mieee -mfp-rounding-mode=d -g -O2" - -The library should compile successfully with Compaq's C compiler on -Tru64 Unix 'cc' using the -std, -ieee and -fprm options. Use - - ./configure CC=cc - make CFLAGS="-std -ieee -fprm d" - -to build the library this way. - -Use GNU tar to unpack the tar file, as Tru64 tar gives an error -halfway through. - -Hints for HP-UX -=============== - -The default mode of the HP-UX C compiler does not use ANSI C. - -To compile GSL you need to select ANSI C mode with the following -configuration option: - - ./configure CFLAGS="-Ae" - -To switch on optimization use CFLAGS="-Ae -O". - -Hints for IRIX (SGI) -==================== - -The library should be compiled with the CFLAGS option --OPT:IEEE_NaN_inf=ON to ensure correct IEEE arithmetic. The tests in -sys/ will fail without this option. The older deprecated option --OPT:IEEE_comparisons=ON will also work. - -The 32 bit IRIX compiler gives warnings about "long double" not being -supported. These can be ignored or turned off with, - - ./configure CFLAGS="-woff 728" - -or - - make CFLAGS="-woff 728" - -The compiler also gives warnings about certain libraries that are "not -used for resolving any symbol". This is harmless and the warnings can -be ignored. - -You may get warnings about " /usr/bin/ld: arg list too long" when -building shared libraries. If so, try increasing the ncargs kernel -parameter with the systune(1m) command. - -For 64-bit compilation use the following options, - - ./configure CC=cc CFLAGS="-64" LDFLAGS="-64" - -or for gcc +************************* - CFLAGS="-mabi-64" LDFLAGS="-mabi=64 -mips4 -L/usr/local/lib/mabi=64" +Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, +Inc. -Hints for MacOS X and PowerPC -============================= - -To install in /usr/local on MacOS systems, do "sudo make install" to -gain root privileges. - -Note that GSL contains files with filenames of 32 characters or more. -Therefore you need to be careful in unpacking the tar file, as some -MacOS applications such as Stuffit Expander will truncate filenames to -31 characters. Using GNU tar and gunzip directly is the safe way to -unpack the distribution. - -There are problems with dynamic linker, so the library should be -compiled with, - - ./configure --disable-shared --disable-dependency-tracking - -It has been reported that shared libraries can be built if MacOS X -specific versions of libtool, automake and autoconf from -http://fink.sourceforge.net/ are installed, and the GSL source is -reconfigured from scratch (./autogen.sh; ./configure; make) - -To avoid warnings about long-double, use the flag - - CFLAGS="-Wno-long-double ....(other options here)" - -in addition to the normal compilation options. - -If you get make check failures with OS X 10.x try using CC=gcc-4.2 or -CC=clang since the llvm compiler has bugs that make the tests fail. - -The GCC 3.3 compiler shipped by Apple contains a bug which causes the -wavelet tests to fail on "data untouched" tests at optimisation level --O2. You may be able work around this by compiling with CFLAGS="-O1 -..." instead. - -F J Frankin reported that some early -versions of GCC-2.95 have a problem with long argument lists on PPC -architecture, and this prevents GSL from compiling correctly (e.g. the -test program in the blas directory gives a segmentation fault when -run). This problem is fixed in more recent versions of GCC. - - -Hints for Microsoft Windows -=========================== - -GSL should compile with GCC under Cygwin on Microsoft Windows. -There is a gsl package in the standard Cygwin distribution which -contains any patches needed. - -With Mingw/MSYS some floating point issues have been reported which -cause failures in the monte/ test directory. - -Hints for OpenBSD -================= - -As of July 2001 the OpenBSD log1p() function on i386 causes failures -in the gsl complex tests. The configure script has been hardcoded to -substitute gsl_log1p instead on OpenBSD. The log1p() bug has been -reported and so may be fixed in future versions of OpenBSD. - -Hints for OS/2 -============== - -The configure script fails to detect the function 'isnan', leading to -a slew of errors 'isnan redefined'. - -To work around this problem, run configure and edit the resulting -config.h file to comment out the line which defines HAVE_ISINF. - -Hints for Solaris -================= - -If you are using the Sun compilers then the library should be compiled -with the Sun C compiler 'cc', not 'CC' which is the C++ compiler. - -The Sun compiler tools are stored in non-standard directories -- make -sure that all the compiler and linker tools (cc, ar, ranlib, ld) are -on the PATH. A typical PATH should include the directories -/opt/SUNWspro/bin:/usr/ccs/bin:/usr/ucb in that order. - -For example, - - $ PATH=/opt/SUNWspro/bin:/usr/ccs/bin:/usr/ucb:$PATH - $ ./configure CC=cc CFLAGS=-O - -If you see configure output - - checking for ar... : - -it means that 'ar' has not been found, and the library will fail to -build. - -If you use the Sun compiler you should use the Sun linker and -assembler. If you use GCC, you can use the GNU linker and assembler -or the Sun linker and assembler. - -There may be some warnings about "end of loop code not reached". These -can be ignored -- they come from the do { ... ; return ; } while(0) -statement in the GSL_ERROR macro. - -If you get errors such as symbol `gsl_complex_rect' is multiply-defined -you will need to use ./configure CFLAGS="-DGSL_C99_INLINE -g -O2" - - ------------------------------ - -Further information on the standard GNU installation procedure -============================================================== - -The sections below describe the general features of the standard GNU -installation procedure. + Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. This file is offered as-is, +without warranty of any kind. Basic Installation ================== - These are generic installation instructions. + Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. Some packages provide this +`INSTALL' file but do not implement all of the features documented +below. The lack of an optional feature in a given package is not +necessarily a bug. More recommendations for GNU packages can be found +in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, a file -`config.cache' that saves the results of its tests to speed up -reconfiguring, and a file `config.log' containing compiler output -(useful mainly for debugging `configure'). +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can -be considered for the next release. If at some point `config.cache' -contains results you don't want to keep, you may remove or edit it. - - The file `configure.in' is used to create `configure' by a program -called `autoconf'. You only need `configure.in' if you want to change -it or regenerate `configure' using a newer version of `autoconf'. +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. -The simplest way to compile this package is: + The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. + `./configure' to configure the package for your system. - Running `configure' takes a while. While running, it prints some - messages telling which features it is checking for. + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with - the package. + the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and - documentation. + documentation. When installing into a prefix owned by root, it is + recommended that the package be configured and built as a regular + user, and only the `make install' phase executed with root + privileges. + + 5. Optionally, type `make installcheck' to repeat any self-tests, but + this time using the binaries in their final installed location. + This target does not install anything. Running this target as a + regular user, particularly if the prior `make install' required + root privileges, verifies that the installation completed + correctly. - 5. You can remove the program binaries and object files from the + 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is @@ -429,57 +83,119 @@ all sorts of other programs in order to regenerate files that came with the distribution. + 7. Often, you can also type `make uninstall' to remove the installed + files again. In practice, not all packages have tested that + uninstallation works correctly, even though it is required by the + GNU Coding Standards. + + 8. Some packages, particularly those that use Automake, provide `make + distcheck', which can by used by developers to test that all other + targets like `make install' and `make uninstall' work correctly. + This target is generally not run by end users. + Compilers and Options ===================== Some systems require unusual options for compilation or linking that -the `configure' script does not know about. You can give `configure' -initial values for variables by setting them in the environment. Using -a Bourne-compatible shell, you can do that on the command line like -this: - CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. -Or on systems that have the `env' program, you can do it like this: - env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their -own directory. To do this, you must use a version of `make' that -supports the `VPATH' variable, such as GNU `make'. `cd' to the +own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. +source code in the directory that `configure' is in and in `..'. This +is known as a "VPATH" build. - If you have to use a `make' that does not supports the `VPATH' -variable, you have to compile the package for one architecture at a time -in the source code directory. After you have installed the package for -one architecture, use `make distclean' before reconfiguring for another -architecture. + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. Installation Names ================== - By default, `make install' will install the package's files in -`/usr/local/bin', `/usr/local/man', etc. You can specify an -installation prefix other than `/usr/local' by giving `configure' the -option `--prefix=PATH'. + By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX', where PREFIX must be an +absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you -give `configure' the option `--exec-prefix=PATH', the package will use -PATH as the prefix for installing programs and libraries. -Documentation and other data files will still use the regular prefix. +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. In general, the +default for these options is expressed in terms of `${prefix}', so that +specifying just `--prefix' will affect all of the other directory +specifications that were not explicitly provided. + + The most portable way to affect installation locations is to pass the +correct locations to `configure'; however, many packages provide one or +both of the following shortcuts of passing variable assignments to the +`make install' command line to change installation locations without +having to reconfigure or recompile. + + The first method involves providing an override variable for each +affected directory. For example, `make install +prefix=/alternate/directory' will choose an alternate location for all +directory configuration variables that were expressed in terms of +`${prefix}'. Any directories that were specified during `configure', +but not in terms of `${prefix}', must each be overridden at install +time for the entire installation to be relocated. The approach of +makefile variable overrides for each directory variable is required by +the GNU Coding Standards, and ideally causes no recompilation. +However, some platforms have known limitations with the semantics of +shared libraries that end up requiring recompilation when using this +method, particularly noticeable in packages that use GNU Libtool. + + The second method involves providing the `DESTDIR' variable. For +example, `make install DESTDIR=/alternate/directory' will prepend +`/alternate/directory' before all installation names. The approach of +`DESTDIR' overrides is not required by the GNU Coding Standards, and +does not work on platforms that have drive letters. On the other hand, +it does better at avoiding recompilation issues, and works well even +when some directory options were not specified in terms of `${prefix}' +at `configure' time. + +Optional Features +================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. -Optional Features -================= - Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE @@ -492,25 +208,80 @@ you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. + Some packages offer the ability to configure how verbose the +execution of `make' will be. For these packages, running `./configure +--enable-silent-rules' sets the default to minimal output, which can be +overridden with `make V=1'; while running `./configure +--disable-silent-rules' sets the default to verbose, which can be +overridden with `make V=0'. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + HP-UX `make' updates targets which have the same time stamps as +their prerequisites, which makes it generally unusable when shipped +generated files such as `configure' are involved. Use GNU `make' +instead. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + + On Solaris, don't put `/usr/ucb' early in your `PATH'. This +directory contains several dysfunctional programs; working variants of +these programs are available in `/usr/bin'. So, if you need `/usr/ucb' +in your `PATH', put it _after_ `/usr/bin'. + + On Haiku, software installed for all users goes in `/boot/common', +not `/usr/local'. It is recommended to use the following options: + + ./configure --prefix=/boot/common + Specifying the System Type ========================== - There may be some features `configure' can not figure out -automatically, but needs to determine by the type of host the package -will run on. Usually `configure' can figure that out, but if it prints -a message saying it can not guess the host type, give it the -`--host=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name with three fields: + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + CPU-COMPANY-SYSTEM -See the file `config.sub' for the possible values of each field. If +where SYSTEM can have one of these forms: + + OS + KERNEL-OS + + See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't -need to know the host type. +need to know the machine type. - If you are building compiler tools for cross-compiling, you can also -use the `--target=TYPE' option to select the type of system they will -produce code for and the `--build=TYPE' option to select the type of -system on which you are compiling the package. + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. Sharing Defaults ================ @@ -523,32 +294,77 @@ `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. -Operation Controls +Defining Variables ================== + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf limitation. Until the limitation is lifted, you can use +this workaround: + + CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + `configure' recognizes the following options to control how it operates. -`--cache-file=FILE' - Use and save the results of the tests in FILE instead of - `./config.cache'. Set FILE to `/dev/null' to disable caching, for - debugging `configure'. - `--help' - Print a summary of the options to `configure', and exit. +`-h' + Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' - Do not print messages saying which checks are being made. + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. -`--version' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`configure' also accepts some other, not widely useful, options. +`--prefix=DIR' + Use DIR as the installation prefix. *note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. diff -Nru gsl-doc-1.16/integration/cquad.c gsl-doc-2.3/integration/cquad.c --- gsl-doc-1.16/integration/cquad.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/integration/cquad.c 2015-11-03 16:21:55.000000000 +0000 @@ -235,7 +235,7 @@ { iv->fx[i] = GSL_FN_EVAL (f, m + xi[i] * h); neval++; - if (!finite (iv->fx[i])) + if (!gsl_finite (iv->fx[i])) { nans[nnans++] = i; iv->fx[i] = 0.0; @@ -319,7 +319,7 @@ nnans = 0; for (i = 0; i <= 32; i += skip[d]) { - if (!finite (iv->fx[i])) + if (!gsl_finite (iv->fx[i])) { nans[nnans++] = i; iv->fx[i] = 0.0; @@ -444,7 +444,7 @@ nnans = 0; for (i = 0; i <= 32; i += skip[0]) { - if (!finite (ivl->fx[i])) + if (!gsl_finite (ivl->fx[i])) { nans[nnans++] = i; ivl->fx[i] = 0.0; @@ -510,7 +510,7 @@ nnans = 0; for (i = 0; i <= 32; i += skip[0]) { - if (!finite (ivr->fx[i])) + if (!gsl_finite (ivr->fx[i])) { nans[nnans++] = i; ivr->fx[i] = 0.0; diff -Nru gsl-doc-1.16/integration/Makefile.am gsl-doc-2.3/integration/Makefile.am --- gsl-doc-1.16/integration/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/integration/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -1,6 +1,6 @@ noinst_LTLIBRARIES = libgslintegration.la -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslintegration_la_SOURCES = qk15.c qk21.c qk31.c qk41.c qk51.c qk61.c qk.c qng.c qng.h qag.c qags.c qagp.c workspace.c qcheb.c qawc.c qmomo.c qaws.c qmomof.c qawo.c qawf.c glfixed.c cquad.c diff -Nru gsl-doc-1.16/integration/Makefile.in gsl-doc-2.3/integration/Makefile.in --- gsl-doc-1.16/integration/Makefile.in 2013-07-19 15:14:53.000000000 +0000 +++ gsl-doc-2.3/integration/Makefile.in 2016-12-09 00:04:21.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -380,6 +380,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -402,7 +403,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -517,7 +521,7 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslintegration.la -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslintegration_la_SOURCES = qk15.c qk21.c qk31.c qk41.c qk51.c qk61.c qk.c qng.c qng.h qag.c qags.c qagp.c workspace.c qcheb.c qawc.c qmomo.c qaws.c qmomof.c qawo.c qawf.c glfixed.c cquad.c pkginclude_HEADERS = gsl_integration.h noinst_HEADERS = qpsrt.c qpsrt2.c qelg.c qc25c.c qc25s.c qc25f.c ptsort.c util.c err.c positivity.c append.c initialise.c set_initial.c reset.c cquad_const.c diff -Nru gsl-doc-1.16/integration/qag.c gsl-doc-2.3/integration/qag.c --- gsl-doc-1.16/integration/qag.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/integration/qag.c 2015-11-03 16:21:55.000000000 +0000 @@ -121,7 +121,7 @@ if (epsabs <= 0 && (epsrel < 50 * GSL_DBL_EPSILON || epsrel < 0.5e-28)) { - GSL_ERROR ("tolerance cannot be acheived with given epsabs and epsrel", + GSL_ERROR ("tolerance cannot be achieved with given epsabs and epsrel", GSL_EBADTOL); } diff -Nru gsl-doc-1.16/integration/qagp.c gsl-doc-2.3/integration/qagp.c --- gsl-doc-1.16/integration/qagp.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/integration/qagp.c 2015-11-03 16:21:55.000000000 +0000 @@ -111,7 +111,7 @@ if (epsabs <= 0 && (epsrel < 50 * GSL_DBL_EPSILON || epsrel < 0.5e-28)) { - GSL_ERROR ("tolerance cannot be acheived with given epsabs and epsrel", + GSL_ERROR ("tolerance cannot be achieved with given epsabs and epsrel", GSL_EBADTOL); } diff -Nru gsl-doc-1.16/integration/qags.c gsl-doc-2.3/integration/qags.c --- gsl-doc-1.16/integration/qags.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/integration/qags.c 2015-11-03 16:21:55.000000000 +0000 @@ -236,7 +236,7 @@ if (epsabs <= 0 && (epsrel < 50 * GSL_DBL_EPSILON || epsrel < 0.5e-28)) { - GSL_ERROR ("tolerance cannot be acheived with given epsabs and epsrel", + GSL_ERROR ("tolerance cannot be achieved with given epsabs and epsrel", GSL_EBADTOL); } diff -Nru gsl-doc-1.16/integration/qawc.c gsl-doc-2.3/integration/qawc.c --- gsl-doc-1.16/integration/qawc.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/integration/qawc.c 2015-11-03 16:21:55.000000000 +0000 @@ -73,7 +73,7 @@ if (epsabs <= 0 && (epsrel < 50 * GSL_DBL_EPSILON || epsrel < 0.5e-28)) { - GSL_ERROR ("tolerance cannot be acheived with given epsabs and epsrel", + GSL_ERROR ("tolerance cannot be achieved with given epsabs and epsrel", GSL_EBADTOL); } diff -Nru gsl-doc-1.16/integration/qawo.c gsl-doc-2.3/integration/qawo.c --- gsl-doc-1.16/integration/qawo.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/integration/qawo.c 2015-11-03 16:21:55.000000000 +0000 @@ -84,7 +84,7 @@ if (epsabs <= 0 && (epsrel < 50 * GSL_DBL_EPSILON || epsrel < 0.5e-28)) { - GSL_ERROR ("tolerance cannot be acheived with given epsabs and epsrel", + GSL_ERROR ("tolerance cannot be achieved with given epsabs and epsrel", GSL_EBADTOL); } diff -Nru gsl-doc-1.16/integration/qaws.c gsl-doc-2.3/integration/qaws.c --- gsl-doc-1.16/integration/qaws.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/integration/qaws.c 2015-11-03 16:21:55.000000000 +0000 @@ -64,7 +64,7 @@ if (epsabs <= 0 && (epsrel < 50 * GSL_DBL_EPSILON || epsrel < 0.5e-28)) { - GSL_ERROR ("tolerance cannot be acheived with given epsabs and epsrel", + GSL_ERROR ("tolerance cannot be achieved with given epsabs and epsrel", GSL_EBADTOL); } diff -Nru gsl-doc-1.16/integration/qk41.c gsl-doc-2.3/integration/qk41.c --- gsl-doc-1.16/integration/qk41.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/integration/qk41.c 2015-11-03 16:21:55.000000000 +0000 @@ -52,7 +52,7 @@ /* xgk[1], xgk[3], ... abscissae of the 20-point gauss rule. xgk[0], xgk[2], ... abscissae to optimally extend the 20-point gauss rule */ -static const double wg[11] = /* weights of the 20-point gauss rule */ +static const double wg[10] = /* weights of the 20-point gauss rule */ { 0.017614007139152118311861962351853, 0.040601429800386941331039952274932, diff -Nru gsl-doc-1.16/integration/qng.c gsl-doc-2.3/integration/qng.c --- gsl-doc-1.16/integration/qng.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/integration/qng.c 2015-11-03 16:21:55.000000000 +0000 @@ -52,7 +52,7 @@ * result = 0; * abserr = 0; * neval = 0; - GSL_ERROR ("tolerance cannot be acheived with given epsabs and epsrel", + GSL_ERROR ("tolerance cannot be achieved with given epsabs and epsrel", GSL_EBADTOL); }; diff -Nru gsl-doc-1.16/interpolation/bicubic.c gsl-doc-2.3/interpolation/bicubic.c --- gsl-doc-1.16/interpolation/bicubic.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/interpolation/bicubic.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,805 @@ +/* interpolation/bicubic.c + * + * Copyright 2012 David Zaslavsky + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include + +#define IDX2D(i, j, w) ((j) * ((w)->xsize) + (i)) + +typedef struct +{ + double * zx; + double * zy; + double * zxy; + size_t xsize; + size_t ysize; +} bicubic_state_t; + +static void bicubic_free (void * vstate); + +static void * +bicubic_alloc(size_t xsize, size_t ysize) +{ + bicubic_state_t *state; + + state = calloc(1, sizeof (bicubic_state_t)); + + if (state == NULL) + { + GSL_ERROR_NULL("failed to allocate space for state", GSL_ENOMEM); + } + + state->zx = (double *) malloc (xsize * ysize * sizeof (double)); + if (state->zx == NULL) + { + bicubic_free(state); + GSL_ERROR_NULL("failed to allocate space for zx", GSL_ENOMEM); + } + + state->zy = (double *) malloc (xsize * ysize * sizeof (double)); + if (state->zy == NULL) + { + bicubic_free(state); + GSL_ERROR_NULL("failed to allocate space for zy", GSL_ENOMEM); + } + + state->zxy = (double *) malloc (xsize * ysize * sizeof (double)); + if (state->zxy == NULL) + { + bicubic_free(state); + GSL_ERROR_NULL("failed to allocate space for zxy", GSL_ENOMEM); + } + + state->xsize = xsize; + state->ysize = ysize; + + return state; +} /* bicubic_alloc() */ + +static void +bicubic_free (void * vstate) +{ + bicubic_state_t *state = (bicubic_state_t *) vstate; + + RETURN_IF_NULL(state); + + if (state->zx) + free (state->zx); + + if (state->zy) + free (state->zy); + + if (state->zxy) + free (state->zxy); + + free (state); +} /* bicubic_free() */ + +static int +bicubic_init(void * vstate, const double xa[], const double ya[], + const double za[], size_t xsize, size_t ysize) +{ + bicubic_state_t *state = (bicubic_state_t *) vstate; + + gsl_interp_accel *acc = gsl_interp_accel_alloc(); + gsl_spline *spline; + gsl_vector *x; + gsl_vector *y; + size_t i, j; + + x = gsl_vector_alloc(xsize); + y = gsl_vector_alloc(xsize); + spline = gsl_spline_alloc(gsl_interp_cspline, xsize); + for (j = 0; j <= ysize - 1; j++) + { + for (i = 0; i <= xsize - 1; i++) + { + gsl_vector_set(x, i, xa[i]); + gsl_vector_set(y, i, za[IDX2D(i, j, state)]); + } + gsl_spline_init(spline, x->data, y->data, xsize); + for (i = 0; i <= xsize - 1; i++) + { + state->zx[IDX2D(i, j, state)] = gsl_spline_eval_deriv(spline, xa[i], acc); + } + } + gsl_vector_free(x); + gsl_vector_free(y); + gsl_spline_free(spline); + gsl_interp_accel_reset(acc); + + x = gsl_vector_alloc(ysize); + y = gsl_vector_alloc(ysize); + spline = gsl_spline_alloc(gsl_interp_cspline, ysize); + for (i = 0; i <= xsize - 1; i++) + { + for (j = 0; j <= ysize - 1; j++) + { + gsl_vector_set(x, j, ya[j]); + gsl_vector_set(y, j, za[IDX2D(i, j, state)]); + } + gsl_spline_init(spline, x->data, y->data, ysize); + for (j = 0; j <= ysize - 1; j++) + { + state->zy[IDX2D(i, j, state)] = gsl_spline_eval_deriv(spline, ya[j], acc); + } + } + gsl_vector_free(x); + gsl_vector_free(y); + gsl_spline_free(spline); + gsl_interp_accel_reset(acc); + + x = gsl_vector_alloc(xsize); + y = gsl_vector_alloc(xsize); + spline = gsl_spline_alloc(gsl_interp_cspline, xsize); + for (j = 0; j <= ysize - 1; j++) + { + for (i = 0; i <= xsize - 1; i++) + { + gsl_vector_set(x, i, xa[i]); + gsl_vector_set(y, i, state->zy[IDX2D(i, j, state)]); + } + gsl_spline_init(spline, x->data, y->data, xsize); + for (i = 0; i <= xsize - 1; i++) + { + state->zxy[IDX2D(i, j, state)] = gsl_spline_eval_deriv(spline, xa[i], acc); + } + } + gsl_vector_free(x); + gsl_vector_free(y); + gsl_spline_free(spline); + gsl_interp_accel_free(acc); + + return GSL_SUCCESS; +} /* bicubic_init() */ + + +static int +bicubic_eval(const void * vstate, const double xarr[], const double yarr[], + const double zarr[], size_t xsize, size_t ysize, + double x, double y, gsl_interp_accel * xa, + gsl_interp_accel * ya, double * z) +{ + bicubic_state_t *state = (bicubic_state_t *) vstate; + + double xmin, xmax, ymin, ymax; + double zminmin, zminmax, zmaxmin, zmaxmax; + double zxminmin, zxminmax, zxmaxmin, zxmaxmax; + double zyminmin, zyminmax, zymaxmin, zymaxmax; + double zxyminmin, zxyminmax, zxymaxmin, zxymaxmax; + + double dx, dy; /* size of the grid cell */ + double dt, du; + + /* + * t and u are the positions within the grid cell at which we are computing + * the interpolation, in units of grid cell size + */ + double t, u; + double t0, t1, t2, t3, u0, u1, u2, u3; + double v; + size_t xi, yi; + + /* first compute the indices into the data arrays where we are interpolating */ + if (xa != NULL) + xi = gsl_interp_accel_find(xa, xarr, xsize, x); + else + xi = gsl_interp_bsearch(xarr, x, 0, xsize - 1); + + if (ya != NULL) + yi = gsl_interp_accel_find(ya, yarr, ysize, y); + else + yi = gsl_interp_bsearch(yarr, y, 0, ysize - 1); + + /* find the minimum and maximum values on the grid cell in each dimension */ + xmin = xarr[xi]; + xmax = xarr[xi + 1]; + ymin = yarr[yi]; + ymax = yarr[yi + 1]; + zminmin = zarr[IDX2D(xi, yi, state)]; + zminmax = zarr[IDX2D(xi, yi + 1, state)]; + zmaxmin = zarr[IDX2D(xi + 1, yi, state)]; + zmaxmax = zarr[IDX2D(xi + 1, yi + 1, state)]; + /* Get the width and height of the grid cell */ + dx = xmax - xmin; + dy = ymax - ymin; + t = (x - xmin)/dx; + u = (y - ymin)/dy; + dt = 1./dx; /* partial t / partial x */ + du = 1./dy; /* partial u / partial y */ + zxminmin = state->zx[IDX2D(xi, yi, state)]/dt; + zxminmax = state->zx[IDX2D(xi, yi + 1, state)]/dt; + zxmaxmin = state->zx[IDX2D(xi + 1, yi, state)]/dt; + zxmaxmax = state->zx[IDX2D(xi + 1, yi + 1, state)]/dt; + zyminmin = state->zy[IDX2D(xi, yi, state)]/du; + zyminmax = state->zy[IDX2D(xi, yi + 1, state)]/du; + zymaxmin = state->zy[IDX2D(xi + 1, yi, state)]/du; + zymaxmax = state->zy[IDX2D(xi + 1, yi + 1, state)]/du; + zxyminmin = state->zxy[IDX2D(xi, yi, state)]/(dt*du); + zxyminmax = state->zxy[IDX2D(xi, yi + 1, state)]/(dt*du); + zxymaxmin = state->zxy[IDX2D(xi + 1, yi, state)]/(dt*du); + zxymaxmax = state->zxy[IDX2D(xi + 1, yi + 1, state)]/(dt*du); + t0 = 1; + t1 = t; + t2 = t*t; + t3 = t*t2; + u0 = 1; + u1 = u; + u2 = u*u; + u3 = u*u2; + + *z = 0; + v = zminmin; + *z += v*t0*u0; + v = zyminmin; + *z += v*t0*u1; + v = -3*zminmin + 3*zminmax - 2*zyminmin - zyminmax; + *z += v*t0*u2; + v = 2*zminmin - 2*zminmax + zyminmin + zyminmax; + *z += v*t0*u3; + v = zxminmin; + *z += v*t1*u0; + v = zxyminmin; + *z += v*t1*u1; + v = -3*zxminmin + 3*zxminmax - 2*zxyminmin - zxyminmax; + *z += v*t1*u2; + v = 2*zxminmin - 2*zxminmax + zxyminmin + zxyminmax; + *z += v*t1*u3; + v = -3*zminmin + 3*zmaxmin - 2*zxminmin - zxmaxmin; + *z += v*t2*u0; + v = -3*zyminmin + 3*zymaxmin - 2*zxyminmin - zxymaxmin; + *z += v*t2*u1; + v = 9*zminmin - 9*zmaxmin + 9*zmaxmax - 9*zminmax + 6*zxminmin + 3*zxmaxmin - 3*zxmaxmax - 6*zxminmax + 6*zyminmin - 6*zymaxmin - 3*zymaxmax + 3*zyminmax + 4*zxyminmin + 2*zxymaxmin + zxymaxmax + 2*zxyminmax; + *z += v*t2*u2; + v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 4*zxminmin - 2*zxmaxmin + 2*zxmaxmax + 4*zxminmax - 3*zyminmin + 3*zymaxmin + 3*zymaxmax - 3*zyminmax - 2*zxyminmin - zxymaxmin - zxymaxmax - 2*zxyminmax; + *z += v*t2*u3; + v = 2*zminmin - 2*zmaxmin + zxminmin + zxmaxmin; + *z += v*t3*u0; + v = 2*zyminmin - 2*zymaxmin + zxyminmin + zxymaxmin; + *z += v*t3*u1; + v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 3*zxminmin - 3*zxmaxmin + 3*zxmaxmax + 3*zxminmax - 4*zyminmin + 4*zymaxmin + 2*zymaxmax - 2*zyminmax - 2*zxyminmin - 2*zxymaxmin - zxymaxmax - zxyminmax; + *z += v*t3*u2; + v = 4*zminmin - 4*zmaxmin + 4*zmaxmax - 4*zminmax + 2*zxminmin + 2*zxmaxmin - 2*zxmaxmax - 2*zxminmax + 2*zyminmin - 2*zymaxmin - 2*zymaxmax + 2*zyminmax + zxyminmin + zxymaxmin + zxymaxmax + zxyminmax; + *z += v*t3*u3; + + return GSL_SUCCESS; +} /* bicubic_eval() */ + +static int +bicubic_deriv_x(const void * vstate, const double xarr[], const double yarr[], + const double zarr[], size_t xsize, size_t ysize, + double x, double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, double * z_p) +{ + bicubic_state_t *state = (bicubic_state_t *) vstate; + + double xmin, xmax, ymin, ymax; + double zminmin, zminmax, zmaxmin, zmaxmax; + double zxminmin, zxminmax, zxmaxmin, zxmaxmax; + double zyminmin, zyminmax, zymaxmin, zymaxmax; + double zxyminmin, zxyminmax, zxymaxmin, zxymaxmax; + double dx, dy; /* size of the grid cell */ + double dt, du; + + /* + * t and u are the positions within the grid cell at which we are computing + * the interpolation, in units of grid cell size + */ + double t, u; + double t0, t1, t2, u0, u1, u2, u3; + double v; + size_t xi, yi; + + /* first compute the indices into the data arrays where we are interpolating */ + if (xa != NULL) + xi = gsl_interp_accel_find(xa, xarr, xsize, x); + else + xi = gsl_interp_bsearch(xarr, x, 0, xsize - 1); + + if (ya != NULL) + yi = gsl_interp_accel_find(ya, yarr, ysize, y); + else + yi = gsl_interp_bsearch(yarr, y, 0, ysize - 1); + + /* find the minimum and maximum values on the grid cell in each dimension */ + xmin = xarr[xi]; + xmax = xarr[xi + 1]; + ymin = yarr[yi]; + ymax = yarr[yi + 1]; + zminmin = zarr[IDX2D(xi, yi, state)]; + zminmax = zarr[IDX2D(xi, yi + 1, state)]; + zmaxmin = zarr[IDX2D(xi + 1, yi, state)]; + zmaxmax = zarr[IDX2D(xi + 1, yi + 1, state)]; + + /* get the width and height of the grid cell */ + dx = xmax - xmin; + dy = ymax - ymin; + t = (x - xmin)/dx; + u = (y - ymin)/dy; + dt = 1./dx; /* partial t / partial x */ + du = 1./dy; /* partial u / partial y */ + + zxminmin = state->zx[IDX2D(xi, yi, state)]/dt; + zxminmax = state->zx[IDX2D(xi, yi + 1, state)]/dt; + zxmaxmin = state->zx[IDX2D(xi + 1, yi, state)]/dt; + zxmaxmax = state->zx[IDX2D(xi + 1, yi + 1, state)]/dt; + zyminmin = state->zy[IDX2D(xi, yi, state)]/du; + zyminmax = state->zy[IDX2D(xi, yi + 1, state)]/du; + zymaxmin = state->zy[IDX2D(xi + 1, yi, state)]/du; + zymaxmax = state->zy[IDX2D(xi + 1, yi + 1, state)]/du; + zxyminmin = state->zxy[IDX2D(xi, yi, state)]/(dt*du); + zxyminmax = state->zxy[IDX2D(xi, yi + 1, state)]/(dt*du); + zxymaxmin = state->zxy[IDX2D(xi + 1, yi, state)]/(dt*du); + zxymaxmax = state->zxy[IDX2D(xi + 1, yi + 1, state)]/(dt*du); + + t0 = 1; + t1 = t; + t2 = t*t; + u0 = 1; + u1 = u; + u2 = u*u; + u3 = u*u2; + + *z_p = 0; + v = zxminmin; + *z_p += v*t0*u0; + v = zxyminmin; + *z_p += v*t0*u1; + v = -3*zxminmin + 3*zxminmax - 2*zxyminmin - zxyminmax; + *z_p += v*t0*u2; + v = 2*zxminmin - 2*zxminmax + zxyminmin + zxyminmax; + *z_p += v*t0*u3; + v = -3*zminmin + 3*zmaxmin - 2*zxminmin - zxmaxmin; + *z_p += 2*v*t1*u0; + v = -3*zyminmin + 3*zymaxmin - 2*zxyminmin - zxymaxmin; + *z_p += 2*v*t1*u1; + v = 9*zminmin - 9*zmaxmin + 9*zmaxmax - 9*zminmax + 6*zxminmin + 3*zxmaxmin - 3*zxmaxmax - 6*zxminmax + 6*zyminmin - 6*zymaxmin - 3*zymaxmax + 3*zyminmax + 4*zxyminmin + 2*zxymaxmin + zxymaxmax + 2*zxyminmax; + *z_p += 2*v*t1*u2; + v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 4*zxminmin - 2*zxmaxmin + 2*zxmaxmax + 4*zxminmax - 3*zyminmin + 3*zymaxmin + 3*zymaxmax - 3*zyminmax - 2*zxyminmin - zxymaxmin - zxymaxmax - 2*zxyminmax; + *z_p += 2*v*t1*u3; + v = 2*zminmin - 2*zmaxmin + zxminmin + zxmaxmin; + *z_p += 3*v*t2*u0; + v = 2*zyminmin - 2*zymaxmin + zxyminmin + zxymaxmin; + *z_p += 3*v*t2*u1; + v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 3*zxminmin - 3*zxmaxmin + 3*zxmaxmax + 3*zxminmax - 4*zyminmin + 4*zymaxmin + 2*zymaxmax - 2*zyminmax - 2*zxyminmin - 2*zxymaxmin - zxymaxmax - zxyminmax; + *z_p += 3*v*t2*u2; + v = 4*zminmin - 4*zmaxmin + 4*zmaxmax - 4*zminmax + 2*zxminmin + 2*zxmaxmin - 2*zxmaxmax - 2*zxminmax + 2*zyminmin - 2*zymaxmin - 2*zymaxmax + 2*zyminmax + zxyminmin + zxymaxmin + zxymaxmax + zxyminmax; + *z_p += 3*v*t2*u3; + *z_p *= dt; + + return GSL_SUCCESS; +} /* bicubic_deriv_x() */ + +static int +bicubic_deriv_y(const void * vstate, const double xarr[], const double yarr[], + const double zarr[], size_t xsize, size_t ysize, + double x, double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, double * z_p) +{ + bicubic_state_t *state = (bicubic_state_t *) vstate; + + double xmin, xmax, ymin, ymax; + double zminmin, zminmax, zmaxmin, zmaxmax; + double zxminmin, zxminmax, zxmaxmin, zxmaxmax; + double zyminmin, zyminmax, zymaxmin, zymaxmax; + double zxyminmin, zxyminmax, zxymaxmin, zxymaxmax; + /* dx and dy are the size of the grid cell */ + double dx, dy; + double dt, du; + /* t and u are the positions within the grid cell at which we are + * computing the interpolation, in units of grid cell size */ + double t, u; + double t0, t1, t2, t3, u0, u1, u2; + double v; + size_t xi, yi; + + /* first compute the indices into the data arrays where we are interpolating */ + if (xa != NULL) + xi = gsl_interp_accel_find(xa, xarr, xsize, x); + else + xi = gsl_interp_bsearch(xarr, x, 0, xsize - 1); + + if (ya != NULL) + yi = gsl_interp_accel_find(ya, yarr, ysize, y); + else + yi = gsl_interp_bsearch(yarr, y, 0, ysize - 1); + + /* find the minimum and maximum values on the grid cell in each dimension */ + xmin = xarr[xi]; + xmax = xarr[xi + 1]; + ymin = yarr[yi]; + ymax = yarr[yi + 1]; + zminmin = zarr[IDX2D(xi, yi, state)]; + zminmax = zarr[IDX2D(xi, yi + 1, state)]; + zmaxmin = zarr[IDX2D(xi + 1, yi, state)]; + zmaxmax = zarr[IDX2D(xi + 1, yi + 1, state)]; + + /* get the width and height of the grid cell */ + dx = xmax - xmin; + dy = ymax - ymin; + t = (x - xmin)/dx; + u = (y - ymin)/dy; + dt = 1./dx; /* partial t / partial x */ + du = 1./dy; /* partial u / partial y */ + + zxminmin = state->zx[IDX2D(xi, yi, state)]/dt; + zxminmax = state->zx[IDX2D(xi, yi + 1, state)]/dt; + zxmaxmin = state->zx[IDX2D(xi + 1, yi, state)]/dt; + zxmaxmax = state->zx[IDX2D(xi + 1, yi + 1, state)]/dt; + zyminmin = state->zy[IDX2D(xi, yi, state)]/du; + zyminmax = state->zy[IDX2D(xi, yi + 1, state)]/du; + zymaxmin = state->zy[IDX2D(xi + 1, yi, state)]/du; + zymaxmax = state->zy[IDX2D(xi + 1, yi + 1, state)]/du; + zxyminmin = state->zxy[IDX2D(xi, yi, state)]/(dt*du); + zxyminmax = state->zxy[IDX2D(xi, yi + 1, state)]/(dt*du); + zxymaxmin = state->zxy[IDX2D(xi + 1, yi, state)]/(dt*du); + zxymaxmax = state->zxy[IDX2D(xi + 1, yi + 1, state)]/(dt*du); + + t0 = 1; + t1 = t; + t2 = t*t; + t3 = t*t2; + u0 = 1; + u1 = u; + u2 = u*u; + + *z_p = 0; + v = zyminmin; + *z_p += v*t0*u0; + v = -3*zminmin + 3*zminmax - 2*zyminmin - zyminmax; + *z_p += 2*v*t0*u1; + v = 2*zminmin-2*zminmax + zyminmin + zyminmax; + *z_p += 3*v*t0*u2; + v = zxyminmin; + *z_p += v*t1*u0; + v = -3*zxminmin + 3*zxminmax - 2*zxyminmin - zxyminmax; + *z_p += 2*v*t1*u1; + v = 2*zxminmin - 2*zxminmax + zxyminmin + zxyminmax; + *z_p += 3*v*t1*u2; + v = -3*zyminmin + 3*zymaxmin - 2*zxyminmin - zxymaxmin; + *z_p += v*t2*u0; + v = 9*zminmin - 9*zmaxmin + 9*zmaxmax - 9*zminmax + 6*zxminmin + 3*zxmaxmin - 3*zxmaxmax - 6*zxminmax + 6*zyminmin - 6*zymaxmin - 3*zymaxmax + 3*zyminmax + 4*zxyminmin + 2*zxymaxmin + zxymaxmax + 2*zxyminmax; + *z_p += 2*v*t2*u1; + v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 4*zxminmin - 2*zxmaxmin + 2*zxmaxmax + 4*zxminmax - 3*zyminmin + 3*zymaxmin + 3*zymaxmax - 3*zyminmax - 2*zxyminmin - zxymaxmin - zxymaxmax - 2*zxyminmax; + *z_p += 3*v*t2*u2; + v = 2*zyminmin - 2*zymaxmin + zxyminmin + zxymaxmin; + *z_p += v*t3*u0; + v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 3*zxminmin - 3*zxmaxmin + 3*zxmaxmax + 3*zxminmax - 4*zyminmin + 4*zymaxmin + 2*zymaxmax - 2*zyminmax - 2*zxyminmin - 2*zxymaxmin - zxymaxmax - zxyminmax; + *z_p += 2*v*t3*u1; + v = 4*zminmin - 4*zmaxmin + 4*zmaxmax - 4*zminmax + 2*zxminmin + 2*zxmaxmin - 2*zxmaxmax - 2*zxminmax + 2*zyminmin - 2*zymaxmin - 2*zymaxmax + 2*zyminmax + zxyminmin + zxymaxmin + zxymaxmax + zxyminmax; + *z_p += 3*v*t3*u2; + *z_p *= du; + + return GSL_SUCCESS; +} + +static int +bicubic_deriv_xx(const void * vstate, const double xarr[], const double yarr[], + const double zarr[], size_t xsize, size_t ysize, + double x, double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, double * z_pp) +{ + bicubic_state_t *state = (bicubic_state_t *) vstate; + + double xmin, xmax, ymin, ymax; + double zminmin, zminmax, zmaxmin, zmaxmax; + double zxminmin, zxminmax, zxmaxmin, zxmaxmax; + double zyminmin, zyminmax, zymaxmin, zymaxmax; + double zxyminmin, zxyminmax, zxymaxmin, zxymaxmax; + + double dx, dy; /* size of the grid cell */ + double dt, du; + + /* + * t and u are the positions within the grid cell at which we are computing + * the interpolation, in units of grid cell size + */ + double t, u; + double t0, t1, u0, u1, u2, u3; + double v; + size_t xi, yi; + + /* first compute the indices into the data arrays where we are interpolating */ + if (xa != NULL) + xi = gsl_interp_accel_find(xa, xarr, xsize, x); + else + xi = gsl_interp_bsearch(xarr, x, 0, xsize - 1); + + if (ya != NULL) + yi = gsl_interp_accel_find(ya, yarr, ysize, y); + else + yi = gsl_interp_bsearch(yarr, y, 0, ysize - 1); + + /* find the minimum and maximum values on the grid cell in each dimension */ + xmin = xarr[xi]; + xmax = xarr[xi + 1]; + ymin = yarr[yi]; + ymax = yarr[yi + 1]; + zminmin = zarr[IDX2D(xi, yi, state)]; + zminmax = zarr[IDX2D(xi, yi + 1, state)]; + zmaxmin = zarr[IDX2D(xi + 1, yi, state)]; + zmaxmax = zarr[IDX2D(xi + 1, yi + 1, state)]; + + /* get the width and height of the grid cell */ + dx = xmax - xmin; + dy = ymax - ymin; + t = (x - xmin)/dx; + u = (y - ymin)/dy; + dt = 1./dx; /* partial t / partial x */ + du = 1./dy; /* partial u / partial y */ + + zxminmin = state->zx[IDX2D(xi, yi, state)]/dt; + zxminmax = state->zx[IDX2D(xi, yi + 1, state)]/dt; + zxmaxmin = state->zx[IDX2D(xi + 1, yi, state)]/dt; + zxmaxmax = state->zx[IDX2D(xi + 1, yi + 1, state)]/dt; + zyminmin = state->zy[IDX2D(xi, yi, state)]/du; + zyminmax = state->zy[IDX2D(xi, yi + 1, state)]/du; + zymaxmin = state->zy[IDX2D(xi + 1, yi, state)]/du; + zymaxmax = state->zy[IDX2D(xi + 1, yi + 1, state)]/du; + zxyminmin = state->zxy[IDX2D(xi, yi, state)]/(dt*du); + zxyminmax = state->zxy[IDX2D(xi, yi + 1, state)]/(dt*du); + zxymaxmin = state->zxy[IDX2D(xi + 1, yi, state)]/(dt*du); + zxymaxmax = state->zxy[IDX2D(xi + 1, yi + 1, state)]/(dt*du); + + t0 = 1; + t1 = t; + u0 = 1; + u1 = u; + u2 = u*u; + u3 = u*u2; + + *z_pp = 0; + v = -3*zminmin + 3*zmaxmin - 2*zxminmin - zxmaxmin; + *z_pp += 2*v*t0*u0; + v = -3*zyminmin + 3*zymaxmin - 2*zxyminmin - zxymaxmin; + *z_pp += 2*v*t0*u1; + v = 9*zminmin - 9*zmaxmin + 9*zmaxmax - 9*zminmax + 6*zxminmin + 3*zxmaxmin - 3*zxmaxmax - 6*zxminmax + 6*zyminmin - 6*zymaxmin - 3*zymaxmax + 3*zyminmax + 4*zxyminmin + 2*zxymaxmin + zxymaxmax + 2*zxyminmax; + *z_pp += 2*v*t0*u2; + v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 4*zxminmin - 2*zxmaxmin + 2*zxmaxmax + 4*zxminmax - 3*zyminmin + 3*zymaxmin + 3*zymaxmax - 3*zyminmax - 2*zxyminmin - zxymaxmin - zxymaxmax - 2*zxyminmax; + *z_pp += 2*v*t0*u3; + v = 2*zminmin - 2*zmaxmin + zxminmin + zxmaxmin; + *z_pp += 6*v*t1*u0; + v = 2*zyminmin - 2*zymaxmin + zxyminmin + zxymaxmin; + *z_pp += 6*v*t1*u1; + v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 3*zxminmin - 3*zxmaxmin + 3*zxmaxmax + 3*zxminmax - 4*zyminmin + 4*zymaxmin + 2*zymaxmax - 2*zyminmax - 2*zxyminmin - 2*zxymaxmin - zxymaxmax - zxyminmax; + *z_pp += 6*v*t1*u2; + v = 4*zminmin - 4*zmaxmin + 4*zmaxmax - 4*zminmax + 2*zxminmin + 2*zxmaxmin - 2*zxmaxmax - 2*zxminmax + 2*zyminmin - 2*zymaxmin - 2*zymaxmax + 2*zyminmax + zxyminmin + zxymaxmin + zxymaxmax + zxyminmax; + *z_pp += 6*v*t1*u3; + *z_pp *= dt*dt; + + return GSL_SUCCESS; +} + +static int +bicubic_deriv_xy(const void * vstate, const double xarr[], const double yarr[], + const double zarr[], size_t xsize, size_t ysize, + double x, double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, double * z_pp) +{ + bicubic_state_t *state = (bicubic_state_t *) vstate; + + double xmin, xmax, ymin, ymax; + double zminmin, zminmax, zmaxmin, zmaxmax; + double zxminmin, zxminmax, zxmaxmin, zxmaxmax; + double zyminmin, zyminmax, zymaxmin, zymaxmax; + double zxyminmin, zxyminmax, zxymaxmin, zxymaxmax; + + double dx, dy; /* size of the grid cell */ + double dt, du; + + /* + * t and u are the positions within the grid cell at which we are computing + * the interpolation, in units of grid cell size + */ + double t, u; + double t0, t1, t2, u0, u1, u2; + double v; + size_t xi, yi; + + /* first compute the indices into the data arrays where we are interpolating */ + if (xa != NULL) + xi = gsl_interp_accel_find(xa, xarr, xsize, x); + else + xi = gsl_interp_bsearch(xarr, x, 0, xsize - 1); + + if (ya != NULL) + yi = gsl_interp_accel_find(ya, yarr, ysize, y); + else + yi = gsl_interp_bsearch(yarr, y, 0, ysize - 1); + + /* find the minimum and maximum values on the grid cell in each dimension */ + xmin = xarr[xi]; + xmax = xarr[xi + 1]; + ymin = yarr[yi]; + ymax = yarr[yi + 1]; + zminmin = zarr[IDX2D(xi, yi, state)]; + zminmax = zarr[IDX2D(xi, yi + 1, state)]; + zmaxmin = zarr[IDX2D(xi + 1, yi, state)]; + zmaxmax = zarr[IDX2D(xi + 1, yi + 1, state)]; + + /* get the width and height of the grid cell */ + dx = xmax - xmin; + dy = ymax - ymin; + t = (x - xmin)/dx; + u = (y - ymin)/dy; + dt = 1./dx; /* partial t / partial x */ + du = 1./dy; /* partial u / partial y */ + + zxminmin = state->zx[IDX2D(xi, yi, state)]/dt; + zxminmax = state->zx[IDX2D(xi, yi + 1, state)]/dt; + zxmaxmin = state->zx[IDX2D(xi + 1, yi, state)]/dt; + zxmaxmax = state->zx[IDX2D(xi + 1, yi + 1, state)]/dt; + zyminmin = state->zy[IDX2D(xi, yi, state)]/du; + zyminmax = state->zy[IDX2D(xi, yi + 1, state)]/du; + zymaxmin = state->zy[IDX2D(xi + 1, yi, state)]/du; + zymaxmax = state->zy[IDX2D(xi + 1, yi + 1, state)]/du; + zxyminmin = state->zxy[IDX2D(xi, yi, state)]/(dt*du); + zxyminmax = state->zxy[IDX2D(xi, yi + 1, state)]/(dt*du); + zxymaxmin = state->zxy[IDX2D(xi + 1, yi, state)]/(dt*du); + zxymaxmax = state->zxy[IDX2D(xi + 1, yi + 1, state)]/(dt*du); + + t0 = 1; + t1 = t; + t2 = t*t; + u0 = 1; + u1 = u; + u2 = u*u; + + *z_pp = 0; + v = zxyminmin; + *z_pp += v*t0*u0; + v = -3*zxminmin + 3*zxminmax - 2*zxyminmin - zxyminmax; + *z_pp += 2*v*t0*u1; + v = 2*zxminmin - 2*zxminmax + zxyminmin + zxyminmax; + *z_pp += 3*v*t0*u2; + v = -3*zyminmin + 3*zymaxmin - 2*zxyminmin - zxymaxmin; + *z_pp += 2*v*t1*u0; + v = 9*zminmin - 9*zmaxmin + 9*zmaxmax - 9*zminmax + 6*zxminmin + 3*zxmaxmin - 3*zxmaxmax - 6*zxminmax + 6*zyminmin - 6*zymaxmin - 3*zymaxmax + 3*zyminmax + 4*zxyminmin + 2*zxymaxmin + zxymaxmax + 2*zxyminmax; + *z_pp += 4*v*t1*u1; + v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 4*zxminmin - 2*zxmaxmin + 2*zxmaxmax + 4*zxminmax - 3*zyminmin + 3*zymaxmin + 3*zymaxmax - 3*zyminmax - 2*zxyminmin - zxymaxmin - zxymaxmax - 2*zxyminmax; + *z_pp += 6*v*t1*u2; + v = 2*zyminmin - 2*zymaxmin + zxyminmin + zxymaxmin; + *z_pp += 3*v*t2*u0; + v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 3*zxminmin - 3*zxmaxmin + 3*zxmaxmax + 3*zxminmax - 4*zyminmin + 4*zymaxmin + 2*zymaxmax - 2*zyminmax - 2*zxyminmin - 2*zxymaxmin - zxymaxmax - zxyminmax; + *z_pp += 6*v*t2*u1; + v = 4*zminmin - 4*zmaxmin + 4*zmaxmax - 4*zminmax + 2*zxminmin + 2*zxmaxmin - 2*zxmaxmax - 2*zxminmax + 2*zyminmin - 2*zymaxmin - 2*zymaxmax + 2*zyminmax + zxyminmin + zxymaxmin + zxymaxmax + zxyminmax; + *z_pp += 9*v*t2*u2; + *z_pp *= dt*du; + + return GSL_SUCCESS; +} + +static int +bicubic_deriv_yy(const void * vstate, const double xarr[], const double yarr[], + const double zarr[], size_t xsize, size_t ysize, + double x, double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, double * z_pp) +{ + bicubic_state_t *state = (bicubic_state_t *) vstate; + + double xmin, xmax, ymin, ymax; + double zminmin, zminmax, zmaxmin, zmaxmax; + double zxminmin, zxminmax, zxmaxmin, zxmaxmax; + double zyminmin, zyminmax, zymaxmin, zymaxmax; + double zxyminmin, zxyminmax, zxymaxmin, zxymaxmax; + + double dx, dy; /* size of the grid cell */ + double dt, du; + + /* + * t and u are the positions within the grid cell at which we are computing + * the interpolation, in units of grid cell size + */ + double t, u; + double t0, t1, t2, t3, u0, u1; + double v; + size_t xi, yi; + + /* first compute the indices into the data arrays where we are interpolating */ + if (xa != NULL) + xi = gsl_interp_accel_find(xa, xarr, xsize, x); + else + xi = gsl_interp_bsearch(xarr, x, 0, xsize - 1); + + if (ya != NULL) + yi = gsl_interp_accel_find(ya, yarr, ysize, y); + else + yi = gsl_interp_bsearch(yarr, y, 0, ysize - 1); + + /* find the minimum and maximum values on the grid cell in each dimension */ + xmin = xarr[xi]; + xmax = xarr[xi + 1]; + ymin = yarr[yi]; + ymax = yarr[yi + 1]; + zminmin = zarr[IDX2D(xi, yi, state)]; + zminmax = zarr[IDX2D(xi, yi + 1, state)]; + zmaxmin = zarr[IDX2D(xi + 1, yi, state)]; + zmaxmax = zarr[IDX2D(xi + 1, yi + 1, state)]; + + /* get the width and height of the grid cell */ + dx = xmax - xmin; + dy = ymax - ymin; + t = (x - xmin)/dx; + u = (y - ymin)/dy; + dt = 1./dx; /* partial t / partial x */ + du = 1./dy; /* partial u / partial y */ + + zxminmin = state->zx[IDX2D(xi, yi, state)]/dt; + zxminmax = state->zx[IDX2D(xi, yi + 1, state)]/dt; + zxmaxmin = state->zx[IDX2D(xi + 1, yi, state)]/dt; + zxmaxmax = state->zx[IDX2D(xi + 1, yi + 1, state)]/dt; + zyminmin = state->zy[IDX2D(xi, yi, state)]/du; + zyminmax = state->zy[IDX2D(xi, yi + 1, state)]/du; + zymaxmin = state->zy[IDX2D(xi + 1, yi, state)]/du; + zymaxmax = state->zy[IDX2D(xi + 1, yi + 1, state)]/du; + zxyminmin = state->zxy[IDX2D(xi, yi, state)]/(dt*du); + zxyminmax = state->zxy[IDX2D(xi, yi + 1, state)]/(dt*du); + zxymaxmin = state->zxy[IDX2D(xi + 1, yi, state)]/(dt*du); + zxymaxmax = state->zxy[IDX2D(xi + 1, yi + 1, state)]/(dt*du); + + t0 = 1; + t1 = t; + t2 = t*t; + t3 = t*t2; + u0 = 1; + u1 = u; + + *z_pp = 0; + v = -3*zminmin + 3*zminmax - 2*zyminmin - zyminmax; + *z_pp += 2*v*t0*u0; + v = 2*zminmin-2*zminmax + zyminmin + zyminmax; + *z_pp += 6*v*t0*u1; + v = -3*zxminmin + 3*zxminmax - 2*zxyminmin - zxyminmax; + *z_pp += 2*v*t1*u0; + v = 2*zxminmin - 2*zxminmax + zxyminmin + zxyminmax; + *z_pp += 6*v*t1*u1; + v = 9*zminmin - 9*zmaxmin + 9*zmaxmax - 9*zminmax + 6*zxminmin + 3*zxmaxmin - 3*zxmaxmax - 6*zxminmax + 6*zyminmin - 6*zymaxmin - 3*zymaxmax + 3*zyminmax + 4*zxyminmin + 2*zxymaxmin + zxymaxmax + 2*zxyminmax; + *z_pp += 2*v*t2*u0; + v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 4*zxminmin - 2*zxmaxmin + 2*zxmaxmax + 4*zxminmax - 3*zyminmin + 3*zymaxmin + 3*zymaxmax - 3*zyminmax - 2*zxyminmin - zxymaxmin - zxymaxmax - 2*zxyminmax; + *z_pp += 6*v*t2*u1; + v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 3*zxminmin - 3*zxmaxmin + 3*zxmaxmax + 3*zxminmax - 4*zyminmin + 4*zymaxmin + 2*zymaxmax - 2*zyminmax - 2*zxyminmin - 2*zxymaxmin - zxymaxmax - zxyminmax; + *z_pp += 2*v*t3*u0; + v = 4*zminmin - 4*zmaxmin + 4*zmaxmax - 4*zminmax + 2*zxminmin + 2*zxmaxmin - 2*zxmaxmax - 2*zxminmax + 2*zyminmin - 2*zymaxmin - 2*zymaxmax + 2*zyminmax + zxyminmin + zxymaxmin + zxymaxmax + zxyminmax; + *z_pp += 6*v*t3*u1; + *z_pp *= du*du; + + return GSL_SUCCESS; +} + +static const gsl_interp2d_type bicubic_type = { + "bicubic", + 4, + &bicubic_alloc, + &bicubic_init, + &bicubic_eval, + &bicubic_deriv_x, + &bicubic_deriv_y, + &bicubic_deriv_xx, + &bicubic_deriv_xy, + &bicubic_deriv_yy, + &bicubic_free +}; + +const gsl_interp2d_type * gsl_interp2d_bicubic = &bicubic_type; + +#undef IDX2D diff -Nru gsl-doc-1.16/interpolation/bilinear.c gsl-doc-2.3/interpolation/bilinear.c --- gsl-doc-1.16/interpolation/bilinear.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/interpolation/bilinear.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,212 @@ +/* interpolation/bilinear.c + * + * Copyright 2012 David Zaslavsky + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include + +#define IDX2D(i, j, xsize, ysize) ((j) * (xsize) + (i)) + +static int +bilinear_init(void * state, const double xa[], const double ya[], + const double za[], size_t xsize, size_t ysize) +{ + return GSL_SUCCESS; +} + +static int +bilinear_eval(const void * state, const double xarr[], const double yarr[], + const double zarr[], size_t xsize, size_t ysize, + double x, double y, gsl_interp_accel * xa, + gsl_interp_accel * ya, double * z) +{ + double xmin, xmax, ymin, ymax, zminmin, zminmax, zmaxmin, zmaxmax; + double dx, dy; + double t, u; + size_t xi, yi; + + if (xa != NULL) + xi = gsl_interp_accel_find(xa, xarr, xsize, x); + else + xi = gsl_interp_bsearch(xarr, x, 0, xsize - 1); + + if (ya != NULL) + yi = gsl_interp_accel_find(ya, yarr, ysize, y); + else + yi = gsl_interp_bsearch(yarr, y, 0, ysize - 1); + + xmin = xarr[xi]; + xmax = xarr[xi + 1]; + ymin = yarr[yi]; + ymax = yarr[yi + 1]; + zminmin = zarr[IDX2D(xi, yi, xsize, ysize)]; + zminmax = zarr[IDX2D(xi, yi + 1, xsize, ysize)]; + zmaxmin = zarr[IDX2D(xi + 1, yi, xsize, ysize)]; + zmaxmax = zarr[IDX2D(xi + 1, yi + 1, xsize, ysize)]; + dx = xmax - xmin; + dy = ymax - ymin; + t = (x - xmin)/dx; + u = (y - ymin)/dy; + *z = (1.-t)*(1.-u)*zminmin + t*(1.-u)*zmaxmin + (1.-t)*u*zminmax + t*u*zmaxmax; + + return GSL_SUCCESS; +} + +static int +bilinear_deriv_x(const void * state, const double xarr[], + const double yarr[], const double zarr[], + size_t xsize, size_t ysize, double x, double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, double * z_p) +{ + double xmin, xmax, ymin, ymax, zminmin, zminmax, zmaxmin, zmaxmax; + double dx, dy; + double dt, u; + size_t xi, yi; + + if (xa != NULL) + xi = gsl_interp_accel_find(xa, xarr, xsize, x); + else + xi = gsl_interp_bsearch(xarr, x, 0, xsize - 1); + + if (ya != NULL) + yi = gsl_interp_accel_find(ya, yarr, ysize, y); + else + yi = gsl_interp_bsearch(yarr, y, 0, ysize - 1); + + xmin = xarr[xi]; + xmax = xarr[xi + 1]; + ymin = yarr[yi]; + ymax = yarr[yi + 1]; + zminmin = zarr[IDX2D(xi, yi, xsize, ysize)]; + zminmax = zarr[IDX2D(xi, yi + 1, xsize, ysize)]; + zmaxmin = zarr[IDX2D(xi + 1, yi, xsize, ysize)]; + zmaxmax = zarr[IDX2D(xi + 1, yi + 1, xsize, ysize)]; + dx = xmax - xmin; + dy = ymax - ymin; + dt = 1./dx; /* partial t / partial x */ + u = (y - ymin)/dy; + *z_p = dt*(-(1.-u)*zminmin + (1.-u)*zmaxmin - u*zminmax + u*zmaxmax); + + return GSL_SUCCESS; +} + +static int +bilinear_deriv_y(const void * state, const double xarr[], + const double yarr[], const double zarr[], + size_t xsize, size_t ysize, double x, double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, double * z_p) +{ + double xmin, xmax, ymin, ymax, zminmin, zminmax, zmaxmin, zmaxmax; + double dx, dy; + double t, du; + size_t xi, yi; + + if (xa != NULL) + xi = gsl_interp_accel_find(xa, xarr, xsize, x); + else + xi = gsl_interp_bsearch(xarr, x, 0, xsize - 1); + + if (ya != NULL) + yi = gsl_interp_accel_find(ya, yarr, ysize, y); + else + yi = gsl_interp_bsearch(yarr, y, 0, ysize - 1); + + xmin = xarr[xi]; + xmax = xarr[xi + 1]; + ymin = yarr[yi]; + ymax = yarr[yi + 1]; + zminmin = zarr[IDX2D(xi, yi, xsize, ysize)]; + zminmax = zarr[IDX2D(xi, yi + 1, xsize, ysize)]; + zmaxmin = zarr[IDX2D(xi + 1, yi, xsize, ysize)]; + zmaxmax = zarr[IDX2D(xi + 1, yi + 1, xsize, ysize)]; + dx = xmax - xmin; + dy = ymax - ymin; + t = (x - xmin)/dx; + du = 1./dy; /* partial u / partial y */ + *z_p = du*(-(1.-t)*zminmin - t*zmaxmin + (1.-t)*zminmax + t*zmaxmax); + + return GSL_SUCCESS; +} + +static int +bilinear_deriv2(const void * state, const double xarr[], + const double yarr[], const double zarr[], + size_t xsize, size_t ysize, double x, double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, double * z_pp) +{ + *z_pp = 0.0; + return GSL_SUCCESS; +} + +static int +bilinear_derivxy(const void * state, const double xarr[], + const double yarr[], const double zarr[], + size_t xsize, size_t ysize, double x, double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, double * z_pp) +{ + double xmin, xmax, ymin, ymax, zminmin, zminmax, zmaxmin, zmaxmax; + double dx, dy; + double dt, du; + size_t xi, yi; + + if (xa != NULL) + xi = gsl_interp_accel_find(xa, xarr, xsize, x); + else + xi = gsl_interp_bsearch(xarr, x, 0, xsize - 1); + + if (ya != NULL) + yi = gsl_interp_accel_find(ya, yarr, ysize, y); + else + yi = gsl_interp_bsearch(yarr, y, 0, ysize - 1); + + xmin = xarr[xi]; + xmax = xarr[xi + 1]; + ymin = yarr[yi]; + ymax = yarr[yi + 1]; + zminmin = zarr[IDX2D(xi, yi, xsize, ysize)]; + zminmax = zarr[IDX2D(xi, yi + 1, xsize, ysize)]; + zmaxmin = zarr[IDX2D(xi + 1, yi, xsize, ysize)]; + zmaxmax = zarr[IDX2D(xi + 1, yi + 1, xsize, ysize)]; + dx = xmax - xmin; + dy = ymax - ymin; + dt = 1./dx; /* partial t / partial x */ + du = 1./dy; /* partial u / partial y */ + *z_pp = dt*du*(zminmin-zmaxmin-zminmax+zmaxmax); + + return GSL_SUCCESS; +} + +static const gsl_interp2d_type bilinear_type = { + "bilinear", + 2, + NULL, + &bilinear_init, + &bilinear_eval, + &bilinear_deriv_x, + &bilinear_deriv_y, + &bilinear_deriv2, + &bilinear_derivxy, + &bilinear_deriv2, + NULL +}; + +const gsl_interp2d_type * gsl_interp2d_bilinear = &bilinear_type; + +#undef IDX2D diff -Nru gsl-doc-1.16/interpolation/gsl_interp2d.h gsl-doc-2.3/interpolation/gsl_interp2d.h --- gsl-doc-1.16/interpolation/gsl_interp2d.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/interpolation/gsl_interp2d.h 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,160 @@ +/* interpolation/gsl_interp2d.h + * + * Copyright 2012 David Zaslavsky + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_INTERP2D_H__ +#define __GSL_INTERP2D_H__ + +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +typedef struct { + const char* name; + unsigned int min_size; + void * (*alloc)(size_t xsize, size_t ysize); + int (*init)(void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize); + int (*eval)(const void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel*, gsl_interp_accel*, double* z); + int (*eval_deriv_x) (const void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel*, gsl_interp_accel*, double* z_p); + int (*eval_deriv_y) (const void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel*, gsl_interp_accel*, double* z_p); + int (*eval_deriv_xx) (const void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel*, gsl_interp_accel*, double* z_pp); + int (*eval_deriv_xy) (const void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel*, gsl_interp_accel*, double* z_pp); + int (*eval_deriv_yy) (const void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel*, gsl_interp_accel*, double* z_pp); + void (*free)(void *); +} gsl_interp2d_type; + +typedef struct { + const gsl_interp2d_type * type; /* interpolation type */ + double xmin; /* minimum value of x for which data have been provided */ + double xmax; /* maximum value of x for which data have been provided */ + double ymin; /* minimum value of y for which data have been provided */ + double ymax; /* maximum value of y for which data have been provided */ + size_t xsize; /* number of x values provided */ + size_t ysize; /* number of y values provided */ + void * state; /* internal state object specific to the interpolation type */ +} gsl_interp2d; + +/* available types */ +GSL_VAR const gsl_interp2d_type * gsl_interp2d_bilinear; +GSL_VAR const gsl_interp2d_type * gsl_interp2d_bicubic; + +gsl_interp2d * gsl_interp2d_alloc(const gsl_interp2d_type * T, const size_t xsize, + const size_t ysize); + +const char * gsl_interp2d_name(const gsl_interp2d * interp); +size_t gsl_interp2d_min_size(const gsl_interp2d * interp); +size_t gsl_interp2d_type_min_size(const gsl_interp2d_type * T); +int gsl_interp2d_set(const gsl_interp2d * interp, double zarr[], + const size_t i, const size_t j, const double z); +double gsl_interp2d_get(const gsl_interp2d * interp, const double zarr[], + const size_t i, const size_t j); +size_t gsl_interp2d_idx(const gsl_interp2d * interp, + const size_t i, const size_t j); +int gsl_interp2d_init(gsl_interp2d * interp, const double xa[], const double ya[], + const double za[], const size_t xsize, const size_t ysize); +void gsl_interp2d_free(gsl_interp2d * interp); + +double gsl_interp2d_eval(const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], const double x, + const double y, gsl_interp_accel * xa, gsl_interp_accel * ya); + +double gsl_interp2d_eval_extrap(const gsl_interp2d * interp, + const double xarr[], const double yarr[], + const double zarr[], const double x, + const double y, gsl_interp_accel * xa, + gsl_interp_accel * ya); + +int gsl_interp2d_eval_e(const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, gsl_interp_accel* xa, + gsl_interp_accel* ya, double * z); + +int gsl_interp2d_eval_e_extrap(const gsl_interp2d * interp, + const double xarr[], + const double yarr[], + const double zarr[], + const double x, + const double y, + gsl_interp_accel * xa, + gsl_interp_accel * ya, + double * z); + +double gsl_interp2d_eval_deriv_x(const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, gsl_interp_accel * xa, + gsl_interp_accel * ya); + +int gsl_interp2d_eval_deriv_x_e(const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, double * z); + +double gsl_interp2d_eval_deriv_y(const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel* xa, gsl_interp_accel* ya); + +int gsl_interp2d_eval_deriv_y_e(const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, double * z); + +double gsl_interp2d_eval_deriv_xx(const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya); + +int gsl_interp2d_eval_deriv_xx_e(const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, double * z); + +double gsl_interp2d_eval_deriv_yy(const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya); + +int gsl_interp2d_eval_deriv_yy_e(const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, double * z); + +double gsl_interp2d_eval_deriv_xy(const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya); + +int gsl_interp2d_eval_deriv_xy_e(const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, double * z); + + +__END_DECLS + +#endif /* __GSL_INTERP2D_H__ */ diff -Nru gsl-doc-1.16/interpolation/gsl_interp.h gsl-doc-2.3/interpolation/gsl_interp.h --- gsl-doc-1.16/interpolation/gsl_interp.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/interpolation/gsl_interp.h 2015-11-03 16:21:55.000000000 +0000 @@ -78,6 +78,7 @@ GSL_VAR const gsl_interp_type * gsl_interp_cspline_periodic; GSL_VAR const gsl_interp_type * gsl_interp_akima; GSL_VAR const gsl_interp_type * gsl_interp_akima_periodic; +GSL_VAR const gsl_interp_type * gsl_interp_steffen; gsl_interp_accel * gsl_interp_accel_alloc(void); diff -Nru gsl-doc-1.16/interpolation/gsl_spline2d.h gsl-doc-2.3/interpolation/gsl_spline2d.h --- gsl-doc-1.16/interpolation/gsl_spline2d.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/interpolation/gsl_spline2d.h 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,113 @@ +/* interpolation/gsl_spline2d.h + * + * Copyright 2012 David Zaslavsky + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_SPLINE2D_H__ +#define __GSL_SPLINE2D_H__ + +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + + +/* + * A 2D interpolation object which stores the arrays defining the function. + * In all other respects, this is just like a gsl_interp2d object. + */ +typedef struct +{ + gsl_interp2d interp_object; /* low-level interpolation object */ + double * xarr; /* x data array */ + double * yarr; /* y data array */ + double * zarr; /* z data array */ +} gsl_spline2d; + +gsl_spline2d * gsl_spline2d_alloc(const gsl_interp2d_type * T, size_t xsize, size_t ysize); + +int gsl_spline2d_init(gsl_spline2d * interp, const double xa[], + const double ya[], const double za[], + size_t xsize, size_t ysize); + +void gsl_spline2d_free(gsl_spline2d * interp); + +double gsl_spline2d_eval(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel* xa, gsl_interp_accel* ya); + +int gsl_spline2d_eval_e(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel* xa, gsl_interp_accel* ya, + double * z); + +double gsl_spline2d_eval_deriv_x(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel* xa, gsl_interp_accel* ya); + +int gsl_spline2d_eval_deriv_x_e(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel* xa, + gsl_interp_accel* ya, double * z); + +double gsl_spline2d_eval_deriv_y(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel* xa, + gsl_interp_accel* ya); + +int gsl_spline2d_eval_deriv_y_e(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel* xa, + gsl_interp_accel* ya, double * z); + +double gsl_spline2d_eval_deriv_xx(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel* xa, gsl_interp_accel* ya); + +int gsl_spline2d_eval_deriv_xx_e(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel* xa, + gsl_interp_accel* ya, double * z); + +double gsl_spline2d_eval_deriv_yy(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel* xa, gsl_interp_accel* ya); + +int gsl_spline2d_eval_deriv_yy_e(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel* xa, + gsl_interp_accel* ya, double * z); + +double gsl_spline2d_eval_deriv_xy(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel* xa, gsl_interp_accel* ya); + +int gsl_spline2d_eval_deriv_xy_e(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel* xa, + gsl_interp_accel* ya, double * z); + +size_t gsl_spline2d_min_size(const gsl_spline2d * interp); + +const char * gsl_spline2d_name(const gsl_spline2d * interp); + +int gsl_spline2d_set(const gsl_spline2d * interp, double zarr[], + const size_t i, const size_t j, const double z); +double gsl_spline2d_get(const gsl_spline2d * interp, const double zarr[], + const size_t i, const size_t j); + +__END_DECLS + +#endif /* __GSL_SPLINE2D_H__ */ diff -Nru gsl-doc-1.16/interpolation/interp2d.c gsl-doc-2.3/interpolation/interp2d.c --- gsl-doc-1.16/interpolation/interp2d.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/interpolation/interp2d.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,411 @@ +/* interpolation/interp2d.c + * + * Copyright 2012 David Zaslavsky + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include + +/** + * Triggers a GSL error if the argument is not equal to GSL_SUCCESS. + * If the argument is GSL_SUCCESS, this does nothing. + */ +#define DISCARD_STATUS(s) if ((s) != GSL_SUCCESS) { GSL_ERROR_VAL("interpolation error", (s), GSL_NAN); } + +#define IDX2D(i, j, w) ((j) * ((w)->xsize) + (i)) + +gsl_interp2d * +gsl_interp2d_alloc(const gsl_interp2d_type * T, const size_t xsize, + const size_t ysize) +{ + gsl_interp2d * interp; + + if (xsize < T->min_size || ysize < T->min_size) + { + GSL_ERROR_NULL ("insufficient number of points for interpolation type", + GSL_EINVAL); + } + + interp = (gsl_interp2d *) calloc(1, sizeof(gsl_interp2d)); + if (interp == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for gsl_interp2d struct", + GSL_ENOMEM); + } + + interp->type = T; + interp->xsize = xsize; + interp->ysize = ysize; + + if (interp->type->alloc == NULL) + { + interp->state = NULL; + return interp; + } + + interp->state = interp->type->alloc(xsize, ysize); + if (interp->state == NULL) + { + free(interp); + GSL_ERROR_NULL ("failed to allocate space for gsl_interp2d state", + GSL_ENOMEM); + } + + return interp; +} /* gsl_interp2d_alloc() */ + +void +gsl_interp2d_free (gsl_interp2d * interp) +{ + RETURN_IF_NULL(interp); + + if (interp->type->free) + interp->type->free(interp->state); + + free(interp); +} /* gsl_interp2d_free() */ + +int +gsl_interp2d_init (gsl_interp2d * interp, const double xarr[], const double yarr[], + const double zarr[], const size_t xsize, const size_t ysize) +{ + size_t i; + + if (xsize != interp->xsize || ysize != interp->ysize) + { + GSL_ERROR("data must match size of interpolation object", GSL_EINVAL); + } + + for (i = 1; i < xsize; i++) + { + if (xarr[i-1] >= xarr[i]) + { + GSL_ERROR("x values must be strictly increasing", GSL_EINVAL); + } + } + + for (i = 1; i < ysize; i++) + { + if (yarr[i-1] >= yarr[i]) + { + GSL_ERROR("y values must be strictly increasing", GSL_EINVAL); + } + } + + interp->xmin = xarr[0]; + interp->xmax = xarr[xsize - 1]; + interp->ymin = yarr[0]; + interp->ymax = yarr[ysize - 1]; + + { + int status = interp->type->init(interp->state, xarr, yarr, zarr, + xsize, ysize); + return status; + } +} /* gsl_interp2d_init() */ + +/* + * A wrapper function that checks boundary conditions, calls an evaluator + * which implements the actual calculation of the function value or + * derivative etc., and checks the return status. + */ +static int +interp2d_eval(int (*evaluator)(const void *, const double xa[], const double ya[], + const double za[], size_t xsize, size_t ysize, + double x, double y, gsl_interp_accel *, + gsl_interp_accel *, double * z), + const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, + double * result) +{ + if (x < interp->xmin || x > interp->xmax) + { + GSL_ERROR ("interpolation x value out of range", GSL_EDOM); + } + else if (y < interp->ymin || y > interp->ymax) + { + GSL_ERROR ("interpolation y value out of range", GSL_EDOM); + } + + return evaluator(interp->state, xarr, yarr, zarr, + interp->xsize, interp->ysize, + x, y, xa, ya, result); +} + +/* + * Another wrapper function that serves as a drop-in replacement for + * interp2d_eval but does not check the bounds. This can be used + * for extrapolation. + */ +static int +interp2d_eval_extrap(int (*evaluator)(const void *, const double xa[], + const double ya[], const double za[], + size_t xsize, size_t ysize, + double x, double y, + gsl_interp_accel *, + gsl_interp_accel *, double * z), + const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, + double * result) +{ + return evaluator(interp->state, xarr, yarr, zarr, + interp->xsize, interp->ysize, x, y, xa, ya, result); +} + +double +gsl_interp2d_eval (const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya) +{ + double z; + int status = gsl_interp2d_eval_e(interp, xarr, yarr, zarr, x, y, xa, ya, &z); + DISCARD_STATUS(status) + return z; +} /* gsl_interp2d_eval() */ + +double +gsl_interp2d_eval_extrap (const gsl_interp2d * interp, + const double xarr[], + const double yarr[], + const double zarr[], + const double x, + const double y, + gsl_interp_accel * xa, + gsl_interp_accel * ya) +{ + double z; + int status = + interp2d_eval_extrap(interp->type->eval, interp, + xarr, yarr, zarr, x, y, xa, ya, &z); + DISCARD_STATUS(status) + return z; +} + +int +gsl_interp2d_eval_e (const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) +{ + return interp2d_eval(interp->type->eval, interp, + xarr, yarr, zarr, x, y, xa, ya, z); +} /* gsl_interp2d_eval_e() */ + +int +gsl_interp2d_eval_e_extrap (const gsl_interp2d * interp, + const double xarr[], const double yarr[], + const double zarr[], const double x, + const double y, gsl_interp_accel * xa, + gsl_interp_accel * ya, double * z) +{ + return interp2d_eval_extrap(interp->type->eval, interp, + xarr, yarr, zarr, x, y, xa, ya, z); +} + +double +gsl_interp2d_eval_deriv_x (const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya) +{ + double z; + int status = gsl_interp2d_eval_deriv_x_e(interp, xarr, yarr, zarr, x, y, xa, ya, &z); + DISCARD_STATUS(status) + return z; +} + +int +gsl_interp2d_eval_deriv_x_e (const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) +{ + return interp2d_eval(interp->type->eval_deriv_x, interp, + xarr, yarr, zarr, x, y, xa, ya, z); +} + +double +gsl_interp2d_eval_deriv_y (const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya) +{ + double z; + int status = gsl_interp2d_eval_deriv_y_e(interp, xarr, yarr, zarr, x, y, xa, ya, &z); + DISCARD_STATUS(status) + return z; +} + +int +gsl_interp2d_eval_deriv_y_e (const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) +{ + return interp2d_eval(interp->type->eval_deriv_y, interp, + xarr, yarr, zarr, x, y, xa, ya, z); +} + +double +gsl_interp2d_eval_deriv_xx (const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya) +{ + double z; + int status = gsl_interp2d_eval_deriv_xx_e(interp, xarr, yarr, zarr, x, y, xa, ya, &z); + DISCARD_STATUS(status) + return z; +} + +int +gsl_interp2d_eval_deriv_xx_e (const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) +{ + return interp2d_eval(interp->type->eval_deriv_xx, interp, + xarr, yarr, zarr, x, y, xa, ya, z); +} + +double +gsl_interp2d_eval_deriv_yy (const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya) +{ + double z; + int status = gsl_interp2d_eval_deriv_yy_e(interp, xarr, yarr, zarr, x, y, xa, ya, &z); + DISCARD_STATUS(status) + return z; +} + +int +gsl_interp2d_eval_deriv_yy_e (const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) +{ + return interp2d_eval(interp->type->eval_deriv_yy, interp, + xarr, yarr, zarr, x, y, xa, ya, z); +} + +double +gsl_interp2d_eval_deriv_xy (const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya) +{ + double z; + int status = gsl_interp2d_eval_deriv_xy_e(interp, xarr, yarr, zarr, x, y, xa, ya, &z); + DISCARD_STATUS(status) + return z; +} + +int +gsl_interp2d_eval_deriv_xy_e (const gsl_interp2d * interp, const double xarr[], + const double yarr[], const double zarr[], + const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) +{ + return interp2d_eval(interp->type->eval_deriv_xy, interp, + xarr, yarr, zarr, x, y, xa, ya, z); +} + +size_t +gsl_interp2d_type_min_size(const gsl_interp2d_type * T) +{ + return T->min_size; +} + +size_t +gsl_interp2d_min_size(const gsl_interp2d * interp) +{ + return interp->type->min_size; +} + +const char * +gsl_interp2d_name(const gsl_interp2d * interp) +{ + return interp->type->name; +} + +size_t +gsl_interp2d_idx(const gsl_interp2d * interp, + const size_t i, const size_t j) +{ + if (i >= interp->xsize) + { + GSL_ERROR_VAL ("x index out of range", GSL_ERANGE, 0); + } + else if (j >= interp->ysize) + { + GSL_ERROR_VAL ("y index out of range", GSL_ERANGE, 0); + } + else + { + return IDX2D(i, j, interp); + } +} /* gsl_interp2d_idx() */ + +int +gsl_interp2d_set(const gsl_interp2d * interp, double zarr[], + const size_t i, const size_t j, const double z) +{ + if (i >= interp->xsize) + { + GSL_ERROR ("x index out of range", GSL_ERANGE); + } + else if (j >= interp->ysize) + { + GSL_ERROR ("y index out of range", GSL_ERANGE); + } + else + { + zarr[IDX2D(i, j, interp)] = z; + return GSL_SUCCESS; + } +} /* gsl_interp2d_set() */ + +double +gsl_interp2d_get(const gsl_interp2d * interp, const double zarr[], + const size_t i, const size_t j) +{ + if (i >= interp->xsize) + { + GSL_ERROR_VAL ("x index out of range", GSL_ERANGE, 0); + } + else if (j >= interp->ysize) + { + GSL_ERROR_VAL ("y index out of range", GSL_ERANGE, 0); + } + else + { + return zarr[IDX2D(i, j, interp)]; + } +} /* gsl_interp2d_get() */ + +#undef IDX2D diff -Nru gsl-doc-1.16/interpolation/Makefile.am gsl-doc-2.3/interpolation/Makefile.am --- gsl-doc-1.16/interpolation/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/interpolation/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,11 +2,13 @@ check_PROGRAMS = test -pkginclude_HEADERS = gsl_interp.h gsl_spline.h +pkginclude_HEADERS = gsl_interp.h gsl_spline.h gsl_interp2d.h gsl_spline2d.h -libgslinterpolation_la_SOURCES = accel.c akima.c cspline.c interp.c linear.c integ_eval.h spline.c poly.c inline.c +libgslinterpolation_la_SOURCES = accel.c akima.c cspline.c interp.c linear.c integ_eval.h spline.c poly.c steffen.c inline.c interp2d.c bilinear.c bicubic.c spline2d.c -INCLUDES = -I$(top_srcdir) +noinst_HEADERS = test2d.c + +AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/interpolation/Makefile.in gsl-doc-2.3/interpolation/Makefile.in --- gsl-doc-1.16/interpolation/Makefile.in 2013-07-19 15:14:53.000000000 +0000 +++ gsl-doc-2.3/interpolation/Makefile.in 2016-12-09 00:04:21.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -83,7 +83,8 @@ subdir = interpolation DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp \ - $(pkginclude_HEADERS) $(top_srcdir)/test-driver ChangeLog TODO + $(noinst_HEADERS) $(pkginclude_HEADERS) \ + $(top_srcdir)/test-driver ChangeLog TODO ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ @@ -95,7 +96,8 @@ LTLIBRARIES = $(noinst_LTLIBRARIES) libgslinterpolation_la_LIBADD = am_libgslinterpolation_la_OBJECTS = accel.lo akima.lo cspline.lo \ - interp.lo linear.lo spline.lo poly.lo inline.lo + interp.lo linear.lo spline.lo poly.lo steffen.lo inline.lo \ + interp2d.lo bilinear.lo bicubic.lo spline2d.lo libgslinterpolation_la_OBJECTS = $(am_libgslinterpolation_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -179,7 +181,7 @@ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" -HEADERS = $(pkginclude_HEADERS) +HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is @@ -381,6 +383,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -403,7 +406,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -518,9 +524,10 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslinterpolation.la -pkginclude_HEADERS = gsl_interp.h gsl_spline.h -libgslinterpolation_la_SOURCES = accel.c akima.c cspline.c interp.c linear.c integ_eval.h spline.c poly.c inline.c -INCLUDES = -I$(top_srcdir) +pkginclude_HEADERS = gsl_interp.h gsl_spline.h gsl_interp2d.h gsl_spline2d.h +libgslinterpolation_la_SOURCES = accel.c akima.c cspline.c interp.c linear.c integ_eval.h spline.c poly.c steffen.c inline.c interp2d.c bilinear.c bicubic.c spline2d.c +noinst_HEADERS = test2d.c +AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_LDADD = libgslinterpolation.la ../poly/libgslpoly.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../cblas/libgslcblas.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c @@ -594,12 +601,17 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/accel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/akima.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bicubic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bilinear.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cspline.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inline.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interp2d.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linear.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poly.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spline.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spline2d.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/steffen.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ .c.o: diff -Nru gsl-doc-1.16/interpolation/spline2d.c gsl-doc-2.3/interpolation/spline2d.c --- gsl-doc-1.16/interpolation/spline2d.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/interpolation/spline2d.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,241 @@ +/* interpolation/spline2d.c + * + * Copyright 2012 David Zaslavsky + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +gsl_spline2d * +gsl_spline2d_alloc(const gsl_interp2d_type * T, size_t xsize, size_t ysize) +{ + double * array_mem; + gsl_spline2d * interp; + + if (xsize < T->min_size || ysize < T->min_size) + { + GSL_ERROR_NULL("insufficient number of points for interpolation type", GSL_EINVAL); + } + + interp = calloc(1, sizeof(gsl_spline2d)); + if (interp == NULL) + { + GSL_ERROR_NULL("failed to allocate space for gsl_spline2d struct", GSL_ENOMEM); + } + + interp->interp_object.type = T; + interp->interp_object.xsize = xsize; + interp->interp_object.ysize = ysize; + if (interp->interp_object.type->alloc == NULL) + { + interp->interp_object.state = NULL; + } + else + { + interp->interp_object.state = interp->interp_object.type->alloc(xsize, ysize); + if (interp->interp_object.state == NULL) + { + gsl_spline2d_free(interp); + GSL_ERROR_NULL("failed to allocate space for gsl_spline2d state", GSL_ENOMEM); + } + } + + /* + * Use one contiguous block of memory for all three data arrays. + * That way the code fails immediately if there isn't sufficient space for everything, + * rather than allocating one or two and then having to free them. + */ + array_mem = (double *)calloc(xsize + ysize + xsize * ysize, sizeof(double)); + if (array_mem == NULL) + { + gsl_spline2d_free(interp); + GSL_ERROR_NULL("failed to allocate space for data arrays", GSL_ENOMEM); + } + + interp->xarr = array_mem; + interp->yarr = array_mem + xsize; + interp->zarr = array_mem + xsize + ysize; + + return interp; +} /* gsl_spline2d_alloc() */ + +int +gsl_spline2d_init(gsl_spline2d * interp, const double xarr[], + const double yarr[], const double zarr[], + size_t xsize, size_t ysize) +{ + int status = gsl_interp2d_init(&(interp->interp_object), xarr, yarr, zarr, xsize, ysize); + + memcpy(interp->xarr, xarr, xsize * sizeof(double)); + memcpy(interp->yarr, yarr, ysize * sizeof(double)); + memcpy(interp->zarr, zarr, xsize * ysize * sizeof(double)); + + return status; +} /* gsl_spline2d_init() */ + +void +gsl_spline2d_free(gsl_spline2d * interp) +{ + RETURN_IF_NULL(interp); + + if (interp->interp_object.type->free) + interp->interp_object.type->free(interp->interp_object.state); + + /* + * interp->xarr points to the beginning of one contiguous block of memory + * that holds interp->xarr, interp->yarr, and interp->zarr. So it all gets + * freed with one call. cf. gsl_spline2d_alloc() implementation + */ + if (interp->xarr) + free(interp->xarr); + + free(interp); +} /* gsl_spline2d_free() */ + +double +gsl_spline2d_eval(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel * xa, gsl_interp_accel * ya) +{ + return gsl_interp2d_eval(&(interp->interp_object), interp->xarr, interp->yarr, + interp->zarr, x, y, xa, ya); +} + +int +gsl_spline2d_eval_e(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, + double * z) +{ + return gsl_interp2d_eval_e(&(interp->interp_object), interp->xarr, interp->yarr, + interp->zarr, x, y, xa, ya, z); +} + +double +gsl_spline2d_eval_deriv_x(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel * xa, gsl_interp_accel * ya) +{ + return gsl_interp2d_eval_deriv_x(&(interp->interp_object), interp->xarr, interp->yarr, + interp->zarr, x, y, xa, ya); +} + +int +gsl_spline2d_eval_deriv_x_e(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, + double * z) +{ + return gsl_interp2d_eval_deriv_x_e(&(interp->interp_object), interp->xarr, interp->yarr, + interp->zarr, x, y, xa, ya, z); +} + +double +gsl_spline2d_eval_deriv_y(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel * xa, gsl_interp_accel * ya) +{ + return gsl_interp2d_eval_deriv_y(&(interp->interp_object), interp->xarr, interp->yarr, + interp->zarr, x, y, xa, ya); +} + +int +gsl_spline2d_eval_deriv_y_e(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, + double * z) +{ + return gsl_interp2d_eval_deriv_y_e(&(interp->interp_object), interp->xarr, interp->yarr, + interp->zarr, x, y, xa, ya, z); +} + +double +gsl_spline2d_eval_deriv_xx(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel * xa, gsl_interp_accel * ya) +{ + return gsl_interp2d_eval_deriv_xx(&(interp->interp_object), interp->xarr, interp->yarr, + interp->zarr, x, y, xa, ya); +} + +int +gsl_spline2d_eval_deriv_xx_e(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, + double * z) +{ + return gsl_interp2d_eval_deriv_xx_e(&(interp->interp_object), interp->xarr, interp->yarr, + interp->zarr, x, y, xa, ya, z); +} + +double +gsl_spline2d_eval_deriv_yy(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel * xa, gsl_interp_accel * ya) +{ + return gsl_interp2d_eval_deriv_yy(&(interp->interp_object), interp->xarr, interp->yarr, + interp->zarr, x, y, xa, ya); +} + +int +gsl_spline2d_eval_deriv_yy_e(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, + double * z) +{ + return gsl_interp2d_eval_deriv_yy_e(&(interp->interp_object), interp->xarr, interp->yarr, + interp->zarr, x, y, xa, ya, z); +} + +double +gsl_spline2d_eval_deriv_xy(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel * xa, gsl_interp_accel * ya) +{ + return gsl_interp2d_eval_deriv_xy(&(interp->interp_object), interp->xarr, interp->yarr, + interp->zarr, x, y, xa, ya); +} + +int +gsl_spline2d_eval_deriv_xy_e(const gsl_spline2d * interp, const double x, + const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, + double * z) +{ + return gsl_interp2d_eval_deriv_xy_e(&(interp->interp_object), interp->xarr, interp->yarr, + interp->zarr, x, y, xa, ya, z); +} + +size_t +gsl_spline2d_min_size(const gsl_spline2d * interp) +{ + return gsl_interp2d_min_size(&(interp->interp_object)); +} + +const char * +gsl_spline2d_name(const gsl_spline2d * interp) +{ + return gsl_interp2d_name(&(interp->interp_object)); +} + +int +gsl_spline2d_set(const gsl_spline2d * interp, double zarr[], + const size_t i, const size_t j, const double z) +{ + return gsl_interp2d_set(&(interp->interp_object), zarr, i, j, z); +} /* gsl_spline2d_set() */ + +double +gsl_spline2d_get(const gsl_spline2d * interp, const double zarr[], + const size_t i, const size_t j) +{ + return gsl_interp2d_get(&(interp->interp_object), zarr, i, j); +} /* gsl_spline2d_get() */ diff -Nru gsl-doc-1.16/interpolation/steffen.c gsl-doc-2.3/interpolation/steffen.c --- gsl-doc-1.16/interpolation/steffen.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/interpolation/steffen.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,386 @@ +/* interpolation/steffen.c + * + * Copyright (C) 2014 Jean-François Caron + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* Author: J.-F. Caron + * + * This interpolation method is taken from + * M.Steffen, "A simple method for monotonic interpolation in one dimension", + * Astron. Astrophys. 239, 443-450 (1990). + * + * This interpolation method guarantees monotonic interpolation functions between + * the given data points. A consequence of this is that extremal values can only + * occur at the data points. The interpolating function and its first derivative + * are guaranteed to be continuous, but the second derivative is not. + * + * The implementation is modelled on the existing Akima interpolation method + * previously included in GSL by Gerard Jungman. + */ + +#include +#include +#include +#include +#include +#include "integ_eval.h" +#include + +typedef struct +{ + double * a; /* eqs 2-5 of paper */ + double * b; + double * c; + double * d; + + double * y_prime; /* eq 11 of paper */ +} steffen_state_t; + +static void steffen_free (void * vstate); +static double steffen_copysign(const double x, const double y); + +static void * +steffen_alloc (size_t size) +{ + steffen_state_t *state; + + state = (steffen_state_t *) calloc (1, sizeof (steffen_state_t)); + + if (state == NULL) + { + GSL_ERROR_NULL("failed to allocate space for state", GSL_ENOMEM); + } + + state->a = (double *) malloc (size * sizeof (double)); + + if (state->a == NULL) + { + steffen_free(state); + GSL_ERROR_NULL("failed to allocate space for a", GSL_ENOMEM); + } + + state->b = (double *) malloc (size * sizeof (double)); + + if (state->b == NULL) + { + steffen_free(state); + GSL_ERROR_NULL("failed to allocate space for b", GSL_ENOMEM); + } + + state->c = (double *) malloc (size * sizeof (double)); + + if (state->c == NULL) + { + steffen_free(state); + GSL_ERROR_NULL("failed to allocate space for c", GSL_ENOMEM); + } + + state->d = (double *) malloc (size * sizeof (double)); + + if (state->d == NULL) + { + steffen_free(state); + GSL_ERROR_NULL("failed to allocate space for d", GSL_ENOMEM); + } + + state->y_prime = (double *) malloc (size * sizeof (double)); + if (state->y_prime == NULL) + { + steffen_free(state); + GSL_ERROR_NULL("failed to allocate space for y_prime", GSL_ENOMEM); + } + + return state; +} + +static int +steffen_init (void * vstate, const double x_array[], + const double y_array[], size_t size) +{ + steffen_state_t *state = (steffen_state_t *) vstate; + size_t i; + double *a = state->a; + double *b = state->b; + double *c = state->c; + double *d = state->d; + double *y_prime = state->y_prime; + + /* + * first assign the interval and slopes for the left boundary. + * We use the "simplest possibility" method described in the paper + * in section 2.2 + */ + double h0 = (x_array[1] - x_array[0]); + double s0 = (y_array[1] - y_array[0]) / h0; + + y_prime[0] = s0; + + /* Now we calculate all the necessary s, h, p, and y' variables + from 1 to N-2 (0 to size - 2 inclusive) */ + for (i = 1; i < (size - 1); i++) + { + double pi; + + /* equation 6 in the paper */ + double hi = (x_array[i+1] - x_array[i]); + double him1 = (x_array[i] - x_array[i - 1]); + + /* equation 7 in the paper */ + double si = (y_array[i+1] - y_array[i]) / hi; + double sim1 = (y_array[i] - y_array[i - 1]) / him1; + + /* equation 8 in the paper */ + pi = (sim1*hi + si*him1) / (him1 + hi); + + /* This is a C equivalent of the FORTRAN statement below eqn 11 */ + y_prime[i] = (steffen_copysign(1.0,sim1) + steffen_copysign(1.0,si)) * + GSL_MIN(fabs(sim1), + GSL_MIN(fabs(si), 0.5*fabs(pi))); + } + + /* + * we also need y' for the rightmost boundary; we use the + * "simplest possibility" method described in the paper in + * section 2.2 + * + * y' = s_{n-1} + */ + y_prime[size-1] = (y_array[size - 1] - y_array[size - 2]) / + (x_array[size - 1] - x_array[size - 2]); + + /* Now we can calculate all the coefficients for the whole range. */ + for (i = 0; i < (size - 1); i++) + { + double hi = (x_array[i+1] - x_array[i]); + double si = (y_array[i+1] - y_array[i]) / hi; + + /* These are from equations 2-5 in the paper. */ + a[i] = (y_prime[i] + y_prime[i+1] - 2*si) / hi / hi; + b[i] = (3*si - 2*y_prime[i] - y_prime[i+1]) / hi; + c[i] = y_prime[i]; + d[i] = y_array[i]; + } + + return GSL_SUCCESS; +} + +static void +steffen_free (void * vstate) +{ + steffen_state_t *state = (steffen_state_t *) vstate; + + RETURN_IF_NULL(state); + + if (state->a) + free (state->a); + + if (state->b) + free (state->b); + + if (state->c) + free (state->c); + + if (state->d) + free (state->d); + + if (state->y_prime) + free (state->y_prime); + + free (state); +} + +static int +steffen_eval (const void * vstate, + const double x_array[], const double y_array[], size_t size, + double x, gsl_interp_accel * a, double *y) +{ + const steffen_state_t *state = (const steffen_state_t *) vstate; + + size_t index; + + if (a != 0) + { + index = gsl_interp_accel_find (a, x_array, size, x); + } + else + { + index = gsl_interp_bsearch (x_array, x, 0, size - 1); + } + + /* evaluate */ + { + const double x_lo = x_array[index]; + const double delx = x - x_lo; + const double a = state->a[index]; + const double b = state->b[index]; + const double c = state->c[index]; + const double d = state->d[index]; + /* Use Horner's scheme for efficient evaluation of polynomials. */ + /* *y = a*delx*delx*delx + b*delx*delx + c*delx + d; */ + *y = d + delx*(c + delx*(b + delx*a)); + + return GSL_SUCCESS; + } +} + +static int +steffen_eval_deriv (const void * vstate, + const double x_array[], const double y_array[], size_t size, + double x, gsl_interp_accel * a, double *dydx) +{ + const steffen_state_t *state = (const steffen_state_t *) vstate; + + size_t index; + + /* DISCARD_POINTER(y_array); /\* prevent warning about unused parameter *\/ */ + + if (a != 0) + { + index = gsl_interp_accel_find (a, x_array, size, x); + } + else + { + index = gsl_interp_bsearch (x_array, x, 0, size - 1); + } + + /* evaluate */ + { + double x_lo = x_array[index]; + double delx = x - x_lo; + double a = state->a[index]; + double b = state->b[index]; + double c = state->c[index]; + /*double d = state->d[index];*/ + /* *dydx = 3*a*delx*delx*delx + 2*b*delx + c; */ + *dydx = c + delx*(2*b + delx*3*a); + return GSL_SUCCESS; + } +} + +static int +steffen_eval_deriv2 (const void * vstate, + const double x_array[], const double y_array[], size_t size, + double x, gsl_interp_accel * a, double *y_pp) +{ + const steffen_state_t *state = (const steffen_state_t *) vstate; + + size_t index; + + /* DISCARD_POINTER(y_array); /\* prevent warning about unused parameter *\/ */ + + if (a != 0) + { + index = gsl_interp_accel_find (a, x_array, size, x); + } + else + { + index = gsl_interp_bsearch (x_array, x, 0, size - 1); + } + + /* evaluate */ + { + const double x_lo = x_array[index]; + const double delx = x - x_lo; + const double a = state->a[index]; + const double b = state->b[index]; + *y_pp = 6*a*delx + 2*b; + return GSL_SUCCESS; + } +} + +static int +steffen_eval_integ (const void * vstate, + const double x_array[], const double y_array[], size_t size, + gsl_interp_accel * acc, double a, double b, + double * result) +{ + /* a and b are the boundaries of the integration. */ + + const steffen_state_t *state = (const steffen_state_t *) vstate; + + size_t i, index_a, index_b; + + /* Find the data points in the x_array that are nearest to the desired */ + /* a and b integration boundaries. */ + + if (acc != 0) + { + index_a = gsl_interp_accel_find (acc, x_array, size, a); + index_b = gsl_interp_accel_find (acc, x_array, size, b); + } + else + { + index_a = gsl_interp_bsearch (x_array, a, 0, size - 1); + index_b = gsl_interp_bsearch (x_array, b, 0, size - 1); + } + + *result = 0.0; + + /* Iterate over all the segments between data points and sum the */ + /* contributions into result. */ + for(i=index_a; i<=index_b; i++) + { + const double x_hi = x_array[i + 1]; + const double x_lo = x_array[i]; + const double dx = x_hi - x_lo; + if(dx != 0.0) + { + /* + * check if we are at a boundary point, so take the + * a and b parameters instead of the data points. + */ + double x1 = (i == index_a) ? a-x_lo : 0.0; + double x2 = (i == index_b) ? b-x_lo : x_hi-x_lo; + + *result += (1.0/4.0)*state->a[i]*(x2*x2*x2*x2 - x1*x1*x1*x1) + +(1.0/3.0)*state->b[i]*(x2*x2*x2 - x1*x1*x1) + +(1.0/2.0)*state->c[i]*(x2*x2 - x1*x1) + +state->d[i]*(x2-x1); + } + else /* if the interval was zero, i.e. consecutive x values in data. */ + { + *result = 0.0; + return GSL_EINVAL; + } + } + + return GSL_SUCCESS; +} + +static double +steffen_copysign(const double x, const double y) +{ + if ((x < 0 && y > 0) || (x > 0 && y < 0)) + return -x; + + return x; +} + +static const gsl_interp_type steffen_type = +{ + "steffen", + 3, + &steffen_alloc, + &steffen_init, + &steffen_eval, + &steffen_eval_deriv, + &steffen_eval_deriv2, + &steffen_eval_integ, + &steffen_free +}; + +const gsl_interp_type * gsl_interp_steffen = &steffen_type; diff -Nru gsl-doc-1.16/interpolation/test2d.c gsl-doc-2.3/interpolation/test2d.c --- gsl-doc-1.16/interpolation/test2d.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/interpolation/test2d.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,344 @@ +/* interpolation/test2d.c + * + * Copyright 2012 David Zaslavsky + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* tests a single evaluator function from the low-level interface */ +static int +test_single_low_level( + double (*evaluator)(const gsl_interp2d *, const double[], const double[], + const double[], const double, const double, + gsl_interp_accel *, gsl_interp_accel *), + int (*evaluator_e)(const gsl_interp2d *, const double[], const double[], + const double[], const double, const double, + gsl_interp_accel *, gsl_interp_accel *, double *), + const gsl_interp2d * interp, const double xarr[], const double yarr[], + const double zarr[], const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, + const double expected_results[], size_t i) +{ + if (expected_results != NULL) + { + int status; + double result = evaluator(interp, xarr, yarr, zarr, x, y, xa, ya); + gsl_test_rel(result, expected_results[i], 1e-10, + "low level %s %d", gsl_interp2d_name(interp), i); + + status = evaluator_e(interp, xarr, yarr, zarr, x, y, xa, ya, &result); + if (status == GSL_SUCCESS) + { + gsl_test_rel(result, expected_results[i], 1e-10, + "low level _e %s %d", gsl_interp2d_name(interp), i); + } + } + + return 0; +} + +/* tests a single evaluator function from the high-level interface */ +static int +test_single_high_level( + double (*evaluator)(const gsl_spline2d *, const double, const double, + gsl_interp_accel *, gsl_interp_accel *), + int (*evaluator_e)(const gsl_spline2d *, const double, const double, + gsl_interp_accel *, gsl_interp_accel *, double *), + const gsl_spline2d * interp, const double x, const double y, + gsl_interp_accel * xa, gsl_interp_accel * ya, + const double expected_results[], size_t i) +{ + if (expected_results != NULL) + { + int status; + double result = evaluator(interp, x, y, xa, ya); + + gsl_test_rel(result, expected_results[i], 1e-10, + "high level %s %d", gsl_spline2d_name(interp), i); + + status = evaluator_e(interp, x, y, xa, ya, &result); + if (status == GSL_SUCCESS) + { + gsl_test_rel(result, expected_results[i], 1e-10, + "high level _e %s %d", gsl_spline2d_name(interp), i); + } + } + + return 0; +} + +/* + * Tests that a given interpolation type reproduces the data points + * it is given, and then tests that it correctly reproduces additional + * values. + */ +static int +test_interp2d( +const double xarr[], const double yarr[], const double zarr[], /* data */ + size_t xsize, size_t ysize, /* array sizes */ + const double xval[], const double yval[], /* test points */ + const double zval[], /* expected results */ + const double zxval[], const double zyval[], + const double zxxval[], const double zyyval[], const double zxyval[], + size_t test_size, /* number of test points */ + const gsl_interp2d_type * T) +{ + gsl_interp_accel *xa = gsl_interp_accel_alloc(); + gsl_interp_accel *ya = gsl_interp_accel_alloc(); + int status = 0; + size_t xi, yi, zi, i; + gsl_interp2d * interp = gsl_interp2d_alloc(T, xsize, ysize); + gsl_spline2d * interp_s = gsl_spline2d_alloc(T, xsize, ysize); + unsigned int min_size = gsl_interp2d_type_min_size(T); + + gsl_test_int(min_size, T->min_size, "gsl_interp2d_type_min_size on %s", gsl_interp2d_name(interp)); + + gsl_interp2d_init(interp, xarr, yarr, zarr, xsize, ysize); + gsl_spline2d_init(interp_s, xarr, yarr, zarr, xsize, ysize); + + /* First check that the interpolation reproduces the given points */ + for (xi = 0; xi < xsize; xi++) + { + double x = xarr[xi]; + for (yi = 0; yi < ysize; yi++) + { + double y = yarr[yi]; + + zi = gsl_interp2d_idx(interp, xi, yi); + test_single_low_level(&gsl_interp2d_eval, &gsl_interp2d_eval_e, + interp, xarr, yarr, zarr, x, y, + xa, ya, zarr, zi); + test_single_low_level(&gsl_interp2d_eval_extrap, + &gsl_interp2d_eval_e_extrap, interp, + xarr, yarr, zarr, x, y, xa, ya, zarr, zi); + test_single_high_level(&gsl_spline2d_eval, &gsl_spline2d_eval_e, + interp_s, x, y, xa, ya, zarr, zi); + } + } + + /* Then check additional points provided */ + for (i = 0; i < test_size; i++) + { + double x = xval[i]; + double y = yval[i]; + + test_single_low_level(&gsl_interp2d_eval, &gsl_interp2d_eval_e, interp, xarr, yarr, zarr, x, y, xa, ya, zval, i); + test_single_low_level(&gsl_interp2d_eval_deriv_x, &gsl_interp2d_eval_deriv_x_e, interp, xarr, yarr, zarr, x, y, xa, ya, zxval, i); + test_single_low_level(&gsl_interp2d_eval_deriv_y, &gsl_interp2d_eval_deriv_y_e, interp, xarr, yarr, zarr, x, y, xa, ya, zyval, i); + test_single_low_level(&gsl_interp2d_eval_deriv_xx,&gsl_interp2d_eval_deriv_xx_e, interp, xarr, yarr, zarr, x, y, xa, ya, zxxval, i); + test_single_low_level(&gsl_interp2d_eval_deriv_yy,&gsl_interp2d_eval_deriv_yy_e, interp, xarr, yarr, zarr, x, y, xa, ya, zyyval, i); + test_single_low_level(&gsl_interp2d_eval_deriv_xy,&gsl_interp2d_eval_deriv_xy_e, interp, xarr, yarr, zarr, x, y, xa, ya, zxyval, i); + + test_single_high_level(&gsl_spline2d_eval, &gsl_spline2d_eval_e, interp_s, x, y, xa, ya, zval, i); + test_single_high_level(&gsl_spline2d_eval_deriv_x, &gsl_spline2d_eval_deriv_x_e, interp_s, x, y, xa, ya, zxval, i); + test_single_high_level(&gsl_spline2d_eval_deriv_y, &gsl_spline2d_eval_deriv_y_e, interp_s, x, y, xa, ya, zyval, i); + test_single_high_level(&gsl_spline2d_eval_deriv_xx,&gsl_spline2d_eval_deriv_xx_e, interp_s, x, y, xa, ya, zxxval, i); + test_single_high_level(&gsl_spline2d_eval_deriv_yy,&gsl_spline2d_eval_deriv_yy_e, interp_s, x, y, xa, ya, zyyval, i); + test_single_high_level(&gsl_spline2d_eval_deriv_xy,&gsl_spline2d_eval_deriv_xy_e, interp_s, x, y, xa, ya, zxyval, i); + + test_single_low_level(&gsl_interp2d_eval_extrap, &gsl_interp2d_eval_e_extrap, interp, xarr, yarr, zarr, x, y, xa, ya, zval, i); + } + + gsl_interp_accel_free(xa); + gsl_interp_accel_free(ya); + gsl_interp2d_free(interp); + gsl_spline2d_free(interp_s); + + return status; +} + +/* + * Tests bilinear interpolation using a symmetric function, f(x,y)==f(y,x), + * and diagonal interpolation points (x,y) where x==y. If these tests don't + * pass, something is seriously broken. + */ +static int +test_bilinear_symmetric() +{ + int status; + double xarr[] = {0.0, 1.0, 2.0, 3.0}; + double yarr[] = {0.0, 1.0, 2.0, 3.0}; + double zarr[] = {1.0, 1.1, 1.2, 1.3, + 1.1, 1.2, 1.3, 1.4, + 1.2, 1.3, 1.4, 1.5, + 1.3, 1.4, 1.5, 1.6}; + double xval[] = {0.0, 0.5, 1.0, 1.5, 2.5, 3.0}; + double yval[] = {0.0, 0.5, 1.0, 1.5, 2.5, 3.0}; + double zval[] = {1.0, 1.1, 1.2, 1.3, 1.5, 1.6}; + size_t xsize = sizeof(xarr) / sizeof(xarr[0]); + size_t ysize = sizeof(yarr) / sizeof(yarr[0]); + size_t test_size = sizeof(xval) / sizeof(xval[0]); + + status = test_interp2d(xarr, yarr, zarr, xsize, ysize, xval, yval, zval, + NULL, NULL, NULL, NULL, NULL, test_size, + gsl_interp2d_bilinear); + gsl_test(status, "bilinear interpolation with symmetric values"); + + return status; +} + +/* + * Tests bilinear interpolation with an asymmetric function, f(x,y)!=f(y,x), + * and off-diagonal interpolation points (x,y) where x and y may or may not + * be equal. + */ +static int +test_bilinear_asymmetric_z() +{ + int status; + double xarr[] = {0.0, 1.0, 2.0, 3.0}; + double yarr[] = {0.0, 1.0, 2.0, 3.0}; + double zarr[] = {1.0, 1.1, 1.2, 1.4, + 1.3, 1.4, 1.5, 1.7, + 1.5, 1.6, 1.7, 1.9, + 1.6, 1.9, 2.2, 2.3}; + double xval[] = { 0.0, 0.5, 1.0, 1.5, 2.5, 3.0, + 1.3954, 1.6476, 0.824957, + 2.41108, 2.98619, 1.36485 }; + double yval[] = {0.0, 0.5, 1.0, 1.5, 2.5, 3.0, + 0.265371, 2.13849, 1.62114, + 1.22198, 0.724681, 0.0596087 }; + + /* results computed using Mathematica 9.0.1.0 */ + double zval[] = {1.0, 1.2, 1.4, 1.55, 2.025, 2.3, + 1.2191513, 1.7242442248, 1.5067237, + 1.626612, 1.6146423, 1.15436761}; + size_t xsize = sizeof(xarr) / sizeof(xarr[0]); + size_t ysize = sizeof(yarr) / sizeof(yarr[0]); + size_t test_size = sizeof(xval) / sizeof(xval[0]); + + status = test_interp2d(xarr, yarr, zarr, xsize, ysize, xval, yval, zval, + NULL, NULL, NULL, NULL, NULL, test_size, + gsl_interp2d_bilinear); + gsl_test(status, "bilinear interpolation with asymmetric z values"); + + return status; +} + +static int +test_bicubic() +{ + int status; + double xarr[] = {0.0, 1.0, 2.0, 3.0}; + double yarr[] = {0.0, 1.0, 2.0, 3.0}; + double zarr[] = {1.0, 1.1, 1.2, 1.3, + 1.1, 1.2, 1.3, 1.4, + 1.2, 1.3, 1.4, 1.5, + 1.3, 1.4, 1.5, 1.6}; + double xval[] = {1.0, 1.5, 2.0}; + double yval[] = {1.0, 1.5, 2.0}; + double zval[] = {1.2, 1.3, 1.4}; + size_t xsize = sizeof(xarr) / sizeof(xarr[0]); + size_t ysize = sizeof(yarr) / sizeof(yarr[0]); + size_t test_size = sizeof(xval) / sizeof(xval[0]); + + status = test_interp2d(xarr, yarr, zarr, xsize, ysize, xval, yval, zval, + NULL, NULL, NULL, NULL, NULL, test_size, + gsl_interp2d_bicubic); + gsl_test(status, "bicubic interpolation on linear function"); + + return status; +} + +static int +test_bicubic_nonlinear() +{ + int status; + double xarr[] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0}; + double yarr[] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0}; + /* least common multiple of x and y */ + double zarr[] = { 1, 2, 3, 4, 5, 6, 7, 8, + 2, 2, 6, 4, 10, 6, 14, 8, + 3, 6, 3, 12, 15, 6, 21, 24, + 4, 4, 12, 4, 20, 12, 28, 8, + 5, 10, 15, 20, 5, 30, 35, 40, + 6, 6, 6, 12, 30, 6, 42, 24, + 7, 14, 21, 28, 35, 42, 7, 56, + 8, 8, 24, 8, 40, 24, 56, 8}; + double xval[] = {1.4, 2.3, 4.7, 3.3, 7.5, 6.6, 5.1}; + double yval[] = {1.0, 1.8, 1.9, 2.5, 2.7, 4.1, 3.3}; + + /* results computed using GSL 1D cubic interpolation twice */ + double zval[] = { 1.4, 3.11183531264736, 8.27114315792559, 5.03218982537718, + 22.13230634702637, 23.63206834997871, 17.28553080971182 }; + size_t xsize = sizeof(xarr) / sizeof(xarr[0]); + size_t ysize = sizeof(yarr) / sizeof(yarr[0]); + size_t test_size = sizeof(xval) / sizeof(xval[0]); + + status = test_interp2d(xarr, yarr, zarr, xsize, ysize, xval, yval, zval, + NULL, NULL, NULL, NULL, NULL, test_size, + gsl_interp2d_bicubic); + gsl_test(status, "bicubic interpolation on nonlinear symmetric function"); + + return status; +} + +/* This function contributed by Andrew W. Steiner */ +static int +test_bicubic_nonlinear_nonsq() +{ + int status; + double xarr[] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0}; + double yarr[] = {1.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0}; + double zarr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 2, 2, 6, 4, 10, 6, 14, 8, 11, 12, + 3, 6, 3, 12, 15, 6, 21, 24, 13, 14, + 4, 4, 12, 4, 20, 12, 28, 8, 15, 16, + 5, 10, 15, 20, 5, 30, 35, 40, 17, 18, + 6, 6, 6, 12, 30, 6, 42, 24, 19, 20, + 7, 14, 21, 28, 35, 42, 7, 56, 21, 22, + 8, 8, 24, 8, 40, 24, 56, 8, 23, 24}; + double xval[] = {1.4, 2.3, 9.7, 3.3, 9.5, 6.6, 5.1}; + double yval[] = {1.0, 1.8, 1.9, 2.5, 2.7, 4.1, 3.3}; + + /* results computed using GSL 1D cubic interpolation twice */ + double zval[] = { 1.4, 2.46782030941187003, 10.7717721621846465, + 4.80725067958096375, 11.6747032398627297, + 11.2619968682970111, 9.00168877916872567}; + size_t xsize = sizeof(xarr) / sizeof(xarr[0]); + size_t ysize = sizeof(yarr) / sizeof(yarr[0]); + size_t test_size = sizeof(xval) / sizeof(xval[0]); + + status = test_interp2d(xarr, yarr, zarr, xsize, ysize, xval, yval, zval, + NULL, NULL, NULL, NULL, NULL, test_size, + gsl_interp2d_bicubic); + gsl_test(status, "bicubic interpolation on nonlinear symmetric function"); + + return status; +} + +/* runs all the tests */ +int +test_interp2d_main(void) +{ + int status = 0; + + status += test_bilinear_symmetric(); + status += test_bilinear_asymmetric_z(); + status += test_bicubic(); + status += test_bicubic_nonlinear(); + status += test_bicubic_nonlinear_nonsq(); + + return status; +} diff -Nru gsl-doc-1.16/interpolation/test.c gsl-doc-2.3/interpolation/test.c --- gsl-doc-1.16/interpolation/test.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/interpolation/test.c 2015-11-03 16:21:55.000000000 +0000 @@ -1,6 +1,7 @@ /* interpolation/test.c * - * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman + * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2014 Gerard Jungman + * Copyright (C) 2014 Jean-François Caron * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,6 +31,8 @@ #include #include +#include "test2d.c" + int test_bsearch(void) { @@ -938,8 +941,6 @@ return s; } - - static int test_akima (void) { @@ -962,6 +963,247 @@ return s; } +static int +test_steffen1 (void) +{ + int s; + + double data_x[5] = { 0.0, 1.0, 2.0, 3.0, 4.0 }; + double data_y[5] = { 0.0, 1.0, 2.0, 3.0, 4.0 }; + + double test_x[6] = { 0.0, 0.5, 1.0, 2.0, 2.5, 3.95 }; + double test_y[6] = { 0.0, 0.5, 1.0, 2.0, 2.5, 3.95 }; + double test_dy[6] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 }; + double test_iy[6] = { 0.0, 0.125, 0.5, 2.0, 3.125, 7.80125 }; + + xy_table data_table = make_xy_table(data_x, data_y, 5); + xy_table test_table = make_xy_table(test_x, test_y, 4); + xy_table test_d_table = make_xy_table(test_x, test_dy, 4); + xy_table test_i_table = make_xy_table(test_x, test_iy, 4); + + s = test_interp (&data_table, gsl_interp_steffen, &test_table, &test_d_table, &test_i_table); + gsl_test (s, "steffen interpolation test 1"); + return s; +} + +static int +test_steffen2 (void) +{ + int s; + + double data_x[30] = { + 4.673405471947611, 4.851675778029557, 6.185473620119991, + 7.066003430727031, 7.236222118389267, 7.82067161881444, + 8.054504031621493, 8.615033792800752, 9.16666529764867, + 9.442092828126395, 10.719577968900381, 11.741967577609238, + 12.564881194673035, 12.938424721515084, 12.985892202096888, + 13.995771653255744, 14.459157783380315, 15.834857667614848, + 15.887779086499942, 18.64645279534696, 19.256361741244287, + 19.85100457105047, 19.943627313550987, 20.5033910115468, + 20.895380493234843, 21.759942483053962, 21.948984866760803, + 22.2504057728461, 22.741860290952104, 23.088720630939164 }; + + double data_y[30] = { + -6.131584089652438, 4.997132870704837, 9.50359639889188, + -3.788474042493764, 1.98825324341826, -6.553460294945401, + 8.44565760012345, -3.643687601520438, -4.720262269613782, + -5.31956608504474, 4.7484698519996655, 1.8191111043001218, + 2.7234424260251124, -7.282776099988966, -6.966038807035955, + 2.6047260012112545, -3.6363485275348033, -4.124714595822157, + -4.820986899771757, -2.8550035950284602, 6.017204757558943, + 6.7275899382734075, -9.423359755713639, -0.3645325139870703, + 6.925739188986089, -0.07843256857855074, 1.6744315603866244, + -8.332083151442944, 6.059246349756446, -7.360159198725659 }; + + double test_x[129] = { + 4.6734054719476106,4.8516757780295574,4.8575586235375265, + 5.0417117751274407,5.2258649267173567,5.4100180783072727, + 5.5941712298971886,5.7783243814871028,5.9624775330770188, + 6.1466306846669347,6.1854736201199909,6.3307838362568507, + 6.5149369878467667,6.6990901394366809,6.8832432910265968, + 7.0660034307270312,7.0673964426165128,7.236222118389267, + 7.2515495942064288,7.4357027457963438,7.6198558973862589, + 7.8040090489761749,7.8206716188144396,7.9881622005660908, + 8.0545040316214926,8.172315352156005,8.356468503745921, + 8.5406216553358369,8.6150337928007517,8.7247748069257529, + 8.9089279585156689,9.0930811101055831,9.1666652976486702, + 9.277234261695499,9.4420928281263947,9.461387413285415, + 9.645540564875331,9.8296937164652469,10.013846868055161, + 10.198000019645077,10.382153171234993,10.566306322824907, + 10.719577968900381,10.750459474414823,10.934612626004739, + 11.118765777594655,11.302918929184571,11.487072080774485, + 11.671225232364399,11.741967577609238,11.855378383954315, + 12.039531535544231,12.223684687134147,12.407837838724063, + 12.564881194673035,12.591990990313979,12.776144141903895, + 12.938424721515084,12.960297293493811,12.985892202096888, + 13.144450445083727,13.328603596673641,13.512756748263556, + 13.696909899853472,13.881063051443387,13.995771653255744, + 14.065216203033303,14.249369354623219,14.433522506213134, + 14.459157783380315,14.617675657803051,14.801828809392966, + 14.985981960982881,15.170135112572796,15.354288264162712, + 15.538441415752628,15.722594567342544,15.834857667614848, + 15.90674771893246,15.887779086499942,16.090900870522375, + 16.27505402211229,16.459207173702204,16.643360325292122, + 16.827513476882036,17.01166662847195,17.195819780061868, + 17.379972931651782,17.5641260832417,17.748279234831614, + 17.932432386421532,18.116585538011446,18.300738689601364, + 18.484891841191278,18.64645279534696,18.669044992781188, + 18.853198144371106,19.03735129596102,19.221504447550938, + 19.256361741244287,19.405657599140852,19.58981075073077, + 19.773963902320684,19.851004571050471,19.958117053910598, + 19.943627313550987,20.142270205500516,20.32642335709043, + 20.5033910115468,20.510576508680348,20.694729660270262, + 20.87888281186018,20.895380493234843,21.063035963450094, + 21.247189115040012,21.431342266629926,21.61549541821984, + 21.759942483053962,21.799648569809754,21.948984866760803, + 21.983801721399669,22.167954872989586,22.250405772846101, + 22.352108024579501,22.536261176169418,22.720414327759332, + 22.741860290952104,22.90456747934925,23.088720630939164 }; + + double test_y[129] = { + -6.1315840896524376, 4.9971328707048368, 5.0367975988827167, + 6.1897906340782765, 7.170975366812117, 7.9803517970842286, + 8.6179199248946077, 9.083679750243256, 9.3776312731301772, + 9.4997744935553676, 9.5035963988918795, 8.5371013292095554, + 5.3135045284256019, 1.2120062346303317, -2.3083133782071208, + -3.788474042493764, -3.7873197326712797, 1.98825324341826, + 1.9709370138809248, -0.31768851396215103, -4.2211558425051745, + -6.5330277558649303, -6.5534602949454008, 5.5087083141507147, + 8.4456576001234502, 7.1443430435268214, 1.9932653799771245, + -2.8426372908118083, -3.6436876015204378, -3.9926784426485034, + -4.3315242293057175, -4.5849882013553547, -4.7202622696137819, + -5.0157009305506106, -5.3195660850447402, -5.3127453670702938, + -4.6348437675141847, -3.1014810884327102, -1.0745634258401102, + 1.0840031242494419, 3.0123124658217071, 4.3484585028624627, + 4.7484698519996655, 4.740613456600772, 4.4142234654988952, + 3.7574719541934956, 2.9757785771330334, 2.274562988765974, + 1.8592448435407634, 1.8191111043001218, 1.8659054809992697, + 2.0883298868527498, 2.3859686670095699, 2.6372078307738107, + 2.7234424260251124, 2.5729816013335247, -3.258105131647655, + -7.2827760999889657, -7.179945071809863, -6.9660388070359547, + -5.5662805880783406, -3.3905902235190721, -1.0497645733987406, + 1.0095869363327665, 2.3408548797255095, 2.6047260012112545, + 2.2325150500282476, -0.91241316251151927, -3.5649171021138555, + -3.6363485275348033, -3.7309363021244821, -3.8038342533632736, + -3.8503835649797429, -3.8846412514674595, -3.920664327319995, + -3.9725098070309213, -4.0542347050938083, -4.1247145958221569, + -4.8208939493861829, -4.8209868997717571, -4.8103284962540727, + -4.7822416973267625, -4.7366335526042516, -4.6735040620865389, + -4.5928532257736272, -4.4946810436655156, -4.3789875157622005, + -4.2457726420636881, -4.0950364225699714, -3.9267788572810582, + -3.7409999461969403, -3.537699689317626, -3.3168780866431069, + -3.0785351381733914, -2.8550035950284602, -2.7914506045621672, + -0.46968123806956008, 3.263658433044764, 5.8622198554846658, + 6.0172047575589431, 6.3291356295622618, 6.5905310151592165, + 6.7156659481449141, 6.7275899382734075, -9.4118959280855066, + -9.4233597557136388, -7.6111870705157543, -3.9651685725226056, + -0.36453251398707032, -0.23537781181431175, 4.0332797539781309, + 6.899794364641159, 6.9257391889860891, 6.2377210430025594, + 4.3902665602806792, 2.1878722453596344, 0.44278317319805183, + -0.078432568578550743, 0.12107113682074738, 1.6744315603866244, + 1.3047436323966959, -6.4955024539509765, -8.3320831514429443, + -6.7382472104931805, 0.61052993339902706, 5.9794239504090552, + 6.0592463497564459, 1.5387265272596853, -7.3601591987256612 }; + + double test_dy[129] = { + 62.426083204466224, 6.757341159173202, 6.727537246743899, + 5.7945730211610407, 4.8616087955781726, 3.9286445699953054, + 2.9956803444124378, 2.0627161188295791, 1.1297518932467119, + 0.1967876676638447, 0, -12.480296842307126, + -21.209126982426163, -22.014768399615317, -14.897221093874615, + 0, 1.65274069980919, 0, + -2.2393981239975669, -19.714311699236049, -19.77742868994725, + -2.4287490961310456, 0, 78.213312807624717, + 0, -20.358420305108574, -31.350476855816961, + -16.93545425712459, -3.9032385156832157, -2.5401833171916435, + -1.3740294011308083, -1.6128919418291603, -2.1012124848241789, + -2.8800570317456784, 0, 0.70341285683675259, + 6.3314138906742139, 9.9941697310971538, 11.69168037810557, + 11.42394583169949, 9.1909660918788916, 4.992741158643824, + 0, -0.50358091648162351, -2.8552721239834269, + -4.0914806331173992, -4.2122064438835425, -3.2174495562818706, + -1.1072099703123885, 0, 0.78347408424733667, + 1.5221058615312819, 1.6003417148468082, 1.018181644193916, + 0, -10.817925943273289, -39.490030870551372, + 0, 8.0126635338650072, 6.7986203849007927, + 10.557804177353285, 12.667135433334296, 12.351260158262027, + 9.6101783521364421, 4.44389001495753, 0, + -10.1306309231183, -19.882866043398995, -4.7826445467139278, + -0.70998925548225966, -0.49283947499262398, -0.31159279753453034, + -0.20667940230488324, -0.17809928930368468, -0.22585245853093405, + -0.3499389099866323, -0.55035864367077902, -0.70998925548225966, + 0.0098004308855327432, 0, 0.10494594234665755, + 0.20009145380778143, 0.2952369652689053, 0.39038247673003107, + 0.48552798819115495, 0.58067349965227877, 0.67581901111340459, + 0.77096452257452841, 0.86611003403565412, 0.96125554549677805, + 1.0564010569579039, 1.1515465684190276, 1.2466920798801533, + 1.3418375913412772, 1.4253105022449177, 4.1661049863071913, + 18.74497348837053, 19.496500284294363, 6.4206853740787171, + 2.3892836005304425, 1.7894106566060179, 1.0494805960296585, + 0.30955053545331346, 0, 1.5724451183167569, + 0, 16.386389851530527, 21.613477536080744, + 17.603560096681914, 18.338573561497682, 23.697110333020628, + 3.1105642331329868, 0, -7.5982202651552164, + -11.73098890423519, -11.453053366134201, -6.7644136508523696, + 0, 9.2309078320594402, 0, + -20.350273706124355, -39.581660196515507, 0, + 28.835095151183879, 42.753317235684989, 7.3325239511975031, + 0, -47.053315974301256, -38.688209637869583 }; + + double test_iy[129] = { + 0, 0.046311303303274043, 0.07582542065258166, + 1.1121678097008914, 2.345017979757877, 3.7427368904558875, + 5.2736855014272832, 6.9062247723044061, 8.6087156627196464, + 10.349519132305348, 10.718617229125304, 12.051326255780914, + 13.351310568583624, 13.954434023333466, 13.833375399536308, + 13.23478503216295, 13.229508179502936, 13.081569421202504, + 13.111955459764134, 13.313565584429645, 12.895822708651364, + 11.856586384851303, 11.747502930901248, 11.477166081331394, + 11.968731461589641, 12.910617813249443, 13.783041410703255, + 13.664096839344904, 13.416752727534579, 12.996373500853053, + 12.226613834386363, 11.406286934906419, 11.064147626707395, + 10.526693424249395, 9.6682418398824055, 9.5656469982362644, + 8.633802142647145, 7.911116775692733, 7.5218036771498298, + 7.5234294786346014, 7.9069146636026106, 8.5965335673487839, + 9.3034583640488648, 9.4500169740341917, 10.299608964240058, + 11.055524261651918, 11.675840089542856, 12.156462347951148, + 12.53112561368027, 12.660771626086403, 12.868892222896084, + 13.230897278463143, 13.642654271367054, 14.106816365848598, + 14.529836204259333, 14.602291235557717, 14.620235691106975, + 13.678281413948246, 13.51979351456291, 13.338827208895861, + 12.337400222501822, 11.506721190837634, 11.098761199438101, + 11.102808164918775, 11.425905470576772, 11.714428553431798, + 11.886459852625201, 12.035570442032403, 11.580639494361572, + 11.488113239473538, 10.903735363611753, 10.209447282562856, + 9.5043766268555689, 8.7920812597559994, 8.0735304010092825, + 7.347104626839644, 6.6085958699503662, 6.1496664193039994, + 5.821344166329677, 5.9127911070795323, 4.9342652985615576, + 4.050745397809842, 3.1740110751228041, 2.3072889415487108, + 1.4538056081358768, 0.61678768593257072, -0.20053821401294236, + -0.99494548065234767, -1.7632075029373926, -2.5020976698197641, + -3.2083893702512087, -3.8788559931834152, -4.5102709275681283, + -5.0994075623570394, -5.5789032190742072, -5.6428026999265457, + -5.9842769011998804, -5.729140886963938, -4.8519085924998322, + -4.6444581063590329, -3.7217151397093993, -2.5300254086689806, + -1.3027452894525609, -0.78475347239267057, -1.0460847630211827, + -0.90959826921338605, -2.6553766359304607, -3.7360597404585745, + -4.1087031972797643, -4.1108616867222691, -3.776307276733156, + -2.7114490122334045, -2.5973338374383879, -1.4760729895576692, + -0.48580494729501034, 0.11910209432525942, 0.34807359178739627, + 0.36262668088219696, 0.3622604193055981, 0.51348240778475363, + 0.56740090208414018, 0.14380211642697149, -0.48989527970345625, + -1.2810928311228711, -1.8846453955503084, -1.1777647142370817, + -1.0483932372566702, -0.32646483194908105, -0.88612247621927298 }; + + xy_table data_table = make_xy_table(data_x, data_y, 30); + xy_table test_table = make_xy_table(test_x, test_y, 129); + xy_table test_d_table = make_xy_table(test_x, test_dy, 129); + xy_table test_i_table = make_xy_table(test_x, test_iy, 129); + + s = test_interp (&data_table, gsl_interp_steffen, &test_table, &test_d_table, &test_i_table); + gsl_test (s, "steffen interpolation test 2"); + return s; +} int main (int argc, char **argv) @@ -982,6 +1224,10 @@ status += test_csplinep(); status += test_csplinep2(); status += test_akima(); + status += test_steffen1(); + status += test_steffen2(); + + status += test_interp2d_main(); exit (gsl_test_summary()); } diff -Nru gsl-doc-1.16/linalg/apply_givens.c gsl-doc-2.3/linalg/apply_givens.c --- gsl-doc-1.16/linalg/apply_givens.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/linalg/apply_givens.c 2015-11-03 16:21:55.000000000 +0000 @@ -111,15 +111,3 @@ } #endif } - -inline static void -apply_givens_vec (gsl_vector * v, size_t i, size_t j, double c, double s) -{ - /* Apply rotation to vector v' = G^T v */ - - double vi = gsl_vector_get (v, i); - double vj = gsl_vector_get (v, j); - gsl_vector_set (v, i, c * vi - s * vj); - gsl_vector_set (v, j, s * vi + c * vj); -} - diff -Nru gsl-doc-1.16/linalg/balance.c gsl-doc-2.3/linalg/balance.c --- gsl-doc-1.16/linalg/balance.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/linalg/balance.c 2015-11-03 16:21:55.000000000 +0000 @@ -19,7 +19,7 @@ /* Balance a general matrix by scaling the columns * - * B = A D + * A_new = A D^{-1} * * where D is a diagonal matrix */ diff -Nru gsl-doc-1.16/linalg/cholesky.c gsl-doc-2.3/linalg/cholesky.c --- gsl-doc-1.16/linalg/cholesky.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/linalg/cholesky.c 2016-08-30 15:20:38.000000000 +0000 @@ -1,10 +1,8 @@ /* Cholesky Decomposition * - * Copyright (C) 2000 Thomas Walter - * - * 03 May 2000: Modified for GSL by Brian Gough - * 29 Jul 2005: Additions by Gerard Jungman - * Copyright (C) 2000,2001, 2002, 2003, 2005, 2007 Brian Gough, Gerard Jungman + * Copyright (C) 2000 Thomas Walter + * Copyright (C) 2000, 2001, 2002, 2003, 2005, 2007 Brian Gough, Gerard Jungman + * Copyright (C) 2016 Patrick Alken * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -15,6 +13,10 @@ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. + * + * 03 May 2000: Modified for GSL by Brian Gough + * 29 Jul 2005: Additions by Gerard Jungman + * 04 Mar 2016: Change Cholesky algorithm to gaxpy version by Patrick Alken */ /* @@ -40,16 +42,49 @@ #include #include -static inline -double -quiet_sqrt (double x) - /* avoids runtime error, for checking matrix for positive definiteness */ +static double cholesky_norm1(const gsl_matrix * LLT, gsl_vector * work); +static int cholesky_Ainv(CBLAS_TRANSPOSE_t TransA, gsl_vector * x, void * params); + +/* +In GSL 2.2, we decided to modify the behavior of the Cholesky decomposition +to store the Cholesky factor in the lower triangle, and store the original +matrix in the upper triangle. Previous versions stored the Cholesky factor in +both places. The routine gsl_linalg_cholesky_decomp1 was added for the new +behavior, and gsl_linalg_cholesky_decomp is maintained for backward compatibility. +It will be removed in a future release. +*/ + +int +gsl_linalg_cholesky_decomp (gsl_matrix * A) { - return (x >= 0) ? sqrt(x) : GSL_NAN; + int status; + + status = gsl_linalg_cholesky_decomp1(A); + if (status == GSL_SUCCESS) + { + gsl_matrix_transpose_tricpy('L', 0, A, A); + } + + return status; } +/* +gsl_linalg_cholesky_decomp1() + Perform Cholesky decomposition of a symmetric positive +definite matrix + +Inputs: A - (input) symmetric, positive definite matrix + (output) lower triangle contains Cholesky factor + +Return: success/error + +Notes: +1) Based on algorithm 4.2.1 (Gaxpy Cholesky) of Golub and +Van Loan, Matrix Computations (4th ed). +*/ + int -gsl_linalg_cholesky_decomp (gsl_matrix * A) +gsl_linalg_cholesky_decomp1 (gsl_matrix * A) { const size_t M = A->size1; const size_t N = A->size2; @@ -60,108 +95,36 @@ } else { - size_t i,j,k; - int status = 0; - - /* Do the first 2 rows explicitly. It is simple, and faster. And - * one can return if the matrix has only 1 or 2 rows. - */ + size_t j; - double A_00 = gsl_matrix_get (A, 0, 0); - - double L_00 = quiet_sqrt(A_00); - - if (A_00 <= 0) + for (j = 0; j < N; ++j) { - status = GSL_EDOM ; - } - - gsl_matrix_set (A, 0, 0, L_00); - - if (M > 1) - { - double A_10 = gsl_matrix_get (A, 1, 0); - double A_11 = gsl_matrix_get (A, 1, 1); - - double L_10 = A_10 / L_00; - double diag = A_11 - L_10 * L_10; - double L_11 = quiet_sqrt(diag); - - if (diag <= 0) - { - status = GSL_EDOM; - } + double ajj; + gsl_vector_view v = gsl_matrix_subcolumn(A, j, j, N - j); /* A(j:n,j) */ - gsl_matrix_set (A, 1, 0, L_10); - gsl_matrix_set (A, 1, 1, L_11); - } - - for (k = 2; k < M; k++) - { - double A_kk = gsl_matrix_get (A, k, k); - - for (i = 0; i < k; i++) + if (j > 0) { - double sum = 0; + gsl_vector_view w = gsl_matrix_subrow(A, j, 0, j); /* A(j,1:j-1)^T */ + gsl_matrix_view m = gsl_matrix_submatrix(A, j, 0, N - j, j); /* A(j:n,1:j-1) */ - double A_ki = gsl_matrix_get (A, k, i); - double A_ii = gsl_matrix_get (A, i, i); - - gsl_vector_view ci = gsl_matrix_row (A, i); - gsl_vector_view ck = gsl_matrix_row (A, k); + gsl_blas_dgemv(CblasNoTrans, -1.0, &m.matrix, &w.vector, 1.0, &v.vector); + } - if (i > 0) { - gsl_vector_view di = gsl_vector_subvector(&ci.vector, 0, i); - gsl_vector_view dk = gsl_vector_subvector(&ck.vector, 0, i); - - gsl_blas_ddot (&di.vector, &dk.vector, &sum); - } - - A_ki = (A_ki - sum) / A_ii; - gsl_matrix_set (A, k, i, A_ki); - } - - { - gsl_vector_view ck = gsl_matrix_row (A, k); - gsl_vector_view dk = gsl_vector_subvector (&ck.vector, 0, k); - - double sum = gsl_blas_dnrm2 (&dk.vector); - double diag = A_kk - sum * sum; - - double L_kk = quiet_sqrt(diag); - - if (diag <= 0) - { - status = GSL_EDOM; - } - - gsl_matrix_set (A, k, k, L_kk); - } - } + ajj = gsl_matrix_get(A, j, j); - /* Now copy the transposed lower triangle to the upper triangle, - * the diagonal is common. - */ - - for (i = 1; i < M; i++) - { - for (j = 0; j < i; j++) + if (ajj <= 0.0) { - double A_ij = gsl_matrix_get (A, i, j); - gsl_matrix_set (A, j, i, A_ij); + GSL_ERROR("matrix is not positive definite", GSL_EDOM); } - } - - if (status == GSL_EDOM) - { - GSL_ERROR ("matrix must be positive definite", GSL_EDOM); + + ajj = sqrt(ajj); + gsl_vector_scale(&v.vector, 1.0 / ajj); } - + return GSL_SUCCESS; } } - int gsl_linalg_cholesky_solve (const gsl_matrix * LLT, const gsl_vector * b, @@ -181,20 +144,14 @@ } else { - /* Copy x <- b */ + int status; + /* copy x <- b */ gsl_vector_memcpy (x, b); - /* Solve for c using forward-substitution, L c = b */ - - gsl_blas_dtrsv (CblasLower, CblasNoTrans, CblasNonUnit, LLT, x); - - /* Perform back-substitution, U x = c */ - - gsl_blas_dtrsv (CblasUpper, CblasNoTrans, CblasNonUnit, LLT, x); - + status = gsl_linalg_cholesky_svx(LLT, x); - return GSL_SUCCESS; + return status; } } @@ -212,13 +169,11 @@ } else { - /* Solve for c using forward-substitution, L c = b */ - + /* solve for c using forward-substitution, L c = b */ gsl_blas_dtrsv (CblasLower, CblasNoTrans, CblasNonUnit, LLT, x); - /* Perform back-substitution, U x = c */ - - gsl_blas_dtrsv (CblasUpper, CblasNoTrans, CblasNonUnit, LLT, x); + /* perform back-substitution, L^T x = c */ + gsl_blas_dtrsv (CblasLower, CblasTrans, CblasNonUnit, LLT, x); return GSL_SUCCESS; } @@ -244,74 +199,49 @@ } else { - size_t N = LLT->size1; - size_t i, j; - double sum; + const size_t N = LLT->size1; + size_t i; gsl_vector_view v1, v2; /* invert the lower triangle of LLT */ - for (i = 0; i < N; ++i) - { - double ajj; - - j = N - i - 1; - - gsl_matrix_set(LLT, j, j, 1.0 / gsl_matrix_get(LLT, j, j)); - ajj = -gsl_matrix_get(LLT, j, j); - - if (j < N - 1) - { - gsl_matrix_view m; - - m = gsl_matrix_submatrix(LLT, j + 1, j + 1, - N - j - 1, N - j - 1); - v1 = gsl_matrix_subcolumn(LLT, j, j + 1, N - j - 1); - - gsl_blas_dtrmv(CblasLower, CblasNoTrans, CblasNonUnit, - &m.matrix, &v1.vector); - - gsl_blas_dscal(ajj, &v1.vector); - } - } /* for (i = 0; i < N; ++i) */ + gsl_linalg_tri_lower_invert(LLT); /* * The lower triangle of LLT now contains L^{-1}. Now compute - * A^{-1} = L^{-t} L^{-1} - * - * The (ij) element of A^{-1} is column i of L^{-1} dotted into - * column j of L^{-1} + * A^{-1} = L^{-T} L^{-1} */ for (i = 0; i < N; ++i) { - for (j = i + 1; j < N; ++j) - { - v1 = gsl_matrix_subcolumn(LLT, i, j, N - j); - v2 = gsl_matrix_subcolumn(LLT, j, j, N - j); + double aii = gsl_matrix_get(LLT, i, i); - /* compute Ainv_{ij} = sum_k Linv_{ki} Linv_{kj} */ - gsl_blas_ddot(&v1.vector, &v2.vector, &sum); + if (i < N - 1) + { + double tmp; - /* store in upper triangle */ - gsl_matrix_set(LLT, i, j, sum); - } + v1 = gsl_matrix_subcolumn(LLT, i, i, N - i); + gsl_blas_ddot(&v1.vector, &v1.vector, &tmp); + gsl_matrix_set(LLT, i, i, tmp); - /* now compute the diagonal element */ - v1 = gsl_matrix_subcolumn(LLT, i, i, N - i); - gsl_blas_ddot(&v1.vector, &v1.vector, &sum); - gsl_matrix_set(LLT, i, i, sum); - } + if (i > 0) + { + gsl_matrix_view m = gsl_matrix_submatrix(LLT, i + 1, 0, N - i - 1, i); - /* copy the transposed upper triangle to the lower triangle */ + v1 = gsl_matrix_subcolumn(LLT, i, i + 1, N - i - 1); + v2 = gsl_matrix_subrow(LLT, i, 0, i); - for (j = 1; j < N; j++) - { - for (i = 0; i < j; i++) + gsl_blas_dgemv(CblasTrans, 1.0, &m.matrix, &v1.vector, aii, &v2.vector); + } + } + else { - double A_ij = gsl_matrix_get (LLT, i, j); - gsl_matrix_set (LLT, j, i, A_ij); + v1 = gsl_matrix_row(LLT, N - 1); + gsl_blas_dscal(aii, &v1.vector); } - } + } + + /* copy lower triangle to upper */ + gsl_matrix_transpose_tricpy('L', 0, LLT, LLT); return GSL_SUCCESS; } @@ -324,7 +254,7 @@ size_t i, j; /* initial Cholesky */ - int stat_chol = gsl_linalg_cholesky_decomp(A); + int stat_chol = gsl_linalg_cholesky_decomp1(A); if(stat_chol == GSL_SUCCESS) { @@ -356,3 +286,309 @@ return stat_chol; } + +/* +gsl_linalg_cholesky_scale() + This function computes scale factors diag(S), such that + +diag(S) A diag(S) + +has a condition number within a factor N of the matrix +with the smallest condition number over all possible +diagonal scalings. See Corollary 7.6 of: + +N. J. Higham, Accuracy and Stability of Numerical Algorithms (2nd Edition), +SIAM, 2002. + +Inputs: A - symmetric positive definite matrix + S - (output) scale factors, S_i = 1 / sqrt(A_ii) +*/ + +int +gsl_linalg_cholesky_scale(const gsl_matrix * A, gsl_vector * S) +{ + const size_t M = A->size1; + const size_t N = A->size2; + + if (M != N) + { + GSL_ERROR("A is not a square matrix", GSL_ENOTSQR); + } + else if (N != S->size) + { + GSL_ERROR("S must have length N", GSL_EBADLEN); + } + else + { + size_t i; + + /* compute S_i = 1/sqrt(A_{ii}) */ + for (i = 0; i < N; ++i) + { + double Aii = gsl_matrix_get(A, i, i); + + if (Aii <= 0.0) + gsl_vector_set(S, i, 1.0); /* matrix not positive definite */ + else + gsl_vector_set(S, i, 1.0 / sqrt(Aii)); + } + + return GSL_SUCCESS; + } +} + +/* +gsl_linalg_cholesky_scale_apply() + This function applies scale transformation to A: + +A <- diag(S) A diag(S) + +Inputs: A - (input/output) + on input, symmetric positive definite matrix + on output, diag(S) * A * diag(S) in lower triangle + S - (input) scale factors +*/ + +int +gsl_linalg_cholesky_scale_apply(gsl_matrix * A, const gsl_vector * S) +{ + const size_t M = A->size1; + const size_t N = A->size2; + + if (M != N) + { + GSL_ERROR("A is not a square matrix", GSL_ENOTSQR); + } + else if (N != S->size) + { + GSL_ERROR("S must have length N", GSL_EBADLEN); + } + else + { + size_t i, j; + + /* compute: A <- diag(S) A diag(S) using lower triangle */ + for (j = 0; j < N; ++j) + { + double sj = gsl_vector_get(S, j); + + for (i = j; i < N; ++i) + { + double si = gsl_vector_get(S, i); + double *Aij = gsl_matrix_ptr(A, i, j); + *Aij *= si * sj; + } + } + + return GSL_SUCCESS; + } +} + +int +gsl_linalg_cholesky_decomp2(gsl_matrix * A, gsl_vector * S) +{ + const size_t M = A->size1; + const size_t N = A->size2; + + if (M != N) + { + GSL_ERROR("cholesky decomposition requires square matrix", GSL_ENOTSQR); + } + else if (N != S->size) + { + GSL_ERROR("S must have length N", GSL_EBADLEN); + } + else + { + int status; + + /* compute scaling factors to reduce cond(A) */ + status = gsl_linalg_cholesky_scale(A, S); + if (status) + return status; + + /* apply scaling factors */ + status = gsl_linalg_cholesky_scale_apply(A, S); + if (status) + return status; + + /* compute Cholesky decomposition of diag(S) A diag(S) */ + status = gsl_linalg_cholesky_decomp1(A); + if (status) + return status; + + return GSL_SUCCESS; + } +} + +int +gsl_linalg_cholesky_svx2 (const gsl_matrix * LLT, + const gsl_vector * S, + gsl_vector * x) +{ + if (LLT->size1 != LLT->size2) + { + GSL_ERROR ("cholesky matrix must be square", GSL_ENOTSQR); + } + else if (LLT->size2 != S->size) + { + GSL_ERROR ("matrix size must match S", GSL_EBADLEN); + } + else if (LLT->size2 != x->size) + { + GSL_ERROR ("matrix size must match solution size", GSL_EBADLEN); + } + else + { + /* b~ = diag(S) b */ + gsl_vector_mul(x, S); + + /* Solve for c using forward-substitution, L c = b~ */ + gsl_blas_dtrsv (CblasLower, CblasNoTrans, CblasNonUnit, LLT, x); + + /* Perform back-substitution, L^T x~ = c */ + gsl_blas_dtrsv (CblasLower, CblasTrans, CblasNonUnit, LLT, x); + + /* compute original solution vector x = S x~ */ + gsl_vector_mul(x, S); + + return GSL_SUCCESS; + } +} + +int +gsl_linalg_cholesky_solve2 (const gsl_matrix * LLT, + const gsl_vector * S, + const gsl_vector * b, + gsl_vector * x) +{ + if (LLT->size1 != LLT->size2) + { + GSL_ERROR ("cholesky matrix must be square", GSL_ENOTSQR); + } + else if (LLT->size1 != S->size) + { + GSL_ERROR ("matrix size must match S size", GSL_EBADLEN); + } + else if (LLT->size1 != b->size) + { + GSL_ERROR ("matrix size must match b size", GSL_EBADLEN); + } + else if (LLT->size2 != x->size) + { + GSL_ERROR ("matrix size must match solution size", GSL_EBADLEN); + } + else + { + int status; + + /* Copy x <- b */ + gsl_vector_memcpy (x, b); + + status = gsl_linalg_cholesky_svx2(LLT, S, x); + + return status; + } +} + +int +gsl_linalg_cholesky_rcond (const gsl_matrix * LLT, double * rcond, + gsl_vector * work) +{ + const size_t M = LLT->size1; + const size_t N = LLT->size2; + + if (M != N) + { + GSL_ERROR ("cholesky matrix must be square", GSL_ENOTSQR); + } + else if (work->size != 3 * N) + { + GSL_ERROR ("work vector must have length 3*N", GSL_EBADLEN); + } + else + { + int status; + double Anorm = cholesky_norm1(LLT, work); /* ||A||_1 */ + double Ainvnorm; /* ||A^{-1}||_1 */ + + *rcond = 0.0; + + /* don't continue if matrix is singular */ + if (Anorm == 0.0) + return GSL_SUCCESS; + + /* estimate ||A^{-1}||_1 */ + status = gsl_linalg_invnorm1(N, cholesky_Ainv, (void *) LLT, &Ainvnorm, work); + + if (status) + return status; + + if (Ainvnorm != 0.0) + *rcond = (1.0 / Anorm) / Ainvnorm; + + return GSL_SUCCESS; + } +} + +/* compute 1-norm of original matrix, stored in upper triangle of LLT; + * diagonal entries have to be reconstructed */ +static double +cholesky_norm1(const gsl_matrix * LLT, gsl_vector * work) +{ + const size_t N = LLT->size1; + double max = 0.0; + size_t i, j; + + for (j = 0; j < N; ++j) + { + double sum = 0.0; + gsl_vector_const_view lj = gsl_matrix_const_subrow(LLT, j, 0, j + 1); + double Ajj; + + /* compute diagonal (j,j) entry of A */ + gsl_blas_ddot(&lj.vector, &lj.vector, &Ajj); + + for (i = 0; i < j; ++i) + { + double *wi = gsl_vector_ptr(work, i); + double Aij = gsl_matrix_get(LLT, i, j); + double absAij = fabs(Aij); + + sum += absAij; + *wi += absAij; + } + + gsl_vector_set(work, j, sum + fabs(Ajj)); + } + + for (i = 0; i < N; ++i) + { + double wi = gsl_vector_get(work, i); + max = GSL_MAX(max, wi); + } + + return max; +} + +/* x := A^{-1} x = A^{-t} x, A = L L^T */ +static int +cholesky_Ainv(CBLAS_TRANSPOSE_t TransA, gsl_vector * x, void * params) +{ + int status; + gsl_matrix * A = (gsl_matrix * ) params; + + (void) TransA; /* unused parameter warning */ + + /* compute L^{-1} x */ + status = gsl_blas_dtrsv(CblasLower, CblasNoTrans, CblasNonUnit, A, x); + if (status) + return status; + + /* compute L^{-t} x */ + status = gsl_blas_dtrsv(CblasLower, CblasTrans, CblasNonUnit, A, x); + if (status) + return status; + + return GSL_SUCCESS; +} diff -Nru gsl-doc-1.16/linalg/cholesky_common.c gsl-doc-2.3/linalg/cholesky_common.c --- gsl-doc-1.16/linalg/cholesky_common.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/linalg/cholesky_common.c 2016-08-10 21:03:42.000000000 +0000 @@ -0,0 +1,86 @@ +/* linalg/cholesky_common.c + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#define SWAP(a,b) do { double tmp = b ; b = a ; a = tmp ; } while(0) + +/* +cholesky_swap_rowcol() + Swap rows and columns i and j of symmetric matrix A, updating only the +lower triangle + +Inputs: A - symmetric matrix A, stored in lower triangle + i - index i + j - index j + +Return: success/error +*/ + +static int +cholesky_swap_rowcol(gsl_matrix * A, const size_t i, const size_t j) +{ + if (i != j) + { + const size_t N = A->size1; + double *Aii, *Ajj; + size_t ii, jj, k; + + /* organize so that ii < jj */ + if (i < j) + { + ii = i; + jj = j; + } + else + { + ii = j; + jj = i; + } + + /* swap subrows A(i,1:i-1) with A(j,1:i-1) */ + for (k = 0; k < ii; ++k) + { + double *Aik = gsl_matrix_ptr(A, ii, k); + double *Ajk = gsl_matrix_ptr(A, jj, k); + SWAP(*Aik, *Ajk); + } + + /* swap subrow A(j,i+1:j-1) with subcolumn A(i+1:j-1,i) */ + for (k = ii + 1; k < jj; ++k) + { + double *Ajk = gsl_matrix_ptr(A, jj, k); + double *Aki = gsl_matrix_ptr(A, k, ii); + SWAP(*Ajk, *Aki); + } + + /* swap subcolumns A(j+1:N,i) with A(j+1:N,j) */ + for (k = jj + 1; k < N; ++k) + { + double *Aki = gsl_matrix_ptr(A, k, ii); + double *Akj = gsl_matrix_ptr(A, k, jj); + SWAP(*Aki, *Akj); + } + + /* now swap diagonal elements A(i,i) and A(j,j) */ + Aii = gsl_matrix_ptr(A, ii, ii); + Ajj = gsl_matrix_ptr(A, jj, jj); + SWAP(*Aii, *Ajj); + } + + return GSL_SUCCESS; +} diff -Nru gsl-doc-1.16/linalg/cod.c gsl-doc-2.3/linalg/cod.c --- gsl-doc-1.16/linalg/cod.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/linalg/cod.c 2016-08-23 14:30:22.000000000 +0000 @@ -0,0 +1,570 @@ +/* linalg/cod.c + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * This module contains routines for factoring an M-by-N matrix A as: + * + * A P = Q R Z + * + * known as the Complete Orthogonal Decomposition, where: + * + * P is a N-by-N permutation matrix + * Q is M-by-M orthogonal + * R has an r-by-r upper triangular block + * Z is N-by-N orthogonal + * + * When A is full rank, Z = I and this becomes the QR decomposition + * with column pivoting. When A is rank deficient, then + * + * R = [ R11 0 ] where R11 is r-by-r and r = rank(A) + * [ 0 0 ] + */ + +static int cod_RZ(gsl_matrix * A, gsl_vector * tau); +static double cod_householder_transform(double *alpha, gsl_vector * v); +static int cod_householder_mh(const double tau, const gsl_vector * v, + gsl_matrix * A, gsl_vector * work); +static int cod_householder_hv(const double tau, const gsl_vector * v, gsl_vector * w); +static int cod_householder_ZTvec(const gsl_matrix * QRZ, const gsl_vector * tau_Z, const size_t rank, + gsl_vector * v); + +int +gsl_linalg_COD_decomp_e(gsl_matrix * A, gsl_vector * tau_Q, gsl_vector * tau_Z, + gsl_permutation * p, double tol, size_t * rank, gsl_vector * work) +{ + const size_t M = A->size1; + const size_t N = A->size2; + + if (tau_Q->size != GSL_MIN (M, N)) + { + GSL_ERROR ("size of tau_Q must be MIN(M,N)", GSL_EBADLEN); + } + else if (tau_Z->size != GSL_MIN (M, N)) + { + GSL_ERROR ("size of tau_Z must be MIN(M,N)", GSL_EBADLEN); + } + else if (p->size != N) + { + GSL_ERROR ("permutation size must be N", GSL_EBADLEN); + } + else if (work->size != N) + { + GSL_ERROR ("work size must be N", GSL_EBADLEN); + } + else + { + int status, signum; + size_t r; + + /* decompose: A P = Q R */ + status = gsl_linalg_QRPT_decomp(A, tau_Q, p, &signum, work); + if (status) + return status; + + /* estimate rank of A */ + r = gsl_linalg_QRPT_rank(A, tol); + + if (r < N) + { + /* + * matrix is rank-deficient, so that the R factor is + * + * R = [ R11 R12 ] =~ [ R11 R12 ] + * [ 0 R22 ] [ 0 0 ] + * + * compute RZ decomposition of upper trapezoidal matrix + * [ R11 R12 ] = [ R11~ 0 ] Z + */ + gsl_matrix_view R_upper = gsl_matrix_submatrix(A, 0, 0, r, N); + gsl_vector_view t = gsl_vector_subvector(tau_Z, 0, r); + + cod_RZ(&R_upper.matrix, &t.vector); + } + + *rank = r; + + return GSL_SUCCESS; + } +} + +int +gsl_linalg_COD_decomp(gsl_matrix * A, gsl_vector * tau_Q, gsl_vector * tau_Z, + gsl_permutation * p, size_t * rank, gsl_vector * work) +{ + return gsl_linalg_COD_decomp_e(A, tau_Q, tau_Z, p, -1.0, rank, work); +} + +/* +gsl_linalg_COD_lssolve() + Find the least squares solution to the overdetermined system + + A x = b + +for M >= N using the COD factorization A P = Q R Z + +Inputs: QRZ - matrix A, in COD compressed format, M-by-N + tau_Q - Householder scalars for Q, length min(M,N) + tau_Z - Householder scalars for Z, length min(M,N) + perm - permutation matrix + rank - rank of A + b - rhs vector, length M + x - (output) solution vector, length N + residual - (output) residual vector, b - A x, length M +*/ + +int +gsl_linalg_COD_lssolve (const gsl_matrix * QRZ, const gsl_vector * tau_Q, const gsl_vector * tau_Z, + const gsl_permutation * perm, const size_t rank, const gsl_vector * b, + gsl_vector * x, gsl_vector * residual) +{ + const size_t M = QRZ->size1; + const size_t N = QRZ->size2; + + if (M < N) + { + GSL_ERROR ("QRZ matrix must have M>=N", GSL_EBADLEN); + } + else if (M != b->size) + { + GSL_ERROR ("matrix size must match b size", GSL_EBADLEN); + } + else if (rank > GSL_MIN (M, N)) + { + GSL_ERROR ("rank must be <= MIN(M,N)", GSL_EBADLEN); + } + else if (N != x->size) + { + GSL_ERROR ("matrix size must match solution size", GSL_EBADLEN); + } + else if (M != residual->size) + { + GSL_ERROR ("matrix size must match residual size", GSL_EBADLEN); + } + else + { + gsl_matrix_const_view R11 = gsl_matrix_const_submatrix (QRZ, 0, 0, rank, rank); + gsl_vector_view QTb1 = gsl_vector_subvector(residual, 0, rank); + gsl_vector_view x1 = gsl_vector_subvector(x, 0, rank); + + gsl_vector_set_zero(x); + + /* compute residual = Q^T b */ + gsl_vector_memcpy(residual, b); + gsl_linalg_QR_QTvec (QRZ, tau_Q, residual); + + /* solve x1 := R11^{-1} (Q^T b)(1:r) */ + gsl_vector_memcpy(&(x1.vector), &(QTb1.vector)); + gsl_blas_dtrsv(CblasUpper, CblasNoTrans, CblasNonUnit, &(R11.matrix), &(x1.vector)); + + /* compute Z^T ( R11^{-1} x1; 0 ) */ + cod_householder_ZTvec(QRZ, tau_Z, rank, x); + + /* compute x = P Z^T ( R11^{-1} x1; 0 ) */ + gsl_permute_vector_inverse(perm, x); + + /* compute residual = b - A x = Q (Q^T b - R [ R11^{-1} x1; 0 ]) */ + gsl_vector_set_zero(&(QTb1.vector)); + gsl_linalg_QR_Qvec(QRZ, tau_Q, residual); + + return GSL_SUCCESS; + } +} + +/* +gsl_linalg_COD_unpack() + Unpack encoded COD decomposition into the matrices Q,R,Z,P + +Inputs: QRZ - encoded COD decomposition + tau_Q - Householder scalars for Q + tau_Z - Householder scalars for Z + rank - rank of matrix (as determined from gsl_linalg_COD_decomp) + Q - (output) M-by-M matrix Q + R - (output) M-by-N matrix R + Z - (output) N-by-N matrix Z +*/ + +int +gsl_linalg_COD_unpack(const gsl_matrix * QRZ, const gsl_vector * tau_Q, + const gsl_vector * tau_Z, const size_t rank, gsl_matrix * Q, + gsl_matrix * R, gsl_matrix * Z) +{ + const size_t M = QRZ->size1; + const size_t N = QRZ->size2; + + if (tau_Q->size != GSL_MIN (M, N)) + { + GSL_ERROR ("size of tau_Q must be MIN(M,N)", GSL_EBADLEN); + } + else if (tau_Z->size != GSL_MIN (M, N)) + { + GSL_ERROR ("size of tau_Z must be MIN(M,N)", GSL_EBADLEN); + } + else if (rank > GSL_MIN (M, N)) + { + GSL_ERROR ("rank must be <= MIN(M,N)", GSL_EBADLEN); + } + else if (Q->size1 != M || Q->size2 != M) + { + GSL_ERROR ("Q must by M-by-M", GSL_EBADLEN); + } + else if (R->size1 != M || R->size2 != N) + { + GSL_ERROR ("R must by M-by-N", GSL_EBADLEN); + } + else if (Z->size1 != N || Z->size2 != N) + { + GSL_ERROR ("Z must by N-by-N", GSL_EBADLEN); + } + else + { + size_t i; + gsl_matrix_view R11 = gsl_matrix_submatrix(R, 0, 0, rank, rank); + gsl_matrix_const_view QRZ11 = gsl_matrix_const_submatrix(QRZ, 0, 0, rank, rank); + + /* form Q matrix */ + + gsl_matrix_set_identity(Q); + + for (i = GSL_MIN (M, N); i-- > 0;) + { + gsl_vector_const_view h = gsl_matrix_const_subcolumn (QRZ, i, i, M - i); + gsl_matrix_view m = gsl_matrix_submatrix (Q, i, i, M - i, M - i); + double ti = gsl_vector_get (tau_Q, i); + gsl_linalg_householder_hm (ti, &h.vector, &m.matrix); + } + + /* form Z matrix */ + gsl_matrix_set_identity(Z); + + if (rank < N) + { + gsl_vector_view work = gsl_matrix_row(R, 0); /* temporary workspace, size N */ + + /* multiply I by Z from the right */ + gsl_linalg_COD_matZ(QRZ, tau_Z, rank, Z, &work.vector); + } + + /* copy rank-by-rank upper triangle of QRZ into R and zero the rest */ + gsl_matrix_set_zero(R); + gsl_matrix_tricpy('U', 1, &R11.matrix, &QRZ11.matrix); + + return GSL_SUCCESS; + } +} + +/* +gsl_linalg_COD_matZ + Multiply an M-by-N matrix A on the right by Z (N-by-N) + +Inputs: QRZ - encoded COD matrix + tau_Z - Householder scalars for Z + rank - matrix rank + A - on input, M-by-N matrix + on output, A * Z + work - workspace of length M +*/ + +int +gsl_linalg_COD_matZ(const gsl_matrix * QRZ, const gsl_vector * tau_Z, const size_t rank, + gsl_matrix * A, gsl_vector * work) +{ + const size_t M = A->size1; + const size_t N = A->size2; + + if (tau_Z->size != GSL_MIN (QRZ->size1, QRZ->size2)) + { + GSL_ERROR("tau_Z must be GSL_MIN(M,N)", GSL_EBADLEN); + } + else if (QRZ->size2 != N) + { + GSL_ERROR("QRZ must have N columns", GSL_EBADLEN); + } + else if (work->size != M) + { + GSL_ERROR("workspace must be length M", GSL_EBADLEN); + } + else + { + /* if rank == N, then Z = I and there is nothing to do */ + if (rank < N) + { + size_t i; + + for (i = 0; i < rank; ++i) + { + gsl_vector_const_view h = gsl_matrix_const_subrow (QRZ, i, rank, N - rank); + gsl_matrix_view m = gsl_matrix_submatrix (A, 0, i, M, N - i); + double ti = gsl_vector_get (tau_Z, i); + cod_householder_mh (ti, &h.vector, &m.matrix, work); + } + } + + return GSL_SUCCESS; + } +} + + +/********************************************* + * INTERNAL ROUTINES * + *********************************************/ + +/* +cod_RZ() + Perform RZ decomposition of an upper trapezoidal matrix, + +A = [ A11 A12 ] = [ R 0 ] Z + +where A is M-by-N with N >= M, A11 is M-by-M upper triangular, +and A12 is M-by-(N-M). On output, Z is stored as Householder +reflectors in the A12 portion of A, + +Z = Z(1) Z(2) ... Z(M) + +Inputs: A - M-by-N matrix with N >= M + On input, upper trapezoidal matrix [ A11 A12 ] + On output, A11 is overwritten by R (subdiagonal elements + are not touched), and A12 is overwritten by Z in packed storage + tau - (output) Householder scalars, size M +*/ + +static int +cod_RZ(gsl_matrix * A, gsl_vector * tau) +{ + const size_t M = A->size1; + const size_t N = A->size2; + + if (tau->size != M) + { + GSL_ERROR("tau has wrong size", GSL_EBADLEN); + } + else if (N < M) + { + GSL_ERROR("N must be >= M", GSL_EINVAL); + } + else if (M == N) + { + /* quick return */ + gsl_vector_set_all(tau, 0.0); + return GSL_SUCCESS; + } + else + { + size_t k; + + for (k = M; k > 0 && k--; ) + { + double *alpha = gsl_matrix_ptr(A, k, k); + gsl_vector_view z = gsl_matrix_subrow(A, k, M, N - M); + double tauk; + + /* compute Householder reflection to zero [ A(k,k) A(k,M+1:N) ] */ + tauk = cod_householder_transform(alpha, &z.vector); + gsl_vector_set(tau, k, tauk); + + if ((tauk != 0) && (k > 0)) + { + gsl_vector_view w = gsl_vector_subvector(tau, 0, k); + gsl_matrix_view B = gsl_matrix_submatrix(A, 0, k, k, N - k); + + cod_householder_mh(tauk, &z.vector, &B.matrix, &w.vector); + } + } + + return GSL_SUCCESS; + } +} + +static double +cod_householder_transform(double *alpha, gsl_vector * v) +{ + double beta, tau; + double xnorm = gsl_blas_dnrm2(v); + + if (xnorm == 0) + { + return 0.0; /* tau = 0 */ + } + + beta = - (*alpha >= 0.0 ? +1.0 : -1.0) * gsl_hypot(*alpha, xnorm); + tau = (beta - *alpha) / beta; + + { + double s = (*alpha - beta); + + if (fabs(s) > GSL_DBL_MIN) + { + gsl_blas_dscal (1.0 / s, v); + } + else + { + gsl_blas_dscal (GSL_DBL_EPSILON / s, v); + gsl_blas_dscal (1.0 / GSL_DBL_EPSILON, v); + } + + *alpha = beta; + } + + return tau; +} + +/* +cod_householder_hv + Apply Householder reflection H = (I - tau*v*v') to vector v from the left, + +w' = H * w + +Inputs: tau - Householder scalar + v - Householder vector, size M + w - on input, w vector, size M + on output, H * w + +Notes: +1) Based on LAPACK routine DLARZ +*/ + +static int +cod_householder_hv(const double tau, const gsl_vector * v, gsl_vector * w) +{ + if (tau == 0) + { + return GSL_SUCCESS; /* H = I */ + } + else + { + const size_t M = w->size; + const size_t L = v->size; + double w0 = gsl_vector_get(w, 0); + gsl_vector_view w1 = gsl_vector_subvector(w, M - L, L); + double d1, d; + + /* d1 := v . w(M-L:M) */ + gsl_blas_ddot(v, &w1.vector, &d1); + + /* d := w(1) + v . w(M-L:M) */ + d = w0 + d1; + + /* w(1) = w(1) - tau * d */ + gsl_vector_set(w, 0, w0 - tau * d); + + /* w(M-L:M) = w(M-L:M) - tau * d * v */ + gsl_blas_daxpy(-tau * d, v, &w1.vector); + + return GSL_SUCCESS; + } +} + +/* +cod_householder_mh + Apply Householder reflection H = (I - tau*v*v') to matrix A from the right + +Inputs: tau - Householder scalar + v - Householder vector, size N-M + A - matrix, size M-by-N + work - workspace, size M + +Notes: +1) Based on LAPACK routine DLARZ +*/ + +static int +cod_householder_mh(const double tau, const gsl_vector * v, gsl_matrix * A, + gsl_vector * work) +{ + if (tau == 0) + { + return GSL_SUCCESS; /* H = I */ + } + else + { + const size_t M = A->size1; + const size_t N = A->size2; + const size_t L = v->size; + gsl_vector_view A1 = gsl_matrix_subcolumn(A, 0, 0, M); + gsl_matrix_view C = gsl_matrix_submatrix(A, 0, N - L, M, L); + + /* work(1:M) = A(1:M,1) */ + gsl_vector_memcpy(work, &A1.vector); + + /* work(1:M) = work(1:M) + A(1:M,M+1:N) * v(1:N-M) */ + gsl_blas_dgemv(CblasNoTrans, 1.0, &C.matrix, v, 1.0, work); + + /* A(1:M,1) = A(1:M,1) - tau * work(1:M) */ + gsl_blas_daxpy(-tau, work, &A1.vector); + + /* A(1:M,M+1:N) = A(1:M,M+1:N) - tau * work(1:M) * v(1:N-M)' */ + gsl_blas_dger(-tau, work, v, &C.matrix); + + return GSL_SUCCESS; + } +} + +/* +cod_householder_ZTvec + Multiply a vector by Z^T + +Inputs: QRZ - encoded COD matrix + tau_Z - Householder scalars for Z + rank - matrix rank + v - on input, vector of length N + on output, Z^T * v +*/ + +static int +cod_householder_ZTvec(const gsl_matrix * QRZ, const gsl_vector * tau_Z, const size_t rank, + gsl_vector * v) +{ + const size_t M = QRZ->size1; + const size_t N = QRZ->size2; + + if (tau_Z->size != GSL_MIN (M, N)) + { + GSL_ERROR("tau_Z must be GSL_MIN(M,N)", GSL_EBADLEN); + } + else if (v->size != N) + { + GSL_ERROR("v must be length N", GSL_EBADLEN); + } + else + { + if (rank < N) + { + size_t i; + + for (i = 0; i < rank; ++i) + { + gsl_vector_const_view h = gsl_matrix_const_subrow (QRZ, i, rank, N - rank); + gsl_vector_view w = gsl_vector_subvector (v, i, N - i); + double ti = gsl_vector_get (tau_Z, i); + cod_householder_hv(ti, &h.vector, &w.vector); + } + } + + return GSL_SUCCESS; + } +} diff -Nru gsl-doc-1.16/linalg/condest.c gsl-doc-2.3/linalg/condest.c --- gsl-doc-1.16/linalg/condest.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/linalg/condest.c 2016-08-23 14:34:05.000000000 +0000 @@ -0,0 +1,299 @@ +/* linalg/condest.c + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * This module contains routines for estimating the condition number + * of matrices in the 1-norm. The algorithm is based on the paper, + * + * [1] N. J. Higham, "FORTRAN codes for estimating the one-norm of + * a real or complex matrix, with applications to condition estimation", + * ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988. + */ + +static double condest_tri_norm1(CBLAS_UPLO_t Uplo, const gsl_matrix * A); +static int condest_tri_rcond(CBLAS_UPLO_t Uplo, const gsl_matrix * A, + double * rcond, gsl_vector * work); +static int condest_same_sign(const gsl_vector * x, const gsl_vector * y); +static int condest_invtriu(CBLAS_TRANSPOSE_t TransA, gsl_vector * x, void * params); +static int condest_invtril(CBLAS_TRANSPOSE_t TransA, gsl_vector * x, void * params); + +/* +gsl_linalg_tri_upper_rcond() + Estimate reciprocal condition number of upper triangular matrix + +Inputs: A - upper triangular matrix, N-by-N + rcond - (output) reciprocal condition number estimate + work - workspace, length 3*N + +Return: success/error +*/ + +int +gsl_linalg_tri_upper_rcond(const gsl_matrix * A, double * rcond, gsl_vector * work) +{ + int status = condest_tri_rcond(CblasUpper, A, rcond, work); + return status; +} + +/* +gsl_linalg_tri_lower_rcond() + Estimate reciprocal condition number of lower triangular matrix + +Inputs: A - lower triangular matrix, N-by-N + rcond - (output) reciprocal condition number estimate + work - workspace, length 3*N + +Return: success/error +*/ + +int +gsl_linalg_tri_lower_rcond(const gsl_matrix * A, double * rcond, gsl_vector * work) +{ + int status = condest_tri_rcond(CblasLower, A, rcond, work); + return status; +} + +/* +gsl_linalg_invnorm1() + Estimate the 1-norm of ||A^{-1}||, where A is a square +N-by-N matrix + +Inputs: N - size of matrix + Ainvx - pointer to function which calculates: + x := A^{-1} x or x := A^{-t} x + params - parameters to pass to Ainvx + Ainvnorm - (output) estimate of ||A^{-1}||_1 + work - workspace, length 3*N +*/ + +int +gsl_linalg_invnorm1(const size_t N, + int (* Ainvx)(CBLAS_TRANSPOSE_t TransA, gsl_vector * x, void * params), + void * params, double * Ainvnorm, gsl_vector * work) +{ + if (work->size != 3 * N) + { + GSL_ERROR ("work vector must have length 3*N", GSL_EBADLEN); + } + else + { + const size_t maxit = 5; + gsl_vector_view x = gsl_vector_subvector(work, 0, N); + gsl_vector_view v = gsl_vector_subvector(work, N, N); + gsl_vector_view xi = gsl_vector_subvector(work, 2*N, N); + double gamma, gamma_old, temp; + size_t i, k; + + for (i = 0; i < N; ++i) + gsl_vector_set(&x.vector, i, 1.0 / (double) N); + + /* compute v = A^{-1} x */ + gsl_vector_memcpy(&v.vector, &x.vector); + (*Ainvx)(CblasNoTrans, &v.vector, params); + + /* gamma = ||v||_1 */ + gamma = gsl_blas_dasum(&v.vector); + + /* xi = sign(v) */ + for (i = 0; i < N; ++i) + { + double vi = gsl_vector_get(&v.vector, i); + gsl_vector_set(&xi.vector, i, GSL_SIGN(vi)); + } + + /* x = A^{-t} xi */ + gsl_vector_memcpy(&x.vector, &xi.vector); + (*Ainvx)(CblasTrans, &x.vector, params); + + for (k = 0; k < maxit; ++k) + { + size_t j = (size_t) gsl_blas_idamax(&x.vector); + + /* v := A^{-1} e_j */ + gsl_vector_set_zero(&v.vector); + gsl_vector_set(&v.vector, j, 1.0); + (*Ainvx)(CblasNoTrans, &v.vector, params); + + gamma_old = gamma; + gamma = gsl_blas_dasum(&v.vector); + + /* check for repeated sign vector (algorithm has converged) */ + if (condest_same_sign(&v.vector, &xi.vector) || (gamma < gamma_old)) + break; + + /* xi = sign(v) */ + for (i = 0; i < N; ++i) + { + double vi = gsl_vector_get(&v.vector, i); + gsl_vector_set(&xi.vector, i, GSL_SIGN(vi)); + } + + /* x = A^{-t} sign(v) */ + gsl_vector_memcpy(&x.vector, &xi.vector); + (*Ainvx)(CblasTrans, &x.vector, params); + } + + temp = 1.0; /* (-1)^i */ + for (i = 0; i < N; ++i) + { + double term = 1.0 + (double) i / (N - 1.0); + gsl_vector_set(&x.vector, i, temp * term); + temp = -temp; + } + + /* x := A^{-1} x */ + (*Ainvx)(CblasNoTrans, &x.vector, params); + + temp = 2.0 * gsl_blas_dasum(&x.vector) / (3.0 * N); + if (temp > gamma) + { + gsl_vector_memcpy(&v.vector, &x.vector); + gamma = temp; + } + + *Ainvnorm = gamma; + + return GSL_SUCCESS; + } +} + +static int +condest_tri_rcond(CBLAS_UPLO_t Uplo, const gsl_matrix * A, double * rcond, gsl_vector * work) +{ + const size_t M = A->size1; + const size_t N = A->size2; + + if (M != N) + { + GSL_ERROR ("matrix must be square", GSL_ENOTSQR); + } + else if (work->size != 3 * N) + { + GSL_ERROR ("work vector must have length 3*N", GSL_EBADLEN); + } + else + { + int status; + double Anorm = condest_tri_norm1(Uplo, A); /* ||A||_1 */ + double Ainvnorm; /* ||A^{-1}||_1 */ + + *rcond = 0.0; + + /* don't continue if matrix is singular */ + if (Anorm == 0.0) + return GSL_SUCCESS; + + /* estimate ||A^{-1}||_1 */ + if (Uplo == CblasUpper) + status = gsl_linalg_invnorm1(N, condest_invtriu, (void *) A, &Ainvnorm, work); + else + status = gsl_linalg_invnorm1(N, condest_invtril, (void *) A, &Ainvnorm, work); + + if (status) + return status; + + if (Ainvnorm != 0.0) + *rcond = (1.0 / Anorm) / Ainvnorm; + + return GSL_SUCCESS; + } +} + +/* calculate 1 norm of triangular matrix */ +static double +condest_tri_norm1(CBLAS_UPLO_t Uplo, const gsl_matrix * A) +{ + const size_t N = A->size2; + double max = 0.0; + size_t i, j; + + if (Uplo == CblasUpper) + { + for (j = 0; j < N; ++j) + { + double sum = 0.0; + for (i = 0; i <= j; ++i) + { + double Aij = gsl_matrix_get(A, i, j); + sum += fabs(Aij); + } + + max = GSL_MAX(max, sum); + } + } + else + { + for (j = 0; j < N; ++j) + { + double sum = 0.0; + for (i = j; i < N; ++i) + { + double Aij = gsl_matrix_get(A, i, j); + sum += fabs(Aij); + } + + max = GSL_MAX(max, sum); + } + } + + return max; +} + +/* return 1 if sign(x) = sign(y), 0 otherwise */ +static int +condest_same_sign(const gsl_vector * x, const gsl_vector * y) +{ + const size_t n = x->size; + size_t i; + + for (i = 0; i < n; ++i) + { + double xi = gsl_vector_get(x, i); + double yi = gsl_vector_get(y, i); + if (GSL_SIGN(xi) != GSL_SIGN(yi)) + return 0; + } + + return 1; +} + +/* x := A^{-1} x, A upper triangular */ +static int +condest_invtriu(CBLAS_TRANSPOSE_t TransA, gsl_vector * x, void * params) +{ + gsl_matrix * A = (gsl_matrix *) params; + return gsl_blas_dtrsv(CblasUpper, TransA, CblasNonUnit, A, x); +} + +/* x := A^{-1} x, A lower triangular */ +static int +condest_invtril(CBLAS_TRANSPOSE_t TransA, gsl_vector * x, void * params) +{ + gsl_matrix * A = (gsl_matrix *) params; + return gsl_blas_dtrsv(CblasLower, TransA, CblasNonUnit, A, x); +} diff -Nru gsl-doc-1.16/linalg/givens.c gsl-doc-2.3/linalg/givens.c --- gsl-doc-1.16/linalg/givens.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/linalg/givens.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -/* linalg/givens.c - * - * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -/* Generate a Givens rotation (cos,sin) which takes v=(x,y) to (|v|,0) - - From Golub and Van Loan, "Matrix Computations", Section 5.1.8 */ - -inline static void -create_givens (const double a, const double b, double *c, double *s) -{ - if (b == 0) - { - *c = 1; - *s = 0; - } - else if (fabs (b) > fabs (a)) - { - double t = -a / b; - double s1 = 1.0 / sqrt (1 + t * t); - *s = s1; - *c = s1 * t; - } - else - { - double t = -b / a; - double c1 = 1.0 / sqrt (1 + t * t); - *c = c1; - *s = c1 * t; - } -} diff -Nru gsl-doc-1.16/linalg/gsl_linalg.h gsl-doc-2.3/linalg/gsl_linalg.h --- gsl-doc-1.16/linalg/gsl_linalg.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/linalg/gsl_linalg.h 2016-11-29 21:53:35.000000000 +0000 @@ -20,10 +20,14 @@ #ifndef __GSL_LINALG_H__ #define __GSL_LINALG_H__ +#include #include #include #include #include +#include +#include +#include #undef __BEGIN_DECLS #undef __END_DECLS @@ -189,7 +193,7 @@ const gsl_permutation * p, const gsl_vector * b, gsl_vector * x, - gsl_vector * residual); + gsl_vector * work); int gsl_linalg_LU_invert (const gsl_matrix * LU, const gsl_permutation * p, @@ -219,7 +223,7 @@ const gsl_permutation * p, const gsl_vector_complex * b, gsl_vector_complex * x, - gsl_vector_complex * residual); + gsl_vector_complex * work); int gsl_linalg_complex_LU_invert (const gsl_matrix_complex * LU, const gsl_permutation * p, @@ -283,6 +287,10 @@ const gsl_vector * tau, gsl_matrix * A); +int gsl_linalg_QR_matQ (const gsl_matrix * QR, + const gsl_vector * tau, + gsl_matrix * A); + int gsl_linalg_QR_unpack (const gsl_matrix * QR, const gsl_vector * tau, gsl_matrix * Q, @@ -317,6 +325,20 @@ const gsl_vector * b, gsl_vector * x); +int gsl_linalg_QRPT_lssolve (const gsl_matrix * QR, + const gsl_vector * tau, + const gsl_permutation * p, + const gsl_vector * b, + gsl_vector * x, + gsl_vector * residual); + +int gsl_linalg_QRPT_lssolve2 (const gsl_matrix * QR, + const gsl_vector * tau, + const gsl_permutation * p, + const gsl_vector * b, + const size_t rank, + gsl_vector * x, + gsl_vector * residual); int gsl_linalg_QRPT_svx (const gsl_matrix * QR, const gsl_vector * tau, @@ -344,6 +366,29 @@ gsl_vector * u, const gsl_vector * v); +size_t gsl_linalg_QRPT_rank (const gsl_matrix * QR, const double tol); + +int gsl_linalg_QRPT_rcond(const gsl_matrix * QR, double * rcond, gsl_vector * work); + +/* COD decomposition */ + +int gsl_linalg_COD_decomp(gsl_matrix * A, gsl_vector * tau_Q, gsl_vector * tau_Z, + gsl_permutation * p, size_t * rank, gsl_vector * work); + +int gsl_linalg_COD_decomp_e(gsl_matrix * A, gsl_vector * tau_Q, gsl_vector * tau_Z, + gsl_permutation * p, double tol, size_t * rank, gsl_vector * work); + +int gsl_linalg_COD_lssolve (const gsl_matrix * QRZ, const gsl_vector * tau_Q, const gsl_vector * tau_Z, + const gsl_permutation * perm, const size_t rank, const gsl_vector * b, + gsl_vector * x, gsl_vector * residual); + +int gsl_linalg_COD_unpack(const gsl_matrix * QRZ, const gsl_vector * tau_Q, + const gsl_vector * tau_Z, const size_t rank, gsl_matrix * Q, + gsl_matrix * R, gsl_matrix * Z); + +int gsl_linalg_COD_matZ(const gsl_matrix * QRZ, const gsl_vector * tau_Z, const size_t rank, + gsl_matrix * A, gsl_vector * work); + /* LQ decomposition */ int gsl_linalg_LQ_decomp (gsl_matrix * A, gsl_vector * tau); @@ -423,6 +468,7 @@ /* Cholesky Decomposition */ int gsl_linalg_cholesky_decomp (gsl_matrix * A); +int gsl_linalg_cholesky_decomp1 (gsl_matrix * A); int gsl_linalg_cholesky_solve (const gsl_matrix * cholesky, const gsl_vector * b, @@ -441,6 +487,24 @@ */ int gsl_linalg_cholesky_decomp_unit(gsl_matrix * A, gsl_vector * D); +int gsl_linalg_cholesky_scale(const gsl_matrix * A, gsl_vector * S); + +int gsl_linalg_cholesky_scale_apply(gsl_matrix * A, const gsl_vector * S); + +int gsl_linalg_cholesky_decomp2(gsl_matrix * A, gsl_vector * S); + +int gsl_linalg_cholesky_svx2 (const gsl_matrix * LLT, + const gsl_vector * S, + gsl_vector * x); + +int gsl_linalg_cholesky_solve2 (const gsl_matrix * LLT, + const gsl_vector * S, + const gsl_vector * b, + gsl_vector * x); + +int gsl_linalg_cholesky_rcond (const gsl_matrix * LLT, double * rcond, + gsl_vector * work); + /* Complex Cholesky Decomposition */ int gsl_linalg_complex_cholesky_decomp (gsl_matrix_complex * A); @@ -454,6 +518,58 @@ int gsl_linalg_complex_cholesky_invert(gsl_matrix_complex * cholesky); +/* Pivoted Cholesky LDLT decomposition */ + +int gsl_linalg_pcholesky_decomp (gsl_matrix * A, gsl_permutation * p); + +int gsl_linalg_pcholesky_solve(const gsl_matrix * LDLT, + const gsl_permutation * p, + const gsl_vector * b, + gsl_vector * x); + +int gsl_linalg_pcholesky_svx(const gsl_matrix * LDLT, + const gsl_permutation * p, + gsl_vector * x); + +int gsl_linalg_pcholesky_decomp2(gsl_matrix * A, gsl_permutation * p, + gsl_vector * S); + +int gsl_linalg_pcholesky_solve2(const gsl_matrix * LDLT, + const gsl_permutation * p, + const gsl_vector * S, + const gsl_vector * b, + gsl_vector * x); + +int gsl_linalg_pcholesky_svx2(const gsl_matrix * LDLT, + const gsl_permutation * p, + const gsl_vector * S, + gsl_vector * x); + +int gsl_linalg_pcholesky_invert(const gsl_matrix * LDLT, const gsl_permutation * p, + gsl_matrix * Ainv); + +int gsl_linalg_pcholesky_rcond (const gsl_matrix * LDLT, const gsl_permutation * p, + double * rcond, gsl_vector * work); + +/* Modified Cholesky decomposition */ + +int gsl_linalg_mcholesky_decomp (gsl_matrix * A, gsl_permutation * p, + gsl_vector * E); + +int gsl_linalg_mcholesky_solve(const gsl_matrix * LDLT, + const gsl_permutation * p, + const gsl_vector * b, + gsl_vector * x); + +int gsl_linalg_mcholesky_svx(const gsl_matrix * LDLT, + const gsl_permutation * p, + gsl_vector * x); + +int gsl_linalg_mcholesky_rcond (const gsl_matrix * LDLT, const gsl_permutation * p, + double * rcond, gsl_vector * work); + +int gsl_linalg_mcholesky_invert(const gsl_matrix * LDLT, const gsl_permutation * p, + gsl_matrix * Ainv); /* Symmetric to symmetric tridiagonal decomposition */ @@ -588,6 +704,70 @@ int gsl_linalg_balance_accum (gsl_matrix * A, gsl_vector * D); int gsl_linalg_balance_columns (gsl_matrix * A, gsl_vector * D); +/* condition estimation */ + +int gsl_linalg_tri_upper_rcond(const gsl_matrix * A, double * rcond, gsl_vector * work); +int gsl_linalg_tri_lower_rcond(const gsl_matrix * A, double * rcond, gsl_vector * work); +int gsl_linalg_invnorm1(const size_t N, + int (* Ainvx)(CBLAS_TRANSPOSE_t TransA, gsl_vector * x, void * params), + void * params, double * Ainvnorm, gsl_vector * work); + +/* triangular matrices */ + +int gsl_linalg_tri_upper_invert(gsl_matrix * T); +int gsl_linalg_tri_lower_invert(gsl_matrix * T); +int gsl_linalg_tri_upper_unit_invert(gsl_matrix * T); +int gsl_linalg_tri_lower_unit_invert(gsl_matrix * T); + +INLINE_DECL void gsl_linalg_givens (const double a, const double b, + double *c, double *s); +INLINE_DECL void gsl_linalg_givens_gv (gsl_vector * v, const size_t i, + const size_t j, const double c, + const double s); + +#ifdef HAVE_INLINE + +/* Generate a Givens rotation (cos,sin) which takes v=(x,y) to (|v|,0) + From Golub and Van Loan, "Matrix Computations", Section 5.1.8 */ +INLINE_FUN +void +gsl_linalg_givens (const double a, const double b, double *c, double *s) +{ + if (b == 0) + { + *c = 1; + *s = 0; + } + else if (fabs (b) > fabs (a)) + { + double t = -a / b; + double s1 = 1.0 / sqrt (1 + t * t); + *s = s1; + *c = s1 * t; + } + else + { + double t = -b / a; + double c1 = 1.0 / sqrt (1 + t * t); + *c = c1; + *s = c1 * t; + } +} /* gsl_linalg_givens() */ + +INLINE_FUN +void +gsl_linalg_givens_gv (gsl_vector * v, const size_t i, const size_t j, + const double c, const double s) +{ + /* Apply rotation to vector v' = G^T v */ + + double vi = gsl_vector_get (v, i); + double vj = gsl_vector_get (v, j); + gsl_vector_set (v, i, c * vi - s * vj); + gsl_vector_set (v, j, s * vi + c * vj); +} + +#endif /* HAVE_INLINE */ __END_DECLS diff -Nru gsl-doc-1.16/linalg/hesstri.c gsl-doc-2.3/linalg/hesstri.c --- gsl-doc-1.16/linalg/hesstri.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/linalg/hesstri.c 2015-11-03 16:21:55.000000000 +0000 @@ -26,8 +26,6 @@ #include #include -#include "givens.c" - /* * This module contains routines related to the Hessenberg-Triangular * reduction of two general real matrices @@ -114,10 +112,10 @@ * compute G = [ CS SN ] so that G^t [ A(i-1,j) ] = [ * ] * [-SN CS ] [ A(i, j) ] [ 0 ] */ - create_givens(gsl_matrix_get(A, i - 1, j), - gsl_matrix_get(A, i, j), - &cs, - &sn); + gsl_linalg_givens(gsl_matrix_get(A, i - 1, j), + gsl_matrix_get(A, i, j), + &cs, + &sn); /* invert so drot() works correctly (G -> G^t) */ sn = -sn; @@ -141,10 +139,10 @@ /* step 2: rotate columns i, i - 1 to kill B(i, i - 1) */ - create_givens(-gsl_matrix_get(B, i, i), - gsl_matrix_get(B, i, i - 1), - &cs, - &sn); + gsl_linalg_givens(-gsl_matrix_get(B, i, i), + gsl_matrix_get(B, i, i - 1), + &cs, + &sn); /* invert so drot() works correctly (G -> G^t) */ sn = -sn; diff -Nru gsl-doc-1.16/linalg/householder.c gsl-doc-2.3/linalg/householder.c --- gsl-doc-1.16/linalg/householder.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/linalg/householder.c 2015-11-03 16:21:55.000000000 +0000 @@ -26,6 +26,26 @@ #include +/* +gsl_linalg_householder_transform() + Compute a householder transformation (tau,v) of a vector +x so that P x = [ I - tau*v*v' ] x annihilates x(1:n-1) + +Inputs: v - on input, x vector + on output, householder vector v + +Notes: +1) on output, v is normalized so that v[0] = 1. The 1 is +not actually stored; instead v[0] = -sign(x[0])*||x|| so +that: + +P x = v[0] * e_1 + +Therefore external routines should take care when applying +the projection matrix P to vectors, taking into account +that v[0] should be 1 when doing so. +*/ + double gsl_linalg_householder_transform (gsl_vector * v) { @@ -223,23 +243,21 @@ { /* compute d = v'w */ - double d0 = gsl_vector_get(w,0); + double w0 = gsl_vector_get(w,0); double d1, d; gsl_vector_const_view v1 = gsl_vector_const_subvector(v, 1, N-1); gsl_vector_view w1 = gsl_vector_subvector(w, 1, N-1); + /* compute d1 = v(2:n)'w(2:n) */ gsl_blas_ddot (&v1.vector, &w1.vector, &d1); - - d = d0 + d1; + + /* compute d = v'w = w(1) + d1 since v(1) = 1 */ + d = w0 + d1; /* compute w = w - tau (v) (v'w) */ - - { - double w0 = gsl_vector_get (w,0); - gsl_vector_set (w, 0, w0 - tau * d); - } - + + gsl_vector_set (w, 0, w0 - tau * d); gsl_blas_daxpy (-tau * d, &v1.vector, &w1.vector); } diff -Nru gsl-doc-1.16/linalg/inline.c gsl-doc-2.3/linalg/inline.c --- gsl-doc-1.16/linalg/inline.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/linalg/inline.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,32 @@ +/* linalg/inline.c + * + * Copyright (C) 2014 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include + +/* Compile all the inline functions */ + +#define COMPILE_INLINE_STATIC +#include "build.h" +#include + diff -Nru gsl-doc-1.16/linalg/invtri.c gsl-doc-2.3/linalg/invtri.c --- gsl-doc-1.16/linalg/invtri.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/linalg/invtri.c 2016-08-22 15:16:24.000000000 +0000 @@ -0,0 +1,151 @@ +/* linalg/invtri.c + * + * Copyright (C) 2016 Patrick Alken + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 3, or (at your option) any + * later version. + * + * This source is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * This module contains code to invert triangular matrices + */ + +#include + +#include +#include +#include +#include +#include +#include + +static int triangular_inverse(CBLAS_UPLO_t Uplo, CBLAS_DIAG_t Diag, gsl_matrix * T); + +int +gsl_linalg_tri_upper_invert(gsl_matrix * T) +{ + int status = triangular_inverse(CblasUpper, CblasNonUnit, T); + return status; +} + +int +gsl_linalg_tri_lower_invert(gsl_matrix * T) +{ + int status = triangular_inverse(CblasLower, CblasNonUnit, T); + return status; +} + +int +gsl_linalg_tri_upper_unit_invert(gsl_matrix * T) +{ + int status = triangular_inverse(CblasUpper, CblasUnit, T); + return status; +} + +int +gsl_linalg_tri_lower_unit_invert(gsl_matrix * T) +{ + int status = triangular_inverse(CblasLower, CblasUnit, T); + return status; +} + +/* +triangular_inverse() + Invert a triangular matrix T + +Inputs: Uplo - CblasUpper or CblasLower + Diag - unit triangular? + T - on output the upper (or lower) part of T + is replaced by its inverse + +Return: success/error +*/ + +static int +triangular_inverse(CBLAS_UPLO_t Uplo, CBLAS_DIAG_t Diag, gsl_matrix * T) +{ + const size_t N = T->size1; + + if (N != T->size2) + { + GSL_ERROR ("matrix must be square", GSL_ENOTSQR); + } + else + { + gsl_matrix_view m; + gsl_vector_view v; + size_t i; + + if (Uplo == CblasUpper) + { + for (i = 0; i < N; ++i) + { + double aii; + + if (Diag == CblasNonUnit) + { + double *Tii = gsl_matrix_ptr(T, i, i); + *Tii = 1.0 / *Tii; + aii = -(*Tii); + } + else + { + aii = -1.0; + } + + if (i > 0) + { + m = gsl_matrix_submatrix(T, 0, 0, i, i); + v = gsl_matrix_subcolumn(T, i, 0, i); + + gsl_blas_dtrmv(CblasUpper, CblasNoTrans, Diag, + &m.matrix, &v.vector); + + gsl_blas_dscal(aii, &v.vector); + } + } /* for (i = 0; i < N; ++i) */ + } + else + { + for (i = 0; i < N; ++i) + { + double ajj; + size_t j = N - i - 1; + + if (Diag == CblasNonUnit) + { + double *Tjj = gsl_matrix_ptr(T, j, j); + *Tjj = 1.0 / *Tjj; + ajj = -(*Tjj); + } + else + { + ajj = -1.0; + } + + if (j < N - 1) + { + m = gsl_matrix_submatrix(T, j + 1, j + 1, + N - j - 1, N - j - 1); + v = gsl_matrix_subcolumn(T, j, j + 1, N - j - 1); + + gsl_blas_dtrmv(CblasLower, CblasNoTrans, Diag, + &m.matrix, &v.vector); + + gsl_blas_dscal(ajj, &v.vector); + } + } /* for (i = 0; i < N; ++i) */ + } + + return GSL_SUCCESS; + } +} diff -Nru gsl-doc-1.16/linalg/lq.c gsl-doc-2.3/linalg/lq.c --- gsl-doc-1.16/linalg/lq.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/linalg/lq.c 2015-11-03 16:21:55.000000000 +0000 @@ -28,7 +28,6 @@ #include -#include "givens.c" #include "apply_givens.c" /* Note: The standard in numerical linear algebra is to solve A x = b @@ -501,8 +500,8 @@ double wk = gsl_vector_get (w, k); double wkm1 = gsl_vector_get (w, k - 1); - create_givens (wkm1, wk, &c, &s); - apply_givens_vec (w, k - 1, k, c, s); + gsl_linalg_givens (wkm1, wk, &c, &s); + gsl_linalg_givens_gv (w, k - 1, k, c, s); apply_givens_lq (M, N, Q, L, k - 1, k, c, s); } @@ -526,7 +525,7 @@ double diag = gsl_matrix_get (L, k - 1, k - 1); double offdiag = gsl_matrix_get (L, k - 1 , k); - create_givens (diag, offdiag, &c, &s); + gsl_linalg_givens (diag, offdiag, &c, &s); apply_givens_lq (M, N, Q, L, k - 1, k, c, s); gsl_matrix_set (L, k - 1, k, 0.0); /* exact zero of G^T */ diff -Nru gsl-doc-1.16/linalg/lu.c gsl-doc-2.3/linalg/lu.c --- gsl-doc-1.16/linalg/lu.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/linalg/lu.c 2016-11-29 21:51:39.000000000 +0000 @@ -202,7 +202,7 @@ int -gsl_linalg_LU_refine (const gsl_matrix * A, const gsl_matrix * LU, const gsl_permutation * p, const gsl_vector * b, gsl_vector * x, gsl_vector * residual) +gsl_linalg_LU_refine (const gsl_matrix * A, const gsl_matrix * LU, const gsl_permutation * p, const gsl_vector * b, gsl_vector * x, gsl_vector * work) { if (A->size1 != A->size2) { @@ -228,6 +228,10 @@ { GSL_ERROR ("matrix size must match solution size", GSL_EBADLEN); } + else if (LU->size1 != work->size) + { + GSL_ERROR ("matrix size must match workspace size", GSL_EBADLEN); + } else if (singular (LU)) { GSL_ERROR ("matrix is singular", GSL_EDOM); @@ -236,15 +240,15 @@ { int status; - /* Compute residual, residual = (A * x - b) */ + /* Compute residual = (A * x - b) */ - gsl_vector_memcpy (residual, b); - gsl_blas_dgemv (CblasNoTrans, 1.0, A, x, -1.0, residual); + gsl_vector_memcpy (work, b); + gsl_blas_dgemv (CblasNoTrans, 1.0, A, x, -1.0, work); /* Find correction, delta = - (A^-1) * residual, and apply it */ - status = gsl_linalg_LU_svx (LU, p, residual); - gsl_blas_daxpy (-1.0, residual, x); + status = gsl_linalg_LU_svx (LU, p, work); + gsl_blas_daxpy (-1.0, work, x); return status; } diff -Nru gsl-doc-1.16/linalg/luc.c gsl-doc-2.3/linalg/luc.c --- gsl-doc-1.16/linalg/luc.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/linalg/luc.c 2016-11-29 21:53:25.000000000 +0000 @@ -211,7 +211,7 @@ int -gsl_linalg_complex_LU_refine (const gsl_matrix_complex * A, const gsl_matrix_complex * LU, const gsl_permutation * p, const gsl_vector_complex * b, gsl_vector_complex * x, gsl_vector_complex * residual) +gsl_linalg_complex_LU_refine (const gsl_matrix_complex * A, const gsl_matrix_complex * LU, const gsl_permutation * p, const gsl_vector_complex * b, gsl_vector_complex * x, gsl_vector_complex * work) { if (A->size1 != A->size2) { @@ -237,6 +237,10 @@ { GSL_ERROR ("matrix size must match solution size", GSL_EBADLEN); } + else if (LU->size1 != work->size) + { + GSL_ERROR ("matrix size must match workspace size", GSL_EBADLEN); + } else if (singular (LU)) { GSL_ERROR ("matrix is singular", GSL_EDOM); @@ -245,23 +249,23 @@ { int status; - /* Compute residual, residual = (A * x - b) */ + /* Compute residual = (A * x - b) */ - gsl_vector_complex_memcpy (residual, b); + gsl_vector_complex_memcpy (work, b); { gsl_complex one = GSL_COMPLEX_ONE; gsl_complex negone = GSL_COMPLEX_NEGONE; - gsl_blas_zgemv (CblasNoTrans, one, A, x, negone, residual); + gsl_blas_zgemv (CblasNoTrans, one, A, x, negone, work); } /* Find correction, delta = - (A^-1) * residual, and apply it */ - status = gsl_linalg_complex_LU_svx (LU, p, residual); + status = gsl_linalg_complex_LU_svx (LU, p, work); { gsl_complex negone= GSL_COMPLEX_NEGONE; - gsl_blas_zaxpy (negone, residual, x); + gsl_blas_zaxpy (negone, work, x); } return status; diff -Nru gsl-doc-1.16/linalg/Makefile.am gsl-doc-2.3/linalg/Makefile.am --- gsl-doc-1.16/linalg/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/linalg/Makefile.am 2016-08-15 16:58:52.000000000 +0000 @@ -2,18 +2,15 @@ pkginclude_HEADERS = gsl_linalg.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) -libgsllinalg_la_SOURCES = multiply.c exponential.c tridiag.c tridiag.h lu.c luc.c hh.c qr.c qrpt.c lq.c ptlq.c svd.c householder.c householdercomplex.c hessenberg.c hesstri.c cholesky.c choleskyc.c symmtd.c hermtd.c bidiag.c balance.c balancemat.c +libgsllinalg_la_SOURCES = cod.c condest.c invtri.c multiply.c exponential.c tridiag.c tridiag.h lu.c luc.c hh.c qr.c qrpt.c lq.c ptlq.c svd.c householder.c householdercomplex.c hessenberg.c hesstri.c cholesky.c choleskyc.c mcholesky.c pcholesky.c symmtd.c hermtd.c bidiag.c balance.c balancemat.c inline.c -noinst_HEADERS = givens.c apply_givens.c svdstep.c tridiag.h +noinst_HEADERS = apply_givens.c cholesky_common.c svdstep.c tridiag.h test_cholesky.c TESTS = $(check_PROGRAMS) check_PROGRAMS = test -test_LDADD = libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../permutation/libgslpermutation.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la - test_SOURCES = test.c - - +test_LDADD = libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../permutation/libgslpermutation.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la ../rng/libgslrng.la diff -Nru gsl-doc-1.16/linalg/Makefile.in gsl-doc-2.3/linalg/Makefile.in --- gsl-doc-1.16/linalg/Makefile.in 2013-07-19 15:14:53.000000000 +0000 +++ gsl-doc-2.3/linalg/Makefile.in 2016-12-09 00:04:21.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -95,11 +95,12 @@ CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgsllinalg_la_LIBADD = -am_libgsllinalg_la_OBJECTS = multiply.lo exponential.lo tridiag.lo \ - lu.lo luc.lo hh.lo qr.lo qrpt.lo lq.lo ptlq.lo svd.lo \ - householder.lo householdercomplex.lo hessenberg.lo hesstri.lo \ - cholesky.lo choleskyc.lo symmtd.lo hermtd.lo bidiag.lo \ - balance.lo balancemat.lo +am_libgsllinalg_la_OBJECTS = cod.lo condest.lo invtri.lo multiply.lo \ + exponential.lo tridiag.lo lu.lo luc.lo hh.lo qr.lo qrpt.lo \ + lq.lo ptlq.lo svd.lo householder.lo householdercomplex.lo \ + hessenberg.lo hesstri.lo cholesky.lo choleskyc.lo mcholesky.lo \ + pcholesky.lo symmtd.lo hermtd.lo bidiag.lo balance.lo \ + balancemat.lo inline.lo libgsllinalg_la_OBJECTS = $(am_libgsllinalg_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -112,7 +113,8 @@ ../matrix/libgslmatrix.la ../vector/libgslvector.la \ ../block/libgslblock.la ../complex/libgslcomplex.la \ ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la \ - ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la + ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la \ + ../rng/libgslrng.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false @@ -384,6 +386,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -406,7 +409,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -522,12 +528,12 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgsllinalg.la pkginclude_HEADERS = gsl_linalg.h -INCLUDES = -I$(top_srcdir) -libgsllinalg_la_SOURCES = multiply.c exponential.c tridiag.c tridiag.h lu.c luc.c hh.c qr.c qrpt.c lq.c ptlq.c svd.c householder.c householdercomplex.c hessenberg.c hesstri.c cholesky.c choleskyc.c symmtd.c hermtd.c bidiag.c balance.c balancemat.c -noinst_HEADERS = givens.c apply_givens.c svdstep.c tridiag.h +AM_CPPFLAGS = -I$(top_srcdir) +libgsllinalg_la_SOURCES = cod.c condest.c invtri.c multiply.c exponential.c tridiag.c tridiag.h lu.c luc.c hh.c qr.c qrpt.c lq.c ptlq.c svd.c householder.c householdercomplex.c hessenberg.c hesstri.c cholesky.c choleskyc.c mcholesky.c pcholesky.c symmtd.c hermtd.c bidiag.c balance.c balancemat.c inline.c +noinst_HEADERS = apply_givens.c cholesky_common.c svdstep.c tridiag.h test_cholesky.c TESTS = $(check_PROGRAMS) -test_LDADD = libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../permutation/libgslpermutation.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c +test_LDADD = libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../permutation/libgslpermutation.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la ../rng/libgslrng.la all: all-am .SUFFIXES: @@ -601,6 +607,8 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bidiag.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cholesky.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/choleskyc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cod.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/condest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exponential.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hermtd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hessenberg.Plo@am__quote@ @@ -608,10 +616,14 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hh.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/householder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/householdercomplex.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inline.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/invtri.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lq.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lu.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/luc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mcholesky.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multiply.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcholesky.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ptlq.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qrpt.Plo@am__quote@ diff -Nru gsl-doc-1.16/linalg/mcholesky.c gsl-doc-2.3/linalg/mcholesky.c --- gsl-doc-1.16/linalg/mcholesky.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/linalg/mcholesky.c 2016-08-19 16:47:27.000000000 +0000 @@ -0,0 +1,271 @@ +/* Modified Cholesky Decomposition + * + * Copyright (C) 2016 Patrick Alken + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 3, or (at your option) any + * later version. + * + * This source is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cholesky_common.c" + +/* + * This module contains routines related to the Modified Cholesky + * Decomposition, which factors a symmetric indefinite matrix A as + * + * P (A + E) P^T = L D L^T + * + * where: + * P: permutation matrix + * E: small, non-negative diagonal matrix + * L: unit lower triangular matrix + * D: strictly positive diagonal matrix + * + * These routines follow these works closely: + * + * [1] P. E. Gill, W. Murray, M. H. Wright, Practical Optimization, + * Academic Press, 1981. + * + * [2] Dennis and Schnabel, Numerical Methods for Unconstrained Optimization + * and Nonlinear Equations, SIAM, 1996 + */ + +static size_t mcholesky_maxabs(const gsl_vector * v, double *maxabs); + +/* +gsl_linalg_mcholesky_decomp() + Perform Pivoted Modified Cholesky LDLT decomposition of a symmetric positive +indefinite matrix: + +P (A + E) P^T = L D L^T + +Inputs: A - (input) symmetric, positive indefinite matrix, + stored in lower triangle + (output) lower triangle contains L; diagonal contains D + p - (output) permutation matrix P + E - (output) perturbation matrix E + +Return: success/error + +Notes: +1) Based on algorithm 4.2.2 (Outer Product LDLT with Pivoting) of +Golub and Van Loan, Matrix Computations (4th ed), with modifications +described in [1] and [2] + +2) E can be set to NULL if not required +*/ + +int +gsl_linalg_mcholesky_decomp (gsl_matrix * A, gsl_permutation * p, + gsl_vector * E) +{ + const size_t N = A->size1; + + if (N != A->size2) + { + GSL_ERROR("LDLT decomposition requires square matrix", GSL_ENOTSQR); + } + else if (p->size != N) + { + GSL_ERROR ("permutation length must match matrix size", GSL_EBADLEN); + } + else + { + const double delta = GSL_DBL_EPSILON; + double beta; + double gamma = 0.0; + double xi = 0.0; + gsl_vector_view diag = gsl_matrix_diagonal(A); + size_t i, j; + + /* save a copy of A in upper triangle (for later rcond calculation) */ + gsl_matrix_transpose_tricpy('L', 0, A, A); + + gsl_permutation_init(p); + + /* compute: + * gamma = max | A_{ii} | + * xi = max_{i \ne j} | A_{ij} | + */ + for (i = 0; i < N; ++i) + { + double aii = gsl_matrix_get(A, i, i); + + gamma = GSL_MAX(gamma, fabs(aii)); + + for (j = 0; j < i; ++j) + { + double aij = gsl_matrix_get(A, i, j); + xi = GSL_MAX(xi, fabs(aij)); + } + } + + /* compute: + * beta = sqrt[ max { gamma, xi/nu, eps } ] + * with: nu = max{ sqrt(N^2 - 1), 1 } + */ + if (N == 1) + { + beta = GSL_MAX(GSL_MAX(gamma, xi), GSL_DBL_EPSILON); + } + else + { + double nu = sqrt(N*N - 1.0); + beta = GSL_MAX(GSL_MAX(gamma, xi / nu), GSL_DBL_EPSILON); + } + + beta = sqrt(beta); + + for (j = 0; j < N; ++j) + { + double ajj, thetaj, u, alpha, alphainv; + gsl_vector_view w; + size_t q; + + /* compute q = max_idx { A_jj, ..., A_nn } */ + w = gsl_vector_subvector(&diag.vector, j, N - j); + q = mcholesky_maxabs(&w.vector, NULL) + j; + + gsl_permutation_swap(p, q, j); + cholesky_swap_rowcol(A, q, j); + + /* theta_j = max_{j+1 <= i <= n} |A_{ij}| */ + if (j < N - 1) + { + w = gsl_matrix_subcolumn(A, j, j + 1, N - j - 1); + mcholesky_maxabs(&w.vector, &thetaj); + } + else + { + thetaj = 0.0; + } + + u = thetaj / beta; + + /* compute alpha = d_j */ + ajj = gsl_matrix_get(A, j, j); + alpha = GSL_MAX(GSL_MAX(delta, fabs(ajj)), u * u); + alphainv = 1.0 / alpha; + + if (j < N - 1) + { + /* v = A(j+1:n, j) */ + gsl_vector_view v = gsl_matrix_subcolumn(A, j, j + 1, N - j - 1); + + /* m = A(j+1:n, j+1:n) */ + gsl_matrix_view m = gsl_matrix_submatrix(A, j + 1, j + 1, N - j - 1, N - j - 1); + + /* m = m - v v^T / alpha */ + gsl_blas_dsyr(CblasLower, -alphainv, &v.vector, &m.matrix); + + /* v = v / alpha */ + gsl_vector_scale(&v.vector, alphainv); + + } + + if (E) + gsl_vector_set(E, j, alpha - ajj); + + gsl_matrix_set(A, j, j, alpha); + } + + if (E) + { + /* we currently have: P A P^T + E = L D L^T, permute E + * so that we have: P (A + E) P^T = L D L^T */ + gsl_permute_vector_inverse(p, E); + } + + return GSL_SUCCESS; + } +} + +int +gsl_linalg_mcholesky_solve(const gsl_matrix * LDLT, + const gsl_permutation * p, + const gsl_vector * b, + gsl_vector * x) +{ + int status = gsl_linalg_pcholesky_solve(LDLT, p, b, x); + return status; +} + +int +gsl_linalg_mcholesky_svx(const gsl_matrix * LDLT, + const gsl_permutation * p, + gsl_vector * x) +{ + int status = gsl_linalg_pcholesky_svx(LDLT, p, x); + return status; +} + +int +gsl_linalg_mcholesky_rcond (const gsl_matrix * LDLT, const gsl_permutation * p, + double * rcond, gsl_vector * work) +{ + int status = gsl_linalg_pcholesky_rcond(LDLT, p, rcond, work); + return status; +} + +int +gsl_linalg_mcholesky_invert(const gsl_matrix * LDLT, const gsl_permutation * p, + gsl_matrix * Ainv) +{ + int status = gsl_linalg_pcholesky_invert(LDLT, p, Ainv); + return status; +} + +/* +mcholesky_maxabs() + Compute: + +val = max_i |v_i| + +Inputs: v - vector + maxabs - (output) max abs value + +Return: index corresponding to max_i |v_i| +*/ + +static size_t +mcholesky_maxabs(const gsl_vector * v, double *maxabs) +{ + const size_t n = v->size; + size_t i; + size_t idx = 0; + double max = gsl_vector_get(v, idx); + + for (i = 1; i < n; ++i) + { + double vi = gsl_vector_get(v, i); + double absvi = fabs(vi); + + if (absvi > max) + { + max = absvi; + idx = i; + } + } + + if (maxabs) + *maxabs = max; + + return idx; +} diff -Nru gsl-doc-1.16/linalg/pcholesky.c gsl-doc-2.3/linalg/pcholesky.c --- gsl-doc-1.16/linalg/pcholesky.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/linalg/pcholesky.c 2016-08-22 15:21:15.000000000 +0000 @@ -0,0 +1,594 @@ +/* L D L^T Decomposition + * + * Copyright (C) 2016 Patrick Alken + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 3, or (at your option) any + * later version. + * + * This source is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +/* + * L D L^T decomposition of a symmetrix positive definite matrix. + * + * This algorithm does: + * P A P' = L D L' + * with + * L := unit lower left triangle matrix + * D := diagonal matrix + * L' := the transposed form of L. + * P := permutation matrix + * + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cholesky_common.c" + +static double cholesky_LDLT_norm1(const gsl_matrix * LDLT, const gsl_permutation * p, + gsl_vector * work); +static int cholesky_LDLT_Ainv(CBLAS_TRANSPOSE_t TransA, gsl_vector * x, void * params); + +typedef struct +{ + const gsl_matrix * LDLT; + const gsl_permutation * perm; +} pcholesky_params; + +/* +pcholesky_decomp() + Perform Pivoted Cholesky LDLT decomposition of a symmetric positive +semidefinite matrix + +Inputs: copy_uplo - copy lower triangle to upper to save original matrix + for rcond calculation later + A - (input) symmetric, positive semidefinite matrix, + stored in lower triangle + (output) lower triangle contains L; diagonal contains D + p - permutation vector + +Return: success/error + +Notes: +1) Based on algorithm 4.2.2 (Outer Product LDLT with Pivoting) of +Golub and Van Loan, Matrix Computations (4th ed). +*/ + +static int +pcholesky_decomp (const int copy_uplo, gsl_matrix * A, gsl_permutation * p) +{ + const size_t N = A->size1; + + if (N != A->size2) + { + GSL_ERROR("LDLT decomposition requires square matrix", GSL_ENOTSQR); + } + else if (p->size != N) + { + GSL_ERROR ("permutation length must match matrix size", GSL_EBADLEN); + } + else + { + gsl_vector_view diag = gsl_matrix_diagonal(A); + size_t k; + + if (copy_uplo) + { + /* save a copy of A in upper triangle (for later rcond calculation) */ + gsl_matrix_transpose_tricpy('L', 0, A, A); + } + + gsl_permutation_init(p); + + for (k = 0; k < N; ++k) + { + gsl_vector_view w; + size_t j; + + /* compute j = max_idx { A_kk, ..., A_nn } */ + w = gsl_vector_subvector(&diag.vector, k, N - k); + j = gsl_vector_max_index(&w.vector) + k; + gsl_permutation_swap(p, k, j); + + cholesky_swap_rowcol(A, k, j); + + if (k < N - 1) + { + double alpha = gsl_matrix_get(A, k, k); + double alphainv = 1.0 / alpha; + + /* v = A(k+1:n, k) */ + gsl_vector_view v = gsl_matrix_subcolumn(A, k, k + 1, N - k - 1); + + /* m = A(k+1:n, k+1:n) */ + gsl_matrix_view m = gsl_matrix_submatrix(A, k + 1, k + 1, N - k - 1, N - k - 1); + + /* m = m - v v^T / alpha */ + gsl_blas_dsyr(CblasLower, -alphainv, &v.vector, &m.matrix); + + /* v = v / alpha */ + gsl_vector_scale(&v.vector, alphainv); + } + } + + return GSL_SUCCESS; + } +} + +/* +gsl_linalg_pcholesky_decomp() + Perform Pivoted Cholesky LDLT decomposition of a symmetric positive +semidefinite matrix + +Inputs: A - (input) symmetric, positive semidefinite matrix, + stored in lower triangle + (output) lower triangle contains L; diagonal contains D + p - permutation vector + +Return: success/error + +Notes: +1) Based on algorithm 4.2.2 (Outer Product LDLT with Pivoting) of +Golub and Van Loan, Matrix Computations (4th ed). +*/ + +int +gsl_linalg_pcholesky_decomp (gsl_matrix * A, gsl_permutation * p) +{ + int status = pcholesky_decomp(1, A, p); + return status; +} + +int +gsl_linalg_pcholesky_solve(const gsl_matrix * LDLT, + const gsl_permutation * p, + const gsl_vector * b, + gsl_vector * x) +{ + if (LDLT->size1 != LDLT->size2) + { + GSL_ERROR ("LDLT matrix must be square", GSL_ENOTSQR); + } + else if (LDLT->size1 != p->size) + { + GSL_ERROR ("matrix size must match permutation size", GSL_EBADLEN); + } + else if (LDLT->size1 != b->size) + { + GSL_ERROR ("matrix size must match b size", GSL_EBADLEN); + } + else if (LDLT->size2 != x->size) + { + GSL_ERROR ("matrix size must match solution size", GSL_EBADLEN); + } + else + { + int status; + + gsl_vector_memcpy (x, b); + + status = gsl_linalg_pcholesky_svx (LDLT, p, x); + + return status; + } +} + +int +gsl_linalg_pcholesky_svx(const gsl_matrix * LDLT, + const gsl_permutation * p, + gsl_vector * x) +{ + if (LDLT->size1 != LDLT->size2) + { + GSL_ERROR ("LDLT matrix must be square", GSL_ENOTSQR); + } + else if (LDLT->size1 != p->size) + { + GSL_ERROR ("matrix size must match permutation size", GSL_EBADLEN); + } + else if (LDLT->size2 != x->size) + { + GSL_ERROR ("matrix size must match solution size", GSL_EBADLEN); + } + else + { + gsl_vector_const_view D = gsl_matrix_const_diagonal(LDLT); + + /* x := P b */ + gsl_permute_vector(p, x); + + /* solve: L w = P b */ + gsl_blas_dtrsv(CblasLower, CblasNoTrans, CblasUnit, LDLT, x); + + /* solve: D y = w */ + gsl_vector_div(x, &D.vector); + + /* solve: L^T z = y */ + gsl_blas_dtrsv(CblasLower, CblasTrans, CblasUnit, LDLT, x); + + /* compute: x = P^T z */ + gsl_permute_vector_inverse(p, x); + + return GSL_SUCCESS; + } +} + +int +gsl_linalg_pcholesky_decomp2(gsl_matrix * A, gsl_permutation * p, + gsl_vector * S) +{ + const size_t M = A->size1; + const size_t N = A->size2; + + if (M != N) + { + GSL_ERROR("cholesky decomposition requires square matrix", GSL_ENOTSQR); + } + else if (N != p->size) + { + GSL_ERROR ("matrix size must match permutation size", GSL_EBADLEN); + } + else if (N != S->size) + { + GSL_ERROR("S must have length N", GSL_EBADLEN); + } + else + { + int status; + + /* save a copy of A in upper triangle (for later rcond calculation) */ + gsl_matrix_transpose_tricpy('L', 0, A, A); + + /* compute scaling factors to reduce cond(A) */ + status = gsl_linalg_cholesky_scale(A, S); + if (status) + return status; + + /* apply scaling factors */ + status = gsl_linalg_cholesky_scale_apply(A, S); + if (status) + return status; + + /* compute Cholesky decomposition of diag(S) A diag(S) */ + status = pcholesky_decomp(0, A, p); + if (status) + return status; + + return GSL_SUCCESS; + } +} + +int +gsl_linalg_pcholesky_solve2(const gsl_matrix * LDLT, + const gsl_permutation * p, + const gsl_vector * S, + const gsl_vector * b, + gsl_vector * x) +{ + if (LDLT->size1 != LDLT->size2) + { + GSL_ERROR ("LDLT matrix must be square", GSL_ENOTSQR); + } + else if (LDLT->size1 != p->size) + { + GSL_ERROR ("matrix size must match permutation size", GSL_EBADLEN); + } + else if (LDLT->size1 != S->size) + { + GSL_ERROR ("matrix size must match S", GSL_EBADLEN); + } + else if (LDLT->size1 != b->size) + { + GSL_ERROR ("matrix size must match b size", GSL_EBADLEN); + } + else if (LDLT->size2 != x->size) + { + GSL_ERROR ("matrix size must match solution size", GSL_EBADLEN); + } + else + { + int status; + + gsl_vector_memcpy (x, b); + + status = gsl_linalg_pcholesky_svx2 (LDLT, p, S, x); + + return status; + } +} + +int +gsl_linalg_pcholesky_svx2(const gsl_matrix * LDLT, + const gsl_permutation * p, + const gsl_vector * S, + gsl_vector * x) +{ + if (LDLT->size1 != LDLT->size2) + { + GSL_ERROR ("LDLT matrix must be square", GSL_ENOTSQR); + } + else if (LDLT->size1 != p->size) + { + GSL_ERROR ("matrix size must match permutation size", GSL_EBADLEN); + } + else if (LDLT->size1 != S->size) + { + GSL_ERROR ("matrix size must match S", GSL_EBADLEN); + } + else if (LDLT->size2 != x->size) + { + GSL_ERROR ("matrix size must match solution size", GSL_EBADLEN); + } + else + { + int status; + + /* x := S b */ + gsl_vector_mul(x, S); + + /* solve: A~ x~ = b~, with A~ = S A S, b~ = S b */ + status = gsl_linalg_pcholesky_svx(LDLT, p, x); + if (status) + return status; + + /* compute: x = S x~ */ + gsl_vector_mul(x, S); + + return GSL_SUCCESS; + } +} + +/* +gsl_linalg_pcholesky_invert() + Compute the inverse of a symmetric positive definite matrix in +Cholesky form. + +Inputs: LDLT - matrix in cholesky form + p - permutation + Ainv - (output) A^{-1} + +Return: success or error +*/ + +int +gsl_linalg_pcholesky_invert(const gsl_matrix * LDLT, const gsl_permutation * p, + gsl_matrix * Ainv) +{ + const size_t M = LDLT->size1; + const size_t N = LDLT->size2; + + if (M != N) + { + GSL_ERROR ("LDLT matrix must be square", GSL_ENOTSQR); + } + else if (LDLT->size1 != p->size) + { + GSL_ERROR ("matrix size must match permutation size", GSL_EBADLEN); + } + else if (Ainv->size1 != Ainv->size2) + { + GSL_ERROR ("Ainv matrix must be square", GSL_ENOTSQR); + } + else if (Ainv->size1 != M) + { + GSL_ERROR ("Ainv matrix has wrong dimensions", GSL_EBADLEN); + } + else + { + size_t i, j; + gsl_vector_view v1, v2; + + /* invert the lower triangle of LDLT */ + gsl_matrix_memcpy(Ainv, LDLT); + gsl_linalg_tri_lower_unit_invert(Ainv); + + /* compute sqrt(D^{-1}) L^{-1} in the lower triangle of Ainv */ + for (i = 0; i < N; ++i) + { + double di = gsl_matrix_get(LDLT, i, i); + double sqrt_di = sqrt(di); + + for (j = 0; j < i; ++j) + { + double *Lij = gsl_matrix_ptr(Ainv, i, j); + *Lij /= sqrt_di; + } + + gsl_matrix_set(Ainv, i, i, 1.0 / sqrt_di); + } + + /* + * The lower triangle of Ainv now contains D^{-1/2} L^{-1}. Now compute + * A^{-1} = L^{-T} D^{-1} L^{-1} + */ + + for (i = 0; i < N; ++i) + { + double aii = gsl_matrix_get(Ainv, i, i); + + if (i < N - 1) + { + double tmp; + + v1 = gsl_matrix_subcolumn(Ainv, i, i, N - i); + gsl_blas_ddot(&v1.vector, &v1.vector, &tmp); + gsl_matrix_set(Ainv, i, i, tmp); + + if (i > 0) + { + gsl_matrix_view m = gsl_matrix_submatrix(Ainv, i + 1, 0, N - i - 1, i); + + v1 = gsl_matrix_subcolumn(Ainv, i, i + 1, N - i - 1); + v2 = gsl_matrix_subrow(Ainv, i, 0, i); + + gsl_blas_dgemv(CblasTrans, 1.0, &m.matrix, &v1.vector, aii, &v2.vector); + } + } + else + { + v1 = gsl_matrix_row(Ainv, N - 1); + gsl_blas_dscal(aii, &v1.vector); + } + } + + /* copy lower triangle to upper */ + gsl_matrix_transpose_tricpy('L', 0, Ainv, Ainv); + + /* now apply permutation p to the matrix */ + + /* compute L^{-T} D^{-1} L^{-1} P^T */ + for (i = 0; i < N; ++i) + { + v1 = gsl_matrix_row(Ainv, i); + gsl_permute_vector_inverse(p, &v1.vector); + } + + /* compute P L^{-T} D^{-1} L^{-1} P^T */ + for (i = 0; i < N; ++i) + { + v1 = gsl_matrix_column(Ainv, i); + gsl_permute_vector_inverse(p, &v1.vector); + } + + return GSL_SUCCESS; + } +} + +int +gsl_linalg_pcholesky_rcond (const gsl_matrix * LDLT, const gsl_permutation * p, + double * rcond, gsl_vector * work) +{ + const size_t M = LDLT->size1; + const size_t N = LDLT->size2; + + if (M != N) + { + GSL_ERROR ("cholesky matrix must be square", GSL_ENOTSQR); + } + else if (work->size != 3 * N) + { + GSL_ERROR ("work vector must have length 3*N", GSL_EBADLEN); + } + else + { + int status; + double Anorm = cholesky_LDLT_norm1(LDLT, p, work); /* ||A||_1 */ + double Ainvnorm; /* ||A^{-1}||_1 */ + pcholesky_params params; + + *rcond = 0.0; + + /* don't continue if matrix is singular */ + if (Anorm == 0.0) + return GSL_SUCCESS; + + params.LDLT = LDLT; + params.perm = p; + + /* estimate ||A^{-1}||_1 */ + status = gsl_linalg_invnorm1(N, cholesky_LDLT_Ainv, ¶ms, &Ainvnorm, work); + + if (status) + return status; + + if (Ainvnorm != 0.0) + *rcond = (1.0 / Anorm) / Ainvnorm; + + return GSL_SUCCESS; + } +} + +/* +cholesky_LDLT_norm1 + Compute 1-norm of original matrix A, stored in upper triangle of LDLT; +diagonal entries have to be reconstructed + +Inputs: LDLT - Cholesky L D L^T decomposition (lower triangle) with + original matrix in upper triangle + p - permutation vector + work - workspace, length 2*N +*/ + +static double +cholesky_LDLT_norm1(const gsl_matrix * LDLT, const gsl_permutation * p, gsl_vector * work) +{ + const size_t N = LDLT->size1; + gsl_vector_const_view D = gsl_matrix_const_diagonal(LDLT); + gsl_vector_view diagA = gsl_vector_subvector(work, N, N); + double max = 0.0; + size_t i, j; + + /* reconstruct diagonal entries of original matrix A */ + for (j = 0; j < N; ++j) + { + double Ajj; + + /* compute diagonal (j,j) entry of A */ + Ajj = gsl_vector_get(&D.vector, j); + for (i = 0; i < j; ++i) + { + double Di = gsl_vector_get(&D.vector, i); + double Lji = gsl_matrix_get(LDLT, j, i); + + Ajj += Di * Lji * Lji; + } + + gsl_vector_set(&diagA.vector, j, Ajj); + } + + gsl_permute_vector_inverse(p, &diagA.vector); + + for (j = 0; j < N; ++j) + { + double sum = 0.0; + double Ajj = gsl_vector_get(&diagA.vector, j); + + for (i = 0; i < j; ++i) + { + double *wi = gsl_vector_ptr(work, i); + double Aij = gsl_matrix_get(LDLT, i, j); + double absAij = fabs(Aij); + + sum += absAij; + *wi += absAij; + } + + gsl_vector_set(work, j, sum + fabs(Ajj)); + } + + for (i = 0; i < N; ++i) + { + double wi = gsl_vector_get(work, i); + max = GSL_MAX(max, wi); + } + + return max; +} + +/* x := A^{-1} x = A^{-t} x, A = L D L^T */ +static int +cholesky_LDLT_Ainv(CBLAS_TRANSPOSE_t TransA, gsl_vector * x, void * params) +{ + int status; + pcholesky_params *par = (pcholesky_params *) params; + + (void) TransA; /* unused parameter warning */ + + status = gsl_linalg_pcholesky_svx(par->LDLT, par->perm, x); + + return status; +} diff -Nru gsl-doc-1.16/linalg/ptlq.c gsl-doc-2.3/linalg/ptlq.c --- gsl-doc-1.16/linalg/ptlq.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/linalg/ptlq.c 2015-11-03 16:21:55.000000000 +0000 @@ -28,7 +28,6 @@ #include #include -#include "givens.c" #include "apply_givens.c" /* The purpose of this package is to speed up QR-decomposition for @@ -458,8 +457,8 @@ double wk = gsl_vector_get (w, k); double wkm1 = gsl_vector_get (w, k - 1); - create_givens (wkm1, wk, &c, &s); - apply_givens_vec (w, k - 1, k, c, s); + gsl_linalg_givens (wkm1, wk, &c, &s); + gsl_linalg_givens_gv (w, k - 1, k, c, s); apply_givens_lq (M, N, Q, L, k - 1, k, c, s); } @@ -484,7 +483,7 @@ double diag = gsl_matrix_get (L, k - 1, k - 1); double offdiag = gsl_matrix_get (L, k - 1, k ); - create_givens (diag, offdiag, &c, &s); + gsl_linalg_givens (diag, offdiag, &c, &s); apply_givens_lq (M, N, Q, L, k - 1, k, c, s); } diff -Nru gsl-doc-1.16/linalg/qr.c gsl-doc-2.3/linalg/qr.c --- gsl-doc-1.16/linalg/qr.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/linalg/qr.c 2016-04-05 21:01:16.000000000 +0000 @@ -22,14 +22,12 @@ #include #include #include +#include #include #include #include #include -#include - -#include "givens.c" #include "apply_givens.c" /* Factorise a general M x N matrix A into @@ -381,7 +379,7 @@ { size_t i; - /* compute Q^T v */ + /* compute Q v */ for (i = GSL_MIN (M, N); i-- > 0;) { @@ -396,7 +394,7 @@ } } -/* Form the product Q^T A from a QR factorized matrix */ +/* Form the product Q^T A from a QR factorized matrix */ int gsl_linalg_QR_QTmat (const gsl_matrix * QR, const gsl_vector * tau, gsl_matrix * A) @@ -430,6 +428,38 @@ } } +/* Form the product A Q from a QR factorized matrix */ +int +gsl_linalg_QR_matQ (const gsl_matrix * QR, const gsl_vector * tau, gsl_matrix * A) +{ + const size_t M = QR->size1; + const size_t N = QR->size2; + + if (tau->size != GSL_MIN (M, N)) + { + GSL_ERROR ("size of tau must be MIN(M,N)", GSL_EBADLEN); + } + else if (A->size2 != M) + { + GSL_ERROR ("matrix must have M columns", GSL_EBADLEN); + } + else + { + size_t i; + + /* compute A Q */ + + for (i = 0; i < GSL_MIN (M, N); i++) + { + gsl_vector_const_view c = gsl_matrix_const_column (QR, i); + gsl_vector_const_view h = gsl_vector_const_subvector (&(c.vector), i, M - i); + gsl_matrix_view m = gsl_matrix_submatrix(A, 0, i, A->size1, M - i); + double ti = gsl_vector_get (tau, i); + gsl_linalg_householder_mh (ti, &(h.vector), &(m.matrix)); + } + return GSL_SUCCESS; + } +} /* Form the orthogonal matrix Q from the packed QR matrix */ @@ -534,8 +564,8 @@ double wk = gsl_vector_get (w, k); double wkm1 = gsl_vector_get (w, k - 1); - create_givens (wkm1, wk, &c, &s); - apply_givens_vec (w, k - 1, k, c, s); + gsl_linalg_givens (wkm1, wk, &c, &s); + gsl_linalg_givens_gv (w, k - 1, k, c, s); apply_givens_qr (M, N, Q, R, k - 1, k, c, s); } @@ -559,7 +589,7 @@ double diag = gsl_matrix_get (R, k - 1, k - 1); double offdiag = gsl_matrix_get (R, k, k - 1); - create_givens (diag, offdiag, &c, &s); + gsl_linalg_givens (diag, offdiag, &c, &s); apply_givens_qr (M, N, Q, R, k - 1, k, c, s); gsl_matrix_set (R, k, k - 1, 0.0); /* exact zero of G^T */ diff -Nru gsl-doc-1.16/linalg/qrpt.c gsl-doc-2.3/linalg/qrpt.c --- gsl-doc-1.16/linalg/qrpt.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/linalg/qrpt.c 2016-08-22 15:08:48.000000000 +0000 @@ -28,9 +28,6 @@ #include -#define REAL double - -#include "givens.c" #include "apply_givens.c" /* Factorise a general M x N matrix A into @@ -303,6 +300,87 @@ } } +/* Find the least squares solution to the overdetermined system + * + * A x = b + * + * for M >= N using the QRPT factorization A P = Q R. Assumes + * A has full column rank. + */ + +int +gsl_linalg_QRPT_lssolve (const gsl_matrix * QR, const gsl_vector * tau, const gsl_permutation * p, + const gsl_vector * b, gsl_vector * x, gsl_vector * residual) +{ + const size_t N = QR->size2; + int status = gsl_linalg_QRPT_lssolve2(QR, tau, p, b, N, x, residual); + return status; +} + +/* Find the least squares solution to the overdetermined system + * + * A x = b + * + * for M >= N using the QRPT factorization A P = Q R, where A + * is assumed rank deficient with a given rank. + */ + +int +gsl_linalg_QRPT_lssolve2 (const gsl_matrix * QR, const gsl_vector * tau, const gsl_permutation * p, + const gsl_vector * b, const size_t rank, gsl_vector * x, gsl_vector * residual) +{ + const size_t M = QR->size1; + const size_t N = QR->size2; + + if (M < N) + { + GSL_ERROR ("QR matrix must have M>=N", GSL_EBADLEN); + } + else if (M != b->size) + { + GSL_ERROR ("matrix size must match b size", GSL_EBADLEN); + } + else if (rank == 0 || rank > N) + { + GSL_ERROR ("rank must have 0 < rank <= N", GSL_EBADLEN); + } + else if (N != x->size) + { + GSL_ERROR ("matrix size must match solution size", GSL_EBADLEN); + } + else if (M != residual->size) + { + GSL_ERROR ("matrix size must match residual size", GSL_EBADLEN); + } + else + { + gsl_matrix_const_view R11 = gsl_matrix_const_submatrix (QR, 0, 0, rank, rank); + gsl_vector_view QTb1 = gsl_vector_subvector(residual, 0, rank); + gsl_vector_view x1 = gsl_vector_subvector(x, 0, rank); + size_t i; + + /* compute work = Q^T b */ + gsl_vector_memcpy(residual, b); + gsl_linalg_QR_QTvec (QR, tau, residual); + + /* solve R_{11} x(1:r) = [Q^T b](1:r) */ + gsl_vector_memcpy(&(x1.vector), &(QTb1.vector)); + gsl_blas_dtrsv (CblasUpper, CblasNoTrans, CblasNonUnit, &(R11.matrix), &(x1.vector)); + + /* x(r+1:N) = 0 */ + for (i = rank; i < N; ++i) + gsl_vector_set(x, i, 0.0); + + /* compute x = P y */ + gsl_permute_vector_inverse (p, x); + + /* compute residual = b - A x = Q (Q^T b - R x) */ + gsl_vector_set_zero(&(QTb1.vector)); + gsl_linalg_QR_Qvec(QR, tau, residual); + + return GSL_SUCCESS; + } +} int gsl_linalg_QRPT_QRsolve (const gsl_matrix * Q, const gsl_matrix * R, @@ -456,8 +534,8 @@ double wk = gsl_vector_get (w, k); double wkm1 = gsl_vector_get (w, k - 1); - create_givens (wkm1, wk, &c, &s); - apply_givens_vec (w, k - 1, k, c, s); + gsl_linalg_givens (wkm1, wk, &c, &s); + gsl_linalg_givens_gv (w, k - 1, k, c, s); apply_givens_qr (M, N, Q, R, k - 1, k, c, s); } @@ -482,7 +560,7 @@ double diag = gsl_matrix_get (R, k - 1, k - 1); double offdiag = gsl_matrix_get (R, k, k - 1); - create_givens (diag, offdiag, &c, &s); + gsl_linalg_givens (diag, offdiag, &c, &s); apply_givens_qr (M, N, Q, R, k - 1, k, c, s); gsl_matrix_set (R, k, k - 1, 0.0); /* exact zero of G^T */ @@ -491,3 +569,75 @@ return GSL_SUCCESS; } } + +/* +gsl_linalg_QRPT_rank() + Estimate rank of triangular matrix from QRPT decomposition + +Inputs: QR - QRPT decomposed matrix + tol - tolerance for rank determination; if < 0, + a default value is used: + 20 * (M + N) * eps(max(|diag(R)|)) + +Return: rank estimate +*/ + +size_t +gsl_linalg_QRPT_rank (const gsl_matrix * QR, const double tol) +{ + const size_t M = QR->size1; + const size_t N = QR->size2; + gsl_vector_const_view diag = gsl_matrix_const_diagonal(QR); + double eps; + size_t i; + size_t r = 0; + + if (tol < 0.0) + { + double min, max, absmax; + int ee; + + gsl_vector_minmax(&diag.vector, &min, &max); + absmax = GSL_MAX(fabs(min), fabs(max)); + ee = (int) log2(absmax); + + eps = 20.0 * (M + N) * pow(2.0, (double) ee) * GSL_DBL_EPSILON; + } + else + eps = tol; + + /* count number of diagonal elements with |di| > eps */ + for (i = 0; i < GSL_MIN(M, N); ++i) + { + double di = gsl_vector_get(&diag.vector, i); + if (fabs(di) > eps) + ++r; + } + + return r; +} + +int +gsl_linalg_QRPT_rcond(const gsl_matrix * QR, double * rcond, gsl_vector * work) +{ + const size_t M = QR->size1; + const size_t N = QR->size2; + + if (M < N) + { + GSL_ERROR ("M must be >= N", GSL_EBADLEN); + } + else if (work->size != 3 * N) + { + GSL_ERROR ("work vector must have length 3*N", GSL_EBADLEN); + } + else + { + gsl_matrix_const_view R = gsl_matrix_const_submatrix (QR, 0, 0, N, N); + int status; + + status = gsl_linalg_tri_upper_rcond(&R.matrix, rcond, work); + + return status; + } +} diff -Nru gsl-doc-1.16/linalg/svd.c gsl-doc-2.3/linalg/svd.c --- gsl-doc-1.16/linalg/svd.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/linalg/svd.c 2015-11-03 16:21:55.000000000 +0000 @@ -27,7 +27,6 @@ #include -#include "givens.c" #include "svdstep.c" /* Factorise a general M x N matrix A into, diff -Nru gsl-doc-1.16/linalg/svdstep.c gsl-doc-2.3/linalg/svdstep.c --- gsl-doc-1.16/linalg/svdstep.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/linalg/svdstep.c 2015-11-13 22:21:39.000000000 +0000 @@ -185,7 +185,7 @@ { /* Eliminate off-diagonal element in [0,f0;0,d1] to make [d,0;0,0] */ - create_givens (f0, d1, &c, &s); + gsl_linalg_givens (f0, d1, &c, &s); /* compute B <= G^T B X, where X = [0,1;1,0] */ @@ -213,7 +213,7 @@ { /* Eliminate off-diagonal element in [d0,f0;0,0] */ - create_givens (d0, f0, &c, &s); + gsl_linalg_givens (d0, f0, &c, &s); /* compute B <= B G */ @@ -273,7 +273,7 @@ gsl_matrix_swap_columns(V, 0, 1); } - create_givens (a11, a21, &c, &s); + gsl_linalg_givens (a11, a21, &c, &s); /* compute B <= G^T B */ @@ -312,7 +312,7 @@ for (k = k0; k < n - 1; k++) { - create_givens (y, -x, &c, &s); + gsl_linalg_givens (y, -x, &c, &s); /* Compute U <= U G */ @@ -370,7 +370,7 @@ for (k = n - 1; k-- > 0;) { - create_givens (x, y, &c, &s); + gsl_linalg_givens (x, y, &c, &s); /* Compute V <= V G where G = [c, s ; -s, c] */ @@ -421,7 +421,7 @@ #endif const size_t n = d->size; double y, z; - double ak, bk, zk, ap, bp, aq, bq; + double ak, bk, zk, ap, bp, aq; size_t i, k; if (n == 1) @@ -468,7 +468,6 @@ double f0 = gsl_vector_get (f, 0); double d1 = gsl_vector_get (d, 1); - double f1 = gsl_vector_get (f, 1); { double mu = trailing_eigenvalue (d, f); @@ -486,13 +485,12 @@ bp = f0; aq = d1; - bq = f1; } for (k = 0; k < n - 1; k++) { double c, s; - create_givens (y, z, &c, &s); + gsl_linalg_givens (y, z, &c, &s); /* Compute V <= V G */ @@ -547,7 +545,7 @@ z = zk; } - create_givens (y, z, &c, &s); + gsl_linalg_givens (y, z, &c, &s); /* Compute U <= U G */ diff -Nru gsl-doc-1.16/linalg/test.c gsl-doc-2.3/linalg/test.c --- gsl-doc-1.16/linalg/test.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/linalg/test.c 2016-08-30 15:12:44.000000000 +0000 @@ -26,9 +26,13 @@ #include #include #include +#include #include #include #include +#include + +#include "test_cholesky.c" #define TEST_SVD_4X4 1 @@ -60,12 +64,18 @@ int test_QRPT_solve(void); int test_QRPT_QRsolve_dim(const gsl_matrix * m, const double * actual, double eps); int test_QRPT_QRsolve(void); -int test_QRPT_decomp_dim(const gsl_matrix * m, double eps); +int test_QRPT_decomp_dim(const gsl_matrix * m, const double expected_rcond, double eps); int test_QRPT_decomp(void); +int test_QRPT_lssolve_dim(const gsl_matrix * m, const double * actual, double eps); +int test_QRPT_lssolve(void); +int test_QRPT_lssolve2_dim(const gsl_matrix * m, const double * actual, double eps); +int test_QRPT_lssolve2(void); int test_QR_update_dim(const gsl_matrix * m, double eps); int test_QR_update(void); int test_QRPT_update_dim(const gsl_matrix * m, double eps); int test_QRPT_update(void); +int test_COD_decomp_dim(const gsl_matrix * m, double eps); +int test_COD_decomp(void); int test_LQ_solve_dim(const gsl_matrix * m, const double * actual, double eps); int test_LQ_solve(void); @@ -94,10 +104,6 @@ int test_SV_decomp_jacobi(void); int test_cholesky_solve_dim(const gsl_matrix * m, const double * actual, double eps); int test_cholesky_solve(void); -int test_cholesky_decomp_dim(const gsl_matrix * m, double eps); -int test_cholesky_decomp(void); -int test_cholesky_invert_dim(const gsl_matrix * m, double eps); -int test_cholesky_invert(void); int test_HH_solve_dim(const gsl_matrix * m, const double * actual, double eps); int test_HH_solve(void); int test_TDS_solve_dim(unsigned long dim, double d, double od, const double * actual, double eps); @@ -308,6 +314,36 @@ return A; } +static int +create_tri_matrix(CBLAS_UPLO_t Uplo, CBLAS_DIAG_t Diag, gsl_matrix * m, gsl_rng * r) +{ + const size_t N = m->size1; + size_t i, j; + + gsl_matrix_set_zero(m); + + for (i = 0; i < N; ++i) + { + for (j = 0; j <= i; ++j) + { + double mij = gsl_rng_uniform(r); + + /* put lower bound on diagonal entries to ensure invertibility */ + if (i == j) + mij = GSL_MAX(mij, 0.3); + + if (Uplo == CblasLower) + gsl_matrix_set(m, i, j, mij); + else + gsl_matrix_set(m, j, i, mij); + + if (Diag == CblasUnit && i == j) + gsl_matrix_set(m, i, j, 1.0); + } + } + + return GSL_SUCCESS; +} gsl_matrix * m11; @@ -1023,6 +1059,237 @@ } int +test_QRPT_lssolve_dim(const gsl_matrix * m, const double * actual, double eps) +{ + int s = 0; + size_t i, M = m->size1, N = m->size2; + + gsl_vector * rhs = gsl_vector_alloc(M); + gsl_matrix * QRPT = gsl_matrix_alloc(M,N); + gsl_vector * tau = gsl_vector_alloc(N); + gsl_vector * x = gsl_vector_alloc(N); + gsl_vector * r = gsl_vector_alloc(M); + gsl_vector * res = gsl_vector_alloc(M); + gsl_permutation * perm = gsl_permutation_alloc(N); + gsl_vector * work = gsl_vector_alloc(N); + int signum; + + gsl_matrix_memcpy(QRPT, m); + + for(i = 0; i < M; i++) + gsl_vector_set(rhs, i, i + 1.0); + + s += gsl_linalg_QRPT_decomp(QRPT, tau, perm, &signum, work); + s += gsl_linalg_QRPT_lssolve(QRPT, tau, perm, rhs, x, res); + + for (i = 0; i < N; i++) + { + int foo = check(gsl_vector_get(x, i), actual[i], eps); + if(foo) + { + printf("(%3lu,%3lu)[%lu]: %22.18g %22.18g\n", M, N, i, gsl_vector_get(x, i), actual[i]); + } + s += foo; + } + + /* compute residual r = b - m x */ + if (M == N) + { + gsl_vector_set_zero(r); + } + else + { + gsl_vector_memcpy(r, rhs); + gsl_blas_dgemv(CblasNoTrans, -1.0, m, x, 1.0, r); + } + + for (i = 0; i < N; i++) + { + int foo = check(gsl_vector_get(res, i), gsl_vector_get(r,i), sqrt(eps)); + if(foo) + { + printf("(%3lu,%3lu)[%lu]: %22.18g %22.18g\n", M, N, i, gsl_vector_get(res, i), gsl_vector_get(r,i)); + } + s += foo; + } + + gsl_vector_free(r); + gsl_vector_free(res); + gsl_vector_free(x); + gsl_vector_free(tau); + gsl_matrix_free(QRPT); + gsl_vector_free(rhs); + gsl_permutation_free(perm); + gsl_vector_free(work); + + return s; +} + +int +test_QRPT_lssolve(void) +{ + int f; + int s = 0; + + f = test_QRPT_lssolve_dim(m53, m53_lssolution, 2 * 64.0 * GSL_DBL_EPSILON); + gsl_test(f, " QRPT_lssolve m(5,3)"); + s += f; + + f = test_QRPT_lssolve_dim(hilb2, hilb2_solution, 2 * 8.0 * GSL_DBL_EPSILON); + gsl_test(f, " QRPT_lssolve hilbert(2)"); + s += f; + + f = test_QRPT_lssolve_dim(hilb3, hilb3_solution, 2 * 64.0 * GSL_DBL_EPSILON); + gsl_test(f, " QRPT_lssolve hilbert(3)"); + s += f; + + f = test_QRPT_lssolve_dim(hilb4, hilb4_solution, 2 * 2048.0 * GSL_DBL_EPSILON); + gsl_test(f, " QRPT_lssolve hilbert(4)"); + s += f; + + f = test_QRPT_lssolve_dim(hilb12, hilb12_solution, 0.5); + gsl_test(f, " QRPT_lssolve hilbert(12)"); + s += f; + + f = test_QRPT_lssolve_dim(vander2, vander2_solution, 8.0 * GSL_DBL_EPSILON); + gsl_test(f, " QRPT_lssolve vander(2)"); + s += f; + + f = test_QRPT_lssolve_dim(vander3, vander3_solution, 64.0 * GSL_DBL_EPSILON); + gsl_test(f, " QRPT_lssolve vander(3)"); + s += f; + + f = test_QRPT_lssolve_dim(vander4, vander4_solution, 1024.0 * GSL_DBL_EPSILON); + gsl_test(f, " QRPT_lssolve vander(4)"); + s += f; + + f = test_QRPT_lssolve_dim(vander12, vander12_solution, 0.05); + gsl_test(f, " QRPT_lssolve vander(12)"); + s += f; + + return s; +} + +int +test_QRPT_lssolve2_dim(const gsl_matrix * m, const double * actual, double eps) +{ + int s = 0; + size_t i, M = m->size1, N = m->size2; + + gsl_vector * rhs = gsl_vector_alloc(M); + gsl_matrix * QRPT = gsl_matrix_alloc(M,N); + gsl_vector * tau = gsl_vector_alloc(N); + gsl_vector * x = gsl_vector_alloc(N); + gsl_vector * r = gsl_vector_alloc(M); + gsl_vector * res = gsl_vector_alloc(M); + gsl_permutation * perm = gsl_permutation_alloc(N); + gsl_vector * work = gsl_vector_alloc(N); + int signum; + size_t rank; + + gsl_matrix_memcpy(QRPT, m); + + for(i = 0; i < M; i++) + gsl_vector_set(rhs, i, i + 1.0); + + s += gsl_linalg_QRPT_decomp(QRPT, tau, perm, &signum, work); + + rank = gsl_linalg_QRPT_rank(QRPT, -1.0); + + s += gsl_linalg_QRPT_lssolve2(QRPT, tau, perm, rhs, rank, x, res); + + if (M > N) + { + for (i = 0; i < N; i++) + { + int foo = check(gsl_vector_get(x, i), actual[i], eps); + if(foo) + { + printf("(%3lu,%3lu)[%lu]: %22.18g %22.18g\n", M, N, i, gsl_vector_get(x, i), actual[i]); + } + s += foo; + } + } + + /* compute residual r = b - m x */ + if (M == N) + { + gsl_vector_set_zero(r); + } + else + { + gsl_vector_memcpy(r, rhs); + gsl_blas_dgemv(CblasNoTrans, -1.0, m, x, 1.0, r); + } + + for (i = 0; i < N; i++) + { + int foo = check(gsl_vector_get(res, i), gsl_vector_get(r,i), sqrt(eps)); + if(foo) + { + printf("(%3lu,%3lu)[%lu]: %22.18g %22.18g\n", M, N, i, gsl_vector_get(res, i), gsl_vector_get(r,i)); + } + s += foo; + } + + gsl_vector_free(r); + gsl_vector_free(res); + gsl_vector_free(x); + gsl_vector_free(tau); + gsl_matrix_free(QRPT); + gsl_vector_free(rhs); + gsl_permutation_free(perm); + gsl_vector_free(work); + + return s; +} + +int +test_QRPT_lssolve2(void) +{ + int f; + int s = 0; + + f = test_QRPT_lssolve2_dim(m53, m53_lssolution, 2 * 64.0 * GSL_DBL_EPSILON); + gsl_test(f, " QRPT_lssolve2 m(5,3)"); + s += f; + + f = test_QRPT_lssolve2_dim(hilb2, hilb2_solution, 2 * 8.0 * GSL_DBL_EPSILON); + gsl_test(f, " QRPT_lssolve2 hilbert(2)"); + s += f; + + f = test_QRPT_lssolve2_dim(hilb3, hilb3_solution, 2 * 64.0 * GSL_DBL_EPSILON); + gsl_test(f, " QRPT_lssolve2 hilbert(3)"); + s += f; + + f = test_QRPT_lssolve2_dim(hilb4, hilb4_solution, 2 * 2048.0 * GSL_DBL_EPSILON); + gsl_test(f, " QRPT_lssolve2 hilbert(4)"); + s += f; + + f = test_QRPT_lssolve2_dim(hilb12, hilb12_solution, 0.5); + gsl_test(f, " QRPT_lssolve2 hilbert(12)"); + s += f; + + f = test_QRPT_lssolve2_dim(vander2, vander2_solution, 8.0 * GSL_DBL_EPSILON); + gsl_test(f, " QRPT_lssolve2 vander(2)"); + s += f; + + f = test_QRPT_lssolve2_dim(vander3, vander3_solution, 64.0 * GSL_DBL_EPSILON); + gsl_test(f, " QRPT_lssolve2 vander(3)"); + s += f; + + f = test_QRPT_lssolve2_dim(vander4, vander4_solution, 1024.0 * GSL_DBL_EPSILON); + gsl_test(f, " QRPT_lssolve2 vander(4)"); + s += f; + + f = test_QRPT_lssolve2_dim(vander12, vander12_solution, 0.05); + gsl_test(f, " QRPT_lssolve2 vander(12)"); + s += f; + + return s; +} + +int test_QRPT_solve_dim(const gsl_matrix * m, const double * actual, double eps) { int s = 0; @@ -1179,55 +1446,71 @@ } int -test_QRPT_decomp_dim(const gsl_matrix * m, double eps) +test_QRPT_decomp_dim(const gsl_matrix * m, const double expected_rcond, double eps) { int s = 0, signum; unsigned long i,j, M = m->size1, N = m->size2; - gsl_matrix * qr = gsl_matrix_alloc(M,N); - gsl_matrix * a = gsl_matrix_alloc(M,N); - gsl_matrix * q = gsl_matrix_alloc(M,M); - gsl_matrix * r = gsl_matrix_alloc(M,N); - gsl_vector * d = gsl_vector_alloc(GSL_MIN(M,N)); + gsl_matrix * QR = gsl_matrix_alloc(M, N); + gsl_matrix * A = gsl_matrix_alloc(M, N); + gsl_matrix * Q = gsl_matrix_alloc(M, M); + gsl_matrix * R = gsl_matrix_alloc(M, N); + gsl_vector * tau = gsl_vector_alloc(GSL_MIN(M, N)); gsl_vector * norm = gsl_vector_alloc(N); gsl_permutation * perm = gsl_permutation_alloc(N); - gsl_matrix_memcpy(qr,m); + gsl_matrix_memcpy(QR, m); + s += gsl_linalg_QRPT_decomp(QR, tau, perm, &signum, norm); + s += gsl_linalg_QR_unpack(QR, tau, Q, R); - s += gsl_linalg_QRPT_decomp(qr, d, perm, &signum, norm); - s += gsl_linalg_QR_unpack(qr, d, q, r); + /* compute A = Q R */ + gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0, Q, R, 0.0, A); - /* compute a = q r */ - gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0, q, r, 0.0, a); + /* Compute QR P^T by permuting the elements of the rows of QR */ + for (i = 0; i < M; i++) + { + gsl_vector_view row = gsl_matrix_row (A, i); + gsl_permute_vector_inverse (perm, &row.vector); + } - /* Compute QR P^T by permuting the elements of the rows of QR */ + for (i = 0; i < M; i++) + { + for (j = 0; j < N; j++) + { + double aij = gsl_matrix_get(A, i, j); + double mij = gsl_matrix_get(m, i, j); + int foo = check(aij, mij, eps); + if(foo) + printf("(%3lu,%3lu)[%lu,%lu]: %22.18g %22.18g\n", M, N, i,j, aij, mij); + s += foo; + } + } - for (i = 0; i < M; i++) { - gsl_vector_view row = gsl_matrix_row (a, i); - gsl_permute_vector_inverse (perm, &row.vector); - } + if (expected_rcond > 0.0) + { + double rcond; + int foo; + gsl_vector * work = gsl_vector_alloc(3 * N); + + gsl_linalg_QRPT_rcond(QR, &rcond, work); + foo = check(rcond, expected_rcond, 1.0e-10); + if (foo) + printf("QRPT_rcond (%3lu,%3lu): %22.18g %22.18g\n", M, N, rcond, expected_rcond); - for(i=0; isize1, N = m->size2; + size_t rank; + + gsl_matrix * QRZT = gsl_matrix_alloc(M, N); + gsl_matrix * Q = gsl_matrix_alloc(M, M); + gsl_matrix * R = gsl_matrix_alloc(M, N); + gsl_matrix * QR = gsl_matrix_alloc(M, N); + gsl_matrix * Z = gsl_matrix_alloc(N, N); + gsl_vector * tau_Q = gsl_vector_alloc(GSL_MIN(M, N)); + gsl_vector * tau_Z = gsl_vector_alloc(GSL_MIN(M, N)); + gsl_vector * work = gsl_vector_alloc(N); + gsl_matrix * lhs = gsl_matrix_alloc(M, N); + gsl_matrix * rhs = gsl_matrix_alloc(M, N); + + gsl_permutation * perm = gsl_permutation_alloc(N); + + gsl_matrix_memcpy(QRZT, m); + + s += gsl_linalg_COD_decomp(QRZT, tau_Q, tau_Z, perm, &rank, work); + s += gsl_linalg_COD_unpack(QRZT, tau_Q, tau_Z, rank, Q, R, Z); + + /* compute lhs = m P */ + gsl_matrix_memcpy(lhs, m); + gsl_permute_matrix(perm, lhs); + + /* compute rhs = Q R Z */ + gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0, Q, R, 0.0, QR); + gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0, QR, Z, 0.0, rhs); + + for (i = 0; i < M; i++) + { + for (j = 0; j < N; j++) + { + double aij = gsl_matrix_get(rhs, i, j); + double bij = gsl_matrix_get(lhs, i, j); + int foo = check(aij, bij, eps); + if (foo) + { + printf("(%3lu,%3lu)[%lu,%lu]: %22.18g %22.18g\n", M, N, i, j, aij, bij); + } + s += foo; + } + } + + gsl_permutation_free (perm); + gsl_vector_free(work); + gsl_vector_free(tau_Q); + gsl_vector_free(tau_Z); + gsl_matrix_free(QRZT); + gsl_matrix_free(lhs); + gsl_matrix_free(rhs); + gsl_matrix_free(QR); + gsl_matrix_free(Q); + gsl_matrix_free(R); + gsl_matrix_free(Z); + + return s; +} + +int +test_COD_decomp(void) +{ + int f; + int s = 0; + + f = test_COD_decomp_dim(m35, 2 * 8.0 * GSL_DBL_EPSILON); + gsl_test(f, " COD_decomp m(3,5)"); + s += f; + + f = test_COD_decomp_dim(m53, 2 * 8.0 * GSL_DBL_EPSILON); + gsl_test(f, " COD_decomp m(5,3)"); + s += f; + + f = test_COD_decomp_dim(s35, 2 * 8.0 * GSL_DBL_EPSILON); + gsl_test(f, " COD_decomp s(3,5)"); + s += f; + + f = test_COD_decomp_dim(s53, 2 * 8.0 * GSL_DBL_EPSILON); + gsl_test(f, " COD_decomp s(5,3)"); + s += f; + + f = test_COD_decomp_dim(hilb2, 2 * 8.0 * GSL_DBL_EPSILON); + gsl_test(f, " COD_decomp hilbert(2)"); + s += f; + + f = test_COD_decomp_dim(hilb3, 2 * 64.0 * GSL_DBL_EPSILON); + gsl_test(f, " COD_decomp hilbert(3)"); + s += f; + + f = test_COD_decomp_dim(hilb4, 2 * 1024.0 * GSL_DBL_EPSILON); + gsl_test(f, " COD_decomp hilbert(4)"); + s += f; + + f = test_COD_decomp_dim(hilb12, 2 * 2048.0 * GSL_DBL_EPSILON); + gsl_test(f, " COD_decomp hilbert(12)"); + s += f; + + f = test_COD_decomp_dim(vander2, 8.0 * GSL_DBL_EPSILON); + gsl_test(f, " COD_decomp vander(2)"); + s += f; + + f = test_COD_decomp_dim(vander3, 64.0 * GSL_DBL_EPSILON); + gsl_test(f, " COD_decomp vander(3)"); + s += f; + + f = test_COD_decomp_dim(vander4, 1024.0 * GSL_DBL_EPSILON); + gsl_test(f, " COD_decomp vander(4)"); + s += f; + + f = test_COD_decomp_dim(vander12, 0.001); /* FIXME: bad accuracy */ + gsl_test(f, " COD_decomp vander(12)"); + s += f; + + return s; +} + +int +test_COD_lssolve_dim(const gsl_matrix * m, const double * actual, double eps) +{ + int s = 0; + size_t i, M = m->size1, N = m->size2; + + gsl_vector * lhs = gsl_vector_alloc(M); + gsl_vector * rhs = gsl_vector_alloc(M); + gsl_matrix * QRZT = gsl_matrix_alloc(M, N); + gsl_vector * tau_Q = gsl_vector_alloc(GSL_MIN(M, N)); + gsl_vector * tau_Z = gsl_vector_alloc(GSL_MIN(M, N)); + gsl_vector * work = gsl_vector_alloc(N); + gsl_vector * x = gsl_vector_alloc(N); + gsl_vector * r = gsl_vector_alloc(M); + gsl_vector * res = gsl_vector_alloc(M); + gsl_permutation * perm = gsl_permutation_alloc(N); + size_t rank; + + gsl_matrix_memcpy(QRZT, m); + + for (i = 0; i < M; i++) + gsl_vector_set(rhs, i, i + 1.0); + + s += gsl_linalg_COD_decomp(QRZT, tau_Q, tau_Z, perm, &rank, work); + s += gsl_linalg_COD_lssolve(QRZT, tau_Q, tau_Z, perm, rank, rhs, x, res); + + if (M > N) + { + for (i = 0; i < N; i++) + { + int foo = check(gsl_vector_get(x, i), actual[i], eps); + if(foo) + { + printf("(%3lu,%3lu)[%lu]: %22.18g %22.18g\n", M, N, i, gsl_vector_get(x, i), actual[i]); + } + s += foo; + } + } + + /* compute residual r = b - m x */ + if (M == N) + { + gsl_vector_set_zero(r); + } + else + { + gsl_vector_memcpy(r, rhs); + gsl_blas_dgemv(CblasNoTrans, -1.0, m, x, 1.0, r); + } + + for (i = 0; i < N; i++) + { + int foo = check(gsl_vector_get(res, i), gsl_vector_get(r, i), sqrt(eps)); + if(foo) + { + printf("res (%3lu,%3lu)[%lu]: %22.18g %22.18g\n", M, N, i, gsl_vector_get(res, i), gsl_vector_get(r,i)); + } + s += foo; + } + + gsl_vector_free(r); + gsl_vector_free(res); + gsl_vector_free(x); + gsl_vector_free(tau_Q); + gsl_vector_free(tau_Z); + gsl_matrix_free(QRZT); + gsl_vector_free(rhs); + gsl_vector_free(lhs); + gsl_vector_free(work); + gsl_permutation_free(perm); + + return s; +} + +int +test_COD_lssolve(void) +{ + int f; + int s = 0; + + f = test_COD_lssolve_dim(m53, m53_lssolution, 2 * 64.0 * GSL_DBL_EPSILON); + gsl_test(f, " COD_lssolve m(5,3)"); + s += f; + + f = test_COD_lssolve_dim(hilb2, hilb2_solution, 2 * 8.0 * GSL_DBL_EPSILON); + gsl_test(f, " COD_lssolve hilbert(2)"); + s += f; + + f = test_COD_lssolve_dim(hilb3, hilb3_solution, 2 * 64.0 * GSL_DBL_EPSILON); + gsl_test(f, " COD_lssolve hilbert(3)"); + s += f; + + f = test_COD_lssolve_dim(hilb4, hilb4_solution, 2 * 2048.0 * GSL_DBL_EPSILON); + gsl_test(f, " COD_lssolve hilbert(4)"); + s += f; + + f = test_COD_lssolve_dim(hilb12, hilb12_solution, 1.0e-5); + gsl_test(f, " COD_lssolve hilbert(12)"); + s += f; + + f = test_COD_lssolve_dim(vander2, vander2_solution, 8.0 * GSL_DBL_EPSILON); + gsl_test(f, " COD_lssolve vander(2)"); + s += f; + + f = test_COD_lssolve_dim(vander3, vander3_solution, 64.0 * GSL_DBL_EPSILON); + gsl_test(f, " COD_lssolve vander(3)"); + s += f; + + f = test_COD_lssolve_dim(vander4, vander4_solution, 1024.0 * GSL_DBL_EPSILON); + gsl_test(f, " COD_lssolve vander(4)"); + s += f; + + f = test_COD_lssolve_dim(vander12, vander12_solution, 0.05); + gsl_test(f, " COD_lssolve vander(12)"); + s += f; + + return s; +} + +int test_LQ_solve_dim(const gsl_matrix * m, const double * actual, double eps) { int s = 0; @@ -2288,7 +2811,7 @@ gsl_test(f, " LQ_update m(3,5)"); s += f; - f = test_LQ_update_dim(m53, 2 * 512.0 * GSL_DBL_EPSILON); + f = test_LQ_update_dim(m53, 2 * 2048.0 * GSL_DBL_EPSILON); gsl_test(f, " LQ_update m(5,3)"); s += f; @@ -3213,7 +3736,7 @@ gsl_vector * x = gsl_vector_calloc(dim); gsl_matrix_memcpy(u,m); for(i=0; isize1, N = m->size2; - - gsl_matrix * v = gsl_matrix_alloc(M,N); - gsl_matrix * a = gsl_matrix_alloc(M,N); - gsl_matrix * l = gsl_matrix_alloc(M,N); - gsl_matrix * lt = gsl_matrix_alloc(N,N); - - gsl_matrix_memcpy(v,m); - - s += gsl_linalg_cholesky_decomp(v); - - /* Compute L LT */ - - for (i = 0; i < N ; i++) - { - for (j = 0; j < N; j++) - { - double vij = gsl_matrix_get(v, i, j); - gsl_matrix_set (l, i, j, i>=j ? vij : 0); - gsl_matrix_set (lt, i, j, i<=j ? vij : 0); - } - } - - /* compute a = l lt */ - gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0, l, lt, 0.0, a); + unsigned long i, dim = m->size1; - for(i=0; isize1; - - gsl_matrix * v = gsl_matrix_alloc(N, N); - gsl_matrix * c = gsl_matrix_alloc(N, N); - - gsl_matrix_memcpy(v,m); - - s += gsl_linalg_cholesky_decomp(v); - s += gsl_linalg_cholesky_invert(v); - - gsl_blas_dsymm(CblasLeft, CblasUpper, 1.0, m, v, 0.0, c); - - /* c should be the identity matrix */ - - for (i = 0; i < N; ++i) - { - for (j = 0; j < N; ++j) - { - int foo; - double cij = gsl_matrix_get(c, i, j); - double expected; - - if (i == j) - expected = 1.0; - else - expected = 0.0; - - foo = check(cij, expected, eps); - - if (foo) - printf("(%3lu,%3lu)[%lu,%lu]: %22.18g %22.18g\n", N, N, i,j, cij, expected); - - s += foo; - } - } - - gsl_matrix_free(v); - gsl_matrix_free(c); - - return s; -} + /* test scaled Cholesky routines */ -int -test_cholesky_invert(void) -{ - int f; - int s = 0; + f = test_cholesky_solve2_dim(hilb2, hilb2_solution, 2 * 8.0 * GSL_DBL_EPSILON); + gsl_test(f, " cholesky_solve2 hilbert(2)"); + s += f; - f = test_cholesky_invert_dim(hilb2, 2 * 8.0 * GSL_DBL_EPSILON); - gsl_test(f, " cholesky_invert hilbert(2)"); + f = test_cholesky_solve2_dim(hilb3, hilb3_solution, 2 * 64.0 * GSL_DBL_EPSILON); + gsl_test(f, " cholesky_solve2 hilbert(3)"); s += f; - f = test_cholesky_invert_dim(hilb3, 2 * 64.0 * GSL_DBL_EPSILON); - gsl_test(f, " cholesky_invert hilbert(3)"); + f = test_cholesky_solve2_dim(hilb4, hilb4_solution, 2 * 2048.0 * GSL_DBL_EPSILON); + gsl_test(f, " cholesky_solve2 hilbert(4)"); s += f; - f = test_cholesky_invert_dim(hilb4, 2 * 1024.0 * GSL_DBL_EPSILON); - gsl_test(f, " cholesky_invert hilbert(4)"); + f = test_cholesky_solve2_dim(hilb12, hilb12_solution, 0.5); + gsl_test(f, " cholesky_solve2 hilbert(12)"); s += f; return s; } - int test_cholesky_decomp_unit_dim(const gsl_matrix * m, double eps) { @@ -3752,8 +4180,6 @@ return s; } - - int test_HH_solve_dim(const gsl_matrix * m, const double * actual, double eps) { @@ -4240,14 +4666,85 @@ return s; } +int +test_tri_invert2(CBLAS_UPLO_t Uplo, CBLAS_DIAG_t Diag, gsl_rng * r, const double tol) +{ + const size_t N_max = 30; + int s = 0; + size_t n, i, j; + int (*invert_func) (gsl_matrix * T) = NULL; + + if (Uplo == CblasUpper && Diag == CblasNonUnit) + invert_func = gsl_linalg_tri_upper_invert; + else if (Uplo == CblasLower && Diag == CblasNonUnit) + invert_func = gsl_linalg_tri_lower_invert; + else if (Uplo == CblasUpper && Diag == CblasUnit) + invert_func = gsl_linalg_tri_upper_unit_invert; + else if (Uplo == CblasLower && Diag == CblasUnit) + invert_func = gsl_linalg_tri_lower_unit_invert; + + for (n = 1; n <= N_max; ++n) + { + gsl_matrix *T = gsl_matrix_alloc(n, n); + gsl_matrix *B = gsl_matrix_alloc(n, n); + + /* generate random triangular matrix */ + create_tri_matrix(Uplo, Diag, T, r); + + /* compute B = T^{-1} */ + gsl_matrix_memcpy(B, T); + (invert_func)(B); + + /* compute B = T * T^{-1} */ + gsl_blas_dtrmm(CblasLeft, Uplo, CblasNoTrans, Diag, 1.0, T, B); + + /* test B = I */ + for (i = 0; i < n; ++i) + { + for (j = 0; j < n; ++j) + { + double Bij = gsl_matrix_get(B, i, j); + double expected = (i == j) ? 1.0 : 0.0; + + gsl_test_rel(Bij, expected, tol, "tri_invert N=%zu %s %s", + n, + (Uplo == CblasUpper) ? "Upper" : "Lower", + (Diag == CblasNonUnit) ? "NonUnit" : "Unit"); + } + } + + gsl_matrix_free(T); + gsl_matrix_free(B); + } + + return s; +} + +int +test_tri_invert(gsl_rng * r) +{ + int s = 0; + + s += test_tri_invert2(CblasLower, CblasNonUnit, r, 1.0e-10); + s += test_tri_invert2(CblasLower, CblasUnit, r, 1.0e-10); + + s += test_tri_invert2(CblasUpper, CblasNonUnit, r, 1.0e-10); + s += test_tri_invert2(CblasUpper, CblasUnit, r, 1.0e-10); + + return s; +} + void my_error_handler (const char *reason, const char *file, int line, int err) { if (1) printf ("(caught [%s:%d: %s (%d)])\n", file, line, reason, err) ; } -int main(void) +int +main(void) { + gsl_rng *r = gsl_rng_alloc(gsl_rng_default); + gsl_ieee_env_setup (); gsl_set_error_handler (&my_error_handler); @@ -4307,6 +4804,9 @@ gsl_test(test_matmult(), "Matrix Multiply"); gsl_test(test_matmult_mod(), "Matrix Multiply with Modification"); #endif + + gsl_test(test_tri_invert(r), "Triangular Inverse"); + gsl_test(test_bidiag_decomp(), "Bidiagonal Decomposition"); gsl_test(test_LU_solve(), "LU Decomposition and Solve"); gsl_test(test_LUc_solve(), "Complex LU Decomposition and Solve"); @@ -4326,17 +4826,32 @@ gsl_test(test_QR_lssolve(), "QR LS Solve"); gsl_test(test_QR_update(), "QR Rank-1 Update"); gsl_test(test_QRPT_decomp(), "QRPT Decomposition"); + gsl_test(test_QRPT_lssolve(), "QRPT LS Solve"); + gsl_test(test_QRPT_lssolve2(), "QRPT LS Solve 2"); gsl_test(test_QRPT_solve(), "QRPT Solve"); gsl_test(test_QRPT_QRsolve(), "QRPT QR Solve"); gsl_test(test_QRPT_update(), "QRPT Rank-1 Update"); + + gsl_test(test_COD_decomp(), "COD Decomposition"); + gsl_test(test_COD_lssolve(), "COD LS Solve"); + gsl_test(test_SV_decomp(), "Singular Value Decomposition"); - gsl_test(test_SV_decomp_jacobi(), "Singular Value Decomposition (Jacobi)"); + gsl_test(test_SV_decomp_jacobi(), "Singular Value Decomposition (Jacobi)"); gsl_test(test_SV_decomp_mod(), "Singular Value Decomposition (Mod)"); gsl_test(test_SV_solve(), "SVD Solve"); - gsl_test(test_cholesky_decomp(), "Cholesky Decomposition"); + gsl_test(test_cholesky_decomp_unit(), "Cholesky Decomposition [unit triangular]"); gsl_test(test_cholesky_solve(), "Cholesky Solve"); - gsl_test(test_cholesky_invert(), "Cholesky Inverse"); + + gsl_test(test_cholesky_decomp(r), "Cholesky Decomposition"); + gsl_test(test_cholesky_invert(r), "Cholesky Inverse"); + gsl_test(test_pcholesky_decomp(r), "Pivoted Cholesky Decomposition"); + gsl_test(test_pcholesky_solve(r), "Pivoted Cholesky Solve"); + gsl_test(test_pcholesky_invert(r), "Pivoted Cholesky Inverse"); + gsl_test(test_mcholesky_decomp(r), "Modified Cholesky Decomposition"); + gsl_test(test_mcholesky_solve(r), "Modified Cholesky Solve"); + gsl_test(test_mcholesky_invert(r), "Modified Cholesky Inverse"); + gsl_test(test_choleskyc_decomp(), "Complex Cholesky Decomposition"); gsl_test(test_choleskyc_solve(), "Complex Cholesky Solve"); gsl_test(test_choleskyc_invert(), "Complex Cholesky Inverse"); @@ -4386,5 +4901,7 @@ gsl_matrix_free (bigsparse); + gsl_rng_free(r); + exit (gsl_test_summary()); } diff -Nru gsl-doc-1.16/linalg/test_cholesky.c gsl-doc-2.3/linalg/test_cholesky.c --- gsl-doc-1.16/linalg/test_cholesky.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/linalg/test_cholesky.c 2016-12-07 17:40:50.000000000 +0000 @@ -0,0 +1,955 @@ +/* linalg/test_cholesky.c + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static int create_random_vector(gsl_vector * v, gsl_rng * r); +static int create_posdef_matrix(gsl_matrix * m, gsl_rng * r); +static int create_hilbert_matrix2(gsl_matrix * m); + +static int test_cholesky_decomp_eps(const int scale, const gsl_matrix * m, + const double expected_rcond, const double eps, + const char * desc); +static int test_cholesky_decomp(gsl_rng * r); +int test_cholesky_invert_eps(const gsl_matrix * m, const double eps, const char *desc); +int test_cholesky_invert(gsl_rng * r); +static int test_pcholesky_decomp_eps(const int scale, const gsl_matrix * m, + const double expected_rcond, const double eps, + const char * desc); +static int test_pcholesky_decomp(gsl_rng * r); +int test_pcholesky_solve_eps(const int scale, const gsl_matrix * m, const gsl_vector * rhs, + const gsl_vector * sol, const double eps, + const char * desc); +static int test_pcholesky_solve(gsl_rng * r); +int test_pcholesky_invert_eps(const gsl_matrix * m, const double eps, const char *desc); +int test_pcholesky_invert(gsl_rng * r); + +static int test_mcholesky_decomp_eps(const int posdef, const int scale, const gsl_matrix * m, + const double expected_rcond, const double eps, const char * desc); + +/* Hilbert matrix condition numbers, as calculated by LAPACK DPOSVX */ +double hilb_rcond[] = { 1.000000000000e+00, 3.703703703704e-02, 1.336898395722e-03, + 3.524229074890e-05, 1.059708198754e-06, 3.439939465186e-08, + 1.015027593823e-09, 2.952221630602e-11, 9.093751565191e-13, + 2.828277420229e-14, 8.110242564869e-16, 2.409320075800e-17 }; + +static int +create_random_vector(gsl_vector * v, gsl_rng * r) +{ + const size_t N = v->size; + size_t i; + + for (i = 0; i < N; ++i) + { + double vi = gsl_rng_uniform(r); + gsl_vector_set(v, i, vi); + } + + return GSL_SUCCESS; +} + +static int +create_symm_matrix(gsl_matrix * m, gsl_rng * r) +{ + const size_t N = m->size1; + size_t i, j; + + for (i = 0; i < N; ++i) + { + for (j = 0; j <= i; ++j) + { + double mij = gsl_rng_uniform(r); + gsl_matrix_set(m, i, j, mij); + } + } + + /* copy lower triangle to upper */ + gsl_matrix_transpose_tricpy('L', 0, m, m); + + return GSL_SUCCESS; +} + +static int +create_posdef_matrix(gsl_matrix * m, gsl_rng * r) +{ + const size_t N = m->size1; + const double alpha = 10.0 * N; + size_t i; + + /* The idea is to make a symmetric diagonally dominant + * matrix. Make a symmetric matrix and add alpha*I to + * its diagonal */ + + create_symm_matrix(m, r); + + for (i = 0; i < N; ++i) + { + double mii = gsl_matrix_get(m, i, i); + gsl_matrix_set(m, i, i, mii + alpha); + } + + return GSL_SUCCESS; +} + +static int +create_hilbert_matrix2(gsl_matrix * m) +{ + const size_t N = m->size1; + size_t i, j; + + for (i = 0; i < N; i++) + { + for (j = 0; j < N; j++) + { + gsl_matrix_set(m, i, j, 1.0/(i+j+1.0)); + } + } + + return GSL_SUCCESS; +} + +static int +test_cholesky_decomp_eps(const int scale, const gsl_matrix * m, + const double expected_rcond, const double eps, + const char * desc) +{ + int s = 0; + size_t i, j, N = m->size2; + + gsl_matrix * V = gsl_matrix_alloc(N, N); + gsl_matrix * A = gsl_matrix_alloc(N, N); + gsl_matrix * L = gsl_matrix_calloc(N, N); + gsl_matrix * LT = gsl_matrix_calloc(N, N); + gsl_vector * S = gsl_vector_alloc(N); + + gsl_matrix_memcpy(V, m); + + if (scale) + s += gsl_linalg_cholesky_decomp2(V, S); + else + s += gsl_linalg_cholesky_decomp1(V); + + /* compute L and LT */ + gsl_matrix_tricpy('L', 1, L, V); + gsl_matrix_transpose_tricpy('L', 1, LT, L); + + if (scale) + { + /* L <- S^{-1} L, LT <- LT S^{-1} */ + for (i = 0; i < N; ++i) + { + double Si = gsl_vector_get(S, i); + gsl_vector_view v = gsl_matrix_row(L, i); + gsl_vector_view w = gsl_matrix_column(LT, i); + + gsl_vector_scale(&v.vector, 1.0 / Si); + gsl_vector_scale(&w.vector, 1.0 / Si); + } + } + + /* compute A = L LT */ + gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0, L, LT, 0.0, A); + + for (i = 0; i < N; i++) + { + for (j = 0; j < N; j++) + { + double Aij = gsl_matrix_get(A, i, j); + double mij = gsl_matrix_get(m, i, j); + + gsl_test_rel(Aij, mij, eps, + "%s: (%3lu,%3lu)[%lu,%lu]: %22.18g %22.18g\n", + desc, N, N, i, j, Aij, mij); + } + } + + if (expected_rcond > 0 && !scale) + { + gsl_vector *work = gsl_vector_alloc(3 * N); + double rcond; + + gsl_linalg_cholesky_rcond(V, &rcond, work); + + gsl_test_rel(rcond, expected_rcond, 1.0e-6, + "%s rcond: (%3lu,%3lu): %22.18g %22.18g\n", + desc, N, N, rcond, expected_rcond); + + gsl_vector_free(work); + } + + gsl_matrix_free(V); + gsl_matrix_free(A); + gsl_matrix_free(L); + gsl_matrix_free(LT); + gsl_vector_free(S); + + return s; +} + +static int +test_cholesky_decomp(gsl_rng * r) +{ + int s = 0; + const size_t N_max = 50; + size_t N; + + for (N = 1; N <= N_max; ++N) + { + gsl_matrix * m = gsl_matrix_alloc(N, N); + + create_posdef_matrix(m, r); + test_cholesky_decomp_eps(0, m, -1.0, 10.0 * N * GSL_DBL_EPSILON, "cholesky_decomp unscaled random"); + test_cholesky_decomp_eps(1, m, -1.0, 20.0 * N * GSL_DBL_EPSILON, "cholesky_decomp scaled random"); + + if (N <= 12) + { + double expected_rcond = -1.0; + + if (hilb_rcond[N - 1] > 1.0e-12) + expected_rcond = hilb_rcond[N - 1]; + + create_hilbert_matrix2(m); + + test_cholesky_decomp_eps(0, m, expected_rcond, GSL_DBL_EPSILON, "cholesky_decomp unscaled hilbert"); + test_cholesky_decomp_eps(1, m, expected_rcond, N * GSL_DBL_EPSILON, "cholesky_decomp scaled hilbert"); + } + + gsl_matrix_free(m); + } + + return s; +} + +int +test_cholesky_invert_eps(const gsl_matrix * m, const double eps, const char *desc) +{ + int s = 0; + size_t i, j, N = m->size1; + + gsl_matrix * v = gsl_matrix_alloc(N, N); + gsl_matrix * c = gsl_matrix_alloc(N, N); + + gsl_matrix_memcpy(v, m); + + s += gsl_linalg_cholesky_decomp1(v); + s += gsl_linalg_cholesky_invert(v); + + /* c = m m^{-1} */ + gsl_blas_dsymm(CblasLeft, CblasUpper, 1.0, m, v, 0.0, c); + + /* c should be the identity matrix */ + + for (i = 0; i < N; ++i) + { + for (j = 0; j < N; ++j) + { + double cij = gsl_matrix_get(c, i, j); + double expected = (i == j) ? 1.0 : 0.0; + + gsl_test_rel(cij, expected, eps, "%s (%3lu,%3lu)[%lu,%lu]: %22.18g %22.18g\n", + desc, N, N, i, j, cij, expected); + } + } + + gsl_matrix_free(v); + gsl_matrix_free(c); + + return s; +} + +int +test_cholesky_invert(gsl_rng * r) +{ + int s = 0; + const size_t N_max = 50; + size_t N; + + for (N = 1; N <= N_max; ++N) + { + gsl_matrix * m = gsl_matrix_alloc(N, N); + + create_posdef_matrix(m, r); + + test_cholesky_invert_eps(m, N * GSL_DBL_EPSILON, "cholesky_invert unscaled random"); + + if (N <= 4) + { + create_hilbert_matrix2(m); + test_cholesky_invert_eps(m, N * 256.0 * GSL_DBL_EPSILON, "cholesky_invert unscaled hilbert"); + } + + gsl_matrix_free(m); + } + + return s; +} + +static int +test_mcholesky_decomp_eps(const int posdef, const int scale, const gsl_matrix * m, + const double expected_rcond, const double eps, const char * desc) +{ + int s = 0; + size_t i, j, N = m->size2; + + gsl_matrix * LDLT = gsl_matrix_alloc(N, N); + gsl_matrix * V = gsl_matrix_alloc(N, N); + gsl_matrix * A = gsl_matrix_alloc(N, N); + gsl_matrix * L = gsl_matrix_alloc(N, N); + gsl_matrix * LT = gsl_matrix_alloc(N, N); + gsl_vector * S = gsl_vector_alloc(N); + gsl_vector * E = gsl_vector_alloc(N); + gsl_permutation * perm = gsl_permutation_alloc(N); + + gsl_vector_view D = gsl_matrix_diagonal(LDLT); + + gsl_matrix_memcpy(LDLT, m); + s += gsl_linalg_mcholesky_decomp(LDLT, perm, E); + + /* check that the upper triangle of LDLT equals original matrix */ + for (i = 0; i < N; ++i) + { + for (j = i + 1; j < N; ++j) + { + double mij = gsl_matrix_get(m, i, j); + double aij = gsl_matrix_get(LDLT, i, j); + + gsl_test_rel(aij, mij, 1.0e-12, + "%s upper triangle: (%3lu,%3lu)[%lu,%lu]: %22.18g %22.18g\n", + desc, N, N, i, j, aij, mij); + } + } + + if (posdef) + { + /* ||E|| should be 0 */ + double norm = gsl_blas_dnrm2(E); + s = norm != 0.0; + gsl_test(s, "%s: (%zu,%zu): ||E|| = %.12e", + desc, N, N, norm); + + /* check that D is decreasing */ + s = 0; + for (i = 1; i < N; ++i) + { + double dprev = gsl_vector_get(&D.vector, i - 1); + double di = gsl_vector_get(&D.vector, i); + + if (di > dprev) + s = 1; + } + + gsl_test(s, "%s: (%zu,%zu): D is not decreasing", + desc, N, N); + } + + /* compute L and LT */ + gsl_matrix_set_identity(L); + gsl_matrix_set_identity(LT); + + gsl_matrix_tricpy('L', 0, L, LDLT); + gsl_matrix_transpose_tricpy('L', 0, LT, L); + + /* compute (L sqrt(D)) and (sqrt(D) LT) */ + for (i = 0; i < N; ++i) + { + gsl_vector_view v = gsl_matrix_column(L, i); + gsl_vector_view w = gsl_matrix_row(LT, i); + double di = gsl_vector_get(&D.vector, i); + + gsl_vector_scale(&v.vector, sqrt(di)); + gsl_vector_scale(&w.vector, sqrt(di)); + } + + /* compute A = L D LT */ + gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0, L, LT, 0.0, A); + + /* compute V = P (S M S + E) P^T */ + + gsl_matrix_memcpy(V, m); + D = gsl_matrix_diagonal(V); + + /* compute S M S */ + if (scale) + { + gsl_linalg_cholesky_scale_apply(V, S); + gsl_matrix_transpose_tricpy('L', 0, V, V); + } + + /* compute S M S + E */ + gsl_vector_add(&D.vector, E); + + /* compute M P^T */ + for (i = 0; i < N; ++i) + { + gsl_vector_view v = gsl_matrix_row(V, i); + gsl_permute_vector(perm, &v.vector); + } + + /* compute P M P^T */ + for (i = 0; i < N; ++i) + { + gsl_vector_view v = gsl_matrix_column(V, i); + gsl_permute_vector(perm, &v.vector); + } + + for (i = 0; i < N; i++) + { + double Ei = gsl_vector_get(E, i); + + for (j = 0; j < N; j++) + { + double Aij = gsl_matrix_get(A, i, j); /* L D L^T */ + double Bij = gsl_matrix_get(V, i, j); /* P M P^T */ + double Cij; /* P M P^T + E */ + + if (i == j) + Cij = Bij + Ei*0; + else + Cij = Bij; + + gsl_test_rel(Aij, Cij, eps, + "%s: (%3lu,%3lu)[%lu,%lu]: %22.18g %22.18g\n", + desc, N, N, i, j, Aij, Cij); + } + } + + if (expected_rcond > 0 && !scale) + { + gsl_vector *work = gsl_vector_alloc(3 * N); + double rcond; + + gsl_linalg_mcholesky_rcond(LDLT, perm, &rcond, work); + + gsl_test_rel(rcond, expected_rcond, 1.0e-6, + "%s rcond: (%3lu,%3lu): %22.18g %22.18g\n", + desc, N, N, rcond, expected_rcond); + + gsl_vector_free(work); + } + + gsl_matrix_free(LDLT); + gsl_matrix_free(V); + gsl_matrix_free(A); + gsl_matrix_free(L); + gsl_matrix_free(LT); + gsl_vector_free(S); + gsl_vector_free(E); + gsl_permutation_free(perm); + + return s; +} + +static int +test_mcholesky_decomp(gsl_rng * r) +{ + int s = 0; + const size_t N_max = 50; + size_t N; + + for (N = 1; N <= N_max; ++N) + { + gsl_matrix * m = gsl_matrix_alloc(N, N); + + create_posdef_matrix(m, r); + test_mcholesky_decomp_eps(1, 0, m, -1.0, 128.0 * N * GSL_DBL_EPSILON, "mcholesky_decomp unscaled random posdef"); + + create_symm_matrix(m, r); + test_mcholesky_decomp_eps(0, 0, m, -1.0, 8192.0 * N * GSL_DBL_EPSILON, "mcholesky_decomp unscaled random symm"); + + if (N <= 8) + { + double expected_rcond = -1.0; + + if (hilb_rcond[N - 1] > 1.0e-12) + expected_rcond = hilb_rcond[N - 1]; + + create_hilbert_matrix2(m); + + test_mcholesky_decomp_eps(1, 0, m, expected_rcond, N * GSL_DBL_EPSILON, "mcholesky_decomp unscaled hilbert"); + } + + gsl_matrix_free(m); + } + + return s; +} + +int +test_mcholesky_solve_eps(const gsl_matrix * m, const gsl_vector * rhs, + const gsl_vector * sol, const double eps, + const char * desc) +{ + int s = 0; + size_t i, N = m->size1; + gsl_matrix * u = gsl_matrix_alloc(N, N); + gsl_vector * x = gsl_vector_calloc(N); + gsl_vector * S = gsl_vector_alloc(N); + gsl_permutation * perm = gsl_permutation_alloc(N); + + gsl_matrix_memcpy(u, m); + + s += gsl_linalg_mcholesky_decomp(u, perm, NULL); + s += gsl_linalg_mcholesky_solve(u, perm, rhs, x); + + for (i = 0; i < N; i++) + { + double xi = gsl_vector_get(x, i); + double yi = gsl_vector_get(sol, i); + + gsl_test_rel(xi, yi, eps, + "%s: %3lu[%lu]: %22.18g %22.18g\n", + desc, N, i, xi, yi); + } + + gsl_vector_free(x); + gsl_vector_free(S); + gsl_matrix_free(u); + gsl_permutation_free(perm); + + return s; +} + +static int +test_mcholesky_solve(gsl_rng * r) +{ + int s = 0; + const size_t N_max = 50; + size_t N; + + for (N = 1; N <= N_max; ++N) + { + gsl_matrix * m = gsl_matrix_alloc(N, N); + gsl_vector * rhs = gsl_vector_alloc(N); + gsl_vector * sol = gsl_vector_alloc(N); + + create_posdef_matrix(m, r); + create_random_vector(sol, r); + gsl_blas_dsymv(CblasLower, 1.0, m, sol, 0.0, rhs); + + test_mcholesky_solve_eps(m, rhs, sol, 64.0 * N * GSL_DBL_EPSILON, "mcholesky_solve random"); + + if (N <= 3) + { + create_hilbert_matrix2(m); + gsl_blas_dsymv(CblasLower, 1.0, m, sol, 0.0, rhs); + test_mcholesky_solve_eps(m, rhs, sol, 512.0 * N * GSL_DBL_EPSILON, "mcholesky_solve hilbert"); + } + + gsl_matrix_free(m); + gsl_vector_free(rhs); + gsl_vector_free(sol); + } + + return s; +} + +int +test_mcholesky_invert_eps(const gsl_matrix * m, const double eps, const char *desc) +{ + int s = 0; + size_t i, j, N = m->size1; + + gsl_matrix * v = gsl_matrix_alloc(N, N); + gsl_matrix * c = gsl_matrix_alloc(N, N); + gsl_matrix * minv = gsl_matrix_alloc(N, N); + gsl_vector * E = gsl_vector_alloc(N); + gsl_permutation * p = gsl_permutation_alloc(N); + + gsl_matrix_memcpy(v, m); + + s += gsl_linalg_mcholesky_decomp(v, p, E); + s += gsl_linalg_mcholesky_invert(v, p, minv); + + /* c = m m^{-1} */ + gsl_blas_dsymm(CblasLeft, CblasUpper, 1.0, m, minv, 0.0, c); + + /* c should be the identity matrix */ + + for (i = 0; i < N; ++i) + { + for (j = 0; j < N; ++j) + { + double cij = gsl_matrix_get(c, i, j); + double expected = (i == j) ? 1.0 : 0.0; + + gsl_test_rel(cij, expected, eps, "%s (%3lu,%3lu)[%lu,%lu]: %22.18g %22.18g\n", + desc, N, N, i, j, cij, expected); + } + } + + gsl_matrix_free(v); + gsl_matrix_free(c); + gsl_matrix_free(minv); + gsl_vector_free(E); + gsl_permutation_free(p); + + return s; +} + +int +test_mcholesky_invert(gsl_rng * r) +{ + int s = 0; + const size_t N_max = 30; + size_t N; + + for (N = 1; N <= N_max; ++N) + { + gsl_matrix * m = gsl_matrix_alloc(N, N); + + create_posdef_matrix(m, r); + test_mcholesky_invert_eps(m, N * GSL_DBL_EPSILON, "mcholesky_invert unscaled random"); + + if (N <= 4) + { + create_hilbert_matrix2(m); + test_mcholesky_invert_eps(m, 256.0 * N * GSL_DBL_EPSILON, "mcholesky_invert unscaled hilbert"); + } + + gsl_matrix_free(m); + } + + return s; +} + +static int +test_pcholesky_decomp_eps(const int scale, const gsl_matrix * m, + const double expected_rcond, const double eps, + const char * desc) +{ + int s = 0; + size_t i, j, N = m->size2; + + gsl_matrix * LDLT = gsl_matrix_alloc(N, N); + gsl_matrix * V = gsl_matrix_alloc(N, N); + gsl_matrix * A = gsl_matrix_alloc(N, N); + gsl_matrix * L = gsl_matrix_alloc(N, N); + gsl_matrix * LT = gsl_matrix_alloc(N, N); + gsl_vector * S = gsl_vector_alloc(N); + gsl_permutation * perm = gsl_permutation_alloc(N); + + gsl_vector_view D = gsl_matrix_diagonal(LDLT); + + gsl_matrix_memcpy(LDLT, m); + + if (scale) + s += gsl_linalg_pcholesky_decomp2(LDLT, perm, S); + else + s += gsl_linalg_pcholesky_decomp(LDLT, perm); + + /* check that the upper triangle of LDLT equals original matrix */ + for (i = 0; i < N; ++i) + { + for (j = i + 1; j < N; ++j) + { + double mij = gsl_matrix_get(m, i, j); + double aij = gsl_matrix_get(LDLT, i, j); + + gsl_test_rel(aij, mij, 1.0e-12, + "%s upper triangle: (%3lu,%3lu)[%lu,%lu]: %22.18g %22.18g\n", + desc, N, N, i, j, aij, mij); + } + } + + /* check that D is decreasing */ + s = 0; + for (i = 1; i < N; ++i) + { + double dprev = gsl_vector_get(&D.vector, i - 1); + double di = gsl_vector_get(&D.vector, i); + + if (di > dprev) + s = 1; + } + + gsl_test(s, "%s: (%zu,%zu): D is not decreasing", + desc, N, N); + + /* compute L and LT */ + gsl_matrix_set_identity(L); + gsl_matrix_set_identity(LT); + + gsl_matrix_tricpy('L', 0, L, LDLT); + gsl_matrix_transpose_tricpy('L', 0, LT, L); + + /* compute (L sqrt(D)) and (sqrt(D) LT) */ + for (i = 0; i < N; ++i) + { + gsl_vector_view v = gsl_matrix_column(L, i); + gsl_vector_view w = gsl_matrix_row(LT, i); + double di = gsl_vector_get(&D.vector, i); + + gsl_vector_scale(&v.vector, sqrt(di)); + gsl_vector_scale(&w.vector, sqrt(di)); + } + + /* compute A = L D LT */ + gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0, L, LT, 0.0, A); + + /* compute V = P S M S P^T */ + + gsl_matrix_memcpy(V, m); + + /* compute S M S */ + if (scale) + { + gsl_linalg_cholesky_scale_apply(V, S); + gsl_matrix_transpose_tricpy('L', 0, V, V); + } + + /* compute M P^T */ + for (i = 0; i < N; ++i) + { + gsl_vector_view v = gsl_matrix_row(V, i); + gsl_permute_vector(perm, &v.vector); + } + + /* compute P M P^T */ + for (i = 0; i < N; ++i) + { + gsl_vector_view v = gsl_matrix_column(V, i); + gsl_permute_vector(perm, &v.vector); + } + + for (i = 0; i < N; i++) + { + for (j = 0; j < N; j++) + { + double Aij = gsl_matrix_get(A, i, j); /* L D L^T */ + double Bij = gsl_matrix_get(V, i, j); /* P M P^T */ + + gsl_test_rel(Aij, Bij, eps, + "%s: (%3lu,%3lu)[%lu,%lu]: %22.18g %22.18g\n", + desc, N, N, i, j, Aij, Bij); + } + } + + if (expected_rcond > 0 && !scale) + { + gsl_vector *work = gsl_vector_alloc(3 * N); + double rcond; + + gsl_linalg_pcholesky_rcond(LDLT, perm, &rcond, work); + + gsl_test_rel(rcond, expected_rcond, 1.0e-6, + "%s rcond: (%3lu,%3lu): %22.18g %22.18g\n", + desc, N, N, rcond, expected_rcond); + + gsl_vector_free(work); + } + + gsl_matrix_free(LDLT); + gsl_matrix_free(V); + gsl_matrix_free(A); + gsl_matrix_free(L); + gsl_matrix_free(LT); + gsl_vector_free(S); + gsl_permutation_free(perm); + + return s; +} + +static int +test_pcholesky_decomp(gsl_rng * r) +{ + int s = 0; + const size_t N_max = 50; + size_t N; + + for (N = 1; N <= N_max; ++N) + { + gsl_matrix * m = gsl_matrix_alloc(N, N); + + create_posdef_matrix(m, r); + test_pcholesky_decomp_eps(0, m, -1.0, 1024.0 * N * GSL_DBL_EPSILON, "pcholesky_decomp unscaled random"); + test_pcholesky_decomp_eps(1, m, -1.0, 1024.0 * N * GSL_DBL_EPSILON, "pcholesky_decomp scaled random"); + + if (N <= 12) + { + double expected_rcond = -1.0; + + if (hilb_rcond[N - 1] > 1.0e-12) + expected_rcond = hilb_rcond[N - 1]; + + create_hilbert_matrix2(m); + + test_pcholesky_decomp_eps(0, m, expected_rcond, N * GSL_DBL_EPSILON, "pcholesky_decomp unscaled hilbert"); + test_pcholesky_decomp_eps(1, m, expected_rcond, N * GSL_DBL_EPSILON, "pcholesky_decomp scaled hilbert"); + } + + gsl_matrix_free(m); + } + + return s; +} + +int +test_pcholesky_solve_eps(const int scale, const gsl_matrix * m, const gsl_vector * rhs, + const gsl_vector * sol, const double eps, + const char * desc) +{ + int s = 0; + size_t i, N = m->size1; + gsl_matrix * u = gsl_matrix_alloc(N, N); + gsl_vector * x = gsl_vector_calloc(N); + gsl_vector * S = gsl_vector_alloc(N); + gsl_permutation * perm = gsl_permutation_alloc(N); + + gsl_matrix_memcpy(u, m); + + if (scale) + { + s += gsl_linalg_pcholesky_decomp2(u, perm, S); + s += gsl_linalg_pcholesky_solve2(u, perm, S, rhs, x); + } + else + { + s += gsl_linalg_pcholesky_decomp(u, perm); + s += gsl_linalg_pcholesky_solve(u, perm, rhs, x); + } + + for (i = 0; i < N; i++) + { + double xi = gsl_vector_get(x, i); + double yi = gsl_vector_get(sol, i); + + gsl_test_rel(xi, yi, eps, + "%s: %3lu[%lu]: %22.18g %22.18g\n", + desc, N, i, xi, yi); + } + + gsl_vector_free(x); + gsl_vector_free(S); + gsl_matrix_free(u); + gsl_permutation_free(perm); + + return s; +} + +static int +test_pcholesky_solve(gsl_rng * r) +{ + int s = 0; + const size_t N_max = 50; + size_t N; + + for (N = 1; N <= N_max; ++N) + { + gsl_matrix * m = gsl_matrix_alloc(N, N); + gsl_vector * rhs = gsl_vector_alloc(N); + gsl_vector * sol = gsl_vector_alloc(N); + + create_posdef_matrix(m, r); + create_random_vector(sol, r); + gsl_blas_dsymv(CblasLower, 1.0, m, sol, 0.0, rhs); + + test_pcholesky_solve_eps(0, m, rhs, sol, 64.0 * N * GSL_DBL_EPSILON, "pcholesky_solve unscaled random"); + test_pcholesky_solve_eps(1, m, rhs, sol, 64.0 * N * GSL_DBL_EPSILON, "pcholesky_solve scaled random"); + + if (N <= 4) + { + create_hilbert_matrix2(m); + gsl_blas_dsymv(CblasLower, 1.0, m, sol, 0.0, rhs); + test_pcholesky_solve_eps(0, m, rhs, sol, 1024.0 * N * GSL_DBL_EPSILON, "pcholesky_solve unscaled hilbert"); + test_pcholesky_solve_eps(1, m, rhs, sol, 2048.0 * N * GSL_DBL_EPSILON, "pcholesky_solve scaled hilbert"); + } + + gsl_matrix_free(m); + gsl_vector_free(rhs); + gsl_vector_free(sol); + } + + return s; +} + +int +test_pcholesky_invert_eps(const gsl_matrix * m, const double eps, const char *desc) +{ + int s = 0; + size_t i, j, N = m->size1; + + gsl_matrix * v = gsl_matrix_alloc(N, N); + gsl_matrix * c = gsl_matrix_alloc(N, N); + gsl_matrix * minv = gsl_matrix_alloc(N, N); + gsl_permutation * p = gsl_permutation_alloc(N); + + gsl_matrix_memcpy(v, m); + + s += gsl_linalg_pcholesky_decomp(v, p); + s += gsl_linalg_pcholesky_invert(v, p, minv); + + /* c = m m^{-1} */ + gsl_blas_dsymm(CblasLeft, CblasUpper, 1.0, m, minv, 0.0, c); + + /* c should be the identity matrix */ + + for (i = 0; i < N; ++i) + { + for (j = 0; j < N; ++j) + { + double cij = gsl_matrix_get(c, i, j); + double expected = (i == j) ? 1.0 : 0.0; + + gsl_test_rel(cij, expected, eps, "%s (%3lu,%3lu)[%lu,%lu]: %22.18g %22.18g\n", + desc, N, N, i, j, cij, expected); + } + } + + gsl_matrix_free(v); + gsl_matrix_free(c); + gsl_matrix_free(minv); + gsl_permutation_free(p); + + return s; +} + +int +test_pcholesky_invert(gsl_rng * r) +{ + int s = 0; + const size_t N_max = 30; + size_t N; + + for (N = 1; N <= N_max; ++N) + { + gsl_matrix * m = gsl_matrix_alloc(N, N); + + create_posdef_matrix(m, r); + test_pcholesky_invert_eps(m, N * GSL_DBL_EPSILON, "pcholesky_invert unscaled random"); + + if (N <= 4) + { + create_hilbert_matrix2(m); + test_pcholesky_invert_eps(m, 256.0 * N * GSL_DBL_EPSILON, "pcholesky_invert unscaled hilbert"); + } + + gsl_matrix_free(m); + } + + return s; +} diff -Nru gsl-doc-1.16/linalg/TODO gsl-doc-2.3/linalg/TODO --- gsl-doc-1.16/linalg/TODO 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/linalg/TODO 2016-08-10 21:03:42.000000000 +0000 @@ -11,5 +11,3 @@ TAUCS is a C library of sparse linear solvers. http://www.tau.ac.il/~stoledo/taucs/ - - diff -Nru gsl-doc-1.16/linalg/tridiag.c gsl-doc-2.3/linalg/tridiag.c --- gsl-doc-1.16/linalg/tridiag.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/linalg/tridiag.c 2015-11-03 16:21:55.000000000 +0000 @@ -234,6 +234,11 @@ if (N == 1) { x[0] = b[0] / diag[0]; + free(delta); + free(gamma); + free(alpha); + free(c); + free(z); return GSL_SUCCESS; } diff -Nru gsl-doc-1.16/Makefile.am gsl-doc-2.3/Makefile.am --- gsl-doc-1.16/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/Makefile.am 2016-07-07 20:36:10.000000000 +0000 @@ -2,9 +2,9 @@ # AUTOMAKE_OPTIONS = readme-alpha -SUBDIRS = gsl utils sys test err const complex cheb block vector matrix permutation combination multiset sort ieee-utils cblas blas linalg eigen specfunc dht qrng rng randist fft poly fit multifit statistics siman sum integration interpolation histogram ode-initval ode-initval2 roots multiroots min multimin monte ntuple diff deriv cdf wavelet bspline doc +SUBDIRS = gsl utils sys test err const complex cheb block vector matrix permutation combination multiset sort ieee-utils cblas blas linalg eigen specfunc dht qrng rng randist fft poly fit multifit multifit_nlinear multilarge multilarge_nlinear rstat statistics siman sum integration interpolation histogram ode-initval ode-initval2 roots multiroots min multimin monte ntuple diff deriv cdf wavelet bspline spblas spmatrix splinalg doc -SUBLIBS = block/libgslblock.la blas/libgslblas.la bspline/libgslbspline.la complex/libgslcomplex.la cheb/libgslcheb.la dht/libgsldht.la diff/libgsldiff.la deriv/libgslderiv.la eigen/libgsleigen.la err/libgslerr.la fft/libgslfft.la fit/libgslfit.la histogram/libgslhistogram.la ieee-utils/libgslieeeutils.la integration/libgslintegration.la interpolation/libgslinterpolation.la linalg/libgsllinalg.la matrix/libgslmatrix.la min/libgslmin.la monte/libgslmonte.la multifit/libgslmultifit.la multimin/libgslmultimin.la multiroots/libgslmultiroots.la ntuple/libgslntuple.la ode-initval/libgslodeiv.la ode-initval2/libgslodeiv2.la permutation/libgslpermutation.la combination/libgslcombination.la multiset/libgslmultiset.la poly/libgslpoly.la qrng/libgslqrng.la randist/libgslrandist.la rng/libgslrng.la roots/libgslroots.la siman/libgslsiman.la sort/libgslsort.la specfunc/libgslspecfunc.la statistics/libgslstatistics.la sum/libgslsum.la sys/libgslsys.la test/libgsltest.la utils/libutils.la vector/libgslvector.la cdf/libgslcdf.la wavelet/libgslwavelet.la +SUBLIBS = block/libgslblock.la blas/libgslblas.la bspline/libgslbspline.la complex/libgslcomplex.la cheb/libgslcheb.la dht/libgsldht.la diff/libgsldiff.la deriv/libgslderiv.la eigen/libgsleigen.la err/libgslerr.la fft/libgslfft.la fit/libgslfit.la histogram/libgslhistogram.la ieee-utils/libgslieeeutils.la integration/libgslintegration.la interpolation/libgslinterpolation.la linalg/libgsllinalg.la matrix/libgslmatrix.la min/libgslmin.la monte/libgslmonte.la multifit/libgslmultifit.la multifit_nlinear/libgslmultifit_nlinear.la multilarge/libgslmultilarge.la multilarge_nlinear/libgslmultilarge_nlinear.la multimin/libgslmultimin.la multiroots/libgslmultiroots.la ntuple/libgslntuple.la ode-initval/libgslodeiv.la ode-initval2/libgslodeiv2.la permutation/libgslpermutation.la combination/libgslcombination.la multiset/libgslmultiset.la poly/libgslpoly.la qrng/libgslqrng.la randist/libgslrandist.la rng/libgslrng.la roots/libgslroots.la siman/libgslsiman.la sort/libgslsort.la specfunc/libgslspecfunc.la rstat/libgslrstat.la statistics/libgslstatistics.la sum/libgslsum.la sys/libgslsys.la test/libgsltest.la utils/libutils.la vector/libgslvector.la cdf/libgslcdf.la wavelet/libgslwavelet.la spmatrix/libgslspmatrix.la spblas/libgslspblas.la splinalg/libgslsplinalg.la pkginclude_HEADERS = gsl_math.h gsl_pow_int.h gsl_nan.h gsl_machine.h gsl_mode.h gsl_precision.h gsl_types.h gsl_version.h gsl_minmax.h gsl_inline.h @@ -19,16 +19,10 @@ lib_LTLIBRARIES = libgsl.la libgsl_la_SOURCES = version.c -libgsl_la_LIBADD = $(SUBLIBS) -libgsl_la_LDFLAGS = -version-info $(GSL_LT_VERSION) +libgsl_la_LIBADD = $(GSL_LIBADD) $(SUBLIBS) +libgsl_la_LDFLAGS = $(GSL_LDFLAGS) -version-info $(GSL_LT_VERSION) noinst_HEADERS = templates_on.h templates_off.h build.h -MINGW32_HOST = @MINGW32_HOST@ -if MINGW32_HOST -libgsl_la_LIBADD += cblas/libgslcblas.la -libgsl_la_LDFLAGS += -no-undefined -endif - m4datadir = $(datadir)/aclocal m4data_DATA = gsl.m4 diff -Nru gsl-doc-1.16/Makefile.in gsl-doc-2.3/Makefile.in --- gsl-doc-1.16/Makefile.in 2013-07-19 15:14:52.000000000 +0000 +++ gsl-doc-2.3/Makefile.in 2016-12-09 00:04:20.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -84,8 +84,6 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -@MINGW32_HOST_TRUE@am__append_1 = cblas/libgslcblas.la -@MINGW32_HOST_TRUE@am__append_2 = -no-undefined bin_PROGRAMS = gsl-randist$(EXEEXT) gsl-histogram$(EXEEXT) subdir = . DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \ @@ -136,7 +134,8 @@ "$(DESTDIR)$(bindir)" "$(DESTDIR)$(m4datadir)" \ "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(pkgincludedir)" LTLIBRARIES = $(lib_LTLIBRARIES) -libgsl_la_DEPENDENCIES = $(SUBLIBS) $(am__append_1) +am__DEPENDENCIES_1 = +libgsl_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(SUBLIBS) am_libgsl_la_OBJECTS = version.lo libgsl_la_OBJECTS = $(am_libgsl_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) @@ -459,6 +458,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -481,7 +481,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -595,7 +598,7 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -SUBDIRS = gsl utils sys test err const complex cheb block vector matrix permutation combination multiset sort ieee-utils cblas blas linalg eigen specfunc dht qrng rng randist fft poly fit multifit statistics siman sum integration interpolation histogram ode-initval ode-initval2 roots multiroots min multimin monte ntuple diff deriv cdf wavelet bspline doc +SUBDIRS = gsl utils sys test err const complex cheb block vector matrix permutation combination multiset sort ieee-utils cblas blas linalg eigen specfunc dht qrng rng randist fft poly fit multifit multifit_nlinear multilarge multilarge_nlinear rstat statistics siman sum integration interpolation histogram ode-initval ode-initval2 roots multiroots min multimin monte ntuple diff deriv cdf wavelet bspline spblas spmatrix splinalg doc SUBLIBS = block/libgslblock.la blas/libgslblas.la \ bspline/libgslbspline.la complex/libgslcomplex.la \ cheb/libgslcheb.la dht/libgsldht.la diff/libgsldiff.la \ @@ -604,18 +607,22 @@ ieee-utils/libgslieeeutils.la integration/libgslintegration.la \ interpolation/libgslinterpolation.la linalg/libgsllinalg.la \ matrix/libgslmatrix.la min/libgslmin.la monte/libgslmonte.la \ - multifit/libgslmultifit.la multimin/libgslmultimin.la \ - multiroots/libgslmultiroots.la ntuple/libgslntuple.la \ - ode-initval/libgslodeiv.la ode-initval2/libgslodeiv2.la \ - permutation/libgslpermutation.la \ + multifit/libgslmultifit.la \ + multifit_nlinear/libgslmultifit_nlinear.la \ + multilarge/libgslmultilarge.la \ + multilarge_nlinear/libgslmultilarge_nlinear.la \ + multimin/libgslmultimin.la multiroots/libgslmultiroots.la \ + ntuple/libgslntuple.la ode-initval/libgslodeiv.la \ + ode-initval2/libgslodeiv2.la permutation/libgslpermutation.la \ combination/libgslcombination.la multiset/libgslmultiset.la \ poly/libgslpoly.la qrng/libgslqrng.la randist/libgslrandist.la \ rng/libgslrng.la roots/libgslroots.la siman/libgslsiman.la \ sort/libgslsort.la specfunc/libgslspecfunc.la \ - statistics/libgslstatistics.la sum/libgslsum.la \ - sys/libgslsys.la test/libgsltest.la utils/libutils.la \ - vector/libgslvector.la cdf/libgslcdf.la \ - wavelet/libgslwavelet.la + rstat/libgslrstat.la statistics/libgslstatistics.la \ + sum/libgslsum.la sys/libgslsys.la test/libgsltest.la \ + utils/libutils.la vector/libgslvector.la cdf/libgslcdf.la \ + wavelet/libgslwavelet.la spmatrix/libgslspmatrix.la \ + spblas/libgslspblas.la splinalg/libgslsplinalg.la pkginclude_HEADERS = gsl_math.h gsl_pow_int.h gsl_nan.h gsl_machine.h gsl_mode.h gsl_precision.h gsl_types.h gsl_version.h gsl_minmax.h gsl_inline.h bin_SCRIPTS = gsl-config pkgconfigdir = $(libdir)/pkgconfig @@ -624,10 +631,9 @@ EXTRA_DIST = autogen.sh gsl-config.in gsl.pc.in configure.ac THANKS BUGS gsl.spec.in gsl.m4 test_gsl_histogram.sh pkgconfig.test lib_LTLIBRARIES = libgsl.la libgsl_la_SOURCES = version.c -libgsl_la_LIBADD = $(SUBLIBS) $(am__append_1) -libgsl_la_LDFLAGS = -version-info $(GSL_LT_VERSION) $(am__append_2) +libgsl_la_LIBADD = $(GSL_LIBADD) $(SUBLIBS) +libgsl_la_LDFLAGS = $(GSL_LDFLAGS) -version-info $(GSL_LT_VERSION) noinst_HEADERS = templates_on.h templates_off.h build.h -MINGW32_HOST = @MINGW32_HOST@ m4datadir = $(datadir)/aclocal m4data_DATA = gsl.m4 gsl_randist_SOURCES = gsl-randist.c diff -Nru gsl-doc-1.16/matrix/copy_source.c gsl-doc-2.3/matrix/copy_source.c --- gsl-doc-1.16/matrix/copy_source.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/copy_source.c 2016-07-07 20:36:10.000000000 +0000 @@ -84,5 +84,76 @@ } +int +FUNCTION (gsl_matrix, tricpy) (const char uplo_src, + const int copy_diag, TYPE (gsl_matrix) * dest, + const TYPE (gsl_matrix) * src) +{ + const size_t src_size1 = src->size1; + const size_t src_size2 = src->size2; + const size_t dest_size1 = dest->size1; + const size_t dest_size2 = dest->size2; + + if (src_size1 != dest_size1 || src_size2 != dest_size2) + { + GSL_ERROR ("matrix sizes are different", GSL_EBADLEN); + } + + { + const size_t src_tda = src->tda ; + const size_t dest_tda = dest->tda ; + size_t i, j, k; + + if (uplo_src == 'L') + { + for (i = 0; i < src_size1 ; i++) + { + for (j = 0; j < i; j++) + { + for (k = 0; k < MULTIPLICITY; k++) + { + size_t e1 = (i * dest_tda + j) * MULTIPLICITY + k ; + size_t e2 = (i * src_tda + j) * MULTIPLICITY + k ; + dest->data[e1] = src->data[e2]; + } + } + } + } + else if (uplo_src == 'U') + { + for (i = 0; i < src_size1 ; i++) + { + for (j = i + 1; j < src_size2; j++) + { + for (k = 0; k < MULTIPLICITY; k++) + { + size_t e1 = (i * dest_tda + j) * MULTIPLICITY + k ; + size_t e2 = (i * src_tda + j) * MULTIPLICITY + k ; + dest->data[e1] = src->data[e2]; + } + } + } + } + else + { + GSL_ERROR ("invalid uplo parameters", GSL_EINVAL); + } + + if (copy_diag) + { + for (i = 0; i < src_size1 ; i++) + { + for (k = 0; k < MULTIPLICITY; k++) + { + size_t e1 = (i * dest_tda + i) * MULTIPLICITY + k ; + size_t e2 = (i * src_tda + i) * MULTIPLICITY + k ; + dest->data[e1] = src->data[e2]; + } + } + } + } + + return GSL_SUCCESS; +} diff -Nru gsl-doc-1.16/matrix/gsl_matrix_char.h gsl-doc-2.3/matrix/gsl_matrix_char.h --- gsl-doc-1.16/matrix/gsl_matrix_char.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/gsl_matrix_char.h 2016-07-07 20:36:10.000000000 +0000 @@ -216,12 +216,14 @@ int gsl_matrix_char_memcpy(gsl_matrix_char * dest, const gsl_matrix_char * src); int gsl_matrix_char_swap(gsl_matrix_char * m1, gsl_matrix_char * m2); +int gsl_matrix_char_tricpy(const char uplo_src, const int copy_diag, gsl_matrix_char * dest, const gsl_matrix_char * src); int gsl_matrix_char_swap_rows(gsl_matrix_char * m, const size_t i, const size_t j); int gsl_matrix_char_swap_columns(gsl_matrix_char * m, const size_t i, const size_t j); int gsl_matrix_char_swap_rowcol(gsl_matrix_char * m, const size_t i, const size_t j); int gsl_matrix_char_transpose (gsl_matrix_char * m); int gsl_matrix_char_transpose_memcpy (gsl_matrix_char * dest, const gsl_matrix_char * src); +int gsl_matrix_char_transpose_tricpy (const char uplo_src, const int copy_diag, gsl_matrix_char * dest, const gsl_matrix_char * src); char gsl_matrix_char_max (const gsl_matrix_char * m); char gsl_matrix_char_min (const gsl_matrix_char * m); diff -Nru gsl-doc-1.16/matrix/gsl_matrix_complex_double.h gsl-doc-2.3/matrix/gsl_matrix_complex_double.h --- gsl-doc-1.16/matrix/gsl_matrix_complex_double.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/gsl_matrix_complex_double.h 2016-08-23 14:27:35.000000000 +0000 @@ -216,6 +216,7 @@ int gsl_matrix_complex_memcpy(gsl_matrix_complex * dest, const gsl_matrix_complex * src); int gsl_matrix_complex_swap(gsl_matrix_complex * m1, gsl_matrix_complex * m2); +int gsl_matrix_complex_tricpy(const char uplo_src, const int copy_diag, gsl_matrix_complex * dest, const gsl_matrix_complex * src); int gsl_matrix_complex_swap_rows(gsl_matrix_complex * m, const size_t i, const size_t j); int gsl_matrix_complex_swap_columns(gsl_matrix_complex * m, const size_t i, const size_t j); @@ -223,6 +224,7 @@ int gsl_matrix_complex_transpose (gsl_matrix_complex * m); int gsl_matrix_complex_transpose_memcpy (gsl_matrix_complex * dest, const gsl_matrix_complex * src); +int gsl_matrix_complex_transpose_tricpy(const char uplo_src, const int copy_diag, gsl_matrix_complex * dest, const gsl_matrix_complex * src); int gsl_matrix_complex_equal (const gsl_matrix_complex * a, const gsl_matrix_complex * b); diff -Nru gsl-doc-1.16/matrix/gsl_matrix_complex_float.h gsl-doc-2.3/matrix/gsl_matrix_complex_float.h --- gsl-doc-1.16/matrix/gsl_matrix_complex_float.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/gsl_matrix_complex_float.h 2016-08-23 14:27:05.000000000 +0000 @@ -216,6 +216,7 @@ int gsl_matrix_complex_float_memcpy(gsl_matrix_complex_float * dest, const gsl_matrix_complex_float * src); int gsl_matrix_complex_float_swap(gsl_matrix_complex_float * m1, gsl_matrix_complex_float * m2); +int gsl_matrix_complex_float_tricpy(const char uplo_src, const int copy_diag, gsl_matrix_complex_float * dest, const gsl_matrix_complex_float * src); int gsl_matrix_complex_float_swap_rows(gsl_matrix_complex_float * m, const size_t i, const size_t j); int gsl_matrix_complex_float_swap_columns(gsl_matrix_complex_float * m, const size_t i, const size_t j); @@ -223,6 +224,7 @@ int gsl_matrix_complex_float_transpose (gsl_matrix_complex_float * m); int gsl_matrix_complex_float_transpose_memcpy (gsl_matrix_complex_float * dest, const gsl_matrix_complex_float * src); +int gsl_matrix_complex_float_transpose_tricpy(const char uplo_src, const int copy_diag, gsl_matrix_complex_float * dest, const gsl_matrix_complex_float * src); int gsl_matrix_complex_float_equal (const gsl_matrix_complex_float * a, const gsl_matrix_complex_float * b); diff -Nru gsl-doc-1.16/matrix/gsl_matrix_complex_long_double.h gsl-doc-2.3/matrix/gsl_matrix_complex_long_double.h --- gsl-doc-1.16/matrix/gsl_matrix_complex_long_double.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/gsl_matrix_complex_long_double.h 2016-08-23 14:27:35.000000000 +0000 @@ -216,6 +216,7 @@ int gsl_matrix_complex_long_double_memcpy(gsl_matrix_complex_long_double * dest, const gsl_matrix_complex_long_double * src); int gsl_matrix_complex_long_double_swap(gsl_matrix_complex_long_double * m1, gsl_matrix_complex_long_double * m2); +int gsl_matrix_complex_long_double_tricpy(const char uplo_src, const int copy_diag, gsl_matrix_complex_long_double * dest, const gsl_matrix_complex_long_double * src); int gsl_matrix_complex_long_double_swap_rows(gsl_matrix_complex_long_double * m, const size_t i, const size_t j); int gsl_matrix_complex_long_double_swap_columns(gsl_matrix_complex_long_double * m, const size_t i, const size_t j); @@ -223,6 +224,7 @@ int gsl_matrix_complex_long_double_transpose (gsl_matrix_complex_long_double * m); int gsl_matrix_complex_long_double_transpose_memcpy (gsl_matrix_complex_long_double * dest, const gsl_matrix_complex_long_double * src); +int gsl_matrix_complex_long_double_transpose_tricpy(const char uplo_src, const int copy_diag, gsl_matrix_complex_long_double * dest, const gsl_matrix_complex_long_double * src); int gsl_matrix_complex_long_double_equal (const gsl_matrix_complex_long_double * a, const gsl_matrix_complex_long_double * b); diff -Nru gsl-doc-1.16/matrix/gsl_matrix_double.h gsl-doc-2.3/matrix/gsl_matrix_double.h --- gsl-doc-1.16/matrix/gsl_matrix_double.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/gsl_matrix_double.h 2016-07-07 20:36:10.000000000 +0000 @@ -216,12 +216,14 @@ int gsl_matrix_memcpy(gsl_matrix * dest, const gsl_matrix * src); int gsl_matrix_swap(gsl_matrix * m1, gsl_matrix * m2); +int gsl_matrix_tricpy(const char uplo_src, const int copy_diag, gsl_matrix * dest, const gsl_matrix * src); int gsl_matrix_swap_rows(gsl_matrix * m, const size_t i, const size_t j); int gsl_matrix_swap_columns(gsl_matrix * m, const size_t i, const size_t j); int gsl_matrix_swap_rowcol(gsl_matrix * m, const size_t i, const size_t j); int gsl_matrix_transpose (gsl_matrix * m); int gsl_matrix_transpose_memcpy (gsl_matrix * dest, const gsl_matrix * src); +int gsl_matrix_transpose_tricpy (const char uplo_src, const int copy_diag, gsl_matrix * dest, const gsl_matrix * src); double gsl_matrix_max (const gsl_matrix * m); double gsl_matrix_min (const gsl_matrix * m); diff -Nru gsl-doc-1.16/matrix/gsl_matrix_float.h gsl-doc-2.3/matrix/gsl_matrix_float.h --- gsl-doc-1.16/matrix/gsl_matrix_float.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/gsl_matrix_float.h 2016-07-07 20:36:10.000000000 +0000 @@ -216,12 +216,14 @@ int gsl_matrix_float_memcpy(gsl_matrix_float * dest, const gsl_matrix_float * src); int gsl_matrix_float_swap(gsl_matrix_float * m1, gsl_matrix_float * m2); +int gsl_matrix_float_tricpy(const char uplo_src, const int copy_diag, gsl_matrix_float * dest, const gsl_matrix_float * src); int gsl_matrix_float_swap_rows(gsl_matrix_float * m, const size_t i, const size_t j); int gsl_matrix_float_swap_columns(gsl_matrix_float * m, const size_t i, const size_t j); int gsl_matrix_float_swap_rowcol(gsl_matrix_float * m, const size_t i, const size_t j); int gsl_matrix_float_transpose (gsl_matrix_float * m); int gsl_matrix_float_transpose_memcpy (gsl_matrix_float * dest, const gsl_matrix_float * src); +int gsl_matrix_float_transpose_tricpy (const char uplo_src, const int copy_diag, gsl_matrix_float * dest, const gsl_matrix_float * src); float gsl_matrix_float_max (const gsl_matrix_float * m); float gsl_matrix_float_min (const gsl_matrix_float * m); diff -Nru gsl-doc-1.16/matrix/gsl_matrix_int.h gsl-doc-2.3/matrix/gsl_matrix_int.h --- gsl-doc-1.16/matrix/gsl_matrix_int.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/gsl_matrix_int.h 2016-07-07 20:36:10.000000000 +0000 @@ -216,12 +216,14 @@ int gsl_matrix_int_memcpy(gsl_matrix_int * dest, const gsl_matrix_int * src); int gsl_matrix_int_swap(gsl_matrix_int * m1, gsl_matrix_int * m2); +int gsl_matrix_int_tricpy(const char uplo_src, const int copy_diag, gsl_matrix_int * dest, const gsl_matrix_int * src); int gsl_matrix_int_swap_rows(gsl_matrix_int * m, const size_t i, const size_t j); int gsl_matrix_int_swap_columns(gsl_matrix_int * m, const size_t i, const size_t j); int gsl_matrix_int_swap_rowcol(gsl_matrix_int * m, const size_t i, const size_t j); int gsl_matrix_int_transpose (gsl_matrix_int * m); int gsl_matrix_int_transpose_memcpy (gsl_matrix_int * dest, const gsl_matrix_int * src); +int gsl_matrix_int_transpose_tricpy (const char uplo_src, const int copy_diag, gsl_matrix_int * dest, const gsl_matrix_int * src); int gsl_matrix_int_max (const gsl_matrix_int * m); int gsl_matrix_int_min (const gsl_matrix_int * m); diff -Nru gsl-doc-1.16/matrix/gsl_matrix_long_double.h gsl-doc-2.3/matrix/gsl_matrix_long_double.h --- gsl-doc-1.16/matrix/gsl_matrix_long_double.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/gsl_matrix_long_double.h 2016-07-07 20:36:10.000000000 +0000 @@ -216,12 +216,14 @@ int gsl_matrix_long_double_memcpy(gsl_matrix_long_double * dest, const gsl_matrix_long_double * src); int gsl_matrix_long_double_swap(gsl_matrix_long_double * m1, gsl_matrix_long_double * m2); +int gsl_matrix_long_double_tricpy(const char uplo_src, const int copy_diag, gsl_matrix_long_double * dest, const gsl_matrix_long_double * src); int gsl_matrix_long_double_swap_rows(gsl_matrix_long_double * m, const size_t i, const size_t j); int gsl_matrix_long_double_swap_columns(gsl_matrix_long_double * m, const size_t i, const size_t j); int gsl_matrix_long_double_swap_rowcol(gsl_matrix_long_double * m, const size_t i, const size_t j); int gsl_matrix_long_double_transpose (gsl_matrix_long_double * m); int gsl_matrix_long_double_transpose_memcpy (gsl_matrix_long_double * dest, const gsl_matrix_long_double * src); +int gsl_matrix_long_double_transpose_tricpy (const char uplo_src, const int copy_diag, gsl_matrix_long_double * dest, const gsl_matrix_long_double * src); long double gsl_matrix_long_double_max (const gsl_matrix_long_double * m); long double gsl_matrix_long_double_min (const gsl_matrix_long_double * m); diff -Nru gsl-doc-1.16/matrix/gsl_matrix_long.h gsl-doc-2.3/matrix/gsl_matrix_long.h --- gsl-doc-1.16/matrix/gsl_matrix_long.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/gsl_matrix_long.h 2016-07-07 20:36:10.000000000 +0000 @@ -216,12 +216,14 @@ int gsl_matrix_long_memcpy(gsl_matrix_long * dest, const gsl_matrix_long * src); int gsl_matrix_long_swap(gsl_matrix_long * m1, gsl_matrix_long * m2); +int gsl_matrix_long_tricpy(const char uplo_src, const int copy_diag, gsl_matrix_long * dest, const gsl_matrix_long * src); int gsl_matrix_long_swap_rows(gsl_matrix_long * m, const size_t i, const size_t j); int gsl_matrix_long_swap_columns(gsl_matrix_long * m, const size_t i, const size_t j); int gsl_matrix_long_swap_rowcol(gsl_matrix_long * m, const size_t i, const size_t j); int gsl_matrix_long_transpose (gsl_matrix_long * m); int gsl_matrix_long_transpose_memcpy (gsl_matrix_long * dest, const gsl_matrix_long * src); +int gsl_matrix_long_transpose_tricpy (const char uplo_src, const int copy_diag, gsl_matrix_long * dest, const gsl_matrix_long * src); long gsl_matrix_long_max (const gsl_matrix_long * m); long gsl_matrix_long_min (const gsl_matrix_long * m); diff -Nru gsl-doc-1.16/matrix/gsl_matrix_short.h gsl-doc-2.3/matrix/gsl_matrix_short.h --- gsl-doc-1.16/matrix/gsl_matrix_short.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/gsl_matrix_short.h 2016-07-07 20:36:10.000000000 +0000 @@ -216,12 +216,14 @@ int gsl_matrix_short_memcpy(gsl_matrix_short * dest, const gsl_matrix_short * src); int gsl_matrix_short_swap(gsl_matrix_short * m1, gsl_matrix_short * m2); +int gsl_matrix_short_tricpy(const char uplo_src, const int copy_diag, gsl_matrix_short * dest, const gsl_matrix_short * src); int gsl_matrix_short_swap_rows(gsl_matrix_short * m, const size_t i, const size_t j); int gsl_matrix_short_swap_columns(gsl_matrix_short * m, const size_t i, const size_t j); int gsl_matrix_short_swap_rowcol(gsl_matrix_short * m, const size_t i, const size_t j); int gsl_matrix_short_transpose (gsl_matrix_short * m); int gsl_matrix_short_transpose_memcpy (gsl_matrix_short * dest, const gsl_matrix_short * src); +int gsl_matrix_short_transpose_tricpy (const char uplo_src, const int copy_diag, gsl_matrix_short * dest, const gsl_matrix_short * src); short gsl_matrix_short_max (const gsl_matrix_short * m); short gsl_matrix_short_min (const gsl_matrix_short * m); diff -Nru gsl-doc-1.16/matrix/gsl_matrix_uchar.h gsl-doc-2.3/matrix/gsl_matrix_uchar.h --- gsl-doc-1.16/matrix/gsl_matrix_uchar.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/gsl_matrix_uchar.h 2016-07-07 20:36:10.000000000 +0000 @@ -216,12 +216,14 @@ int gsl_matrix_uchar_memcpy(gsl_matrix_uchar * dest, const gsl_matrix_uchar * src); int gsl_matrix_uchar_swap(gsl_matrix_uchar * m1, gsl_matrix_uchar * m2); +int gsl_matrix_uchar_tricpy(const char uplo_src, const int copy_diag, gsl_matrix_uchar * dest, const gsl_matrix_uchar * src); int gsl_matrix_uchar_swap_rows(gsl_matrix_uchar * m, const size_t i, const size_t j); int gsl_matrix_uchar_swap_columns(gsl_matrix_uchar * m, const size_t i, const size_t j); int gsl_matrix_uchar_swap_rowcol(gsl_matrix_uchar * m, const size_t i, const size_t j); int gsl_matrix_uchar_transpose (gsl_matrix_uchar * m); int gsl_matrix_uchar_transpose_memcpy (gsl_matrix_uchar * dest, const gsl_matrix_uchar * src); +int gsl_matrix_uchar_transpose_tricpy (const char uplo_src, const int copy_diag, gsl_matrix_uchar * dest, const gsl_matrix_uchar * src); unsigned char gsl_matrix_uchar_max (const gsl_matrix_uchar * m); unsigned char gsl_matrix_uchar_min (const gsl_matrix_uchar * m); diff -Nru gsl-doc-1.16/matrix/gsl_matrix_uint.h gsl-doc-2.3/matrix/gsl_matrix_uint.h --- gsl-doc-1.16/matrix/gsl_matrix_uint.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/gsl_matrix_uint.h 2016-07-07 20:36:10.000000000 +0000 @@ -216,12 +216,14 @@ int gsl_matrix_uint_memcpy(gsl_matrix_uint * dest, const gsl_matrix_uint * src); int gsl_matrix_uint_swap(gsl_matrix_uint * m1, gsl_matrix_uint * m2); +int gsl_matrix_uint_tricpy(const char uplo_src, const int copy_diag, gsl_matrix_uint * dest, const gsl_matrix_uint * src); int gsl_matrix_uint_swap_rows(gsl_matrix_uint * m, const size_t i, const size_t j); int gsl_matrix_uint_swap_columns(gsl_matrix_uint * m, const size_t i, const size_t j); int gsl_matrix_uint_swap_rowcol(gsl_matrix_uint * m, const size_t i, const size_t j); int gsl_matrix_uint_transpose (gsl_matrix_uint * m); int gsl_matrix_uint_transpose_memcpy (gsl_matrix_uint * dest, const gsl_matrix_uint * src); +int gsl_matrix_uint_transpose_tricpy (const char uplo_src, const int copy_diag, gsl_matrix_uint * dest, const gsl_matrix_uint * src); unsigned int gsl_matrix_uint_max (const gsl_matrix_uint * m); unsigned int gsl_matrix_uint_min (const gsl_matrix_uint * m); diff -Nru gsl-doc-1.16/matrix/gsl_matrix_ulong.h gsl-doc-2.3/matrix/gsl_matrix_ulong.h --- gsl-doc-1.16/matrix/gsl_matrix_ulong.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/gsl_matrix_ulong.h 2016-07-07 20:36:10.000000000 +0000 @@ -216,12 +216,14 @@ int gsl_matrix_ulong_memcpy(gsl_matrix_ulong * dest, const gsl_matrix_ulong * src); int gsl_matrix_ulong_swap(gsl_matrix_ulong * m1, gsl_matrix_ulong * m2); +int gsl_matrix_ulong_tricpy(const char uplo_src, const int copy_diag, gsl_matrix_ulong * dest, const gsl_matrix_ulong * src); int gsl_matrix_ulong_swap_rows(gsl_matrix_ulong * m, const size_t i, const size_t j); int gsl_matrix_ulong_swap_columns(gsl_matrix_ulong * m, const size_t i, const size_t j); int gsl_matrix_ulong_swap_rowcol(gsl_matrix_ulong * m, const size_t i, const size_t j); int gsl_matrix_ulong_transpose (gsl_matrix_ulong * m); int gsl_matrix_ulong_transpose_memcpy (gsl_matrix_ulong * dest, const gsl_matrix_ulong * src); +int gsl_matrix_ulong_transpose_tricpy (const char uplo_src, const int copy_diag, gsl_matrix_ulong * dest, const gsl_matrix_ulong * src); unsigned long gsl_matrix_ulong_max (const gsl_matrix_ulong * m); unsigned long gsl_matrix_ulong_min (const gsl_matrix_ulong * m); diff -Nru gsl-doc-1.16/matrix/gsl_matrix_ushort.h gsl-doc-2.3/matrix/gsl_matrix_ushort.h --- gsl-doc-1.16/matrix/gsl_matrix_ushort.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/gsl_matrix_ushort.h 2016-07-07 20:36:10.000000000 +0000 @@ -216,12 +216,14 @@ int gsl_matrix_ushort_memcpy(gsl_matrix_ushort * dest, const gsl_matrix_ushort * src); int gsl_matrix_ushort_swap(gsl_matrix_ushort * m1, gsl_matrix_ushort * m2); +int gsl_matrix_ushort_tricpy(const char uplo_src, const int copy_diag, gsl_matrix_ushort * dest, const gsl_matrix_ushort * src); int gsl_matrix_ushort_swap_rows(gsl_matrix_ushort * m, const size_t i, const size_t j); int gsl_matrix_ushort_swap_columns(gsl_matrix_ushort * m, const size_t i, const size_t j); int gsl_matrix_ushort_swap_rowcol(gsl_matrix_ushort * m, const size_t i, const size_t j); int gsl_matrix_ushort_transpose (gsl_matrix_ushort * m); int gsl_matrix_ushort_transpose_memcpy (gsl_matrix_ushort * dest, const gsl_matrix_ushort * src); +int gsl_matrix_ushort_transpose_tricpy (const char uplo_src, const int copy_diag, gsl_matrix_ushort * dest, const gsl_matrix_ushort * src); unsigned short gsl_matrix_ushort_max (const gsl_matrix_ushort * m); unsigned short gsl_matrix_ushort_min (const gsl_matrix_ushort * m); diff -Nru gsl-doc-1.16/matrix/init.c gsl-doc-2.3/matrix/init.c --- gsl-doc-1.16/matrix/init.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/init.c 2015-11-03 16:21:55.000000000 +0000 @@ -1,4 +1,5 @@ #include +#include #include #include diff -Nru gsl-doc-1.16/matrix/init_source.c gsl-doc-2.3/matrix/init_source.c --- gsl-doc-1.16/matrix/init_source.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/init_source.c 2015-11-03 16:21:55.000000000 +0000 @@ -73,6 +73,7 @@ return 0; /* initialize matrix to zero */ + memset(m->data, 0, MULTIPLICITY * n1 * n2 * sizeof(ATOMIC)); for (i = 0; i < MULTIPLICITY * n1 * n2; i++) { diff -Nru gsl-doc-1.16/matrix/Makefile.am gsl-doc-2.3/matrix/Makefile.am --- gsl-doc-1.16/matrix/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -4,7 +4,7 @@ pkginclude_HEADERS = gsl_matrix.h gsl_matrix_char.h gsl_matrix_complex_double.h gsl_matrix_complex_float.h gsl_matrix_complex_long_double.h gsl_matrix_double.h gsl_matrix_float.h gsl_matrix_int.h gsl_matrix_long.h gsl_matrix_long_double.h gsl_matrix_short.h gsl_matrix_uchar.h gsl_matrix_uint.h gsl_matrix_ulong.h gsl_matrix_ushort.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/matrix/Makefile.in gsl-doc-2.3/matrix/Makefile.in --- gsl-doc-1.16/matrix/Makefile.in 2013-07-19 15:14:53.000000000 +0000 +++ gsl-doc-2.3/matrix/Makefile.in 2016-12-09 00:04:21.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -388,6 +388,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -410,7 +411,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -526,7 +530,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslmatrix.la pkginclude_HEADERS = gsl_matrix.h gsl_matrix_char.h gsl_matrix_complex_double.h gsl_matrix_complex_float.h gsl_matrix_complex_long_double.h gsl_matrix_double.h gsl_matrix_float.h gsl_matrix_int.h gsl_matrix_long.h gsl_matrix_long_double.h gsl_matrix_short.h gsl_matrix_uchar.h gsl_matrix_uint.h gsl_matrix_ulong.h gsl_matrix_ushort.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_LDADD = libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_static_LDADD = libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la diff -Nru gsl-doc-1.16/matrix/swap_source.c gsl-doc-2.3/matrix/swap_source.c --- gsl-doc-1.16/matrix/swap_source.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/swap_source.c 2016-07-07 20:36:10.000000000 +0000 @@ -208,3 +208,77 @@ return GSL_SUCCESS; } + +int +FUNCTION (gsl_matrix, transpose_tricpy) (const char uplo_src, + const int copy_diag, TYPE (gsl_matrix) * dest, + const TYPE (gsl_matrix) * src) +{ + const size_t src_size1 = src->size1; + const size_t src_size2 = src->size2; + const size_t dest_size1 = dest->size1; + const size_t dest_size2 = dest->size2; + + if (src_size1 != dest_size1 || src_size2 != dest_size2) + { + GSL_ERROR ("matrix sizes are different", GSL_EBADLEN); + } + + { + const size_t src_tda = src->tda ; + const size_t dest_tda = dest->tda ; + size_t i, j, k; + + if (uplo_src == 'L') + { + /* copy lower triangle of src to upper triangle of dest */ + for (i = 0; i < src_size1 ; i++) + { + for (j = 0; j < i; j++) + { + for (k = 0; k < MULTIPLICITY; k++) + { + size_t e1 = (j * dest_tda + i) * MULTIPLICITY + k ; + size_t e2 = (i * src_tda + j) * MULTIPLICITY + k ; + dest->data[e1] = src->data[e2]; + } + } + } + } + else if (uplo_src == 'U') + { + /* copy upper triangle of src to lower triangle of dest */ + for (i = 0; i < src_size1 ; i++) + { + for (j = i + 1; j < src_size2; j++) + { + for (k = 0; k < MULTIPLICITY; k++) + { + size_t e1 = (j * dest_tda + i) * MULTIPLICITY + k ; + size_t e2 = (i * src_tda + j) * MULTIPLICITY + k ; + dest->data[e1] = src->data[e2]; + } + } + } + } + else + { + GSL_ERROR ("invalid uplo_src parameter", GSL_EINVAL); + } + + if (copy_diag) + { + for (i = 0; i < src_size1 ; i++) + { + for (k = 0; k < MULTIPLICITY; k++) + { + size_t e1 = (i * dest_tda + i) * MULTIPLICITY + k ; + size_t e2 = (i * src_tda + i) * MULTIPLICITY + k ; + dest->data[e1] = src->data[e2]; + } + } + } + } + + return GSL_SUCCESS; +} diff -Nru gsl-doc-1.16/matrix/test.c gsl-doc-2.3/matrix/test.c --- gsl-doc-1.16/matrix/test.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/test.c 2015-11-03 16:21:55.000000000 +0000 @@ -19,6 +19,10 @@ #include +#if defined( _MSC_VER ) && defined( GSL_DLL ) +#undef inline +#define inline __forceinline +#endif #if (!GSL_RANGE_CHECK) && defined(HAVE_INLINE) #undef GSL_RANGE_CHECK #define GSL_RANGE_CHECK 1 @@ -26,6 +30,7 @@ #include #include +#include #include #include #include diff -Nru gsl-doc-1.16/matrix/test_complex_source.c gsl-doc-2.3/matrix/test_complex_source.c --- gsl-doc-1.16/matrix/test_complex_source.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/test_complex_source.c 2015-11-03 16:21:55.000000000 +0000 @@ -249,8 +249,16 @@ size_t i, j; int k = 0; + char filename[] = "test.XXXXXX"; +#if !defined( _WIN32 ) + int fd = mkstemp(filename); +#else + char * fd = _mktemp(filename); +# define fdopen fopen +#endif + { - FILE *f = fopen ("test.txt", "w"); + FILE *f = fdopen (fd, "w"); k = 0; for (i = 0; i < M; i++) { @@ -270,7 +278,7 @@ } { - FILE *f = fopen ("test.txt", "r"); + FILE *f = fopen (filename, "r"); TYPE (gsl_matrix) * mm = FUNCTION (gsl_matrix, alloc) (M, N); status = 0; @@ -293,6 +301,7 @@ FUNCTION (gsl_matrix, free) (mm); } + unlink(filename); FUNCTION (gsl_matrix, free) (m); } #endif @@ -305,8 +314,16 @@ size_t i, j; int k = 0; + char filename[] = "test.XXXXXX"; +#if !defined( _WIN32 ) + int fd = mkstemp(filename); +#else + char * fd = _mktemp(filename); +# define fdopen fopen +#endif + { - FILE *f = fopen ("test.dat", "wb"); + FILE *f = fdopen (fd, "wb"); k = 0; for (i = 0; i < M; i++) { @@ -326,7 +343,7 @@ } { - FILE *f = fopen ("test.dat", "rb"); + FILE *f = fopen (filename, "rb"); TYPE (gsl_matrix) * mm = FUNCTION (gsl_matrix, alloc) (M, N); status = 0; @@ -349,20 +366,30 @@ FUNCTION (gsl_matrix, free) (mm); } + unlink(filename); + FUNCTION (gsl_matrix, free) (m); } void FUNCTION (test, binary_noncontiguous) (const size_t M, const size_t N) { - TYPE (gsl_matrix) * l = FUNCTION (gsl_matrix, alloc) (M+1, N+1); + TYPE (gsl_matrix) * l = FUNCTION (gsl_matrix, calloc) (M+1, N+1); VIEW (gsl_matrix, view) m = FUNCTION (gsl_matrix, submatrix) (l, 0, 0, M, N); size_t i, j; int k = 0; + char filename[] = "test.XXXXXX"; +#if !defined( _WIN32 ) + int fd = mkstemp(filename); +#else + char * fd = _mktemp(filename); +# define fdopen fopen +#endif + { - FILE *f = fopen ("test.dat", "wb"); + FILE *f = fdopen (fd, "wb"); k = 0; for (i = 0; i < M; i++) { @@ -382,7 +409,7 @@ } { - FILE *f = fopen ("test.dat", "rb"); + FILE *f = fopen (filename, "rb"); TYPE (gsl_matrix) * ll = FUNCTION (gsl_matrix, alloc) (M+1, N+1); VIEW (gsl_matrix, view) mm = FUNCTION (gsl_matrix, submatrix) (ll, 0, 0, M, N); status = 0; @@ -406,6 +433,7 @@ FUNCTION (gsl_matrix, free) (ll); } + unlink(filename); FUNCTION (gsl_matrix, free) (l); } @@ -577,7 +605,7 @@ if (GSL_REAL (z) != (ATOMIC) (-5) || GSL_IMAG (z) != (ATOMIC) (-10)) status = 1; - k++; + k++; } } gsl_test (status, NAME (gsl_matrix) "_sub matrix subtraction"); diff -Nru gsl-doc-1.16/matrix/test_source.c gsl-doc-2.3/matrix/test_source.c --- gsl-doc-1.16/matrix/test_source.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/matrix/test_source.c 2015-11-03 16:21:55.000000000 +0000 @@ -418,7 +418,6 @@ FUNCTION (test, ops) (const size_t M, const size_t N) { size_t i, j; - size_t k = 0; TYPE (gsl_matrix) * a = FUNCTION (gsl_matrix, calloc) (M, N); TYPE (gsl_matrix) * b = FUNCTION (gsl_matrix, calloc) (M, N); @@ -581,7 +580,7 @@ { BASE r = FUNCTION(gsl_matrix,get) (m,i,j); BASE x = FUNCTION(gsl_matrix,get) (a,i,j); - BASE y = (i == j) ? (x + 5.0) : x; + BASE y = (i == j) ? (x + (ATOMIC) 5.0) : x; if (fabs(r - y) > 2 * GSL_FLT_EPSILON * fabs(y)) status = 1; } @@ -623,8 +622,16 @@ size_t i, j; int k = 0; + char filename[] = "test.XXXXXX"; +#if !defined( _WIN32 ) + int fd = mkstemp(filename); +#else + char * fd = _mktemp(filename); +# define fdopen fopen +#endif + { - FILE *f = fopen ("test.txt", "w"); + FILE *f = fdopen(fd, "w"); for (i = 0; i < M; i++) { @@ -640,7 +647,7 @@ } { - FILE *f = fopen ("test.txt", "r"); + FILE *f = fopen (filename, "r"); TYPE (gsl_matrix) * mm = FUNCTION (gsl_matrix, alloc) (M, N); status = 0; @@ -662,6 +669,8 @@ FUNCTION (gsl_matrix, free) (mm); } + unlink(filename); + FUNCTION (gsl_matrix, free) (m); } #endif @@ -674,8 +683,16 @@ size_t i, j; size_t k = 0; + char filename[] = "test.XXXXXX"; +#if !defined( _WIN32 ) + int fd = mkstemp(filename); +#else + char * fd = _mktemp(filename); +# define fdopen fopen +#endif + { - FILE *f = fopen ("test.dat", "wb"); + FILE *f = fdopen(fd, "wb"); k = 0; for (i = 0; i < M; i++) { @@ -691,7 +708,7 @@ } { - FILE *f = fopen ("test.dat", "rb"); + FILE *f = fopen (filename, "rb"); TYPE (gsl_matrix) * mm = FUNCTION (gsl_matrix, alloc) (M, N); status = 0; @@ -713,6 +730,8 @@ FUNCTION (gsl_matrix, free) (mm); } + unlink(filename); + FUNCTION (gsl_matrix, free) (m); } @@ -725,8 +744,16 @@ size_t i, j; size_t k = 0; + char filename[] = "test.XXXXXX"; +#if !defined( _WIN32 ) + int fd = mkstemp(filename); +#else + char * fd = _mktemp(filename); +# define fdopen fopen +#endif + { - FILE *f = fopen ("test.dat", "wb"); + FILE *f = fdopen(fd, "wb"); k = 0; for (i = 0; i < M; i++) { @@ -742,7 +769,7 @@ } { - FILE *f = fopen ("test.dat", "rb"); + FILE *f = fopen (filename, "rb"); TYPE (gsl_matrix) * ll = FUNCTION (gsl_matrix, alloc) (M+1, N+1); VIEW (gsl_matrix, view) mm = FUNCTION (gsl_matrix, submatrix) (ll, 0, 0, M, N); status = 0; @@ -765,6 +792,8 @@ FUNCTION (gsl_matrix, free) (ll); } + unlink(filename); + FUNCTION (gsl_matrix, free) (l); } diff -Nru gsl-doc-1.16/min/Makefile.am gsl-doc-2.3/min/Makefile.am --- gsl-doc-1.16/min/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/min/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -4,7 +4,7 @@ noinst_HEADERS = min.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslmin_la_SOURCES = fsolver.c golden.c brent.c convergence.c bracketing.c quad_golden.c diff -Nru gsl-doc-1.16/min/Makefile.in gsl-doc-2.3/min/Makefile.in --- gsl-doc-1.16/min/Makefile.in 2013-07-19 15:14:54.000000000 +0000 +++ gsl-doc-2.3/min/Makefile.in 2016-12-09 00:04:21.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -378,6 +378,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -400,7 +401,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -517,7 +521,7 @@ noinst_LTLIBRARIES = libgslmin.la pkginclude_HEADERS = gsl_min.h noinst_HEADERS = min.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslmin_la_SOURCES = fsolver.c golden.c brent.c convergence.c bracketing.c quad_golden.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_funcs.c test.h diff -Nru gsl-doc-1.16/monte/Makefile.am gsl-doc-2.3/monte/Makefile.am --- gsl-doc-1.16/monte/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/monte/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -4,7 +4,7 @@ pkginclude_HEADERS = gsl_monte.h gsl_monte_vegas.h gsl_monte_miser.h gsl_monte_plain.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/monte/Makefile.in gsl-doc-2.3/monte/Makefile.in --- gsl-doc-1.16/monte/Makefile.in 2013-07-19 15:14:54.000000000 +0000 +++ gsl-doc-2.3/monte/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -377,6 +377,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -399,7 +400,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -516,7 +520,7 @@ noinst_LTLIBRARIES = libgslmonte.la libgslmonte_la_SOURCES = miser.c plain.c gsl_monte_vegas.h gsl_monte_miser.h gsl_monte_plain.h gsl_monte.h vegas.c pkginclude_HEADERS = gsl_monte.h gsl_monte_vegas.h gsl_monte_miser.h gsl_monte_plain.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslmonte.la ../rng/libgslrng.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la diff -Nru gsl-doc-1.16/multifit/convergence.c gsl-doc-2.3/multifit/convergence.c --- gsl-doc-1.16/multifit/convergence.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/convergence.c 2015-11-03 16:21:55.000000000 +0000 @@ -21,6 +21,71 @@ #include #include #include +#include + +static double scaled_infnorm(const gsl_vector *x, const gsl_vector *g); + +/* +gsl_multifit_fdfsolver_test() + Convergence tests for nonlinear minimization + +(1) |dx_i| <= xtol * (1 + |x_i|) for all i +(2) || g .* x ||_inf <= gtol ||f||^2 +(3) ||f(x+dx) - f(x)|| <= ftol * max(||f(x)||, 1) + +Inputs: s - fdfsolver + xtol - tolerance for step size + gtol - tolerance for gradient vector + ftol - tolerance for residual vector + info - (output) + 1 - stopped by small x step + 2 - stopped by small gradient + 3 - stopped by small residual vector change +*/ + +int +gsl_multifit_fdfsolver_test (const gsl_multifit_fdfsolver * s, + const double xtol, const double gtol, + const double ftol, int *info) +{ + int status; + double gnorm, fnorm, phi; + + *info = 0; + + status = gsl_multifit_test_delta(s->dx, s->x, xtol*xtol, xtol); + if (status == GSL_SUCCESS) + { + *info = 1; + return GSL_SUCCESS; + } + + /* compute gradient g = J^T f */ + (s->type->gradient) (s->state, s->g); + + /* compute gnorm = max_i( g_i * max(x_i, 1) ) */ + gnorm = scaled_infnorm(s->x, s->g); + + /* compute fnorm = ||f|| */ + fnorm = gsl_blas_dnrm2(s->f); + phi = 0.5 * fnorm * fnorm; + + if (gnorm <= gtol * GSL_MAX(phi, 1.0)) + { + *info = 2; + return GSL_SUCCESS; + } + +#if 0 + if (dfnorm <= ftol * GSL_MAX(fnorm, 1.0)) + { + *info = 3; + return GSL_SUCCESS; + } +#endif + + return GSL_CONTINUE; +} /* gsl_multifit_fdfsolver_test() */ int gsl_multifit_test_delta (const gsl_vector * dx, const gsl_vector * x, @@ -87,3 +152,23 @@ return GSL_CONTINUE ; } + +static double +scaled_infnorm(const gsl_vector *x, const gsl_vector *g) +{ + const size_t n = x->size; + size_t i; + double norm = 0.0; + + for (i = 0; i < n; ++i) + { + double xi = GSL_MAX(gsl_vector_get(x, i), 1.0); + double gi = gsl_vector_get(g, i); + double tmp = fabs(xi * gi); + + if (tmp > norm) + norm = tmp; + } + + return norm; +} diff -Nru gsl-doc-1.16/multifit/covar.c gsl-doc-2.3/multifit/covar.c --- gsl-doc-1.16/multifit/covar.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/covar.c 2015-11-03 16:21:55.000000000 +0000 @@ -32,19 +32,15 @@ */ int -gsl_multifit_covar (const gsl_matrix * J, double epsrel, gsl_matrix * covar) +gsl_multifit_covar (const gsl_matrix * J, const double epsrel, gsl_matrix * covar) { - double tolr; - - size_t i, j, k; - size_t kmax = 0; - + int status; gsl_matrix * r; gsl_vector * tau; gsl_vector * norm; gsl_permutation * perm; - - size_t m = J->size1, n = J->size2 ; + const size_t m = J->size1; + const size_t n = J->size2; if (m < n) { @@ -67,10 +63,26 @@ gsl_linalg_QRPT_decomp (r, tau, perm, &signum, norm); } - + status = gsl_multifit_covar_QRPT(r, perm, epsrel, covar); + + gsl_matrix_free (r); + gsl_permutation_free (perm); + gsl_vector_free (tau); + gsl_vector_free (norm); + + return status; +} + +int +gsl_multifit_covar_QRPT (gsl_matrix * r, gsl_permutation * perm, + const double epsrel, gsl_matrix * covar) +{ /* Form the inverse of R in the full upper triangle of R */ - tolr = epsrel * fabs(gsl_matrix_get(r, 0, 0)); + double tolr = epsrel * fabs(gsl_matrix_get(r, 0, 0)); + const size_t n = r->size2; + size_t i, j, k; + size_t kmax = 0; for (k = 0 ; k < n ; k++) { @@ -183,10 +195,5 @@ } } - gsl_matrix_free (r); - gsl_permutation_free (perm); - gsl_vector_free (tau); - gsl_vector_free (norm); - return GSL_SUCCESS; -} +} /* gsl_multifit_covar_QRPT() */ diff -Nru gsl-doc-1.16/multifit/fdfridge.c gsl-doc-2.3/multifit/fdfridge.c --- gsl-doc-1.16/multifit/fdfridge.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/fdfridge.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,460 @@ +/* multifit/fdfridge.c + * + * Copyright (C) 2014 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +static int fdfridge_f(const gsl_vector * x, void * params, gsl_vector * f); +static int fdfridge_df(const gsl_vector * x, void * params, gsl_matrix * J); + +gsl_multifit_fdfridge * +gsl_multifit_fdfridge_alloc (const gsl_multifit_fdfsolver_type * T, + const size_t n, const size_t p) +{ + gsl_multifit_fdfridge * work; + + work = calloc(1, sizeof(gsl_multifit_fdfridge)); + if (work == NULL) + { + GSL_ERROR_VAL("failed to allocate workspace", + GSL_ENOMEM, 0); + } + + work->s = gsl_multifit_fdfsolver_alloc (T, n + p, p); + if (work->s == NULL) + { + gsl_multifit_fdfridge_free(work); + GSL_ERROR_VAL("failed to allocate space for fdfsolver", + GSL_ENOMEM, 0); + } + + work->wts = gsl_vector_alloc(n + p); + if (work->wts == NULL) + { + gsl_multifit_fdfridge_free(work); + GSL_ERROR_VAL("failed to allocate space for weight vector", + GSL_ENOMEM, 0); + } + + work->f = gsl_vector_alloc(n); + if (work->f == NULL) + { + gsl_multifit_fdfridge_free(work); + GSL_ERROR_VAL("failed to allocate space for f vector", + GSL_ENOMEM, 0); + } + + work->n = n; + work->p = p; + work->lambda = 0.0; + + /* initialize weights to 1 (for augmented portion of vector) */ + gsl_vector_set_all(work->wts, 1.0); + + return work; +} /* gsl_multifit_fdfridge_alloc() */ + +void +gsl_multifit_fdfridge_free(gsl_multifit_fdfridge *work) +{ + if (work->s) + gsl_multifit_fdfsolver_free(work->s); + + if (work->wts) + gsl_vector_free(work->wts); + + if (work->f) + gsl_vector_free(work->f); + + free(work); +} + +const char * +gsl_multifit_fdfridge_name(const gsl_multifit_fdfridge * w) +{ + return gsl_multifit_fdfsolver_name(w->s); +} + +gsl_vector * +gsl_multifit_fdfridge_position (const gsl_multifit_fdfridge * w) +{ + return gsl_multifit_fdfsolver_position(w->s); +} + +gsl_vector * +gsl_multifit_fdfridge_residual (const gsl_multifit_fdfridge * w) +{ + return gsl_multifit_fdfsolver_residual(w->s); +} + +size_t +gsl_multifit_fdfridge_niter (const gsl_multifit_fdfridge * w) +{ + return w->s->niter; +} + +int +gsl_multifit_fdfridge_set (gsl_multifit_fdfridge * w, + gsl_multifit_function_fdf * f, + const gsl_vector * x, + const double lambda) +{ + return gsl_multifit_fdfridge_wset(w, f, x, lambda, NULL); +} /* gsl_multifit_fdfridge_set() */ + +int +gsl_multifit_fdfridge_wset (gsl_multifit_fdfridge * w, + gsl_multifit_function_fdf * f, + const gsl_vector * x, + const double lambda, + const gsl_vector * wts) +{ + const size_t n = w->n; + const size_t p = w->p; + + if (n != f->n || p != f->p) + { + GSL_ERROR ("function size does not match solver", GSL_EBADLEN); + } + else if (p != x->size) + { + GSL_ERROR ("vector length does not match solver", GSL_EBADLEN); + } + else if (wts != NULL && n != wts->size) + { + GSL_ERROR ("weight vector length does not match solver", GSL_EBADLEN); + } + else + { + int status; + gsl_vector_view wv = gsl_vector_subvector(w->wts, 0, n); + + /* save user defined fdf */ + w->fdf = f; + + /* build modified fdf for Tikhonov terms */ + w->fdftik.f = &fdfridge_f; + w->fdftik.df = &fdfridge_df; + w->fdftik.n = n + p; /* add p for Tikhonov terms */ + w->fdftik.p = p; + w->fdftik.params = (void *) w; + + /* store damping parameter */ + w->lambda = lambda; + w->L = NULL; + + if (wts) + { + /* copy weight vector into user portion of w->wts */ + gsl_vector_memcpy(&wv.vector, wts); + status = gsl_multifit_fdfsolver_wset(w->s, &(w->fdftik), x, w->wts); + } + else + { + status = gsl_multifit_fdfsolver_wset(w->s, &(w->fdftik), x, NULL); + } + + /* update function/Jacobian evaluations */ + f->nevalf = w->fdftik.nevalf; + f->nevaldf = w->fdftik.nevaldf; + + return status; + } +} /* gsl_multifit_fdfridge_wset() */ + +int +gsl_multifit_fdfridge_set2 (gsl_multifit_fdfridge * w, + gsl_multifit_function_fdf * f, + const gsl_vector * x, + const gsl_vector * lambda) +{ + return gsl_multifit_fdfridge_wset2(w, f, x, lambda, NULL); +} /* gsl_multifit_fdfridge_set2() */ + +int +gsl_multifit_fdfridge_wset2 (gsl_multifit_fdfridge * w, + gsl_multifit_function_fdf * f, + const gsl_vector * x, + const gsl_vector * lambda, + const gsl_vector * wts) +{ + const size_t n = w->n; + const size_t p = w->p; + + if (n != f->n || p != f->p) + { + GSL_ERROR ("function size does not match solver", GSL_EBADLEN); + } + else if (p != x->size) + { + GSL_ERROR ("vector length does not match solver", GSL_EBADLEN); + } + else if (lambda->size != p) + { + GSL_ERROR ("lambda vector size does not match solver", GSL_EBADLEN); + } + else if (wts != NULL && n != wts->size) + { + GSL_ERROR ("weight vector length does not match solver", GSL_EBADLEN); + } + else + { + int status; + gsl_vector_view wv = gsl_vector_subvector(w->wts, 0, n); + + /* save user defined fdf */ + w->fdf = f; + w->fdf->nevalf = 0; + w->fdf->nevaldf = 0; + + /* build modified fdf for Tikhonov terms */ + w->fdftik.f = &fdfridge_f; + w->fdftik.df = &fdfridge_df; + w->fdftik.n = n + p; /* add p for Tikhonov terms */ + w->fdftik.p = p; + w->fdftik.params = (void *) w; + + /* store damping matrix */ + w->lambda = 0.0; + w->L_diag = lambda; + w->L = NULL; + + if (wts) + { + /* copy weight vector into user portion */ + gsl_vector_memcpy(&wv.vector, wts); + status = gsl_multifit_fdfsolver_wset(w->s, &(w->fdftik), x, w->wts); + } + else + { + status = gsl_multifit_fdfsolver_wset(w->s, &(w->fdftik), x, NULL); + } + + /* update function/Jacobian evaluations */ + f->nevalf = w->fdftik.nevalf; + f->nevaldf = w->fdftik.nevaldf; + + return status; + } +} /* gsl_multifit_fdfridge_wset2() */ + +int +gsl_multifit_fdfridge_set3 (gsl_multifit_fdfridge * w, + gsl_multifit_function_fdf * f, + const gsl_vector * x, + const gsl_matrix * L) +{ + return gsl_multifit_fdfridge_wset3(w, f, x, L, NULL); +} /* gsl_multifit_fdfridge_set3() */ + +int +gsl_multifit_fdfridge_wset3 (gsl_multifit_fdfridge * w, + gsl_multifit_function_fdf * f, + const gsl_vector * x, + const gsl_matrix * L, + const gsl_vector * wts) +{ + const size_t n = w->n; + const size_t p = w->p; + + if (n != f->n || p != f->p) + { + GSL_ERROR ("function size does not match solver", GSL_EBADLEN); + } + else if (p != x->size) + { + GSL_ERROR ("vector length does not match solver", GSL_EBADLEN); + } + else if (L->size2 != p) + { + GSL_ERROR ("L matrix size2 does not match solver", GSL_EBADLEN); + } + else if (wts != NULL && n != wts->size) + { + GSL_ERROR ("weight vector length does not match solver", GSL_EBADLEN); + } + else + { + int status; + gsl_vector_view wv = gsl_vector_subvector(w->wts, 0, n); + + /* save user defined fdf */ + w->fdf = f; + w->fdf->nevalf = 0; + w->fdf->nevaldf = 0; + + /* build modified fdf for Tikhonov terms */ + w->fdftik.f = &fdfridge_f; + w->fdftik.df = &fdfridge_df; + w->fdftik.n = n + p; /* add p for Tikhonov terms */ + w->fdftik.p = p; + w->fdftik.params = (void *) w; + + /* store damping matrix */ + w->lambda = 0.0; + w->L_diag = NULL; + w->L = L; + + if (wts) + { + /* copy weight vector into user portion */ + gsl_vector_memcpy(&wv.vector, wts); + status = gsl_multifit_fdfsolver_wset(w->s, &(w->fdftik), x, w->wts); + } + else + { + status = gsl_multifit_fdfsolver_wset(w->s, &(w->fdftik), x, NULL); + } + + /* update function/Jacobian evaluations */ + f->nevalf = w->fdftik.nevalf; + f->nevaldf = w->fdftik.nevaldf; + + return status; + } +} /* gsl_multifit_fdfridge_wset3() */ + +int +gsl_multifit_fdfridge_iterate (gsl_multifit_fdfridge * w) +{ + int status = gsl_multifit_fdfsolver_iterate(w->s); + + /* update function/Jacobian evaluations */ + w->fdf->nevalf = w->fdftik.nevalf; + w->fdf->nevaldf = w->fdftik.nevaldf; + + return status; +} + +int +gsl_multifit_fdfridge_driver (gsl_multifit_fdfridge * w, + const size_t maxiter, + const double xtol, + const double gtol, + const double ftol, + int *info) +{ + int status = gsl_multifit_fdfsolver_driver(w->s, maxiter, xtol, + gtol, ftol, info); + return status; +} /* gsl_multifit_fdfridge_driver() */ + +/* +fdfridge_f() + Callback function to provide residuals, including extra p +Tikhonov terms. The residual vector will have the form: + +f~ = [ f ] + [ \lambda x ] + +where f is the user supplied residuals, x are the model +parameters, and \lambda is the Tikhonov damping parameter + +Inputs: x - model parameters (size p) + params - pointer to fdfridge workspace + f - (output) (n+p) vector to store f~ +*/ + +static int +fdfridge_f(const gsl_vector * x, void * params, gsl_vector * f) +{ + int status; + gsl_multifit_fdfridge *w = (gsl_multifit_fdfridge *) params; + const size_t n = w->n; + const size_t p = w->p; + gsl_vector_view f_user = gsl_vector_subvector(f, 0, n); + gsl_vector_view f_tik = gsl_vector_subvector(f, n, p); + + /* call user callback function to get residual vector f */ + status = gsl_multifit_eval_wf(w->fdf, x, NULL, &f_user.vector); + if (status) + return status; + + if (w->L_diag) + { + /* store diag(L_diag) x in Tikhonov portion of f~ */ + gsl_vector_memcpy(&f_tik.vector, x); + gsl_vector_mul(&f_tik.vector, w->L_diag); + } + else if (w->L) + { + /* store Lx in Tikhonov portion of f~ */ + gsl_blas_dgemv(CblasNoTrans, 1.0, w->L, x, 0.0, &f_tik.vector); + } + else + { + /* store \lambda x in Tikhonov portion of f~ */ + gsl_vector_memcpy(&f_tik.vector, x); + gsl_vector_scale(&f_tik.vector, w->lambda); + } + + return GSL_SUCCESS; +} /* fdfridge_f() */ + +static int +fdfridge_df(const gsl_vector * x, void * params, gsl_matrix * J) +{ + int status; + gsl_multifit_fdfridge *w = (gsl_multifit_fdfridge *) params; + const size_t n = w->n; + const size_t p = w->p; + gsl_matrix_view J_user = gsl_matrix_submatrix(J, 0, 0, n, p); + gsl_matrix_view J_tik = gsl_matrix_submatrix(J, n, 0, p, p); + gsl_vector_view diag = gsl_matrix_diagonal(&J_tik.matrix); + + /* compute Jacobian */ + if (w->fdf->df) + status = gsl_multifit_eval_wdf(w->fdf, x, NULL, &J_user.matrix); + else + { + /* compute f(x) and then finite difference Jacobian */ + status = gsl_multifit_eval_wf(w->fdf, x, NULL, w->f); + status += gsl_multifit_fdfsolver_dif_df(x, NULL, w->fdf, w->f, + &J_user.matrix); + } + + if (status) + return status; + + if (w->L_diag) + { + /* store diag(L_diag) in Tikhonov portion of J */ + gsl_matrix_set_zero(&J_tik.matrix); + gsl_vector_memcpy(&diag.vector, w->L_diag); + } + else if (w->L) + { + /* store L in Tikhonov portion of J */ + gsl_matrix_memcpy(&J_tik.matrix, w->L); + } + else + { + /* store \lambda I_p in Tikhonov portion of J */ + gsl_matrix_set_zero(&J_tik.matrix); + gsl_vector_set_all(&diag.vector, w->lambda); + } + + return GSL_SUCCESS; +} /* fdfridge_df() */ diff -Nru gsl-doc-1.16/multifit/fdfsolver.c gsl-doc-2.3/multifit/fdfsolver.c --- gsl-doc-1.16/multifit/fdfsolver.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/fdfsolver.c 2015-11-03 16:21:55.000000000 +0000 @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -36,8 +37,7 @@ GSL_ERROR_VAL ("insufficient data points, n < p", GSL_EINVAL, 0); } - s = (gsl_multifit_fdfsolver *) malloc (sizeof (gsl_multifit_fdfsolver)); - + s = (gsl_multifit_fdfsolver *) calloc (1, sizeof (gsl_multifit_fdfsolver)); if (s == 0) { GSL_ERROR_VAL ("failed to allocate space for multifit solver struct", @@ -48,7 +48,7 @@ if (s->x == 0) { - free (s); + gsl_multifit_fdfsolver_free (s); GSL_ERROR_VAL ("failed to allocate space for x", GSL_ENOMEM, 0); } @@ -56,44 +56,41 @@ if (s->f == 0) { - gsl_vector_free (s->x); - free (s); + gsl_multifit_fdfsolver_free (s); GSL_ERROR_VAL ("failed to allocate space for f", GSL_ENOMEM, 0); } - s->J = gsl_matrix_calloc (n,p); + s->dx = gsl_vector_calloc (p); + + if (s->dx == 0) + { + gsl_multifit_fdfsolver_free (s); + GSL_ERROR_VAL ("failed to allocate space for dx", GSL_ENOMEM, 0); + } + + s->g = gsl_vector_alloc (p); - if (s->J == 0) + if (s->g == 0) { - gsl_vector_free (s->x); - gsl_vector_free (s->f); - free (s); + gsl_multifit_fdfsolver_free (s); GSL_ERROR_VAL ("failed to allocate space for g", GSL_ENOMEM, 0); } - s->dx = gsl_vector_calloc (p); + s->sqrt_wts = gsl_vector_calloc (n); - if (s->dx == 0) + if (s->sqrt_wts == 0) { - gsl_matrix_free (s->J); - gsl_vector_free (s->x); - gsl_vector_free (s->f); - free (s); - GSL_ERROR_VAL ("failed to allocate space for dx", GSL_ENOMEM, 0); + gsl_multifit_fdfsolver_free (s); + GSL_ERROR_VAL ("failed to allocate space for sqrt_wts", GSL_ENOMEM, 0); } - s->state = malloc (T->size); + s->state = calloc (1, T->size); if (s->state == 0) { - gsl_vector_free (s->dx); - gsl_vector_free (s->x); - gsl_vector_free (s->f); - gsl_matrix_free (s->J); - free (s); /* exception in constructor, avoid memory leak */ - + gsl_multifit_fdfsolver_free (s); GSL_ERROR_VAL ("failed to allocate space for multifit solver state", - GSL_ENOMEM, 0); + GSL_ENOMEM, 0); } s->type = T ; @@ -102,17 +99,13 @@ if (status != GSL_SUCCESS) { - free (s->state); - gsl_vector_free (s->dx); - gsl_vector_free (s->x); - gsl_vector_free (s->f); - gsl_matrix_free (s->J); - free (s); /* exception in constructor, avoid memory leak */ - + gsl_multifit_fdfsolver_free (s); GSL_ERROR_VAL ("failed to set solver", status, 0); } s->fdf = NULL; + + s->niter = 0; return s; } @@ -122,61 +115,173 @@ gsl_multifit_function_fdf * f, const gsl_vector * x) { - if (s->f->size != f->n) + return gsl_multifit_fdfsolver_wset(s, f, x, NULL); +} + +int +gsl_multifit_fdfsolver_wset (gsl_multifit_fdfsolver * s, + gsl_multifit_function_fdf * f, + const gsl_vector * x, + const gsl_vector * wts) +{ + const size_t n = s->f->size; + + if (n != f->n) { GSL_ERROR ("function size does not match solver", GSL_EBADLEN); } - - if (s->x->size != x->size) + else if (s->x->size != x->size) { GSL_ERROR ("vector length does not match solver", GSL_EBADLEN); - } + } + else if (wts != NULL && n != wts->size) + { + GSL_ERROR ("weight vector length does not match solver", GSL_EBADLEN); + } + else + { + size_t i; - s->fdf = f; - gsl_vector_memcpy(s->x,x); + s->fdf = f; + gsl_vector_memcpy(s->x, x); + s->niter = 0; + + if (wts) + { + for (i = 0; i < n; ++i) + { + double wi = gsl_vector_get(wts, i); + gsl_vector_set(s->sqrt_wts, i, sqrt(wi)); + } + } + else + gsl_vector_set_all(s->sqrt_wts, 1.0); - return (s->type->set) (s->state, s->fdf, s->x, s->f, s->J, s->dx); + return (s->type->set) (s->state, s->sqrt_wts, s->fdf, s->x, s->f, s->dx); + } } int gsl_multifit_fdfsolver_iterate (gsl_multifit_fdfsolver * s) { - return (s->type->iterate) (s->state, s->fdf, s->x, s->f, s->J, s->dx); + int status = + (s->type->iterate) (s->state, s->sqrt_wts, s->fdf, s->x, s->f, s->dx); + + s->niter++; + + return status; } +/* +gsl_multifit_fdfsolver_driver() + Iterate the nonlinear least squares solver until completion + +Inputs: s - fdfsolver + maxiter - maximum iterations to allow + xtol - tolerance in step x + gtol - tolerance in gradient + ftol - tolerance in ||f|| + info - (output) info flag on why iteration terminated + 1 = stopped due to small step size ||dx| + 2 = stopped due to small gradient + 3 = stopped due to small change in f + GSL_ETOLX = ||dx|| has converged to within machine + precision (and xtol is too small) + GSL_ETOLG = ||g||_inf is smaller than machine + precision (gtol is too small) + GSL_ETOLF = change in ||f|| is smaller than machine + precision (ftol is too small) + +Return: GSL_SUCCESS if converged, GSL_MAXITER if maxiter exceeded without +converging +*/ int gsl_multifit_fdfsolver_driver (gsl_multifit_fdfsolver * s, const size_t maxiter, - const double epsabs, - const double epsrel) + const double xtol, + const double gtol, + const double ftol, + int *info) { int status; size_t iter = 0; - do - { + do + { status = gsl_multifit_fdfsolver_iterate (s); - if (status) + + /* + * if status is GSL_ENOPROG or GSL_SUCCESS, continue iterating, + * otherwise the method has converged with a GSL_ETOLx flag + */ + if (status != GSL_SUCCESS && status != GSL_ENOPROG) break; /* test for convergence */ - status = gsl_multifit_test_delta (s->dx, s->x, epsabs, epsrel); - } + status = gsl_multifit_fdfsolver_test(s, xtol, gtol, ftol, info); + } while (status == GSL_CONTINUE && ++iter < maxiter); + /* + * the following error codes mean that the solution has converged + * to within machine precision, so record the error code in info + * and return success + */ + if (status == GSL_ETOLF || status == GSL_ETOLX || status == GSL_ETOLG) + { + *info = status; + status = GSL_SUCCESS; + } + + /* check if max iterations reached */ + if (iter >= maxiter && status != GSL_SUCCESS) + status = GSL_EMAXITER; + return status; } /* gsl_multifit_fdfsolver_driver() */ +int +gsl_multifit_fdfsolver_jac (gsl_multifit_fdfsolver * s, gsl_matrix * J) +{ + const size_t n = s->f->size; + const size_t p = s->x->size; + + if (n != J->size1 || p != J->size2) + { + GSL_ERROR ("Jacobian dimensions do not match solver", GSL_EBADLEN); + } + else + { + return (s->type->jac) (s->state, J); + } +} /* gsl_multifit_fdfsolver_jac() */ + void gsl_multifit_fdfsolver_free (gsl_multifit_fdfsolver * s) { RETURN_IF_NULL (s); - (s->type->free) (s->state); - free (s->state); - gsl_vector_free (s->dx); - gsl_vector_free (s->x); - gsl_vector_free (s->f); - gsl_matrix_free (s->J); + + if (s->state) + { + (s->type->free) (s->state); + free (s->state); + } + + if (s->dx) + gsl_vector_free (s->dx); + + if (s->x) + gsl_vector_free (s->x); + + if (s->f) + gsl_vector_free (s->f); + + if (s->sqrt_wts) + gsl_vector_free (s->sqrt_wts); + + if (s->g) + gsl_vector_free (s->g); + free (s); } @@ -192,3 +297,84 @@ return s->x; } +gsl_vector * +gsl_multifit_fdfsolver_residual (const gsl_multifit_fdfsolver * s) +{ + return s->f; +} + +size_t +gsl_multifit_fdfsolver_niter (const gsl_multifit_fdfsolver * s) +{ + return s->niter; +} + +/* +gsl_multifit_eval_wf() + Compute residual vector y with user callback function, and apply +weighting transform if given: + +y~ = sqrt(W) y + +Inputs: fdf - callback function + x - model parameters + swts - weight matrix sqrt(W) = sqrt(diag(w1,w2,...,wn)) + set to NULL for unweighted fit + y - (output) (weighted) residual vector + y_i = sqrt(w_i) f_i where f_i is unweighted residual +*/ + +int +gsl_multifit_eval_wf(gsl_multifit_function_fdf *fdf, const gsl_vector *x, + const gsl_vector *swts, gsl_vector *y) +{ + int s = ((*((fdf)->f)) (x, fdf->params, y)); + ++(fdf->nevalf); + + /* y <- sqrt(W) y */ + if (swts) + gsl_vector_mul(y, swts); + + return s; +} + +/* +gsl_multifit_eval_wdf() + Compute Jacobian matrix J with user callback function, and apply +weighting transform if given: + +J~ = sqrt(W) J + +Inputs: fdf - callback function + x - model parameters + swts - weight matrix W = diag(w1,w2,...,wn) + set to NULL for unweighted fit + dy - (output) (weighted) Jacobian matrix + dy = sqrt(W) dy where dy is unweighted Jacobian +*/ + +int +gsl_multifit_eval_wdf(gsl_multifit_function_fdf *fdf, const gsl_vector *x, + const gsl_vector *swts, gsl_matrix *dy) +{ + int status = ((*((fdf)->df)) (x, fdf->params, dy)); + + ++(fdf->nevaldf); + + /* J <- sqrt(W) J */ + if (swts) + { + const size_t n = swts->size; + size_t i; + + for (i = 0; i < n; ++i) + { + double swi = gsl_vector_get(swts, i); + gsl_vector_view v = gsl_matrix_row(dy, i); + + gsl_vector_scale(&v.vector, swi); + } + } + + return status; +} diff -Nru gsl-doc-1.16/multifit/fdjac.c gsl-doc-2.3/multifit/fdjac.c --- gsl-doc-1.16/multifit/fdjac.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/fdjac.c 2015-11-10 16:31:43.000000000 +0000 @@ -27,7 +27,8 @@ #include #include -static int fdjac(const gsl_vector *x, gsl_multifit_function_fdf *fdf, +static int fdjac(const gsl_vector *x, const gsl_vector *wts, + gsl_multifit_function_fdf *fdf, const gsl_vector *f, gsl_matrix *J); /* @@ -35,6 +36,7 @@ Compute approximate Jacobian using forward differences Inputs: x - parameter vector + wts - data weights fdf - fdf struct f - (input) vector of function values f_i(x) J - (output) Jacobian matrix @@ -43,8 +45,8 @@ */ static int -fdjac(const gsl_vector *x, gsl_multifit_function_fdf *fdf, - const gsl_vector *f, gsl_matrix *J) +fdjac(const gsl_vector *x, const gsl_vector *wts, + gsl_multifit_function_fdf *fdf, const gsl_vector *f, gsl_matrix *J) { int status = 0; size_t i, j; @@ -66,7 +68,7 @@ /* perturb x_j to compute forward difference */ gsl_vector_set((gsl_vector *) x, j, xj + h); - status += GSL_MULTIFIT_FN_EVAL_F (fdf, x, &v.vector); + status += gsl_multifit_eval_wf (fdf, x, wts, &v.vector); if (status) return status; @@ -91,6 +93,7 @@ Compute approximate Jacobian using finite differences Inputs: x - parameter vector + wts - data weights (set to NULL if not needed) fdf - fdf f - (input) function values f_i(x) J - (output) approximate Jacobian matrix @@ -99,12 +102,15 @@ */ int -gsl_multifit_fdfsolver_dif_df(const gsl_vector *x, gsl_multifit_function_fdf *fdf, +gsl_multifit_fdfsolver_dif_df(const gsl_vector *x, const gsl_vector *wts, + gsl_multifit_function_fdf *fdf, const gsl_vector *f, gsl_matrix *J) { - return fdjac(x, fdf, f, J); + return fdjac(x, wts, fdf, f, J); } /* gsl_multifit_fdfsolver_dif_df() */ +#ifndef GSL_DISABLE_DEPRECATED + /* gsl_multifit_fdfsolver_dif_fdf() Compute function values (analytic) and approximate Jacobian using finite @@ -119,18 +125,21 @@ */ int -gsl_multifit_fdfsolver_dif_fdf(const gsl_vector *x, gsl_multifit_function_fdf *fdf, +gsl_multifit_fdfsolver_dif_fdf(const gsl_vector *x, + gsl_multifit_function_fdf *fdf, gsl_vector *f, gsl_matrix *J) { int status = 0; - status = GSL_MULTIFIT_FN_EVAL_F(fdf, x, f); + status = gsl_multifit_eval_wf(fdf, x, NULL, f); if (status) return status; - status = fdjac(x, fdf, f, J); + status = fdjac(x, NULL, fdf, f, J); if (status) return status; return status; } /* gsl_multifit_fdfsolver_dif_fdf() */ + +#endif /* !GSL_DISABLE_DEPRECATED */ diff -Nru gsl-doc-1.16/multifit/gcv.c gsl-doc-2.3/multifit/gcv.c --- gsl-doc-1.16/multifit/gcv.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/gcv.c 2016-11-21 17:55:13.000000000 +0000 @@ -0,0 +1,397 @@ +/* multifit/gcv.c + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* + * References: + * + * [1] P. C. Hansen, "Discrete Inverse Problems: Insight and Algorithms," + * SIAM Press, 2010. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +typedef struct +{ + const gsl_vector * S; + const gsl_vector * UTy; + double delta0; + size_t np; + gsl_vector * workp; +} gcv_params; + +static double gcv_func(double lambda, void * params); + +/* +gsl_multifit_linear_gcv_init() + Initialize Generalized Cross Validation parameters + +Inputs: y - right hand side vector + reg_param - (output) regularization parameters + UTy - (output) U^T y + delta0 - (output) delta0 + work - workspace +*/ + +int +gsl_multifit_linear_gcv_init(const gsl_vector * y, + gsl_vector * reg_param, + gsl_vector * UTy, + double * delta0, + gsl_multifit_linear_workspace * work) +{ + const size_t n = y->size; + + if (n != work->n) + { + GSL_ERROR("y vector does not match workspace", GSL_EBADLEN); + } + else if (UTy->size != work->p) + { + GSL_ERROR ("UTy vector does not match workspace", GSL_EBADLEN); + } + else + { + const size_t p = work->p; + + gsl_matrix_view U = gsl_matrix_submatrix(work->A, 0, 0, n, p); + gsl_vector_view S = gsl_vector_subvector(work->S, 0, p); + + const double smax = gsl_vector_get(&S.vector, 0); + const double smin = gsl_vector_get(&S.vector, p - 1); + + double dr; /* residual error from projection */ + + double normy = gsl_blas_dnrm2(y); + double normUTy; + + /* compute projection UTy = U^T y */ + gsl_blas_dgemv (CblasTrans, 1.0, &U.matrix, y, 0.0, UTy); + normUTy = gsl_blas_dnrm2(UTy); + + /* dr = ||y||^2 - ||U^T y||^2 */ + dr = (normy + normUTy) * (normy - normUTy); + + /* calculate regularization parameters */ + gsl_multifit_linear_lreg(smin, smax, reg_param); + + if (n > p && dr > 0.0) + *delta0 = dr; + else + *delta0 = 0.0; + + return GSL_SUCCESS; + } +} + +/* +gsl_multifit_linear_gcv_curve() + Calculate Generalized Cross Validation curve for a set +of regularization parameters + +Inputs: reg_param - regularization parameters + UTy - U^T y vector, size p + delta0 - delta0 + G - (output) GCV curve values + work - workspace +*/ + +int +gsl_multifit_linear_gcv_curve(const gsl_vector * reg_param, + const gsl_vector * UTy, + const double delta0, + gsl_vector * G, + gsl_multifit_linear_workspace * work) +{ + const size_t n = work->n; + const size_t p = work->p; + const size_t N = reg_param->size; /* number of points on GCV curve */ + + if (UTy->size != p) + { + GSL_ERROR("UTy vector does not match workspace", GSL_EBADLEN); + } + else if (G->size != N) + { + GSL_ERROR ("size of reg_param and G vectors do not match", + GSL_EBADLEN); + } + else + { + size_t i; + + gsl_vector_view S = gsl_vector_subvector(work->S, 0, p); + gsl_vector_view workp = gsl_matrix_subcolumn(work->QSI, 0, 0, p); + + gcv_params params; + + params.S = &S.vector; + params.UTy = UTy; + params.delta0 = delta0; + params.np = n - p; + params.workp = &workp.vector; + + for (i = 0; i < N; ++i) + { + double lambdai = gsl_vector_get(reg_param, i); + double Gi = gcv_func(lambdai, ¶ms); + + gsl_vector_set(G, i, Gi); + } + + return GSL_SUCCESS; + } +} + +/* +gsl_multifit_linear_gcv_min() + Find regularization parameter which minimizes GCV curve + +Inputs: reg_param - regularization parameters + UTy - U^T y vector, size p + G - GCV curve values + delta0 - delta0 + lambda - (output) optimal regularization parameter + work - workspace +*/ + +int +gsl_multifit_linear_gcv_min(const gsl_vector * reg_param, + const gsl_vector * UTy, + const gsl_vector * G, + const double delta0, + double * lambda, + gsl_multifit_linear_workspace * work) +{ + const size_t n = work->n; + const size_t p = work->p; + const size_t npts = reg_param->size; /* number of points on GCV curve */ + + if (UTy->size != p) + { + GSL_ERROR("UTy vector does not match workspace", GSL_EBADLEN); + } + else if (G->size != npts) + { + GSL_ERROR ("size of reg_param and G vectors do not match", + GSL_EBADLEN); + } + else + { + int status; + const size_t max_iter = 500; + const double tol = 1.0e-4; + gsl_vector_view S = gsl_vector_subvector(work->S, 0, p); + gsl_vector_view workp = gsl_matrix_subcolumn(work->QSI, 0, 0, p); + gcv_params params; + int idxG = (int) gsl_vector_min_index(G); + double a = gsl_vector_get(reg_param, GSL_MIN(idxG + 1, (int) npts - 1)); + double b = gsl_vector_get(reg_param, GSL_MAX(idxG - 1, 0)); + double m = gsl_vector_get(reg_param, idxG); + size_t iter = 0; + gsl_function F; + + /* XXX FIXME */ + gsl_min_fminimizer *min_workspace_p; + + if (idxG == 0 || idxG == ((int)npts - 1)) + { + /* the minimum is an endpoint of the curve, no need to search */ + *lambda = m; + return GSL_SUCCESS; + } + + /* XXX FIXME */ + min_workspace_p = gsl_min_fminimizer_alloc(gsl_min_fminimizer_brent); + + params.S = &S.vector; + params.UTy = UTy; + params.delta0 = delta0; + params.np = n - p; + params.workp = &workp.vector; + + F.function = gcv_func; + F.params = ¶ms; + + gsl_min_fminimizer_set(min_workspace_p, &F, m, a, b); + + do + { + iter++; + status = gsl_min_fminimizer_iterate(min_workspace_p); + + a = gsl_min_fminimizer_x_lower(min_workspace_p); + b = gsl_min_fminimizer_x_upper(min_workspace_p); + + status = gsl_min_test_interval(a, b, 0.0, tol); + } + while (status == GSL_CONTINUE && iter < max_iter); + + if (status == GSL_SUCCESS) + *lambda = gsl_min_fminimizer_minimum(min_workspace_p); + else + status = GSL_EMAXITER; + + gsl_min_fminimizer_free(min_workspace_p); + + return status; + } +} + +/* +gsl_multifit_linear_gcv_calc() + Calculate GCV function G(lambda) for given lambda + +Inputs: reg_param - regularization parameters + UTy - U^T y vector, size p + delta0 - delta0 + G - (output) GCV curve values + work - workspace +*/ + +double +gsl_multifit_linear_gcv_calc(const double lambda, + const gsl_vector * UTy, + const double delta0, + gsl_multifit_linear_workspace * work) +{ + const size_t n = work->n; + const size_t p = work->p; + + if (UTy->size != p) + { + GSL_ERROR_VAL("UTy vector does not match workspace", GSL_EBADLEN, 0.0); + } + else + { + gsl_vector_view S = gsl_vector_subvector(work->S, 0, p); + gsl_vector_view workp = gsl_matrix_subcolumn(work->QSI, 0, 0, p); + gcv_params params; + double G; + + params.S = &S.vector; + params.UTy = UTy; + params.delta0 = delta0; + params.np = n - p; + params.workp = &workp.vector; + + G = gcv_func(lambda, ¶ms); + + return G; + } +} + +/* +gsl_multifit_linear_gcv() + Calculate Generalized Cross Validation curve for a set +of regularization parameters + +Inputs: y - right hand side vector + reg_param - (output) regularization parameters + G - (output) GCV curve values + lambda - (output) optimal regularization parameter which + minimizes GCV curve + G_lambda - (output) G(lambda) value at optimal parameter + work - workspace +*/ + +int +gsl_multifit_linear_gcv(const gsl_vector * y, + gsl_vector * reg_param, + gsl_vector * G, + double * lambda, + double * G_lambda, + gsl_multifit_linear_workspace * work) +{ + const size_t n = y->size; + const size_t N = G->size; /* number of points on GCV curve */ + + if (n != work->n) + { + GSL_ERROR("y vector does not match workspace", GSL_EBADLEN); + } + else if (reg_param->size != N) + { + GSL_ERROR ("size of reg_param and G vectors do not match", + GSL_EBADLEN); + } + else + { + int status; + const size_t p = work->p; + gsl_vector_view UTy = gsl_vector_subvector(work->xt, 0, p); + double delta0; + + status = gsl_multifit_linear_gcv_init(y, reg_param, &UTy.vector, &delta0, work); + if (status) + return status; + + status = gsl_multifit_linear_gcv_curve(reg_param, &UTy.vector, delta0, G, work); + if (status) + return status; + + status = gsl_multifit_linear_gcv_min(reg_param, &UTy.vector, G, delta0, lambda, work); + if (status) + return status; + + *G_lambda = gsl_multifit_linear_gcv_calc(*lambda, &UTy.vector, delta0, work); + + return GSL_SUCCESS; + } +} + +static double +gcv_func(double lambda, void * params) +{ + gcv_params * par = (gcv_params *) params; + const gsl_vector *S = par->S; + const gsl_vector *UTy = par->UTy; + double delta0 = par->delta0; + size_t np = par->np; + gsl_vector *workp = par->workp; + const size_t p = S->size; + size_t i; + double lambda_sq = lambda * lambda; + double G, d, norm; + double sumf = 0.0; + + /* compute workp = 1 - filter_factors */ + for (i = 0; i < p; ++i) + { + double si = gsl_vector_get(S, i); + double fi = lambda_sq / (si * si + lambda_sq); + gsl_vector_set(workp, i, fi); + sumf += fi; + } + + d = (double)np + sumf; + + gsl_vector_mul(workp, UTy); + norm = gsl_blas_dnrm2(workp); + + G = (norm*norm + delta0) / (d * d); + + return G; +} diff -Nru gsl-doc-1.16/multifit/gradient.c gsl-doc-2.3/multifit/gradient.c --- gsl-doc-1.16/multifit/gradient.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/gradient.c 2015-11-03 16:21:55.000000000 +0000 @@ -1,4 +1,4 @@ -/* multifit/covar.c +/* multifit/gradient.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * diff -Nru gsl-doc-1.16/multifit/gsl_multifit.h gsl-doc-2.3/multifit/gsl_multifit.h --- gsl-doc-1.16/multifit/gsl_multifit.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/gsl_multifit.h 2016-11-21 17:55:48.000000000 +0000 @@ -41,23 +41,26 @@ typedef struct { - size_t n; /* number of observations */ - size_t p; /* number of parameters */ - gsl_matrix * A; + size_t nmax; /* maximum number of observations */ + size_t pmax; /* maximum number of parameters */ + size_t n; /* number of observations in current SVD decomposition */ + size_t p; /* number of parameters in current SVD decomposition */ + gsl_matrix * A; /* least squares matrix for SVD, n-by-p */ gsl_matrix * Q; gsl_matrix * QSI; gsl_vector * S; gsl_vector * t; gsl_vector * xt; gsl_vector * D; + double rcond; /* reciprocal condition number */ } gsl_multifit_linear_workspace; gsl_multifit_linear_workspace * -gsl_multifit_linear_alloc (size_t n, size_t p); +gsl_multifit_linear_alloc (const size_t n, const size_t p); void -gsl_multifit_linear_free (gsl_multifit_linear_workspace * work); +gsl_multifit_linear_free (gsl_multifit_linear_workspace * w); int gsl_multifit_linear (const gsl_matrix * X, @@ -68,25 +71,138 @@ gsl_multifit_linear_workspace * work); int +gsl_multifit_linear_tsvd (const gsl_matrix * X, + const gsl_vector * y, + const double tol, + gsl_vector * c, + gsl_matrix * cov, + double * chisq, + size_t * rank, + gsl_multifit_linear_workspace * work); + +int gsl_multifit_linear_svd (const gsl_matrix * X, - const gsl_vector * y, - double tol, - size_t * rank, - gsl_vector * c, - gsl_matrix * cov, - double *chisq, gsl_multifit_linear_workspace * work); int -gsl_multifit_linear_usvd (const gsl_matrix * X, - const gsl_vector * y, - double tol, - size_t * rank, - gsl_vector * c, - gsl_matrix * cov, - double *chisq, +gsl_multifit_linear_bsvd (const gsl_matrix * X, gsl_multifit_linear_workspace * work); +size_t +gsl_multifit_linear_rank(const double tol, const gsl_multifit_linear_workspace * work); + +int +gsl_multifit_linear_solve (const double lambda, + const gsl_matrix * X, + const gsl_vector * y, + gsl_vector * c, + double *rnorm, + double *snorm, + gsl_multifit_linear_workspace * work); + +int +gsl_multifit_linear_applyW(const gsl_matrix * X, + const gsl_vector * w, + const gsl_vector * y, + gsl_matrix * WX, + gsl_vector * Wy); + +int +gsl_multifit_linear_stdform1 (const gsl_vector * L, + const gsl_matrix * X, + const gsl_vector * y, + gsl_matrix * Xs, + gsl_vector * ys, + gsl_multifit_linear_workspace * work); + +int +gsl_multifit_linear_wstdform1 (const gsl_vector * L, + const gsl_matrix * X, + const gsl_vector * w, + const gsl_vector * y, + gsl_matrix * Xs, + gsl_vector * ys, + gsl_multifit_linear_workspace * work); + +int +gsl_multifit_linear_L_decomp (gsl_matrix * L, gsl_vector * tau); + +int +gsl_multifit_linear_stdform2 (const gsl_matrix * LQR, + const gsl_vector * Ltau, + const gsl_matrix * X, + const gsl_vector * y, + gsl_matrix * Xs, + gsl_vector * ys, + gsl_matrix * M, + gsl_multifit_linear_workspace * work); + +int +gsl_multifit_linear_wstdform2 (const gsl_matrix * LQR, + const gsl_vector * Ltau, + const gsl_matrix * X, + const gsl_vector * w, + const gsl_vector * y, + gsl_matrix * Xs, + gsl_vector * ys, + gsl_matrix * M, + gsl_multifit_linear_workspace * work); + +int +gsl_multifit_linear_genform1 (const gsl_vector * L, + const gsl_vector * cs, + gsl_vector * c, + gsl_multifit_linear_workspace * work); + +int +gsl_multifit_linear_genform2 (const gsl_matrix * LQR, + const gsl_vector * Ltau, + const gsl_matrix * X, + const gsl_vector * y, + const gsl_vector * cs, + const gsl_matrix * M, + gsl_vector * c, + gsl_multifit_linear_workspace * work); + +int +gsl_multifit_linear_wgenform2 (const gsl_matrix * LQR, + const gsl_vector * Ltau, + const gsl_matrix * X, + const gsl_vector * w, + const gsl_vector * y, + const gsl_vector * cs, + const gsl_matrix * M, + gsl_vector * c, + gsl_multifit_linear_workspace * work); + +int +gsl_multifit_linear_lreg (const double smin, const double smax, + gsl_vector * reg_param); + +int +gsl_multifit_linear_lcurve (const gsl_vector * y, + gsl_vector * reg_param, + gsl_vector * rho, gsl_vector * eta, + gsl_multifit_linear_workspace * work); + +int +gsl_multifit_linear_lcorner(const gsl_vector *rho, + const gsl_vector *eta, + size_t *idx); + +int +gsl_multifit_linear_lcorner2(const gsl_vector *reg_param, + const gsl_vector *eta, + size_t *idx); + +int +gsl_multifit_linear_Lk(const size_t p, const size_t k, gsl_matrix *L); + +int +gsl_multifit_linear_Lsobolev(const size_t p, const size_t kmax, + const gsl_vector *alpha, gsl_matrix *L, + gsl_multifit_linear_workspace *work); + int gsl_multifit_wlinear (const gsl_matrix * X, const gsl_vector * w, @@ -97,6 +213,17 @@ gsl_multifit_linear_workspace * work); int +gsl_multifit_wlinear_tsvd (const gsl_matrix * X, + const gsl_vector * w, + const gsl_vector * y, + const double tol, + gsl_vector * c, + gsl_matrix * cov, + double * chisq, + size_t * rank, + gsl_multifit_linear_workspace * work); + +int gsl_multifit_wlinear_svd (const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, @@ -123,10 +250,50 @@ const gsl_vector * c, const gsl_matrix * cov, double *y, double *y_err); +double +gsl_multifit_linear_rcond (const gsl_multifit_linear_workspace * w); + int gsl_multifit_linear_residuals (const gsl_matrix *X, const gsl_vector *y, const gsl_vector *c, gsl_vector *r); +/* gcv.c */ +int +gsl_multifit_linear_gcv_init(const gsl_vector * y, + gsl_vector * reg_param, + gsl_vector * UTy, + double * delta0, + gsl_multifit_linear_workspace * work); + +int +gsl_multifit_linear_gcv_curve(const gsl_vector * reg_param, + const gsl_vector * UTy, + const double delta0, + gsl_vector * G, + gsl_multifit_linear_workspace * work); + +int +gsl_multifit_linear_gcv_min(const gsl_vector * reg_param, + const gsl_vector * UTy, + const gsl_vector * G, + const double delta0, + double * lambda, + gsl_multifit_linear_workspace * work); + +double +gsl_multifit_linear_gcv_calc(const double lambda, + const gsl_vector * UTy, + const double delta0, + gsl_multifit_linear_workspace * work); + +int +gsl_multifit_linear_gcv(const gsl_vector * y, + gsl_vector * reg_param, + gsl_vector * G, + double * lambda, + double * G_lambda, + gsl_multifit_linear_workspace * work); + typedef struct { const char * name; /* method name */ @@ -190,14 +357,23 @@ gsl_multifit_robust_workspace *gsl_multifit_robust_alloc(const gsl_multifit_robust_type *T, const size_t n, const size_t p); void gsl_multifit_robust_free(gsl_multifit_robust_workspace *w); -int gsl_multifit_robust_tune(const double tune, gsl_multifit_robust_workspace *w); +int gsl_multifit_robust_tune(const double tune, + gsl_multifit_robust_workspace *w); +int gsl_multifit_robust_maxiter(const size_t maxiter, + gsl_multifit_robust_workspace *w); const char *gsl_multifit_robust_name(const gsl_multifit_robust_workspace *w); gsl_multifit_robust_stats gsl_multifit_robust_statistics(const gsl_multifit_robust_workspace *w); +int gsl_multifit_robust_weights(const gsl_vector *r, gsl_vector *wts, + gsl_multifit_robust_workspace *w); int gsl_multifit_robust(const gsl_matrix * X, const gsl_vector * y, gsl_vector * c, gsl_matrix *cov, gsl_multifit_robust_workspace *w); int gsl_multifit_robust_est(const gsl_vector * x, const gsl_vector * c, const gsl_matrix * cov, double *y, double *y_err); +int gsl_multifit_robust_residuals(const gsl_matrix * X, + const gsl_vector * y, + const gsl_vector * c, gsl_vector * r, + gsl_multifit_robust_workspace * w); __END_DECLS diff -Nru gsl-doc-1.16/multifit/gsl_multifit_nlin.h gsl-doc-2.3/multifit/gsl_multifit_nlin.h --- gsl-doc-1.16/multifit/gsl_multifit_nlin.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/gsl_multifit_nlin.h 2015-11-03 16:21:55.000000000 +0000 @@ -25,6 +25,7 @@ #include #include #include +#include #undef __BEGIN_DECLS #undef __END_DECLS @@ -41,7 +42,9 @@ int gsl_multifit_gradient (const gsl_matrix * J, const gsl_vector * f, gsl_vector * g); -int gsl_multifit_covar (const gsl_matrix * J, double epsrel, gsl_matrix * covar); +int gsl_multifit_covar (const gsl_matrix * J, const double epsrel, gsl_matrix * covar); +int gsl_multifit_covar_QRPT (gsl_matrix * r, gsl_permutation * perm, + const double epsrel, gsl_matrix * covar); /* Definition of vector-valued functions with parameters based on gsl_vector */ @@ -87,8 +90,8 @@ void gsl_multifit_fsolver_free (gsl_multifit_fsolver * s); int gsl_multifit_fsolver_set (gsl_multifit_fsolver * s, - gsl_multifit_function * f, - const gsl_vector * x); + gsl_multifit_function * f, + const gsl_vector * x); int gsl_multifit_fsolver_iterate (gsl_multifit_fsolver * s); @@ -107,24 +110,28 @@ int (* f) (const gsl_vector * x, void * params, gsl_vector * f); int (* df) (const gsl_vector * x, void * params, gsl_matrix * df); int (* fdf) (const gsl_vector * x, void * params, gsl_vector * f, gsl_matrix *df); - size_t n; /* number of functions */ - size_t p; /* number of independent variables */ - void * params; + size_t n; /* number of functions */ + size_t p; /* number of independent variables */ + void * params; /* user parameters */ + size_t nevalf; /* number of function evaluations */ + size_t nevaldf; /* number of Jacobian evaluations */ }; typedef struct gsl_multifit_function_fdf_struct gsl_multifit_function_fdf ; -#define GSL_MULTIFIT_FN_EVAL_F(F,x,y) ((*((F)->f))(x,(F)->params,(y))) -#define GSL_MULTIFIT_FN_EVAL_DF(F,x,dy) ((*((F)->df))(x,(F)->params,(dy))) -#define GSL_MULTIFIT_FN_EVAL_F_DF(F,x,y,dy) ((*((F)->fdf))(x,(F)->params,(y),(dy))) - typedef struct { const char *name; size_t size; int (*alloc) (void *state, size_t n, size_t p); - int (*set) (void *state, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx); - int (*iterate) (void *state, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx); + int (*set) (void *state, const gsl_vector * wts, + gsl_multifit_function_fdf * fdf, gsl_vector * x, + gsl_vector * f, gsl_vector * dx); + int (*iterate) (void *state, const gsl_vector * wts, + gsl_multifit_function_fdf * fdf, gsl_vector * x, + gsl_vector * f, gsl_vector * dx); + int (*gradient) (void *state, gsl_vector * g); + int (*jac) (void *state, gsl_matrix * J); void (*free) (void *state); } gsl_multifit_fdfsolver_type; @@ -133,10 +140,12 @@ { const gsl_multifit_fdfsolver_type * type; gsl_multifit_function_fdf * fdf ; - gsl_vector * x; - gsl_vector * f; - gsl_matrix * J; - gsl_vector * dx; + gsl_vector * x; /* parameter values x */ + gsl_vector * f; /* residual vector f(x) */ + gsl_vector * dx; /* step dx */ + gsl_vector * g; /* gradient J^T f */ + gsl_vector * sqrt_wts; /* sqrt(wts) */ + size_t niter; /* number of iterations performed */ void *state; } gsl_multifit_fdfsolver; @@ -148,38 +157,118 @@ int gsl_multifit_fdfsolver_set (gsl_multifit_fdfsolver * s, - gsl_multifit_function_fdf * fdf, - const gsl_vector * x); + gsl_multifit_function_fdf * fdf, + const gsl_vector * x); +int gsl_multifit_fdfsolver_wset (gsl_multifit_fdfsolver * s, + gsl_multifit_function_fdf * f, + const gsl_vector * x, + const gsl_vector * wts); int gsl_multifit_fdfsolver_iterate (gsl_multifit_fdfsolver * s); -int -gsl_multifit_fdfsolver_driver (gsl_multifit_fdfsolver * s, - const size_t maxiter, - const double epsabs, const double epsrel); +int gsl_multifit_fdfsolver_driver (gsl_multifit_fdfsolver * s, + const size_t maxiter, + const double xtol, + const double gtol, + const double ftol, + int *info); + +int gsl_multifit_fdfsolver_jac (gsl_multifit_fdfsolver * s, + gsl_matrix * J); void gsl_multifit_fdfsolver_free (gsl_multifit_fdfsolver * s); const char * gsl_multifit_fdfsolver_name (const gsl_multifit_fdfsolver * s); gsl_vector * gsl_multifit_fdfsolver_position (const gsl_multifit_fdfsolver * s); - +gsl_vector * gsl_multifit_fdfsolver_residual (const gsl_multifit_fdfsolver * s); +size_t gsl_multifit_fdfsolver_niter (const gsl_multifit_fdfsolver * s); +int gsl_multifit_eval_wf(gsl_multifit_function_fdf *fdf, + const gsl_vector *x, const gsl_vector *wts, + gsl_vector *y); +int gsl_multifit_eval_wdf(gsl_multifit_function_fdf *fdf, + const gsl_vector *x, const gsl_vector *wts, + gsl_matrix *dy); + +int gsl_multifit_fdfsolver_test (const gsl_multifit_fdfsolver * s, + const double xtol, + const double gtol, + const double ftol, int *info); int gsl_multifit_test_delta (const gsl_vector * dx, const gsl_vector * x, double epsabs, double epsrel); int gsl_multifit_test_gradient (const gsl_vector * g, double epsabs); -int gsl_multifit_fdfsolver_dif_df(const gsl_vector *x, gsl_multifit_function_fdf *fdf, +int gsl_multifit_fdfsolver_dif_df(const gsl_vector *x, + const gsl_vector *wts, + gsl_multifit_function_fdf *fdf, const gsl_vector *f, gsl_matrix *J); int gsl_multifit_fdfsolver_dif_fdf(const gsl_vector *x, gsl_multifit_function_fdf *fdf, gsl_vector *f, gsl_matrix *J); +typedef struct +{ + size_t n; /* number of (original) residuals */ + size_t p; /* number of model parameters */ + double lambda; /* damping parameter */ + const gsl_vector *L_diag; /* diagonal damping matrix or NULL */ + const gsl_matrix *L; /* general damping matrix or NULL */ + gsl_vector *f; /* function values for finite diff J */ + gsl_vector *wts; /* weight vector for augmented system */ + gsl_multifit_fdfsolver * s; + gsl_multifit_function_fdf *fdf; /* user defined fdf */ + gsl_multifit_function_fdf fdftik; /* Tikhonov modified fdf */ +} gsl_multifit_fdfridge; + +gsl_multifit_fdfridge * +gsl_multifit_fdfridge_alloc (const gsl_multifit_fdfsolver_type * T, + const size_t n, const size_t p); +void gsl_multifit_fdfridge_free(gsl_multifit_fdfridge *work); +const char *gsl_multifit_fdfridge_name(const gsl_multifit_fdfridge * w); +gsl_vector *gsl_multifit_fdfridge_position (const gsl_multifit_fdfridge * w); +gsl_vector *gsl_multifit_fdfridge_residual (const gsl_multifit_fdfridge * w); +size_t gsl_multifit_fdfridge_niter (const gsl_multifit_fdfridge * w); +int gsl_multifit_fdfridge_set (gsl_multifit_fdfridge * w, + gsl_multifit_function_fdf * f, + const gsl_vector * x, + const double lambda); +int gsl_multifit_fdfridge_wset (gsl_multifit_fdfridge * w, + gsl_multifit_function_fdf * f, + const gsl_vector * x, + const double lambda, + const gsl_vector * wts); +int gsl_multifit_fdfridge_set2 (gsl_multifit_fdfridge * w, + gsl_multifit_function_fdf * f, + const gsl_vector * x, + const gsl_vector * lambda); +int gsl_multifit_fdfridge_wset2 (gsl_multifit_fdfridge * w, + gsl_multifit_function_fdf * f, + const gsl_vector * x, + const gsl_vector * lambda, + const gsl_vector * wts); +int gsl_multifit_fdfridge_set3 (gsl_multifit_fdfridge * w, + gsl_multifit_function_fdf * f, + const gsl_vector * x, + const gsl_matrix * L); +int gsl_multifit_fdfridge_wset3 (gsl_multifit_fdfridge * w, + gsl_multifit_function_fdf * f, + const gsl_vector * x, + const gsl_matrix * L, + const gsl_vector * wts); +int gsl_multifit_fdfridge_iterate (gsl_multifit_fdfridge * w); +int gsl_multifit_fdfridge_driver (gsl_multifit_fdfridge * w, + const size_t maxiter, + const double xtol, + const double gtol, + const double ftol, + int *info); + /* extern const gsl_multifit_fsolver_type * gsl_multifit_fsolver_gradient; */ -GSL_VAR const gsl_multifit_fdfsolver_type * gsl_multifit_fdfsolver_lmder; GSL_VAR const gsl_multifit_fdfsolver_type * gsl_multifit_fdfsolver_lmsder; - +GSL_VAR const gsl_multifit_fdfsolver_type * gsl_multifit_fdfsolver_lmder; +GSL_VAR const gsl_multifit_fdfsolver_type * gsl_multifit_fdfsolver_lmniel; __END_DECLS diff -Nru gsl-doc-1.16/multifit/linear_common.c gsl-doc-2.3/multifit/linear_common.c --- gsl-doc-1.16/multifit/linear_common.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/linear_common.c 2016-11-18 18:17:12.000000000 +0000 @@ -0,0 +1,197 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +/* Fit + * + * y = X c + * + * where X is an n x p matrix of n observations for p variables. + * + * The solution includes a possible standard form Tikhonov regularization: + * + * c = (X^T X + lambda^2 I)^{-1} X^T y + * + * where lambda^2 is the Tikhonov regularization parameter. + * + * The function multifit_linear_svd() must first be called to + * compute the SVD decomposition of X + * + * Inputs: X - least squares matrix + * y - right hand side vector + * tol - singular value tolerance + * lambda - Tikhonov regularization parameter lambda; + * ignored if <= 0 + * rank - (output) effective rank + * c - (output) model coefficient vector + * rnorm - (output) residual norm ||y - X c|| + * snorm - (output) solution norm ||c|| + * work - workspace + * + * Notes: + * 1) The dimensions of X must match work->n and work->p which are set + * by multifit_linear_svd() + * 2) On input: + * work->A contains U + * work->Q contains Q + * work->S contains singular values + * 3) If this function is called from gsl_multifit_wlinear(), then + * the input y points to work->t, which contains sqrt(W) y. Since + * work->t is also used as scratch workspace by this function, we + * do the necessary computations with y first to avoid problems. + * 4) When lambda <= 0, singular values are truncated when: + * s_j <= tol * s_0 + */ + +static int +multifit_linear_solve (const gsl_matrix * X, + const gsl_vector * y, + const double tol, + const double lambda, + size_t * rank, + gsl_vector * c, + double *rnorm, + double *snorm, + gsl_multifit_linear_workspace * work) +{ + const size_t n = X->size1; + const size_t p = X->size2; + + if (n != work->n || p != work->p) + { + GSL_ERROR("observation matrix does not match workspace", GSL_EBADLEN); + } + else if (n != y->size) + { + GSL_ERROR("number of observations in y does not match matrix", + GSL_EBADLEN); + } + else if (p != c->size) + { + GSL_ERROR ("number of parameters c does not match matrix", + GSL_EBADLEN); + } + else if (tol <= 0) + { + GSL_ERROR ("tolerance must be positive", GSL_EINVAL); + } + else + { + const double lambda_sq = lambda * lambda; + + double rho_ls = 0.0; /* contribution to rnorm from OLS */ + + size_t j, p_eff; + + /* these inputs are previously computed by multifit_linear_svd() */ + gsl_matrix_view A = gsl_matrix_submatrix(work->A, 0, 0, n, p); + gsl_matrix_view Q = gsl_matrix_submatrix(work->Q, 0, 0, p, p); + gsl_vector_view S = gsl_vector_subvector(work->S, 0, p); + + /* workspace */ + gsl_matrix_view QSI = gsl_matrix_submatrix(work->QSI, 0, 0, p, p); + gsl_vector_view xt = gsl_vector_subvector(work->xt, 0, p); + gsl_vector_view D = gsl_vector_subvector(work->D, 0, p); + gsl_vector_view t = gsl_vector_subvector(work->t, 0, n); + + /* + * Solve y = A c for c + * c = Q diag(s_i / (s_i^2 + lambda_i^2)) U^T y + */ + + /* compute xt = U^T y */ + gsl_blas_dgemv (CblasTrans, 1.0, &A.matrix, y, 0.0, &xt.vector); + + if (n > p) + { + /* + * compute OLS residual norm = || y - U U^T y ||; + * for n = p, U U^T = I, so no need to calculate norm + */ + gsl_vector_memcpy(&t.vector, y); + gsl_blas_dgemv(CblasNoTrans, -1.0, &A.matrix, &xt.vector, 1.0, &t.vector); + rho_ls = gsl_blas_dnrm2(&t.vector); + } + + if (lambda > 0.0) + { + /* xt <-- [ s(i) / (s(i)^2 + lambda^2) ] .* U^T y */ + for (j = 0; j < p; ++j) + { + double sj = gsl_vector_get(&S.vector, j); + double f = (sj * sj) / (sj * sj + lambda_sq); + double *ptr = gsl_vector_ptr(&xt.vector, j); + + /* use D as workspace for residual norm */ + gsl_vector_set(&D.vector, j, (1.0 - f) * (*ptr)); + + *ptr *= sj / (sj*sj + lambda_sq); + } + + /* compute regularized solution vector */ + gsl_blas_dgemv (CblasNoTrans, 1.0, &Q.matrix, &xt.vector, 0.0, c); + + /* compute solution norm */ + *snorm = gsl_blas_dnrm2(c); + + /* compute residual norm */ + *rnorm = gsl_blas_dnrm2(&D.vector); + + if (n > p) + { + /* add correction to residual norm (see eqs 6-7 of [1]) */ + *rnorm = sqrt((*rnorm) * (*rnorm) + rho_ls * rho_ls); + } + + /* reset D vector */ + gsl_vector_set_all(&D.vector, 1.0); + } + else + { + /* Scale the matrix Q, QSI = Q S^{-1} */ + + gsl_matrix_memcpy (&QSI.matrix, &Q.matrix); + + { + double s0 = gsl_vector_get (&S.vector, 0); + p_eff = 0; + + for (j = 0; j < p; j++) + { + gsl_vector_view column = gsl_matrix_column (&QSI.matrix, j); + double sj = gsl_vector_get (&S.vector, j); + double alpha; + + if (sj <= tol * s0) + { + alpha = 0.0; + } + else + { + alpha = 1.0 / sj; + p_eff++; + } + + gsl_vector_scale (&column.vector, alpha); + } + + *rank = p_eff; + } + + gsl_blas_dgemv (CblasNoTrans, 1.0, &QSI.matrix, &xt.vector, 0.0, c); + + /* Unscale the balancing factors */ + gsl_vector_div (c, &D.vector); + + *snorm = gsl_blas_dnrm2(c); + *rnorm = rho_ls; + } + + return GSL_SUCCESS; + } +} diff -Nru gsl-doc-1.16/multifit/lmder.c gsl-doc-2.3/multifit/lmder.c --- gsl-doc-1.16/multifit/lmder.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/lmder.c 2015-11-03 16:21:55.000000000 +0000 @@ -40,17 +40,19 @@ double fnorm; double delta; double par; - gsl_matrix *r; + gsl_matrix *J; /* Jacobian matrix */ + gsl_matrix *r; /* R matrix in J = Q R P^T */ gsl_vector *tau; - gsl_vector *diag; - gsl_vector *qtf; + gsl_vector *diag; /* scaling matrix D = diag(d1,...,dp) */ + gsl_vector *qtf; /* Q^T f */ gsl_vector *newton; - gsl_vector *gradient; - gsl_vector *x_trial; - gsl_vector *f_trial; + gsl_vector *gradient; /* gradient g = J^T f */ + gsl_vector *x_trial; /* trial step x + dx */ + gsl_vector *f_trial; /* trial function f(x + dx) */ gsl_vector *df; gsl_vector *sdiag; gsl_vector *rptdx; + const gsl_vector *weights; /* data weights */ gsl_vector *w; gsl_vector *work1; gsl_permutation * perm; @@ -58,12 +60,12 @@ lmder_state_t; static int lmder_alloc (void *vstate, size_t n, size_t p); -static int lmder_set (void *vstate, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx); -static int lmsder_set (void *vstate, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx); -static int set (void *vstate, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx, int scale); -static int lmder_iterate (void *vstate, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx); +static int lmder_set (void *vstate, const gsl_vector * swts, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_vector * dx); +static int lmsder_set (void *vstate, const gsl_vector * swts, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_vector * dx); +static int set (void *vstate, const gsl_vector * swts, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_vector * dx, int scale); +static int lmder_iterate (void *vstate, const gsl_vector * swts, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_vector * dx); static void lmder_free (void *vstate); -static int iterate (void *vstate, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx, int scale); +static int iterate (void *vstate, const gsl_vector * swts, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_vector * dx, int scale); #include "lmutil.c" #include "lmpar.c" @@ -75,12 +77,21 @@ lmder_alloc (void *vstate, size_t n, size_t p) { lmder_state_t *state = (lmder_state_t *) vstate; - gsl_matrix *r; + gsl_matrix *r, *J; gsl_vector *tau, *diag, *qtf, *newton, *gradient, *x_trial, *f_trial, *df, *sdiag, *rptdx, *w, *work1; gsl_permutation *perm; - r = gsl_matrix_calloc (n, p); + J = gsl_matrix_alloc (n, p); + + if (J == 0) + { + GSL_ERROR ("failed to allocate space for J", GSL_ENOMEM); + } + + state->J = J; + + r = gsl_matrix_alloc (n, p); if (r == 0) { @@ -315,52 +326,107 @@ } static int -lmder_set (void *vstate, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx) +lmder_set (void *vstate, const gsl_vector * swts, + gsl_multifit_function_fdf * fdf, gsl_vector * x, + gsl_vector * f, gsl_vector * dx) { - int status = set (vstate, fdf, x, f, J, dx, 0); + int status = set (vstate, swts, fdf, x, f, dx, 0); return status ; } static int -lmsder_set (void *vstate, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx) +lmsder_set (void *vstate, const gsl_vector * swts, + gsl_multifit_function_fdf * fdf, gsl_vector * x, + gsl_vector * f, gsl_vector * dx) { - int status = set (vstate, fdf, x, f, J, dx, 1); + int status = set (vstate, swts, fdf, x, f, dx, 1); return status ; } static int -lmder_iterate (void *vstate, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx) +lmder_iterate (void *vstate, const gsl_vector * swts, + gsl_multifit_function_fdf * fdf, gsl_vector * x, + gsl_vector * f, gsl_vector * dx) { - int status = iterate (vstate, fdf, x, f, J, dx, 0); + int status = iterate (vstate, swts, fdf, x, f, dx, 0); return status; } static int -lmsder_iterate (void *vstate, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx) +lmsder_iterate (void *vstate, const gsl_vector * swts, + gsl_multifit_function_fdf * fdf, gsl_vector * x, + gsl_vector * f, gsl_vector * dx) { - int status = iterate (vstate, fdf, x, f, J, dx, 1); + int status = iterate (vstate, swts, fdf, x, f, dx, 1); return status; } +static int +lmder_gradient (void *vstate, gsl_vector * g) +{ + lmder_state_t *state = (lmder_state_t *) vstate; + compute_gradient(state->r, state->qtf, g); + return GSL_SUCCESS; +} + +static int +lmder_jac (void *vstate, gsl_matrix * J) +{ + lmder_state_t *state = (lmder_state_t *) vstate; + int s = gsl_matrix_memcpy(J, state->J); + + return s; +} + static void lmder_free (void *vstate) { lmder_state_t *state = (lmder_state_t *) vstate; - gsl_permutation_free (state->perm); - gsl_vector_free (state->work1); - gsl_vector_free (state->w); - gsl_vector_free (state->rptdx); - gsl_vector_free (state->sdiag); - gsl_vector_free (state->df); - gsl_vector_free (state->f_trial); - gsl_vector_free (state->x_trial); - gsl_vector_free (state->gradient); - gsl_vector_free (state->newton); - gsl_vector_free (state->qtf); - gsl_vector_free (state->diag); - gsl_vector_free (state->tau); - gsl_matrix_free (state->r); + if (state->perm) + gsl_permutation_free (state->perm); + + if (state->work1) + gsl_vector_free (state->work1); + + if (state->w) + gsl_vector_free (state->w); + + if (state->rptdx) + gsl_vector_free (state->rptdx); + + if (state->sdiag) + gsl_vector_free (state->sdiag); + + if (state->df) + gsl_vector_free (state->df); + + if (state->f_trial) + gsl_vector_free (state->f_trial); + + if (state->x_trial) + gsl_vector_free (state->x_trial); + + if (state->gradient) + gsl_vector_free (state->gradient); + + if (state->newton) + gsl_vector_free (state->newton); + + if (state->qtf) + gsl_vector_free (state->qtf); + + if (state->diag) + gsl_vector_free (state->diag); + + if (state->tau) + gsl_vector_free (state->tau); + + if (state->r) + gsl_matrix_free (state->r); + + if (state->J) + gsl_matrix_free (state->J); } static const gsl_multifit_fdfsolver_type lmder_type = @@ -370,6 +436,8 @@ &lmder_alloc, &lmder_set, &lmder_iterate, + &lmder_gradient, + &lmder_jac, &lmder_free }; @@ -380,6 +448,8 @@ &lmder_alloc, &lmsder_set, &lmsder_iterate, + &lmder_gradient, + &lmder_jac, &lmder_free }; diff -Nru gsl-doc-1.16/multifit/lmiterate.c gsl-doc-2.3/multifit/lmiterate.c --- gsl-doc-1.16/multifit/lmiterate.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/lmiterate.c 2015-11-03 16:21:55.000000000 +0000 @@ -1,5 +1,7 @@ static int -iterate (void *vstate, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx, int scale) +iterate (void *vstate, const gsl_vector * swts, + gsl_multifit_function_fdf * fdf, gsl_vector * x, + gsl_vector * f, gsl_vector * dx, int scale) { lmder_state_t *state = (lmder_state_t *) vstate; @@ -31,11 +33,6 @@ return GSL_SUCCESS; } - /* Compute qtf = Q^T f */ - - gsl_vector_memcpy (qtf, f); - gsl_linalg_QR_QTvec (r, tau, qtf); - /* Compute norm of scaled gradient */ compute_gradient_direction (r, perm, qtf, diag, gradient); @@ -80,7 +77,7 @@ /* Evaluate function at x + p */ /* return immediately if evaluation raised error */ { - int status = GSL_MULTIFIT_FN_EVAL_F (fdf, x_trial, f_trial); + int status = gsl_multifit_eval_wf (fdf, x_trial, swts, f_trial); if (status) return status; } @@ -182,11 +179,12 @@ /* return immediately if evaluation raised error */ { int status; - + + /* compute Jacobian at new x and store in state->r */ if (fdf->df) - status = GSL_MULTIFIT_FN_EVAL_DF (fdf, x_trial, J); + status = gsl_multifit_eval_wdf (fdf, x_trial, swts, r); else - status = gsl_multifit_fdfsolver_dif_df(x_trial, fdf, f_trial, J); + status = gsl_multifit_fdfsolver_dif_df(x_trial, swts, fdf, f_trial, r); if (status) return status; @@ -201,13 +199,17 @@ if (scale) { - update_diag (J, diag); + update_diag (r, diag); } + /* compute J = Q R P^T and qtf = Q^T f */ { int signum; - gsl_matrix_memcpy (r, J); + + gsl_matrix_memcpy(state->J, r); gsl_linalg_QRPT_decomp (r, tau, perm, &signum, work1); + gsl_vector_memcpy (qtf, f); + gsl_linalg_QR_QTvec (r, tau, qtf); } return GSL_SUCCESS; diff -Nru gsl-doc-1.16/multifit/lmmisc.c gsl-doc-2.3/multifit/lmmisc.c --- gsl-doc-1.16/multifit/lmmisc.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/lmmisc.c 2015-11-03 18:35:15.000000000 +0000 @@ -0,0 +1,111 @@ +/* multifit/lmmisc.c + * + * Copyright (C) 2014 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* compute step dx by solving (J^T J + mu*I) dx = -J^T f */ +static int +lmniel_calc_dx(const double mu, const gsl_matrix *A, const gsl_vector *rhs, + gsl_vector *dx, lmniel_state_t *state) +{ + int status; + gsl_matrix *A_copy = state->A_copy; + gsl_vector_view diag = gsl_matrix_diagonal(A_copy); + + /* make a copy of J^T J matrix */ + gsl_matrix_memcpy(A_copy, A); + + /* augment normal equations with LM parameter: A -> A + mu*I */ + gsl_vector_add_constant(&diag.vector, mu); + + status = gsl_linalg_QR_decomp(A_copy, state->work); + if (status) + return status; + + status = gsl_linalg_QR_solve(A_copy, state->work, rhs, dx); + if (status) + return status; + + return GSL_SUCCESS; +} /* lmniel_calc_dx() */ + +/* compute x_trial = x + dx */ +static void +lmniel_trial_step(const gsl_vector * x, const gsl_vector * dx, + gsl_vector * x_trial) +{ + size_t i, N = x->size; + + for (i = 0; i < N; i++) + { + double dxi = gsl_vector_get (dx, i); + double xi = gsl_vector_get (x, i); + gsl_vector_set (x_trial, i, xi + dxi); + } +} /* lmniel_trial_step() */ + +/* +lmniel_calc_dF() + Compute dF = F(x) - F(x + dx) = 1/2 (f - f_new)^T (f + f_new) +*/ +static double +lmniel_calc_dF(const gsl_vector *f, const gsl_vector *f_new) +{ + const size_t N = f->size; + size_t i; + double dF = 0.0; + + for (i = 0; i < N; ++i) + { + double fi = gsl_vector_get(f, i); + double fnewi = gsl_vector_get(f_new, i); + + dF += (fi - fnewi) * (fi + fnewi); + } + + dF *= 0.5; + + return dF; +} /* lmniel_calc_dF() */ + +/* +lmniel_calc_dL() + Compute dL = L(0) - L(dx) = 1/2 dx^T (mu * D^T D dx - g) +Here, the mg input is -g +*/ + +static double +lmniel_calc_dL(const double mu, const gsl_vector *diag, + const gsl_vector *dx, const gsl_vector *mg) +{ + const size_t p = dx->size; + size_t i; + double dL = 0.0; + + for (i = 0; i < p; ++i) + { + double dxi = gsl_vector_get(dx, i); + double di = gsl_vector_get(diag, i); + double mgi = gsl_vector_get(mg, i); /* -g_i */ + + dL += dxi * (mu * di * di * dxi + mgi); + } + + dL *= 0.5; + + return dL; +} /* lmniel_calc_dL() */ diff -Nru gsl-doc-1.16/multifit/lmniel.c gsl-doc-2.3/multifit/lmniel.c --- gsl-doc-1.16/multifit/lmniel.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/lmniel.c 2016-07-07 20:36:10.000000000 +0000 @@ -0,0 +1,382 @@ +/* multifit/lmniel.c + * + * Copyright (C) 2014 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define SCALE 0 + +/* + * This module contains an implementation of the Levenberg-Marquardt + * algorithm for nonlinear optimization problems. This implementation + * closely follows the following works: + * + * [1] H. B. Nielsen, K. Madsen, Introduction to Optimization and + * Data Fitting, Informatics and Mathematical Modeling, + * Technical University of Denmark (DTU), 2010. + */ + +typedef struct +{ + gsl_matrix *A; /* J^T J */ + gsl_matrix *A_copy; /* copy of J^T J */ + gsl_matrix *J; /* Jacobian J(x) */ + gsl_vector *diag; /* D = diag(J^T J) */ + gsl_vector *rhs; /* rhs vector = -g = -J^T f */ + gsl_vector *x_trial; /* trial parameter vector */ + gsl_vector *f_trial; /* trial function vector */ + gsl_vector *work; /* workspace length p */ + long nu; /* nu */ + double mu; /* LM damping parameter mu */ + double tau; /* initial scale factor for mu */ +} lmniel_state_t; + +#include "lmmisc.c" + +#define LM_ONE_THIRD (0.333333333333333) + +static int lmniel_alloc (void *vstate, const size_t n, const size_t p); +static void lmniel_free(void *vstate); +static int lmniel_set(void *vstate, const gsl_vector * swts, + gsl_multifit_function_fdf *fdf, + gsl_vector *x, gsl_vector *f, gsl_vector *dx); +static int lmniel_iterate(void *vstate, const gsl_vector *swts, + gsl_multifit_function_fdf *fdf, + gsl_vector *x, gsl_vector *f, gsl_vector *dx); + +static int +lmniel_alloc (void *vstate, const size_t n, const size_t p) +{ + lmniel_state_t *state = (lmniel_state_t *) vstate; + + state->A = gsl_matrix_alloc(p, p); + if (state->A == NULL) + { + GSL_ERROR ("failed to allocate space for A", GSL_ENOMEM); + } + + state->J = gsl_matrix_alloc(n, p); + if (state->J == NULL) + { + GSL_ERROR ("failed to allocate space for J", GSL_ENOMEM); + } + + state->diag = gsl_vector_alloc(p); + if (state->diag == NULL) + { + GSL_ERROR ("failed to allocate space for diag", GSL_ENOMEM); + } + + state->rhs = gsl_vector_alloc(p); + if (state->rhs == NULL) + { + GSL_ERROR ("failed to allocate space for rhs", GSL_ENOMEM); + } + + state->work = gsl_vector_alloc(p); + if (state->work == NULL) + { + GSL_ERROR ("failed to allocate space for work", GSL_ENOMEM); + } + + state->A_copy = gsl_matrix_alloc(p, p); + if (state->A_copy == NULL) + { + GSL_ERROR ("failed to allocate space for A_copy", GSL_ENOMEM); + } + + state->x_trial = gsl_vector_alloc(p); + if (state->x_trial == NULL) + { + GSL_ERROR ("failed to allocate space for x_trial", GSL_ENOMEM); + } + + state->f_trial = gsl_vector_alloc(n); + if (state->f_trial == NULL) + { + GSL_ERROR ("failed to allocate space for f_trial", GSL_ENOMEM); + } + + state->tau = 1.0e-3; + + return GSL_SUCCESS; +} /* lmniel_alloc() */ + +static void +lmniel_free(void *vstate) +{ + lmniel_state_t *state = (lmniel_state_t *) vstate; + + if (state->A) + gsl_matrix_free(state->A); + + if (state->J) + gsl_matrix_free(state->J); + + if (state->diag) + gsl_vector_free(state->diag); + + if (state->rhs) + gsl_vector_free(state->rhs); + + if (state->work) + gsl_vector_free(state->work); + + if (state->A_copy) + gsl_matrix_free(state->A_copy); + + if (state->x_trial) + gsl_vector_free(state->x_trial); + + if (state->f_trial) + gsl_vector_free(state->f_trial); +} /* lmniel_free() */ + +static int +lmniel_set(void *vstate, const gsl_vector *swts, + gsl_multifit_function_fdf *fdf, gsl_vector *x, + gsl_vector *f, gsl_vector *dx) +{ + int status; + lmniel_state_t *state = (lmniel_state_t *) vstate; + const size_t p = x->size; + size_t i; + + /* initialize counters for function and Jacobian evaluations */ + fdf->nevalf = 0; + fdf->nevaldf = 0; + + /* evaluate function and Jacobian at x and apply weight transform */ + status = gsl_multifit_eval_wf(fdf, x, swts, f); + if (status) + return status; + + if (fdf->df) + status = gsl_multifit_eval_wdf(fdf, x, swts, state->J); + else + status = gsl_multifit_fdfsolver_dif_df(x, swts, fdf, f, state->J); + if (status) + return status; + + /* compute rhs = -J^T f */ + gsl_blas_dgemv(CblasTrans, -1.0, state->J, f, 0.0, state->rhs); + +#if SCALE + gsl_vector_set_zero(state->diag); +#else + gsl_vector_set_all(state->diag, 1.0); +#endif + + /* set default parameters */ + state->nu = 2; + +#if SCALE + state->mu = state->tau; +#else + /* compute mu_0 = tau * max(diag(J^T J)) */ + state->mu = -1.0; + for (i = 0; i < p; ++i) + { + gsl_vector_view c = gsl_matrix_column(state->J, i); + double result; /* (J^T J)_{ii} */ + + gsl_blas_ddot(&c.vector, &c.vector, &result); + state->mu = GSL_MAX(state->mu, result); + } + + state->mu *= state->tau; +#endif + + return GSL_SUCCESS; +} /* lmniel_set() */ + +/* +lmniel_iterate() + This function performs 1 iteration of the LM algorithm 6.18 +from [1]. The algorithm is slightly modified to loop until we +find an acceptable step dx, in order to guarantee that each +function call contains a new input vector x. + +Args: vstate - lm workspace + swts - data weights (NULL if unweighted) + fdf - function and Jacobian pointers + x - on input, current parameter vector + on output, new parameter vector x + dx + f - on input, f(x) + on output, f(x + dx) + dx - (output only) parameter step vector + +Notes: +1) On input, the following must be initialized in state: +nu, mu, rhs, J + +2) On output, the following are updated with the current iterates: +nu, mu, rhs, J + +rhs needs to be set on each output, so that lmniel_gradient supplies +the correct g = J^T f +*/ + +static int +lmniel_iterate(void *vstate, const gsl_vector *swts, + gsl_multifit_function_fdf *fdf, gsl_vector *x, + gsl_vector *f, gsl_vector *dx) +{ + int status; + lmniel_state_t *state = (lmniel_state_t *) vstate; + gsl_matrix *J = state->J; /* Jacobian J(x) */ + gsl_matrix *A = state->A; /* J^T J */ + gsl_vector *rhs = state->rhs; /* -g = -J^T f */ + gsl_vector *x_trial = state->x_trial; /* trial x + dx */ + gsl_vector *f_trial = state->f_trial; /* trial f(x + dx) */ + gsl_vector *diag = state->diag; /* diag(D) */ + double dF; /* F(x) - F(x + dx) */ + double dL; /* L(0) - L(dx) */ + int foundstep = 0; /* found step dx */ + + /* compute A = J^T J */ + status = gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, J, 0.0, A); + if (status) + return status; + + /* copy lower triangle to upper */ + gsl_matrix_transpose_tricpy('L', 0, A, A); + +#if SCALE + lmniel_update_diag(J, diag); +#endif + + /* loop until we find an acceptable step dx */ + while (!foundstep) + { + /* solve (A + mu*I) dx = g */ + status = lmniel_calc_dx(state->mu, A, rhs, dx, state); + if (status) + return status; + + /* compute x_trial = x + dx */ + lmniel_trial_step(x, dx, x_trial); + + /* compute f(x + dx) */ + status = gsl_multifit_eval_wf(fdf, x_trial, swts, f_trial); + if (status) + return status; + + /* compute dF = F(x) - F(x + dx) */ + dF = lmniel_calc_dF(f, f_trial); + + /* compute dL = L(0) - L(dx) = dx^T (mu*dx - g) */ + dL = lmniel_calc_dL(state->mu, diag, dx, rhs); + + /* check that rho = dF/dL > 0 */ + if ((dL > 0.0) && (dF >= 0.0)) + { + /* reduction in error, step acceptable */ + + double tmp; + + /* update LM parameter mu */ + tmp = 2.0 * (dF / dL) - 1.0; + tmp = 1.0 - tmp*tmp*tmp; + state->mu *= GSL_MAX(LM_ONE_THIRD, tmp); + state->nu = 2; + + /* compute J <- J(x + dx) */ + if (fdf->df) + status = gsl_multifit_eval_wdf(fdf, x_trial, swts, J); + else + status = gsl_multifit_fdfsolver_dif_df(x_trial, swts, fdf, f_trial, J); + if (status) + return status; + + /* update x <- x + dx */ + gsl_vector_memcpy(x, x_trial); + + /* update f <- f(x + dx) */ + gsl_vector_memcpy(f, f_trial); + + /* compute new rhs = -J^T f */ + gsl_blas_dgemv(CblasTrans, -1.0, J, f, 0.0, rhs); + + foundstep = 1; + } + else + { + long nu2; + + /* step did not reduce error, reject step */ + state->mu *= (double) state->nu; + nu2 = state->nu << 1; /* 2*nu */ + if (nu2 <= state->nu) + { + gsl_vector_view d = gsl_matrix_diagonal(A); + + /* + * nu has wrapped around / overflown, reset mu and nu + * to original values and break to force another iteration + */ + /*GSL_ERROR("nu parameter has overflown", GSL_EOVRFLW);*/ + state->nu = 2; + state->mu = state->tau * gsl_vector_max(&d.vector); + break; + } + state->nu = nu2; + } + } /* while (!foundstep) */ + + return GSL_SUCCESS; +} /* lmniel_iterate() */ + +static int +lmniel_gradient(void *vstate, gsl_vector * g) +{ + lmniel_state_t *state = (lmniel_state_t *) vstate; + gsl_vector_memcpy(g, state->rhs); + gsl_vector_scale(g, -1.0); + return GSL_SUCCESS; +} + +static int +lmniel_jac(void *vstate, gsl_matrix * J) +{ + lmniel_state_t *state = (lmniel_state_t *) vstate; + int s = gsl_matrix_memcpy(J, state->J); + + return s; +} + +static const gsl_multifit_fdfsolver_type lmniel_type = +{ + "lmniel", + sizeof(lmniel_state_t), + &lmniel_alloc, + &lmniel_set, + &lmniel_iterate, + &lmniel_gradient, + &lmniel_jac, + &lmniel_free +}; + +const gsl_multifit_fdfsolver_type *gsl_multifit_fdfsolver_lmniel = &lmniel_type; diff -Nru gsl-doc-1.16/multifit/lmpar.c gsl-doc-2.3/multifit/lmpar.c --- gsl-doc-1.16/multifit/lmpar.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/lmpar.c 2015-11-03 16:21:55.000000000 +0000 @@ -183,6 +183,7 @@ } } +/* compute scaled gradient g = D^{-1} J^T f (see More' eq 7.2) */ static void compute_gradient_direction (const gsl_matrix * r, const gsl_permutation * p, const gsl_vector * qtf, const gsl_vector * diag, @@ -210,6 +211,28 @@ } } +/* compute gradient g = J^T f */ +static void +compute_gradient (const gsl_matrix * r, const gsl_vector * qtf, + gsl_vector * g) +{ + const size_t n = r->size2; + + size_t i, j; + + for (j = 0; j < n; j++) + { + double sum = 0; + + for (i = 0; i <= j; i++) + { + sum += gsl_matrix_get (r, i, j) * gsl_vector_get (qtf, i); + } + + gsl_vector_set (g, j, sum); + } +} + static int lmpar (gsl_matrix * r, const gsl_permutation * perm, const gsl_vector * qtf, const gsl_vector * diag, double delta, double * par_inout, diff -Nru gsl-doc-1.16/multifit/lmset.c gsl-doc-2.3/multifit/lmset.c --- gsl-doc-1.16/multifit/lmset.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/lmset.c 2015-11-03 16:21:55.000000000 +0000 @@ -1,25 +1,38 @@ static int -set (void *vstate, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx, int scale) +set (void *vstate, const gsl_vector * swts, gsl_multifit_function_fdf * fdf, + gsl_vector * x, gsl_vector * f, gsl_vector * dx, int scale) { lmder_state_t *state = (lmder_state_t *) vstate; gsl_matrix *r = state->r; gsl_vector *tau = state->tau; + gsl_vector *qtf = state->qtf; gsl_vector *diag = state->diag; gsl_vector *work1 = state->work1; gsl_permutation *perm = state->perm; int signum; - /* Evaluate function at x */ + /* start counting function and Jacobian evaluations */ + fdf->nevalf = 0; + fdf->nevaldf = 0; + /* return immediately if evaluation raised error */ { int status; - - if (fdf->fdf) - status = GSL_MULTIFIT_FN_EVAL_F_DF (fdf, x, f, J); + + /* Evaluate function at x */ + status = gsl_multifit_eval_wf (fdf, x, swts, f); + if (status) + return status; + + /* Evaluate Jacobian at x and store in state->r */ + if (fdf->df) + status = gsl_multifit_eval_wdf (fdf, x, swts, r); else /* finite difference approximation */ - status = gsl_multifit_fdfsolver_dif_fdf(x, fdf, f, J); + status = gsl_multifit_fdfsolver_dif_df(x, swts, fdf, f, r); + + gsl_matrix_memcpy(state->J, r); if (status) return status; @@ -35,7 +48,7 @@ if (scale) { - compute_diag (J, diag); + compute_diag (r, diag); } else { @@ -47,11 +60,13 @@ state->xnorm = scaled_enorm (diag, x); state->delta = compute_delta (diag, x); - /* Factorize J into QR decomposition */ - - gsl_matrix_memcpy (r, J); + /* Factorize J = Q R P^T */ gsl_linalg_QRPT_decomp (r, tau, perm, &signum, work1); + /* compute qtf = Q^T f */ + gsl_vector_memcpy (qtf, f); + gsl_linalg_QR_QTvec (r, tau, qtf); + gsl_vector_set_zero (state->rptdx); gsl_vector_set_zero (state->w); diff -Nru gsl-doc-1.16/multifit/lmutil.c gsl-doc-2.3/multifit/lmutil.c --- gsl-doc-1.16/multifit/lmutil.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/lmutil.c 2015-11-03 16:21:55.000000000 +0000 @@ -55,45 +55,35 @@ static void compute_diag (const gsl_matrix * J, gsl_vector * diag) { - size_t i, j, n = J->size1, p = J->size2; + size_t j, p = J->size2; for (j = 0; j < p; j++) { - double sum = 0; + gsl_vector_const_view v = gsl_matrix_const_column(J, j); + double norm = gsl_blas_dnrm2(&v.vector); - for (i = 0; i < n; i++) - { - double Jij = gsl_matrix_get (J, i, j); - sum += Jij * Jij; - } - if (sum == 0) - sum = 1.0; + if (norm == 0) + norm = 1.0; - gsl_vector_set (diag, j, sqrt (sum)); + gsl_vector_set (diag, j, norm); } } static void update_diag (const gsl_matrix * J, gsl_vector * diag) { - size_t i, j, n = diag->size; + size_t j, p = J->size2; - for (j = 0; j < n; j++) + for (j = 0; j < p; j++) { - double cnorm, diagj, sum = 0; - for (i = 0; i < n; i++) - { - double Jij = gsl_matrix_get (J, i, j); - sum += Jij * Jij; - } - if (sum == 0) - sum = 1.0; + gsl_vector_const_view v = gsl_matrix_const_column(J, j); + double norm = gsl_blas_dnrm2(&v.vector); + double *diagj = gsl_vector_ptr(diag, j); - cnorm = sqrt (sum); - diagj = gsl_vector_get (diag, j); + if (norm == 0) + norm = 1.0; - if (cnorm > diagj) - gsl_vector_set (diag, j, cnorm); + *diagj = GSL_MAX(*diagj, norm); } } diff -Nru gsl-doc-1.16/multifit/Makefile.am gsl-doc-2.3/multifit/Makefile.am --- gsl-doc-1.16/multifit/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/Makefile.am 2016-10-27 11:20:46.000000000 +0000 @@ -2,18 +2,72 @@ pkginclude_HEADERS = gsl_multifit.h gsl_multifit_nlin.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) -libgslmultifit_la_SOURCES = multilinear.c work.c lmder.c fsolver.c fdfsolver.c fdjac.c convergence.c gradient.c covar.c multirobust.c robust_wfun.c +libgslmultifit_la_SOURCES = gcv.c multilinear.c multiwlinear.c work.c lmniel.c lmder.c fsolver.c fdfsolver.c fdfridge.c fdjac.c convergence.c gradient.c covar.c multirobust.c robust_wfun.c multireg.c -noinst_HEADERS = lmutil.c lmpar.c lmset.c lmiterate.c qrsolv.c test_brown.c test_enso.c test_filip.c test_fn.c test_hahn1.c test_kirby2.c test_longley.c test_nelson.c test_pontius.c test_estimator.c +noinst_HEADERS = \ +linear_common.c \ +lmutil.c \ +lmpar.c \ +lmset.c \ +lmiterate.c \ +lmmisc.c \ +qrsolv.c \ +test_bard.c \ +test_beale.c \ +test_biggs.c \ +test_box.c \ +test_boxbod.c \ +test_brown1.c \ +test_brown2.c \ +test_brown3.c \ +test_eckerle.c \ +test_enso.c \ +test_estimator.c \ +test_exp1.c \ +test_filip.c \ +test_gaussian.c \ +test_hahn1.c \ +test_helical.c \ +test_jennrich.c \ +test_kirby2.c \ +test_kowalik.c \ +test_lin1.c \ +test_lin2.c \ +test_lin3.c \ +test_linear.c \ +test_longley.c \ +test_meyer.c \ +test_meyerscal.c \ +test_nelson.c \ +test_nonlinear.c \ +test_osborne.c \ +test_penalty1.c \ +test_penalty2.c \ +test_pontius.c \ +test_powell1.c \ +test_powell2.c \ +test_powell3.c \ +test_rat42.c \ +test_rat43.c \ +test_reg.c \ +test_rosenbrock.c \ +test_rosenbrocke.c \ +test_roth.c \ +test_shaw.c \ +test_thurber.c \ +test_vardim.c \ +test_watson.c \ +test_wnlin.c \ +test_wood.c check_PROGRAMS = test #demo TESTS = $(check_PROGRAMS) test_SOURCES = test.c -test_LDADD = libgslmultifit.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../sort/libgslsort.la ../statistics/libgslstatistics.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la +test_LDADD = libgslmultifit.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../sort/libgslsort.la ../statistics/libgslstatistics.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la ../rng/libgslrng.la ../specfunc/libgslspecfunc.la ../min/libgslmin.la #demo_SOURCES = demo.c #demo_LDADD = libgslmultifit.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../randist/libgslrandist.la ../rng/libgslrng.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la diff -Nru gsl-doc-1.16/multifit/Makefile.in gsl-doc-2.3/multifit/Makefile.in --- gsl-doc-1.16/multifit/Makefile.in 2013-07-19 15:14:54.000000000 +0000 +++ gsl-doc-2.3/multifit/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -95,9 +95,10 @@ CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslmultifit_la_LIBADD = -am_libgslmultifit_la_OBJECTS = multilinear.lo work.lo lmder.lo \ - fsolver.lo fdfsolver.lo fdjac.lo convergence.lo gradient.lo \ - covar.lo multirobust.lo robust_wfun.lo +am_libgslmultifit_la_OBJECTS = gcv.lo multilinear.lo multiwlinear.lo \ + work.lo lmniel.lo lmder.lo fsolver.lo fdfsolver.lo fdfridge.lo \ + fdjac.lo convergence.lo gradient.lo covar.lo multirobust.lo \ + robust_wfun.lo multireg.lo libgslmultifit_la_OBJECTS = $(am_libgslmultifit_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -112,7 +113,8 @@ ../vector/libgslvector.la ../block/libgslblock.la \ ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la \ - ../sys/libgslsys.la + ../sys/libgslsys.la ../rng/libgslrng.la \ + ../specfunc/libgslspecfunc.la ../min/libgslmin.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false @@ -384,6 +386,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -406,7 +409,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -522,12 +528,67 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslmultifit.la pkginclude_HEADERS = gsl_multifit.h gsl_multifit_nlin.h -INCLUDES = -I$(top_srcdir) -libgslmultifit_la_SOURCES = multilinear.c work.c lmder.c fsolver.c fdfsolver.c fdjac.c convergence.c gradient.c covar.c multirobust.c robust_wfun.c -noinst_HEADERS = lmutil.c lmpar.c lmset.c lmiterate.c qrsolv.c test_brown.c test_enso.c test_filip.c test_fn.c test_hahn1.c test_kirby2.c test_longley.c test_nelson.c test_pontius.c test_estimator.c +AM_CPPFLAGS = -I$(top_srcdir) +libgslmultifit_la_SOURCES = gcv.c multilinear.c multiwlinear.c work.c lmniel.c lmder.c fsolver.c fdfsolver.c fdfridge.c fdjac.c convergence.c gradient.c covar.c multirobust.c robust_wfun.c multireg.c +noinst_HEADERS = \ +linear_common.c \ +lmutil.c \ +lmpar.c \ +lmset.c \ +lmiterate.c \ +lmmisc.c \ +qrsolv.c \ +test_bard.c \ +test_beale.c \ +test_biggs.c \ +test_box.c \ +test_boxbod.c \ +test_brown1.c \ +test_brown2.c \ +test_brown3.c \ +test_eckerle.c \ +test_enso.c \ +test_estimator.c \ +test_exp1.c \ +test_filip.c \ +test_gaussian.c \ +test_hahn1.c \ +test_helical.c \ +test_jennrich.c \ +test_kirby2.c \ +test_kowalik.c \ +test_lin1.c \ +test_lin2.c \ +test_lin3.c \ +test_linear.c \ +test_longley.c \ +test_meyer.c \ +test_meyerscal.c \ +test_nelson.c \ +test_nonlinear.c \ +test_osborne.c \ +test_penalty1.c \ +test_penalty2.c \ +test_pontius.c \ +test_powell1.c \ +test_powell2.c \ +test_powell3.c \ +test_rat42.c \ +test_rat43.c \ +test_reg.c \ +test_rosenbrock.c \ +test_rosenbrocke.c \ +test_roth.c \ +test_shaw.c \ +test_thurber.c \ +test_vardim.c \ +test_watson.c \ +test_wnlin.c \ +test_wood.c + TESTS = $(check_PROGRAMS) test_SOURCES = test.c -test_LDADD = libgslmultifit.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../sort/libgslsort.la ../statistics/libgslstatistics.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la +test_LDADD = libgslmultifit.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../sort/libgslsort.la ../statistics/libgslstatistics.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la ../rng/libgslrng.la ../specfunc/libgslspecfunc.la ../min/libgslmin.la all: all-am .SUFFIXES: @@ -598,13 +659,18 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convergence.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/covar.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdfridge.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdfsolver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdjac.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsolver.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gradient.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lmder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lmniel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multilinear.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multireg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multirobust.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multiwlinear.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/robust_wfun.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/work.Plo@am__quote@ diff -Nru gsl-doc-1.16/multifit/multilinear.c gsl-doc-2.3/multifit/multilinear.c --- gsl-doc-1.16/multifit/multilinear.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/multilinear.c 2016-11-18 19:07:56.000000000 +0000 @@ -1,7 +1,7 @@ /* multifit/multilinear.c * * Copyright (C) 2000, 2007, 2010 Brian Gough - * Copyright (C) 2013 Patrick Alken + * Copyright (C) 2013, 2015 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,170 +26,11 @@ #include #include -/* Fit - * - * y = X c - * - * where X is an M x N matrix of M observations for N variables. - * - */ +#include "linear_common.c" -static int -multifit_linear_svd (const gsl_matrix * X, - const gsl_vector * y, - double tol, - int balance, - size_t * rank, - gsl_vector * c, - gsl_matrix * cov, - double *chisq, - gsl_multifit_linear_workspace * work) -{ - if (X->size1 != y->size) - { - GSL_ERROR - ("number of observations in y does not match rows of matrix X", - GSL_EBADLEN); - } - else if (X->size2 != c->size) - { - GSL_ERROR ("number of parameters c does not match columns of matrix X", - GSL_EBADLEN); - } - else if (cov->size1 != cov->size2) - { - GSL_ERROR ("covariance matrix is not square", GSL_ENOTSQR); - } - else if (c->size != cov->size1) - { - GSL_ERROR - ("number of parameters does not match size of covariance matrix", - GSL_EBADLEN); - } - else if (X->size1 != work->n || X->size2 != work->p) - { - GSL_ERROR - ("size of workspace does not match size of observation matrix", - GSL_EBADLEN); - } - else if (tol <= 0) - { - GSL_ERROR ("tolerance must be positive", GSL_EINVAL); - } - else - { - const size_t n = X->size1; - const size_t p = X->size2; - - size_t i, j, p_eff; - - gsl_matrix *A = work->A; - gsl_matrix *Q = work->Q; - gsl_matrix *QSI = work->QSI; - gsl_vector *S = work->S; - gsl_vector *xt = work->xt; - gsl_vector *D = work->D; - - /* Copy X to workspace, A <= X */ - - gsl_matrix_memcpy (A, X); - - /* Balance the columns of the matrix A if requested */ - - if (balance) - { - gsl_linalg_balance_columns (A, D); - } - else - { - gsl_vector_set_all (D, 1.0); - } - - /* Decompose A into U S Q^T */ - - gsl_linalg_SV_decomp_mod (A, QSI, Q, S, xt); - - /* Solve y = A c for c */ - - gsl_blas_dgemv (CblasTrans, 1.0, A, y, 0.0, xt); - - /* Scale the matrix Q, Q' = Q S^-1 */ - - gsl_matrix_memcpy (QSI, Q); - - { - double alpha0 = gsl_vector_get (S, 0); - p_eff = 0; - - for (j = 0; j < p; j++) - { - gsl_vector_view column = gsl_matrix_column (QSI, j); - double alpha = gsl_vector_get (S, j); - - if (alpha <= tol * alpha0) { - alpha = 0.0; - } else { - alpha = 1.0 / alpha; - p_eff++; - } - - gsl_vector_scale (&column.vector, alpha); - } - - *rank = p_eff; - } - - gsl_vector_set_zero (c); - - gsl_blas_dgemv (CblasNoTrans, 1.0, QSI, xt, 0.0, c); - - /* Unscale the balancing factors */ - - gsl_vector_div (c, D); - - /* Compute chisq, from residual r = y - X c */ - - { - double s2 = 0, r2 = 0; - - for (i = 0; i < n; i++) - { - double yi = gsl_vector_get (y, i); - gsl_vector_const_view row = gsl_matrix_const_row (X, i); - double y_est, ri; - gsl_blas_ddot (&row.vector, c, &y_est); - ri = yi - y_est; - r2 += ri * ri; - } - - s2 = r2 / (n - p_eff); /* p_eff == rank */ - - *chisq = r2; - - /* Form variance-covariance matrix cov = s2 * (Q S^-1) (Q S^-1)^T */ - - for (i = 0; i < p; i++) - { - gsl_vector_view row_i = gsl_matrix_row (QSI, i); - double d_i = gsl_vector_get (D, i); - - for (j = i; j < p; j++) - { - gsl_vector_view row_j = gsl_matrix_row (QSI, j); - double d_j = gsl_vector_get (D, j); - double s; - - gsl_blas_ddot (&row_i.vector, &row_j.vector, &s); - - gsl_matrix_set (cov, i, j, s * s2 / (d_i * d_j)); - gsl_matrix_set (cov, j, i, s * s2 / (d_i * d_j)); - } - } - } - - return GSL_SUCCESS; - } -} +static int multifit_linear_svd (const gsl_matrix * X, + const int balance, + gsl_multifit_linear_workspace * work); int gsl_multifit_linear (const gsl_matrix * X, @@ -199,268 +40,148 @@ double *chisq, gsl_multifit_linear_workspace * work) { size_t rank; - int status = multifit_linear_svd (X, y, GSL_DBL_EPSILON, 1, &rank, c, - cov, chisq, work); + int status = gsl_multifit_linear_tsvd(X, y, GSL_DBL_EPSILON, c, cov, chisq, &rank, work); + return status; } -/* Handle the general case of the SVD with tolerance and rank */ +/* +gsl_multifit_linear_tsvd() + Solve linear least squares system with truncated SVD -int -gsl_multifit_linear_svd (const gsl_matrix * X, - const gsl_vector * y, - double tol, - size_t * rank, - gsl_vector * c, - gsl_matrix * cov, - double *chisq, gsl_multifit_linear_workspace * work) -{ - int status = multifit_linear_svd (X, y, tol, 1, rank, c, cov, chisq, work); - return status; -} +Inputs: X - least squares matrix, n-by-p + y - right hand side vector, n-by-1 + tol - tolerance for singular value truncation; if + s_j <= tol * s_0 + then it is discarded from series expansion + c - (output) solution vector, p-by-1 + cov - (output) covariance matrix, p-by-p + chisq - (output) cost function chi^2 + rank - (output) effective rank (number of singular values + used in solution) + work - workspace +*/ int -gsl_multifit_linear_usvd (const gsl_matrix * X, +gsl_multifit_linear_tsvd (const gsl_matrix * X, const gsl_vector * y, - double tol, - size_t * rank, + const double tol, gsl_vector * c, gsl_matrix * cov, - double *chisq, gsl_multifit_linear_workspace * work) + double * chisq, + size_t * rank, + gsl_multifit_linear_workspace * work) { - int status = multifit_linear_svd (X, y, tol, 0, rank, c, cov, chisq, work); - return status; -} - -/* General weighted case */ + const size_t n = X->size1; + const size_t p = X->size2; -static int -multifit_wlinear_svd (const gsl_matrix * X, - const gsl_vector * w, - const gsl_vector * y, - double tol, - int balance, - size_t * rank, - gsl_vector * c, - gsl_matrix * cov, - double *chisq, gsl_multifit_linear_workspace * work) -{ - if (X->size1 != y->size) - { - GSL_ERROR - ("number of observations in y does not match rows of matrix X", - GSL_EBADLEN); - } - else if (X->size2 != c->size) + if (y->size != n) { - GSL_ERROR ("number of parameters c does not match columns of matrix X", - GSL_EBADLEN); + GSL_ERROR("number of observations in y does not match matrix", + GSL_EBADLEN); } - else if (w->size != y->size) + else if (p != c->size) { - GSL_ERROR ("number of weights does not match number of observations", + GSL_ERROR ("number of parameters c does not match matrix", GSL_EBADLEN); } - else if (cov->size1 != cov->size2) - { - GSL_ERROR ("covariance matrix is not square", GSL_ENOTSQR); - } - else if (c->size != cov->size1) - { - GSL_ERROR - ("number of parameters does not match size of covariance matrix", - GSL_EBADLEN); - } - else if (X->size1 != work->n || X->size2 != work->p) + else if (tol <= 0) { - GSL_ERROR - ("size of workspace does not match size of observation matrix", - GSL_EBADLEN); + GSL_ERROR ("tolerance must be positive", GSL_EINVAL); } else { - const size_t n = X->size1; - const size_t p = X->size2; - - size_t i, j, p_eff; + int status; + double rnorm = 0.0, snorm; - gsl_matrix *A = work->A; - gsl_matrix *Q = work->Q; - gsl_matrix *QSI = work->QSI; - gsl_vector *S = work->S; - gsl_vector *t = work->t; - gsl_vector *xt = work->xt; - gsl_vector *D = work->D; + /* compute balanced SVD */ + status = gsl_multifit_linear_bsvd (X, work); + if (status) + return status; - /* Scale X, A = sqrt(w) X */ + status = multifit_linear_solve (X, y, tol, -1.0, rank, + c, &rnorm, &snorm, work); - gsl_matrix_memcpy (A, X); - - for (i = 0; i < n; i++) - { - double wi = gsl_vector_get (w, i); - - if (wi < 0) - wi = 0; - - { - gsl_vector_view row = gsl_matrix_row (A, i); - gsl_vector_scale (&row.vector, sqrt (wi)); - } - } - - /* Balance the columns of the matrix A if requested */ - - if (balance) - { - gsl_linalg_balance_columns (A, D); - } - else - { - gsl_vector_set_all (D, 1.0); - } - - /* Decompose A into U S Q^T */ - - gsl_linalg_SV_decomp_mod (A, QSI, Q, S, xt); - - /* Solve sqrt(w) y = A c for c, by first computing t = sqrt(w) y */ - - for (i = 0; i < n; i++) - { - double wi = gsl_vector_get (w, i); - double yi = gsl_vector_get (y, i); - if (wi < 0) - wi = 0; - gsl_vector_set (t, i, sqrt (wi) * yi); - } - - gsl_blas_dgemv (CblasTrans, 1.0, A, t, 0.0, xt); - - /* Scale the matrix Q, Q' = Q S^-1 */ - - gsl_matrix_memcpy (QSI, Q); + *chisq = rnorm * rnorm; + /* variance-covariance matrix cov = s2 * (Q S^-1) (Q S^-1)^T */ { - double alpha0 = gsl_vector_get (S, 0); - p_eff = 0; - - for (j = 0; j < p; j++) - { - gsl_vector_view column = gsl_matrix_column (QSI, j); - double alpha = gsl_vector_get (S, j); - - if (alpha <= tol * alpha0) { - alpha = 0.0; - } else { - alpha = 1.0 / alpha; - p_eff++; - } - - gsl_vector_scale (&column.vector, alpha); - } - - *rank = p_eff; - } - - gsl_vector_set_zero (c); - - /* Solution */ - - gsl_blas_dgemv (CblasNoTrans, 1.0, QSI, xt, 0.0, c); - - /* Unscale the balancing factors */ - - gsl_vector_div (c, D); - - /* Compute chisq, from residual r = y - X c */ - - { - double r2 = 0; - - for (i = 0; i < n; i++) - { - double yi = gsl_vector_get (y, i); - double wi = gsl_vector_get (w, i); - gsl_vector_const_view row = gsl_matrix_const_row (X, i); - double y_est, ri; - gsl_blas_ddot (&row.vector, c, &y_est); - ri = yi - y_est; - r2 += wi * ri * ri; - } - - *chisq = r2; - - /* Form covariance matrix cov = (X^T W X)^-1 = (Q S^-1) (Q S^-1)^T */ + double r2 = rnorm * rnorm; + double s2 = r2 / (double)(n - *rank); + size_t i, j; + gsl_matrix_view QSI = gsl_matrix_submatrix(work->QSI, 0, 0, p, p); + gsl_vector_view D = gsl_vector_subvector(work->D, 0, p); for (i = 0; i < p; i++) { - gsl_vector_view row_i = gsl_matrix_row (QSI, i); - double d_i = gsl_vector_get (D, i); + gsl_vector_view row_i = gsl_matrix_row (&QSI.matrix, i); + double d_i = gsl_vector_get (&D.vector, i); for (j = i; j < p; j++) { - gsl_vector_view row_j = gsl_matrix_row (QSI, j); - double d_j = gsl_vector_get (D, j); + gsl_vector_view row_j = gsl_matrix_row (&QSI.matrix, j); + double d_j = gsl_vector_get (&D.vector, j); double s; gsl_blas_ddot (&row_i.vector, &row_j.vector, &s); - gsl_matrix_set (cov, i, j, s / (d_i * d_j)); - gsl_matrix_set (cov, j, i, s / (d_i * d_j)); + gsl_matrix_set (cov, i, j, s * s2 / (d_i * d_j)); + gsl_matrix_set (cov, j, i, s * s2 / (d_i * d_j)); } } } - return GSL_SUCCESS; + return status; } } +/* +gsl_multifit_linear_svd() + Perform SVD decomposition of the matrix X and store in work without +balancing +*/ int -gsl_multifit_wlinear (const gsl_matrix * X, - const gsl_vector * w, - const gsl_vector * y, - gsl_vector * c, - gsl_matrix * cov, - double *chisq, gsl_multifit_linear_workspace * work) +gsl_multifit_linear_svd (const gsl_matrix * X, + gsl_multifit_linear_workspace * work) { - size_t rank; - int status = multifit_wlinear_svd (X, w, y, GSL_DBL_EPSILON, 1, &rank, c, - cov, chisq, work); + /* do not balance by default */ + int status = multifit_linear_svd(X, 0, work); + return status; } +/* +gsl_multifit_linear_bsvd() + Perform SVD decomposition of the matrix X and store in work with +balancing +*/ + int -gsl_multifit_wlinear_svd (const gsl_matrix * X, - const gsl_vector * w, - const gsl_vector * y, - double tol, - size_t * rank, - gsl_vector * c, - gsl_matrix * cov, - double *chisq, gsl_multifit_linear_workspace * work) +gsl_multifit_linear_bsvd (const gsl_matrix * X, + gsl_multifit_linear_workspace * work) { - int status = multifit_wlinear_svd (X, w, y, tol, 1, rank, c, - cov, chisq, work); - return status; + int status = multifit_linear_svd(X, 1, work); + return status; } -int -gsl_multifit_wlinear_usvd (const gsl_matrix * X, - const gsl_vector * w, - const gsl_vector * y, - double tol, - size_t * rank, - gsl_vector * c, - gsl_matrix * cov, - double *chisq, gsl_multifit_linear_workspace * work) +size_t +gsl_multifit_linear_rank(const double tol, const gsl_multifit_linear_workspace * work) { - int status = multifit_wlinear_svd (X, w, y, tol, 0, rank, c, - cov, chisq, work); - return status; + double s0 = gsl_vector_get (work->S, 0); + size_t rank = 0; + size_t j; + + for (j = 0; j < work->p; j++) + { + double sj = gsl_vector_get (work->S, j); + + if (sj > tol * s0) + ++rank; + } + return rank; } /* Estimation of values for given x */ @@ -513,6 +234,19 @@ } /* +gsl_multifit_linear_rcond() + Return reciprocal condition number of LS matrix; +gsl_multifit_linear_svd() must first be called to +compute the SVD of X and its reciprocal condition number +*/ + +double +gsl_multifit_linear_rcond (const gsl_multifit_linear_workspace * w) +{ + return w->rcond; +} + +/* gsl_multifit_linear_residuals() Compute vector of residuals from fit @@ -551,3 +285,74 @@ return GSL_SUCCESS; } } /* gsl_multifit_linear_residuals() */ + +/* Perform a SVD decomposition on the least squares matrix X = U S Q^T + * + * Inputs: X - least squares matrix + * balance - 1 to perform column balancing + * work - workspace + * + * Notes: + * 1) On output, + * work->A contains the matrix U + * work->Q contains the matrix Q + * work->S contains the vector of singular values + * 2) The matrix X may have smaller dimensions than the workspace + * in the case of stdform2() - but the dimensions cannot be larger + * 3) On output, work->n and work->p are set to the dimensions of X + * 4) On output, work->rcond is set to the reciprocal condition number of X + */ + +static int +multifit_linear_svd (const gsl_matrix * X, + const int balance, + gsl_multifit_linear_workspace * work) +{ + const size_t n = X->size1; + const size_t p = X->size2; + + if (n > work->nmax || p > work->pmax) + { + GSL_ERROR("observation matrix larger than workspace", GSL_EBADLEN); + } + else + { + gsl_matrix_view A = gsl_matrix_submatrix(work->A, 0, 0, n, p); + gsl_matrix_view Q = gsl_matrix_submatrix(work->Q, 0, 0, p, p); + gsl_matrix_view QSI = gsl_matrix_submatrix(work->QSI, 0, 0, p, p); + gsl_vector_view S = gsl_vector_subvector(work->S, 0, p); + gsl_vector_view xt = gsl_vector_subvector(work->xt, 0, p); + gsl_vector_view D = gsl_vector_subvector(work->D, 0, p); + + /* Copy X to workspace, A <= X */ + + gsl_matrix_memcpy (&A.matrix, X); + + /* Balance the columns of the matrix A if requested */ + + if (balance) + { + gsl_linalg_balance_columns (&A.matrix, &D.vector); + } + else + { + gsl_vector_set_all (&D.vector, 1.0); + } + + /* decompose A into U S Q^T */ + gsl_linalg_SV_decomp_mod (&A.matrix, &QSI.matrix, &Q.matrix, + &S.vector, &xt.vector); + + /* compute reciprocal condition number rcond = smin / smax */ + { + double smin, smax; + gsl_vector_minmax(&S.vector, &smin, &smax); + work->rcond = smin / smax; + } + + work->n = n; + work->p = p; + + return GSL_SUCCESS; + } +} diff -Nru gsl-doc-1.16/multifit/multireg.c gsl-doc-2.3/multifit/multireg.c --- gsl-doc-1.16/multifit/multireg.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/multireg.c 2016-11-25 18:54:30.000000000 +0000 @@ -0,0 +1,1220 @@ +/* multifit/multireg.c + * + * Copyright (C) 2015 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* + * References: + * + * [1] P. C. Hansen & D. P. O'Leary, "The use of the L-curve in + * the regularization of discrete ill-posed problems", SIAM J. Sci. + * Comput. 14 (1993), pp. 1487-1503. + * + * [2] P. C. Hansen, "Discrete Inverse Problems: Insight and Algorithms," + * SIAM Press, 2010. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "linear_common.c" + +int +gsl_multifit_linear_solve (const double lambda, + const gsl_matrix * X, + const gsl_vector * y, + gsl_vector * c, + double *rnorm, + double *snorm, + gsl_multifit_linear_workspace * work) +{ + size_t rank; + int status; + + status = multifit_linear_solve(X, y, GSL_DBL_EPSILON, lambda, &rank, c, + rnorm, snorm, work); + + return status; +} /* gsl_multifit_linear_solve() */ + +/* +gsl_multifit_linear_applyW() + Apply weight matrix to (X,y) LS system + +Inputs: X - least squares matrix n-by-p + w - weight vector n-by-1 or NULL for W = I + y - right hand side n-by-1 + WX - (output) sqrt(W) X, n-by-p + Wy - (output) sqrt(W) y, n-by-1 + +Notes: +1) If w = NULL, on output WX = X and Wy = y +2) It is allowed for WX = X and Wy = y for in-place transform +*/ + +int +gsl_multifit_linear_applyW(const gsl_matrix * X, + const gsl_vector * w, + const gsl_vector * y, + gsl_matrix * WX, + gsl_vector * Wy) +{ + const size_t n = X->size1; + const size_t p = X->size2; + + if (n != y->size) + { + GSL_ERROR("y vector does not match X", GSL_EBADLEN); + } + else if (w != NULL && n != w->size) + { + GSL_ERROR("weight vector does not match X", GSL_EBADLEN); + } + else if (n != WX->size1 || p != WX->size2) + { + GSL_ERROR("WX matrix dimensions do not match X", GSL_EBADLEN); + } + else if (n != Wy->size) + { + GSL_ERROR("Wy vector must be length n", GSL_EBADLEN); + } + else + { + size_t i; + + /* copy WX = X; Wy = y if distinct pointers */ + if (WX != X) + gsl_matrix_memcpy(WX, X); + if (Wy != y) + gsl_vector_memcpy(Wy, y); + + if (w != NULL) + { + /* construct WX = sqrt(W) X and Wy = sqrt(W) y */ + for (i = 0; i < n; ++i) + { + double wi = gsl_vector_get(w, i); + double swi; + gsl_vector_view row = gsl_matrix_row(WX, i); + double *yi = gsl_vector_ptr(Wy, i); + + if (wi < 0.0) + wi = 0.0; + + swi = sqrt(wi); + gsl_vector_scale(&row.vector, swi); + *yi *= swi; + } + } + + return GSL_SUCCESS; + } +} + +/* +gsl_multifit_linear_wstdform1() + Using regularization matrix +L = diag(l_1,l_2,...,l_p), transform to Tikhonov standard form: + +X~ = sqrt(W) X L^{-1} +y~ = sqrt(W) y +c~ = L c + +Inputs: L - Tikhonov matrix as a vector of diagonal elements p-by-1; + or NULL for L = I + X - least squares matrix n-by-p + y - right hand side vector n-by-1 + w - weight vector n-by-1; or NULL for W = I + Xs - least squares matrix in standard form X~ n-by-p + ys - right hand side vector in standard form y~ n-by-1 + work - workspace + +Return: success/error + +Notes: +1) It is allowed for X = Xs and y = ys +*/ + +int +gsl_multifit_linear_wstdform1 (const gsl_vector * L, + const gsl_matrix * X, + const gsl_vector * w, + const gsl_vector * y, + gsl_matrix * Xs, + gsl_vector * ys, + gsl_multifit_linear_workspace * work) +{ + const size_t n = X->size1; + const size_t p = X->size2; + + if (n > work->nmax || p > work->pmax) + { + GSL_ERROR("observation matrix larger than workspace", GSL_EBADLEN); + } + else if (L != NULL && p != L->size) + { + GSL_ERROR("L vector does not match X", GSL_EBADLEN); + } + else if (n != y->size) + { + GSL_ERROR("y vector does not match X", GSL_EBADLEN); + } + else if (w != NULL && n != w->size) + { + GSL_ERROR("weight vector does not match X", GSL_EBADLEN); + } + else if (n != Xs->size1 || p != Xs->size2) + { + GSL_ERROR("Xs matrix dimensions do not match X", GSL_EBADLEN); + } + else if (n != ys->size) + { + GSL_ERROR("ys vector must be length n", GSL_EBADLEN); + } + else + { + int status = GSL_SUCCESS; + + /* compute Xs = sqrt(W) X and ys = sqrt(W) y */ + status = gsl_multifit_linear_applyW(X, w, y, Xs, ys); + if (status) + return status; + + if (L != NULL) + { + size_t j; + + /* construct X~ = sqrt(W) X * L^{-1} matrix */ + for (j = 0; j < p; ++j) + { + gsl_vector_view Xj = gsl_matrix_column(Xs, j); + double lj = gsl_vector_get(L, j); + + if (lj == 0.0) + { + GSL_ERROR("L matrix is singular", GSL_EDOM); + } + + gsl_vector_scale(&Xj.vector, 1.0 / lj); + } + } + + return status; + } +} + +/* +gsl_multifit_linear_stdform1() + Using regularization matrix L = diag(l_1,l_2,...,l_p), +and W = I, transform to Tikhonov standard form: + +X~ = X L^{-1} +y~ = y +c~ = L c + +Inputs: L - Tikhonov matrix as a vector of diagonal elements p-by-1 + X - least squares matrix n-by-p + y - right hand side vector n-by-1 + Xs - least squares matrix in standard form X~ n-by-p + ys - right hand side vector in standard form y~ n-by-1 + work - workspace + +Return: success/error + +Notes: +1) It is allowed for X = Xs +*/ + +int +gsl_multifit_linear_stdform1 (const gsl_vector * L, + const gsl_matrix * X, + const gsl_vector * y, + gsl_matrix * Xs, + gsl_vector * ys, + gsl_multifit_linear_workspace * work) +{ + int status; + + status = gsl_multifit_linear_wstdform1(L, X, NULL, y, Xs, ys, work); + + return status; +} + +int +gsl_multifit_linear_L_decomp (gsl_matrix * L, gsl_vector * tau) +{ + const size_t m = L->size1; + const size_t p = L->size2; + int status; + + if (tau->size != GSL_MIN(m, p)) + { + GSL_ERROR("tau vector must be min(m,p)", GSL_EBADLEN); + } + else if (m >= p) + { + /* square or tall L matrix */ + status = gsl_linalg_QR_decomp(L, tau); + return status; + } + else + { + /* more columns than rows, compute qr(L^T) */ + gsl_matrix_view LTQR = gsl_matrix_view_array(L->data, p, m); + gsl_matrix *LT = gsl_matrix_alloc(p, m); + + /* XXX: use temporary storage due to difficulties in transforming + * a rectangular matrix in-place */ + gsl_matrix_transpose_memcpy(LT, L); + gsl_matrix_memcpy(<QR.matrix, LT); + gsl_matrix_free(LT); + + status = gsl_linalg_QR_decomp(<QR.matrix, tau); + + return status; + } +} + +/* +gsl_multifit_linear_wstdform2() + Using regularization matrix L which is m-by-p, transform to Tikhonov +standard form. This routine is separated into two cases: + +Case 1: m >= p, here we can use the QR decomposition of L = QR, and note +that ||L c|| = ||R c|| where R is p-by-p. Therefore, + +X~ = X R^{-1} is n-by-p +y~ = y is n-by-1 +c~ is p-by-1 +M is not used + +Case 2: m < p + +X~ is (n - p + m)-by-m +y~ is (n - p + m)-by-1 +c~ is m-by-1 +M is n-by-p (workspace) + +Inputs: LQR - output from gsl_multifit_linear_L_decomp() + Ltau - output from gsl_multifit_linear_L_decomp() + X - least squares matrix n-by-p + w - weight vector n-by-1; or NULL for W = I + y - right hand side vector n-by-1 + Xs - (output) least squares matrix in standard form + case 1: n-by-p + case 2: (n - p + m)-by-m + ys - (output) right hand side vector in standard form + case 1: n-by-1 + case 2: (n - p + m)-by-1 + M - (output) workspace matrix needed to reconstruct solution vector + case 1: not used + case 2: n-by-p + work - workspace + +Return: success/error + +Notes: +1) If m >= p, on output: + Xs = X R^{-1} + ys = y + +2) If m < p, on output: + M(:,1:pm) contains QR decomposition of A * K_o, needed to reconstruct + solution vector, where pm = p - m; M(:,p) contains Householder scalars +*/ + +int +gsl_multifit_linear_wstdform2 (const gsl_matrix * LQR, + const gsl_vector * Ltau, + const gsl_matrix * X, + const gsl_vector * w, + const gsl_vector * y, + gsl_matrix * Xs, + gsl_vector * ys, + gsl_matrix * M, + gsl_multifit_linear_workspace * work) +{ + const size_t m = LQR->size1; + const size_t n = X->size1; + const size_t p = X->size2; + + if (n > work->nmax || p > work->pmax) + { + GSL_ERROR("observation matrix larger than workspace", GSL_EBADLEN); + } + else if (p != LQR->size2) + { + GSL_ERROR("LQR and X matrices have different numbers of columns", GSL_EBADLEN); + } + else if (n != y->size) + { + GSL_ERROR("y vector does not match X", GSL_EBADLEN); + } + else if (w != NULL && n != w->size) + { + GSL_ERROR("weights vector must be length n", GSL_EBADLEN); + } + else if (m >= p) /* square or tall L matrix */ + { + /* the sizes of Xs and ys depend on whether m >= p or m < p */ + if (n != Xs->size1 || p != Xs->size2) + { + GSL_ERROR("Xs matrix must be n-by-p", GSL_EBADLEN); + } + else if (n != ys->size) + { + GSL_ERROR("ys vector must have length n", GSL_EBADLEN); + } + else + { + int status; + size_t i; + gsl_matrix_const_view R = gsl_matrix_const_submatrix(LQR, 0, 0, p, p); + + /* compute Xs = sqrt(W) X and ys = sqrt(W) y */ + status = gsl_multifit_linear_applyW(X, w, y, Xs, ys); + if (status) + return status; + + /* compute X~ = X R^{-1} using QR decomposition of L */ + for (i = 0; i < n; ++i) + { + gsl_vector_view v = gsl_matrix_row(Xs, i); + + /* solve: R^T y = X_i */ + gsl_blas_dtrsv(CblasUpper, CblasTrans, CblasNonUnit, &R.matrix, &v.vector); + } + + return GSL_SUCCESS; + } + } + else /* L matrix with m < p */ + { + const size_t pm = p - m; + const size_t npm = n - pm; + + /* + * This code closely follows section 2.6.1 of Hansen's + * "Regularization Tools" manual + */ + + if (npm != Xs->size1 || m != Xs->size2) + { + GSL_ERROR("Xs matrix must be (n-p+m)-by-m", GSL_EBADLEN); + } + else if (npm != ys->size) + { + GSL_ERROR("ys vector must be of length (n-p+m)", GSL_EBADLEN); + } + else if (n != M->size1 || p != M->size2) + { + GSL_ERROR("M matrix must be n-by-p", GSL_EBADLEN); + } + else + { + int status; + gsl_matrix_view A = gsl_matrix_submatrix(work->A, 0, 0, n, p); + gsl_vector_view b = gsl_vector_subvector(work->t, 0, n); + + gsl_matrix_view LTQR = gsl_matrix_view_array(LQR->data, p, m); /* qr(L^T) */ + gsl_matrix_view Rp = gsl_matrix_view_array(LQR->data, m, m); /* R factor of L^T */ + gsl_vector_const_view LTtau = gsl_vector_const_subvector(Ltau, 0, m); + + /* + * M(:,1:p-m) will hold QR decomposition of A K_o; M(:,p) will hold + * Householder scalars + */ + gsl_matrix_view MQR = gsl_matrix_submatrix(M, 0, 0, n, pm); + gsl_vector_view Mtau = gsl_matrix_subcolumn(M, p - 1, 0, GSL_MIN(n, pm)); + + gsl_matrix_view AKo, AKp, HqTAKp; + gsl_vector_view v; + size_t i; + + /* compute A = sqrt(W) X and b = sqrt(W) y */ + status = gsl_multifit_linear_applyW(X, w, y, &A.matrix, &b.vector); + if (status) + return status; + + /* compute: A <- A K = [ A K_p ; A K_o ] */ + gsl_linalg_QR_matQ(<QR.matrix, <tau.vector, &A.matrix); + AKp = gsl_matrix_submatrix(&A.matrix, 0, 0, n, m); + AKo = gsl_matrix_submatrix(&A.matrix, 0, m, n, pm); + + /* compute QR decomposition [H,T] = qr(A * K_o) and store in M */ + gsl_matrix_memcpy(&MQR.matrix, &AKo.matrix); + gsl_linalg_QR_decomp(&MQR.matrix, &Mtau.vector); + + /* AKp currently contains A K_p; apply H^T from the left to get H^T A K_p */ + gsl_linalg_QR_QTmat(&MQR.matrix, &Mtau.vector, &AKp.matrix); + + /* the last npm rows correspond to H_q^T A K_p */ + HqTAKp = gsl_matrix_submatrix(&AKp.matrix, pm, 0, npm, m); + + /* solve: Xs R_p^T = H_q^T A K_p for Xs */ + gsl_matrix_memcpy(Xs, &HqTAKp.matrix); + for (i = 0; i < npm; ++i) + { + gsl_vector_view x = gsl_matrix_row(Xs, i); + gsl_blas_dtrsv(CblasUpper, CblasNoTrans, CblasNonUnit, &Rp.matrix, &x.vector); + } + + /* + * compute: ys = H_q^T b; this is equivalent to computing + * the last q elements of H^T b (q = npm) + */ + v = gsl_vector_subvector(&b.vector, pm, npm); + gsl_linalg_QR_QTvec(&MQR.matrix, &Mtau.vector, &b.vector); + gsl_vector_memcpy(ys, &v.vector); + + return GSL_SUCCESS; + } + } +} + +int +gsl_multifit_linear_stdform2 (const gsl_matrix * LQR, + const gsl_vector * Ltau, + const gsl_matrix * X, + const gsl_vector * y, + gsl_matrix * Xs, + gsl_vector * ys, + gsl_matrix * M, + gsl_multifit_linear_workspace * work) +{ + int status; + + status = gsl_multifit_linear_wstdform2(LQR, Ltau, X, NULL, y, Xs, ys, M, work); + + return status; +} + +/* +gsl_multifit_linear_genform1() + Backtransform regularized solution vector using matrix +L = diag(L) +*/ + +int +gsl_multifit_linear_genform1 (const gsl_vector * L, + const gsl_vector * cs, + gsl_vector * c, + gsl_multifit_linear_workspace * work) +{ + if (L->size > work->pmax) + { + GSL_ERROR("L vector does not match workspace", GSL_EBADLEN); + } + else if (L->size != cs->size) + { + GSL_ERROR("cs vector does not match L", GSL_EBADLEN); + } + else if (L->size != c->size) + { + GSL_ERROR("c vector does not match L", GSL_EBADLEN); + } + else + { + /* compute true solution vector c = L^{-1} c~ */ + gsl_vector_memcpy(c, cs); + gsl_vector_div(c, L); + + return GSL_SUCCESS; + } +} + +/* +gsl_multifit_linear_wgenform2() + Backtransform regularized solution vector in standard form to recover +original vector + +Inputs: LQR - output from gsl_multifit_linear_L_decomp() + Ltau - output from gsl_multifit_linear_L_decomp() + X - original least squares matrix n-by-p + w - original weight vector n-by-1 or NULL for W = I + y - original rhs vector n-by-1 + cs - standard form solution vector + c - (output) original solution vector p-by-1 + M - matrix computed by gsl_multifit_linear_wstdform2() + work - workspace +*/ + +int +gsl_multifit_linear_wgenform2 (const gsl_matrix * LQR, + const gsl_vector * Ltau, + const gsl_matrix * X, + const gsl_vector * w, + const gsl_vector * y, + const gsl_vector * cs, + const gsl_matrix * M, + gsl_vector * c, + gsl_multifit_linear_workspace * work) +{ + const size_t m = LQR->size1; + const size_t n = X->size1; + const size_t p = X->size2; + + if (n > work->nmax || p > work->pmax) + { + GSL_ERROR("X matrix does not match workspace", GSL_EBADLEN); + } + else if (p != LQR->size2) + { + GSL_ERROR("LQR matrix does not match X", GSL_EBADLEN); + } + else if (p != c->size) + { + GSL_ERROR("c vector does not match X", GSL_EBADLEN); + } + else if (w != NULL && n != w->size) + { + GSL_ERROR("w vector does not match X", GSL_EBADLEN); + } + else if (n != y->size) + { + GSL_ERROR("y vector does not match X", GSL_EBADLEN); + } + else if (m >= p) /* square or tall L matrix */ + { + if (p != cs->size) + { + GSL_ERROR("cs vector must be length p", GSL_EBADLEN); + } + else + { + int s; + gsl_matrix_const_view R = gsl_matrix_const_submatrix(LQR, 0, 0, p, p); /* R factor of L */ + + /* solve R c = cs for true solution c, using QR decomposition of L */ + gsl_vector_memcpy(c, cs); + s = gsl_blas_dtrsv(CblasUpper, CblasNoTrans, CblasNonUnit, &R.matrix, c); + + return s; + } + } + else /* rectangular L matrix with m < p */ + { + if (m != cs->size) + { + GSL_ERROR("cs vector must be length m", GSL_EBADLEN); + } + else if (n != M->size1 || p != M->size2) + { + GSL_ERROR("M matrix must be size n-by-p", GSL_EBADLEN); + } + else + { + int status; + const size_t pm = p - m; + gsl_matrix_view A = gsl_matrix_submatrix(work->A, 0, 0, n, p); + gsl_vector_view b = gsl_vector_subvector(work->t, 0, n); + gsl_matrix_view Rp = gsl_matrix_view_array(LQR->data, m, m); /* R_p */ + gsl_matrix_view LTQR = gsl_matrix_view_array(LQR->data, p, m); + gsl_vector_const_view LTtau = gsl_vector_const_subvector(Ltau, 0, m); + gsl_matrix_const_view MQR = gsl_matrix_const_submatrix(M, 0, 0, n, pm); + gsl_vector_const_view Mtau = gsl_matrix_const_subcolumn(M, p - 1, 0, GSL_MIN(n, pm)); + gsl_matrix_const_view To = gsl_matrix_const_submatrix(&MQR.matrix, 0, 0, pm, pm); + gsl_vector_view workp = gsl_vector_subvector(work->xt, 0, p); + gsl_vector_view v1, v2; + + /* compute A = sqrt(W) X and b = sqrt(W) y */ + status = gsl_multifit_linear_applyW(X, w, y, &A.matrix, &b.vector); + if (status) + return status; + + /* initialize c to zero */ + gsl_vector_set_zero(c); + + /* compute c = L_inv cs = K_p R_p^{-T} cs */ + + /* set c(1:m) = R_p^{-T} cs */ + v1 = gsl_vector_subvector(c, 0, m); + gsl_vector_memcpy(&v1.vector, cs); + gsl_blas_dtrsv(CblasUpper, CblasTrans, CblasNonUnit, &Rp.matrix, &v1.vector); + + /* c <- K R_p^{-T} cs = [ K_p R_p^{_T} cs ; 0 ] */ + gsl_linalg_QR_Qvec(<QR.matrix, <tau.vector, c); + + /* compute: b1 = b - A L_inv cs */ + gsl_blas_dgemv(CblasNoTrans, -1.0, &A.matrix, c, 1.0, &b.vector); + + /* compute: b2 = H^T b1 */ + gsl_linalg_QR_QTvec(&MQR.matrix, &Mtau.vector, &b.vector); + + /* compute: b3 = T_o^{-1} b2 */ + v1 = gsl_vector_subvector(&b.vector, 0, pm); + gsl_blas_dtrsv(CblasUpper, CblasNoTrans, CblasNonUnit, &To.matrix, &v1.vector); + + /* compute: b4 = K_o b3 */ + gsl_vector_set_zero(&workp.vector); + v2 = gsl_vector_subvector(&workp.vector, m, pm); + gsl_vector_memcpy(&v2.vector, &v1.vector); + gsl_linalg_QR_Qvec(<QR.matrix, <tau.vector, &workp.vector); + + /* final solution vector */ + gsl_vector_add(c, &workp.vector); + + return GSL_SUCCESS; + } + } +} + +int +gsl_multifit_linear_genform2 (const gsl_matrix * LQR, + const gsl_vector * Ltau, + const gsl_matrix * X, + const gsl_vector * y, + const gsl_vector * cs, + const gsl_matrix * M, + gsl_vector * c, + gsl_multifit_linear_workspace * work) +{ + int status; + + status = gsl_multifit_linear_wgenform2(LQR, Ltau, X, NULL, y, cs, M, c, work); + + return status; +} + +/* +gsl_multifit_linear_lreg() + Calculate regularization parameters to use in L-curve +analysis + +Inputs: smin - smallest singular value of LS system + smax - largest singular value of LS system > 0 + reg_param - (output) vector of regularization parameters + derived from singular values + +Return: success/error +*/ + +int +gsl_multifit_linear_lreg (const double smin, const double smax, + gsl_vector * reg_param) +{ + if (smax <= 0.0) + { + GSL_ERROR("smax must be positive", GSL_EINVAL); + } + else + { + const size_t N = reg_param->size; + + /* smallest regularization parameter */ + const double smin_ratio = 16.0 * GSL_DBL_EPSILON; + const double new_smin = GSL_MAX(smin, smax*smin_ratio); + double ratio; + size_t i; + + gsl_vector_set(reg_param, N - 1, new_smin); + + /* ratio so that reg_param(1) = s(1) */ + ratio = pow(smax / new_smin, 1.0 / ((double)N - 1.0)); + + /* calculate the regularization parameters */ + for (i = N - 1; i > 0 && i--; ) + { + double rp1 = gsl_vector_get(reg_param, i + 1); + gsl_vector_set(reg_param, i, ratio * rp1); + } + + return GSL_SUCCESS; + } +} + +/* +gsl_multifit_linear_lcurve() + Calculate L-curve using regularization parameters estimated +from singular values of least squares matrix + +Inputs: y - right hand side vector + reg_param - (output) vector of regularization parameters + derived from singular values + rho - (output) vector of residual norms ||y - X c|| + eta - (output) vector of solution norms ||lambda c|| + work - workspace + +Return: success/error + +Notes: +1) SVD of X must be computed first by calling multifit_linear_svd(); + work->n and work->p are initialized by this function +*/ + +int +gsl_multifit_linear_lcurve (const gsl_vector * y, + gsl_vector * reg_param, + gsl_vector * rho, gsl_vector * eta, + gsl_multifit_linear_workspace * work) +{ + const size_t n = y->size; + const size_t N = rho->size; /* number of points on L-curve */ + + if (n != work->n) + { + GSL_ERROR("y vector does not match workspace", GSL_EBADLEN); + } + else if (N < 3) + { + GSL_ERROR ("at least 3 points are needed for L-curve analysis", + GSL_EBADLEN); + } + else if (N != eta->size) + { + GSL_ERROR ("size of rho and eta vectors do not match", + GSL_EBADLEN); + } + else if (reg_param->size != eta->size) + { + GSL_ERROR ("size of reg_param and eta vectors do not match", + GSL_EBADLEN); + } + else + { + int status = GSL_SUCCESS; + const size_t p = work->p; + + size_t i, j; + + gsl_matrix_view A = gsl_matrix_submatrix(work->A, 0, 0, n, p); + gsl_vector_view S = gsl_vector_subvector(work->S, 0, p); + gsl_vector_view xt = gsl_vector_subvector(work->xt, 0, p); + gsl_vector_view workp = gsl_matrix_subcolumn(work->QSI, 0, 0, p); + gsl_vector_view workp2 = gsl_vector_subvector(work->D, 0, p); /* D isn't used for regularized problems */ + + const double smax = gsl_vector_get(&S.vector, 0); + const double smin = gsl_vector_get(&S.vector, p - 1); + + double dr; /* residual error from projection */ + double normy = gsl_blas_dnrm2(y); + double normUTy; + + /* compute projection xt = U^T y */ + gsl_blas_dgemv (CblasTrans, 1.0, &A.matrix, y, 0.0, &xt.vector); + + normUTy = gsl_blas_dnrm2(&xt.vector); + dr = normy*normy - normUTy*normUTy; + + /* calculate regularization parameters */ + gsl_multifit_linear_lreg(smin, smax, reg_param); + + for (i = 0; i < N; ++i) + { + double lambda = gsl_vector_get(reg_param, i); + double lambda_sq = lambda * lambda; + + for (j = 0; j < p; ++j) + { + double sj = gsl_vector_get(&S.vector, j); + double xtj = gsl_vector_get(&xt.vector, j); + double f = sj / (sj*sj + lambda_sq); + + gsl_vector_set(&workp.vector, j, f * xtj); + gsl_vector_set(&workp2.vector, j, (1.0 - sj*f) * xtj); + } + + gsl_vector_set(eta, i, gsl_blas_dnrm2(&workp.vector)); + gsl_vector_set(rho, i, gsl_blas_dnrm2(&workp2.vector)); + } + + if (n > p && dr > 0.0) + { + /* add correction to residual norm (see eqs 6-7 of [1]) */ + for (i = 0; i < N; ++i) + { + double rhoi = gsl_vector_get(rho, i); + double *ptr = gsl_vector_ptr(rho, i); + + *ptr = sqrt(rhoi*rhoi + dr); + } + } + + /* restore D to identity matrix */ + gsl_vector_set_all(work->D, 1.0); + + return status; + } +} /* gsl_multifit_linear_lcurve() */ + +/* +gsl_multifit_linear_lcorner() + Determine point on L-curve of maximum curvature. For each +set of 3 points on the L-curve, the circle which passes through +the 3 points is computed. The radius of the circle is then used +as an estimate of the curvature at the middle point. The point +with maximum curvature is then selected. + +Inputs: rho - vector of residual norms ||A x - b|| + eta - vector of solution norms ||L x|| + idx - (output) index i such that + (log(rho(i)),log(eta(i))) is the point of + maximum curvature + +Return: success/error +*/ + +int +gsl_multifit_linear_lcorner(const gsl_vector *rho, + const gsl_vector *eta, + size_t *idx) +{ + const size_t n = rho->size; + + if (n < 3) + { + GSL_ERROR ("at least 3 points are needed for L-curve analysis", + GSL_EBADLEN); + } + else if (n != eta->size) + { + GSL_ERROR ("size of rho and eta vectors do not match", + GSL_EBADLEN); + } + else + { + int s = GSL_SUCCESS; + size_t i; + double x1, y1; /* first point of triangle on L-curve */ + double x2, y2; /* second point of triangle on L-curve */ + double rmin = -1.0; /* minimum radius of curvature */ + + /* initial values */ + x1 = log(gsl_vector_get(rho, 0)); + y1 = log(gsl_vector_get(eta, 0)); + + x2 = log(gsl_vector_get(rho, 1)); + y2 = log(gsl_vector_get(eta, 1)); + + for (i = 1; i < n - 1; ++i) + { + /* + * The points (x1,y1), (x2,y2), (x3,y3) are the previous, + * current, and next point on the L-curve. We will find + * the circle which fits these 3 points and take its radius + * as an estimate of the curvature at this point. + */ + double x3 = log(gsl_vector_get(rho, i + 1)); + double y3 = log(gsl_vector_get(eta, i + 1)); + + double x21 = x2 - x1; + double y21 = y2 - y1; + double x31 = x3 - x1; + double y31 = y3 - y1; + double h21 = x21*x21 + y21*y21; + double h31 = x31*x31 + y31*y31; + double d = fabs(2.0 * (x21*y31 - x31*y21)); + double r = sqrt(h21*h31*((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2))) / d; + + /* if d =~ 0 then there are nearly colinear points */ + if (gsl_finite(r)) + { + /* check for smallest radius of curvature */ + if (r < rmin || rmin < 0.0) + { + rmin = r; + *idx = i; + } + } + + /* update previous/current L-curve values */ + x1 = x2; + y1 = y2; + x2 = x3; + y2 = y3; + } + + /* check if a minimum radius was found */ + if (rmin < 0.0) + { + /* possibly co-linear points */ + GSL_ERROR("failed to find minimum radius", GSL_EINVAL); + } + + return s; + } +} /* gsl_multifit_linear_lcorner() */ + +/* +gsl_multifit_linear_lcorner2() + Determine point on L-curve (lambda^2, ||c||^2) of maximum curvature. +For each set of 3 points on the L-curve, the circle which passes through +the 3 points is computed. The radius of the circle is then used +as an estimate of the curvature at the middle point. The point +with maximum curvature is then selected. + +This routine is based on the paper + +M. Rezghi and S. M. Hosseini, "A new variant of L-curve for Tikhonov +regularization", J. Comp. App. Math., 231 (2009). + +Inputs: reg_param - vector of regularization parameters + eta - vector of solution norms ||L x|| + idx - (output) index i such that + (lambda(i)^2,eta(i)^2) is the point of + maximum curvature + +Return: success/error +*/ + +int +gsl_multifit_linear_lcorner2(const gsl_vector *reg_param, + const gsl_vector *eta, + size_t *idx) +{ + const size_t n = reg_param->size; + + if (n < 3) + { + GSL_ERROR ("at least 3 points are needed for L-curve analysis", + GSL_EBADLEN); + } + else if (n != eta->size) + { + GSL_ERROR ("size of reg_param and eta vectors do not match", + GSL_EBADLEN); + } + else + { + int s = GSL_SUCCESS; + size_t i; + double x1, y1; /* first point of triangle on L-curve */ + double x2, y2; /* second point of triangle on L-curve */ + double rmin = -1.0; /* minimum radius of curvature */ + + /* initial values */ + x1 = gsl_vector_get(reg_param, 0); + x1 *= x1; + y1 = gsl_vector_get(eta, 0); + y1 *= y1; + + x2 = gsl_vector_get(reg_param, 1); + x2 *= x2; + y2 = gsl_vector_get(eta, 1); + y2 *= y2; + + for (i = 1; i < n - 1; ++i) + { + /* + * The points (x1,y1), (x2,y2), (x3,y3) are the previous, + * current, and next point on the L-curve. We will find + * the circle which fits these 3 points and take its radius + * as an estimate of the curvature at this point. + */ + double lamip1 = gsl_vector_get(reg_param, i + 1); + double etaip1 = gsl_vector_get(eta, i + 1); + double x3 = lamip1 * lamip1; + double y3 = etaip1 * etaip1; + + double x21 = x2 - x1; + double y21 = y2 - y1; + double x31 = x3 - x1; + double y31 = y3 - y1; + double h21 = x21*x21 + y21*y21; + double h31 = x31*x31 + y31*y31; + double d = fabs(2.0 * (x21*y31 - x31*y21)); + double r = sqrt(h21*h31*((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2))) / d; + + /* if d =~ 0 then there are nearly colinear points */ + if (gsl_finite(r)) + { + /* check for smallest radius of curvature */ + if (r < rmin || rmin < 0.0) + { + rmin = r; + *idx = i; + } + } + + /* update previous/current L-curve values */ + x1 = x2; + y1 = y2; + x2 = x3; + y2 = y3; + } + + /* check if a minimum radius was found */ + if (rmin < 0.0) + { + /* possibly co-linear points */ + GSL_ERROR("failed to find minimum radius", GSL_EINVAL); + } + + return s; + } +} /* gsl_multifit_linear_lcorner2() */ + +#define GSL_MULTIFIT_MAXK 100 + +/* +gsl_multifit_linear_L() + Compute discrete approximation to derivative operator of order +k on a regular grid of p points, ie: L is (p-k)-by-p +*/ + +int +gsl_multifit_linear_Lk(const size_t p, const size_t k, gsl_matrix *L) +{ + if (p <= k) + { + GSL_ERROR("p must be larger than derivative order", GSL_EBADLEN); + } + else if (k >= GSL_MULTIFIT_MAXK - 1) + { + GSL_ERROR("derivative order k too large", GSL_EBADLEN); + } + else if (p - k != L->size1 || p != L->size2) + { + GSL_ERROR("L matrix must be (p-k)-by-p", GSL_EBADLEN); + } + else + { + double c_data[GSL_MULTIFIT_MAXK]; + gsl_vector_view cv = gsl_vector_view_array(c_data, k + 1); + size_t i, j; + + /* zeroth derivative */ + if (k == 0) + { + gsl_matrix_set_identity(L); + return GSL_SUCCESS; + } + + gsl_matrix_set_zero(L); + + gsl_vector_set_zero(&cv.vector); + gsl_vector_set(&cv.vector, 0, -1.0); + gsl_vector_set(&cv.vector, 1, 1.0); + + for (i = 1; i < k; ++i) + { + double cjm1 = 0.0; + + for (j = 0; j < k + 1; ++j) + { + double cj = gsl_vector_get(&cv.vector, j); + + gsl_vector_set(&cv.vector, j, cjm1 - cj); + cjm1 = cj; + } + } + + /* build L, the c_i are the entries on the diagonals */ + for (i = 0; i < k + 1; ++i) + { + gsl_vector_view v = gsl_matrix_superdiagonal(L, i); + double ci = gsl_vector_get(&cv.vector, i); + + gsl_vector_set_all(&v.vector, ci); + } + + return GSL_SUCCESS; + } +} /* gsl_multifit_linear_Lk() */ + +/* +gsl_multifit_linear_Lsobolev() + Construct Sobolev smoothing norm operator + +L = [ a_0 I; a_1 L_1; a_2 L_2; ...; a_k L_k ] + +by computing the Cholesky factor of L^T L + +Inputs: p - number of columns of L + kmax - maximum derivative order (< p) + alpha - vector of weights; alpha_k multiplies L_k, size kmax + 1 + L - (output) upper triangular Sobolev matrix p-by-p, + stored in upper triangle + work - workspace + +Notes: +1) work->Q is used to store intermediate L_k matrices +*/ + +int +gsl_multifit_linear_Lsobolev(const size_t p, const size_t kmax, + const gsl_vector *alpha, gsl_matrix *L, + gsl_multifit_linear_workspace *work) +{ + if (p > work->pmax) + { + GSL_ERROR("p is larger than workspace", GSL_EBADLEN); + } + else if (p <= kmax) + { + GSL_ERROR("p must be larger than derivative order", GSL_EBADLEN); + } + else if (kmax + 1 != alpha->size) + { + GSL_ERROR("alpha must be size kmax + 1", GSL_EBADLEN); + } + else if (p != L->size1) + { + GSL_ERROR("L matrix is wrong size", GSL_EBADLEN); + } + else if (L->size1 != L->size2) + { + GSL_ERROR("L matrix is not square", GSL_ENOTSQR); + } + else + { + int s; + size_t j, k; + gsl_vector_view d = gsl_matrix_diagonal(L); + const double alpha0 = gsl_vector_get(alpha, 0); + + /* initialize L to alpha0^2 I */ + gsl_matrix_set_zero(L); + gsl_vector_add_constant(&d.vector, alpha0 * alpha0); + + for (k = 1; k <= kmax; ++k) + { + gsl_matrix_view Lk = gsl_matrix_submatrix(work->Q, 0, 0, p - k, p); + double ak = gsl_vector_get(alpha, k); + + /* compute a_k L_k */ + s = gsl_multifit_linear_Lk(p, k, &Lk.matrix); + if (s) + return s; + + gsl_matrix_scale(&Lk.matrix, ak); + + /* LTL += L_k^T L_k */ + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &Lk.matrix, 1.0, L); + } + + s = gsl_linalg_cholesky_decomp(L); + if (s) + return s; + + /* copy Cholesky factor to upper triangle and zero out bottom */ + gsl_matrix_transpose_tricpy('L', 1, L, L); + + for (j = 0; j < p; ++j) + { + for (k = 0; k < j; ++k) + gsl_matrix_set(L, j, k, 0.0); + } + + return GSL_SUCCESS; + } +} diff -Nru gsl-doc-1.16/multifit/multirobust.c gsl-doc-2.3/multifit/multirobust.c --- gsl-doc-1.16/multifit/multirobust.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/multirobust.c 2016-08-19 15:37:27.000000000 +0000 @@ -43,7 +43,7 @@ static int robust_test_convergence(const gsl_vector *c_prev, const gsl_vector *c, const double tol); -static double robust_madsigma(const gsl_vector *x, gsl_multifit_robust_workspace *w); +static double robust_madsigma(const gsl_vector *r, const size_t p, gsl_vector *workn); static double robust_robsigma(const gsl_vector *r, const double s, const double tune, gsl_multifit_robust_workspace *w); static double robust_sigma(const double s_ols, const double s_rob, @@ -89,6 +89,7 @@ w->multifit_p = gsl_multifit_linear_alloc(n, p); if (w->multifit_p == 0) { + gsl_multifit_robust_free(w); GSL_ERROR_VAL("failed to allocate space for multifit_linear struct", GSL_ENOMEM, 0); } @@ -96,6 +97,7 @@ w->r = gsl_vector_alloc(n); if (w->r == 0) { + gsl_multifit_robust_free(w); GSL_ERROR_VAL("failed to allocate space for residuals", GSL_ENOMEM, 0); } @@ -103,18 +105,21 @@ w->weights = gsl_vector_alloc(n); if (w->weights == 0) { + gsl_multifit_robust_free(w); GSL_ERROR_VAL("failed to allocate space for weights", GSL_ENOMEM, 0); } w->c_prev = gsl_vector_alloc(p); if (w->c_prev == 0) { + gsl_multifit_robust_free(w); GSL_ERROR_VAL("failed to allocate space for c_prev", GSL_ENOMEM, 0); } w->resfac = gsl_vector_alloc(n); if (w->resfac == 0) { + gsl_multifit_robust_free(w); GSL_ERROR_VAL("failed to allocate space for residual factors", GSL_ENOMEM, 0); } @@ -122,30 +127,35 @@ w->psi = gsl_vector_alloc(n); if (w->psi == 0) { + gsl_multifit_robust_free(w); GSL_ERROR_VAL("failed to allocate space for psi", GSL_ENOMEM, 0); } w->dpsi = gsl_vector_alloc(n); if (w->dpsi == 0) { + gsl_multifit_robust_free(w); GSL_ERROR_VAL("failed to allocate space for dpsi", GSL_ENOMEM, 0); } w->QSI = gsl_matrix_alloc(p, p); if (w->QSI == 0) { + gsl_multifit_robust_free(w); GSL_ERROR_VAL("failed to allocate space for QSI", GSL_ENOMEM, 0); } w->D = gsl_vector_alloc(p); if (w->D == 0) { + gsl_multifit_robust_free(w); GSL_ERROR_VAL("failed to allocate space for D", GSL_ENOMEM, 0); } w->workn = gsl_vector_alloc(n); if (w->workn == 0) { + gsl_multifit_robust_free(w); GSL_ERROR_VAL("failed to allocate space for workn", GSL_ENOMEM, 0); } @@ -212,6 +222,21 @@ return GSL_SUCCESS; } +int +gsl_multifit_robust_maxiter(const size_t maxiter, + gsl_multifit_robust_workspace *w) +{ + if (w->maxiter == 0) + { + GSL_ERROR("maxiter must be greater than 0", GSL_EINVAL); + } + else + { + w->maxiter = maxiter; + return GSL_SUCCESS; + } +} + const char * gsl_multifit_robust_name(const gsl_multifit_robust_workspace *w) { @@ -225,6 +250,49 @@ } /* +gsl_multifit_robust_weights() + Compute iterative weights for given residuals + +Inputs: r - residuals + wts - (output) where to store weights + w_i = r_i / (sigma_mad * tune) + w - workspace + +Return: success/error + +Notes: +1) Sizes of r and wts must be equal +2) Size of r/wts may be less than or equal to w->n, to allow +for computing weights of a subset of data +*/ + +int +gsl_multifit_robust_weights(const gsl_vector *r, gsl_vector *wts, + gsl_multifit_robust_workspace *w) +{ + if (r->size != wts->size) + { + GSL_ERROR("residual vector does not match weight vector size", GSL_EBADLEN); + } + else + { + int s; + double sigma; + + sigma = robust_madsigma(r, w->p, wts); + + /* scale residuals by sigma and tuning factor */ + gsl_vector_memcpy(wts, r); + gsl_vector_scale(wts, 1.0 / (sigma * w->tune)); + + /* compute weights in-place */ + s = w->type->wfun(wts, wts); + + return s; + } +} /* gsl_multifit_robust_weights() */ + +/* gsl_multifit_robust() Perform robust iteratively reweighted linear least squares fit @@ -336,7 +404,7 @@ return s; /* compute estimate of standard deviation using MAD */ - sig = robust_madsigma(w->r, w); + sig = robust_madsigma(w->r, w->p, w->workn); /* scale residuals by standard deviation and tuning parameter */ gsl_vector_scale(w->r, 1.0 / (GSL_MAX(sig, sig_lower) * w->tune)); @@ -362,7 +430,7 @@ } /* compute final MAD sigma */ - w->stats.sigma_mad = robust_madsigma(w->r, w); + w->stats.sigma_mad = robust_madsigma(w->r, w->p, w->workn); /* compute robust estimate of sigma */ w->stats.sigma_rob = robust_robsigma(w->r, w->stats.sigma_mad, w->tune, w); @@ -383,7 +451,7 @@ w->stats.Rsq = 1.0 - ss_err / ss_tot; /* compute adjusted R^2 */ - w->stats.adj_Rsq = 1.0 - (1.0 - w->stats.Rsq) * (n - 1.0) / dof; + w->stats.adj_Rsq = 1.0 - (1.0 - w->stats.Rsq) * ((double)n - 1.0) / dof; /* compute rmse */ w->stats.rmse = sqrt(ss_err / dof); @@ -417,6 +485,68 @@ return s; } +/* +gsl_multifit_robust_residuals() + Compute robust / studentized residuals from fit + +r_i = (y_i - Y_i) / (sigma * sqrt(1 - h_i)) + +Inputs: X - design matrix + y - rhs vector + c - fit coefficients + r - (output) studentized residuals + w - workspace + +Notes: +1) gsl_multifit_robust() must first be called to compute the coefficients +c, the leverage factors in w->resfac, and sigma in w->stats.sigma +*/ + +int +gsl_multifit_robust_residuals(const gsl_matrix * X, const gsl_vector * y, + const gsl_vector * c, gsl_vector * r, + gsl_multifit_robust_workspace * w) +{ + if (X->size1 != y->size) + { + GSL_ERROR + ("number of observations in y does not match rows of matrix X", + GSL_EBADLEN); + } + else if (X->size2 != c->size) + { + GSL_ERROR ("number of parameters c does not match columns of matrix X", + GSL_EBADLEN); + } + else if (y->size != r->size) + { + GSL_ERROR ("number of observations in y does not match number of residuals", + GSL_EBADLEN); + } + else + { + const double sigma = w->stats.sigma; /* previously calculated sigma */ + int s; + size_t i; + + /* compute r = y - X c */ + s = gsl_multifit_linear_residuals(X, y, c, r); + if (s) + return s; + + for (i = 0; i < r->size; ++i) + { + double hfac = gsl_vector_get(w->resfac, i); /* 1/sqrt(1 - h_i) */ + double *ri = gsl_vector_ptr(r, i); + + /* multiply residual by 1 / (sigma * sqrt(1 - h_i)) */ + *ri *= hfac / sigma; + } + + return s; + } +} /* gsl_multifit_robust_residuals() */ + /*********************************** * INTERNAL ROUTINES * ***********************************/ @@ -466,33 +596,37 @@ See: Street et al, 1988 -Inputs: r - vector of residuals - w - workspace +Inputs: r - vector of residuals + p - number of model coefficients (smallest p residuals are + ignored) + workn - workspace of size n = length(r) */ static double -robust_madsigma(const gsl_vector *r, gsl_multifit_robust_workspace *w) +robust_madsigma(const gsl_vector *r, const size_t p, gsl_vector *workn) { - gsl_vector_view v; - double sigma; size_t n = r->size; - const size_t p = w->p; + double sigma; size_t i; + /* allow for the possibility that r->size < w->n */ + gsl_vector_view v1 = gsl_vector_subvector(workn, 0, n); + gsl_vector_view v2; + /* copy |r| into workn */ for (i = 0; i < n; ++i) { - gsl_vector_set(w->workn, i, fabs(gsl_vector_get(r, i))); + gsl_vector_set(&v1.vector, i, fabs(gsl_vector_get(r, i))); } - gsl_sort_vector(w->workn); + gsl_sort_vector(&v1.vector); /* * ignore the smallest p residuals when computing the median * (see Street et al 1988) */ - v = gsl_vector_subvector(w->workn, p - 1, n - p + 1); - sigma = gsl_stats_median_from_sorted_data(v.vector.data, v.vector.stride, v.vector.size) / 0.6745; + v2 = gsl_vector_subvector(&v1.vector, p - 1, n - p + 1); + sigma = gsl_stats_median_from_sorted_data(v2.vector.data, v2.vector.stride, v2.vector.size) / 0.6745; return sigma; } /* robust_madsigma() */ @@ -576,8 +710,8 @@ gsl_multifit_robust_workspace *w) { double sigma; - const size_t p = w->p; - const size_t n = w->n; + const double p = (double) w->p; + const double n = (double) w->n; /* see DuMouchel and O'Brien, sec 4.1 */ sigma = GSL_MAX(s_rob, @@ -602,7 +736,7 @@ robust_covariance(const double sigma, gsl_matrix *cov, gsl_multifit_robust_workspace *w) { - int s = 0; + int status = 0; const size_t p = w->p; const double s2 = sigma * sigma; size_t i, j; @@ -629,5 +763,5 @@ } } - return s; + return status; } /* robust_covariance() */ diff -Nru gsl-doc-1.16/multifit/multiwlinear.c gsl-doc-2.3/multifit/multiwlinear.c --- gsl-doc-1.16/multifit/multiwlinear.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/multiwlinear.c 2016-11-18 19:09:31.000000000 +0000 @@ -0,0 +1,346 @@ +/* multifit/multiwlinear.c + * + * Copyright (C) 2015 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "linear_common.c" + +/* General weighted case */ + +static int +multifit_wlinear_svd (const gsl_matrix * X, + const gsl_vector * w, + const gsl_vector * y, + double tol, + int balance, + size_t * rank, + gsl_vector * c, + gsl_matrix * cov, + double *chisq, gsl_multifit_linear_workspace * work) +{ + if (X->size1 != y->size) + { + GSL_ERROR + ("number of observations in y does not match rows of matrix X", + GSL_EBADLEN); + } + else if (X->size2 != c->size) + { + GSL_ERROR ("number of parameters c does not match columns of matrix X", + GSL_EBADLEN); + } + else if (w->size != y->size) + { + GSL_ERROR ("number of weights does not match number of observations", + GSL_EBADLEN); + } + else if (cov->size1 != cov->size2) + { + GSL_ERROR ("covariance matrix is not square", GSL_ENOTSQR); + } + else if (c->size != cov->size1) + { + GSL_ERROR + ("number of parameters does not match size of covariance matrix", + GSL_EBADLEN); + } + else if (X->size1 != work->n || X->size2 != work->p) + { + GSL_ERROR + ("size of workspace does not match size of observation matrix", + GSL_EBADLEN); + } + else + { + const size_t n = X->size1; + const size_t p = X->size2; + + size_t i, j, p_eff; + + gsl_matrix *A = work->A; + gsl_matrix *Q = work->Q; + gsl_matrix *QSI = work->QSI; + gsl_vector *S = work->S; + gsl_vector *t = work->t; + gsl_vector *xt = work->xt; + gsl_vector *D = work->D; + + /* Scale X, A = sqrt(w) X */ + + gsl_matrix_memcpy (A, X); + + for (i = 0; i < n; i++) + { + double wi = gsl_vector_get (w, i); + + if (wi < 0) + wi = 0; + + { + gsl_vector_view row = gsl_matrix_row (A, i); + gsl_vector_scale (&row.vector, sqrt (wi)); + } + } + + /* Balance the columns of the matrix A if requested */ + + if (balance) + { + gsl_linalg_balance_columns (A, D); + } + else + { + gsl_vector_set_all (D, 1.0); + } + + /* Decompose A into U S Q^T */ + + gsl_linalg_SV_decomp_mod (A, QSI, Q, S, xt); + + /* Solve sqrt(w) y = A c for c, by first computing t = sqrt(w) y */ + + for (i = 0; i < n; i++) + { + double wi = gsl_vector_get (w, i); + double yi = gsl_vector_get (y, i); + if (wi < 0) + wi = 0; + gsl_vector_set (t, i, sqrt (wi) * yi); + } + + gsl_blas_dgemv (CblasTrans, 1.0, A, t, 0.0, xt); + + /* Scale the matrix Q, Q' = Q S^-1 */ + + gsl_matrix_memcpy (QSI, Q); + + { + double s0 = gsl_vector_get (S, 0); + p_eff = 0; + + for (j = 0; j < p; j++) + { + gsl_vector_view column = gsl_matrix_column (QSI, j); + double sj = gsl_vector_get (S, j); + double alpha; + + if (sj <= tol * s0) + { + alpha = 0.0; + } + else + { + alpha = 1.0 / sj; + p_eff++; + } + + gsl_vector_scale (&column.vector, alpha); + } + + *rank = p_eff; + } + + gsl_vector_set_zero (c); + + /* solution */ + gsl_blas_dgemv (CblasNoTrans, 1.0, QSI, xt, 0.0, c); + + /* unscale the balancing factors */ + gsl_vector_div (c, D); + + /* compute chisq, from residual r = y - X c */ + { + double r2 = 0; + + for (i = 0; i < n; i++) + { + double yi = gsl_vector_get (y, i); + double wi = gsl_vector_get (w, i); + gsl_vector_const_view row = gsl_matrix_const_row (X, i); + double y_est, ri; + gsl_blas_ddot (&row.vector, c, &y_est); + ri = yi - y_est; + r2 += wi * ri * ri; + } + + *chisq = r2; + + /* Form covariance matrix cov = (X^T W X)^-1 = (Q S^-1) (Q S^-1)^T */ + + for (i = 0; i < p; i++) + { + gsl_vector_view row_i = gsl_matrix_row (QSI, i); + double d_i = gsl_vector_get (D, i); + + for (j = i; j < p; j++) + { + gsl_vector_view row_j = gsl_matrix_row (QSI, j); + double d_j = gsl_vector_get (D, j); + double s; + + gsl_blas_ddot (&row_i.vector, &row_j.vector, &s); + + gsl_matrix_set (cov, i, j, s / (d_i * d_j)); + gsl_matrix_set (cov, j, i, s / (d_i * d_j)); + } + } + } + + return GSL_SUCCESS; + } +} + +int +gsl_multifit_wlinear (const gsl_matrix * X, + const gsl_vector * w, + const gsl_vector * y, + gsl_vector * c, + gsl_matrix * cov, + double *chisq, gsl_multifit_linear_workspace * work) +{ + size_t rank; + int status = gsl_multifit_wlinear_tsvd(X, w, y, GSL_DBL_EPSILON, c, cov, chisq, &rank, work); + + return status; +} + +int +gsl_multifit_wlinear_tsvd (const gsl_matrix * X, + const gsl_vector * w, + const gsl_vector * y, + const double tol, + gsl_vector * c, + gsl_matrix * cov, + double * chisq, + size_t * rank, + gsl_multifit_linear_workspace * work) +{ + const size_t n = X->size1; + const size_t p = X->size2; + + if (y->size != n) + { + GSL_ERROR("number of observations in y does not match matrix", + GSL_EBADLEN); + } + else if (w->size != n) + { + GSL_ERROR("number of weights in w does not match matrix", + GSL_EBADLEN); + } + else if (p != c->size) + { + GSL_ERROR ("number of parameters c does not match matrix", + GSL_EBADLEN); + } + else if (tol <= 0) + { + GSL_ERROR ("tolerance must be positive", GSL_EINVAL); + } + else + { + int status; + double rnorm, snorm; + gsl_matrix_view A = gsl_matrix_submatrix(work->A, 0, 0, n, p); + gsl_vector_view b = gsl_vector_subvector(work->t, 0, n); + + /* compute A = sqrt(W) X, b = sqrt(W) y */ + status = gsl_multifit_linear_applyW(X, w, y, &A.matrix, &b.vector); + if (status) + return status; + + /* compute SVD of A */ + status = gsl_multifit_linear_bsvd(&A.matrix, work); + if (status) + return status; + + status = multifit_linear_solve(X, &b.vector, tol, 0.0, rank, + c, &rnorm, &snorm, work); + if (status) + return status; + + *chisq = rnorm * rnorm; + + /* variance-covariance matrix cov = s2 * (Q S^-1) (Q S^-1)^T */ + { + const size_t p = X->size2; + size_t i, j; + gsl_matrix_view QSI = gsl_matrix_submatrix(work->QSI, 0, 0, p, p); + gsl_vector_view D = gsl_vector_subvector(work->D, 0, p); + + for (i = 0; i < p; i++) + { + gsl_vector_view row_i = gsl_matrix_row (&QSI.matrix, i); + double d_i = gsl_vector_get (&D.vector, i); + + for (j = i; j < p; j++) + { + gsl_vector_view row_j = gsl_matrix_row (&QSI.matrix, j); + double d_j = gsl_vector_get (&D.vector, j); + double s; + + gsl_blas_ddot (&row_i.vector, &row_j.vector, &s); + + gsl_matrix_set (cov, i, j, s / (d_i * d_j)); + gsl_matrix_set (cov, j, i, s / (d_i * d_j)); + } + } + } + } + + return GSL_SUCCESS; +} + +int +gsl_multifit_wlinear_svd (const gsl_matrix * X, + const gsl_vector * w, + const gsl_vector * y, + double tol, + size_t * rank, + gsl_vector * c, + gsl_matrix * cov, + double *chisq, gsl_multifit_linear_workspace * work) +{ + int status = multifit_wlinear_svd (X, w, y, tol, 1, rank, c, + cov, chisq, work); + return status; + +} + +int +gsl_multifit_wlinear_usvd (const gsl_matrix * X, + const gsl_vector * w, + const gsl_vector * y, + double tol, + size_t * rank, + gsl_vector * c, + gsl_matrix * cov, + double *chisq, gsl_multifit_linear_workspace * work) +{ + int status = multifit_wlinear_svd (X, w, y, tol, 0, rank, c, + cov, chisq, work); + return status; + +} diff -Nru gsl-doc-1.16/multifit/robust_wfun.c gsl-doc-2.3/multifit/robust_wfun.c --- gsl-doc-1.16/multifit/robust_wfun.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/robust_wfun.c 2015-11-03 16:21:55.000000000 +0000 @@ -30,6 +30,12 @@ #define TUNING_OLS (1.0) #define TUNING_WELSCH (2.985) +/* + * Note: for each of the weighting functions below, it + * is safe to call them with in-place parameters, so that + * input/output vectors are the same + */ + static int bisquare(const gsl_vector *r, gsl_vector *w) { diff -Nru gsl-doc-1.16/multifit/test_bard.c gsl-doc-2.3/multifit/test_bard.c --- gsl-doc-1.16/multifit/test_bard.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_bard.c 2016-11-30 21:30:22.000000000 +0000 @@ -0,0 +1,121 @@ +#define bard_N 15 +#define bard_P 3 + +#define bard_NTRIES 3 + +static double bard_x0[bard_P] = { 1.0, 1.0, 1.0 }; + +static double bard_epsrel = 1.0e-8; + +static double bard_Y[bard_N] = { +0.14, 0.18, 0.22, 0.25, 0.29, 0.32, 0.35, 0.39, 0.37, +0.58, 0.73, 0.96, 1.34, 2.10, 4.39 +}; + +static void +bard_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact1 = 8.214877306578963e-03; + const double bard_x1[bard_P] = { 8.241055975623580e-02, + 1.133036092245175, + 2.343695178435405 }; + const double sumsq_exact2 = 17.42869333333333; + const double bard_x2[bard_P] = { 8.406666666666666e-01, + -99999.9, /* -inf */ + -99999.9 }; /* -inf */ + const double *bard_x; + double sumsq_exact; + + if (fabs(x[1]) < 10.0 && fabs(x[2]) < 10.0) + { + bard_x = bard_x1; + sumsq_exact = sumsq_exact1; + } + else + { + bard_x = bard_x2; + sumsq_exact = sumsq_exact2; + } + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < bard_P; ++i) + { + if (bard_x[i] < -90000.0) + continue; + + gsl_test_rel(x[i], bard_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +bard_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < bard_N; ++i) + { + double ui = i + 1.0; + double vi = 16.0 - i - 1.0; + double wi = GSL_MIN(ui, vi); + double yi = bard_Y[i]; + double fi = yi - (x1 + (ui / (x2*vi + x3*wi))); + + gsl_vector_set(f, i, fi); + } + + return GSL_SUCCESS; +} + +static int +bard_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < bard_N; ++i) + { + double ui = i + 1.0; + double vi = 16.0 - i - 1.0; + double wi = GSL_MIN(ui, vi); + double term = x2 * vi + x3 * wi; + + gsl_matrix_set(J, i, 0, -1.0); + gsl_matrix_set(J, i, 1, ui * vi / (term * term)); + gsl_matrix_set(J, i, 2, ui * wi / (term * term)); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf bard_func = +{ + &bard_f, + &bard_df, + NULL, + bard_N, + bard_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem bard_problem = +{ + "bard", + bard_x0, + NULL, + &bard_epsrel, + bard_NTRIES, + &bard_checksol, + &bard_func +}; diff -Nru gsl-doc-1.16/multifit/test_beale.c gsl-doc-2.3/multifit/test_beale.c --- gsl-doc-1.16/multifit/test_beale.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_beale.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,87 @@ +#define beale_N 3 +#define beale_P 2 + +#define beale_NTRIES 1 + +static double beale_x0[beale_P] = { 1.0, 1.0 }; +static double beale_epsrel = 1.0e-12; + +static double beale_Y[beale_N] = { 1.5, 2.25, 2.625 }; + +static void +beale_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + const double beale_x[beale_P] = { 3.0, 0.5 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < beale_P; ++i) + { + gsl_test_rel(x[i], beale_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +beale_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + size_t i; + + for (i = 0; i < beale_N; ++i) + { + double yi = beale_Y[i]; + double term = pow(x2, i + 1.0); + double fi = yi - x1*(1.0 - term); + gsl_vector_set(f, i, fi); + } + + return GSL_SUCCESS; +} + +static int +beale_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + size_t i; + + for (i = 0; i < beale_N; ++i) + { + double term = pow(x2, (double) i); + + gsl_matrix_set(J, i, 0, term*x2 - 1.0); + gsl_matrix_set(J, i, 1, (i + 1.0) * x1 * term); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf beale_func = +{ + &beale_f, + &beale_df, + NULL, + beale_N, + beale_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem beale_problem = +{ + "beale", + beale_x0, + NULL, + &beale_epsrel, + beale_NTRIES, + &beale_checksol, + &beale_func +}; diff -Nru gsl-doc-1.16/multifit/test_biggs.c gsl-doc-2.3/multifit/test_biggs.c --- gsl-doc-1.16/multifit/test_biggs.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_biggs.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,101 @@ +#define biggs_N 6 /* >= p */ +#define biggs_P 6 + +#define biggs_NTRIES 2 + +static double biggs_x0[biggs_P] = { 1.0, 2.0, 1.0, 1.0, 1.0, 1.0 }; +static double biggs_epsrel = 1.0e-9; + +static void +biggs_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + const double sumsq_exact = 0.0; + const double biggs_x[biggs_P] = { 1.0, 10.0, 1.0, 5.0, 4.0, 3.0 }; + const double norm_exact = 12.3288280059380; + gsl_vector_const_view v = gsl_vector_const_view_array(biggs_x, biggs_P); + double norm = gsl_blas_dnrm2(&v.vector); + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + /* + * the solution vector is not unique due to permutations, so test + * the norm instead of individual elements + */ + gsl_test_rel(norm, norm_exact, epsrel, "%s/%s norm", + sname, pname); +} + +static int +biggs_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double x5 = gsl_vector_get(x, 4); + double x6 = gsl_vector_get(x, 5); + size_t i; + + for (i = 0; i < biggs_N; ++i) + { + double ti = 0.1 * (i + 1.0); + double yi = exp(-ti) - 5*exp(-10*ti) + 3*exp(-4*ti); + double fi = x3*exp(-ti*x1) - x4*exp(-ti*x2) + x6*exp(-ti*x5) - yi; + + gsl_vector_set(f, i, fi); + } + + return GSL_SUCCESS; +} + +static int +biggs_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double x5 = gsl_vector_get(x, 4); + double x6 = gsl_vector_get(x, 5); + size_t i; + + for (i = 0; i < biggs_N; ++i) + { + double ti = 0.1 * (i + 1.0); + + gsl_matrix_set(J, i, 0, -ti*x3*exp(-ti*x1)); + gsl_matrix_set(J, i, 1, ti*x4*exp(-ti*x2)); + gsl_matrix_set(J, i, 2, exp(-ti*x1)); + gsl_matrix_set(J, i, 3, -exp(-ti*x2)); + gsl_matrix_set(J, i, 4, -ti*x6*exp(-ti*x5)); + gsl_matrix_set(J, i, 5, exp(-ti*x5)); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf biggs_func = +{ + &biggs_f, + &biggs_df, + NULL, + biggs_N, + biggs_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem biggs_problem = +{ + "biggs", + biggs_x0, + NULL, + &biggs_epsrel, + biggs_NTRIES, + &biggs_checksol, + &biggs_func +}; diff -Nru gsl-doc-1.16/multifit/test_boxbod.c gsl-doc-2.3/multifit/test_boxbod.c --- gsl-doc-1.16/multifit/test_boxbod.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_boxbod.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,106 @@ +#define boxbod_N 6 +#define boxbod_P 2 + +#define boxbod_NTRIES 1 + +static double boxbod_x0[boxbod_P] = { 100.0, 0.75 }; +static double boxbod_epsrel = 1.0e-7; + +static double boxbod_sigma[boxbod_P] = { + 1.2354515176E+01, 1.0455993237E-01 +}; + +static double boxbod_X[boxbod_N] = { 1.0, 2.0, 3.0, 5.0, 7.0, 10.0 }; + +static double boxbod_F[boxbod_N] = { 109.0, 149.0, 149.0, 191.0, + 213.0, 224.0 }; + +static void +boxbod_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 1.1680088766E+03; + const double boxbod_x[boxbod_P] = { 2.1380940889E+02, + 5.4723748542E-01 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < boxbod_P; ++i) + { + gsl_test_rel(x[i], boxbod_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + + +static int +boxbod_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[boxbod_P]; + size_t i; + + for (i = 0; i < boxbod_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < boxbod_N; i++) + { + double xi = boxbod_X[i]; + double yi; + + yi = b[0] * (1.0 - exp(-b[1] * xi)); + gsl_vector_set (f, i, yi - boxbod_F[i]); + } + + return GSL_SUCCESS; +} + +static int +boxbod_df (const gsl_vector * x, void *params, gsl_matrix * df) +{ + double b[boxbod_P]; + size_t i; + + for (i = 0; i < boxbod_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < boxbod_N; i++) + { + double xi = boxbod_X[i]; + double term = exp(-b[1] * xi); + + gsl_matrix_set (df, i, 0, 1.0 - term); + gsl_matrix_set (df, i, 1, b[0] * term * xi); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf boxbod_func = +{ + &boxbod_f, + &boxbod_df, + NULL, + boxbod_N, + boxbod_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem boxbod_problem = +{ + "nist-boxbod", + boxbod_x0, + boxbod_sigma, + &boxbod_epsrel, + boxbod_NTRIES, + &boxbod_checksol, + &boxbod_func +}; diff -Nru gsl-doc-1.16/multifit/test_box.c gsl-doc-2.3/multifit/test_box.c --- gsl-doc-1.16/multifit/test_box.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_box.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,89 @@ +#define box_N 10 /* can be >= p */ +#define box_P 3 + +#define box_NTRIES 1 + +static double box_x0[box_P] = { 0.0, 10.0, 20.0 }; +static double box_epsrel = 1.0e-12; + +static void +box_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + const double box_x[box_P] = { 1.0, 10.0, 1.0 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < box_P; ++i) + { + gsl_test_rel(x[i], box_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +box_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < box_N; ++i) + { + double ti = (i + 1.0) / 10.0; + double fi = exp(-x1*ti) - exp(-x2*ti) - x3*(exp(-ti) - exp(-10.0*ti)); + gsl_vector_set(f, i, fi); + } + + return GSL_SUCCESS; +} + +static int +box_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + size_t i; + + for (i = 0; i < box_N; ++i) + { + double ti = (i + 1.0) / 10.0; + double term1 = exp(-x1*ti); + double term2 = exp(-x2*ti); + double term3 = exp(-10.0*ti) - exp(-ti); + + gsl_matrix_set(J, i, 0, -ti*term1); + gsl_matrix_set(J, i, 1, ti*term2); + gsl_matrix_set(J, i, 2, term3); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf box_func = +{ + &box_f, + &box_df, + NULL, + box_N, + box_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem box_problem = +{ + "box3d", + box_x0, + NULL, + &box_epsrel, + box_NTRIES, + &box_checksol, + &box_func +}; diff -Nru gsl-doc-1.16/multifit/test_brown1.c gsl-doc-2.3/multifit/test_brown1.c --- gsl-doc-1.16/multifit/test_brown1.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_brown1.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,96 @@ +#define brown1_N 20 +#define brown1_P 4 + +#define brown1_NTRIES 3 + +static double brown1_x0[brown1_P] = { 25, 5, -5, -1 }; +static double brown1_epsrel = 1.0e-6; + +static void +brown1_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 8.582220162635628e+04; + const double brown1_x[brown1_P] = { + -1.159443990239263e+01, 1.320363005221244e+01, + -4.034395456782477e-01, 2.367789088597534e-01 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < brown1_P; ++i) + { + gsl_test_rel(x[i], brown1_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +brown1_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x0 = gsl_vector_get (x, 0); + double x1 = gsl_vector_get (x, 1); + double x2 = gsl_vector_get (x, 2); + double x3 = gsl_vector_get (x, 3); + size_t i; + + for (i = 0; i < brown1_N; i++) + { + double ti = 0.2 * (i + 1); + double ui = x0 + x1 * ti - exp (ti); + double vi = x2 + x3 * sin (ti) - cos (ti); + + gsl_vector_set (f, i, ui * ui + vi * vi); + } + + return GSL_SUCCESS; +} + +static int +brown1_df (const gsl_vector * x, void *params, gsl_matrix * df) +{ + double x0 = gsl_vector_get (x, 0); + double x1 = gsl_vector_get (x, 1); + double x2 = gsl_vector_get (x, 2); + double x3 = gsl_vector_get (x, 3); + size_t i; + + for (i = 0; i < brown1_N; i++) + { + double ti = 0.2 * (i + 1); + double ui = x0 + x1 * ti - exp (ti); + double vi = x2 + x3 * sin (ti) - cos (ti); + + gsl_matrix_set (df, i, 0, 2 * ui); + gsl_matrix_set (df, i, 1, 2 * ui * ti); + gsl_matrix_set (df, i, 2, 2 * vi); + gsl_matrix_set (df, i, 3, 2 * vi * sin (ti)); + + } + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf brown1_func = +{ + &brown1_f, + &brown1_df, + NULL, + brown1_N, + brown1_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem brown1_problem = +{ + "brown_dennis", + brown1_x0, + NULL, + &brown1_epsrel, + brown1_NTRIES, + &brown1_checksol, + &brown1_func +}; diff -Nru gsl-doc-1.16/multifit/test_brown2.c gsl-doc-2.3/multifit/test_brown2.c --- gsl-doc-1.16/multifit/test_brown2.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_brown2.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,128 @@ +#define brown2_N 5 +#define brown2_P 5 + +#define brown2_NTRIES 3 + +static double brown2_x0[brown2_P] = { 0.5, 0.5, 0.5, 0.5, 0.5 }; +static double brown2_epsrel = 1.0e-12; + +static void +brown2_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + double sumsq_exact; + double alpha; + const double p = (double) brown2_P; + double alpha1mp, lhs, lastel; + + if (sumsq < 0.5) + { + /* sumsq = 0 case */ + + sumsq_exact = 0.0; + alpha = x[0]; + alpha1mp = pow(alpha, 1.0 - p); + lhs = p*pow(alpha, p) - (p + 1)/alpha1mp; + lastel = alpha1mp; + + gsl_test_rel(lhs, -1.0, epsrel, "%s/%s alpha lhs", + sname, pname); + } + else + { + /* sumsq = 1 case */ + + sumsq_exact = 1.0; + alpha = 0.0; + lastel = p + 1.0; + } + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 1; i < brown2_P - 1; ++i) + { + gsl_test_rel(x[i], alpha, epsrel, "%s/%s i=%zu", + sname, pname, i); + } + + gsl_test_rel(x[brown2_P - 1], lastel, epsrel, "%s/%s last element", + sname, pname); +} + +static int +brown2_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + size_t i; + double sum = -(brown2_N + 1.0); + double prod = 1.0; + + for (i = 0; i < brown2_N; ++i) + { + double xi = gsl_vector_get(x, i); + sum += xi; + prod *= xi; + } + + for (i = 0; i < brown2_N - 1; ++i) + { + double xi = gsl_vector_get(x, i); + gsl_vector_set(f, i, xi + sum); + } + + gsl_vector_set(f, brown2_N - 1, prod - 1.0); + + return GSL_SUCCESS; +} + +static int +brown2_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + size_t i, j; + + for (j = 0; j < brown2_P; ++j) + { + double prod = 1.0; + + for (i = 0; i < brown2_N - 1; i++) + { + double Jij = (i == j) ? 2.0 : 1.0; + gsl_matrix_set(J, i, j, Jij); + } + + for (i = 0; i < brown2_N; i++) + { + if (i != j) + prod *= gsl_vector_get(x, i); + } + + gsl_matrix_set(J, brown2_N - 1, j, prod); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf brown2_func = +{ + &brown2_f, + &brown2_df, + NULL, + brown2_N, + brown2_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem brown2_problem = +{ + "brown_almost_linear", + brown2_x0, + NULL, + &brown2_epsrel, + brown2_NTRIES, + &brown2_checksol, + &brown2_func +}; diff -Nru gsl-doc-1.16/multifit/test_brown3.c gsl-doc-2.3/multifit/test_brown3.c --- gsl-doc-1.16/multifit/test_brown3.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_brown3.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,78 @@ +#define brown3_N 3 +#define brown3_P 2 + +#define brown3_NTRIES 3 + +static double brown3_x0[brown3_P] = { 1.0, 1.0 }; +static double brown3_epsrel = 1.0e-12; + +static void +brown3_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + const double brown3_x[brown3_P] = { 1.0e6, 2.0e-6 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < brown3_P; ++i) + { + gsl_test_rel(x[i], brown3_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +brown3_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + + gsl_vector_set(f, 0, x1 - 1.0e6); + gsl_vector_set(f, 1, x2 - 2.0e-6); + gsl_vector_set(f, 2, x1*x2 - 2.0); + + return GSL_SUCCESS; +} + +static int +brown3_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + + gsl_matrix_set_zero(J); + + gsl_matrix_set(J, 0, 0, 1.0); + gsl_matrix_set(J, 1, 1, 1.0); + gsl_matrix_set(J, 2, 0, x2); + gsl_matrix_set(J, 2, 1, x1); + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf brown3_func = +{ + &brown3_f, + &brown3_df, + NULL, + brown3_N, + brown3_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem brown3_problem = +{ + "brown_badly_scaled", + brown3_x0, + NULL, + &brown3_epsrel, + brown3_NTRIES, + &brown3_checksol, + &brown3_func +}; diff -Nru gsl-doc-1.16/multifit/test_brown.c gsl-doc-2.3/multifit/test_brown.c --- gsl-doc-1.16/multifit/test_brown.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/test_brown.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,113 +0,0 @@ -const size_t brown_N = 20; -const size_t brown_P = 4; - -double brown_X[20][4] = { - {24.3485677, 4.71448798, -2.19486633, 2.69405755}, - {22.4116222, 3.93075538, -1.42344852, 2.5233557}, - {17.88886, 2.9290853, .125174936, -3.96823353}, - {17.3237176, 2.99606803, 2.03285653, 2.28992327}, - {17.0906508, 3.02485425, .296995153, .0876226126}, - {16.578006, 3.1036312, -.18617941, .103262914}, - {15.692993, 3.33088442, .0706406887, 1.05923955}, - {14.3232177, 3.85604218, -2.3762839, -3.09486813}, - {14.1279266, 3.97896121, .446109351, 1.40023753}, - {13.6081961, 4.16435075, -1.51250057, -1.52510626}, - {13.4295245, 4.22697223, -.196985195, .532009293}, - {13.0176117, 4.3579261, -.353131208, .301377627}, - {12.2713535, 4.62398535, -.00183585584, .894170703}, - {11.0316144, 5.13967727, -2.38978772, -2.89510064}, - {10.8807981, 5.24558004, .230495952, 1.27315117}, - {10.4029264, 5.41141257, -1.5116632, -1.47615921}, - {10.2574435, 5.46211045, -.299855732, .451893162}, - {9.87863876, 5.57914292, -.368885288, .358086545}, - {9.1894983, 5.82082741, -.230157969, .621476534}, - {8.00589008, 6.27788753, -1.46022815, -1.33468082} -}; - -double brown_F[20] = { - 2474.05541, - 1924.69004, - 1280.63194, - 1244.81867, - 1190.53739, - 1159.34935, - 1108.44426, - 1090.11073, - 1015.92942, - 1002.43533, - 971.221084, - 949.589435, - 911.359899, - 906.522994, - 840.525729, - 833.950164, - 807.557511, - 791.00924, - 761.09598, - 726.787783, -}; - -double brown_cov[4][4] = { - { 1.8893186910e-01, -4.7099989571e-02, 5.2154168404e-01, 1.6608168209e-02}, - {-4.7099989571e-02, 1.1761534388e-02, -1.2987843074e-01, -4.1615942391e-03}, - { 5.2154168404e-01, -1.2987843074e-01, 1.4653936514e+00, 1.5738321686e-02}, - { 1.6608168209e-02, -4.1615942391e-03, 1.5738321686e-02, 4.2348042340e-02}, -}; - -double brown_x0[4] = { 25, 5, -5, -1 }; - -int -brown_f (const gsl_vector * x, void *params, gsl_vector * f) -{ - double x0 = gsl_vector_get (x, 0); - double x1 = gsl_vector_get (x, 1); - double x2 = gsl_vector_get (x, 2); - double x3 = gsl_vector_get (x, 3); - size_t i; - - for (i = 0; i < 20; i++) - { - double ti = 0.2 * (i + 1); - double ui = x0 + x1 * ti - exp (ti); - double vi = x2 + x3 * sin (ti) - cos (ti); - - gsl_vector_set (f, i, ui * ui + vi * vi); - } - - return GSL_SUCCESS; -} - -int -brown_df (const gsl_vector * x, void *params, gsl_matrix * df) -{ - double x0 = gsl_vector_get (x, 0); - double x1 = gsl_vector_get (x, 1); - double x2 = gsl_vector_get (x, 2); - double x3 = gsl_vector_get (x, 3); - size_t i; - - for (i = 0; i < 20; i++) - { - double ti = 0.2 * (i + 1); - double ui = x0 + x1 * ti - exp (ti); - double vi = x2 + x3 * sin (ti) - cos (ti); - - gsl_matrix_set (df, i, 0, 2 * ui); - gsl_matrix_set (df, i, 1, 2 * ui * ti); - gsl_matrix_set (df, i, 2, 2 * vi); - gsl_matrix_set (df, i, 3, 2 * vi * sin (ti)); - - } - return GSL_SUCCESS; -} - -int -brown_fdf (const gsl_vector * x, void *params, - gsl_vector * f, gsl_matrix * df) -{ - brown_f (x, params, f); - brown_df (x, params, df); - - return GSL_SUCCESS; -} - diff -Nru gsl-doc-1.16/multifit/test.c gsl-doc-2.3/multifit/test.c --- gsl-doc-1.16/multifit/test.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/test.c 2016-12-07 17:55:14.000000000 +0000 @@ -28,278 +28,27 @@ #include #include #include +#include +#include +#include #include -#include "test_longley.c" -#include "test_filip.c" -#include "test_pontius.c" -#include "test_brown.c" -#include "test_enso.c" -#include "test_kirby2.c" -#include "test_hahn1.c" -#include "test_nelson.c" -#include "test_fn.c" -#include "test_estimator.c" - -void -test_lmder (gsl_multifit_function_fdf * f, double x0[], - double * X, double F[], double * cov); - -void -test_fdf (const char * name, gsl_multifit_function_fdf * f, - double x0[], double x[], double sumsq, - double sigma[], double epsrel, double epsrel_sigma); +#include "test_linear.c" +#include "test_nonlinear.c" int main (void) { - double epsrel = 1.0e-5; - double epsrel_sigma = 1.0e-4; - double epsrel_fd = 1.0e-2; - double epsrel_sigma_fd = 1.0e-2; - gsl_multifit_function_fdf f; - gsl_ieee_env_setup(); /* test linear regression */ - test_longley(); - test_filip(); - test_pontius(); - test_estimator(); - - { - f = make_fdf (&brown_f, &brown_df, &brown_fdf, brown_N, brown_P, 0); - test_lmder(&f, brown_x0, &brown_X[0][0], brown_F, &brown_cov[0][0]); - } - - { - f = make_fdf (&enso_f, &enso_df, &enso_fdf, enso_N, enso_P, 0); - test_fdf("nist-ENSO", &f, enso_x0, enso_x, enso_sumsq, enso_sigma, epsrel, epsrel_sigma); - - f = make_fdf (&enso_f, NULL, NULL, enso_N, enso_P, 0); - test_fdf("nist-ENSO", &f, enso_x0, enso_x, enso_sumsq, enso_sigma, epsrel_fd, epsrel_sigma_fd); - - } - - { - f = make_fdf (&kirby2_f, &kirby2_df, &kirby2_fdf, kirby2_N, kirby2_P, 0); - test_fdf("nist-kirby2", &f, kirby2_x0, kirby2_x, kirby2_sumsq, kirby2_sigma, epsrel, epsrel_sigma); + test_linear(); - f = make_fdf (&kirby2_f, NULL, NULL, kirby2_N, kirby2_P, 0); - test_fdf("nist-kirby2", &f, kirby2_x0, kirby2_x, kirby2_sumsq, kirby2_sigma, epsrel_fd, epsrel_sigma_fd); - } - - { - f = make_fdf (&hahn1_f, &hahn1_df, &hahn1_fdf, hahn1_N, hahn1_P, 0); - test_fdf("nist-hahn1", &f, hahn1_x0, hahn1_x, hahn1_sumsq, hahn1_sigma, epsrel, epsrel_sigma); - - f = make_fdf (&hahn1_f, NULL, NULL, hahn1_N, hahn1_P, 0); - test_fdf("nist-hahn1", &f, hahn1_x0, hahn1_x, hahn1_sumsq, hahn1_sigma, epsrel_fd, epsrel_sigma_fd); - } - -#ifdef JUNK - { - f = make_fdf (&nelson_f, &nelson_df, &nelson_fdf, nelson_N, nelson_P, 0); - test_fdf("nist-nelson", &f, nelson_x0, nelson_x, nelson_sumsq, nelson_sigma, epsrel, epsrel_sigma); - } +#if 0 /* fdfsolver interface now deprecated */ + /* test nonlinear regression */ + test_nonlinear(); #endif - /* now summarize the results */ - exit (gsl_test_summary ()); } - - -void -test_lmder (gsl_multifit_function_fdf * f, double x0[], - double * X, double F[], double * cov) -{ - const gsl_multifit_fdfsolver_type *T; - gsl_multifit_fdfsolver *s; - - const size_t n = f->n; - const size_t p = f->p; - - int status; - size_t iter = 0, i; - - gsl_vector_view x = gsl_vector_view_array (x0, p); - - T = gsl_multifit_fdfsolver_lmsder; - s = gsl_multifit_fdfsolver_alloc (T, n, p); - gsl_multifit_fdfsolver_set (s, f, &x.vector); - - do - { - status = gsl_multifit_fdfsolver_iterate (s); - - for (i = 0 ; i < p; i++) - { - gsl_test_rel (gsl_vector_get (s->x, i), X[p*iter+i], 1e-5, - "lmsder, iter=%u, x%u", iter, i); - } - - gsl_test_rel (gsl_blas_dnrm2 (s->f), F[iter], 1e-5, - "lmsder, iter=%u, f", iter); - - iter++; - } - while (iter < 20); - - { - size_t i, j; - gsl_matrix * covar = gsl_matrix_alloc (4, 4); - gsl_multifit_covar (s->J, 0.0, covar); - - for (i = 0; i < 4; i++) - { - for (j = 0; j < 4; j++) - { - gsl_test_rel (gsl_matrix_get(covar,i,j), cov[i*p + j], 1e-7, - "gsl_multifit_covar cov(%d,%d)", i, j) ; - } - } - - gsl_matrix_free (covar); - } - - gsl_multifit_fdfsolver_free (s); - -} - -void -test_fdf (const char * name, gsl_multifit_function_fdf * f, - double x0[], double x_final[], - double f_sumsq, double sigma[], double epsrel, - double epsrel_sigma) -{ - const gsl_multifit_fdfsolver_type *T; - gsl_multifit_fdfsolver *s; - - const size_t n = f->n; - const size_t p = f->p; - - int status; - size_t iter = 0; - - gsl_vector_view x = gsl_vector_view_array (x0, p); - - T = gsl_multifit_fdfsolver_lmsder; - s = gsl_multifit_fdfsolver_alloc (T, n, p); - gsl_multifit_fdfsolver_set (s, f, &x.vector); - - do - { - status = gsl_multifit_fdfsolver_iterate (s); - -#ifdef DEBUG - printf("iter = %d status = %d |f| = %.18e x = \n", - iter, status, gsl_blas_dnrm2 (s->f)); - - gsl_vector_fprintf(stdout, s->x, "%.8e"); -#endif - status = gsl_multifit_test_delta (s->dx, s->x, 0.0, 1e-7); - - iter++; - } - while (status == GSL_CONTINUE && iter < 1000); - - { - size_t i; - gsl_matrix * covar = gsl_matrix_alloc (p, p); - gsl_multifit_covar (s->J, 0.0, covar); - - for (i = 0 ; i < p; i++) - { - gsl_test_rel (gsl_vector_get (s->x, i), x_final[i], epsrel, - "%s, lmsder, x%u", name, i); - } - - - { - double s2 = pow(gsl_blas_dnrm2 (s->f), 2.0); - - gsl_test_rel (s2, f_sumsq, epsrel, "%s, lmsder, |f|^2", name); - - for (i = 0; i < p; i++) - { - double ei = sqrt(s2/(n-p))*sqrt(gsl_matrix_get(covar,i,i)); - gsl_test_rel (ei, sigma[i], epsrel_sigma, - "%s, sigma(%d)", name, i) ; - } - } - - gsl_matrix_free (covar); - } - - /* check higher level driver routine */ - { - size_t i; - - gsl_multifit_fdfsolver_set (s, f, &x.vector); - gsl_multifit_fdfsolver_driver (s, 1000, 0.0, 1.0e-7); - - for (i = 0 ; i < p; i++) - { - gsl_test_rel (gsl_vector_get (s->x, i), x_final[i], epsrel, - "%s, lmsder, x%u", name, i); - } - } - - /* Check that there is no hidden state, restarting should - produce identical results. */ - - { - int status0, status1; - size_t i; - gsl_multifit_fdfsolver *t = gsl_multifit_fdfsolver_alloc (T, n, p); - gsl_multifit_fdfsolver_set (t, f, &x.vector); - - /* do a few extra iterations to stir things up */ - - gsl_multifit_fdfsolver_set (s, f, &x.vector); - - for (i = 0; i < 3; i++) - { - gsl_multifit_fdfsolver_iterate (s); - } - - gsl_multifit_fdfsolver_set (s, f, &x.vector); - - do - { - status0 = gsl_multifit_fdfsolver_iterate (s); - status1 = gsl_multifit_fdfsolver_iterate (t); - - gsl_test_int(status0, status1, "%s, lmsder status after set iter=%u", name, iter); - - for (i = 0; i < p; i++) { - double sxi = gsl_vector_get(s->x,i); - double txi = gsl_vector_get(t->x,i); -#ifdef DEBUG - printf("%d %g %g\n", i, sxi, txi); -#endif - gsl_test_rel(sxi, txi, 1e-15, "%s, lmsder after set, %u/%u", name, iter, i); - } - -#ifdef DEBUG - printf("iter = %d status = %d |f| = %.18e x = \n", - iter, status, gsl_blas_dnrm2 (s->f)); - - gsl_vector_fprintf(stdout, s->x, "%.8e"); -#endif - status0 = gsl_multifit_test_delta (s->dx, s->x, 0.0, 1e-7); - status1 = gsl_multifit_test_delta (t->dx, s->x, 0.0, 1e-7); - - gsl_test_int(status0, status1, "%s, lmsder test delta status after set iter=%u", name, iter); - - iter++; - } - while (status1 == GSL_CONTINUE && iter < 1000); - - gsl_multifit_fdfsolver_free (t); - } - - gsl_multifit_fdfsolver_free (s); -} diff -Nru gsl-doc-1.16/multifit/test_eckerle.c gsl-doc-2.3/multifit/test_eckerle.c --- gsl-doc-1.16/multifit/test_eckerle.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_eckerle.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,124 @@ +#define eckerle_N 35 +#define eckerle_P 3 + +#define eckerle_NTRIES 1 + +static double eckerle_x0[eckerle_P] = { 1.0, 10.0, 500.0 }; +static double eckerle_epsrel = 1.0e-7; + +static double eckerle_sigma[eckerle_P] = { + 1.5408051163E-02, 4.6803020753E-02, 4.6800518816E-02 +}; + +static double eckerle_X[eckerle_N] = { + 400.000000, 405.000000, 410.000000, 415.000000, 420.000000, + 425.000000, 430.000000, 435.000000, 436.500000, 438.000000, + 439.500000, 441.000000, 442.500000, 444.000000, 445.500000, + 447.000000, 448.500000, 450.000000, 451.500000, 453.000000, + 454.500000, 456.000000, 457.500000, 459.000000, 460.500000, + 462.000000, 463.500000, 465.000000, 470.000000, 475.000000, + 480.000000, 485.000000, 490.000000, 495.000000, 500.000000 }; + +static double eckerle_F[eckerle_N] = { + 0.0001575, 0.0001699, 0.0002350, 0.0003102, 0.0004917, + 0.0008710, 0.0017418, 0.0046400, 0.0065895, 0.0097302, + 0.0149002, 0.0237310, 0.0401683, 0.0712559, 0.1264458, + 0.2073413, 0.2902366, 0.3445623, 0.3698049, 0.3668534, + 0.3106727, 0.2078154, 0.1164354, 0.0616764, 0.0337200, + 0.0194023, 0.0117831, 0.0074357, 0.0022732, 0.0008800, + 0.0004579, 0.0002345, 0.0001586, 0.0001143, 0.0000710 }; + +static void +eckerle_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 1.4635887487E-03; + const double eckerle_x[eckerle_P] = { 1.5543827178E+00, + 4.0888321754E+00, + 4.5154121844E+02 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < eckerle_P; ++i) + { + gsl_test_rel(x[i], eckerle_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + + +static int +eckerle_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[eckerle_P]; + size_t i; + + for (i = 0; i < eckerle_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < eckerle_N; i++) + { + double xi = eckerle_X[i]; + double term = xi - b[2]; + double yi; + + yi = b[0] / b[1] * exp(-0.5 * term * term / b[1] / b[1]); + gsl_vector_set (f, i, yi - eckerle_F[i]); + } + + return GSL_SUCCESS; +} + +static int +eckerle_df (const gsl_vector * x, void *params, gsl_matrix * df) +{ + double b[eckerle_P]; + size_t i; + + for (i = 0; i < eckerle_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < eckerle_N; i++) + { + double xi = eckerle_X[i]; + double term1 = xi - b[2]; + double term2 = exp(-0.5 * term1 * term1 / (b[1] * b[1])); + + gsl_matrix_set (df, i, 0, term2 / b[1]); + gsl_matrix_set (df, i, 1, + -b[0] * term2 / (b[1] * b[1]) + b[0] / pow(b[1], 4.0) * term2 * term1 * term1); + gsl_matrix_set (df, i, 2, b[0] / pow(b[1], 3.0) * term1 * term2); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf eckerle_func = +{ + &eckerle_f, + &eckerle_df, + NULL, + eckerle_N, + eckerle_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem eckerle_problem = +{ + "nist-eckerle", + eckerle_x0, + eckerle_sigma, + &eckerle_epsrel, + eckerle_NTRIES, + &eckerle_checksol, + &eckerle_func +}; diff -Nru gsl-doc-1.16/multifit/test_enso.c gsl-doc-2.3/multifit/test_enso.c --- gsl-doc-1.16/multifit/test_enso.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/test_enso.c 2015-11-03 16:21:55.000000000 +0000 @@ -1,23 +1,14 @@ -const size_t enso_N = 168; -const size_t enso_P = 9; +#define enso_N 168 +#define 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 }; +#define enso_NTRIES 1 + +static double enso_x0[enso_P] = { 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; +static double enso_epsrel = 1.0e-3; -double enso_sigma[9] = { +static double enso_sigma[enso_P] = { 1.7488832467E-01, 2.4310052139E-01, 2.4354686618E-01, @@ -29,7 +20,7 @@ 2.5434468893E-01 }; -double enso_F[168] = { +static double enso_F[enso_N] = { 12.90000, 11.30000, 10.60000, @@ -200,19 +191,41 @@ 14.80000 }; +static void +enso_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 7.8853978668E+02; + const double enso_x[enso_P] = { + 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 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < enso_P; ++i) + { + gsl_test_rel(x[i], enso_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + -int +static int enso_f (const gsl_vector * x, void *params, gsl_vector * f) { - double b[9]; + double b[enso_P]; size_t i; - for (i = 0; i < 9; i++) + for (i = 0; i < enso_P; i++) { b[i] = gsl_vector_get(x, i); } - for (i = 0; i < 168; i++) + for (i = 0; i < enso_N; i++) { double t = (i + 1.0); double y; @@ -230,18 +243,18 @@ return GSL_SUCCESS; } -int +static int enso_df (const gsl_vector * x, void *params, gsl_matrix * df) { - double b[9]; + double b[enso_P]; size_t i; - for (i = 0; i < 9; i++) + for (i = 0; i < enso_P; i++) { b[i] = gsl_vector_get(x, i); } - for (i = 0; i < 168; i++) + for (i = 0; i < enso_N; i++) { double t = (i + 1.0); @@ -263,17 +276,25 @@ return GSL_SUCCESS; } -int -enso_fdf (const gsl_vector * x, void *params, - gsl_vector * f, gsl_matrix * df) +static gsl_multifit_function_fdf enso_func = { - enso_f (x, params, f); - enso_df (x, params, df); - - return GSL_SUCCESS; -} - - - - + &enso_f, + &enso_df, + NULL, + enso_N, + enso_P, + NULL, + 0, + 0 +}; +static test_fdf_problem enso_problem = +{ + "nist-ENSO", + enso_x0, + enso_sigma, + &enso_epsrel, + enso_NTRIES, + &enso_checksol, + &enso_func +}; diff -Nru gsl-doc-1.16/multifit/test_exp1.c gsl-doc-2.3/multifit/test_exp1.c --- gsl-doc-1.16/multifit/test_exp1.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_exp1.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,105 @@ +#define exp1_N 45 +#define exp1_P 4 + +#define exp1_NTRIES 3 + +static double exp1_x0[exp1_P] = { -1.0, -2.0, 1.0, -1.0 }; +static double exp1_epsrel = 1.0e-4; + +static double exp1_Y[exp1_N] = { +0.090542, 0.124569, 0.179367, 0.195654, 0.269707, +0.286027, 0.289892, 0.317475, 0.308191, 0.336995, +0.348371, 0.321337, 0.299423, 0.338972, 0.304763, +0.288903, 0.300820, 0.303974, 0.283987, 0.262078, +0.281593, 0.267531, 0.218926, 0.225572, 0.200594, +0.197375, 0.182440, 0.183892, 0.152285, 0.174028, +0.150874, 0.126220, 0.126266, 0.106384, 0.118923, +0.091868, 0.128926, 0.119273, 0.115997, 0.105831, +0.075261, 0.068387, 0.090823, 0.085205, 0.067203 +}; + +static void +exp1_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 1.0e-2; + const double exp1_x[exp1_P] = { -4.0, -5.0, 4.0, -4.0 }; /* approx */ + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < exp1_P; ++i) + { + gsl_test_rel(x[i], exp1_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +exp1_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + size_t i; + + for (i = 0; i < exp1_N; ++i) + { + double ti = 0.02*(i + 1.0); + double yi = exp1_Y[i]; + double fi = yi - (x3*exp(x1*ti) + x4*exp(x2*ti)); + gsl_vector_set(f, i, fi); + } + + return GSL_SUCCESS; +} + +static int +exp1_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + size_t i; + + for (i = 0; i < exp1_N; ++i) + { + double ti = 0.02*(i + 1.0); + double term1 = exp(x1*ti); + double term2 = exp(x2*ti); + + gsl_matrix_set(J, i, 0, -x3*ti*term1); + gsl_matrix_set(J, i, 1, -x4*ti*term2); + gsl_matrix_set(J, i, 2, -term1); + gsl_matrix_set(J, i, 3, -term2); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf exp1_func = +{ + &exp1_f, + &exp1_df, + NULL, + exp1_N, + exp1_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem exp1_problem = +{ + "expfit1", + exp1_x0, + NULL, + &exp1_epsrel, + exp1_NTRIES, + &exp1_checksol, + &exp1_func +}; diff -Nru gsl-doc-1.16/multifit/test_fn.c gsl-doc-2.3/multifit/test_fn.c --- gsl-doc-1.16/multifit/test_fn.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/test_fn.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -gsl_multifit_function_fdf -make_fdf (int (* f) (const gsl_vector *, void *, gsl_vector *), - int (* df) (const gsl_vector *, void *, gsl_matrix *), - int (* fdf) (const gsl_vector *, void *, gsl_vector *, gsl_matrix *), - size_t n, - size_t p, - void * params); - -gsl_multifit_function_fdf -make_fdf (int (* f) (const gsl_vector *, void *, gsl_vector *), - int (* df) (const gsl_vector *, void *, gsl_matrix *), - int (* fdf) (const gsl_vector *, void *, gsl_vector *, gsl_matrix *), - size_t n, - size_t p, - void * params) -{ - gsl_multifit_function_fdf F_new; - F_new.f = f; - F_new.df = df; - F_new.fdf = fdf; - F_new.n = n; - F_new.p = p; - F_new.params = params; - return F_new; -} diff -Nru gsl-doc-1.16/multifit/test_gaussian.c gsl-doc-2.3/multifit/test_gaussian.c --- gsl-doc-1.16/multifit/test_gaussian.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_gaussian.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,99 @@ +#define gaussian_N 15 +#define gaussian_P 3 + +#define gaussian_NTRIES 2 + +static double gaussian_x0[gaussian_P] = { 0.4, 1.0, 0.0 }; + +static double gaussian_epsrel = 1.0e-10; + +static double gaussian_Y[gaussian_N] = { +0.0009, 0.0044, 0.0175, 0.0540, 0.1295, 0.2420, 0.3521, 0.3989, +0.3521, 0.2420, 0.1295, 0.0540, 0.0175, 0.0044, 0.0009 +}; + +static void +gaussian_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 1.12793276961871985e-08; + const double gaussian_x[gaussian_P] = { 0.398956137838762825, + 1.00001908448786647, + 0.0 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < gaussian_P; ++i) + { + gsl_test_rel(x[i], gaussian_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +gaussian_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < gaussian_N; ++i) + { + double ti = (7.0 - i) / 2.0; + double yi = gaussian_Y[i]; + double term = ti - x3; + double fi = x1 * exp(-x2*term*term/2.0) - yi; + gsl_vector_set(f, i, fi); + } + + return GSL_SUCCESS; +} + +static int +gaussian_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < gaussian_N; ++i) + { + double ti = (7.0 - i) / 2.0; + double term1 = ti - x3; + double term2 = exp(-x2*term1*term1/2.0); + + gsl_matrix_set(J, i, 0, term2); + gsl_matrix_set(J, i, 1, -0.5*x1*term2*term1*term1); + gsl_matrix_set(J, i, 2, x1*x2*term1*term2); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf gaussian_func = +{ + &gaussian_f, + &gaussian_df, + NULL, + gaussian_N, + gaussian_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem gaussian_problem = +{ + "gaussian", + gaussian_x0, + NULL, + &gaussian_epsrel, + gaussian_NTRIES, + &gaussian_checksol, + &gaussian_func +}; diff -Nru gsl-doc-1.16/multifit/test_hahn1.c gsl-doc-2.3/multifit/test_hahn1.c --- gsl-doc-1.16/multifit/test_hahn1.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/test_hahn1.c 2015-11-03 16:21:55.000000000 +0000 @@ -1,23 +1,16 @@ -const size_t hahn1_N = 236; -const size_t hahn1_P = 7; +#define hahn1_N 236 +#define hahn1_P 7 + +#define hahn1_NTRIES 1 /* double hahn1_x0[7] = { 10, -1, 0.05, -0.00001, -0.05, 0.001, -0.000001 }; */ -double hahn1_x0[7] = { 1, -0.1, 0.005, -0.000001, -0.005, 0.0001, -0.0000001}; +static double hahn1_x0[hahn1_P] = { 1, -0.1, 0.005, -0.000001, -0.005, 0.0001, -0.0000001}; -double hahn1_x[7] = { -1.0776351733E+00, --1.2269296921E-01, -4.0863750610E-03, --1.4262662514E-06, --5.7609940901E-03, -2.4053735503E-04, --1.2314450199E-07 -}; -double hahn1_sumsq = 1.5324382854E+00; +static double hahn1_epsrel = 1.0e-5; -double hahn1_sigma[7] = { +static double hahn1_sigma[hahn1_P] = { 1.7070154742E-01, 1.2000289189E-02, 2.2508314937E-04, @@ -27,7 +20,7 @@ 1.3027335327E-08 }; -double hahn1_F1[236] = { +static double hahn1_F1[hahn1_N] = { .591E0, 1.547E0, 2.902E0, @@ -267,7 +260,7 @@ }; -double hahn1_F0[236] = { +static double hahn1_F0[hahn1_N] = { 24.41E0, 34.82E0, 44.09E0, @@ -506,19 +499,40 @@ 848.23E0 }; +static void +hahn1_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 1.5324382854E+00; + const double hahn1_x[hahn1_P] = { + 1.0776351733E+00, -1.2269296921E-01, 4.0863750610E-03, + -1.4262662514E-06, -5.7609940901E-03, 2.4053735503E-04, + -1.2314450199E-07 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < hahn1_P; ++i) + { + gsl_test_rel(x[i], hahn1_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} -int +static int hahn1_f (const gsl_vector * x, void *params, gsl_vector * f) { - double b[7]; + double b[hahn1_P]; size_t i; - for (i = 0; i < 7; i++) + for (i = 0; i < hahn1_P; i++) { b[i] = gsl_vector_get(x, i); } - for (i = 0; i < 236; i++) + for (i = 0; i < hahn1_N; i++) { double x = hahn1_F0[i]; double y = ((b[0] + x* (b[1] + x * (b[2] + x * b[3]))) @@ -529,18 +543,18 @@ return GSL_SUCCESS; } -int +static int hahn1_df (const gsl_vector * x, void *params, gsl_matrix * df) { - double b[7]; + double b[hahn1_P]; size_t i; - for (i = 0; i < 7; i++) + for (i = 0; i < hahn1_P; i++) { b[i] = gsl_vector_get(x, i); } - for (i = 0; i < 236; i++) + for (i = 0; i < hahn1_N; i++) { double x = hahn1_F0[i]; double u = (b[0] + x*(b[1] + x*(b[2] + x * b[3]))); @@ -557,12 +571,25 @@ return GSL_SUCCESS; } -int -hahn1_fdf (const gsl_vector * x, void *params, - gsl_vector * f, gsl_matrix * df) +static gsl_multifit_function_fdf hahn1_func = { - hahn1_f (x, params, f); - hahn1_df (x, params, df); + &hahn1_f, + &hahn1_df, + NULL, + hahn1_N, + hahn1_P, + NULL, + 0, + 0 +}; - return GSL_SUCCESS; -} +static test_fdf_problem hahn1_problem = +{ + "nist-hahn1", + hahn1_x0, + hahn1_sigma, + &hahn1_epsrel, + hahn1_NTRIES, + &hahn1_checksol, + &hahn1_func +}; diff -Nru gsl-doc-1.16/multifit/test_helical.c gsl-doc-2.3/multifit/test_helical.c --- gsl-doc-1.16/multifit/test_helical.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_helical.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,91 @@ +#define helical_N 3 +#define helical_P 3 + +#define helical_NTRIES 4 + +static double helical_x0[helical_P] = { -1.0, 0.0, 0.0 }; +static double helical_x[helical_P] = { 1.0, 0.0, 0.0 }; + +static double helical_epsrel = 1.0e-12; + +static void +helical_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < helical_P; ++i) + { + gsl_test_rel(x[i], helical_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +helical_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double theta = (x1 >= 0.0) ? 0.0 : 5.0; + double nx = gsl_hypot(x1, x2); + + gsl_vector_set(f, 0, 10.0 * (x3 - 5.0/M_PI*atan(x2 / x1) - theta)); + gsl_vector_set(f, 1, 10.0*(nx - 1.0)); + gsl_vector_set(f, 2, x3); + + return GSL_SUCCESS; +} + +static int +helical_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double nx = gsl_hypot(x1, x2); + double nx_sq = nx * nx; + double term1 = 50.0 / (M_PI * nx_sq); + double term2 = 10.0 / nx; + + gsl_matrix_set(J, 0, 0, term1*x2); + gsl_matrix_set(J, 0, 1, -term1*x1); + gsl_matrix_set(J, 0, 2, 10.0); + + gsl_matrix_set(J, 1, 0, term2*x1); + gsl_matrix_set(J, 1, 1, term2*x2); + gsl_matrix_set(J, 1, 2, 0.0); + + gsl_matrix_set(J, 2, 0, 0.0); + gsl_matrix_set(J, 2, 1, 0.0); + gsl_matrix_set(J, 2, 2, 1.0); + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf helical_func = +{ + &helical_f, + &helical_df, + NULL, + helical_N, + helical_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem helical_problem = +{ + "helical", + helical_x0, + NULL, + &helical_epsrel, + helical_NTRIES, + &helical_checksol, + &helical_func +}; diff -Nru gsl-doc-1.16/multifit/test_jennrich.c gsl-doc-2.3/multifit/test_jennrich.c --- gsl-doc-1.16/multifit/test_jennrich.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_jennrich.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,85 @@ +#define jennrich_N 10 +#define jennrich_P 2 + +#define jennrich_NTRIES 1 + +static double jennrich_x0[jennrich_P] = { 0.3, 0.4 }; +static double jennrich_epsrel = 1.0e-8; + +static void +jennrich_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 1.243621823556148e+02; + const double jennrich_x[jennrich_P] = { 2.578252139935855e-01, + 2.578252133471426e-01 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < jennrich_P; ++i) + { + gsl_test_rel(x[i], jennrich_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +jennrich_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + size_t i; + + for (i = 0; i < jennrich_N; ++i) + { + double ip1 = i + 1.0; + double fi = 2.0*(i + 2.0) - (exp(x1*ip1) + exp(x2*ip1)); + gsl_vector_set(f, i, fi); + } + + return GSL_SUCCESS; +} + +static int +jennrich_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + size_t i; + + for (i = 0; i < jennrich_N; ++i) + { + double ip1 = i + 1.0; + + gsl_matrix_set(J, i, 0, -ip1*exp(ip1*x1)); + gsl_matrix_set(J, i, 1, -ip1*exp(ip1*x2)); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf jennrich_func = +{ + &jennrich_f, + &jennrich_df, + NULL, + jennrich_N, + jennrich_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem jennrich_problem = +{ + "jennrich", + jennrich_x0, + NULL, + &jennrich_epsrel, + jennrich_NTRIES, + &jennrich_checksol, + &jennrich_func +}; diff -Nru gsl-doc-1.16/multifit/test_kirby2.c gsl-doc-2.3/multifit/test_kirby2.c --- gsl-doc-1.16/multifit/test_kirby2.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/test_kirby2.c 2015-11-03 16:21:55.000000000 +0000 @@ -1,21 +1,15 @@ -const size_t kirby2_N = 151; -const size_t kirby2_P = 5; +#define kirby2_N 151 +#define kirby2_P 5 -/* double kirby2_x0[5] = { 2, -0.1, 0.003, -0.001, 0.00001 }; */ +#define kirby2_NTRIES 1 -double kirby2_x0[5] = { 1.5, -0.15, 0.0025, -0.0015, 0.00002 }; +/* double kirby2_x0[kirby2_P] = { 2, -0.1, 0.003, -0.001, 0.00001 }; */ -double kirby2_x[5] = { - 1.6745063063E+00, - -1.3927397867E-01, - 2.5961181191E-03, - -1.7241811870E-03, - 2.1664802578E-05 -}; +static double kirby2_x0[kirby2_P] = { 1.5, -0.15, 0.0025, -0.0015, 0.00002 }; -double kirby2_sumsq = 3.9050739624E+00; +static double kirby2_epsrel = 1.0e-5; -double kirby2_sigma[5] = { +static double kirby2_sigma[kirby2_P] = { 8.7989634338E-02, 4.1182041386E-03, 4.1856520458E-05, @@ -23,7 +17,7 @@ 2.0129761919E-07 }; -double kirby2_F1[151] = { +static double kirby2_F1[kirby2_N] = { 0.0082E0, 0.0112E0, 0.0149E0, @@ -178,7 +172,7 @@ }; -double kirby2_F0[151] = { +static double kirby2_F0[kirby2_N] = { 9.65E0, 10.74E0, 11.81E0, @@ -332,19 +326,39 @@ 371.30E0 }; +static void +kirby2_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 3.9050739624E+00; + const double kirby2_x[kirby2_P] = { + 1.6745063063E+00, -1.3927397867E-01, 2.5961181191E-03, + -1.7241811870E-03, 2.1664802578E-05 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); -int + for (i = 0; i < kirby2_P; ++i) + { + gsl_test_rel(x[i], kirby2_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int kirby2_f (const gsl_vector * x, void *params, gsl_vector * f) { - double b[5]; + double b[kirby2_P]; size_t i; - for (i = 0; i < 5; i++) + for (i = 0; i < kirby2_P; i++) { b[i] = gsl_vector_get(x, i); } - for (i = 0; i < 151; i++) + for (i = 0; i < kirby2_N; i++) { double x = kirby2_F0[i]; double y = ((b[0] + x* (b[1] + x * b[2])) @@ -355,18 +369,18 @@ return GSL_SUCCESS; } -int +static int kirby2_df (const gsl_vector * x, void *params, gsl_matrix * df) { - double b[5]; + double b[kirby2_P]; size_t i; - for (i = 0; i < 5; i++) + for (i = 0; i < kirby2_P; i++) { b[i] = gsl_vector_get(x, i); } - for (i = 0; i < 151; i++) + for (i = 0; i < kirby2_N; i++) { double x = kirby2_F0[i]; double u = (b[0] + x*(b[1] + x*b[2])); @@ -381,12 +395,25 @@ return GSL_SUCCESS; } -int -kirby2_fdf (const gsl_vector * x, void *params, - gsl_vector * f, gsl_matrix * df) +static gsl_multifit_function_fdf kirby2_func = { - kirby2_f (x, params, f); - kirby2_df (x, params, df); + &kirby2_f, + &kirby2_df, + NULL, + kirby2_N, + kirby2_P, + NULL, + 0, + 0 +}; - return GSL_SUCCESS; -} +static test_fdf_problem kirby2_problem = +{ + "nist-kirby2", + kirby2_x0, + kirby2_sigma, + &kirby2_epsrel, + kirby2_NTRIES, + &kirby2_checksol, + &kirby2_func +}; diff -Nru gsl-doc-1.16/multifit/test_kowalik.c gsl-doc-2.3/multifit/test_kowalik.c --- gsl-doc-1.16/multifit/test_kowalik.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_kowalik.c 2016-11-30 21:28:37.000000000 +0000 @@ -0,0 +1,130 @@ +#define kowalik_N 11 +#define kowalik_P 4 + +#define kowalik_NTRIES 4 + +static double kowalik_x0[kowalik_P] = { 0.25, 0.39, 0.415, 0.39 }; + +static double kowalik_epsrel = 1.0e-7; + +static double kowalik_Y[kowalik_N] = { +0.1957, 0.1947, 0.1735, 0.1600, 0.0844, 0.0627, +0.0456, 0.0342, 0.0323, 0.0235, 0.0246 +}; + +static double kowalik_U[kowalik_N] = { +4.0000, 2.0000, 1.0000, 0.5000, 0.2500, 0.1670, +0.1250, 0.1000, 0.0833, 0.0714, 0.0625 +}; + +static void +kowalik_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + gsl_vector_const_view v = gsl_vector_const_view_array(x, kowalik_P); + const double norm = gsl_blas_dnrm2(&v.vector); + const double sumsq_exact1 = 3.075056038492370e-04; + const double kowalik_x1[kowalik_P] = { 1.928069345723978e-01, + 1.912823290344599e-01, + 1.230565070690708e-01, + 1.360623308065148e-01 }; + const double sumsq_exact2 = 0.00102734304869549252; + const double kowalik_x2[kowalik_P] = { -99999.9, /* inf */ + -14.0758834005984603, + -99999.9, /* -inf */ + -99999.9 }; /* -inf */ + const double *kowalik_x; + double sumsq_exact; + + if (norm < 10.0) + { + kowalik_x = kowalik_x1; + sumsq_exact = sumsq_exact1; + } + else + { + kowalik_x = kowalik_x2; + sumsq_exact = sumsq_exact2; + } + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < kowalik_P; ++i) + { + if (kowalik_x[i] < -90000.0) + continue; + + gsl_test_rel(x[i], kowalik_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +kowalik_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + size_t i; + + for (i = 0; i < kowalik_N; ++i) + { + double yi = kowalik_Y[i]; + double ui = kowalik_U[i]; + double fi = yi - (x1*ui*(ui+x2)) / (x4 + ui*(ui + x3)); + gsl_vector_set(f, i, fi); + } + + return GSL_SUCCESS; +} + +static int +kowalik_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + size_t i; + + for (i = 0; i < kowalik_N; ++i) + { + double ui = kowalik_U[i]; + double term1 = ui*(ui + x2); + double term2 = ui*(ui + x3) + x4; + + gsl_matrix_set(J, i, 0, -term1 / term2); + gsl_matrix_set(J, i, 1, -ui*x1/term2); + gsl_matrix_set(J, i, 2, ui*term1*x1 / (term2*term2)); + gsl_matrix_set(J, i, 3, term1*x1 / (term2*term2)); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf kowalik_func = +{ + &kowalik_f, + &kowalik_df, + NULL, + kowalik_N, + kowalik_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem kowalik_problem = +{ + "kowalik", + kowalik_x0, + NULL, + &kowalik_epsrel, + kowalik_NTRIES, + &kowalik_checksol, + &kowalik_func +}; diff -Nru gsl-doc-1.16/multifit/test_lin1.c gsl-doc-2.3/multifit/test_lin1.c --- gsl-doc-1.16/multifit/test_lin1.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_lin1.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,90 @@ +#define lin1_N 11 /* can be anything >= p */ +#define lin1_P 5 + +#define lin1_NTRIES 3 + +static double lin1_x0[lin1_P] = { 1.0, 1.0, 1.0, 1.0, 1.0 }; +static double lin1_epsrel = 1.0e-10; + +static void +lin1_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = (double) (lin1_N - lin1_P); + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < lin1_P; ++i) + { + gsl_test_rel(x[i], -1.0, epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +lin1_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + size_t i, j; + + for (i = 0; i < lin1_N; ++i) + { + double fi = 0.0; + + for (j = 0; j < lin1_P; ++j) + { + double xj = gsl_vector_get(x, j); + double Aij = (i == j) ? 1.0 : 0.0; + Aij -= 2.0 / lin1_N; + fi += Aij * xj; + } + + fi -= 1.0; + gsl_vector_set(f, i, fi); + } + + return GSL_SUCCESS; +} + +static int +lin1_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + size_t i, j; + + for (i = 0; i < lin1_N; ++i) + { + for (j = 0; j < lin1_P; ++j) + { + double Jij = (i == j) ? 1.0 : 0.0; + Jij -= 2.0 / lin1_N; + gsl_matrix_set(J, i, j, Jij); + } + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf lin1_func = +{ + &lin1_f, + &lin1_df, + NULL, + lin1_N, + lin1_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem lin1_problem = +{ + "linear_full", + lin1_x0, + NULL, + &lin1_epsrel, + lin1_NTRIES, + &lin1_checksol, + &lin1_func +}; diff -Nru gsl-doc-1.16/multifit/test_lin2.c gsl-doc-2.3/multifit/test_lin2.c --- gsl-doc-1.16/multifit/test_lin2.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_lin2.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,89 @@ +#define lin2_N 20 /* can be anything >= p */ +#define lin2_P 5 + +#define lin2_NTRIES 3 + +static double lin2_x0[lin2_P] = { 1.0, 1.0, 1.0, 1.0, 1.0 }; +static double lin2_epsrel = 1.0e-11; + +static void +lin2_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double n = (double) lin2_N; + const double sumsq_exact = 0.5 * (n*(n - 1.0)) / (2.0*n + 1.0); + const double sum_exact = 3.0 / (2.0*n + 1.0); + double sum = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < lin2_P; ++i) + sum += (i + 1.0) * x[i]; + + gsl_test_rel(sum, sum_exact, epsrel, "%s/%s coeff sum", + sname, pname); +} + +static int +lin2_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + size_t i, j; + + for (i = 0; i < lin2_N; ++i) + { + double fi = 0.0; + + for (j = 0; j < lin2_P; ++j) + { + double xj = gsl_vector_get(x, j); + fi += (j + 1) * xj; + } + + fi = (i + 1) * fi - 1.0; + gsl_vector_set(f, i, fi); + } + + return GSL_SUCCESS; +} + +static int +lin2_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + size_t i, j; + + for (i = 0; i < lin2_N; ++i) + { + for (j = 0; j < lin2_P; ++j) + { + gsl_matrix_set(J, i, j, (i + 1.0) * (j + 1.0)); + } + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf lin2_func = +{ + &lin2_f, + &lin2_df, + NULL, + lin2_N, + lin2_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem lin2_problem = +{ + "linear_rank1", + lin2_x0, + NULL, + &lin2_epsrel, + lin2_NTRIES, + &lin2_checksol, + &lin2_func +}; diff -Nru gsl-doc-1.16/multifit/test_lin3.c gsl-doc-2.3/multifit/test_lin3.c --- gsl-doc-1.16/multifit/test_lin3.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_lin3.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,94 @@ +#define lin3_N 50 /* can be anything >= p */ +#define lin3_P 10 /* >= 3 */ + +#define lin3_NTRIES 3 + +static double lin3_x0[lin3_P] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 }; +static double lin3_epsrel = 1.0e-10; + +static void +lin3_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double n = (double) lin3_N; + const double sumsq_exact = 0.5 * (n*n + 3*n - 6.0) / (2*n - 3.0); + const double sum_exact = 3.0 / (2.0*n - 3.0); + double sum = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 1; i < lin3_P - 1; ++i) + sum += (i + 1.0) * x[i]; + + gsl_test_rel(sum, sum_exact, epsrel, "%s/%s coeff sum", + sname, pname); +} + +static int +lin3_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + size_t i, j; + + gsl_vector_set(f, 0, -1.0); + gsl_vector_set(f, lin3_N - 1, -1.0); + + for (i = 1; i < lin3_N - 1; ++i) + { + double fi = 0.0; + + for (j = 1; j < lin3_P - 1; ++j) + { + double xj = gsl_vector_get(x, j); + fi += (j + 1) * xj; + } + + fi = i * fi - 1.0; + gsl_vector_set(f, i, fi); + } + + return GSL_SUCCESS; +} + +static int +lin3_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + size_t i, j; + + gsl_matrix_set_zero(J); + + for (i = 1; i < lin3_N - 1; ++i) + { + for (j = 1; j < lin3_P - 1; ++j) + { + gsl_matrix_set(J, i, j, i * (j + 1.0)); + } + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf lin3_func = +{ + &lin3_f, + &lin3_df, + NULL, + lin3_N, + lin3_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem lin3_problem = +{ + "linear_rank1zeros", + lin3_x0, + NULL, + &lin3_epsrel, + lin3_NTRIES, + &lin3_checksol, + &lin3_func +}; diff -Nru gsl-doc-1.16/multifit/test_linear.c gsl-doc-2.3/multifit/test_linear.c --- gsl-doc-1.16/multifit/test_linear.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_linear.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,82 @@ +/* multifit/test_linear.c + * + * Copyright (C) 2007, 2013 Brian Gough, Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +static void +test_random_vector(gsl_vector *v, const gsl_rng *r, + const double lower, const double upper) +{ + size_t i; + size_t N = v->size; + + for (i = 0; i < N; ++i) + { + gsl_vector_set(v, i, + gsl_rng_uniform(r) * (upper - lower) + lower); + } +} + +static void +test_random_matrix(gsl_matrix *m, const gsl_rng *r, + const double lower, const double upper) +{ + size_t i, j; + size_t M = m->size1; + size_t N = m->size2; + + for (i = 0; i < M; ++i) + { + for (j = 0; j < N; ++j) + { + gsl_matrix_set(m, i, j, + gsl_rng_uniform(r) * (upper - lower) + lower); + } + } +} + +static void +test_random_vector_noise(const gsl_rng *r, gsl_vector *y) +{ + size_t i; + + for (i = 0; i < y->size; ++i) + { + double *ptr = gsl_vector_ptr(y, i); + *ptr += 1.0e-3 * gsl_rng_uniform(r); + } +} + +#include "test_longley.c" +#include "test_filip.c" +#include "test_pontius.c" +#include "test_estimator.c" +#include "test_reg.c" +#include "test_shaw.c" + +/* test linear regression */ + +void +test_linear(void) +{ + test_longley(); + test_filip(); + test_pontius(); + test_estimator(); + test_reg(); + test_shaw(); +} diff -Nru gsl-doc-1.16/multifit/test_longley.c gsl-doc-2.3/multifit/test_longley.c --- gsl-doc-1.16/multifit/test_longley.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/test_longley.c 2015-11-03 16:21:55.000000000 +0000 @@ -111,7 +111,6 @@ &diag.vector, &exp_sd.vector, 1.0, 1.0, 1.0); - /* test weighted least squares */ { size_t i, j; diff -Nru gsl-doc-1.16/multifit/test_meyer.c gsl-doc-2.3/multifit/test_meyer.c --- gsl-doc-1.16/multifit/test_meyer.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_meyer.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,98 @@ +#define meyer_N 16 +#define meyer_P 3 + +#define meyer_NTRIES 1 + +static double meyer_x0[meyer_P] = { 0.02, 4000.0, 250.0 }; +static double meyer_epsrel = 1.0e-8; + +static double meyer_Y[meyer_N] = { +34780., 28610., 23650., 19630., 16370., 13720., 11540., +9744., 8261., 7030., 6005., 5147., 4427., 3820., +3307., 2872. +}; + +static void +meyer_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 8.794585517053883e+01; + const double meyer_x[meyer_P] = { 5.609636471049458e-03, + 6.181346346283188e+03, + 3.452236346240292e+02 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < meyer_P; ++i) + { + gsl_test_rel(x[i], meyer_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +meyer_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < meyer_N; ++i) + { + double ti = 45.0 + 5.0*(i + 1.0); + double yi = meyer_Y[i]; + double fi = x1 * exp(x2 / (ti + x3)) - yi; + gsl_vector_set(f, i, fi); + } + + return GSL_SUCCESS; +} + +static int +meyer_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < meyer_N; ++i) + { + double ti = 45.0 + 5.0*(i + 1.0); + double term1 = ti + x3; + double term2 = exp(x2 / term1); + + gsl_matrix_set(J, i, 0, term2); + gsl_matrix_set(J, i, 1, x1*term2/term1); + gsl_matrix_set(J, i, 2, -x1*x2*term2/(term1*term1)); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf meyer_func = +{ + &meyer_f, + &meyer_df, + NULL, + meyer_N, + meyer_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem meyer_problem = +{ + "meyer", + meyer_x0, + NULL, + &meyer_epsrel, + meyer_NTRIES, + &meyer_checksol, + &meyer_func +}; diff -Nru gsl-doc-1.16/multifit/test_meyerscal.c gsl-doc-2.3/multifit/test_meyerscal.c --- gsl-doc-1.16/multifit/test_meyerscal.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_meyerscal.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,98 @@ +#define meyerscal_N 16 +#define meyerscal_P 3 + +#define meyerscal_NTRIES 1 + +static double meyerscal_x0[meyerscal_P] = { 8.85, 4.0, 2.5 }; +static double meyerscal_epsrel = 1.0e-8; + +static double meyerscal_Y[meyerscal_N] = { +34780., 28610., 23650., 19630., 16370., 13720., 11540., +9744., 8261., 7030., 6005., 5147., 4427., 3820., +3307., 2872. +}; + +static void +meyerscal_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 8.794585517003888e-05; + const double meyerscal_x[meyerscal_P] = { 2.481778312286695e+00, + 6.181346341853554e+00, + 3.452236344749865e+00 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < meyerscal_P; ++i) + { + gsl_test_rel(x[i], meyerscal_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +meyerscal_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < meyerscal_N; ++i) + { + double ti = 0.45 + 0.05*(i + 1.0); + double yi = meyerscal_Y[i]; + double fi = x1 * exp(10.0*x2 / (ti + x3) - 13.0) - 1.0e-3*yi; + gsl_vector_set(f, i, fi); + } + + return GSL_SUCCESS; +} + +static int +meyerscal_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < meyerscal_N; ++i) + { + double ti = 0.45 + 0.05*(i + 1.0); + double term1 = ti + x3; + double term2 = exp(10.0*x2/term1 - 13.0); + + gsl_matrix_set(J, i, 0, term2); + gsl_matrix_set(J, i, 1, 10.0*x1*term2/term1); + gsl_matrix_set(J, i, 2, -10.0*x1*x2*term2/(term1*term1)); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf meyerscal_func = +{ + &meyerscal_f, + &meyerscal_df, + NULL, + meyerscal_N, + meyerscal_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem meyerscal_problem = +{ + "meyerscal", + meyerscal_x0, + NULL, + &meyerscal_epsrel, + meyerscal_NTRIES, + &meyerscal_checksol, + &meyerscal_func +}; diff -Nru gsl-doc-1.16/multifit/test_nelson.c gsl-doc-2.3/multifit/test_nelson.c --- gsl-doc-1.16/multifit/test_nelson.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/test_nelson.c 2015-11-03 16:21:55.000000000 +0000 @@ -200,18 +200,3 @@ 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; -} - - - - - diff -Nru gsl-doc-1.16/multifit/test_nonlinear.c gsl-doc-2.3/multifit/test_nonlinear.c --- gsl-doc-1.16/multifit/test_nonlinear.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_nonlinear.c 2016-07-07 20:36:10.000000000 +0000 @@ -0,0 +1,580 @@ +/* multifit/test_nonlinear.c + * + * Copyright (C) 2007, 2013, 2014 Brian Gough, Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +typedef struct +{ + const char *name; + double *x0; /* initial parameters (size p) */ + double *sigma; + double *epsrel; /* relative tolerance for solution checking */ + size_t ntries; + void (*checksol) (const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname); + gsl_multifit_function_fdf *fdf; +} test_fdf_problem; + +#include "test_bard.c" +#include "test_beale.c" +#include "test_biggs.c" +#include "test_box.c" +#include "test_boxbod.c" +#include "test_brown1.c" +#include "test_brown2.c" +#include "test_brown3.c" +#include "test_eckerle.c" +#include "test_enso.c" +#include "test_exp1.c" +#include "test_gaussian.c" +#include "test_hahn1.c" +#include "test_helical.c" +#include "test_jennrich.c" +#include "test_kirby2.c" +#include "test_kowalik.c" +#include "test_lin1.c" +#include "test_lin2.c" +#include "test_lin3.c" +#include "test_meyer.c" +#include "test_meyerscal.c" +#include "test_osborne.c" +#include "test_penalty1.c" +#include "test_penalty2.c" +#include "test_powell1.c" +#include "test_powell2.c" +#include "test_powell3.c" +#include "test_rat42.c" +#include "test_rat43.c" +#include "test_rosenbrock.c" +#include "test_rosenbrocke.c" +#include "test_roth.c" +#include "test_thurber.c" +#include "test_vardim.c" +#include "test_watson.c" +#include "test_wood.c" + +#include "test_wnlin.c" + +static void test_fdf(const gsl_multifit_fdfsolver_type * T, + const double xtol, const double gtol, + const double ftol, const double epsrel, + const double x0_scale, test_fdf_problem *problem, + const double *wts); +static void test_fdfridge(const gsl_multifit_fdfsolver_type * T, + const double xtol, const double gtol, + const double ftol, const double epsrel, + const double x0_scale, test_fdf_problem *problem, + const double *wts); +static void test_fdf_checksol(const char *sname, const char *pname, + const double epsrel, + gsl_multifit_fdfsolver *s, + test_fdf_problem *problem); +static void test_scale_x0(gsl_vector *x0, const double scale); + +/* + * These test problems are taken from + * + * H. B. Nielsen, UCTP test problems for unconstrained optimization, + * IMM Department of Mathematical Modeling, Tech. Report IMM-REP-2000-17, + * 2000. + */ +static test_fdf_problem *test_fdf_nielsen[] = { + &lin1_problem, /* 1 */ + &lin2_problem, /* 2 */ + &lin3_problem, /* 3 */ + &rosenbrock_problem, /* 4 */ + &helical_problem, /* 5 */ + &powell1_problem, /* 6 */ + &roth_problem, /* 7 */ + &bard_problem, /* 8 */ + &kowalik_problem, /* 9 */ + &meyer_problem, /* 10 */ + &watson_problem, /* 11 */ + &box_problem, /* 12 */ + &jennrich_problem, /* 13 */ + &brown1_problem, /* 14 */ + &brown2_problem, /* 16 */ + &osborne_problem, /* 17 */ + &exp1_problem, /* 18 */ + &meyerscal_problem, /* 20 */ + + &powell2_problem, + + NULL +}; + +/* + * These tests are from + * + * J. J. More, B. S. Garbow and K. E. Hillstrom, Testing + * Unconstrained Optimization Software, ACM Trans. Math. Soft. + * Vol 7, No 1, 1981. + * + * Many of these overlap with the Nielsen tests + */ +static test_fdf_problem *test_fdf_more[] = { + &rosenbrock_problem, /* 1 */ + &roth_problem, /* 2 */ + &powell3_problem, /* 3 */ + &brown3_problem, /* 4 */ + &beale_problem, /* 5 */ + &jennrich_problem, /* 6 */ + &helical_problem, /* 7 */ + &bard_problem, /* 8 */ + &gaussian_problem, /* 9 */ + &meyer_problem, /* 10 */ + &box_problem, /* 12 */ + &powell1_problem, /* 13 */ + &wood_problem, /* 14 */ + &kowalik_problem, /* 15 */ + &brown1_problem, /* 16 */ + &osborne_problem, /* 17 */ + &biggs_problem, /* 18 */ + &watson_problem, /* 20 */ + &rosenbrocke_problem, /* 21 */ + &penalty1_problem, /* 23 */ + &penalty2_problem, /* 24 */ + &vardim_problem, /* 25 */ + &brown2_problem, /* 27 */ + &lin1_problem, /* 32 */ + &lin2_problem, /* 33 */ + &lin3_problem, /* 34 */ + + NULL +}; + +/* NIST test cases */ +static test_fdf_problem *test_fdf_nist[] = { + &kirby2_problem, + &hahn1_problem, + &enso_problem, + &thurber_problem, + &boxbod_problem, + &rat42_problem, + &eckerle_problem, + &rat43_problem, + + NULL +}; + +static void +test_nonlinear(void) +{ + const double xtol = pow(GSL_DBL_EPSILON, 0.9); + const double gtol = pow(GSL_DBL_EPSILON, 0.9); + const double ftol = 0.0; + size_t i, j; + + /* Nielsen tests */ + for (i = 0; test_fdf_nielsen[i] != NULL; ++i) + { + test_fdf_problem *problem = test_fdf_nielsen[i]; + double epsrel = *(problem->epsrel); + double scale = 1.0; + + for (j = 0; j < problem->ntries; ++j) + { + double eps_scale = epsrel * scale; + + test_fdf(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, + eps_scale, scale, problem, NULL); + test_fdfridge(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, + eps_scale, scale, problem, NULL); + + /* test finite difference Jacobian */ + { + gsl_multifit_function_fdf fdf; + fdf.df = problem->fdf->df; + problem->fdf->df = NULL; + test_fdf(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, + 1.0e5 * eps_scale, 1.0, problem, NULL); + test_fdfridge(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, + 1.0e5 * eps_scale, 1.0, problem, NULL); + problem->fdf->df = fdf.df; + } + + scale *= 10.0; + } + + test_fdf(gsl_multifit_fdfsolver_lmniel, xtol, gtol, ftol, + 10.0 * epsrel, 1.0, problem, NULL); + } + + /* More tests */ + for (i = 0; test_fdf_more[i] != NULL; ++i) + { + test_fdf_problem *problem = test_fdf_more[i]; + double epsrel = *(problem->epsrel); + double scale = 1.0; + + for (j = 0; j < problem->ntries; ++j) + { + double eps_scale = epsrel * scale; + + test_fdf(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, + eps_scale, scale, problem, NULL); + test_fdfridge(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, + eps_scale, scale, problem, NULL); + + /* test finite difference Jacobian */ + { + gsl_multifit_function_fdf fdf; + fdf.df = problem->fdf->df; + problem->fdf->df = NULL; + test_fdf(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, + 1.0e5 * eps_scale, 1.0, problem, NULL); + test_fdfridge(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, + 1.0e5 * eps_scale, 1.0, problem, NULL); + problem->fdf->df = fdf.df; + } + + scale *= 10.0; + } + + test_fdf(gsl_multifit_fdfsolver_lmniel, xtol, gtol, ftol, + 10.0 * epsrel, 1.0, problem, NULL); + } + + /* NIST tests */ + for (i = 0; test_fdf_nist[i] != NULL; ++i) + { + test_fdf_problem *problem = test_fdf_nist[i]; + double epsrel = *(problem->epsrel); + double scale = 1.0; + + for (j = 0; j < problem->ntries; ++j) + { + double eps_scale = epsrel * scale; + + test_fdf(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, + eps_scale, scale, problem, NULL); + test_fdf(gsl_multifit_fdfsolver_lmder, xtol, gtol, ftol, + eps_scale, scale, problem, NULL); + + /* test finite difference Jacobian */ + { + gsl_multifit_function_fdf fdf; + fdf.df = problem->fdf->df; + problem->fdf->df = NULL; + test_fdf(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, + eps_scale, 1.0, problem, NULL); + test_fdf(gsl_multifit_fdfsolver_lmder, xtol, gtol, ftol, + eps_scale, scale, problem, NULL); + problem->fdf->df = fdf.df; + } + + scale *= 10.0; + } + + test_fdf(gsl_multifit_fdfsolver_lmniel, xtol, gtol, ftol, + epsrel, 1.0, problem, NULL); + } + + /* test weighted nonlinear least squares */ + + /* internal weighting in _f and _df functions */ + test_fdf(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, + wnlin_epsrel, 1.0, &wnlin_problem1, NULL); + test_fdf(gsl_multifit_fdfsolver_lmniel, xtol, gtol, ftol, + wnlin_epsrel, 1.0, &wnlin_problem1, NULL); + test_fdfridge(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, + wnlin_epsrel, 1.0, &wnlin_problem1, NULL); + test_fdfridge(gsl_multifit_fdfsolver_lmniel, xtol, gtol, ftol, + wnlin_epsrel, 1.0, &wnlin_problem1, NULL); + + /* weighting through fdfsolver_wset */ + test_fdf(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, + wnlin_epsrel, 1.0, &wnlin_problem2, wnlin_W); + test_fdf(gsl_multifit_fdfsolver_lmniel, xtol, gtol, ftol, + wnlin_epsrel, 1.0, &wnlin_problem2, wnlin_W); + test_fdfridge(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, + wnlin_epsrel, 1.0, &wnlin_problem2, wnlin_W); + test_fdfridge(gsl_multifit_fdfsolver_lmniel, xtol, gtol, ftol, + wnlin_epsrel, 1.0, &wnlin_problem2, wnlin_W); +} + +/* +test_fdf() + Test a weighted nonlinear least squares problem + +Inputs: T - solver to use + xtol - tolerance in x + gtol - tolerance in gradient + ftol - tolerance in residual vector + epsrel - relative error tolerance in solution + x0_scale - to test robustness against starting points, + the standard starting point in 'problem' is + multiplied by this scale factor: + x0 <- x0 * x0_scale + If x0 = 0, then all components of x0 are set to + x0_scale + problem - contains the nonlinear problem and solution point + wts - weight vector (NULL for unweighted) +*/ + +static void +test_fdf(const gsl_multifit_fdfsolver_type * T, const double xtol, + const double gtol, const double ftol, + const double epsrel, const double x0_scale, + test_fdf_problem *problem, + const double *wts) +{ + gsl_multifit_function_fdf *fdf = problem->fdf; + const size_t n = fdf->n; + const size_t p = fdf->p; + const size_t max_iter = 1500; + gsl_vector *x0 = gsl_vector_alloc(p); + gsl_vector_view x0v = gsl_vector_view_array(problem->x0, p); + gsl_multifit_fdfsolver *s = gsl_multifit_fdfsolver_alloc (T, n, p); + const char *pname = problem->name; + char sname[2048]; + int status, info; + + sprintf(sname, "%s/scale=%g%s", + gsl_multifit_fdfsolver_name(s), x0_scale, + problem->fdf->df ? "" : "/fdiff"); + + /* scale starting point x0 */ + gsl_vector_memcpy(x0, &x0v.vector); + test_scale_x0(x0, x0_scale); + + if (wts) + { + gsl_vector_const_view wv = gsl_vector_const_view_array(wts, n); + gsl_multifit_fdfsolver_wset(s, fdf, x0, &wv.vector); + } + else + gsl_multifit_fdfsolver_set(s, fdf, x0); + + status = gsl_multifit_fdfsolver_driver(s, max_iter, xtol, gtol, + ftol, &info); + gsl_test(status, "%s/%s did not converge, status=%s", + sname, pname, gsl_strerror(status)); + + /* check solution */ + test_fdf_checksol(sname, pname, epsrel, s, problem); + + if (wts == NULL) + { + /* test again with weighting matrix W = I */ + gsl_vector *wv = gsl_vector_alloc(n); + + sprintf(sname, "%s/scale=%g%s/weights", + gsl_multifit_fdfsolver_name(s), x0_scale, + problem->fdf->df ? "" : "/fdiff"); + + gsl_vector_memcpy(x0, &x0v.vector); + test_scale_x0(x0, x0_scale); + + gsl_vector_set_all(wv, 1.0); + gsl_multifit_fdfsolver_wset(s, fdf, x0, wv); + + status = gsl_multifit_fdfsolver_driver(s, max_iter, xtol, gtol, + ftol, &info); + gsl_test(status, "%s/%s did not converge, status=%s", + sname, pname, gsl_strerror(status)); + + test_fdf_checksol(sname, pname, epsrel, s, problem); + + gsl_vector_free(wv); + } + + gsl_multifit_fdfsolver_free(s); + gsl_vector_free(x0); +} + +/* +test_fdfridge() + Test a nonlinear least squares problem + +Inputs: T - solver to use + xtol - tolerance in x + gtol - tolerance in gradient + ftol - tolerance in residual vector + epsrel - relative error tolerance in solution + x0_scale - to test robustness against starting points, + the standard starting point in 'problem' is + multiplied by this scale factor: + x0 <- x0 * x0_scale + If x0 = 0, then all components of x0 are set to + x0_scale + problem - contains the nonlinear problem and solution point + wts - weight vector +*/ + +static void +test_fdfridge(const gsl_multifit_fdfsolver_type * T, const double xtol, + const double gtol, const double ftol, + const double epsrel, const double x0_scale, + test_fdf_problem *problem, const double *wts) +{ + gsl_multifit_function_fdf *fdf = problem->fdf; + const size_t n = fdf->n; + const size_t p = fdf->p; + const size_t max_iter = 1500; + gsl_vector *x0 = gsl_vector_alloc(p); + gsl_vector_view x0v = gsl_vector_view_array(problem->x0, p); + gsl_multifit_fdfridge *w = gsl_multifit_fdfridge_alloc (T, n, p); + const char *pname = problem->name; + char sname[2048]; + int status, info; + double lambda = 0.0; + + sprintf(sname, "ridge/%s", gsl_multifit_fdfridge_name(w)); + + /* scale starting point x0 */ + gsl_vector_memcpy(x0, &x0v.vector); + test_scale_x0(x0, x0_scale); + + /* test undamped case with lambda = 0 */ + if (wts) + { + gsl_vector_const_view wv = gsl_vector_const_view_array(wts, n); + gsl_multifit_fdfridge_wset(w, fdf, x0, lambda, &wv.vector); + } + else + gsl_multifit_fdfridge_set(w, fdf, x0, lambda); + + status = gsl_multifit_fdfridge_driver(w, max_iter, xtol, gtol, + ftol, &info); + gsl_test(status, "%s/%s did not converge, status=%s", + sname, pname, gsl_strerror(status)); + + /* check solution */ + test_fdf_checksol(sname, pname, epsrel, w->s, problem); + + /* test for self consisent solution with L = \lambda I */ + { + const double eps = 1.0e-10; + gsl_matrix *L = gsl_matrix_calloc(p, p); + gsl_vector_view diag = gsl_matrix_diagonal(L); + gsl_multifit_fdfridge *w2 = gsl_multifit_fdfridge_alloc (T, n, p); + gsl_vector *y0 = gsl_vector_alloc(p); + size_t i; + + /* pick some value for lambda and set L = \lambda I */ + lambda = 5.0; + gsl_vector_set_all(&diag.vector, lambda); + + /* scale initial vector */ + gsl_vector_memcpy(x0, &x0v.vector); + test_scale_x0(x0, x0_scale); + gsl_vector_memcpy(y0, x0); + + if (wts) + { + gsl_vector_const_view wv = gsl_vector_const_view_array(wts, n); + gsl_multifit_fdfridge_wset(w, fdf, x0, lambda, &wv.vector); + gsl_multifit_fdfridge_wset3(w2, fdf, y0, L, &wv.vector); + } + else + { + gsl_multifit_fdfridge_set(w, fdf, x0, lambda); + gsl_multifit_fdfridge_set3(w2, fdf, y0, L); + } + + /* solve with scalar lambda routine */ + status = gsl_multifit_fdfridge_driver(w, max_iter, xtol, gtol, + ftol, &info); + gsl_test(status, "%s/lambda/%s did not converge, status=%s", + sname, pname, gsl_strerror(status)); + + /* solve with general matrix routine */ + status = gsl_multifit_fdfridge_driver(w2, max_iter, xtol, gtol, + ftol, &info); + gsl_test(status, "%s/L/%s did not converge, status=%s", + sname, pname, gsl_strerror(status)); + + /* test x = y */ + for (i = 0; i < p; ++i) + { + double xi = gsl_vector_get(w->s->x, i); + double yi = gsl_vector_get(w2->s->x, i); + + if (fabs(xi) < eps) + { + gsl_test_abs(yi, xi, eps, "%s/%s ridge lambda=%g i=%zu", + sname, pname, lambda, i); + } + else + { + gsl_test_rel(yi, xi, eps, "%s/%s ridge lambda=%g i=%zu", + sname, pname, lambda, i); + } + } + + gsl_matrix_free(L); + gsl_vector_free(y0); + gsl_multifit_fdfridge_free(w2); + } + + gsl_multifit_fdfridge_free(w); + gsl_vector_free(x0); +} + +static void +test_fdf_checksol(const char *sname, const char *pname, + const double epsrel, gsl_multifit_fdfsolver *s, + test_fdf_problem *problem) +{ + gsl_multifit_function_fdf *fdf = problem->fdf; + const double *sigma = problem->sigma; + gsl_vector *f = gsl_multifit_fdfsolver_residual(s); + gsl_vector *x = gsl_multifit_fdfsolver_position(s); + double sumsq; + + /* check solution vector x and sumsq = ||f||^2 */ + gsl_blas_ddot(f, f, &sumsq); + (problem->checksol)(x->data, sumsq, epsrel, sname, pname); + +#if 1 + /* check variances */ + if (sigma) + { + const size_t n = fdf->n; + const size_t p = fdf->p; + size_t i; + gsl_matrix * J = gsl_matrix_alloc(n, p); + gsl_matrix * covar = gsl_matrix_alloc (p, p); + + gsl_multifit_fdfsolver_jac (s, J); + gsl_multifit_covar(J, 0.0, covar); + + for (i = 0; i < p; i++) + { + double ei = sqrt(sumsq/(n-p))*sqrt(gsl_matrix_get(covar,i,i)); + gsl_test_rel (ei, sigma[i], epsrel, + "%s/%s, sigma(%d)", sname, pname, i) ; + } + + gsl_matrix_free (J); + gsl_matrix_free (covar); + } +#endif +} + +static void +test_scale_x0(gsl_vector *x0, const double scale) +{ + double nx = gsl_blas_dnrm2(x0); + + if (nx == 0.0) + gsl_vector_set_all(x0, scale); + else + gsl_vector_scale(x0, scale); +} /* test_scale_x0() */ diff -Nru gsl-doc-1.16/multifit/test_osborne.c gsl-doc-2.3/multifit/test_osborne.c --- gsl-doc-1.16/multifit/test_osborne.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_osborne.c 2016-11-30 21:29:39.000000000 +0000 @@ -0,0 +1,105 @@ +#define osborne_N 33 +#define osborne_P 5 + +#define osborne_NTRIES 3 + +static double osborne_x0[osborne_P] = { 0.5, 1.5, -1.0, 0.01, 0.02 }; +static double osborne_epsrel = 1.0e-8; + +static double osborne_Y[osborne_N] = { +0.844, 0.908, 0.932, 0.936, 0.925, 0.908, 0.881, +0.850, 0.818, 0.784, 0.751, 0.718, 0.685, 0.658, +0.628, 0.603, 0.580, 0.558, 0.538, 0.522, 0.506, +0.490, 0.478, 0.467, 0.457, 0.448, 0.438, 0.431, +0.424, 0.420, 0.414, 0.411, 0.406 +}; + +static void +osborne_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + const double sumsq_exact = 5.464894697482687e-05; + const double osborne_x[osborne_P] = { + 3.754100521058740e-01, + -99999.0, + -99999.0, + -99999.0, + -99999.0 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + /* only the first model parameter is uniquely constrained */ + gsl_test_rel(x[0], osborne_x[0], epsrel, "%s/%s i=0", + sname, pname); +} + +static int +osborne_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double x5 = gsl_vector_get(x, 4); + size_t i; + + for (i = 0; i < osborne_N; ++i) + { + double ti = 10.0*i; + double yi = osborne_Y[i]; + double fi = yi - (x1 + x2*exp(-x4*ti) + x3*exp(-x5*ti)); + gsl_vector_set(f, i, fi); + } + + return GSL_SUCCESS; +} + +static int +osborne_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double x5 = gsl_vector_get(x, 4); + size_t i; + + for (i = 0; i < osborne_N; ++i) + { + double ti = 10.0*i; + double term1 = exp(-x4*ti); + double term2 = exp(-x5*ti); + + gsl_matrix_set(J, i, 0, -1.0); + gsl_matrix_set(J, i, 1, -term1); + gsl_matrix_set(J, i, 2, -term2); + gsl_matrix_set(J, i, 3, ti*x2*term1); + gsl_matrix_set(J, i, 4, ti*x3*term2); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf osborne_func = +{ + &osborne_f, + &osborne_df, + NULL, + osborne_N, + osborne_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem osborne_problem = +{ + "osborne", + osborne_x0, + NULL, + &osborne_epsrel, + osborne_NTRIES, + &osborne_checksol, + &osborne_func +}; diff -Nru gsl-doc-1.16/multifit/test_penalty1.c gsl-doc-2.3/multifit/test_penalty1.c --- gsl-doc-1.16/multifit/test_penalty1.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_penalty1.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,86 @@ +#define penalty1_N 11 /* p + 1 */ +#define penalty1_P 10 + +#define penalty1_NTRIES 4 + +static double penalty1_x0[penalty1_P] = { 1.0, 2.0, 3.0, 4.0, 5.0, + 6.0, 7.0, 8.0, 9.0, 10.0 }; + +static double penalty1_epsrel = 1.0e-12; + +static void +penalty1_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + const double sumsq_exact = 7.08765146709037993e-05; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); +} + +static int +penalty1_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + const double alpha = 1.0e-5; + const double sqrt_alpha = sqrt(alpha); + size_t i; + double sum = 0.0; + + for (i = 0; i < penalty1_P; ++i) + { + double xi = gsl_vector_get(x, i); + + gsl_vector_set(f, i, sqrt_alpha*(xi - 1.0)); + + sum += xi * xi; + } + + gsl_vector_set(f, penalty1_P, sum - 0.25); + + return GSL_SUCCESS; +} + +static int +penalty1_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + const double alpha = 1.0e-5; + const double sqrt_alpha = sqrt(alpha); + size_t i; + gsl_matrix_view m = gsl_matrix_submatrix(J, 0, 0, penalty1_P, penalty1_P); + gsl_vector_view diag = gsl_matrix_diagonal(&m.matrix); + + gsl_matrix_set_zero(&m.matrix); + gsl_vector_set_all(&diag.vector, sqrt_alpha); + + for (i = 0; i < penalty1_P; ++i) + { + double xi = gsl_vector_get(x, i); + gsl_matrix_set(J, penalty1_P, i, 2.0 * xi); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf penalty1_func = +{ + &penalty1_f, + &penalty1_df, + NULL, + penalty1_N, + penalty1_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem penalty1_problem = +{ + "penalty1", + penalty1_x0, + NULL, + &penalty1_epsrel, + penalty1_NTRIES, + &penalty1_checksol, + &penalty1_func +}; diff -Nru gsl-doc-1.16/multifit/test_penalty2.c gsl-doc-2.3/multifit/test_penalty2.c --- gsl-doc-1.16/multifit/test_penalty2.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_penalty2.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,128 @@ +#define penalty2_N 8 /* 2*p */ +#define penalty2_P 4 + +#define penalty2_NTRIES 3 + +static double penalty2_x0[penalty2_P] = { 0.5, 0.5, 0.5, 0.5 }; +static double penalty2_epsrel = 1.0e-12; + +static void +penalty2_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + const double sumsq_exact = 9.37629300735544219e-06; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); +} + +static int +penalty2_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + const double alpha = 1.0e-5; + const double sqrt_alpha = sqrt(alpha); + double x1 = gsl_vector_get(x, 0); + size_t i; + double sum = penalty2_P * x1 * x1; + + gsl_vector_set(f, 0, x1 - 0.2); + + /* rows [2:p] */ + for (i = 1; i < penalty2_P; ++i) + { + double xi = gsl_vector_get(x, i); + double xim1 = gsl_vector_get(x, i - 1); + double yi = exp(0.1*(i + 1.0)) + exp(0.1*i); + + gsl_vector_set(f, i, sqrt_alpha*(exp(0.1*xi) + exp(0.1*xim1) - yi)); + + sum += (penalty2_P - i) * xi * xi; + } + + /* rows [p+1:2p-1] */ + for (i = penalty2_P; i < penalty2_N - 1; ++i) + { + double xi = gsl_vector_get(x, i - penalty2_P + 1); + + gsl_vector_set(f, i, sqrt_alpha*(exp(0.1*xi) - exp(-0.1))); + } + + /* row 2p */ + gsl_vector_set(f, penalty2_N - 1, sum - 1.0); + + return GSL_SUCCESS; +} + +static int +penalty2_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + const double alpha = 1.0e-5; + const double sqrt_alpha = sqrt(alpha); + size_t i, j; + + for (j = 0; j < penalty2_P; ++j) + { + double xj = gsl_vector_get(x, j); + double delta1j = (j == 0) ? 1.0 : 0.0; + + /* first and last rows */ + gsl_matrix_set(J, 0, j, delta1j); + gsl_matrix_set(J, penalty2_N - 1, j, 2.0 * (penalty2_P - j) * xj); + + /* rows [2:p] */ + for (i = 1; i < penalty2_P; ++i) + { + double xi = gsl_vector_get(x, i); + double xim1 = gsl_vector_get(x, i - 1); + double Jij; + + if (i == j) + Jij = exp(0.1 * xi); + else if (i - 1 == j) + Jij = exp(0.1 * xim1); + else + Jij = 0.0; + + Jij *= 0.1 * sqrt_alpha; + + gsl_matrix_set(J, i, j, Jij); + } + + /* rows [p+1:2p-1] */ + for (i = penalty2_P; i < penalty2_N - 1; ++i) + { + double xi = gsl_vector_get(x, i - penalty2_P + 1); + + if (i - penalty2_P + 1 == j) + gsl_matrix_set(J, i, j, 0.1 * sqrt_alpha * exp(0.1*xi)); + else + gsl_matrix_set(J, i, j, 0.0); + } + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf penalty2_func = +{ + &penalty2_f, + &penalty2_df, + NULL, + penalty2_N, + penalty2_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem penalty2_problem = +{ + "penalty2", + penalty2_x0, + NULL, + &penalty2_epsrel, + penalty2_NTRIES, + &penalty2_checksol, + &penalty2_func +}; diff -Nru gsl-doc-1.16/multifit/test_powell1.c gsl-doc-2.3/multifit/test_powell1.c --- gsl-doc-1.16/multifit/test_powell1.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_powell1.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,97 @@ +#define powell1_N 4 +#define powell1_P 4 + +#define powell1_NTRIES 4 + +static double powell1_x0[powell1_P] = { 3.0, -1.0, 0.0, 1.0 }; +static double powell1_epsrel = 1.0e-5; + +static void +powell1_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < powell1_P; ++i) + { + gsl_test_rel(x[i], 0.0, epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +powell1_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get (x, 0); + double x2 = gsl_vector_get (x, 1); + double x3 = gsl_vector_get (x, 2); + double x4 = gsl_vector_get (x, 3); + + gsl_vector_set(f, 0, x1 + 10.0*x2); + gsl_vector_set(f, 1, sqrt(5.0) * (x3 - x4)); + gsl_vector_set(f, 2, pow(x2 - 2.0*x3, 2.0)); + gsl_vector_set(f, 3, sqrt(10.0) * pow((x1 - x4), 2.0)); + + return GSL_SUCCESS; +} + +static int +powell1_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get (x, 0); + double x2 = gsl_vector_get (x, 1); + double x3 = gsl_vector_get (x, 2); + double x4 = gsl_vector_get (x, 3); + double term1 = x2 - 2.0*x3; + double term2 = x1 - x4; + + gsl_matrix_set(J, 0, 0, 1.0); + gsl_matrix_set(J, 0, 1, 10.0); + gsl_matrix_set(J, 0, 2, 0.0); + gsl_matrix_set(J, 0, 3, 0.0); + + gsl_matrix_set(J, 1, 0, 0.0); + gsl_matrix_set(J, 1, 1, 0.0); + gsl_matrix_set(J, 1, 2, sqrt(5.0)); + gsl_matrix_set(J, 1, 3, -sqrt(5.0)); + + gsl_matrix_set(J, 2, 0, 0.0); + gsl_matrix_set(J, 2, 1, 2.0*term1); + gsl_matrix_set(J, 2, 2, -4.0*term1); + gsl_matrix_set(J, 2, 3, 0.0); + + gsl_matrix_set(J, 3, 0, 2.0*sqrt(10.0)*term2); + gsl_matrix_set(J, 3, 1, 0.0); + gsl_matrix_set(J, 3, 2, 0.0); + gsl_matrix_set(J, 3, 3, -2.0*sqrt(10.0)*term2); + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf powell1_func = +{ + &powell1_f, + &powell1_df, + NULL, + powell1_N, + powell1_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem powell1_problem = +{ + "powell_singular", + powell1_x0, + NULL, + &powell1_epsrel, + powell1_NTRIES, + &powell1_checksol, + &powell1_func +}; diff -Nru gsl-doc-1.16/multifit/test_powell2.c gsl-doc-2.3/multifit/test_powell2.c --- gsl-doc-1.16/multifit/test_powell2.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_powell2.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,75 @@ +#define powell2_N 2 +#define powell2_P 2 + +#define powell2_NTRIES 3 + +static double powell2_x0[powell2_P] = { 3.0, 1.0 }; +static double powell2_epsrel = 1.0e-7; + +static void +powell2_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < powell2_P; ++i) + { + gsl_test_rel(x[i], 0.0, epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +powell2_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x0 = gsl_vector_get (x, 0); + double x1 = gsl_vector_get (x, 1); + + gsl_vector_set(f, 0, x0); + gsl_vector_set(f, 1, 10.0*x0/(x0 + 0.1) + 2.0*x1*x1); + + return GSL_SUCCESS; +} + +static int +powell2_df (const gsl_vector * x, void *params, gsl_matrix * df) +{ + double x0 = gsl_vector_get (x, 0); + double x1 = gsl_vector_get (x, 1); + double term = x0 + 0.1; + + gsl_matrix_set(df, 0, 0, 1.0); + gsl_matrix_set(df, 0, 1, 0.0); + gsl_matrix_set(df, 1, 0, 1.0 / (term * term)); + gsl_matrix_set(df, 1, 1, 4.0 * x1); + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf powell2_func = +{ + &powell2_f, + &powell2_df, + NULL, + powell2_N, + powell2_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem powell2_problem = +{ + "powell2", + powell2_x0, + NULL, + &powell2_epsrel, + powell2_NTRIES, + &powell2_checksol, + &powell2_func +}; diff -Nru gsl-doc-1.16/multifit/test_powell3.c gsl-doc-2.3/multifit/test_powell3.c --- gsl-doc-1.16/multifit/test_powell3.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_powell3.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,77 @@ +#define powell3_N 2 +#define powell3_P 2 + +#define powell3_NTRIES 1 + +static double powell3_x0[powell3_P] = { 0.0, 1.0 }; +static double powell3_epsrel = 1.0e-12; + +static void +powell3_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + const double powell3_x[powell3_P] = { 1.09815932969975976e-05, + 9.10614673986700218 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < powell3_P; ++i) + { + gsl_test_rel(x[i], powell3_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +powell3_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + + gsl_vector_set(f, 0, 1.0e4*x1*x2 - 1.0); + gsl_vector_set(f, 1, exp(-x1) + exp(-x2) - 1.0001); + + return GSL_SUCCESS; +} + +static int +powell3_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + + gsl_matrix_set(J, 0, 0, 1.0e4*x2); + gsl_matrix_set(J, 0, 1, 1.0e4*x1); + + gsl_matrix_set(J, 1, 0, -exp(-x1)); + gsl_matrix_set(J, 1, 1, -exp(-x2)); + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf powell3_func = +{ + &powell3_f, + &powell3_df, + NULL, + powell3_N, + powell3_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem powell3_problem = +{ + "powell_badly_scaled", + powell3_x0, + NULL, + &powell3_epsrel, + powell3_NTRIES, + &powell3_checksol, + &powell3_func +}; diff -Nru gsl-doc-1.16/multifit/test_rat42.c gsl-doc-2.3/multifit/test_rat42.c --- gsl-doc-1.16/multifit/test_rat42.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_rat42.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,109 @@ +#define rat42_N 9 +#define rat42_P 3 + +#define rat42_NTRIES 1 + +static double rat42_x0[rat42_P] = { 100.0, 1.0, 0.1 }; +static double rat42_epsrel = 1.0e-7; + +static double rat42_sigma[rat42_P] = { + 1.7340283401E+00, 8.8295217536E-02, 3.4465663377E-03 +}; + +static double rat42_X[rat42_N] = { 9.0, 14.0, 21.0, 28.0, 42.0, + 57.0, 63.0, 70.0, 79.0 }; + +static double rat42_F[rat42_N] = { 8.930, 10.800, 18.590, 22.330, + 39.350, 56.110, 61.730, 64.620, + 67.080 }; + +static void +rat42_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 8.0565229338E+00; + const double rat42_x[rat42_P] = { 7.2462237576E+01, + 2.6180768402E+00, + 6.7359200066E-02 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < rat42_P; ++i) + { + gsl_test_rel(x[i], rat42_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + + +static int +rat42_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[rat42_P]; + size_t i; + + for (i = 0; i < rat42_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < rat42_N; i++) + { + double xi = rat42_X[i]; + double yi = b[0] / (1.0 + exp(b[1] - b[2]*xi)); + gsl_vector_set (f, i, yi - rat42_F[i]); + } + + return GSL_SUCCESS; +} + +static int +rat42_df (const gsl_vector * x, void *params, gsl_matrix * df) +{ + double b[rat42_P]; + size_t i; + + for (i = 0; i < rat42_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < rat42_N; i++) + { + double xi = rat42_X[i]; + double term1 = exp(b[1] - b[2]*xi); + double term2 = 1.0 + term1; + + gsl_matrix_set (df, i, 0, 1.0 / term2); + gsl_matrix_set (df, i, 1, -b[0] * term1 / (term2 * term2)); + gsl_matrix_set (df, i, 2, b[0] * term1 * xi / (term2 * term2)); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf rat42_func = +{ + &rat42_f, + &rat42_df, + NULL, + rat42_N, + rat42_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem rat42_problem = +{ + "nist-rat42", + rat42_x0, + rat42_sigma, + &rat42_epsrel, + rat42_NTRIES, + &rat42_checksol, + &rat42_func +}; diff -Nru gsl-doc-1.16/multifit/test_rat43.c gsl-doc-2.3/multifit/test_rat43.c --- gsl-doc-1.16/multifit/test_rat43.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_rat43.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,112 @@ +#define rat43_N 15 +#define rat43_P 4 + +#define rat43_NTRIES 1 + +static double rat43_x0[rat43_P] = { 100.0, 10.0, 1.0, 1.0 }; +static double rat43_epsrel = 1.0e-6; + +static double rat43_sigma[rat43_P] = { + 1.6302297817E+01, 2.0828735829E+00, + 1.9566123451E-01, 6.8761936385E-01 +}; + +static double rat43_F[rat43_N] = { 16.08, 33.83, 65.80, 97.20, 191.55, + 326.20, 386.87, 520.53, 590.03, + 651.92, 724.93, 699.56, 689.96, + 637.56, 717.41 }; + +static void +rat43_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 8.7864049080E+03; + const double rat43_x[rat43_P] = { 6.9964151270E+02, + 5.2771253025E+00, + 7.5962938329E-01, + 1.2792483859E+00 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < rat43_P; ++i) + { + gsl_test_rel(x[i], rat43_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + + +static int +rat43_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[rat43_P]; + size_t i; + + for (i = 0; i < rat43_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < rat43_N; i++) + { + double xi = i + 1.0; + double e = exp(b[1] - b[2]*xi); + double yi = b[0] / pow(1.0 + e, 1.0 / b[3]); + gsl_vector_set (f, i, yi - rat43_F[i]); + } + + return GSL_SUCCESS; +} + +static int +rat43_df (const gsl_vector * x, void *params, gsl_matrix * df) +{ + double b[rat43_P]; + size_t i; + + for (i = 0; i < rat43_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < rat43_N; i++) + { + double xi = i + 1.0; + double e = exp(b[1] - b[2]*xi); + double term1 = 1.0 + e; + double term2 = pow(term1, -1.0 / b[3]); + + gsl_matrix_set (df, i, 0, term2); + gsl_matrix_set (df, i, 1, -b[0] / b[3] * e * term2 / term1); + gsl_matrix_set (df, i, 2, b[0] / b[3] * xi * e * term2 / term1); + gsl_matrix_set (df, i, 3, b[0] / b[3] / b[3] * log(term1) * term2); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf rat43_func = +{ + &rat43_f, + &rat43_df, + NULL, + rat43_N, + rat43_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem rat43_problem = +{ + "nist-rat43", + rat43_x0, + rat43_sigma, + &rat43_epsrel, + rat43_NTRIES, + &rat43_checksol, + &rat43_func +}; diff -Nru gsl-doc-1.16/multifit/test_reg.c gsl-doc-2.3/multifit/test_reg.c --- gsl-doc-1.16/multifit/test_reg.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_reg.c 2016-08-10 21:03:42.000000000 +0000 @@ -0,0 +1,548 @@ +/* generate random square orthogonal matrix via QR decomposition */ +static void +test_random_matrix_orth(gsl_matrix *m, const gsl_rng *r) +{ + const size_t M = m->size1; + gsl_matrix *A = gsl_matrix_alloc(M, M); + gsl_vector *tau = gsl_vector_alloc(M); + gsl_matrix *R = gsl_matrix_alloc(M, M); + + test_random_matrix(A, r, -1.0, 1.0); + gsl_linalg_QR_decomp(A, tau); + gsl_linalg_QR_unpack(A, tau, m, R); + + gsl_matrix_free(A); + gsl_matrix_free(R); + gsl_vector_free(tau); +} + +/* construct ill-conditioned matrix via SVD */ +static void +test_random_matrix_ill(gsl_matrix *m, const gsl_rng *r) +{ + const size_t M = m->size1; + const size_t N = m->size2; + gsl_matrix *U = gsl_matrix_alloc(M, M); + gsl_matrix *V = gsl_matrix_alloc(N, N); + gsl_vector *S = gsl_vector_alloc(N); + gsl_matrix_view Uv = gsl_matrix_submatrix(U, 0, 0, M, N); + const double smin = 16.0 * GSL_DBL_EPSILON; + const double smax = 10.0; + const double ratio = pow(smin / smax, 1.0 / (N - 1.0)); + double s; + size_t j; + + test_random_matrix_orth(U, r); + test_random_matrix_orth(V, r); + + /* compute U * S */ + + s = smax; + for (j = 0; j < N; ++j) + { + gsl_vector_view uj = gsl_matrix_column(U, j); + + gsl_vector_scale(&uj.vector, s); + s *= ratio; + } + + /* compute m = (U * S) * V' */ + gsl_blas_dgemm(CblasNoTrans, CblasTrans, 1.0, &Uv.matrix, V, 0.0, m); + + gsl_matrix_free(U); + gsl_matrix_free(V); + gsl_vector_free(S); +} + +/* solve system with lambda = 0 and test against OLS solution */ +static void +test_reg1(const gsl_matrix * X, const gsl_vector * y, + const gsl_vector * wts, const double tol, + gsl_multifit_linear_workspace * w, const char * desc) +{ + const size_t n = X->size1; + const size_t p = X->size2; + double rnorm, snorm, chisq; + gsl_vector *c0 = gsl_vector_alloc(p); + gsl_vector *c1 = gsl_vector_alloc(p); + gsl_matrix *cov = gsl_matrix_alloc(p, p); + size_t j; + + if (wts) + { + gsl_matrix *Xs = gsl_matrix_alloc(n, p); + gsl_vector *ys = gsl_vector_alloc(n); + + gsl_multifit_wlinear(X, wts, y, c0, cov, &chisq, w); + + gsl_multifit_linear_wstdform1(NULL, X, wts, y, Xs, ys, w); + gsl_multifit_linear_svd(Xs, w); + gsl_multifit_linear_solve(0.0, Xs, ys, c1, &rnorm, &snorm, w); + + gsl_matrix_free(Xs); + gsl_vector_free(ys); + } + else + { + gsl_multifit_linear(X, y, c0, cov, &chisq, w); + + gsl_multifit_linear_svd(X, w); + gsl_multifit_linear_solve(0.0, X, y, c1, &rnorm, &snorm, w); + } + + gsl_test_rel(rnorm*rnorm, chisq, tol, + "test_reg1: %s, lambda = 0, n=%zu p=%zu chisq", desc, n, p); + + /* test c0 = c1 */ + for (j = 0; j < p; ++j) + { + double c0j = gsl_vector_get(c0, j); + double c1j = gsl_vector_get(c1, j); + + gsl_test_rel(c1j, c0j, tol, "test_reg1: %s, lambda = 0, n=%zu p=%zu c0/c1", + desc, n, p); + } + + gsl_vector_free(c0); + gsl_vector_free(c1); + gsl_matrix_free(cov); +} + +/* solve standard form system with given lambda and test against + * normal equations solution, L = I */ +static void +test_reg2(const double lambda, const gsl_matrix * X, const gsl_vector * y, + const gsl_vector * wts, const double tol, + gsl_multifit_linear_workspace * w, const char * desc) +{ + const size_t n = X->size1; + const size_t p = X->size2; + double rnorm0, snorm0; + double rnorm1, snorm1; + gsl_vector *c0 = gsl_vector_alloc(p); + gsl_vector *c1 = gsl_vector_alloc(p); + gsl_matrix *XTX = gsl_matrix_alloc(p, p); /* X^T W X + lambda^2 I */ + gsl_vector *XTy = gsl_vector_alloc(p); /* X^T W y */ + gsl_matrix *Xs = gsl_matrix_alloc(n, p); + gsl_vector *ys = gsl_vector_alloc(n); + gsl_vector_view xtx_diag = gsl_matrix_diagonal(XTX); + gsl_permutation *perm = gsl_permutation_alloc(p); + gsl_vector *r = gsl_vector_alloc(n); + int signum; + size_t j; + + /* compute Xs = sqrt(W) X and ys = sqrt(W) y */ + gsl_multifit_linear_wstdform1(NULL, X, wts, y, Xs, ys, w); + + /* construct XTy = X^T W y */ + gsl_blas_dgemv(CblasTrans, 1.0, Xs, ys, 0.0, XTy); + + /* construct XTX = X^T W X + lambda^2 I */ + gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, Xs, Xs, 0.0, XTX); + gsl_vector_add_constant(&xtx_diag.vector, lambda*lambda); + + /* solve XTX c = XTy with LU decomp */ + gsl_linalg_LU_decomp(XTX, perm, &signum); + gsl_linalg_LU_solve(XTX, perm, XTy, c0); + + /* compute SVD of X */ + gsl_multifit_linear_svd(Xs, w); + + /* solve regularized standard form system with lambda */ + gsl_multifit_linear_solve(lambda, Xs, ys, c1, &rnorm0, &snorm0, w); + + /* test snorm = ||c1|| */ + snorm1 = gsl_blas_dnrm2(c1); + gsl_test_rel(snorm0, snorm1, tol, "test_reg2: %s, snorm lambda=%g n=%zu p=%zu", + desc, lambda, n, p); + + /* test rnorm = ||y - X c1|| */ + gsl_vector_memcpy(r, ys); + gsl_blas_dgemv(CblasNoTrans, -1.0, Xs, c1, 1.0, r); + rnorm1 = gsl_blas_dnrm2(r); + gsl_test_rel(rnorm0, rnorm1, tol, "test_reg2: %s, rnorm lambda=%g n=%zu p=%zu", + desc, lambda, n, p); + + /* test c0 = c1 */ + for (j = 0; j < p; ++j) + { + double c0j = gsl_vector_get(c0, j); + double c1j = gsl_vector_get(c1, j); + + gsl_test_rel(c1j, c0j, tol, "test_reg2: %s, c0/c1 lambda=%g n=%zu p=%zu", + desc, lambda, n, p); + } + + gsl_matrix_free(XTX); + gsl_vector_free(XTy); + gsl_matrix_free(Xs); + gsl_vector_free(ys); + gsl_vector_free(c0); + gsl_vector_free(c1); + gsl_vector_free(r); + gsl_permutation_free(perm); +} + +/* solve system with given lambda and L = diag(L) and test against + * normal equations solution */ +static void +test_reg3(const double lambda, const gsl_vector * L, const gsl_matrix * X, + const gsl_vector * y, const gsl_vector * wts, const double tol, + gsl_multifit_linear_workspace * w, const char * desc) +{ + const size_t n = X->size1; + const size_t p = X->size2; + double rnorm0, snorm0; + double rnorm1, snorm1; + gsl_vector *c0 = gsl_vector_alloc(p); + gsl_vector *c1 = gsl_vector_alloc(p); + gsl_matrix *XTX = gsl_matrix_alloc(p, p); /* X^T W X + lambda^2 L^T L */ + gsl_vector *XTy = gsl_vector_alloc(p); /* X^T W y */ + gsl_matrix *Xs = gsl_matrix_alloc(n, p); /* standard form X~ */ + gsl_vector *ys = gsl_vector_alloc(n); /* standard form y~ */ + gsl_vector *Lc = gsl_vector_alloc(p); + gsl_vector *r = gsl_vector_alloc(n); + gsl_permutation *perm = gsl_permutation_alloc(p); + int signum; + size_t j; + + /* compute Xs = sqrt(W) X, ys = sqrt(W) y */ + gsl_multifit_linear_wstdform1(NULL, X, wts, y, Xs, ys, w); + + /* construct XTy = X^T W y */ + gsl_blas_dgemv(CblasTrans, 1.0, Xs, ys, 0.0, XTy); + + /* construct XTX = X^T W X + lambda^2 L^T L */ + gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, Xs, Xs, 0.0, XTX); + + for (j = 0; j < p; ++j) + { + double lj = gsl_vector_get(L, j); + *gsl_matrix_ptr(XTX, j, j) += pow(lambda * lj, 2.0); + } + + /* solve XTX c = XTy with LU decomp */ + gsl_linalg_LU_decomp(XTX, perm, &signum); + gsl_linalg_LU_solve(XTX, perm, XTy, c0); + + /* solve with reg routine */ + gsl_multifit_linear_wstdform1(L, X, wts, y, Xs, ys, w); + gsl_multifit_linear_svd(Xs, w); + gsl_multifit_linear_solve(lambda, Xs, ys, c1, &rnorm0, &snorm0, w); + gsl_multifit_linear_genform1(L, c1, c1, w); + + /* test snorm = ||L c1|| */ + gsl_vector_memcpy(Lc, c1); + gsl_vector_mul(Lc, L); + snorm1 = gsl_blas_dnrm2(Lc); + gsl_test_rel(snorm0, snorm1, tol, "test_reg3: %s, snorm lambda=%g n=%zu p=%zu", + desc, lambda, n, p); + + /* test rnorm = ||y - X c1||, compute again Xs = sqrt(W) X and ys = sqrt(W) y */ + gsl_multifit_linear_wstdform1(NULL, X, wts, y, Xs, ys, w); + gsl_vector_memcpy(r, ys); + gsl_blas_dgemv(CblasNoTrans, -1.0, Xs, c1, 1.0, r); + rnorm1 = gsl_blas_dnrm2(r); + gsl_test_rel(rnorm0, rnorm1, tol, "test_reg3: %s, rnorm lambda=%g n=%zu p=%zu", + desc, lambda, n, p); + + /* test c0 = c1 */ + for (j = 0; j < p; ++j) + { + double c0j = gsl_vector_get(c0, j); + double c1j = gsl_vector_get(c1, j); + + gsl_test_rel(c1j, c0j, tol, "test_reg3: %s, c0/c1 j=%zu lambda=%g n=%zu p=%zu", + desc, j, lambda, n, p); + } + + gsl_matrix_free(Xs); + gsl_matrix_free(XTX); + gsl_vector_free(XTy); + gsl_vector_free(c0); + gsl_vector_free(c1); + gsl_vector_free(Lc); + gsl_vector_free(ys); + gsl_vector_free(r); + gsl_permutation_free(perm); +} + +/* solve system with given lambda and L and test against + * normal equations solution */ +static void +test_reg4(const double lambda, const gsl_matrix * L, const gsl_matrix * X, + const gsl_vector * y, const gsl_vector * wts, const double tol, + gsl_multifit_linear_workspace * w, const char *desc) +{ + const size_t m = L->size1; + const size_t n = X->size1; + const size_t p = X->size2; + double rnorm0, snorm0; + double rnorm1, snorm1; + gsl_vector *c0 = gsl_vector_alloc(p); + gsl_vector *c1 = gsl_vector_alloc(p); + gsl_matrix *LTL = gsl_matrix_alloc(p, p); /* L^T L */ + gsl_matrix *XTX = gsl_matrix_alloc(p, p); /* X^T W X + lambda^2 L^T L */ + gsl_vector *XTy = gsl_vector_alloc(p); /* X^T W y */ + gsl_permutation *perm = gsl_permutation_alloc(p); + gsl_matrix *Xs = (m < p) ? gsl_matrix_alloc(n - (p - m), m) : gsl_matrix_alloc(n, p); + gsl_vector *ys = (m < p) ? gsl_vector_alloc(n - (p - m)) : gsl_vector_alloc(n); + gsl_matrix *M = (m < p) ? gsl_matrix_alloc(n, p) : gsl_matrix_alloc(m, p); + gsl_vector *cs = (m < p) ? gsl_vector_alloc(m) : gsl_vector_alloc(p); + gsl_matrix *WX = gsl_matrix_alloc(n, p); + gsl_vector *Wy = gsl_vector_alloc(n); + gsl_vector *Lc = gsl_vector_alloc(m); + gsl_vector *r = gsl_vector_alloc(n); + gsl_matrix *LQR = gsl_matrix_alloc(m, p); + gsl_vector *Ltau = gsl_vector_alloc(GSL_MIN(m, p)); + int signum; + size_t j; + + /* compute WX = sqrt(W) X, Wy = sqrt(W) y */ + gsl_multifit_linear_wstdform1(NULL, X, wts, y, WX, Wy, w); + + /* construct XTy = X^T W y */ + gsl_blas_dgemv(CblasTrans, 1.0, WX, Wy, 0.0, XTy); + + /* construct XTX = X^T W X + lambda^2 L^T L */ + gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, L, L, 0.0, LTL); + gsl_matrix_scale(LTL, lambda * lambda); + + gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, WX, WX, 0.0, XTX); + gsl_matrix_add(XTX, LTL); + + /* solve XTX c = XTy with LU decomp */ + gsl_linalg_LU_decomp(XTX, perm, &signum); + gsl_linalg_LU_solve(XTX, perm, XTy, c0); + + /* solve with reg routine */ + gsl_matrix_memcpy(LQR, L); + gsl_multifit_linear_L_decomp(LQR, Ltau); + gsl_multifit_linear_wstdform2(LQR, Ltau, X, wts, y, Xs, ys, M, w); + gsl_multifit_linear_svd(Xs, w); + gsl_multifit_linear_solve(lambda, Xs, ys, cs, &rnorm0, &snorm0, w); + gsl_multifit_linear_wgenform2(LQR, Ltau, X, wts, y, cs, M, c1, w); + + /* test snorm = ||L c1|| */ + gsl_blas_dgemv(CblasNoTrans, 1.0, L, c1, 0.0, Lc); + snorm1 = gsl_blas_dnrm2(Lc); + gsl_test_rel(snorm0, snorm1, tol, "test_reg4: %s snorm lambda=%g", desc, lambda); + + /* test rnorm = ||y - X c1||_W */ + gsl_vector_memcpy(r, Wy); + gsl_blas_dgemv(CblasNoTrans, -1.0, WX, c1, 1.0, r); + rnorm1 = gsl_blas_dnrm2(r); + gsl_test_rel(rnorm0, rnorm1, tol, "test_reg4: %s rnorm lambda=%g", desc, lambda); + + /* test c0 = c1 */ + for (j = 0; j < p; ++j) + { + double c0j = gsl_vector_get(c0, j); + double c1j = gsl_vector_get(c1, j); + + gsl_test_rel(c1j, c0j, tol, "test_reg4: %s lambda=%g n=%zu p=%zu j=%zu", + desc, lambda, n, p, j); + } + + gsl_matrix_free(LTL); + gsl_matrix_free(XTX); + gsl_vector_free(XTy); + gsl_vector_free(c0); + gsl_vector_free(c1); + gsl_permutation_free(perm); + gsl_matrix_free(Xs); + gsl_vector_free(ys); + gsl_vector_free(cs); + gsl_matrix_free(M); + gsl_vector_free(Lc); + gsl_matrix_free(WX); + gsl_vector_free(Wy); + gsl_vector_free(r); + gsl_matrix_free(LQR); + gsl_vector_free(Ltau); +} + +static void +test_reg_system(const size_t n, const size_t p, const gsl_rng *r) +{ + gsl_matrix *X = gsl_matrix_alloc(n, p); + gsl_vector *y = gsl_vector_alloc(n); + gsl_vector *c = gsl_vector_alloc(p); + gsl_vector *wts = gsl_vector_alloc(n); + gsl_multifit_linear_workspace *w = gsl_multifit_linear_alloc(n, p); + gsl_multifit_linear_workspace *wbig = gsl_multifit_linear_alloc(n + 10, p + 5); + gsl_vector *diagL = gsl_vector_alloc(p); + gsl_matrix *Lsqr = gsl_matrix_alloc(p, p); + gsl_matrix *Ltall = gsl_matrix_alloc(5*p, p); + gsl_matrix *L1 = gsl_matrix_alloc(p - 1, p); + gsl_matrix *L2 = gsl_matrix_alloc(p - 2, p); + gsl_matrix *L3 = gsl_matrix_alloc(p - 3, p); + gsl_matrix *L5 = gsl_matrix_alloc(p - 5, p); + size_t i; + + /* generate random weights */ + test_random_vector(wts, r, 0.0, 1.0); + + /* generate well-conditioned system and test against OLS solution */ + test_random_matrix(X, r, -1.0, 1.0); + test_random_vector(y, r, -1.0, 1.0); + test_reg1(X, y, NULL, 1.0e-10, w, "unweighted"); + test_reg1(X, y, wts, 1.0e-10, w, "weighted"); + + /* generate ill-conditioned system */ + test_random_matrix_ill(X, r); + test_random_vector(c, r, -1.0, 1.0); + + /* compute y = X c + noise */ + gsl_blas_dgemv(CblasNoTrans, 1.0, X, c, 0.0, y); + test_random_vector_noise(r, y); + + /* random diag(L) vector */ + test_random_vector(diagL, r, -2.0, 2.0); + + /* random square and tall L matrices */ + test_random_matrix(Lsqr, r, -2.0, 2.0); + test_random_matrix(Ltall, r, -2.0, 2.0); + + gsl_multifit_linear_Lk(p, 1, L1); + gsl_multifit_linear_Lk(p, 2, L2); + gsl_multifit_linear_Lk(p, 3, L3); + gsl_multifit_linear_Lk(p, 5, L5); + + for (i = 0; i < 3; ++i) + { + /* + * can't make lambda too small or normal equations + * approach won't work well + */ + double lambda = pow(10.0, -(double) i); + + /* test unweighted */ + test_reg2(lambda, X, y, NULL, 1.0e-6, w, "unweighted"); + test_reg3(lambda, diagL, X, y, NULL, 1.0e-6, w, "unweighted"); + test_reg4(lambda, Lsqr, X, y, NULL, 1.0e-8, w, "Lsqr unweighted"); + test_reg4(lambda, Ltall, X, y, NULL, 1.0e-8, w, "Ltall unweighted"); + test_reg4(lambda, L1, X, y, NULL, 1.0e-6, w, "L1 unweighted"); + test_reg4(lambda, L2, X, y, NULL, 1.0e-6, w, "L2 unweighted"); + test_reg4(lambda, L3, X, y, NULL, 1.0e-5, w, "L3 unweighted"); + test_reg4(lambda, L5, X, y, NULL, 1.0e-4, w, "L5 unweighted"); + + /* test weighted */ + test_reg2(lambda, X, y, wts, 1.0e-6, w, "weighted"); + test_reg3(lambda, diagL, X, y, wts, 1.0e-6, w, "weighted"); + test_reg4(lambda, Lsqr, X, y, wts, 1.0e-8, w, "Lsqr weighted"); + test_reg4(lambda, L1, X, y, wts, 1.0e-6, w, "L1 weighted"); + test_reg4(lambda, L2, X, y, wts, 1.0e-6, w, "L2 weighted"); + test_reg4(lambda, L3, X, y, wts, 1.0e-5, w, "L3 weighted"); + test_reg4(lambda, L5, X, y, wts, 1.0e-4, w, "L5 weighted"); + + /* test again with larger workspace */ + test_reg2(lambda, X, y, NULL, 1.0e-6, wbig, "unweighted big"); + test_reg3(lambda, diagL, X, y, NULL, 1.0e-6, wbig, "unweighted big"); + test_reg4(lambda, Lsqr, X, y, NULL, 1.0e-8, wbig, "Lsqr unweighted big"); + test_reg4(lambda, L1, X, y, NULL, 1.0e-6, wbig, "L1 unweighted big"); + test_reg4(lambda, L2, X, y, NULL, 1.0e-6, wbig, "L2 unweighted big"); + test_reg4(lambda, L3, X, y, NULL, 1.0e-5, wbig, "L3 unweighted big"); + test_reg4(lambda, L5, X, y, NULL, 1.0e-4, wbig, "L5 unweighted big"); + + test_reg2(lambda, X, y, wts, 1.0e-6, wbig, "weighted big"); + test_reg3(lambda, diagL, X, y, wts, 1.0e-6, wbig, "weighted big"); + test_reg4(lambda, Lsqr, X, y, wts, 1.0e-8, wbig, "Lsqr weighted big"); + test_reg4(lambda, L1, X, y, wts, 1.0e-6, wbig, "L1 weighted big"); + test_reg4(lambda, L2, X, y, wts, 1.0e-6, wbig, "L2 weighted big"); + test_reg4(lambda, L3, X, y, wts, 1.0e-5, wbig, "L3 weighted big"); + test_reg4(lambda, L5, X, y, wts, 1.0e-4, wbig, "L5 weighted big"); + } + + gsl_matrix_free(X); + gsl_vector_free(y); + gsl_vector_free(c); + gsl_vector_free(wts); + gsl_vector_free(diagL); + gsl_matrix_free(Lsqr); + gsl_matrix_free(Ltall); + gsl_matrix_free(L1); + gsl_matrix_free(L2); + gsl_matrix_free(L3); + gsl_matrix_free(L5); + gsl_multifit_linear_free(w); + gsl_multifit_linear_free(wbig); +} + +static void +test_reg_sobolev(const size_t p, const size_t kmax, const gsl_rng *r) +{ + const double tol = 1.0e-12; + size_t i, j, k; + gsl_matrix *L = gsl_matrix_calloc(p, p); + gsl_matrix *LTL = gsl_matrix_alloc(p, p); /* Sobolov L^T L */ + gsl_matrix *LTL2 = gsl_matrix_alloc(p, p); /* alternate L^T L */ + gsl_matrix *Li = gsl_matrix_alloc(p, p); + gsl_multifit_linear_workspace *w = gsl_multifit_linear_alloc(p, p); + + for (k = 0; k <= kmax; ++k) + { + gsl_vector *alpha = gsl_vector_alloc(k + 1); + + /* random weights */ + test_random_vector(alpha, r, 0.0, 1.0); + + /* compute Sobolev matrix */ + gsl_multifit_linear_Lsobolev(p, k, alpha, L, w); + + /* compute LTL = L^T L */ + gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, L, L, 0.0, LTL); + + /* now compute LTL2 = L^T L using individual L_i factors */ + { + gsl_matrix_set_zero(LTL2); + for (i = 0; i <= k; ++i) + { + gsl_matrix_view Liv = gsl_matrix_submatrix(Li, 0, 0, p - i, p); + double ai = gsl_vector_get(alpha, i); + + /* compute a_i L_i */ + gsl_multifit_linear_Lk(p, i, &Liv.matrix); + gsl_matrix_scale(&Liv.matrix, ai); + + /* LTL += L_i^T L_i */ + gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, &Liv.matrix, &Liv.matrix, 1.0, LTL2); + } + } + + /* test LTL = LTL2 */ + for (i = 0; i < p; ++i) + { + for (j = 0; j < p; ++j) + { + double aij = gsl_matrix_get(LTL, i, j); + double bij = gsl_matrix_get(LTL2, i, j); + + gsl_test_rel(aij, bij, tol, "sobolov k=%zu LTL(%zu,%zu)", k, i, j); + } + } + + gsl_vector_free(alpha); + } + + gsl_matrix_free(L); + gsl_matrix_free(Li); + gsl_matrix_free(LTL); + gsl_matrix_free(LTL2); + gsl_multifit_linear_free(w); +} + +/* test linear regularized regression */ +static void +test_reg(void) +{ + gsl_rng *r = gsl_rng_alloc(gsl_rng_default); + + test_reg_system(100, 15, r); + test_reg_system(100, 50, r); + test_reg_system(100, 99, r); + + test_reg_sobolev(20, 10, r); + + gsl_rng_free(r); +} diff -Nru gsl-doc-1.16/multifit/test_rosenbrock.c gsl-doc-2.3/multifit/test_rosenbrock.c --- gsl-doc-1.16/multifit/test_rosenbrock.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_rosenbrock.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,73 @@ +#define rosenbrock_N 2 +#define rosenbrock_P 2 + +#define rosenbrock_NTRIES 4 + +static double rosenbrock_x0[rosenbrock_P] = { -1.2, 1.0 }; +static double rosenbrock_epsrel = 1.0e-12; + +static void +rosenbrock_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < rosenbrock_P; ++i) + { + gsl_test_rel(x[i], 1.0, epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +rosenbrock_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + + gsl_vector_set(f, 0, 10.0 * (x2 - x1*x1)); + gsl_vector_set(f, 1, 1.0 - x1); + + return GSL_SUCCESS; +} + +static int +rosenbrock_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + + gsl_matrix_set(J, 0, 0, -20.0*x1); + gsl_matrix_set(J, 0, 1, 10.0); + gsl_matrix_set(J, 1, 0, -1.0); + gsl_matrix_set(J, 1, 1, 0.0); + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf rosenbrock_func = +{ + &rosenbrock_f, + &rosenbrock_df, + NULL, + rosenbrock_N, + rosenbrock_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem rosenbrock_problem = +{ + "rosenbrock", + rosenbrock_x0, + NULL, + &rosenbrock_epsrel, + rosenbrock_NTRIES, + &rosenbrock_checksol, + &rosenbrock_func +}; diff -Nru gsl-doc-1.16/multifit/test_rosenbrocke.c gsl-doc-2.3/multifit/test_rosenbrocke.c --- gsl-doc-1.16/multifit/test_rosenbrocke.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_rosenbrocke.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,88 @@ +#define rosenbrocke_N 8 /* = p */ +#define rosenbrocke_P 8 /* must be even */ + +#define rosenbrocke_NTRIES 4 + +static double rosenbrocke_x0[rosenbrocke_P] = { -1.2, 1.0, -1.2, 1.0, + -1.2, 1.0, -1.2, 1.0 }; + +static double rosenbrocke_epsrel = 1.0e-12; + +static void +rosenbrocke_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + const double rosenbrocke_x[rosenbrocke_P] = { 1.0, 1.0, 1.0, 1.0, + 1.0, 1.0, 1.0, 1.0 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < rosenbrocke_P; ++i) + { + gsl_test_rel(x[i], rosenbrocke_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +rosenbrocke_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + size_t i; + + for (i = 0; i < rosenbrocke_N / 2; ++i) + { + double x2i = gsl_vector_get(x, 2*i + 1); + double x2im1 = gsl_vector_get(x, 2*i); + + gsl_vector_set(f, 2*i, 10.0 * (x2i - x2im1*x2im1)); + gsl_vector_set(f, 2*i + 1, 1.0 - x2im1); + } + + return GSL_SUCCESS; +} + +static int +rosenbrocke_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + size_t i; + + gsl_matrix_set_zero(J); + + for (i = 0; i < rosenbrocke_N / 2; ++i) + { + double x2im1 = gsl_vector_get(x, 2*i); + + gsl_matrix_set(J, 2*i, 2*i, -20.0*x2im1); + gsl_matrix_set(J, 2*i, 2*i + 1, 10.0); + gsl_matrix_set(J, 2*i + 1, 2*i, -1.0); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf rosenbrocke_func = +{ + &rosenbrocke_f, + &rosenbrocke_df, + NULL, + rosenbrocke_N, + rosenbrocke_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem rosenbrocke_problem = +{ + "rosenbrock_extended", + rosenbrocke_x0, + NULL, + &rosenbrocke_epsrel, + rosenbrocke_NTRIES, + &rosenbrocke_checksol, + &rosenbrocke_func +}; diff -Nru gsl-doc-1.16/multifit/test_roth.c gsl-doc-2.3/multifit/test_roth.c --- gsl-doc-1.16/multifit/test_roth.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_roth.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,89 @@ +#define roth_N 2 +#define roth_P 2 + +#define roth_NTRIES 3 + +static double roth_x0[roth_P] = { 0.5, -2.0 }; +static double roth_epsrel = 1.0e-8; + +static void +roth_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact1 = 0.0; + const double roth_x1[roth_P] = { 5.0, 4.0 }; + const double sumsq_exact2 = 48.9842536792400; + const double roth_x2[roth_P] = { 11.4127789869021, -0.896805253274477 }; + const double *roth_x; + double sumsq_exact; + + if (fabs(sumsq) < 0.1) + { + sumsq_exact = sumsq_exact1; + roth_x = roth_x1; + } + else + { + sumsq_exact = sumsq_exact2; + roth_x = roth_x2; + } + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < roth_P; ++i) + { + gsl_test_rel(x[i], roth_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +roth_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + + gsl_vector_set(f, 0, x1 - x2*(2.0 - x2*(5.0 - x2)) - 13.0); + gsl_vector_set(f, 1, x1 - x2*(14.0 - x2*(1.0 + x2)) - 29.0); + + return GSL_SUCCESS; +} + +static int +roth_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x2 = gsl_vector_get(x, 1); + + gsl_matrix_set(J, 0, 0, 1.0); + gsl_matrix_set(J, 0, 1, -2.0 + x2*(10.0 - 3.0*x2)); + gsl_matrix_set(J, 1, 0, 1.0); + gsl_matrix_set(J, 1, 1, -14.0 + x2*(2.0 + 3.0*x2)); + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf roth_func = +{ + &roth_f, + &roth_df, + NULL, + roth_N, + roth_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem roth_problem = +{ + "roth_freudenstein", + roth_x0, + NULL, + &roth_epsrel, + roth_NTRIES, + &roth_checksol, + &roth_func +}; diff -Nru gsl-doc-1.16/multifit/test_shaw.c gsl-doc-2.3/multifit/test_shaw.c --- gsl-doc-1.16/multifit/test_shaw.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_shaw.c 2016-11-30 21:31:39.000000000 +0000 @@ -0,0 +1,353 @@ +/* + * test_shaw.c + * + * Test L-curve (Tikhonov) regression routines using Shaw + * problem. See example 1.10 of + * + * [1] R.C. Aster, B. Borchers and C. H. Thurber, + * Parameter Estimation and Inverse Problems (2nd ed), 2012. + */ + +#include + +/* alternate (and inefficient) method of computing G(lambda) */ +static double +shaw_gcv_G(const double lambda, const gsl_matrix * X, const gsl_vector * y, + gsl_multifit_linear_workspace * work) +{ + const size_t n = X->size1; + const size_t p = X->size2; + gsl_matrix * XTX = gsl_matrix_alloc(p, p); + gsl_matrix * XI = gsl_matrix_alloc(p, n); + gsl_matrix * XXI = gsl_matrix_alloc(n, n); + gsl_vector * c = gsl_vector_alloc(p); + gsl_vector_view d; + double rnorm, snorm; + double term1, term2, G; + size_t i; + + /* compute regularized solution with this lambda */ + gsl_multifit_linear_solve(lambda, X, y, c, &rnorm, &snorm, work); + + /* compute X^T X */ + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, X, 0.0, XTX); + + /* add lambda*I */ + d = gsl_matrix_diagonal(XTX); + gsl_vector_add_constant(&d.vector, lambda * lambda); + + /* invert (X^T X + lambda*I) */ + gsl_linalg_cholesky_decomp1(XTX); + gsl_linalg_cholesky_invert(XTX); + gsl_matrix_transpose_tricpy('L', 0, XTX, XTX); + + /* XI = (X^T X + lambda*I)^{-1} X^T */ + gsl_blas_dgemm(CblasNoTrans, CblasTrans, 1.0, XTX, X, 0.0, XI); + + /* XXI = X (X^T X + lambda*I)^{-1} X^T */ + gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, X, XI, 0.0, XXI); + + /* compute: term1 = Tr(I - X XI) */ + term1 = 0.0; + for (i = 0; i < n; ++i) + { + double *Ai = gsl_matrix_ptr(XXI, i, i); + term1 += 1.0 - (*Ai); + } + + gsl_matrix_free(XTX); + gsl_matrix_free(XI); + gsl_matrix_free(XXI); + gsl_vector_free(c); + + term2 = rnorm / term1; + + return term2 * term2;; +} + +/* construct design matrix and rhs vector for Shaw problem */ +static int +shaw_system(gsl_matrix * X, gsl_vector * y) +{ + int s = GSL_SUCCESS; + const size_t n = X->size1; + const size_t p = X->size2; + const double dtheta = M_PI / (double) p; + size_t i, j; + gsl_vector *m = gsl_vector_alloc(p); + + /* build the design matrix */ + for (i = 0; i < n; ++i) + { + double si = (i + 0.5) * M_PI / n - M_PI / 2.0; + double csi = cos(si); + double sni = sin(si); + + for (j = 0; j < p; ++j) + { + double thetaj = (j + 0.5) * M_PI / p - M_PI / 2.0; + double term1 = csi + cos(thetaj); + double term2 = gsl_sf_sinc(sni + sin(thetaj)); + double Xij = term1 * term1 * term2 * term2 * dtheta; + + gsl_matrix_set(X, i, j, Xij); + } + } + + /* construct coefficient vector */ + { + const double a1 = 2.0; + const double a2 = 1.0; + const double c1 = 6.0; + const double c2 = 2.0; + const double t1 = 0.8; + const double t2 = -0.5; + + for (j = 0; j < p; ++j) + { + double tj = -M_PI / 2.0 + (j + 0.5) * dtheta; + double mj = a1 * exp(-c1 * (tj - t1) * (tj - t1)) + + a2 * exp(-c2 * (tj - t2) * (tj - t2)); + gsl_vector_set(m, j, mj); + } + } + + /* construct rhs vector */ + gsl_blas_dgemv(CblasNoTrans, 1.0, X, m, 0.0, y); + + gsl_vector_free(m); + + return s; +} + +static int +test_shaw_system_l(gsl_rng *rng_p, const size_t n, const size_t p, + const double lambda_expected, + gsl_vector *rhs) +{ + const size_t npoints = 1000; /* number of points on L-curve */ + const double tol1 = 1.0e-12; + const double tol2 = 1.0e-10; + const double tol3 = 1.0e-5; + gsl_vector * reg_param = gsl_vector_alloc(npoints); + gsl_vector * rho = gsl_vector_alloc(npoints); + gsl_vector * eta = gsl_vector_alloc(npoints); + + gsl_matrix * X = gsl_matrix_alloc(n, p); + gsl_matrix * cov = gsl_matrix_alloc(p, p); + gsl_vector * c = gsl_vector_alloc(p); + gsl_vector * ytmp = gsl_vector_alloc(n); + gsl_vector * y; + gsl_vector * r = gsl_vector_alloc(n); + gsl_multifit_linear_workspace * work = + gsl_multifit_linear_alloc (n, p); + + size_t reg_idx, i; + double lambda, rnorm, snorm; + + /* build design matrix */ + shaw_system(X, ytmp); + + if (rhs) + y = rhs; + else + { + y = ytmp; + + /* add random noise to exact rhs vector */ + test_random_vector_noise(rng_p, y); + } + + /* SVD decomposition */ + gsl_multifit_linear_svd(X, work); + + /* calculate L-curve */ + gsl_multifit_linear_lcurve(y, reg_param, rho, eta, work); + + /* test rho and eta vectors */ + for (i = 0; i < npoints; ++i) + { + double rhoi = gsl_vector_get(rho, i); + double etai = gsl_vector_get(eta, i); + double lami = gsl_vector_get(reg_param, i); + + /* solve regularized system and check for consistent rho/eta values */ + gsl_multifit_linear_solve(lami, X, y, c, &rnorm, &snorm, work); + gsl_test_rel(rhoi, rnorm, tol3, "shaw rho n=%zu p=%zu lambda=%e", + n, p, lami); + gsl_test_rel(etai, snorm, tol1, "shaw eta n=%zu p=%zu lambda=%e", + n, p, lami); + } + + /* calculate corner of L-curve */ + gsl_multifit_linear_lcorner(rho, eta, ®_idx); + + lambda = gsl_vector_get(reg_param, reg_idx); + + /* test against known lambda value if given */ + if (lambda_expected > 0.0) + { + gsl_test_rel(lambda, lambda_expected, tol1, + "shaw: n=%zu p=%zu L-curve corner lambda", + n, p); + } + + /* compute regularized solution with optimal lambda */ + gsl_multifit_linear_solve(lambda, X, y, c, &rnorm, &snorm, work); + + /* compute residual norm ||y - X c|| */ + gsl_vector_memcpy(r, y); + gsl_blas_dgemv(CblasNoTrans, 1.0, X, c, -1.0, r); + + /* test rnorm value */ + gsl_test_rel(rnorm, gsl_blas_dnrm2(r), tol2, + "shaw: n=%zu p=%zu rnorm", n, p); + + /* test snorm value */ + gsl_test_rel(snorm, gsl_blas_dnrm2(c), tol2, + "shaw: n=%zu p=%zu snorm", n, p); + + gsl_matrix_free(X); + gsl_matrix_free(cov); + gsl_vector_free(reg_param); + gsl_vector_free(rho); + gsl_vector_free(eta); + gsl_vector_free(r); + gsl_vector_free(c); + gsl_vector_free(ytmp); + gsl_multifit_linear_free(work); + + return 0; +} /* test_shaw_system_l() */ + +static int +test_shaw_system_gcv(gsl_rng *rng_p, const size_t n, const size_t p, + const double lambda_expected, + gsl_vector *rhs) +{ + const size_t npoints = 200; /* number of points on L-curve */ + const double tol1 = 1.0e-12; + const double tol2 = 1.0e-10; + const double tol3 = 1.0e-5; + gsl_vector * reg_param = gsl_vector_alloc(npoints); + gsl_vector * G = gsl_vector_alloc(npoints); + + gsl_matrix * X = gsl_matrix_alloc(n, p); + gsl_matrix * cov = gsl_matrix_alloc(p, p); + gsl_vector * c = gsl_vector_alloc(p); + gsl_vector * ytmp = gsl_vector_alloc(n); + gsl_vector * y; + gsl_vector * r = gsl_vector_alloc(n); + gsl_multifit_linear_workspace * work = + gsl_multifit_linear_alloc (n, p); + + size_t reg_idx, i; + double lambda, rnorm, snorm, G_lambda; + + /* build design matrix */ + shaw_system(X, ytmp); + + if (rhs) + y = rhs; + else + { + y = ytmp; + + /* add random noise to exact rhs vector */ + test_random_vector_noise(rng_p, y); + } + + /* SVD decomposition */ + gsl_multifit_linear_svd(X, work); + + /* calculate GCV curve */ + gsl_multifit_linear_gcv(y, reg_param, G, &lambda, &G_lambda, work); + + /* test G vector */ + for (i = 0; i < npoints; ++i) + { + double lami = gsl_vector_get(reg_param, i); + + if (lami > 1.0e-5) + { + /* test unreliable for small lambda */ + double Gi = gsl_vector_get(G, i); + double Gi_expected = shaw_gcv_G(lami, X, y, work); + + gsl_test_rel(Gi, Gi_expected, tol3, "shaw[%zu,%zu] gcv G i=%zu lambda=%e", + n, p, i, lami); + } + } + + /* test against known lambda value if given */ + if (lambda_expected > 0.0) + { + gsl_test_rel(lambda, lambda_expected, tol2, + "shaw gcv: n=%zu p=%zu lambda", + n, p); + } + + /* compute regularized solution with optimal lambda */ + gsl_multifit_linear_solve(lambda, X, y, c, &rnorm, &snorm, work); + + /* compute residual norm ||y - X c|| */ + gsl_vector_memcpy(r, y); + gsl_blas_dgemv(CblasNoTrans, 1.0, X, c, -1.0, r); + + /* test rnorm value */ + gsl_test_rel(rnorm, gsl_blas_dnrm2(r), tol2, + "shaw gcv: n=%zu p=%zu rnorm", n, p); + + /* test snorm value */ + gsl_test_rel(snorm, gsl_blas_dnrm2(c), tol2, + "shaw gcv: n=%zu p=%zu snorm", n, p); + + gsl_matrix_free(X); + gsl_matrix_free(cov); + gsl_vector_free(reg_param); + gsl_vector_free(G); + gsl_vector_free(r); + gsl_vector_free(c); + gsl_vector_free(ytmp); + gsl_multifit_linear_free(work); + + return 0; +} /* test_shaw_system_gcv() */ + +void +test_shaw(void) +{ + gsl_rng * r = gsl_rng_alloc(gsl_rng_default); + + { + double shaw20_y[] = { + 8.7547455124379323e-04, 5.4996835885761936e-04, + 1.7527999407005367e-06, 1.9552372913117047e-03, + 1.4411645433785081e-02, 5.2800013336393704e-02, + 1.3609152023257112e-01, 2.7203484587635818e-01, + 4.3752225136193390e-01, 5.7547667319875240e-01, + 6.2445052213539942e-01, 5.6252658286441348e-01, + 4.2322239923561566e-01, 2.6768469219560631e-01, + 1.4337901162734543e-01, 6.5614569346074361e-02, + 2.6013851831752945e-02, 9.2336933089481269e-03, + 3.2269066658993694e-03, 1.3999201459261811e-03 }; + gsl_vector_view rhs = gsl_vector_view_array(shaw20_y, 20); + + /* lambda and rhs values from [1] */ + test_shaw_system_l(r, 20, 20, 5.793190958069266e-06, &rhs.vector); + + test_shaw_system_gcv(r, 20, 20, 1.24921780949051038e-05, &rhs.vector); + } + + { + size_t n, p; + + for (n = 10; n <= 50; n += 2) + { + for (p = n - 6; p <= n; p += 2) + test_shaw_system_l(r, n, p, -1.0, NULL); + } + } + + gsl_rng_free(r); +} /* test_shaw() */ diff -Nru gsl-doc-1.16/multifit/test_thurber.c gsl-doc-2.3/multifit/test_thurber.c --- gsl-doc-1.16/multifit/test_thurber.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_thurber.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,136 @@ +#define thurber_N 37 +#define thurber_P 7 + +#define thurber_NTRIES 1 + +static double thurber_x0[thurber_P] = { 1000.0, 1000.0, 400.0, 40.0, + 0.7, 0.3, 0.03 }; + +static double thurber_epsrel = 1.0e-6; + +static double thurber_sigma[thurber_P] = { + 4.6647963344E+00, 3.9571156086E+01, 2.8698696102E+01, + 5.5675370270E+00, 3.1333340687E-02, 1.4984928198E-02, + 6.5842344623E-03 +}; + +static double thurber_X[thurber_N] = { + -3.067, -2.981, -2.921, -2.912, -2.840, -2.797, -2.702, + -2.699, -2.633, -2.481, -2.363, -2.322, -1.501, -1.460, + -1.274, -1.212, -1.100, -1.046, -0.915, -0.714, -0.566, + -0.545, -0.400, -0.309, -0.109, -0.103, 0.010, 0.119, + 0.377, 0.790, 0.963, 1.006, 1.115, 1.572, 1.841, + 2.047, 2.200 +}; + +static double thurber_F[thurber_N] = { + 80.574, 84.248, 87.264, 87.195, 89.076, 89.608, 89.868, 90.101, + 92.405, 95.854, 100.696, 101.060, 401.672, 390.724, 567.534, + 635.316, 733.054, 759.087, 894.206, 990.785, 1090.109, 1080.914, + 1122.643, 1178.351, 1260.531, 1273.514, 1288.339, 1327.543, 1353.863, + 1414.509, 1425.208, 1421.384, 1442.962, 1464.350, 1468.705, + 1447.894, 1457.628 +}; + +static void +thurber_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 5.6427082397E+03; + const double thurber_x[thurber_P] = { + 1.2881396800E+03, 1.4910792535E+03, 5.8323836877E+02, + 7.5416644291E+01, 9.6629502864E-01, 3.9797285797E-01, + 4.9727297349E-02 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < thurber_P; ++i) + { + gsl_test_rel(x[i], thurber_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + + +static int +thurber_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[thurber_P]; + size_t i; + + for (i = 0; i < thurber_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < thurber_N; i++) + { + double xi = thurber_X[i]; + double yi; + + yi = b[0] + b[1]*xi + b[2]*xi*xi + b[3]*xi*xi*xi; + yi /= 1.0 + b[4]*xi + b[5]*xi*xi + b[6]*xi*xi*xi; + + gsl_vector_set (f, i, yi - thurber_F[i]); + } + + return GSL_SUCCESS; +} + +static int +thurber_df (const gsl_vector * x, void *params, gsl_matrix * df) +{ + double b[thurber_P]; + size_t i; + + for (i = 0; i < thurber_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < thurber_N; i++) + { + double xi = thurber_X[i]; + double d, n, d_sq; + + n = b[0] + b[1]*xi + b[2]*xi*xi + b[3]*xi*xi*xi; + d = 1.0 + b[4]*xi + b[5]*xi*xi + b[6]*xi*xi*xi; + d_sq = d * d; + + gsl_matrix_set (df, i, 0, 1.0 / d); + gsl_matrix_set (df, i, 1, xi / d); + gsl_matrix_set (df, i, 2, (xi * xi) / d); + gsl_matrix_set (df, i, 3, (xi * xi * xi) / d); + gsl_matrix_set (df, i, 4, -xi * n / d_sq); + gsl_matrix_set (df, i, 5, -xi * xi * n / d_sq); + gsl_matrix_set (df, i, 6, -xi * xi * xi * n / d_sq); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf thurber_func = +{ + &thurber_f, + &thurber_df, + NULL, + thurber_N, + thurber_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem thurber_problem = +{ + "nist-thurber", + thurber_x0, + thurber_sigma, + &thurber_epsrel, + thurber_NTRIES, + &thurber_checksol, + &thurber_func +}; diff -Nru gsl-doc-1.16/multifit/test_vardim.c gsl-doc-2.3/multifit/test_vardim.c --- gsl-doc-1.16/multifit/test_vardim.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_vardim.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,94 @@ +#define vardim_N 7 /* p + 2 */ +#define vardim_P 5 + +#define vardim_NTRIES 4 + +static double vardim_x0[vardim_P] = { 0.8, 0.6, 0.4, 0.2, 0.0 }; + +static double vardim_epsrel = 1.0e-12; + +static void +vardim_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < vardim_P; ++i) + { + gsl_test_rel(x[i], 1.0, epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +vardim_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + size_t i; + double sum = 0.0; + + for (i = 0; i < vardim_P; ++i) + { + double xi = gsl_vector_get(x, i); + + gsl_vector_set(f, i, xi - 1.0); + + sum += (i + 1.0) * (xi - 1.0); + } + + gsl_vector_set(f, vardim_P, sum); + gsl_vector_set(f, vardim_P + 1, sum*sum); + + return GSL_SUCCESS; +} + +static int +vardim_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + size_t i; + double sum = 0.0; + gsl_matrix_view m = gsl_matrix_submatrix(J, 0, 0, vardim_P, vardim_P); + + gsl_matrix_set_identity(&m.matrix); + + for (i = 0; i < vardim_P; ++i) + { + double xi = gsl_vector_get(x, i); + sum += (i + 1.0) * (xi - 1.0); + } + + for (i = 0; i < vardim_P; ++i) + { + gsl_matrix_set(J, vardim_P, i, i + 1.0); + gsl_matrix_set(J, vardim_P + 1, i, 2*(i + 1.0)*sum); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf vardim_func = +{ + &vardim_f, + &vardim_df, + NULL, + vardim_N, + vardim_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem vardim_problem = +{ + "vardim", + vardim_x0, + NULL, + &vardim_epsrel, + vardim_NTRIES, + &vardim_checksol, + &vardim_func +}; diff -Nru gsl-doc-1.16/multifit/test_watson.c gsl-doc-2.3/multifit/test_watson.c --- gsl-doc-1.16/multifit/test_watson.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_watson.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,127 @@ +#define watson_N 31 +#define watson_P 6 + +#define watson_NTRIES 4 + +static double watson_x0[watson_P] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; +static double watson_epsrel = 1.0e-6; + +static void +watson_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 2.287670053552372e-03; + const double watson_x[watson_P] = { + -1.572508640629858e-02, 1.012434869366059e+00, -2.329916259263380e-01, + 1.260430087686035e+00, -1.513728922580576e+00, 9.929964323646112e-01 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < watson_P; ++i) + { + gsl_test_rel(x[i], watson_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +watson_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + const double x1 = gsl_vector_get(x, 0); + const double x2 = gsl_vector_get(x, 1); + size_t i, j; + + for (i = 0; i < watson_N - 2; ++i) + { + double ti = (i + 1) / 29.0; + double tjm1 = 1.0, tjm2 = 1.0; + double sum1 = 0.0, sum2 = 0.0; + + for (j = 0; j < watson_P; ++j) + { + double xj = gsl_vector_get(x, j); + + sum1 += xj * tjm1; + tjm1 *= ti; + + if (j > 0) + { + sum2 += j * xj * tjm2; + tjm2 *= ti; + } + } + + gsl_vector_set (f, i, sum2 - sum1*sum1 - 1.0); + } + + gsl_vector_set(f, watson_N - 2, x1); + gsl_vector_set(f, watson_N - 1, x2 - x1*x1 - 1.0); + + return GSL_SUCCESS; +} + +static int +watson_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get (x, 0); + size_t i, j; + + gsl_matrix_set_zero(J); + + for (i = 0; i < watson_N - 2; ++i) + { + double ti = (i + 1) / 29.0; + double tjm1 = 1.0, tjm2 = 1.0; + double sum1 = 0.0; + + for (j = 0; j < watson_P; ++j) + { + double xj = gsl_vector_get(x, j); + sum1 += xj * tjm1; + tjm1 *= ti; + } + + tjm1 = 1.0; + tjm2 = 1.0; + for (j = 0; j < watson_P; ++j) + { + gsl_matrix_set(J, i, j, j * tjm2 - 2.0*sum1*tjm1); + tjm1 *= ti; + + if (j > 0) + tjm2 *= ti; + } + } + + gsl_matrix_set(J, watson_N - 2, 0, 1.0); + gsl_matrix_set(J, watson_N - 1, 0, -2.0*x1); + gsl_matrix_set(J, watson_N - 1, 1, 1.0); + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf watson_func = +{ + &watson_f, + &watson_df, + NULL, + watson_N, + watson_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem watson_problem = +{ + "watson", + watson_x0, + NULL, + &watson_epsrel, + watson_NTRIES, + &watson_checksol, + &watson_func +}; diff -Nru gsl-doc-1.16/multifit/test_wnlin.c gsl-doc-2.3/multifit/test_wnlin.c --- gsl-doc-1.16/multifit/test_wnlin.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_wnlin.c 2016-08-23 20:28:28.000000000 +0000 @@ -0,0 +1,154 @@ +#define wnlin_N 40 +#define wnlin_P 3 + +#define wnlin_NTRIES 1 + +static double wnlin_x0[wnlin_P] = { 1.0, 0.0, 0.0 }; +static double wnlin_epsrel = 1.0e-8; + +static int wnlin_internal_weight = 1; + +/* data */ +static double wnlin_Y[wnlin_N] = { + 6.08035e+00, 5.47552e+00, 5.94654e+00, 5.04920e+00, 4.78568e+00, + 3.51748e+00, 2.84671e+00, 3.24634e+00, 3.23395e+00, 3.30385e+00, + 2.83439e+00, 2.31891e+00, 2.33858e+00, 2.40559e+00, 2.41856e+00, + 1.99966e+00, 1.88127e+00, 1.91477e+00, 1.70415e+00, 1.60316e+00, + 1.77937e+00, 1.55302e+00, 1.50903e+00, 1.36364e+00, 1.36873e+00, + 1.41954e+00, 1.37778e+00, 1.23573e+00, 1.28524e+00, 1.46327e+00, + 1.22315e+00, 1.19330e+00, 1.18717e+00, 8.83172e-01, 1.23424e+00, + 1.14683e+00, 1.11091e+00, 1.20396e+00, 1.28722e+00, 1.05801e+00 +}; + +/* weights */ +static double wnlin_W[wnlin_N] = { + 2.77778e+00, 3.27690e+00, 3.85426e+00, 4.51906e+00, 5.28083e+00, + 6.14919e+00, 7.13370e+00, 8.24349e+00, 9.48703e+00, 1.08717e+01, + 1.24036e+01, 1.40869e+01, 1.59238e+01, 1.79142e+01, 2.00553e+01, + 2.23415e+01, 2.47646e+01, 2.73137e+01, 2.99753e+01, 3.27337e+01, + 3.55714e+01, 3.84696e+01, 4.14085e+01, 4.43678e+01, 4.73278e+01, + 5.02690e+01, 5.31731e+01, 5.60234e+01, 5.88046e+01, 6.15036e+01, + 6.41092e+01, 6.66121e+01, 6.90054e+01, 7.12839e+01, 7.34442e+01, + 7.54848e+01, 7.74053e+01, 7.92069e+01, 8.08918e+01, 8.24632e+01 +}; + +static void +wnlin_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 29.7481259665713758; + const double wnlin_x[wnlin_P] = { 5.17378551196259195, + 0.111041758006851149, + 1.05282724070446099 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < wnlin_P; ++i) + { + gsl_test_rel(x[i], wnlin_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +wnlin_f (const gsl_vector *x, void *params, gsl_vector *f) +{ + int *iptr = (int *) params; + int doweight = iptr ? *iptr : 0; + double A = gsl_vector_get (x, 0); + double lambda = gsl_vector_get (x, 1); + double b = gsl_vector_get (x, 2); + size_t i; + + /* model Yi = A * exp(-lambda * i) + b */ + for (i = 0; i < wnlin_N; i++) + { + double ti = i; + double yi = wnlin_Y[i]; + double swi = sqrt(wnlin_W[i]); + double Mi = A * exp (-lambda * ti) + b; + + if (doweight) + gsl_vector_set (f, i, swi * (Mi - yi)); + else + gsl_vector_set (f, i, Mi - yi); + } + + return GSL_SUCCESS; +} + +static int +wnlin_df (const gsl_vector *x, void *params, gsl_matrix *df) +{ + int *iptr = (int *) params; + int doweight = iptr ? *iptr : 0; + double A = gsl_vector_get (x, 0); + double lambda = gsl_vector_get (x, 1); + size_t i; + + for (i = 0; i < wnlin_N; i++) + { + gsl_vector_view v = gsl_matrix_row(df, i); + double ti = i; + double swi = sqrt(wnlin_W[i]); + double e = exp(-lambda * ti); + + gsl_vector_set(&v.vector, 0, e); + gsl_vector_set(&v.vector, 1, -ti * A * e); + gsl_vector_set(&v.vector, 2, 1.0); + + if (doweight) + gsl_vector_scale(&v.vector, swi); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf wnlin_func1 = +{ + &wnlin_f, + &wnlin_df, + NULL, + wnlin_N, + wnlin_P, + (void *) &wnlin_internal_weight, + 0, + 0 +}; + +static gsl_multifit_function_fdf wnlin_func2 = +{ + &wnlin_f, + &wnlin_df, + NULL, + wnlin_N, + wnlin_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem wnlin_problem1 = +{ + "wnlin_internal_weights", + wnlin_x0, + NULL, + &wnlin_epsrel, + wnlin_NTRIES, + &wnlin_checksol, + &wnlin_func1 +}; + +static test_fdf_problem wnlin_problem2 = +{ + "wnlin_external_weights", + wnlin_x0, + NULL, + &wnlin_epsrel, + wnlin_NTRIES, + &wnlin_checksol, + &wnlin_func2 +}; diff -Nru gsl-doc-1.16/multifit/test_wood.c gsl-doc-2.3/multifit/test_wood.c --- gsl-doc-1.16/multifit/test_wood.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit/test_wood.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,91 @@ +#define wood_N 6 +#define wood_P 4 + +#define wood_NTRIES 3 + +static double wood_x0[wood_P] = { -3.0, -1.0, -3.0, -1.0 }; +static double wood_epsrel = 1.0e-12; + +static void +wood_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + const double wood_x[wood_P] = { 1.0, 1.0, 1.0, 1.0 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < wood_P; ++i) + { + gsl_test_rel(x[i], wood_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +wood_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + + gsl_vector_set(f, 0, 10.0*(x2 - x1*x1)); + gsl_vector_set(f, 1, 1.0 - x1); + gsl_vector_set(f, 2, sqrt(90.0)*(x4 - x3*x3)); + gsl_vector_set(f, 3, 1.0 - x3); + gsl_vector_set(f, 4, sqrt(10.0)*(x2 + x4 - 2.0)); + gsl_vector_set(f, 5, (x2 - x4) / sqrt(10.0)); + + return GSL_SUCCESS; +} + +static int +wood_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x3 = gsl_vector_get(x, 2); + double s90 = sqrt(90.0); + double s10 = sqrt(10.0); + + gsl_matrix_set_zero(J); + + gsl_matrix_set(J, 0, 0, -20.0*x1); + gsl_matrix_set(J, 0, 1, 10.0); + gsl_matrix_set(J, 1, 0, -1.0); + gsl_matrix_set(J, 2, 2, -2.0*s90*x3); + gsl_matrix_set(J, 2, 3, s90); + gsl_matrix_set(J, 3, 2, -1.0); + gsl_matrix_set(J, 4, 1, s10); + gsl_matrix_set(J, 4, 3, s10); + gsl_matrix_set(J, 5, 1, 1.0/s10); + gsl_matrix_set(J, 5, 3, -1.0/s10); + + return GSL_SUCCESS; +} + +static gsl_multifit_function_fdf wood_func = +{ + &wood_f, + &wood_df, + NULL, + wood_N, + wood_P, + NULL, + 0, + 0 +}; + +static test_fdf_problem wood_problem = +{ + "wood", + wood_x0, + NULL, + &wood_epsrel, + wood_NTRIES, + &wood_checksol, + &wood_func +}; diff -Nru gsl-doc-1.16/multifit/TODO gsl-doc-2.3/multifit/TODO --- gsl-doc-1.16/multifit/TODO 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/TODO 2016-11-21 17:57:37.000000000 +0000 @@ -10,10 +10,10 @@ The following features should be added to the nonlinear least squares routines: -1. More information reporting to the user (see levmar code for examples) such as: - - number of function evaluations - - number of Jacobian evaluations +1. Support for constraints -2. Support for constraints +2. robust nonlinear least squares and robust ridge regression -3. robust fitting +3. covariance matrices for ridge regression + +4. min_workspace_p is dynamically allocated in gsl_multifit_linear_gcv_min - fix diff -Nru gsl-doc-1.16/multifit/work.c gsl-doc-2.3/multifit/work.c --- gsl-doc-1.16/multifit/work.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multifit/work.c 2016-11-21 17:56:02.000000000 +0000 @@ -22,12 +22,11 @@ #include gsl_multifit_linear_workspace * -gsl_multifit_linear_alloc (size_t n, size_t p) +gsl_multifit_linear_alloc (const size_t nmax, const size_t pmax) { gsl_multifit_linear_workspace *w; - w = (gsl_multifit_linear_workspace *) - malloc (sizeof (gsl_multifit_linear_workspace)); + w = calloc (1, sizeof (gsl_multifit_linear_workspace)); if (w == 0) { @@ -35,100 +34,97 @@ GSL_ENOMEM, 0); } - w->n = n; /* number of observations */ - w->p = p; /* number of parameters */ + w->nmax = nmax; /* max number of observations */ + w->pmax = pmax; /* max number of parameters */ + w->n = 0; + w->p = 0; + w->rcond = 0.0; - w->A = gsl_matrix_alloc (n, p); + w->A = gsl_matrix_alloc (nmax, pmax); if (w->A == 0) { - free (w); + gsl_multifit_linear_free(w); GSL_ERROR_VAL ("failed to allocate space for A", GSL_ENOMEM, 0); } - w->Q = gsl_matrix_alloc (p, p); + w->Q = gsl_matrix_alloc (pmax, pmax); if (w->Q == 0) { - gsl_matrix_free (w->A); - free (w); + gsl_multifit_linear_free(w); GSL_ERROR_VAL ("failed to allocate space for Q", GSL_ENOMEM, 0); } - w->QSI = gsl_matrix_alloc (p, p); + w->QSI = gsl_matrix_alloc (pmax, pmax); if (w->QSI == 0) { - gsl_matrix_free (w->Q); - gsl_matrix_free (w->A); - free (w); + gsl_multifit_linear_free(w); GSL_ERROR_VAL ("failed to allocate space for QSI", GSL_ENOMEM, 0); } - w->S = gsl_vector_alloc (p); + w->S = gsl_vector_alloc (pmax); if (w->S == 0) { - gsl_matrix_free (w->QSI); - gsl_matrix_free (w->Q); - gsl_matrix_free (w->A); - free (w); + gsl_multifit_linear_free(w); GSL_ERROR_VAL ("failed to allocate space for S", GSL_ENOMEM, 0); } - w->t = gsl_vector_alloc (n); + w->t = gsl_vector_alloc (nmax); if (w->t == 0) { - gsl_vector_free (w->S); - gsl_matrix_free (w->QSI); - gsl_matrix_free (w->Q); - gsl_matrix_free (w->A); - free (w); + gsl_multifit_linear_free(w); GSL_ERROR_VAL ("failed to allocate space for t", GSL_ENOMEM, 0); } - w->xt = gsl_vector_calloc (p); + w->xt = gsl_vector_calloc (pmax); if (w->xt == 0) { - gsl_vector_free (w->t); - gsl_vector_free (w->S); - gsl_matrix_free (w->QSI); - gsl_matrix_free (w->Q); - gsl_matrix_free (w->A); - free (w); + gsl_multifit_linear_free(w); GSL_ERROR_VAL ("failed to allocate space for xt", GSL_ENOMEM, 0); } - w->D = gsl_vector_calloc (p); + w->D = gsl_vector_calloc (pmax); if (w->D == 0) { - gsl_vector_free (w->D); - gsl_vector_free (w->t); - gsl_vector_free (w->S); - gsl_matrix_free (w->QSI); - gsl_matrix_free (w->Q); - gsl_matrix_free (w->A); - free (w); - GSL_ERROR_VAL ("failed to allocate space for xt", GSL_ENOMEM, 0); + gsl_multifit_linear_free(w); + GSL_ERROR_VAL ("failed to allocate space for D", GSL_ENOMEM, 0); } return w; } void -gsl_multifit_linear_free (gsl_multifit_linear_workspace * work) +gsl_multifit_linear_free (gsl_multifit_linear_workspace * w) { - RETURN_IF_NULL (work); - gsl_matrix_free (work->A); - gsl_matrix_free (work->Q); - gsl_matrix_free (work->QSI); - gsl_vector_free (work->S); - gsl_vector_free (work->t); - gsl_vector_free (work->xt); - gsl_vector_free (work->D); - free (work); + RETURN_IF_NULL (w); + + if (w->A) + gsl_matrix_free (w->A); + + if (w->Q) + gsl_matrix_free (w->Q); + + if (w->QSI) + gsl_matrix_free (w->QSI); + + if (w->S) + gsl_vector_free (w->S); + + if (w->t) + gsl_vector_free (w->t); + + if (w->xt) + gsl_vector_free (w->xt); + + if (w->D) + gsl_vector_free (w->D); + + free (w); } diff -Nru gsl-doc-1.16/multifit_nlinear/cholesky.c gsl-doc-2.3/multifit_nlinear/cholesky.c --- gsl-doc-1.16/multifit_nlinear/cholesky.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/cholesky.c 2016-08-12 15:13:26.000000000 +0000 @@ -0,0 +1,301 @@ +/* multifit_nlinear/cholesky.c + * + * Copyright (C) 2015, 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* + * This module calculates the solution of the normal equations least squares + * system: + * + * [ J~^T J~ + mu D~^T D~ ] p~ = -J~^T f + * + * using the modified Cholesky decomposition. Quantities are scaled + * according to: + * + * J~ = J S + * D~ = D S + * p~ = S^{-1} p + * + * where S is a diagonal matrix and S_jj = || J_j || and J_j is column + * j of the Jacobian. This balancing transformation seems to be more + * numerically stable for some Jacobians. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "common.c" + +typedef struct +{ + gsl_matrix *JTJ; /* J^T J */ + gsl_matrix *work_JTJ; /* copy of J^T J */ + gsl_vector *rhs; /* -J^T f, size p */ + gsl_permutation *perm; /* permutation matrix for modified Cholesky */ + gsl_vector *work3p; /* workspace, size 3*p */ + double mu; /* current regularization parameter */ +} cholesky_state_t; + +static void *cholesky_alloc (const size_t n, const size_t p); +static int cholesky_init(const void * vtrust_state, void * vstate); +static int cholesky_presolve(const double mu, const void * vtrust_state, void * vstate); +static int cholesky_solve(const gsl_vector * f, gsl_vector *x, + const void * vtrust_state, void *vstate); +static int cholesky_solve_rhs(const gsl_vector * b, gsl_vector *x, cholesky_state_t *state); +static int cholesky_regularize(const double mu, const gsl_vector * diag, gsl_matrix * A, + cholesky_state_t * state); + +static void * +cholesky_alloc (const size_t n, const size_t p) +{ + cholesky_state_t *state; + + (void)n; + + state = calloc(1, sizeof(cholesky_state_t)); + if (state == NULL) + { + GSL_ERROR_NULL ("failed to allocate cholesky state", GSL_ENOMEM); + } + + state->JTJ = gsl_matrix_alloc(p, p); + if (state->JTJ == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for JTJ", GSL_ENOMEM); + } + + state->work_JTJ = gsl_matrix_alloc(p, p); + if (state->work_JTJ == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for JTJ workspace", + GSL_ENOMEM); + } + + state->rhs = gsl_vector_alloc(p); + if (state->rhs == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for rhs", GSL_ENOMEM); + } + + state->perm = gsl_permutation_alloc(p); + if (state->perm == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for perm", GSL_ENOMEM); + } + + state->work3p = gsl_vector_alloc(3 * p); + if (state->work3p == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for work3p", GSL_ENOMEM); + } + + state->mu = -1.0; + + return state; +} + +static void +cholesky_free(void *vstate) +{ + cholesky_state_t *state = (cholesky_state_t *) vstate; + + if (state->JTJ) + gsl_matrix_free(state->JTJ); + + if (state->work_JTJ) + gsl_matrix_free(state->work_JTJ); + + if (state->rhs) + gsl_vector_free(state->rhs); + + if (state->perm) + gsl_permutation_free(state->perm); + + if (state->work3p) + gsl_vector_free(state->work3p); + + free(state); +} + +static int +cholesky_init(const void * vtrust_state, void * vstate) +{ + const gsl_multifit_nlinear_trust_state *trust_state = + (const gsl_multifit_nlinear_trust_state *) vtrust_state; + cholesky_state_t *state = (cholesky_state_t *) vstate; + + /* compute J^T J */ + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, trust_state->J, 0.0, state->JTJ); + + return GSL_SUCCESS; +} + +/* +cholesky_presolve() + Compute the modified Cholesky decomposition of J^T J + mu D^T D. +Modified Cholesky is used in case mu = 0 and there are rounding +errors in forming J^T J which could lead to an indefinite matrix. + +Inputs: mu - LM parameter + vstate - workspace + +Notes: +1) On output, state->work_JTJ contains the Cholesky decomposition of +J^T J + mu D^T D +*/ + +static int +cholesky_presolve(const double mu, const void * vtrust_state, void * vstate) +{ + const gsl_multifit_nlinear_trust_state *trust_state = + (const gsl_multifit_nlinear_trust_state *) vtrust_state; + cholesky_state_t *state = (cholesky_state_t *) vstate; + gsl_matrix *JTJ = state->work_JTJ; + const gsl_vector *diag = trust_state->diag; + int status; + + /* copy lower triangle of A to workspace */ + gsl_matrix_tricpy('L', 1, JTJ, state->JTJ); + + /* augment normal equations: A -> A + mu D^T D */ + status = cholesky_regularize(mu, diag, JTJ, state); + if (status) + return status; + + /* compute modified Cholesky decomposition */ + status = gsl_linalg_mcholesky_decomp(JTJ, state->perm, NULL); + if (status) + return status; + + state->mu = mu; + + return GSL_SUCCESS; +} + +/* +cholesky_solve() + Compute (J^T J + mu D^T D) x = -J^T f + +Inputs: f - right hand side vector f + x - (output) solution vector + vstate - cholesky workspace +*/ + +static int +cholesky_solve(const gsl_vector * f, gsl_vector *x, + const void * vtrust_state, void *vstate) +{ + const gsl_multifit_nlinear_trust_state *trust_state = + (const gsl_multifit_nlinear_trust_state *) vtrust_state; + cholesky_state_t *state = (cholesky_state_t *) vstate; + int status; + + /* compute rhs = -J^T f */ + gsl_blas_dgemv(CblasTrans, -1.0, trust_state->J, f, 0.0, state->rhs); + + status = cholesky_solve_rhs(state->rhs, x, state); + if (status) + return status; + + return GSL_SUCCESS; +} + +static int +cholesky_rcond(double * rcond, void * vstate) +{ + int status; + cholesky_state_t *state = (cholesky_state_t *) vstate; + double rcond_JTJ; + + if (state->mu != 0) + { + /* + * Cholesky decomposition hasn't been computed yet, or was computed + * with mu > 0 - recompute Cholesky decomposition of J^T J + */ + + /* copy lower triangle of JTJ to workspace */ + gsl_matrix_tricpy('L', 1, state->work_JTJ, state->JTJ); + + /* compute modified Cholesky decomposition */ + status = gsl_linalg_mcholesky_decomp(state->work_JTJ, state->perm, NULL); + if (status) + return status; + } + + status = gsl_linalg_mcholesky_rcond(state->work_JTJ, state->perm, &rcond_JTJ, state->work3p); + if (status == GSL_SUCCESS) + *rcond = sqrt(rcond_JTJ); + + return status; +} + +/* solve: (J^T J + mu D^T D) x = b */ +static int +cholesky_solve_rhs(const gsl_vector * b, gsl_vector *x, cholesky_state_t *state) +{ + int status; + gsl_matrix *JTJ = state->work_JTJ; + + status = gsl_linalg_mcholesky_solve(JTJ, state->perm, b, x); + if (status) + return status; + + return GSL_SUCCESS; +} + +/* A <- A + mu D^T D */ +static int +cholesky_regularize(const double mu, const gsl_vector * diag, gsl_matrix * A, + cholesky_state_t * state) +{ + (void) state; + + if (mu != 0.0) + { + size_t i; + + for (i = 0; i < diag->size; ++i) + { + double di = gsl_vector_get(diag, i); + double *Aii = gsl_matrix_ptr(A, i, i); + *Aii += mu * di * di; + } + } + + return GSL_SUCCESS; +} + +static const gsl_multifit_nlinear_solver cholesky_type = +{ + "cholesky", + cholesky_alloc, + cholesky_init, + cholesky_presolve, + cholesky_solve, + cholesky_rcond, + cholesky_free +}; + +const gsl_multifit_nlinear_solver *gsl_multifit_nlinear_solver_cholesky = &cholesky_type; diff -Nru gsl-doc-1.16/multifit_nlinear/common.c gsl-doc-2.3/multifit_nlinear/common.c --- gsl-doc-1.16/multifit_nlinear/common.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/common.c 2016-08-10 21:03:42.000000000 +0000 @@ -0,0 +1,107 @@ +/* multifit_nlinear/common.c + * + * Copyright (C) 2014, 2015, 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +static double scaled_enorm (const gsl_vector * d, const gsl_vector * f); +static void scaled_addition (const double alpha, const gsl_vector * x, + const double beta, const gsl_vector * y, + gsl_vector * z); +static double quadratic_preduction(const gsl_vector *f, const gsl_matrix * J, + const gsl_vector * dx, gsl_vector * work); + +/* compute || diag(d) f || */ +static double +scaled_enorm (const gsl_vector * d, const gsl_vector * f) +{ + double e2 = 0; + size_t i, n = f->size; + for (i = 0; i < n; i++) + { + double fi = gsl_vector_get (f, i); + double di = gsl_vector_get (d, i); + double u = di * fi; + e2 += u * u; + } + return sqrt (e2); +} + +/* compute z = alpha*x + beta*y */ +static void +scaled_addition (const double alpha, const gsl_vector * x, + const double beta, const gsl_vector * y, gsl_vector * z) +{ + const size_t N = z->size; + size_t i; + + for (i = 0; i < N; i++) + { + double xi = gsl_vector_get (x, i); + double yi = gsl_vector_get (y, i); + gsl_vector_set (z, i, alpha * xi + beta * yi); + } +} + +/* +quadratic_preduction() + Calculate predicted reduction based on standard +quadratic model: + +m_k(dx) = Phi(x_k) + dx' g + 1/2 dx' B_k dx + +predicted_reduction = m_k(0) - m_k(dx) + = -2 g^T dx / ||f||^2 - ( ||J*dx|| / ||f|| )^2 + = -2 fhat . beta - ||beta||^2 + +where: beta = J*dx / ||f|| + +Inputs: f - f(x), size n + J - Jacobian J(x), n-by-p + dx - proposed step, size p + work - workspace, size n + +Return: predicted reduction +*/ + +static double +quadratic_preduction(const gsl_vector * f, const gsl_matrix * J, + const gsl_vector * dx, gsl_vector * work) +{ + const size_t n = f->size; + const double normf = gsl_blas_dnrm2(f); + double pred_reduction; + double norm_beta; /* ||J*dx|| / ||f|| */ + size_t i; + + /* compute beta = J*dx / ||f|| */ + gsl_blas_dgemv(CblasNoTrans, 1.0 / normf, J, dx, 0.0, work); + norm_beta = gsl_blas_dnrm2(work); + + /* initialize to ( ||J*dx|| / ||f|| )^2 */ + pred_reduction = -norm_beta * norm_beta; + + /* subtract 2*fhat.beta */ + for (i = 0; i < n; ++i) + { + double fi = gsl_vector_get(f, i); + double betai = gsl_vector_get(work, i); + + pred_reduction -= 2.0 * (fi / normf) * betai; + } + + return pred_reduction; +} diff -Nru gsl-doc-1.16/multifit_nlinear/convergence.c gsl-doc-2.3/multifit_nlinear/convergence.c --- gsl-doc-1.16/multifit_nlinear/convergence.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/convergence.c 2016-07-07 20:36:10.000000000 +0000 @@ -0,0 +1,146 @@ +/* multifit_nlinear/convergence.c + * + * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough + * Copyright (C) 2015 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include + +static int test_delta (const gsl_vector * dx, const gsl_vector * x, + double epsabs, double epsrel); +static double scaled_infnorm(const gsl_vector *x, const gsl_vector *g); + +/* +gsl_multifit_nlinear_test() + Convergence tests for nonlinear minimization + +(1) |dx_i| <= xtol * (1 + |x_i|) for all i +(2) || g .* x ||_inf <= gtol ||f||^2 +(3) ||f(x+dx) - f(x)|| <= ftol * max(||f(x)||, 1) + +Inputs: xtol - tolerance for step size + gtol - tolerance for gradient vector + ftol - tolerance for residual vector + info - (output) + 1 - stopped by small x step + 2 - stopped by small gradient + 3 - stopped by small residual vector change + w - workspace +*/ + +int +gsl_multifit_nlinear_test (const double xtol, const double gtol, + const double ftol, int *info, + const gsl_multifit_nlinear_workspace * w) +{ + int status; + double gnorm, fnorm, phi; + + *info = 0; + + status = test_delta(w->dx, w->x, xtol*xtol, xtol); + if (status == GSL_SUCCESS) + { + *info = 1; + return GSL_SUCCESS; + } + + /* compute gnorm = max_i( g_i * max(x_i, 1) ) */ + gnorm = scaled_infnorm(w->x, w->g); + + /* compute fnorm = ||f|| */ + fnorm = gsl_blas_dnrm2(w->f); + phi = 0.5 * fnorm * fnorm; + + if (gnorm <= gtol * GSL_MAX(phi, 1.0)) + { + *info = 2; + return GSL_SUCCESS; + } + +#if 0 /* XXX */ + if (dfnorm <= ftol * GSL_MAX(fnorm, 1.0)) + { + *info = 3; + return GSL_SUCCESS; + } +#else + (void)ftol; +#endif + + return GSL_CONTINUE; +} + +static int +test_delta (const gsl_vector * dx, const gsl_vector * x, + double epsabs, double epsrel) +{ + size_t i; + int ok = 1; + const size_t n = x->size ; + + if (epsrel < 0.0) + { + GSL_ERROR ("relative tolerance is negative", GSL_EBADTOL); + } + + for (i = 0 ; i < n ; i++) + { + double xi = gsl_vector_get(x,i); + double dxi = gsl_vector_get(dx,i); + double tolerance = epsabs + epsrel * fabs(xi) ; + + if (fabs(dxi) < tolerance) + { + ok = 1; + } + else + { + ok = 0; + break; + } + } + + if (ok) + return GSL_SUCCESS ; + + return GSL_CONTINUE; +} + +static double +scaled_infnorm(const gsl_vector *x, const gsl_vector *g) +{ + const size_t n = x->size; + size_t i; + double norm = 0.0; + + for (i = 0; i < n; ++i) + { + double xi = GSL_MAX(gsl_vector_get(x, i), 1.0); + double gi = gsl_vector_get(g, i); + double tmp = fabs(xi * gi); + + if (tmp > norm) + norm = tmp; + } + + return norm; +} diff -Nru gsl-doc-1.16/multifit_nlinear/covar.c gsl-doc-2.3/multifit_nlinear/covar.c --- gsl-doc-1.16/multifit_nlinear/covar.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/covar.c 2016-08-24 14:19:26.000000000 +0000 @@ -0,0 +1,203 @@ +/* multifit_nlinear/covar.c + * + * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004, 2007 Brian Gough + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include + +static int covar_QRPT (gsl_matrix * r, gsl_permutation * perm, + const double epsrel, gsl_matrix * covar); + +/* Compute the covariance matrix + + cov = inv (J^T J) + + by QRP^T decomposition of J +*/ + +int +gsl_multifit_nlinear_covar (const gsl_matrix * J, const double epsrel, + gsl_matrix * covar) +{ + int status; + gsl_matrix * r; + gsl_vector * tau; + gsl_vector * norm; + gsl_permutation * perm; + const size_t m = J->size1; + const size_t n = J->size2; + + if (m < n) + { + GSL_ERROR ("Jacobian be rectangular M x N with M >= N", GSL_EBADLEN); + } + + if (covar->size1 != covar->size2 || covar->size1 != n) + { + GSL_ERROR ("covariance matrix must be square and match second dimension of jacobian", GSL_EBADLEN); + } + + r = gsl_matrix_alloc (m, n); + tau = gsl_vector_alloc (n); + perm = gsl_permutation_alloc (n) ; + norm = gsl_vector_alloc (n) ; + + { + int signum = 0; + gsl_matrix_memcpy (r, J); + gsl_linalg_QRPT_decomp (r, tau, perm, &signum, norm); + } + + status = covar_QRPT(r, perm, epsrel, covar); + + gsl_matrix_free (r); + gsl_permutation_free (perm); + gsl_vector_free (tau); + gsl_vector_free (norm); + + return status; +} + +static int +covar_QRPT (gsl_matrix * r, gsl_permutation * perm, + const double epsrel, gsl_matrix * covar) +{ + /* Form the inverse of R in the full upper triangle of R */ + + double tolr = epsrel * fabs(gsl_matrix_get(r, 0, 0)); + const size_t n = r->size2; + size_t i, j, k; + size_t kmax = 0; + + for (k = 0 ; k < n ; k++) + { + double rkk = gsl_matrix_get(r, k, k); + + if (fabs(rkk) <= tolr) + { + break; + } + + gsl_matrix_set(r, k, k, 1.0/rkk); + + for (j = 0; j < k ; j++) + { + double t = gsl_matrix_get(r, j, k) / rkk; + gsl_matrix_set (r, j, k, 0.0); + + for (i = 0; i <= j; i++) + { + double rik = gsl_matrix_get (r, i, k); + double rij = gsl_matrix_get (r, i, j); + + gsl_matrix_set (r, i, k, rik - t * rij); + } + } + kmax = k; + } + + /* Form the full upper triangle of the inverse of R^T R in the full + upper triangle of R */ + + for (k = 0; k <= kmax ; k++) + { + for (j = 0; j < k; j++) + { + double rjk = gsl_matrix_get (r, j, k); + + for (i = 0; i <= j ; i++) + { + double rij = gsl_matrix_get (r, i, j); + double rik = gsl_matrix_get (r, i, k); + + gsl_matrix_set (r, i, j, rij + rjk * rik); + } + } + + { + double t = gsl_matrix_get (r, k, k); + + for (i = 0; i <= k; i++) + { + double rik = gsl_matrix_get (r, i, k); + + gsl_matrix_set (r, i, k, t * rik); + }; + } + } + + /* Form the full lower triangle of the covariance matrix in the + strict lower triangle of R and in w */ + + for (j = 0 ; j < n ; j++) + { + size_t pj = gsl_permutation_get (perm, j); + + for (i = 0; i <= j; i++) + { + size_t pi = gsl_permutation_get (perm, i); + + double rij; + + if (j > kmax) + { + gsl_matrix_set (r, i, j, 0.0); + rij = 0.0 ; + } + else + { + rij = gsl_matrix_get (r, i, j); + } + + if (pi > pj) + { + gsl_matrix_set (r, pi, pj, rij); + } + else if (pi < pj) + { + gsl_matrix_set (r, pj, pi, rij); + } + + } + + { + double rjj = gsl_matrix_get (r, j, j); + gsl_matrix_set (covar, pj, pj, rjj); + } + } + + + /* symmetrize the covariance matrix */ + + for (j = 0 ; j < n ; j++) + { + for (i = 0; i < j ; i++) + { + double rji = gsl_matrix_get (r, j, i); + + gsl_matrix_set (covar, j, i, rji); + gsl_matrix_set (covar, i, j, rji); + } + } + + return GSL_SUCCESS; +} diff -Nru gsl-doc-1.16/multifit_nlinear/dogleg.c gsl-doc-2.3/multifit_nlinear/dogleg.c --- gsl-doc-1.16/multifit_nlinear/dogleg.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/dogleg.c 2016-09-05 16:59:19.000000000 +0000 @@ -0,0 +1,489 @@ +/* multifit_nlinear/dogleg.c + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * This module contains an implementation of the Powell dogleg + * algorithm for nonlinear optimization problems. This implementation + * closely follows the following works: + * + * [1] H. B. Nielsen, K. Madsen, Introduction to Optimization and + * Data Fitting, Informatics and Mathematical Modeling, + * Technical University of Denmark (DTU), 2010. + * + * [2] J. E. Dennis and H. H. W. Mei, Two new unconstrained optimization + * algorithms which use function and gradient values, J. Opt. Theory and + * Appl., 28(4), 1979. + */ + +typedef struct +{ + size_t n; /* number of observations */ + size_t p; /* number of parameters */ + gsl_vector *dx_gn; /* Gauss-Newton step, size p */ + gsl_vector *dx_sd; /* steepest descent step, size p */ + double norm_Dgn; /* || D dx_gn || */ + double norm_Dsd; /* || D dx_sd || */ + double norm_Dinvg; /* || D^{-1} g || */ + double norm_JDinv2g; /* || J D^{-2} g || */ + gsl_vector *workp; /* workspace, length p */ + gsl_vector *workn; /* workspace, length n */ + + /* tunable parameters */ + gsl_multifit_nlinear_parameters params; +} dogleg_state_t; + +#include "common.c" + +static void * dogleg_alloc (const void * params, const size_t n, const size_t p); +static void dogleg_free(void *vstate); +static int dogleg_init(const void *vtrust_state, void *vstate); +static int dogleg_preloop(const void * vtrust_state, void * vstate); +static int dogleg_step(const void * vtrust_state, const double delta, + gsl_vector * dx, void * vstate); +static int dogleg_double_step(const void * vtrust_state, const double delta, + gsl_vector * dx, void * vstate); +static int dogleg_preduction(const void * vtrust_state, const gsl_vector * dx, + double * pred, void * vstate); +static int dogleg_calc_gn(const gsl_multifit_nlinear_trust_state * trust_state, gsl_vector * dx); +static double dogleg_beta(const double t, const double delta, + const gsl_vector * diag, dogleg_state_t * state); + +static void * +dogleg_alloc (const void * params, const size_t n, const size_t p) +{ + const gsl_multifit_nlinear_parameters *mparams = (const gsl_multifit_nlinear_parameters *) params; + dogleg_state_t *state; + + state = calloc(1, sizeof(dogleg_state_t)); + if (state == NULL) + { + GSL_ERROR_NULL ("failed to allocate dogleg state", GSL_ENOMEM); + } + + state->dx_gn = gsl_vector_alloc(p); + if (state->dx_gn == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for dx_gn", GSL_ENOMEM); + } + + state->dx_sd = gsl_vector_alloc(p); + if (state->dx_sd == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for dx_sd", GSL_ENOMEM); + } + + state->workp = gsl_vector_alloc(p); + if (state->workp == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workp", GSL_ENOMEM); + } + + state->workn = gsl_vector_alloc(n); + if (state->workn == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workn", GSL_ENOMEM); + } + + state->n = n; + state->p = p; + state->params = *mparams; + + return state; +} + +static void +dogleg_free(void *vstate) +{ + dogleg_state_t *state = (dogleg_state_t *) vstate; + + if (state->dx_gn) + gsl_vector_free(state->dx_gn); + + if (state->dx_sd) + gsl_vector_free(state->dx_sd); + + if (state->workp) + gsl_vector_free(state->workp); + + if (state->workn) + gsl_vector_free(state->workn); + + free(state); +} + +/* +dogleg_init() + Initialize dogleg solver + +Inputs: vtrust_state - trust state + vstate - workspace + +Return: success/error +*/ + +static int +dogleg_init(const void *vtrust_state, void *vstate) +{ + (void)vtrust_state; + (void)vstate; + + return GSL_SUCCESS; +} + +/* +dogleg_preloop() + Initialize dogleg method prior to iteration loop. +This involves computing the steepest descent step. The +Gauss-Newton step is computed if needed in the _step() +routines. + +Notes: on output, +1) state->dx_sd contains steepest descent step +2) state->norm_Dinvg contains || D^{-1} g || +3) state->norm_JDinv2g contains || J D^{-2} g || +*/ + +static int +dogleg_preloop(const void * vtrust_state, void * vstate) +{ + const gsl_multifit_nlinear_trust_state *trust_state = + (const gsl_multifit_nlinear_trust_state *) vtrust_state; + dogleg_state_t *state = (dogleg_state_t *) vstate; + double u; + double alpha; /* ||g||^2 / ||Jg||^2 */ + + /* calculate the steepest descent step */ + + /* compute workp = D^{-1} g and its norm */ + gsl_vector_memcpy(state->workp, trust_state->g); + gsl_vector_div(state->workp, trust_state->diag); + state->norm_Dinvg = gsl_blas_dnrm2(state->workp); + + /* compute workp = D^{-2} g */ + gsl_vector_div(state->workp, trust_state->diag); + + /* compute: workn = J D^{-2} g */ + gsl_blas_dgemv(CblasNoTrans, 1.0, trust_state->J, state->workp, 0.0, state->workn); + state->norm_JDinv2g = gsl_blas_dnrm2(state->workn); + + u = state->norm_Dinvg / state->norm_JDinv2g; + alpha = u * u; + + /* dx_sd = -alpha D^{-2} g */ + gsl_vector_memcpy(state->dx_sd, state->workp); + gsl_vector_scale(state->dx_sd, -alpha); + + state->norm_Dsd = scaled_enorm(trust_state->diag, state->dx_sd); + state->norm_Dgn = -1.0; /* computed later if needed */ + + return GSL_SUCCESS; +} + +/* +dogleg_step() + Calculate a new step vector +*/ + +static int +dogleg_step(const void * vtrust_state, const double delta, + gsl_vector * dx, void * vstate) +{ + const gsl_multifit_nlinear_trust_state *trust_state = + (const gsl_multifit_nlinear_trust_state *) vtrust_state; + dogleg_state_t *state = (dogleg_state_t *) vstate; + + if (state->norm_Dsd >= delta) + { + /* steepest descent step is outside trust region; + * truncate steepest descent step to trust region boundary */ + gsl_vector_memcpy(dx, state->dx_sd); + gsl_vector_scale(dx, delta / state->norm_Dsd); + } + else + { + /* compute Gauss-Newton step if needed */ + if (state->norm_Dgn < 0.0) + { + int status = dogleg_calc_gn(trust_state, state->dx_gn); + + if (status) + return status; + + /* compute || D dx_gn || */ + state->norm_Dgn = scaled_enorm(trust_state->diag, state->dx_gn); + } + + if (state->norm_Dgn <= delta) + { + /* Gauss-Newton step is inside trust region, use it as final step + * since it is the global minimizer of the quadratic model function */ + gsl_vector_memcpy(dx, state->dx_gn); + } + else + { + /* Gauss-Newton step is outside trust region, but steepest + * descent is inside; use dogleg step */ + + double beta = dogleg_beta(1.0, delta, trust_state->diag, state); + + /* compute: workp = dx_gn - dx_sd */ + scaled_addition(1.0, state->dx_gn, -1.0, state->dx_sd, state->workp); + + /* dx = dx_sd + beta*(dx_gn - dx_sd) */ + scaled_addition(beta, state->workp, 1.0, state->dx_sd, dx); + } + } + + return GSL_SUCCESS; +} + +/* +dogleg_double_step() + Calculate a new step with double dogleg method. Based on +section 3 of [2] +*/ + +static int +dogleg_double_step(const void * vtrust_state, const double delta, + gsl_vector * dx, void * vstate) +{ + const double alpha_fac = 0.8; /* recommended value from Dennis and Mei */ + const gsl_multifit_nlinear_trust_state *trust_state = + (const gsl_multifit_nlinear_trust_state *) vtrust_state; + dogleg_state_t *state = (dogleg_state_t *) vstate; + + if (state->norm_Dsd >= delta) + { + /* steepest descent step is outside trust region; + * truncate steepest descent step to trust region boundary */ + gsl_vector_memcpy(dx, state->dx_sd); + gsl_vector_scale(dx, delta / state->norm_Dsd); + } + else + { + /* compute Gauss-Newton step if needed */ + if (state->norm_Dgn < 0.0) + { + int status = dogleg_calc_gn(trust_state, state->dx_gn); + + if (status) + return status; + + /* compute || D dx_gn || */ + state->norm_Dgn = scaled_enorm(trust_state->diag, state->dx_gn); + } + + if (state->norm_Dgn <= delta) + { + /* Gauss-Newton step is inside trust region, use it as final step + * since it is the global minimizer of the quadratic model function */ + gsl_vector_memcpy(dx, state->dx_gn); + } + else + { + double t, u, v, c; + + /* compute: u = ||D^{-1} g||^2 / ||J D^{-2} g||^2 */ + v = state->norm_Dinvg / state->norm_JDinv2g; + u = v * v; + + /* compute: v = g^T dx_gn */ + gsl_blas_ddot(trust_state->g, state->dx_gn, &v); + + /* compute: c = ||D^{-1} g||^4 / (||J D^{-2} g||^2 * |g^T dx_gn|) */ + c = u * (state->norm_Dinvg / fabs(v)) * state->norm_Dinvg; + + /* compute: t = 1 - alpha_fac*(1-c) */ + t = 1.0 - alpha_fac*(1.0 - c); + + if (t * state->norm_Dgn <= delta) + { + /* set dx = (delta / ||D dx_gn||) dx_gn */ + gsl_vector_memcpy(dx, state->dx_gn); + gsl_vector_scale(dx, delta / state->norm_Dgn); + } + else + { + /* Cauchy point is inside, Gauss-Newton is outside trust region; + * use double dogleg step */ + + double beta = dogleg_beta(t, delta, trust_state->diag, state); + + /* compute: workp = t*dx_gn - dx_sd */ + scaled_addition(t, state->dx_gn, -1.0, state->dx_sd, state->workp); + + /* dx = dx_sd + beta*(t*dx_gn - dx_sd) */ + scaled_addition(beta, state->workp, 1.0, state->dx_sd, dx); + } + } + } + + return GSL_SUCCESS; +} + +static int +dogleg_preduction(const void * vtrust_state, const gsl_vector * dx, + double * pred, void * vstate) +{ + const gsl_multifit_nlinear_trust_state *trust_state = + (const gsl_multifit_nlinear_trust_state *) vtrust_state; + dogleg_state_t *state = (dogleg_state_t *) vstate; + + *pred = quadratic_preduction(trust_state->f, trust_state->J, dx, state->workn); + + return GSL_SUCCESS; +} + +/* +dogleg_calc_gn() + Calculate Gauss-Newton step which satisfies: + +J dx_gn = -f + +Inputs: trust_state - trust state variables + dx - (output) Gauss-Newton step + +Return: success/error +*/ + +static int +dogleg_calc_gn(const gsl_multifit_nlinear_trust_state * trust_state, gsl_vector * dx) +{ + int status; + const gsl_multifit_nlinear_parameters *params = trust_state->params; + + /* initialize linear least squares solver */ + status = (params->solver->init)(trust_state, trust_state->solver_state); + if (status) + return status; + + /* prepare the linear solver to compute Gauss-Newton step */ + status = (params->solver->presolve)(0.0, trust_state, trust_state->solver_state); + if (status) + return status; + + /* solve: J dx_gn = -f for Gauss-Newton step */ + status = (params->solver->solve)(trust_state->f, + dx, + trust_state, + trust_state->solver_state); + if (status) + return status; + + return GSL_SUCCESS; +} + +/* +dogleg_beta() + This function finds beta in [0,1] such that the step + +dx = dx_sd + beta*(t*dx_gn - dx_sd) + +has norm + +||D dx|| = delta + +beta is the positive root of the quadratic: + +a beta^2 + b beta + c = 0 + +with + +a = ||D(t*dx_gn - dx_sd)||^2 +b = 2 dx_sd^T D^T D (t*dx_gn - dx_sd) +c = ||D dx_sd||^2 - delta^2 + +Inputs: t - amount of Gauss-Newton step to use for dogleg + (= 1 for classical dogleg, <= 1 for double dogleg) + delta - trust region radius + diag - diag(D) scaling matrix + state - workspace +*/ + +static double +dogleg_beta(const double t, const double delta, + const gsl_vector * diag, dogleg_state_t * state) +{ + double beta; + double a, b, c; + + /* compute: workp = t*dx_gn - dx_sd */ + scaled_addition(t, state->dx_gn, -1.0, state->dx_sd, state->workp); + + /* a = || D (t*dx_gn - dx_sd) ||^2 */ + a = scaled_enorm(diag, state->workp); + a *= a; + + /* workp = D^T D (t*dx_gn - dx_sd) */ + gsl_vector_mul(state->workp, diag); + gsl_vector_mul(state->workp, diag); + + /* b = 2 dx_sd^T D^T D (t*dx_gn - dx-sd) */ + gsl_blas_ddot(state->dx_sd, state->workp, &b); + b *= 2.0; + + /* c = || D dx_sd ||^2 - delta^2 = (||D dx_sd|| + delta) (||D dx_sd|| - delta) */ + c = (state->norm_Dsd + delta) * (state->norm_Dsd - delta); + + if (b > 0.0) + { + beta = (-2.0 * c) / (b + sqrt(b*b - 4.0*a*c)); + } + else + { + beta = (-b + sqrt(b*b - 4.0*a*c)) / (2.0 * a); + } + + return beta; +} + +static const gsl_multifit_nlinear_trs dogleg_type = +{ + "dogleg", + dogleg_alloc, + dogleg_init, + dogleg_preloop, + dogleg_step, + dogleg_preduction, + dogleg_free +}; + +const gsl_multifit_nlinear_trs *gsl_multifit_nlinear_trs_dogleg = &dogleg_type; + +static const gsl_multifit_nlinear_trs ddogleg_type = +{ + "double-dogleg", + dogleg_alloc, + dogleg_init, + dogleg_preloop, + dogleg_double_step, + dogleg_preduction, + dogleg_free +}; + +const gsl_multifit_nlinear_trs *gsl_multifit_nlinear_trs_ddogleg = &ddogleg_type; diff -Nru gsl-doc-1.16/multifit_nlinear/fdf.c gsl-doc-2.3/multifit_nlinear/fdf.c --- gsl-doc-1.16/multifit_nlinear/fdf.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/fdf.c 2016-09-24 15:46:41.000000000 +0000 @@ -0,0 +1,511 @@ +/* multifit_nlinear/fdf.c + * + * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough + * Copyright (C) 2015, 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include + +gsl_multifit_nlinear_workspace * +gsl_multifit_nlinear_alloc (const gsl_multifit_nlinear_type * T, + const gsl_multifit_nlinear_parameters * params, + const size_t n, const size_t p) +{ + gsl_multifit_nlinear_workspace * w; + + if (n < p) + { + GSL_ERROR_VAL ("insufficient data points, n < p", GSL_EINVAL, 0); + } + + w = calloc (1, sizeof (gsl_multifit_nlinear_workspace)); + if (w == 0) + { + GSL_ERROR_VAL ("failed to allocate space for multifit workspace", + GSL_ENOMEM, 0); + } + + w->x = gsl_vector_calloc (p); + if (w->x == 0) + { + gsl_multifit_nlinear_free (w); + GSL_ERROR_VAL ("failed to allocate space for x", GSL_ENOMEM, 0); + } + + w->f = gsl_vector_calloc (n); + if (w->f == 0) + { + gsl_multifit_nlinear_free (w); + GSL_ERROR_VAL ("failed to allocate space for f", GSL_ENOMEM, 0); + } + + w->dx = gsl_vector_calloc (p); + if (w->dx == 0) + { + gsl_multifit_nlinear_free (w); + GSL_ERROR_VAL ("failed to allocate space for dx", GSL_ENOMEM, 0); + } + + w->g = gsl_vector_alloc (p); + if (w->g == 0) + { + gsl_multifit_nlinear_free (w); + GSL_ERROR_VAL ("failed to allocate space for g", GSL_ENOMEM, 0); + } + + w->J = gsl_matrix_alloc(n, p); + if (w->J == 0) + { + gsl_multifit_nlinear_free (w); + GSL_ERROR_VAL ("failed to allocate space for Jacobian", GSL_ENOMEM, 0); + } + + w->sqrt_wts_work = gsl_vector_calloc (n); + if (w->sqrt_wts_work == 0) + { + gsl_multifit_nlinear_free (w); + GSL_ERROR_VAL ("failed to allocate space for weights", GSL_ENOMEM, 0); + } + + w->state = (T->alloc)(params, n, p); + if (w->state == 0) + { + gsl_multifit_nlinear_free (w); + GSL_ERROR_VAL ("failed to allocate space for multifit state", GSL_ENOMEM, 0); + } + + w->type = T; + w->fdf = NULL; + w->niter = 0; + w->params = *params; + + return w; +} + +void +gsl_multifit_nlinear_free (gsl_multifit_nlinear_workspace * w) +{ + RETURN_IF_NULL (w); + + if (w->state) + (w->type->free) (w->state); + + if (w->dx) + gsl_vector_free (w->dx); + + if (w->x) + gsl_vector_free (w->x); + + if (w->f) + gsl_vector_free (w->f); + + if (w->sqrt_wts_work) + gsl_vector_free (w->sqrt_wts_work); + + if (w->g) + gsl_vector_free (w->g); + + if (w->J) + gsl_matrix_free (w->J); + + free (w); +} + +gsl_multifit_nlinear_parameters +gsl_multifit_nlinear_default_parameters(void) +{ + gsl_multifit_nlinear_parameters params; + + params.trs = gsl_multifit_nlinear_trs_lm; + params.scale = gsl_multifit_nlinear_scale_more; + params.solver = gsl_multifit_nlinear_solver_qr; + params.fdtype = GSL_MULTIFIT_NLINEAR_FWDIFF; + params.factor_up = 3.0; + params.factor_down = 2.0; + params.avmax = 0.75; + params.h_df = GSL_SQRT_DBL_EPSILON; + params.h_fvv = 0.02; + + return params; +} + +int +gsl_multifit_nlinear_init (const gsl_vector * x, + gsl_multifit_nlinear_fdf * fdf, + gsl_multifit_nlinear_workspace * w) +{ + return gsl_multifit_nlinear_winit(x, NULL, fdf, w); +} + +int +gsl_multifit_nlinear_winit (const gsl_vector * x, + const gsl_vector * wts, + gsl_multifit_nlinear_fdf * fdf, + gsl_multifit_nlinear_workspace * w) +{ + const size_t n = w->f->size; + + if (n != fdf->n) + { + GSL_ERROR ("function size does not match workspace", GSL_EBADLEN); + } + else if (w->x->size != x->size) + { + GSL_ERROR ("vector length does not match workspace", GSL_EBADLEN); + } + else if (wts != NULL && n != wts->size) + { + GSL_ERROR ("weight vector length does not match workspace", GSL_EBADLEN); + } + else + { + size_t i; + + /* initialize counters for function and Jacobian evaluations */ + fdf->nevalf = 0; + fdf->nevaldf = 0; + fdf->nevalfvv = 0; + + w->fdf = fdf; + gsl_vector_memcpy(w->x, x); + w->niter = 0; + + if (wts) + { + w->sqrt_wts = w->sqrt_wts_work; + + for (i = 0; i < n; ++i) + { + double wi = gsl_vector_get(wts, i); + gsl_vector_set(w->sqrt_wts, i, sqrt(wi)); + } + } + else + { + w->sqrt_wts = NULL; + } + + return (w->type->init) (w->state, w->sqrt_wts, w->fdf, + w->x, w->f, w->J, w->g); + } +} + +int +gsl_multifit_nlinear_iterate (gsl_multifit_nlinear_workspace * w) +{ + int status = + (w->type->iterate) (w->state, w->sqrt_wts, w->fdf, + w->x, w->f, w->J, w->g, w->dx); + + w->niter++; + + return status; +} + +double +gsl_multifit_nlinear_avratio (const gsl_multifit_nlinear_workspace * w) +{ + return (w->type->avratio) (w->state); +} + +/* +gsl_multifit_nlinear_driver() + Iterate the nonlinear least squares solver until completion + +Inputs: maxiter - maximum iterations to allow + xtol - tolerance in step x + gtol - tolerance in gradient + ftol - tolerance in ||f|| + callback - callback function to call each iteration + callback_params - parameters to pass to callback function + info - (output) info flag on why iteration terminated + 1 = stopped due to small step size ||dx| + 2 = stopped due to small gradient + 3 = stopped due to small change in f + GSL_ETOLX = ||dx|| has converged to within machine + precision (and xtol is too small) + GSL_ETOLG = ||g||_inf is smaller than machine + precision (gtol is too small) + GSL_ETOLF = change in ||f|| is smaller than machine + precision (ftol is too small) + w - workspace + +Return: +GSL_SUCCESS if converged +GSL_MAXITER if maxiter exceeded without converging +GSL_ENOPROG if no accepted step found on first iteration +*/ + +int +gsl_multifit_nlinear_driver (const size_t maxiter, + const double xtol, + const double gtol, + const double ftol, + void (*callback)(const size_t iter, void *params, + const gsl_multifit_nlinear_workspace *w), + void *callback_params, + int *info, + gsl_multifit_nlinear_workspace * w) +{ + int status; + size_t iter = 0; + + /* call user callback function prior to any iterations + * with initial system state */ + if (callback) + callback(iter, callback_params, w); + + do + { + status = gsl_multifit_nlinear_iterate (w); + + /* + * If the solver reports no progress on the first iteration, + * then it didn't find a single step to reduce the + * cost function and more iterations won't help so return. + * + * If we get a no progress flag on subsequent iterations, + * it means we did find a good step in a previous iteration, + * so continue iterating since the solver has now reset + * mu to its initial value. + */ + if (status == GSL_ENOPROG && iter == 0) + { + *info = status; + return GSL_EMAXITER; + } + + ++iter; + + if (callback) + callback(iter, callback_params, w); + + /* test for convergence */ + status = gsl_multifit_nlinear_test(xtol, gtol, ftol, info, w); + } + while (status == GSL_CONTINUE && iter < maxiter); + + /* + * the following error codes mean that the solution has converged + * to within machine precision, so record the error code in info + * and return success + */ + if (status == GSL_ETOLF || status == GSL_ETOLX || status == GSL_ETOLG) + { + *info = status; + status = GSL_SUCCESS; + } + + /* check if max iterations reached */ + if (iter >= maxiter && status != GSL_SUCCESS) + status = GSL_EMAXITER; + + return status; +} /* gsl_multifit_nlinear_driver() */ + +gsl_matrix * +gsl_multifit_nlinear_jac (const gsl_multifit_nlinear_workspace * w) +{ + return w->J; +} + +const char * +gsl_multifit_nlinear_name (const gsl_multifit_nlinear_workspace * w) +{ + return w->type->name; +} + +gsl_vector * +gsl_multifit_nlinear_position (const gsl_multifit_nlinear_workspace * w) +{ + return w->x; +} + +gsl_vector * +gsl_multifit_nlinear_residual (const gsl_multifit_nlinear_workspace * w) +{ + return w->f; +} + +size_t +gsl_multifit_nlinear_niter (const gsl_multifit_nlinear_workspace * w) +{ + return w->niter; +} + +int +gsl_multifit_nlinear_rcond (double *rcond, const gsl_multifit_nlinear_workspace * w) +{ + int status = (w->type->rcond) (rcond, w->state); + return status; +} + +const char * +gsl_multifit_nlinear_trs_name (const gsl_multifit_nlinear_workspace * w) +{ + return w->params.trs->name; +} + +/* +gsl_multifit_nlinear_eval_f() + Compute residual vector y with user callback function, and apply +weighting transform if given: + +y~ = sqrt(W) y + +Inputs: fdf - callback function + x - model parameters + swts - weight matrix sqrt(W) = sqrt(diag(w1,w2,...,wn)) + set to NULL for unweighted fit + y - (output) (weighted) residual vector + y_i = sqrt(w_i) f_i where f_i is unweighted residual +*/ + +int +gsl_multifit_nlinear_eval_f(gsl_multifit_nlinear_fdf *fdf, + const gsl_vector *x, + const gsl_vector *swts, + gsl_vector *y) +{ + int s = ((*((fdf)->f)) (x, fdf->params, y)); + + ++(fdf->nevalf); + + /* y <- sqrt(W) y */ + if (swts) + gsl_vector_mul(y, swts); + + return s; +} + +/* +gsl_multifit_nlinear_eval_df() + Compute Jacobian matrix J with user callback function, and apply +weighting transform if given: + +J~ = sqrt(W) J + +Inputs: x - model parameters + f - residual vector f(x) + swts - weight matrix W = diag(w1,w2,...,wn) + set to NULL for unweighted fit + h - finite difference step size + fdtype - finite difference method + fdf - callback function + df - (output) (weighted) Jacobian matrix + df = sqrt(W) df where df is unweighted Jacobian + work - workspace for finite difference, size n +*/ + +int +gsl_multifit_nlinear_eval_df(const gsl_vector *x, + const gsl_vector *f, + const gsl_vector *swts, + const double h, + const gsl_multifit_nlinear_fdtype fdtype, + gsl_multifit_nlinear_fdf *fdf, + gsl_matrix *df, + gsl_vector *work) +{ + int status; + + if (fdf->df) + { + /* call user-supplied function */ + status = ((*((fdf)->df)) (x, fdf->params, df)); + ++(fdf->nevaldf); + + /* J <- sqrt(W) J */ + if (swts) + { + const size_t n = swts->size; + size_t i; + + for (i = 0; i < n; ++i) + { + double swi = gsl_vector_get(swts, i); + gsl_vector_view v = gsl_matrix_row(df, i); + + gsl_vector_scale(&v.vector, swi); + } + } + } + else + { + /* use finite difference Jacobian approximation */ + status = gsl_multifit_nlinear_df(h, fdtype, x, swts, fdf, f, df, work); + } + + return status; +} + +/* +gsl_multifit_nlinear_eval_fvv() + Compute second direction derivative vector yvv with user +callback function, and apply weighting transform if given: + +yvv~ = sqrt(W) yvv + +Inputs: h - step size for finite difference, if needed + x - model parameters, size p + v - unscaled geodesic velocity vector, size p + f - residual vector f(x), size n + J - Jacobian matrix J(x), n-by-p + swts - weight matrix sqrt(W) = sqrt(diag(w1,w2,...,wn)) + set to NULL for unweighted fit + fdf - callback function + yvv - (output) (weighted) second directional derivative vector + yvv_i = sqrt(w_i) fvv_i where f_i is unweighted + work - workspace, size p +*/ + +int +gsl_multifit_nlinear_eval_fvv(const double h, + const gsl_vector *x, + const gsl_vector *v, + const gsl_vector *f, + const gsl_matrix *J, + const gsl_vector *swts, + gsl_multifit_nlinear_fdf *fdf, + gsl_vector *yvv, gsl_vector *work) +{ + int status; + + if (fdf->fvv != NULL) + { + /* call user-supplied function */ + status = ((*((fdf)->fvv)) (x, v, fdf->params, yvv)); + ++(fdf->nevalfvv); + + /* yvv <- sqrt(W) yvv */ + if (swts) + gsl_vector_mul(yvv, swts); + } + else + { + /* use finite difference approximation */ + status = gsl_multifit_nlinear_fdfvv(h, x, v, f, J, + swts, fdf, yvv, work); + } + + return status; +} diff -Nru gsl-doc-1.16/multifit_nlinear/fdfvv.c gsl-doc-2.3/multifit_nlinear/fdfvv.c --- gsl-doc-1.16/multifit_nlinear/fdfvv.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/fdfvv.c 2016-09-24 10:55:01.000000000 +0000 @@ -0,0 +1,121 @@ +/* multifit_nlinear/fdfvv.c + * + * Copyright (C) 2015 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include + +/* +fdfvv() + Compute approximate second directional derivative using +finite differences. + +See Eq. 19 of: + +M. K. Transtrum, J. P. Sethna, Improvements to the Levenberg +Marquardt algorithm for nonlinear least-squares minimization, +arXiv:1201.5885, 2012. + +Inputs: h - step size for finite difference + x - parameter vector, size p + v - geodesic velocity, size p + f - vector of function values f_i(x), size n + J - Jacobian matrix J(x), n-by-p + swts - data weights + fdf - fdf struct + fvv - (output) approximate second directional derivative + vector D_v^2 f(x) + work - workspace, size p + +Return: success or error +*/ + +static int +fdfvv(const double h, const gsl_vector *x, const gsl_vector *v, + const gsl_vector *f, const gsl_matrix *J, const gsl_vector *swts, + gsl_multifit_nlinear_fdf *fdf, gsl_vector *fvv, gsl_vector *work) +{ + int status; + const size_t n = fdf->n; + const size_t p = fdf->p; + const double hinv = 1.0 / h; + size_t i; + + /* compute work = x + h*v */ + for (i = 0; i < p; ++i) + { + double xi = gsl_vector_get(x, i); + double vi = gsl_vector_get(v, i); + + gsl_vector_set(work, i, xi + h * vi); + } + + /* compute f(x + h*v) */ + status = gsl_multifit_nlinear_eval_f (fdf, work, swts, fvv); + if (status) + return status; + + for (i = 0; i < n; ++i) + { + double fi = gsl_vector_get(f, i); /* f_i(x) */ + double fip = gsl_vector_get(fvv, i); /* f_i(x + h*v) */ + gsl_vector_const_view row = gsl_matrix_const_row(J, i); + double u, fvvi; + + /* compute u = sum_{ij} J_{ij} D v_j */ + gsl_blas_ddot(&row.vector, v, &u); + + fvvi = (2.0 * hinv) * ((fip - fi) * hinv - u); + + gsl_vector_set(fvv, i, fvvi); + } + + return status; +} + +/* +gsl_multifit_nlinear_fdfvv() + Compute approximate second directional derivative +using finite differences + +Inputs: h - step size for finite difference + x - parameter vector, size p + v - geodesic velocity, size p + f - function values f_i(x), size n + J - Jacobian matrix J(x), n-by-p + swts - sqrt data weights (set to NULL if not needed) + fdf - fdf + fvv - (output) approximate (weighted) second directional derivative + vector, size n, sqrt(W) fvv + work - workspace, size p + +Return: success or error +*/ + +int +gsl_multifit_nlinear_fdfvv(const double h, const gsl_vector *x, const gsl_vector *v, + const gsl_vector *f, const gsl_matrix *J, + const gsl_vector *swts, gsl_multifit_nlinear_fdf *fdf, + gsl_vector *fvv, gsl_vector *work) +{ + return fdfvv(h, x, v, f, J, swts, fdf, fvv, work); +} diff -Nru gsl-doc-1.16/multifit_nlinear/fdjac.c gsl-doc-2.3/multifit_nlinear/fdjac.c --- gsl-doc-1.16/multifit_nlinear/fdjac.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/fdjac.c 2016-09-24 10:53:11.000000000 +0000 @@ -0,0 +1,194 @@ +/* multifit_nlinear/fdjac.c + * + * Copyright (C) 2013, 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * + * This module contains routines for approximating the Jacobian with + * finite differences for nonlinear least-squares fitting. + */ + +#include +#include +#include +#include +#include + +static int forward_jac(const double h, const gsl_vector *x, + const gsl_vector *wts, + gsl_multifit_nlinear_fdf *fdf, + const gsl_vector *f, gsl_matrix *J); +static int center_jac(const double h, const gsl_vector *x, const gsl_vector *wts, + gsl_multifit_nlinear_fdf *fdf, gsl_matrix *J, gsl_vector *work); + +/* +forward_jac() + Compute approximate Jacobian using forward differences + +Inputs: h - finite difference step size + x - parameter vector + wts - data weights + fdf - fdf struct + f - (input) vector of function values f_i(x) + J - (output) Jacobian matrix + +Return: success or error +*/ + +static int +forward_jac(const double h, const gsl_vector *x, const gsl_vector *wts, + gsl_multifit_nlinear_fdf *fdf, const gsl_vector *f, gsl_matrix *J) +{ + int status = 0; + size_t i, j; + double delta; + + for (j = 0; j < fdf->p; ++j) + { + double xj = gsl_vector_get(x, j); + + /* use column j of J as temporary storage for f(x + dx) */ + gsl_vector_view v = gsl_matrix_column(J, j); + + delta = h * fabs(xj); + if (delta == 0.0) + delta = h; + + /* perturb x_j to compute forward difference */ + gsl_vector_set((gsl_vector *) x, j, xj + delta); + + status += gsl_multifit_nlinear_eval_f (fdf, x, wts, &v.vector); + if (status) + return status; + + /* restore x_j */ + gsl_vector_set((gsl_vector *) x, j, xj); + + delta = 1.0 / delta; + for (i = 0; i < fdf->n; ++i) + { + double fnext = gsl_vector_get(&v.vector, i); + double fi = gsl_vector_get(f, i); + + gsl_matrix_set(J, i, j, (fnext - fi) * delta); + } + } + + return status; +} + +/* +center_jac() + Compute approximate Jacobian using centered differences + +Inputs: h - finite difference step size + x - parameter vector + wts - data weights + fdf - fdf struct + J - (output) Jacobian matrix + work - additional workspace, size n + +Return: success or error +*/ + +static int +center_jac(const double h, const gsl_vector *x, const gsl_vector *wts, + gsl_multifit_nlinear_fdf *fdf, gsl_matrix *J, gsl_vector *work) +{ + int status = 0; + size_t i, j; + double delta; + + for (j = 0; j < fdf->p; ++j) + { + double xj = gsl_vector_get(x, j); + + /* use column j of J as temporary storage for f(x + dx) */ + gsl_vector_view v = gsl_matrix_column(J, j); + + delta = h * fabs(xj); + if (delta == 0.0) + delta = h; + + /* perturb x_j to compute forward difference, f(x + 1/2 delta e_j) */ + gsl_vector_set((gsl_vector *) x, j, xj + 0.5 * delta); + + status += gsl_multifit_nlinear_eval_f (fdf, x, wts, &v.vector); + if (status) + return status; + + /* perturb x_j to compute backward difference, f(x - 1/2 delta e_j) */ + gsl_vector_set((gsl_vector *) x, j, xj - 0.5 * delta); + + status += gsl_multifit_nlinear_eval_f (fdf, x, wts, work); + if (status) + return status; + + /* restore x_j */ + gsl_vector_set((gsl_vector *) x, j, xj); + + delta = 1.0 / delta; + for (i = 0; i < fdf->n; ++i) + { + double fnext = gsl_vector_get(&v.vector, i); + double fprev = gsl_vector_get(work, i); + + gsl_matrix_set(J, i, j, (fnext - fprev) * delta); + } + } + + return status; +} + +/* +gsl_multifit_nlinear_df() + Compute approximate Jacobian using finite differences + +Inputs: h - finite difference step size + fdtype - finite difference method + x - parameter vector + wts - data weights (set to NULL if not needed) + fdf - fdf + f - (input) function values f_i(x) + J - (output) approximate (weighted) Jacobian matrix, sqrt(W) * J + work - additional workspace for centered differences, size n + +Return: success or error +*/ + +int +gsl_multifit_nlinear_df(const double h, const gsl_multifit_nlinear_fdtype fdtype, + const gsl_vector *x, const gsl_vector *wts, + gsl_multifit_nlinear_fdf *fdf, + const gsl_vector *f, gsl_matrix *J, gsl_vector *work) +{ + int status; + + if (fdtype == GSL_MULTIFIT_NLINEAR_FWDIFF) + { + status = forward_jac(h, x, wts, fdf, f, J); + } + else if (fdtype == GSL_MULTIFIT_NLINEAR_CTRDIFF) + { + status = center_jac(h, x, wts, fdf, J, work); + } + else + { + GSL_ERROR("invalid specified fdtype", GSL_EINVAL); + } + + return status; +} diff -Nru gsl-doc-1.16/multifit_nlinear/gsl_multifit_nlinear.h gsl-doc-2.3/multifit_nlinear/gsl_multifit_nlinear.h --- gsl-doc-1.16/multifit_nlinear/gsl_multifit_nlinear.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/gsl_multifit_nlinear.h 2016-08-12 19:46:44.000000000 +0000 @@ -0,0 +1,303 @@ +/* multifit_nlinear/gsl_multifit_nlinear.h + * + * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough + * Copyright (C) 2015, 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_MULTIFIT_NLINEAR_H__ +#define __GSL_MULTIFIT_NLINEAR_H__ + +#include +#include +#include +#include +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +typedef enum +{ + GSL_MULTIFIT_NLINEAR_FWDIFF, + GSL_MULTIFIT_NLINEAR_CTRDIFF +} gsl_multifit_nlinear_fdtype; + +/* Definition of vector-valued functions and gradient with parameters + based on gsl_vector */ + +typedef struct +{ + int (* f) (const gsl_vector * x, void * params, gsl_vector * f); + int (* df) (const gsl_vector * x, void * params, gsl_matrix * df); + int (* fvv) (const gsl_vector * x, const gsl_vector * v, void * params, + gsl_vector * fvv); + size_t n; /* number of functions */ + size_t p; /* number of independent variables */ + void * params; /* user parameters */ + size_t nevalf; /* number of function evaluations */ + size_t nevaldf; /* number of Jacobian evaluations */ + size_t nevalfvv; /* number of fvv evaluations */ +} gsl_multifit_nlinear_fdf; + +/* trust region subproblem method */ +typedef struct +{ + const char *name; + void * (*alloc) (const void * params, const size_t n, const size_t p); + int (*init) (const void * vtrust_state, void * vstate); + int (*preloop) (const void * vtrust_state, void * vstate); + int (*step) (const void * vtrust_state, const double delta, + gsl_vector * dx, void * vstate); + int (*preduction) (const void * vtrust_state, const gsl_vector * dx, + double * pred, void * vstate); + void (*free) (void * vstate); +} gsl_multifit_nlinear_trs; + +/* scaling matrix specification */ +typedef struct +{ + const char *name; + int (*init) (const gsl_matrix * J, gsl_vector * diag); + int (*update) (const gsl_matrix * J, gsl_vector * diag); +} gsl_multifit_nlinear_scale; + +/* + * linear least squares solvers - there are three steps to + * solving a least squares problem using a trust region + * method: + * + * 1. init: called once per iteration when a new Jacobian matrix + * is computed; perform factorization of Jacobian (qr,svd) + * or form normal equations matrix (cholesky) + * 2. presolve: called each time a new LM parameter value mu is available; + * used for cholesky method in order to factor + * the (J^T J + mu D^T D) matrix + * 3. solve: solve the least square system for a given rhs + */ +typedef struct +{ + const char *name; + void * (*alloc) (const size_t n, const size_t p); + int (*init) (const void * vtrust_state, void * vstate); + int (*presolve) (const double mu, const void * vtrust_state, void * vstate); + int (*solve) (const gsl_vector * f, gsl_vector * x, + const void * vtrust_state, void * vstate); + int (*rcond) (double * rcond, void * vstate); + void (*free) (void * vstate); +} gsl_multifit_nlinear_solver; + +/* tunable parameters */ +typedef struct +{ + const gsl_multifit_nlinear_trs *trs; /* trust region subproblem method */ + const gsl_multifit_nlinear_scale *scale; /* scaling method */ + const gsl_multifit_nlinear_solver *solver; /* solver method */ + gsl_multifit_nlinear_fdtype fdtype; /* finite difference method */ + double factor_up; /* factor for increasing trust radius */ + double factor_down; /* factor for decreasing trust radius */ + double avmax; /* max allowed |a|/|v| */ + double h_df; /* step size for finite difference Jacobian */ + double h_fvv; /* step size for finite difference fvv */ +} gsl_multifit_nlinear_parameters; + +typedef struct +{ + const char *name; + void * (*alloc) (const gsl_multifit_nlinear_parameters * params, + const size_t n, const size_t p); + int (*init) (void * state, const gsl_vector * wts, + gsl_multifit_nlinear_fdf * fdf, const gsl_vector * x, + gsl_vector * f, gsl_matrix * J, gsl_vector * g); + int (*iterate) (void * state, const gsl_vector * wts, + gsl_multifit_nlinear_fdf * fdf, gsl_vector * x, + gsl_vector * f, gsl_matrix * J, gsl_vector * g, + gsl_vector * dx); + int (*rcond) (double * rcond, void * state); + double (*avratio) (void * state); + void (*free) (void * state); +} gsl_multifit_nlinear_type; + +/* current state passed to low-level trust region algorithms */ +typedef struct +{ + const gsl_vector * x; /* parameter values x */ + const gsl_vector * f; /* residual vector f(x) */ + const gsl_vector * g; /* gradient J^T f */ + const gsl_matrix * J; /* Jacobian J(x) */ + const gsl_vector * diag; /* scaling matrix D */ + const gsl_vector * sqrt_wts; /* sqrt(diag(W)) or NULL for unweighted */ + const double *mu; /* LM parameter */ + const gsl_multifit_nlinear_parameters * params; + void *solver_state; /* workspace for linear least squares solver */ + gsl_multifit_nlinear_fdf * fdf; + double *avratio; /* |a| / |v| */ +} gsl_multifit_nlinear_trust_state; + +typedef struct +{ + const gsl_multifit_nlinear_type * type; + gsl_multifit_nlinear_fdf * fdf ; + gsl_vector * x; /* parameter values x */ + gsl_vector * f; /* residual vector f(x) */ + gsl_vector * dx; /* step dx */ + gsl_vector * g; /* gradient J^T f */ + gsl_matrix * J; /* Jacobian J(x) */ + gsl_vector * sqrt_wts_work; /* sqrt(W) */ + gsl_vector * sqrt_wts; /* ptr to sqrt_wts_work, or NULL if not using weights */ + size_t niter; /* number of iterations performed */ + gsl_multifit_nlinear_parameters params; + void *state; +} gsl_multifit_nlinear_workspace; + +gsl_multifit_nlinear_workspace * +gsl_multifit_nlinear_alloc (const gsl_multifit_nlinear_type * T, + const gsl_multifit_nlinear_parameters * params, + size_t n, size_t p); + +void gsl_multifit_nlinear_free (gsl_multifit_nlinear_workspace * w); + +gsl_multifit_nlinear_parameters gsl_multifit_nlinear_default_parameters(void); + +int +gsl_multifit_nlinear_init (const gsl_vector * x, + gsl_multifit_nlinear_fdf * fdf, + gsl_multifit_nlinear_workspace * w); + +int gsl_multifit_nlinear_winit (const gsl_vector * x, + const gsl_vector * wts, + gsl_multifit_nlinear_fdf * fdf, + gsl_multifit_nlinear_workspace * w); + +int +gsl_multifit_nlinear_iterate (gsl_multifit_nlinear_workspace * w); + +double +gsl_multifit_nlinear_avratio (const gsl_multifit_nlinear_workspace * w); + +int +gsl_multifit_nlinear_driver (const size_t maxiter, + const double xtol, + const double gtol, + const double ftol, + void (*callback)(const size_t iter, void *params, + const gsl_multifit_nlinear_workspace *w), + void *callback_params, + int *info, + gsl_multifit_nlinear_workspace * w); + +gsl_matrix * +gsl_multifit_nlinear_jac (const gsl_multifit_nlinear_workspace * w); + +const char * +gsl_multifit_nlinear_name (const gsl_multifit_nlinear_workspace * w); + +gsl_vector * +gsl_multifit_nlinear_position (const gsl_multifit_nlinear_workspace * w); + +gsl_vector * +gsl_multifit_nlinear_residual (const gsl_multifit_nlinear_workspace * w); + +size_t +gsl_multifit_nlinear_niter (const gsl_multifit_nlinear_workspace * w); + +int +gsl_multifit_nlinear_rcond (double *rcond, const gsl_multifit_nlinear_workspace * w); + +const char * +gsl_multifit_nlinear_trs_name (const gsl_multifit_nlinear_workspace * w); + +int gsl_multifit_nlinear_eval_f(gsl_multifit_nlinear_fdf *fdf, + const gsl_vector *x, + const gsl_vector *swts, + gsl_vector *y); + +int gsl_multifit_nlinear_eval_df(const gsl_vector *x, + const gsl_vector *f, + const gsl_vector *swts, + const double h, + const gsl_multifit_nlinear_fdtype fdtype, + gsl_multifit_nlinear_fdf *fdf, + gsl_matrix *df, gsl_vector *work); + +int +gsl_multifit_nlinear_eval_fvv(const double h, + const gsl_vector *x, + const gsl_vector *v, + const gsl_vector *f, + const gsl_matrix *J, + const gsl_vector *swts, + gsl_multifit_nlinear_fdf *fdf, + gsl_vector *yvv, gsl_vector *work); + +/* covar.c */ +int +gsl_multifit_nlinear_covar (const gsl_matrix * J, const double epsrel, + gsl_matrix * covar); + +/* convergence.c */ +int +gsl_multifit_nlinear_test (const double xtol, const double gtol, + const double ftol, int *info, + const gsl_multifit_nlinear_workspace * w); + +/* fdjac.c */ +int +gsl_multifit_nlinear_df(const double h, const gsl_multifit_nlinear_fdtype fdtype, + const gsl_vector *x, const gsl_vector *wts, + gsl_multifit_nlinear_fdf *fdf, + const gsl_vector *f, gsl_matrix *J, gsl_vector *work); + +/* fdfvv.c */ +int +gsl_multifit_nlinear_fdfvv(const double h, const gsl_vector *x, const gsl_vector *v, + const gsl_vector *f, const gsl_matrix *J, + const gsl_vector *swts, gsl_multifit_nlinear_fdf *fdf, + gsl_vector *fvv, gsl_vector *work); + +/* top-level algorithms */ +GSL_VAR const gsl_multifit_nlinear_type * gsl_multifit_nlinear_trust; + +/* trust region subproblem methods */ +GSL_VAR const gsl_multifit_nlinear_trs * gsl_multifit_nlinear_trs_lm; +GSL_VAR const gsl_multifit_nlinear_trs * gsl_multifit_nlinear_trs_lmaccel; +GSL_VAR const gsl_multifit_nlinear_trs * gsl_multifit_nlinear_trs_dogleg; +GSL_VAR const gsl_multifit_nlinear_trs * gsl_multifit_nlinear_trs_ddogleg; +GSL_VAR const gsl_multifit_nlinear_trs * gsl_multifit_nlinear_trs_subspace2D; + +/* scaling matrix strategies */ +GSL_VAR const gsl_multifit_nlinear_scale * gsl_multifit_nlinear_scale_levenberg; +GSL_VAR const gsl_multifit_nlinear_scale * gsl_multifit_nlinear_scale_marquardt; +GSL_VAR const gsl_multifit_nlinear_scale * gsl_multifit_nlinear_scale_more; + +/* linear solvers */ +GSL_VAR const gsl_multifit_nlinear_solver * gsl_multifit_nlinear_solver_cholesky; +GSL_VAR const gsl_multifit_nlinear_solver * gsl_multifit_nlinear_solver_qr; +GSL_VAR const gsl_multifit_nlinear_solver * gsl_multifit_nlinear_solver_svd; + +__END_DECLS + +#endif /* __GSL_MULTIFIT_NLINEAR_H__ */ diff -Nru gsl-doc-1.16/multifit_nlinear/lm.c gsl-doc-2.3/multifit_nlinear/lm.c --- gsl-doc-1.16/multifit_nlinear/lm.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/lm.c 2016-09-09 17:23:39.000000000 +0000 @@ -0,0 +1,344 @@ +/* multifit_nlinear/lm.c + * + * Copyright (C) 2014, 2015, 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * This module contains an implementation of the Levenberg-Marquardt + * algorithm for nonlinear optimization problems. This implementation + * closely follows the following works: + * + * [1] H. B. Nielsen, K. Madsen, Introduction to Optimization and + * Data Fitting, Informatics and Mathematical Modeling, + * Technical University of Denmark (DTU), 2010. + * + * [2] J. J. More, The Levenberg-Marquardt Algorithm: Implementation + * and Theory, Lecture Notes in Mathematics, v630, 1978. + */ + +typedef struct +{ + size_t n; /* number of observations */ + size_t p; /* number of parameters */ + gsl_vector *fvv; /* D_v^2 f(x), size n */ + gsl_vector *vel; /* geodesic velocity (standard LM step), size p */ + gsl_vector *acc; /* geodesic acceleration, size p */ + gsl_vector *workp; /* workspace, length p */ + gsl_vector *workn; /* workspace, length n */ + + int accel; /* use geodesic acceleration? */ + + /* tunable parameters */ + gsl_multifit_nlinear_parameters params; +} lm_state_t; + +#include "common.c" + +static void *lm_alloc (const int accel, const void * params, const size_t n, const size_t p); +static void *lm_alloc_noaccel (const void * params, const size_t n, const size_t p); +static void *lm_alloc_accel (const void * params, const size_t n, const size_t p); +static void lm_free(void *vstate); +static int lm_init(const void *vtrust_state, void *vstate); +static int lm_preloop(const void * vtrust_state, void * vstate); +static int lm_step(const void * vtrust_state, const double delta, + gsl_vector * dx, void * vstate); +static int lm_preduction(const void * vtrust_state, const gsl_vector * dx, + double * pred, void * vstate); + +static void * +lm_alloc (const int accel, const void * params, const size_t n, const size_t p) +{ + const gsl_multifit_nlinear_parameters *mparams = (const gsl_multifit_nlinear_parameters *) params; + lm_state_t *state; + + state = calloc(1, sizeof(lm_state_t)); + if (state == NULL) + { + GSL_ERROR_NULL ("failed to allocate lm state", GSL_ENOMEM); + } + + state->workp = gsl_vector_alloc(p); + if (state->workp == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workp", GSL_ENOMEM); + } + + state->workn = gsl_vector_alloc(n); + if (state->workn == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workn", GSL_ENOMEM); + } + + state->fvv = gsl_vector_alloc(n); + if (state->fvv == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for fvv", GSL_ENOMEM); + } + + state->vel = gsl_vector_alloc(p); + if (state->vel == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for vel", GSL_ENOMEM); + } + + state->acc = gsl_vector_alloc(p); + if (state->acc == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for acc", GSL_ENOMEM); + } + + state->n = n; + state->p = p; + state->params = *mparams; + state->accel = accel; + + return state; +} + +static void * +lm_alloc_noaccel (const void * params, const size_t n, const size_t p) +{ + return lm_alloc(0, params, n, p); +} + +static void * +lm_alloc_accel (const void * params, const size_t n, const size_t p) +{ + return lm_alloc(1, params, n, p); +} + +static void +lm_free(void *vstate) +{ + lm_state_t *state = (lm_state_t *) vstate; + + if (state->workp) + gsl_vector_free(state->workp); + + if (state->workn) + gsl_vector_free(state->workn); + + if (state->fvv) + gsl_vector_free(state->fvv); + + if (state->vel) + gsl_vector_free(state->vel); + + if (state->acc) + gsl_vector_free(state->acc); + + free(state); +} + +/* +lm_init() + Initialize LM solver + +Inputs: vtrust_state - trust state + vstate - workspace + +Return: success/error +*/ + +static int +lm_init(const void *vtrust_state, void *vstate) +{ + const gsl_multifit_nlinear_trust_state *trust_state = + (const gsl_multifit_nlinear_trust_state *) vtrust_state; + lm_state_t *state = (lm_state_t *) vstate; + + gsl_vector_set_zero(state->vel); + gsl_vector_set_zero(state->acc); + + *(trust_state->avratio) = 0.0; + + return GSL_SUCCESS; +} + +/* +lm_preloop() + Initialize LM method for new Jacobian matrix +*/ + +static int +lm_preloop(const void * vtrust_state, void * vstate) +{ + int status; + const gsl_multifit_nlinear_trust_state *trust_state = + (const gsl_multifit_nlinear_trust_state *) vtrust_state; + const gsl_multifit_nlinear_parameters *params = trust_state->params; + + (void)vstate; + + /* initialize linear least squares solver */ + status = (params->solver->init)(trust_state, trust_state->solver_state); + if (status) + return status; + + return GSL_SUCCESS; +} + +/* +lm_step() + Calculate a new step vector by solving the linear +least squares system: + +[ J ] v = - [ f ] +[ sqrt(mu) D ] [ 0 ] +*/ + +static int +lm_step(const void * vtrust_state, const double delta, + gsl_vector * dx, void * vstate) +{ + int status; + const gsl_multifit_nlinear_trust_state *trust_state = + (const gsl_multifit_nlinear_trust_state *) vtrust_state; + lm_state_t *state = (lm_state_t *) vstate; + const gsl_multifit_nlinear_parameters *params = trust_state->params; + const double mu = *(trust_state->mu); + + (void)delta; + + /* prepare the linear solver with current LM parameter mu */ + status = (params->solver->presolve)(mu, trust_state, trust_state->solver_state); + if (status) + return status; + + /* + * solve: [ J ] v = - [ f ] + * [ sqrt(mu)*D ] [ 0 ] + */ + status = (params->solver->solve)(trust_state->f, + state->vel, + trust_state, + trust_state->solver_state); + if (status) + return status; + + if (state->accel) + { + double anorm, vnorm; + + /* compute geodesic acceleration */ + status = gsl_multifit_nlinear_eval_fvv(params->h_fvv, + trust_state->x, + state->vel, + trust_state->f, + trust_state->J, + trust_state->sqrt_wts, + trust_state->fdf, + state->fvv, + state->workp); + if (status) + return status; + + /* + * solve: [ J ] a = - [ fvv ] + * [ sqrt(mu)*D ] [ 0 ] + */ + status = (params->solver->solve)(state->fvv, + state->acc, + trust_state, + trust_state->solver_state); + if (status) + return status; + + anorm = gsl_blas_dnrm2(state->acc); + vnorm = gsl_blas_dnrm2(state->vel); + + /* store |a| / |v| */ + *(trust_state->avratio) = anorm / vnorm; + } + + /* compute step dx = v + 1/2 a */ + scaled_addition(1.0, state->vel, 0.5, state->acc, dx); + + return GSL_SUCCESS; +} + +/* +lm_preduction() + Compute predicted reduction using Eq 4.4 of More 1978 +*/ + +static int +lm_preduction(const void * vtrust_state, const gsl_vector * dx, + double * pred, void * vstate) +{ + const gsl_multifit_nlinear_trust_state *trust_state = + (const gsl_multifit_nlinear_trust_state *) vtrust_state; + lm_state_t *state = (lm_state_t *) vstate; + const gsl_vector *diag = trust_state->diag; + const gsl_vector *p = state->vel; + const double norm_Dp = scaled_enorm(diag, p); + const double normf = gsl_blas_dnrm2(trust_state->f); + const double mu = *(trust_state->mu); + double norm_Jp; + double u, v; + + (void)dx; + + /* compute work = J*p */ + gsl_blas_dgemv(CblasNoTrans, 1.0, trust_state->J, p, 0.0, state->workn); + + /* compute ||J*p|| */ + norm_Jp = gsl_blas_dnrm2(state->workn); + + u = norm_Jp / normf; + v = norm_Dp / normf; + + *pred = u * u + 2.0 * mu * v * v; + + return GSL_SUCCESS; +} + +static const gsl_multifit_nlinear_trs lm_type = +{ + "levenberg-marquardt", + lm_alloc_noaccel, + lm_init, + lm_preloop, + lm_step, + lm_preduction, + lm_free +}; + +const gsl_multifit_nlinear_trs *gsl_multifit_nlinear_trs_lm = &lm_type; + +static const gsl_multifit_nlinear_trs lmaccel_type = +{ + "levenberg-marquardt+accel", + lm_alloc_accel, + lm_init, + lm_preloop, + lm_step, + lm_preduction, + lm_free +}; + +const gsl_multifit_nlinear_trs *gsl_multifit_nlinear_trs_lmaccel = &lmaccel_type; diff -Nru gsl-doc-1.16/multifit_nlinear/Makefile.am gsl-doc-2.3/multifit_nlinear/Makefile.am --- gsl-doc-1.16/multifit_nlinear/Makefile.am 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/Makefile.am 2016-08-12 15:35:44.000000000 +0000 @@ -0,0 +1,58 @@ +noinst_LTLIBRARIES = libgslmultifit_nlinear.la + +pkginclude_HEADERS = gsl_multifit_nlinear.h + +AM_CPPFLAGS = -I$(top_srcdir) + +libgslmultifit_nlinear_la_SOURCES = cholesky.c convergence.c covar.c dogleg.c fdf.c fdfvv.c fdjac.c lm.c qr.c scaling.c subspace2D.c svd.c trust.c + +noinst_HEADERS = \ +common.c \ +nielsen.c \ +qrsolv.c \ +test_bard.c \ +test_beale.c \ +test_biggs.c \ +test_box.c \ +test_boxbod.c \ +test_brown1.c \ +test_brown2.c \ +test_brown3.c \ +test_eckerle.c \ +test_enso.c \ +test_exp1.c \ +test_fdf.c \ +test_gaussian.c \ +test_hahn1.c \ +test_helical.c \ +test_jennrich.c \ +test_kirby2.c \ +test_kowalik.c \ +test_lin1.c \ +test_lin2.c \ +test_lin3.c \ +test_meyer.c \ +test_meyerscal.c \ +test_osborne.c \ +test_penalty1.c \ +test_penalty2.c \ +test_powell1.c \ +test_powell2.c \ +test_powell3.c \ +test_rat42.c \ +test_rat43.c \ +test_rosenbrock.c \ +test_rosenbrocke.c \ +test_roth.c \ +test_thurber.c \ +test_vardim.c \ +test_watson.c \ +test_wnlin.c \ +test_wood.c + +check_PROGRAMS = test + +TESTS = $(check_PROGRAMS) + +test_SOURCES = test.c +test_LDADD = libgslmultifit_nlinear.la ../eigen/libgsleigen.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../sort/libgslsort.la ../statistics/libgslstatistics.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la ../rng/libgslrng.la ../specfunc/libgslspecfunc.la ../poly/libgslpoly.la diff -Nru gsl-doc-1.16/multifit_nlinear/Makefile.in gsl-doc-2.3/multifit_nlinear/Makefile.in --- gsl-doc-1.16/multifit_nlinear/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -0,0 +1,1091 @@ +# Makefile.in generated by automake 1.13.4 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +check_PROGRAMS = test$(EXEEXT) +subdir = multifit_nlinear +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp \ + $(noinst_HEADERS) $(pkginclude_HEADERS) \ + $(top_srcdir)/test-driver TODO +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libgslmultifit_nlinear_la_LIBADD = +am_libgslmultifit_nlinear_la_OBJECTS = cholesky.lo convergence.lo \ + covar.lo dogleg.lo fdf.lo fdfvv.lo fdjac.lo lm.lo qr.lo \ + scaling.lo subspace2D.lo svd.lo trust.lo +libgslmultifit_nlinear_la_OBJECTS = \ + $(am_libgslmultifit_nlinear_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +am_test_OBJECTS = test.$(OBJEXT) +test_OBJECTS = $(am_test_OBJECTS) +test_DEPENDENCIES = libgslmultifit_nlinear.la ../eigen/libgsleigen.la \ + ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la \ + ../blas/libgslblas.la ../cblas/libgslcblas.la \ + ../matrix/libgslmatrix.la ../sort/libgslsort.la \ + ../statistics/libgslstatistics.la ../vector/libgslvector.la \ + ../block/libgslblock.la ../complex/libgslcomplex.la \ + ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la \ + ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la \ + ../rng/libgslrng.la ../specfunc/libgslspecfunc.la \ + ../poly/libgslpoly.la +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libgslmultifit_nlinear_la_SOURCES) $(test_SOURCES) +DIST_SOURCES = $(libgslmultifit_nlinear_la_SOURCES) $(test_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(pkgincludedir)" +HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +AM_RECURSIVE_TARGETS = check recheck +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ +GSL_LIBM = @GSL_LIBM@ +GSL_LIBS = @GSL_LIBS@ +GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ +GSL_LT_VERSION = @GSL_LT_VERSION@ +GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ +GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ +HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ +HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ +HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ +HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ +HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ +HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ +HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ +HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ +HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ +HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ +HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ +HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ +HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ +HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ +HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ +HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ +HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBM = @LIBM@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +noinst_LTLIBRARIES = libgslmultifit_nlinear.la +pkginclude_HEADERS = gsl_multifit_nlinear.h +AM_CPPFLAGS = -I$(top_srcdir) +libgslmultifit_nlinear_la_SOURCES = cholesky.c convergence.c covar.c dogleg.c fdf.c fdfvv.c fdjac.c lm.c qr.c scaling.c subspace2D.c svd.c trust.c +noinst_HEADERS = \ +common.c \ +nielsen.c \ +qrsolv.c \ +test_bard.c \ +test_beale.c \ +test_biggs.c \ +test_box.c \ +test_boxbod.c \ +test_brown1.c \ +test_brown2.c \ +test_brown3.c \ +test_eckerle.c \ +test_enso.c \ +test_exp1.c \ +test_fdf.c \ +test_gaussian.c \ +test_hahn1.c \ +test_helical.c \ +test_jennrich.c \ +test_kirby2.c \ +test_kowalik.c \ +test_lin1.c \ +test_lin2.c \ +test_lin3.c \ +test_meyer.c \ +test_meyerscal.c \ +test_osborne.c \ +test_penalty1.c \ +test_penalty2.c \ +test_powell1.c \ +test_powell2.c \ +test_powell3.c \ +test_rat42.c \ +test_rat43.c \ +test_rosenbrock.c \ +test_rosenbrocke.c \ +test_roth.c \ +test_thurber.c \ +test_vardim.c \ +test_watson.c \ +test_wnlin.c \ +test_wood.c + +TESTS = $(check_PROGRAMS) +test_SOURCES = test.c +test_LDADD = libgslmultifit_nlinear.la ../eigen/libgsleigen.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../sort/libgslsort.la ../statistics/libgslstatistics.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la ../rng/libgslrng.la ../specfunc/libgslspecfunc.la ../poly/libgslpoly.la +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu multifit_nlinear/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu multifit_nlinear/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libgslmultifit_nlinear.la: $(libgslmultifit_nlinear_la_OBJECTS) $(libgslmultifit_nlinear_la_DEPENDENCIES) $(EXTRA_libgslmultifit_nlinear_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(libgslmultifit_nlinear_la_OBJECTS) $(libgslmultifit_nlinear_la_LIBADD) $(LIBS) + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) + @rm -f test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cholesky.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convergence.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/covar.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dogleg.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdfvv.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdjac.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scaling.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/subspace2D.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/svd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trust.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgincludeHEADERS: $(pkginclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ + done + +uninstall-pkgincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + else \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all $(check_PROGRAMS) + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +test.log: test$(EXEEXT) + @p='test$(EXEEXT)'; \ + b='test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(pkgincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ + clean-noinstLTLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pkgincludeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pkgincludeHEADERS + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ + clean-checkPROGRAMS clean-generic clean-libtool \ + clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgincludeHEADERS \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + recheck tags tags-am uninstall uninstall-am \ + uninstall-pkgincludeHEADERS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -Nru gsl-doc-1.16/multifit_nlinear/nielsen.c gsl-doc-2.3/multifit_nlinear/nielsen.c --- gsl-doc-1.16/multifit_nlinear/nielsen.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/nielsen.c 2016-08-12 15:39:42.000000000 +0000 @@ -0,0 +1,101 @@ +/* multifit_nlinear/nielsen.c + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* + * This module contains routines for updating the Levenberg-Marquardt + * damping parameter on each iteration using Nielsen's method: + * + * [1] H. B. Nielsen, K. Madsen, Introduction to Optimization and + * Data Fitting, Informatics and Mathematical Modeling, + * Technical University of Denmark (DTU), 2010. + * + * 5 routines are needed to implement the update procedure: + * + * 1. accept - update parameter after a step has been accepted + * 2. reject - update parameter after a step has been rejected + * 3. free - free workspace state + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define LM_ONE_THIRD (0.333333333333333) + +static int nielsen_init(const gsl_matrix * J, const gsl_vector * diag, + double * mu, long * nu); +static int nielsen_accept(const double rho, double * mu, long * nu); +static int nielsen_reject(double * mu, long * nu); + +static int +nielsen_init(const gsl_matrix * J, const gsl_vector * diag, + double * mu, long * nu) +{ + const double mu0 = 1.0e-3; + const size_t p = J->size2; + size_t j; + double max = -1.0; + + *nu = 2; + + /* set mu = mu0 * max(diag(J~^T J~)), with J~ = J D^{-1} */ + + for (j = 0; j < p; ++j) + { + gsl_vector_const_view v = gsl_matrix_const_column(J, j); + double dj = gsl_vector_get(diag, j); + double norm = gsl_blas_dnrm2(&v.vector) / dj; + max = GSL_MAX(max, norm); + } + + *mu = mu0 * max * max; + + return GSL_SUCCESS; +} + +static int +nielsen_accept(const double rho, double * mu, long * nu) +{ + double b; + + /* reset nu */ + *nu = 2; + + b = 2.0 * rho - 1.0; + b = 1.0 - b*b*b; + *mu *= GSL_MAX(LM_ONE_THIRD, b); + + return GSL_SUCCESS; +} + +static int +nielsen_reject(double * mu, long * nu) +{ + *mu *= (double) *nu; + + /* nu := 2*nu */ + *nu <<= 1; + + return GSL_SUCCESS; +} diff -Nru gsl-doc-1.16/multifit_nlinear/qr.c gsl-doc-2.3/multifit_nlinear/qr.c --- gsl-doc-1.16/multifit_nlinear/qr.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/qr.c 2016-08-15 19:49:35.000000000 +0000 @@ -0,0 +1,286 @@ +/* multifit_nlinear/qr.c + * + * Copyright (C) 2015, 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* + * This module handles the solution of the linear least squares + * system: + * + * [ J~ ] p~ = - [ f ] + * [ sqrt(mu)*D~ ] [ 0 ] + * + * using a QR approach. Quantities are scaled according to: + * + * J~ = J S + * D~ = D S + * p~ = S^{-1} p + * + * where S is a diagonal matrix and S_jj = || J_j || and J_j is column + * j of the Jacobian. This balancing transformation seems to be more + * numerically stable for some Jacobians. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "common.c" +#include "qrsolv.c" + +typedef struct +{ + size_t p; + gsl_matrix *QR; /* QR factorization of J */ + gsl_vector *tau_Q; /* Householder scalars for Q */ + gsl_matrix *T; /* workspace matrix for qrsolv, p-by-p */ + gsl_permutation *perm; /* permutation matrix */ + size_t rank; /* rank of J */ + gsl_vector *residual; /* residual of LS problem [ J; sqrt(mu) D ] p = - [ f; 0 ] */ + gsl_vector *qtf; /* Q^T f */ + gsl_vector *workn; /* workspace, length n */ + gsl_vector *workp; /* workspace, length p */ + gsl_vector *work3p; /* workspace, length 3*p */ + double mu; /* LM parameter */ +} qr_state_t; + +static int qr_init(const void * vtrust_state, void * vstate); +static int qr_presolve(const double mu, const void * vtrust_state, void * vstate); +static int qr_solve(const gsl_vector * f, gsl_vector *x, + const void * vtrust_state, void *vstate); +static int qr_rcond(double * rcond, void * vstate); + +static void * +qr_alloc (const size_t n, const size_t p) +{ + qr_state_t *state; + + (void)n; + + state = calloc(1, sizeof(qr_state_t)); + if (state == NULL) + { + GSL_ERROR_NULL ("failed to allocate qr state", GSL_ENOMEM); + } + + state->QR = gsl_matrix_alloc(n, p); + if (state->QR == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for QR", GSL_ENOMEM); + } + + state->tau_Q = gsl_vector_alloc(p); + if (state->tau_Q == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for tau_Q", + GSL_ENOMEM); + } + + state->T = gsl_matrix_alloc(p, p); + if (state->T == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for T", GSL_ENOMEM); + } + + state->qtf = gsl_vector_alloc(n); + if (state->qtf == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for qtf", + GSL_ENOMEM); + } + + state->residual = gsl_vector_alloc(n); + if (state->residual == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for residual", + GSL_ENOMEM); + } + + state->perm = gsl_permutation_calloc(p); + if (state->perm == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for perm", + GSL_ENOMEM); + } + + state->workn = gsl_vector_alloc(n); + if (state->workn == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workn", + GSL_ENOMEM); + } + + state->workp = gsl_vector_alloc(p); + if (state->workp == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workp", + GSL_ENOMEM); + } + + state->work3p = gsl_vector_alloc(3 * p); + if (state->work3p == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for work3p", + GSL_ENOMEM); + } + + state->p = p; + state->mu = 0.0; + state->rank = 0; + + return state; +} + +static void +qr_free(void *vstate) +{ + qr_state_t *state = (qr_state_t *) vstate; + + if (state->QR) + gsl_matrix_free(state->QR); + + if (state->tau_Q) + gsl_vector_free(state->tau_Q); + + if (state->T) + gsl_matrix_free(state->T); + + if (state->qtf) + gsl_vector_free(state->qtf); + + if (state->residual) + gsl_vector_free(state->residual); + + if (state->perm) + gsl_permutation_free(state->perm); + + if (state->workn) + gsl_vector_free(state->workn); + + if (state->workp) + gsl_vector_free(state->workp); + + if (state->work3p) + gsl_vector_free(state->work3p); + + free(state); +} + +/* compute J = Q R PT */ +static int +qr_init(const void * vtrust_state, void * vstate) +{ + const gsl_multifit_nlinear_trust_state *trust_state = + (const gsl_multifit_nlinear_trust_state *) vtrust_state; + qr_state_t *state = (qr_state_t *) vstate; + int signum; + + /* perform QR decomposition of J */ + gsl_matrix_memcpy(state->QR, trust_state->J); + gsl_linalg_QRPT_decomp(state->QR, state->tau_Q, state->perm, + &signum, state->workp); + + return GSL_SUCCESS; +} + +static int +qr_presolve(const double mu, const void * vtrust_state, void * vstate) +{ + qr_state_t *state = (qr_state_t *) vstate; + + state->mu = mu; + + (void) vtrust_state; + + return GSL_SUCCESS; +} + +static int +qr_solve(const gsl_vector * f, gsl_vector *x, + const void * vtrust_state, void *vstate) +{ + qr_state_t *state = (qr_state_t *) vstate; + int status; + + if (state->mu == 0.0) + { + /* + * compute Gauss-Newton direction by solving + * J x = f + * with an attempt to identify rank deficiency in J + */ + size_t rank = gsl_linalg_QRPT_rank(state->QR, -1.0); + status = gsl_linalg_QRPT_lssolve2(state->QR, state->tau_Q, state->perm, + f, rank, x, state->residual); + } + else + { + /* + * solve: + * + * [ J ] x = [ f ] + * [ sqrt(mu) D ] [ 0 ] + * + * using QRPT factorization of J + */ + + const gsl_multifit_nlinear_trust_state *trust_state = + (const gsl_multifit_nlinear_trust_state *) vtrust_state; + double sqrt_mu = sqrt(state->mu); + + /* compute qtf = Q^T f */ + gsl_vector_memcpy(state->qtf, f); + gsl_linalg_QR_QTvec(state->QR, state->tau_Q, state->qtf); + + status = qrsolv(state->QR, state->perm, sqrt_mu, trust_state->diag, + state->qtf, state->T, x, state->workn); + } + + /* reverse step to go downhill */ + gsl_vector_scale(x, -1.0); + + return status; +} + +static int +qr_rcond(double * rcond, void * vstate) +{ + int status; + qr_state_t *state = (qr_state_t *) vstate; + + status = gsl_linalg_QRPT_rcond(state->QR, rcond, state->work3p); + + return status; +} + +static const gsl_multifit_nlinear_solver qr_type = +{ + "qr", + qr_alloc, + qr_init, + qr_presolve, + qr_solve, + qr_rcond, + qr_free +}; + +const gsl_multifit_nlinear_solver *gsl_multifit_nlinear_solver_qr = &qr_type; diff -Nru gsl-doc-1.16/multifit_nlinear/qrsolv.c gsl-doc-2.3/multifit_nlinear/qrsolv.c --- gsl-doc-1.16/multifit_nlinear/qrsolv.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/qrsolv.c 2016-07-07 20:36:10.000000000 +0000 @@ -0,0 +1,217 @@ +/* This function computes the solution to the least squares system + + phi = [ A x = b , lambda D x = 0 ]^2 + + where A is an M by N matrix, D is an N by N diagonal matrix, lambda + is a scalar parameter and b is a vector of length M. + + The function requires the factorization of A into A = Q R P^T, + where Q is an orthogonal matrix, R is an upper triangular matrix + with diagonal elements of non-increasing magnitude and P is a + permuation matrix. The system above is then equivalent to + + [ R z = Q^T b, P^T (lambda D) P z = 0 ] + + where x = P z. If this system does not have full rank then a least + squares solution is obtained. On output the function also provides + an upper triangular matrix S such that + + P^T (A^T A + lambda^2 D^T D) P = S^T S + + Parameters, + + r: On input, contains the full upper triangle of R. The diagonal + elements are modified but restored on output. The full + upper triangle of R is not modified. + + p: the encoded form of the permutation matrix P. column j of P is + column p[j] of the identity matrix. + + lambda, diag: contains the scalar lambda and the diagonal elements + of the matrix D + + qtb: contains the product Q^T b + + S: on output contains the matrix S, n-by-n + + x: on output contains the least squares solution of the system + + work: is a workspace of length N + + */ + +static int +qrsolv (gsl_matrix * r, const gsl_permutation * p, const double lambda, + const gsl_vector * diag, const gsl_vector * qtb, + gsl_matrix * S, gsl_vector * x, gsl_vector * work) +{ + size_t n = r->size2; + + size_t i, j, k, nsing; + + /* Copy r and qtb to preserve input and initialise s. In particular, + save the diagonal elements of r in x */ + + for (j = 0; j < n; j++) + { + double rjj = gsl_matrix_get (r, j, j); + double qtbj = gsl_vector_get (qtb, j); + + for (i = j + 1; i < n; i++) + { + double rji = gsl_matrix_get (r, j, i); + gsl_matrix_set (S, i, j, rji); + } + + gsl_vector_set (x, j, rjj); + gsl_vector_set (work, j, qtbj); + } + + /* Eliminate the diagonal matrix d using a Givens rotation */ + + for (j = 0; j < n; j++) + { + double qtbpj; + + size_t pj = gsl_permutation_get (p, j); + + double diagpj = lambda * gsl_vector_get (diag, pj); + + if (diagpj == 0) + { + continue; + } + + gsl_matrix_set (S, j, j, diagpj); + + for (k = j + 1; k < n; k++) + { + gsl_matrix_set (S, k, k, 0.0); + } + + /* The transformations to eliminate the row of d modify only a + single element of qtb beyond the first n, which is initially + zero */ + + qtbpj = 0; + + for (k = j; k < n; k++) + { + /* Determine a Givens rotation which eliminates the + appropriate element in the current row of d */ + + double sine, cosine; + + double wk = gsl_vector_get (work, k); + double rkk = gsl_matrix_get (r, k, k); + double skk = gsl_matrix_get (S, k, k); + + if (skk == 0) + { + continue; + } + + if (fabs (rkk) < fabs (skk)) + { + double cotangent = rkk / skk; + sine = 0.5 / sqrt (0.25 + 0.25 * cotangent * cotangent); + cosine = sine * cotangent; + } + else + { + double tangent = skk / rkk; + cosine = 0.5 / sqrt (0.25 + 0.25 * tangent * tangent); + sine = cosine * tangent; + } + + /* Compute the modified diagonal element of r and the + modified element of [qtb,0] */ + + { + double new_rkk = cosine * rkk + sine * skk; + double new_wk = cosine * wk + sine * qtbpj; + + qtbpj = -sine * wk + cosine * qtbpj; + + gsl_matrix_set(r, k, k, new_rkk); + gsl_matrix_set(S, k, k, new_rkk); + gsl_vector_set(work, k, new_wk); + } + + /* Accumulate the transformation in the row of s */ + + for (i = k + 1; i < n; i++) + { + double sik = gsl_matrix_get (S, i, k); + double sii = gsl_matrix_get (S, i, i); + + double new_sik = cosine * sik + sine * sii; + double new_sii = -sine * sik + cosine * sii; + + gsl_matrix_set(S, i, k, new_sik); + gsl_matrix_set(S, i, i, new_sii); + } + } + + /* Store the corresponding diagonal element of s and restore the + corresponding diagonal element of r */ + + { + double xj = gsl_vector_get(x, j); + gsl_matrix_set (r, j, j, xj); + } + + } + + /* Solve the triangular system for z. If the system is singular then + obtain a least squares solution */ + + nsing = n; + + for (j = 0; j < n; j++) + { + double sjj = gsl_matrix_get (S, j, j); + + if (sjj == 0) + { + nsing = j; + break; + } + } + + for (j = nsing; j < n; j++) + { + gsl_vector_set (work, j, 0.0); + } + + for (k = 0; k < nsing; k++) + { + double sum = 0; + + j = (nsing - 1) - k; + + for (i = j + 1; i < nsing; i++) + { + sum += gsl_matrix_get(S, i, j) * gsl_vector_get(work, i); + } + + { + double wj = gsl_vector_get (work, j); + double sjj = gsl_matrix_get (S, j, j); + + gsl_vector_set (work, j, (wj - sum) / sjj); + } + } + + /* Permute the components of z back to the components of x */ + + for (j = 0; j < n; j++) + { + size_t pj = gsl_permutation_get (p, j); + double wj = gsl_vector_get (work, j); + + gsl_vector_set (x, pj, wj); + } + + return GSL_SUCCESS; +} diff -Nru gsl-doc-1.16/multifit_nlinear/scaling.c gsl-doc-2.3/multifit_nlinear/scaling.c --- gsl-doc-1.16/multifit_nlinear/scaling.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/scaling.c 2016-07-07 20:36:10.000000000 +0000 @@ -0,0 +1,158 @@ +/* multifit_nlinear/scaling.c + * + * Copyright (C) 2015, 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* + * This module handles the updating of the scaling matrix D_k in the + * trust region subproblem: + * + * min m_k (dx), || D_k dx || <= Delta_k + * + * where m_k(dx) is a model which approximates the cost function + * F(x_k + dx) near the current iteration point x_k + * + * D_k can be updated according to several different strategies. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +static int init_diag_levenberg(const gsl_matrix * J, gsl_vector * diag); +static int update_diag_levenberg(const gsl_matrix * J, + gsl_vector * diag); + +static int init_diag_marquardt(const gsl_matrix * J, gsl_vector * diag); +static int update_diag_marquardt (const gsl_matrix * J, + gsl_vector * diag); + +static int init_diag_more(const gsl_matrix * J, gsl_vector * diag); +static int update_diag_more(const gsl_matrix * J, gsl_vector * diag); + +/* Levenberg scaling, D = I */ +static int +init_diag_levenberg(const gsl_matrix * J, gsl_vector * diag) +{ + (void)J; /* avoid unused parameter warning */ + gsl_vector_set_all(diag, 1.0); + return GSL_SUCCESS; +} + +static int +update_diag_levenberg(const gsl_matrix * J, gsl_vector * diag) +{ + (void)J; /* avoid unused parameter warning */ + (void)diag; /* avoid unused parameter warning */ + + /* nothing to do */ + return GSL_SUCCESS; +} + +/* initialize diagonal scaling matrix D according to Marquardt method */ +static int +init_diag_marquardt(const gsl_matrix * J, gsl_vector * diag) +{ + return update_diag_marquardt(J, diag); +} + +/* update diagonal scaling matrix D according to Marquardt method */ +static int +update_diag_marquardt (const gsl_matrix * J, gsl_vector * diag) +{ + const size_t p = J->size2; + size_t j; + + for (j = 0; j < p; j++) + { + gsl_vector_const_view v = gsl_matrix_const_column(J, j); + double norm = gsl_blas_dnrm2(&v.vector); + + if (norm == 0.0) + norm = 1.0; + + gsl_vector_set(diag, j, norm); + } + + return GSL_SUCCESS; +} + +/* initialize diagonal scaling matrix D according to Eq 6.3 of + * More, 1978 */ +static int +init_diag_more(const gsl_matrix * J, gsl_vector * diag) +{ + int status; + + gsl_vector_set_zero(diag); + status = update_diag_more(J, diag); + + return status; +} + +/* update diagonal scaling matrix D according to Eq. 6.3 of + * More, 1978 */ +static int +update_diag_more (const gsl_matrix * J, gsl_vector * diag) +{ + const size_t p = J->size2; + size_t j; + + for (j = 0; j < p; j++) + { + gsl_vector_const_view v = gsl_matrix_const_column(J, j); + double norm = gsl_blas_dnrm2(&v.vector); + double *diagj = gsl_vector_ptr(diag, j); + + if (norm == 0.0) + norm = 1.0; + + *diagj = GSL_MAX(*diagj, norm); + } + + return GSL_SUCCESS; +} + +static const gsl_multifit_nlinear_scale levenberg_type = +{ + "levenberg", + init_diag_levenberg, + update_diag_levenberg +}; + +static const gsl_multifit_nlinear_scale marquardt_type = +{ + "marquardt", + init_diag_marquardt, + update_diag_marquardt +}; + +static const gsl_multifit_nlinear_scale more_type = +{ + "more", + init_diag_more, + update_diag_more +}; + +const gsl_multifit_nlinear_scale *gsl_multifit_nlinear_scale_levenberg = &levenberg_type; +const gsl_multifit_nlinear_scale *gsl_multifit_nlinear_scale_marquardt = &marquardt_type; +const gsl_multifit_nlinear_scale *gsl_multifit_nlinear_scale_more = &more_type; diff -Nru gsl-doc-1.16/multifit_nlinear/subspace2D.c gsl-doc-2.3/multifit_nlinear/subspace2D.c --- gsl-doc-1.16/multifit_nlinear/subspace2D.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/subspace2D.c 2016-09-08 17:54:18.000000000 +0000 @@ -0,0 +1,711 @@ +/* multifit_nlinear/subspace2D.c + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * This module implements a 2D subspace trust region subproblem method, + * as outlined in + * + * [1] G. A. Shultz, R. B. Schnabel, and R. H. Byrd + * A Family of Trust-Region-Based Algorithms for Unconstrained + * Minimization with Strong Global Convergence Properties, + * SIAM Journal on Numerical Analysis 1985 22:1, 47-67 + * + * [2] R. H. Byrd, R. B. Schnabel, G. A. Shultz, + * Approximate solution of the trust region problem by + * minimization over two-dimensional subspaces, + * Mathematical Programming, January 1988, Volume 40, + * Issue 1, pp 247-263 + * + * The idea is to solve: + * + * min_{dx} g^T dx + 1/2 dx^T B dx + * + * with constraints: + * + * ||D dx|| <= delta + * dx \in span{dx_sd, dx_gn} + * + * where B is the Hessian matrix, B = J^T J + * + * The steps are as follows: + * + * 1. preloop: + * a. Compute Gauss-Newton and steepest descent vectors, + * dx_gn, dx_sd + * b. Compute an orthonormal basis for span(D dx_sd, D dx_gn) by + * constructing W = [ D dx_sd, D dx_gn ] and performing a QR + * decomposition of W. The 2 columns of the Q matrix + * will then span the column space of W. W should have rank 2 + * unless D*dx_sd and D*dx_gn are parallel, in which case it will + * have rank 1. + * c. Precompute various quantities needed for the step calculation + * + * 2. step: + * a. If the Gauss-Newton step is inside the trust region, use it + * b. if W has rank 1, we cannot form a 2D subspace, so in this case + * follow the steepest descent direction to the trust region boundary + * and use that as the step. + * c. In the full rank 2 case, if the GN point is outside the trust region, + * then the minimizer of the objective function lies on the trust + * region boundary. Therefore the minimization problem becomes: + * + * min_{dx} g^T dx + 1/2 dx^T B dx, with ||dx|| = delta, dx = Q * x + * + * where x is a 2-vector to be determined and the columns of Q are + * the orthonormal basis vectors of the subspace. Note the equality + * constraint now instead of <=. In terms of the new variable x, + * the minimization problem becomes: + * + * min_x subg^T x + 1/2 x^T subB x, with ||Q*x|| = ||x|| = delta + * + * where: + * subg = Q^T g (2-by-1) + * subB = Q^T B Q (2-by-2) + * + * This equality constrained 2D minimization problem can be solved + * with a Lagrangian multiplier, which results in a 4th degree polynomial + * equation to be solved. The equation is: + * + * lambda^4 1 + * + lambda^3 2 tr(B) + * + lambda^2 (tr(B)^2 + 2 det(B) - g^T g / delta^2) + * + lambda^1 (2 det(B) tr(B) - 2 g^T adj(B)^T g / delta^2) + * + lambda^0 (det(B)^2 - g^T adj(B)^T adj(B) g / delta^2) + * + * where adj(B) is the adjugate matrix of B. + * + * We then check each of the 4 solutions for lambda to determine which + * lambda results in the smallest objective function value. This x + * is then used to construct the final step: dx = Q*x + */ + +typedef struct +{ + size_t n; /* number of observations */ + size_t p; /* number of parameters */ + gsl_vector *dx_gn; /* Gauss-Newton step, size p */ + gsl_vector *dx_sd; /* steepest descent step, size p */ + double norm_Dgn; /* || D dx_gn || */ + double norm_Dsd; /* || D dx_sd || */ + gsl_vector *workp; /* workspace, length p */ + gsl_vector *workn; /* workspace, length n */ + gsl_matrix *W; /* orthonormal basis for 2D subspace, p-by-2 */ + gsl_matrix *JQ; /* J * Q, n-by-p */ + gsl_vector *tau; /* Householder scalars */ + gsl_vector *subg; /* subspace gradient = W^T g, 2-by-1 */ + gsl_matrix *subB; /* subspace Hessian = W^T B W, 2-by-2 */ + gsl_permutation *perm; /* permutation matrix */ + + double trB; /* Tr(subB) */ + double detB; /* det(subB) */ + double normg; /* || subg || */ + double term0; /* g^T adj(B)^T adj(B) g */ + double term1; /* g^T adj(B)^T g */ + + size_t rank; /* rank of [ dx_sd, dx_gn ] matrix */ + + gsl_poly_complex_workspace *poly_p; + + /* tunable parameters */ + gsl_multifit_nlinear_parameters params; +} subspace2D_state_t; + +#include "common.c" + +static void * subspace2D_alloc (const void * params, const size_t n, const size_t p); +static void subspace2D_free(void *vstate); +static int subspace2D_init(const void *vtrust_state, void *vstate); +static int subspace2D_preloop(const void * vtrust_state, void * vstate); +static int subspace2D_step(const void * vtrust_state, const double delta, + gsl_vector * dx, void * vstate); +static int subspace2D_preduction(const void * vtrust_state, const gsl_vector * dx, + double * pred, void * vstate); +static int subspace2D_solution(const double lambda, gsl_vector * x, + subspace2D_state_t * state); +static double subspace2D_objective(const gsl_vector * x, subspace2D_state_t * state); +static int subspace2D_calc_gn(const gsl_multifit_nlinear_trust_state * trust_state, gsl_vector * dx); +static int subspace2D_calc_sd(const gsl_multifit_nlinear_trust_state * trust_state, gsl_vector * dx, + subspace2D_state_t * state); + +static void * +subspace2D_alloc (const void * params, const size_t n, const size_t p) +{ + const gsl_multifit_nlinear_parameters *par = (const gsl_multifit_nlinear_parameters *) params; + subspace2D_state_t *state; + + state = calloc(1, sizeof(subspace2D_state_t)); + if (state == NULL) + { + GSL_ERROR_NULL ("failed to allocate subspace2D state", GSL_ENOMEM); + } + + state->dx_gn = gsl_vector_alloc(p); + if (state->dx_gn == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for dx_gn", GSL_ENOMEM); + } + + state->dx_sd = gsl_vector_alloc(p); + if (state->dx_sd == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for dx_sd", GSL_ENOMEM); + } + + state->workp = gsl_vector_alloc(p); + if (state->workp == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workp", GSL_ENOMEM); + } + + state->workn = gsl_vector_alloc(n); + if (state->workn == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workn", GSL_ENOMEM); + } + + state->W = gsl_matrix_alloc(p, 2); + if (state->W == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for W", GSL_ENOMEM); + } + + state->JQ = gsl_matrix_alloc(n, p); + if (state->JQ == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for JQ", GSL_ENOMEM); + } + + state->tau = gsl_vector_alloc(2); + if (state->tau == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for tau", GSL_ENOMEM); + } + + state->subg = gsl_vector_alloc(2); + if (state->subg == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for subg", GSL_ENOMEM); + } + + state->subB = gsl_matrix_alloc(2, 2); + if (state->subB == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for subB", GSL_ENOMEM); + } + + state->perm = gsl_permutation_alloc(2); + if (state->perm == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for perm", GSL_ENOMEM); + } + + state->poly_p = gsl_poly_complex_workspace_alloc(5); + if (state->poly_p == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for poly workspace", GSL_ENOMEM); + } + + state->n = n; + state->p = p; + state->rank = 0; + state->params = *par; + + return state; +} + +static void +subspace2D_free(void *vstate) +{ + subspace2D_state_t *state = (subspace2D_state_t *) vstate; + + if (state->dx_gn) + gsl_vector_free(state->dx_gn); + + if (state->dx_sd) + gsl_vector_free(state->dx_sd); + + if (state->workp) + gsl_vector_free(state->workp); + + if (state->workn) + gsl_vector_free(state->workn); + + if (state->W) + gsl_matrix_free(state->W); + + if (state->JQ) + gsl_matrix_free(state->JQ); + + if (state->tau) + gsl_vector_free(state->tau); + + if (state->subg) + gsl_vector_free(state->subg); + + if (state->subB) + gsl_matrix_free(state->subB); + + if (state->perm) + gsl_permutation_free(state->perm); + + if (state->poly_p) + gsl_poly_complex_workspace_free(state->poly_p); + + free(state); +} + +/* +subspace2D_init() + Initialize subspace2D solver + +Inputs: vtrust_state - trust state + vstate - workspace + +Return: success/error +*/ + +static int +subspace2D_init(const void *vtrust_state, void *vstate) +{ + (void)vtrust_state; + (void)vstate; + + return GSL_SUCCESS; +} + +/* +subspace2D_preloop() + Initialize subspace2D method prior to iteration loop. +This involves computing the Gauss-Newton step and +steepest descent step + +Notes: on output, +1) state->dx_gn contains Gauss-Newton step +2) state->dx_sd contains steepest descent step +3) state->rank contains the rank([dx_sd, dx_gn]) +4) if full rank subspace (rank = 2), then: + state->trB = Tr(subB) + state->detB = det(subB) + state->normg = || subg || +*/ + +static int +subspace2D_preloop(const void * vtrust_state, void * vstate) +{ + int status; + const gsl_multifit_nlinear_trust_state *trust_state = + (const gsl_multifit_nlinear_trust_state *) vtrust_state; + subspace2D_state_t *state = (subspace2D_state_t *) vstate; + gsl_vector_view v; + double work_data[2]; + gsl_vector_view work = gsl_vector_view_array(work_data, 2); + int signum; + + /* calculate Gauss-Newton step */ + status = subspace2D_calc_gn(trust_state, state->dx_gn); + if (status) + return status; + + /* now calculate the steepest descent step */ + status = subspace2D_calc_sd(trust_state, state->dx_sd, state); + if (status) + return status; + + /* store norms */ + state->norm_Dgn = scaled_enorm(trust_state->diag, state->dx_gn); + state->norm_Dsd = scaled_enorm(trust_state->diag, state->dx_sd); + + /* + * now compute orthonormal basis for span(D dx_sd, D dx_gn) using + * QR decomposition; set W = [ D dx_sd, D dx_gn ] and normalize each + * column to unit magnitude. Then the Q matrix will form a basis for Col(W) + */ + + v = gsl_matrix_column(state->W, 0); + gsl_vector_memcpy(&v.vector, state->dx_sd); + gsl_vector_mul(&v.vector, trust_state->diag); + if (state->norm_Dsd != 0) + gsl_vector_scale(&v.vector, 1.0 / state->norm_Dsd); + + v = gsl_matrix_column(state->W, 1); + gsl_vector_memcpy(&v.vector, state->dx_gn); + gsl_vector_mul(&v.vector, trust_state->diag); + if (state->norm_Dgn != 0) + gsl_vector_scale(&v.vector, 1.0 / state->norm_Dgn); + + /* use a rank revealing QR decomposition in case dx_sd and dx_gn + * are parallel */ + gsl_linalg_QRPT_decomp(state->W, state->tau, state->perm, &signum, &work.vector); + + /* check for parallel dx_sd, dx_gn, in which case rank will be 1 */ + state->rank = gsl_linalg_QRPT_rank(state->W, -1.0); + + if (state->rank == 2) + { + /* + * full rank subspace, compute: + * subg = Q^T D^{-1} g + * subB = Q^T D^{-1} B D^{-1} Q where B = J^T J + */ + const size_t p = state->p; + size_t i; + gsl_matrix_view JQ = gsl_matrix_submatrix(state->JQ, 0, 0, state->n, GSL_MIN(2, p)); + double B00, B10, B11, g0, g1; + + /* compute subg */ + gsl_vector_memcpy(state->workp, trust_state->g); + gsl_vector_div(state->workp, trust_state->diag); + gsl_linalg_QR_QTvec(state->W, state->tau, state->workp); + + g0 = gsl_vector_get(state->workp, 0); + g1 = gsl_vector_get(state->workp, 1); + + gsl_vector_set(state->subg, 0, g0); + gsl_vector_set(state->subg, 1, g1); + + /* compute subB */ + + /* compute J D^{-1} */ + gsl_matrix_memcpy(state->JQ, trust_state->J); + + for (i = 0; i < p; ++i) + { + gsl_vector_view c = gsl_matrix_column(state->JQ, i); + double di = gsl_vector_get(trust_state->diag, i); + gsl_vector_scale(&c.vector, 1.0 / di); + } + + /* compute J D^{-1} Q */ + gsl_linalg_QR_matQ(state->W, state->tau, state->JQ); + + /* compute subB = Q^T D^{-1} J^T J D^{-1} Q */ + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &JQ.matrix, 0.0, state->subB); + + B00 = gsl_matrix_get(state->subB, 0, 0); + B10 = gsl_matrix_get(state->subB, 1, 0); + B11 = gsl_matrix_get(state->subB, 1, 1); + + state->trB = B00 + B11; + state->detB = B00*B11 - B10*B10; + state->normg = gsl_blas_dnrm2(state->subg); + + /* g^T adj(B)^T adj(B) g */ + state->term0 = (B10*B10 + B11*B11)*g0*g0 - + 2*B10*(B00 + B11)*g0*g1 + + (B00*B00 + B10*B10)*g1*g1; + + /* g^T adj(B)^T g */ + state->term1 = B11 * g0 * g0 + g1 * (B00*g1 - 2*B10*g0); + + } + + return GSL_SUCCESS; +} + + +/* +subspace2D_step() + Calculate a new step with 2D subspace method. Based on [1]. We +seek a vector dx in span{dx_gn, dx_sd} which minimizes the model +function subject to ||dx|| <= delta +*/ + +static int +subspace2D_step(const void * vtrust_state, const double delta, + gsl_vector * dx, void * vstate) +{ + const gsl_multifit_nlinear_trust_state *trust_state = + (const gsl_multifit_nlinear_trust_state *) vtrust_state; + subspace2D_state_t *state = (subspace2D_state_t *) vstate; + + if (state->norm_Dgn <= delta) + { + /* Gauss-Newton step is inside trust region, use it as final step + * since it is the global minimizer of the quadratic model function */ + gsl_vector_memcpy(dx, state->dx_gn); + } + else if (state->rank < 2) + { + /* rank of [dx_sd, dx_gn] is 1, meaning dx_sd and dx_gn + * are parallel so we can't form a 2D subspace. Follow the steepest + * descent direction to the trust region boundary as our step */ + gsl_vector_memcpy(dx, state->dx_sd); + gsl_vector_scale(dx, delta / state->norm_Dsd); + } + else + { + int status; + const double delta_sq = delta * delta; + double u = state->normg / delta; + double a[5]; + double z[8]; + +#if 1 + a[0] = state->detB * state->detB - state->term0 / delta_sq; + a[1] = 2 * state->detB * state->trB - 2 * state->term1 / delta_sq; + a[2] = state->trB * state->trB + 2 * state->detB - u * u; + a[3] = 2 * state->trB; + a[4] = 1.0; +#else + double TrB_D = state->trB * delta; + double detB_D = state->detB * delta; + double normg_sq = state->normg * state->normg; + + a[0] = detB_D * detB_D - state->term0; + a[1] = 2 * state->detB * state->trB * delta_sq - 2 * state->term1; + a[2] = TrB_D * TrB_D + 2 * state->detB * delta_sq - normg_sq; + a[3] = 2 * state->trB * delta_sq; + a[4] = delta_sq; +#endif + + status = gsl_poly_complex_solve(a, 5, state->poly_p, z); + if (status == GSL_SUCCESS) + { + size_t i; + double min = 0.0; + int mini = -1; + double x_data[2]; + gsl_vector_view x = gsl_vector_view_array(x_data, 2); + + /* + * loop through all four values of the Lagrange multiplier + * lambda. For each lambda, evaluate the objective function + * with Re(lambda) to determine which lambda minimizes the + * function + */ + for (i = 0; i < 4; ++i) + { + double cost, normx; + + /*fprintf(stderr, "root: %.12e + %.12e i\n", + z[2*i], z[2*i+1]);*/ + + status = subspace2D_solution(z[2*i], &x.vector, state); + if (status != GSL_SUCCESS) + continue; /* singular matrix system */ + + /* ensure ||x|| = delta */ + + normx = gsl_blas_dnrm2(&x.vector); + if (normx == 0.0) + continue; + + gsl_vector_scale(&x.vector, delta / normx); + + /* evaluate objective function to determine minimizer */ + cost = subspace2D_objective(&x.vector, state); + if (mini < 0 || cost < min) + { + mini = (int) i; + min = cost; + } + } + + if (mini < 0) + { + /* did not find minimizer - should not get here */ + return GSL_FAILURE; + } + else + { + /* compute x which minimizes objective function */ + subspace2D_solution(z[2*mini], &x.vector, state); + + /* dx = Q * x */ + gsl_vector_set_zero(dx); + gsl_vector_set(dx, 0, gsl_vector_get(&x.vector, 0)); + gsl_vector_set(dx, 1, gsl_vector_get(&x.vector, 1)); + gsl_linalg_QR_Qvec(state->W, state->tau, dx); + + /* compute final dx by multiplying by D^{-1} */ + gsl_vector_div(dx, trust_state->diag); + } + } + else + { + GSL_ERROR ("gsl_poly_complex_solve failed", status); + } + } + + return GSL_SUCCESS; +} + +static int +subspace2D_preduction(const void * vtrust_state, const gsl_vector * dx, + double * pred, void * vstate) +{ + const gsl_multifit_nlinear_trust_state *trust_state = + (const gsl_multifit_nlinear_trust_state *) vtrust_state; + subspace2D_state_t *state = (subspace2D_state_t *) vstate; + + *pred = quadratic_preduction(trust_state->f, trust_state->J, dx, state->workn); + + return GSL_SUCCESS; +} + +/* solve 2D subspace problem: (B + lambda*I) x = -g */ +static int +subspace2D_solution(const double lambda, gsl_vector * x, + subspace2D_state_t * state) +{ + int status = GSL_SUCCESS; + double C_data[4]; + gsl_matrix_view C = gsl_matrix_view_array(C_data, 2, 2); + double B00 = gsl_matrix_get(state->subB, 0, 0); + double B10 = gsl_matrix_get(state->subB, 1, 0); + double B11 = gsl_matrix_get(state->subB, 1, 1); + + /* construct C = B + lambda*I */ + gsl_matrix_set(&C.matrix, 0, 0, B00 + lambda); + gsl_matrix_set(&C.matrix, 1, 0, B10); + gsl_matrix_set(&C.matrix, 0, 1, B10); + gsl_matrix_set(&C.matrix, 1, 1, B11 + lambda); + + /* use modified Cholesky in case C is not positive definite */ + gsl_linalg_mcholesky_decomp(&C.matrix, state->perm, NULL); + gsl_linalg_mcholesky_solve(&C.matrix, state->perm, state->subg, x); + + gsl_vector_scale(x, -1.0); + + return status; +} + +/* evaluate 2D objective function: f(x) = g^T x + 1/2 x^T B x */ +static double +subspace2D_objective(const gsl_vector * x, subspace2D_state_t * state) +{ + double f; + double y_data[2]; + gsl_vector_view y = gsl_vector_view_array(y_data, 2); + + /* compute: y = g + 1/2 B x */ + gsl_vector_memcpy(&y.vector, state->subg); + gsl_blas_dsymv(CblasLower, 0.5, state->subB, x, 1.0, &y.vector); + + /* compute: f = x^T ( g + 1/2 B x ) */ + gsl_blas_ddot(x, &y.vector, &f); + + return f; +} + +/* +subspace2D_calc_gn() + Calculate Gauss-Newton step which satisfies: + +J dx_gn = -f + +Inputs: trust_state - trust state variables + dx - (output) Gauss-Newton step + +Return: success/error +*/ + +static int +subspace2D_calc_gn(const gsl_multifit_nlinear_trust_state * trust_state, gsl_vector * dx) +{ + int status; + const gsl_multifit_nlinear_parameters *params = trust_state->params; + + /* initialize linear least squares solver */ + status = (params->solver->init)(trust_state, trust_state->solver_state); + if (status) + return status; + + /* prepare the linear solver to compute Gauss-Newton step */ + status = (params->solver->presolve)(0.0, trust_state, trust_state->solver_state); + if (status) + return status; + + /* solve: J dx_gn = -f for Gauss-Newton step */ + status = (params->solver->solve)(trust_state->f, + dx, + trust_state, + trust_state->solver_state); + if (status) + return status; + + return GSL_SUCCESS; +} + +/* +subspace2D_calc_sd() + Calculate steepest descent step, + +dx_sd = - || D^{-1} g ||^2 / || J D^{-2} g ||^2 D^{-2} g + +Inputs: trust_state - trust state variables + dx - (output) steepest descent vector + state - workspace + +Return: success/error +*/ + +static int +subspace2D_calc_sd(const gsl_multifit_nlinear_trust_state * trust_state, gsl_vector * dx, + subspace2D_state_t * state) +{ + double norm_Dinvg; /* || D^{-1} g || */ + double norm_JDinv2g; /* || J D^{-2} g || */ + double alpha; /* || D^{-1} g ||^2 / || J D^{-2} g ||^2 */ + double u; + + /* compute workp = D^{-1} g and its norm */ + gsl_vector_memcpy(state->workp, trust_state->g); + gsl_vector_div(state->workp, trust_state->diag); + norm_Dinvg = gsl_blas_dnrm2(state->workp); + + /* compute workp = D^{-2} g */ + gsl_vector_div(state->workp, trust_state->diag); + + /* compute: workn = J D^{-2} g */ + gsl_blas_dgemv(CblasNoTrans, 1.0, trust_state->J, state->workp, 0.0, state->workn); + norm_JDinv2g = gsl_blas_dnrm2(state->workn); + + u = norm_Dinvg / norm_JDinv2g; + alpha = u * u; + + /* dx_sd = -alpha D^{-2} g */ + gsl_vector_memcpy(dx, state->workp); + gsl_vector_scale(dx, -alpha); + + return GSL_SUCCESS; +} + +static const gsl_multifit_nlinear_trs subspace2D_type = +{ + "2D-subspace", + subspace2D_alloc, + subspace2D_init, + subspace2D_preloop, + subspace2D_step, + subspace2D_preduction, + subspace2D_free +}; + +const gsl_multifit_nlinear_trs *gsl_multifit_nlinear_trs_subspace2D = &subspace2D_type; diff -Nru gsl-doc-1.16/multifit_nlinear/svd.c gsl-doc-2.3/multifit_nlinear/svd.c --- gsl-doc-1.16/multifit_nlinear/svd.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/svd.c 2016-07-07 20:36:10.000000000 +0000 @@ -0,0 +1,269 @@ +/* multifit_nlinear/svd.c + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* + * This module handles the solution of the linear least squares + * system: + * + * [ J ] dx = - [ f ] + * [ sqrt(mu)*D ] [ 0 ] + * + * using an SVD approach. The system above is transformed to "standard form" + * via: + * + * J~ = J D^{-1} + * dx~ = D dx + * + * so that + * + * [ J~ ] dx~ = - [ f ] + * [ sqrt(mu)*I ] [ 0 ] + * + * can be solved with a standard SVD method, and then dx is recovered + * from dx~ via: dx = D^{-1} dx~ + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +typedef struct +{ + size_t n; /* number of residuals */ + size_t p; /* number of parameters */ + gsl_matrix *U; /* U factor of J, n-by-p */ + gsl_matrix *V; /* V factor of J, p-by-p */ + gsl_vector *S; /* singular values, size p */ + gsl_vector *workp; /* workspace, length p */ + double mu; /* LM parameter */ +} svd_state_t; + +static int svd_init(const void * vtrust_state, void * vstate); +static int svd_presolve(const double mu, const void * vtrust_state, void * vstate); +static int svd_solve(const gsl_vector * f, gsl_vector *x, + const void * vtrust_state, void *vstate); +static int svd_rcond(double * rcond, void * vstate); + +static void * +svd_alloc (const size_t n, const size_t p) +{ + svd_state_t *state; + + (void)n; + + state = calloc(1, sizeof(svd_state_t)); + if (state == NULL) + { + GSL_ERROR_NULL ("failed to allocate svd state", GSL_ENOMEM); + } + + state->U = gsl_matrix_alloc(n, p); + if (state->U == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for U", GSL_ENOMEM); + } + + state->V = gsl_matrix_alloc(p, p); + if (state->V == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for V", GSL_ENOMEM); + } + + state->S = gsl_vector_alloc(p); + if (state->S == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for S", + GSL_ENOMEM); + } + + state->workp = gsl_vector_alloc(p); + if (state->workp == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workp", + GSL_ENOMEM); + } + + state->mu = 0.0; + state->n = n; + state->p = p; + + return state; +} + +static void +svd_free(void *vstate) +{ + svd_state_t *state = (svd_state_t *) vstate; + + if (state->U) + gsl_matrix_free(state->U); + + if (state->V) + gsl_matrix_free(state->V); + + if (state->S) + gsl_vector_free(state->S); + + if (state->workp) + gsl_vector_free(state->workp); + + free(state); +} + +/* compute svd of J */ +static int +svd_init(const void * vtrust_state, void * vstate) +{ + int status; + const gsl_multifit_nlinear_trust_state *trust_state = + (const gsl_multifit_nlinear_trust_state *) vtrust_state; + svd_state_t *state = (svd_state_t *) vstate; + size_t i; + + gsl_matrix_set_zero(state->U); + + /* compute U = J D^{-1} */ + for (i = 0; i < state->p; ++i) + { + gsl_vector_const_view Ji = gsl_matrix_const_column(trust_state->J, i); + gsl_vector_view ui = gsl_matrix_column(state->U, i); + double di = gsl_vector_get(trust_state->diag, i); + + gsl_blas_daxpy(1.0 / di, &Ji.vector, &ui.vector); + } + + status = gsl_linalg_SV_decomp(state->U, state->V, state->S, state->workp); + + return status; +} + +static int +svd_presolve(const double mu, const void * vtrust_state, void * vstate) +{ + svd_state_t *state = (svd_state_t *) vstate; + + state->mu = mu; + + (void)vtrust_state; + + return GSL_SUCCESS; +} + +static int +svd_solve(const gsl_vector * f, gsl_vector *x, + const void * vtrust_state, void *vstate) +{ + int status = GSL_SUCCESS; + const gsl_multifit_nlinear_trust_state *trust_state = + (const gsl_multifit_nlinear_trust_state *) vtrust_state; + svd_state_t *state = (svd_state_t *) vstate; + const size_t p = state->p; + const double tol = GSL_DBL_EPSILON; + const double s0 = gsl_vector_get(state->S, 0); + size_t j; + + /* compute workp = - U^T f */ + gsl_blas_dgemv(CblasTrans, -1.0, state->U, f, 0.0, state->workp); + + /* + * compute: + * + * workp = sum_i s_i / (s_i^2 + mu) (-u_i^T f) + */ + + if (state->mu == 0.0) + { + /* + * compute Gauss-Newton direction by solving + * J x = -f + */ + + for (j = 0; j < p; ++j) + { + double sj = gsl_vector_get(state->S, j); + double *ptr = gsl_vector_ptr(state->workp, j); + double alpha; + + if (sj <= tol * s0) + alpha = 0.0; + else + alpha = 1.0 / sj; + + *ptr *= alpha; + } + } + else + { + /* + * solve: + * + * [ J D^{-1} ] (D x) = -[ f ] + * [ sqrt(mu) I ] [ 0 ] + * + * using SVD factorization of J D^{-1} + */ + + for (j = 0; j < p; ++j) + { + double sj = gsl_vector_get(state->S, j); + double *ptr = gsl_vector_ptr(state->workp, j); + + *ptr *= sj / (sj*sj + state->mu); + } + } + + /* compute: x = V * workp */ + gsl_blas_dgemv(CblasNoTrans, 1.0, state->V, state->workp, 0.0, x); + + /* compute D^{-1} x */ + gsl_vector_div(x, trust_state->diag); + + return status; +} + +static int +svd_rcond(double * rcond, void * vstate) +{ + int status = GSL_SUCCESS; + svd_state_t *state = (svd_state_t *) vstate; + double smax = gsl_vector_get(state->S, 0); + double smin = gsl_vector_get(state->S, state->p - 1); + + *rcond = smin / smax; + + return status; +} + +static const gsl_multifit_nlinear_solver svd_type = +{ + "svd", + svd_alloc, + svd_init, + svd_presolve, + svd_solve, + svd_rcond, + svd_free +}; + +const gsl_multifit_nlinear_solver *gsl_multifit_nlinear_solver_svd = &svd_type; diff -Nru gsl-doc-1.16/multifit_nlinear/test_bard.c gsl-doc-2.3/multifit_nlinear/test_bard.c --- gsl-doc-1.16/multifit_nlinear/test_bard.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_bard.c 2016-09-24 10:40:31.000000000 +0000 @@ -0,0 +1,153 @@ +#define bard_N 15 +#define bard_P 3 + +static double bard_x0[bard_P] = { 1.0, 1.0, 1.0 }; +static double bard_epsrel = 1.0e-7; + +static double bard_Y[bard_N] = { +0.14, 0.18, 0.22, 0.25, 0.29, 0.32, 0.35, 0.39, 0.37, +0.58, 0.73, 0.96, 1.34, 2.10, 4.39 +}; + +static void +bard_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact1 = 8.214877306578963e-03; + double bard_x1[bard_P] = { 8.241055975623580e-02, + 1.133036092245175, + 2.343695178435405 }; + const double sumsq_exact2 = 17.42869333333333; + double bard_x2[bard_P] = { 8.406666666666666e-01, + 0.0, /* -inf */ + 0.0 }; /* -inf */ + double *bard_x; + double sumsq_exact; + + bard_x2[1] = GSL_NAN; + bard_x2[2] = GSL_NAN; + + if (fabs(x[1]) < 10.0 && fabs(x[2]) < 10.0) + { + bard_x = bard_x1; + sumsq_exact = sumsq_exact1; + } + else + { + bard_x = bard_x2; + sumsq_exact = sumsq_exact2; + } + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < bard_P; ++i) + { + if (!gsl_finite(bard_x[i])) + continue; + + gsl_test_rel(x[i], bard_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +bard_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < bard_N; ++i) + { + double ui = i + 1.0; + double vi = 16.0 - i - 1.0; + double wi = GSL_MIN(ui, vi); + double yi = bard_Y[i]; + double fi = yi - (x1 + (ui / (x2*vi + x3*wi))); + + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +bard_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < bard_N; ++i) + { + double ui = i + 1.0; + double vi = 16.0 - i - 1.0; + double wi = GSL_MIN(ui, vi); + double term = x2 * vi + x3 * wi; + + gsl_matrix_set(J, i, 0, -1.0); + gsl_matrix_set(J, i, 1, ui * vi / (term * term)); + gsl_matrix_set(J, i, 2, ui * wi / (term * term)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +bard_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + size_t i; + + for (i = 0; i < bard_N; ++i) + { + double ui = i + 1.0; + double vi = 16.0 - i - 1.0; + double wi = GSL_MIN(ui, vi); + double term1 = x2 * vi + x3 * wi; + double term2 = v2 * vi + v3 * wi; + double ratio = term2 / term1; + + gsl_vector_set(fvv, i, -2.0 * ui * ratio * ratio / term1); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf bard_func = +{ + bard_f, + bard_df, + bard_fvv, + bard_N, + bard_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem bard_problem = +{ + "bard", + bard_x0, + NULL, + NULL, + &bard_epsrel, + &bard_checksol, + &bard_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_beale.c gsl-doc-2.3/multifit_nlinear/test_beale.c --- gsl-doc-1.16/multifit_nlinear/test_beale.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_beale.c 2016-09-24 10:40:36.000000000 +0000 @@ -0,0 +1,113 @@ +#define beale_N 3 +#define beale_P 2 + +static double beale_x0[beale_P] = { 1.0, 1.0 }; +static double beale_epsrel = 1.0e-12; + +static double beale_Y[beale_N] = { 1.5, 2.25, 2.625 }; + +static void +beale_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + const double beale_x[beale_P] = { 3.0, 0.5 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < beale_P; ++i) + { + gsl_test_rel(x[i], beale_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +beale_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + size_t i; + + for (i = 0; i < beale_N; ++i) + { + double yi = beale_Y[i]; + double term = pow(x2, i + 1.0); + double fi = yi - x1*(1.0 - term); + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +beale_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + size_t i; + + for (i = 0; i < beale_N; ++i) + { + double term = pow(x2, (double) i); + + gsl_matrix_set(J, i, 0, term*x2 - 1.0); + gsl_matrix_set(J, i, 1, (i + 1.0) * x1 * term); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +beale_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + size_t i; + + for (i = 0; i < beale_N; ++i) + { + double term = pow(x2, (double)i - 1.0); + + gsl_vector_set(fvv, i, (i + 1.0) * v2 * term * + (i * v2 * x1 + 2.0 * v1 * x2)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf beale_func = +{ + beale_f, + beale_df, + beale_fvv, + beale_N, + beale_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem beale_problem = +{ + "beale", + beale_x0, + NULL, + NULL, + &beale_epsrel, + &beale_checksol, + &beale_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_biggs.c gsl-doc-2.3/multifit_nlinear/test_biggs.c --- gsl-doc-1.16/multifit_nlinear/test_biggs.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_biggs.c 2016-09-24 10:40:42.000000000 +0000 @@ -0,0 +1,140 @@ +#define biggs_N 20 /* >= p */ +#define biggs_P 6 + +/* dogleg method has trouble converging from recommended starting point, + * so we use an x0 which is a little closer to the true solution */ +/*static double biggs_x0[biggs_P] = { 1.0, 2.0, 1.0, 1.0, 1.0, 1.0 };*/ +static double biggs_x0[biggs_P] = { 1.0, 5.0, 1.0, 2.0, 3.0, 2.0 }; +static double biggs_epsrel = 1.0e-9; + +static void +biggs_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + const double sumsq_exact = 0.0; + const double biggs_x[biggs_P] = { 1.0, 10.0, 1.0, 5.0, 4.0, 3.0 }; + size_t i; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < biggs_P; ++i) + { + gsl_test_rel(x[i], biggs_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +biggs_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double x5 = gsl_vector_get(x, 4); + double x6 = gsl_vector_get(x, 5); + size_t i; + + for (i = 0; i < biggs_N; ++i) + { + double ti = 0.1 * (i + 1.0); + double yi = exp(-ti) - 5*exp(-10*ti) + 3*exp(-4*ti); + double fi = x3*exp(-ti*x1) - x4*exp(-ti*x2) + x6*exp(-ti*x5) - yi; + + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +biggs_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double x5 = gsl_vector_get(x, 4); + double x6 = gsl_vector_get(x, 5); + size_t i; + + for (i = 0; i < biggs_N; ++i) + { + double ti = 0.1 * (i + 1.0); + + gsl_matrix_set(J, i, 0, -ti*x3*exp(-ti*x1)); + gsl_matrix_set(J, i, 1, ti*x4*exp(-ti*x2)); + gsl_matrix_set(J, i, 2, exp(-ti*x1)); + gsl_matrix_set(J, i, 3, -exp(-ti*x2)); + gsl_matrix_set(J, i, 4, -ti*x6*exp(-ti*x5)); + gsl_matrix_set(J, i, 5, exp(-ti*x5)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +biggs_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double x5 = gsl_vector_get(x, 4); + double x6 = gsl_vector_get(x, 5); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + double v4 = gsl_vector_get(v, 3); + double v5 = gsl_vector_get(v, 4); + double v6 = gsl_vector_get(v, 5); + size_t i; + + for (i = 0; i < biggs_N; ++i) + { + double ti = 0.1 * (i + 1.0); + double term1 = exp(-ti * x1); + double term2 = exp(-ti * x2); + double term3 = exp(-ti * x5); + + gsl_vector_set(fvv, i, ti * term1 * term2 * term3 * + (v1/(term2*term3)*(-2*v3 + ti*v1*x3) - + v2/(term1*term3)*(-2*v4 + ti*v2*x4) + + v5/(term1*term2)*(-2*v6 + ti*v5*x6))); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf biggs_func = +{ + biggs_f, + biggs_df, + biggs_fvv, + biggs_N, + biggs_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem biggs_problem = +{ + "biggs", + biggs_x0, + NULL, + NULL, + &biggs_epsrel, + &biggs_checksol, + &biggs_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_boxbod.c gsl-doc-2.3/multifit_nlinear/test_boxbod.c --- gsl-doc-1.16/multifit_nlinear/test_boxbod.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_boxbod.c 2016-09-24 10:41:03.000000000 +0000 @@ -0,0 +1,144 @@ +#define boxbod_N 6 +#define boxbod_P 2 + +static double boxbod_x0a[boxbod_P] = { 1.0, 1.0 }; +static double boxbod_x0b[boxbod_P] = { 100.0, 0.75 }; +static double boxbod_epsrel = 1.0e-7; + +static double boxbod_sigma[boxbod_P] = { + 1.2354515176E+01, 1.0455993237E-01 +}; + +static double boxbod_X[boxbod_N] = { 1.0, 2.0, 3.0, 5.0, 7.0, 10.0 }; + +static double boxbod_F[boxbod_N] = { 109.0, 149.0, 149.0, 191.0, + 213.0, 224.0 }; + +static void +boxbod_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 1.1680088766E+03; + const double boxbod_x[boxbod_P] = { 2.1380940889E+02, + 5.4723748542E-01 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < boxbod_P; ++i) + { + gsl_test_rel(x[i], boxbod_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + + +static int +boxbod_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[boxbod_P]; + size_t i; + + for (i = 0; i < boxbod_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < boxbod_N; i++) + { + double xi = boxbod_X[i]; + double yi; + + yi = b[0] * (1.0 - exp(-b[1] * xi)); + gsl_vector_set (f, i, yi - boxbod_F[i]); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +boxbod_df (const gsl_vector * x, void *params, gsl_matrix * df) +{ + double b[boxbod_P]; + size_t i; + + for (i = 0; i < boxbod_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < boxbod_N; i++) + { + double xi = boxbod_X[i]; + double term = exp(-b[1] * xi); + + gsl_matrix_set (df, i, 0, 1.0 - term); + gsl_matrix_set (df, i, 1, b[0] * term * xi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +boxbod_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + size_t i; + + for (i = 0; i < boxbod_N; i++) + { + double ti = boxbod_X[i]; + double term = exp(-x2 * ti); + + gsl_vector_set(fvv, i, term * ti * v2 * (2*v1 - ti*v2*x1)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf boxbod_func = +{ + boxbod_f, + boxbod_df, + boxbod_fvv, + boxbod_N, + boxbod_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem boxboda_problem = +{ + "nist-boxboda", + boxbod_x0a, + NULL, + boxbod_sigma, + &boxbod_epsrel, + &boxbod_checksol, + &boxbod_func +}; + +static test_fdf_problem boxbodb_problem = +{ + "nist-boxbodb", + boxbod_x0b, + NULL, + boxbod_sigma, + &boxbod_epsrel, + &boxbod_checksol, + &boxbod_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_box.c gsl-doc-2.3/multifit_nlinear/test_box.c --- gsl-doc-1.16/multifit_nlinear/test_box.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_box.c 2016-09-24 10:41:09.000000000 +0000 @@ -0,0 +1,143 @@ +#define box_N 10 /* can be >= p */ +#define box_P 3 + +/* dogleg method fails with recommended starting point, so use + * a slightly easier x0 */ +/*static double box_x0[box_P] = { 0.0, 10.0, 20.0 };*/ +static double box_x0[box_P] = { 5.0, 10.0, 2.0 }; +static double box_epsrel = 1.0e-12; + +static void +box_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + const double sumsq_exact = 0.0; + const double eps = 1.0e-6; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + /* there are 3 possible solution vectors */ + + if (fabs(x[2] - 1.0) < eps) + { + /* case 1: x* = [ 1; 10; 1 ] */ + gsl_test_rel(x[0], 1.0, epsrel, "%s/%s i=0", + sname, pname); + gsl_test_rel(x[1], 10.0, epsrel, "%s/%s i=1", + sname, pname); + gsl_test_rel(x[2], 1.0, epsrel, "%s/%s i=2", + sname, pname); + } + else if (fabs(x[2] + 1.0) < eps) + { + /* case 2: x* = [ 10; 1; -1 ] */ + gsl_test_rel(x[0], 10.0, epsrel, "%s/%s i=0", + sname, pname); + gsl_test_rel(x[1], 1.0, epsrel, "%s/%s i=1", + sname, pname); + gsl_test_rel(x[2], -1.0, epsrel, "%s/%s i=2", + sname, pname); + } + else + { + /* case 3: x* = [ a; a; 0 ] for any a */ + gsl_test_rel(x[0], x[1], epsrel, "%s/%s i=0,1", + sname, pname); + gsl_test_rel(x[2], 0.0, epsrel, "%s/%s i=2", + sname, pname); + } +} + +static int +box_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < box_N; ++i) + { + double ti = (i + 1.0) / 10.0; + double fi = exp(-x1*ti) - exp(-x2*ti) - x3*(exp(-ti) - exp(-10.0*ti)); + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +box_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + size_t i; + + for (i = 0; i < box_N; ++i) + { + double ti = (i + 1.0) / 10.0; + double term1 = exp(-x1*ti); + double term2 = exp(-x2*ti); + double term3 = exp(-10.0*ti) - exp(-ti); + + gsl_matrix_set(J, i, 0, -ti*term1); + gsl_matrix_set(J, i, 1, ti*term2); + gsl_matrix_set(J, i, 2, term3); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +box_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + size_t i; + + for (i = 0; i < box_N; ++i) + { + double ti = (i + 1.0) / 10.0; + double term1 = exp(-x1*ti); + double term2 = exp(-x2*ti); + + gsl_vector_set(fvv, i, ti * ti * (v1*v1*term1 - v2*v2*term2)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf box_func = +{ + box_f, + box_df, + box_fvv, + box_N, + box_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem box_problem = +{ + "box3d", + box_x0, + NULL, + NULL, + &box_epsrel, + &box_checksol, + &box_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_brown1.c gsl-doc-2.3/multifit_nlinear/test_brown1.c --- gsl-doc-1.16/multifit_nlinear/test_brown1.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_brown1.c 2016-09-24 10:41:15.000000000 +0000 @@ -0,0 +1,126 @@ +#define brown1_N 20 +#define brown1_P 4 + +static double brown1_x0[brown1_P] = { 25, 5, -5, -1 }; +static double brown1_epsrel = 1.0e-5; + +static void +brown1_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 8.582220162635628e+04; + const double brown1_x[brown1_P] = { + -1.159443990239263e+01, 1.320363005221244e+01, + -4.034395456782477e-01, 2.367789088597534e-01 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < brown1_P; ++i) + { + gsl_test_rel(x[i], brown1_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +brown1_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x0 = gsl_vector_get (x, 0); + double x1 = gsl_vector_get (x, 1); + double x2 = gsl_vector_get (x, 2); + double x3 = gsl_vector_get (x, 3); + size_t i; + + for (i = 0; i < brown1_N; i++) + { + double ti = 0.2 * (i + 1); + double ui = x0 + x1 * ti - exp (ti); + double vi = x2 + x3 * sin (ti) - cos (ti); + + gsl_vector_set (f, i, ui * ui + vi * vi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +brown1_df (const gsl_vector * x, void *params, gsl_matrix * df) +{ + double x0 = gsl_vector_get (x, 0); + double x1 = gsl_vector_get (x, 1); + double x2 = gsl_vector_get (x, 2); + double x3 = gsl_vector_get (x, 3); + size_t i; + + for (i = 0; i < brown1_N; i++) + { + double ti = 0.2 * (i + 1); + double ui = x0 + x1 * ti - exp (ti); + double vi = x2 + x3 * sin (ti) - cos (ti); + + gsl_matrix_set (df, i, 0, 2 * ui); + gsl_matrix_set (df, i, 1, 2 * ui * ti); + gsl_matrix_set (df, i, 2, 2 * vi); + gsl_matrix_set (df, i, 3, 2 * vi * sin (ti)); + + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +brown1_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double v0 = gsl_vector_get (v, 0); + double v1 = gsl_vector_get (v, 1); + double v2 = gsl_vector_get (v, 2); + double v3 = gsl_vector_get (v, 3); + size_t i; + + for (i = 0; i < brown1_N; i++) + { + double ti = 0.2 * (i + 1); + double term1 = v0 + ti*v1; + double term2 = v3*sin(ti); + + gsl_vector_set (fvv, i, 2.0 * (term1*term1 + v2*v2 + + term2 * (2*v2 + term2))); + } + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf brown1_func = +{ + brown1_f, + brown1_df, + brown1_fvv, + brown1_N, + brown1_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem brown1_problem = +{ + "brown_dennis", + brown1_x0, + NULL, + NULL, + &brown1_epsrel, + &brown1_checksol, + &brown1_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_brown2.c gsl-doc-2.3/multifit_nlinear/test_brown2.c --- gsl-doc-1.16/multifit_nlinear/test_brown2.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_brown2.c 2016-09-24 10:41:21.000000000 +0000 @@ -0,0 +1,170 @@ +#define brown2_N 5 +#define brown2_P 5 + +static double brown2_x0[brown2_P] = { 0.5, 0.5, 0.5, 0.5, 0.5 }; +static double brown2_epsrel = 1.0e-12; + +static void +brown2_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + double sumsq_exact; + double alpha; + const double p = (double) brown2_P; + double alpha1mp, lhs, lastel; + + if (sumsq < 0.5) + { + /* sumsq = 0 case */ + + sumsq_exact = 0.0; + alpha = x[0]; + alpha1mp = pow(alpha, 1.0 - p); + lhs = p*pow(alpha, p) - (p + 1)/alpha1mp; + lastel = alpha1mp; + + gsl_test_rel(lhs, -1.0, epsrel, "%s/%s alpha lhs", + sname, pname); + } + else + { + /* sumsq = 1 case */ + + sumsq_exact = 1.0; + alpha = 0.0; + lastel = p + 1.0; + } + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 1; i < brown2_P - 1; ++i) + { + gsl_test_rel(x[i], alpha, epsrel, "%s/%s i=%zu", + sname, pname, i); + } + + gsl_test_rel(x[brown2_P - 1], lastel, epsrel, "%s/%s last element", + sname, pname); +} + +static int +brown2_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + size_t i; + double sum = -(brown2_N + 1.0); + double prod = 1.0; + + for (i = 0; i < brown2_N; ++i) + { + double xi = gsl_vector_get(x, i); + sum += xi; + prod *= xi; + } + + for (i = 0; i < brown2_N - 1; ++i) + { + double xi = gsl_vector_get(x, i); + gsl_vector_set(f, i, xi + sum); + } + + gsl_vector_set(f, brown2_N - 1, prod - 1.0); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +brown2_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + size_t i, j; + + for (j = 0; j < brown2_P; ++j) + { + double prod = 1.0; + + for (i = 0; i < brown2_N - 1; i++) + { + double Jij = (i == j) ? 2.0 : 1.0; + gsl_matrix_set(J, i, j, Jij); + } + + for (i = 0; i < brown2_N; i++) + { + if (i != j) + prod *= gsl_vector_get(x, i); + } + + gsl_matrix_set(J, brown2_N - 1, j, prod); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +brown2_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + size_t i, j, k; + double sum = 0.0; + + gsl_vector_set_zero(fvv); + + for (k = 0; k < brown2_P; ++k) + { + double vk = gsl_vector_get(v, k); + + for (i = 0; i < brown2_P; ++i) + { + double vi = gsl_vector_get(v, i); + double delta = (i == k) ? 1.0 : 0.0; + double prod = 1.0; + + for (j = 0; j < brown2_N; ++j) + { + if (j != i && j != k) + { + double xj = gsl_vector_get(x, j); + prod *= xj; + } + } + + sum += vk * vi * (1.0 - delta) * prod; + } + } + + gsl_vector_set(fvv, brown2_N - 1, sum); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf brown2_func = +{ + brown2_f, + brown2_df, + brown2_fvv, + brown2_N, + brown2_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem brown2_problem = +{ + "brown_almost_linear", + brown2_x0, + NULL, + NULL, + &brown2_epsrel, + &brown2_checksol, + &brown2_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_brown3.c gsl-doc-2.3/multifit_nlinear/test_brown3.c --- gsl-doc-1.16/multifit_nlinear/test_brown3.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_brown3.c 2016-09-24 10:41:30.000000000 +0000 @@ -0,0 +1,98 @@ +#define brown3_N 3 +#define brown3_P 2 + +static double brown3_x0[brown3_P] = { 1.0, 1.0 }; +static double brown3_epsrel = 1.0e-12; + +static void +brown3_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + const double brown3_x[brown3_P] = { 1.0e6, 2.0e-6 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < brown3_P; ++i) + { + gsl_test_rel(x[i], brown3_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +brown3_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + + gsl_vector_set(f, 0, x1 - 1.0e6); + gsl_vector_set(f, 1, x2 - 2.0e-6); + gsl_vector_set(f, 2, x1*x2 - 2.0); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +brown3_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + + gsl_matrix_set_zero(J); + + gsl_matrix_set(J, 0, 0, 1.0); + gsl_matrix_set(J, 1, 1, 1.0); + gsl_matrix_set(J, 2, 0, x2); + gsl_matrix_set(J, 2, 1, x1); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +brown3_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + + gsl_vector_set(fvv, 0, 0.0); + gsl_vector_set(fvv, 1, 0.0); + gsl_vector_set(fvv, 2, 2.0 * v1 * v2); + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf brown3_func = +{ + brown3_f, + brown3_df, + brown3_fvv, + brown3_N, + brown3_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem brown3_problem = +{ + "brown_badly_scaled", + brown3_x0, + NULL, + NULL, + &brown3_epsrel, + &brown3_checksol, + &brown3_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test.c gsl-doc-2.3/multifit_nlinear/test.c --- gsl-doc-1.16/multifit_nlinear/test.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test.c 2016-09-16 22:53:28.000000000 +0000 @@ -0,0 +1,105 @@ +/* multifit_nlinear/test.c + * + * Copyright (C) 2007, 2013, 2015, 2016 Brian Gough, Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* These tests are based on the NIST Statistical Reference Datasets + See http://www.nist.gov/itl/div898/strd/index.html for more + information. */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "test_fdf.c" + +static void +test_proc(const gsl_multifit_nlinear_trs *trs, + const gsl_multifit_nlinear_scale *scale, + const gsl_multifit_nlinear_solver *solver, + const int fdtype) +{ + gsl_multifit_nlinear_parameters fdf_params = + gsl_multifit_nlinear_default_parameters(); + + fdf_params.trs = trs; + fdf_params.scale = scale; + fdf_params.solver = solver; + fdf_params.fdtype = fdtype; + + test_fdf_main(&fdf_params); +} + +int +main (void) +{ + const gsl_multifit_nlinear_trs **nlinear_trs[6]; + const gsl_multifit_nlinear_solver **nlinear_solvers[4]; + const gsl_multifit_nlinear_scale **nlinear_scales[3]; + const gsl_multifit_nlinear_trs **trs; + const gsl_multifit_nlinear_solver **solver; + const gsl_multifit_nlinear_scale **scale; + size_t i = 0; + + gsl_ieee_env_setup(); + + /* initialize arrays */ + + nlinear_trs[0] = &gsl_multifit_nlinear_trs_lm; + nlinear_trs[1] = &gsl_multifit_nlinear_trs_lmaccel; + nlinear_trs[2] = &gsl_multifit_nlinear_trs_dogleg; + nlinear_trs[3] = &gsl_multifit_nlinear_trs_ddogleg; + nlinear_trs[4] = &gsl_multifit_nlinear_trs_subspace2D; + nlinear_trs[5] = NULL; + + nlinear_solvers[0] = &gsl_multifit_nlinear_solver_cholesky; + nlinear_solvers[1] = &gsl_multifit_nlinear_solver_qr; + nlinear_solvers[2] = &gsl_multifit_nlinear_solver_svd; + nlinear_solvers[3] = NULL; + + /* skip Marquardt scaling since it won't pass */ + nlinear_scales[0] = &gsl_multifit_nlinear_scale_levenberg; + nlinear_scales[1] = &gsl_multifit_nlinear_scale_more; + nlinear_scales[2] = NULL; + + /* run testsuite over all parameter combinations */ + + for (trs = nlinear_trs[i]; trs != NULL; trs = nlinear_trs[++i]) + { + size_t j = 0; + + fprintf(stderr, "trs = %s\n", (*trs)->name); + + for (solver = nlinear_solvers[j]; solver != NULL; solver = nlinear_solvers[++j]) + { + size_t k = 0; + fprintf(stderr, "solver = %s\n", (*solver)->name); + for (scale = nlinear_scales[k]; scale != NULL; scale = nlinear_scales[++k]) + { + test_proc(*trs, *scale, *solver, GSL_MULTIFIT_NLINEAR_FWDIFF); + test_proc(*trs, *scale, *solver, GSL_MULTIFIT_NLINEAR_CTRDIFF); + } + } + } + + exit (gsl_test_summary ()); +} diff -Nru gsl-doc-1.16/multifit_nlinear/test_eckerle.c gsl-doc-2.3/multifit_nlinear/test_eckerle.c --- gsl-doc-1.16/multifit_nlinear/test_eckerle.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_eckerle.c 2016-09-24 15:45:10.000000000 +0000 @@ -0,0 +1,155 @@ +#define eckerle_N 35 +#define eckerle_P 3 + +static double eckerle_x0a[eckerle_P] = { 1.0, 10.0, 500.0 }; +static double eckerle_x0b[eckerle_P] = { 1.5, 5.0, 450.0 }; +static double eckerle_epsrel = 1.0e-7; + +static double eckerle_sigma[eckerle_P] = { + 1.5408051163E-02, 4.6803020753E-02, 4.6800518816E-02 +}; + +static double eckerle_X[eckerle_N] = { + 400.000000, 405.000000, 410.000000, 415.000000, 420.000000, + 425.000000, 430.000000, 435.000000, 436.500000, 438.000000, + 439.500000, 441.000000, 442.500000, 444.000000, 445.500000, + 447.000000, 448.500000, 450.000000, 451.500000, 453.000000, + 454.500000, 456.000000, 457.500000, 459.000000, 460.500000, + 462.000000, 463.500000, 465.000000, 470.000000, 475.000000, + 480.000000, 485.000000, 490.000000, 495.000000, 500.000000 }; + +static double eckerle_F[eckerle_N] = { + 0.0001575, 0.0001699, 0.0002350, 0.0003102, 0.0004917, + 0.0008710, 0.0017418, 0.0046400, 0.0065895, 0.0097302, + 0.0149002, 0.0237310, 0.0401683, 0.0712559, 0.1264458, + 0.2073413, 0.2902366, 0.3445623, 0.3698049, 0.3668534, + 0.3106727, 0.2078154, 0.1164354, 0.0616764, 0.0337200, + 0.0194023, 0.0117831, 0.0074357, 0.0022732, 0.0008800, + 0.0004579, 0.0002345, 0.0001586, 0.0001143, 0.0000710 }; + +static void +eckerle_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 1.4635887487E-03; + const double eckerle_x[eckerle_P] = { 1.5543827178E+00, + 4.0888321754E+00, + 4.5154121844E+02 }; + double new_x[3]; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + /* x1 and x2 are unique up to a sign, but they must be + * the same sign */ + if (x[0] < 0.0 && x[1] < 0.0) + { + new_x[0] = -x[0]; + new_x[1] = -x[1]; + } + else + { + new_x[0] = x[0]; + new_x[1] = x[1]; + } + + new_x[2] = x[2]; + + for (i = 0; i < eckerle_P; ++i) + { + gsl_test_rel(new_x[i], eckerle_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + + +static int +eckerle_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[eckerle_P]; + size_t i; + + for (i = 0; i < eckerle_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < eckerle_N; i++) + { + double xi = eckerle_X[i]; + double term = xi - b[2]; + double yi; + + yi = b[0] / b[1] * exp(-0.5 * term * term / b[1] / b[1]); + gsl_vector_set (f, i, yi - eckerle_F[i]); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +eckerle_df (const gsl_vector * x, void *params, gsl_matrix * df) +{ + double b[eckerle_P]; + size_t i; + + for (i = 0; i < eckerle_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < eckerle_N; i++) + { + double xi = eckerle_X[i]; + double term1 = xi - b[2]; + double term2 = exp(-0.5 * term1 * term1 / (b[1] * b[1])); + + gsl_matrix_set (df, i, 0, term2 / b[1]); + gsl_matrix_set (df, i, 1, + -b[0] * term2 / (b[1] * b[1]) + b[0] / pow(b[1], 4.0) * term2 * term1 * term1); + gsl_matrix_set (df, i, 2, b[0] / pow(b[1], 3.0) * term1 * term2); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf eckerle_func = +{ + eckerle_f, + eckerle_df, + NULL, /* analytic expression too complex */ + eckerle_N, + eckerle_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem eckerlea_problem = +{ + "nist-eckerlea", + eckerle_x0a, + NULL, + eckerle_sigma, + &eckerle_epsrel, + &eckerle_checksol, + &eckerle_func +}; + +static test_fdf_problem eckerleb_problem = +{ + "nist-eckerleb", + eckerle_x0b, + NULL, + eckerle_sigma, + &eckerle_epsrel, + &eckerle_checksol, + &eckerle_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_enso.c gsl-doc-2.3/multifit_nlinear/test_enso.c --- gsl-doc-1.16/multifit_nlinear/test_enso.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_enso.c 2016-09-24 10:41:58.000000000 +0000 @@ -0,0 +1,173 @@ +#define enso_N 168 +#define enso_P 9 + +static double enso_x0a[enso_P] = { 11.0, 3.0, 0.5, 40.0, -0.7, -1.3, 25.0, -0.3, 1.4 }; +static double enso_x0b[enso_P] = { 10.0, 3.0, 0.5, 44.0, -1.5, 0.5, 26.0, -0.1, 1.5 }; + +static double enso_epsrel = 1.0e-3; + +static double enso_sigma[enso_P] = { + 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 +}; + +static double enso_F[enso_N] = { + 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 +}; + +static void +enso_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 7.8853978668E+02; + const double enso_x[enso_P] = { + 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 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < enso_P; ++i) + { + gsl_test_rel(x[i], enso_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + + +static int +enso_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[enso_P]; + size_t i; + + for (i = 0; i < enso_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < enso_N; 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); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +enso_df (const gsl_vector * x, void *params, gsl_matrix * df) +{ + double b[enso_P]; + size_t i; + + for (i = 0; i < enso_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < enso_N; 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])); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf enso_func = +{ + enso_f, + enso_df, + NULL, /* analytic expression too complex */ + enso_N, + enso_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem ensoa_problem = +{ + "nist-ENSOa", + enso_x0a, + NULL, + enso_sigma, + &enso_epsrel, + &enso_checksol, + &enso_func +}; + +static test_fdf_problem ensob_problem = +{ + "nist-ENSOb", + enso_x0b, + NULL, + enso_sigma, + &enso_epsrel, + &enso_checksol, + &enso_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_exp1.c gsl-doc-2.3/multifit_nlinear/test_exp1.c --- gsl-doc-1.16/multifit_nlinear/test_exp1.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_exp1.c 2016-09-24 10:42:04.000000000 +0000 @@ -0,0 +1,138 @@ +#define exp1_N 45 +#define exp1_P 4 + +static double exp1_x0[exp1_P] = { -1.0, -2.0, 1.0, -1.0 }; +static double exp1_epsrel = 1.0e-4; + +static double exp1_Y[exp1_N] = { +0.090542, 0.124569, 0.179367, 0.195654, 0.269707, +0.286027, 0.289892, 0.317475, 0.308191, 0.336995, +0.348371, 0.321337, 0.299423, 0.338972, 0.304763, +0.288903, 0.300820, 0.303974, 0.283987, 0.262078, +0.281593, 0.267531, 0.218926, 0.225572, 0.200594, +0.197375, 0.182440, 0.183892, 0.152285, 0.174028, +0.150874, 0.126220, 0.126266, 0.106384, 0.118923, +0.091868, 0.128926, 0.119273, 0.115997, 0.105831, +0.075261, 0.068387, 0.090823, 0.085205, 0.067203 +}; + +static void +exp1_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 1.0e-2; + const double exp1_x[exp1_P] = { -4.0, -5.0, 4.0, -4.0 }; /* approx */ + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < exp1_P; ++i) + { + gsl_test_rel(x[i], exp1_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +exp1_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + size_t i; + + for (i = 0; i < exp1_N; ++i) + { + double ti = 0.02*(i + 1.0); + double yi = exp1_Y[i]; + double fi = yi - (x3*exp(x1*ti) + x4*exp(x2*ti)); + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +exp1_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + size_t i; + + for (i = 0; i < exp1_N; ++i) + { + double ti = 0.02*(i + 1.0); + double term1 = exp(x1*ti); + double term2 = exp(x2*ti); + + gsl_matrix_set(J, i, 0, -x3*ti*term1); + gsl_matrix_set(J, i, 1, -x4*ti*term2); + gsl_matrix_set(J, i, 2, -term1); + gsl_matrix_set(J, i, 3, -term2); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +exp1_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + double v4 = gsl_vector_get(v, 3); + size_t i; + + for (i = 0; i < exp1_N; ++i) + { + double ti = 0.02*(i + 1.0); + double term1 = exp(x1*ti); + double term2 = exp(x2*ti); + double term3 = 2*v3 + ti*v1*x3; + double term4 = 2*v4 + ti*v2*x4; + + gsl_vector_set(fvv, i, -ti*(v1*term1*term3 + v2*term2*term4)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf exp1_func = +{ + exp1_f, + exp1_df, + exp1_fvv, + exp1_N, + exp1_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem exp1_problem = +{ + "expfit1", + exp1_x0, + NULL, + NULL, + &exp1_epsrel, + &exp1_checksol, + &exp1_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_fdf.c gsl-doc-2.3/multifit_nlinear/test_fdf.c --- gsl-doc-1.16/multifit_nlinear/test_fdf.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_fdf.c 2016-09-24 10:51:50.000000000 +0000 @@ -0,0 +1,365 @@ +/* multifit_nlinear/test_fdf.c + * + * Copyright (C) 2007, 2013, 2014, 2015, 2016 Brian Gough, Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +typedef struct +{ + const char *name; + double *x0; /* initial parameters (size p) */ + double *weights; /* data weights */ + double *sigma; + double *epsrel; /* relative tolerance for solution checking */ + void (*checksol) (const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname); + gsl_multifit_nlinear_fdf *fdf; +} test_fdf_problem; + +#include "test_bard.c" +#include "test_beale.c" +#include "test_biggs.c" +#include "test_box.c" +#include "test_boxbod.c" +#include "test_brown1.c" +#include "test_brown2.c" +#include "test_brown3.c" +#include "test_eckerle.c" +#include "test_enso.c" +#include "test_exp1.c" +#include "test_gaussian.c" +#include "test_hahn1.c" +#include "test_helical.c" +#include "test_jennrich.c" +#include "test_kirby2.c" +#include "test_kowalik.c" +#include "test_lin1.c" +#include "test_lin2.c" +#include "test_lin3.c" +#include "test_meyer.c" +#include "test_meyerscal.c" +#include "test_osborne.c" +#include "test_penalty1.c" +#include "test_penalty2.c" +#include "test_powell1.c" +#include "test_powell2.c" +#include "test_powell3.c" +#include "test_rat42.c" +#include "test_rat43.c" +#include "test_rosenbrock.c" +#include "test_rosenbrocke.c" +#include "test_roth.c" +#include "test_thurber.c" +#include "test_vardim.c" +#include "test_watson.c" +#include "test_wood.c" + +#include "test_wnlin.c" + +static void test_fdf(const gsl_multifit_nlinear_type * T, + const gsl_multifit_nlinear_parameters * params, + const double xtol, const double gtol, + const double ftol, + const double epsrel, + test_fdf_problem *problem); +static void test_fdf_checksol(const char *sname, const char *pname, + const double epsrel, + gsl_multifit_nlinear_workspace *s, + test_fdf_problem *problem); + +/* + * FIXME: some test problems are disabled since they fail on certain + * solvers. Known failures are: + * + * Method test-problem + * ====== ============ + * dogleg thurbera + * dogleg rat43a + * all boxboda + */ + +static test_fdf_problem *test_problems[] = { + /* + * These test problems are taken from + * + * H. B. Nielsen, UCTP test problems for unconstrained optimization, + * IMM Department of Mathematical Modeling, Tech. Report + * IMM-REP-2000-17, 2000. + */ + &lin1_problem, /* 1 */ + &lin2_problem, /* 2 */ + &lin3_problem, /* 3 */ + &rosenbrock_problem, /* 4 */ + &helical_problem, /* 5 */ + &powell1_problem, /* 6 */ + &roth_problem, /* 7 */ + &bard_problem, /* 8 */ + &kowalik_problem, /* 9 */ + &meyer_problem, /* 10 */ + &watson_problem, /* 11 */ + &box_problem, /* 12 */ + &jennrich_problem, /* 13 */ + &brown1_problem, /* 14 */ + &brown2_problem, /* 16 */ + &osborne_problem, /* 17 */ + &exp1_problem, /* 18 */ + &meyerscal_problem, /* 20 */ + + &powell2_problem, + + /* + * These tests are from + * + * J. J. More, B. S. Garbow and K. E. Hillstrom, Testing + * Unconstrained Optimization Software, ACM Trans. Math. Soft. + * Vol 7, No 1, 1981. + * + * Many of these overlap with the Nielsen tests + */ + &rosenbrock_problem, /* 1 */ + &roth_problem, /* 2 */ + &powell3_problem, /* 3 */ + &brown3_problem, /* 4 */ + &beale_problem, /* 5 */ + &jennrich_problem, /* 6 */ + &helical_problem, /* 7 */ + &bard_problem, /* 8 */ + &gaussian_problem, /* 9 */ + &meyer_problem, /* 10 */ + &box_problem, /* 12 */ + &powell1_problem, /* 13 */ + &wood_problem, /* 14 */ + &kowalik_problem, /* 15 */ + &brown1_problem, /* 16 */ + &osborne_problem, /* 17 */ + &biggs_problem, /* 18 */ + &watson_problem, /* 20 */ + &rosenbrocke_problem, /* 21 */ + &penalty1_problem, /* 23 */ + &penalty2_problem, /* 24 */ + &vardim_problem, /* 25 */ + &brown2_problem, /* 27 */ + &lin1_problem, /* 32 */ + &lin2_problem, /* 33 */ + &lin3_problem, /* 34 */ + + /* NIST test cases */ + &kirby2a_problem, + &kirby2b_problem, + &hahn1a_problem, + &hahn1b_problem, + &ensoa_problem, + &ensob_problem, + /*&thurbera_problem,*/ + &thurberb_problem, + /*&boxboda_problem,*/ + &boxbodb_problem, + &rat42a_problem, + &rat42b_problem, + &eckerlea_problem, + &eckerleb_problem, + /*&rat43a_problem,*/ + &rat43b_problem, + + /* weighted test cases */ + &wnlin_problem1, + &wnlin_problem2, + + NULL +}; + +static void +test_fdf_main(const gsl_multifit_nlinear_parameters * params) +{ + const double xtol = pow(GSL_DBL_EPSILON, 0.9); + const double gtol = pow(GSL_DBL_EPSILON, 0.9); + const double ftol = 0.0; + size_t i; + + for (i = 0; test_problems[i] != NULL; ++i) + { + test_fdf_problem *problem = test_problems[i]; + double epsrel = *(problem->epsrel); + gsl_multifit_nlinear_fdf fdf; + + test_fdf(gsl_multifit_nlinear_trust, params, xtol, gtol, ftol, + epsrel, problem); + + /* test finite difference Jacobian + * XXX: watson problem doesn't work with forward differences */ + if (problem != &watson_problem) + { + fdf.df = problem->fdf->df; + problem->fdf->df = NULL; + + test_fdf(gsl_multifit_nlinear_trust, params, xtol, gtol, ftol, + 1.0e3 * epsrel, problem); + + problem->fdf->df = fdf.df; + } + +#if 1 /*XXX: box3d test fails on MacOS here */ + if (params->trs == gsl_multifit_nlinear_trs_lmaccel && problem->fdf->fvv != NULL) + { + /* test finite difference second directional derivative */ + fdf.fvv = problem->fdf->fvv; + problem->fdf->fvv = NULL; + + test_fdf(gsl_multifit_nlinear_trust, params, xtol, gtol, ftol, + epsrel / params->h_fvv, problem); + + problem->fdf->fvv = fdf.fvv; + } +#endif + } +} + +/* +test_fdf() + Test a weighted nonlinear least squares problem + +Inputs: T - solver to use + params - solver parameters + xtol - tolerance in x + gtol - tolerance in gradient + ftol - tolerance in residual vector + epsrel - relative error tolerance in solution + problem - contains the nonlinear problem and solution point +*/ + +static void +test_fdf(const gsl_multifit_nlinear_type * T, + const gsl_multifit_nlinear_parameters * params, + const double xtol, const double gtol, const double ftol, + const double epsrel, + test_fdf_problem *problem) +{ + gsl_multifit_nlinear_fdf *fdf = problem->fdf; + const size_t n = fdf->n; + const size_t p = fdf->p; + const size_t max_iter = 2500; + gsl_vector *x0 = gsl_vector_alloc(p); + gsl_vector_view x0v = gsl_vector_view_array(problem->x0, p); + gsl_multifit_nlinear_workspace *w = + gsl_multifit_nlinear_alloc (T, params, n, p); + const char *pname = problem->name; + char buf[2048]; + char sname[2048]; + int status, info; + + sprintf(buf, "%s/%s/scale=%s/solver=%s", + gsl_multifit_nlinear_name(w), + params->trs->name, + params->scale->name, + params->solver->name); + + if (problem->fdf->df == NULL) + { + if (params->fdtype == GSL_MULTIFIT_NLINEAR_FWDIFF) + strcat(buf, "/fdjac,forward"); + else + strcat(buf, "/fdjac,center"); + } + + if (problem->fdf->fvv == NULL) + { + strcat(buf, "/fdfvv"); + } + + strcpy(sname, buf); + + gsl_vector_memcpy(x0, &x0v.vector); + + if (problem->weights != NULL) + { + gsl_vector_const_view wv = gsl_vector_const_view_array(problem->weights, n); + gsl_multifit_nlinear_winit(x0, &wv.vector, fdf, w); + } + else + gsl_multifit_nlinear_init(x0, fdf, w); + + status = gsl_multifit_nlinear_driver(max_iter, xtol, gtol, ftol, + NULL, NULL, &info, w); + gsl_test(status, "%s/%s did not converge, status=%s", + sname, pname, gsl_strerror(status)); + + /* check solution */ + test_fdf_checksol(sname, pname, epsrel, w, problem); + + if (problem->weights == NULL) + { + /* test again with weighting matrix W = I */ + gsl_vector *wv = gsl_vector_alloc(n); + + sprintf(sname, "%s/weighted", buf); + + gsl_vector_memcpy(x0, &x0v.vector); + + gsl_vector_set_all(wv, 1.0); + gsl_multifit_nlinear_winit(x0, wv, fdf, w); + + status = gsl_multifit_nlinear_driver(max_iter, xtol, gtol, ftol, + NULL, NULL, &info, w); + gsl_test(status, "%s/%s did not converge, status=%s", + sname, pname, gsl_strerror(status)); + + test_fdf_checksol(sname, pname, epsrel, w, problem); + + gsl_vector_free(wv); + } + + gsl_multifit_nlinear_free(w); + gsl_vector_free(x0); +} + +static void +test_fdf_checksol(const char *sname, const char *pname, + const double epsrel, + gsl_multifit_nlinear_workspace *w, + test_fdf_problem *problem) +{ + gsl_multifit_nlinear_fdf *fdf = problem->fdf; + const double *sigma = problem->sigma; + gsl_vector *f = gsl_multifit_nlinear_residual(w); + gsl_vector *x = gsl_multifit_nlinear_position(w); + double sumsq; + + /* check solution vector x and sumsq = ||f||^2 */ + gsl_blas_ddot(f, f, &sumsq); + (problem->checksol)(x->data, sumsq, epsrel, sname, pname); + + /* check variances */ + if (sigma) + { + const size_t n = fdf->n; + const size_t p = fdf->p; + size_t i; + gsl_matrix * covar = gsl_matrix_alloc (p, p); + gsl_matrix *J = gsl_multifit_nlinear_jac (w); + + gsl_multifit_nlinear_covar (J, 0.0, covar); + + for (i = 0; i < p; i++) + { + double ei = sqrt(sumsq/(n-p))*sqrt(gsl_matrix_get(covar,i,i)); + gsl_test_rel (ei, sigma[i], epsrel, + "%s/%s, sigma(%d)", sname, pname, i) ; + } + + gsl_matrix_free (covar); + } +} diff -Nru gsl-doc-1.16/multifit_nlinear/test_gaussian.c gsl-doc-2.3/multifit_nlinear/test_gaussian.c --- gsl-doc-1.16/multifit_nlinear/test_gaussian.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_gaussian.c 2016-09-24 10:42:15.000000000 +0000 @@ -0,0 +1,135 @@ +#define gaussian_N 15 +#define gaussian_P 3 + +static double gaussian_x0[gaussian_P] = { 0.4, 1.0, 0.0 }; +static double gaussian_epsrel = 1.0e-10; + +static double gaussian_Y[gaussian_N] = { +0.0009, 0.0044, 0.0175, 0.0540, 0.1295, 0.2420, 0.3521, 0.3989, +0.3521, 0.2420, 0.1295, 0.0540, 0.0175, 0.0044, 0.0009 +}; + +static void +gaussian_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 1.12793276961871985e-08; + const double gaussian_x[gaussian_P] = { 0.398956137838762825, + 1.00001908448786647, + 0.0 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < gaussian_P; ++i) + { + gsl_test_rel(x[i], gaussian_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +gaussian_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < gaussian_N; ++i) + { + double ti = (7.0 - i) / 2.0; + double yi = gaussian_Y[i]; + double term = ti - x3; + double fi = x1 * exp(-x2*term*term/2.0) - yi; + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +gaussian_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < gaussian_N; ++i) + { + double ti = (7.0 - i) / 2.0; + double term1 = ti - x3; + double term2 = exp(-x2*term1*term1/2.0); + + gsl_matrix_set(J, i, 0, term2); + gsl_matrix_set(J, i, 1, -0.5*x1*term2*term1*term1); + gsl_matrix_set(J, i, 2, x1*x2*term1*term2); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +gaussian_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + size_t i; + + for (i = 0; i < gaussian_N; ++i) + { + double ti = (7.0 - i) / 2.0; + double term1 = ti - x3; + double term2 = exp(-x2*term1*term1/2.0); + + gsl_vector_set(fvv, i, 0.25 * term2 * + (ti*ti*ti*ti*v2*v2*x1 - + 4*ti*ti*ti*v2*x1*(v3*x2 + v2*x3) + + v2*x3*x3*(v2*x1*x3*x3 - 4*v1) + + 4*v3*v3*x1*x2*(x2*x3*x3 - 1.0) + + 4*v3*x3*(-2*v1*x2 + v2*x1*(x2*x3*x3 - 2.0)) + + ti*ti*(4*v3*v3*x1*x2*x2 + 2*v2*(-2*v1 + 3*x1*x3*(2*v3*x2 + v2*x3))) - + 4*ti*(v2*v2*x1*x3*x3*x3 + 2*v3*x2*(-v1 + v3*x1*x2*x3) + + v2*(-2*v1*x3 + v3*x1*(-2.0 + 3*x2*x3*x3))))); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf gaussian_func = +{ + gaussian_f, + gaussian_df, + gaussian_fvv, + gaussian_N, + gaussian_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem gaussian_problem = +{ + "gaussian", + gaussian_x0, + NULL, + NULL, + &gaussian_epsrel, + &gaussian_checksol, + &gaussian_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_hahn1.c gsl-doc-2.3/multifit_nlinear/test_hahn1.c --- gsl-doc-1.16/multifit_nlinear/test_hahn1.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_hahn1.c 2016-09-24 10:42:27.000000000 +0000 @@ -0,0 +1,226 @@ +#define hahn1_N 236 +#define hahn1_P 7 + +static double hahn1_x0a[hahn1_P] = { 10, -1, 0.05, -0.00001, -0.05, 0.001, -0.000001 }; +static double hahn1_x0b[hahn1_P] = { 1, -0.1, 0.005, -0.000001, -0.005, 0.0001, -0.0000001}; + +static double hahn1_epsrel = 1.0e-5; + +static double hahn1_sigma[hahn1_P] = { + 1.7070154742E-01, 1.2000289189E-02, 2.2508314937E-04, 2.7578037666E-07, + 2.4712888219E-04, 1.0449373768E-05, 1.3027335327E-08 +}; + +static double hahn1_F1[hahn1_N] = { + .591E0, 1.547E0, 2.902E0, 2.894E0, 4.703E0, + 6.307E0, 7.03E0 , 7.898E0, 9.470E0, 9.484E0, + 10.072E0, 10.163E0, 11.615E0, 12.005E0, 12.478E0, + 12.982E0, 12.970E0, 13.926E0, 14.452E0, 14.404E0, + 15.190E0, 15.550E0, 15.528E0, 15.499E0, 16.131E0, + 16.438E0, 16.387E0, 16.549E0, 16.872E0, 16.830E0, + 16.926E0, 16.907E0, 16.966E0, 17.060E0, 17.122E0, + 17.311E0, 17.355E0, 17.668E0, 17.767E0, 17.803E0, + 17.765E0, 17.768E0, 17.736E0, 17.858E0, 17.877E0, + 17.912E0, 18.046E0, 18.085E0, 18.291E0, 18.357E0, + 18.426E0, 18.584E0, 18.610E0, 18.870E0, 18.795E0, + 19.111E0, .367E0, .796E0, 0.892E0, 1.903E0, + 2.150E0, 3.697E0, 5.870E0, 6.421E0, 7.422E0, + 9.944E0, 11.023E0, 11.87E0 , 12.786E0, 14.067E0, + 13.974E0, 14.462E0, 14.464E0, 15.381E0, 15.483E0, + 15.59E0 , 16.075E0, 16.347E0, 16.181E0, 16.915E0, + 17.003E0, 16.978E0, 17.756E0, 17.808E0, 17.868E0, + 18.481E0, 18.486E0, 19.090E0, 16.062E0, 16.337E0, + 16.345E0, 16.388E0, 17.159E0, 17.116E0, 17.164E0, + 17.123E0, 17.979E0, 17.974E0, 18.007E0, 17.993E0, + 18.523E0, 18.669E0, 18.617E0, 19.371E0, 19.330E0, + 0.080E0, 0.248E0, 1.089E0, 1.418E0, 2.278E0, + 3.624E0, 4.574E0, 5.556E0, 7.267E0, 7.695E0, + 9.136E0, 9.959E0, 9.957E0, 11.600E0, 13.138E0, + 13.564E0, 13.871E0, 13.994E0, 14.947E0, 15.473E0, + 15.379E0, 15.455E0, 15.908E0, 16.114E0, 17.071E0, + 17.135E0, 17.282E0, 17.368E0, 17.483E0, 17.764E0, + 18.185E0, 18.271E0, 18.236E0, 18.237E0, 18.523E0, + 18.627E0, 18.665E0, 19.086E0, 0.214E0, 0.943E0, + 1.429E0, 2.241E0, 2.951E0, 3.782E0, 4.757E0, + 5.602E0, 7.169E0, 8.920E0, 10.055E0, 12.035E0, + 12.861E0, 13.436E0, 14.167E0, 14.755E0, 15.168E0, + 15.651E0, 15.746E0, 16.216E0, 16.445E0, 16.965E0, + 17.121E0, 17.206E0, 17.250E0, 17.339E0, 17.793E0, + 18.123E0, 18.49E0 , 18.566E0, 18.645E0, 18.706E0, + 18.924E0, 19.1E0 , 0.375E0, 0.471E0, 1.504E0, + 2.204E0, 2.813E0, 4.765E0, 9.835E0, 10.040E0, + 11.946E0, 12.596E0, 13.303E0, 13.922E0, 14.440E0, + 14.951E0, 15.627E0, 15.639E0, 15.814E0, 16.315E0, + 16.334E0, 16.430E0, 16.423E0, 17.024E0, 17.009E0, + 17.165E0, 17.134E0, 17.349E0, 17.576E0, 17.848E0, + 18.090E0, 18.276E0, 18.404E0, 18.519E0, 19.133E0, + 19.074E0, 19.239E0, 19.280E0, 19.101E0, 19.398E0, + 19.252E0, 19.89E0 , 20.007E0, 19.929E0, 19.268E0, + 19.324E0, 20.049E0, 20.107E0, 20.062E0, 20.065E0, + 19.286E0, 19.972E0, 20.088E0, 20.743E0, 20.83E0 , + 20.935E0, 21.035E0, 20.93E0 , 21.074E0, 21.085E0, + 20.935E0 +}; + + +static double hahn1_F0[hahn1_N] = { + 24.41E0, 34.82E0, 44.09E0, 45.07E0, 54.98E0, + 65.51E0, 70.53E0, 75.70E0, 89.57E0, 91.14E0, + 96.40E0, 97.19E0, 114.26E0, 120.25E0, 127.08E0, + 133.55E0, 133.61E0, 158.67E0, 172.74E0, 171.31E0, + 202.14E0, 220.55E0, 221.05E0, 221.39E0, 250.99E0, + 268.99E0, 271.80E0, 271.97E0, 321.31E0, 321.69E0, + 330.14E0, 333.03E0, 333.47E0, 340.77E0, 345.65E0, + 373.11E0, 373.79E0, 411.82E0, 419.51E0, 421.59E0, + 422.02E0, 422.47E0, 422.61E0, 441.75E0, 447.41E0, + 448.7E0 , 472.89E0, 476.69E0, 522.47E0, 522.62E0, + 524.43E0, 546.75E0, 549.53E0, 575.29E0, 576.00E0, + 625.55E0, 20.15E0, 28.78E0, 29.57E0, 37.41E0, + 39.12E0, 50.24E0, 61.38E0, 66.25E0, 73.42E0, + 95.52E0, 107.32E0, 122.04E0, 134.03E0, 163.19E0, + 163.48E0, 175.70E0, 179.86E0, 211.27E0, 217.78E0, + 219.14E0, 262.52E0, 268.01E0, 268.62E0, 336.25E0, + 337.23E0, 339.33E0, 427.38E0, 428.58E0, 432.68E0, + 528.99E0, 531.08E0, 628.34E0, 253.24E0, 273.13E0, + 273.66E0, 282.10E0, 346.62E0, 347.19E0, 348.78E0, + 351.18E0, 450.10E0, 450.35E0, 451.92E0, 455.56E0, + 552.22E0, 553.56E0, 555.74E0, 652.59E0, 656.20E0, + 14.13E0, 20.41E0, 31.30E0, 33.84E0, 39.70E0, + 48.83E0, 54.50E0, 60.41E0, 72.77E0, 75.25E0, + 86.84E0, 94.88E0, 96.40E0, 117.37E0, 139.08E0, + 147.73E0, 158.63E0, 161.84E0, 192.11E0, 206.76E0, + 209.07E0, 213.32E0, 226.44E0, 237.12E0, 330.90E0, + 358.72E0, 370.77E0, 372.72E0, 396.24E0, 416.59E0, + 484.02E0, 495.47E0, 514.78E0, 515.65E0, 519.47E0, + 544.47E0, 560.11E0, 620.77E0, 18.97E0, 28.93E0, + 33.91E0, 40.03E0, 44.66E0, 49.87E0, 55.16E0, + 60.90E0, 72.08E0, 85.15E0, 97.06E0, 119.63E0, + 133.27E0, 143.84E0, 161.91E0, 180.67E0, 198.44E0, + 226.86E0, 229.65E0, 258.27E0, 273.77E0, 339.15E0, + 350.13E0, 362.75E0, 371.03E0, 393.32E0, 448.53E0, + 473.78E0, 511.12E0, 524.70E0, 548.75E0, 551.64E0, + 574.02E0, 623.86E0, 21.46E0, 24.33E0, 33.43E0, + 39.22E0, 44.18E0, 55.02E0, 94.33E0, 96.44E0, + 118.82E0, 128.48E0, 141.94E0, 156.92E0, 171.65E0, + 190.00E0, 223.26E0, 223.88E0, 231.50E0, 265.05E0, + 269.44E0, 271.78E0, 273.46E0, 334.61E0, 339.79E0, + 349.52E0, 358.18E0, 377.98E0, 394.77E0, 429.66E0, + 468.22E0, 487.27E0, 519.54E0, 523.03E0, 612.99E0, + 638.59E0, 641.36E0, 622.05E0, 631.50E0, 663.97E0, + 646.9E0 , 748.29E0, 749.21E0, 750.14E0, 647.04E0, + 646.89E0, 746.9E0 , 748.43E0, 747.35E0, 749.27E0, + 647.61E0, 747.78E0, 750.51E0, 851.37E0, 845.97E0, + 847.54E0, 849.93E0, 851.61E0, 849.75E0, 850.98E0, + 848.23E0 +}; + +static void +hahn1_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 1.5324382854E+00; + const double hahn1_x[hahn1_P] = { + 1.0776351733E+00, -1.2269296921E-01, 4.0863750610E-03, + -1.4262662514E-06, -5.7609940901E-03, 2.4053735503E-04, + -1.2314450199E-07 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < hahn1_P; ++i) + { + gsl_test_rel(x[i], hahn1_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +hahn1_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[hahn1_P]; + size_t i; + + for (i = 0; i < hahn1_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < hahn1_N; i++) + { + double t = hahn1_F0[i]; + double y = ((b[0] + t* (b[1] + t * (b[2] + t * b[3]))) + / (1 + t*(b[4] + t *(b[5] + t*b[6])))); + gsl_vector_set (f, i, hahn1_F1[i] - y); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +hahn1_df (const gsl_vector * x, void *params, gsl_matrix * df) +{ + double b[hahn1_P]; + size_t i; + + for (i = 0; i < hahn1_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < hahn1_N; i++) + { + double t = hahn1_F0[i]; + double u = (b[0] + t*(b[1] + t*(b[2] + t * b[3]))); + double v = (1 + t*(b[4] + t*(b[5] + t*b[6]))); + gsl_matrix_set (df, i, 0, -1/v); + gsl_matrix_set (df, i, 1, -t/v); + gsl_matrix_set (df, i, 2, -t*t/v); + gsl_matrix_set (df, i, 3, -t*t*t/v); + gsl_matrix_set (df, i, 4, t*u/(v*v)); + gsl_matrix_set (df, i, 5, t*t*u/(v*v)); + gsl_matrix_set (df, i, 6, t*t*t*u/(v*v)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf hahn1_func = +{ + hahn1_f, + hahn1_df, + NULL, /* analytic expression too complex */ + hahn1_N, + hahn1_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem hahn1a_problem = +{ + "nist-hahn1a", + hahn1_x0a, + NULL, + hahn1_sigma, + &hahn1_epsrel, + &hahn1_checksol, + &hahn1_func +}; + +static test_fdf_problem hahn1b_problem = +{ + "nist-hahn1b", + hahn1_x0b, + NULL, + hahn1_sigma, + &hahn1_epsrel, + &hahn1_checksol, + &hahn1_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_helical.c gsl-doc-2.3/multifit_nlinear/test_helical.c --- gsl-doc-1.16/multifit_nlinear/test_helical.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_helical.c 2016-09-24 10:42:32.000000000 +0000 @@ -0,0 +1,115 @@ +#define helical_N 3 +#define helical_P 3 + +static double helical_x0[helical_P] = { -1.0, 0.0, 0.0 }; +static double helical_x[helical_P] = { 1.0, 0.0, 0.0 }; + +static double helical_epsrel = 1.0e-12; + +static void +helical_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < helical_P; ++i) + { + gsl_test_rel(x[i], helical_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +helical_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double theta = (x1 >= 0.0) ? 0.0 : 5.0; + double nx = gsl_hypot(x1, x2); + + gsl_vector_set(f, 0, 10.0 * (x3 - 5.0/M_PI*atan(x2 / x1) - theta)); + gsl_vector_set(f, 1, 10.0*(nx - 1.0)); + gsl_vector_set(f, 2, x3); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +helical_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double nx = gsl_hypot(x1, x2); + double nx_sq = nx * nx; + double term1 = 50.0 / (M_PI * nx_sq); + double term2 = 10.0 / nx; + + gsl_matrix_set(J, 0, 0, term1*x2); + gsl_matrix_set(J, 0, 1, -term1*x1); + gsl_matrix_set(J, 0, 2, 10.0); + + gsl_matrix_set(J, 1, 0, term2*x1); + gsl_matrix_set(J, 1, 1, term2*x2); + gsl_matrix_set(J, 1, 2, 0.0); + + gsl_matrix_set(J, 2, 0, 0.0); + gsl_matrix_set(J, 2, 1, 0.0); + gsl_matrix_set(J, 2, 2, 1.0); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +helical_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + double term1 = v2*x1 - v1*x2; + double term2 = v1*x1 + v2*x2; + double term3 = x1*x1 + x2*x2; + + gsl_vector_set(fvv, 0, 100.0 / M_PI * (term1 / term3) * (term2 / term3)); + gsl_vector_set(fvv, 1, 10.0 * (term1 * term1) / pow(term3, 1.5)); + gsl_vector_set(fvv, 2, 0.0); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf helical_func = +{ + helical_f, + helical_df, + helical_fvv, + helical_N, + helical_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem helical_problem = +{ + "helical", + helical_x0, + NULL, + NULL, + &helical_epsrel, + &helical_checksol, + &helical_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_jennrich.c gsl-doc-2.3/multifit_nlinear/test_jennrich.c --- gsl-doc-1.16/multifit_nlinear/test_jennrich.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_jennrich.c 2016-09-24 10:42:38.000000000 +0000 @@ -0,0 +1,112 @@ +#define jennrich_N 10 +#define jennrich_P 2 + +static double jennrich_x0[jennrich_P] = { 0.3, 0.4 }; +static double jennrich_epsrel = 1.0e-7; + +static void +jennrich_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 1.243621823556148e+02; + const double jennrich_x[jennrich_P] = { 2.578252139935855e-01, + 2.578252133471426e-01 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < jennrich_P; ++i) + { + gsl_test_rel(x[i], jennrich_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +jennrich_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + size_t i; + + for (i = 0; i < jennrich_N; ++i) + { + double ip1 = i + 1.0; + double fi = 2.0*(i + 2.0) - (exp(x1*ip1) + exp(x2*ip1)); + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +jennrich_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + size_t i; + + for (i = 0; i < jennrich_N; ++i) + { + double ip1 = i + 1.0; + + gsl_matrix_set(J, i, 0, -ip1*exp(ip1*x1)); + gsl_matrix_set(J, i, 1, -ip1*exp(ip1*x2)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +jennrich_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + size_t i; + + for (i = 0; i < jennrich_N; ++i) + { + double ip1 = i + 1.0; + double term1 = exp(ip1*x1); + double term2 = exp(ip1*x2); + + gsl_vector_set(fvv, i, -ip1*ip1*(v1*v1*term1 + v2*v2*term2)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf jennrich_func = +{ + jennrich_f, + jennrich_df, + jennrich_fvv, + jennrich_N, + jennrich_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem jennrich_problem = +{ + "jennrich", + jennrich_x0, + NULL, + NULL, + &jennrich_epsrel, + &jennrich_checksol, + &jennrich_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_kirby2.c gsl-doc-2.3/multifit_nlinear/test_kirby2.c --- gsl-doc-1.16/multifit_nlinear/test_kirby2.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_kirby2.c 2016-09-24 10:42:49.000000000 +0000 @@ -0,0 +1,221 @@ +#define kirby2_N 151 +#define kirby2_P 5 + +static double kirby2_x0a[kirby2_P] = { 2.0, -0.1, 0.003, -0.001, 0.00001 }; +static double kirby2_x0b[kirby2_P] = { 1.5, -0.15, 0.0025, -0.0015, 0.00002 }; +static double kirby2_x[kirby2_P] = { 1.6745063063E+00, -1.3927397867E-01, 2.5961181191E-03, + -1.7241811870E-03, 2.1664802578E-05 }; + +static double kirby2_epsrel = 1.0e-5; + +static double kirby2_sigma[kirby2_P] = { + 8.7989634338E-02, 4.1182041386E-03, 4.1856520458E-05, + 5.8931897355E-05, 2.0129761919E-07 +}; + +static double kirby2_F1[kirby2_N] = { + 0.0082E0, 0.0112E0, 0.0149E0, 0.0198E0, 0.0248E0, + 0.0324E0, 0.0420E0, 0.0549E0, 0.0719E0, 0.0963E0, + 0.1291E0, 0.1710E0, 0.2314E0, 0.3227E0, 0.4809E0, + 0.7084E0, 1.0220E0, 1.4580E0, 1.9520E0, 2.5410E0, + 3.2230E0, 3.9990E0, 4.8520E0, 5.7320E0, 6.7270E0, + 7.8350E0, 9.0250E0, 10.2670E0, 11.5780E0, 12.9440E0, + 14.3770E0, 15.8560E0, 17.3310E0, 18.8850E0, 20.5750E0, + 22.3200E0, 22.3030E0, 23.4600E0, 24.0600E0, 25.2720E0, + 25.8530E0, 27.1100E0, 27.6580E0, 28.9240E0, 29.5110E0, + 30.7100E0, 31.3500E0, 32.5200E0, 33.2300E0, 34.3300E0, + 35.0600E0, 36.1700E0, 36.8400E0, 38.0100E0, 38.6700E0, + 39.8700E0, 40.0300E0, 40.5000E0, 41.3700E0, 41.6700E0, + 42.3100E0, 42.7300E0, 43.4600E0, 44.1400E0, 44.5500E0, + 45.2200E0, 45.9200E0, 46.3000E0, 47.0000E0, 47.6800E0, + 48.0600E0, 48.7400E0, 49.4100E0, 49.7600E0, 50.4300E0, + 51.1100E0, 51.5000E0, 52.1200E0, 52.7600E0, 53.1800E0, + 53.7800E0, 54.4600E0, 54.8300E0, 55.4000E0, 56.4300E0, + 57.0300E0, 58.0000E0, 58.6100E0, 59.5800E0, 60.1100E0, + 61.1000E0, 61.6500E0, 62.5900E0, 63.1200E0, 64.0300E0, + 64.6200E0, 65.4900E0, 66.0300E0, 66.8900E0, 67.4200E0, + 68.2300E0, 68.7700E0, 69.5900E0, 70.1100E0, 70.8600E0, + 71.4300E0, 72.1600E0, 72.7000E0, 73.4000E0, 73.9300E0, + 74.6000E0, 75.1600E0, 75.8200E0, 76.3400E0, 76.9800E0, + 77.4800E0, 78.0800E0, 78.6000E0, 79.1700E0, 79.6200E0, + 79.8800E0, 80.1900E0, 80.6600E0, 81.2200E0, 81.6600E0, + 82.1600E0, 82.5900E0, 83.1400E0, 83.5000E0, 84.0000E0, + 84.4000E0, 84.8900E0, 85.2600E0, 85.7400E0, 86.0700E0, + 86.5400E0, 86.8900E0, 87.3200E0, 87.6500E0, 88.1000E0, + 88.4300E0, 88.8300E0, 89.1200E0, 89.5400E0, 89.8500E0, + 90.2500E0, 90.5500E0, 90.9300E0, 91.2000E0, 91.5500E0, + 92.2000E0 +}; + + +static double kirby2_F0[kirby2_N] = { + 9.65E0, 10.74E0, 11.81E0, 12.88E0, 14.06E0, + 15.28E0, 16.63E0, 18.19E0, 19.88E0, 21.84E0, + 24.00E0, 26.25E0, 28.86E0, 31.85E0, 35.79E0, + 40.18E0, 44.74E0, 49.53E0, 53.94E0, 58.29E0, + 62.63E0, 67.03E0, 71.25E0, 75.22E0, 79.33E0, + 83.56E0, 87.75E0, 91.93E0, 96.10E0, 100.28E0, + 104.46E0, 108.66E0, 112.71E0, 116.88E0, 121.33E0, + 125.79E0, 125.79E0, 128.74E0, 130.27E0, 133.33E0, + 134.79E0, 137.93E0, 139.33E0, 142.46E0, 143.90E0, + 146.91E0, 148.51E0, 151.41E0, 153.17E0, 155.97E0, + 157.76E0, 160.56E0, 162.30E0, 165.21E0, 166.90E0, + 169.92E0, 170.32E0, 171.54E0, 173.79E0, 174.57E0, + 176.25E0, 177.34E0, 179.19E0, 181.02E0, 182.08E0, + 183.88E0, 185.75E0, 186.80E0, 188.63E0, 190.45E0, + 191.48E0, 193.35E0, 195.22E0, 196.23E0, 198.05E0, + 199.97E0, 201.06E0, 202.83E0, 204.69E0, 205.86E0, + 207.58E0, 209.50E0, 210.65E0, 212.33E0, 215.43E0, + 217.16E0, 220.21E0, 221.98E0, 225.06E0, 226.79E0, + 229.92E0, 231.69E0, 234.77E0, 236.60E0, 239.63E0, + 241.50E0, 244.48E0, 246.40E0, 249.35E0, 251.32E0, + 254.22E0, 256.24E0, 259.11E0, 261.18E0, 264.02E0, + 266.13E0, 268.94E0, 271.09E0, 273.87E0, 276.08E0, + 278.83E0, 281.08E0, 283.81E0, 286.11E0, 288.81E0, + 291.08E0, 293.75E0, 295.99E0, 298.64E0, 300.84E0, + 302.02E0, 303.48E0, 305.65E0, 308.27E0, 310.41E0, + 313.01E0, 315.12E0, 317.71E0, 319.79E0, 322.36E0, + 324.42E0, 326.98E0, 329.01E0, 331.56E0, 333.56E0, + 336.10E0, 338.08E0, 340.60E0, 342.57E0, 345.08E0, + 347.02E0, 349.52E0, 351.44E0, 353.93E0, 355.83E0, + 358.32E0, 360.20E0, 362.67E0, 364.53E0, 367.00E0, + 371.30E0 +}; + +static void +kirby2_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 3.9050739624E+00; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < kirby2_P; ++i) + { + gsl_test_rel(x[i], kirby2_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +kirby2_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[kirby2_P]; + size_t i; + + for (i = 0; i < kirby2_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < kirby2_N; i++) + { + double t = kirby2_F0[i]; + double y = ((b[0] + t* (b[1] + t * b[2])) + / (1 + t*(b[3] + t *b[4]))); + gsl_vector_set (f, i, kirby2_F1[i] - y); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +kirby2_df (const gsl_vector * x, void *params, gsl_matrix * df) +{ + double b[kirby2_P]; + size_t i; + + for (i = 0; i < kirby2_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < kirby2_N; i++) + { + double t = kirby2_F0[i]; + double u = (b[0] + t*(b[1] + t*b[2])); + double v = (1 + t*(b[3] + t*b[4])); + gsl_matrix_set (df, i, 0, -1/v); + gsl_matrix_set (df, i, 1, -t/v); + gsl_matrix_set (df, i, 2, -t*t/v); + gsl_matrix_set (df, i, 3, t*u/(v*v)); + gsl_matrix_set (df, i, 4, t*t*u/(v*v)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +kirby2_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double x5 = gsl_vector_get(x, 4); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + double v4 = gsl_vector_get(v, 3); + double v5 = gsl_vector_get(v, 4); + size_t i; + + for (i = 0; i < kirby2_N; i++) + { + double t = kirby2_F0[i]; + double term1 = 1.0 + t*(x4 + t*x5); + + gsl_vector_set(fvv, i, -2*t/pow(term1, 3.0) * + (v4 + t*v5) * + (-t*(-v2 + v4*x1 + + t*(-v3 + v5*x1 + v4*x2 + t*v5*x2 + t*(v4+t*v5)*x3)) + + t*t*(v2 + t*v3)*(x4 + t*x5) + v1*(1.0 + t*(x4 + t*x5)))); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf kirby2_func = +{ + kirby2_f, + kirby2_df, + kirby2_fvv, + kirby2_N, + kirby2_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem kirby2a_problem = +{ + "nist-kirby2a", + kirby2_x0a, + NULL, + kirby2_sigma, + &kirby2_epsrel, + &kirby2_checksol, + &kirby2_func +}; + +static test_fdf_problem kirby2b_problem = +{ + "nist-kirby2b", + kirby2_x0b, + NULL, + kirby2_sigma, + &kirby2_epsrel, + &kirby2_checksol, + &kirby2_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_kowalik.c gsl-doc-2.3/multifit_nlinear/test_kowalik.c --- gsl-doc-1.16/multifit_nlinear/test_kowalik.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_kowalik.c 2016-09-24 10:42:55.000000000 +0000 @@ -0,0 +1,167 @@ +#define kowalik_N 11 +#define kowalik_P 4 + +static double kowalik_x0[kowalik_P] = { 0.25, 0.39, 0.415, 0.39 }; +static double kowalik_epsrel = 1.0e-6; + +static double kowalik_Y[kowalik_N] = { +0.1957, 0.1947, 0.1735, 0.1600, 0.0844, 0.0627, +0.0456, 0.0342, 0.0323, 0.0235, 0.0246 +}; + +static double kowalik_U[kowalik_N] = { +4.0000, 2.0000, 1.0000, 0.5000, 0.2500, 0.1670, +0.1250, 0.1000, 0.0833, 0.0714, 0.0625 +}; + +static void +kowalik_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + gsl_vector_const_view v = gsl_vector_const_view_array(x, kowalik_P); + const double norm = gsl_blas_dnrm2(&v.vector); + const double sumsq_exact1 = 3.075056038492370e-04; + double kowalik_x1[kowalik_P] = { 1.928069345723978e-01, + 1.912823290344599e-01, + 1.230565070690708e-01, + 1.360623308065148e-01 }; + const double sumsq_exact2 = 0.00102734304869549252; + double kowalik_x2[kowalik_P] = { 0.0, /* inf */ + -14.0758834005984603, + 0.0, /* -inf */ + 0.0 }; /* -inf */ + const double *kowalik_x; + double sumsq_exact; + + kowalik_x2[0] = GSL_NAN; + kowalik_x2[2] = GSL_NAN; + kowalik_x2[3] = GSL_NAN; + + if (norm < 10.0) + { + kowalik_x = kowalik_x1; + sumsq_exact = sumsq_exact1; + } + else + { + kowalik_x = kowalik_x2; + sumsq_exact = sumsq_exact2; + } + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < kowalik_P; ++i) + { + if (!gsl_finite(kowalik_x[i])) + continue; + + gsl_test_rel(x[i], kowalik_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +kowalik_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + size_t i; + + for (i = 0; i < kowalik_N; ++i) + { + double yi = kowalik_Y[i]; + double ui = kowalik_U[i]; + double fi = yi - (x1*ui*(ui+x2)) / (x4 + ui*(ui + x3)); + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +kowalik_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + size_t i; + + for (i = 0; i < kowalik_N; ++i) + { + double ui = kowalik_U[i]; + double term1 = ui*(ui + x2); + double term2 = ui*(ui + x3) + x4; + + gsl_matrix_set(J, i, 0, -term1 / term2); + gsl_matrix_set(J, i, 1, -ui*x1/term2); + gsl_matrix_set(J, i, 2, ui*term1*x1 / (term2*term2)); + gsl_matrix_set(J, i, 3, term1*x1 / (term2*term2)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +kowalik_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + double v4 = gsl_vector_get(v, 3); + size_t i; + + for (i = 0; i < kowalik_N; ++i) + { + double ui = kowalik_U[i]; + double term2 = ui*(ui + x3) + x4; + double term3 = ui*ui*v1 - ui*v3*x1 - v4*x1 + + ui*v1*x3 + v1*x4; + double term4 = ui*ui*(v3-v2) + v4*x2 + + ui*(v4 + v3*x2 - v2*x3) - v2*x4; + + gsl_vector_set(fvv, i, 2.0*ui*term3*term4 / pow(term2, 3.0)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf kowalik_func = +{ + kowalik_f, + kowalik_df, + kowalik_fvv, + kowalik_N, + kowalik_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem kowalik_problem = +{ + "kowalik", + kowalik_x0, + NULL, + NULL, + &kowalik_epsrel, + &kowalik_checksol, + &kowalik_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_lin1.c gsl-doc-2.3/multifit_nlinear/test_lin1.c --- gsl-doc-1.16/multifit_nlinear/test_lin1.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_lin1.c 2016-09-24 10:43:00.000000000 +0000 @@ -0,0 +1,107 @@ +#define lin1_N 11 /* can be anything >= p */ +#define lin1_P 5 + +static double lin1_x0[lin1_P] = { 1.0, 1.0, 1.0, 1.0, 1.0 }; +static double lin1_epsrel = 1.0e-10; + +static void +lin1_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = (double) (lin1_N - lin1_P); + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < lin1_P; ++i) + { + gsl_test_rel(x[i], -1.0, epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +lin1_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + size_t i, j; + + for (i = 0; i < lin1_N; ++i) + { + double fi = 0.0; + + for (j = 0; j < lin1_P; ++j) + { + double xj = gsl_vector_get(x, j); + double Aij = (i == j) ? 1.0 : 0.0; + Aij -= 2.0 / lin1_N; + fi += Aij * xj; + } + + fi -= 1.0; + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +lin1_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + size_t i, j; + + for (i = 0; i < lin1_N; ++i) + { + for (j = 0; j < lin1_P; ++j) + { + double Jij = (i == j) ? 1.0 : 0.0; + Jij -= 2.0 / lin1_N; + gsl_matrix_set(J, i, j, Jij); + } + } + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +lin1_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + (void)x; /* avoid unused parameter warnings */ + (void)v; + (void)params; + + gsl_vector_set_zero(fvv); + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf lin1_func = +{ + lin1_f, + lin1_df, + lin1_fvv, + lin1_N, + lin1_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem lin1_problem = +{ + "linear_full", + lin1_x0, + NULL, + NULL, + &lin1_epsrel, + &lin1_checksol, + &lin1_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_lin2.c gsl-doc-2.3/multifit_nlinear/test_lin2.c --- gsl-doc-1.16/multifit_nlinear/test_lin2.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_lin2.c 2016-09-24 10:43:05.000000000 +0000 @@ -0,0 +1,106 @@ +#define lin2_N 20 /* can be anything >= p */ +#define lin2_P 5 + +static double lin2_x0[lin2_P] = { 1.0, 1.0, 1.0, 1.0, 1.0 }; +static double lin2_epsrel = 1.0e-9; + +static void +lin2_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double n = (double) lin2_N; + const double sumsq_exact = 0.5 * (n*(n - 1.0)) / (2.0*n + 1.0); + const double sum_exact = 3.0 / (2.0*n + 1.0); + double sum = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < lin2_P; ++i) + sum += (i + 1.0) * x[i]; + + gsl_test_rel(sum, sum_exact, epsrel, "%s/%s coeff sum", + sname, pname); +} + +static int +lin2_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + size_t i, j; + + for (i = 0; i < lin2_N; ++i) + { + double fi = 0.0; + + for (j = 0; j < lin2_P; ++j) + { + double xj = gsl_vector_get(x, j); + fi += (j + 1) * xj; + } + + fi = (i + 1) * fi - 1.0; + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +lin2_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + size_t i, j; + + for (i = 0; i < lin2_N; ++i) + { + for (j = 0; j < lin2_P; ++j) + { + gsl_matrix_set(J, i, j, (i + 1.0) * (j + 1.0)); + } + } + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +lin2_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + (void)x; /* avoid unused parameter warnings */ + (void)v; + (void)params; + + gsl_vector_set_zero(fvv); + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf lin2_func = +{ + lin2_f, + lin2_df, + lin2_fvv, + lin2_N, + lin2_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem lin2_problem = +{ + "linear_rank1", + lin2_x0, + NULL, + NULL, + &lin2_epsrel, + &lin2_checksol, + &lin2_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_lin3.c gsl-doc-2.3/multifit_nlinear/test_lin3.c --- gsl-doc-1.16/multifit_nlinear/test_lin3.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_lin3.c 2016-09-24 10:43:10.000000000 +0000 @@ -0,0 +1,113 @@ +#define lin3_N 50 /* can be anything >= p */ +#define lin3_P 10 /* >= 3 */ + +static double lin3_x0[lin3_P] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 }; +static double lin3_epsrel = 1.0e-8; + +static void +lin3_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double n = (double) lin3_N; + const double sumsq_exact = 0.5 * (n*n + 3*n - 6.0) / (2*n - 3.0); + const double sum_exact = 3.0 / (2.0*n - 3.0); + double sum = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 1; i < lin3_P - 1; ++i) + sum += (i + 1.0) * x[i]; + + gsl_test_rel(sum, sum_exact, epsrel, "%s/%s coeff sum", + sname, pname); + + (void)x; /* avoid unused parameter warning */ +} + +static int +lin3_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + size_t i, j; + + gsl_vector_set(f, 0, -1.0); + gsl_vector_set(f, lin3_N - 1, -1.0); + + for (i = 1; i < lin3_N - 1; ++i) + { + double fi = 0.0; + + for (j = 1; j < lin3_P - 1; ++j) + { + double xj = gsl_vector_get(x, j); + fi += (j + 1) * xj; + } + + fi = i * fi - 1.0; + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +lin3_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + size_t i, j; + + gsl_matrix_set_zero(J); + + for (i = 1; i < lin3_N - 1; ++i) + { + for (j = 1; j < lin3_P - 1; ++j) + { + gsl_matrix_set(J, i, j, i * (j + 1.0)); + } + } + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +lin3_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + (void)x; /* avoid unused parameter warnings */ + (void)v; + (void)params; + + gsl_vector_set_zero(fvv); + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf lin3_func = +{ + lin3_f, + lin3_df, + lin3_fvv, + lin3_N, + lin3_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem lin3_problem = +{ + "linear_rank1zeros", + lin3_x0, + NULL, + NULL, + &lin3_epsrel, + &lin3_checksol, + &lin3_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_meyer.c gsl-doc-2.3/multifit_nlinear/test_meyer.c --- gsl-doc-1.16/multifit_nlinear/test_meyer.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_meyer.c 2016-09-24 10:43:15.000000000 +0000 @@ -0,0 +1,131 @@ +#define meyer_N 16 +#define meyer_P 3 + +static double meyer_x0[meyer_P] = { 0.02, 4000.0, 250.0 }; +static double meyer_epsrel = 1.0e-6; + +static double meyer_Y[meyer_N] = { +34780., 28610., 23650., 19630., 16370., 13720., 11540., +9744., 8261., 7030., 6005., 5147., 4427., 3820., +3307., 2872. +}; + +static void +meyer_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 8.794585517053883e+01; + const double meyer_x[meyer_P] = { 5.609636471049458e-03, + 6.181346346283188e+03, + 3.452236346240292e+02 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < meyer_P; ++i) + { + gsl_test_rel(x[i], meyer_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +meyer_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < meyer_N; ++i) + { + double ti = 45.0 + 5.0*(i + 1.0); + double yi = meyer_Y[i]; + double fi = x1 * exp(x2 / (ti + x3)) - yi; + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +meyer_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < meyer_N; ++i) + { + double ti = 45.0 + 5.0*(i + 1.0); + double term1 = ti + x3; + double term2 = exp(x2 / term1); + + gsl_matrix_set(J, i, 0, term2); + gsl_matrix_set(J, i, 1, x1*term2/term1); + gsl_matrix_set(J, i, 2, -x1*x2*term2/(term1*term1)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +meyer_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + size_t i; + + for (i = 0; i < meyer_N; ++i) + { + double ti = 45.0 + 5.0*(i + 1.0); + double term1 = ti + x3; + double term2 = exp(x2 / term1); + double term3 = v2*term1 - v3*x2; + double term4 = 2*ti*ti*v1 - v3*x1*(x2 + 2*x3) + + x3*(v2*x1 + 2*v1*x3) + + ti*(v2*x1 - 2*v3*x1 + 4*v1*x3); + + gsl_vector_set(fvv, i, term2 * term3 * term4 / pow(term1, 4.0)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf meyer_func = +{ + meyer_f, + meyer_df, + meyer_fvv, + meyer_N, + meyer_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem meyer_problem = +{ + "meyer", + meyer_x0, + NULL, + NULL, + &meyer_epsrel, + &meyer_checksol, + &meyer_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_meyerscal.c gsl-doc-2.3/multifit_nlinear/test_meyerscal.c --- gsl-doc-1.16/multifit_nlinear/test_meyerscal.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_meyerscal.c 2016-09-24 10:43:22.000000000 +0000 @@ -0,0 +1,132 @@ +#define meyerscal_N 16 +#define meyerscal_P 3 + +static double meyerscal_x0[meyerscal_P] = { 8.85, 4.0, 2.5 }; +static double meyerscal_epsrel = 1.0e-6; + +static double meyerscal_Y[meyerscal_N] = { +34780., 28610., 23650., 19630., 16370., 13720., 11540., +9744., 8261., 7030., 6005., 5147., 4427., 3820., +3307., 2872. +}; + +static void +meyerscal_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 8.794585517003888e-05; + const double meyerscal_x[meyerscal_P] = { 2.481778312286695e+00, + 6.181346341853554e+00, + 3.452236344749865e+00 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < meyerscal_P; ++i) + { + gsl_test_rel(x[i], meyerscal_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +meyerscal_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < meyerscal_N; ++i) + { + double ti = 0.45 + 0.05*(i + 1.0); + double yi = meyerscal_Y[i]; + double fi = x1 * exp(10.0*x2 / (ti + x3) - 13.0) - 1.0e-3*yi; + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +meyerscal_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < meyerscal_N; ++i) + { + double ti = 0.45 + 0.05*(i + 1.0); + double term1 = ti + x3; + double term2 = exp(10.0*x2/term1 - 13.0); + + gsl_matrix_set(J, i, 0, term2); + gsl_matrix_set(J, i, 1, 10.0*x1*term2/term1); + gsl_matrix_set(J, i, 2, -10.0*x1*x2*term2/(term1*term1)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +meyerscal_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + size_t i; + + for (i = 0; i < meyerscal_N; ++i) + { + double ti = 0.45 + 0.05*(i + 1.0); + double term1 = ti + x3; + double term2 = exp(10.0*x2/term1 - 13.0); + double term3 = v2*term1 - v3*x2; + double term4 = ti*ti*v1 - + v3*x1*(5*x2 + x3) + + x3*(5*v2*x1 + v1*x3) + + ti*(5*v2*x1 - v3*x1 + 2*v1*x3); + + gsl_vector_set(fvv, i, 20*term2*term3*term4 / pow(term1, 4.0)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf meyerscal_func = +{ + meyerscal_f, + meyerscal_df, + meyerscal_fvv, + meyerscal_N, + meyerscal_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem meyerscal_problem = +{ + "meyerscal", + meyerscal_x0, + NULL, + NULL, + &meyerscal_epsrel, + &meyerscal_checksol, + &meyerscal_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_osborne.c gsl-doc-2.3/multifit_nlinear/test_osborne.c --- gsl-doc-1.16/multifit_nlinear/test_osborne.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_osborne.c 2016-09-24 10:43:28.000000000 +0000 @@ -0,0 +1,140 @@ +#define osborne_N 33 +#define osborne_P 5 + +static double osborne_x0[osborne_P] = { 0.5, 1.5, -1.0, 0.01, 0.02 }; +static double osborne_epsrel = 1.0e-8; + +static double osborne_Y[osborne_N] = { +0.844, 0.908, 0.932, 0.936, 0.925, 0.908, 0.881, +0.850, 0.818, 0.784, 0.751, 0.718, 0.685, 0.658, +0.628, 0.603, 0.580, 0.558, 0.538, 0.522, 0.506, +0.490, 0.478, 0.467, 0.457, 0.448, 0.438, 0.431, +0.424, 0.420, 0.414, 0.411, 0.406 +}; + +static void +osborne_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + const double sumsq_exact = 5.464894697482687e-05; + double osborne_x[osborne_P]; + + osborne_x[0] = 3.754100521058740e-01; + osborne_x[1] = GSL_NAN; + osborne_x[2] = GSL_NAN; + osborne_x[3] = GSL_NAN; + osborne_x[4] = GSL_NAN; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + /* only the first model parameter is uniquely constrained */ + gsl_test_rel(x[0], osborne_x[0], epsrel, "%s/%s i=0", + sname, pname); +} + +static int +osborne_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double x5 = gsl_vector_get(x, 4); + size_t i; + + for (i = 0; i < osborne_N; ++i) + { + double ti = 10.0*i; + double yi = osborne_Y[i]; + double fi = yi - (x1 + x2*exp(-x4*ti) + x3*exp(-x5*ti)); + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +osborne_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double x5 = gsl_vector_get(x, 4); + size_t i; + + for (i = 0; i < osborne_N; ++i) + { + double ti = 10.0*i; + double term1 = exp(-x4*ti); + double term2 = exp(-x5*ti); + + gsl_matrix_set(J, i, 0, -1.0); + gsl_matrix_set(J, i, 1, -term1); + gsl_matrix_set(J, i, 2, -term2); + gsl_matrix_set(J, i, 3, ti*x2*term1); + gsl_matrix_set(J, i, 4, ti*x3*term2); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +osborne_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double x5 = gsl_vector_get(x, 4); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + double v4 = gsl_vector_get(v, 3); + double v5 = gsl_vector_get(v, 4); + size_t i; + + for (i = 0; i < osborne_N; ++i) + { + double ti = 10.0*i; + double term1 = exp(-x4*ti); + double term2 = exp(-x5*ti); + double term3 = -2*v2 + ti*v4*x2; + double term4 = -2*v3 + ti*v5*x3; + + gsl_vector_set(fvv, i, -term1 * term2 * ti * + (v4 / term2 * term3 + v5 / term1 * term4)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf osborne_func = +{ + osborne_f, + osborne_df, + osborne_fvv, + osborne_N, + osborne_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem osborne_problem = +{ + "osborne", + osborne_x0, + NULL, + NULL, + &osborne_epsrel, + &osborne_checksol, + &osborne_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_penalty1.c gsl-doc-2.3/multifit_nlinear/test_penalty1.c --- gsl-doc-1.16/multifit_nlinear/test_penalty1.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_penalty1.c 2016-09-24 10:43:33.000000000 +0000 @@ -0,0 +1,107 @@ +#define penalty1_P 10 +#define penalty1_N (penalty1_P + 1) + +static double penalty1_x0[penalty1_P] = { 1.0, 2.0, 3.0, 4.0, 5.0, + 6.0, 7.0, 8.0, 9.0, 10.0 }; +static double penalty1_epsrel = 1.0e-12; + +static void +penalty1_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + const double sumsq_exact = 7.08765146709037993e-05; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + (void)x; /* avoid unused parameter warning */ +} + +static int +penalty1_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + const double alpha = 1.0e-5; + const double sqrt_alpha = sqrt(alpha); + size_t i; + double sum = 0.0; + + for (i = 0; i < penalty1_P; ++i) + { + double xi = gsl_vector_get(x, i); + + gsl_vector_set(f, i, sqrt_alpha*(xi - 1.0)); + + sum += xi * xi; + } + + gsl_vector_set(f, penalty1_N - 1, sum - 0.25); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +penalty1_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + const double alpha = 1.0e-5; + const double sqrt_alpha = sqrt(alpha); + size_t i; + gsl_matrix_view m = gsl_matrix_submatrix(J, 0, 0, penalty1_P, penalty1_P); + gsl_vector_view diag = gsl_matrix_diagonal(&m.matrix); + + gsl_matrix_set_zero(&m.matrix); + gsl_vector_set_all(&diag.vector, sqrt_alpha); + + for (i = 0; i < penalty1_P; ++i) + { + double xi = gsl_vector_get(x, i); + gsl_matrix_set(J, penalty1_N - 1, i, 2.0 * xi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +penalty1_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double u; + + gsl_vector_set_zero(fvv); + + gsl_blas_ddot(v, v, &u); + gsl_vector_set(fvv, penalty1_N - 1, 2.0 * u); + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf penalty1_func = +{ + penalty1_f, + penalty1_df, + penalty1_fvv, + penalty1_N, + penalty1_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem penalty1_problem = +{ + "penalty1", + penalty1_x0, + NULL, + NULL, + &penalty1_epsrel, + &penalty1_checksol, + &penalty1_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_penalty2.c gsl-doc-2.3/multifit_nlinear/test_penalty2.c --- gsl-doc-1.16/multifit_nlinear/test_penalty2.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_penalty2.c 2016-09-24 10:43:38.000000000 +0000 @@ -0,0 +1,179 @@ +#define penalty2_N 8 /* 2*p */ +#define penalty2_P 4 + +static double penalty2_x0[penalty2_P] = { 0.5, 0.5, 0.5, 0.5 }; +static double penalty2_epsrel = 1.0e-12; + +static void +penalty2_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + const double sumsq_exact = 9.37629300735544219e-06; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + (void)x; /* avoid unused parameter warning */ +} + +static int +penalty2_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + const double alpha = 1.0e-5; + const double sqrt_alpha = sqrt(alpha); + double x1 = gsl_vector_get(x, 0); + size_t i; + double sum = penalty2_P * x1 * x1; + + gsl_vector_set(f, 0, x1 - 0.2); + + /* rows [2:p] */ + for (i = 1; i < penalty2_P; ++i) + { + double xi = gsl_vector_get(x, i); + double xim1 = gsl_vector_get(x, i - 1); + double yi = exp(0.1*(i + 1.0)) + exp(0.1*i); + + gsl_vector_set(f, i, sqrt_alpha*(exp(0.1*xi) + exp(0.1*xim1) - yi)); + + sum += (penalty2_P - i) * xi * xi; + } + + /* rows [p+1:2p-1] */ + for (i = penalty2_P; i < penalty2_N - 1; ++i) + { + double xi = gsl_vector_get(x, i - penalty2_P + 1); + + gsl_vector_set(f, i, sqrt_alpha*(exp(0.1*xi) - exp(-0.1))); + } + + /* row 2p */ + gsl_vector_set(f, penalty2_N - 1, sum - 1.0); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +penalty2_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + const double alpha = 1.0e-5; + const double sqrt_alpha = sqrt(alpha); + size_t i, j; + + for (j = 0; j < penalty2_P; ++j) + { + double xj = gsl_vector_get(x, j); + double delta1j = (j == 0) ? 1.0 : 0.0; + + /* first and last rows */ + gsl_matrix_set(J, 0, j, delta1j); + gsl_matrix_set(J, penalty2_N - 1, j, 2.0 * (penalty2_P - j) * xj); + + /* rows [2:p] */ + for (i = 1; i < penalty2_P; ++i) + { + double xi = gsl_vector_get(x, i); + double xim1 = gsl_vector_get(x, i - 1); + double Jij; + + if (i == j) + Jij = exp(0.1 * xi); + else if (i - 1 == j) + Jij = exp(0.1 * xim1); + else + Jij = 0.0; + + Jij *= 0.1 * sqrt_alpha; + + gsl_matrix_set(J, i, j, Jij); + } + + /* rows [p+1:2p-1] */ + for (i = penalty2_P; i < penalty2_N - 1; ++i) + { + double xi = gsl_vector_get(x, i - penalty2_P + 1); + + if (i - penalty2_P + 1 == j) + gsl_matrix_set(J, i, j, 0.1 * sqrt_alpha * exp(0.1*xi)); + else + gsl_matrix_set(J, i, j, 0.0); + } + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +penalty2_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + const double alpha = 1.0e-5; + const double sqrt_alpha = sqrt(alpha); + double v1 = gsl_vector_get(v, 0); + double sum = penalty2_P * v1 * v1; + size_t i; + + /* first row */ + gsl_vector_set(fvv, 0, 0.0); + + /* rows [2:p] */ + for (i = 1; i < penalty2_P; ++i) + { + double xi = gsl_vector_get(x, i); + double xim1 = gsl_vector_get(x, i - 1); + double vi = gsl_vector_get(v, i); + double vim1 = gsl_vector_get(v, i - 1); + double term1 = exp(xi / 10.0); + double term2 = exp(xim1 / 10.0); + + gsl_vector_set(fvv, i, + sqrt_alpha / 100.0 * (term1 * vi * vi + term2 * vim1 * vim1)); + + sum += (penalty2_P - i) * vi * vi; + } + + /* last row */ + gsl_vector_set(fvv, penalty2_N - 1, 2.0 * sum); + + /* rows [p+1:2p-1] */ + for (i = penalty2_P; i < penalty2_N - 1; ++i) + { + double xi = gsl_vector_get(x, i - penalty2_P + 1); + double vi = gsl_vector_get(v, i - penalty2_P + 1); + + gsl_vector_set(fvv, i, sqrt_alpha / 100.0 * exp(xi / 10.0) * vi * vi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf penalty2_func = +{ + penalty2_f, + penalty2_df, + penalty2_fvv, + penalty2_N, + penalty2_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem penalty2_problem = +{ + "penalty2", + penalty2_x0, + NULL, + NULL, + &penalty2_epsrel, + &penalty2_checksol, + &penalty2_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_powell1.c gsl-doc-2.3/multifit_nlinear/test_powell1.c --- gsl-doc-1.16/multifit_nlinear/test_powell1.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_powell1.c 2016-09-24 10:43:43.000000000 +0000 @@ -0,0 +1,120 @@ +#define powell1_N 4 +#define powell1_P 4 + +static double powell1_x0[powell1_P] = { 3.0, -1.0, 0.0, 1.0 }; +static double powell1_epsrel = 1.0e-4; + +static void +powell1_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < powell1_P; ++i) + { + gsl_test_rel(x[i], 0.0, epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +powell1_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get (x, 0); + double x2 = gsl_vector_get (x, 1); + double x3 = gsl_vector_get (x, 2); + double x4 = gsl_vector_get (x, 3); + + gsl_vector_set(f, 0, x1 + 10.0*x2); + gsl_vector_set(f, 1, sqrt(5.0) * (x3 - x4)); + gsl_vector_set(f, 2, pow(x2 - 2.0*x3, 2.0)); + gsl_vector_set(f, 3, sqrt(10.0) * pow((x1 - x4), 2.0)); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +powell1_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get (x, 0); + double x2 = gsl_vector_get (x, 1); + double x3 = gsl_vector_get (x, 2); + double x4 = gsl_vector_get (x, 3); + double term1 = x2 - 2.0*x3; + double term2 = x1 - x4; + + gsl_matrix_set(J, 0, 0, 1.0); + gsl_matrix_set(J, 0, 1, 10.0); + gsl_matrix_set(J, 0, 2, 0.0); + gsl_matrix_set(J, 0, 3, 0.0); + + gsl_matrix_set(J, 1, 0, 0.0); + gsl_matrix_set(J, 1, 1, 0.0); + gsl_matrix_set(J, 1, 2, sqrt(5.0)); + gsl_matrix_set(J, 1, 3, -sqrt(5.0)); + + gsl_matrix_set(J, 2, 0, 0.0); + gsl_matrix_set(J, 2, 1, 2.0*term1); + gsl_matrix_set(J, 2, 2, -4.0*term1); + gsl_matrix_set(J, 2, 3, 0.0); + + gsl_matrix_set(J, 3, 0, 2.0*sqrt(10.0)*term2); + gsl_matrix_set(J, 3, 1, 0.0); + gsl_matrix_set(J, 3, 2, 0.0); + gsl_matrix_set(J, 3, 3, -2.0*sqrt(10.0)*term2); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +powell1_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + double v4 = gsl_vector_get(v, 3); + + gsl_vector_set(fvv, 0, 0.0); + gsl_vector_set(fvv, 1, 0.0); + gsl_vector_set(fvv, 2, 2.0 * pow(v2 - 2.0*v3, 2.0)); + gsl_vector_set(fvv, 3, 2.0 * sqrt(10.0) * pow(v1 - v4, 2.0)); + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf powell1_func = +{ + powell1_f, + powell1_df, + powell1_fvv, + powell1_N, + powell1_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem powell1_problem = +{ + "powell_singular", + powell1_x0, + NULL, + NULL, + &powell1_epsrel, + &powell1_checksol, + &powell1_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_powell2.c gsl-doc-2.3/multifit_nlinear/test_powell2.c --- gsl-doc-1.16/multifit_nlinear/test_powell2.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_powell2.c 2016-09-24 10:43:47.000000000 +0000 @@ -0,0 +1,95 @@ +#define powell2_N 2 +#define powell2_P 2 + +static double powell2_x0[powell2_P] = { 3.0, 1.0 }; +static double powell2_epsrel = 1.0e-3; + +static void +powell2_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < powell2_P; ++i) + { + gsl_test_rel(x[i], 0.0, epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +powell2_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x0 = gsl_vector_get (x, 0); + double x1 = gsl_vector_get (x, 1); + + gsl_vector_set(f, 0, x0); + gsl_vector_set(f, 1, 10.0*x0/(x0 + 0.1) + 2.0*x1*x1); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +powell2_df (const gsl_vector * x, void *params, gsl_matrix * df) +{ + double x0 = gsl_vector_get (x, 0); + double x1 = gsl_vector_get (x, 1); + double term = x0 + 0.1; + + gsl_matrix_set(df, 0, 0, 1.0); + gsl_matrix_set(df, 0, 1, 0.0); + gsl_matrix_set(df, 1, 0, 1.0 / (term * term)); + gsl_matrix_set(df, 1, 1, 4.0 * x1); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +powell2_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x0 = gsl_vector_get (x, 0); + double v0 = gsl_vector_get (v, 0); + double v1 = gsl_vector_get (v, 1); + double term = x0 + 0.1; + + gsl_vector_set(fvv, 0, 0.0); + gsl_vector_set(fvv, 1, 4*v1*v1 - (2*v0*v0)/pow(term, 3.0)); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf powell2_func = +{ + powell2_f, + powell2_df, + powell2_fvv, + powell2_N, + powell2_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem powell2_problem = +{ + "powell2", + powell2_x0, + NULL, + NULL, + &powell2_epsrel, + &powell2_checksol, + &powell2_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_powell3.c gsl-doc-2.3/multifit_nlinear/test_powell3.c --- gsl-doc-1.16/multifit_nlinear/test_powell3.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_powell3.c 2016-09-24 10:43:52.000000000 +0000 @@ -0,0 +1,97 @@ +#define powell3_N 2 +#define powell3_P 2 + +static double powell3_x0[powell3_P] = { 0.0, 1.0 }; +static double powell3_epsrel = 1.0e-10; + +static void +powell3_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + const double powell3_x[powell3_P] = { 1.09815932969975976e-05, + 9.10614673986700218 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < powell3_P; ++i) + { + gsl_test_rel(x[i], powell3_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +powell3_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + + gsl_vector_set(f, 0, 1.0e4*x1*x2 - 1.0); + gsl_vector_set(f, 1, exp(-x1) + exp(-x2) - 1.0001); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +powell3_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + + gsl_matrix_set(J, 0, 0, 1.0e4*x2); + gsl_matrix_set(J, 0, 1, 1.0e4*x1); + + gsl_matrix_set(J, 1, 0, -exp(-x1)); + gsl_matrix_set(J, 1, 1, -exp(-x2)); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +powell3_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + + gsl_vector_set(fvv, 0, 2.0e4 * v1 * v2); + gsl_vector_set(fvv, 1, v1*v1*exp(-x1) + v2*v2*exp(-x2)); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf powell3_func = +{ + powell3_f, + powell3_df, + powell3_fvv, + powell3_N, + powell3_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem powell3_problem = +{ + "powell_badly_scaled", + powell3_x0, + NULL, + NULL, + &powell3_epsrel, + &powell3_checksol, + &powell3_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_rat42.c gsl-doc-2.3/multifit_nlinear/test_rat42.c --- gsl-doc-1.16/multifit_nlinear/test_rat42.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_rat42.c 2016-09-24 10:44:03.000000000 +0000 @@ -0,0 +1,153 @@ +#define rat42_N 9 +#define rat42_P 3 + +static double rat42_x0a[rat42_P] = { 100.0, 1.0, 0.1 }; +static double rat42_x0b[rat42_P] = { 75.0, 2.5, 0.07 }; +static double rat42_epsrel = 1.0e-7; + +static double rat42_sigma[rat42_P] = { + 1.7340283401E+00, 8.8295217536E-02, 3.4465663377E-03 +}; + +static double rat42_X[rat42_N] = { 9.0, 14.0, 21.0, 28.0, 42.0, + 57.0, 63.0, 70.0, 79.0 }; + +static double rat42_F[rat42_N] = { 8.930, 10.800, 18.590, 22.330, + 39.350, 56.110, 61.730, 64.620, + 67.080 }; + +static void +rat42_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 8.0565229338E+00; + const double rat42_x[rat42_P] = { 7.2462237576E+01, + 2.6180768402E+00, + 6.7359200066E-02 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < rat42_P; ++i) + { + gsl_test_rel(x[i], rat42_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + + +static int +rat42_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[rat42_P]; + size_t i; + + for (i = 0; i < rat42_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < rat42_N; i++) + { + double xi = rat42_X[i]; + double yi = b[0] / (1.0 + exp(b[1] - b[2]*xi)); + gsl_vector_set (f, i, yi - rat42_F[i]); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +rat42_df (const gsl_vector * x, void *params, gsl_matrix * df) +{ + double b[rat42_P]; + size_t i; + + for (i = 0; i < rat42_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < rat42_N; i++) + { + double xi = rat42_X[i]; + double term1 = exp(b[1] - b[2]*xi); + double term2 = 1.0 + term1; + + gsl_matrix_set (df, i, 0, 1.0 / term2); + gsl_matrix_set (df, i, 1, -b[0] * term1 / (term2 * term2)); + gsl_matrix_set (df, i, 2, b[0] * term1 * xi / (term2 * term2)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +rat42_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + size_t i; + + for (i = 0; i < rat42_N; i++) + { + double ti = rat42_X[i]; + double term1 = exp(x2); + double term2 = exp(ti * x3); + + gsl_vector_set(fvv, i, + -pow(term1 + term2, -3.0) * term1 * term2 * + (v2 - ti*v3) * (term1*(2*v1 - v2*x1 + ti*v3*x1) + + term2*(2*v1 + x1*(v2 - ti*v3)))); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf rat42_func = +{ + rat42_f, + rat42_df, + rat42_fvv, + rat42_N, + rat42_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem rat42a_problem = +{ + "nist-rat42a", + rat42_x0a, + NULL, + rat42_sigma, + &rat42_epsrel, + &rat42_checksol, + &rat42_func +}; + +static test_fdf_problem rat42b_problem = +{ + "nist-rat42b", + rat42_x0b, + NULL, + rat42_sigma, + &rat42_epsrel, + &rat42_checksol, + &rat42_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_rat43.c gsl-doc-2.3/multifit_nlinear/test_rat43.c --- gsl-doc-1.16/multifit_nlinear/test_rat43.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_rat43.c 2016-09-24 10:44:13.000000000 +0000 @@ -0,0 +1,127 @@ +#define rat43_N 15 +#define rat43_P 4 + +static double rat43_x0a[rat43_P] = { 100.0, 10.0, 1.0, 1.0 }; +static double rat43_x0b[rat43_P] = { 700.0, 5.0, 0.75, 1.3 }; +static double rat43_epsrel = 1.0e-6; + +static double rat43_sigma[rat43_P] = { + 1.6302297817E+01, 2.0828735829E+00, + 1.9566123451E-01, 6.8761936385E-01 +}; + +static double rat43_F[rat43_N] = { 16.08, 33.83, 65.80, 97.20, 191.55, + 326.20, 386.87, 520.53, 590.03, + 651.92, 724.93, 699.56, 689.96, + 637.56, 717.41 }; + +static void +rat43_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 8.7864049080E+03; + const double rat43_x[rat43_P] = { 6.9964151270E+02, + 5.2771253025E+00, + 7.5962938329E-01, + 1.2792483859E+00 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < rat43_P; ++i) + { + gsl_test_rel(x[i], rat43_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + + +static int +rat43_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[rat43_P]; + size_t i; + + for (i = 0; i < rat43_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < rat43_N; i++) + { + double xi = i + 1.0; + double e = exp(b[1] - b[2]*xi); + double yi = b[0] / pow(1.0 + e, 1.0 / b[3]); + gsl_vector_set (f, i, yi - rat43_F[i]); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +rat43_df (const gsl_vector * x, void *params, gsl_matrix * df) +{ + double b[rat43_P]; + size_t i; + + for (i = 0; i < rat43_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < rat43_N; i++) + { + double xi = i + 1.0; + double e = exp(b[1] - b[2]*xi); + double term1 = 1.0 + e; + double term2 = pow(term1, -1.0 / b[3]); + + gsl_matrix_set (df, i, 0, term2); + gsl_matrix_set (df, i, 1, -b[0] / b[3] * e * term2 / term1); + gsl_matrix_set (df, i, 2, b[0] / b[3] * xi * e * term2 / term1); + gsl_matrix_set (df, i, 3, b[0] / b[3] / b[3] * log(term1) * term2); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf rat43_func = +{ + rat43_f, + rat43_df, + NULL, /* analytic expression too complex */ + rat43_N, + rat43_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem rat43a_problem = +{ + "nist-rat43a", + rat43_x0a, + NULL, + rat43_sigma, + &rat43_epsrel, + &rat43_checksol, + &rat43_func +}; + +static test_fdf_problem rat43b_problem = +{ + "nist-rat43b", + rat43_x0b, + NULL, + rat43_sigma, + &rat43_epsrel, + &rat43_checksol, + &rat43_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_rosenbrock.c gsl-doc-2.3/multifit_nlinear/test_rosenbrock.c --- gsl-doc-1.16/multifit_nlinear/test_rosenbrock.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_rosenbrock.c 2016-09-24 10:44:18.000000000 +0000 @@ -0,0 +1,91 @@ +#define rosenbrock_N 2 +#define rosenbrock_P 2 + +static double rosenbrock_x0[rosenbrock_P] = { -1.2, 1.0 }; +static double rosenbrock_epsrel = 1.0e-12; + +static void +rosenbrock_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < rosenbrock_P; ++i) + { + gsl_test_rel(x[i], 1.0, epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +rosenbrock_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + + gsl_vector_set(f, 0, 10.0 * (x2 - x1*x1)); + gsl_vector_set(f, 1, 1.0 - x1); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +rosenbrock_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + + gsl_matrix_set(J, 0, 0, -20.0*x1); + gsl_matrix_set(J, 0, 1, 10.0); + gsl_matrix_set(J, 1, 0, -1.0); + gsl_matrix_set(J, 1, 1, 0.0); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +rosenbrock_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double v1 = gsl_vector_get(v, 0); + + gsl_vector_set(fvv, 0, -20.0 * v1 * v1); + gsl_vector_set(fvv, 1, 0.0); + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf rosenbrock_func = +{ + rosenbrock_f, + rosenbrock_df, + rosenbrock_fvv, + rosenbrock_N, + rosenbrock_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem rosenbrock_problem = +{ + "rosenbrock", + rosenbrock_x0, + NULL, + NULL, + &rosenbrock_epsrel, + &rosenbrock_checksol, + &rosenbrock_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_rosenbrocke.c gsl-doc-2.3/multifit_nlinear/test_rosenbrocke.c --- gsl-doc-1.16/multifit_nlinear/test_rosenbrocke.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_rosenbrocke.c 2016-09-24 10:44:23.000000000 +0000 @@ -0,0 +1,110 @@ +#define rosenbrocke_N 8 /* = p */ +#define rosenbrocke_P 8 /* must be even */ + +static double rosenbrocke_x0[rosenbrocke_P] = { -1.2, 1.0, -1.2, 1.0, + -1.2, 1.0, -1.2, 1.0 }; +static double rosenbrocke_epsrel = 1.0e-12; + +static void +rosenbrocke_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + const double rosenbrocke_x[rosenbrocke_P] = { 1.0, 1.0, 1.0, 1.0, + 1.0, 1.0, 1.0, 1.0 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < rosenbrocke_P; ++i) + { + gsl_test_rel(x[i], rosenbrocke_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +rosenbrocke_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + size_t i; + + for (i = 0; i < rosenbrocke_N / 2; ++i) + { + double x2i = gsl_vector_get(x, 2*i + 1); + double x2im1 = gsl_vector_get(x, 2*i); + + gsl_vector_set(f, 2*i, 10.0 * (x2i - x2im1*x2im1)); + gsl_vector_set(f, 2*i + 1, 1.0 - x2im1); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +rosenbrocke_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + size_t i; + + gsl_matrix_set_zero(J); + + for (i = 0; i < rosenbrocke_N / 2; ++i) + { + double x2im1 = gsl_vector_get(x, 2*i); + + gsl_matrix_set(J, 2*i, 2*i, -20.0*x2im1); + gsl_matrix_set(J, 2*i, 2*i + 1, 10.0); + gsl_matrix_set(J, 2*i + 1, 2*i, -1.0); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +rosenbrocke_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + size_t i; + + for (i = 0; i < rosenbrocke_N / 2; ++i) + { + double v2im1 = gsl_vector_get(v, 2*i); + + gsl_vector_set(fvv, 2*i, -20.0 * v2im1 * v2im1); + gsl_vector_set(fvv, 2*i + 1, 0.0); + } + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf rosenbrocke_func = +{ + rosenbrocke_f, + rosenbrocke_df, + rosenbrocke_fvv, + rosenbrocke_N, + rosenbrocke_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem rosenbrocke_problem = +{ + "rosenbrock_extended", + rosenbrocke_x0, + NULL, + NULL, + &rosenbrocke_epsrel, + &rosenbrocke_checksol, + &rosenbrocke_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_roth.c gsl-doc-2.3/multifit_nlinear/test_roth.c --- gsl-doc-1.16/multifit_nlinear/test_roth.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_roth.c 2016-09-24 10:44:27.000000000 +0000 @@ -0,0 +1,107 @@ +#define roth_N 2 +#define roth_P 2 + +static double roth_x0[roth_P] = { 0.5, -2.0 }; +static double roth_epsrel = 1.0e-6; + +static void +roth_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact1 = 0.0; + const double roth_x1[roth_P] = { 5.0, 4.0 }; + const double sumsq_exact2 = 48.9842536792400; + const double roth_x2[roth_P] = { 11.4127789869021, -0.896805253274477 }; + const double *roth_x; + double sumsq_exact; + + if (fabs(sumsq) < 0.1) + { + sumsq_exact = sumsq_exact1; + roth_x = roth_x1; + } + else + { + sumsq_exact = sumsq_exact2; + roth_x = roth_x2; + } + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < roth_P; ++i) + { + gsl_test_rel(x[i], roth_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +roth_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + + gsl_vector_set(f, 0, x1 - x2*(2.0 - x2*(5.0 - x2)) - 13.0); + gsl_vector_set(f, 1, x1 - x2*(14.0 - x2*(1.0 + x2)) - 29.0); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +roth_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x2 = gsl_vector_get(x, 1); + + gsl_matrix_set(J, 0, 0, 1.0); + gsl_matrix_set(J, 0, 1, -2.0 + x2*(10.0 - 3.0*x2)); + gsl_matrix_set(J, 1, 0, 1.0); + gsl_matrix_set(J, 1, 1, -14.0 + x2*(2.0 + 3.0*x2)); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +roth_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x2 = gsl_vector_get(x, 1); + double v2 = gsl_vector_get(v, 1); + + gsl_vector_set(fvv, 0, (10.0 - 6.0*x2) * v2 * v2); + gsl_vector_set(fvv, 1, (2.0 + 6.0*x2) * v2 * v2); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf roth_func = +{ + roth_f, + roth_df, + roth_fvv, + roth_N, + roth_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem roth_problem = +{ + "roth_freudenstein", + roth_x0, + NULL, + NULL, + &roth_epsrel, + &roth_checksol, + &roth_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_thurber.c gsl-doc-2.3/multifit_nlinear/test_thurber.c --- gsl-doc-1.16/multifit_nlinear/test_thurber.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_thurber.c 2016-09-24 10:44:40.000000000 +0000 @@ -0,0 +1,151 @@ +#define thurber_N 37 +#define thurber_P 7 + +static double thurber_x0a[thurber_P] = { 1000.0, 1000.0, 400.0, 40.0, + 0.7, 0.3, 0.03 }; +static double thurber_x0b[thurber_P] = { 1300.0, 1500.0, 500.0, 75.0, + 1.0, 0.4, 0.05 }; +static double thurber_epsrel = 1.0e-6; + +static double thurber_sigma[thurber_P] = { + 4.6647963344E+00, 3.9571156086E+01, 2.8698696102E+01, + 5.5675370270E+00, 3.1333340687E-02, 1.4984928198E-02, + 6.5842344623E-03 +}; + +static double thurber_X[thurber_N] = { + -3.067, -2.981, -2.921, -2.912, -2.840, -2.797, -2.702, + -2.699, -2.633, -2.481, -2.363, -2.322, -1.501, -1.460, + -1.274, -1.212, -1.100, -1.046, -0.915, -0.714, -0.566, + -0.545, -0.400, -0.309, -0.109, -0.103, 0.010, 0.119, + 0.377, 0.790, 0.963, 1.006, 1.115, 1.572, 1.841, + 2.047, 2.200 +}; + +static double thurber_F[thurber_N] = { + 80.574, 84.248, 87.264, 87.195, 89.076, 89.608, 89.868, 90.101, + 92.405, 95.854, 100.696, 101.060, 401.672, 390.724, 567.534, + 635.316, 733.054, 759.087, 894.206, 990.785, 1090.109, 1080.914, + 1122.643, 1178.351, 1260.531, 1273.514, 1288.339, 1327.543, 1353.863, + 1414.509, 1425.208, 1421.384, 1442.962, 1464.350, 1468.705, + 1447.894, 1457.628 +}; + +static void +thurber_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 5.6427082397E+03; + const double thurber_x[thurber_P] = { + 1.2881396800E+03, 1.4910792535E+03, 5.8323836877E+02, + 7.5416644291E+01, 9.6629502864E-01, 3.9797285797E-01, + 4.9727297349E-02 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < thurber_P; ++i) + { + gsl_test_rel(x[i], thurber_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + + +static int +thurber_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[thurber_P]; + size_t i; + + for (i = 0; i < thurber_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < thurber_N; i++) + { + double xi = thurber_X[i]; + double yi; + + yi = b[0] + b[1]*xi + b[2]*xi*xi + b[3]*xi*xi*xi; + yi /= 1.0 + b[4]*xi + b[5]*xi*xi + b[6]*xi*xi*xi; + + gsl_vector_set (f, i, yi - thurber_F[i]); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +thurber_df (const gsl_vector * x, void *params, gsl_matrix * df) +{ + double b[thurber_P]; + size_t i; + + for (i = 0; i < thurber_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < thurber_N; i++) + { + double xi = thurber_X[i]; + double d, n, d_sq; + + n = b[0] + b[1]*xi + b[2]*xi*xi + b[3]*xi*xi*xi; + d = 1.0 + b[4]*xi + b[5]*xi*xi + b[6]*xi*xi*xi; + d_sq = d * d; + + gsl_matrix_set (df, i, 0, 1.0 / d); + gsl_matrix_set (df, i, 1, xi / d); + gsl_matrix_set (df, i, 2, (xi * xi) / d); + gsl_matrix_set (df, i, 3, (xi * xi * xi) / d); + gsl_matrix_set (df, i, 4, -xi * n / d_sq); + gsl_matrix_set (df, i, 5, -xi * xi * n / d_sq); + gsl_matrix_set (df, i, 6, -xi * xi * xi * n / d_sq); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf thurber_func = +{ + thurber_f, + thurber_df, + NULL, /* analytic expression too complex */ + thurber_N, + thurber_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem thurbera_problem = +{ + "nist-thurbera", + thurber_x0a, + NULL, + thurber_sigma, + &thurber_epsrel, + &thurber_checksol, + &thurber_func +}; + +static test_fdf_problem thurberb_problem = +{ + "nist-thurberb", + thurber_x0b, + NULL, + thurber_sigma, + &thurber_epsrel, + &thurber_checksol, + &thurber_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_vardim.c gsl-doc-2.3/multifit_nlinear/test_vardim.c --- gsl-doc-1.16/multifit_nlinear/test_vardim.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_vardim.c 2016-09-24 10:44:45.000000000 +0000 @@ -0,0 +1,119 @@ +#define vardim_N 7 /* p + 2 */ +#define vardim_P 5 + +static double vardim_x0[vardim_P] = { 0.8, 0.6, 0.4, 0.2, 0.0 }; +static double vardim_epsrel = 1.0e-12; + +static void +vardim_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < vardim_P; ++i) + { + gsl_test_rel(x[i], 1.0, epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +vardim_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + size_t i; + double sum = 0.0; + + for (i = 0; i < vardim_P; ++i) + { + double xi = gsl_vector_get(x, i); + + gsl_vector_set(f, i, xi - 1.0); + + sum += (i + 1.0) * (xi - 1.0); + } + + gsl_vector_set(f, vardim_P, sum); + gsl_vector_set(f, vardim_P + 1, sum*sum); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +vardim_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + size_t i; + double sum = 0.0; + gsl_matrix_view m = gsl_matrix_submatrix(J, 0, 0, vardim_P, vardim_P); + + gsl_matrix_set_identity(&m.matrix); + + for (i = 0; i < vardim_P; ++i) + { + double xi = gsl_vector_get(x, i); + sum += (i + 1.0) * (xi - 1.0); + } + + for (i = 0; i < vardim_P; ++i) + { + gsl_matrix_set(J, vardim_P, i, i + 1.0); + gsl_matrix_set(J, vardim_P + 1, i, 2*(i + 1.0)*sum); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +vardim_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + size_t i; + double sum = 0.0; + + gsl_vector_set_zero(fvv); + + for (i = 0; i < vardim_P; ++i) + { + double vi = gsl_vector_get(v, i); + sum += (i + 1.0) * vi; + } + + gsl_vector_set(fvv, vardim_N - 1, 2.0 * sum * sum); + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf vardim_func = +{ + vardim_f, + vardim_df, + vardim_fvv, + vardim_N, + vardim_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem vardim_problem = +{ + "vardim", + vardim_x0, + NULL, + NULL, + &vardim_epsrel, + &vardim_checksol, + &vardim_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_watson.c gsl-doc-2.3/multifit_nlinear/test_watson.c --- gsl-doc-1.16/multifit_nlinear/test_watson.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_watson.c 2016-09-24 10:44:49.000000000 +0000 @@ -0,0 +1,162 @@ +#define watson_N 31 +#define watson_P 6 + +static double watson_x0[watson_P] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; +static double watson_epsrel = 1.0e-6; + +static void +watson_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 2.287670053552372e-03; + const double watson_x[watson_P] = { + -1.572508640629858e-02, 1.012434869366059e+00, -2.329916259263380e-01, + 1.260430087686035e+00, -1.513728922580576e+00, 9.929964323646112e-01 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < watson_P; ++i) + { + gsl_test_rel(x[i], watson_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +watson_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + const double x1 = gsl_vector_get(x, 0); + const double x2 = gsl_vector_get(x, 1); + size_t i, j; + + for (i = 0; i < watson_N - 2; ++i) + { + double ti = (i + 1) / 29.0; + double tjm1 = 1.0, tjm2 = 1.0; + double sum1 = 0.0, sum2 = 0.0; + + for (j = 0; j < watson_P; ++j) + { + double xj = gsl_vector_get(x, j); + + sum1 += xj * tjm1; + tjm1 *= ti; + + if (j > 0) + { + sum2 += j * xj * tjm2; + tjm2 *= ti; + } + } + + gsl_vector_set (f, i, sum2 - sum1*sum1 - 1.0); + } + + gsl_vector_set(f, watson_N - 2, x1); + gsl_vector_set(f, watson_N - 1, x2 - x1*x1 - 1.0); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +watson_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get (x, 0); + size_t i, j; + + gsl_matrix_set_zero(J); + + for (i = 0; i < watson_N - 2; ++i) + { + double ti = (i + 1) / 29.0; + double tjm1 = 1.0, tjm2 = 1.0; + double sum1 = 0.0; + + for (j = 0; j < watson_P; ++j) + { + double xj = gsl_vector_get(x, j); + sum1 += xj * tjm1; + tjm1 *= ti; + } + + tjm1 = 1.0; + tjm2 = 1.0; + for (j = 0; j < watson_P; ++j) + { + gsl_matrix_set(J, i, j, j * tjm2 - 2.0*sum1*tjm1); + tjm1 *= ti; + + if (j > 0) + tjm2 *= ti; + } + } + + gsl_matrix_set(J, watson_N - 2, 0, 1.0); + gsl_matrix_set(J, watson_N - 1, 0, -2.0*x1); + gsl_matrix_set(J, watson_N - 1, 1, 1.0); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +watson_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double v1 = gsl_vector_get (v, 0); + size_t i, j; + + for (i = 0; i < watson_N - 2; ++i) + { + double ti = (i + 1) / 29.0; + double sum = 0.0; + double tjm1 = 1.0; + + for (j = 0; j < watson_P; ++j) + { + double vj = gsl_vector_get(v, j); + sum += vj * tjm1; + tjm1 *= ti; + } + + gsl_vector_set(fvv, i, -2.0*sum*sum); + } + + gsl_vector_set(fvv, watson_N - 2, 0.0); + gsl_vector_set(fvv, watson_N - 1, -2.0*v1*v1); + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf watson_func = +{ + watson_f, + watson_df, + watson_fvv, + watson_N, + watson_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem watson_problem = +{ + "watson", + watson_x0, + NULL, + NULL, + &watson_epsrel, + &watson_checksol, + &watson_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_wnlin.c gsl-doc-2.3/multifit_nlinear/test_wnlin.c --- gsl-doc-1.16/multifit_nlinear/test_wnlin.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_wnlin.c 2016-09-24 10:46:01.000000000 +0000 @@ -0,0 +1,185 @@ +#define wnlin_N 40 +#define wnlin_P 3 + +/* initial guess should be chosen so that Jacobian has full rank, + * or some solvers will fail */ +static double wnlin_x0[wnlin_P] = { 1.0, 0.9, 0.0 }; +static double wnlin_epsrel = 1.0e-7; + +static int wnlin_internal_weight = 1; + +/* data */ +static double wnlin_Y[wnlin_N] = { + 6.08035e+00, 5.47552e+00, 5.94654e+00, 5.04920e+00, 4.78568e+00, + 3.51748e+00, 2.84671e+00, 3.24634e+00, 3.23395e+00, 3.30385e+00, + 2.83439e+00, 2.31891e+00, 2.33858e+00, 2.40559e+00, 2.41856e+00, + 1.99966e+00, 1.88127e+00, 1.91477e+00, 1.70415e+00, 1.60316e+00, + 1.77937e+00, 1.55302e+00, 1.50903e+00, 1.36364e+00, 1.36873e+00, + 1.41954e+00, 1.37778e+00, 1.23573e+00, 1.28524e+00, 1.46327e+00, + 1.22315e+00, 1.19330e+00, 1.18717e+00, 8.83172e-01, 1.23424e+00, + 1.14683e+00, 1.11091e+00, 1.20396e+00, 1.28722e+00, 1.05801e+00 +}; + +/* weights */ +static double wnlin_W[wnlin_N] = { + 2.77778e+00, 3.27690e+00, 3.85426e+00, 4.51906e+00, 5.28083e+00, + 6.14919e+00, 7.13370e+00, 8.24349e+00, 9.48703e+00, 1.08717e+01, + 1.24036e+01, 1.40869e+01, 1.59238e+01, 1.79142e+01, 2.00553e+01, + 2.23415e+01, 2.47646e+01, 2.73137e+01, 2.99753e+01, 3.27337e+01, + 3.55714e+01, 3.84696e+01, 4.14085e+01, 4.43678e+01, 4.73278e+01, + 5.02690e+01, 5.31731e+01, 5.60234e+01, 5.88046e+01, 6.15036e+01, + 6.41092e+01, 6.66121e+01, 6.90054e+01, 7.12839e+01, 7.34442e+01, + 7.54848e+01, 7.74053e+01, 7.92069e+01, 8.08918e+01, 8.24632e+01 +}; + +static void +wnlin_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 29.7481259665713758; + const double wnlin_x[wnlin_P] = { 5.17378551196259195, + 0.111041758006851149, + 1.05282724070446099 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < wnlin_P; ++i) + { + gsl_test_rel(x[i], wnlin_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +wnlin_f (const gsl_vector *x, void *params, gsl_vector *f) +{ + int *iptr = (int *) params; + int doweight = iptr ? *iptr : 0; + double A = gsl_vector_get (x, 0); + double lambda = gsl_vector_get (x, 1); + double b = gsl_vector_get (x, 2); + size_t i; + + /* model Yi = A * exp(-lambda * i) + b */ + for (i = 0; i < wnlin_N; i++) + { + double ti = i; + double yi = wnlin_Y[i]; + double swi = sqrt(wnlin_W[i]); + double Mi = A * exp (-lambda * ti) + b; + + if (doweight) + gsl_vector_set (f, i, swi * (Mi - yi)); + else + gsl_vector_set (f, i, Mi - yi); + } + + return GSL_SUCCESS; +} + +static int +wnlin_df (const gsl_vector *x, void *params, gsl_matrix *df) +{ + int *iptr = (int *) params; + int doweight = iptr ? *iptr : 0; + double A = gsl_vector_get (x, 0); + double lambda = gsl_vector_get (x, 1); + size_t i; + + for (i = 0; i < wnlin_N; i++) + { + gsl_vector_view v = gsl_matrix_row(df, i); + double ti = i; + double swi = sqrt(wnlin_W[i]); + double e = exp(-lambda * ti); + + gsl_vector_set(&v.vector, 0, e); + gsl_vector_set(&v.vector, 1, -ti * A * e); + gsl_vector_set(&v.vector, 2, 1.0); + + if (doweight) + gsl_vector_scale(&v.vector, swi); + } + + return GSL_SUCCESS; +} + +static int +wnlin_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + int *iptr = (int *) params; + int doweight = iptr ? *iptr : 0; + double A = gsl_vector_get (x, 0); + double lambda = gsl_vector_get (x, 1); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + size_t i; + + for (i = 0; i < wnlin_N; i++) + { + double ti = i; + double swi = sqrt(wnlin_W[i]); + double fvvi; + + fvvi = exp(-ti*lambda)*ti*v2 * (-2*v1 + ti*v2*A); + + if (doweight) + gsl_vector_set(fvv, i, swi * fvvi); + else + gsl_vector_set(fvv, i, fvvi); + } + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf wnlin_func1 = +{ + wnlin_f, + wnlin_df, + wnlin_fvv, + wnlin_N, + wnlin_P, + (void *) &wnlin_internal_weight, + 0, + 0, + 0 +}; + +static gsl_multifit_nlinear_fdf wnlin_func2 = +{ + wnlin_f, + wnlin_df, + wnlin_fvv, + wnlin_N, + wnlin_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem wnlin_problem1 = +{ + "wnlin_internal_weights", + wnlin_x0, + NULL, + NULL, + &wnlin_epsrel, + &wnlin_checksol, + &wnlin_func1 +}; + +static test_fdf_problem wnlin_problem2 = +{ + "wnlin_external_weights", + wnlin_x0, + wnlin_W, + NULL, + &wnlin_epsrel, + &wnlin_checksol, + &wnlin_func2 +}; diff -Nru gsl-doc-1.16/multifit_nlinear/test_wood.c gsl-doc-2.3/multifit_nlinear/test_wood.c --- gsl-doc-1.16/multifit_nlinear/test_wood.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/test_wood.c 2016-09-24 10:46:07.000000000 +0000 @@ -0,0 +1,115 @@ +#define wood_N 6 +#define wood_P 4 + +static double wood_x0[wood_P] = { -3.0, -1.0, -3.0, -1.0 }; +static double wood_epsrel = 1.0e-12; + +static void +wood_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + const double wood_x[wood_P] = { 1.0, 1.0, 1.0, 1.0 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < wood_P; ++i) + { + gsl_test_rel(x[i], wood_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +wood_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + + gsl_vector_set(f, 0, 10.0*(x2 - x1*x1)); + gsl_vector_set(f, 1, 1.0 - x1); + gsl_vector_set(f, 2, sqrt(90.0)*(x4 - x3*x3)); + gsl_vector_set(f, 3, 1.0 - x3); + gsl_vector_set(f, 4, sqrt(10.0)*(x2 + x4 - 2.0)); + gsl_vector_set(f, 5, (x2 - x4) / sqrt(10.0)); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +wood_df (const gsl_vector * x, void *params, gsl_matrix * J) +{ + double x1 = gsl_vector_get(x, 0); + double x3 = gsl_vector_get(x, 2); + double s90 = sqrt(90.0); + double s10 = sqrt(10.0); + + gsl_matrix_set_zero(J); + + gsl_matrix_set(J, 0, 0, -20.0*x1); + gsl_matrix_set(J, 0, 1, 10.0); + gsl_matrix_set(J, 1, 0, -1.0); + gsl_matrix_set(J, 2, 2, -2.0*s90*x3); + gsl_matrix_set(J, 2, 3, s90); + gsl_matrix_set(J, 3, 2, -1.0); + gsl_matrix_set(J, 4, 1, s10); + gsl_matrix_set(J, 4, 3, s10); + gsl_matrix_set(J, 5, 1, 1.0/s10); + gsl_matrix_set(J, 5, 3, -1.0/s10); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +wood_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + const double s10 = sqrt(10.0); + double v1 = gsl_vector_get(v, 0); + double v3 = gsl_vector_get(v, 2); + + gsl_vector_set(fvv, 0, -20.0 * v1 * v1); + gsl_vector_set(fvv, 1, 0.0); + gsl_vector_set(fvv, 2, -6.0 * s10 * v3 * v3); + gsl_vector_set(fvv, 3, 0.0); + gsl_vector_set(fvv, 4, 0.0); + gsl_vector_set(fvv, 5, 0.0); + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multifit_nlinear_fdf wood_func = +{ + wood_f, + wood_df, + wood_fvv, + wood_N, + wood_P, + NULL, + 0, + 0, + 0 +}; + +static test_fdf_problem wood_problem = +{ + "wood", + wood_x0, + NULL, + NULL, + &wood_epsrel, + &wood_checksol, + &wood_func +}; diff -Nru gsl-doc-1.16/multifit_nlinear/TODO gsl-doc-2.3/multifit_nlinear/TODO --- gsl-doc-1.16/multifit_nlinear/TODO 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/TODO 2016-10-03 09:30:38.000000000 +0000 @@ -0,0 +1,6 @@ +1. rewrite qrsolv (COD, test on lin2) +2. More/Sorensen method for mu calculation +3. better condition estimate for svd +4. Revisit h_fvv = 0.01 vs 0.02 (originally 0.01) +5. fdfvv test currently disabled in test_fdf.c - on MacOS, the lmaccel/box3d/fdfvv test fails +6. Tikhonov regularization diff -Nru gsl-doc-1.16/multifit_nlinear/trust.c gsl-doc-2.3/multifit_nlinear/trust.c --- gsl-doc-1.16/multifit_nlinear/trust.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multifit_nlinear/trust.c 2016-09-08 18:00:52.000000000 +0000 @@ -0,0 +1,563 @@ +/* multifit_nlinear/trust.c + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "common.c" +#include "nielsen.c" + +/* + * This module contains a high level driver for a general trust + * region nonlinear least squares solver. This container handles + * the computation of all of the quantities relevant to all trust + * region methods, including: + * + * residual vector: f_k = f(x_k) + * Jacobian matrix: J_k = J(x_k) + * gradient vector: g_k = J_k^T f_k + * scaling matrix: D_k + */ + +typedef struct +{ + size_t n; /* number of observations */ + size_t p; /* number of parameters */ + double delta; /* trust region radius */ + double mu; /* LM parameter */ + long nu; /* for updating LM parameter */ + gsl_vector *diag; /* D = diag(J^T J) */ + gsl_vector *x_trial; /* trial parameter vector */ + gsl_vector *f_trial; /* trial function vector */ + gsl_vector *workp; /* workspace, length p */ + gsl_vector *workn; /* workspace, length n */ + + void *trs_state; /* workspace for trust region subproblem */ + void *solver_state; /* workspace for linear least squares solver */ + + double avratio; /* current |a| / |v| */ + + /* tunable parameters */ + gsl_multifit_nlinear_parameters params; +} trust_state_t; + +static void * trust_alloc (const gsl_multifit_nlinear_parameters * params, + const size_t n, const size_t p); +static void trust_free(void *vstate); +static int trust_init(void *vstate, const gsl_vector * swts, + gsl_multifit_nlinear_fdf *fdf, const gsl_vector *x, + gsl_vector *f, gsl_matrix *J, gsl_vector *g); +static int trust_iterate(void *vstate, const gsl_vector *swts, + gsl_multifit_nlinear_fdf *fdf, + gsl_vector *x, gsl_vector *f, gsl_matrix *J, + gsl_vector *g, gsl_vector *dx); +static int trust_rcond(double *rcond, void *vstate); +static double trust_avratio(void *vstate); +static void trust_trial_step(const gsl_vector * x, const gsl_vector * dx, + gsl_vector * x_trial); +static double trust_calc_rho(const gsl_vector * f, const gsl_vector * f_trial, + const gsl_vector * g, const gsl_matrix * J, + const gsl_vector * dx, trust_state_t * state); +static int trust_eval_step(const gsl_vector * f, const gsl_vector * f_trial, + const gsl_vector * g, const gsl_matrix * J, + const gsl_vector * dx, double * rho, trust_state_t * state); +static double trust_scaled_norm(const gsl_vector *D, const gsl_vector *a); + +static void * +trust_alloc (const gsl_multifit_nlinear_parameters * params, + const size_t n, const size_t p) +{ + trust_state_t *state; + + state = calloc(1, sizeof(trust_state_t)); + if (state == NULL) + { + GSL_ERROR_NULL ("failed to allocate lm state", GSL_ENOMEM); + } + + state->diag = gsl_vector_alloc(p); + if (state->diag == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for diag", GSL_ENOMEM); + } + + state->workp = gsl_vector_alloc(p); + if (state->workp == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workp", GSL_ENOMEM); + } + + state->workn = gsl_vector_alloc(n); + if (state->workn == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workn", GSL_ENOMEM); + } + + state->x_trial = gsl_vector_alloc(p); + if (state->x_trial == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for x_trial", GSL_ENOMEM); + } + + state->f_trial = gsl_vector_alloc(n); + if (state->f_trial == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for f_trial", GSL_ENOMEM); + } + + state->trs_state = (params->trs->alloc)(params, n, p); + if (state->trs_state == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for trs state", GSL_ENOMEM); + } + + state->solver_state = (params->solver->alloc)(n, p); + if (state->solver_state == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for solver state", GSL_ENOMEM); + } + + state->n = n; + state->p = p; + state->delta = 0.0; + state->params = *params; + + return state; +} + +static void +trust_free(void *vstate) +{ + trust_state_t *state = (trust_state_t *) vstate; + const gsl_multifit_nlinear_parameters *params = &(state->params); + + if (state->diag) + gsl_vector_free(state->diag); + + if (state->workp) + gsl_vector_free(state->workp); + + if (state->workn) + gsl_vector_free(state->workn); + + if (state->x_trial) + gsl_vector_free(state->x_trial); + + if (state->f_trial) + gsl_vector_free(state->f_trial); + + if (state->trs_state) + (params->trs->free)(state->trs_state); + + if (state->solver_state) + (params->solver->free)(state->solver_state); + + free(state); +} + +/* +trust_init() + Initialize trust region solver + +Inputs: vstate - workspace + swts - sqrt(W) vector + fdf - user callback functions + x - initial parameter values + f - (output) f(x) vector + J - (output) J(x) matrix + g - (output) J(x)' f(x) vector + +Return: success/error +*/ + +static int +trust_init(void *vstate, const gsl_vector *swts, + gsl_multifit_nlinear_fdf *fdf, const gsl_vector *x, + gsl_vector *f, gsl_matrix *J, gsl_vector *g) +{ + int status; + trust_state_t *state = (trust_state_t *) vstate; + const gsl_multifit_nlinear_parameters *params = &(state->params); + double Dx; + + /* evaluate function and Jacobian at x and apply weight transform */ + status = gsl_multifit_nlinear_eval_f(fdf, x, swts, f); + if (status) + return status; + + status = gsl_multifit_nlinear_eval_df(x, f, swts, params->h_df, + params->fdtype, fdf, J, state->workn); + if (status) + return status; + + /* compute g = J^T f */ + gsl_blas_dgemv(CblasTrans, 1.0, J, f, 0.0, g); + + /* initialize diagonal scaling matrix D */ + (params->scale->init)(J, state->diag); + + /* compute initial trust region radius */ + Dx = trust_scaled_norm(state->diag, x); + state->delta = 0.3 * GSL_MAX(1.0, Dx); + + /* initialize LM parameter */ + status = nielsen_init(J, state->diag, &(state->mu), &(state->nu)); + if (status) + return status; + + /* initialize trust region method solver */ + { + const gsl_multifit_nlinear_trust_state trust_state = { x, f, g, J, state->diag, + swts, &(state->mu), params, + state->solver_state, fdf, + &(state->avratio) }; + + status = (params->trs->init)(&trust_state, state->trs_state); + + if (status) + return status; + } + + /* set default parameters */ + + state->avratio = 0.0; + + return GSL_SUCCESS; +} + +/* +trust_iterate() + This function performs 1 iteration of the trust region algorithm. +It calls a user-specified method for computing the next step +(LM or dogleg), then tests if the computed step is acceptable. + +Args: vstate - trust workspace + swts - data weights (NULL if unweighted) + fdf - function and Jacobian pointers + x - on input, current parameter vector + on output, new parameter vector x + dx + f - on input, f(x) + on output, f(x + dx) + J - on input, J(x) + on output, J(x + dx) + g - on input, g(x) = J(x)' f(x) + on output, g(x + dx) = J(x + dx)' f(x + dx) + dx - (output only) parameter step vector + +Return: +1) GSL_SUCCESS if we found a step which reduces the cost +function + +2) GSL_ENOPROG if 15 successive attempts were to made to +find a good step without success + +3) If a scaling matrix D is used, inputs and outputs are +set to the unscaled quantities (ie: J and g) +*/ + +static int +trust_iterate(void *vstate, const gsl_vector *swts, + gsl_multifit_nlinear_fdf *fdf, gsl_vector *x, + gsl_vector *f, gsl_matrix *J, gsl_vector *g, + gsl_vector *dx) +{ + int status; + trust_state_t *state = (trust_state_t *) vstate; + const gsl_multifit_nlinear_parameters *params = &(state->params); + const gsl_multifit_nlinear_trs *trs = params->trs; + + /* collect all state parameters needed by low level methods */ + const gsl_multifit_nlinear_trust_state trust_state = { x, f, g, J, state->diag, + swts, &(state->mu), params, + state->solver_state, fdf, + &(state->avratio) }; + + gsl_vector *x_trial = state->x_trial; /* trial x + dx */ + gsl_vector *f_trial = state->f_trial; /* trial f(x + dx) */ + gsl_vector *diag = state->diag; /* diag(D) */ + double rho; /* ratio actual_reduction/predicted_reduction */ + int foundstep = 0; /* found step dx */ + int bad_steps = 0; /* consecutive rejected steps */ + + /* initialize trust region subproblem with this Jacobian */ + status = (trs->preloop)(&trust_state, state->trs_state); + if (status) + return status; + + /* loop until we find an acceptable step dx */ + while (!foundstep) + { + /* calculate new step */ + status = (trs->step)(&trust_state, state->delta, dx, state->trs_state); + + /* occasionally the iterative methods (ie: CG Steihaug) can fail to find a step, + * so in this case skip rho calculation and count it as a rejected step */ + + if (status == GSL_SUCCESS) + { + /* compute x_trial = x + dx */ + trust_trial_step(x, dx, x_trial); + + /* compute f_trial = f(x + dx) */ + status = gsl_multifit_nlinear_eval_f(fdf, x_trial, swts, f_trial); + if (status) + return status; + + /* check if step should be accepted or rejected */ + status = trust_eval_step(f, f_trial, g, J, dx, &rho, state); + if (status == GSL_SUCCESS) + foundstep = 1; + } + else + { + /* an iterative TRS method failed to find a step vector */ + rho = -1.0; + } + + /* + * update trust region radius: if rho is large, + * then the quadratic model is a good approximation + * to the objective function, enlarge trust region. + * If rho is small (or negative), the model function + * is a poor approximation so decrease trust region. This + * can happen even if the step is accepted. + */ + if (rho > 0.75) + state->delta *= params->factor_up; + else if (rho < 0.25) + state->delta /= params->factor_down; + + if (foundstep) + { + /* step was accepted */ + + /* compute J <- J(x + dx) */ + status = gsl_multifit_nlinear_eval_df(x_trial, f_trial, swts, + params->h_df, params->fdtype, + fdf, J, state->workn); + if (status) + return status; + + /* update x <- x + dx */ + gsl_vector_memcpy(x, x_trial); + + /* update f <- f(x + dx) */ + gsl_vector_memcpy(f, f_trial); + + /* compute new g = J^T f */ + gsl_blas_dgemv(CblasTrans, 1.0, J, f, 0.0, g); + + /* update scaling matrix D */ + (params->scale->update)(J, diag); + + /* step accepted, decrease LM parameter */ + status = nielsen_accept(rho, &(state->mu), &(state->nu)); + if (status) + return status; + + bad_steps = 0; + } + else + { + /* step rejected, increase LM parameter */ + status = nielsen_reject(&(state->mu), &(state->nu)); + if (status) + return status; + + if (++bad_steps > 15) + { + /* if more than 15 consecutive rejected steps, report no progress */ + return GSL_ENOPROG; + } + } + } + + return GSL_SUCCESS; +} /* trust_iterate() */ + +static int +trust_rcond(double *rcond, void *vstate) +{ + int status; + trust_state_t *state = (trust_state_t *) vstate; + const gsl_multifit_nlinear_parameters *params = &(state->params); + + status = (params->solver->rcond)(rcond, state->solver_state); + + return status; +} + +static double +trust_avratio(void *vstate) +{ + trust_state_t *state = (trust_state_t *) vstate; + return state->avratio; +} + +/* compute x_trial = x + dx */ +static void +trust_trial_step(const gsl_vector * x, const gsl_vector * dx, + gsl_vector * x_trial) +{ + size_t i, N = x->size; + + for (i = 0; i < N; i++) + { + double dxi = gsl_vector_get (dx, i); + double xi = gsl_vector_get (x, i); + gsl_vector_set (x_trial, i, xi + dxi); + } +} + +/* +trust_calc_rho() + Calculate ratio of actual reduction to predicted +reduction. + +rho = actual_reduction / predicted_reduction + +actual_reduction = 1 - ( ||f+|| / ||f|| )^2 +predicted_reduction = -2 g^T dx / ||f||^2 - ( ||J*dx|| / ||f|| )^2 + = -2 fhat . beta - ||beta||^2 + +where: beta = J*dx / ||f|| + +Inputs: f - f(x) + f_trial - f(x + dx) + g - gradient J^T f + J - Jacobian + dx - proposed step, size p + state - workspace + +Return: rho = actual_reduction / predicted_reduction +If actual_reduction is < 0, return rho = -1 +*/ + +static double +trust_calc_rho(const gsl_vector * f, const gsl_vector * f_trial, + const gsl_vector * g, const gsl_matrix * J, + const gsl_vector * dx, trust_state_t * state) +{ + int status; + const gsl_multifit_nlinear_parameters *params = &(state->params); + const gsl_multifit_nlinear_trs *trs = params->trs; + const gsl_multifit_nlinear_trust_state trust_state = { NULL, f, g, J, state->diag, + NULL, &(state->mu), params, + state->solver_state, NULL, + &(state->avratio) }; + const double normf = gsl_blas_dnrm2(f); + const double normf_trial = gsl_blas_dnrm2(f_trial); + double rho; + double actual_reduction; + double pred_reduction; + double u; + + /* if ||f(x+dx)|| > ||f(x)|| reject step immediately */ + if (normf_trial >= normf) + return -1.0; + + /* compute numerator of rho (actual reduction) */ + u = normf_trial / normf; + actual_reduction = 1.0 - u*u; + + /* + * compute denominator of rho (predicted reduction); this is calculated + * inside each trust region subproblem, since it depends on the local + * model used, which can vary according to each TRS + */ + status = (trs->preduction)(&trust_state, dx, &pred_reduction, state->trs_state); + if (status) + return -1.0; + + if (pred_reduction > 0.0) + rho = actual_reduction / pred_reduction; + else + rho = -1.0; + + return rho; +} + +/* +trust_eval_step() + Evaluate proposed step to determine if it should be +accepted or rejected +*/ + +static int +trust_eval_step(const gsl_vector * f, const gsl_vector * f_trial, + const gsl_vector * g, const gsl_matrix * J, + const gsl_vector * dx, double * rho, trust_state_t * state) +{ + int status = GSL_SUCCESS; + const gsl_multifit_nlinear_parameters *params = &(state->params); + + if (params->trs == gsl_multifit_nlinear_trs_lmaccel) + { + /* reject step if acceleration is too large compared to velocity */ + if (state->avratio > params->avmax) + status = GSL_FAILURE; + } + + /* compute rho */ + *rho = trust_calc_rho(f, f_trial, g, J, dx, state); + if (*rho <= 0.0) + status = GSL_FAILURE; + + return status; +} + +/* compute || diag(D) a || */ +static double +trust_scaled_norm(const gsl_vector *D, const gsl_vector *a) +{ + const size_t n = a->size; + double e2 = 0.0; + size_t i; + + for (i = 0; i < n; ++i) + { + double Di = gsl_vector_get(D, i); + double ai = gsl_vector_get(a, i); + double u = Di * ai; + + e2 += u * u; + } + + return sqrt (e2); +} + +static const gsl_multifit_nlinear_type trust_type = +{ + "trust-region", + trust_alloc, + trust_init, + trust_iterate, + trust_rcond, + trust_avratio, + trust_free +}; + +const gsl_multifit_nlinear_type *gsl_multifit_nlinear_trust = &trust_type; diff -Nru gsl-doc-1.16/multilarge/gsl_multilarge.h gsl-doc-2.3/multilarge/gsl_multilarge.h --- gsl-doc-1.16/multilarge/gsl_multilarge.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge/gsl_multilarge.h 2016-02-11 17:38:04.000000000 +0000 @@ -0,0 +1,141 @@ +/* gsl_multilarge.h + * + * Copyright (C) 2015 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_MULTILARGE_H__ +#define __GSL_MULTILARGE_H__ + +#include +#include +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +/* iteration solver type */ +typedef struct +{ + const char *name; + void * (*alloc) (const size_t p); + int (*reset) (void *); + int (*accumulate) (gsl_matrix * X, gsl_vector * y, + void *); + int (*solve) (const double lambda, gsl_vector * c, + double * rnorm, double * snorm, void *); + int (*rcond) (double * rcond, void *); + int (*lcurve) (gsl_vector * reg_param, gsl_vector * rho, + gsl_vector * eta, void *); + void (*free) (void *); +} gsl_multilarge_linear_type; + +typedef struct +{ + const gsl_multilarge_linear_type * type; + void * state; + size_t p; +} gsl_multilarge_linear_workspace; + +/* available types */ +GSL_VAR const gsl_multilarge_linear_type * gsl_multilarge_linear_normal; +GSL_VAR const gsl_multilarge_linear_type * gsl_multilarge_linear_tsqr; + +/* + * Prototypes + */ +gsl_multilarge_linear_workspace * +gsl_multilarge_linear_alloc(const gsl_multilarge_linear_type * T, + const size_t p); + +void gsl_multilarge_linear_free(gsl_multilarge_linear_workspace * w); + +const char *gsl_multilarge_linear_name(const gsl_multilarge_linear_workspace * w); + +int gsl_multilarge_linear_reset(gsl_multilarge_linear_workspace * w); + +int gsl_multilarge_linear_accumulate(gsl_matrix * X, + gsl_vector * y, + gsl_multilarge_linear_workspace * w); + +int gsl_multilarge_linear_solve(const double lambda, gsl_vector * c, + double * rnorm, double * snorm, + gsl_multilarge_linear_workspace * w); + +int gsl_multilarge_linear_rcond(double *rcond, gsl_multilarge_linear_workspace * w); + +int gsl_multilarge_linear_lcurve(gsl_vector * reg_param, gsl_vector * rho, + gsl_vector * eta, + gsl_multilarge_linear_workspace * w); + +int gsl_multilarge_linear_wstdform1 (const gsl_vector * L, + const gsl_matrix * X, + const gsl_vector * w, + const gsl_vector * y, + gsl_matrix * Xs, + gsl_vector * ys, + gsl_multilarge_linear_workspace * work); + +int gsl_multilarge_linear_stdform1 (const gsl_vector * L, + const gsl_matrix * X, + const gsl_vector * y, + gsl_matrix * Xs, + gsl_vector * ys, + gsl_multilarge_linear_workspace * work); + +int gsl_multilarge_linear_L_decomp (gsl_matrix * L, gsl_vector * tau); + +int gsl_multilarge_linear_wstdform2 (const gsl_matrix * LQR, + const gsl_vector * Ltau, + const gsl_matrix * X, + const gsl_vector * w, + const gsl_vector * y, + gsl_matrix * Xs, + gsl_vector * ys, + gsl_multilarge_linear_workspace * work); + +int gsl_multilarge_linear_stdform2 (const gsl_matrix * LQR, + const gsl_vector * Ltau, + const gsl_matrix * X, + const gsl_vector * y, + gsl_matrix * Xs, + gsl_vector * ys, + gsl_multilarge_linear_workspace * work); + +int gsl_multilarge_linear_genform1 (const gsl_vector * L, + const gsl_vector * cs, + gsl_vector * c, + gsl_multilarge_linear_workspace * work); + +int gsl_multilarge_linear_genform2 (const gsl_matrix * LQR, + const gsl_vector * Ltau, + const gsl_vector * cs, + gsl_vector * c, + gsl_multilarge_linear_workspace * work); + +__END_DECLS + +#endif /* __GSL_MULTILARGE_H__ */ diff -Nru gsl-doc-1.16/multilarge/Makefile.am gsl-doc-2.3/multilarge/Makefile.am --- gsl-doc-1.16/multilarge/Makefile.am 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge/Makefile.am 2016-10-27 11:20:46.000000000 +0000 @@ -0,0 +1,14 @@ +noinst_LTLIBRARIES = libgslmultilarge.la + +pkginclude_HEADERS = gsl_multilarge.h + +libgslmultilarge_la_SOURCES = multilarge.c normal.c tsqr.c + +AM_CPPFLAGS = -I$(top_srcdir) + +check_PROGRAMS = test + +TESTS = $(check_PROGRAMS) + +test_SOURCES = test.c +test_LDADD = libgslmultilarge.la ../test/libgsltest.la ../multifit/libgslmultifit.la ../eigen/libgsleigen.la ../linalg/libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../permutation/libgslpermutation.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../sys/libgslsys.la ../utils/libutils.la ../rng/libgslrng.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../complex/libgslcomplex.la ../min/libgslmin.la diff -Nru gsl-doc-1.16/multilarge/Makefile.in gsl-doc-2.3/multilarge/Makefile.in --- gsl-doc-1.16/multilarge/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -0,0 +1,1032 @@ +# Makefile.in generated by automake 1.13.4 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +check_PROGRAMS = test$(EXEEXT) +subdir = multilarge +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp \ + $(pkginclude_HEADERS) $(top_srcdir)/test-driver +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libgslmultilarge_la_LIBADD = +am_libgslmultilarge_la_OBJECTS = multilarge.lo normal.lo tsqr.lo +libgslmultilarge_la_OBJECTS = $(am_libgslmultilarge_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +am_test_OBJECTS = test.$(OBJEXT) +test_OBJECTS = $(am_test_OBJECTS) +test_DEPENDENCIES = libgslmultilarge.la ../test/libgsltest.la \ + ../multifit/libgslmultifit.la ../eigen/libgsleigen.la \ + ../linalg/libgsllinalg.la ../blas/libgslblas.la \ + ../cblas/libgslcblas.la ../permutation/libgslpermutation.la \ + ../matrix/libgslmatrix.la ../vector/libgslvector.la \ + ../block/libgslblock.la ../sys/libgslsys.la \ + ../utils/libutils.la ../rng/libgslrng.la \ + ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la \ + ../complex/libgslcomplex.la ../min/libgslmin.la +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libgslmultilarge_la_SOURCES) $(test_SOURCES) +DIST_SOURCES = $(libgslmultilarge_la_SOURCES) $(test_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(pkgincludedir)" +HEADERS = $(pkginclude_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +AM_RECURSIVE_TARGETS = check recheck +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ +GSL_LIBM = @GSL_LIBM@ +GSL_LIBS = @GSL_LIBS@ +GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ +GSL_LT_VERSION = @GSL_LT_VERSION@ +GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ +GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ +HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ +HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ +HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ +HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ +HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ +HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ +HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ +HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ +HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ +HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ +HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ +HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ +HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ +HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ +HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ +HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ +HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBM = @LIBM@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +noinst_LTLIBRARIES = libgslmultilarge.la +pkginclude_HEADERS = gsl_multilarge.h +libgslmultilarge_la_SOURCES = multilarge.c normal.c tsqr.c +AM_CPPFLAGS = -I$(top_srcdir) +TESTS = $(check_PROGRAMS) +test_SOURCES = test.c +test_LDADD = libgslmultilarge.la ../test/libgsltest.la ../multifit/libgslmultifit.la ../eigen/libgsleigen.la ../linalg/libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../permutation/libgslpermutation.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../sys/libgslsys.la ../utils/libutils.la ../rng/libgslrng.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../complex/libgslcomplex.la ../min/libgslmin.la +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu multilarge/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu multilarge/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libgslmultilarge.la: $(libgslmultilarge_la_OBJECTS) $(libgslmultilarge_la_DEPENDENCIES) $(EXTRA_libgslmultilarge_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(libgslmultilarge_la_OBJECTS) $(libgslmultilarge_la_LIBADD) $(LIBS) + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) + @rm -f test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multilarge.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/normal.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tsqr.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgincludeHEADERS: $(pkginclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ + done + +uninstall-pkgincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + else \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all $(check_PROGRAMS) + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +test.log: test$(EXEEXT) + @p='test$(EXEEXT)'; \ + b='test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(pkgincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ + clean-noinstLTLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pkgincludeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pkgincludeHEADERS + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ + clean-checkPROGRAMS clean-generic clean-libtool \ + clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgincludeHEADERS \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + recheck tags tags-am uninstall uninstall-am \ + uninstall-pkgincludeHEADERS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -Nru gsl-doc-1.16/multilarge/multilarge.c gsl-doc-2.3/multilarge/multilarge.c --- gsl-doc-1.16/multilarge/multilarge.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge/multilarge.c 2016-07-07 20:36:11.000000000 +0000 @@ -0,0 +1,402 @@ +/* multilarge.c + * + * Copyright (C) 2015 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +gsl_multilarge_linear_workspace * +gsl_multilarge_linear_alloc(const gsl_multilarge_linear_type *T, + const size_t p) +{ + gsl_multilarge_linear_workspace *w; + + w = calloc(1, sizeof(gsl_multilarge_linear_workspace)); + if (w == NULL) + { + GSL_ERROR_NULL("failed to allocate space for workspace", + GSL_ENOMEM); + } + + w->type = T; + + w->state = w->type->alloc(p); + if (w->state == NULL) + { + gsl_multilarge_linear_free(w); + GSL_ERROR_NULL("failed to allocate space for multilarge state", + GSL_ENOMEM); + } + + w->p = p; + + /* initialize newly allocated state */ + gsl_multilarge_linear_reset(w); + + return w; +} + +void +gsl_multilarge_linear_free(gsl_multilarge_linear_workspace *w) +{ + RETURN_IF_NULL(w); + + if (w->state) + w->type->free(w->state); + + free(w); +} + +const char * +gsl_multilarge_linear_name(const gsl_multilarge_linear_workspace *w) +{ + return w->type->name; +} + +int +gsl_multilarge_linear_reset(gsl_multilarge_linear_workspace *w) +{ + int status = w->type->reset(w->state); + return status; +} + +int +gsl_multilarge_linear_accumulate(gsl_matrix * X, gsl_vector * y, + gsl_multilarge_linear_workspace * w) +{ + int status = w->type->accumulate(X, y, w->state); + return status; +} + +int +gsl_multilarge_linear_solve(const double lambda, gsl_vector * c, + double * rnorm, double * snorm, + gsl_multilarge_linear_workspace * w) +{ + int status = w->type->solve(lambda, c, rnorm, snorm, w->state); + return status; +} + +int +gsl_multilarge_linear_rcond(double *rcond, gsl_multilarge_linear_workspace * w) +{ + int status = w->type->rcond(rcond, w->state); + return status; +} + +int +gsl_multilarge_linear_lcurve(gsl_vector * reg_param, gsl_vector * rho, + gsl_vector * eta, + gsl_multilarge_linear_workspace * w) +{ + const size_t len = reg_param->size; + + if (len != rho->size) + { + GSL_ERROR ("reg_param and rho have different sizes", GSL_EBADLEN); + } + else if (len != eta->size) + { + GSL_ERROR ("reg_param and eta have different sizes", GSL_EBADLEN); + } + else + { + int status = w->type->lcurve(reg_param, rho, eta, w->state); + return status; + } +} + +/* +gsl_multilarge_linear_wstdform1() + Using regularization matrix +L = diag(l_1,l_2,...,l_p), transform to Tikhonov standard form: + +X~ = sqrt(W) X L^{-1} +y~ = sqrt(W) y +c~ = L c + +Inputs: L - Tikhonov matrix as a vector of diagonal elements p-by-1; + or NULL for L = I + X - least squares matrix n-by-p + y - right hand side vector n-by-1 + w - weight vector n-by-1; or NULL for W = I + Xs - least squares matrix in standard form X~ n-by-p + ys - right hand side vector in standard form y~ n-by-1 + work - workspace + +Return: success/error + +Notes: +1) It is allowed for X = Xs and y = ys +*/ + +int +gsl_multilarge_linear_wstdform1 (const gsl_vector * L, + const gsl_matrix * X, + const gsl_vector * w, + const gsl_vector * y, + gsl_matrix * Xs, + gsl_vector * ys, + gsl_multilarge_linear_workspace * work) +{ + const size_t n = X->size1; + const size_t p = X->size2; + + if (L != NULL && p != L->size) + { + GSL_ERROR("L vector does not match X", GSL_EBADLEN); + } + else if (n != y->size) + { + GSL_ERROR("y vector does not match X", GSL_EBADLEN); + } + else if (w != NULL && n != w->size) + { + GSL_ERROR("weight vector does not match X", GSL_EBADLEN); + } + else if (n != Xs->size1 || p != Xs->size2) + { + GSL_ERROR("Xs matrix dimensions do not match X", GSL_EBADLEN); + } + else if (n != ys->size) + { + GSL_ERROR("ys vector must be length n", GSL_EBADLEN); + } + else + { + int status = GSL_SUCCESS; + + /* compute Xs = sqrt(W) X and ys = sqrt(W) y */ + status = gsl_multifit_linear_applyW(X, w, y, Xs, ys); + if (status) + return status; + + if (L != NULL) + { + size_t j; + + /* construct X~ = sqrt(W) X * L^{-1} matrix */ + for (j = 0; j < p; ++j) + { + gsl_vector_view Xj = gsl_matrix_column(Xs, j); + double lj = gsl_vector_get(L, j); + + if (lj == 0.0) + { + GSL_ERROR("L matrix is singular", GSL_EDOM); + } + + gsl_vector_scale(&Xj.vector, 1.0 / lj); + } + } + + return status; + } +} + +int +gsl_multilarge_linear_stdform1 (const gsl_vector * L, + const gsl_matrix * X, + const gsl_vector * y, + gsl_matrix * Xs, + gsl_vector * ys, + gsl_multilarge_linear_workspace * work) +{ + int status; + + status = gsl_multilarge_linear_wstdform1(L, X, NULL, y, Xs, ys, work); + + return status; +} + +int +gsl_multilarge_linear_L_decomp (gsl_matrix * L, gsl_vector * tau) +{ + const size_t m = L->size1; + const size_t p = L->size2; + + if (m < p) + { + GSL_ERROR("m < p not yet supported", GSL_EBADLEN); + } + else + { + int status; + + status = gsl_multifit_linear_L_decomp(L, tau); + + return status; + } +} + +int +gsl_multilarge_linear_wstdform2 (const gsl_matrix * LQR, + const gsl_vector * Ltau, + const gsl_matrix * X, + const gsl_vector * w, + const gsl_vector * y, + gsl_matrix * Xs, + gsl_vector * ys, + gsl_multilarge_linear_workspace * work) +{ + const size_t m = LQR->size1; + const size_t n = X->size1; + const size_t p = X->size2; + + if (p != work->p) + { + GSL_ERROR("X has wrong number of columns", GSL_EBADLEN); + } + else if (p != LQR->size2) + { + GSL_ERROR("LQR and X matrices have different numbers of columns", GSL_EBADLEN); + } + else if (n != y->size) + { + GSL_ERROR("y vector does not match X", GSL_EBADLEN); + } + else if (w != NULL && n != w->size) + { + GSL_ERROR("weights vector must be length n", GSL_EBADLEN); + } + else if (m < p) + { + GSL_ERROR("m < p not yet supported", GSL_EBADLEN); + } + else if (n != Xs->size1 || p != Xs->size2) + { + GSL_ERROR("Xs matrix must be n-by-p", GSL_EBADLEN); + } + else if (n != ys->size) + { + GSL_ERROR("ys vector must have length n", GSL_EBADLEN); + } + else + { + int status; + size_t i; + gsl_matrix_const_view R = gsl_matrix_const_submatrix(LQR, 0, 0, p, p); + + /* compute Xs = sqrt(W) X and ys = sqrt(W) y */ + status = gsl_multifit_linear_applyW(X, w, y, Xs, ys); + if (status) + return status; + + /* compute X~ = X R^{-1} using QR decomposition of L */ + for (i = 0; i < n; ++i) + { + gsl_vector_view v = gsl_matrix_row(Xs, i); + + /* solve: R^T y = X_i */ + gsl_blas_dtrsv(CblasUpper, CblasTrans, CblasNonUnit, &R.matrix, &v.vector); + } + + return GSL_SUCCESS; + } +} + +int +gsl_multilarge_linear_stdform2 (const gsl_matrix * LQR, + const gsl_vector * Ltau, + const gsl_matrix * X, + const gsl_vector * y, + gsl_matrix * Xs, + gsl_vector * ys, + gsl_multilarge_linear_workspace * work) +{ + int status; + + status = gsl_multilarge_linear_wstdform2(LQR, Ltau, X, NULL, y, Xs, ys, work); + + return status; +} + +/* +gsl_multilarge_linear_genform1() + Backtransform regularized solution vector using matrix +L = diag(L) +*/ + +int +gsl_multilarge_linear_genform1 (const gsl_vector * L, + const gsl_vector * cs, + gsl_vector * c, + gsl_multilarge_linear_workspace * work) +{ + if (L->size != work->p) + { + GSL_ERROR("L vector does not match workspace", GSL_EBADLEN); + } + else if (L->size != cs->size) + { + GSL_ERROR("cs vector does not match L", GSL_EBADLEN); + } + else if (L->size != c->size) + { + GSL_ERROR("c vector does not match L", GSL_EBADLEN); + } + else + { + /* compute true solution vector c = L^{-1} c~ */ + gsl_vector_memcpy(c, cs); + gsl_vector_div(c, L); + + return GSL_SUCCESS; + } +} + +int +gsl_multilarge_linear_genform2 (const gsl_matrix * LQR, + const gsl_vector * Ltau, + const gsl_vector * cs, + gsl_vector * c, + gsl_multilarge_linear_workspace * work) +{ + const size_t m = LQR->size1; + const size_t p = LQR->size2; + + if (p != c->size) + { + GSL_ERROR("c vector does not match LQR", GSL_EBADLEN); + } + else if (m < p) + { + GSL_ERROR("m < p not yet supported", GSL_EBADLEN); + } + else if (p != cs->size) + { + GSL_ERROR("cs vector size does not match c", GSL_EBADLEN); + } + else + { + int s; + gsl_matrix_const_view R = gsl_matrix_const_submatrix(LQR, 0, 0, p, p); /* R factor of L */ + + /* solve R c = cs for true solution c, using QR decomposition of L */ + gsl_vector_memcpy(c, cs); + s = gsl_blas_dtrsv(CblasUpper, CblasNoTrans, CblasNonUnit, &R.matrix, c); + + return s; + } +} diff -Nru gsl-doc-1.16/multilarge/normal.c gsl-doc-2.3/multilarge/normal.c --- gsl-doc-1.16/multilarge/normal.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge/normal.c 2016-08-12 17:50:06.000000000 +0000 @@ -0,0 +1,513 @@ +/* normal.c + * + * Copyright (C) 2015, 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef struct +{ + size_t p; /* number of columns of LS matrix */ + gsl_matrix *ATA; /* A^T A, p-by-p */ + gsl_vector *ATb; /* A^T b, p-by-1 */ + double normb; /* || b || */ + gsl_matrix *work_ATA; /* workspace for chol(ATA), p-by-p */ + gsl_permutation *perm; /* permutation vector */ + gsl_vector *workp; /* workspace size p */ + gsl_vector *work3p; /* workspace size 3*p */ + gsl_vector *D; /* scale factors for ATA, size p */ + gsl_vector *c; /* solution vector for L-curve */ + int eigen; /* 1 if eigenvalues computed */ + double eval_min; /* minimum eigenvalue */ + double eval_max; /* maximum eigenvalue */ + gsl_eigen_symm_workspace *eigen_p; +} normal_state_t; + +static void *normal_alloc(const size_t p); +static void normal_free(void *vstate); +static int normal_reset(void *vstate); +static int normal_accumulate(gsl_matrix * A, gsl_vector * b, + void * vstate); +static int normal_solve(const double lambda, gsl_vector * x, + double * rnorm, double * snorm, + void * vstate); +static int normal_rcond(double * rcond, void * vstate); +static int normal_lcurve(gsl_vector * reg_param, gsl_vector * rho, + gsl_vector * eta, void * vstate); +static int normal_solve_system(const double lambda, gsl_vector * x, + normal_state_t *state); +static int normal_solve_cholesky(gsl_matrix * ATA, const gsl_vector * ATb, + gsl_vector * x, normal_state_t *state); +static int normal_calc_norms(const gsl_vector *x, double *rnorm, + double *snorm, normal_state_t *state); +static int normal_eigen(normal_state_t *state); + +/* +normal_alloc() + Allocate workspace for solving large linear least squares +problems using the normal equations approach + +Inputs: p - number of columns of LS matrix + +Return: pointer to workspace +*/ + +static void * +normal_alloc(const size_t p) +{ + normal_state_t *state; + + if (p == 0) + { + GSL_ERROR_NULL("p must be a positive integer", + GSL_EINVAL); + } + + state = calloc(1, sizeof(normal_state_t)); + if (!state) + { + GSL_ERROR_NULL("failed to allocate normal state", GSL_ENOMEM); + } + + state->p = p; + + state->ATA = gsl_matrix_alloc(p, p); + if (state->ATA == NULL) + { + normal_free(state); + GSL_ERROR_NULL("failed to allocate ATA matrix", GSL_ENOMEM); + } + + state->work_ATA = gsl_matrix_alloc(p, p); + if (state->work_ATA == NULL) + { + normal_free(state); + GSL_ERROR_NULL("failed to allocate temporary ATA matrix", GSL_ENOMEM); + } + + state->ATb = gsl_vector_alloc(p); + if (state->ATb == NULL) + { + normal_free(state); + GSL_ERROR_NULL("failed to allocate ATb vector", GSL_ENOMEM); + } + + state->perm = gsl_permutation_alloc(p); + if (state->perm == NULL) + { + normal_free(state); + GSL_ERROR_NULL("failed to allocate perm", GSL_ENOMEM); + } + + state->D = gsl_vector_alloc(p); + if (state->D == NULL) + { + normal_free(state); + GSL_ERROR_NULL("failed to allocate D vector", GSL_ENOMEM); + } + + state->workp = gsl_vector_alloc(p); + if (state->workp == NULL) + { + normal_free(state); + GSL_ERROR_NULL("failed to allocate temporary ATb vector", GSL_ENOMEM); + } + + state->work3p = gsl_vector_alloc(3 * p); + if (state->work3p == NULL) + { + normal_free(state); + GSL_ERROR_NULL("failed to allocate work3p", GSL_ENOMEM); + } + + state->c = gsl_vector_alloc(p); + if (state->c == NULL) + { + normal_free(state); + GSL_ERROR_NULL("failed to allocate c vector", GSL_ENOMEM); + } + + state->eigen_p = gsl_eigen_symm_alloc(p); + if (state->eigen_p == NULL) + { + normal_free(state); + GSL_ERROR_NULL("failed to allocate eigen workspace", GSL_ENOMEM); + } + + normal_reset(state); + + return state; +} + +static void +normal_free(void *vstate) +{ + normal_state_t *state = (normal_state_t *) vstate; + + if (state->ATA) + gsl_matrix_free(state->ATA); + + if (state->work_ATA) + gsl_matrix_free(state->work_ATA); + + if (state->ATb) + gsl_vector_free(state->ATb); + + if (state->perm) + gsl_permutation_free(state->perm); + + if (state->D) + gsl_vector_free(state->D); + + if (state->workp) + gsl_vector_free(state->workp); + + if (state->work3p) + gsl_vector_free(state->work3p); + + if (state->c) + gsl_vector_free(state->c); + + if (state->eigen_p) + gsl_eigen_symm_free(state->eigen_p); + + free(state); +} + +static int +normal_reset(void *vstate) +{ + normal_state_t *state = (normal_state_t *) vstate; + + gsl_matrix_set_zero(state->ATA); + gsl_vector_set_zero(state->ATb); + state->normb = 0.0; + state->eigen = 0; + state->eval_min = 0.0; + state->eval_max = 0.0; + + return GSL_SUCCESS; +} + +/* +normal_accumulate() + Add a new block of rows to the normal equations system + +Inputs: A - new block of rows, n-by-p + b - new rhs vector n-by-1 + vstate - workspace + +Return: success/error +*/ + +static int +normal_accumulate(gsl_matrix * A, gsl_vector * b, void * vstate) +{ + normal_state_t *state = (normal_state_t *) vstate; + const size_t n = A->size1; + + if (A->size2 != state->p) + { + GSL_ERROR("columns of A do not match workspace", GSL_EBADLEN); + } + else if (n != b->size) + { + GSL_ERROR("A and b have different numbers of rows", GSL_EBADLEN); + } + else + { + int s; + + /* ATA += A^T A, using only the lower half of the matrix */ + s = gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, A, 1.0, state->ATA); + if (s) + return s; + + /* ATb += A^T b */ + s = gsl_blas_dgemv(CblasTrans, 1.0, A, b, 1.0, state->ATb); + if (s) + return s; + + /* update || b || */ + state->normb = gsl_hypot(state->normb, gsl_blas_dnrm2(b)); + + return GSL_SUCCESS; + } +} + +/* +normal_solve() + Solve normal equations system: + +(A^T A + \lambda^2 I) x = A^T b + +using Cholesky decomposition + +Inputs: lambda - regularization parameter + x - (output) solution vector p-by-1 + rnorm - (output) residual norm ||b - A x|| + snorm - (output) solution norm ||x|| + vstate - workspace + +Return: success/error +*/ + +static int +normal_solve(const double lambda, gsl_vector * x, + double * rnorm, double * snorm, + void * vstate) +{ + normal_state_t *state = (normal_state_t *) vstate; + + if (x->size != state->p) + { + GSL_ERROR("solution vector does not match workspace", GSL_EBADLEN); + } + else + { + int status; + + /* solve system (A^T A) x = A^T b */ + status = normal_solve_system(lambda, x, state); + if (status) + { + GSL_ERROR("failed to solve normal equations", status); + } + + /* compute residual norm ||y - X c|| and solution norm ||x|| */ + normal_calc_norms(x, rnorm, snorm, state); + + return GSL_SUCCESS; + } +} + +static int +normal_rcond(double * rcond, void * vstate) +{ + normal_state_t *state = (normal_state_t *) vstate; + int status = GSL_SUCCESS; + double rcond_ATA; + + status = gsl_linalg_pcholesky_rcond(state->work_ATA, state->perm, &rcond_ATA, state->work3p); + if (status == GSL_SUCCESS) + *rcond = sqrt(rcond_ATA); + + return status; +} + +/* +normal_lcurve() + Compute L-curve of least squares system + +Inputs: reg_param - (output) vector of regularization parameters + rho - (output) vector of residual norms + eta - (output) vector of solution norms + vstate - workspace + +Return: success/error +*/ + +static int +normal_lcurve(gsl_vector * reg_param, gsl_vector * rho, + gsl_vector * eta, void * vstate) +{ + normal_state_t *state = (normal_state_t *) vstate; + int status; + double smin, smax; /* minimum/maximum singular values */ + size_t i; + + if (state->eigen == 0) + { + status = normal_eigen(state); + if (status) + return status; + } + + if (state->eval_max < 0.0) + { + GSL_ERROR("matrix is not positive definite", GSL_EDOM); + } + + /* compute singular values which are sqrts of eigenvalues */ + smax = sqrt(state->eval_max); + if (state->eval_min > 0.0) + smin = sqrt(state->eval_min); + else + smin = 0.0; + + /* compute vector of regularization parameters */ + gsl_multifit_linear_lreg(smin, smax, reg_param); + + /* solve normal equations for each regularization parameter */ + for (i = 0; i < reg_param->size; ++i) + { + double lambda = gsl_vector_get(reg_param, i); + double rnorm, snorm; + + status = normal_solve_system(lambda, state->c, state); + if (status) + return status; + + /* compute ||y - X c|| and ||c|| */ + normal_calc_norms(state->c, &rnorm, &snorm, state); + + gsl_vector_set(rho, i, rnorm); + gsl_vector_set(eta, i, snorm); + } + + return GSL_SUCCESS; +} + +/* +normal_solve_system() + Compute solution to normal equations: + +(A^T A + lambda^2*I) x = A^T b + +using LDL decomposition. + +Inputs: x - (output) solution vector + state - workspace + +Return: success/error +*/ + +static int +normal_solve_system(const double lambda, gsl_vector * x, normal_state_t *state) +{ + int status; + const double lambda_sq = lambda * lambda; + gsl_vector_view d = gsl_matrix_diagonal(state->work_ATA); + + /* copy ATA matrix to temporary workspace and regularize */ + gsl_matrix_tricpy('L', 1, state->work_ATA, state->ATA); + gsl_vector_add_constant(&d.vector, lambda_sq); + + /* solve with LDL decomposition */ + status = normal_solve_cholesky(state->work_ATA, state->ATb, x, state); + if (status) + return status; + + return status; +} + +static int +normal_solve_cholesky(gsl_matrix * ATA, const gsl_vector * ATb, + gsl_vector * x, normal_state_t *state) +{ + int status; + + status = gsl_linalg_pcholesky_decomp2(ATA, state->perm, state->D); + if (status) + return status; + + status = gsl_linalg_pcholesky_solve2(ATA, state->perm, state->D, ATb, x); + if (status) + return status; + + return GSL_SUCCESS; +} + +/* +normal_calc_norms() + Compute residual norm ||y - X c|| and solution +norm ||c|| + +Inputs: x - solution vector + rnorm - (output) residual norm ||y - X c|| + snorm - (output) solution norm ||c|| + state - workspace +*/ + +static int +normal_calc_norms(const gsl_vector *x, double *rnorm, + double *snorm, normal_state_t *state) +{ + double r2; + + /* compute solution norm ||x|| */ + *snorm = gsl_blas_dnrm2(x); + + /* compute residual norm ||b - Ax|| */ + + /* compute: A^T A x - 2 A^T b */ + gsl_vector_memcpy(state->workp, state->ATb); + gsl_blas_dsymv(CblasLower, 1.0, state->ATA, x, -2.0, state->workp); + + /* compute: x^T A^T A x - 2 x^T A^T b */ + gsl_blas_ddot(x, state->workp, &r2); + + /* add b^T b */ + r2 += state->normb * state->normb; + + *rnorm = sqrt(r2); + + return GSL_SUCCESS; +} + +/* +normal_eigen() + Compute eigenvalues of A^T A matrix, which +are stored in state->workp on output. Also, +state->eval_min and state->eval_max are set +to the minimum/maximum eigenvalues +*/ + +static int +normal_eigen(normal_state_t *state) +{ + int status; + + /* copy lower triangle of ATA to temporary workspace */ + gsl_matrix_tricpy('L', 1, state->work_ATA, state->ATA); + + /* compute eigenvalues of ATA */ + status = gsl_eigen_symm(state->work_ATA, state->workp, state->eigen_p); + if (status) + return status; + + gsl_vector_minmax(state->workp, &state->eval_min, &state->eval_max); + + state->eigen = 1; + + return GSL_SUCCESS; +} + +static const gsl_multilarge_linear_type normal_type = +{ + "normal", + normal_alloc, + normal_reset, + normal_accumulate, + normal_solve, + normal_rcond, + normal_lcurve, + normal_free +}; + +const gsl_multilarge_linear_type * gsl_multilarge_linear_normal = + &normal_type; diff -Nru gsl-doc-1.16/multilarge/test.c gsl-doc-2.3/multilarge/test.c --- gsl-doc-1.16/multilarge/test.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge/test.c 2016-07-07 20:36:11.000000000 +0000 @@ -0,0 +1,515 @@ +/* multilarge/test.c + * + * Copyright (C) 2015 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static void test_random_matrix_orth(gsl_matrix *m, const gsl_rng *r); +static void test_random_matrix_ill(gsl_matrix *m, const gsl_rng *r); +static void test_random_vector(gsl_vector *v, const gsl_rng *r, + const double lower, const double upper); +static void test_random_matrix(gsl_matrix *m, const gsl_rng *r, + const double lower, const double upper); +static void test_random_vector_noise(const gsl_rng *r, gsl_vector *y); +static void test_compare_vectors(const double tol, const gsl_vector * a, + const gsl_vector * b, const char * desc); +static void test_multifit_solve(const double lambda, const gsl_matrix * X, + const gsl_vector * y, const gsl_vector * wts, + const gsl_vector * diagL, const gsl_matrix * L, + double *rnorm, double *snorm, gsl_vector * c); +static void test_multilarge_solve(const gsl_multilarge_linear_type * T, const double lambda, + const gsl_matrix * X, const gsl_vector * y, gsl_vector * wts, + const gsl_vector * diagL, const gsl_matrix * L, + double *rnorm, double *snorm, gsl_vector * c); + +/* generate random square orthogonal matrix via QR decomposition */ +static void +test_random_matrix_orth(gsl_matrix *m, const gsl_rng *r) +{ + const size_t M = m->size1; + gsl_matrix *A = gsl_matrix_alloc(M, M); + gsl_vector *tau = gsl_vector_alloc(M); + gsl_matrix *R = gsl_matrix_alloc(M, M); + + test_random_matrix(A, r, -1.0, 1.0); + gsl_linalg_QR_decomp(A, tau); + gsl_linalg_QR_unpack(A, tau, m, R); + + gsl_matrix_free(A); + gsl_matrix_free(R); + gsl_vector_free(tau); +} + +/* construct ill-conditioned matrix via SVD */ +static void +test_random_matrix_ill(gsl_matrix *m, const gsl_rng *r) +{ + const size_t M = m->size1; + const size_t N = m->size2; + gsl_matrix *U = gsl_matrix_alloc(M, M); + gsl_matrix *V = gsl_matrix_alloc(N, N); + gsl_vector *S = gsl_vector_alloc(N); + gsl_matrix_view Uv = gsl_matrix_submatrix(U, 0, 0, M, N); + const double smin = 16.0 * GSL_DBL_EPSILON; + const double smax = 10.0; + const double ratio = pow(smin / smax, 1.0 / (N - 1.0)); + double s; + size_t j; + + test_random_matrix_orth(U, r); + test_random_matrix_orth(V, r); + + /* compute U * S */ + + s = smax; + for (j = 0; j < N; ++j) + { + gsl_vector_view uj = gsl_matrix_column(U, j); + + gsl_vector_scale(&uj.vector, s); + s *= ratio; + } + + /* compute m = (U * S) * V' */ + gsl_blas_dgemm(CblasNoTrans, CblasTrans, 1.0, &Uv.matrix, V, 0.0, m); + + gsl_matrix_free(U); + gsl_matrix_free(V); + gsl_vector_free(S); +} + +static void +test_random_vector(gsl_vector *v, const gsl_rng *r, + const double lower, const double upper) +{ + size_t i; + size_t N = v->size; + + for (i = 0; i < N; ++i) + { + gsl_vector_set(v, i, + gsl_rng_uniform(r) * (upper - lower) + lower); + } +} + +static void +test_random_matrix(gsl_matrix *m, const gsl_rng *r, + const double lower, const double upper) +{ + size_t i, j; + size_t M = m->size1; + size_t N = m->size2; + + for (i = 0; i < M; ++i) + { + for (j = 0; j < N; ++j) + { + gsl_matrix_set(m, i, j, + gsl_rng_uniform(r) * (upper - lower) + lower); + } + } +} + +/* generate Vandermonde matrix using equally spaced input points + * on [0,1] */ +static void +test_vander_matrix(gsl_matrix * m) +{ + const size_t M = m->size1; + const size_t N = m->size2; + const double dt = 1.0 / (M - 1.0); + size_t i, j; + + for (i = 0; i < M; ++i) + { + double ti = i * dt; + double mij = 1.0; + + for (j = 0; j < N; ++j) + { + gsl_matrix_set(m, i, j, mij); + mij *= ti; + } + } +} + +static void +test_random_vector_noise(const gsl_rng *r, gsl_vector *y) +{ + size_t i; + + for (i = 0; i < y->size; ++i) + { + double *ptr = gsl_vector_ptr(y, i); + *ptr += 1.0e-3 * gsl_rng_uniform(r); + } +} + +static void +test_compare_vectors(const double tol, const gsl_vector * a, + const gsl_vector * b, const char * desc) +{ + size_t i; + + for (i = 0; i < a->size; ++i) + { + double ai = gsl_vector_get(a, i); + double bi = gsl_vector_get(b, i); + + gsl_test_rel(bi, ai, tol, "%s i=%zu", desc, i); + } +} + +/* solve least squares system with multifit SVD */ +static void +test_multifit_solve(const double lambda, const gsl_matrix * X, + const gsl_vector * y, const gsl_vector * wts, + const gsl_vector * diagL, const gsl_matrix * L, + double *rnorm, double *snorm, gsl_vector * c) +{ + const size_t n = X->size1; + const size_t p = X->size2; + gsl_multifit_linear_workspace *w = + gsl_multifit_linear_alloc(n, p); + gsl_matrix *Xs = gsl_matrix_alloc(n, p); + gsl_vector *ys = gsl_vector_alloc(n); + gsl_vector *cs = gsl_vector_alloc(p); + gsl_matrix *LQR = NULL; + gsl_vector *Ltau = NULL; + gsl_matrix *M = NULL; + + /* convert to standard form */ + if (diagL) + { + gsl_multifit_linear_wstdform1(diagL, X, wts, y, Xs, ys, w); + } + else if (L) + { + const size_t m = L->size1; + + LQR = gsl_matrix_alloc(m, p); + Ltau = gsl_vector_alloc(GSL_MIN(m, p)); + M = (m >= p) ? gsl_matrix_alloc(m, p) : gsl_matrix_alloc(n, p); + + gsl_matrix_memcpy(LQR, L); + gsl_multifit_linear_L_decomp(LQR, Ltau); + gsl_multifit_linear_wstdform2(LQR, Ltau, X, wts, y, Xs, ys, M, w); + } + else + { + gsl_matrix_memcpy(Xs, X); + gsl_vector_memcpy(ys, y); + } + + gsl_multifit_linear_svd(Xs, w); + gsl_multifit_linear_solve(lambda, Xs, ys, cs, rnorm, snorm, w); + + /* convert to general form */ + if (diagL) + gsl_multifit_linear_genform1(diagL, cs, c, w); + else if (L) + gsl_multifit_linear_wgenform2(LQR, Ltau, X, wts, y, cs, M, c, w); + else + gsl_vector_memcpy(c, cs); + + gsl_multifit_linear_free(w); + gsl_matrix_free(Xs); + gsl_vector_free(ys); + gsl_vector_free(cs); + + if (LQR) + gsl_matrix_free(LQR); + if (Ltau) + gsl_vector_free(Ltau); + if (M) + gsl_matrix_free(M); +} + +/* solve least squares system with multilarge */ +static void +test_multilarge_solve(const gsl_multilarge_linear_type * T, const double lambda, + const gsl_matrix * X, const gsl_vector * y, gsl_vector * wts, + const gsl_vector * diagL, const gsl_matrix * L, + double *rnorm, double *snorm, gsl_vector * c) +{ + const size_t n = X->size1; + const size_t p = X->size2; + const size_t nblock = 5; + const size_t nrows = n / nblock; /* number of rows per block */ + gsl_multilarge_linear_workspace *w = + gsl_multilarge_linear_alloc(T, p); + gsl_matrix *Xs = gsl_matrix_alloc(nrows, p); + gsl_vector *ys = gsl_vector_alloc(nrows); + gsl_vector *cs = gsl_vector_alloc(p); + gsl_matrix *LQR = NULL; + gsl_vector *Ltau = NULL; + size_t rowidx = 0; + + if (L) + { + const size_t m = L->size1; + + LQR = gsl_matrix_alloc(m, p); + Ltau = gsl_vector_alloc(p); + + gsl_matrix_memcpy(LQR, L); + gsl_multilarge_linear_L_decomp(LQR, Ltau); + } + + while (rowidx < n) + { + size_t nleft = n - rowidx; + size_t nr = GSL_MIN(nrows, nleft); + gsl_matrix_const_view Xv = gsl_matrix_const_submatrix(X, rowidx, 0, nr, p); + gsl_vector_const_view yv = gsl_vector_const_subvector(y, rowidx, nr); + gsl_vector_view wv; + gsl_matrix_view Xsv = gsl_matrix_submatrix(Xs, 0, 0, nr, p); + gsl_vector_view ysv = gsl_vector_subvector(ys, 0, nr); + + if (wts) + wv = gsl_vector_subvector(wts, rowidx, nr); + + /* convert to standard form */ + if (diagL) + { + gsl_multilarge_linear_wstdform1(diagL, &Xv.matrix, wts ? &wv.vector : NULL, + &yv.vector, &Xsv.matrix, &ysv.vector, w); + } + else if (L) + { + gsl_multilarge_linear_wstdform2(LQR, Ltau, &Xv.matrix, wts ? &wv.vector : NULL, + &yv.vector, &Xsv.matrix, &ysv.vector, w); + } + else + { + gsl_matrix_memcpy(&Xsv.matrix, &Xv.matrix); + gsl_vector_memcpy(&ysv.vector, &yv.vector); + } + + gsl_multilarge_linear_accumulate(&Xsv.matrix, &ysv.vector, w); + + rowidx += nr; + } + + gsl_multilarge_linear_solve(lambda, cs, rnorm, snorm, w); + + if (diagL) + gsl_multilarge_linear_genform1(diagL, cs, c, w); + else if (L) + gsl_multilarge_linear_genform2(LQR, Ltau, cs, c, w); + else + gsl_vector_memcpy(c, cs); + + gsl_multilarge_linear_free(w); + gsl_matrix_free(Xs); + gsl_vector_free(ys); + gsl_vector_free(cs); + + if (LQR) + gsl_matrix_free(LQR); + if (Ltau) + gsl_vector_free(Ltau); +} + +static void +test_random(const gsl_multilarge_linear_type * T, + const size_t n, const size_t p, + const double tol, + const gsl_rng * r) +{ + const double tol1 = 1.0e3 * tol; + gsl_matrix *X = gsl_matrix_alloc(n, p); + gsl_vector *y = gsl_vector_alloc(n); + gsl_vector *c = gsl_vector_alloc(p); + gsl_vector *w = gsl_vector_alloc(n); + gsl_vector *diagL = gsl_vector_alloc(p); + gsl_matrix *Lsqr = gsl_matrix_alloc(p, p); + gsl_matrix *Ltall = gsl_matrix_alloc(5*p, p); + gsl_vector *c0 = gsl_vector_alloc(p); + gsl_vector *c1 = gsl_vector_alloc(p); + double rnorm0, snorm0; + double rnorm1, snorm1; + char str[2048]; + size_t i; + + /* generate LS system */ + test_random_matrix_ill(X, r); + /*test_random_matrix(X, r, -1.0, 1.0);*/ + test_random_vector(c, r, -1.0, 1.0); + + /* compute y = X c + noise */ + gsl_blas_dgemv(CblasNoTrans, 1.0, X, c, 0.0, y); + test_random_vector_noise(r, y); + + /* random weights */ + test_random_vector(w, r, 0.0, 1.0); + + /* random diag(L) */ + test_random_vector(diagL, r, 1.0, 5.0); + + /* random square L */ + test_random_matrix(Lsqr, r, -5.0, 5.0); + + /* random tall L */ + test_random_matrix(Ltall, r, -10.0, 10.0); + + for (i = 0; i < 2; ++i) + { + double lambda = pow(10.0, -(double) i); + + /* unweighted with L = I */ + { + test_multifit_solve(lambda, X, y, NULL, NULL, NULL, &rnorm0, &snorm0, c0); + test_multilarge_solve(T, lambda, X, y, NULL, NULL, NULL, &rnorm1, &snorm1, c1); + + sprintf(str, "random %s unweighted stdform n=%zu p=%zu lambda=%g", + T->name, n, p, lambda); + test_compare_vectors(tol, c0, c1, str); + + gsl_test_rel(rnorm1, rnorm0, tol1, "rnorm %s", str); + gsl_test_rel(snorm1, snorm0, tol, "snorm %s", str); + } + + /* weighted, L = diag(L) */ + { + test_multifit_solve(lambda, X, y, w, diagL, NULL, &rnorm0, &snorm0, c0); + test_multilarge_solve(T, lambda, X, y, w, diagL, NULL, &rnorm1, &snorm1, c1); + + sprintf(str, "random %s weighted diag(L) n=%zu p=%zu lambda=%g", + T->name, n, p, lambda); + test_compare_vectors(tol, c0, c1, str); + + gsl_test_rel(rnorm1, rnorm0, tol1, "rnorm %s", str); + gsl_test_rel(snorm1, snorm0, tol, "snorm %s", str); + } + + /* unweighted, L = diag(L) */ + { + test_multifit_solve(lambda, X, y, NULL, diagL, NULL, &rnorm0, &snorm0, c0); + test_multilarge_solve(T, lambda, X, y, NULL, diagL, NULL, &rnorm1, &snorm1, c1); + + sprintf(str, "random %s unweighted diag(L) n=%zu p=%zu lambda=%g", + T->name, n, p, lambda); + test_compare_vectors(tol, c0, c1, str); + + gsl_test_rel(rnorm1, rnorm0, tol1, "rnorm %s", str); + gsl_test_rel(snorm1, snorm0, tol, "snorm %s", str); + } + + /* weighted, L = square */ + { + test_multifit_solve(lambda, X, y, w, NULL, Lsqr, &rnorm0, &snorm0, c0); + test_multilarge_solve(T, lambda, X, y, w, NULL, Lsqr, &rnorm1, &snorm1, c1); + + sprintf(str, "random %s weighted Lsqr n=%zu p=%zu lambda=%g", + T->name, n, p, lambda); + test_compare_vectors(tol, c0, c1, str); + + gsl_test_rel(rnorm1, rnorm0, tol1, "rnorm %s", str); + gsl_test_rel(snorm1, snorm0, tol, "snorm %s", str); + } + + /* unweighted, L = square */ + { + test_multifit_solve(lambda, X, y, NULL, NULL, Lsqr, &rnorm0, &snorm0, c0); + test_multilarge_solve(T, lambda, X, y, NULL, NULL, Lsqr, &rnorm1, &snorm1, c1); + + sprintf(str, "random %s unweighted Lsqr n=%zu p=%zu lambda=%g", + T->name, n, p, lambda); + test_compare_vectors(tol, c0, c1, str); + + gsl_test_rel(rnorm1, rnorm0, tol1, "rnorm %s", str); + gsl_test_rel(snorm1, snorm0, tol, "snorm %s", str); + } + + /* weighted, L = tall */ + { + test_multifit_solve(lambda, X, y, w, NULL, Ltall, &rnorm0, &snorm0, c0); + test_multilarge_solve(T, lambda, X, y, w, NULL, Ltall, &rnorm1, &snorm1, c1); + + sprintf(str, "random %s weighted Ltall n=%zu p=%zu lambda=%g", + T->name, n, p, lambda); + test_compare_vectors(tol, c0, c1, str); + + gsl_test_rel(rnorm1, rnorm0, tol1, "rnorm %s", str); + gsl_test_rel(snorm1, snorm0, tol, "snorm %s", str); + } + + /* unweighted, L = tall */ + { + test_multifit_solve(lambda, X, y, NULL, NULL, Ltall, &rnorm0, &snorm0, c0); + test_multilarge_solve(T, lambda, X, y, NULL, NULL, Ltall, &rnorm1, &snorm1, c1); + + sprintf(str, "random %s unweighted Ltall n=%zu p=%zu lambda=%g", + T->name, n, p, lambda); + test_compare_vectors(tol, c0, c1, str); + + gsl_test_rel(rnorm1, rnorm0, tol1, "rnorm %s", str); + gsl_test_rel(snorm1, snorm0, tol, "snorm %s", str); + } + } + + gsl_matrix_free(X); + gsl_vector_free(y); + gsl_vector_free(c); + gsl_vector_free(w); + gsl_vector_free(diagL); + gsl_matrix_free(Lsqr); + gsl_matrix_free(Ltall); + gsl_vector_free(c0); + gsl_vector_free(c1); +} + +int +main (void) +{ + gsl_rng *r = gsl_rng_alloc(gsl_rng_default); + + gsl_ieee_env_setup(); + + { + const double tol1 = 1.0e-8; + const double tol2 = 1.0e-11; + const size_t n_vals[] = { 40, 356, 501 }; + const size_t p_vals[] = { 40, 213, 345 }; + size_t i; + + for (i = 0; i < 2; ++i) + { + size_t n = n_vals[i]; + size_t p = p_vals[i]; + + /* generate random ill-conditioned LS system and test */ + test_random(gsl_multilarge_linear_normal, n, p, tol1, r); + test_random(gsl_multilarge_linear_tsqr, n, p, tol2, r); + } + } + + gsl_rng_free(r); + + exit (gsl_test_summary ()); +} diff -Nru gsl-doc-1.16/multilarge/tsqr.c gsl-doc-2.3/multilarge/tsqr.c --- gsl-doc-1.16/multilarge/tsqr.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge/tsqr.c 2016-07-07 20:36:11.000000000 +0000 @@ -0,0 +1,705 @@ +/* tsqr.c + * + * Copyright (C) 2015 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* + * This module implements the sequential TSQR algorithm + * described in + * + * [1] Demmel, J., Grigori, L., Hoemmen, M. F., and Langou, J. + * "Communication-optimal parallel and sequential QR and LU factorizations", + * UCB Technical Report No. UCB/EECS-2008-89, 2008. + * + * The algorithm operates on a tall least squares system: + * + * [ A_1 ] x = [ b_1 ] + * [ A_2 ] [ b_2 ] + * [ ... ] [ ... ] + * [ A_k ] [ b_k ] + * + * as follows: + * + * 1. Initialize + * a. [Q_1,R_1] = qr(A_1) + * b. z_1 = Q_1^T b_1 + * 2. Loop i = 2:k + * a. [Q_i,R_i] = qr( [ R_{i-1} ; A_i ] ) + * b. z_i = Q_i^T [ z_{i-1} ; b_i ] + * 3. Output: + * a. R = R_k + * b. Q^T b = z_k + * + * Step 2(a) is optimized to take advantage + * of the sparse structure of the matrix + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef struct +{ + size_t p; /* number of columns of LS matrix */ + int init; /* QR system has been initialized */ + int svd; /* SVD of R has been computed */ + double normb; /* || b || for computing residual norm */ + + gsl_vector *tau; /* Householder scalars, p-by-1 */ + gsl_matrix *R; /* [ R ; A_i ], size p-by-p */ + gsl_vector *QTb; /* [ Q^T b ; b_i ], size p-by-1 */ + + gsl_multifit_linear_workspace *multifit_workspace_p; +} tsqr_state_t; + +static void *tsqr_alloc(const size_t p); +static void tsqr_free(void *vstate); +static int tsqr_reset(void *vstate); +static int tsqr_accumulate(gsl_matrix * A, gsl_vector * b, + void * vstate); +static int tsqr_solve(const double lambda, gsl_vector * x, + double * rnorm, double * snorm, + void * vstate); +static int tsqr_rcond(double * rcond, void * vstate); +static int tsqr_lcurve(gsl_vector * reg_param, gsl_vector * rho, + gsl_vector * eta, void * vstate); +static int tsqr_svd(tsqr_state_t * state); +static double tsqr_householder_transform (double *v0, gsl_vector * v); +static int tsqr_householder_hv (const double tau, const gsl_vector * v, double *w0, + gsl_vector * w); +static int tsqr_householder_hm (const double tau, const gsl_vector * v, gsl_matrix * R, + gsl_matrix * A); +static int tsqr_QR_decomp (gsl_matrix * R, gsl_matrix * A, gsl_vector * tau); + +/* +tsqr_alloc() + Allocate workspace for solving large linear least squares +problems using the TSQR approach + +Inputs: p - number of columns of LS matrix + +Return: pointer to workspace +*/ + +static void * +tsqr_alloc(const size_t p) +{ + tsqr_state_t *state; + + if (p == 0) + { + GSL_ERROR_NULL("p must be a positive integer", + GSL_EINVAL); + } + + state = calloc(1, sizeof(tsqr_state_t)); + if (!state) + { + GSL_ERROR_NULL("failed to allocate tsqr state", GSL_ENOMEM); + } + + state->p = p; + state->init = 0; + state->svd = 0; + state->normb = 0.0; + + state->R = gsl_matrix_alloc(p, p); + if (state->R == NULL) + { + tsqr_free(state); + GSL_ERROR_NULL("failed to allocate R matrix", GSL_ENOMEM); + } + + state->QTb = gsl_vector_alloc(p); + if (state->QTb == NULL) + { + tsqr_free(state); + GSL_ERROR_NULL("failed to allocate QTb vector", GSL_ENOMEM); + } + + state->tau = gsl_vector_alloc(p); + if (state->tau == NULL) + { + tsqr_free(state); + GSL_ERROR_NULL("failed to allocate tau vector", GSL_ENOMEM); + } + + state->multifit_workspace_p = gsl_multifit_linear_alloc(p, p); + if (state->multifit_workspace_p == NULL) + { + tsqr_free(state); + GSL_ERROR_NULL("failed to allocate multifit workspace", GSL_ENOMEM); + } + + return state; +} + +static void +tsqr_free(void *vstate) +{ + tsqr_state_t *state = (tsqr_state_t *) vstate; + + if (state->R) + gsl_matrix_free(state->R); + + if (state->QTb) + gsl_vector_free(state->QTb); + + if (state->tau) + gsl_vector_free(state->tau); + + if (state->multifit_workspace_p) + gsl_multifit_linear_free(state->multifit_workspace_p); + + free(state); +} + +static int +tsqr_reset(void *vstate) +{ + tsqr_state_t *state = (tsqr_state_t *) vstate; + + gsl_matrix_set_zero(state->R); + gsl_vector_set_zero(state->QTb); + state->init = 0; + state->svd = 0; + state->normb = 0.0; + + return GSL_SUCCESS; +} + +/* +tsqr_accumulate() + Add a new block of rows to the QR system + +Inputs: A - new block of rows, n-by-p + b - new rhs vector n-by-1 + vstate - workspace + +Return: success/error + +Notes: +1) On output, the upper triangular portion of state->R(1:p,1:p) +contains current R matrix + +2) state->QTb(1:p) contains current Q^T b vector + +3) A and b are destroyed +*/ + +static int +tsqr_accumulate(gsl_matrix * A, gsl_vector * b, void * vstate) +{ + tsqr_state_t *state = (tsqr_state_t *) vstate; + const size_t n = A->size1; + const size_t p = A->size2; + + if (p != state->p) + { + GSL_ERROR("columns of A do not match workspace", GSL_EBADLEN); + } + else if (n != b->size) + { + GSL_ERROR("A and b have different numbers of rows", GSL_EBADLEN); + } + else if (state->init == 0) + { + int status; + const size_t npmin = GSL_MIN(n, p); + gsl_vector_view tau = gsl_vector_subvector(state->tau, 0, npmin); + gsl_matrix_view R = gsl_matrix_submatrix(state->R, 0, 0, npmin, p); + gsl_matrix_view Av = gsl_matrix_submatrix(A, 0, 0, npmin, p); + gsl_vector_view QTb = gsl_vector_subvector(state->QTb, 0, npmin); + gsl_vector_view bv = gsl_vector_subvector(b, 0, npmin); + + /* this is the first matrix block A_1, compute its (dense) QR decomposition */ + + /* compute QR decomposition of A */ + status = gsl_linalg_QR_decomp(A, &tau.vector); + if (status) + return status; + + /* store upper triangular R factor in state->R */ + gsl_matrix_tricpy('U', 1, &R.matrix, &Av.matrix); + + /* compute ||b|| */ + state->normb = gsl_blas_dnrm2(b); + + /* compute Q^T b and keep the first p elements */ + gsl_linalg_QR_QTvec(A, &tau.vector, b); + gsl_vector_memcpy(&QTb.vector, &bv.vector); + + state->init = 1; + + return GSL_SUCCESS; + } + else + { + int status; + + /* compute QR decomposition of [ R_{i-1} ; A_i ], accounting for + * sparse structure */ + status = tsqr_QR_decomp(state->R, A, state->tau); + if (status) + return status; + + /* update ||b|| */ + state->normb = gsl_hypot(state->normb, gsl_blas_dnrm2(b)); + + /* + * compute Q^T [ QTb_{i - 1}; b_i ], accounting for the sparse + * structure of the Householder reflectors + */ + { + size_t i; + + for (i = 0; i < p; i++) + { + const double ti = gsl_vector_get (state->tau, i); + gsl_vector_const_view h = gsl_matrix_const_column (A, i); + double *wi = gsl_vector_ptr(state->QTb, i); + tsqr_householder_hv (ti, &(h.vector), wi, b); + } + } + + return GSL_SUCCESS; + } +} + +/* +tsqr_solve() + Solve the least squares system: + +chi^2 = || QTb - R x ||^2 + lambda^2 || x ||^2 + +using the SVD of R + +Inputs: lambda - regularization parameter + x - (output) solution vector p-by-1 + rnorm - (output) residual norm ||b - A x|| + snorm - (output) solution norm ||x|| + vstate - workspace + +Return: success/error +*/ + +static int +tsqr_solve(const double lambda, gsl_vector * x, + double * rnorm, double * snorm, + void * vstate) +{ + tsqr_state_t *state = (tsqr_state_t *) vstate; + const size_t p = x->size; + + if (p != state->p) + { + GSL_ERROR("solution vector does not match workspace", GSL_EBADLEN); + } + else + { + int status; + + /* compute SVD of R if not already computed */ + if (state->svd == 0) + { + status = tsqr_svd(state); + if (status) + return status; + } + + status = gsl_multifit_linear_solve(lambda, state->R, state->QTb, x, rnorm, snorm, + state->multifit_workspace_p); + if (status) + return status; + + /* + * Since we're solving a reduced square system above, we need + * to account for the full residual vector: + * + * rnorm = || [ Q1^T b - R x ; Q2^T b ] || + * + * where Q1 is the thin Q factor of X, and Q2 + * are the remaining columns of Q. But: + * + * || Q2^T b ||^2 = ||b||^2 - ||Q1^T b||^2 + * + * so add this into the rnorm calculation + */ + { + double norm_Q1Tb = gsl_blas_dnrm2(state->QTb); + double ratio = norm_Q1Tb / state->normb; + double diff = 1.0 - ratio*ratio; + + if (diff > GSL_DBL_EPSILON) + { + double norm_Q2Tb = state->normb * sqrt(diff); + *rnorm = gsl_hypot(*rnorm, norm_Q2Tb); + } + } + + return GSL_SUCCESS; + } +} + +/* +tsqr_lcurve() + Compute L-curve of least squares system + +Inputs: reg_param - (output) vector of regularization parameters + rho - (output) vector of residual norms + eta - (output) vector of solution norms + vstate - workspace + +Return: success/error +*/ + +static int +tsqr_lcurve(gsl_vector * reg_param, gsl_vector * rho, + gsl_vector * eta, void * vstate) +{ + tsqr_state_t *state = (tsqr_state_t *) vstate; + int status; + + /* compute SVD of R if not already computed */ + if (state->svd == 0) + { + status = tsqr_svd(state); + if (status) + return status; + } + + status = gsl_multifit_linear_lcurve(state->QTb, reg_param, rho, eta, + state->multifit_workspace_p); + + /* now add contribution to rnorm from Q2 factor */ + { + double norm_Q1Tb = gsl_blas_dnrm2(state->QTb); + double ratio = norm_Q1Tb / state->normb; + double diff = 1.0 - ratio*ratio; + size_t i; + + if (diff > GSL_DBL_EPSILON) + { + double norm_Q2Tb = state->normb * sqrt(diff); + + for (i = 0; i < rho->size; ++i) + { + double *rhoi = gsl_vector_ptr(rho, i); + *rhoi = gsl_hypot(*rhoi, norm_Q2Tb); + } + } + } + + return status; +} + +static int +tsqr_rcond(double * rcond, void * vstate) +{ + tsqr_state_t *state = (tsqr_state_t *) vstate; + + /* compute SVD of R if not already computed */ + if (state->svd == 0) + { + int status = tsqr_svd(state); + if (status) + return status; + } + + *rcond = gsl_multifit_linear_rcond(state->multifit_workspace_p); + + return GSL_SUCCESS; +} + +/* +tsqr_svd() + Compute the SVD of the upper triangular +R factor. This allows us to compute the upper/lower +bounds on the regularization parameter and compute +the matrix reciprocal condition number. + +Inputs: state - workspace + +Return: success/error +*/ + +static int +tsqr_svd(tsqr_state_t * state) +{ + int status; + + status = gsl_multifit_linear_svd(state->R, state->multifit_workspace_p); + if (status) + { + GSL_ERROR("error computing SVD of R", status); + } + + state->svd = 1; + + return GSL_SUCCESS; +} + +/* +tsqr_householder_transform() + This routine is an optimized version of +gsl_linalg_householder_transform(), designed for the QR +decomposition of M-by-N matrices of the form: + +T = [ R ] + [ A ] + +where R is N-by-N upper triangular, and A is (M-N)-by-N dense. +This routine computes a householder transformation (tau,v) of a +x so that P x = [ I - tau*v*v' ] x annihilates x(1:n-1). x will +be a subcolumn of the matrix T, and so its structure will be: + +x = [ x0 ] <- 1 nonzero value for the diagonal element of R + [ 0 ] <- N - j - 1 zeros, where j is column of matrix in [0,N-1] + [ x ] <- M-N nonzero values for the dense part A + +Inputs: v0 - pointer to diagonal element of R + on input, v0 = x0; + v - on input, x vector + on output, householder vector v +*/ + +static double +tsqr_householder_transform (double *v0, gsl_vector * v) +{ + /* replace v[0:M-1] with a householder vector (v[0:M-1]) and + coefficient tau that annihilate v[1:M-1] */ + + double alpha, beta, tau ; + + /* compute xnorm = || [ 0 ; v ] ||, ignoring zero part of vector */ + double xnorm = gsl_blas_dnrm2(v); + + if (xnorm == 0) + { + return 0.0; /* tau = 0 */ + } + + alpha = *v0; + beta = - (alpha >= 0.0 ? +1.0 : -1.0) * hypot(alpha, xnorm) ; + tau = (beta - alpha) / beta ; + + { + double s = (alpha - beta); + + if (fabs(s) > GSL_DBL_MIN) + { + gsl_blas_dscal (1.0 / s, v); + *v0 = beta; + } + else + { + gsl_blas_dscal (GSL_DBL_EPSILON / s, v); + gsl_blas_dscal (1.0 / GSL_DBL_EPSILON, v); + *v0 = beta; + } + } + + return tau; +} + +/* +tsqr_householder_hv() + Apply Householder reflector to a vector. The Householder +reflectors are for the QR decomposition of the matrix + + [ R ] + [ A ] + +where R is p-by-p upper triangular and A is n-by-p dense. +Therefore all relevant components of the Householder +vector are stored in the columns of A, while the components +in R are 0, except for diag(R) which are 1. + +The vector w to be transformed is partitioned as + + [ w1 ] + [ w2 ] + +where w1 is p-by-1 and w2 is n-by-1. The w2 portion +of w is transformed by v, but most of w1 remains unchanged +except for the first element, w0 + +Inputs: tau - Householder scalar + v - Householder vector, n-by-1 + w0 - (input/output) + on input, w1(0); + on output, transformed w1(0) + w - (input/output) n-by-1 + on input, vector w2; + on output, P*w2 +*/ + +static int +tsqr_householder_hv (const double tau, const gsl_vector * v, double *w0, gsl_vector * w) +{ + /* applies a householder transformation v to vector w */ + + if (tau == 0) + return GSL_SUCCESS ; + + { + double d1, d; + + /* compute d1 = v(2:n)' w(2:n) */ + gsl_blas_ddot (v, w, &d1); + + /* compute d = v'w = w(1) + d1 since v(1) = 1 */ + d = *w0 + d1; + + /* compute w = w - tau (v) (v'w) */ + *w0 -= tau * d; + gsl_blas_daxpy (-tau * d, v, w); + } + + return GSL_SUCCESS; +} + +/* +tsqr_householder_hm() + Apply Householder reflector to a submatrix of + + [ R ] + [ A ] + +where R is p-by-p upper triangular and A is n-by-p dense. +The diagonal terms of R are already transformed by +tsqr_householder_transform(), so we just need to operate +on the submatrix A(:,i:p) as well as the superdiagonal +elements of R + +Inputs: tau - Householder scalar + v - Householder vector + R - upper triangular submatrix of R, (p-i)-by-(p-i-1) + A - dense submatrix of A, n-by-(p-i) +*/ + +static int +tsqr_householder_hm (const double tau, const gsl_vector * v, gsl_matrix * R, + gsl_matrix * A) +{ + /* applies a householder transformation v,tau to matrix [ R ; A ] */ + + if (tau == 0.0) + { + return GSL_SUCCESS; + } + else + { + size_t j; + + for (j = 0; j < A->size2; j++) + { + double R0j = gsl_matrix_get (R, 0, j); + double wj; + gsl_vector_view A1j = gsl_matrix_column(A, j); + + gsl_blas_ddot (&A1j.vector, v, &wj); + wj += R0j; + + gsl_matrix_set (R, 0, j, R0j - tau * wj); + + gsl_blas_daxpy (-tau * wj, v, &A1j.vector); + } + + return GSL_SUCCESS; + } +} + +/* +tsqr_QR_decomp() + Compute the QR decomposition of the matrix + + [ R ] + [ A ] + +where R is p-by-p upper triangular and A is n-by-p dense. + +Inputs: R - upper triangular p-by-p matrix + A - dense n-by-p matrix + tau - Householder scalars +*/ + +static int +tsqr_QR_decomp (gsl_matrix * R, gsl_matrix * A, gsl_vector * tau) +{ + const size_t n = A->size1; + const size_t p = R->size2; + + if (R->size2 != A->size2) + { + GSL_ERROR ("R and A have different number of columns", GSL_EBADLEN); + } + else if (tau->size != p) + { + GSL_ERROR ("size of tau must be p", GSL_EBADLEN); + } + else + { + size_t i; + + for (i = 0; i < p; i++) + { + /* Compute the Householder transformation to reduce the j-th + column of the matrix [ R ; A ] to a multiple of the j-th unit vector, + taking into account the sparse structure of R */ + + gsl_vector_view c = gsl_matrix_column(A, i); + double *Rii = gsl_matrix_ptr(R, i, i); + double tau_i = tsqr_householder_transform(Rii, &c.vector); + + gsl_vector_set (tau, i, tau_i); + + /* Apply the transformation to the remaining columns and + update the norms */ + + if (i + 1 < p) + { + gsl_matrix_view Rv = gsl_matrix_submatrix(R, i, i + 1, p - i, p - (i + 1)); + gsl_matrix_view Av = gsl_matrix_submatrix(A, 0, i + 1, n, p - (i + 1)); + tsqr_householder_hm (tau_i, &(c.vector), &(Rv.matrix), &(Av.matrix)); + } + } + + return GSL_SUCCESS; + } +} + +static const gsl_multilarge_linear_type tsqr_type = +{ + "tsqr", + tsqr_alloc, + tsqr_reset, + tsqr_accumulate, + tsqr_solve, + tsqr_rcond, + tsqr_lcurve, + tsqr_free +}; + +const gsl_multilarge_linear_type * gsl_multilarge_linear_tsqr = + &tsqr_type; diff -Nru gsl-doc-1.16/multilarge_nlinear/cgst.c gsl-doc-2.3/multilarge_nlinear/cgst.c --- gsl-doc-1.16/multilarge_nlinear/cgst.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/cgst.c 2016-08-10 21:03:42.000000000 +0000 @@ -0,0 +1,382 @@ +/* multilarge_nlinear/cgst.c + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * This module contains an implementation of the Steihaug-Toint + * conjugate gradient algorithm for nonlinear optimization problems. + * This implementation closely follows the following works: + * + * [1] T. Steihaug, The conjugate gradient method and trust regions + * in large scale optimization, SIAM J. Num. Anal., 20(3) 1983. + * + * In the below algorithm, the Jacobian and gradient are scaled + * according to: + * + * J~ = J D^{-1} + * g~ = D^{-1} + * + * prior to any calculations which results in better numerical + * stability when solving for the Gauss-Newton step. The resulting + * step vector is then backtransformed as: + * + * dx = D^{-1} dx~ + */ + +typedef struct +{ + size_t n; /* number of observations */ + size_t p; /* number of parameters */ + gsl_vector *z; /* Gauss-Newton step, size p */ + gsl_vector *r; /* steepest descent step, size p */ + gsl_vector *d; /* steepest descent step, size p */ + gsl_vector *workp; /* workspace, length p */ + gsl_vector *workn; /* workspace, length n */ + double norm_g; /* || g~ || */ + + double cgtol; /* tolerance for CG solution */ + size_t cgmaxit; /* maximum CG iterations */ +} cgst_state_t; + +#include "common.c" + +static void * cgst_alloc (const void * params, const size_t n, const size_t p); +static void cgst_free(void *vstate); +static int cgst_init(const void *vtrust_state, void *vstate); +static int cgst_preloop(const void * vtrust_state, void * vstate); +static int cgst_step(const void * vtrust_state, const double delta, + gsl_vector * dx, void * vstate); +static int cgst_preduction(const void * vtrust_state, const gsl_vector * dx, + double * pred, void * vstate); +static double cgst_calc_tau(const gsl_vector * p, const gsl_vector * d, + const double delta); + +static void * +cgst_alloc (const void * params, const size_t n, const size_t p) +{ + const gsl_multilarge_nlinear_parameters *par = (const gsl_multilarge_nlinear_parameters *) params; + cgst_state_t *state; + + state = calloc(1, sizeof(cgst_state_t)); + if (state == NULL) + { + GSL_ERROR_NULL ("failed to allocate st state", GSL_ENOMEM); + } + + state->z = gsl_vector_alloc(p); + if (state->z == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for z", GSL_ENOMEM); + } + + state->r = gsl_vector_alloc(p); + if (state->r == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for r", GSL_ENOMEM); + } + + state->d = gsl_vector_alloc(p); + if (state->d == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for d", GSL_ENOMEM); + } + + state->workp = gsl_vector_alloc(p); + if (state->workp == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workp", GSL_ENOMEM); + } + + state->workn = gsl_vector_alloc(n); + if (state->workn == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workn", GSL_ENOMEM); + } + + state->n = n; + state->p = p; + + state->cgmaxit = par->max_iter; + if (state->cgmaxit == 0) + state->cgmaxit = n; + + state->cgtol = par->tol; + + return state; +} + +static void +cgst_free(void *vstate) +{ + cgst_state_t *state = (cgst_state_t *) vstate; + + if (state->z) + gsl_vector_free(state->z); + + if (state->r) + gsl_vector_free(state->r); + + if (state->d) + gsl_vector_free(state->d); + + if (state->workp) + gsl_vector_free(state->workp); + + if (state->workn) + gsl_vector_free(state->workn); + + free(state); +} + +/* +cgst_init() + Initialize cgst solver + +Inputs: vtrust_state - trust state + vstate - workspace + +Return: success/error +*/ + +static int +cgst_init(const void *vtrust_state, void *vstate) +{ + /* nothing to do */ + + (void)vtrust_state; + (void)vstate; + + return GSL_SUCCESS; +} + +static int +cgst_preloop(const void * vtrust_state, void * vstate) +{ + /* nothing to do */ + + (void)vtrust_state; + (void)vstate; + + return GSL_SUCCESS; +} + +/* +cgst_step() + Calculate a new step vector + +Return: +GSL_SUCCESS if CG solution found +GSL_EMAXITER if no solution found +*/ + +static int +cgst_step(const void * vtrust_state, const double delta, + gsl_vector * dx, void * vstate) +{ + int status; + const gsl_multilarge_nlinear_trust_state *trust_state = + (const gsl_multilarge_nlinear_trust_state *) vtrust_state; + cgst_state_t *state = (cgst_state_t *) vstate; + const gsl_vector * x = trust_state->x; + const gsl_vector * f = trust_state->f; + const gsl_vector * swts = trust_state->sqrt_wts; + const gsl_vector * diag = trust_state->diag; + const gsl_multilarge_nlinear_parameters * params = trust_state->params; + gsl_multilarge_nlinear_fdf * fdf = trust_state->fdf; + double alpha, beta, u; + double norm_Jd; /* || J D^{-1} d_i || */ + double norm_r; /* || r_i || */ + double norm_rp1; /* || r_{i+1} || */ + size_t i; + + /* Step 1 of [1], section 2; scale gradient as + * + * g~ = D^{-1} g + * + * for better numerical stability + */ + + for (i = 0; i < state->p; ++i) + { + double gi = gsl_vector_get(trust_state->g, i); + double di = gsl_vector_get(trust_state->diag, i); + + gsl_vector_set(state->z, i, 0.0); + gsl_vector_set(state->r, i, -gi / di); + gsl_vector_set(state->d, i, -gi / di); + gsl_vector_set(state->workp, i, gi / di); + } + + /* compute || g~ || */ + state->norm_g = gsl_blas_dnrm2(state->workp); + + for (i = 0; i < state->cgmaxit; ++i) + { + /* workp := D^{-1} d_i */ + gsl_vector_memcpy(state->workp, state->d); + gsl_vector_div(state->workp, trust_state->diag); + + /* workn := J D^{-1} d_i */ + status = gsl_multilarge_nlinear_eval_df(CblasNoTrans, x, f, state->workp, + swts, params->h_df, params->fdtype, + fdf, state->workn, NULL, NULL); + if (status) + return status; + + /* compute || J D^{-1} d_i || */ + norm_Jd = gsl_blas_dnrm2(state->workn); + + /* Step 2 of [1], section 2 */ + if (norm_Jd == 0.0) + { + double tau = cgst_calc_tau(state->z, state->d, delta); + + /* dx = z_i + tau*d_i */ + scaled_addition(1.0, state->z, tau, state->d, dx); + gsl_vector_div(dx, diag); + + return GSL_SUCCESS; + } + + /* Step 3 of [1], section 2 */ + + norm_r = gsl_blas_dnrm2(state->r); + u = norm_r / norm_Jd; + alpha = u * u; + + /* workp <= z_{i+1} = z_i + alpha_i*d_i */ + scaled_addition(1.0, state->z, alpha, state->d, state->workp); + + u = gsl_blas_dnrm2(state->workp); + if (u >= delta) + { + double tau = cgst_calc_tau(state->z, state->d, delta); + + /* dx = z_i + tau*d_i */ + scaled_addition(1.0, state->z, tau, state->d, dx); + gsl_vector_div(dx, diag); + + return GSL_SUCCESS; + } + + /* store z_{i+1} */ + gsl_vector_memcpy(state->z, state->workp); + + /* Step 4 of [1], section 2 */ + + /* compute: workp := alpha B d_i = alpha D^{-1} J^T J D^{-1} d_i, + * where J D^{-1} d_i is already stored in workn */ + status = gsl_multilarge_nlinear_eval_df(CblasTrans, x, f, state->workn, + swts, params->h_df, params->fdtype, + fdf, state->workp, NULL, NULL); + if (status) + return status; + + gsl_vector_div(state->workp, trust_state->diag); + gsl_vector_scale(state->workp, alpha); + + /* r_{i+1} = r_i - alpha*B*d_i */ + gsl_vector_sub(state->r, state->workp); + norm_rp1 = gsl_blas_dnrm2(state->r); + + u = norm_rp1 / state->norm_g; + if (u < state->cgtol) + { + gsl_vector_memcpy(dx, state->z); + gsl_vector_div(dx, diag); + return GSL_SUCCESS; + } + + /* Step 5 of [1], section 2 */ + + /* compute u = ||r_{i+1}|| / || r_i|| */ + u = norm_rp1 / norm_r; + beta = u * u; + + /* compute: d_{i+1} = rt_{i+1} + beta*d_i */ + scaled_addition(1.0, state->r, beta, state->d, state->d); + } + + /* failed to converge, return current estimate */ + gsl_vector_memcpy(dx, state->z); + gsl_vector_div(dx, diag); + + return GSL_EMAXITER; +} + +static int +cgst_preduction(const void * vtrust_state, const gsl_vector * dx, + double * pred, void * vstate) +{ + const gsl_multilarge_nlinear_trust_state *trust_state = + (const gsl_multilarge_nlinear_trust_state *) vtrust_state; + cgst_state_t *state = (cgst_state_t *) vstate; + + *pred = quadratic_preduction(trust_state, dx, state->workn); + + return GSL_SUCCESS; +} + +/* +cgst_calc_tau() + Compute tau > 0 such that: + +|| p + tau*d || = delta +*/ + +static double +cgst_calc_tau(const gsl_vector * p, const gsl_vector * d, + const double delta) +{ + double norm_p, norm_d, u; + double t1, t2, tau; + + norm_p = gsl_blas_dnrm2(p); + norm_d = gsl_blas_dnrm2(d); + + /* compute (p, d) */ + gsl_blas_ddot(p, d, &u); + + t1 = u / (norm_d * norm_d); + t2 = t1*u + (delta + norm_p) * (delta - norm_p); + tau = -t1 + sqrt(t2) / norm_d; + + return tau; +} + +static const gsl_multilarge_nlinear_trs cgst_type = +{ + "steihaug-toint", + cgst_alloc, + cgst_init, + cgst_preloop, + cgst_step, + cgst_preduction, + cgst_free +}; + +const gsl_multilarge_nlinear_trs *gsl_multilarge_nlinear_trs_cgst = &cgst_type; diff -Nru gsl-doc-1.16/multilarge_nlinear/cholesky.c gsl-doc-2.3/multilarge_nlinear/cholesky.c --- gsl-doc-1.16/multilarge_nlinear/cholesky.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/cholesky.c 2016-08-19 17:37:20.000000000 +0000 @@ -0,0 +1,324 @@ +/* multilarge_nlinear/cholesky.c + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* + * This module calculates the solution of the normal equations least squares + * system: + * + * [ J^T J + mu D^T D ] p = -J^T f + * + * using the modified Cholesky decomposition. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "common.c" + +typedef struct +{ + gsl_matrix *JTJ; /* J^T J */ + gsl_matrix *work_JTJ; /* copy of J^T J */ + gsl_vector *rhs; /* -J^T f, size p */ + gsl_permutation *perm; /* permutation matrix for modified Cholesky */ + gsl_vector *work3p; /* workspace, size 3*p */ + gsl_vector *workn; /* workspace, size n */ + double mu; /* current regularization parameter */ +} cholesky_state_t; + +static void *cholesky_alloc (const size_t n, const size_t p); +static int cholesky_init(const void * vtrust_state, void * vstate); +static int cholesky_presolve(const double mu, const void * vtrust_state, void * vstate); +static int cholesky_solve(const gsl_vector * g, gsl_vector *x, + const void * vtrust_state, void *vstate); +static int cholesky_rcond(double * rcond, const gsl_matrix * JTJ, void * vstate); +static int cholesky_covar(const gsl_matrix * JTJ, gsl_matrix * covar, void * vstate); +static int cholesky_solve_rhs(const gsl_vector * b, gsl_vector *x, cholesky_state_t *state); +static int cholesky_regularize(const double mu, const gsl_vector * diag, gsl_matrix * A, + cholesky_state_t * state); + +static void * +cholesky_alloc (const size_t n, const size_t p) +{ + cholesky_state_t *state; + + state = calloc(1, sizeof(cholesky_state_t)); + if (state == NULL) + { + GSL_ERROR_NULL ("failed to allocate cholesky state", GSL_ENOMEM); + } + + state->JTJ = gsl_matrix_alloc(p, p); + if (state->JTJ == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for JTJ", GSL_ENOMEM); + } + + state->work_JTJ = gsl_matrix_alloc(p, p); + if (state->work_JTJ == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for JTJ workspace", + GSL_ENOMEM); + } + + state->rhs = gsl_vector_alloc(p); + if (state->rhs == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for rhs", GSL_ENOMEM); + } + + state->perm = gsl_permutation_alloc(p); + if (state->perm == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for perm", GSL_ENOMEM); + } + + state->work3p = gsl_vector_alloc(3 * p); + if (state->work3p == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for work3p", GSL_ENOMEM); + } + + state->workn = gsl_vector_alloc(n); + if (state->workn == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workn", GSL_ENOMEM); + } + + state->mu = -1.0; + + return state; +} + +static void +cholesky_free(void *vstate) +{ + cholesky_state_t *state = (cholesky_state_t *) vstate; + + if (state->JTJ) + gsl_matrix_free(state->JTJ); + + if (state->work_JTJ) + gsl_matrix_free(state->work_JTJ); + + if (state->rhs) + gsl_vector_free(state->rhs); + + if (state->perm) + gsl_permutation_free(state->perm); + + if (state->work3p) + gsl_vector_free(state->work3p); + + if (state->workn) + gsl_vector_free(state->workn); + + free(state); +} + +static int +cholesky_init(const void * vtrust_state, void * vstate) +{ + const gsl_multilarge_nlinear_trust_state *trust_state = + (const gsl_multilarge_nlinear_trust_state *) vtrust_state; + cholesky_state_t *state = (cholesky_state_t *) vstate; + + /* store J^T J normal equations matrix */ + gsl_matrix_tricpy('L', 1, state->JTJ, trust_state->JTJ); + + return GSL_SUCCESS; +} + +/* +cholesky_presolve() + Compute the modified Cholesky decomposition of J^T J + mu D^T D. +Modified Cholesky is used in case mu = 0 and there are rounding +errors in forming J^T J which could lead to an indefinite matrix. + +Inputs: mu - LM parameter + vstate - workspace + +Notes: +1) On output, state->work_JTJ contains the Cholesky decomposition of +J^T J + mu D^T D +*/ + +static int +cholesky_presolve(const double mu, const void * vtrust_state, void * vstate) +{ + const gsl_multilarge_nlinear_trust_state *trust_state = + (const gsl_multilarge_nlinear_trust_state *) vtrust_state; + cholesky_state_t *state = (cholesky_state_t *) vstate; + gsl_matrix *JTJ = state->work_JTJ; + const gsl_vector *diag = trust_state->diag; + int status; + + /* copy lower triangle of A to workspace */ + gsl_matrix_tricpy('L', 1, JTJ, state->JTJ); + + /* augment normal equations: A -> A + mu D^T D */ + status = cholesky_regularize(mu, diag, JTJ, state); + if (status) + return status; + + /* compute modified Cholesky decomposition */ + status = gsl_linalg_mcholesky_decomp(JTJ, state->perm, NULL); + if (status) + return status; + + state->mu = mu; + + return GSL_SUCCESS; +} + +/* +cholesky_solve() + Compute (J^T J + mu D^T D) x = -g + +where g = J^T f + +Inputs: g - right hand side vector g, size p + x - (output) solution vector + vstate - cholesky workspace +*/ + +static int +cholesky_solve(const gsl_vector * g, gsl_vector *x, + const void * vtrust_state, void *vstate) +{ + cholesky_state_t *state = (cholesky_state_t *) vstate; + int status; + + status = cholesky_solve_rhs(g, x, state); + if (status) + return status; + + /* reverse direction to go downhill */ + gsl_vector_scale(x, -1.0); + + (void) vtrust_state; + + return GSL_SUCCESS; +} + +static int +cholesky_rcond(double * rcond, const gsl_matrix * JTJ, void * vstate) +{ + int status; + cholesky_state_t *state = (cholesky_state_t *) vstate; + double rcond_JTJ; + + /* its possible the current Cholesky decomposition is from the previous + * iteration so do a new one to be sure we use the right Jacobian */ + + /* copy lower triangle of JTJ to workspace */ + gsl_matrix_tricpy('L', 1, state->work_JTJ, JTJ); + + /* compute modified Cholesky decomposition */ + status = gsl_linalg_mcholesky_decomp(state->work_JTJ, state->perm, NULL); + if (status) + return status; + + status = gsl_linalg_mcholesky_rcond(state->work_JTJ, state->perm, &rcond_JTJ, state->work3p); + if (status == GSL_SUCCESS) + *rcond = sqrt(rcond_JTJ); + + return status; +} + +static int +cholesky_covar(const gsl_matrix * JTJ, gsl_matrix * covar, void * vstate) +{ + int status; + cholesky_state_t *state = (cholesky_state_t *) vstate; + + /* its possible the current Cholesky decomposition is from the previous + * iteration so do a new one to be sure we use the right Jacobian */ + + /* copy lower triangle of JTJ to workspace */ + gsl_matrix_tricpy('L', 1, state->work_JTJ, JTJ); + + /* compute modified Cholesky decomposition */ + status = gsl_linalg_mcholesky_decomp(state->work_JTJ, state->perm, NULL); + if (status) + return status; + + status = gsl_linalg_mcholesky_invert(state->work_JTJ, state->perm, covar); + if (status) + return status; + + return GSL_SUCCESS; +} + +/* solve: (J^T J + mu D^T D) x = b */ +static int +cholesky_solve_rhs(const gsl_vector * b, gsl_vector *x, cholesky_state_t *state) +{ + int status; + gsl_matrix *JTJ = state->work_JTJ; + + status = gsl_linalg_mcholesky_solve(JTJ, state->perm, b, x); + if (status) + return status; + + return GSL_SUCCESS; +} + +/* A <- A + mu D^T D */ +static int +cholesky_regularize(const double mu, const gsl_vector * diag, gsl_matrix * A, + cholesky_state_t * state) +{ + (void) state; + + if (mu != 0.0) + { + size_t i; + + for (i = 0; i < diag->size; ++i) + { + double di = gsl_vector_get(diag, i); + double *Aii = gsl_matrix_ptr(A, i, i); + *Aii += mu * di * di; + } + } + + return GSL_SUCCESS; +} + +static const gsl_multilarge_nlinear_solver cholesky_type = +{ + "cholesky", + cholesky_alloc, + cholesky_init, + cholesky_presolve, + cholesky_solve, + cholesky_rcond, + cholesky_covar, + cholesky_free +}; + +const gsl_multilarge_nlinear_solver *gsl_multilarge_nlinear_solver_cholesky = &cholesky_type; diff -Nru gsl-doc-1.16/multilarge_nlinear/common.c gsl-doc-2.3/multilarge_nlinear/common.c --- gsl-doc-1.16/multilarge_nlinear/common.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/common.c 2016-08-10 21:03:42.000000000 +0000 @@ -0,0 +1,131 @@ +/* multilarge_nlinear/common.c + * + * Copyright (C) 2015, 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +static double scaled_enorm (const gsl_vector * d, const gsl_vector * f); +static void scaled_addition (const double alpha, const gsl_vector * x, + const double beta, const gsl_vector * y, + gsl_vector * z); +static double quadratic_preduction(const gsl_multilarge_nlinear_trust_state * trust_state, + const gsl_vector * dx, gsl_vector * work); + +/* compute || diag(d) f || */ +static double +scaled_enorm (const gsl_vector * d, const gsl_vector * f) +{ + double e2 = 0; + size_t i, n = f->size; + for (i = 0; i < n; i++) + { + double fi = gsl_vector_get (f, i); + double di = gsl_vector_get (d, i); + double u = di * fi; + e2 += u * u; + } + return sqrt (e2); +} + +/* compute z = alpha*x + beta*y */ +static void +scaled_addition (const double alpha, const gsl_vector * x, + const double beta, const gsl_vector * y, gsl_vector * z) +{ + const size_t N = z->size; + size_t i; + + for (i = 0; i < N; i++) + { + double xi = gsl_vector_get (x, i); + double yi = gsl_vector_get (y, i); + gsl_vector_set (z, i, alpha * xi + beta * yi); + } +} + +/* +quadratic_preduction() + Calculate predicted reduction based on standard +quadratic model: + +m_k(dx) = Phi(x_k) + dx' g + 1/2 dx' B_k dx + +predicted_reduction = m_k(0) - m_k(dx) + = -2 g^T dx / ||f||^2 - ( ||J*dx|| / ||f|| )^2 + = -2 fhat . beta - ||beta||^2 + +where: beta = J*dx / ||f|| + +Inputs: trust_state - trust state + dx - proposed step, size p + work - workspace, size n + +Return: predicted reduction +*/ + +static double +quadratic_preduction(const gsl_multilarge_nlinear_trust_state * trust_state, + const gsl_vector * dx, gsl_vector * work) +{ + const gsl_vector * f = trust_state->f; + const gsl_multilarge_nlinear_parameters * params = trust_state->params; + const double normf = gsl_blas_dnrm2(f); + double gTdx; /* g^T dx */ + gsl_multilarge_nlinear_fdf * fdf = trust_state->fdf; + double pred_reduction, u; + + /* compute g^T dx */ + gsl_blas_ddot(trust_state->g, dx, &gTdx); + + /* first term: -2 g^T dx / ||f||^2 */ + pred_reduction = -2.0 * gTdx / (normf * normf); + + if (params->solver == gsl_multilarge_nlinear_solver_cholesky) + { + const size_t p = fdf->p; + gsl_vector_view workp = gsl_vector_subvector(work, 0, p); + + /* compute workp = J^T J dx */ + gsl_blas_dsymv(CblasLower, 1.0, trust_state->JTJ, dx, 0.0, &workp.vector); + + /* compute u = dx^T J^T J dx = ||J dx||^2 */ + gsl_blas_ddot(&workp.vector, dx, &u); + + pred_reduction -= u / (normf * normf); + } + else + { + int status; + const gsl_vector * x = trust_state->x; + const gsl_vector * swts = trust_state->sqrt_wts; + + /* compute work = J*dx */ + status = gsl_multilarge_nlinear_eval_df(CblasNoTrans, x, f, dx, + swts, params->h_df, params->fdtype, + fdf, work, NULL, NULL); + if (status) + { + GSL_ERROR_VAL("error computing preduction", status, 0.0); + } + + /* compute u = ||J*dx|| / ||f|| */ + u = gsl_blas_dnrm2(work) / normf; + + pred_reduction -= u * u; + } + + return pred_reduction; +} diff -Nru gsl-doc-1.16/multilarge_nlinear/convergence.c gsl-doc-2.3/multilarge_nlinear/convergence.c --- gsl-doc-1.16/multilarge_nlinear/convergence.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/convergence.c 2016-07-07 20:36:11.000000000 +0000 @@ -0,0 +1,111 @@ +/* multilargenlin/convergence.c + * + * Copyright (C) 2015 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include + +static double scaled_infnorm(const gsl_vector *x, const gsl_vector *g); + +/* +gsl_multilarge_nlinear_test() + Convergence tests for nonlinear least squares minimization + +(1) |dx_i| <= xtol * (1 + |x_i|) for all i +(2) || g .* x ||_inf <= gtol ||f||^2 +(3) ||f(x+dx) - f(x)|| <= ftol * max(||f(x)||, 1) + +Inputs: xtol - tolerance for step size + gtol - tolerance for gradient vector + ftol - tolerance for residual vector + info - (output) + 1 - stopped by small x step + 2 - stopped by small gradient + 3 - stopped by small residual vector change + w - workspace +*/ + +int +gsl_multilarge_nlinear_test (const double xtol, const double gtol, + const double ftol, int *info, + const gsl_multilarge_nlinear_workspace * w) +{ + int status; + double gnorm, fnorm, phi; + + *info = 0; + + status = gsl_multifit_test_delta(w->dx, w->x, xtol*xtol, xtol); + if (status == GSL_SUCCESS) + { + *info = 1; + return GSL_SUCCESS; + } + + /* compute gnorm = max_i( g_i * max(x_i, 1) ) */ + gnorm = scaled_infnorm(w->x, w->g); + + /* compute fnorm = ||f|| */ + fnorm = gsl_blas_dnrm2(w->f); + phi = 0.5 * fnorm * fnorm; + +#if 0 + fprintf(stderr, "gnorm = %.12e fnorm = %.12e gnorm/phi = %.12e\n", gnorm, fnorm, gnorm / phi); +#endif + + if (gnorm <= gtol * GSL_MAX(phi, 1.0)) + { + *info = 2; + return GSL_SUCCESS; + } + +#if 0 + if (dfnorm <= ftol * GSL_MAX(fnorm, 1.0)) + { + *info = 3; + return GSL_SUCCESS; + } +#endif + + return GSL_CONTINUE; +} + +static double +scaled_infnorm(const gsl_vector *x, const gsl_vector *g) +{ + const size_t n = x->size; + size_t i; + double norm = 0.0; + + for (i = 0; i < n; ++i) + { + double xi = GSL_MAX(gsl_vector_get(x, i), 1.0); + double gi = gsl_vector_get(g, i); + double tmp = fabs(xi * gi); + + if (tmp > norm) + norm = tmp; + } + + return norm; +} diff -Nru gsl-doc-1.16/multilarge_nlinear/dogleg.c gsl-doc-2.3/multilarge_nlinear/dogleg.c --- gsl-doc-1.16/multilarge_nlinear/dogleg.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/dogleg.c 2016-09-05 17:11:27.000000000 +0000 @@ -0,0 +1,501 @@ +/* multilarge_nlinear/dogleg.c + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * This module contains an implementation of the Powell dogleg + * algorithm for nonlinear optimization problems. This implementation + * closely follows the following works: + * + * [1] H. B. Nielsen, K. Madsen, Introduction to Optimization and + * Data Fitting, Informatics and Mathematical Modeling, + * Technical University of Denmark (DTU), 2010. + * + * [2] J. E. Dennis and H. H. W. Mei, Two new unconstrained optimization + * algorithms which use function and gradient values, J. Opt. Theory and + * Appl., 28(4), 1979. + */ + +typedef struct +{ + size_t n; /* number of observations */ + size_t p; /* number of parameters */ + gsl_vector *dx_gn; /* Gauss-Newton step, size p */ + gsl_vector *dx_sd; /* steepest descent step, size p */ + double norm_Dgn; /* || D dx_gn || */ + double norm_Dsd; /* || D dx_sd || */ + double norm_Dinvg; /* || D^{-1} g || */ + double norm_JDinv2g; /* || J D^{-2} g || */ + gsl_vector *workp1; /* workspace, length p */ + gsl_vector *workp2; /* workspace, length p */ + gsl_vector *workn; /* workspace, length n */ + + /* tunable parameters */ + gsl_multilarge_nlinear_parameters params; +} dogleg_state_t; + +#include "common.c" + +static void * dogleg_alloc (const void * params, const size_t n, const size_t p); +static void dogleg_free(void *vstate); +static int dogleg_init(const void *vtrust_state, void *vstate); +static int dogleg_preloop(const void * vtrust_state, void * vstate); +static int dogleg_step(const void * vtrust_state, const double delta, + gsl_vector * dx, void * vstate); +static int dogleg_double_step(const void * vtrust_state, const double delta, + gsl_vector * dx, void * vstate); +static int dogleg_preduction(const void * vtrust_state, const gsl_vector * dx, + double * pred, void * vstate); +static int dogleg_calc_gn(const gsl_multilarge_nlinear_trust_state * trust_state, gsl_vector * dx); +static double dogleg_beta(const double t, const double delta, + const gsl_vector * diag, dogleg_state_t * state); + +static void * +dogleg_alloc (const void * params, const size_t n, const size_t p) +{ + dogleg_state_t *state; + + state = calloc(1, sizeof(dogleg_state_t)); + if (state == NULL) + { + GSL_ERROR_NULL ("failed to allocate dogleg state", GSL_ENOMEM); + } + + state->dx_gn = gsl_vector_alloc(p); + if (state->dx_gn == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for dx_gn", GSL_ENOMEM); + } + + state->dx_sd = gsl_vector_alloc(p); + if (state->dx_sd == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for dx_sd", GSL_ENOMEM); + } + + state->workp1 = gsl_vector_alloc(p); + if (state->workp1 == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workp1", GSL_ENOMEM); + } + + state->workp2 = gsl_vector_alloc(p); + if (state->workp2 == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workp2", GSL_ENOMEM); + } + + state->workn = gsl_vector_alloc(n); + if (state->workn == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workn", GSL_ENOMEM); + } + + state->n = n; + state->p = p; + state->params = *(const gsl_multilarge_nlinear_parameters *) params; + + return state; +} + +static void +dogleg_free(void *vstate) +{ + dogleg_state_t *state = (dogleg_state_t *) vstate; + + if (state->dx_gn) + gsl_vector_free(state->dx_gn); + + if (state->dx_sd) + gsl_vector_free(state->dx_sd); + + if (state->workp1) + gsl_vector_free(state->workp1); + + if (state->workp2) + gsl_vector_free(state->workp2); + + if (state->workn) + gsl_vector_free(state->workn); + + free(state); +} + +/* +dogleg_init() + Initialize dogleg solver + +Inputs: vtrust_state - trust state + vstate - workspace + +Return: success/error +*/ + +static int +dogleg_init(const void *vtrust_state, void *vstate) +{ + (void)vtrust_state; + (void)vstate; + + return GSL_SUCCESS; +} + +/* +dogleg_preloop() + Initialize dogleg method prior to iteration loop. +This involves computing the steepest descent step. The +Gauss-Newton step is computed later in the _step() functions +if required. + +Notes: on output, +1) state->dx_sd contains steepest descent step +2) state->norm_Dinvg contains || D^{-1} g || +3) state->norm_JDinv2g contains || J D^{-2} g || +*/ + +static int +dogleg_preloop(const void * vtrust_state, void * vstate) +{ + const gsl_multilarge_nlinear_trust_state *trust_state = + (const gsl_multilarge_nlinear_trust_state *) vtrust_state; + dogleg_state_t *state = (dogleg_state_t *) vstate; + double u; + double alpha; /* ||g||^2 / ||Jg||^2 */ + + /* calculate the steepest descent step */ + + /* compute workp1 = D^{-1} g and its norm */ + gsl_vector_memcpy(state->workp1, trust_state->g); + gsl_vector_div(state->workp1, trust_state->diag); + state->norm_Dinvg = gsl_blas_dnrm2(state->workp1); + + /* compute workp1 = D^{-2} g */ + gsl_vector_div(state->workp1, trust_state->diag); + + /* compute workp2 = J^T J D^{-2} g */ + gsl_blas_dsymv(CblasLower, 1.0, trust_state->JTJ, state->workp1, 0.0, state->workp2); + + /* compute norm_JDinv2g = || J D^{-2} g || */ + gsl_blas_ddot(state->workp1, state->workp2, &u); + state->norm_JDinv2g = sqrt(u); + + u = state->norm_Dinvg / state->norm_JDinv2g; + alpha = u * u; + + /* dx_sd = -alpha D^{-2} g */ + gsl_vector_memcpy(state->dx_sd, state->workp1); + gsl_vector_scale(state->dx_sd, -alpha); + + state->norm_Dsd = scaled_enorm(trust_state->diag, state->dx_sd); + state->norm_Dgn = -1.0; /* computed later if needed */ + + return GSL_SUCCESS; +} + +/* +dogleg_step() + Calculate a new step vector +*/ + +static int +dogleg_step(const void * vtrust_state, const double delta, + gsl_vector * dx, void * vstate) +{ + const gsl_multilarge_nlinear_trust_state *trust_state = + (const gsl_multilarge_nlinear_trust_state *) vtrust_state; + dogleg_state_t *state = (dogleg_state_t *) vstate; + + if (state->norm_Dsd >= delta) + { + /* steepest descent step is outside trust region; + * truncate steepest descent step to trust region boundary */ + gsl_vector_memcpy(dx, state->dx_sd); + gsl_vector_scale(dx, delta / state->norm_Dsd); + } + else + { + /* compute Gauss-Newton step if needed */ + if (state->norm_Dgn < 0.0) + { + int status = dogleg_calc_gn(trust_state, state->dx_gn); + + if (status) + return status; + + /* compute || D dx_gn || */ + state->norm_Dgn = scaled_enorm(trust_state->diag, state->dx_gn); + } + + if (state->norm_Dgn <= delta) + { + /* Gauss-Newton step is inside trust region, use it as final step + * since it is the global minimizer of the quadratic model function */ + gsl_vector_memcpy(dx, state->dx_gn); + } + else + { + /* Gauss-Newton step is outside trust region, but steepest + * descent is inside; use dogleg step */ + + double beta = dogleg_beta(1.0, delta, trust_state->diag, state); + + /* compute: workp1 = dx_gn - dx_sd */ + scaled_addition(1.0, state->dx_gn, -1.0, state->dx_sd, state->workp1); + + /* dx = dx_sd + beta*(dx_gn - dx_sd) */ + scaled_addition(beta, state->workp1, 1.0, state->dx_sd, dx); + } + } + + return GSL_SUCCESS; +} + +/* +dogleg_double_step() + Calculate a new step with double dogleg method. Based on +section 3 of [2] +*/ + +static int +dogleg_double_step(const void * vtrust_state, const double delta, + gsl_vector * dx, void * vstate) +{ + const double alpha_fac = 0.8; /* recommended value from Dennis and Mei */ + const gsl_multilarge_nlinear_trust_state *trust_state = + (const gsl_multilarge_nlinear_trust_state *) vtrust_state; + dogleg_state_t *state = (dogleg_state_t *) vstate; + + if (state->norm_Dsd >= delta) + { + /* steepest descent step is outside trust region; + * truncate steepest descent step to trust region boundary */ + gsl_vector_memcpy(dx, state->dx_sd); + gsl_vector_scale(dx, delta / state->norm_Dsd); + } + else + { + /* compute Gauss-Newton step if needed */ + if (state->norm_Dgn < 0.0) + { + int status = dogleg_calc_gn(trust_state, state->dx_gn); + + if (status) + return status; + + /* compute || D dx_gn || */ + state->norm_Dgn = scaled_enorm(trust_state->diag, state->dx_gn); + } + + if (state->norm_Dgn <= delta) + { + /* Gauss-Newton step is inside trust region, use it as final step + * since it is the global minimizer of the quadratic model function */ + gsl_vector_memcpy(dx, state->dx_gn); + } + else + { + double t, u, v, c; + + /* compute: u = ||D^{-1} g||^2 / ||J D^{-2} g||^2 */ + v = state->norm_Dinvg / state->norm_JDinv2g; + u = v * v; + + /* compute: v = g^T dx_gn */ + gsl_blas_ddot(trust_state->g, state->dx_gn, &v); + + /* compute: c = ||D^{-1} g||^4 / (||J D^{-2} g||^2 * |g^T dx_gn|) */ + c = u * (state->norm_Dinvg / fabs(v)) * state->norm_Dinvg; + + /* compute: t = 1 - alpha_fac*(1-c) */ + t = 1.0 - alpha_fac*(1.0 - c); + + if (t * state->norm_Dgn <= delta) + { + /* set dx = (delta / ||D dx_gn||) dx_gn */ + gsl_vector_memcpy(dx, state->dx_gn); + gsl_vector_scale(dx, delta / state->norm_Dgn); + } + else + { + /* Cauchy point is inside, Gauss-Newton is outside trust region; + * use double dogleg step */ + + double beta = dogleg_beta(t, delta, trust_state->diag, state); + + /* compute: workp1 = t*dx_gn - dx_sd */ + scaled_addition(t, state->dx_gn, -1.0, state->dx_sd, state->workp1); + + /* dx = dx_sd + beta*(t*dx_gn - dx_sd) */ + scaled_addition(beta, state->workp1, 1.0, state->dx_sd, dx); + } + } + } + + return GSL_SUCCESS; +} + +static int +dogleg_preduction(const void * vtrust_state, const gsl_vector * dx, + double * pred, void * vstate) +{ + const gsl_multilarge_nlinear_trust_state *trust_state = + (const gsl_multilarge_nlinear_trust_state *) vtrust_state; + dogleg_state_t *state = (dogleg_state_t *) vstate; + + *pred = quadratic_preduction(trust_state, dx, state->workn); + + return GSL_SUCCESS; +} + +/* +dogleg_calc_gn() + Calculate Gauss-Newton step by solving + +J^T J dx_gn = -J^T f + +Inputs: trust_state - trust state variables + dx - (output) Gauss-Newton step vector + +Return: success/error +*/ + +static int +dogleg_calc_gn(const gsl_multilarge_nlinear_trust_state * trust_state, gsl_vector * dx) +{ + int status; + const gsl_multilarge_nlinear_parameters *params = trust_state->params; + + /* initialize linear least squares solver */ + status = (params->solver->init)(trust_state, trust_state->solver_state); + if (status) + return status; + + /* prepare the linear solver to compute Gauss-Newton step */ + status = (params->solver->presolve)(0.0, trust_state, trust_state->solver_state); + if (status) + return status; + + /* solve: J dx_gn = -f for Gauss-Newton step */ + status = (params->solver->solve)(trust_state->g, + dx, + trust_state, + trust_state->solver_state); + if (status) + return status; + + return GSL_SUCCESS; +} + +/* +dogleg_beta() + This function finds beta in [0,1] such that the step + +dx = dx_sd + beta*(t*dx_gn - dx_sd) + +has norm + +||D dx|| = delta + +beta is the positive root of the quadratic: + +a beta^2 + b beta + c = 0 + +with + +a = ||D(t*dx_gn - dx_sd)||^2 +b = 2 dx_sd^T D^T D (t*dx_gn - dx_sd) +c = ||D dx_sd||^2 - delta^2 + +Inputs: t - amount of Gauss-Newton step to use for dogleg + (= 1 for classical dogleg, <= 1 for double dogleg) + delta - trust region radius + diag - diag(D) scaling matrix + state - workspace +*/ + +static double +dogleg_beta(const double t, const double delta, + const gsl_vector * diag, dogleg_state_t * state) +{ + double beta; + double a, b, c; + + /* compute: workp1 = t*dx_gn - dx_sd */ + scaled_addition(t, state->dx_gn, -1.0, state->dx_sd, state->workp1); + + /* a = || D (t*dx_gn - dx_sd) ||^2 */ + a = scaled_enorm(diag, state->workp1); + a *= a; + + /* workp1 = D^T D (t*dx_gn - dx_sd) */ + gsl_vector_mul(state->workp1, diag); + gsl_vector_mul(state->workp1, diag); + + /* b = 2 dx_sd^T D^T D (t*dx_gn - dx-sd) */ + gsl_blas_ddot(state->dx_sd, state->workp1, &b); + b *= 2.0; + + /* c = || D dx_sd ||^2 - delta^2 = (||D dx_sd|| + delta) (||D dx_sd|| - delta) */ + c = (state->norm_Dsd + delta) * (state->norm_Dsd - delta); + + if (b > 0.0) + { + beta = (-2.0 * c) / (b + sqrt(b*b - 4.0*a*c)); + } + else + { + beta = (-b + sqrt(b*b - 4.0*a*c)) / (2.0 * a); + } + + return beta; +} + +static const gsl_multilarge_nlinear_trs dogleg_type = +{ + "dogleg", + dogleg_alloc, + dogleg_init, + dogleg_preloop, + dogleg_step, + dogleg_preduction, + dogleg_free +}; + +const gsl_multilarge_nlinear_trs *gsl_multilarge_nlinear_trs_dogleg = &dogleg_type; + +static const gsl_multilarge_nlinear_trs ddogleg_type = +{ + "double-dogleg", + dogleg_alloc, + dogleg_init, + dogleg_preloop, + dogleg_double_step, + dogleg_preduction, + dogleg_free +}; + +const gsl_multilarge_nlinear_trs *gsl_multilarge_nlinear_trs_ddogleg = &ddogleg_type; diff -Nru gsl-doc-1.16/multilarge_nlinear/dummy.c gsl-doc-2.3/multilarge_nlinear/dummy.c --- gsl-doc-1.16/multilarge_nlinear/dummy.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/dummy.c 2016-08-19 17:08:56.000000000 +0000 @@ -0,0 +1,113 @@ +/* multilarge_nlinear/dummy.c + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* dummy linear solver */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static void *dummy_alloc (const size_t n, const size_t p); +static int dummy_init(const void * vtrust_state, void * vstate); +static int dummy_presolve(const double mu, const void * vtrust_state, void * vstate); +static int dummy_solve(const gsl_vector * g, gsl_vector *x, + const void * vtrust_state, void *vstate); +static int dummy_rcond(double * rcond, const gsl_matrix * JTJ, void * vstate); +static int dummy_covar(const gsl_matrix * JTJ, gsl_matrix * covar, void * vstate); + +static void * +dummy_alloc (const size_t n, const size_t p) +{ + (void) n; + (void) p; + return NULL; +} + +static void +dummy_free(void *vstate) +{ + (void) vstate; +} + +static int +dummy_init(const void * vtrust_state, void * vstate) +{ + (void) vtrust_state; + (void) vstate; + return GSL_SUCCESS; +} + +static int +dummy_presolve(const double mu, const void * vtrust_state, void * vstate) +{ + (void) mu; + (void) vtrust_state; + (void) vstate; + return GSL_SUCCESS; +} + +static int +dummy_solve(const gsl_vector * g, gsl_vector *x, + const void * vtrust_state, void *vstate) +{ + (void) g; + (void) x; + (void) vtrust_state; + (void) vstate; + return GSL_SUCCESS; +} + +static int +dummy_rcond(double * rcond, const gsl_matrix * JTJ, void * vstate) +{ + (void) vstate; + (void) rcond; + (void) JTJ; + *rcond = 0.0; + return GSL_SUCCESS; +} + +static int +dummy_covar(const gsl_matrix * JTJ, gsl_matrix * covar, void * vstate) +{ + (void) vstate; + (void) JTJ; + gsl_matrix_set_zero(covar); + return GSL_SUCCESS; +} + +static const gsl_multilarge_nlinear_solver dummy_type = +{ + "dummy", + dummy_alloc, + dummy_init, + dummy_presolve, + dummy_solve, + dummy_rcond, + dummy_covar, + dummy_free +}; + +const gsl_multilarge_nlinear_solver *gsl_multilarge_nlinear_solver_none = &dummy_type; diff -Nru gsl-doc-1.16/multilarge_nlinear/fdf.c gsl-doc-2.3/multilarge_nlinear/fdf.c --- gsl-doc-1.16/multilarge_nlinear/fdf.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/fdf.c 2016-10-27 11:20:46.000000000 +0000 @@ -0,0 +1,564 @@ +/* multilarge_nlinear/fdf.c + * + * Copyright (C) 2015, 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include + +gsl_multilarge_nlinear_workspace * +gsl_multilarge_nlinear_alloc (const gsl_multilarge_nlinear_type * T, + const gsl_multilarge_nlinear_parameters * params, + const size_t n, const size_t p) +{ + gsl_multilarge_nlinear_workspace * w; + + if (n < p) + { + GSL_ERROR_VAL ("insufficient data points, n < p", GSL_EINVAL, 0); + } + + w = calloc (1, sizeof (gsl_multilarge_nlinear_workspace)); + if (w == 0) + { + GSL_ERROR_VAL ("failed to allocate space for workspace", + GSL_ENOMEM, 0); + } + + w->n = n; + w->p = p; + w->type = T; + w->fdf = NULL; + w->niter = 0; + w->params = *params; + + /* the cgst method uses its own built-in linear solver */ + if (w->params.trs == gsl_multilarge_nlinear_trs_cgst) + { + w->params.solver = gsl_multilarge_nlinear_solver_none; + } + + w->x = gsl_vector_calloc (p); + if (w->x == 0) + { + gsl_multilarge_nlinear_free (w); + GSL_ERROR_VAL ("failed to allocate space for x", GSL_ENOMEM, 0); + } + + w->f = gsl_vector_calloc (n); + if (w->f == 0) + { + gsl_multilarge_nlinear_free (w); + GSL_ERROR_VAL ("failed to allocate space for f", GSL_ENOMEM, 0); + } + + w->dx = gsl_vector_calloc (p); + if (w->dx == 0) + { + gsl_multilarge_nlinear_free (w); + GSL_ERROR_VAL ("failed to allocate space for dx", GSL_ENOMEM, 0); + } + + w->g = gsl_vector_alloc (p); + if (w->g == 0) + { + gsl_multilarge_nlinear_free (w); + GSL_ERROR_VAL ("failed to allocate space for g", GSL_ENOMEM, 0); + } + + if (w->params.solver == gsl_multilarge_nlinear_solver_cholesky) + { + w->JTJ = gsl_matrix_alloc (p, p); + if (w->JTJ == 0) + { + gsl_multilarge_nlinear_free (w); + GSL_ERROR_VAL ("failed to allocate space for JTJ", GSL_ENOMEM, 0); + } + } + + w->sqrt_wts_work = gsl_vector_calloc (n); + if (w->sqrt_wts_work == 0) + { + gsl_multilarge_nlinear_free (w); + GSL_ERROR_VAL ("failed to allocate space for weights", GSL_ENOMEM, 0); + } + + w->state = (T->alloc)(&(w->params), n, p); + if (w->state == 0) + { + gsl_multilarge_nlinear_free (w); + GSL_ERROR_VAL ("failed to allocate space for state", GSL_ENOMEM, 0); + } + + return w; +} + +void +gsl_multilarge_nlinear_free (gsl_multilarge_nlinear_workspace * w) +{ + RETURN_IF_NULL (w); + + if (w->state) + (w->type->free) (w->state); + + if (w->dx) + gsl_vector_free (w->dx); + + if (w->x) + gsl_vector_free (w->x); + + if (w->f) + gsl_vector_free (w->f); + + if (w->sqrt_wts_work) + gsl_vector_free (w->sqrt_wts_work); + + if (w->g) + gsl_vector_free (w->g); + + if (w->JTJ) + gsl_matrix_free (w->JTJ); + + free (w); +} + +gsl_multilarge_nlinear_parameters +gsl_multilarge_nlinear_default_parameters(void) +{ + gsl_multilarge_nlinear_parameters params; + + params.trs = gsl_multilarge_nlinear_trs_lm; + params.scale = gsl_multilarge_nlinear_scale_more; + params.solver = gsl_multilarge_nlinear_solver_cholesky; + params.fdtype = GSL_MULTILARGE_NLINEAR_FWDIFF; + params.factor_up = 3.0; + params.factor_down = 2.0; + params.avmax = 0.75; + params.h_df = GSL_SQRT_DBL_EPSILON; + params.h_fvv = 0.01; + params.max_iter = 0; + params.tol = 1.0e-6; + + return params; +} + +int +gsl_multilarge_nlinear_init (const gsl_vector * x, + gsl_multilarge_nlinear_fdf * fdf, + gsl_multilarge_nlinear_workspace * w) +{ + return gsl_multilarge_nlinear_winit(x, NULL, fdf, w); +} + +int +gsl_multilarge_nlinear_winit (const gsl_vector * x, + const gsl_vector * wts, + gsl_multilarge_nlinear_fdf * fdf, + gsl_multilarge_nlinear_workspace * w) +{ + const size_t n = w->f->size; + + if (n != fdf->n) + { + GSL_ERROR ("function size does not match workspace", GSL_EBADLEN); + } + else if (w->x->size != x->size) + { + GSL_ERROR ("vector length does not match workspace", GSL_EBADLEN); + } + else if (wts != NULL && n != wts->size) + { + GSL_ERROR ("weight vector length does not match workspace", GSL_EBADLEN); + } + else + { + size_t i; + + /* initialize counters for function and Jacobian evaluations */ + fdf->nevalf = 0; + fdf->nevaldfu = 0; + fdf->nevaldf2 = 0; + fdf->nevalfvv = 0; + + w->fdf = fdf; + gsl_vector_memcpy(w->x, x); + w->niter = 0; + + if (wts) + { + w->sqrt_wts = w->sqrt_wts_work; + + for (i = 0; i < n; ++i) + { + double wi = gsl_vector_get(wts, i); + gsl_vector_set(w->sqrt_wts, i, sqrt(wi)); + } + } + else + { + w->sqrt_wts = NULL; + } + + return (w->type->init) (w->state, w->sqrt_wts, w->fdf, + w->x, w->f, w->g, w->JTJ); + } +} + +int +gsl_multilarge_nlinear_iterate (gsl_multilarge_nlinear_workspace * w) +{ + int status = + (w->type->iterate) (w->state, w->sqrt_wts, w->fdf, + w->x, w->f, w->g, w->JTJ, w->dx); + + w->niter++; + + return status; +} + +double +gsl_multilarge_nlinear_avratio (const gsl_multilarge_nlinear_workspace * w) +{ + return (w->type->avratio) (w->state); +} + +int +gsl_multilarge_nlinear_rcond (double * rcond, const gsl_multilarge_nlinear_workspace * w) +{ + int status = (w->type->rcond) (rcond, w->JTJ, w->state); + return status; +} + +int +gsl_multilarge_nlinear_covar (gsl_matrix * covar, gsl_multilarge_nlinear_workspace * w) +{ + if (covar->size1 != covar->size2) + { + GSL_ERROR ("covariance matrix must be square", GSL_ENOTSQR); + } + else if (covar->size1 != w->p) + { + GSL_ERROR ("covariance matrix does not match workspace", GSL_EBADLEN); + } + else + { + int status = (w->type->covar) (w->JTJ, covar, w->state); + return status; + } +} + +/* +gsl_multilarge_nlinear_driver() + Iterate the nonlinear least squares solver until completion + +Inputs: maxiter - maximum iterations to allow + xtol - tolerance in step x + gtol - tolerance in gradient + ftol - tolerance in ||f|| + callback - callback function to call each iteration + callback_params - parameters to pass to callback function + info - (output) info flag on why iteration terminated + 1 = stopped due to small step size ||dx| + 2 = stopped due to small gradient + 3 = stopped due to small change in f + GSL_ETOLX = ||dx|| has converged to within machine + precision (and xtol is too small) + GSL_ETOLG = ||g||_inf is smaller than machine + precision (gtol is too small) + GSL_ETOLF = change in ||f|| is smaller than machine + precision (ftol is too small) + w - workspace + +Return: +GSL_SUCCESS if converged +GSL_MAXITER if maxiter exceeded without converging +GSL_ENOPROG if no accepted step found on first iteration +*/ + +int +gsl_multilarge_nlinear_driver (const size_t maxiter, + const double xtol, + const double gtol, + const double ftol, + void (*callback)(const size_t iter, void *params, + const gsl_multilarge_nlinear_workspace *w), + void *callback_params, + int *info, + gsl_multilarge_nlinear_workspace * w) +{ + int status; + size_t iter = 0; + + /* call user callback function prior to any iterations + * with initial system state */ + if (callback) + callback(iter, callback_params, w); + + do + { + status = gsl_multilarge_nlinear_iterate (w); + + /* + * If the solver reports no progress on the first iteration, + * then it didn't find a single step to reduce the + * cost function and more iterations won't help so return. + * + * If we get a no progress flag on subsequent iterations, + * it means we did find a good step in a previous iteration, + * so continue iterating since the solver has now reset + * mu to its initial value. + */ + if (status == GSL_ENOPROG && iter == 0) + { + *info = status; + return GSL_EMAXITER; + } + + ++iter; + + if (callback) + callback(iter, callback_params, w); + + /* test for convergence */ + status = gsl_multilarge_nlinear_test(xtol, gtol, ftol, info, w); + } + while (status == GSL_CONTINUE && iter < maxiter); + + /* + * the following error codes mean that the solution has converged + * to within machine precision, so record the error code in info + * and return success + */ + if (status == GSL_ETOLF || status == GSL_ETOLX || status == GSL_ETOLG) + { + *info = status; + status = GSL_SUCCESS; + } + + /* check if max iterations reached */ + if (iter >= maxiter && status != GSL_SUCCESS) + status = GSL_EMAXITER; + + return status; +} /* gsl_multilarge_nlinear_driver() */ + +const char * +gsl_multilarge_nlinear_name (const gsl_multilarge_nlinear_workspace * w) +{ + return w->type->name; +} + +gsl_vector * +gsl_multilarge_nlinear_position (const gsl_multilarge_nlinear_workspace * w) +{ + return w->x; +} + +gsl_vector * +gsl_multilarge_nlinear_residual (const gsl_multilarge_nlinear_workspace * w) +{ + return w->f; +} + +gsl_vector * +gsl_multilarge_nlinear_step (const gsl_multilarge_nlinear_workspace * w) +{ + return w->dx; +} + +size_t +gsl_multilarge_nlinear_niter (const gsl_multilarge_nlinear_workspace * w) +{ + return w->niter; +} + +const char * +gsl_multilarge_nlinear_trs_name (const gsl_multilarge_nlinear_workspace * w) +{ + return w->params.trs->name; +} + +/* +gsl_multilarge_nlinear_eval_f() + Compute residual vector y with user callback function, and apply +weighting transform if given: + +y~ = sqrt(W) y + +Inputs: fdf - callback function + x - model parameters + swts - weight matrix sqrt(W) = sqrt(diag(w1,w2,...,wn)) + set to NULL for unweighted fit + y - (output) (weighted) residual vector + y_i = sqrt(w_i) f_i where f_i is unweighted residual +*/ + +int +gsl_multilarge_nlinear_eval_f(gsl_multilarge_nlinear_fdf *fdf, + const gsl_vector *x, + const gsl_vector *swts, + gsl_vector *y) +{ + int s = ((*((fdf)->f)) (x, fdf->params, y)); + + ++(fdf->nevalf); + + /* y <- sqrt(W) y */ + if (swts) + gsl_vector_mul(y, swts); + + return s; +} + +/* +gsl_multilarge_nlinear_eval_df() + Compute Jacobian matrix-vector product: + +v = J * u + +or + +v = J^T u + +Inputs: TransJ - use J or J^T + x - model parameters + f - residual vector f(x) + u - input vector u + swts - weight matrix W = diag(w1,w2,...,wn) + set to NULL for unweighted fit + h - finite difference step size + fdtype - finite difference method + fdf - callback function + v - (output) vector v + JTJ - (output) matrix J^T J + work - workspace for finite difference, size n +*/ + +int +gsl_multilarge_nlinear_eval_df(const CBLAS_TRANSPOSE_t TransJ, + const gsl_vector *x, + const gsl_vector *f, + const gsl_vector *u, + const gsl_vector *swts, + const double h, + const gsl_multilarge_nlinear_fdtype fdtype, + gsl_multilarge_nlinear_fdf *fdf, + gsl_vector *v, + gsl_matrix *JTJ, + gsl_vector *work) +{ + const size_t n = fdf->n; + const size_t p = fdf->p; + + if (u != NULL && ((TransJ == CblasNoTrans && u->size != p) || + (TransJ == CblasTrans && u->size != n))) + { + GSL_ERROR("u vector has wrong size", GSL_EBADLEN); + } + else if (v != NULL && ((TransJ == CblasNoTrans && v->size != n) || + (TransJ == CblasTrans && v->size != p))) + { + GSL_ERROR("v vector has wrong size", GSL_EBADLEN); + } + else if (JTJ != NULL && ((JTJ->size1 != p) || (JTJ->size2 != p))) + { + GSL_ERROR("JTJ matrix has wrong size", GSL_EBADLEN); + } + else + { + int status; + + if (fdf->df) + { + /* call user-supplied function */ + status = ((*((fdf)->df)) (TransJ, x, u, fdf->params, v, JTJ)); + + if (v) + ++(fdf->nevaldfu); + + if (JTJ) + ++(fdf->nevaldf2); + } + else + { +#if 0 + /* use finite difference Jacobian approximation */ + status = gsl_multilarge_nlinear_df(h, fdtype, x, swts, fdf, f, df, work); +#endif + } + + return status; + } +} + +/* +gsl_multilarge_nlinear_eval_fvv() + Compute second direction derivative vector yvv with user +callback function, and apply weighting transform if given: + +yvv~ = sqrt(W) yvv + +Inputs: h - step size for finite difference, if needed + x - model parameters, size p + v - unscaled geodesic velocity vector, size p + f - residual vector f(x), size n + swts - weight matrix sqrt(W) = sqrt(diag(w1,w2,...,wn)) + set to NULL for unweighted fit + fdf - callback function + yvv - (output) (weighted) second directional derivative vector + yvv_i = sqrt(w_i) fvv_i where f_i is unweighted + work - workspace, size p +*/ + +int +gsl_multilarge_nlinear_eval_fvv(const double h, + const gsl_vector *x, + const gsl_vector *v, + const gsl_vector *f, + const gsl_vector *swts, + gsl_multilarge_nlinear_fdf *fdf, + gsl_vector *yvv, + gsl_vector *work) +{ + int status; + + if (fdf->fvv != NULL) + { + /* call user-supplied function */ + status = ((*((fdf)->fvv)) (x, v, fdf->params, yvv)); + ++(fdf->nevalfvv); + } + else + { +#if 0 + /* use finite difference approximation */ + status = gsl_multilarge_nlinear_fdfvv(h, x, v, f, J, + swts, fdf, yvv, work); +#endif + } + + /* yvv <- sqrt(W) yvv */ + if (swts) + gsl_vector_mul(yvv, swts); + + return status; +} diff -Nru gsl-doc-1.16/multilarge_nlinear/gsl_multilarge_nlinear.h gsl-doc-2.3/multilarge_nlinear/gsl_multilarge_nlinear.h --- gsl-doc-1.16/multilarge_nlinear/gsl_multilarge_nlinear.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/gsl_multilarge_nlinear.h 2016-08-19 17:07:39.000000000 +0000 @@ -0,0 +1,313 @@ +/* multilarge_nlinear/gsl_multilarge_nlinear.h + * + * Copyright (C) 2015, 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_MULTILARGE_NLINEAR_H__ +#define __GSL_MULTILARGE_NLINEAR_H__ + +#include +#include +#include +#include +#include +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +typedef enum +{ + GSL_MULTILARGE_NLINEAR_FWDIFF, + GSL_MULTILARGE_NLINEAR_CTRDIFF +} gsl_multilarge_nlinear_fdtype; + +/* Definition of vector-valued functions and gradient with parameters + based on gsl_vector */ + +typedef struct +{ + int (* f) (const gsl_vector * x, void * params, gsl_vector * f); + int (* df) (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ); + int (* fvv) (const gsl_vector * x, const gsl_vector * v, void * params, + gsl_vector * fvv); + size_t n; /* number of functions */ + size_t p; /* number of independent variables */ + void * params; /* user parameters */ + size_t nevalf; /* number of function evaluations */ + size_t nevaldfu; /* number of Jacobian matrix-vector evaluations */ + size_t nevaldf2; /* number of Jacobian J^T J evaluations */ + size_t nevalfvv; /* number of fvv evaluations */ +} gsl_multilarge_nlinear_fdf; + +/* trust region subproblem method */ +typedef struct +{ + const char *name; + void * (*alloc) (const void * params, const size_t n, const size_t p); + int (*init) (const void * vtrust_state, void * vstate); + int (*preloop) (const void * vtrust_state, void * vstate); + int (*step) (const void * vtrust_state, const double delta, + gsl_vector * dx, void * vstate); + int (*preduction) (const void * vtrust_state, const gsl_vector * dx, + double * pred, void * vstate); + void (*free) (void * vstate); +} gsl_multilarge_nlinear_trs; + +/* scaling matrix specification */ +typedef struct +{ + const char *name; + int (*init) (const gsl_matrix * JTJ, gsl_vector * diag); + int (*update) (const gsl_matrix * JTJ, gsl_vector * diag); +} gsl_multilarge_nlinear_scale; + +/* + * linear least squares solvers - there are three steps to + * solving a least squares problem using a direct method: + * + * 1. init: called once per iteration when a new Jacobian matrix + * is required; form normal equations matrix J^T J + * 2. presolve: called each time a new LM parameter value mu is available; + * used for cholesky method in order to factor + * the (J^T J + mu D^T D) matrix + * 3. solve: solve the least square system for a given rhs + */ +typedef struct +{ + const char *name; + void * (*alloc) (const size_t n, const size_t p); + int (*init) (const void * vtrust_state, void * vstate); + int (*presolve) (const double mu, const void * vtrust_state, void * vstate); + int (*solve) (const gsl_vector * g, gsl_vector * x, + const void * vtrust_state, void * vstate); + int (*rcond) (double * rcond, const gsl_matrix * JTJ, void * vstate); + int (*covar) (const gsl_matrix * JTJ, gsl_matrix * covar, void * vstate); + void (*free) (void * vstate); +} gsl_multilarge_nlinear_solver; + +/* tunable parameters */ +typedef struct +{ + const gsl_multilarge_nlinear_trs *trs; /* trust region subproblem method */ + const gsl_multilarge_nlinear_scale *scale; /* scaling method */ + const gsl_multilarge_nlinear_solver *solver; /* solver method */ + gsl_multilarge_nlinear_fdtype fdtype; /* finite difference method */ + double factor_up; /* factor for increasing trust radius */ + double factor_down; /* factor for decreasing trust radius */ + double avmax; /* max allowed |a|/|v| */ + double h_df; /* step size for finite difference Jacobian */ + double h_fvv; /* step size for finite difference fvv */ + size_t max_iter; /* maximum iterations for trs method */ + double tol; /* tolerance for solving trs */ +} gsl_multilarge_nlinear_parameters; + +typedef struct +{ + const char *name; + void * (*alloc) (const gsl_multilarge_nlinear_parameters * params, + const size_t n, const size_t p); + int (*init) (void * state, const gsl_vector * wts, + gsl_multilarge_nlinear_fdf * fdf, const gsl_vector * x, + gsl_vector * f, gsl_vector * g, gsl_matrix * JTJ); + int (*iterate) (void * state, const gsl_vector * wts, + gsl_multilarge_nlinear_fdf * fdf, gsl_vector * x, + gsl_vector * f, gsl_vector * g, gsl_matrix * JTJ, + gsl_vector * dx); + int (*rcond) (double * rcond, const gsl_matrix * JTJ, void * state); + int (*covar) (const gsl_matrix * JTJ, gsl_matrix * covar, void * state); + double (*avratio) (void * state); + void (*free) (void * state); +} gsl_multilarge_nlinear_type; + +/* current state passed to low-level trust region algorithms */ +typedef struct +{ + const gsl_vector * x; /* parameter values x */ + const gsl_vector * f; /* residual vector f(x) */ + const gsl_vector * g; /* gradient J^T f */ + const gsl_matrix * JTJ; /* matrix J^T J */ + const gsl_vector * diag; /* scaling matrix D */ + const gsl_vector * sqrt_wts; /* sqrt(diag(W)) or NULL for unweighted */ + const double *mu; /* LM parameter */ + const gsl_multilarge_nlinear_parameters * params; + void *solver_state; /* workspace for direct least squares solver */ + gsl_multilarge_nlinear_fdf * fdf; + double *avratio; /* |a| / |v| */ +} gsl_multilarge_nlinear_trust_state; + +typedef struct +{ + const gsl_multilarge_nlinear_type * type; + gsl_multilarge_nlinear_fdf * fdf ; + gsl_vector * x; /* parameter values x */ + gsl_vector * f; /* residual vector f(x) */ + gsl_vector * dx; /* step dx */ + gsl_vector * g; /* gradient J^T f */ + gsl_matrix * JTJ; /* matrix J^T J */ + gsl_vector * sqrt_wts_work; /* sqrt(W) */ + gsl_vector * sqrt_wts; /* ptr to sqrt_wts_work, or NULL if not using weights */ + size_t n; /* number of residuals */ + size_t p; /* number of parameters */ + size_t niter; /* number of iterations performed */ + gsl_multilarge_nlinear_parameters params; + void *state; +} gsl_multilarge_nlinear_workspace; + +gsl_multilarge_nlinear_workspace * +gsl_multilarge_nlinear_alloc (const gsl_multilarge_nlinear_type * T, + const gsl_multilarge_nlinear_parameters * params, + size_t n, size_t p); + +void gsl_multilarge_nlinear_free (gsl_multilarge_nlinear_workspace * w); + +gsl_multilarge_nlinear_parameters gsl_multilarge_nlinear_default_parameters(void); + +int +gsl_multilarge_nlinear_init (const gsl_vector * x, + gsl_multilarge_nlinear_fdf * fdf, + gsl_multilarge_nlinear_workspace * w); + +int gsl_multilarge_nlinear_winit (const gsl_vector * x, + const gsl_vector * wts, + gsl_multilarge_nlinear_fdf * fdf, + gsl_multilarge_nlinear_workspace * w); + +int +gsl_multilarge_nlinear_iterate (gsl_multilarge_nlinear_workspace * w); + +double +gsl_multilarge_nlinear_avratio (const gsl_multilarge_nlinear_workspace * w); + +int +gsl_multilarge_nlinear_rcond (double * rcond, const gsl_multilarge_nlinear_workspace * w); + +int +gsl_multilarge_nlinear_covar (gsl_matrix * covar, gsl_multilarge_nlinear_workspace * w); + +int +gsl_multilarge_nlinear_driver (const size_t maxiter, + const double xtol, + const double gtol, + const double ftol, + void (*callback)(const size_t iter, void *params, + const gsl_multilarge_nlinear_workspace *w), + void *callback_params, + int *info, + gsl_multilarge_nlinear_workspace * w); + +const char * +gsl_multilarge_nlinear_name (const gsl_multilarge_nlinear_workspace * w); + +gsl_vector * +gsl_multilarge_nlinear_position (const gsl_multilarge_nlinear_workspace * w); + +gsl_vector * +gsl_multilarge_nlinear_residual (const gsl_multilarge_nlinear_workspace * w); + +gsl_vector * +gsl_multilarge_nlinear_step (const gsl_multilarge_nlinear_workspace * w); + +size_t +gsl_multilarge_nlinear_niter (const gsl_multilarge_nlinear_workspace * w); + +const char * +gsl_multilarge_nlinear_trs_name (const gsl_multilarge_nlinear_workspace * w); + +int gsl_multilarge_nlinear_eval_f(gsl_multilarge_nlinear_fdf *fdf, + const gsl_vector *x, + const gsl_vector *swts, + gsl_vector *y); + +int +gsl_multilarge_nlinear_eval_df(const CBLAS_TRANSPOSE_t TransJ, + const gsl_vector *x, + const gsl_vector *f, + const gsl_vector *u, + const gsl_vector *swts, + const double h, + const gsl_multilarge_nlinear_fdtype fdtype, + gsl_multilarge_nlinear_fdf *fdf, + gsl_vector *v, + gsl_matrix *JTJ, + gsl_vector *work); + +int +gsl_multilarge_nlinear_eval_fvv(const double h, + const gsl_vector *x, + const gsl_vector *v, + const gsl_vector *f, + const gsl_vector *swts, + gsl_multilarge_nlinear_fdf *fdf, + gsl_vector *yvv, + gsl_vector *work); + +/* convergence.c */ +int +gsl_multilarge_nlinear_test (const double xtol, const double gtol, + const double ftol, int *info, + const gsl_multilarge_nlinear_workspace * w); + +/* fdjac.c */ +int +gsl_multilarge_nlinear_df(const double h, const gsl_multilarge_nlinear_fdtype fdtype, + const gsl_vector *x, const gsl_vector *wts, + gsl_multilarge_nlinear_fdf *fdf, + const gsl_vector *f, gsl_matrix *J, gsl_vector *work); + +/* fdfvv.c */ +int +gsl_multilarge_nlinear_fdfvv(const double h, const gsl_vector *x, const gsl_vector *v, + const gsl_vector *f, const gsl_matrix *J, + const gsl_vector *swts, gsl_multilarge_nlinear_fdf *fdf, + gsl_vector *fvv, gsl_vector *work); + +/* top-level algorithms */ +GSL_VAR const gsl_multilarge_nlinear_type * gsl_multilarge_nlinear_trust; + +/* trust region subproblem methods */ +GSL_VAR const gsl_multilarge_nlinear_trs * gsl_multilarge_nlinear_trs_lm; +GSL_VAR const gsl_multilarge_nlinear_trs * gsl_multilarge_nlinear_trs_lmaccel; +GSL_VAR const gsl_multilarge_nlinear_trs * gsl_multilarge_nlinear_trs_dogleg; +GSL_VAR const gsl_multilarge_nlinear_trs * gsl_multilarge_nlinear_trs_ddogleg; +GSL_VAR const gsl_multilarge_nlinear_trs * gsl_multilarge_nlinear_trs_subspace2D; +GSL_VAR const gsl_multilarge_nlinear_trs * gsl_multilarge_nlinear_trs_cgst; + +/* scaling matrix strategies */ +GSL_VAR const gsl_multilarge_nlinear_scale * gsl_multilarge_nlinear_scale_levenberg; +GSL_VAR const gsl_multilarge_nlinear_scale * gsl_multilarge_nlinear_scale_marquardt; +GSL_VAR const gsl_multilarge_nlinear_scale * gsl_multilarge_nlinear_scale_more; + +/* linear solvers */ +GSL_VAR const gsl_multilarge_nlinear_solver * gsl_multilarge_nlinear_solver_cholesky; +GSL_VAR const gsl_multilarge_nlinear_solver * gsl_multilarge_nlinear_solver_none; + +__END_DECLS + +#endif /* __GSL_MULTILARGE_NLINEAR_H__ */ diff -Nru gsl-doc-1.16/multilarge_nlinear/lm.c gsl-doc-2.3/multilarge_nlinear/lm.c --- gsl-doc-1.16/multilarge_nlinear/lm.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/lm.c 2016-08-10 21:03:42.000000000 +0000 @@ -0,0 +1,364 @@ +/* multilarge_nlinear/lm.c + * + * Copyright (C) 2014, 2015, 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * This module contains an implementation of the Levenberg-Marquardt + * algorithm for nonlinear optimization problems. This implementation + * closely follows the following works: + * + * [1] H. B. Nielsen, K. Madsen, Introduction to Optimization and + * Data Fitting, Informatics and Mathematical Modeling, + * Technical University of Denmark (DTU), 2010. + * + * [2] J. J. More, The Levenberg-Marquardt Algorithm: Implementation + * and Theory, Lecture Notes in Mathematics, v630, 1978. + */ + +typedef struct +{ + size_t n; /* number of observations */ + size_t p; /* number of parameters */ + gsl_vector *fvv; /* D_v^2 f(x), size n */ + gsl_vector *vel; /* geodesic velocity (standard LM step), size p */ + gsl_vector *acc; /* geodesic acceleration, size p */ + gsl_vector *JTfvv; /* J^T fvv, size p */ + gsl_vector *workp; /* workspace, length p */ + gsl_vector *workn; /* workspace, length n */ + + int accel; /* use geodesic acceleration? */ + + /* tunable parameters */ + gsl_multilarge_nlinear_parameters params; +} lm_state_t; + +#include "common.c" + +static void *lm_alloc (const int accel, const void * params, const size_t n, const size_t p); +static void *lm_alloc_noaccel (const void * params, const size_t n, const size_t p); +static void *lm_alloc_accel (const void * params, const size_t n, const size_t p); +static void lm_free(void *vstate); +static int lm_init(const void *vtrust_state, void *vstate); +static int lm_preloop(const void * vtrust_state, void * vstate); +static int lm_step(const void * vtrust_state, const double delta, + gsl_vector * dx, void * vstate); +static int lm_preduction(const void * vtrust_state, const gsl_vector * dx, + double * pred, void * vstate); + +static void * +lm_alloc (const int accel, const void * params, const size_t n, const size_t p) +{ + const gsl_multilarge_nlinear_parameters *mparams = (const gsl_multilarge_nlinear_parameters *) params; + lm_state_t *state; + + state = calloc(1, sizeof(lm_state_t)); + if (state == NULL) + { + GSL_ERROR_NULL ("failed to allocate lm state", GSL_ENOMEM); + } + + state->workp = gsl_vector_alloc(p); + if (state->workp == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workp", GSL_ENOMEM); + } + + state->workn = gsl_vector_alloc(n); + if (state->workn == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workn", GSL_ENOMEM); + } + + state->fvv = gsl_vector_alloc(n); + if (state->fvv == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for fvv", GSL_ENOMEM); + } + + state->vel = gsl_vector_alloc(p); + if (state->vel == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for vel", GSL_ENOMEM); + } + + state->acc = gsl_vector_alloc(p); + if (state->acc == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for acc", GSL_ENOMEM); + } + + state->JTfvv = gsl_vector_alloc(p); + if (state->JTfvv == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for JTfvv", GSL_ENOMEM); + } + + state->n = n; + state->p = p; + state->params = *mparams; + state->accel = accel; + + return state; +} + +static void * +lm_alloc_noaccel (const void * params, const size_t n, const size_t p) +{ + return lm_alloc(0, params, n, p); +} + +static void * +lm_alloc_accel (const void * params, const size_t n, const size_t p) +{ + return lm_alloc(1, params, n, p); +} + +static void +lm_free(void *vstate) +{ + lm_state_t *state = (lm_state_t *) vstate; + + if (state->workp) + gsl_vector_free(state->workp); + + if (state->workn) + gsl_vector_free(state->workn); + + if (state->fvv) + gsl_vector_free(state->fvv); + + if (state->vel) + gsl_vector_free(state->vel); + + if (state->acc) + gsl_vector_free(state->acc); + + if (state->JTfvv) + gsl_vector_free(state->JTfvv); + + free(state); +} + +/* +lm_init() + Initialize LM solver + +Inputs: vtrust_state - trust state + vstate - workspace + +Return: success/error +*/ + +static int +lm_init(const void *vtrust_state, void *vstate) +{ + const gsl_multilarge_nlinear_trust_state *trust_state = + (const gsl_multilarge_nlinear_trust_state *) vtrust_state; + lm_state_t *state = (lm_state_t *) vstate; + + gsl_vector_set_zero(state->vel); + gsl_vector_set_zero(state->acc); + + *(trust_state->avratio) = 0.0; + + return GSL_SUCCESS; +} + +/* +lm_preloop() + Initialize LM method for new Jacobian matrix +*/ + +static int +lm_preloop(const void * vtrust_state, void * vstate) +{ + int status; + const gsl_multilarge_nlinear_trust_state *trust_state = + (const gsl_multilarge_nlinear_trust_state *) vtrust_state; + const gsl_multilarge_nlinear_parameters *params = trust_state->params; + + (void)vstate; + + /* initialize linear least squares solver */ + status = (params->solver->init)(trust_state, trust_state->solver_state); + if (status) + return status; + + return GSL_SUCCESS; +} + +/* +lm_step() + Calculate a new step vector by solving the linear +least squares system: + +[ J ] v = - [ f ] +[ sqrt(mu) D ] [ 0 ] +*/ + +static int +lm_step(const void * vtrust_state, const double delta, + gsl_vector * dx, void * vstate) +{ + int status; + const gsl_multilarge_nlinear_trust_state *trust_state = + (const gsl_multilarge_nlinear_trust_state *) vtrust_state; + lm_state_t *state = (lm_state_t *) vstate; + const gsl_multilarge_nlinear_parameters *params = trust_state->params; + const double mu = *(trust_state->mu); + + (void)delta; + + /* prepare the linear solver with current LM parameter mu */ + status = (params->solver->presolve)(mu, trust_state, trust_state->solver_state); + if (status) + return status; + + /* solve: (J^T J + mu D^T D) v = - J^T f */ + status = (params->solver->solve)(trust_state->g, + state->vel, + trust_state, + trust_state->solver_state); + if (status) + return status; + + if (state->accel) + { + double anorm, vnorm; + + /* compute geodesic acceleration */ + status = gsl_multilarge_nlinear_eval_fvv(params->h_fvv, + trust_state->x, + state->vel, + trust_state->f, + trust_state->sqrt_wts, + trust_state->fdf, + state->fvv, + state->workp); + if (status) + return status; + + /* compute J^T fvv */ + status = gsl_multilarge_nlinear_eval_df(CblasTrans, + trust_state->x, + trust_state->f, + state->fvv, + trust_state->sqrt_wts, + params->h_df, + params->fdtype, + trust_state->fdf, + state->JTfvv, + NULL, + state->workn); + if (status) + return status; + + /* solve: (J^T J + mu D^T D) a = - J^T fvv */ + status = (params->solver->solve)(state->JTfvv, + state->acc, + trust_state, + trust_state->solver_state); + if (status) + return status; + + anorm = gsl_blas_dnrm2(state->acc); + vnorm = gsl_blas_dnrm2(state->vel); + + /* store |a| / |v| */ + *(trust_state->avratio) = anorm / vnorm; + } + + /* compute step dx = v + 1/2 a */ + scaled_addition(1.0, state->vel, 0.5, state->acc, dx); + + return GSL_SUCCESS; +} + +/* +lm_preduction() + Compute predicted reduction using Eq 4.4 of More 1978 +*/ + +static int +lm_preduction(const void * vtrust_state, const gsl_vector * dx, + double * pred, void * vstate) +{ + const gsl_multilarge_nlinear_trust_state *trust_state = + (const gsl_multilarge_nlinear_trust_state *) vtrust_state; + lm_state_t *state = (lm_state_t *) vstate; + const gsl_vector *diag = trust_state->diag; + const gsl_vector *p = state->vel; + const double norm_Dp = scaled_enorm(diag, p); + const double normf = gsl_blas_dnrm2(trust_state->f); + const double mu = *(trust_state->mu); + double u, v; + + (void)dx; + + /* compute workp = J^T J p */ + gsl_blas_dsymv(CblasLower, 1.0, trust_state->JTJ, p, 0.0, state->workp); + + /* compute u = p^T J^T J p = ||J p||^2 */ + gsl_blas_ddot(state->workp, p, &u); + + /* compute u = ||J p||^2 / ||f||^2 */ + u /= normf * normf; + + /* v = ||D p|| / ||f|| */ + v = norm_Dp / normf; + + *pred = u + 2.0 * mu * v * v; + + return GSL_SUCCESS; +} + +static const gsl_multilarge_nlinear_trs lm_type = +{ + "levenberg-marquardt", + lm_alloc_noaccel, + lm_init, + lm_preloop, + lm_step, + lm_preduction, + lm_free +}; + +const gsl_multilarge_nlinear_trs *gsl_multilarge_nlinear_trs_lm = &lm_type; + +static const gsl_multilarge_nlinear_trs lmaccel_type = +{ + "levenberg-marquardt+accel", + lm_alloc_accel, + lm_init, + lm_preloop, + lm_step, + lm_preduction, + lm_free +}; + +const gsl_multilarge_nlinear_trs *gsl_multilarge_nlinear_trs_lmaccel = &lmaccel_type; diff -Nru gsl-doc-1.16/multilarge_nlinear/Makefile.am gsl-doc-2.3/multilarge_nlinear/Makefile.am --- gsl-doc-1.16/multilarge_nlinear/Makefile.am 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/Makefile.am 2016-09-16 14:55:19.000000000 +0000 @@ -0,0 +1,57 @@ +noinst_LTLIBRARIES = libgslmultilarge_nlinear.la + +pkginclude_HEADERS = gsl_multilarge_nlinear.h + +libgslmultilarge_nlinear_la_SOURCES = cgst.c cholesky.c convergence.c dogleg.c dummy.c fdf.c lm.c scaling.c subspace2D.c trust.c + +AM_CPPFLAGS = -I$(top_srcdir) + +noinst_HEADERS = \ +common.c \ +nielsen.c \ +test_fdf.c \ +test_bard.c \ +test_beale.c \ +test_biggs.c \ +test_box.c \ +test_boxbod.c \ +test_brown1.c \ +test_brown2.c \ +test_brown3.c \ +test_eckerle.c \ +test_enso.c \ +test_exp1.c \ +test_hahn1.c \ +test_helical.c \ +test_gaussian.c \ +test_jennrich.c \ +test_kirby2.c \ +test_kowalik.c \ +test_lin1.c \ +test_lin2.c \ +test_lin3.c \ +test_meyer.c \ +test_meyerscal.c \ +test_osborne.c \ +test_penalty1.c \ +test_penalty2.c \ +test_powell1.c \ +test_powell2.c \ +test_powell3.c \ +test_rat42.c \ +test_rat43.c \ +test_rosenbrock.c \ +test_rosenbrocke.c \ +test_roth.c \ +test_thurber.c \ +test_vardim.c \ +test_watson.c \ +test_wood.c \ +test_wnlin.c + +check_PROGRAMS = test + +TESTS = $(check_PROGRAMS) + +test_SOURCES = test.c +test_LDADD = libgslmultilarge_nlinear.la ../test/libgsltest.la ../multilarge/libgslmultilarge.la ../multifit/libgslmultifit.la ../eigen/libgsleigen.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../sys/libgslsys.la ../utils/libutils.la ../rng/libgslrng.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../complex/libgslcomplex.la ../poly/libgslpoly.la diff -Nru gsl-doc-1.16/multilarge_nlinear/Makefile.in gsl-doc-2.3/multilarge_nlinear/Makefile.in --- gsl-doc-1.16/multilarge_nlinear/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -0,0 +1,1087 @@ +# Makefile.in generated by automake 1.13.4 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +check_PROGRAMS = test$(EXEEXT) +subdir = multilarge_nlinear +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp \ + $(noinst_HEADERS) $(pkginclude_HEADERS) \ + $(top_srcdir)/test-driver TODO +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libgslmultilarge_nlinear_la_LIBADD = +am_libgslmultilarge_nlinear_la_OBJECTS = cgst.lo cholesky.lo \ + convergence.lo dogleg.lo dummy.lo fdf.lo lm.lo scaling.lo \ + subspace2D.lo trust.lo +libgslmultilarge_nlinear_la_OBJECTS = \ + $(am_libgslmultilarge_nlinear_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +am_test_OBJECTS = test.$(OBJEXT) +test_OBJECTS = $(am_test_OBJECTS) +test_DEPENDENCIES = libgslmultilarge_nlinear.la ../test/libgsltest.la \ + ../multilarge/libgslmultilarge.la \ + ../multifit/libgslmultifit.la ../eigen/libgsleigen.la \ + ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la \ + ../blas/libgslblas.la ../cblas/libgslcblas.la \ + ../matrix/libgslmatrix.la ../vector/libgslvector.la \ + ../block/libgslblock.la ../sys/libgslsys.la \ + ../utils/libutils.la ../rng/libgslrng.la \ + ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la \ + ../complex/libgslcomplex.la ../poly/libgslpoly.la +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libgslmultilarge_nlinear_la_SOURCES) $(test_SOURCES) +DIST_SOURCES = $(libgslmultilarge_nlinear_la_SOURCES) $(test_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(pkgincludedir)" +HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +AM_RECURSIVE_TARGETS = check recheck +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ +GSL_LIBM = @GSL_LIBM@ +GSL_LIBS = @GSL_LIBS@ +GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ +GSL_LT_VERSION = @GSL_LT_VERSION@ +GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ +GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ +HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ +HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ +HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ +HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ +HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ +HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ +HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ +HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ +HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ +HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ +HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ +HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ +HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ +HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ +HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ +HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ +HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBM = @LIBM@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +noinst_LTLIBRARIES = libgslmultilarge_nlinear.la +pkginclude_HEADERS = gsl_multilarge_nlinear.h +libgslmultilarge_nlinear_la_SOURCES = cgst.c cholesky.c convergence.c dogleg.c dummy.c fdf.c lm.c scaling.c subspace2D.c trust.c +AM_CPPFLAGS = -I$(top_srcdir) +noinst_HEADERS = \ +common.c \ +nielsen.c \ +test_fdf.c \ +test_bard.c \ +test_beale.c \ +test_biggs.c \ +test_box.c \ +test_boxbod.c \ +test_brown1.c \ +test_brown2.c \ +test_brown3.c \ +test_eckerle.c \ +test_enso.c \ +test_exp1.c \ +test_hahn1.c \ +test_helical.c \ +test_gaussian.c \ +test_jennrich.c \ +test_kirby2.c \ +test_kowalik.c \ +test_lin1.c \ +test_lin2.c \ +test_lin3.c \ +test_meyer.c \ +test_meyerscal.c \ +test_osborne.c \ +test_penalty1.c \ +test_penalty2.c \ +test_powell1.c \ +test_powell2.c \ +test_powell3.c \ +test_rat42.c \ +test_rat43.c \ +test_rosenbrock.c \ +test_rosenbrocke.c \ +test_roth.c \ +test_thurber.c \ +test_vardim.c \ +test_watson.c \ +test_wood.c \ +test_wnlin.c + +TESTS = $(check_PROGRAMS) +test_SOURCES = test.c +test_LDADD = libgslmultilarge_nlinear.la ../test/libgsltest.la ../multilarge/libgslmultilarge.la ../multifit/libgslmultifit.la ../eigen/libgsleigen.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../sys/libgslsys.la ../utils/libutils.la ../rng/libgslrng.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../complex/libgslcomplex.la ../poly/libgslpoly.la +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu multilarge_nlinear/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu multilarge_nlinear/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libgslmultilarge_nlinear.la: $(libgslmultilarge_nlinear_la_OBJECTS) $(libgslmultilarge_nlinear_la_DEPENDENCIES) $(EXTRA_libgslmultilarge_nlinear_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(libgslmultilarge_nlinear_la_OBJECTS) $(libgslmultilarge_nlinear_la_LIBADD) $(LIBS) + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) + @rm -f test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cgst.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cholesky.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convergence.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dogleg.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scaling.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/subspace2D.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trust.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgincludeHEADERS: $(pkginclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ + done + +uninstall-pkgincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + else \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all $(check_PROGRAMS) + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +test.log: test$(EXEEXT) + @p='test$(EXEEXT)'; \ + b='test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(pkgincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ + clean-noinstLTLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pkgincludeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pkgincludeHEADERS + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ + clean-checkPROGRAMS clean-generic clean-libtool \ + clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgincludeHEADERS \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + recheck tags tags-am uninstall uninstall-am \ + uninstall-pkgincludeHEADERS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -Nru gsl-doc-1.16/multilarge_nlinear/nielsen.c gsl-doc-2.3/multilarge_nlinear/nielsen.c --- gsl-doc-1.16/multilarge_nlinear/nielsen.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/nielsen.c 2016-08-24 14:31:36.000000000 +0000 @@ -0,0 +1,106 @@ +/* multilarge_nlinear/nielsen.c + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* + * This module contains routines for updating the Levenberg-Marquardt + * damping parameter on each iteration using Nielsen's method: + * + * [1] H. B. Nielsen, K. Madsen, Introduction to Optimization and + * Data Fitting, Informatics and Mathematical Modeling, + * Technical University of Denmark (DTU), 2010. + * + * 3 routines are needed to implement the update procedure: + * + * 1. init - initialize parameter prior to iteration + * 2. accept - update parameter after a step has been accepted + * 3. reject - update parameter after a step has been rejected + */ + +#include +#include +#include +#include +#include +#include +#include + +#define LM_ONE_THIRD (0.333333333333333) + +static int nielsen_init(const gsl_matrix * JTJ, const gsl_vector * diag, + double * mu, long * nu); +static int nielsen_accept(const double rho, double * mu, long * nu); +static int nielsen_reject(double * mu, long * nu); + +static int +nielsen_init(const gsl_matrix * JTJ, const gsl_vector * diag, + double * mu, long * nu) +{ + const double mu0 = 1.0e-3; + size_t i; + double max = -1.0; + + *nu = 2; + + if (JTJ == NULL) + { + /* not using cholesky solver */ + *mu = mu0; + return GSL_SUCCESS; + } + + /* set mu = mu0 * max(diag(J~^T J~)), with J~ = J D^{-1} */ + + for (i = 0; i < JTJ->size1; ++i) + { + double JTJi = gsl_matrix_get(JTJ, i, i); + double di = gsl_vector_get(diag, i); + double val = JTJi / (di * di); + max = GSL_MAX(max, val); + } + + *mu = mu0 * max; + + return GSL_SUCCESS; +} + +static int +nielsen_accept(const double rho, double * mu, long * nu) +{ + double b; + + /* reset nu */ + *nu = 2; + + b = 2.0 * rho - 1.0; + b = 1.0 - b*b*b; + *mu *= GSL_MAX(LM_ONE_THIRD, b); + + return GSL_SUCCESS; +} + +static int +nielsen_reject(double * mu, long * nu) +{ + *mu *= (double) *nu; + + /* nu := 2*nu */ + *nu <<= 1; + + return GSL_SUCCESS; +} diff -Nru gsl-doc-1.16/multilarge_nlinear/scaling.c gsl-doc-2.3/multilarge_nlinear/scaling.c --- gsl-doc-1.16/multilarge_nlinear/scaling.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/scaling.c 2016-08-12 19:45:14.000000000 +0000 @@ -0,0 +1,160 @@ +/* multilarge_nlinear/scaling.c + * + * Copyright (C) 2015, 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* + * This module handles the updating of the scaling matrix D_k in the + * trust region subproblem: + * + * min m_k (dx), || D_k dx || <= Delta_k + * + * where m_k(dx) is a model which approximates the cost function + * F(x_k + dx) near the current iteration point x_k + * + * D_k can be updated according to several different strategies. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +static int init_diag_levenberg(const gsl_matrix * JTJ, gsl_vector * diag); +static int update_diag_levenberg(const gsl_matrix * JTJ, gsl_vector * diag); + +static int init_diag_marquardt(const gsl_matrix * JTJ, gsl_vector * diag); +static int update_diag_marquardt (const gsl_matrix * JTJ, gsl_vector * diag); + +static int init_diag_more(const gsl_matrix * JTJ, gsl_vector * diag); +static int update_diag_more(const gsl_matrix * JTJ, gsl_vector * diag); + +/* Levenberg scaling, D = I */ +static int +init_diag_levenberg(const gsl_matrix * JTJ, gsl_vector * diag) +{ + (void)JTJ; /* avoid unused parameter warning */ + gsl_vector_set_all(diag, 1.0); + return GSL_SUCCESS; +} + +static int +update_diag_levenberg(const gsl_matrix * JTJ, gsl_vector * diag) +{ + (void)JTJ; /* avoid unused parameter warning */ + (void)diag; /* avoid unused parameter warning */ + + /* nothing to do */ + return GSL_SUCCESS; +} + +/* initialize diagonal scaling matrix D according to Marquardt method */ +static int +init_diag_marquardt(const gsl_matrix * JTJ, gsl_vector * diag) +{ + return update_diag_marquardt(JTJ, diag); +} + +/* update diagonal scaling matrix D according to Marquardt method */ +static int +update_diag_marquardt (const gsl_matrix * JTJ, gsl_vector * diag) +{ + const size_t p = JTJ->size2; + size_t j; + + for (j = 0; j < p; j++) + { + double Jjj = gsl_matrix_get(JTJ, j, j); + double norm; + + if (Jjj <= 0.0) + norm = 1.0; + else + norm = sqrt(Jjj); + + gsl_vector_set(diag, j, norm); + } + + return GSL_SUCCESS; +} + +/* initialize diagonal scaling matrix D according to Eq 6.3 of + * More, 1978 */ +static int +init_diag_more(const gsl_matrix * JTJ, gsl_vector * diag) +{ + int status; + + gsl_vector_set_zero(diag); + status = update_diag_more(JTJ, diag); + + return status; +} + +/* update diagonal scaling matrix D according to Eq. 6.3 of + * More, 1978 */ +static int +update_diag_more (const gsl_matrix * JTJ, gsl_vector * diag) +{ + const size_t p = JTJ->size2; + size_t j; + + for (j = 0; j < p; j++) + { + double Jjj = gsl_matrix_get(JTJ, j, j); + double *diagj = gsl_vector_ptr(diag, j); + double norm; + + if (Jjj <= 0.0) + norm = 1.0; + else + norm = sqrt(Jjj); + + *diagj = GSL_MAX(*diagj, norm); + } + + return GSL_SUCCESS; +} + +static const gsl_multilarge_nlinear_scale levenberg_type = +{ + "levenberg", + init_diag_levenberg, + update_diag_levenberg +}; + +static const gsl_multilarge_nlinear_scale marquardt_type = +{ + "marquardt", + init_diag_marquardt, + update_diag_marquardt +}; + +static const gsl_multilarge_nlinear_scale more_type = +{ + "more", + init_diag_more, + update_diag_more +}; + +const gsl_multilarge_nlinear_scale *gsl_multilarge_nlinear_scale_levenberg = &levenberg_type; +const gsl_multilarge_nlinear_scale *gsl_multilarge_nlinear_scale_marquardt = &marquardt_type; +const gsl_multilarge_nlinear_scale *gsl_multilarge_nlinear_scale_more = &more_type; diff -Nru gsl-doc-1.16/multilarge_nlinear/subspace2D.c gsl-doc-2.3/multilarge_nlinear/subspace2D.c --- gsl-doc-1.16/multilarge_nlinear/subspace2D.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/subspace2D.c 2016-09-16 22:47:29.000000000 +0000 @@ -0,0 +1,736 @@ +/* multilarge_nlinear/subspace2D.c + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * This module implements a 2D subspace trust region subproblem method, + * as outlined in + * + * [1] G. A. Shultz, R. B. Schnabel, and R. H. Byrd + * A Family of Trust-Region-Based Algorithms for Unconstrained + * Minimization with Strong Global Convergence Properties, + * SIAM Journal on Numerical Analysis 1985 22:1, 47-67 + * + * [2] R. H. Byrd, R. B. Schnabel, G. A. Shultz, + * Approximate solution of the trust region problem by + * minimization over two-dimensional subspaces, + * Mathematical Programming, January 1988, Volume 40, + * Issue 1, pp 247-263 + * + * The idea is to solve: + * + * min_{dx} g^T dx + 1/2 dx^T B dx + * + * with constraints: + * + * ||D dx|| <= delta + * dx \in span{dx_sd, dx_gn} + * + * where B is the Hessian matrix, B = J^T J + * + * The steps are as follows: + * + * 1. preloop: + * a. Compute Gauss-Newton and steepest descent vectors, + * dx_gn, dx_sd + * b. Compute an orthonormal basis for span(D dx_sd, D dx_gn) by + * constructing W = [ D dx_sd, D dx_gn ] and performing a QR + * decomposition of W. The 2 columns of the Q matrix + * will then span the column space of W. W should have rank 2 + * unless D*dx_sd and D*dx_gn are parallel, in which case it will + * have rank 1. + * c. Precompute various quantities needed for the step calculation + * + * 2. step: + * a. If the Gauss-Newton step is inside the trust region, use it + * b. if W has rank 1, we cannot form a 2D subspace, so in this case + * follow the steepest descent direction to the trust region boundary + * and use that as the step. + * c. In the full rank 2 case, if the GN point is outside the trust region, + * then the minimizer of the objective function lies on the trust + * region boundary. Therefore the minimization problem becomes: + * + * min_{dx} g^T dx + 1/2 dx^T B dx, with ||dx|| = delta, dx = Q * x + * + * where x is a 2-vector to be determined and the columns of Q are + * the orthonormal basis vectors of the subspace. Note the equality + * constraint now instead of <=. In terms of the new variable x, + * the minimization problem becomes: + * + * min_x subg^T x + 1/2 x^T subB x, with ||Q*x|| = ||x|| = delta + * + * where: + * subg = Q^T g (2-by-1) + * subB = Q^T B Q (2-by-2) + * + * This equality constrained 2D minimization problem can be solved + * with a Lagrangian multiplier, which results in a 4th degree polynomial + * equation to be solved. The equation is: + * + * lambda^4 1 + * + lambda^3 2 tr(B) + * + lambda^2 (tr(B)^2 + 2 det(B) - g^T g / delta^2) + * + lambda^1 (2 det(B) tr(B) - 2 g^T adj(B)^T g / delta^2) + * + lambda^0 (det(B)^2 - g^T adj(B)^T adj(B) g / delta^2) + * + * where adj(B) is the adjugate matrix of B. + * + * We then check each of the 4 solutions for lambda to determine which + * lambda results in the smallest objective function value. This x + * is then used to construct the final step: dx = Q*x + */ + +typedef struct +{ + size_t n; /* number of observations */ + size_t p; /* number of parameters */ + gsl_vector *dx_gn; /* Gauss-Newton step, size p */ + gsl_vector *dx_sd; /* steepest descent step, size p */ + double norm_Dgn; /* || D dx_gn || */ + double norm_Dsd; /* || D dx_sd || */ + gsl_vector *workp1; /* workspace, length p */ + gsl_vector *workp2; /* workspace, length p */ + gsl_vector *workn; /* workspace, length n */ + gsl_matrix *W; /* orthonormal basis for 2D subspace, p-by-2 */ + gsl_matrix *work_JTJ; /* D^{-1} J^T J D^{-1}, p-by-p */ + gsl_vector *tau; /* Householder scalars */ + gsl_vector *subg; /* subspace gradient = W^T g, 2-by-1 */ + gsl_matrix *subB; /* subspace Hessian = W^T B W, 2-by-2 */ + gsl_permutation *perm; /* permutation matrix */ + + double trB; /* Tr(subB) */ + double detB; /* det(subB) */ + double normg; /* || subg || */ + double term0; /* g^T adj(B)^T adj(B) g */ + double term1; /* g^T adj(B)^T g */ + + size_t rank; /* rank of [ dx_sd, dx_gn ] matrix */ + + gsl_poly_complex_workspace *poly_p; + + /* tunable parameters */ + gsl_multilarge_nlinear_parameters params; +} subspace2D_state_t; + +#include "common.c" + +static void * subspace2D_alloc (const void * params, const size_t n, const size_t p); +static void subspace2D_free(void *vstate); +static int subspace2D_init(const void *vtrust_state, void *vstate); +static int subspace2D_preloop(const void * vtrust_state, void * vstate); +static int subspace2D_step(const void * vtrust_state, const double delta, + gsl_vector * dx, void * vstate); +static int subspace2D_preduction(const void * vtrust_state, const gsl_vector * dx, + double * pred, void * vstate); +static int subspace2D_solution(const double lambda, gsl_vector * x, + subspace2D_state_t * state); +static double subspace2D_objective(const gsl_vector * x, subspace2D_state_t * state); +static int subspace2D_calc_gn(const gsl_multilarge_nlinear_trust_state * trust_state, gsl_vector * dx); +static int subspace2D_calc_sd(const gsl_multilarge_nlinear_trust_state * trust_state, gsl_vector * dx, + subspace2D_state_t * state); + +static void * +subspace2D_alloc (const void * params, const size_t n, const size_t p) +{ + const gsl_multilarge_nlinear_parameters *par = (const gsl_multilarge_nlinear_parameters *) params; + subspace2D_state_t *state; + + state = calloc(1, sizeof(subspace2D_state_t)); + if (state == NULL) + { + GSL_ERROR_NULL ("failed to allocate subspace2D state", GSL_ENOMEM); + } + + state->dx_gn = gsl_vector_alloc(p); + if (state->dx_gn == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for dx_gn", GSL_ENOMEM); + } + + state->dx_sd = gsl_vector_alloc(p); + if (state->dx_sd == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for dx_sd", GSL_ENOMEM); + } + + state->workp1 = gsl_vector_alloc(p); + if (state->workp1 == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workp1", GSL_ENOMEM); + } + + state->workp2 = gsl_vector_alloc(p); + if (state->workp2 == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workp2", GSL_ENOMEM); + } + + state->workn = gsl_vector_alloc(n); + if (state->workn == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workn", GSL_ENOMEM); + } + + state->W = gsl_matrix_alloc(p, 2); + if (state->W == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for W", GSL_ENOMEM); + } + + state->work_JTJ = gsl_matrix_alloc(p, p); + if (state->work_JTJ == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for work_JTJ", GSL_ENOMEM); + } + + state->tau = gsl_vector_alloc(2); + if (state->tau == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for tau", GSL_ENOMEM); + } + + state->subg = gsl_vector_alloc(2); + if (state->subg == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for subg", GSL_ENOMEM); + } + + state->subB = gsl_matrix_alloc(2, 2); + if (state->subB == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for subB", GSL_ENOMEM); + } + + state->perm = gsl_permutation_alloc(2); + if (state->perm == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for perm", GSL_ENOMEM); + } + + state->poly_p = gsl_poly_complex_workspace_alloc(5); + if (state->poly_p == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for poly workspace", GSL_ENOMEM); + } + + state->n = n; + state->p = p; + state->rank = 0; + state->params = *par; + + return state; +} + +static void +subspace2D_free(void *vstate) +{ + subspace2D_state_t *state = (subspace2D_state_t *) vstate; + + if (state->dx_gn) + gsl_vector_free(state->dx_gn); + + if (state->dx_sd) + gsl_vector_free(state->dx_sd); + + if (state->workp1) + gsl_vector_free(state->workp1); + + if (state->workp2) + gsl_vector_free(state->workp2); + + if (state->workn) + gsl_vector_free(state->workn); + + if (state->W) + gsl_matrix_free(state->W); + + if (state->work_JTJ) + gsl_matrix_free(state->work_JTJ); + + if (state->tau) + gsl_vector_free(state->tau); + + if (state->subg) + gsl_vector_free(state->subg); + + if (state->subB) + gsl_matrix_free(state->subB); + + if (state->perm) + gsl_permutation_free(state->perm); + + if (state->poly_p) + gsl_poly_complex_workspace_free(state->poly_p); + + free(state); +} + +/* +subspace2D_init() + Initialize subspace2D solver + +Inputs: vtrust_state - trust state + vstate - workspace + +Return: success/error +*/ + +static int +subspace2D_init(const void *vtrust_state, void *vstate) +{ + (void)vtrust_state; + (void)vstate; + + return GSL_SUCCESS; +} + +/* +subspace2D_preloop() + Initialize subspace2D method prior to iteration loop. +This involves computing the Gauss-Newton step and +steepest descent step + +Notes: on output, +1) state->dx_gn contains Gauss-Newton step +2) state->dx_sd contains steepest descent step +3) state->rank contains the rank([dx_sd, dx_gn]) +4) if full rank subspace (rank = 2), then: + state->trB = Tr(subB) + state->detB = det(subB) + state->normg = || subg || +*/ + +static int +subspace2D_preloop(const void * vtrust_state, void * vstate) +{ + int status; + const gsl_multilarge_nlinear_trust_state *trust_state = + (const gsl_multilarge_nlinear_trust_state *) vtrust_state; + subspace2D_state_t *state = (subspace2D_state_t *) vstate; + gsl_vector_view v; + double work_data[2]; + gsl_vector_view work = gsl_vector_view_array(work_data, 2); + int signum; + + /* calculate Gauss-Newton step */ + status = subspace2D_calc_gn(trust_state, state->dx_gn); + if (status) + return status; + + /* now calculate the steepest descent step */ + status = subspace2D_calc_sd(trust_state, state->dx_sd, state); + if (status) + return status; + + /* store norms */ + state->norm_Dgn = scaled_enorm(trust_state->diag, state->dx_gn); + state->norm_Dsd = scaled_enorm(trust_state->diag, state->dx_sd); + + /* + * now compute orthonormal basis for span(D dx_sd, D dx_gn) using + * QR decomposition; set W = [ D dx_sd, D dx_gn ] and normalize each + * column to unit magnitude. Then the Q matrix will form a basis for Col(W) + */ + + v = gsl_matrix_column(state->W, 0); + gsl_vector_memcpy(&v.vector, state->dx_sd); + gsl_vector_mul(&v.vector, trust_state->diag); + if (state->norm_Dsd != 0) + gsl_vector_scale(&v.vector, 1.0 / state->norm_Dsd); + + v = gsl_matrix_column(state->W, 1); + gsl_vector_memcpy(&v.vector, state->dx_gn); + gsl_vector_mul(&v.vector, trust_state->diag); + if (state->norm_Dgn != 0) + gsl_vector_scale(&v.vector, 1.0 / state->norm_Dgn); + + /* use a rank revealing QR decomposition in case dx_sd and dx_gn + * are parallel */ + gsl_linalg_QRPT_decomp(state->W, state->tau, state->perm, &signum, &work.vector); + + /* check for parallel dx_sd, dx_gn, in which case rank will be 1 */ + state->rank = gsl_linalg_QRPT_rank(state->W, -1.0); + + if (state->rank == 2) + { + /* + * full rank subspace, compute: + * subg = Q^T D^{-1} g + * subB = Q^T D^{-1} B D^{-1} Q where B = J^T J + */ + const size_t p = state->p; + size_t i, j; + double B00, B10, B11, g0, g1; + + /* compute subg */ + gsl_vector_memcpy(state->workp1, trust_state->g); + gsl_vector_div(state->workp1, trust_state->diag); + gsl_linalg_QR_QTvec(state->W, state->tau, state->workp1); + + g0 = gsl_vector_get(state->workp1, 0); + g1 = gsl_vector_get(state->workp1, 1); + + gsl_vector_set(state->subg, 0, g0); + gsl_vector_set(state->subg, 1, g1); + + /* compute subB */ + + /* compute work_JTJ = D^{-1} J^T J D^{-1} using lower triangle */ + for (j = 0; j < p; ++j) + { + double dj = gsl_vector_get(trust_state->diag, j); + + for (i = j; i < p; ++i) + { + double di = gsl_vector_get(trust_state->diag, i); + double Aij = gsl_matrix_get(trust_state->JTJ, i, j); + + gsl_matrix_set(state->work_JTJ, i, j, Aij / (di * dj)); + } + } + + gsl_matrix_transpose_tricpy('L', 0, state->work_JTJ, state->work_JTJ); + + /* compute work_JTJ = Q^T D^{-1} J^T J D^{-1} Q */ + gsl_linalg_QR_matQ(state->W, state->tau, state->work_JTJ); + gsl_linalg_QR_QTmat(state->W, state->tau, state->work_JTJ); + +#if 0 + /* compute subB = Q^T D^{-1} J^T J D^{-1} Q */ + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &JQ.matrix, 0.0, state->subB); +#endif + + B00 = gsl_matrix_get(state->work_JTJ, 0, 0); + B10 = gsl_matrix_get(state->work_JTJ, 1, 0); + B11 = gsl_matrix_get(state->work_JTJ, 1, 1); + + gsl_matrix_set(state->subB, 0, 0, B00); + gsl_matrix_set(state->subB, 1, 0, B10); + gsl_matrix_set(state->subB, 1, 1, B11); + + state->trB = B00 + B11; + state->detB = B00*B11 - B10*B10; + state->normg = gsl_blas_dnrm2(state->subg); + + /* g^T adj(B)^T adj(B) g */ + state->term0 = (B10*B10 + B11*B11)*g0*g0 - + 2*B10*(B00 + B11)*g0*g1 + + (B00*B00 + B10*B10)*g1*g1; + + /* g^T adj(B)^T g */ + state->term1 = B11 * g0 * g0 + g1 * (B00*g1 - 2*B10*g0); + + } + + return GSL_SUCCESS; +} + + +/* +subspace2D_step() + Calculate a new step with 2D subspace method. Based on [1]. We +seek a vector dx in span{dx_gn, dx_sd} which minimizes the model +function subject to ||dx|| <= delta +*/ + +static int +subspace2D_step(const void * vtrust_state, const double delta, + gsl_vector * dx, void * vstate) +{ + const gsl_multilarge_nlinear_trust_state *trust_state = + (const gsl_multilarge_nlinear_trust_state *) vtrust_state; + subspace2D_state_t *state = (subspace2D_state_t *) vstate; + + if (state->norm_Dgn <= delta) + { + /* Gauss-Newton step is inside trust region, use it as final step + * since it is the global minimizer of the quadratic model function */ + gsl_vector_memcpy(dx, state->dx_gn); + } + else if (state->rank < 2) + { + /* rank of [dx_sd, dx_gn] is 1, meaning dx_sd and dx_gn + * are parallel so we can't form a 2D subspace. Follow the steepest + * descent direction to the trust region boundary as our step */ + gsl_vector_memcpy(dx, state->dx_sd); + gsl_vector_scale(dx, delta / state->norm_Dsd); + } + else + { + int status; + const double delta_sq = delta * delta; + double u = state->normg / delta; + double a[5]; + double z[8]; + +#if 1 + a[0] = state->detB * state->detB - state->term0 / delta_sq; + a[1] = 2 * state->detB * state->trB - 2 * state->term1 / delta_sq; + a[2] = state->trB * state->trB + 2 * state->detB - u * u; + a[3] = 2 * state->trB; + a[4] = 1.0; +#else + double TrB_D = state->trB * delta; + double detB_D = state->detB * delta; + double normg_sq = state->normg * state->normg; + + a[0] = detB_D * detB_D - state->term0; + a[1] = 2 * state->detB * state->trB * delta_sq - 2 * state->term1; + a[2] = TrB_D * TrB_D + 2 * state->detB * delta_sq - normg_sq; + a[3] = 2 * state->trB * delta_sq; + a[4] = delta_sq; +#endif + + status = gsl_poly_complex_solve(a, 5, state->poly_p, z); + if (status == GSL_SUCCESS) + { + size_t i; + double min = 0.0; + int mini = -1; + double x_data[2]; + gsl_vector_view x = gsl_vector_view_array(x_data, 2); + + /* + * loop through all four values of the Lagrange multiplier + * lambda. For each lambda, evaluate the objective function + * with Re(lambda) to determine which lambda minimizes the + * function + */ + for (i = 0; i < 4; ++i) + { + double cost, normx; + + /*fprintf(stderr, "root: %.12e + %.12e i\n", + z[2*i], z[2*i+1]);*/ + + status = subspace2D_solution(z[2*i], &x.vector, state); + if (status != GSL_SUCCESS) + continue; /* singular matrix system */ + + /* ensure ||x|| = delta */ + + normx = gsl_blas_dnrm2(&x.vector); + if (normx == 0.0) + continue; + + gsl_vector_scale(&x.vector, delta / normx); + + /* evaluate objective function to determine minimizer */ + cost = subspace2D_objective(&x.vector, state); + if (mini < 0 || cost < min) + { + mini = (int) i; + min = cost; + } + } + + if (mini < 0) + { + /* did not find minimizer - should not get here */ + return GSL_FAILURE; + } + else + { + /* compute x which minimizes objective function */ + subspace2D_solution(z[2*mini], &x.vector, state); + + /* dx = Q * x */ + gsl_vector_set_zero(dx); + gsl_vector_set(dx, 0, gsl_vector_get(&x.vector, 0)); + gsl_vector_set(dx, 1, gsl_vector_get(&x.vector, 1)); + gsl_linalg_QR_Qvec(state->W, state->tau, dx); + + /* compute final dx by multiplying by D^{-1} */ + gsl_vector_div(dx, trust_state->diag); + } + } + else + { + GSL_ERROR ("gsl_poly_complex_solve failed", status); + } + } + + return GSL_SUCCESS; +} + +static int +subspace2D_preduction(const void * vtrust_state, const gsl_vector * dx, + double * pred, void * vstate) +{ + const gsl_multilarge_nlinear_trust_state *trust_state = + (const gsl_multilarge_nlinear_trust_state *) vtrust_state; + subspace2D_state_t *state = (subspace2D_state_t *) vstate; + + *pred = quadratic_preduction(trust_state, dx, state->workn); + + return GSL_SUCCESS; +} + +/* solve 2D subspace problem: (B + lambda*I) x = -g */ +static int +subspace2D_solution(const double lambda, gsl_vector * x, + subspace2D_state_t * state) +{ + int status = GSL_SUCCESS; + double C_data[4]; + gsl_matrix_view C = gsl_matrix_view_array(C_data, 2, 2); + double B00 = gsl_matrix_get(state->subB, 0, 0); + double B10 = gsl_matrix_get(state->subB, 1, 0); + double B11 = gsl_matrix_get(state->subB, 1, 1); + + /* construct C = B + lambda*I */ + gsl_matrix_set(&C.matrix, 0, 0, B00 + lambda); + gsl_matrix_set(&C.matrix, 1, 0, B10); + gsl_matrix_set(&C.matrix, 0, 1, B10); + gsl_matrix_set(&C.matrix, 1, 1, B11 + lambda); + + /* use modified Cholesky in case C is not positive definite */ + gsl_linalg_mcholesky_decomp(&C.matrix, state->perm, NULL); + gsl_linalg_mcholesky_solve(&C.matrix, state->perm, state->subg, x); + + gsl_vector_scale(x, -1.0); + + return status; +} + +/* evaluate 2D objective function: f(x) = g^T x + 1/2 x^T B x */ +static double +subspace2D_objective(const gsl_vector * x, subspace2D_state_t * state) +{ + double f; + double y_data[2]; + gsl_vector_view y = gsl_vector_view_array(y_data, 2); + + /* compute: y = g + 1/2 B x */ + gsl_vector_memcpy(&y.vector, state->subg); + gsl_blas_dsymv(CblasLower, 0.5, state->subB, x, 1.0, &y.vector); + + /* compute: f = x^T ( g + 1/2 B x ) */ + gsl_blas_ddot(x, &y.vector, &f); + + return f; +} + +/* +subspace2D_calc_gn() + Calculate Gauss-Newton step by solving + +J^T J dx_gn = -J^T f + +Inputs: trust_state - trust state variables + dx - (output) Gauss-Newton step vector + +Return: success/error +*/ + +static int +subspace2D_calc_gn(const gsl_multilarge_nlinear_trust_state * trust_state, gsl_vector * dx) +{ + int status; + const gsl_multilarge_nlinear_parameters *params = trust_state->params; + + /* initialize linear least squares solver */ + status = (params->solver->init)(trust_state, trust_state->solver_state); + if (status) + return status; + + /* prepare the linear solver to compute Gauss-Newton step */ + status = (params->solver->presolve)(0.0, trust_state, trust_state->solver_state); + if (status) + return status; + + /* solve: J dx_gn = -f for Gauss-Newton step */ + status = (params->solver->solve)(trust_state->g, + dx, + trust_state, + trust_state->solver_state); + if (status) + return status; + + return GSL_SUCCESS; +} + +/* +subspace2D_calc_sd() + Calculate steepest descent step, + +dx_sd = - || D^{-1} g ||^2 / || J D^{-2} g ||^2 D^{-2} g + +Inputs: trust_state - trust state variables + dx - (output) steepest descent vector + state - workspace + +Return: success/error +*/ + +static int +subspace2D_calc_sd(const gsl_multilarge_nlinear_trust_state * trust_state, gsl_vector * dx, + subspace2D_state_t * state) +{ + double norm_Dinvg; /* || D^{-1} g || */ + double norm_JDinv2g; /* || J D^{-2} g || */ + double alpha; /* || D^{-1} g ||^2 / || J D^{-2} g ||^2 */ + double u; + + /* compute workp1 = D^{-1} g and its norm */ + gsl_vector_memcpy(state->workp1, trust_state->g); + gsl_vector_div(state->workp1, trust_state->diag); + norm_Dinvg = gsl_blas_dnrm2(state->workp1); + + /* compute workp1 = D^{-2} g */ + gsl_vector_div(state->workp1, trust_state->diag); + + /* compute workp2 = J^T J D^{-2} g */ + gsl_blas_dsymv(CblasLower, 1.0, trust_state->JTJ, state->workp1, 0.0, state->workp2); + + /* compute norm_JDinv2g = || J D^{-2} g || */ + gsl_blas_ddot(state->workp1, state->workp2, &u); + norm_JDinv2g = sqrt(u); + + u = norm_Dinvg / norm_JDinv2g; + alpha = u * u; + + /* dx_sd = -alpha D^{-2} g */ + gsl_vector_memcpy(dx, state->workp1); + gsl_vector_scale(dx, -alpha); + + return GSL_SUCCESS; +} + +static const gsl_multilarge_nlinear_trs subspace2D_type = +{ + "2D-subspace", + subspace2D_alloc, + subspace2D_init, + subspace2D_preloop, + subspace2D_step, + subspace2D_preduction, + subspace2D_free +}; + +const gsl_multilarge_nlinear_trs *gsl_multilarge_nlinear_trs_subspace2D = &subspace2D_type; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_bard.c gsl-doc-2.3/multilarge_nlinear/test_bard.c --- gsl-doc-1.16/multilarge_nlinear/test_bard.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_bard.c 2016-08-12 19:50:35.000000000 +0000 @@ -0,0 +1,161 @@ +#define bard_N 15 +#define bard_P 3 + +static double bard_x0[bard_P] = { 1.0, 1.0, 1.0 }; +static double bard_epsrel = 1.0e-7; + +static double bard_J[bard_N * bard_P]; + +static double bard_Y[bard_N] = { +0.14, 0.18, 0.22, 0.25, 0.29, 0.32, 0.35, 0.39, 0.37, +0.58, 0.73, 0.96, 1.34, 2.10, 4.39 +}; + +static void +bard_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact1 = 8.214877306578963e-03; + const double bard_x1[bard_P] = { 8.241055975623580e-02, + 1.133036092245175, + 2.343695178435405 }; + const double sumsq_exact2 = 17.42869333333333; + const double bard_x2[bard_P] = { 8.406666666666666e-01, + GSL_NAN, /* -inf */ + GSL_NAN }; /* -inf */ + const double *bard_x; + double sumsq_exact; + + if (fabs(x[1]) < 10.0 && fabs(x[2]) < 10.0) + { + bard_x = bard_x1; + sumsq_exact = sumsq_exact1; + } + else + { + bard_x = bard_x2; + sumsq_exact = sumsq_exact2; + } + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < bard_P; ++i) + { + if (!gsl_finite(bard_x[i])) + continue; + + gsl_test_rel(x[i], bard_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +bard_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < bard_N; ++i) + { + double ui = i + 1.0; + double vi = 16.0 - i - 1.0; + double wi = GSL_MIN(ui, vi); + double yi = bard_Y[i]; + double fi = yi - (x1 + (ui / (x2*vi + x3*wi))); + + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +bard_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(bard_J, bard_N, bard_P); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < bard_N; ++i) + { + double ui = i + 1.0; + double vi = 16.0 - i - 1.0; + double wi = GSL_MIN(ui, vi); + double term = x2 * vi + x3 * wi; + + gsl_matrix_set(&J.matrix, i, 0, -1.0); + gsl_matrix_set(&J.matrix, i, 1, ui * vi / (term * term)); + gsl_matrix_set(&J.matrix, i, 2, ui * wi / (term * term)); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +bard_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + size_t i; + + for (i = 0; i < bard_N; ++i) + { + double ui = i + 1.0; + double vi = 16.0 - i - 1.0; + double wi = GSL_MIN(ui, vi); + double term1 = x2 * vi + x3 * wi; + double term2 = v2 * vi + v3 * wi; + double ratio = term2 / term1; + + gsl_vector_set(fvv, i, -2.0 * ui * ratio * ratio / term1); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf bard_func = +{ + bard_f, + bard_df, + bard_fvv, + bard_N, + bard_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem bard_problem = +{ + "bard", + bard_x0, + NULL, + &bard_epsrel, + &bard_checksol, + &bard_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_beale.c gsl-doc-2.3/multilarge_nlinear/test_beale.c --- gsl-doc-1.16/multilarge_nlinear/test_beale.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_beale.c 2016-08-12 19:50:40.000000000 +0000 @@ -0,0 +1,124 @@ +#define beale_N 3 +#define beale_P 2 + +static double beale_x0[beale_P] = { 1.0, 1.0 }; +static double beale_epsrel = 1.0e-12; + +static double beale_J[beale_N * beale_P]; + +static double beale_Y[beale_N] = { 1.5, 2.25, 2.625 }; + +static void +beale_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + const double beale_x[beale_P] = { 3.0, 0.5 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < beale_P; ++i) + { + gsl_test_rel(x[i], beale_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +beale_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + size_t i; + + for (i = 0; i < beale_N; ++i) + { + double yi = beale_Y[i]; + double term = pow(x2, i + 1.0); + double fi = yi - x1*(1.0 - term); + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +beale_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(beale_J, beale_N, beale_P); + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + size_t i; + + for (i = 0; i < beale_N; ++i) + { + double term = pow(x2, (double) i); + + gsl_matrix_set(&J.matrix, i, 0, term*x2 - 1.0); + gsl_matrix_set(&J.matrix, i, 1, (i + 1.0) * x1 * term); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +beale_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + size_t i; + + for (i = 0; i < beale_N; ++i) + { + double term = pow(x2, (double)i - 1.0); + + gsl_vector_set(fvv, i, (i + 1.0) * v2 * term * + (i * v2 * x1 + 2.0 * v1 * x2)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf beale_func = +{ + beale_f, + beale_df, + beale_fvv, + beale_N, + beale_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem beale_problem = +{ + "beale", + beale_x0, + NULL, + &beale_epsrel, + &beale_checksol, + &beale_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_biggs.c gsl-doc-2.3/multilarge_nlinear/test_biggs.c --- gsl-doc-1.16/multilarge_nlinear/test_biggs.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_biggs.c 2016-08-25 16:29:42.000000000 +0000 @@ -0,0 +1,163 @@ +#define biggs_N 6 /* >= p */ +#define biggs_P 6 + +/* dogleg method has trouble converging from recommended starting point, + * so we use an x0 which is a little closer to the true solution */ +/*static double biggs_x0[biggs_P] = { 1.0, 2.0, 1.0, 1.0, 1.0, 1.0 };*/ +static double biggs_x0[biggs_P] = { 1.0, 8.0, 1.0, 2.0, 3.0, 2.0 }; +static double biggs_epsrel = 1.0e-9; + +static double biggs_J[biggs_N * biggs_P]; + +static void +biggs_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ +#if 0 + const double sumsq_exact = 0.0; +#endif + const double biggs_x[biggs_P] = { 1.0, 10.0, 1.0, 5.0, 4.0, 3.0 }; + const double norm_exact = 12.3288280059380; + gsl_vector_const_view v = gsl_vector_const_view_array(biggs_x, biggs_P); + double norm = gsl_blas_dnrm2(&v.vector); + +#if 0 + /* some solvers have difficulty reaching sumsq = 0 to sufficient + * decimal places */ + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); +#endif + + /* + * the solution vector is not unique due to permutations, so test + * the norm instead of individual elements + */ + gsl_test_rel(norm, norm_exact, epsrel, "%s/%s norm", + sname, pname); + + (void)x; /* avoid unused parameter warning */ + (void)sumsq; /* avoid unused parameter warning */ +} + +static int +biggs_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double x5 = gsl_vector_get(x, 4); + double x6 = gsl_vector_get(x, 5); + size_t i; + + for (i = 0; i < biggs_N; ++i) + { + double ti = 0.1 * (i + 1.0); + double yi = exp(-ti) - 5*exp(-10*ti) + 3*exp(-4*ti); + double fi = x3*exp(-ti*x1) - x4*exp(-ti*x2) + x6*exp(-ti*x5) - yi; + + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +biggs_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(biggs_J, biggs_N, biggs_P); + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double x5 = gsl_vector_get(x, 4); + double x6 = gsl_vector_get(x, 5); + size_t i; + + for (i = 0; i < biggs_N; ++i) + { + double ti = 0.1 * (i + 1.0); + + gsl_matrix_set(&J.matrix, i, 0, -ti*x3*exp(-ti*x1)); + gsl_matrix_set(&J.matrix, i, 1, ti*x4*exp(-ti*x2)); + gsl_matrix_set(&J.matrix, i, 2, exp(-ti*x1)); + gsl_matrix_set(&J.matrix, i, 3, -exp(-ti*x2)); + gsl_matrix_set(&J.matrix, i, 4, -ti*x6*exp(-ti*x5)); + gsl_matrix_set(&J.matrix, i, 5, exp(-ti*x5)); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +biggs_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double x5 = gsl_vector_get(x, 4); + double x6 = gsl_vector_get(x, 5); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + double v4 = gsl_vector_get(v, 3); + double v5 = gsl_vector_get(v, 4); + double v6 = gsl_vector_get(v, 5); + size_t i; + + for (i = 0; i < biggs_N; ++i) + { + double ti = 0.1 * (i + 1.0); + double term1 = exp(-ti * x1); + double term2 = exp(-ti * x2); + double term3 = exp(-ti * x5); + + gsl_vector_set(fvv, i, ti * term1 * term2 * term3 * + (v1/(term2*term3)*(-2*v3 + ti*v1*x3) - + v2/(term1*term3)*(-2*v4 + ti*v2*x4) + + v5/(term1*term2)*(-2*v6 + ti*v5*x6))); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf biggs_func = +{ + biggs_f, + biggs_df, + biggs_fvv, + biggs_N, + biggs_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem biggs_problem = +{ + "biggs", + biggs_x0, + NULL, + &biggs_epsrel, + &biggs_checksol, + &biggs_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_boxbod.c gsl-doc-2.3/multilarge_nlinear/test_boxbod.c --- gsl-doc-1.16/multilarge_nlinear/test_boxbod.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_boxbod.c 2016-08-12 19:50:49.000000000 +0000 @@ -0,0 +1,154 @@ +#define boxbod_N 6 +#define boxbod_P 2 + +static double boxbod_x0a[boxbod_P] = { 1.0, 1.0 }; +static double boxbod_x0b[boxbod_P] = { 100.0, 0.75 }; +static double boxbod_epsrel = 1.0e-7; + +static double boxbod_J[boxbod_N * boxbod_P]; + +static double boxbod_sigma[boxbod_P] = { + 1.2354515176E+01, 1.0455993237E-01 +}; + +static double boxbod_X[boxbod_N] = { 1.0, 2.0, 3.0, 5.0, 7.0, 10.0 }; + +static double boxbod_F[boxbod_N] = { 109.0, 149.0, 149.0, 191.0, + 213.0, 224.0 }; + +static void +boxbod_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 1.1680088766E+03; + const double boxbod_x[boxbod_P] = { 2.1380940889E+02, + 5.4723748542E-01 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < boxbod_P; ++i) + { + gsl_test_rel(x[i], boxbod_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + + +static int +boxbod_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[boxbod_P]; + size_t i; + + for (i = 0; i < boxbod_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < boxbod_N; i++) + { + double xi = boxbod_X[i]; + double yi; + + yi = b[0] * (1.0 - exp(-b[1] * xi)); + gsl_vector_set (f, i, yi - boxbod_F[i]); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +boxbod_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(boxbod_J, boxbod_N, boxbod_P); + double b[boxbod_P]; + size_t i; + + for (i = 0; i < boxbod_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < boxbod_N; i++) + { + double xi = boxbod_X[i]; + double term = exp(-b[1] * xi); + + gsl_matrix_set (&J.matrix, i, 0, 1.0 - term); + gsl_matrix_set (&J.matrix, i, 1, b[0] * term * xi); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +boxbod_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + size_t i; + + for (i = 0; i < boxbod_N; i++) + { + double ti = boxbod_X[i]; + double term = exp(-x2 * ti); + + gsl_vector_set(fvv, i, term * ti * v2 * (2*v1 - ti*v2*x1)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf boxbod_func = +{ + boxbod_f, + boxbod_df, + boxbod_fvv, + boxbod_N, + boxbod_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem boxboda_problem = +{ + "nist-boxboda", + boxbod_x0a, + boxbod_sigma, + &boxbod_epsrel, + &boxbod_checksol, + &boxbod_func +}; + +static test_fdf_problem boxbodb_problem = +{ + "nist-boxbodb", + boxbod_x0b, + boxbod_sigma, + &boxbod_epsrel, + &boxbod_checksol, + &boxbod_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_box.c gsl-doc-2.3/multilarge_nlinear/test_box.c --- gsl-doc-1.16/multilarge_nlinear/test_box.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_box.c 2016-08-12 19:50:53.000000000 +0000 @@ -0,0 +1,154 @@ +#define box_N 10 /* can be >= p */ +#define box_P 3 + +/* dogleg method fails with recommended starting point, so use + * a slightly easier x0 */ +/*static double box_x0[box_P] = { 0.0, 10.0, 20.0 };*/ +static double box_x0[box_P] = { 5.0, 10.0, 2.0 }; +static double box_epsrel = 1.0e-12; + +static double box_J[box_N * box_P]; + +static void +box_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + const double sumsq_exact = 0.0; + const double eps = 1.0e-6; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + /* there are 3 possible solution vectors */ + + if (fabs(x[2] - 1.0) < eps) + { + /* case 1: x* = [ 1; 10; 1 ] */ + gsl_test_rel(x[0], 1.0, epsrel, "%s/%s i=0", + sname, pname); + gsl_test_rel(x[1], 10.0, epsrel, "%s/%s i=1", + sname, pname); + gsl_test_rel(x[2], 1.0, epsrel, "%s/%s i=2", + sname, pname); + } + else if (fabs(x[2] + 1.0) < eps) + { + /* case 2: x* = [ 10; 1; -1 ] */ + gsl_test_rel(x[0], 10.0, epsrel, "%s/%s i=0", + sname, pname); + gsl_test_rel(x[1], 1.0, epsrel, "%s/%s i=1", + sname, pname); + gsl_test_rel(x[2], -1.0, epsrel, "%s/%s i=2", + sname, pname); + } + else + { + /* case 3: x* = [ a; a; 0 ] for any a */ + gsl_test_rel(x[0], x[1], epsrel, "%s/%s i=0,1", + sname, pname); + gsl_test_rel(x[2], 0.0, epsrel, "%s/%s i=2", + sname, pname); + } +} + +static int +box_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < box_N; ++i) + { + double ti = (i + 1.0) / 10.0; + double fi = exp(-x1*ti) - exp(-x2*ti) - x3*(exp(-ti) - exp(-10.0*ti)); + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +box_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(box_J, box_N, box_P); + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + size_t i; + + for (i = 0; i < box_N; ++i) + { + double ti = (i + 1.0) / 10.0; + double term1 = exp(-x1*ti); + double term2 = exp(-x2*ti); + double term3 = exp(-10.0*ti) - exp(-ti); + + gsl_matrix_set(&J.matrix, i, 0, -ti*term1); + gsl_matrix_set(&J.matrix, i, 1, ti*term2); + gsl_matrix_set(&J.matrix, i, 2, term3); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +box_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + size_t i; + + for (i = 0; i < box_N; ++i) + { + double ti = (i + 1.0) / 10.0; + double term1 = exp(-x1*ti); + double term2 = exp(-x2*ti); + + gsl_vector_set(fvv, i, ti * ti * (v1*v1*term1 - v2*v2*term2)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf box_func = +{ + box_f, + box_df, + box_fvv, + box_N, + box_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem box_problem = +{ + "box3d", + box_x0, + NULL, + &box_epsrel, + &box_checksol, + &box_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_brown1.c gsl-doc-2.3/multilarge_nlinear/test_brown1.c --- gsl-doc-1.16/multilarge_nlinear/test_brown1.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_brown1.c 2016-08-12 19:50:56.000000000 +0000 @@ -0,0 +1,137 @@ +#define brown1_N 20 +#define brown1_P 4 + +static double brown1_x0[brown1_P] = { 25, 5, -5, -1 }; +static double brown1_epsrel = 1.0e-5; + +static double brown1_J[brown1_N * brown1_P]; + +static void +brown1_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 8.582220162635628e+04; + const double brown1_x[brown1_P] = { + -1.159443990239263e+01, 1.320363005221244e+01, + -4.034395456782477e-01, 2.367789088597534e-01 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < brown1_P; ++i) + { + gsl_test_rel(x[i], brown1_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +brown1_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x0 = gsl_vector_get (x, 0); + double x1 = gsl_vector_get (x, 1); + double x2 = gsl_vector_get (x, 2); + double x3 = gsl_vector_get (x, 3); + size_t i; + + for (i = 0; i < brown1_N; i++) + { + double ti = 0.2 * (i + 1); + double ui = x0 + x1 * ti - exp (ti); + double vi = x2 + x3 * sin (ti) - cos (ti); + + gsl_vector_set (f, i, ui * ui + vi * vi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +brown1_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(brown1_J, brown1_N, brown1_P); + double x0 = gsl_vector_get (x, 0); + double x1 = gsl_vector_get (x, 1); + double x2 = gsl_vector_get (x, 2); + double x3 = gsl_vector_get (x, 3); + size_t i; + + for (i = 0; i < brown1_N; i++) + { + double ti = 0.2 * (i + 1); + double ui = x0 + x1 * ti - exp (ti); + double vi = x2 + x3 * sin (ti) - cos (ti); + + gsl_matrix_set (&J.matrix, i, 0, 2 * ui); + gsl_matrix_set (&J.matrix, i, 1, 2 * ui * ti); + gsl_matrix_set (&J.matrix, i, 2, 2 * vi); + gsl_matrix_set (&J.matrix, i, 3, 2 * vi * sin (ti)); + + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +brown1_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double v0 = gsl_vector_get (v, 0); + double v1 = gsl_vector_get (v, 1); + double v2 = gsl_vector_get (v, 2); + double v3 = gsl_vector_get (v, 3); + size_t i; + + for (i = 0; i < brown1_N; i++) + { + double ti = 0.2 * (i + 1); + double term1 = v0 + ti*v1; + double term2 = v3*sin(ti); + + gsl_vector_set (fvv, i, 2.0 * (term1*term1 + v2*v2 + + term2 * (2*v2 + term2))); + } + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf brown1_func = +{ + brown1_f, + brown1_df, + brown1_fvv, + brown1_N, + brown1_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem brown1_problem = +{ + "brown_dennis", + brown1_x0, + NULL, + &brown1_epsrel, + &brown1_checksol, + &brown1_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_brown2.c gsl-doc-2.3/multilarge_nlinear/test_brown2.c --- gsl-doc-1.16/multilarge_nlinear/test_brown2.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_brown2.c 2016-08-12 19:50:59.000000000 +0000 @@ -0,0 +1,181 @@ +#define brown2_N 5 +#define brown2_P 5 + +static double brown2_x0[brown2_P] = { 0.5, 0.5, 0.5, 0.5, 0.5 }; +static double brown2_epsrel = 1.0e-12; + +static double brown2_J[brown2_N * brown2_P]; + +static void +brown2_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + double sumsq_exact; + double alpha; + const double p = (double) brown2_P; + double alpha1mp, lhs, lastel; + + if (sumsq < 0.5) + { + /* sumsq = 0 case */ + + sumsq_exact = 0.0; + alpha = x[0]; + alpha1mp = pow(alpha, 1.0 - p); + lhs = p*pow(alpha, p) - (p + 1)/alpha1mp; + lastel = alpha1mp; + + gsl_test_rel(lhs, -1.0, epsrel, "%s/%s alpha lhs", + sname, pname); + } + else + { + /* sumsq = 1 case */ + + sumsq_exact = 1.0; + alpha = 0.0; + lastel = p + 1.0; + } + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 1; i < brown2_P - 1; ++i) + { + gsl_test_rel(x[i], alpha, epsrel, "%s/%s i=%zu", + sname, pname, i); + } + + gsl_test_rel(x[brown2_P - 1], lastel, epsrel, "%s/%s last element", + sname, pname); +} + +static int +brown2_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + size_t i; + double sum = -(brown2_N + 1.0); + double prod = 1.0; + + for (i = 0; i < brown2_N; ++i) + { + double xi = gsl_vector_get(x, i); + sum += xi; + prod *= xi; + } + + for (i = 0; i < brown2_N - 1; ++i) + { + double xi = gsl_vector_get(x, i); + gsl_vector_set(f, i, xi + sum); + } + + gsl_vector_set(f, brown2_N - 1, prod - 1.0); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +brown2_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(brown2_J, brown2_N, brown2_P); + size_t i, j; + + for (j = 0; j < brown2_P; ++j) + { + double prod = 1.0; + + for (i = 0; i < brown2_N - 1; i++) + { + double Jij = (i == j) ? 2.0 : 1.0; + gsl_matrix_set(&J.matrix, i, j, Jij); + } + + for (i = 0; i < brown2_N; i++) + { + if (i != j) + prod *= gsl_vector_get(x, i); + } + + gsl_matrix_set(&J.matrix, brown2_N - 1, j, prod); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +brown2_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + size_t i, j, k; + double sum = 0.0; + + gsl_vector_set_zero(fvv); + + for (k = 0; k < brown2_P; ++k) + { + double vk = gsl_vector_get(v, k); + + for (i = 0; i < brown2_P; ++i) + { + double vi = gsl_vector_get(v, i); + double delta = (i == k) ? 1.0 : 0.0; + double prod = 1.0; + + for (j = 0; j < brown2_N; ++j) + { + if (j != i && j != k) + { + double xj = gsl_vector_get(x, j); + prod *= xj; + } + } + + sum += vk * vi * (1.0 - delta) * prod; + } + } + + gsl_vector_set(fvv, brown2_N - 1, sum); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf brown2_func = +{ + brown2_f, + brown2_df, + brown2_fvv, + brown2_N, + brown2_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem brown2_problem = +{ + "brown_almost_linear", + brown2_x0, + NULL, + &brown2_epsrel, + &brown2_checksol, + &brown2_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_brown3.c gsl-doc-2.3/multilarge_nlinear/test_brown3.c --- gsl-doc-1.16/multilarge_nlinear/test_brown3.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_brown3.c 2016-08-12 19:51:02.000000000 +0000 @@ -0,0 +1,109 @@ +#define brown3_N 3 +#define brown3_P 2 + +static double brown3_x0[brown3_P] = { 1.0, 1.0 }; +static double brown3_epsrel = 1.0e-12; + +static double brown3_J[brown3_N * brown3_P]; + +static void +brown3_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + const double brown3_x[brown3_P] = { 1.0e6, 2.0e-6 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < brown3_P; ++i) + { + gsl_test_rel(x[i], brown3_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +brown3_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + + gsl_vector_set(f, 0, x1 - 1.0e6); + gsl_vector_set(f, 1, x2 - 2.0e-6); + gsl_vector_set(f, 2, x1*x2 - 2.0); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +brown3_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(brown3_J, brown3_N, brown3_P); + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + + gsl_matrix_set_zero(&J.matrix); + + gsl_matrix_set(&J.matrix, 0, 0, 1.0); + gsl_matrix_set(&J.matrix, 1, 1, 1.0); + gsl_matrix_set(&J.matrix, 2, 0, x2); + gsl_matrix_set(&J.matrix, 2, 1, x1); + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +brown3_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + + gsl_vector_set(fvv, 0, 0.0); + gsl_vector_set(fvv, 1, 0.0); + gsl_vector_set(fvv, 2, 2.0 * v1 * v2); + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf brown3_func = +{ + brown3_f, + brown3_df, + brown3_fvv, + brown3_N, + brown3_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem brown3_problem = +{ + "brown_badly_scaled", + brown3_x0, + NULL, + &brown3_epsrel, + &brown3_checksol, + &brown3_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test.c gsl-doc-2.3/multilarge_nlinear/test.c --- gsl-doc-1.16/multilarge_nlinear/test.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test.c 2016-09-16 22:52:14.000000000 +0000 @@ -0,0 +1,95 @@ +/* multilarge_nlinear/test.c + * + * Copyright (C) 2015, 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* These tests are based on the NIST Statistical Reference Datasets + See http://www.nist.gov/itl/div898/strd/index.html for more + information. */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "test_fdf.c" + +static void +test_proc(const gsl_multilarge_nlinear_trs *trs, + const gsl_multilarge_nlinear_scale *scale, + const int fdtype) +{ + gsl_multilarge_nlinear_parameters fdf_params = + gsl_multilarge_nlinear_default_parameters(); + + fdf_params.trs = trs; + fdf_params.scale = scale; + fdf_params.fdtype = fdtype; + + test_fdf_main(&fdf_params); +} + +int +main (void) +{ + const gsl_multilarge_nlinear_trs **nlinear_trs[7]; + const gsl_multilarge_nlinear_scale **nlinear_scales[3]; + const gsl_multilarge_nlinear_trs **trs; + const gsl_multilarge_nlinear_scale **scale; + int fdtype; + size_t i = 0; + + gsl_ieee_env_setup(); + + /* initialize arrays */ + + nlinear_trs[0] = &gsl_multilarge_nlinear_trs_lm; + nlinear_trs[1] = &gsl_multilarge_nlinear_trs_lmaccel; + nlinear_trs[2] = &gsl_multilarge_nlinear_trs_dogleg; + nlinear_trs[3] = &gsl_multilarge_nlinear_trs_ddogleg; + nlinear_trs[4] = &gsl_multilarge_nlinear_trs_subspace2D; + nlinear_trs[5] = &gsl_multilarge_nlinear_trs_cgst; + nlinear_trs[6] = NULL; + + nlinear_scales[0] = &gsl_multilarge_nlinear_scale_levenberg; + nlinear_scales[1] = &gsl_multilarge_nlinear_scale_more; + nlinear_scales[2] = NULL; + + /* run testsuite over all parameter combinations */ + + for (trs = nlinear_trs[i]; trs != NULL; trs = nlinear_trs[++i]) + { + size_t j = 0; + + fprintf(stderr, "trs = %s\n", (*trs)->name); + + for (scale = nlinear_scales[j]; scale != NULL; scale = nlinear_scales[++j]) + { + for (fdtype = GSL_MULTILARGE_NLINEAR_FWDIFF; + fdtype <= GSL_MULTILARGE_NLINEAR_CTRDIFF; ++fdtype) + { + test_proc(*trs, *scale, fdtype); + } + } + } + + exit (gsl_test_summary ()); +} diff -Nru gsl-doc-1.16/multilarge_nlinear/test_eckerle.c gsl-doc-2.3/multilarge_nlinear/test_eckerle.c --- gsl-doc-1.16/multilarge_nlinear/test_eckerle.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_eckerle.c 2016-08-12 19:51:06.000000000 +0000 @@ -0,0 +1,164 @@ +#define eckerle_N 35 +#define eckerle_P 3 + +static double eckerle_x0a[eckerle_P] = { 1.0, 10.0, 500.0 }; +static double eckerle_x0b[eckerle_P] = { 1.5, 5.0, 450.0 }; +static double eckerle_epsrel = 1.0e-7; + +static double eckerle_J[eckerle_N * eckerle_P]; + +static double eckerle_sigma[eckerle_P] = { + 1.5408051163E-02, 4.6803020753E-02, 4.6800518816E-02 +}; + +static double eckerle_X[eckerle_N] = { + 400.000000, 405.000000, 410.000000, 415.000000, 420.000000, + 425.000000, 430.000000, 435.000000, 436.500000, 438.000000, + 439.500000, 441.000000, 442.500000, 444.000000, 445.500000, + 447.000000, 448.500000, 450.000000, 451.500000, 453.000000, + 454.500000, 456.000000, 457.500000, 459.000000, 460.500000, + 462.000000, 463.500000, 465.000000, 470.000000, 475.000000, + 480.000000, 485.000000, 490.000000, 495.000000, 500.000000 }; + +static double eckerle_F[eckerle_N] = { + 0.0001575, 0.0001699, 0.0002350, 0.0003102, 0.0004917, + 0.0008710, 0.0017418, 0.0046400, 0.0065895, 0.0097302, + 0.0149002, 0.0237310, 0.0401683, 0.0712559, 0.1264458, + 0.2073413, 0.2902366, 0.3445623, 0.3698049, 0.3668534, + 0.3106727, 0.2078154, 0.1164354, 0.0616764, 0.0337200, + 0.0194023, 0.0117831, 0.0074357, 0.0022732, 0.0008800, + 0.0004579, 0.0002345, 0.0001586, 0.0001143, 0.0000710 }; + +static void +eckerle_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 1.4635887487E-03; + const double eckerle_x[eckerle_P] = { 1.5543827178E+00, + 4.0888321754E+00, + 4.5154121844E+02 }; + double new_x[3]; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + /* x1 and x2 are unique up to a sign, but they must be + * the same sign */ + if (x[0] < 0.0 && x[1] < 0.0) + { + new_x[0] = -x[0]; + new_x[1] = -x[1]; + } + else + { + new_x[0] = x[0]; + new_x[1] = x[1]; + } + + new_x[2] = x[2]; + + for (i = 0; i < eckerle_P; ++i) + { + gsl_test_rel(new_x[i], eckerle_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +eckerle_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[eckerle_P]; + size_t i; + + for (i = 0; i < eckerle_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < eckerle_N; i++) + { + double xi = eckerle_X[i]; + double term = xi - b[2]; + double yi; + + yi = b[0] / b[1] * exp(-0.5 * term * term / b[1] / b[1]); + gsl_vector_set (f, i, yi - eckerle_F[i]); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +eckerle_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(eckerle_J, eckerle_N, eckerle_P); + double b[eckerle_P]; + size_t i; + + for (i = 0; i < eckerle_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < eckerle_N; i++) + { + double xi = eckerle_X[i]; + double term1 = xi - b[2]; + double term2 = exp(-0.5 * term1 * term1 / (b[1] * b[1])); + + gsl_matrix_set (&J.matrix, i, 0, term2 / b[1]); + gsl_matrix_set (&J.matrix, i, 1, + -b[0] * term2 / (b[1] * b[1]) + b[0] / pow(b[1], 4.0) * term2 * term1 * term1); + gsl_matrix_set (&J.matrix, i, 2, b[0] / pow(b[1], 3.0) * term1 * term2); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf eckerle_func = +{ + eckerle_f, + eckerle_df, + NULL, /* analytic expression too complex */ + eckerle_N, + eckerle_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem eckerlea_problem = +{ + "nist-eckerlea", + eckerle_x0a, + eckerle_sigma, + &eckerle_epsrel, + &eckerle_checksol, + &eckerle_func +}; + +static test_fdf_problem eckerleb_problem = +{ + "nist-eckerleb", + eckerle_x0b, + eckerle_sigma, + &eckerle_epsrel, + &eckerle_checksol, + &eckerle_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_enso.c gsl-doc-2.3/multilarge_nlinear/test_enso.c --- gsl-doc-1.16/multilarge_nlinear/test_enso.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_enso.c 2016-08-12 19:51:09.000000000 +0000 @@ -0,0 +1,182 @@ +#define enso_N 168 +#define enso_P 9 + +static double enso_x0a[enso_P] = { 11.0, 3.0, 0.5, 40.0, -0.7, -1.3, 25.0, -0.3, 1.4 }; +static double enso_x0b[enso_P] = { 10.0, 3.0, 0.5, 44.0, -1.5, 0.5, 26.0, -0.1, 1.5 }; +static double enso_epsrel = 1.0e-3; + +static double enso_J[enso_N * enso_P]; + +static double enso_sigma[enso_P] = { + 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 +}; + +static double enso_F[enso_N] = { + 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 +}; + +static void +enso_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 7.8853978668E+02; + const double enso_x[enso_P] = { + 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 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < enso_P; ++i) + { + gsl_test_rel(x[i], enso_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + + +static int +enso_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[enso_P]; + size_t i; + + for (i = 0; i < enso_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < enso_N; 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); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +enso_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(enso_J, enso_N, enso_P); + double b[enso_P]; + size_t i; + + for (i = 0; i < enso_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < enso_N; i++) + { + double t = (i + 1.0); + + gsl_matrix_set (&J.matrix, i, 0, -1.0); + gsl_matrix_set (&J.matrix, i, 1, -cos(2*M_PI*t/12)); + gsl_matrix_set (&J.matrix, i, 2, -sin(2*M_PI*t/12)); + gsl_matrix_set (&J.matrix, 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 (&J.matrix, i, 4, -cos(2*M_PI*t/b[3])); + gsl_matrix_set (&J.matrix, i, 5, -sin(2*M_PI*t/b[3])); + gsl_matrix_set (&J.matrix, 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 (&J.matrix, i, 7, -cos(2*M_PI*t/b[6])); + gsl_matrix_set (&J.matrix, i, 8, -sin(2*M_PI*t/b[6])); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf enso_func = +{ + enso_f, + enso_df, + NULL, /* analytic expression too complex */ + enso_N, + enso_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem ensoa_problem = +{ + "nist-ENSOa", + enso_x0a, + enso_sigma, + &enso_epsrel, + &enso_checksol, + &enso_func +}; + +static test_fdf_problem ensob_problem = +{ + "nist-ENSOb", + enso_x0b, + enso_sigma, + &enso_epsrel, + &enso_checksol, + &enso_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_exp1.c gsl-doc-2.3/multilarge_nlinear/test_exp1.c --- gsl-doc-1.16/multilarge_nlinear/test_exp1.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_exp1.c 2016-08-12 19:51:13.000000000 +0000 @@ -0,0 +1,149 @@ +#define exp1_N 45 +#define exp1_P 4 + +static double exp1_x0[exp1_P] = { -1.0, -2.0, 1.0, -1.0 }; +static double exp1_epsrel = 1.0e-4; + +static double exp1_J[exp1_N * exp1_P]; + +static double exp1_Y[exp1_N] = { +0.090542, 0.124569, 0.179367, 0.195654, 0.269707, +0.286027, 0.289892, 0.317475, 0.308191, 0.336995, +0.348371, 0.321337, 0.299423, 0.338972, 0.304763, +0.288903, 0.300820, 0.303974, 0.283987, 0.262078, +0.281593, 0.267531, 0.218926, 0.225572, 0.200594, +0.197375, 0.182440, 0.183892, 0.152285, 0.174028, +0.150874, 0.126220, 0.126266, 0.106384, 0.118923, +0.091868, 0.128926, 0.119273, 0.115997, 0.105831, +0.075261, 0.068387, 0.090823, 0.085205, 0.067203 +}; + +static void +exp1_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 1.0e-2; + const double exp1_x[exp1_P] = { -4.0, -5.0, 4.0, -4.0 }; /* approx */ + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < exp1_P; ++i) + { + gsl_test_rel(x[i], exp1_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +exp1_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + size_t i; + + for (i = 0; i < exp1_N; ++i) + { + double ti = 0.02*(i + 1.0); + double yi = exp1_Y[i]; + double fi = yi - (x3*exp(x1*ti) + x4*exp(x2*ti)); + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +exp1_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(exp1_J, exp1_N, exp1_P); + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + size_t i; + + for (i = 0; i < exp1_N; ++i) + { + double ti = 0.02*(i + 1.0); + double term1 = exp(x1*ti); + double term2 = exp(x2*ti); + + gsl_matrix_set(&J.matrix, i, 0, -x3*ti*term1); + gsl_matrix_set(&J.matrix, i, 1, -x4*ti*term2); + gsl_matrix_set(&J.matrix, i, 2, -term1); + gsl_matrix_set(&J.matrix, i, 3, -term2); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +exp1_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + double v4 = gsl_vector_get(v, 3); + size_t i; + + for (i = 0; i < exp1_N; ++i) + { + double ti = 0.02*(i + 1.0); + double term1 = exp(x1*ti); + double term2 = exp(x2*ti); + double term3 = 2*v3 + ti*v1*x3; + double term4 = 2*v4 + ti*v2*x4; + + gsl_vector_set(fvv, i, -ti*(v1*term1*term3 + v2*term2*term4)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf exp1_func = +{ + exp1_f, + exp1_df, + exp1_fvv, + exp1_N, + exp1_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem exp1_problem = +{ + "expfit1", + exp1_x0, + NULL, + &exp1_epsrel, + &exp1_checksol, + &exp1_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_fdf.c gsl-doc-2.3/multilarge_nlinear/test_fdf.c --- gsl-doc-1.16/multilarge_nlinear/test_fdf.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_fdf.c 2016-09-16 22:48:29.000000000 +0000 @@ -0,0 +1,384 @@ +/* multilarge_nlinear/test_fdf.c + * + * Copyright (C) 2015, 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +typedef struct +{ + const char *name; + double *x0; /* initial parameters (size p) */ + double *sigma; + double *epsrel; /* relative tolerance for solution checking */ + void (*checksol) (const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname); + gsl_multilarge_nlinear_fdf *fdf; +} test_fdf_problem; + +#include "test_bard.c" +#include "test_beale.c" +#include "test_biggs.c" +#include "test_box.c" +#include "test_boxbod.c" +#include "test_brown1.c" +#include "test_brown2.c" +#include "test_brown3.c" +#include "test_eckerle.c" +#include "test_enso.c" +#include "test_exp1.c" +#include "test_gaussian.c" +#include "test_hahn1.c" +#include "test_helical.c" +#include "test_jennrich.c" +#include "test_kirby2.c" +#include "test_kowalik.c" +#include "test_lin1.c" +#include "test_lin2.c" +#include "test_lin3.c" +#include "test_meyer.c" +#include "test_meyerscal.c" +#include "test_osborne.c" +#include "test_penalty1.c" +#include "test_penalty2.c" +#include "test_powell1.c" +#include "test_powell2.c" +#include "test_powell3.c" +#include "test_rat42.c" +#include "test_rat43.c" +#include "test_rosenbrock.c" +#include "test_rosenbrocke.c" +#include "test_roth.c" +#include "test_thurber.c" +#include "test_vardim.c" +#include "test_watson.c" +#include "test_wood.c" + +#include "test_wnlin.c" + +static void test_fdf(const gsl_multilarge_nlinear_type * T, + const gsl_multilarge_nlinear_parameters * params, + const double xtol, const double gtol, + const double ftol, + const double epsrel, const double x0_scale, + test_fdf_problem *problem, + const double *wts); +static void test_fdf_checksol(const char *sname, const char *pname, + const double epsrel, + gsl_multilarge_nlinear_workspace *s, + test_fdf_problem *problem); +static void test_scale_x0(gsl_vector *x0, const double scale); + +/* + * FIXME: some test problems are disabled since they fail on certain + * solvers. Known failures are: + * + * Method test-problem + * ====== ============ + * dogleg thurbera + * dogleg rat43a + * cgst boxboda + */ + +static test_fdf_problem *test_problems[] = { + /* + * These test problems are taken from + * + * H. B. Nielsen, UCTP test problems for unconstrained optimization, + * IMM Department of Mathematical Modeling, Tech. Report + * IMM-REP-2000-17, 2000. + */ + &lin1_problem, /* 1 */ + &lin2_problem, /* 2 */ + &lin3_problem, /* 3 */ + &rosenbrock_problem, /* 4 */ + &helical_problem, /* 5 */ + &powell1_problem, /* 6 */ + &roth_problem, /* 7 */ + &bard_problem, /* 8 */ + &kowalik_problem, /* 9 */ + &meyer_problem, /* 10 */ + &watson_problem, /* 11 */ + &box_problem, /* 12 */ + &jennrich_problem, /* 13 */ + &brown1_problem, /* 14 */ + &brown2_problem, /* 16 */ + &osborne_problem, /* 17 */ + &exp1_problem, /* 18 */ + &meyerscal_problem, /* 20 */ + + &powell2_problem, + + /* + * These tests are from + * + * J. J. More, B. S. Garbow and K. E. Hillstrom, Testing + * Unconstrained Optimization Software, ACM Trans. Math. Soft. + * Vol 7, No 1, 1981. + * + * Many of these overlap with the Nielsen tests + */ + &rosenbrock_problem, /* 1 */ + &roth_problem, /* 2 */ + &powell3_problem, /* 3 */ + &brown3_problem, /* 4 */ + &beale_problem, /* 5 */ + &jennrich_problem, /* 6 */ + &helical_problem, /* 7 */ + &bard_problem, /* 8 */ + &gaussian_problem, /* 9 */ + &meyer_problem, /* 10 */ + &box_problem, /* 12 */ + &powell1_problem, /* 13 */ + &wood_problem, /* 14 */ + &kowalik_problem, /* 15 */ + &brown1_problem, /* 16 */ + &osborne_problem, /* 17 */ + &biggs_problem, /* 18 */ + &watson_problem, /* 20 */ + &rosenbrocke_problem, /* 21 */ + &penalty1_problem, /* 23 */ + &penalty2_problem, /* 24 */ + &vardim_problem, /* 25 */ + &brown2_problem, /* 27 */ + &lin1_problem, /* 32 */ + &lin2_problem, /* 33 */ + &lin3_problem, /* 34 */ + + /* NIST test cases */ + &kirby2a_problem, + &kirby2b_problem, + &hahn1a_problem, + &hahn1b_problem, + &ensoa_problem, + &ensob_problem, + /*&thurbera_problem,*/ + &thurberb_problem, + /*&boxboda_problem,*/ + &boxbodb_problem, + &rat42a_problem, + &rat42b_problem, + &eckerlea_problem, + &eckerleb_problem, + /*&rat43a_problem,*/ + &rat43b_problem, + + NULL +}; + +static void +test_fdf_main(const gsl_multilarge_nlinear_parameters * params) +{ + const double xtol = pow(GSL_DBL_EPSILON, 0.9); + const double gtol = pow(GSL_DBL_EPSILON, 0.9); + const double ftol = 0.0; + size_t i; + + for (i = 0; test_problems[i] != NULL; ++i) + { + test_fdf_problem *problem = test_problems[i]; + double epsrel = *(problem->epsrel); + gsl_multilarge_nlinear_fdf fdf; + + /*XXX: finite difference fvv not working yet */ + if (problem->fdf->fvv == NULL) + continue; + + test_fdf(gsl_multilarge_nlinear_trust, params, xtol, gtol, ftol, + epsrel, 1.0, problem, NULL); + +#if 0 /* XXX */ + /* test finite difference Jacobian */ + fdf.df = problem->fdf->df; + problem->fdf->df = NULL; + + test_fdf(gsl_multilarge_nlinear_trust, params, xtol, gtol, ftol, + 1.0e3 * epsrel, 1.0, problem, NULL); + + problem->fdf->df = fdf.df; +#endif + +#if 0 + if (params->trs == gsl_multilarge_nlinear_trs_lmaccel && problem->fdf->fvv != NULL) + { + /* test finite difference second directional derivative */ + fdf.fvv = problem->fdf->fvv; + problem->fdf->fvv = NULL; + + test_fdf(gsl_multilarge_nlinear_trust, params, xtol, gtol, ftol, + epsrel / params->h_fvv, 1.0, problem, NULL); + + problem->fdf->fvv = fdf.fvv; + } +#endif + } + + /* test weighted nonlinear least squares */ + + /* internal weighting in _f and _df functions */ + test_fdf(gsl_multilarge_nlinear_trust, params, xtol, gtol, ftol, + wnlin_epsrel, 1.0, &wnlin_problem1, NULL); +} + +/* +test_fdf() + Test a weighted nonlinear least squares problem + +Inputs: T - solver to use + params - solver parameters + xtol - tolerance in x + gtol - tolerance in gradient + ftol - tolerance in residual vector + epsrel - relative error tolerance in solution + x0_scale - to test robustness against starting points, + the standard starting point in 'problem' is + multiplied by this scale factor: + x0 <- x0 * x0_scale + If x0 = 0, then all components of x0 are set to + x0_scale + problem - contains the nonlinear problem and solution point + wts - weight vector (NULL for unweighted) +*/ + +static void +test_fdf(const gsl_multilarge_nlinear_type * T, + const gsl_multilarge_nlinear_parameters * params, + const double xtol, const double gtol, const double ftol, + const double epsrel, const double x0_scale, + test_fdf_problem *problem, + const double *wts) +{ + gsl_multilarge_nlinear_fdf *fdf = problem->fdf; + const size_t n = fdf->n; + const size_t p = fdf->p; + const size_t max_iter = 2500; + gsl_vector *x0 = gsl_vector_alloc(p); + gsl_vector_view x0v = gsl_vector_view_array(problem->x0, p); + gsl_multilarge_nlinear_workspace *w = + gsl_multilarge_nlinear_alloc (T, params, n, p); + const char *pname = problem->name; + char buf[2048]; + char sname[2048]; + int status, info; + + sprintf(buf, "%s/%s/solver=%s/scale=%s%s%s", + gsl_multilarge_nlinear_name(w), + params->trs->name, + params->solver->name, + params->scale->name, + problem->fdf->df ? "" : "/fdjac", + problem->fdf->fvv ? "" : "/fdfvv"); + + strcpy(sname, buf); + + /* scale starting point x0 */ + gsl_vector_memcpy(x0, &x0v.vector); + test_scale_x0(x0, x0_scale); + + if (wts) + { + gsl_vector_const_view wv = gsl_vector_const_view_array(wts, n); + gsl_multilarge_nlinear_winit(x0, &wv.vector, fdf, w); + } + else + gsl_multilarge_nlinear_init(x0, fdf, w); + + status = gsl_multilarge_nlinear_driver(max_iter, xtol, gtol, ftol, + NULL, NULL, &info, w); + gsl_test(status, "%s/%s did not converge, status=%s", + sname, pname, gsl_strerror(status)); + + /* check solution */ + test_fdf_checksol(sname, pname, epsrel, w, problem); + + if (wts == NULL) + { + /* test again with weighting matrix W = I */ + gsl_vector *wv = gsl_vector_alloc(n); + + sprintf(sname, "%s/weighted", buf); + + gsl_vector_memcpy(x0, &x0v.vector); + test_scale_x0(x0, x0_scale); + + gsl_vector_set_all(wv, 1.0); + gsl_multilarge_nlinear_winit(x0, wv, fdf, w); + + status = gsl_multilarge_nlinear_driver(max_iter, xtol, gtol, ftol, + NULL, NULL, &info, w); + gsl_test(status, "%s/%s did not converge, status=%s", + sname, pname, gsl_strerror(status)); + + test_fdf_checksol(sname, pname, epsrel, w, problem); + + gsl_vector_free(wv); + } + + gsl_multilarge_nlinear_free(w); + gsl_vector_free(x0); +} + +static void +test_fdf_checksol(const char *sname, const char *pname, + const double epsrel, + gsl_multilarge_nlinear_workspace *w, + test_fdf_problem *problem) +{ + gsl_multilarge_nlinear_fdf *fdf = problem->fdf; + const double *sigma = problem->sigma; + gsl_vector *f = gsl_multilarge_nlinear_residual(w); + gsl_vector *x = gsl_multilarge_nlinear_position(w); + double sumsq; + + /* check solution vector x and sumsq = ||f||^2 */ + gsl_blas_ddot(f, f, &sumsq); + (problem->checksol)(x->data, sumsq, epsrel, sname, pname); + + /* XXX: covariance not implemented for cgst method */ + if (w->params.trs == gsl_multilarge_nlinear_trs_cgst) + return; + + /* check variances */ + if (sigma) + { + const size_t n = fdf->n; + const size_t p = fdf->p; + size_t i; + gsl_matrix * covar = gsl_matrix_alloc (p, p); + + gsl_multilarge_nlinear_covar (covar, w); + + for (i = 0; i < p; i++) + { + double ei = sqrt(sumsq/(n-p))*sqrt(gsl_matrix_get(covar,i,i)); + gsl_test_rel (ei, sigma[i], epsrel, + "%s/%s, sigma(%d)", sname, pname, i) ; + } + + gsl_matrix_free (covar); + } +} + +static void +test_scale_x0(gsl_vector *x0, const double scale) +{ + double nx = gsl_blas_dnrm2(x0); + + if (nx == 0.0) + gsl_vector_set_all(x0, scale); + else + gsl_vector_scale(x0, scale); +} /* test_scale_x0() */ diff -Nru gsl-doc-1.16/multilarge_nlinear/test_gaussian.c gsl-doc-2.3/multilarge_nlinear/test_gaussian.c --- gsl-doc-1.16/multilarge_nlinear/test_gaussian.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_gaussian.c 2016-08-12 19:51:19.000000000 +0000 @@ -0,0 +1,146 @@ +#define gaussian_N 15 +#define gaussian_P 3 + +static double gaussian_x0[gaussian_P] = { 0.4, 1.0, 0.0 }; +static double gaussian_epsrel = 1.0e-10; + +static double gaussian_J[gaussian_N * gaussian_P]; + +static double gaussian_Y[gaussian_N] = { +0.0009, 0.0044, 0.0175, 0.0540, 0.1295, 0.2420, 0.3521, 0.3989, +0.3521, 0.2420, 0.1295, 0.0540, 0.0175, 0.0044, 0.0009 +}; + +static void +gaussian_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 1.12793276961871985e-08; + const double gaussian_x[gaussian_P] = { 0.398956137838762825, + 1.00001908448786647, + 0.0 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < gaussian_P; ++i) + { + gsl_test_rel(x[i], gaussian_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +gaussian_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < gaussian_N; ++i) + { + double ti = (7.0 - i) / 2.0; + double yi = gaussian_Y[i]; + double term = ti - x3; + double fi = x1 * exp(-x2*term*term/2.0) - yi; + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +gaussian_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(gaussian_J, gaussian_N, gaussian_P); + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < gaussian_N; ++i) + { + double ti = (7.0 - i) / 2.0; + double term1 = ti - x3; + double term2 = exp(-x2*term1*term1/2.0); + + gsl_matrix_set(&J.matrix, i, 0, term2); + gsl_matrix_set(&J.matrix, i, 1, -0.5*x1*term2*term1*term1); + gsl_matrix_set(&J.matrix, i, 2, x1*x2*term1*term2); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +gaussian_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + size_t i; + + for (i = 0; i < gaussian_N; ++i) + { + double ti = (7.0 - i) / 2.0; + double term1 = ti - x3; + double term2 = exp(-x2*term1*term1/2.0); + + gsl_vector_set(fvv, i, 0.25 * term2 * + (ti*ti*ti*ti*v2*v2*x1 - + 4*ti*ti*ti*v2*x1*(v3*x2 + v2*x3) + + v2*x3*x3*(v2*x1*x3*x3 - 4*v1) + + 4*v3*v3*x1*x2*(x2*x3*x3 - 1.0) + + 4*v3*x3*(-2*v1*x2 + v2*x1*(x2*x3*x3 - 2.0)) + + ti*ti*(4*v3*v3*x1*x2*x2 + 2*v2*(-2*v1 + 3*x1*x3*(2*v3*x2 + v2*x3))) - + 4*ti*(v2*v2*x1*x3*x3*x3 + 2*v3*x2*(-v1 + v3*x1*x2*x3) + + v2*(-2*v1*x3 + v3*x1*(-2.0 + 3*x2*x3*x3))))); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf gaussian_func = +{ + gaussian_f, + gaussian_df, + gaussian_fvv, + gaussian_N, + gaussian_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem gaussian_problem = +{ + "gaussian", + gaussian_x0, + NULL, + &gaussian_epsrel, + &gaussian_checksol, + &gaussian_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_hahn1.c gsl-doc-2.3/multilarge_nlinear/test_hahn1.c --- gsl-doc-1.16/multilarge_nlinear/test_hahn1.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_hahn1.c 2016-08-12 19:51:23.000000000 +0000 @@ -0,0 +1,235 @@ +#define hahn1_N 236 +#define hahn1_P 7 + +static double hahn1_x0a[hahn1_P] = { 10, -1, 0.05, -0.00001, -0.05, 0.001, -0.000001 }; +static double hahn1_x0b[hahn1_P] = { 1, -0.1, 0.005, -0.000001, -0.005, 0.0001, -0.0000001}; +static double hahn1_epsrel = 1.0e-5; + +static double hahn1_J[hahn1_N * hahn1_P]; + +static double hahn1_sigma[hahn1_P] = { + 1.7070154742E-01, 1.2000289189E-02, 2.2508314937E-04, 2.7578037666E-07, + 2.4712888219E-04, 1.0449373768E-05, 1.3027335327E-08 +}; + +static double hahn1_F1[hahn1_N] = { + .591E0, 1.547E0, 2.902E0, 2.894E0, 4.703E0, + 6.307E0, 7.03E0 , 7.898E0, 9.470E0, 9.484E0, + 10.072E0, 10.163E0, 11.615E0, 12.005E0, 12.478E0, + 12.982E0, 12.970E0, 13.926E0, 14.452E0, 14.404E0, + 15.190E0, 15.550E0, 15.528E0, 15.499E0, 16.131E0, + 16.438E0, 16.387E0, 16.549E0, 16.872E0, 16.830E0, + 16.926E0, 16.907E0, 16.966E0, 17.060E0, 17.122E0, + 17.311E0, 17.355E0, 17.668E0, 17.767E0, 17.803E0, + 17.765E0, 17.768E0, 17.736E0, 17.858E0, 17.877E0, + 17.912E0, 18.046E0, 18.085E0, 18.291E0, 18.357E0, + 18.426E0, 18.584E0, 18.610E0, 18.870E0, 18.795E0, + 19.111E0, .367E0, .796E0, 0.892E0, 1.903E0, + 2.150E0, 3.697E0, 5.870E0, 6.421E0, 7.422E0, + 9.944E0, 11.023E0, 11.87E0 , 12.786E0, 14.067E0, + 13.974E0, 14.462E0, 14.464E0, 15.381E0, 15.483E0, + 15.59E0 , 16.075E0, 16.347E0, 16.181E0, 16.915E0, + 17.003E0, 16.978E0, 17.756E0, 17.808E0, 17.868E0, + 18.481E0, 18.486E0, 19.090E0, 16.062E0, 16.337E0, + 16.345E0, 16.388E0, 17.159E0, 17.116E0, 17.164E0, + 17.123E0, 17.979E0, 17.974E0, 18.007E0, 17.993E0, + 18.523E0, 18.669E0, 18.617E0, 19.371E0, 19.330E0, + 0.080E0, 0.248E0, 1.089E0, 1.418E0, 2.278E0, + 3.624E0, 4.574E0, 5.556E0, 7.267E0, 7.695E0, + 9.136E0, 9.959E0, 9.957E0, 11.600E0, 13.138E0, + 13.564E0, 13.871E0, 13.994E0, 14.947E0, 15.473E0, + 15.379E0, 15.455E0, 15.908E0, 16.114E0, 17.071E0, + 17.135E0, 17.282E0, 17.368E0, 17.483E0, 17.764E0, + 18.185E0, 18.271E0, 18.236E0, 18.237E0, 18.523E0, + 18.627E0, 18.665E0, 19.086E0, 0.214E0, 0.943E0, + 1.429E0, 2.241E0, 2.951E0, 3.782E0, 4.757E0, + 5.602E0, 7.169E0, 8.920E0, 10.055E0, 12.035E0, + 12.861E0, 13.436E0, 14.167E0, 14.755E0, 15.168E0, + 15.651E0, 15.746E0, 16.216E0, 16.445E0, 16.965E0, + 17.121E0, 17.206E0, 17.250E0, 17.339E0, 17.793E0, + 18.123E0, 18.49E0 , 18.566E0, 18.645E0, 18.706E0, + 18.924E0, 19.1E0 , 0.375E0, 0.471E0, 1.504E0, + 2.204E0, 2.813E0, 4.765E0, 9.835E0, 10.040E0, + 11.946E0, 12.596E0, 13.303E0, 13.922E0, 14.440E0, + 14.951E0, 15.627E0, 15.639E0, 15.814E0, 16.315E0, + 16.334E0, 16.430E0, 16.423E0, 17.024E0, 17.009E0, + 17.165E0, 17.134E0, 17.349E0, 17.576E0, 17.848E0, + 18.090E0, 18.276E0, 18.404E0, 18.519E0, 19.133E0, + 19.074E0, 19.239E0, 19.280E0, 19.101E0, 19.398E0, + 19.252E0, 19.89E0 , 20.007E0, 19.929E0, 19.268E0, + 19.324E0, 20.049E0, 20.107E0, 20.062E0, 20.065E0, + 19.286E0, 19.972E0, 20.088E0, 20.743E0, 20.83E0 , + 20.935E0, 21.035E0, 20.93E0 , 21.074E0, 21.085E0, + 20.935E0 +}; + + +static double hahn1_F0[hahn1_N] = { + 24.41E0, 34.82E0, 44.09E0, 45.07E0, 54.98E0, + 65.51E0, 70.53E0, 75.70E0, 89.57E0, 91.14E0, + 96.40E0, 97.19E0, 114.26E0, 120.25E0, 127.08E0, + 133.55E0, 133.61E0, 158.67E0, 172.74E0, 171.31E0, + 202.14E0, 220.55E0, 221.05E0, 221.39E0, 250.99E0, + 268.99E0, 271.80E0, 271.97E0, 321.31E0, 321.69E0, + 330.14E0, 333.03E0, 333.47E0, 340.77E0, 345.65E0, + 373.11E0, 373.79E0, 411.82E0, 419.51E0, 421.59E0, + 422.02E0, 422.47E0, 422.61E0, 441.75E0, 447.41E0, + 448.7E0 , 472.89E0, 476.69E0, 522.47E0, 522.62E0, + 524.43E0, 546.75E0, 549.53E0, 575.29E0, 576.00E0, + 625.55E0, 20.15E0, 28.78E0, 29.57E0, 37.41E0, + 39.12E0, 50.24E0, 61.38E0, 66.25E0, 73.42E0, + 95.52E0, 107.32E0, 122.04E0, 134.03E0, 163.19E0, + 163.48E0, 175.70E0, 179.86E0, 211.27E0, 217.78E0, + 219.14E0, 262.52E0, 268.01E0, 268.62E0, 336.25E0, + 337.23E0, 339.33E0, 427.38E0, 428.58E0, 432.68E0, + 528.99E0, 531.08E0, 628.34E0, 253.24E0, 273.13E0, + 273.66E0, 282.10E0, 346.62E0, 347.19E0, 348.78E0, + 351.18E0, 450.10E0, 450.35E0, 451.92E0, 455.56E0, + 552.22E0, 553.56E0, 555.74E0, 652.59E0, 656.20E0, + 14.13E0, 20.41E0, 31.30E0, 33.84E0, 39.70E0, + 48.83E0, 54.50E0, 60.41E0, 72.77E0, 75.25E0, + 86.84E0, 94.88E0, 96.40E0, 117.37E0, 139.08E0, + 147.73E0, 158.63E0, 161.84E0, 192.11E0, 206.76E0, + 209.07E0, 213.32E0, 226.44E0, 237.12E0, 330.90E0, + 358.72E0, 370.77E0, 372.72E0, 396.24E0, 416.59E0, + 484.02E0, 495.47E0, 514.78E0, 515.65E0, 519.47E0, + 544.47E0, 560.11E0, 620.77E0, 18.97E0, 28.93E0, + 33.91E0, 40.03E0, 44.66E0, 49.87E0, 55.16E0, + 60.90E0, 72.08E0, 85.15E0, 97.06E0, 119.63E0, + 133.27E0, 143.84E0, 161.91E0, 180.67E0, 198.44E0, + 226.86E0, 229.65E0, 258.27E0, 273.77E0, 339.15E0, + 350.13E0, 362.75E0, 371.03E0, 393.32E0, 448.53E0, + 473.78E0, 511.12E0, 524.70E0, 548.75E0, 551.64E0, + 574.02E0, 623.86E0, 21.46E0, 24.33E0, 33.43E0, + 39.22E0, 44.18E0, 55.02E0, 94.33E0, 96.44E0, + 118.82E0, 128.48E0, 141.94E0, 156.92E0, 171.65E0, + 190.00E0, 223.26E0, 223.88E0, 231.50E0, 265.05E0, + 269.44E0, 271.78E0, 273.46E0, 334.61E0, 339.79E0, + 349.52E0, 358.18E0, 377.98E0, 394.77E0, 429.66E0, + 468.22E0, 487.27E0, 519.54E0, 523.03E0, 612.99E0, + 638.59E0, 641.36E0, 622.05E0, 631.50E0, 663.97E0, + 646.9E0 , 748.29E0, 749.21E0, 750.14E0, 647.04E0, + 646.89E0, 746.9E0 , 748.43E0, 747.35E0, 749.27E0, + 647.61E0, 747.78E0, 750.51E0, 851.37E0, 845.97E0, + 847.54E0, 849.93E0, 851.61E0, 849.75E0, 850.98E0, + 848.23E0 +}; + +static void +hahn1_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 1.5324382854E+00; + const double hahn1_x[hahn1_P] = { + 1.0776351733E+00, -1.2269296921E-01, 4.0863750610E-03, + -1.4262662514E-06, -5.7609940901E-03, 2.4053735503E-04, + -1.2314450199E-07 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < hahn1_P; ++i) + { + gsl_test_rel(x[i], hahn1_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +hahn1_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[hahn1_P]; + size_t i; + + for (i = 0; i < hahn1_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < hahn1_N; i++) + { + double t = hahn1_F0[i]; + double y = ((b[0] + t* (b[1] + t * (b[2] + t * b[3]))) + / (1 + t*(b[4] + t *(b[5] + t*b[6])))); + gsl_vector_set (f, i, hahn1_F1[i] - y); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +hahn1_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(hahn1_J, hahn1_N, hahn1_P); + double b[hahn1_P]; + size_t i; + + for (i = 0; i < hahn1_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < hahn1_N; i++) + { + double t = hahn1_F0[i]; + double u = (b[0] + t*(b[1] + t*(b[2] + t * b[3]))); + double v = (1 + t*(b[4] + t*(b[5] + t*b[6]))); + gsl_matrix_set (&J.matrix, i, 0, -1/v); + gsl_matrix_set (&J.matrix, i, 1, -t/v); + gsl_matrix_set (&J.matrix, i, 2, -t*t/v); + gsl_matrix_set (&J.matrix, i, 3, -t*t*t/v); + gsl_matrix_set (&J.matrix, i, 4, t*u/(v*v)); + gsl_matrix_set (&J.matrix, i, 5, t*t*u/(v*v)); + gsl_matrix_set (&J.matrix, i, 6, t*t*t*u/(v*v)); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf hahn1_func = +{ + hahn1_f, + hahn1_df, + NULL, /* analytic expression too complex */ + hahn1_N, + hahn1_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem hahn1a_problem = +{ + "nist-hahn1a", + hahn1_x0a, + hahn1_sigma, + &hahn1_epsrel, + &hahn1_checksol, + &hahn1_func +}; + +static test_fdf_problem hahn1b_problem = +{ + "nist-hahn1b", + hahn1_x0b, + hahn1_sigma, + &hahn1_epsrel, + &hahn1_checksol, + &hahn1_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_helical.c gsl-doc-2.3/multilarge_nlinear/test_helical.c --- gsl-doc-1.16/multilarge_nlinear/test_helical.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_helical.c 2016-08-12 19:51:26.000000000 +0000 @@ -0,0 +1,125 @@ +#define helical_N 3 +#define helical_P 3 + +static double helical_x0[helical_P] = { -1.0, 0.0, 0.0 }; +static double helical_x[helical_P] = { 1.0, 0.0, 0.0 }; +static double helical_epsrel = 1.0e-12; + +static double helical_J[helical_N * helical_P]; + +static void +helical_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < helical_P; ++i) + { + gsl_test_rel(x[i], helical_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +helical_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double theta = (x1 >= 0.0) ? 0.0 : 5.0; + double nx = gsl_hypot(x1, x2); + + gsl_vector_set(f, 0, 10.0 * (x3 - 5.0/M_PI*atan(x2 / x1) - theta)); + gsl_vector_set(f, 1, 10.0*(nx - 1.0)); + gsl_vector_set(f, 2, x3); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +helical_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(helical_J, helical_N, helical_P); + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double nx = gsl_hypot(x1, x2); + double nx_sq = nx * nx; + double term1 = 50.0 / (M_PI * nx_sq); + double term2 = 10.0 / nx; + + gsl_matrix_set(&J.matrix, 0, 0, term1*x2); + gsl_matrix_set(&J.matrix, 0, 1, -term1*x1); + gsl_matrix_set(&J.matrix, 0, 2, 10.0); + + gsl_matrix_set(&J.matrix, 1, 0, term2*x1); + gsl_matrix_set(&J.matrix, 1, 1, term2*x2); + gsl_matrix_set(&J.matrix, 1, 2, 0.0); + + gsl_matrix_set(&J.matrix, 2, 0, 0.0); + gsl_matrix_set(&J.matrix, 2, 1, 0.0); + gsl_matrix_set(&J.matrix, 2, 2, 1.0); + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +helical_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + double term1 = v2*x1 - v1*x2; + double term2 = v1*x1 + v2*x2; + double term3 = x1*x1 + x2*x2; + + gsl_vector_set(fvv, 0, 100.0 / M_PI * (term1 / term3) * (term2 / term3)); + gsl_vector_set(fvv, 1, 10.0 * (term1 * term1) / pow(term3, 1.5)); + gsl_vector_set(fvv, 2, 0.0); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf helical_func = +{ + helical_f, + helical_df, + helical_fvv, + helical_N, + helical_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem helical_problem = +{ + "helical", + helical_x0, + NULL, + &helical_epsrel, + &helical_checksol, + &helical_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_jennrich.c gsl-doc-2.3/multilarge_nlinear/test_jennrich.c --- gsl-doc-1.16/multilarge_nlinear/test_jennrich.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_jennrich.c 2016-08-12 19:51:30.000000000 +0000 @@ -0,0 +1,123 @@ +#define jennrich_N 10 +#define jennrich_P 2 + +static double jennrich_x0[jennrich_P] = { 0.3, 0.4 }; +static double jennrich_epsrel = 1.0e-7; + +static double jennrich_J[jennrich_N * jennrich_P]; + +static void +jennrich_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 1.243621823556148e+02; + const double jennrich_x[jennrich_P] = { 2.578252139935855e-01, + 2.578252133471426e-01 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < jennrich_P; ++i) + { + gsl_test_rel(x[i], jennrich_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +jennrich_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + size_t i; + + for (i = 0; i < jennrich_N; ++i) + { + double ip1 = i + 1.0; + double fi = 2.0*(i + 2.0) - (exp(x1*ip1) + exp(x2*ip1)); + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +jennrich_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(jennrich_J, jennrich_N, jennrich_P); + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + size_t i; + + for (i = 0; i < jennrich_N; ++i) + { + double ip1 = i + 1.0; + + gsl_matrix_set(&J.matrix, i, 0, -ip1*exp(ip1*x1)); + gsl_matrix_set(&J.matrix, i, 1, -ip1*exp(ip1*x2)); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +jennrich_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + size_t i; + + for (i = 0; i < jennrich_N; ++i) + { + double ip1 = i + 1.0; + double term1 = exp(ip1*x1); + double term2 = exp(ip1*x2); + + gsl_vector_set(fvv, i, -ip1*ip1*(v1*v1*term1 + v2*v2*term2)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf jennrich_func = +{ + jennrich_f, + jennrich_df, + jennrich_fvv, + jennrich_N, + jennrich_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem jennrich_problem = +{ + "jennrich", + jennrich_x0, + NULL, + &jennrich_epsrel, + &jennrich_checksol, + &jennrich_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_kirby2.c gsl-doc-2.3/multilarge_nlinear/test_kirby2.c --- gsl-doc-1.16/multilarge_nlinear/test_kirby2.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_kirby2.c 2016-08-12 19:51:33.000000000 +0000 @@ -0,0 +1,230 @@ +#define kirby2_N 151 +#define kirby2_P 5 + +static double kirby2_x0a[kirby2_P] = { 2.0, -0.1, 0.003, -0.001, 0.00001 }; +static double kirby2_x0b[kirby2_P] = { 1.5, -0.15, 0.0025, -0.0015, 0.00002 }; +static double kirby2_x[kirby2_P] = { 1.6745063063E+00, -1.3927397867E-01, 2.5961181191E-03, + -1.7241811870E-03, 2.1664802578E-05 }; +static double kirby2_epsrel = 1.0e-5; + +static double kirby2_J[kirby2_N * kirby2_P]; + +static double kirby2_sigma[kirby2_P] = { + 8.7989634338E-02, 4.1182041386E-03, 4.1856520458E-05, + 5.8931897355E-05, 2.0129761919E-07 +}; + +static double kirby2_F1[kirby2_N] = { + 0.0082E0, 0.0112E0, 0.0149E0, 0.0198E0, 0.0248E0, + 0.0324E0, 0.0420E0, 0.0549E0, 0.0719E0, 0.0963E0, + 0.1291E0, 0.1710E0, 0.2314E0, 0.3227E0, 0.4809E0, + 0.7084E0, 1.0220E0, 1.4580E0, 1.9520E0, 2.5410E0, + 3.2230E0, 3.9990E0, 4.8520E0, 5.7320E0, 6.7270E0, + 7.8350E0, 9.0250E0, 10.2670E0, 11.5780E0, 12.9440E0, + 14.3770E0, 15.8560E0, 17.3310E0, 18.8850E0, 20.5750E0, + 22.3200E0, 22.3030E0, 23.4600E0, 24.0600E0, 25.2720E0, + 25.8530E0, 27.1100E0, 27.6580E0, 28.9240E0, 29.5110E0, + 30.7100E0, 31.3500E0, 32.5200E0, 33.2300E0, 34.3300E0, + 35.0600E0, 36.1700E0, 36.8400E0, 38.0100E0, 38.6700E0, + 39.8700E0, 40.0300E0, 40.5000E0, 41.3700E0, 41.6700E0, + 42.3100E0, 42.7300E0, 43.4600E0, 44.1400E0, 44.5500E0, + 45.2200E0, 45.9200E0, 46.3000E0, 47.0000E0, 47.6800E0, + 48.0600E0, 48.7400E0, 49.4100E0, 49.7600E0, 50.4300E0, + 51.1100E0, 51.5000E0, 52.1200E0, 52.7600E0, 53.1800E0, + 53.7800E0, 54.4600E0, 54.8300E0, 55.4000E0, 56.4300E0, + 57.0300E0, 58.0000E0, 58.6100E0, 59.5800E0, 60.1100E0, + 61.1000E0, 61.6500E0, 62.5900E0, 63.1200E0, 64.0300E0, + 64.6200E0, 65.4900E0, 66.0300E0, 66.8900E0, 67.4200E0, + 68.2300E0, 68.7700E0, 69.5900E0, 70.1100E0, 70.8600E0, + 71.4300E0, 72.1600E0, 72.7000E0, 73.4000E0, 73.9300E0, + 74.6000E0, 75.1600E0, 75.8200E0, 76.3400E0, 76.9800E0, + 77.4800E0, 78.0800E0, 78.6000E0, 79.1700E0, 79.6200E0, + 79.8800E0, 80.1900E0, 80.6600E0, 81.2200E0, 81.6600E0, + 82.1600E0, 82.5900E0, 83.1400E0, 83.5000E0, 84.0000E0, + 84.4000E0, 84.8900E0, 85.2600E0, 85.7400E0, 86.0700E0, + 86.5400E0, 86.8900E0, 87.3200E0, 87.6500E0, 88.1000E0, + 88.4300E0, 88.8300E0, 89.1200E0, 89.5400E0, 89.8500E0, + 90.2500E0, 90.5500E0, 90.9300E0, 91.2000E0, 91.5500E0, + 92.2000E0 +}; + + +static double kirby2_F0[kirby2_N] = { + 9.65E0, 10.74E0, 11.81E0, 12.88E0, 14.06E0, + 15.28E0, 16.63E0, 18.19E0, 19.88E0, 21.84E0, + 24.00E0, 26.25E0, 28.86E0, 31.85E0, 35.79E0, + 40.18E0, 44.74E0, 49.53E0, 53.94E0, 58.29E0, + 62.63E0, 67.03E0, 71.25E0, 75.22E0, 79.33E0, + 83.56E0, 87.75E0, 91.93E0, 96.10E0, 100.28E0, + 104.46E0, 108.66E0, 112.71E0, 116.88E0, 121.33E0, + 125.79E0, 125.79E0, 128.74E0, 130.27E0, 133.33E0, + 134.79E0, 137.93E0, 139.33E0, 142.46E0, 143.90E0, + 146.91E0, 148.51E0, 151.41E0, 153.17E0, 155.97E0, + 157.76E0, 160.56E0, 162.30E0, 165.21E0, 166.90E0, + 169.92E0, 170.32E0, 171.54E0, 173.79E0, 174.57E0, + 176.25E0, 177.34E0, 179.19E0, 181.02E0, 182.08E0, + 183.88E0, 185.75E0, 186.80E0, 188.63E0, 190.45E0, + 191.48E0, 193.35E0, 195.22E0, 196.23E0, 198.05E0, + 199.97E0, 201.06E0, 202.83E0, 204.69E0, 205.86E0, + 207.58E0, 209.50E0, 210.65E0, 212.33E0, 215.43E0, + 217.16E0, 220.21E0, 221.98E0, 225.06E0, 226.79E0, + 229.92E0, 231.69E0, 234.77E0, 236.60E0, 239.63E0, + 241.50E0, 244.48E0, 246.40E0, 249.35E0, 251.32E0, + 254.22E0, 256.24E0, 259.11E0, 261.18E0, 264.02E0, + 266.13E0, 268.94E0, 271.09E0, 273.87E0, 276.08E0, + 278.83E0, 281.08E0, 283.81E0, 286.11E0, 288.81E0, + 291.08E0, 293.75E0, 295.99E0, 298.64E0, 300.84E0, + 302.02E0, 303.48E0, 305.65E0, 308.27E0, 310.41E0, + 313.01E0, 315.12E0, 317.71E0, 319.79E0, 322.36E0, + 324.42E0, 326.98E0, 329.01E0, 331.56E0, 333.56E0, + 336.10E0, 338.08E0, 340.60E0, 342.57E0, 345.08E0, + 347.02E0, 349.52E0, 351.44E0, 353.93E0, 355.83E0, + 358.32E0, 360.20E0, 362.67E0, 364.53E0, 367.00E0, + 371.30E0 +}; + +static void +kirby2_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 3.9050739624E+00; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < kirby2_P; ++i) + { + gsl_test_rel(x[i], kirby2_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +kirby2_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[kirby2_P]; + size_t i; + + for (i = 0; i < kirby2_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < kirby2_N; i++) + { + double t = kirby2_F0[i]; + double y = ((b[0] + t* (b[1] + t * b[2])) + / (1 + t*(b[3] + t *b[4]))); + gsl_vector_set (f, i, kirby2_F1[i] - y); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +kirby2_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(kirby2_J, kirby2_N, kirby2_P); + double b[kirby2_P]; + size_t i; + + for (i = 0; i < kirby2_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < kirby2_N; i++) + { + double t = kirby2_F0[i]; + double u = (b[0] + t*(b[1] + t*b[2])); + double v = (1 + t*(b[3] + t*b[4])); + gsl_matrix_set (&J.matrix, i, 0, -1/v); + gsl_matrix_set (&J.matrix, i, 1, -t/v); + gsl_matrix_set (&J.matrix, i, 2, -t*t/v); + gsl_matrix_set (&J.matrix, i, 3, t*u/(v*v)); + gsl_matrix_set (&J.matrix, i, 4, t*t*u/(v*v)); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +kirby2_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double x5 = gsl_vector_get(x, 4); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + double v4 = gsl_vector_get(v, 3); + double v5 = gsl_vector_get(v, 4); + size_t i; + + for (i = 0; i < kirby2_N; i++) + { + double t = kirby2_F0[i]; + double term1 = 1.0 + t*(x4 + t*x5); + + gsl_vector_set(fvv, i, -2*t/pow(term1, 3.0) * + (v4 + t*v5) * + (-t*(-v2 + v4*x1 + + t*(-v3 + v5*x1 + v4*x2 + t*v5*x2 + t*(v4+t*v5)*x3)) + + t*t*(v2 + t*v3)*(x4 + t*x5) + v1*(1.0 + t*(x4 + t*x5)))); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf kirby2_func = +{ + kirby2_f, + kirby2_df, + kirby2_fvv, + kirby2_N, + kirby2_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem kirby2a_problem = +{ + "nist-kirby2a", + kirby2_x0a, + kirby2_sigma, + &kirby2_epsrel, + &kirby2_checksol, + &kirby2_func +}; + +static test_fdf_problem kirby2b_problem = +{ + "nist-kirby2b", + kirby2_x0b, + kirby2_sigma, + &kirby2_epsrel, + &kirby2_checksol, + &kirby2_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_kowalik.c gsl-doc-2.3/multilarge_nlinear/test_kowalik.c --- gsl-doc-1.16/multilarge_nlinear/test_kowalik.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_kowalik.c 2016-08-12 19:51:37.000000000 +0000 @@ -0,0 +1,174 @@ +#define kowalik_N 11 +#define kowalik_P 4 + +static double kowalik_x0[kowalik_P] = { 0.25, 0.39, 0.415, 0.39 }; +static double kowalik_epsrel = 1.0e-7; + +static double kowalik_J[kowalik_N * kowalik_P]; + +static double kowalik_Y[kowalik_N] = { +0.1957, 0.1947, 0.1735, 0.1600, 0.0844, 0.0627, +0.0456, 0.0342, 0.0323, 0.0235, 0.0246 +}; + +static double kowalik_U[kowalik_N] = { +4.0000, 2.0000, 1.0000, 0.5000, 0.2500, 0.1670, +0.1250, 0.1000, 0.0833, 0.0714, 0.0625 +}; + +static void +kowalik_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + gsl_vector_const_view v = gsl_vector_const_view_array(x, kowalik_P); + const double norm = gsl_blas_dnrm2(&v.vector); + const double sumsq_exact1 = 3.075056038492370e-04; + const double kowalik_x1[kowalik_P] = { 1.928069345723978e-01, + 1.912823290344599e-01, + 1.230565070690708e-01, + 1.360623308065148e-01 }; + const double sumsq_exact2 = 0.00102734304869549252; + const double kowalik_x2[kowalik_P] = { GSL_NAN, /* inf */ + -14.0758834005984603, + GSL_NAN, /* -inf */ + GSL_NAN }; /* -inf */ + const double *kowalik_x; + double sumsq_exact; + + if (norm < 10.0) + { + kowalik_x = kowalik_x1; + sumsq_exact = sumsq_exact1; + } + else + { + kowalik_x = kowalik_x2; + sumsq_exact = sumsq_exact2; + } + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < kowalik_P; ++i) + { + if (!gsl_finite(kowalik_x[i])) + continue; + + gsl_test_rel(x[i], kowalik_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +kowalik_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + size_t i; + + for (i = 0; i < kowalik_N; ++i) + { + double yi = kowalik_Y[i]; + double ui = kowalik_U[i]; + double fi = yi - (x1*ui*(ui+x2)) / (x4 + ui*(ui + x3)); + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +kowalik_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(kowalik_J, kowalik_N, kowalik_P); + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + size_t i; + + for (i = 0; i < kowalik_N; ++i) + { + double ui = kowalik_U[i]; + double term1 = ui*(ui + x2); + double term2 = ui*(ui + x3) + x4; + + gsl_matrix_set(&J.matrix, i, 0, -term1 / term2); + gsl_matrix_set(&J.matrix, i, 1, -ui*x1/term2); + gsl_matrix_set(&J.matrix, i, 2, ui*term1*x1 / (term2*term2)); + gsl_matrix_set(&J.matrix, i, 3, term1*x1 / (term2*term2)); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +kowalik_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + double v4 = gsl_vector_get(v, 3); + size_t i; + + for (i = 0; i < kowalik_N; ++i) + { + double ui = kowalik_U[i]; + double term2 = ui*(ui + x3) + x4; + double term3 = ui*ui*v1 - ui*v3*x1 - v4*x1 + + ui*v1*x3 + v1*x4; + double term4 = ui*ui*(v3-v2) + v4*x2 + + ui*(v4 + v3*x2 - v2*x3) - v2*x4; + + gsl_vector_set(fvv, i, 2.0*ui*term3*term4 / pow(term2, 3.0)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf kowalik_func = +{ + kowalik_f, + kowalik_df, + kowalik_fvv, + kowalik_N, + kowalik_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem kowalik_problem = +{ + "kowalik", + kowalik_x0, + NULL, + &kowalik_epsrel, + &kowalik_checksol, + &kowalik_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_lin1.c gsl-doc-2.3/multilarge_nlinear/test_lin1.c --- gsl-doc-1.16/multilarge_nlinear/test_lin1.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_lin1.c 2016-08-12 19:51:40.000000000 +0000 @@ -0,0 +1,118 @@ +#define lin1_N 11 /* can be anything >= p */ +#define lin1_P 5 + +static double lin1_x0[lin1_P] = { 1.0, 1.0, 1.0, 1.0, 1.0 }; +static double lin1_epsrel = 1.0e-10; + +static double lin1_J[lin1_N * lin1_P]; + +static void +lin1_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = (double) (lin1_N - lin1_P); + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < lin1_P; ++i) + { + gsl_test_rel(x[i], -1.0, epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +lin1_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + size_t i, j; + + for (i = 0; i < lin1_N; ++i) + { + double fi = 0.0; + + for (j = 0; j < lin1_P; ++j) + { + double xj = gsl_vector_get(x, j); + double Aij = (i == j) ? 1.0 : 0.0; + Aij -= 2.0 / lin1_N; + fi += Aij * xj; + } + + fi -= 1.0; + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +lin1_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(lin1_J, lin1_N, lin1_P); + size_t i, j; + + for (i = 0; i < lin1_N; ++i) + { + for (j = 0; j < lin1_P; ++j) + { + double Jij = (i == j) ? 1.0 : 0.0; + Jij -= 2.0 / lin1_N; + gsl_matrix_set(&J.matrix, i, j, Jij); + } + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +lin1_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + (void)x; /* avoid unused parameter warnings */ + (void)v; + (void)params; + + gsl_vector_set_zero(fvv); + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf lin1_func = +{ + lin1_f, + lin1_df, + lin1_fvv, + lin1_N, + lin1_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem lin1_problem = +{ + "linear_full", + lin1_x0, + NULL, + &lin1_epsrel, + &lin1_checksol, + &lin1_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_lin2.c gsl-doc-2.3/multilarge_nlinear/test_lin2.c --- gsl-doc-1.16/multilarge_nlinear/test_lin2.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_lin2.c 2016-08-12 19:51:43.000000000 +0000 @@ -0,0 +1,117 @@ +#define lin2_N 20 /* can be anything >= p */ +#define lin2_P 5 + +static double lin2_x0[lin2_P] = { 1.0, 1.0, 1.0, 1.0, 1.0 }; +static double lin2_epsrel = 1.0e-8; + +static double lin2_J[lin2_N * lin2_P]; + +static void +lin2_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double n = (double) lin2_N; + const double sumsq_exact = 0.5 * (n*(n - 1.0)) / (2.0*n + 1.0); + const double sum_exact = 3.0 / (2.0*n + 1.0); + double sum = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < lin2_P; ++i) + sum += (i + 1.0) * x[i]; + + gsl_test_rel(sum, sum_exact, epsrel, "%s/%s coeff sum", + sname, pname); +} + +static int +lin2_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + size_t i, j; + + for (i = 0; i < lin2_N; ++i) + { + double fi = 0.0; + + for (j = 0; j < lin2_P; ++j) + { + double xj = gsl_vector_get(x, j); + fi += (j + 1) * xj; + } + + fi = (i + 1) * fi - 1.0; + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +lin2_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(lin2_J, lin2_N, lin2_P); + size_t i, j; + + for (i = 0; i < lin2_N; ++i) + { + for (j = 0; j < lin2_P; ++j) + { + gsl_matrix_set(&J.matrix, i, j, (i + 1.0) * (j + 1.0)); + } + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +lin2_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + (void)x; /* avoid unused parameter warnings */ + (void)v; + (void)params; + + gsl_vector_set_zero(fvv); + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf lin2_func = +{ + lin2_f, + lin2_df, + lin2_fvv, + lin2_N, + lin2_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem lin2_problem = +{ + "linear_rank1", + lin2_x0, + NULL, + &lin2_epsrel, + &lin2_checksol, + &lin2_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_lin3.c gsl-doc-2.3/multilarge_nlinear/test_lin3.c --- gsl-doc-1.16/multilarge_nlinear/test_lin3.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_lin3.c 2016-08-12 19:51:46.000000000 +0000 @@ -0,0 +1,124 @@ +#define lin3_N 50 /* can be anything >= p */ +#define lin3_P 10 /* >= 3 */ + +static double lin3_x0[lin3_P] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 }; +static double lin3_epsrel = 1.0e-8; + +static double lin3_J[lin3_N * lin3_P]; + +static void +lin3_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double n = (double) lin3_N; + const double sumsq_exact = 0.5 * (n*n + 3*n - 6.0) / (2*n - 3.0); + const double sum_exact = 3.0 / (2.0*n - 3.0); + double sum = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 1; i < lin3_P - 1; ++i) + sum += (i + 1.0) * x[i]; + + gsl_test_rel(sum, sum_exact, epsrel, "%s/%s coeff sum", + sname, pname); + + (void)x; /* avoid unused parameter warning */ +} + +static int +lin3_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + size_t i, j; + + gsl_vector_set(f, 0, -1.0); + gsl_vector_set(f, lin3_N - 1, -1.0); + + for (i = 1; i < lin3_N - 1; ++i) + { + double fi = 0.0; + + for (j = 1; j < lin3_P - 1; ++j) + { + double xj = gsl_vector_get(x, j); + fi += (j + 1) * xj; + } + + fi = i * fi - 1.0; + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +lin3_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(lin3_J, lin3_N, lin3_P); + size_t i, j; + + gsl_matrix_set_zero(&J.matrix); + + for (i = 1; i < lin3_N - 1; ++i) + { + for (j = 1; j < lin3_P - 1; ++j) + { + gsl_matrix_set(&J.matrix, i, j, i * (j + 1.0)); + } + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +lin3_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + (void)x; /* avoid unused parameter warnings */ + (void)v; + (void)params; + + gsl_vector_set_zero(fvv); + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf lin3_func = +{ + lin3_f, + lin3_df, + lin3_fvv, + lin3_N, + lin3_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem lin3_problem = +{ + "linear_rank1zeros", + lin3_x0, + NULL, + &lin3_epsrel, + &lin3_checksol, + &lin3_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_meyer.c gsl-doc-2.3/multilarge_nlinear/test_meyer.c --- gsl-doc-1.16/multilarge_nlinear/test_meyer.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_meyer.c 2016-08-23 20:27:03.000000000 +0000 @@ -0,0 +1,142 @@ +#define meyer_N 16 +#define meyer_P 3 + +static double meyer_x0[meyer_P] = { 0.02, 4000.0, 250.0 }; +static double meyer_epsrel = 1.0e-7; + +static double meyer_J[meyer_N * meyer_P]; + +static double meyer_Y[meyer_N] = { +34780., 28610., 23650., 19630., 16370., 13720., 11540., +9744., 8261., 7030., 6005., 5147., 4427., 3820., +3307., 2872. +}; + +static void +meyer_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 8.794585517053883e+01; + const double meyer_x[meyer_P] = { 5.609636471049458e-03, + 6.181346346283188e+03, + 3.452236346240292e+02 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < meyer_P; ++i) + { + gsl_test_rel(x[i], meyer_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +meyer_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < meyer_N; ++i) + { + double ti = 45.0 + 5.0*(i + 1.0); + double yi = meyer_Y[i]; + double fi = x1 * exp(x2 / (ti + x3)) - yi; + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +meyer_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(meyer_J, meyer_N, meyer_P); + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < meyer_N; ++i) + { + double ti = 45.0 + 5.0*(i + 1.0); + double term1 = ti + x3; + double term2 = exp(x2 / term1); + + gsl_matrix_set(&J.matrix, i, 0, term2); + gsl_matrix_set(&J.matrix, i, 1, x1*term2/term1); + gsl_matrix_set(&J.matrix, i, 2, -x1*x2*term2/(term1*term1)); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +meyer_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + size_t i; + + for (i = 0; i < meyer_N; ++i) + { + double ti = 45.0 + 5.0*(i + 1.0); + double term1 = ti + x3; + double term2 = exp(x2 / term1); + double term3 = v2*term1 - v3*x2; + double term4 = 2*ti*ti*v1 - v3*x1*(x2 + 2*x3) + + x3*(v2*x1 + 2*v1*x3) + + ti*(v2*x1 - 2*v3*x1 + 4*v1*x3); + + gsl_vector_set(fvv, i, term2 * term3 * term4 / pow(term1, 4.0)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf meyer_func = +{ + meyer_f, + meyer_df, + meyer_fvv, + meyer_N, + meyer_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem meyer_problem = +{ + "meyer", + meyer_x0, + NULL, + &meyer_epsrel, + &meyer_checksol, + &meyer_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_meyerscal.c gsl-doc-2.3/multilarge_nlinear/test_meyerscal.c --- gsl-doc-1.16/multilarge_nlinear/test_meyerscal.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_meyerscal.c 2016-08-25 15:11:40.000000000 +0000 @@ -0,0 +1,143 @@ +#define meyerscal_N 16 +#define meyerscal_P 3 + +static double meyerscal_x0[meyerscal_P] = { 8.85, 4.0, 2.5 }; +static double meyerscal_epsrel = 1.0e-6; + +static double meyerscal_J[meyerscal_N * meyerscal_P]; + +static double meyerscal_Y[meyerscal_N] = { +34780., 28610., 23650., 19630., 16370., 13720., 11540., +9744., 8261., 7030., 6005., 5147., 4427., 3820., +3307., 2872. +}; + +static void +meyerscal_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 8.794585517003888e-05; + const double meyerscal_x[meyerscal_P] = { 2.481778312286695e+00, + 6.181346341853554e+00, + 3.452236344749865e+00 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < meyerscal_P; ++i) + { + gsl_test_rel(x[i], meyerscal_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +meyerscal_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < meyerscal_N; ++i) + { + double ti = 0.45 + 0.05*(i + 1.0); + double yi = meyerscal_Y[i]; + double fi = x1 * exp(10.0*x2 / (ti + x3) - 13.0) - 1.0e-3*yi; + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +meyerscal_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(meyerscal_J, meyerscal_N, meyerscal_P); + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + size_t i; + + for (i = 0; i < meyerscal_N; ++i) + { + double ti = 0.45 + 0.05*(i + 1.0); + double term1 = ti + x3; + double term2 = exp(10.0*x2/term1 - 13.0); + + gsl_matrix_set(&J.matrix, i, 0, term2); + gsl_matrix_set(&J.matrix, i, 1, 10.0*x1*term2/term1); + gsl_matrix_set(&J.matrix, i, 2, -10.0*x1*x2*term2/(term1*term1)); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +meyerscal_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + size_t i; + + for (i = 0; i < meyerscal_N; ++i) + { + double ti = 0.45 + 0.05*(i + 1.0); + double term1 = ti + x3; + double term2 = exp(10.0*x2/term1 - 13.0); + double term3 = v2*term1 - v3*x2; + double term4 = ti*ti*v1 - + v3*x1*(5*x2 + x3) + + x3*(5*v2*x1 + v1*x3) + + ti*(5*v2*x1 - v3*x1 + 2*v1*x3); + + gsl_vector_set(fvv, i, 20*term2*term3*term4 / pow(term1, 4.0)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf meyerscal_func = +{ + meyerscal_f, + meyerscal_df, + meyerscal_fvv, + meyerscal_N, + meyerscal_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem meyerscal_problem = +{ + "meyerscal", + meyerscal_x0, + NULL, + &meyerscal_epsrel, + &meyerscal_checksol, + &meyerscal_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_osborne.c gsl-doc-2.3/multilarge_nlinear/test_osborne.c --- gsl-doc-1.16/multilarge_nlinear/test_osborne.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_osborne.c 2016-08-12 19:51:56.000000000 +0000 @@ -0,0 +1,146 @@ +#define osborne_N 33 +#define osborne_P 5 + +static double osborne_x0[osborne_P] = { 0.5, 1.5, -1.0, 0.01, 0.02 }; +static double osborne_epsrel = 1.0e-8; + +static double osborne_J[osborne_N * osborne_P]; + +static double osborne_Y[osborne_N] = { +0.844, 0.908, 0.932, 0.936, 0.925, 0.908, 0.881, +0.850, 0.818, 0.784, 0.751, 0.718, 0.685, 0.658, +0.628, 0.603, 0.580, 0.558, 0.538, 0.522, 0.506, +0.490, 0.478, 0.467, 0.457, 0.448, 0.438, 0.431, +0.424, 0.420, 0.414, 0.411, 0.406 +}; + +static void +osborne_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + const double sumsq_exact = 5.464894697482687e-05; + const double osborne_x[osborne_P] = { + 3.754100521058740e-01, GSL_NAN, GSL_NAN, GSL_NAN, GSL_NAN }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + /* only the first model parameter is uniquely constrained */ + gsl_test_rel(x[0], osborne_x[0], epsrel, "%s/%s i=0", + sname, pname); +} + +static int +osborne_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double x5 = gsl_vector_get(x, 4); + size_t i; + + for (i = 0; i < osborne_N; ++i) + { + double ti = 10.0*i; + double yi = osborne_Y[i]; + double fi = yi - (x1 + x2*exp(-x4*ti) + x3*exp(-x5*ti)); + gsl_vector_set(f, i, fi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +osborne_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(osborne_J, osborne_N, osborne_P); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double x5 = gsl_vector_get(x, 4); + size_t i; + + for (i = 0; i < osborne_N; ++i) + { + double ti = 10.0*i; + double term1 = exp(-x4*ti); + double term2 = exp(-x5*ti); + + gsl_matrix_set(&J.matrix, i, 0, -1.0); + gsl_matrix_set(&J.matrix, i, 1, -term1); + gsl_matrix_set(&J.matrix, i, 2, -term2); + gsl_matrix_set(&J.matrix, i, 3, ti*x2*term1); + gsl_matrix_set(&J.matrix, i, 4, ti*x3*term2); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +osborne_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + double x5 = gsl_vector_get(x, 4); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + double v4 = gsl_vector_get(v, 3); + double v5 = gsl_vector_get(v, 4); + size_t i; + + for (i = 0; i < osborne_N; ++i) + { + double ti = 10.0*i; + double term1 = exp(-x4*ti); + double term2 = exp(-x5*ti); + double term3 = -2*v2 + ti*v4*x2; + double term4 = -2*v3 + ti*v5*x3; + + gsl_vector_set(fvv, i, -term1 * term2 * ti * + (v4 / term2 * term3 + v5 / term1 * term4)); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf osborne_func = +{ + osborne_f, + osborne_df, + osborne_fvv, + osborne_N, + osborne_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem osborne_problem = +{ + "osborne", + osborne_x0, + NULL, + &osborne_epsrel, + &osborne_checksol, + &osborne_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_penalty1.c gsl-doc-2.3/multilarge_nlinear/test_penalty1.c --- gsl-doc-1.16/multilarge_nlinear/test_penalty1.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_penalty1.c 2016-08-12 21:38:22.000000000 +0000 @@ -0,0 +1,118 @@ +#define penalty1_P 10 +#define penalty1_N (penalty1_P + 1) + +static double penalty1_x0[penalty1_P] = { 1.0, 2.0, 3.0, 4.0, 5.0, + 6.0, 7.0, 8.0, 9.0, 10.0 }; +static double penalty1_epsrel = 1.0e-12; + +static double penalty1_J[penalty1_N * penalty1_P]; + +static void +penalty1_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + const double sumsq_exact = 7.08765146709037993e-05; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + (void)x; /* avoid unused parameter warning */ +} + +static int +penalty1_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + const double alpha = 1.0e-5; + const double sqrt_alpha = sqrt(alpha); + size_t i; + double sum = 0.0; + + for (i = 0; i < penalty1_P; ++i) + { + double xi = gsl_vector_get(x, i); + + gsl_vector_set(f, i, sqrt_alpha*(xi - 1.0)); + + sum += xi * xi; + } + + gsl_vector_set(f, penalty1_N - 1, sum - 0.25); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +penalty1_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(penalty1_J, penalty1_N, penalty1_P); + const double alpha = 1.0e-5; + const double sqrt_alpha = sqrt(alpha); + size_t i; + gsl_matrix_view m = gsl_matrix_submatrix(&J.matrix, 0, 0, penalty1_P, penalty1_P); + gsl_vector_view diag = gsl_matrix_diagonal(&m.matrix); + + gsl_matrix_set_zero(&m.matrix); + gsl_vector_set_all(&diag.vector, sqrt_alpha); + + for (i = 0; i < penalty1_P; ++i) + { + double xi = gsl_vector_get(x, i); + gsl_matrix_set(&J.matrix, penalty1_N - 1, i, 2.0 * xi); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +penalty1_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double u; + + gsl_vector_set_zero(fvv); + + gsl_blas_ddot(v, v, &u); + gsl_vector_set(fvv, penalty1_N - 1, 2.0 * u); + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf penalty1_func = +{ + penalty1_f, + penalty1_df, + penalty1_fvv, + penalty1_N, + penalty1_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem penalty1_problem = +{ + "penalty1", + penalty1_x0, + NULL, + &penalty1_epsrel, + &penalty1_checksol, + &penalty1_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_penalty2.c gsl-doc-2.3/multilarge_nlinear/test_penalty2.c --- gsl-doc-1.16/multilarge_nlinear/test_penalty2.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_penalty2.c 2016-08-12 19:52:02.000000000 +0000 @@ -0,0 +1,190 @@ +#define penalty2_N 8 /* 2*p */ +#define penalty2_P 4 + +static double penalty2_x0[penalty2_P] = { 0.5, 0.5, 0.5, 0.5 }; +static double penalty2_epsrel = 1.0e-12; + +static double penalty2_J[penalty2_N * penalty2_P]; + +static void +penalty2_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + const double sumsq_exact = 9.37629300735544219e-06; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + (void)x; /* avoid unused parameter warning */ +} + +static int +penalty2_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + const double alpha = 1.0e-5; + const double sqrt_alpha = sqrt(alpha); + double x1 = gsl_vector_get(x, 0); + size_t i; + double sum = penalty2_P * x1 * x1; + + gsl_vector_set(f, 0, x1 - 0.2); + + /* rows [2:p] */ + for (i = 1; i < penalty2_P; ++i) + { + double xi = gsl_vector_get(x, i); + double xim1 = gsl_vector_get(x, i - 1); + double yi = exp(0.1*(i + 1.0)) + exp(0.1*i); + + gsl_vector_set(f, i, sqrt_alpha*(exp(0.1*xi) + exp(0.1*xim1) - yi)); + + sum += (penalty2_P - i) * xi * xi; + } + + /* rows [p+1:2p-1] */ + for (i = penalty2_P; i < penalty2_N - 1; ++i) + { + double xi = gsl_vector_get(x, i - penalty2_P + 1); + + gsl_vector_set(f, i, sqrt_alpha*(exp(0.1*xi) - exp(-0.1))); + } + + /* row 2p */ + gsl_vector_set(f, penalty2_N - 1, sum - 1.0); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +penalty2_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(penalty2_J, penalty2_N, penalty2_P); + const double alpha = 1.0e-5; + const double sqrt_alpha = sqrt(alpha); + size_t i, j; + + for (j = 0; j < penalty2_P; ++j) + { + double xj = gsl_vector_get(x, j); + double delta1j = (j == 0) ? 1.0 : 0.0; + + /* first and last rows */ + gsl_matrix_set(&J.matrix, 0, j, delta1j); + gsl_matrix_set(&J.matrix, penalty2_N - 1, j, 2.0 * (penalty2_P - j) * xj); + + /* rows [2:p] */ + for (i = 1; i < penalty2_P; ++i) + { + double xi = gsl_vector_get(x, i); + double xim1 = gsl_vector_get(x, i - 1); + double Jij; + + if (i == j) + Jij = exp(0.1 * xi); + else if (i - 1 == j) + Jij = exp(0.1 * xim1); + else + Jij = 0.0; + + Jij *= 0.1 * sqrt_alpha; + + gsl_matrix_set(&J.matrix, i, j, Jij); + } + + /* rows [p+1:2p-1] */ + for (i = penalty2_P; i < penalty2_N - 1; ++i) + { + double xi = gsl_vector_get(x, i - penalty2_P + 1); + + if (i - penalty2_P + 1 == j) + gsl_matrix_set(&J.matrix, i, j, 0.1 * sqrt_alpha * exp(0.1*xi)); + else + gsl_matrix_set(&J.matrix, i, j, 0.0); + } + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +penalty2_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + const double alpha = 1.0e-5; + const double sqrt_alpha = sqrt(alpha); + double v1 = gsl_vector_get(v, 0); + double sum = penalty2_P * v1 * v1; + size_t i; + + /* first row */ + gsl_vector_set(fvv, 0, 0.0); + + /* rows [2:p] */ + for (i = 1; i < penalty2_P; ++i) + { + double xi = gsl_vector_get(x, i); + double xim1 = gsl_vector_get(x, i - 1); + double vi = gsl_vector_get(v, i); + double vim1 = gsl_vector_get(v, i - 1); + double term1 = exp(xi / 10.0); + double term2 = exp(xim1 / 10.0); + + gsl_vector_set(fvv, i, + sqrt_alpha / 100.0 * (term1 * vi * vi + term2 * vim1 * vim1)); + + sum += (penalty2_P - i) * vi * vi; + } + + /* last row */ + gsl_vector_set(fvv, penalty2_N - 1, 2.0 * sum); + + /* rows [p+1:2p-1] */ + for (i = penalty2_P; i < penalty2_N - 1; ++i) + { + double xi = gsl_vector_get(x, i - penalty2_P + 1); + double vi = gsl_vector_get(v, i - penalty2_P + 1); + + gsl_vector_set(fvv, i, sqrt_alpha / 100.0 * exp(xi / 10.0) * vi * vi); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf penalty2_func = +{ + penalty2_f, + penalty2_df, + penalty2_fvv, + penalty2_N, + penalty2_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem penalty2_problem = +{ + "penalty2", + penalty2_x0, + NULL, + &penalty2_epsrel, + &penalty2_checksol, + &penalty2_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_powell1.c gsl-doc-2.3/multilarge_nlinear/test_powell1.c --- gsl-doc-1.16/multilarge_nlinear/test_powell1.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_powell1.c 2016-08-12 19:52:05.000000000 +0000 @@ -0,0 +1,131 @@ +#define powell1_N 4 +#define powell1_P 4 + +static double powell1_x0[powell1_P] = { 3.0, -1.0, 0.0, 1.0 }; +static double powell1_epsrel = 1.0e-4; + +static double powell1_J[powell1_N * powell1_P]; + +static void +powell1_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < powell1_P; ++i) + { + gsl_test_rel(x[i], 0.0, epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +powell1_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get (x, 0); + double x2 = gsl_vector_get (x, 1); + double x3 = gsl_vector_get (x, 2); + double x4 = gsl_vector_get (x, 3); + + gsl_vector_set(f, 0, x1 + 10.0*x2); + gsl_vector_set(f, 1, sqrt(5.0) * (x3 - x4)); + gsl_vector_set(f, 2, pow(x2 - 2.0*x3, 2.0)); + gsl_vector_set(f, 3, sqrt(10.0) * pow((x1 - x4), 2.0)); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +powell1_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(powell1_J, powell1_N, powell1_P); + double x1 = gsl_vector_get (x, 0); + double x2 = gsl_vector_get (x, 1); + double x3 = gsl_vector_get (x, 2); + double x4 = gsl_vector_get (x, 3); + double term1 = x2 - 2.0*x3; + double term2 = x1 - x4; + + gsl_matrix_set(&J.matrix, 0, 0, 1.0); + gsl_matrix_set(&J.matrix, 0, 1, 10.0); + gsl_matrix_set(&J.matrix, 0, 2, 0.0); + gsl_matrix_set(&J.matrix, 0, 3, 0.0); + + gsl_matrix_set(&J.matrix, 1, 0, 0.0); + gsl_matrix_set(&J.matrix, 1, 1, 0.0); + gsl_matrix_set(&J.matrix, 1, 2, sqrt(5.0)); + gsl_matrix_set(&J.matrix, 1, 3, -sqrt(5.0)); + + gsl_matrix_set(&J.matrix, 2, 0, 0.0); + gsl_matrix_set(&J.matrix, 2, 1, 2.0*term1); + gsl_matrix_set(&J.matrix, 2, 2, -4.0*term1); + gsl_matrix_set(&J.matrix, 2, 3, 0.0); + + gsl_matrix_set(&J.matrix, 3, 0, 2.0*sqrt(10.0)*term2); + gsl_matrix_set(&J.matrix, 3, 1, 0.0); + gsl_matrix_set(&J.matrix, 3, 2, 0.0); + gsl_matrix_set(&J.matrix, 3, 3, -2.0*sqrt(10.0)*term2); + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +powell1_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + double v4 = gsl_vector_get(v, 3); + + gsl_vector_set(fvv, 0, 0.0); + gsl_vector_set(fvv, 1, 0.0); + gsl_vector_set(fvv, 2, 2.0 * pow(v2 - 2.0*v3, 2.0)); + gsl_vector_set(fvv, 3, 2.0 * sqrt(10.0) * pow(v1 - v4, 2.0)); + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf powell1_func = +{ + powell1_f, + powell1_df, + powell1_fvv, + powell1_N, + powell1_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem powell1_problem = +{ + "powell_singular", + powell1_x0, + NULL, + &powell1_epsrel, + &powell1_checksol, + &powell1_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_powell2.c gsl-doc-2.3/multilarge_nlinear/test_powell2.c --- gsl-doc-1.16/multilarge_nlinear/test_powell2.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_powell2.c 2016-08-12 19:52:08.000000000 +0000 @@ -0,0 +1,106 @@ +#define powell2_N 2 +#define powell2_P 2 + +static double powell2_x0[powell2_P] = { 3.0, 1.0 }; +static double powell2_epsrel = 1.0e-3; + +static double powell2_J[powell2_N * powell2_P]; + +static void +powell2_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < powell2_P; ++i) + { + gsl_test_rel(x[i], 0.0, epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +powell2_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x0 = gsl_vector_get (x, 0); + double x1 = gsl_vector_get (x, 1); + + gsl_vector_set(f, 0, x0); + gsl_vector_set(f, 1, 10.0*x0/(x0 + 0.1) + 2.0*x1*x1); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +powell2_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(powell2_J, powell2_N, powell2_P); + double x0 = gsl_vector_get (x, 0); + double x1 = gsl_vector_get (x, 1); + double term = x0 + 0.1; + + gsl_matrix_set(&J.matrix, 0, 0, 1.0); + gsl_matrix_set(&J.matrix, 0, 1, 0.0); + gsl_matrix_set(&J.matrix, 1, 0, 1.0 / (term * term)); + gsl_matrix_set(&J.matrix, 1, 1, 4.0 * x1); + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +powell2_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x0 = gsl_vector_get (x, 0); + double v0 = gsl_vector_get (v, 0); + double v1 = gsl_vector_get (v, 1); + double term = x0 + 0.1; + + gsl_vector_set(fvv, 0, 0.0); + gsl_vector_set(fvv, 1, 4*v1*v1 - (2*v0*v0)/pow(term, 3.0)); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf powell2_func = +{ + powell2_f, + powell2_df, + powell2_fvv, + powell2_N, + powell2_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem powell2_problem = +{ + "powell2", + powell2_x0, + NULL, + &powell2_epsrel, + &powell2_checksol, + &powell2_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_powell3.c gsl-doc-2.3/multilarge_nlinear/test_powell3.c --- gsl-doc-1.16/multilarge_nlinear/test_powell3.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_powell3.c 2016-08-12 19:52:11.000000000 +0000 @@ -0,0 +1,108 @@ +#define powell3_N 2 +#define powell3_P 2 + +static double powell3_x0[powell3_P] = { 0.0, 1.0 }; +static double powell3_epsrel = 1.0e-10; + +static double powell3_J[powell3_N * powell3_P]; + +static void +powell3_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + const double powell3_x[powell3_P] = { 1.09815932969975976e-05, + 9.10614673986700218 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < powell3_P; ++i) + { + gsl_test_rel(x[i], powell3_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +powell3_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + + gsl_vector_set(f, 0, 1.0e4*x1*x2 - 1.0); + gsl_vector_set(f, 1, exp(-x1) + exp(-x2) - 1.0001); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +powell3_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(powell3_J, powell3_N, powell3_P); + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + + gsl_matrix_set(&J.matrix, 0, 0, 1.0e4*x2); + gsl_matrix_set(&J.matrix, 0, 1, 1.0e4*x1); + + gsl_matrix_set(&J.matrix, 1, 0, -exp(-x1)); + gsl_matrix_set(&J.matrix, 1, 1, -exp(-x2)); + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +powell3_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + + gsl_vector_set(fvv, 0, 2.0e4 * v1 * v2); + gsl_vector_set(fvv, 1, v1*v1*exp(-x1) + v2*v2*exp(-x2)); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf powell3_func = +{ + powell3_f, + powell3_df, + powell3_fvv, + powell3_N, + powell3_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem powell3_problem = +{ + "powell_badly_scaled", + powell3_x0, + NULL, + &powell3_epsrel, + &powell3_checksol, + &powell3_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_rat42.c gsl-doc-2.3/multilarge_nlinear/test_rat42.c --- gsl-doc-1.16/multilarge_nlinear/test_rat42.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_rat42.c 2016-08-12 19:52:14.000000000 +0000 @@ -0,0 +1,163 @@ +#define rat42_N 9 +#define rat42_P 3 + +static double rat42_x0a[rat42_P] = { 100.0, 1.0, 0.1 }; +static double rat42_x0b[rat42_P] = { 75.0, 2.5, 0.07 }; +static double rat42_epsrel = 1.0e-7; + +static double rat42_J[rat42_N * rat42_P]; + +static double rat42_sigma[rat42_P] = { + 1.7340283401E+00, 8.8295217536E-02, 3.4465663377E-03 +}; + +static double rat42_X[rat42_N] = { 9.0, 14.0, 21.0, 28.0, 42.0, + 57.0, 63.0, 70.0, 79.0 }; + +static double rat42_F[rat42_N] = { 8.930, 10.800, 18.590, 22.330, + 39.350, 56.110, 61.730, 64.620, + 67.080 }; + +static void +rat42_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 8.0565229338E+00; + const double rat42_x[rat42_P] = { 7.2462237576E+01, + 2.6180768402E+00, + 6.7359200066E-02 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < rat42_P; ++i) + { + gsl_test_rel(x[i], rat42_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + + +static int +rat42_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[rat42_P]; + size_t i; + + for (i = 0; i < rat42_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < rat42_N; i++) + { + double xi = rat42_X[i]; + double yi = b[0] / (1.0 + exp(b[1] - b[2]*xi)); + gsl_vector_set (f, i, yi - rat42_F[i]); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +rat42_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(rat42_J, rat42_N, rat42_P); + double b[rat42_P]; + size_t i; + + for (i = 0; i < rat42_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < rat42_N; i++) + { + double xi = rat42_X[i]; + double term1 = exp(b[1] - b[2]*xi); + double term2 = 1.0 + term1; + + gsl_matrix_set (&J.matrix, i, 0, 1.0 / term2); + gsl_matrix_set (&J.matrix, i, 1, -b[0] * term1 / (term2 * term2)); + gsl_matrix_set (&J.matrix, i, 2, b[0] * term1 * xi / (term2 * term2)); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +rat42_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + double v3 = gsl_vector_get(v, 2); + size_t i; + + for (i = 0; i < rat42_N; i++) + { + double ti = rat42_X[i]; + double term1 = exp(x2); + double term2 = exp(ti * x3); + + gsl_vector_set(fvv, i, + -pow(term1 + term2, -3.0) * term1 * term2 * + (v2 - ti*v3) * (term1*(2*v1 - v2*x1 + ti*v3*x1) + + term2*(2*v1 + x1*(v2 - ti*v3)))); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf rat42_func = +{ + rat42_f, + rat42_df, + rat42_fvv, + rat42_N, + rat42_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem rat42a_problem = +{ + "nist-rat42a", + rat42_x0a, + rat42_sigma, + &rat42_epsrel, + &rat42_checksol, + &rat42_func +}; + +static test_fdf_problem rat42b_problem = +{ + "nist-rat42b", + rat42_x0b, + rat42_sigma, + &rat42_epsrel, + &rat42_checksol, + &rat42_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_rat43.c gsl-doc-2.3/multilarge_nlinear/test_rat43.c --- gsl-doc-1.16/multilarge_nlinear/test_rat43.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_rat43.c 2016-08-12 19:52:20.000000000 +0000 @@ -0,0 +1,137 @@ +#define rat43_N 15 +#define rat43_P 4 + +static double rat43_x0a[rat43_P] = { 100.0, 10.0, 1.0, 1.0 }; +static double rat43_x0b[rat43_P] = { 700.0, 5.0, 0.75, 1.3 }; +static double rat43_epsrel = 1.0e-6; + +static double rat43_J[rat43_N * rat43_P]; + +static double rat43_sigma[rat43_P] = { + 1.6302297817E+01, 2.0828735829E+00, + 1.9566123451E-01, 6.8761936385E-01 +}; + +static double rat43_F[rat43_N] = { 16.08, 33.83, 65.80, 97.20, 191.55, + 326.20, 386.87, 520.53, 590.03, + 651.92, 724.93, 699.56, 689.96, + 637.56, 717.41 }; + +static void +rat43_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 8.7864049080E+03; + const double rat43_x[rat43_P] = { 6.9964151270E+02, + 5.2771253025E+00, + 7.5962938329E-01, + 1.2792483859E+00 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < rat43_P; ++i) + { + gsl_test_rel(x[i], rat43_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + + +static int +rat43_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[rat43_P]; + size_t i; + + for (i = 0; i < rat43_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < rat43_N; i++) + { + double xi = i + 1.0; + double e = exp(b[1] - b[2]*xi); + double yi = b[0] / pow(1.0 + e, 1.0 / b[3]); + gsl_vector_set (f, i, yi - rat43_F[i]); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +rat43_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(rat43_J, rat43_N, rat43_P); + double b[rat43_P]; + size_t i; + + for (i = 0; i < rat43_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < rat43_N; i++) + { + double xi = i + 1.0; + double e = exp(b[1] - b[2]*xi); + double term1 = 1.0 + e; + double term2 = pow(term1, -1.0 / b[3]); + + gsl_matrix_set (&J.matrix, i, 0, term2); + gsl_matrix_set (&J.matrix, i, 1, -b[0] / b[3] * e * term2 / term1); + gsl_matrix_set (&J.matrix, i, 2, b[0] / b[3] * xi * e * term2 / term1); + gsl_matrix_set (&J.matrix, i, 3, b[0] / b[3] / b[3] * log(term1) * term2); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf rat43_func = +{ + rat43_f, + rat43_df, + NULL, /* analytic expression too complex */ + rat43_N, + rat43_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem rat43a_problem = +{ + "nist-rat43a", + rat43_x0a, + rat43_sigma, + &rat43_epsrel, + &rat43_checksol, + &rat43_func +}; + +static test_fdf_problem rat43b_problem = +{ + "nist-rat43b", + rat43_x0b, + rat43_sigma, + &rat43_epsrel, + &rat43_checksol, + &rat43_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_rosenbrock.c gsl-doc-2.3/multilarge_nlinear/test_rosenbrock.c --- gsl-doc-1.16/multilarge_nlinear/test_rosenbrock.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_rosenbrock.c 2016-08-12 19:52:24.000000000 +0000 @@ -0,0 +1,102 @@ +#define rosenbrock_N 2 +#define rosenbrock_P 2 + +static double rosenbrock_x0[rosenbrock_P] = { -1.2, 1.0 }; +static double rosenbrock_epsrel = 1.0e-12; + +static double rosenbrock_J[rosenbrock_N * rosenbrock_P]; + +static void +rosenbrock_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < rosenbrock_P; ++i) + { + gsl_test_rel(x[i], 1.0, epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +rosenbrock_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + + gsl_vector_set(f, 0, 10.0 * (x2 - x1*x1)); + gsl_vector_set(f, 1, 1.0 - x1); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +rosenbrock_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(rosenbrock_J, rosenbrock_N, rosenbrock_P); + double x1 = gsl_vector_get(x, 0); + + gsl_matrix_set(&J.matrix, 0, 0, -20.0*x1); + gsl_matrix_set(&J.matrix, 0, 1, 10.0); + gsl_matrix_set(&J.matrix, 1, 0, -1.0); + gsl_matrix_set(&J.matrix, 1, 1, 0.0); + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +rosenbrock_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double v1 = gsl_vector_get(v, 0); + + gsl_vector_set(fvv, 0, -20.0 * v1 * v1); + gsl_vector_set(fvv, 1, 0.0); + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf rosenbrock_func = +{ + rosenbrock_f, + rosenbrock_df, + rosenbrock_fvv, + rosenbrock_N, + rosenbrock_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem rosenbrock_problem = +{ + "rosenbrock", + rosenbrock_x0, + NULL, + &rosenbrock_epsrel, + &rosenbrock_checksol, + &rosenbrock_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_rosenbrocke.c gsl-doc-2.3/multilarge_nlinear/test_rosenbrocke.c --- gsl-doc-1.16/multilarge_nlinear/test_rosenbrocke.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_rosenbrocke.c 2016-08-12 19:52:27.000000000 +0000 @@ -0,0 +1,121 @@ +#define rosenbrocke_N 8 /* = p */ +#define rosenbrocke_P 8 /* must be even */ + +static double rosenbrocke_x0[rosenbrocke_P] = { -1.2, 1.0, -1.2, 1.0, + -1.2, 1.0, -1.2, 1.0 }; +static double rosenbrocke_epsrel = 1.0e-12; + +static double rosenbrocke_J[rosenbrocke_N * rosenbrocke_P]; + +static void +rosenbrocke_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + const double rosenbrocke_x[rosenbrocke_P] = { 1.0, 1.0, 1.0, 1.0, + 1.0, 1.0, 1.0, 1.0 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < rosenbrocke_P; ++i) + { + gsl_test_rel(x[i], rosenbrocke_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +rosenbrocke_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + size_t i; + + for (i = 0; i < rosenbrocke_N / 2; ++i) + { + double x2i = gsl_vector_get(x, 2*i + 1); + double x2im1 = gsl_vector_get(x, 2*i); + + gsl_vector_set(f, 2*i, 10.0 * (x2i - x2im1*x2im1)); + gsl_vector_set(f, 2*i + 1, 1.0 - x2im1); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +rosenbrocke_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(rosenbrocke_J, rosenbrocke_N, rosenbrocke_P); + size_t i; + + gsl_matrix_set_zero(&J.matrix); + + for (i = 0; i < rosenbrocke_N / 2; ++i) + { + double x2im1 = gsl_vector_get(x, 2*i); + + gsl_matrix_set(&J.matrix, 2*i, 2*i, -20.0*x2im1); + gsl_matrix_set(&J.matrix, 2*i, 2*i + 1, 10.0); + gsl_matrix_set(&J.matrix, 2*i + 1, 2*i, -1.0); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +rosenbrocke_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + size_t i; + + for (i = 0; i < rosenbrocke_N / 2; ++i) + { + double v2im1 = gsl_vector_get(v, 2*i); + + gsl_vector_set(fvv, 2*i, -20.0 * v2im1 * v2im1); + gsl_vector_set(fvv, 2*i + 1, 0.0); + } + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf rosenbrocke_func = +{ + rosenbrocke_f, + rosenbrocke_df, + rosenbrocke_fvv, + rosenbrocke_N, + rosenbrocke_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem rosenbrocke_problem = +{ + "rosenbrock_extended", + rosenbrocke_x0, + NULL, + &rosenbrocke_epsrel, + &rosenbrocke_checksol, + &rosenbrocke_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_roth.c gsl-doc-2.3/multilarge_nlinear/test_roth.c --- gsl-doc-1.16/multilarge_nlinear/test_roth.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_roth.c 2016-08-12 19:52:30.000000000 +0000 @@ -0,0 +1,118 @@ +#define roth_N 2 +#define roth_P 2 + +static double roth_x0[roth_P] = { 0.5, -2.0 }; +static double roth_epsrel = 1.0e-7; + +static double roth_J[roth_N * roth_P]; + +static void +roth_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact1 = 0.0; + const double roth_x1[roth_P] = { 5.0, 4.0 }; + const double sumsq_exact2 = 48.9842536792400; + const double roth_x2[roth_P] = { 11.4127789869021, -0.896805253274477 }; + const double *roth_x; + double sumsq_exact; + + if (fabs(sumsq) < 0.1) + { + sumsq_exact = sumsq_exact1; + roth_x = roth_x1; + } + else + { + sumsq_exact = sumsq_exact2; + roth_x = roth_x2; + } + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < roth_P; ++i) + { + gsl_test_rel(x[i], roth_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +roth_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + + gsl_vector_set(f, 0, x1 - x2*(2.0 - x2*(5.0 - x2)) - 13.0); + gsl_vector_set(f, 1, x1 - x2*(14.0 - x2*(1.0 + x2)) - 29.0); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +roth_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(roth_J, roth_N, roth_P); + double x2 = gsl_vector_get(x, 1); + + gsl_matrix_set(&J.matrix, 0, 0, 1.0); + gsl_matrix_set(&J.matrix, 0, 1, -2.0 + x2*(10.0 - 3.0*x2)); + gsl_matrix_set(&J.matrix, 1, 0, 1.0); + gsl_matrix_set(&J.matrix, 1, 1, -14.0 + x2*(2.0 + 3.0*x2)); + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +roth_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double x2 = gsl_vector_get(x, 1); + double v2 = gsl_vector_get(v, 1); + + gsl_vector_set(fvv, 0, (10.0 - 6.0*x2) * v2 * v2); + gsl_vector_set(fvv, 1, (2.0 + 6.0*x2) * v2 * v2); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf roth_func = +{ + roth_f, + roth_df, + roth_fvv, + roth_N, + roth_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem roth_problem = +{ + "roth_freudenstein", + roth_x0, + NULL, + &roth_epsrel, + &roth_checksol, + &roth_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_thurber.c gsl-doc-2.3/multilarge_nlinear/test_thurber.c --- gsl-doc-1.16/multilarge_nlinear/test_thurber.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_thurber.c 2016-08-12 19:52:33.000000000 +0000 @@ -0,0 +1,161 @@ +#define thurber_N 37 +#define thurber_P 7 + +static double thurber_x0a[thurber_P] = { 1000.0, 1000.0, 400.0, 40.0, + 0.7, 0.3, 0.03 }; +static double thurber_x0b[thurber_P] = { 1300.0, 1500.0, 500.0, 75.0, + 1.0, 0.4, 0.05 }; +static double thurber_epsrel = 1.0e-6; + +static double thurber_J[thurber_N * thurber_P]; + +static double thurber_sigma[thurber_P] = { + 4.6647963344E+00, 3.9571156086E+01, 2.8698696102E+01, + 5.5675370270E+00, 3.1333340687E-02, 1.4984928198E-02, + 6.5842344623E-03 +}; + +static double thurber_X[thurber_N] = { + -3.067, -2.981, -2.921, -2.912, -2.840, -2.797, -2.702, + -2.699, -2.633, -2.481, -2.363, -2.322, -1.501, -1.460, + -1.274, -1.212, -1.100, -1.046, -0.915, -0.714, -0.566, + -0.545, -0.400, -0.309, -0.109, -0.103, 0.010, 0.119, + 0.377, 0.790, 0.963, 1.006, 1.115, 1.572, 1.841, + 2.047, 2.200 +}; + +static double thurber_F[thurber_N] = { + 80.574, 84.248, 87.264, 87.195, 89.076, 89.608, 89.868, 90.101, + 92.405, 95.854, 100.696, 101.060, 401.672, 390.724, 567.534, + 635.316, 733.054, 759.087, 894.206, 990.785, 1090.109, 1080.914, + 1122.643, 1178.351, 1260.531, 1273.514, 1288.339, 1327.543, 1353.863, + 1414.509, 1425.208, 1421.384, 1442.962, 1464.350, 1468.705, + 1447.894, 1457.628 +}; + +static void +thurber_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 5.6427082397E+03; + const double thurber_x[thurber_P] = { + 1.2881396800E+03, 1.4910792535E+03, 5.8323836877E+02, + 7.5416644291E+01, 9.6629502864E-01, 3.9797285797E-01, + 4.9727297349E-02 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < thurber_P; ++i) + { + gsl_test_rel(x[i], thurber_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + + +static int +thurber_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[thurber_P]; + size_t i; + + for (i = 0; i < thurber_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < thurber_N; i++) + { + double xi = thurber_X[i]; + double yi; + + yi = b[0] + b[1]*xi + b[2]*xi*xi + b[3]*xi*xi*xi; + yi /= 1.0 + b[4]*xi + b[5]*xi*xi + b[6]*xi*xi*xi; + + gsl_vector_set (f, i, yi - thurber_F[i]); + } + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +thurber_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(thurber_J, thurber_N, thurber_P); + double b[thurber_P]; + size_t i; + + for (i = 0; i < thurber_P; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < thurber_N; i++) + { + double xi = thurber_X[i]; + double d, n, d_sq; + + n = b[0] + b[1]*xi + b[2]*xi*xi + b[3]*xi*xi*xi; + d = 1.0 + b[4]*xi + b[5]*xi*xi + b[6]*xi*xi*xi; + d_sq = d * d; + + gsl_matrix_set (&J.matrix, i, 0, 1.0 / d); + gsl_matrix_set (&J.matrix, i, 1, xi / d); + gsl_matrix_set (&J.matrix, i, 2, (xi * xi) / d); + gsl_matrix_set (&J.matrix, i, 3, (xi * xi * xi) / d); + gsl_matrix_set (&J.matrix, i, 4, -xi * n / d_sq); + gsl_matrix_set (&J.matrix, i, 5, -xi * xi * n / d_sq); + gsl_matrix_set (&J.matrix, i, 6, -xi * xi * xi * n / d_sq); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf thurber_func = +{ + thurber_f, + thurber_df, + NULL, /* analytic expression too complex */ + thurber_N, + thurber_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem thurbera_problem = +{ + "nist-thurbera", + thurber_x0a, + thurber_sigma, + &thurber_epsrel, + &thurber_checksol, + &thurber_func +}; + +static test_fdf_problem thurberb_problem = +{ + "nist-thurberb", + thurber_x0b, + thurber_sigma, + &thurber_epsrel, + &thurber_checksol, + &thurber_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_vardim.c gsl-doc-2.3/multilarge_nlinear/test_vardim.c --- gsl-doc-1.16/multilarge_nlinear/test_vardim.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_vardim.c 2016-08-12 19:52:36.000000000 +0000 @@ -0,0 +1,130 @@ +#define vardim_N 7 /* p + 2 */ +#define vardim_P 5 + +static double vardim_x0[vardim_P] = { 0.8, 0.6, 0.4, 0.2, 0.0 }; +static double vardim_epsrel = 1.0e-12; + +static double vardim_J[vardim_N * vardim_P]; + +static void +vardim_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < vardim_P; ++i) + { + gsl_test_rel(x[i], 1.0, epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +vardim_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + size_t i; + double sum = 0.0; + + for (i = 0; i < vardim_P; ++i) + { + double xi = gsl_vector_get(x, i); + + gsl_vector_set(f, i, xi - 1.0); + + sum += (i + 1.0) * (xi - 1.0); + } + + gsl_vector_set(f, vardim_P, sum); + gsl_vector_set(f, vardim_P + 1, sum*sum); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +vardim_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(vardim_J, vardim_N, vardim_P); + size_t i; + double sum = 0.0; + gsl_matrix_view m = gsl_matrix_submatrix(&J.matrix, 0, 0, vardim_P, vardim_P); + + gsl_matrix_set_identity(&m.matrix); + + for (i = 0; i < vardim_P; ++i) + { + double xi = gsl_vector_get(x, i); + sum += (i + 1.0) * (xi - 1.0); + } + + for (i = 0; i < vardim_P; ++i) + { + gsl_matrix_set(&J.matrix, vardim_P, i, i + 1.0); + gsl_matrix_set(&J.matrix, vardim_P + 1, i, 2*(i + 1.0)*sum); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +vardim_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + size_t i; + double sum = 0.0; + + gsl_vector_set_zero(fvv); + + for (i = 0; i < vardim_P; ++i) + { + double vi = gsl_vector_get(v, i); + sum += (i + 1.0) * vi; + } + + gsl_vector_set(fvv, vardim_N - 1, 2.0 * sum * sum); + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf vardim_func = +{ + vardim_f, + vardim_df, + vardim_fvv, + vardim_N, + vardim_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem vardim_problem = +{ + "vardim", + vardim_x0, + NULL, + &vardim_epsrel, + &vardim_checksol, + &vardim_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_watson.c gsl-doc-2.3/multilarge_nlinear/test_watson.c --- gsl-doc-1.16/multilarge_nlinear/test_watson.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_watson.c 2016-08-12 19:52:40.000000000 +0000 @@ -0,0 +1,173 @@ +#define watson_N 31 +#define watson_P 6 + +static double watson_x0[watson_P] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; +static double watson_epsrel = 1.0e-6; + +static double watson_J[watson_N * watson_P]; + +static void +watson_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 2.287670053552372e-03; + const double watson_x[watson_P] = { + -1.572508640629858e-02, 1.012434869366059e+00, -2.329916259263380e-01, + 1.260430087686035e+00, -1.513728922580576e+00, 9.929964323646112e-01 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < watson_P; ++i) + { + gsl_test_rel(x[i], watson_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +watson_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + const double x1 = gsl_vector_get(x, 0); + const double x2 = gsl_vector_get(x, 1); + size_t i, j; + + for (i = 0; i < watson_N - 2; ++i) + { + double ti = (i + 1) / 29.0; + double tjm1 = 1.0, tjm2 = 1.0; + double sum1 = 0.0, sum2 = 0.0; + + for (j = 0; j < watson_P; ++j) + { + double xj = gsl_vector_get(x, j); + + sum1 += xj * tjm1; + tjm1 *= ti; + + if (j > 0) + { + sum2 += j * xj * tjm2; + tjm2 *= ti; + } + } + + gsl_vector_set (f, i, sum2 - sum1*sum1 - 1.0); + } + + gsl_vector_set(f, watson_N - 2, x1); + gsl_vector_set(f, watson_N - 1, x2 - x1*x1 - 1.0); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +watson_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(watson_J, watson_N, watson_P); + double x1 = gsl_vector_get (x, 0); + size_t i, j; + + gsl_matrix_set_zero(&J.matrix); + + for (i = 0; i < watson_N - 2; ++i) + { + double ti = (i + 1) / 29.0; + double tjm1 = 1.0, tjm2 = 1.0; + double sum1 = 0.0; + + for (j = 0; j < watson_P; ++j) + { + double xj = gsl_vector_get(x, j); + sum1 += xj * tjm1; + tjm1 *= ti; + } + + tjm1 = 1.0; + tjm2 = 1.0; + for (j = 0; j < watson_P; ++j) + { + gsl_matrix_set(&J.matrix, i, j, j * tjm2 - 2.0*sum1*tjm1); + tjm1 *= ti; + + if (j > 0) + tjm2 *= ti; + } + } + + gsl_matrix_set(&J.matrix, watson_N - 2, 0, 1.0); + gsl_matrix_set(&J.matrix, watson_N - 1, 0, -2.0*x1); + gsl_matrix_set(&J.matrix, watson_N - 1, 1, 1.0); + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +watson_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double v1 = gsl_vector_get (v, 0); + size_t i, j; + + for (i = 0; i < watson_N - 2; ++i) + { + double ti = (i + 1) / 29.0; + double sum = 0.0; + double tjm1 = 1.0; + + for (j = 0; j < watson_P; ++j) + { + double vj = gsl_vector_get(v, j); + sum += vj * tjm1; + tjm1 *= ti; + } + + gsl_vector_set(fvv, i, -2.0*sum*sum); + } + + gsl_vector_set(fvv, watson_N - 2, 0.0); + gsl_vector_set(fvv, watson_N - 1, -2.0*v1*v1); + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf watson_func = +{ + watson_f, + watson_df, + watson_fvv, + watson_N, + watson_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem watson_problem = +{ + "watson", + watson_x0, + NULL, + &watson_epsrel, + &watson_checksol, + &watson_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_wnlin.c gsl-doc-2.3/multilarge_nlinear/test_wnlin.c --- gsl-doc-1.16/multilarge_nlinear/test_wnlin.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_wnlin.c 2016-08-19 17:44:50.000000000 +0000 @@ -0,0 +1,155 @@ +#define wnlin_N 40 +#define wnlin_P 3 + +static double wnlin_x0[wnlin_P] = { 1.0, 0.9, 0.0 }; +static double wnlin_epsrel = 1.0e-8; + +static double wnlin_J[wnlin_N * wnlin_P]; + +/* data */ +static double wnlin_Y[wnlin_N] = { + 6.08035e+00, 5.47552e+00, 5.94654e+00, 5.04920e+00, 4.78568e+00, + 3.51748e+00, 2.84671e+00, 3.24634e+00, 3.23395e+00, 3.30385e+00, + 2.83439e+00, 2.31891e+00, 2.33858e+00, 2.40559e+00, 2.41856e+00, + 1.99966e+00, 1.88127e+00, 1.91477e+00, 1.70415e+00, 1.60316e+00, + 1.77937e+00, 1.55302e+00, 1.50903e+00, 1.36364e+00, 1.36873e+00, + 1.41954e+00, 1.37778e+00, 1.23573e+00, 1.28524e+00, 1.46327e+00, + 1.22315e+00, 1.19330e+00, 1.18717e+00, 8.83172e-01, 1.23424e+00, + 1.14683e+00, 1.11091e+00, 1.20396e+00, 1.28722e+00, 1.05801e+00 +}; + +/* weights */ +static double wnlin_W[wnlin_N] = { + 2.77778e+00, 3.27690e+00, 3.85426e+00, 4.51906e+00, 5.28083e+00, + 6.14919e+00, 7.13370e+00, 8.24349e+00, 9.48703e+00, 1.08717e+01, + 1.24036e+01, 1.40869e+01, 1.59238e+01, 1.79142e+01, 2.00553e+01, + 2.23415e+01, 2.47646e+01, 2.73137e+01, 2.99753e+01, 3.27337e+01, + 3.55714e+01, 3.84696e+01, 4.14085e+01, 4.43678e+01, 4.73278e+01, + 5.02690e+01, 5.31731e+01, 5.60234e+01, 5.88046e+01, 6.15036e+01, + 6.41092e+01, 6.66121e+01, 6.90054e+01, 7.12839e+01, 7.34442e+01, + 7.54848e+01, 7.74053e+01, 7.92069e+01, 8.08918e+01, 8.24632e+01 +}; + +static void +wnlin_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 29.7481259665713758; + const double wnlin_x[wnlin_P] = { 5.17378551196259195, + 0.111041758006851149, + 1.05282724070446099 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < wnlin_P; ++i) + { + gsl_test_rel(x[i], wnlin_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +wnlin_f (const gsl_vector *x, void *params, gsl_vector *f) +{ + double A = gsl_vector_get (x, 0); + double lambda = gsl_vector_get (x, 1); + double b = gsl_vector_get (x, 2); + size_t i; + + /* model Yi = A * exp(-lambda * i) + b */ + for (i = 0; i < wnlin_N; i++) + { + double ti = i; + double yi = wnlin_Y[i]; + double swi = sqrt(wnlin_W[i]); + double Mi = A * exp (-lambda * ti) + b; + + gsl_vector_set (f, i, swi * (Mi - yi)); + } + + return GSL_SUCCESS; +} + +static int +wnlin_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(wnlin_J, wnlin_N, wnlin_P); + double A = gsl_vector_get (x, 0); + double lambda = gsl_vector_get (x, 1); + size_t i; + + for (i = 0; i < wnlin_N; i++) + { + gsl_vector_view v = gsl_matrix_row(&J.matrix, i); + double ti = i; + double swi = sqrt(wnlin_W[i]); + double e = exp(-lambda * ti); + + gsl_vector_set(&v.vector, 0, e); + gsl_vector_set(&v.vector, 1, -ti * A * e); + gsl_vector_set(&v.vector, 2, 1.0); + + gsl_vector_scale(&v.vector, swi); + } + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + return GSL_SUCCESS; +} + +static int +wnlin_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + double A = gsl_vector_get (x, 0); + double lambda = gsl_vector_get (x, 1); + double v1 = gsl_vector_get(v, 0); + double v2 = gsl_vector_get(v, 1); + size_t i; + + for (i = 0; i < wnlin_N; i++) + { + double ti = i; + double swi = sqrt(wnlin_W[i]); + double fvvi; + + fvvi = exp(-ti*lambda)*ti*v2 * (-2*v1 + ti*v2*A); + + gsl_vector_set(fvv, i, swi * fvvi); + } + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf wnlin_func1 = +{ + wnlin_f, + wnlin_df, + wnlin_fvv, + wnlin_N, + wnlin_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem wnlin_problem1 = +{ + "wnlin_internal_weights", + wnlin_x0, + NULL, + &wnlin_epsrel, + &wnlin_checksol, + &wnlin_func1 +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/test_wood.c gsl-doc-2.3/multilarge_nlinear/test_wood.c --- gsl-doc-1.16/multilarge_nlinear/test_wood.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/test_wood.c 2016-08-12 19:52:46.000000000 +0000 @@ -0,0 +1,126 @@ +#define wood_N 6 +#define wood_P 4 + +static double wood_x0[wood_P] = { -3.0, -1.0, -3.0, -1.0 }; +static double wood_epsrel = 1.0e-12; + +static double wood_J[wood_N * wood_P]; + +static void +wood_checksol(const double x[], const double sumsq, + const double epsrel, const char *sname, + const char *pname) +{ + size_t i; + const double sumsq_exact = 0.0; + const double wood_x[wood_P] = { 1.0, 1.0, 1.0, 1.0 }; + + gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", + sname, pname); + + for (i = 0; i < wood_P; ++i) + { + gsl_test_rel(x[i], wood_x[i], epsrel, "%s/%s i=%zu", + sname, pname, i); + } +} + +static int +wood_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double x1 = gsl_vector_get(x, 0); + double x2 = gsl_vector_get(x, 1); + double x3 = gsl_vector_get(x, 2); + double x4 = gsl_vector_get(x, 3); + + gsl_vector_set(f, 0, 10.0*(x2 - x1*x1)); + gsl_vector_set(f, 1, 1.0 - x1); + gsl_vector_set(f, 2, sqrt(90.0)*(x4 - x3*x3)); + gsl_vector_set(f, 3, 1.0 - x3); + gsl_vector_set(f, 4, sqrt(10.0)*(x2 + x4 - 2.0)); + gsl_vector_set(f, 5, (x2 - x4) / sqrt(10.0)); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +wood_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, + const gsl_vector * u, void * params, gsl_vector * v, + gsl_matrix * JTJ) +{ + gsl_matrix_view J = gsl_matrix_view_array(wood_J, wood_N, wood_P); + double x1 = gsl_vector_get(x, 0); + double x3 = gsl_vector_get(x, 2); + double s90 = sqrt(90.0); + double s10 = sqrt(10.0); + + gsl_matrix_set_zero(&J.matrix); + + gsl_matrix_set(&J.matrix, 0, 0, -20.0*x1); + gsl_matrix_set(&J.matrix, 0, 1, 10.0); + gsl_matrix_set(&J.matrix, 1, 0, -1.0); + gsl_matrix_set(&J.matrix, 2, 2, -2.0*s90*x3); + gsl_matrix_set(&J.matrix, 2, 3, s90); + gsl_matrix_set(&J.matrix, 3, 2, -1.0); + gsl_matrix_set(&J.matrix, 4, 1, s10); + gsl_matrix_set(&J.matrix, 4, 3, s10); + gsl_matrix_set(&J.matrix, 5, 1, 1.0/s10); + gsl_matrix_set(&J.matrix, 5, 3, -1.0/s10); + + if (v) + gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v); + + if (JTJ) + gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ); + + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static int +wood_fvv (const gsl_vector * x, const gsl_vector * v, + void *params, gsl_vector * fvv) +{ + const double s10 = sqrt(10.0); + double v1 = gsl_vector_get(v, 0); + double v3 = gsl_vector_get(v, 2); + + gsl_vector_set(fvv, 0, -20.0 * v1 * v1); + gsl_vector_set(fvv, 1, 0.0); + gsl_vector_set(fvv, 2, -6.0 * s10 * v3 * v3); + gsl_vector_set(fvv, 3, 0.0); + gsl_vector_set(fvv, 4, 0.0); + gsl_vector_set(fvv, 5, 0.0); + + (void)x; /* avoid unused parameter warning */ + (void)params; /* avoid unused parameter warning */ + + return GSL_SUCCESS; +} + +static gsl_multilarge_nlinear_fdf wood_func = +{ + wood_f, + wood_df, + wood_fvv, + wood_N, + wood_P, + NULL, + 0, + 0, + 0, + 0 +}; + +static test_fdf_problem wood_problem = +{ + "wood", + wood_x0, + NULL, + &wood_epsrel, + &wood_checksol, + &wood_func +}; diff -Nru gsl-doc-1.16/multilarge_nlinear/TODO gsl-doc-2.3/multilarge_nlinear/TODO --- gsl-doc-1.16/multilarge_nlinear/TODO 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/TODO 2016-11-16 15:38:35.000000000 +0000 @@ -0,0 +1,3 @@ +1. finite difference J and fvv for cholesky solver +2. Fix biggs test x0 and dogleg / ddogleg convergence issue +3. add subspaced2D to multilarge example output in docs diff -Nru gsl-doc-1.16/multilarge_nlinear/trust.c gsl-doc-2.3/multilarge_nlinear/trust.c --- gsl-doc-1.16/multilarge_nlinear/trust.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/multilarge_nlinear/trust.c 2016-08-19 17:02:40.000000000 +0000 @@ -0,0 +1,569 @@ +/* multilarge_nlinear/trust.c + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "common.c" +#include "nielsen.c" + +/* + * This module contains a high level driver for a general trust + * region nonlinear least squares solver. This container handles + * the computation of all of the quantities relevant to all trust + * region methods, including: + * + * residual vector: f_k = f(x_k) + * Jacobian matrix: J_k = J(x_k) + * gradient vector: g_k = J_k^T f_k + * scaling matrix: D_k + */ + +typedef struct +{ + size_t n; /* number of observations */ + size_t p; /* number of parameters */ + double delta; /* trust region radius */ + double mu; /* LM parameter */ + long nu; /* for updating LM parameter */ + gsl_vector *diag; /* D = diag(J^T J) */ + gsl_vector *x_trial; /* trial parameter vector */ + gsl_vector *f_trial; /* trial function vector */ + gsl_vector *workn; /* workspace, length n */ + + void *trs_state; /* workspace for trust region subproblem */ + void *solver_state; /* workspace for linear least squares solver */ + + double avratio; /* current |a| / |v| */ + + /* tunable parameters */ + gsl_multilarge_nlinear_parameters params; +} trust_state_t; + +static void * trust_alloc (const gsl_multilarge_nlinear_parameters * params, + const size_t n, const size_t p); +static void trust_free(void *vstate); +static int trust_init(void *vstate, const gsl_vector * swts, + gsl_multilarge_nlinear_fdf *fdf, const gsl_vector *x, + gsl_vector *f, gsl_vector *g, gsl_matrix *JTJ); +static int trust_iterate(void *vstate, const gsl_vector *swts, + gsl_multilarge_nlinear_fdf *fdf, + gsl_vector *x, gsl_vector *f, + gsl_vector *g, gsl_matrix *JTJ, gsl_vector *dx); +static int trust_rcond(double * rcond, const gsl_matrix * JTJ, void * vstate); +static int trust_covar(const gsl_matrix * JTJ, gsl_matrix * covar, void * vstate); +static double trust_avratio(void *vstate); +static void trust_trial_step(const gsl_vector * x, const gsl_vector * dx, + gsl_vector * x_trial); +static double trust_calc_rho(const gsl_multilarge_nlinear_trust_state * trust_state, + const gsl_vector * f_trial, const gsl_vector * dx, + trust_state_t * state); +static int trust_eval_step(const gsl_multilarge_nlinear_trust_state * trust_state, + const gsl_vector * f_trial, const gsl_vector * dx, + double * rho, trust_state_t * state); +static double trust_scaled_norm(const gsl_vector *D, const gsl_vector *a); + +static void * +trust_alloc (const gsl_multilarge_nlinear_parameters * params, + const size_t n, const size_t p) +{ + trust_state_t *state; + + state = calloc(1, sizeof(trust_state_t)); + if (state == NULL) + { + GSL_ERROR_NULL ("failed to allocate lm state", GSL_ENOMEM); + } + + state->diag = gsl_vector_alloc(p); + if (state->diag == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for diag", GSL_ENOMEM); + } + + state->workn = gsl_vector_alloc(n); + if (state->workn == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for workn", GSL_ENOMEM); + } + + state->x_trial = gsl_vector_alloc(p); + if (state->x_trial == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for x_trial", GSL_ENOMEM); + } + + state->f_trial = gsl_vector_alloc(n); + if (state->f_trial == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for f_trial", GSL_ENOMEM); + } + + state->trs_state = (params->trs->alloc)(params, n, p); + if (state->trs_state == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for trs state", GSL_ENOMEM); + } + + if (params->solver != gsl_multilarge_nlinear_solver_none) + { + state->solver_state = (params->solver->alloc)(n, p); + if (state->solver_state == NULL) + { + GSL_ERROR_NULL ("failed to allocate space for solver state", GSL_ENOMEM); + } + } + + state->n = n; + state->p = p; + state->delta = 0.0; + state->params = *params; + + return state; +} + +static void +trust_free(void *vstate) +{ + trust_state_t *state = (trust_state_t *) vstate; + const gsl_multilarge_nlinear_parameters *params = &(state->params); + + if (state->diag) + gsl_vector_free(state->diag); + + if (state->workn) + gsl_vector_free(state->workn); + + if (state->x_trial) + gsl_vector_free(state->x_trial); + + if (state->f_trial) + gsl_vector_free(state->f_trial); + + if (state->trs_state) + (params->trs->free)(state->trs_state); + + if (state->solver_state) + (params->solver->free)(state->solver_state); + + free(state); +} + +/* +trust_init() + Initialize trust region solver + +Inputs: vstate - workspace + swts - sqrt(W) vector + fdf - user callback functions + x - initial parameter values + f - (output) f(x) vector + g - (output) J(x)' f(x) vector + +Return: success/error +*/ + +static int +trust_init(void *vstate, const gsl_vector *swts, + gsl_multilarge_nlinear_fdf *fdf, const gsl_vector *x, + gsl_vector *f, gsl_vector *g, gsl_matrix *JTJ) +{ + int status; + trust_state_t *state = (trust_state_t *) vstate; + const gsl_multilarge_nlinear_parameters *params = &(state->params); + double Dx; + + /* evaluate function and Jacobian at x and apply weight transform */ + status = gsl_multilarge_nlinear_eval_f(fdf, x, swts, f); + if (status) + return status; + + /* compute g = J^T f and J^T J */ + status = gsl_multilarge_nlinear_eval_df(CblasTrans, x, f, f, + swts, params->h_df, params->fdtype, + fdf, g, JTJ, state->workn); + if (status) + return status; + + /* initialize diagonal scaling matrix D */ + if (JTJ != NULL) + (params->scale->init)(JTJ, state->diag); + else + gsl_vector_set_all(state->diag, 1.0); + + /* compute initial trust region radius */ + Dx = trust_scaled_norm(state->diag, x); + state->delta = 0.3 * GSL_MAX(1.0, Dx); + + /* initialize LM parameter */ + nielsen_init(JTJ, state->diag, &(state->mu), &(state->nu)); + + /* initialize trust region method solver */ + { + const gsl_multilarge_nlinear_trust_state trust_state = { x, f, g, JTJ, state->diag, + swts, &(state->mu), params, + state->solver_state, fdf, + &(state->avratio) }; + + status = (params->trs->init)(&trust_state, state->trs_state); + + if (status) + return status; + } + + /* set default parameters */ + + state->avratio = 0.0; + + return GSL_SUCCESS; +} + +/* +trust_iterate() + This function performs 1 iteration of the trust region algorithm. +It calls a user-specified method for computing the next step +(LM or dogleg), then tests if the computed step is acceptable. + +Args: vstate - trust workspace + swts - data weights (NULL if unweighted) + fdf - function and Jacobian pointers + x - on input, current parameter vector + on output, new parameter vector x + dx + f - on input, f(x) + on output, f(x + dx) + g - on input, g(x) = J(x)' f(x) + on output, g(x + dx) = J(x + dx)' f(x + dx) + JTJ - on input, J(x)^T J(x) + on output, J(x + dx)^T J(x + dx) + dx - (output only) parameter step vector + +Return: +1) GSL_SUCCESS if we found a step which reduces the cost +function + +2) GSL_ENOPROG if 15 successive attempts were to made to +find a good step without success + +3) If a scaling matrix D is used, inputs and outputs are +set to the unscaled quantities (ie: J and g) +*/ + +static int +trust_iterate(void *vstate, const gsl_vector *swts, + gsl_multilarge_nlinear_fdf *fdf, gsl_vector *x, + gsl_vector *f, gsl_vector *g, gsl_matrix *JTJ, + gsl_vector *dx) +{ + int status; + trust_state_t *state = (trust_state_t *) vstate; + const gsl_multilarge_nlinear_parameters *params = &(state->params); + const gsl_multilarge_nlinear_trs *trs = params->trs; + + /* collect all state parameters needed by low level methods */ + const gsl_multilarge_nlinear_trust_state trust_state = { x, f, g, JTJ, state->diag, + swts, &(state->mu), params, + state->solver_state, fdf, + &(state->avratio) }; + + gsl_vector *x_trial = state->x_trial; /* trial x + dx */ + gsl_vector *f_trial = state->f_trial; /* trial f(x + dx) */ + double rho; /* ratio actual_reduction/predicted_reduction */ + int foundstep = 0; /* found step dx */ + int bad_steps = 0; /* consecutive rejected steps */ + + /* initialize trust region subproblem with this Jacobian */ + status = (trs->preloop)(&trust_state, state->trs_state); + if (status) + return status; + + /* loop until we find an acceptable step dx */ + while (!foundstep) + { + /* calculate new step */ + status = (trs->step)(&trust_state, state->delta, dx, state->trs_state); + + /* occasionally the iterative methods (ie: CG Steihaug) can fail to find a step, + * so in this case skip rho calculation and count it as a rejected step */ + + if (status == GSL_SUCCESS) + { + /* compute x_trial = x + dx */ + trust_trial_step(x, dx, x_trial); + + /* compute f_trial = f(x + dx) */ + status = gsl_multilarge_nlinear_eval_f(fdf, x_trial, swts, f_trial); + if (status) + return status; + + /* check if step should be accepted or rejected */ + status = trust_eval_step(&trust_state, f_trial, dx, &rho, state); + if (status == GSL_SUCCESS) + foundstep = 1; + +#if 0 /*XXX*/ + fprintf(stdout, "delta = %.12e |D dx| = %.12e |dx| = %.12e, dx0 = %.12e dx1 = %.12e |x_trial| = %.12e |f_trial| = %.12e rho = %.12e\n", + state->delta, + scaled_enorm(state->diag, dx), + gsl_blas_dnrm2(dx), + gsl_vector_get(dx, 0), + gsl_vector_get(dx, 1), + gsl_blas_dnrm2(x_trial), + gsl_blas_dnrm2(f_trial), + rho); +#endif + } + else + { + /* an iterative TRS method failed to find a step vector */ + rho = -1.0; + } + + /* + * update trust region radius: if rho is large, + * then the quadratic model is a good approximation + * to the objective function, enlarge trust region. + * If rho is small (or negative), the model function + * is a poor approximation so decrease trust region. This + * can happen even if the step is accepted. + */ + if (rho > 0.75) + state->delta *= params->factor_up; + else if (rho < 0.25) + state->delta /= params->factor_down; + + if (foundstep) + { + /* step was accepted */ + + /* update x <- x + dx */ + gsl_vector_memcpy(x, x_trial); + + /* update f <- f(x + dx) */ + gsl_vector_memcpy(f, f_trial); + + /* compute new g = J^T f and J^T J */ + status = gsl_multilarge_nlinear_eval_df(CblasTrans, x, f, f, + swts, params->h_df, params->fdtype, + fdf, g, JTJ, state->workn); + if (status) + return status; + + /* update scaling matrix D */ + if (JTJ != NULL) + (params->scale->update)(JTJ, state->diag); + + /* step accepted, decrease LM parameter */ + nielsen_accept(rho, &(state->mu), &(state->nu)); + + bad_steps = 0; + } + else + { + /* step rejected, increase LM parameter */ + nielsen_reject(&(state->mu), &(state->nu)); + + /* if more than 15 consecutive rejected steps, report no progress */ + if (++bad_steps > 15) + { + return GSL_ENOPROG; + } + } + } + + return GSL_SUCCESS; +} /* trust_iterate() */ + +static int +trust_rcond(double * rcond, const gsl_matrix * JTJ, void * vstate) +{ + int status; + trust_state_t *state = (trust_state_t *) vstate; + const gsl_multilarge_nlinear_parameters *params = &(state->params); + + status = (params->solver->rcond)(rcond, JTJ, state->solver_state); + + return status; +} + +static int +trust_covar(const gsl_matrix * JTJ, gsl_matrix * covar, void * vstate) +{ + int status; + trust_state_t *state = (trust_state_t *) vstate; + const gsl_multilarge_nlinear_parameters *params = &(state->params); + + status = (params->solver->covar)(JTJ, covar, state->solver_state); + + return status; +} + +static double +trust_avratio(void *vstate) +{ + trust_state_t *state = (trust_state_t *) vstate; + return state->avratio; +} + +/* compute x_trial = x + dx */ +static void +trust_trial_step(const gsl_vector * x, const gsl_vector * dx, + gsl_vector * x_trial) +{ + size_t i, N = x->size; + + for (i = 0; i < N; i++) + { + double dxi = gsl_vector_get (dx, i); + double xi = gsl_vector_get (x, i); + gsl_vector_set (x_trial, i, xi + dxi); + } +} + +/* +trust_calc_rho() + Calculate ratio of actual reduction to predicted +reduction. + +rho = actual_reduction / predicted_reduction + +actual_reduction = 1 - ( ||f+|| / ||f|| )^2 +predicted_reduction = -2 g^T dx / ||f||^2 - ( ||J*dx|| / ||f|| )^2 + = -2 fhat . beta - ||beta||^2 + +where: beta = J*dx / ||f|| + +Inputs: trust_state - trust state + f_trial - f(x + dx) + dx - proposed step, size p + state - workspace + +Return: rho = actual_reduction / predicted_reduction +If actual_reduction is < 0, return rho = -1 +*/ + +static double +trust_calc_rho(const gsl_multilarge_nlinear_trust_state * trust_state, + const gsl_vector * f_trial, const gsl_vector * dx, + trust_state_t * state) +{ + int status; + const gsl_multilarge_nlinear_parameters *params = &(state->params); + const gsl_multilarge_nlinear_trs *trs = params->trs; + const gsl_vector * f = trust_state->f; + const double normf = gsl_blas_dnrm2(f); + const double normf_trial = gsl_blas_dnrm2(f_trial); + double rho; + double actual_reduction; + double pred_reduction; + double u; + + /* if ||f(x+dx)|| > ||f(x)|| reject step immediately */ + if (normf_trial >= normf) + return -1.0; + + /* compute numerator of rho (actual reduction) */ + u = normf_trial / normf; + actual_reduction = 1.0 - u*u; + + /* + * compute denominator of rho (predicted reduction); this is calculated + * inside each trust region subproblem, since it depends on the local + * model used, which can vary according to each TRS + */ + status = (trs->preduction)(trust_state, dx, &pred_reduction, state->trs_state); + if (status) + return -1.0; + + if (pred_reduction > 0.0) + rho = actual_reduction / pred_reduction; + else + rho = -1.0; + + return rho; +} + +/* +trust_eval_step() + Evaluate proposed step to determine if it should be +accepted or rejected +*/ + +static int +trust_eval_step(const gsl_multilarge_nlinear_trust_state * trust_state, + const gsl_vector * f_trial, const gsl_vector * dx, + double * rho, trust_state_t * state) +{ + int status = GSL_SUCCESS; + const gsl_multilarge_nlinear_parameters *params = &(state->params); + + if (params->trs == gsl_multilarge_nlinear_trs_lmaccel) + { + /* reject step if acceleration is too large compared to velocity */ + if (state->avratio > params->avmax) + status = GSL_FAILURE; + } + + /* compute rho */ + *rho = trust_calc_rho(trust_state, f_trial, dx, state); + if (*rho <= 0.0) + status = GSL_FAILURE; + + return status; +} + +/* compute || diag(D) a || */ +static double +trust_scaled_norm(const gsl_vector *D, const gsl_vector *a) +{ + const size_t n = a->size; + double e2 = 0.0; + size_t i; + + for (i = 0; i < n; ++i) + { + double Di = gsl_vector_get(D, i); + double ai = gsl_vector_get(a, i); + double u = Di * ai; + + e2 += u * u; + } + + return sqrt (e2); +} + +static const gsl_multilarge_nlinear_type trust_type = +{ + "trust-region", + trust_alloc, + trust_init, + trust_iterate, + trust_rcond, + trust_covar, + trust_avratio, + trust_free +}; + +const gsl_multilarge_nlinear_type *gsl_multilarge_nlinear_trust = &trust_type; diff -Nru gsl-doc-1.16/multimin/Makefile.am gsl-doc-2.3/multimin/Makefile.am --- gsl-doc-1.16/multimin/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multimin/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ pkginclude_HEADERS = gsl_multimin.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslmultimin_la_SOURCES = fdfminimizer.c steepest_descent.c conjugate_fr.c conjugate_pr.c convergence.c diff.c vector_bfgs.c vector_bfgs2.c fminimizer.c simplex.c simplex2.c diff -Nru gsl-doc-1.16/multimin/Makefile.in gsl-doc-2.3/multimin/Makefile.in --- gsl-doc-1.16/multimin/Makefile.in 2013-07-19 15:14:54.000000000 +0000 +++ gsl-doc-2.3/multimin/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -385,6 +385,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -407,7 +408,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -523,7 +527,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslmultimin.la pkginclude_HEADERS = gsl_multimin.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslmultimin_la_SOURCES = fdfminimizer.c steepest_descent.c conjugate_fr.c conjugate_pr.c convergence.c diff.c vector_bfgs.c vector_bfgs2.c fminimizer.c simplex.c simplex2.c noinst_HEADERS = directional_minimize.c linear_minimize.c linear_wrapper.c TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/multiroots/Makefile.am gsl-doc-2.3/multiroots/Makefile.am --- gsl-doc-1.16/multiroots/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multiroots/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -6,7 +6,7 @@ noinst_HEADERS = enorm.c dogleg.c -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslmultiroots_la_SOURCES = fdjac.c fsolver.c fdfsolver.c convergence.c newton.c gnewton.c dnewton.c broyden.c hybrid.c hybridj.c diff -Nru gsl-doc-1.16/multiroots/Makefile.in gsl-doc-2.3/multiroots/Makefile.in --- gsl-doc-1.16/multiroots/Makefile.in 2013-07-19 15:14:54.000000000 +0000 +++ gsl-doc-2.3/multiroots/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -385,6 +385,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -407,7 +408,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -524,7 +528,7 @@ noinst_LTLIBRARIES = libgslmultiroots.la pkginclude_HEADERS = gsl_multiroots.h noinst_HEADERS = enorm.c dogleg.c -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslmultiroots_la_SOURCES = fdjac.c fsolver.c fdfsolver.c convergence.c newton.c gnewton.c dnewton.c broyden.c hybrid.c hybridj.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_funcs.c test_funcs.h diff -Nru gsl-doc-1.16/multiset/Makefile.am gsl-doc-2.3/multiset/Makefile.am --- gsl-doc-1.16/multiset/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/multiset/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ pkginclude_HEADERS = gsl_multiset.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslmultiset_la_SOURCES = init.c file.c multiset.c inline.c diff -Nru gsl-doc-1.16/multiset/Makefile.in gsl-doc-2.3/multiset/Makefile.in --- gsl-doc-1.16/multiset/Makefile.in 2013-07-19 15:14:54.000000000 +0000 +++ gsl-doc-2.3/multiset/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -378,6 +378,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -400,7 +401,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -516,7 +520,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslmultiset.la pkginclude_HEADERS = gsl_multiset.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslmultiset_la_SOURCES = init.c file.c multiset.c inline.c noinst_HEADERS = TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/NEWS gsl-doc-2.3/NEWS --- gsl-doc-1.16/NEWS 2013-07-17 20:33:50.000000000 +0000 +++ gsl-doc-2.3/NEWS 2016-11-29 21:57:24.000000000 +0000 @@ -1,4 +1,195 @@ -* What is new in gsl-1.16: +* What is new in gsl-2.3: + +** bug fix in documentation for gsl_linalg_LU_refine + (bug #49728, Joey De Pauw) + +** added gsl_multifit_linear_tsvd and gsl_multifit_wlinear_tsvd + to give user more control over cutoff for truncated SVD + +** added routines for Generalized Cross Validation for + regularized linear least squares + +** improved rstat example program and added documentation for + gsl_rstat_sd_mean (Jonathan Leto) + +** added function gsl_multifit_linear_rank + +** bug fix in nonlinear least squares when using data weights with + finite-difference Jacobian + +** add 2D subspace method for large systems (multilarge_nlinear) + +** bug fix in gsl_ran_beta for small parameters + (bug #47646, Yu Liu) + +** bug fix in gsl_complex_tan for negative imaginary arguments + (bug #47347, Yu Liu) + +** doc bug fix: value of golden ratio + +** fixed scaling issue in 2D subspace nonlinear least squares + method + +** optimize dogleg methods to calculate Gauss-Newton point + only when needed + +* What was new in gsl-2.2.1: + +** reverted gsl_linalg_cholesky_decomp to its previous behavior + so it is backward compatible; new cholesky routine is + gsl_linalg_cholesky_decomp1 + +* What was new in gsl-2.2: + +** updated gsl_linalg_cholesky_invert to use Level-2 BLAS + and added function gsl_linalg_pcholesky_invert + +** added functions gsl_linalg_tri_*_invert for inverting + triangular matrices + +** fix GSL_EIGEN_SORT_VAL_{ASC,DESC} for nonsymmetric + eigensystems (Victor Zverovich) + +** added complete orthogonal decomposition routines + (gsl_linalg_COD) + +** bug fix where median calculation wasn't reset in + gsl_rstat_reset(); added gsl_rstat_quantile_reset() function + (reported by Pedro Donato) + +** added multivariate Gaussian random distribution + gsl_ran_multivariate_gaussian (Timothée Flutre) + +** added functions to estimate the 1-norm reciprocal condition + number for various matrix factorizations: + * gsl_linalg_cholesky_rcond + * gsl_linalg_QRPT_rcond + +** added functions gsl_linalg_QRPT_{lssolve,lssolve2} to + compute least squares solutions with the QRPT decomposition + +** added function gsl_permute_matrix() + +** added modified Cholesky factorization (gsl_linalg_mcholesky) + to handle symmetric indefinite matrices + +** added pivoted Cholesky factorization (gsl_linalg_pcholesky) + for ill-conditioned matrices + +** rewrote (real) Cholesky decomposition to use + a Level-2 blas algorithm instead of Level-1. Flop + count is about the same but the code is much simpler + and easier to follow + +** completely rewritten nonlinear least squares module, + including support for large problems; the user may + now control the linear solver used, the trust region + updating strategy, and the scaling method. In addition, + support has been added for the geodesic acceleration + step (Transtrum 2011) which can speed up convergence + on a wide class of problems. + +** added gsl_rstat_rms() for root mean square + +** optimized lmniel nonlinear least squares solver + (bug #46369) + +** improved precision in Bessel K0/K1 near x = 2 + (Pavel Holoborodko, bug #47401) + +** added support for compressed row storage sparse + matrices (Alexis Tantet) + +** bug fix in convergence check of hypergeometric 2F1 + function (bug #45926) + +** added gsl_multilarge_linear_lcurve() to compute + the L-curve for large linear systems + +** updated multilarge normal equations method to use + new Cholesky scaling for better numerical stability + +** added scaling to Cholesky routines to reduce the + condition number prior to factorization + +* What was new in gsl-2.1: + +** added test suite for example programs + +** bug fix when compiling with #undef GSL_DISABLE_DEPRECATED + +** bug fix in setting libtool age versioning + +** bug fix in gsl_multifit_wlinear() + +** added gsl_multifit_linear_rcond() to compute reciprocal + condition number of least squares matrix + +** added gsl_multilarge module for large linear least squares + systems + +* What was new in gsl-2.0: + +** fixed bug #43258 for hypergeometric functions (Raymond Rogers) + +** added L-curve analysis routines for linear Tikhonov regression + +** add running statistics module + +** added bilinear and bicubic interpolation (David Zaslavsky) + +** added function gsl_multifit_robust_residuals to compute robust + fit residuals + +** added Steffen monotonic interpolation method (Jean-François Caron) + +** added new nonlinear least squares solver 'lmniel' suitable for + systems with large numbers of data + +** nonlinear least squares solver now tracks the number of function + and Jacobian evaluations, see example program for details + +** the 'fdf' field of gsl_multifit_function_fdf is now deprecated + and does not need to be specified for nonlinear least squares + problems + +** added extensive test suite to nonlinear least squares module, + resulting in a few minor bug fixes; the routine + gsl_multifit_fdfsolver_driver has been rewritten (with API change) + to handle the various error codes of the lmsder iterate + routine, resulting in a high level caller which is highly robust + for a wide class of problems + +** added support for sparse matrices, including a GMRES + iterative linear solver + +** added routines gsl_linalg_givens and gsl_linalg_givens_gv + for Givens rotations + +** added Tikhonov (ridge) regularization to least squares module + (linear and nonlinear) + +** removed unused argument 'n' from gsl_sf_ellint_D + +** merged bspline_deriv_workspace into bspline_workspace to simplify + bspline API; the functions + gsl_bspline_deriv_alloc + gsl_bspline_deriv_free + are now deprecated and will be removed in a future release. + +** merged ALF extension into GSL for associated Legendre functions; + api has changed; consequently the functions: + gsl_sf_legendre_Plm_array + gsl_sf_legendre_Plm_deriv_array + gsl_sf_legendre_sphPlm_array + gsl_sf_legendre_sphPlm_deriv_array + gsl_sf_legendre_array_size + are now deprecated and will be removed in a future release. + +** added function gsl_multifit_robust_weights to allow user to + access the various weighting functions + +* What was new in gsl-1.16: ** fixed error in gsl_rng_fwrite where uninitialized padding bytes were being written (bug #39104) diff -Nru gsl-doc-1.16/ntuple/Makefile.am gsl-doc-2.3/ntuple/Makefile.am --- gsl-doc-1.16/ntuple/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/ntuple/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ pkginclude_HEADERS = gsl_ntuple.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslntuple_la_SOURCES = ntuple.c diff -Nru gsl-doc-1.16/ntuple/Makefile.in gsl-doc-2.3/ntuple/Makefile.in --- gsl-doc-1.16/ntuple/Makefile.in 2013-07-19 15:14:54.000000000 +0000 +++ gsl-doc-2.3/ntuple/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -377,6 +377,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -399,7 +400,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -515,7 +519,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslntuple.la pkginclude_HEADERS = gsl_ntuple.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslntuple_la_SOURCES = ntuple.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c diff -Nru gsl-doc-1.16/ode-initval/Makefile.am gsl-doc-2.3/ode-initval/Makefile.am --- gsl-doc-1.16/ode-initval/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/ode-initval/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ pkginclude_HEADERS = gsl_odeiv.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslodeiv_la_SOURCES = control.c cstd.c cscal.c evolve.c step.c rk2.c rk2imp.c rk2simp.c rk4.c rk4imp.c rkf45.c rk8pd.c rkck.c bsimp.c gear1.c gear2.c diff -Nru gsl-doc-1.16/ode-initval/Makefile.in gsl-doc-2.3/ode-initval/Makefile.in --- gsl-doc-1.16/ode-initval/Makefile.in 2013-07-19 15:14:54.000000000 +0000 +++ gsl-doc-2.3/ode-initval/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -383,6 +383,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -405,7 +406,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -521,7 +525,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslodeiv.la pkginclude_HEADERS = gsl_odeiv.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslodeiv_la_SOURCES = control.c cstd.c cscal.c evolve.c step.c rk2.c rk2imp.c rk2simp.c rk4.c rk4imp.c rkf45.c rk8pd.c rkck.c bsimp.c gear1.c gear2.c noinst_HEADERS = odeiv_util.h TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/ode-initval/rk2simp.c gsl-doc-2.3/ode-initval/rk2simp.c --- gsl-doc-1.16/ode-initval/rk2simp.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/ode-initval/rk2simp.c 2016-08-19 15:37:27.000000000 +0000 @@ -149,6 +149,7 @@ free (state->ytmp); free (state->dfdy); free (state->dfdt); + free (state->y_onestep); free (state); GSL_ERROR_NULL ("failed to allocate space for p", GSL_ENOMEM); } diff -Nru gsl-doc-1.16/ode-initval2/driver.c gsl-doc-2.3/ode-initval2/driver.c --- gsl-doc-1.16/ode-initval2/driver.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/ode-initval2/driver.c 2016-08-19 15:37:27.000000000 +0000 @@ -37,18 +37,19 @@ another function. */ - gsl_odeiv2_driver *state = - (gsl_odeiv2_driver *) malloc (sizeof (gsl_odeiv2_driver)); + gsl_odeiv2_driver *state; - if (state == NULL) + if (sys == NULL) { - GSL_ERROR_NULL ("failed to allocate space for driver state", - GSL_ENOMEM); + GSL_ERROR_NULL ("gsl_odeiv2_system must be defined", GSL_EINVAL); } - if (sys == NULL) + state = (gsl_odeiv2_driver *) calloc (1, sizeof (gsl_odeiv2_driver)); + + if (state == NULL) { - GSL_ERROR_NULL ("gsl_odeiv2_system must be defined", GSL_EINVAL); + GSL_ERROR_NULL ("failed to allocate space for driver state", + GSL_ENOMEM); } { @@ -56,6 +57,7 @@ if (dim == 0) { + gsl_odeiv2_driver_free(state); GSL_ERROR_NULL ("gsl_odeiv2_system dimension must be a positive integer", GSL_EINVAL); @@ -67,7 +69,7 @@ if (state->s == NULL) { - free (state); + gsl_odeiv2_driver_free(state); GSL_ERROR_NULL ("failed to allocate step object", GSL_ENOMEM); } @@ -76,8 +78,7 @@ if (state->e == NULL) { - gsl_odeiv2_step_free (state->s); - free (state); + gsl_odeiv2_driver_free(state); GSL_ERROR_NULL ("failed to allocate evolve object", GSL_ENOMEM); } @@ -87,6 +88,7 @@ } else { + gsl_odeiv2_driver_free(state); GSL_ERROR_NULL ("invalid hstart", GSL_EINVAL); } @@ -479,12 +481,14 @@ void gsl_odeiv2_driver_free (gsl_odeiv2_driver * state) { - if (state->c != NULL) - { - gsl_odeiv2_control_free (state->c); - } + if (state->c) + gsl_odeiv2_control_free (state->c); + + if (state->e) + gsl_odeiv2_evolve_free (state->e); + + if (state->s) + gsl_odeiv2_step_free (state->s); - gsl_odeiv2_evolve_free (state->e); - gsl_odeiv2_step_free (state->s); free (state); } diff -Nru gsl-doc-1.16/ode-initval2/Makefile.am gsl-doc-2.3/ode-initval2/Makefile.am --- gsl-doc-1.16/ode-initval2/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/ode-initval2/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ pkginclude_HEADERS = gsl_odeiv2.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslodeiv2_la_SOURCES = control.c cstd.c cscal.c evolve.c step.c rk2.c rk2imp.c rk4.c rk4imp.c rkf45.c rk8pd.c rkck.c bsimp.c rk1imp.c msadams.c msbdf.c driver.c diff -Nru gsl-doc-1.16/ode-initval2/Makefile.in gsl-doc-2.3/ode-initval2/Makefile.in --- gsl-doc-1.16/ode-initval2/Makefile.in 2013-07-19 15:14:54.000000000 +0000 +++ gsl-doc-2.3/ode-initval2/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -383,6 +383,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -405,7 +406,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -521,7 +525,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslodeiv2.la pkginclude_HEADERS = gsl_odeiv2.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslodeiv2_la_SOURCES = control.c cstd.c cscal.c evolve.c step.c rk2.c rk2imp.c rk4.c rk4imp.c rkf45.c rk8pd.c rkck.c bsimp.c rk1imp.c msadams.c msbdf.c driver.c noinst_HEADERS = odeiv_util.h step_utils.c rksubs.c modnewton1.c control_utils.c TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/permutation/gsl_permute_matrix_char.h gsl-doc-2.3/permutation/gsl_permute_matrix_char.h --- gsl-doc-1.16/permutation/gsl_permute_matrix_char.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/permutation/gsl_permute_matrix_char.h 2016-07-07 20:36:11.000000000 +0000 @@ -0,0 +1,44 @@ +/* permutation/gsl_permute_matrix_char.h + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_PERMUTE_MATRIX_CHAR_H__ +#define __GSL_PERMUTE_MATRIX_CHAR_H__ + +#include +#include +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +int gsl_permute_matrix_char (const gsl_permutation * p, gsl_matrix_char * A); + +__END_DECLS + +#endif /* __GSL_PERMUTE_MATRIX_CHAR_H__ */ diff -Nru gsl-doc-1.16/permutation/gsl_permute_matrix_complex_double.h gsl-doc-2.3/permutation/gsl_permute_matrix_complex_double.h --- gsl-doc-1.16/permutation/gsl_permute_matrix_complex_double.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/permutation/gsl_permute_matrix_complex_double.h 2016-07-07 20:36:11.000000000 +0000 @@ -0,0 +1,44 @@ +/* permutation/gsl_permute_matrix_complex_double.h + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_PERMUTE_MATRIX_COMPLEX_DOUBLE_H__ +#define __GSL_PERMUTE_MATRIX_COMPLEX_DOUBLE_H__ + +#include +#include +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +int gsl_permute_matrix_complex (const gsl_permutation * p, gsl_matrix_complex * A); + +__END_DECLS + +#endif /* __GSL_PERMUTE_MATRIX_COMPLEX_DOUBLE_H__ */ diff -Nru gsl-doc-1.16/permutation/gsl_permute_matrix_complex_float.h gsl-doc-2.3/permutation/gsl_permute_matrix_complex_float.h --- gsl-doc-1.16/permutation/gsl_permute_matrix_complex_float.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/permutation/gsl_permute_matrix_complex_float.h 2016-07-07 20:36:11.000000000 +0000 @@ -0,0 +1,44 @@ +/* permutation/gsl_permute_matrix_complex_float.h + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_PERMUTE_MATRIX_COMPLEX_FLOAT_H__ +#define __GSL_PERMUTE_MATRIX_COMPLEX_FLOAT_H__ + +#include +#include +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +int gsl_permute_matrix_complex_float (const gsl_permutation * p, gsl_matrix_complex_float * A); + +__END_DECLS + +#endif /* __GSL_PERMUTE_MATRIX_COMPLEX_FLOAT_H__ */ diff -Nru gsl-doc-1.16/permutation/gsl_permute_matrix_complex_long_double.h gsl-doc-2.3/permutation/gsl_permute_matrix_complex_long_double.h --- gsl-doc-1.16/permutation/gsl_permute_matrix_complex_long_double.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/permutation/gsl_permute_matrix_complex_long_double.h 2016-07-07 20:36:11.000000000 +0000 @@ -0,0 +1,44 @@ +/* permutation/gsl_permute_matrix_complex_long_double.h + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_PERMUTE_MATRIX_COMPLEX_LONG_DOUBLE_H__ +#define __GSL_PERMUTE_MATRIX_COMPLEX_LONG_DOUBLE_H__ + +#include +#include +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +int gsl_permute_matrix_complex_long_double (const gsl_permutation * p, gsl_matrix_complex_long_double * A); + +__END_DECLS + +#endif /* __GSL_PERMUTE_MATRIX_COMPLEX_LONG_DOUBLE_H__ */ diff -Nru gsl-doc-1.16/permutation/gsl_permute_matrix_double.h gsl-doc-2.3/permutation/gsl_permute_matrix_double.h --- gsl-doc-1.16/permutation/gsl_permute_matrix_double.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/permutation/gsl_permute_matrix_double.h 2016-07-07 20:36:11.000000000 +0000 @@ -0,0 +1,44 @@ +/* permutation/gsl_permute_matrix_double.h + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_PERMUTE_MATRIX_DOUBLE_H__ +#define __GSL_PERMUTE_MATRIX_DOUBLE_H__ + +#include +#include +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +int gsl_permute_matrix (const gsl_permutation * p, gsl_matrix * A); + +__END_DECLS + +#endif /* __GSL_PERMUTE_MATRIX_DOUBLE_H__ */ diff -Nru gsl-doc-1.16/permutation/gsl_permute_matrix_float.h gsl-doc-2.3/permutation/gsl_permute_matrix_float.h --- gsl-doc-1.16/permutation/gsl_permute_matrix_float.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/permutation/gsl_permute_matrix_float.h 2016-07-07 20:36:11.000000000 +0000 @@ -0,0 +1,44 @@ +/* permutation/gsl_permute_matrix_float.h + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_PERMUTE_MATRIX_FLOAT_H__ +#define __GSL_PERMUTE_MATRIX_FLOAT_H__ + +#include +#include +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +int gsl_permute_matrix_float (const gsl_permutation * p, gsl_matrix_float * A); + +__END_DECLS + +#endif /* __GSL_PERMUTE_MATRIX_FLOAT_H__ */ diff -Nru gsl-doc-1.16/permutation/gsl_permute_matrix.h gsl-doc-2.3/permutation/gsl_permute_matrix.h --- gsl-doc-1.16/permutation/gsl_permute_matrix.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/permutation/gsl_permute_matrix.h 2016-07-07 20:36:11.000000000 +0000 @@ -0,0 +1,24 @@ +#ifndef __GSL_PERMUTE_MATRIX_H__ +#define __GSL_PERMUTE_MATRIX_H__ + +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include + +#include +#include + +#endif /* __GSL_PERMUTE_MATRIX_H__ */ diff -Nru gsl-doc-1.16/permutation/gsl_permute_matrix_int.h gsl-doc-2.3/permutation/gsl_permute_matrix_int.h --- gsl-doc-1.16/permutation/gsl_permute_matrix_int.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/permutation/gsl_permute_matrix_int.h 2016-07-07 20:36:11.000000000 +0000 @@ -0,0 +1,44 @@ +/* permutation/gsl_permute_matrix_int.h + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_PERMUTE_MATRIX_INT_H__ +#define __GSL_PERMUTE_MATRIX_INT_H__ + +#include +#include +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +int gsl_permute_matrix_int (const gsl_permutation * p, gsl_matrix_int * A); + +__END_DECLS + +#endif /* __GSL_PERMUTE_MATRIX_INT_H__ */ diff -Nru gsl-doc-1.16/permutation/gsl_permute_matrix_long_double.h gsl-doc-2.3/permutation/gsl_permute_matrix_long_double.h --- gsl-doc-1.16/permutation/gsl_permute_matrix_long_double.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/permutation/gsl_permute_matrix_long_double.h 2016-07-07 20:36:11.000000000 +0000 @@ -0,0 +1,44 @@ +/* permutation/gsl_permute_matrix_long_double.h + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_PERMUTE_MATRIX_LONG_DOUBLE_H__ +#define __GSL_PERMUTE_MATRIX_LONG_DOUBLE_H__ + +#include +#include +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +int gsl_permute_matrix_long_double (const gsl_permutation * p, gsl_matrix_long_double * A); + +__END_DECLS + +#endif /* __GSL_PERMUTE_MATRIX_LONG_DOUBLE_H__ */ diff -Nru gsl-doc-1.16/permutation/gsl_permute_matrix_long.h gsl-doc-2.3/permutation/gsl_permute_matrix_long.h --- gsl-doc-1.16/permutation/gsl_permute_matrix_long.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/permutation/gsl_permute_matrix_long.h 2016-07-07 20:36:11.000000000 +0000 @@ -0,0 +1,44 @@ +/* permutation/gsl_permute_matrix_long.h + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_PERMUTE_MATRIX_LONG_H__ +#define __GSL_PERMUTE_MATRIX_LONG_H__ + +#include +#include +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +int gsl_permute_matrix_long (const gsl_permutation * p, gsl_matrix_long * A); + +__END_DECLS + +#endif /* __GSL_PERMUTE_MATRIX_LONG_H__ */ diff -Nru gsl-doc-1.16/permutation/gsl_permute_matrix_short.h gsl-doc-2.3/permutation/gsl_permute_matrix_short.h --- gsl-doc-1.16/permutation/gsl_permute_matrix_short.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/permutation/gsl_permute_matrix_short.h 2016-07-07 20:36:11.000000000 +0000 @@ -0,0 +1,44 @@ +/* permutation/gsl_permute_matrix_short.h + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_PERMUTE_MATRIX_SHORT_H__ +#define __GSL_PERMUTE_MATRIX_SHORT_H__ + +#include +#include +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +int gsl_permute_matrix_short (const gsl_permutation * p, gsl_matrix_short * A); + +__END_DECLS + +#endif /* __GSL_PERMUTE_MATRIX_SHORT_H__ */ diff -Nru gsl-doc-1.16/permutation/gsl_permute_matrix_uchar.h gsl-doc-2.3/permutation/gsl_permute_matrix_uchar.h --- gsl-doc-1.16/permutation/gsl_permute_matrix_uchar.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/permutation/gsl_permute_matrix_uchar.h 2016-07-07 20:36:11.000000000 +0000 @@ -0,0 +1,44 @@ +/* permutation/gsl_permute_matrix_uchar.h + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_PERMUTE_MATRIX_UCHAR_H__ +#define __GSL_PERMUTE_MATRIX_UCHAR_H__ + +#include +#include +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +int gsl_permute_matrix_uchar (const gsl_permutation * p, gsl_matrix_uchar * A); + +__END_DECLS + +#endif /* __GSL_PERMUTE_MATRIX_UCHAR_H__ */ diff -Nru gsl-doc-1.16/permutation/gsl_permute_matrix_uint.h gsl-doc-2.3/permutation/gsl_permute_matrix_uint.h --- gsl-doc-1.16/permutation/gsl_permute_matrix_uint.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/permutation/gsl_permute_matrix_uint.h 2016-07-07 20:36:11.000000000 +0000 @@ -0,0 +1,44 @@ +/* permutation/gsl_permute_matrix_uint.h + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_PERMUTE_MATRIX_UINT_H__ +#define __GSL_PERMUTE_MATRIX_UINT_H__ + +#include +#include +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +int gsl_permute_matrix_uint (const gsl_permutation * p, gsl_matrix_uint * A); + +__END_DECLS + +#endif /* __GSL_PERMUTE_MATRIX_UINT_H__ */ diff -Nru gsl-doc-1.16/permutation/gsl_permute_matrix_ulong.h gsl-doc-2.3/permutation/gsl_permute_matrix_ulong.h --- gsl-doc-1.16/permutation/gsl_permute_matrix_ulong.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/permutation/gsl_permute_matrix_ulong.h 2016-07-07 20:36:11.000000000 +0000 @@ -0,0 +1,44 @@ +/* permutation/gsl_permute_matrix_ulong.h + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_PERMUTE_MATRIX_ULONG_H__ +#define __GSL_PERMUTE_MATRIX_ULONG_H__ + +#include +#include +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +int gsl_permute_matrix_ulong (const gsl_permutation * p, gsl_matrix_ulong * A); + +__END_DECLS + +#endif /* __GSL_PERMUTE_MATRIX_ULONG_H__ */ diff -Nru gsl-doc-1.16/permutation/gsl_permute_matrix_ushort.h gsl-doc-2.3/permutation/gsl_permute_matrix_ushort.h --- gsl-doc-1.16/permutation/gsl_permute_matrix_ushort.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/permutation/gsl_permute_matrix_ushort.h 2016-07-07 20:36:11.000000000 +0000 @@ -0,0 +1,44 @@ +/* permutation/gsl_permute_matrix_ushort.h + * + * Copyright (C) 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_PERMUTE_MATRIX_USHORT_H__ +#define __GSL_PERMUTE_MATRIX_USHORT_H__ + +#include +#include +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +int gsl_permute_matrix_ushort (const gsl_permutation * p, gsl_matrix_ushort * A); + +__END_DECLS + +#endif /* __GSL_PERMUTE_MATRIX_USHORT_H__ */ diff -Nru gsl-doc-1.16/permutation/Makefile.am gsl-doc-2.3/permutation/Makefile.am --- gsl-doc-1.16/permutation/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/permutation/Makefile.am 2016-07-07 20:36:11.000000000 +0000 @@ -1,8 +1,8 @@ noinst_LTLIBRARIES = libgslpermutation.la -pkginclude_HEADERS = gsl_permutation.h gsl_permute.h gsl_permute_char.h gsl_permute_complex_double.h gsl_permute_complex_float.h gsl_permute_complex_long_double.h gsl_permute_double.h gsl_permute_float.h gsl_permute_int.h gsl_permute_long.h gsl_permute_long_double.h gsl_permute_short.h gsl_permute_uchar.h gsl_permute_uint.h gsl_permute_ulong.h gsl_permute_ushort.h gsl_permute_vector.h gsl_permute_vector_char.h gsl_permute_vector_complex_double.h gsl_permute_vector_complex_float.h gsl_permute_vector_complex_long_double.h gsl_permute_vector_double.h gsl_permute_vector_float.h gsl_permute_vector_int.h gsl_permute_vector_long.h gsl_permute_vector_long_double.h gsl_permute_vector_short.h gsl_permute_vector_uchar.h gsl_permute_vector_uint.h gsl_permute_vector_ulong.h gsl_permute_vector_ushort.h +pkginclude_HEADERS = gsl_permutation.h gsl_permute.h gsl_permute_char.h gsl_permute_complex_double.h gsl_permute_complex_float.h gsl_permute_complex_long_double.h gsl_permute_double.h gsl_permute_float.h gsl_permute_int.h gsl_permute_long.h gsl_permute_long_double.h gsl_permute_short.h gsl_permute_uchar.h gsl_permute_uint.h gsl_permute_ulong.h gsl_permute_ushort.h gsl_permute_vector.h gsl_permute_vector_char.h gsl_permute_vector_complex_double.h gsl_permute_vector_complex_float.h gsl_permute_vector_complex_long_double.h gsl_permute_vector_double.h gsl_permute_vector_float.h gsl_permute_vector_int.h gsl_permute_vector_long.h gsl_permute_vector_long_double.h gsl_permute_vector_short.h gsl_permute_vector_uchar.h gsl_permute_vector_uint.h gsl_permute_vector_ulong.h gsl_permute_vector_ushort.h gsl_permute_matrix_char.h gsl_permute_matrix_complex_long_double.h gsl_permute_matrix.h gsl_permute_matrix_long.h gsl_permute_matrix_uint.h gsl_permute_matrix_complex_double.h gsl_permute_matrix_double.h gsl_permute_matrix_int.h gsl_permute_matrix_short.h gsl_permute_matrix_ulong.h gsl_permute_matrix_complex_float.h gsl_permute_matrix_float.h gsl_permute_matrix_long_double.h gsl_permute_matrix_uchar.h gsl_permute_matrix_ushort.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslpermutation_la_SOURCES = init.c file.c permutation.c permute.c canonical.c inline.c diff -Nru gsl-doc-1.16/permutation/Makefile.in gsl-doc-2.3/permutation/Makefile.in --- gsl-doc-1.16/permutation/Makefile.in 2013-07-19 15:14:54.000000000 +0000 +++ gsl-doc-2.3/permutation/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -379,6 +379,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -401,7 +402,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -516,8 +520,31 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslpermutation.la -pkginclude_HEADERS = gsl_permutation.h gsl_permute.h gsl_permute_char.h gsl_permute_complex_double.h gsl_permute_complex_float.h gsl_permute_complex_long_double.h gsl_permute_double.h gsl_permute_float.h gsl_permute_int.h gsl_permute_long.h gsl_permute_long_double.h gsl_permute_short.h gsl_permute_uchar.h gsl_permute_uint.h gsl_permute_ulong.h gsl_permute_ushort.h gsl_permute_vector.h gsl_permute_vector_char.h gsl_permute_vector_complex_double.h gsl_permute_vector_complex_float.h gsl_permute_vector_complex_long_double.h gsl_permute_vector_double.h gsl_permute_vector_float.h gsl_permute_vector_int.h gsl_permute_vector_long.h gsl_permute_vector_long_double.h gsl_permute_vector_short.h gsl_permute_vector_uchar.h gsl_permute_vector_uint.h gsl_permute_vector_ulong.h gsl_permute_vector_ushort.h -INCLUDES = -I$(top_srcdir) +pkginclude_HEADERS = gsl_permutation.h gsl_permute.h \ + gsl_permute_char.h gsl_permute_complex_double.h \ + gsl_permute_complex_float.h gsl_permute_complex_long_double.h \ + gsl_permute_double.h gsl_permute_float.h gsl_permute_int.h \ + gsl_permute_long.h gsl_permute_long_double.h \ + gsl_permute_short.h gsl_permute_uchar.h gsl_permute_uint.h \ + gsl_permute_ulong.h gsl_permute_ushort.h gsl_permute_vector.h \ + gsl_permute_vector_char.h gsl_permute_vector_complex_double.h \ + gsl_permute_vector_complex_float.h \ + gsl_permute_vector_complex_long_double.h \ + gsl_permute_vector_double.h gsl_permute_vector_float.h \ + gsl_permute_vector_int.h gsl_permute_vector_long.h \ + gsl_permute_vector_long_double.h gsl_permute_vector_short.h \ + gsl_permute_vector_uchar.h gsl_permute_vector_uint.h \ + gsl_permute_vector_ulong.h gsl_permute_vector_ushort.h \ + gsl_permute_matrix_char.h \ + gsl_permute_matrix_complex_long_double.h gsl_permute_matrix.h \ + gsl_permute_matrix_long.h gsl_permute_matrix_uint.h \ + gsl_permute_matrix_complex_double.h \ + gsl_permute_matrix_double.h gsl_permute_matrix_int.h \ + gsl_permute_matrix_short.h gsl_permute_matrix_ulong.h \ + gsl_permute_matrix_complex_float.h gsl_permute_matrix_float.h \ + gsl_permute_matrix_long_double.h gsl_permute_matrix_uchar.h \ + gsl_permute_matrix_ushort.h +AM_CPPFLAGS = -I$(top_srcdir) libgslpermutation_la_SOURCES = init.c file.c permutation.c permute.c canonical.c inline.c noinst_HEADERS = permute_source.c TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/permutation/permutation.c gsl-doc-2.3/permutation/permutation.c --- gsl-doc-1.16/permutation/permutation.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/permutation/permutation.c 2015-11-03 16:21:55.000000000 +0000 @@ -250,6 +250,7 @@ return GSL_SUCCESS; } + int gsl_permutation_memcpy (gsl_permutation * dest, const gsl_permutation * src) diff -Nru gsl-doc-1.16/permutation/permute.c gsl-doc-2.3/permutation/permute.c --- gsl-doc-1.16/permutation/permute.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/permutation/permute.c 2016-07-07 20:36:12.000000000 +0000 @@ -1,8 +1,10 @@ #include #include #include +#include #include #include +#include #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" diff -Nru gsl-doc-1.16/permutation/permute_source.c gsl-doc-2.3/permutation/permute_source.c --- gsl-doc-1.16/permutation/permute_source.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/permutation/permute_source.c 2016-07-07 20:36:12.000000000 +0000 @@ -161,3 +161,25 @@ return GSL_SUCCESS; } + +int +TYPE (gsl_permute_matrix) (const gsl_permutation * p, TYPE (gsl_matrix) * A) +{ + if (A->size2 != p->size) + { + GSL_ERROR ("matrix columns and permutation must be the same length", GSL_EBADLEN); + } + else + { + size_t i; + + for (i = 0; i < A->size1; ++i) + { + QUALIFIED_VIEW (gsl_vector, view) r = FUNCTION (gsl_matrix, row) (A, i); + + TYPE (gsl_permute_vector) (p, &r.vector); + } + + return GSL_SUCCESS; + } +} diff -Nru gsl-doc-1.16/poly/ChangeLog gsl-doc-2.3/poly/ChangeLog --- gsl-doc-1.16/poly/ChangeLog 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/poly/ChangeLog 2015-11-03 16:21:55.000000000 +0000 @@ -1,3 +1,9 @@ +2013-10-13 Rhys Ulerich + + * test.c Update stale names from "gsl_poly_eval_dp" to + "gsl_poly_eval_derivs" in the test log. Thanks to Mark + Jourdain for pointing out the inconsistency. + 2011-04-13 Brian Gough * solve_quadratic.c (gsl_poly_solve_quadratic): simplify the case diff -Nru gsl-doc-1.16/poly/Makefile.am gsl-doc-2.3/poly/Makefile.am --- gsl-doc-1.16/poly/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/poly/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ pkginclude_HEADERS = gsl_poly.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslpoly_la_SOURCES = dd.c eval.c solve_quadratic.c solve_cubic.c zsolve_quadratic.c zsolve_cubic.c zsolve.c zsolve_init.c deriv.c diff -Nru gsl-doc-1.16/poly/Makefile.in gsl-doc-2.3/poly/Makefile.in --- gsl-doc-1.16/poly/Makefile.in 2013-07-19 15:14:54.000000000 +0000 +++ gsl-doc-2.3/poly/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -379,6 +379,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -401,7 +402,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -517,7 +521,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslpoly.la pkginclude_HEADERS = gsl_poly.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslpoly_la_SOURCES = dd.c eval.c solve_quadratic.c solve_cubic.c zsolve_quadratic.c zsolve_cubic.c zsolve.c zsolve_init.c deriv.c noinst_HEADERS = balance.c companion.c qr.c TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/poly/test.c gsl-doc-2.3/poly/test.c --- gsl-doc-1.16/poly/test.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/poly/test.c 2015-11-03 16:21:55.000000000 +0000 @@ -25,11 +25,21 @@ #include #include +/* sort by Re(z) then by Im(z) */ static int cmp_cplx(const double *a, const double *b) { - double t = (a[0] * a[0] + a[1] * a[1]) - (b[0] * b[0] + b[1] * b[1]); - return t < 0.0 ? -1 : t > 0.0 ? 1 : 0; + double r = a[0] - b[0]; + + if (r == 0.0) + { + double t = a[1] - b[1]; + return t < 0.0 ? -1 : t > 0.0 ? 1 : 0; + } + else if (r < 0.0) + return -1; + else + return 1; } int @@ -534,25 +544,26 @@ Problem reported by Munagala Ramanath (bug #39055) */ - double a[16] = { 32, -48, -8, 28, -8, 16, -16, 12, -16, 6, 10, -17, 10, 2, -4, 1 }; + double a[16] = { 32, -48, -8, 28, -8, 16, -16, 12, + -16, 6, 10, -17, 10, 2, -4, 1 }; double z[16*2]; - double expected[16*20] = { - 1.0000000000000000, 0.00000000000000000, - 1.0000000000000000, 0.00000000000000000, - -1.0000000000000000, 0.00000000000000000, - -0.65893856175240950, 0.83459757287426684, - -0.65893856175240950, -0.83459757287426684, - -0.070891117403341281, -1.1359249087587791, - -0.070891117403341281, 1.1359249087587791, - 1.1142366961812986, -0.48083981203389980, - 1.1142366961812986, 0.48083981203389980, - -1.3066982484920768, 0.00000000000000000, - 0.57284747839410854, 1.1987808988289705, - 0.57284747839410854, -1.1987808988289705, - -1.6078107423472359, 0.00000000000000000, - 2.0000000000000000, 0.00000000000000000, - 2.0000000000000000, 0.00000000000000000 }; + double expected[16*2] = { + -1.6078107423472359, 0.00000000000000000, + -1.3066982484920768, 0.00000000000000000, + -1.0000000000000000, 0.00000000000000000, + -0.65893856175240950, -0.83459757287426684, + -0.65893856175240950, 0.83459757287426684, + -0.070891117403341281, -1.1359249087587791, + -0.070891117403341281, 1.1359249087587791, + 0.57284747839410854, -1.1987808988289705, + 0.57284747839410854, 1.1987808988289705, + 1.0000000000000000, 0.00000000000000000, + 1.0000000000000000, 0.00000000000000000, + 1.1142366961812986, -0.48083981203389980, + 1.1142366961812986, 0.48083981203389980, + 2.0000000000000000, 0.00000000000000000, + 2.0000000000000000, 0.00000000000000000 }; int i; @@ -568,8 +579,8 @@ for (i = 0; i<15; i++) { - gsl_test_abs (z[2*i], expected[2*i], 1e-7, "z%d.real, 15th-order polynomial", i); - gsl_test_abs (z[2*i+1], expected[2*i+1], 1e-7, "z%d.imag, 15th-order polynomial", i); + gsl_test_rel (z[2*i], expected[2*i], 1e-7, "z%d.real, 15th-order polynomial", i); + gsl_test_rel (z[2*i+1], expected[2*i+1], 1e-7, "z%d.imag, 15th-order polynomial", i); } } @@ -654,12 +665,12 @@ x = -0.5; gsl_poly_eval_derivs(c, 6, x, dc, 6); - gsl_test_rel (dc[0], c[0] + c[1]*x + c[2]*x*x + c[3]*x*x*x + c[4]*x*x*x*x + c[5]*x*x*x*x*x , eps, "gsl_poly_eval_dp({+1, -2, +3, -4, +5, -6}, 3.75)"); - gsl_test_rel (dc[1], c[1] + 2.0*c[2]*x + 3.0*c[3]*x*x + 4.0*c[4]*x*x*x + 5.0*c[5]*x*x*x*x , eps, "gsl_poly_eval_dp({+1, -2, +3, -4, +5, -6} deriv 1, -12.375)"); - gsl_test_rel (dc[2], 2.0*c[2] + 3.0*2.0*c[3]*x + 4.0*3.0*c[4]*x*x + 5.0*4.0*c[5]*x*x*x , eps, "gsl_poly_eval_dp({+1, -2, +3, -4, +5, -6} deriv 2, +48.0)"); - gsl_test_rel (dc[3], 3.0*2.0*c[3] + 4.0*3.0*2.0*c[4]*x + 5.0*4.0*3.0*c[5]*x*x , eps,"gsl_poly_eval_dp({+1, -2, +3, -4, +5, -6} deriv 3, -174.0)"); - gsl_test_rel (dc[4], 4.0*3.0*2.0*c[4] + 5.0*4.0*3.0*2.0*c[5]*x, eps, "gsl_poly_eval_dp({+1, -2, +3, -4, +5, -6} deriv 4, +480.0)"); - gsl_test_rel (dc[5], 5.0*4.0*3.0*2.0*c[5] , eps, "gsl_poly_eval_dp({+1, -2, +3, -4, +5, -6} deriv 5, -720.0)"); + gsl_test_rel (dc[0], c[0] + c[1]*x + c[2]*x*x + c[3]*x*x*x + c[4]*x*x*x*x + c[5]*x*x*x*x*x , eps, "gsl_poly_eval_derivs({+1, -2, +3, -4, +5, -6}, 3.75)"); + gsl_test_rel (dc[1], c[1] + 2.0*c[2]*x + 3.0*c[3]*x*x + 4.0*c[4]*x*x*x + 5.0*c[5]*x*x*x*x , eps, "gsl_poly_eval_derivs({+1, -2, +3, -4, +5, -6} deriv 1, -12.375)"); + gsl_test_rel (dc[2], 2.0*c[2] + 3.0*2.0*c[3]*x + 4.0*3.0*c[4]*x*x + 5.0*4.0*c[5]*x*x*x , eps, "gsl_poly_eval_derivs({+1, -2, +3, -4, +5, -6} deriv 2, +48.0)"); + gsl_test_rel (dc[3], 3.0*2.0*c[3] + 4.0*3.0*2.0*c[4]*x + 5.0*4.0*3.0*c[5]*x*x , eps,"gsl_poly_eval_derivs({+1, -2, +3, -4, +5, -6} deriv 3, -174.0)"); + gsl_test_rel (dc[4], 4.0*3.0*2.0*c[4] + 5.0*4.0*3.0*2.0*c[5]*x, eps, "gsl_poly_eval_derivs({+1, -2, +3, -4, +5, -6} deriv 4, +480.0)"); + gsl_test_rel (dc[5], 5.0*4.0*3.0*2.0*c[5] , eps, "gsl_poly_eval_derivs({+1, -2, +3, -4, +5, -6} deriv 5, -720.0)"); } diff -Nru gsl-doc-1.16/qrng/Makefile.am gsl-doc-2.3/qrng/Makefile.am --- gsl-doc-1.16/qrng/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/qrng/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ pkginclude_HEADERS = gsl_qrng.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslqrng_la_SOURCES = gsl_qrng.h qrng.c niederreiter-2.c sobol.c halton.c reversehalton.c inline.c diff -Nru gsl-doc-1.16/qrng/Makefile.in gsl-doc-2.3/qrng/Makefile.in --- gsl-doc-1.16/qrng/Makefile.in 2013-07-19 15:14:54.000000000 +0000 +++ gsl-doc-2.3/qrng/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -377,6 +377,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -399,7 +400,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -515,7 +519,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslqrng.la pkginclude_HEADERS = gsl_qrng.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslqrng_la_SOURCES = gsl_qrng.h qrng.c niederreiter-2.c sobol.c halton.c reversehalton.c inline.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c diff -Nru gsl-doc-1.16/randist/beta.c gsl-doc-2.3/randist/beta.c --- gsl-doc-1.16/randist/beta.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/randist/beta.c 2016-09-15 20:18:12.000000000 +0000 @@ -33,10 +33,39 @@ double gsl_ran_beta (const gsl_rng * r, const double a, const double b) { - double x1 = gsl_ran_gamma (r, a, 1.0); - double x2 = gsl_ran_gamma (r, b, 1.0); - - return x1 / (x1 + x2); + if ( (a <= 1.0) && (b <= 1.0) ) + { + double U, V, X, Y; + while (1) + { + U = gsl_rng_uniform_pos(r); + V = gsl_rng_uniform_pos(r); + X = pow(U, 1.0/a); + Y = pow(V, 1.0/b); + if ((X + Y ) <= 1.0) + { + if (X + Y > 0) + { + return X/ (X + Y); + } + else + { + double logX = log(U)/a; + double logY = log(V)/b; + double logM = logX > logY ? logX: logY; + logX -= logM; + logY -= logM; + return exp(logX - log(exp(logX) + exp(logY))); + } + } + } + } + else + { + double x1 = gsl_ran_gamma (r, a, 1.0); + double x2 = gsl_ran_gamma (r, b, 1.0); + return x1 / (x1 + x2); + } } double diff -Nru gsl-doc-1.16/randist/gsl_randist.h gsl-doc-2.3/randist/gsl_randist.h --- gsl-doc-1.16/randist/gsl_randist.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/randist/gsl_randist.h 2016-08-10 21:24:45.000000000 +0000 @@ -20,6 +20,8 @@ #ifndef __GSL_RANDIST_H__ #define __GSL_RANDIST_H__ #include +#include +#include #undef __BEGIN_DECLS #undef __END_DECLS @@ -93,6 +95,20 @@ void gsl_ran_bivariate_gaussian (const gsl_rng * r, double sigma_x, double sigma_y, double rho, double *x, double *y); double gsl_ran_bivariate_gaussian_pdf (const double x, const double y, const double sigma_x, const double sigma_y, const double rho); +int gsl_ran_multivariate_gaussian (const gsl_rng * r, const gsl_vector * mu, const gsl_matrix * L, gsl_vector * result); +int gsl_ran_multivariate_gaussian_log_pdf (const gsl_vector * x, + const gsl_vector * mu, + const gsl_matrix * L, + double * result, + gsl_vector * work); +int gsl_ran_multivariate_gaussian_pdf (const gsl_vector * x, + const gsl_vector * mu, + const gsl_matrix * L, + double * result, + gsl_vector * work); +int gsl_ran_multivariate_gaussian_mean (const gsl_matrix * X, gsl_vector * mu_hat); +int gsl_ran_multivariate_gaussian_vcov (const gsl_matrix * X, gsl_matrix * sigma_hat); + double gsl_ran_landau (const gsl_rng * r); double gsl_ran_landau_pdf (const double x); diff -Nru gsl-doc-1.16/randist/Makefile.am gsl-doc-2.3/randist/Makefile.am --- gsl-doc-1.16/randist/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/randist/Makefile.am 2016-08-10 21:24:45.000000000 +0000 @@ -2,15 +2,15 @@ pkginclude_HEADERS= gsl_randist.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) -libgslrandist_la_SOURCES = bernoulli.c beta.c bigauss.c binomial.c cauchy.c chisq.c dirichlet.c discrete.c erlang.c exponential.c exppow.c fdist.c flat.c gamma.c gauss.c gausszig.c gausstail.c geometric.c gumbel.c hyperg.c laplace.c levy.c logarithmic.c logistic.c lognormal.c multinomial.c nbinomial.c pareto.c pascal.c poisson.c rayleigh.c shuffle.c sphere.c tdist.c weibull.c landau.c binomial_tpe.c +libgslrandist_la_SOURCES = bernoulli.c beta.c bigauss.c binomial.c cauchy.c chisq.c dirichlet.c discrete.c erlang.c exponential.c exppow.c fdist.c flat.c gamma.c gauss.c gausszig.c gausstail.c geometric.c gumbel.c hyperg.c laplace.c levy.c logarithmic.c logistic.c lognormal.c multinomial.c mvgauss.c nbinomial.c pareto.c pascal.c poisson.c rayleigh.c shuffle.c sphere.c tdist.c weibull.c landau.c binomial_tpe.c TESTS = $(check_PROGRAMS) check_PROGRAMS = test test_SOURCES = test.c -test_LDADD = libgslrandist.la ../rng/libgslrng.la ../specfunc/libgslspecfunc.la ../integration/libgslintegration.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la +test_LDADD = libgslrandist.la ../rng/libgslrng.la ../cdf/libgslcdf.la ../specfunc/libgslspecfunc.la ../integration/libgslintegration.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la ../statistics/libgslstatistics.la ../sort/libgslsort.la ../linalg/libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la diff -Nru gsl-doc-1.16/randist/Makefile.in gsl-doc-2.3/randist/Makefile.in --- gsl-doc-1.16/randist/Makefile.in 2013-07-19 15:14:54.000000000 +0000 +++ gsl-doc-2.3/randist/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -99,8 +99,8 @@ erlang.lo exponential.lo exppow.lo fdist.lo flat.lo gamma.lo \ gauss.lo gausszig.lo gausstail.lo geometric.lo gumbel.lo \ hyperg.lo laplace.lo levy.lo logarithmic.lo logistic.lo \ - lognormal.lo multinomial.lo nbinomial.lo pareto.lo pascal.lo \ - poisson.lo rayleigh.lo shuffle.lo sphere.lo tdist.lo \ + lognormal.lo multinomial.lo mvgauss.lo nbinomial.lo pareto.lo \ + pascal.lo poisson.lo rayleigh.lo shuffle.lo sphere.lo tdist.lo \ weibull.lo landau.lo binomial_tpe.lo libgslrandist_la_OBJECTS = $(am_libgslrandist_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) @@ -110,11 +110,15 @@ am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslrandist.la ../rng/libgslrng.la \ - ../specfunc/libgslspecfunc.la \ + ../cdf/libgslcdf.la ../specfunc/libgslspecfunc.la \ ../integration/libgslintegration.la \ ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ - ../utils/libutils.la + ../utils/libutils.la ../statistics/libgslstatistics.la \ + ../sort/libgslsort.la ../linalg/libgsllinalg.la \ + ../blas/libgslblas.la ../cblas/libgslcblas.la \ + ../matrix/libgslmatrix.la ../vector/libgslvector.la \ + ../block/libgslblock.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false @@ -386,6 +390,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -408,7 +413,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -524,11 +532,11 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslrandist.la pkginclude_HEADERS = gsl_randist.h -INCLUDES = -I$(top_srcdir) -libgslrandist_la_SOURCES = bernoulli.c beta.c bigauss.c binomial.c cauchy.c chisq.c dirichlet.c discrete.c erlang.c exponential.c exppow.c fdist.c flat.c gamma.c gauss.c gausszig.c gausstail.c geometric.c gumbel.c hyperg.c laplace.c levy.c logarithmic.c logistic.c lognormal.c multinomial.c nbinomial.c pareto.c pascal.c poisson.c rayleigh.c shuffle.c sphere.c tdist.c weibull.c landau.c binomial_tpe.c +AM_CPPFLAGS = -I$(top_srcdir) +libgslrandist_la_SOURCES = bernoulli.c beta.c bigauss.c binomial.c cauchy.c chisq.c dirichlet.c discrete.c erlang.c exponential.c exppow.c fdist.c flat.c gamma.c gauss.c gausszig.c gausstail.c geometric.c gumbel.c hyperg.c laplace.c levy.c logarithmic.c logistic.c lognormal.c multinomial.c mvgauss.c nbinomial.c pareto.c pascal.c poisson.c rayleigh.c shuffle.c sphere.c tdist.c weibull.c landau.c binomial_tpe.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c -test_LDADD = libgslrandist.la ../rng/libgslrng.la ../specfunc/libgslspecfunc.la ../integration/libgslintegration.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la +test_LDADD = libgslrandist.la ../rng/libgslrng.la ../cdf/libgslcdf.la ../specfunc/libgslspecfunc.la ../integration/libgslintegration.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la ../statistics/libgslstatistics.la ../sort/libgslsort.la ../linalg/libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la all: all-am .SUFFIXES: @@ -625,6 +633,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logistic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lognormal.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multinomial.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mvgauss.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nbinomial.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pareto.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pascal.Plo@am__quote@ diff -Nru gsl-doc-1.16/randist/mvgauss.c gsl-doc-2.3/randist/mvgauss.c --- gsl-doc-1.16/randist/mvgauss.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/randist/mvgauss.c 2016-08-10 21:24:45.000000000 +0000 @@ -0,0 +1,242 @@ +/* randist/mvgauss.c + * + * Copyright (C) 2016 Timothée Flutre, Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static int multivar_vcov (const double data[], size_t d, size_t tda, size_t n, + double vcov[], size_t tda2); + +/* Generate a random vector from a multivariate Gaussian distribution using + * the Cholesky decomposition of the variance-covariance matrix, following + * "Computational Statistics" from Gentle (2009), section 7.4. + * + * mu mean vector (dimension d) + * L matrix resulting from the Cholesky decomposition of + * variance-covariance matrix Sigma = L L^T (dimension d x d) + * result output vector (dimension d) + */ +int +gsl_ran_multivariate_gaussian (const gsl_rng * r, + const gsl_vector * mu, + const gsl_matrix * L, + gsl_vector * result) +{ + const size_t M = L->size1; + const size_t N = L->size2; + + if (M != N) + { + GSL_ERROR("requires square matrix", GSL_ENOTSQR); + } + else if (mu->size != M) + { + GSL_ERROR("incompatible dimension of mean vector with variance-covariance matrix", GSL_EBADLEN); + } + else if (result->size != M) + { + GSL_ERROR("incompatible dimension of result vector", GSL_EBADLEN); + } + else + { + size_t i; + + for (i = 0; i < M; ++i) + gsl_vector_set(result, i, gsl_ran_ugaussian(r)); + + gsl_blas_dtrmv(CblasLower, CblasNoTrans, CblasNonUnit, L, result); + gsl_vector_add(result, mu); + + return GSL_SUCCESS; + } +} + +/* Compute the log of the probability density function at a given quantile + * vector for a multivariate Gaussian distribution using the Cholesky + * decomposition of the variance-covariance matrix. + * + * x vector of quantiles (dimension d) + * mu mean vector (dimension d) + * L matrix resulting from the Cholesky decomposition of + * variance-covariance matrix Sigma = L L^T (dimension d x d) + * result output of the density (dimension 1) + * work vector used for intermediate computations (dimension d) + */ +int +gsl_ran_multivariate_gaussian_log_pdf (const gsl_vector * x, + const gsl_vector * mu, + const gsl_matrix * L, + double * result, + gsl_vector * work) +{ + const size_t M = L->size1; + const size_t N = L->size2; + + if (M != N) + { + GSL_ERROR("requires square matrix", GSL_ENOTSQR); + } + else if (mu->size != M) + { + GSL_ERROR("incompatible dimension of mean vector with variance-covariance matrix", GSL_EBADLEN); + } + else if (x->size != M) + { + GSL_ERROR("incompatible dimension of quantile vector", GSL_EBADLEN); + } + else if (work->size != M) + { + GSL_ERROR("incompatible dimension of work vector", GSL_EBADLEN); + } + else + { + size_t i; + double quadForm; /* (x - mu)' Sigma^{-1} (x - mu) */ + double logSqrtDetSigma; /* log [ sqrt(|Sigma|) ] */ + + /* compute: work = x - mu */ + for (i = 0; i < M; ++i) + { + double xi = gsl_vector_get(x, i); + double mui = gsl_vector_get(mu, i); + gsl_vector_set(work, i, xi - mui); + } + + /* compute: work = L^{-1} * (x - mu) */ + gsl_blas_dtrsv(CblasLower, CblasNoTrans, CblasNonUnit, L, work); + + /* compute: quadForm = (x - mu)' Sigma^{-1} (x - mu) */ + gsl_blas_ddot(work, work, &quadForm); + + /* compute: log [ sqrt(|Sigma|) ] = sum_i log L_{ii} */ + logSqrtDetSigma = 0.0; + for (i = 0; i < M; ++i) + { + double Lii = gsl_matrix_get(L, i, i); + logSqrtDetSigma += log(Lii); + } + + *result = -0.5*quadForm - logSqrtDetSigma - 0.5*M*log(2.0*M_PI); + + return GSL_SUCCESS; + } +} + +int +gsl_ran_multivariate_gaussian_pdf (const gsl_vector * x, + const gsl_vector * mu, + const gsl_matrix * L, + double * result, + gsl_vector * work) +{ + double logpdf; + int status = gsl_ran_multivariate_gaussian_log_pdf(x, mu, L, &logpdf, work); + + if (status == GSL_SUCCESS) + *result = exp(logpdf); + + return status; +} + +/* Compute the maximum-likelihood estimate of the mean vector of samples + * from a multivariate Gaussian distribution. + * + * Example from R (GPL): http://www.r-project.org/ + * (samples <- matrix(c(4.348817, 2.995049, -3.793431, 4.711934, 1.190864, -1.357363), nrow=3, ncol=2)) + * colMeans(samples) # 1.183478 1.515145 + */ +int +gsl_ran_multivariate_gaussian_mean (const gsl_matrix * X, gsl_vector * mu_hat) +{ + const size_t M = X->size1; + const size_t N = X->size2; + + if (N != mu_hat->size) + { + GSL_ERROR("mu_hat vector has wrong size", GSL_EBADLEN); + } + else + { + size_t j; + + for (j = 0; j < N; ++j) + { + gsl_vector_const_view c = gsl_matrix_const_column(X, j); + double mean = gsl_stats_mean(c.vector.data, c.vector.stride, M); + gsl_vector_set(mu_hat, j, mean); + } + + return GSL_SUCCESS; + } +} + +/* Compute the maximum-likelihood estimate of the variance-covariance matrix + * of samples from a multivariate Gaussian distribution. + */ +int +gsl_ran_multivariate_gaussian_vcov (const gsl_matrix * X, gsl_matrix * sigma_hat) +{ + const size_t M = X->size1; + const size_t N = X->size2; + + if (sigma_hat->size1 != sigma_hat->size2) + { + GSL_ERROR("sigma_hat must be a square matrix", GSL_ENOTSQR); + } + else if (N != sigma_hat->size1) + { + GSL_ERROR("sigma_hat does not match X matrix dimensions", GSL_EBADLEN); + } + else + { + return multivar_vcov (X->data, N, X->tda, M, sigma_hat->data, sigma_hat->tda); + } +} + +/* Example from R (GPL): http://www.r-project.org/ + * (samples <- matrix(c(4.348817, 2.995049, -3.793431, 4.711934, 1.190864, -1.357363), nrow=3, ncol=2)) + * cov(samples) # 19.03539 11.91384 \n 11.91384 9.28796 + */ +static int +multivar_vcov (const double data[], size_t d, size_t tda, size_t n, + double vcov[], size_t tda2) +{ + size_t j1 = 0, j2 = 0; + + for (j1 = 0; j1 < d; ++j1) + { + vcov[j1 * tda2 + j1] = gsl_stats_variance(&(data[j1]), tda, n); + for (j2 = j1 + 1; j2 < d; ++j2) + { + vcov[j1 * tda2 + j2] = gsl_stats_covariance(&(data[j1]), tda, + &(data[j2]), tda, n); + vcov[j2 * tda2 + j1] = vcov[j1 * tda2 + j2]; + } + } + + return GSL_SUCCESS; +} diff -Nru gsl-doc-1.16/randist/test.c gsl-doc-2.3/randist/test.c --- gsl-doc-1.16/randist/test.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/randist/test.c 2016-09-15 20:16:11.000000000 +0000 @@ -27,6 +27,11 @@ #include #include #include +#include +#include +#include +#include +#include #define N 100000 @@ -158,6 +163,9 @@ double test_bivariate_gaussian3_pdf (double x); double test_bivariate_gaussian4 (void); double test_bivariate_gaussian4_pdf (double x); +void test_multivariate_gaussian_log_pdf (void); +void test_multivariate_gaussian_pdf (void); +void test_multivariate_gaussian (void); double test_gumbel1 (void); double test_gumbel1_pdf (double x); double test_gumbel2 (void); @@ -333,6 +341,10 @@ testPDF (FUNC2 (bivariate_gaussian3)); testPDF (FUNC2 (bivariate_gaussian4)); + test_multivariate_gaussian_log_pdf (); + test_multivariate_gaussian_pdf (); + test_multivariate_gaussian (); + testPDF (FUNC2 (gumbel1)); testPDF (FUNC2 (gumbel2)); testPDF (FUNC2 (landau)); @@ -1681,6 +1693,165 @@ return gsl_ran_gaussian_pdf (x, sigma); } +/* Examples from R (GPL): http://www.r-project.org/ + * library(mvtnorm); packageVersion("mvtnorm") # 1.0.5 + * mu <- c(1, 2) + * Sigma <- matrix(c(4,2, 2,3), ncol=2) + * x <- c(0, 0) + * sprintf("%.15f", dmvnorm(x=x, mean=mu, sigma=Sigma, log=TRUE)) # -3.565097837249263 + */ +void +test_multivariate_gaussian_log_pdf (void) +{ + size_t d = 2; + const double exp_res = -3.565097837249263; + double obs_res; + gsl_vector * mu = gsl_vector_calloc(d); + gsl_matrix * Sigma = gsl_matrix_calloc(d, d); + gsl_matrix * L = gsl_matrix_calloc(d, d); + gsl_vector * x = gsl_vector_calloc(d); + gsl_vector * work = gsl_vector_calloc(d); + + gsl_vector_set(mu, 0, 1); + gsl_vector_set(mu, 1, 2); + + gsl_matrix_set(Sigma, 0, 0, 4); + gsl_matrix_set(Sigma, 1, 1, 3); + gsl_matrix_set(Sigma, 0, 1, 2); + gsl_matrix_set(Sigma, 1, 0, 2); + + gsl_matrix_memcpy(L, Sigma); + gsl_linalg_cholesky_decomp1(L); + + gsl_ran_multivariate_gaussian_log_pdf(x, mu, L, &obs_res, work); + gsl_test_rel(obs_res, exp_res, 1.0e-10, "gsl_ran_multivariate_gaussian_log_pdf"); + + gsl_vector_free(mu); + gsl_matrix_free(Sigma); + gsl_matrix_free(L); + gsl_vector_free(x); + gsl_vector_free(work); +} + +/* Examples from R (GPL): http://www.r-project.org/ + * library(mvtnorm); packageVersion("mvtnorm") # 1.0.5 + * mu <- c(1, 2) + * Sigma <- matrix(c(4,2, 2,3), ncol=2) + * x <- c(0, 0) + * sprintf("%.15f", dmvnorm(x=x, mean=mu, sigma=Sigma, log=FALSE)) # 0.028294217120391 + */ +void +test_multivariate_gaussian_pdf (void) +{ + size_t d = 2; + const double exp_res = 0.028294217120391; + double obs_res = 0; + gsl_vector * mu = gsl_vector_calloc(d); + gsl_matrix * Sigma = gsl_matrix_calloc(d, d); + gsl_matrix * L = gsl_matrix_calloc(d, d); + gsl_vector * x = gsl_vector_calloc(d); + gsl_vector * work = gsl_vector_calloc(d); + + gsl_vector_set(mu, 0, 1); + gsl_vector_set(mu, 1, 2); + + gsl_matrix_set(Sigma, 0, 0, 4); + gsl_matrix_set(Sigma, 1, 1, 3); + gsl_matrix_set(Sigma, 0, 1, 2); + gsl_matrix_set(Sigma, 1, 0, 2); + + gsl_matrix_memcpy(L, Sigma); + gsl_linalg_cholesky_decomp1(L); + + gsl_ran_multivariate_gaussian_pdf(x, mu, L, &obs_res, work); + gsl_test_rel(obs_res, exp_res, 1.0e-10, "gsl_ran_multivariate_gaussian_pdf"); + + gsl_vector_free(mu); + gsl_matrix_free(Sigma); + gsl_matrix_free(L); + gsl_vector_free(x); + gsl_vector_free(work); +} + +/* Draw N random vectors according to a given MVN(mu,Sigma). Then, check that + * one can't reject the null hypothesis that the sample mean is equal to + * the true mean, using Hotelling's test statistic at 95% confidence level. + * Details in "Applied Multivariate Statistical Analysis" by Johnson & Wichern + * (2001), section 5, page 212. + */ +void +test_multivariate_gaussian (void) +{ + size_t d = 2, i = 0; + int status = 0; + double T2 = 0, threshold = 0, alpha = 0.05, pvalue = 0; + gsl_vector * mu = gsl_vector_calloc(d); + gsl_matrix * Sigma = gsl_matrix_calloc(d, d); + gsl_matrix * L = gsl_matrix_calloc(d, d); + gsl_vector * sample = gsl_vector_calloc(d); + gsl_matrix * samples = gsl_matrix_calloc(N, d); + gsl_vector * mu_hat = gsl_vector_calloc(d); + gsl_matrix * Sigma_hat = gsl_matrix_calloc(d, d); + gsl_vector * mu_hat_ctr = gsl_vector_calloc(d); + gsl_matrix * Sigma_hat_inv = gsl_matrix_calloc(d, d); + gsl_vector * tmp = gsl_vector_calloc(d); + + /* set the true values of parameters mu and Sigma */ + gsl_vector_set(mu, 0, 1); + gsl_vector_set(mu, 1, 2); + gsl_matrix_set(Sigma, 0, 0, 4); + gsl_matrix_set(Sigma, 1, 1, 3); + gsl_matrix_set(Sigma, 0, 1, 2); + gsl_matrix_set(Sigma, 1, 0, 2); + + /* draw N random vectors */ + gsl_matrix_memcpy(L, Sigma); + gsl_linalg_cholesky_decomp1(L); + for (i = 0; i < N; ++i) { + gsl_ran_multivariate_gaussian(r_global, mu, L, sample); + gsl_matrix_set_row(samples, i, sample); + } + + /* compute the maximum-likelihood estimates */ + gsl_ran_multivariate_gaussian_mean (samples, mu_hat); + gsl_ran_multivariate_gaussian_vcov (samples, Sigma_hat); + + /* compute Hotelling's test statistic: + T^2 = n (hat{mu} - mu)' hat{Sigma}^-1 (hat{mu} - mu) */ + gsl_vector_memcpy(mu_hat_ctr, mu_hat); + gsl_vector_sub(mu_hat_ctr, mu); + gsl_matrix_memcpy(Sigma_hat_inv, Sigma_hat); + gsl_linalg_cholesky_decomp1(Sigma_hat_inv); + gsl_linalg_cholesky_invert(Sigma_hat_inv); + gsl_blas_dgemv(CblasNoTrans, 1, Sigma_hat_inv, mu_hat_ctr, 0, tmp); + gsl_blas_ddot(mu_hat_ctr, tmp, &T2); + T2 *= N; + + /* test if the null hypothesis (hat{mu} = mu) can be rejected + at the alpha level*/ + threshold = (N-1) * d / (double)(N-d) * gsl_cdf_fdist_Pinv(1-alpha, d, N-d); + status = (T2 > threshold); + gsl_test(status, + "test gsl_ran_multivariate_gaussian: T2 %f < %f", + T2, threshold); + pvalue = gsl_cdf_fdist_Q(T2, d, N-d); + status = (pvalue < alpha); + gsl_test(status, + "test gsl_ran_multivariate_gaussian: p value %f > %f", + pvalue, alpha); + + gsl_vector_free(mu); + gsl_matrix_free(Sigma); + gsl_matrix_free(L); + gsl_vector_free(sample); + gsl_matrix_free(samples); + gsl_vector_free(mu_hat); + gsl_matrix_free(Sigma_hat); + gsl_vector_free(mu_hat_ctr); + gsl_matrix_free(Sigma_hat_inv); + gsl_vector_free(tmp); +} + double test_geometric (void) diff -Nru gsl-doc-1.16/rng/Makefile.am gsl-doc-2.3/rng/Makefile.am --- gsl-doc-1.16/rng/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/rng/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ pkginclude_HEADERS = gsl_rng.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslrng_la_SOURCES = borosh13.c cmrg.c coveyou.c default.c file.c fishman18.c fishman20.c fishman2x.c gfsr4.c knuthran2.c knuthran.c knuthran2002.c lecuyer21.c minstd.c mrg.c mt.c r250.c ran0.c ran1.c ran2.c ran3.c rand48.c rand.c random.c randu.c ranf.c ranlux.c ranlxd.c ranlxs.c ranmar.c rng.c slatec.c taus.c taus113.c transputer.c tt.c types.c uni32.c uni.c vax.c waterman14.c zuf.c inline.c diff -Nru gsl-doc-1.16/rng/Makefile.in gsl-doc-2.3/rng/Makefile.in --- gsl-doc-1.16/rng/Makefile.in 2013-07-19 15:14:54.000000000 +0000 +++ gsl-doc-2.3/rng/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -384,6 +384,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -406,7 +407,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -522,7 +526,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslrng.la pkginclude_HEADERS = gsl_rng.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslrng_la_SOURCES = borosh13.c cmrg.c coveyou.c default.c file.c fishman18.c fishman20.c fishman2x.c gfsr4.c knuthran2.c knuthran.c knuthran2002.c lecuyer21.c minstd.c mrg.c mt.c r250.c ran0.c ran1.c ran2.c ran3.c rand48.c rand.c random.c randu.c ranf.c ranlux.c ranlxd.c ranlxs.c ranmar.c rng.c slatec.c taus.c taus113.c transputer.c tt.c types.c uni32.c uni.c vax.c waterman14.c zuf.c inline.c CLEANFILES = test.dat noinst_HEADERS = schrage.c diff -Nru gsl-doc-1.16/roots/Makefile.am gsl-doc-2.3/roots/Makefile.am --- gsl-doc-1.16/roots/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/roots/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -6,7 +6,7 @@ noinst_HEADERS = roots.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslroots_la_SOURCES = bisection.c brent.c falsepos.c newton.c secant.c steffenson.c convergence.c fsolver.c fdfsolver.c diff -Nru gsl-doc-1.16/roots/Makefile.in gsl-doc-2.3/roots/Makefile.in --- gsl-doc-1.16/roots/Makefile.in 2013-07-19 15:14:54.000000000 +0000 +++ gsl-doc-2.3/roots/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -381,6 +381,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -403,7 +404,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -520,7 +524,7 @@ noinst_LTLIBRARIES = libgslroots.la pkginclude_HEADERS = gsl_roots.h noinst_HEADERS = roots.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslroots_la_SOURCES = bisection.c brent.c falsepos.c newton.c secant.c steffenson.c convergence.c fsolver.c fdfsolver.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_funcs.c test.h diff -Nru gsl-doc-1.16/roots/secant.c gsl-doc-2.3/roots/secant.c --- gsl-doc-1.16/roots/secant.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/roots/secant.c 2015-11-03 16:21:55.000000000 +0000 @@ -79,7 +79,12 @@ double x_new, f_new, df_new; - if (state->df == 0.0) + if(f == 0.0) + { + return GSL_SUCCESS; + } + + if(df == 0.0) { GSL_ERROR("derivative is zero", GSL_EZERODIV); } @@ -87,7 +92,7 @@ x_new = x - (f / df); f_new = GSL_FN_FDF_EVAL_F(fdf, x_new) ; - df_new = (f_new - f) / (x_new - x) ; + df_new = df * ((f - f_new) / f); *root = x_new ; diff -Nru gsl-doc-1.16/roots/test.c gsl-doc-2.3/roots/test.c --- gsl-doc-1.16/roots/test.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/roots/test.c 2015-11-03 16:21:55.000000000 +0000 @@ -43,10 +43,10 @@ main (void) { gsl_function F_sin, F_cos, F_func1, F_func2, F_func3, F_func4, - F_func5, F_func6; + F_func5, F_func6; gsl_function_fdf FDF_sin, FDF_cos, FDF_func1, FDF_func2, FDF_func3, FDF_func4, - FDF_func5, FDF_func6; + FDF_func5, FDF_func6, FDF_func7; const gsl_root_fsolver_type * fsolver[4] ; const gsl_root_fdfsolver_type * fdfsolver[4] ; @@ -83,6 +83,7 @@ FDF_func4 = create_fdf (func4, func4_df, func4_fdf) ; FDF_func5 = create_fdf (func5, func5_df, func5_fdf) ; FDF_func6 = create_fdf (func6, func6_df, func6_fdf) ; + FDF_func7 = create_fdf(func7, func7_df, func7_fdf) ; gsl_set_error_handler (&my_error_handler); @@ -118,7 +119,8 @@ test_fdf (*S,"x exp(-x) {-2}", &FDF_func4, -2.0, 0.0); test_fdf_e (*S,"max iterations x -> +Inf, x exp(-x) {2}", &FDF_func4, 2.0, 0.0); test_fdf_e (*S,"max iterations x -> -Inf, 1/(1 + exp(-x)) {0}", &FDF_func5, 0.0, 0.0); - } + test_fdf(*S, "-pi * x + e {1.5}", &FDF_func7, 1.5, M_E / M_PI); + } test_fdf (gsl_root_fdfsolver_steffenson, "(x - 1)^7 {0.9}", &FDF_func6, 0.9, 1.0); diff -Nru gsl-doc-1.16/roots/test_funcs.c gsl-doc-2.3/roots/test_funcs.c --- gsl-doc-1.16/roots/test_funcs.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/roots/test_funcs.c 2015-11-03 16:21:55.000000000 +0000 @@ -227,3 +227,22 @@ *y = cos (x); *yprime = -sin (x); } + +/* linear function to test that solvers exit correctly + when entered with an exact root */ + +double func7(double x, void * p) +{ + return -M_PI * x + M_E; +} + +double func7_df(double x, void * p) +{ + return -M_PI; +} + +void func7_fdf(double x, void * p, double *f, double *df) +{ + *f = func7(x, p); + *df = func7_df(x, p); +} diff -Nru gsl-doc-1.16/roots/test.h gsl-doc-2.3/roots/test.h --- gsl-doc-1.16/roots/test.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/roots/test.h 2015-11-03 16:21:55.000000000 +0000 @@ -127,3 +127,12 @@ void cos_fdf (double x, void * p, double *y, double *yprime); + +double +func7(double x, void * p); + +double +func7_df(double x, void * p); + +void +func7_fdf(double x, void * p, double *y, double *yprime); diff -Nru gsl-doc-1.16/rstat/gsl_rstat.h gsl-doc-2.3/rstat/gsl_rstat.h --- gsl-doc-1.16/rstat/gsl_rstat.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/rstat/gsl_rstat.h 2016-08-10 21:24:45.000000000 +0000 @@ -0,0 +1,81 @@ +/* rstat/gsl_rstat.h + * + * Copyright (C) 2015 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_RSTAT_H__ +#define __GSL_RSTAT_H__ + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +typedef struct +{ + double p; /* p-quantile */ + double q[5]; /* heights q_i */ + int npos[5]; /* positions n_i */ + double np[5]; /* desired positions n_i' */ + double dnp[5]; /* increments dn_i' */ + size_t n; /* number of data added */ +} gsl_rstat_quantile_workspace; + +gsl_rstat_quantile_workspace *gsl_rstat_quantile_alloc(const double p); +void gsl_rstat_quantile_free(gsl_rstat_quantile_workspace *w); +int gsl_rstat_quantile_reset(gsl_rstat_quantile_workspace *w); +int gsl_rstat_quantile_add(const double x, gsl_rstat_quantile_workspace *w); +double gsl_rstat_quantile_get(gsl_rstat_quantile_workspace *w); + +typedef struct +{ + double min; /* minimum value added */ + double max; /* maximum value added */ + double mean; /* current mean */ + double M2; /* M_k = sum_{i=1..n} [ x_i - mean_n ]^k */ + double M3; + double M4; + size_t n; /* number of data points added */ + gsl_rstat_quantile_workspace *median_workspace_p; /* median workspace */ +} gsl_rstat_workspace; + +gsl_rstat_workspace *gsl_rstat_alloc(void); +void gsl_rstat_free(gsl_rstat_workspace *w); +size_t gsl_rstat_n(gsl_rstat_workspace *w); +int gsl_rstat_add(const double x, gsl_rstat_workspace *w); +double gsl_rstat_min(gsl_rstat_workspace *w); +double gsl_rstat_max(gsl_rstat_workspace *w); +double gsl_rstat_mean(gsl_rstat_workspace *w); +double gsl_rstat_variance(gsl_rstat_workspace *w); +double gsl_rstat_sd(gsl_rstat_workspace *w); +double gsl_rstat_rms(gsl_rstat_workspace *w); +double gsl_rstat_sd_mean(gsl_rstat_workspace *w); +double gsl_rstat_median(gsl_rstat_workspace *w); +double gsl_rstat_skew(gsl_rstat_workspace *w); +double gsl_rstat_kurtosis(gsl_rstat_workspace *w); +int gsl_rstat_reset(gsl_rstat_workspace *w); + +__END_DECLS + +#endif /* __GSL_RSTAT_H__ */ diff -Nru gsl-doc-1.16/rstat/Makefile.am gsl-doc-2.3/rstat/Makefile.am --- gsl-doc-1.16/rstat/Makefile.am 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/rstat/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,15 @@ +noinst_LTLIBRARIES = libgslrstat.la + +pkginclude_HEADERS = gsl_rstat.h + +AM_CPPFLAGS = -I$(top_srcdir) + +libgslrstat_la_SOURCES = rstat.c rquantile.c + +check_PROGRAMS = test +TESTS = $(check_PROGRAMS) + +test_SOURCES = test.c +test_LDADD = libgslrstat.la ../statistics/libgslstatistics.la ../sort/libgslsort.la ../ieee-utils/libgslieeeutils.la ../randist/libgslrandist.la ../rng/libgslrng.la ../specfunc/libgslspecfunc.la ../complex/libgslcomplex.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la ../vector/libgslvector.la + + diff -Nru gsl-doc-1.16/rstat/Makefile.in gsl-doc-2.3/rstat/Makefile.in --- gsl-doc-1.16/rstat/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/rstat/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -0,0 +1,1028 @@ +# Makefile.in generated by automake 1.13.4 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +check_PROGRAMS = test$(EXEEXT) +subdir = rstat +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp \ + $(pkginclude_HEADERS) $(top_srcdir)/test-driver +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libgslrstat_la_LIBADD = +am_libgslrstat_la_OBJECTS = rstat.lo rquantile.lo +libgslrstat_la_OBJECTS = $(am_libgslrstat_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +am_test_OBJECTS = test.$(OBJEXT) +test_OBJECTS = $(am_test_OBJECTS) +test_DEPENDENCIES = libgslrstat.la ../statistics/libgslstatistics.la \ + ../sort/libgslsort.la ../ieee-utils/libgslieeeutils.la \ + ../randist/libgslrandist.la ../rng/libgslrng.la \ + ../specfunc/libgslspecfunc.la ../complex/libgslcomplex.la \ + ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ + ../utils/libutils.la ../vector/libgslvector.la +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libgslrstat_la_SOURCES) $(test_SOURCES) +DIST_SOURCES = $(libgslrstat_la_SOURCES) $(test_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(pkgincludedir)" +HEADERS = $(pkginclude_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +AM_RECURSIVE_TARGETS = check recheck +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ +GSL_LIBM = @GSL_LIBM@ +GSL_LIBS = @GSL_LIBS@ +GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ +GSL_LT_VERSION = @GSL_LT_VERSION@ +GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ +GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ +HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ +HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ +HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ +HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ +HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ +HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ +HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ +HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ +HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ +HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ +HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ +HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ +HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ +HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ +HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ +HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ +HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBM = @LIBM@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +noinst_LTLIBRARIES = libgslrstat.la +pkginclude_HEADERS = gsl_rstat.h +AM_CPPFLAGS = -I$(top_srcdir) +libgslrstat_la_SOURCES = rstat.c rquantile.c +TESTS = $(check_PROGRAMS) +test_SOURCES = test.c +test_LDADD = libgslrstat.la ../statistics/libgslstatistics.la ../sort/libgslsort.la ../ieee-utils/libgslieeeutils.la ../randist/libgslrandist.la ../rng/libgslrng.la ../specfunc/libgslspecfunc.la ../complex/libgslcomplex.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la ../vector/libgslvector.la +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu rstat/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu rstat/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libgslrstat.la: $(libgslrstat_la_OBJECTS) $(libgslrstat_la_DEPENDENCIES) $(EXTRA_libgslrstat_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(libgslrstat_la_OBJECTS) $(libgslrstat_la_LIBADD) $(LIBS) + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) + @rm -f test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rquantile.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rstat.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgincludeHEADERS: $(pkginclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ + done + +uninstall-pkgincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + else \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all $(check_PROGRAMS) + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +test.log: test$(EXEEXT) + @p='test$(EXEEXT)'; \ + b='test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(pkgincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ + clean-noinstLTLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pkgincludeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pkgincludeHEADERS + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ + clean-checkPROGRAMS clean-generic clean-libtool \ + clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgincludeHEADERS \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + recheck tags tags-am uninstall uninstall-am \ + uninstall-pkgincludeHEADERS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -Nru gsl-doc-1.16/rstat/rquantile.c gsl-doc-2.3/rstat/rquantile.c --- gsl-doc-1.16/rstat/rquantile.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/rstat/rquantile.c 2016-08-10 21:24:45.000000000 +0000 @@ -0,0 +1,207 @@ +/* rstat/rquantile.c + * + * Copyright (C) 2015 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include + +/* + * Running quantile calculation based on the paper + * + * [1] R. Jain and I. Chlamtac, "The P^2 algorithm for dynamic + * calculation of quantiles and histograms without storing + * observations", Communications of the ACM, October 1985 + */ + +static double calc_psq(const double qp1, const double q, const double qm1, + const double d, const double np1, const double n, const double nm1); + +gsl_rstat_quantile_workspace * +gsl_rstat_quantile_alloc(const double p) +{ + gsl_rstat_quantile_workspace *w; + + w = calloc(1, sizeof(gsl_rstat_quantile_workspace)); + if (w == 0) + { + GSL_ERROR_NULL ("failed to allocate space for workspace", GSL_ENOMEM); + } + + w->p = p; + + gsl_rstat_quantile_reset(w); + + return w; +} /* gsl_rstat_quantile_alloc() */ + +void +gsl_rstat_quantile_free(gsl_rstat_quantile_workspace *w) +{ + free(w); +} /* gsl_rstat_quantile_free() */ + +int +gsl_rstat_quantile_reset(gsl_rstat_quantile_workspace *w) +{ + const double p = w->p; + size_t i; + + /* initialize positions n */ + for (i = 0; i < 5; ++i) + w->npos[i] = i + 1; + + /* initialize n' */ + w->np[0] = 1.0; + w->np[1] = 1.0 + 2.0 * p; + w->np[2] = 1.0 + 4.0 * p; + w->np[3] = 3.0 + 2.0 * p; + w->np[4] = 5.0; + + /* initialize dn' */ + w->dnp[0] = 0.0; + w->dnp[1] = 0.5 * p; + w->dnp[2] = p; + w->dnp[3] = 0.5 * (1.0 + p); + w->dnp[4] = 1.0; + + w->n = 0; + + return GSL_SUCCESS; +} + +int +gsl_rstat_quantile_add(const double x, gsl_rstat_quantile_workspace *w) +{ + if (w->n < 5) + { + w->q[w->n] = x; + } + else + { + int i; + int k = -1; + + if (w->n == 5) + { + /* initialization: sort the first five heights */ + gsl_sort(w->q, 1, w->n); + } + + /* step B1: find k such that q_k <= x < q_{k+1} */ + if (x < w->q[0]) + { + w->q[0] = x; + k = 0; + } + else if (x >= w->q[4]) + { + w->q[4] = x; + k = 3; + } + else + { + for (i = 0; i <= 3; ++i) + { + if (w->q[i] <= x && x < w->q[i + 1]) + { + k = i; + break; + } + } + } + + if (k < 0) + { + /* we could get here if x is nan */ + GSL_ERROR ("invalid input argument x", GSL_EINVAL); + } + + /* step B2(a): update n_i */ + for (i = k + 1; i <= 4; ++i) + ++(w->npos[i]); + + /* step B2(b): update n_i' */ + for (i = 0; i < 5; ++i) + w->np[i] += w->dnp[i]; + + /* step B3: update heights */ + for (i = 1; i <= 3; ++i) + { + double ni = (double) w->npos[i]; + double d = w->np[i] - ni; + + if ((d >= 1.0 && (w->npos[i + 1] - w->npos[i] > 1)) || + (d <= -1.0 && (w->npos[i - 1] - w->npos[i] < -1))) + { + int dsign = (d > 0.0) ? 1 : -1; + double qp1 = w->q[i + 1]; + double qi = w->q[i]; + double qm1 = w->q[i - 1]; + double np1 = (double) w->npos[i + 1]; + double nm1 = (double) w->npos[i - 1]; + double qp = calc_psq(qp1, qi, qm1, (double) dsign, + np1, ni, nm1); + + if (qm1 < qp && qp < qp1) + w->q[i] = qp; + else + { + /* use linear formula */ + w->q[i] += dsign * (w->q[i + dsign] - qi) / ((double) w->npos[i + dsign] - ni); + } + + w->npos[i] += dsign; + } + } + } + + ++(w->n); + + return GSL_SUCCESS; +} /* gsl_rstat_quantile_add() */ + +double +gsl_rstat_quantile_get(gsl_rstat_quantile_workspace *w) +{ + if (w->n >= 5) + { + return w->q[2]; + } + else + { + /* not yet initialized */ + gsl_sort(w->q, 1, w->n); + return gsl_stats_quantile_from_sorted_data(w->q, 1, w->n, w->p); + } +} /* gsl_rstat_quantile_get() */ + +static double +calc_psq(const double qp1, const double q, const double qm1, + const double d, const double np1, const double n, const double nm1) +{ + double outer = d / (np1 - nm1); + double inner_left = (n - nm1 + d) * (qp1 - q) / (np1 - n); + double inner_right = (np1 - n - d) * (q - qm1) / (n - nm1); + + return q + outer * (inner_left + inner_right); +} /* calc_psq() */ diff -Nru gsl-doc-1.16/rstat/rstat.c gsl-doc-2.3/rstat/rstat.c --- gsl-doc-1.16/rstat/rstat.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/rstat/rstat.c 2016-10-03 09:08:46.000000000 +0000 @@ -0,0 +1,221 @@ +/* rstat/rstat.c + * + * Copyright (C) 2015 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include + +gsl_rstat_workspace * +gsl_rstat_alloc(void) +{ + gsl_rstat_workspace *w; + + w = calloc(1, sizeof(gsl_rstat_workspace)); + + if (w == 0) + { + GSL_ERROR_NULL ("failed to allocate space for workspace", GSL_ENOMEM); + } + + w->median_workspace_p = gsl_rstat_quantile_alloc(0.5); + + if (w->median_workspace_p == 0) + { + GSL_ERROR_NULL ("failed to allocate space for median workspace", + GSL_ENOMEM); + } + + gsl_rstat_reset(w); + + return w; +} /* gsl_rstat_alloc() */ + +void +gsl_rstat_free(gsl_rstat_workspace *w) +{ + if (w->median_workspace_p) + gsl_rstat_quantile_free(w->median_workspace_p); + + free(w); +} /* gsl_rstat_free() */ + +size_t +gsl_rstat_n(gsl_rstat_workspace *w) +{ + return w->n; +} /* gsl_rstat_n() */ + +/* add a data point to the running totals */ +int +gsl_rstat_add(const double x, gsl_rstat_workspace *w) +{ + double delta = x - w->mean; + double delta_n, delta_nsq, term1, n; + + /* update min and max */ + if (w->n == 0) + { + w->min = x; + w->max = x; + } + else + { + if (x < w->min) + w->min = x; + if (x > w->max) + w->max = x; + } + + /* update mean and variance */ + n = (double) ++(w->n); + delta_n = delta / n; + delta_nsq = delta_n * delta_n; + term1 = delta * delta_n * (n - 1.0); + w->mean += delta_n; + w->M4 += term1 * delta_nsq * (n * n - 3.0 * n + 3.0) + + 6.0 * delta_nsq * w->M2 - 4.0 * delta_n * w->M3; + w->M3 += term1 * delta_n * (n - 2.0) - 3.0 * delta_n * w->M2; + w->M2 += term1; + + /* update median */ + gsl_rstat_quantile_add(x, w->median_workspace_p); + + return GSL_SUCCESS; +} /* gsl_rstat_add() */ + +double +gsl_rstat_min(gsl_rstat_workspace *w) +{ + return w->min; +} /* gsl_rstat_min() */ + +double +gsl_rstat_max(gsl_rstat_workspace *w) +{ + return w->max; +} /* gsl_rstat_max() */ + +double +gsl_rstat_mean(gsl_rstat_workspace *w) +{ + return w->mean; +} /* gsl_rstat_mean() */ + +double +gsl_rstat_variance(gsl_rstat_workspace *w) +{ + if (w->n > 1) + { + double n = (double) w->n; + return (w->M2 / (n - 1.0)); + } + else + return 0.0; +} /* gsl_rstat_variance() */ + +double +gsl_rstat_sd(gsl_rstat_workspace *w) +{ + double var = gsl_rstat_variance(w); + + return (sqrt(var)); +} /* gsl_rstat_sd() */ + +double +gsl_rstat_rms(gsl_rstat_workspace *w) +{ + double rms = 0.0; + + if (w->n > 0) + { + double mean = gsl_rstat_mean(w); + double sigma = gsl_rstat_sd(w); + double n = (double) w->n; + double a = sqrt((n - 1.0) / n); + rms = gsl_hypot(mean, a * sigma); + } + + return rms; +} + +/* standard deviation of the mean: sigma / sqrt(n) */ +double +gsl_rstat_sd_mean(gsl_rstat_workspace *w) +{ + if (w->n > 0) + { + double sd = gsl_rstat_sd(w); + return (sd / sqrt((double) w->n)); + } + else + return 0.0; +} /* gsl_rstat_sd_mean() */ + +double +gsl_rstat_median(gsl_rstat_workspace *w) +{ + return gsl_rstat_quantile_get(w->median_workspace_p); +} + +double +gsl_rstat_skew(gsl_rstat_workspace *w) +{ + if (w->n > 0) + { + double n = (double) w->n; + double fac = pow(n - 1.0, 1.5) / n; + return ((fac * w->M3) / pow(w->M2, 1.5)); + } + else + return 0.0; +} /* gsl_rstat_skew() */ + +double +gsl_rstat_kurtosis(gsl_rstat_workspace *w) +{ + if (w->n > 0) + { + double n = (double) w->n; + double fac = ((n - 1.0) / n) * (n - 1.0); + return ((fac * w->M4) / (w->M2 * w->M2) - 3.0); + } + else + return 0.0; +} /* gsl_rstat_kurtosis() */ + +int +gsl_rstat_reset(gsl_rstat_workspace *w) +{ + int status; + + w->min = 0.0; + w->max = 0.0; + w->mean = 0.0; + w->M2 = 0.0; + w->M3 = 0.0; + w->M4 = 0.0; + w->n = 0; + + status = gsl_rstat_quantile_reset(w->median_workspace_p); + + return status; +} /* gsl_rstat_reset() */ diff -Nru gsl-doc-1.16/rstat/test.c gsl-doc-2.3/rstat/test.c --- gsl-doc-1.16/rstat/test.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/rstat/test.c 2016-10-03 09:08:46.000000000 +0000 @@ -0,0 +1,218 @@ +/* rstat/test.c + * + * Copyright (C) 2015 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +double * +random_data(const size_t n, gsl_rng *r) +{ + size_t i; + double *data = malloc(n * sizeof(double)); + + for (i = 0; i < n; ++i) + data[i] = gsl_rng_uniform(r); + + return data; +} + +void +test_basic(const size_t n, const double data[], const double tol) +{ + gsl_rstat_workspace *rstat_workspace_p = gsl_rstat_alloc(); + const double expected_mean = gsl_stats_mean(data, 1, n); + const double expected_var = gsl_stats_variance(data, 1, n); + const double expected_sd = gsl_stats_sd(data, 1, n); + const double expected_sd_mean = expected_sd / sqrt((double) n); + const double expected_skew = gsl_stats_skew(data, 1, n); + const double expected_kurtosis = gsl_stats_kurtosis(data, 1, n); + double expected_rms = 0.0; + double mean, var, sd, sd_mean, rms, skew, kurtosis; + size_t i, num; + int status; + + /* compute expected rms */ + for (i = 0; i < n; ++i) + expected_rms += data[i] * data[i]; + + expected_rms = sqrt(expected_rms / n); + + /* add data to rstat workspace */ + for (i = 0; i < n; ++i) + gsl_rstat_add(data[i], rstat_workspace_p); + + mean = gsl_rstat_mean(rstat_workspace_p); + var = gsl_rstat_variance(rstat_workspace_p); + sd = gsl_rstat_sd(rstat_workspace_p); + sd_mean = gsl_rstat_sd_mean(rstat_workspace_p); + rms = gsl_rstat_rms(rstat_workspace_p); + skew = gsl_rstat_skew(rstat_workspace_p); + kurtosis = gsl_rstat_kurtosis(rstat_workspace_p); + num = gsl_rstat_n(rstat_workspace_p); + + gsl_test_int(num, n, "n n=%zu" , n); + gsl_test_rel(mean, expected_mean, tol, "mean n=%zu", n); + gsl_test_rel(var, expected_var, tol, "variance n=%zu", n); + gsl_test_rel(sd, expected_sd, tol, "stddev n=%zu", n); + gsl_test_rel(sd_mean, expected_sd_mean, tol, "stddev_mean n=%zu", n); + gsl_test_rel(rms, expected_rms, tol, "rms n=%zu", n); + gsl_test_rel(skew, expected_skew, tol, "skew n=%zu", n); + gsl_test_rel(kurtosis, expected_kurtosis, tol, "kurtosis n=%zu", n); + + status = gsl_rstat_reset(rstat_workspace_p); + gsl_test_int(status, GSL_SUCCESS, "rstat returned success"); + num = gsl_rstat_n(rstat_workspace_p); + + gsl_test_int(num, 0, "n n=%zu" , n); + + gsl_rstat_free(rstat_workspace_p); +} + +void +test_quantile(const double p, const double data[], const size_t n, + const double expected, const double tol, const char *desc) +{ + gsl_rstat_quantile_workspace *w = gsl_rstat_quantile_alloc(p); + double result; + size_t i; + + for (i = 0; i < n; ++i) + gsl_rstat_quantile_add(data[i], w); + + result = gsl_rstat_quantile_get(w); + + if (fabs(expected) < 1.0e-4) + gsl_test_abs(result, expected, tol, "%s p=%g", desc, p); + else + gsl_test_rel(result, expected, tol, "%s p=%g", desc, p); + + gsl_rstat_quantile_free(w); +} + +int +main() +{ + gsl_rng *r = gsl_rng_alloc(gsl_rng_default); + const double tol1 = 1.0e-8; + const double tol2 = 1.0e-3; + + gsl_ieee_env_setup(); + + { + const size_t N = 2000000; + double *data = random_data(N, r); + double data2[] = { 4.0, 7.0, 13.0, 16.0 }; + size_t i; + + test_basic(2, data, tol1); + test_basic(100, data, tol1); + test_basic(1000, data, tol1); + test_basic(10000, data, tol1); + test_basic(50000, data, tol1); + test_basic(80000, data, tol1); + test_basic(1500000, data, tol1); + test_basic(2000000, data, tol1); + + for (i = 0; i < 4; ++i) + data2[i] += 1.0e9; + + test_basic(4, data2, tol1); + + free(data); + } + + { + /* dataset from Jain and Chlamtac paper */ + const size_t n_jain = 20; + const double data_jain[] = { 0.02, 0.15, 0.74, 3.39, 0.83, + 22.37, 10.15, 15.43, 38.62, 15.92, + 34.60, 10.28, 1.47, 0.40, 0.05, + 11.39, 0.27, 0.42, 0.09, 11.37 }; + double expected_jain = 4.44063435326; + + test_quantile(0.5, data_jain, n_jain, expected_jain, tol1, "jain"); + } + + { + size_t n = 1000000; + double *data = malloc(n * sizeof(double)); + double *sorted_data = malloc(n * sizeof(double)); + gsl_rstat_workspace *rstat_workspace_p = gsl_rstat_alloc(); + double p; + size_t i; + + for (i = 0; i < n; ++i) + { + data[i] = gsl_ran_gaussian_tail(r, 1.3, 1.0); + gsl_rstat_add(data[i], rstat_workspace_p); + } + + memcpy(sorted_data, data, n * sizeof(double)); + gsl_sort(sorted_data, 1, n); + + /* test quantile calculation */ + for (p = 0.1; p <= 0.9; p += 0.1) + { + double expected = gsl_stats_quantile_from_sorted_data(sorted_data, 1, n, p); + test_quantile(p, data, n, expected, tol2, "gauss"); + } + + /* test mean, variance */ + { + const double expected_mean = gsl_stats_mean(data, 1, n); + const double expected_var = gsl_stats_variance(data, 1, n); + const double expected_sd = gsl_stats_sd(data, 1, n); + const double expected_skew = gsl_stats_skew(data, 1, n); + const double expected_kurtosis = gsl_stats_kurtosis(data, 1, n); + const double expected_median = gsl_stats_quantile_from_sorted_data(sorted_data, 1, n, 0.5); + + const double mean = gsl_rstat_mean(rstat_workspace_p); + const double var = gsl_rstat_variance(rstat_workspace_p); + const double sd = gsl_rstat_sd(rstat_workspace_p); + const double skew = gsl_rstat_skew(rstat_workspace_p); + const double kurtosis = gsl_rstat_kurtosis(rstat_workspace_p); + const double median = gsl_rstat_median(rstat_workspace_p); + + gsl_test_rel(mean, expected_mean, tol1, "mean"); + gsl_test_rel(var, expected_var, tol1, "variance"); + gsl_test_rel(sd, expected_sd, tol1, "stddev"); + gsl_test_rel(skew, expected_skew, tol1, "skew"); + gsl_test_rel(kurtosis, expected_kurtosis, tol1, "kurtosis"); + gsl_test_abs(median, expected_median, tol2, "median"); + } + + free(data); + free(sorted_data); + gsl_rstat_free(rstat_workspace_p); + } + + gsl_rng_free(r); + + exit (gsl_test_summary()); +} diff -Nru gsl-doc-1.16/siman/Makefile.am gsl-doc-2.3/siman/Makefile.am --- gsl-doc-1.16/siman/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/siman/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -18,4 +18,4 @@ libgslsiman_la_SOURCES = siman.c pkginclude_HEADERS = gsl_siman.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) diff -Nru gsl-doc-1.16/siman/Makefile.in gsl-doc-2.3/siman/Makefile.in --- gsl-doc-1.16/siman/Makefile.in 2013-07-19 15:14:55.000000000 +0000 +++ gsl-doc-2.3/siman/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -386,6 +386,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -408,7 +409,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -532,7 +536,7 @@ CLEANFILES = siman_test.out libgslsiman_la_SOURCES = siman.c pkginclude_HEADERS = gsl_siman.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) all: all-am .SUFFIXES: diff -Nru gsl-doc-1.16/sort/Makefile.am gsl-doc-2.3/sort/Makefile.am --- gsl-doc-1.16/sort/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/sort/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ pkginclude_HEADERS = gsl_heapsort.h gsl_sort.h gsl_sort_char.h gsl_sort_double.h gsl_sort_float.h gsl_sort_int.h gsl_sort_long.h gsl_sort_long_double.h gsl_sort_short.h gsl_sort_uchar.h gsl_sort_uint.h gsl_sort_ulong.h gsl_sort_ushort.h gsl_sort_vector.h gsl_sort_vector_char.h gsl_sort_vector_double.h gsl_sort_vector_float.h gsl_sort_vector_int.h gsl_sort_vector_long.h gsl_sort_vector_long_double.h gsl_sort_vector_short.h gsl_sort_vector_uchar.h gsl_sort_vector_uint.h gsl_sort_vector_ulong.h gsl_sort_vector_ushort.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslsort_la_SOURCES = sort.c sortind.c sortvec.c sortvecind.c subset.c subsetind.c noinst_HEADERS = sortvec_source.c sortvecind_source.c subset_source.c subsetind_source.c test_source.c test_heapsort.c diff -Nru gsl-doc-1.16/sort/Makefile.in gsl-doc-2.3/sort/Makefile.in --- gsl-doc-1.16/sort/Makefile.in 2013-07-19 15:14:55.000000000 +0000 +++ gsl-doc-2.3/sort/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -379,6 +379,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -401,7 +402,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -517,7 +521,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslsort.la pkginclude_HEADERS = gsl_heapsort.h gsl_sort.h gsl_sort_char.h gsl_sort_double.h gsl_sort_float.h gsl_sort_int.h gsl_sort_long.h gsl_sort_long_double.h gsl_sort_short.h gsl_sort_uchar.h gsl_sort_uint.h gsl_sort_ulong.h gsl_sort_ushort.h gsl_sort_vector.h gsl_sort_vector_char.h gsl_sort_vector_double.h gsl_sort_vector_float.h gsl_sort_vector_int.h gsl_sort_vector_long.h gsl_sort_vector_long_double.h gsl_sort_vector_short.h gsl_sort_vector_uchar.h gsl_sort_vector_uint.h gsl_sort_vector_ulong.h gsl_sort_vector_ushort.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslsort_la_SOURCES = sort.c sortind.c sortvec.c sortvecind.c subset.c subsetind.c noinst_HEADERS = sortvec_source.c sortvecind_source.c subset_source.c subsetind_source.c test_source.c test_heapsort.c TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/spblas/gsl_spblas.h gsl-doc-2.3/spblas/gsl_spblas.h --- gsl-doc-1.16/spblas/gsl_spblas.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/spblas/gsl_spblas.h 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,58 @@ +/* gsl_spblas.h + * + * Copyright (C) 2012-2014 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_SPBLAS_H__ +#define __GSL_SPBLAS_H__ + +#include + +#include +#include +#include +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +/* + * Prototypes + */ + +int gsl_spblas_dgemv(const CBLAS_TRANSPOSE_t TransA, const double alpha, + const gsl_spmatrix *A, const gsl_vector *x, + const double beta, gsl_vector *y); +int gsl_spblas_dgemm(const double alpha, const gsl_spmatrix *A, + const gsl_spmatrix *B, gsl_spmatrix *C); +size_t gsl_spblas_scatter(const gsl_spmatrix *A, const size_t j, + const double alpha, size_t *w, double *x, + const size_t mark, gsl_spmatrix *C, size_t nz); + +__END_DECLS + +#endif /* __GSL_SPBLAS_H__ */ diff -Nru gsl-doc-1.16/spblas/Makefile.am gsl-doc-2.3/spblas/Makefile.am --- gsl-doc-1.16/spblas/Makefile.am 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/spblas/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,15 @@ +noinst_LTLIBRARIES = libgslspblas.la + +check_PROGRAMS = test + +pkginclude_HEADERS = gsl_spblas.h + +libgslspblas_la_SOURCES = spdgemm.c spdgemv.c + +AM_CPPFLAGS = -I$(top_srcdir) + +TESTS = $(check_PROGRAMS) + +test_LDADD = libgslspblas.la ../spmatrix/libgslspmatrix.la ../test/libgsltest.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../sys/libgslsys.la ../err/libgslerr.la ../utils/libutils.la ../rng/libgslrng.la + +test_SOURCES = test.c diff -Nru gsl-doc-1.16/spblas/Makefile.in gsl-doc-2.3/spblas/Makefile.in --- gsl-doc-1.16/spblas/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/spblas/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -0,0 +1,1028 @@ +# Makefile.in generated by automake 1.13.4 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +check_PROGRAMS = test$(EXEEXT) +subdir = spblas +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp \ + $(pkginclude_HEADERS) $(top_srcdir)/test-driver +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libgslspblas_la_LIBADD = +am_libgslspblas_la_OBJECTS = spdgemm.lo spdgemv.lo +libgslspblas_la_OBJECTS = $(am_libgslspblas_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +am_test_OBJECTS = test.$(OBJEXT) +test_OBJECTS = $(am_test_OBJECTS) +test_DEPENDENCIES = libgslspblas.la ../spmatrix/libgslspmatrix.la \ + ../test/libgsltest.la ../blas/libgslblas.la \ + ../cblas/libgslcblas.la ../matrix/libgslmatrix.la \ + ../vector/libgslvector.la ../block/libgslblock.la \ + ../sys/libgslsys.la ../err/libgslerr.la ../utils/libutils.la \ + ../rng/libgslrng.la +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libgslspblas_la_SOURCES) $(test_SOURCES) +DIST_SOURCES = $(libgslspblas_la_SOURCES) $(test_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(pkgincludedir)" +HEADERS = $(pkginclude_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +AM_RECURSIVE_TARGETS = check recheck +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ +GSL_LIBM = @GSL_LIBM@ +GSL_LIBS = @GSL_LIBS@ +GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ +GSL_LT_VERSION = @GSL_LT_VERSION@ +GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ +GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ +HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ +HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ +HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ +HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ +HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ +HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ +HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ +HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ +HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ +HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ +HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ +HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ +HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ +HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ +HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ +HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ +HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBM = @LIBM@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +noinst_LTLIBRARIES = libgslspblas.la +pkginclude_HEADERS = gsl_spblas.h +libgslspblas_la_SOURCES = spdgemm.c spdgemv.c +AM_CPPFLAGS = -I$(top_srcdir) +TESTS = $(check_PROGRAMS) +test_LDADD = libgslspblas.la ../spmatrix/libgslspmatrix.la ../test/libgsltest.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../sys/libgslsys.la ../err/libgslerr.la ../utils/libutils.la ../rng/libgslrng.la +test_SOURCES = test.c +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu spblas/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu spblas/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libgslspblas.la: $(libgslspblas_la_OBJECTS) $(libgslspblas_la_DEPENDENCIES) $(EXTRA_libgslspblas_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(libgslspblas_la_OBJECTS) $(libgslspblas_la_LIBADD) $(LIBS) + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) + @rm -f test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spdgemm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spdgemv.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgincludeHEADERS: $(pkginclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ + done + +uninstall-pkgincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + else \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all $(check_PROGRAMS) + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +test.log: test$(EXEEXT) + @p='test$(EXEEXT)'; \ + b='test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(pkgincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ + clean-noinstLTLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pkgincludeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pkgincludeHEADERS + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ + clean-checkPROGRAMS clean-generic clean-libtool \ + clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgincludeHEADERS \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + recheck tags tags-am uninstall uninstall-am \ + uninstall-pkgincludeHEADERS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -Nru gsl-doc-1.16/spblas/spdgemm.c gsl-doc-2.3/spblas/spdgemm.c --- gsl-doc-1.16/spblas/spdgemm.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/spblas/spdgemm.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,182 @@ +/* spdgemm.c + * + * Copyright (C) 2014 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include + +/* +gsl_spblas_dgemm() + Multiply two sparse matrices + +Inputs: alpha - scalar factor + A - sparse matrix + B - sparse matrix + C - (output) C = alpha * A * B + +Return: success or error + +Notes: +1) based on CSparse routine cs_multiply +*/ + +int +gsl_spblas_dgemm(const double alpha, const gsl_spmatrix *A, + const gsl_spmatrix *B, gsl_spmatrix *C) +{ + if (A->size2 != B->size1 || A->size1 != C->size1 || B->size2 != C->size2) + { + GSL_ERROR("matrix dimensions do not match", GSL_EBADLEN); + } + else if (A->sptype != B->sptype || A->sptype != C->sptype) + { + GSL_ERROR("matrix storage formats do not match", GSL_EINVAL); + } + else if (!GSL_SPMATRIX_ISCCS(A)) + { + GSL_ERROR("compressed column format required", GSL_EINVAL); + } + else + { + int status = GSL_SUCCESS; + const size_t M = A->size1; + const size_t N = B->size2; + size_t *Bi = B->i; + size_t *Bp = B->p; + double *Bd = B->data; + size_t *w = (size_t *) A->work; /* workspace of length M */ + double *x = (double *) C->work; /* workspace of length M */ + size_t *Cp, *Ci; + double *Cd; + size_t j, p; + size_t nz = 0; + + if (C->nzmax < A->nz + B->nz) + { + status = gsl_spmatrix_realloc(A->nz + B->nz, C); + if (status) + { + GSL_ERROR("unable to realloc matrix C", status); + } + } + + /* initialize workspace to 0 */ + for (j = 0; j < M; ++j) + w[j] = 0; + + Cp = C->p; + Ci = C->i; + Cd = C->data; + + for (j = 0; j < N; ++j) + { + if (nz + M > C->nzmax) + { + status = gsl_spmatrix_realloc(2 * C->nzmax + M, C); + if (status) + { + GSL_ERROR("unable to realloc matrix C", status); + } + + /* these pointers could have changed due to reallocation */ + Ci = C->i; + Cd = C->data; + } + + Cp[j] = nz; /* column j of C starts here */ + + for (p = Bp[j]; p < Bp[j + 1]; ++p) + { + nz = gsl_spblas_scatter(A, Bi[p], Bd[p], w, x, j + 1, C, nz); + } + + for (p = Cp[j]; p < nz; ++p) + Cd[p] = x[Ci[p]]; + } + + Cp[N] = nz; + C->nz = nz; + + /* scale by alpha */ + gsl_spmatrix_scale(C, alpha); + + return status; + } +} /* gsl_spblas_dgemm() */ + +/* +gsl_spblas_scatter() + + Keep a running total x -> x + alpha*A(:,j) for adding matrices together in CCS, +which will eventually be stored in C(:,j) + + When a new non-zero element with row index i is found, update C->i with +the row index. C->data is updated only by the calling function after all +matrices have been added via this function. + +Inputs: A - sparse matrix m-by-n + j - column index + alpha - scalar factor + w - keeps track which rows of column j have been added to C; + initialize to 0 prior to first call + x - column vector of length m + mark - + C - output matrix whose jth column will be added to A(:,j) + nz - (input/output) number of non-zeros in matrix C + +Notes: +1) This function is designed to be called successively when adding multiple +matrices together. Column j of C is stored contiguously as per CCS but not +necessarily in order - ie: the row indices C->i may not be in ascending order. + +2) based on CSparse routine cs_scatter +*/ + +size_t +gsl_spblas_scatter(const gsl_spmatrix *A, const size_t j, const double alpha, + size_t *w, double *x, const size_t mark, gsl_spmatrix *C, + size_t nz) +{ + size_t p; + size_t *Ai = A->i; + size_t *Ap = A->p; + double *Ad = A->data; + size_t *Ci = C->i; + + for (p = Ap[j]; p < Ap[j + 1]; ++p) + { + size_t i = Ai[p]; /* A(i,j) is nonzero */ + + if (w[i] < mark) /* check if row i has been stored in column j yet */ + { + w[i] = mark; /* i is new entry in column j */ + Ci[nz++] = i; /* add i to pattern of C(:,j) */ + x[i] = alpha * Ad[p]; /* x(i) = alpha * A(i,j) */ + } + else /* this (i,j) exists in C from a previous call */ + { + x[i] += alpha * Ad[p]; /* add alpha*A(i,j) to C(i,j) */ + } + } + + return (nz) ; +} /* gsl_spblas_scatter() */ diff -Nru gsl-doc-1.16/spblas/spdgemv.c gsl-doc-2.3/spblas/spdgemv.c --- gsl-doc-1.16/spblas/spdgemv.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/spblas/spdgemv.c 2016-07-02 23:02:41.000000000 +0000 @@ -0,0 +1,166 @@ +/* spdgemv.c + * + * Copyright (C) 2012-2014 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +/* +gsl_spblas_dgemv() + Multiply a sparse matrix and a vector + +Inputs: alpha - scalar factor + A - sparse matrix + x - dense vector + beta - scalar factor + y - (input/output) dense vector + +Return: y = alpha*op(A)*x + beta*y +*/ + +int +gsl_spblas_dgemv(const CBLAS_TRANSPOSE_t TransA, const double alpha, + const gsl_spmatrix *A, const gsl_vector *x, + const double beta, gsl_vector *y) +{ + const size_t M = A->size1; + const size_t N = A->size2; + + if ((TransA == CblasNoTrans && N != x->size) || + (TransA == CblasTrans && M != x->size)) + { + GSL_ERROR("invalid length of x vector", GSL_EBADLEN); + } + else if ((TransA == CblasNoTrans && M != y->size) || + (TransA == CblasTrans && N != y->size)) + { + GSL_ERROR("invalid length of y vector", GSL_EBADLEN); + } + else + { + size_t j, p; + size_t incX, incY; + size_t lenX, lenY; + double *X, *Y; + double *Ad; + size_t *Ap, *Ai, *Aj; + + if (TransA == CblasNoTrans) + { + lenX = N; + lenY = M; + } + else + { + lenX = M; + lenY = N; + } + + /* form y := beta*y */ + + Y = y->data; + incY = y->stride; + + if (beta == 0.0) + { + size_t jy = 0; + for (j = 0; j < lenY; ++j) + { + Y[jy] = 0.0; + jy += incY; + } + } + else if (beta != 1.0) + { + size_t jy = 0; + for (j = 0; j < lenY; ++j) + { + Y[jy] *= beta; + jy += incY; + } + } + + if (alpha == 0.0) + return GSL_SUCCESS; + + /* form y := alpha*op(A)*x + y */ + Ap = A->p; + Ad = A->data; + X = x->data; + incX = x->stride; + + if ((GSL_SPMATRIX_ISCCS(A) && (TransA == CblasNoTrans)) || + (GSL_SPMATRIX_ISCRS(A) && (TransA == CblasTrans))) + { + Ai = A->i; + + for (j = 0; j < lenX; ++j) + { + for (p = Ap[j]; p < Ap[j + 1]; ++p) + { + Y[Ai[p] * incY] += alpha * Ad[p] * X[j * incX]; + } + } + } + else if ((GSL_SPMATRIX_ISCCS(A) && (TransA == CblasTrans)) || + (GSL_SPMATRIX_ISCRS(A) && (TransA == CblasNoTrans))) + { + Ai = A->i; + + for (j = 0; j < lenY; ++j) + { + for (p = Ap[j]; p < Ap[j + 1]; ++p) + { + Y[j * incY] += alpha * Ad[p] * X[Ai[p] * incX]; + } + } + } + else if (GSL_SPMATRIX_ISTRIPLET(A)) + { + if (TransA == CblasNoTrans) + { + Ai = A->i; + Aj = A->p; + } + else + { + Ai = A->p; + Aj = A->i; + } + + for (p = 0; p < A->nz; ++p) + { + Y[Ai[p] * incY] += alpha * Ad[p] * X[Aj[p] * incX]; + } + } + else + { + GSL_ERROR("unsupported matrix type", GSL_EINVAL); + } + + return GSL_SUCCESS; + } +} /* gsl_spblas_dgemv() */ diff -Nru gsl-doc-1.16/spblas/test.c gsl-doc-2.3/spblas/test.c --- gsl-doc-1.16/spblas/test.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/spblas/test.c 2016-07-02 23:02:41.000000000 +0000 @@ -0,0 +1,262 @@ +/* test.c + * + * Copyright (C) 2012-2014 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* +create_random_sparse() + Create a random sparse matrix with approximately +M*N*density non-zero entries + +Inputs: M - number of rows + N - number of columns + density - sparse density \in [0,1] + 0 = no non-zero entries + 1 = all m*n entries are filled + r - random number generator + +Return: pointer to sparse matrix in triplet format (must be freed by caller) + +Notes: +1) non-zero matrix entries are uniformly distributed in [0,1] +*/ + +static gsl_spmatrix * +create_random_sparse(const size_t M, const size_t N, const double density, + const gsl_rng *r) +{ + size_t nnzwanted = (size_t) floor(M * N * GSL_MIN(density, 1.0)); + gsl_spmatrix *m = gsl_spmatrix_alloc_nzmax(M, N, + nnzwanted, + GSL_SPMATRIX_TRIPLET); + + while (gsl_spmatrix_nnz(m) < nnzwanted) + { + /* generate a random row and column */ + size_t i = gsl_rng_uniform(r) * M; + size_t j = gsl_rng_uniform(r) * N; + + /* generate random m_{ij} and add it */ + double x = gsl_rng_uniform(r); + gsl_spmatrix_set(m, i, j, x); + } + + return m; +} /* create_random_sparse() */ + +static void +create_random_vector(gsl_vector *v, const gsl_rng *r) +{ + size_t i; + + for (i = 0; i < v->size; ++i) + { + double x = gsl_rng_uniform(r); + gsl_vector_set(v, i, x); + } +} /* create_random_vector() */ + +static int +test_vectors(gsl_vector *observed, gsl_vector *expected, const double tol, + const char *str) +{ + int s = 0; + size_t N = observed->size; + size_t i; + + for (i = 0; i < N; ++i) + { + double x_obs = gsl_vector_get(observed, i); + double x_exp = gsl_vector_get(expected, i); + + gsl_test_rel(x_obs, x_exp, tol, "N=%zu i=%zu %s", N, i, str); + } + + return s; +} /* test_vectors() */ + +static void +test_dgemv(const size_t N, const size_t M, const double alpha, + const double beta, const CBLAS_TRANSPOSE_t TransA, + const gsl_rng *r) +{ + gsl_spmatrix *A = create_random_sparse(M, N, 0.2, r); + gsl_spmatrix *B, *C; + gsl_matrix *A_dense = gsl_matrix_alloc(M, N); + gsl_vector *x, *y, *y_gsl, *y_sp; + size_t lenX, lenY; + + if (TransA == CblasNoTrans) + { + lenX = N; + lenY = M; + } + else + { + lenX = M; + lenY = N; + } + + x = gsl_vector_alloc(lenX); + y = gsl_vector_alloc(lenY); + y_gsl = gsl_vector_alloc(lenY); + y_sp = gsl_vector_alloc(lenY); + + /* create random dense vectors */ + create_random_vector(x, r); + create_random_vector(y, r); + + /* copy A into A_dense */ + gsl_spmatrix_sp2d(A_dense, A); + + gsl_vector_memcpy(y_gsl, y); + gsl_vector_memcpy(y_sp, y); + + /* compute y = alpha*op(A)*x + beta*y0 with gsl */ + gsl_blas_dgemv(TransA, alpha, A_dense, x, beta, y_gsl); + + /* compute y = alpha*op(A)*x + beta*y0 with spblas/triplet */ + gsl_spblas_dgemv(TransA, alpha, A, x, beta, y_sp); + + /* test y_sp = y_gsl */ + test_vectors(y_sp, y_gsl, 1.0e-10, "test_dgemv: triplet format"); + + /* compute y = alpha*op(A)*x + beta*y0 with spblas/CCS */ + B = gsl_spmatrix_ccs(A); + gsl_vector_memcpy(y_sp, y); + gsl_spblas_dgemv(TransA, alpha, B, x, beta, y_sp); + + /* test y_sp = y_gsl */ + test_vectors(y_sp, y_gsl, 1.0e-10, "test_dgemv: CCS format"); + + /* compute y = alpha*op(A)*x + beta*y0 with spblas/CRS */ + C = gsl_spmatrix_crs(A); + gsl_vector_memcpy(y_sp, y); + gsl_spblas_dgemv(TransA, alpha, C, x, beta, y_sp); + + /* test y_sp = y_gsl */ + test_vectors(y_sp, y_gsl, 1.0e-10, "test_dgemv: CRS format"); + + gsl_spmatrix_free(A); + gsl_spmatrix_free(B); + gsl_spmatrix_free(C); + gsl_matrix_free(A_dense); + gsl_vector_free(x); + gsl_vector_free(y); + gsl_vector_free(y_gsl); + gsl_vector_free(y_sp); +} /* test_dgemv() */ + +static void +test_dgemm(const double alpha, const size_t M, const size_t N, + const gsl_rng *r) +{ + const size_t max = GSL_MAX(M, N); + size_t i, j, k; + gsl_matrix *A_dense = gsl_matrix_alloc(M, max); + gsl_matrix *B_dense = gsl_matrix_alloc(max, N); + gsl_matrix *C_dense = gsl_matrix_alloc(M, N); + gsl_spmatrix *C = gsl_spmatrix_alloc_nzmax(M, N, 1, GSL_SPMATRIX_CCS); + + for (k = 1; k <= max; ++k) + { + gsl_matrix_view Ad = gsl_matrix_submatrix(A_dense, 0, 0, M, k); + gsl_matrix_view Bd = gsl_matrix_submatrix(B_dense, 0, 0, k, N); + gsl_spmatrix *TA = create_random_sparse(M, k, 0.2, r); + gsl_spmatrix *TB = create_random_sparse(k, N, 0.2, r); + gsl_spmatrix *A = gsl_spmatrix_ccs(TA); + gsl_spmatrix *B = gsl_spmatrix_ccs(TB); + + gsl_spmatrix_set_zero(C); + gsl_spblas_dgemm(alpha, A, B, C); + + /* make dense matrices and use standard dgemm to multiply them */ + gsl_spmatrix_sp2d(&Ad.matrix, TA); + gsl_spmatrix_sp2d(&Bd.matrix, TB); + gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, alpha, &Ad.matrix, + &Bd.matrix, 0.0, C_dense); + + /* compare C and C_dense */ + for (i = 0; i < M; ++i) + { + for (j = 0; j < N; ++j) + { + double Cij = gsl_spmatrix_get(C, i, j); + double Dij = gsl_matrix_get(C_dense, i, j); + + gsl_test_rel(Cij, Dij, 1.0e-12, "test_dgemm: _dgemm"); + } + } + + gsl_spmatrix_free(TA); + gsl_spmatrix_free(TB); + gsl_spmatrix_free(A); + gsl_spmatrix_free(B); + } + + gsl_spmatrix_free(C); + gsl_matrix_free(A_dense); + gsl_matrix_free(B_dense); + gsl_matrix_free(C_dense); +} /* test_dgemm() */ + +int +main() +{ + const size_t N_max = 40; + size_t m, n; + gsl_rng *r = gsl_rng_alloc(gsl_rng_default); + + for (m = 1; m <= N_max; ++m) + { + for (n = 1; n <= N_max; ++n) + { + test_dgemv(m, n, 1.0, 0.0, CblasNoTrans, r); + test_dgemv(m, n, 1.0, 0.0, CblasTrans, r); + + test_dgemv(m, n, 2.4, -0.5, CblasNoTrans, r); + test_dgemv(m, n, 2.4, -0.5, CblasTrans, r); + + test_dgemv(m, n, 0.1, 10.0, CblasNoTrans, r); + test_dgemv(m, n, 0.1, 10.0, CblasTrans, r); + } + } + + test_dgemm(1.0, 10, 10, r); + test_dgemm(2.3, 20, 15, r); + test_dgemm(1.8, 12, 30, r); + test_dgemm(0.4, 45, 35, r); + + gsl_rng_free(r); + + exit (gsl_test_summary()); +} /* main() */ diff -Nru gsl-doc-1.16/specfunc/airy_der.c gsl-doc-2.3/specfunc/airy_der.c --- gsl-doc-1.16/specfunc/airy_der.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/airy_der.c 2016-08-25 17:13:24.000000000 +0000 @@ -592,7 +592,6 @@ gsl_sf_result result_p; double a, p; double sqx; - double x32; if(x <= -4.0) { double z = 128.0/(x*x*x) + 1.0; @@ -621,7 +620,6 @@ p = -0.625 + result_p.val; sqx = sqrt(-x); - x32 = x*sqx; ampl->val = sqrt(a * sqx); ampl->err = fabs(ampl->val) * (GSL_DBL_EPSILON + fabs(result_a.err/result_a.val)); diff -Nru gsl-doc-1.16/specfunc/airy_zero.c gsl-doc-2.3/specfunc/airy_zero.c --- gsl-doc-1.16/specfunc/airy_zero.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/airy_zero.c 2015-11-03 16:21:55.000000000 +0000 @@ -28,7 +28,7 @@ static const double zero_Ai[] = { 0, - -2.338107410459767039, + -2.3381074104597670385, -4.087949444130970617, -5.520559828095551059, -6.786708090071758999, diff -Nru gsl-doc-1.16/specfunc/bessel_j.c gsl-doc-2.3/specfunc/bessel_j.c --- gsl-doc-1.16/specfunc/bessel_j.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/bessel_j.c 2015-11-03 16:21:55.000000000 +0000 @@ -52,12 +52,9 @@ return GSL_SUCCESS; } else { - gsl_sf_result sin_result; - const int stat = gsl_sf_sin_e(x, &sin_result); - result->val = sin_result.val/x; - result->err = fabs(sin_result.err/x); - result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); - return stat; + result->val = sin(x) / x; + result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); + return GSL_SUCCESS; } } @@ -89,17 +86,12 @@ return GSL_SUCCESS; } else { - gsl_sf_result cos_result; - gsl_sf_result sin_result; - const int stat_cos = gsl_sf_cos_e(x, &cos_result); - const int stat_sin = gsl_sf_sin_e(x, &sin_result); - const double cos_x = cos_result.val; - const double sin_x = sin_result.val; + const double cos_x = cos(x); + const double sin_x = sin(x); result->val = (sin_x/x - cos_x)/x; - result->err = (fabs(sin_result.err/x) + fabs(cos_result.err))/fabs(x); - result->err += 2.0 * GSL_DBL_EPSILON * (fabs(sin_x/(x*x)) + fabs(cos_x/x)); + result->err = 2.0 * GSL_DBL_EPSILON * (fabs(sin_x/(x*x)) + fabs(cos_x/x)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); - return GSL_ERROR_SELECT_2(stat_cos, stat_sin); + return GSL_SUCCESS; } } @@ -211,8 +203,9 @@ double ratio; /* The CF1 call will hit 10000 iterations for x > 10000 + l */ int stat_CF1 = gsl_sf_bessel_J_CF1(l+0.5, x, &ratio, &sgn); - double jellp1 = GSL_SQRT_DBL_EPSILON * ratio; - double jell = GSL_SQRT_DBL_EPSILON; + const double BESSEL_J_SMALL = GSL_DBL_MIN / GSL_DBL_EPSILON; + double jellp1 = BESSEL_J_SMALL * ratio; + double jell = BESSEL_J_SMALL; double jellm1; int ell; for(ell = l; ell > 0; ell--) { @@ -224,7 +217,7 @@ if(fabs(jell) > fabs(jellp1)) { gsl_sf_result j0_result; int stat_j0 = gsl_sf_bessel_j0_e(x, &j0_result); - double pre = GSL_SQRT_DBL_EPSILON / jell; + double pre = BESSEL_J_SMALL / jell; result->val = j0_result.val * pre; result->err = j0_result.err * fabs(pre); result->err += 4.0 * GSL_DBL_EPSILON * (0.5*l + 1.0) * fabs(result->val); @@ -233,7 +226,7 @@ else { gsl_sf_result j1_result; int stat_j1 = gsl_sf_bessel_j1_e(x, &j1_result); - double pre = GSL_SQRT_DBL_EPSILON / jellp1; + double pre = BESSEL_J_SMALL / jellp1; result->val = j1_result.val * pre; result->err = j1_result.err * fabs(pre); result->err += 4.0 * GSL_DBL_EPSILON * (0.5*l + 1.0) * fabs(result->val); diff -Nru gsl-doc-1.16/specfunc/bessel_K0.c gsl-doc-2.3/specfunc/bessel_K0.c --- gsl-doc-1.16/specfunc/bessel_K0.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/bessel_K0.c 2016-07-02 23:02:41.000000000 +0000 @@ -1,6 +1,7 @@ /* specfunc/bessel_K0.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman + * Copyright (C) 2016 Pavel Holoborodko, Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,6 +23,7 @@ #include #include #include +#include #include #include @@ -32,91 +34,90 @@ /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ -/* based on SLATEC bk0(), bk0e() */ - -/* chebyshev expansions - - series for bk0 on the interval 0. to 4.00000d+00 - with weighted error 3.57e-19 - log weighted error 18.45 - significant figures required 17.99 - decimal places required 18.97 - - series for ak0 on the interval 1.25000d-01 to 5.00000d-01 - with weighted error 5.34e-17 - log weighted error 16.27 - significant figures required 14.92 - decimal places required 16.89 - - series for ak02 on the interval 0. to 1.25000d-01 - with weighted error 2.34e-17 - log weighted error 16.63 - significant figures required 14.67 - decimal places required 17.20 +/* + Minimax rational approximation for [0,1), peak relative error = 2.04*GSL_DBL_EPSILON. + Source: http://www.advanpix.com/?p=3812 */ - -static double bk0_data[11] = { - -0.03532739323390276872, - 0.3442898999246284869, - 0.03597993651536150163, - 0.00126461541144692592, - 0.00002286212103119451, - 0.00000025347910790261, - 0.00000000190451637722, - 0.00000000001034969525, - 0.00000000000004259816, - 0.00000000000000013744, - 0.00000000000000000035 -}; -static cheb_series bk0_cs = { - bk0_data, - 10, - -1, 1, - 10 +static double k0_poly[8] = { + 1.1593151565841244842077226e-01, + 2.7898287891460317300886539e-01, + 2.5248929932161220559969776e-02, + 8.4603509072136578707676406e-04, + 1.4914719243067801775856150e-05, + 1.6271068931224552553548933e-07, + 1.2082660336282566759313543e-09, + 6.6117104672254184399933971e-12 +}; + +static double i0_poly[7] = { + 1.0000000000000000044974165e+00, + 2.4999999999999822316775454e-01, + 2.7777777777892149148858521e-02, + 1.7361111083544590676709592e-03, + 6.9444476047072424198677755e-05, + 1.9288265756466775034067979e-06, + 3.9908220583262192851839992e-08 +}; + +/* + Chebyshev expansion for [1,8], peak relative error = 1.28*GSL_DBL_EPSILON. + Source: Pavel Holoborodko. +*/ +static double ak0_data[24] = { + -3.28737867094650101e-02, + -4.49369057710236880e-02, + +2.98149992004308095e-03, + -3.03693649396187920e-04, + +3.91085569307646836e-05, + -5.86872422399215952e-06, + +9.82873709937322009e-07, + -1.78978645055651171e-07, + +3.48332306845240957e-08, + -7.15909210462546599e-09, + +1.54019930048919494e-09, + -3.44555485579194210e-10, + +7.97356101783753023e-11, + -1.90090968913069735e-11, + +4.65295609304114621e-12, + -1.16614287433470780e-12, + +2.98554375218596891e-13, + -7.79276979512292169e-14, + +2.07027467168948402e-14, + -5.58987860393825313e-15, + +1.53202965950646914e-15, + -4.25737536712188186e-16, + +1.19840238501357389e-16, + -3.41407346762502397e-17 }; -static double ak0_data[17] = { - -0.07643947903327941, - -0.02235652605699819, - 0.00077341811546938, - -0.00004281006688886, - 0.00000308170017386, - -0.00000026393672220, - 0.00000002563713036, - -0.00000000274270554, - 0.00000000031694296, - -0.00000000003902353, - 0.00000000000506804, - -0.00000000000068895, - 0.00000000000009744, - -0.00000000000001427, - 0.00000000000000215, - -0.00000000000000033, - 0.00000000000000005 -}; static cheb_series ak0_cs = { ak0_data, - 16, + 23, -1, 1, 10 }; +/* + Chebyshev expansion for [8,inf), peak relative error = 1.25*GSL_DBL_EPSILON. + Source: SLATEC/dbsk0e.f +*/ static double ak02_data[14] = { - -0.01201869826307592, - -0.00917485269102569, - 0.00014445509317750, - -0.00000401361417543, - 0.00000015678318108, - -0.00000000777011043, - 0.00000000046111825, - -0.00000000003158592, - 0.00000000000243501, - -0.00000000000020743, - 0.00000000000001925, - -0.00000000000000192, - 0.00000000000000020, - -0.00000000000000002 + -.1201869826307592240E-1, + -.9174852691025695311E-2, + +.1444550931775005821E-3, + -.4013614175435709729E-5, + +.1567831810852310673E-6, + -.7770110438521737710E-8, + +.4611182576179717883E-9, + -.3158592997860565771E-10, + +.2435018039365041128E-11, + -.2074331387398347898E-12, + +.1925787280589917085E-13, + -.1927554805838956104E-14, + +.2062198029197818278E-15, + -.2341685117579242403E-16 }; + static cheb_series ak02_cs = { ak02_data, 13, @@ -134,24 +135,20 @@ if(x <= 0.0) { DOMAIN_ERROR(result); } - else if(x <= 2.0) { + else if(x < 1.0) { const double lx = log(x); const double ex = exp(x); - int stat_I0; - gsl_sf_result I0; - gsl_sf_result c; - cheb_eval_e(&bk0_cs, 0.5*x*x-1.0, &c); - stat_I0 = gsl_sf_bessel_I0_e(x, &I0); - result->val = ex * ((-lx+M_LN2)*I0.val - 0.25 + c.val); - result->err = ex * ((M_LN2+fabs(lx))*I0.err + c.err); + const double x2 = x*x; + result->val = ex * (gsl_poly_eval(k0_poly,8,x2)-lx*(1.0+0.25*x2*gsl_poly_eval(i0_poly,7,0.25*x2))); + result->err = ex * (1.6+fabs(lx)*0.6) * GSL_DBL_EPSILON; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); - return stat_I0; + return GSL_SUCCESS; } else if(x <= 8.0) { const double sx = sqrt(x); gsl_sf_result c; - cheb_eval_e(&ak0_cs, (16.0/x-5.0)/3.0, &c); - result->val = (1.25 + c.val) / sx; + cheb_eval_e(&ak0_cs, (16.0/x-9.0)/7.0, &c); + result->val = (1.203125 + c.val) / sx; /* 1.203125 = 77/64 */ result->err = c.err / sx; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; @@ -175,17 +172,13 @@ if(x <= 0.0) { DOMAIN_ERROR(result); } - else if(x <= 2.0) { + else if(x < 1.0) { const double lx = log(x); - int stat_I0; - gsl_sf_result I0; - gsl_sf_result c; - cheb_eval_e(&bk0_cs, 0.5*x*x-1.0, &c); - stat_I0 = gsl_sf_bessel_I0_e(x, &I0); - result->val = (-lx+M_LN2)*I0.val - 0.25 + c.val; - result->err = (fabs(lx) + M_LN2) * I0.err + c.err; + const double x2 = x*x; + result->val = gsl_poly_eval(k0_poly,8,x2)-lx*(1.0+0.25*x2*gsl_poly_eval(i0_poly,7,0.25*x2)); + result->err = (1.6+fabs(lx)*0.6) * GSL_DBL_EPSILON; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); - return stat_I0; + return GSL_SUCCESS; } else { gsl_sf_result K0_scaled; diff -Nru gsl-doc-1.16/specfunc/bessel_K1.c gsl-doc-2.3/specfunc/bessel_K1.c --- gsl-doc-1.16/specfunc/bessel_K1.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/bessel_K1.c 2016-07-02 23:02:41.000000000 +0000 @@ -1,6 +1,7 @@ /* specfunc/bessel_K1.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman + * Copyright (C) 2016 Pavel Holoborodko, Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,6 +23,7 @@ #include #include #include +#include #include #include @@ -32,92 +34,91 @@ /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ -/* based on SLATEC besk1(), besk1e() */ - -/* chebyshev expansions - - series for bk1 on the interval 0. to 4.00000d+00 - with weighted error 7.02e-18 - log weighted error 17.15 - significant figures required 16.73 - decimal places required 17.67 - - series for ak1 on the interval 1.25000d-01 to 5.00000d-01 - with weighted error 6.06e-17 - log weighted error 16.22 - significant figures required 15.41 - decimal places required 16.83 - - series for ak12 on the interval 0. to 1.25000d-01 - with weighted error 2.58e-17 - log weighted error 16.59 - significant figures required 15.22 - decimal places required 17.16 +/* + Minimax rational approximation for [0,1), peak relative error = 1.83*GSL_DBL_EPSILON. + Source: http://www.advanpix.com/?p=3987 */ - -static double bk1_data[11] = { - 0.0253002273389477705, - -0.3531559607765448760, - -0.1226111808226571480, - -0.0069757238596398643, - -0.0001730288957513052, - -0.0000024334061415659, - -0.0000000221338763073, - -0.0000000001411488392, - -0.0000000000006666901, - -0.0000000000000024274, - -0.0000000000000000070 -}; - -static cheb_series bk1_cs = { - bk1_data, - 10, - -1, 1, - 8 +static double k1_poly[9] = { + -3.0796575782920622440538935e-01, + -8.5370719728650778045782736e-02, + -4.6421827664715603298154971e-03, + -1.1253607036630425931072996e-04, + -1.5592887702110907110292728e-06, + -1.4030163679125934402498239e-08, + -8.8718998640336832196558868e-11, + -4.1614323580221539328960335e-13, + -1.5261293392975541707230366e-15 +}; + +static double i1_poly[7] = { + 8.3333333333333325191635191e-02, + 6.9444444444467956461838830e-03, + 3.4722222211230452695165215e-04, + 1.1574075952009842696580084e-05, + 2.7555870002088181016676934e-07, + 4.9724386164128529514040614e-09 +}; + +/* + Chebyshev expansion for [1,8], peak relative error = 1.28*GSL_DBL_EPSILON. + Source: Pavel Holoborodko. +*/ +static double ak1_data[25] = { + +2.07996868001418246e-01, + +1.62581565017881476e-01, + -5.87070423518863640e-03, + +4.95021520115789501e-04, + -5.78958347598556986e-05, + +8.18614610209334726e-06, + -1.31604832009487277e-06, + +2.32546031520101213e-07, + -4.42206518311557987e-08, + +8.92163994883100361e-09, + -1.89046270526983427e-09, + +4.17568808108504702e-10, + -9.55912361791375794e-11, + +2.25769353153867758e-11, + -5.48128000211158482e-12, + +1.36386122546441926e-12, + -3.46936690565986409e-13, + +9.00354564415705942e-14, + -2.37950577776254432e-14, + +6.39447503964025336e-15, + -1.74498363492322044e-15, + +4.82994547989290473e-16, + -1.35460927805445606e-16, + +3.84604274446777234e-17, + -1.10456856122581316e-17 }; -static double ak1_data[17] = { - 0.27443134069738830, - 0.07571989953199368, - -0.00144105155647540, - 0.00006650116955125, - -0.00000436998470952, - 0.00000035402774997, - -0.00000003311163779, - 0.00000000344597758, - -0.00000000038989323, - 0.00000000004720819, - -0.00000000000604783, - 0.00000000000081284, - -0.00000000000011386, - 0.00000000000001654, - -0.00000000000000248, - 0.00000000000000038, - -0.00000000000000006 -}; static cheb_series ak1_cs = { ak1_data, - 16, + 24, -1, 1, 9 }; +/* + Chebyshev expansion for [8,inf), peak relative error = 1.25*GSL_DBL_EPSILON. + Source: SLATEC/dbsk1e.f +*/ static double ak12_data[14] = { - 0.06379308343739001, - 0.02832887813049721, - -0.00024753706739052, - 0.00000577197245160, - -0.00000020689392195, - 0.00000000973998344, - -0.00000000055853361, - 0.00000000003732996, - -0.00000000000282505, - 0.00000000000023720, - -0.00000000000002176, - 0.00000000000000215, - -0.00000000000000022, - 0.00000000000000002 + +.637930834373900104E-1, + +.283288781304972094E-1, + -.247537067390525035E-3, + +.577197245160724882E-5, + -.206893921953654830E-6, + +.973998344138180418E-8, + -.558533614038062498E-9, + +.373299663404618524E-10, + -.282505196102322545E-11, + +.237201900248414417E-12, + -.217667738799175398E-13, + +.215791416161603245E-14, + -.229019693071826928E-15, + +.258288572982327496E-16 }; + static cheb_series ak12_cs = { ak12_data, 13, @@ -138,24 +139,22 @@ else if(x < 2.0*GSL_DBL_MIN) { OVERFLOW_ERROR(result); } - else if(x <= 2.0) { + else if(x < 1.0) { const double lx = log(x); const double ex = exp(x); - int stat_I1; - gsl_sf_result I1; - gsl_sf_result c; - cheb_eval_e(&bk1_cs, 0.5*x*x-1.0, &c); - stat_I1 = gsl_sf_bessel_I1_e(x, &I1); - result->val = ex * ((lx-M_LN2)*I1.val + (0.75 + c.val)/x); - result->err = ex * (c.err/x + fabs(lx)*I1.err); + const double x2 = x*x; + const double t = 0.25*x2; + const double i1 = 0.5 * x * (1.0 + t * (0.5 + t * gsl_poly_eval(i1_poly,6,t))); + result->val = ex * (x2 * gsl_poly_eval(k1_poly,9,x2) + x * lx * i1 + 1) / x; + result->err = ex * (1.6+fabs(lx)*0.6) * GSL_DBL_EPSILON; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); - return stat_I1; + return GSL_SUCCESS; } else if(x <= 8.0) { const double sx = sqrt(x); gsl_sf_result c; - cheb_eval_e(&ak1_cs, (16.0/x-5.0)/3.0, &c); - result->val = (1.25 + c.val) / sx; + cheb_eval_e(&ak1_cs, (16.0/x-9.0)/7.0, &c); + result->val = (1.375 + c.val) / sx; /* 1.375 = 11/8 */ result->err = c.err / sx; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; @@ -182,17 +181,15 @@ else if(x < 2.0*GSL_DBL_MIN) { OVERFLOW_ERROR(result); } - else if(x <= 2.0) { + else if(x < 1.0) { const double lx = log(x); - int stat_I1; - gsl_sf_result I1; - gsl_sf_result c; - cheb_eval_e(&bk1_cs, 0.5*x*x-1.0, &c); - stat_I1 = gsl_sf_bessel_I1_e(x, &I1); - result->val = (lx-M_LN2)*I1.val + (0.75 + c.val)/x; - result->err = c.err/x + fabs(lx)*I1.err; + const double x2 = x*x; + const double t = 0.25*x2; + const double i1 = 0.5 * x * (1.0 + t * (0.5 + t * gsl_poly_eval(i1_poly,6,t))); + result->val = (x2 * gsl_poly_eval(k1_poly,9,x2) + x * lx * i1 + 1) / x; + result->err = (1.6+fabs(lx)*0.6) * GSL_DBL_EPSILON; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); - return stat_I1; + return GSL_SUCCESS; } else { gsl_sf_result K1_scaled; diff -Nru gsl-doc-1.16/specfunc/ellint.c gsl-doc-2.3/specfunc/ellint.c --- gsl-doc-1.16/specfunc/ellint.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/ellint.c 2015-11-03 16:21:55.000000000 +0000 @@ -449,7 +449,7 @@ /* [Carlson, Numer. Math. 33 (1979) 1, (4.4)] */ int -gsl_sf_ellint_D_e(double phi, double k, double n, gsl_mode_t mode, gsl_sf_result * result) +gsl_sf_ellint_D_e(double phi, double k, gsl_mode_t mode, gsl_sf_result * result) { /* Angular reduction to -pi/2 < phi < pi/2 (we should really use an exact reduction but this will have to do for now) BJG */ @@ -625,9 +625,9 @@ EVAL_RESULT(gsl_sf_ellint_P_e(phi, k, n, mode, &result)); } -double gsl_sf_ellint_D(double phi, double k, double n, gsl_mode_t mode) +double gsl_sf_ellint_D(double phi, double k, gsl_mode_t mode) { - EVAL_RESULT(gsl_sf_ellint_D_e(phi, k, n, mode, &result)); + EVAL_RESULT(gsl_sf_ellint_D_e(phi, k, mode, &result)); } double gsl_sf_ellint_RC(double x, double y, gsl_mode_t mode) diff -Nru gsl-doc-1.16/specfunc/expint.c gsl-doc-2.3/specfunc/expint.c --- gsl-doc-1.16/specfunc/expint.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/expint.c 2015-11-03 16:21:55.000000000 +0000 @@ -377,7 +377,7 @@ OVERFLOW_ERROR(result); } else if (x == 0.0) { - result->val = (scale ? 1.0 : 1.0); + result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else if(x < 100.0) { diff -Nru gsl-doc-1.16/specfunc/gegenbauer.c gsl-doc-2.3/specfunc/gegenbauer.c --- gsl-doc-1.16/specfunc/gegenbauer.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/gegenbauer.c 2015-11-03 16:21:55.000000000 +0000 @@ -107,7 +107,7 @@ return gsl_sf_gegenpoly_3_e(lambda, x, result); } else { - if(lambda == 0.0 && (x >= -1.0 || x <= 1.0)) { + if(lambda == 0.0 && (x >= -1.0 && x <= 1.0)) { /* 2 T_n(x)/n */ const double z = n * acos(x); result->val = 2.0 * cos(z) / n; diff -Nru gsl-doc-1.16/specfunc/gsl_sf_ellint.h gsl-doc-2.3/specfunc/gsl_sf_ellint.h --- gsl-doc-1.16/specfunc/gsl_sf_ellint.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/gsl_sf_ellint.h 2015-11-03 16:21:55.000000000 +0000 @@ -81,8 +81,8 @@ int gsl_sf_ellint_P_e(double phi, double k, double n, gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_ellint_P(double phi, double k, double n, gsl_mode_t mode); -int gsl_sf_ellint_D_e(double phi, double k, double n, gsl_mode_t mode, gsl_sf_result * result); -double gsl_sf_ellint_D(double phi, double k, double n, gsl_mode_t mode); +int gsl_sf_ellint_D_e(double phi, double k, gsl_mode_t mode, gsl_sf_result * result); +double gsl_sf_ellint_D(double phi, double k, gsl_mode_t mode); /* Carlson's symmetric basis of functions diff -Nru gsl-doc-1.16/specfunc/gsl_sf_legendre.h gsl-doc-2.3/specfunc/gsl_sf_legendre.h --- gsl-doc-1.16/specfunc/gsl_sf_legendre.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/gsl_sf_legendre.h 2015-11-03 16:21:55.000000000 +0000 @@ -309,6 +309,66 @@ */ int gsl_sf_legendre_H3d_array(const int lmax, const double lambda, const double eta, double * result_array); +/* associated legendre P_{lm} routines */ + +typedef enum +{ + GSL_SF_LEGENDRE_SCHMIDT, + GSL_SF_LEGENDRE_SPHARM, + GSL_SF_LEGENDRE_FULL, + GSL_SF_LEGENDRE_NONE +} gsl_sf_legendre_t; + +int gsl_sf_legendre_array(const gsl_sf_legendre_t norm, + const size_t lmax, const double x, + double result_array[]); +int gsl_sf_legendre_array_e(const gsl_sf_legendre_t norm, + const size_t lmax, const double x, + const double csphase, + double result_array[]); +int gsl_sf_legendre_deriv_array(const gsl_sf_legendre_t norm, + const size_t lmax, const double x, + double result_array[], + double result_deriv_array[]); +int gsl_sf_legendre_deriv_array_e(const gsl_sf_legendre_t norm, + const size_t lmax, const double x, + const double csphase, + double result_array[], + double result_deriv_array[]); +int gsl_sf_legendre_deriv_alt_array(const gsl_sf_legendre_t norm, + const size_t lmax, const double x, + double result_array[], + double result_deriv_array[]); +int gsl_sf_legendre_deriv_alt_array_e(const gsl_sf_legendre_t norm, + const size_t lmax, const double x, + const double csphase, + double result_array[], + double result_deriv_array[]); +int gsl_sf_legendre_deriv2_array(const gsl_sf_legendre_t norm, + const size_t lmax, const double x, + double result_array[], + double result_deriv_array[], + double result_deriv2_array[]); +int gsl_sf_legendre_deriv2_array_e(const gsl_sf_legendre_t norm, + const size_t lmax, const double x, + const double csphase, + double result_array[], + double result_deriv_array[], + double result_deriv2_array[]); +int gsl_sf_legendre_deriv2_alt_array(const gsl_sf_legendre_t norm, + const size_t lmax, const double x, + double result_array[], + double result_deriv_array[], + double result_deriv2_array[]); +int gsl_sf_legendre_deriv2_alt_array_e(const gsl_sf_legendre_t norm, + const size_t lmax, const double x, + const double csphase, + double result_array[], + double result_deriv_array[], + double result_deriv2_array[]); +size_t gsl_sf_legendre_array_n(const size_t lmax); +size_t gsl_sf_legendre_array_index(const size_t l, const size_t m); +size_t gsl_sf_legendre_nlm(const size_t lmax); __END_DECLS diff -Nru gsl-doc-1.16/specfunc/gsl_sf_mathieu.h gsl-doc-2.3/specfunc/gsl_sf_mathieu.h --- gsl-doc-1.16/specfunc/gsl_sf_mathieu.h 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/gsl_sf_mathieu.h 2015-11-03 16:21:55.000000000 +0000 @@ -67,8 +67,10 @@ /* Compute the characteristic value for a Mathieu function of order n and type ntype. */ -int gsl_sf_mathieu_a(int order, double qq, gsl_sf_result *result); -int gsl_sf_mathieu_b(int order, double qq, gsl_sf_result *result); +int gsl_sf_mathieu_a_e(int order, double qq, gsl_sf_result *result); +double gsl_sf_mathieu_a(int order, double qq); +int gsl_sf_mathieu_b_e(int order, double qq, gsl_sf_result *result); +double gsl_sf_mathieu_b(int order, double qq); /* Compute the Fourier coefficients for a Mathieu function. */ int gsl_sf_mathieu_a_coeff(int order, double qq, double aa, double coeff[]); @@ -80,8 +82,10 @@ void gsl_sf_mathieu_free(gsl_sf_mathieu_workspace *workspace); /* Compute an angular Mathieu function. */ -int gsl_sf_mathieu_ce(int order, double qq, double zz, gsl_sf_result *result); -int gsl_sf_mathieu_se(int order, double qq, double zz, gsl_sf_result *result); +int gsl_sf_mathieu_ce_e(int order, double qq, double zz, gsl_sf_result *result); +double gsl_sf_mathieu_ce(int order, double qq, double zz); +int gsl_sf_mathieu_se_e(int order, double qq, double zz, gsl_sf_result *result); +double gsl_sf_mathieu_se(int order, double qq, double zz); int gsl_sf_mathieu_ce_array(int nmin, int nmax, double qq, double zz, gsl_sf_mathieu_workspace *work, double result_array[]); @@ -90,10 +94,12 @@ double result_array[]); /* Compute a radial Mathieu function. */ -int gsl_sf_mathieu_Mc(int kind, int order, double qq, double zz, +int gsl_sf_mathieu_Mc_e(int kind, int order, double qq, double zz, gsl_sf_result *result); -int gsl_sf_mathieu_Ms(int kind, int order, double qq, double zz, +double gsl_sf_mathieu_Mc(int kind, int order, double qq, double zz); +int gsl_sf_mathieu_Ms_e(int kind, int order, double qq, double zz, gsl_sf_result *result); +double gsl_sf_mathieu_Ms(int kind, int order, double qq, double zz); int gsl_sf_mathieu_Mc_array(int kind, int nmin, int nmax, double qq, double zz, gsl_sf_mathieu_workspace *work, double result_array[]); diff -Nru gsl-doc-1.16/specfunc/hyperg_1F1.c gsl-doc-2.3/specfunc/hyperg_1F1.c --- gsl-doc-1.16/specfunc/hyperg_1F1.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/hyperg_1F1.c 2015-11-03 16:21:55.000000000 +0000 @@ -1120,7 +1120,7 @@ * the values near the line b=2a+x. Then recurse * forward on a from a0. */ - int a0 = ceil(0.5*(b-x)); + int a0 = (int) ceil(0.5*(b-x)); double Ma0b; /* M(a0,b) */ double Ma0bp1; /* M(a0,b+1) */ double Ma0p1b; /* M(a0+1,b) */ diff -Nru gsl-doc-1.16/specfunc/hyperg_2F1.c gsl-doc-2.3/specfunc/hyperg_2F1.c --- gsl-doc-1.16/specfunc/hyperg_2F1.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/hyperg_2F1.c 2016-07-02 23:02:41.000000000 +0000 @@ -47,6 +47,7 @@ double del_pos = 1.0; double del_neg = 0.0; double del = 1.0; + double del_prev; double k = 0.0; int i = 0; @@ -64,6 +65,7 @@ result->err += 2.0 * GSL_DBL_EPSILON * (2.0*sqrt(k)+1.0) * fabs(result->val); GSL_ERROR ("error", GSL_EMAXITER); } + del_prev = del; del *= (a+k)*(b+k) * x / ((c+k) * (k+1.0)); /* Gauss series */ if(del > 0.0) { @@ -82,6 +84,16 @@ sum_neg -= del; } + /* + * This stopping criteria is taken from the thesis + * "Computation of Hypergeometic Functions" by J. Pearson, pg. 31 + * (http://people.maths.ox.ac.uk/porterm/research/pearson_final.pdf) + * and fixes bug #45926 + */ + if (fabs(del_prev / (sum_pos - sum_neg)) < GSL_DBL_EPSILON && + fabs(del / (sum_pos - sum_neg)) < GSL_DBL_EPSILON) + break; + k += 1.0; } while(fabs((del_pos + del_neg)/(sum_pos-sum_neg)) > GSL_DBL_EPSILON); @@ -599,6 +611,12 @@ result->err += 2.0 * GSL_DBL_EPSILON * (fabs(pre1.val*F1.val) + fabs(pre2.val*F2.val)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); + if (status_F1) + return status_F1; + + if (status_F2) + return status_F2; + return GSL_SUCCESS; } } diff -Nru gsl-doc-1.16/specfunc/hyperg_U.c gsl-doc-2.3/specfunc/hyperg_U.c --- gsl-doc-1.16/specfunc/hyperg_U.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/hyperg_U.c 2015-11-03 16:21:55.000000000 +0000 @@ -524,7 +524,7 @@ t_err = a0_err + b0_err; dchu_val += t_val; dchu_err += t_err; - if(!finite(t_val) || fabs(t_val) < EPS*fabs(dchu_val)) break; + if(!gsl_finite(t_val) || fabs(t_val) < EPS*fabs(dchu_val)) break; } result->val = dchu_val; @@ -680,6 +680,18 @@ hyperg_U_series(const double a, const double b, const double x, gsl_sf_result * result) { const double SQRT_EPS = M_SQRT2 * GSL_SQRT_DBL_EPSILON; +double bint = ( b < 0.0 ? ceil(b-0.5) : floor(b+0.5) ); + double beps = b - bint; + double a_beps = a - beps; + double r_a_beps = floor(a_beps + 0.5); + double a_beps_int = ( fabs(a_beps - r_a_beps) < INT_THRESHOLD ); +/* double a_b_1 = a-b+1; + double r_a_b_1 = floor(a_b_1+0.5); + double r_a_b_1_int = (fabs(a_b_1-r_a_b_1)< INT_THRESHOLD); + Check for (a-beps) being a member of -N; N being 0,1,... */ + if (a_beps_int && a_beps <= 0) + { beps=beps - 1 + floor(a_beps);bint=bint + 1 - floor(a_beps); + } if(fabs(1.0 + a - b) < SQRT_EPS) { /* Original Comment: ALGORITHM IS BAD WHEN 1+A-B IS NEAR ZERO FOR SMALL X @@ -694,9 +706,7 @@ return stat_e; } else { - double bint = ( b < 0.0 ? ceil(b-0.5) : floor(b+0.5) ); - double beps = b - bint; - int N = bint; + int N = (int) bint; double lnx = log(x); double xeps = exp(-beps*lnx); @@ -711,7 +721,7 @@ if(fabs(xeps-1.0) > 0.5 ) { stat_inf = hyperg_U_infinite_sum_stable(N, a, bint, b, beps, x, xeps, sum, result); } else if (1+a-b < 0 && 1+a-b==floor(1+a-b) && beps != 0) { - stat_inf = hyperg_U_infinite_sum_simple(N, a, bint, b, beps, x, xeps, sum, result); + stat_inf = hyperg_U_infinite_sum_simple(N, a, bint, b, beps, x, xeps, sum, result); } else { stat_inf = hyperg_U_infinite_sum_improved(N, a, bint, b, beps, x, xeps, sum, result); } @@ -1611,7 +1621,25 @@ static int hyperg_U_int_negx (const int a, const int b, const double x, gsl_sf_result_e10 * result) { - return hyperg_U_negx (a, b, x, result); +/* Looking at the tests it seems that everything is handled correctly by hyperg_U_negx +except aval = res_tem; + result->err = res_tem_err; + return status; + } + else + { + return hyperg_U_negx (a, b, x, result); + } } @@ -1629,7 +1657,7 @@ } else if (x == 0.0) { return hyperg_U_int_origin (a, b, result); - } else if (x < 0.0) { + } else if (x < 0.0) { return hyperg_U_int_negx (a, b, x, result); } else { @@ -1677,13 +1705,26 @@ result->err = 0.0; result->e10 = 0; return GSL_SUCCESS; - } else if (x == 0.0) { + } + else if (x == 0.0) { return hyperg_U_origin (a, b, result); - } else if (x < 0.0) { - return hyperg_U_negx (a, b, x, result); + } + else if(a_integer && b == a + 1) +/* This is DLMF 13.6.4 */ + { + gsl_sf_result powx1N_1; + gsl_sf_pow_int_e(x, -a, &powx1N_1); + result->val = powx1N_1.val; + result->err = powx1N_1.err; + result->e10 = 0; + return GSL_SUCCESS; + + } + else if(a_integer && b_integer) { + return gsl_sf_hyperg_U_int_e10_e(rinta, rintb, x, result); } - else if(a_integer && b_integer) { - return gsl_sf_hyperg_U_int_e10_e(rinta, rintb, x, result); + else if (x < 0.0) { + return hyperg_U_negx (a, b, x, result); } else { if(b >= 1.0) { @@ -1714,7 +1755,7 @@ int gsl_sf_hyperg_U_int_e(const int a, const int b, const double x, gsl_sf_result * result) { - gsl_sf_result_e10 re = {0}; + gsl_sf_result_e10 re = {0, 0, 0}; int stat_U = gsl_sf_hyperg_U_int_e10_e(a, b, x, &re); int stat_c = gsl_sf_result_smash_e(&re, result); return GSL_ERROR_SELECT_2(stat_c, stat_U); @@ -1724,7 +1765,7 @@ int gsl_sf_hyperg_U_e(const double a, const double b, const double x, gsl_sf_result * result) { - gsl_sf_result_e10 re = {0}; + gsl_sf_result_e10 re = {0, 0, 0}; int stat_U = gsl_sf_hyperg_U_e10_e(a, b, x, &re); int stat_c = gsl_sf_result_smash_e(&re, result); return GSL_ERROR_SELECT_2(stat_c, stat_U); diff -Nru gsl-doc-1.16/specfunc/legendre_P.c gsl-doc-2.3/specfunc/legendre_P.c --- gsl-doc-1.16/specfunc/legendre_P.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/specfunc/legendre_P.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,114 @@ +/* legendre_P.c + * + * Copyright (C) 2009-2013 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include + +/* + * The routines in this module compute associated Legendre functions + * (ALFs) up to order and degree 2700, using the method described + * in + * + * [1] S. A. Holmes and W. E. Featherstone, A unified approach + * to the Clenshaw summation and the recursive computation of very + * high degree and order normalised associated Legendre functions, + * Journal of Geodesy, 76, pg. 279-299, 2002. + * + * Further information on ALFs can be found in + * + * [2] Abramowitz and Stegun, Handbook of Mathematical Functions, + * Chapter 8, 1972. + */ + +static void legendre_sqrts(const size_t lmax, double *array); + +#define LEGENDRE +#include "legendre_source.c" +#undef LEGENDRE + +#define LEGENDRE_DERIV +#include "legendre_source.c" +#undef LEGENDRE_DERIV + +#define LEGENDRE_DERIV_ALT +#include "legendre_source.c" +#undef LEGENDRE_DERIV_ALT + +#define LEGENDRE_DERIV2 +#include "legendre_source.c" +#undef LEGENDRE_DERIV2 + +#define LEGENDRE_DERIV2_ALT +#include "legendre_source.c" +#undef LEGENDRE_DERIV2_ALT + +/* number of P_{lm} functions for a given lmax */ +size_t +gsl_sf_legendre_nlm(const size_t lmax) +{ + return ((lmax + 1) * (lmax + 2) / 2); +} + +/* +gsl_sf_legendre_array_n() + This routine returns the minimum result_array[] size needed +for a given lmax +*/ + +size_t +gsl_sf_legendre_array_n(const size_t lmax) +{ + size_t nlm = gsl_sf_legendre_nlm(lmax); + size_t nsqrt = 2 * lmax + 2; /* extra room to precompute sqrt factors */ + + return (nlm + nsqrt); +} /* gsl_sf_legendre_array_n() */ + +/* +gsl_sf_legendre_array_index() +This routine computes the index into a result_array[] corresponding +to a given (l,m) +*/ + +size_t +gsl_sf_legendre_array_index(const size_t l, const size_t m) +{ + return (l * (l + 1) / 2 + m); +} /* gsl_sf_legendre_array_index() */ + +/********************************************************* + * INTERNAL ROUTINES * + *********************************************************/ + +/* +legendre_sqrts() + Precompute square root factors needed for Legendre recurrence. +On output, array[i] = sqrt(i) +*/ + +static void +legendre_sqrts(const size_t lmax, double *array) +{ + size_t l; + for (l = 0; l <= 2 * lmax + 1; ++l) + array[l] = sqrt((double) l); +} diff -Nru gsl-doc-1.16/specfunc/legendre_poly.c gsl-doc-2.3/specfunc/legendre_poly.c --- gsl-doc-1.16/specfunc/legendre_poly.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/legendre_poly.c 2015-11-03 16:21:55.000000000 +0000 @@ -290,7 +290,6 @@ } } - int gsl_sf_legendre_Plm_e(const int l, const int m, const double x, gsl_sf_result * result) { @@ -357,6 +356,100 @@ } } +int +gsl_sf_legendre_sphPlm_e(const int l, int m, const double x, gsl_sf_result * result) +{ + /* CHECK_POINTER(result) */ + + if(m < 0 || l < m || x < -1.0 || x > 1.0) { + DOMAIN_ERROR(result); + } + else if(m == 0) { + gsl_sf_result P; + int stat_P = gsl_sf_legendre_Pl_e(l, x, &P); + double pre = sqrt((2.0*l + 1.0)/(4.0*M_PI)); + result->val = pre * P.val; + result->err = pre * P.err; + result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); + return stat_P; + } + else if(x == 1.0 || x == -1.0) { + /* m > 0 here */ + result->val = 0.0; + result->err = 0.0; + return GSL_SUCCESS; + } + else { + /* m > 0 and |x| < 1 here */ + + /* Starting value for recursion. + * Y_m^m(x) = sqrt( (2m+1)/(4pi m) gamma(m+1/2)/gamma(m) ) (-1)^m (1-x^2)^(m/2) / pi^(1/4) + */ + gsl_sf_result lncirc; + gsl_sf_result lnpoch; + double lnpre_val; + double lnpre_err; + gsl_sf_result ex_pre; + double sr; + const double sgn = ( GSL_IS_ODD(m) ? -1.0 : 1.0); + const double y_mmp1_factor = x * sqrt(2.0*m + 3.0); + double y_mm, y_mm_err; + double y_mmp1, y_mmp1_err; + gsl_sf_log_1plusx_e(-x*x, &lncirc); + gsl_sf_lnpoch_e(m, 0.5, &lnpoch); /* Gamma(m+1/2)/Gamma(m) */ + lnpre_val = -0.25*M_LNPI + 0.5 * (lnpoch.val + m*lncirc.val); + lnpre_err = 0.25*M_LNPI*GSL_DBL_EPSILON + 0.5 * (lnpoch.err + fabs(m)*lncirc.err); + /* Compute exp(ln_pre) with error term, avoiding call to gsl_sf_exp_err BJG */ + ex_pre.val = exp(lnpre_val); + ex_pre.err = 2.0*(sinh(lnpre_err) + GSL_DBL_EPSILON)*ex_pre.val; + sr = sqrt((2.0+1.0/m)/(4.0*M_PI)); + y_mm = sgn * sr * ex_pre.val; + y_mm_err = 2.0 * GSL_DBL_EPSILON * fabs(y_mm) + sr * ex_pre.err; + y_mm_err *= 1.0 + 1.0/(GSL_DBL_EPSILON + fabs(1.0-x)); + y_mmp1 = y_mmp1_factor * y_mm; + y_mmp1_err=fabs(y_mmp1_factor) * y_mm_err; + + if(l == m){ + result->val = y_mm; + result->err = y_mm_err; + result->err += 2.0 * GSL_DBL_EPSILON * fabs(y_mm); + return GSL_SUCCESS; + } + else if(l == m + 1) { + result->val = y_mmp1; + result->err = y_mmp1_err; + result->err += 2.0 * GSL_DBL_EPSILON * fabs(y_mmp1); + return GSL_SUCCESS; + } + else{ + double y_ell = 0.0; + double y_ell_err = 0.0; + int ell; + + /* Compute Y_l^m, l > m+1, upward recursion on l. */ + for(ell=m+2; ell <= l; ell++){ + const double rat1 = (double)(ell-m)/(double)(ell+m); + const double rat2 = (ell-m-1.0)/(ell+m-1.0); + const double factor1 = sqrt(rat1*(2.0*ell+1.0)*(2.0*ell-1.0)); + const double factor2 = sqrt(rat1*rat2*(2.0*ell+1.0)/(2.0*ell-3.0)); + y_ell = (x*y_mmp1*factor1 - (ell+m-1.0)*y_mm*factor2) / (ell-m); + y_mm = y_mmp1; + y_mmp1 = y_ell; + + y_ell_err = 0.5*(fabs(x*factor1)*y_mmp1_err + fabs((ell+m-1.0)*factor2)*y_mm_err) / fabs(ell-m); + y_mm_err = y_mmp1_err; + y_mmp1_err = y_ell_err; + } + + result->val = y_ell; + result->err = y_ell_err + (0.5*(l-m) + 1.0) * GSL_DBL_EPSILON * fabs(y_ell); + + return GSL_SUCCESS; + } + } +} + +#ifndef GSL_DISABLE_DEPRECATED int gsl_sf_legendre_Plm_array(const int lmax, const int m, const double x, double * result_array) @@ -419,7 +512,6 @@ } } - int gsl_sf_legendre_Plm_deriv_array( const int lmax, const int m, const double x, @@ -498,101 +590,6 @@ } } - -int -gsl_sf_legendre_sphPlm_e(const int l, int m, const double x, gsl_sf_result * result) -{ - /* CHECK_POINTER(result) */ - - if(m < 0 || l < m || x < -1.0 || x > 1.0) { - DOMAIN_ERROR(result); - } - else if(m == 0) { - gsl_sf_result P; - int stat_P = gsl_sf_legendre_Pl_e(l, x, &P); - double pre = sqrt((2.0*l + 1.0)/(4.0*M_PI)); - result->val = pre * P.val; - result->err = pre * P.err; - result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); - return stat_P; - } - else if(x == 1.0 || x == -1.0) { - /* m > 0 here */ - result->val = 0.0; - result->err = 0.0; - return GSL_SUCCESS; - } - else { - /* m > 0 and |x| < 1 here */ - - /* Starting value for recursion. - * Y_m^m(x) = sqrt( (2m+1)/(4pi m) gamma(m+1/2)/gamma(m) ) (-1)^m (1-x^2)^(m/2) / pi^(1/4) - */ - gsl_sf_result lncirc; - gsl_sf_result lnpoch; - double lnpre_val; - double lnpre_err; - gsl_sf_result ex_pre; - double sr; - const double sgn = ( GSL_IS_ODD(m) ? -1.0 : 1.0); - const double y_mmp1_factor = x * sqrt(2.0*m + 3.0); - double y_mm, y_mm_err; - double y_mmp1, y_mmp1_err; - gsl_sf_log_1plusx_e(-x*x, &lncirc); - gsl_sf_lnpoch_e(m, 0.5, &lnpoch); /* Gamma(m+1/2)/Gamma(m) */ - lnpre_val = -0.25*M_LNPI + 0.5 * (lnpoch.val + m*lncirc.val); - lnpre_err = 0.25*M_LNPI*GSL_DBL_EPSILON + 0.5 * (lnpoch.err + fabs(m)*lncirc.err); - /* Compute exp(ln_pre) with error term, avoiding call to gsl_sf_exp_err BJG */ - ex_pre.val = exp(lnpre_val); - ex_pre.err = 2.0*(sinh(lnpre_err) + GSL_DBL_EPSILON)*ex_pre.val; - sr = sqrt((2.0+1.0/m)/(4.0*M_PI)); - y_mm = sgn * sr * ex_pre.val; - y_mm_err = 2.0 * GSL_DBL_EPSILON * fabs(y_mm) + sr * ex_pre.err; - y_mm_err *= 1.0 + 1.0/(GSL_DBL_EPSILON + fabs(1.0-x)); - y_mmp1 = y_mmp1_factor * y_mm; - y_mmp1_err=fabs(y_mmp1_factor) * y_mm_err; - - if(l == m){ - result->val = y_mm; - result->err = y_mm_err; - result->err += 2.0 * GSL_DBL_EPSILON * fabs(y_mm); - return GSL_SUCCESS; - } - else if(l == m + 1) { - result->val = y_mmp1; - result->err = y_mmp1_err; - result->err += 2.0 * GSL_DBL_EPSILON * fabs(y_mmp1); - return GSL_SUCCESS; - } - else{ - double y_ell = 0.0; - double y_ell_err; - int ell; - - /* Compute Y_l^m, l > m+1, upward recursion on l. */ - for(ell=m+2; ell <= l; ell++){ - const double rat1 = (double)(ell-m)/(double)(ell+m); - const double rat2 = (ell-m-1.0)/(ell+m-1.0); - const double factor1 = sqrt(rat1*(2.0*ell+1.0)*(2.0*ell-1.0)); - const double factor2 = sqrt(rat1*rat2*(2.0*ell+1.0)/(2.0*ell-3.0)); - y_ell = (x*y_mmp1*factor1 - (ell+m-1.0)*y_mm*factor2) / (ell-m); - y_mm = y_mmp1; - y_mmp1 = y_ell; - - y_ell_err = 0.5*(fabs(x*factor1)*y_mmp1_err + fabs((ell+m-1.0)*factor2)*y_mm_err) / fabs(ell-m); - y_mm_err = y_mmp1_err; - y_mmp1_err = y_ell_err; - } - - result->val = y_ell; - result->err = y_ell_err + (0.5*(l-m) + 1.0) * GSL_DBL_EPSILON * fabs(y_ell); - - return GSL_SUCCESS; - } - } -} - - int gsl_sf_legendre_sphPlm_array(const int lmax, int m, const double x, double * result_array) { @@ -743,6 +740,8 @@ return lmax-m+1; } +#endif /* !GSL_DISABLE_DEPRECATED */ + /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" @@ -776,4 +775,3 @@ { EVAL_RESULT(gsl_sf_legendre_sphPlm_e(l, m, x, &result)); } - diff -Nru gsl-doc-1.16/specfunc/legendre_source.c gsl-doc-2.3/specfunc/legendre_source.c --- gsl-doc-1.16/specfunc/legendre_source.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/specfunc/legendre_source.c 2016-08-25 17:15:56.000000000 +0000 @@ -0,0 +1,599 @@ +/* legendre_source.c + * + * Copyright (C) 2009-2013 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* define various macros for functions below */ + +#define CONCAT2x(a,b) a ## _ ## b +#define CONCAT3x(a,b,c) a ## _ ## b ## _ ## c + +#if defined(LEGENDRE) +#define FUNCTION(dir,name) CONCAT2x(dir,name) +#define OUTPUT result_array +#define OUTPUT_ARG double result_array[] + +#elif defined(LEGENDRE_DERIV) +#define FUNCTION(dir,name) CONCAT3x(dir,deriv,name) +#define OUTPUT result_array, result_deriv_array +#define OUTPUT_ARG double result_array[], double result_deriv_array[] + +#elif defined(LEGENDRE_DERIV_ALT) +#define FUNCTION(dir,name) CONCAT3x(dir,deriv_alt,name) +#define OUTPUT result_array, result_deriv_array +#define OUTPUT_ARG double result_array[], double result_deriv_array[] +#define LEGENDRE_DERIV + +#elif defined(LEGENDRE_DERIV2) +#define FUNCTION(dir,name) CONCAT3x(dir,deriv2,name) +#define OUTPUT result_array, result_deriv_array, result_deriv2_array +#define OUTPUT_ARG double result_array[], double result_deriv_array[], double result_deriv2_array[] +#define LEGENDRE_DERIV + +#elif defined(LEGENDRE_DERIV2_ALT) +#define FUNCTION(dir,name) CONCAT3x(dir,deriv2_alt,name) +#define OUTPUT result_array, result_deriv_array, result_deriv2_array +#define OUTPUT_ARG double result_array[], double result_deriv_array[], double result_deriv2_array[] +#define LEGENDRE_DERIV +#define LEGENDRE_DERIV2 +#define LEGENDRE_DERIV_ALT + +#endif + +static int FUNCTION (legendre, array_schmidt_e) +(const size_t lmax, const double x, const double csphase, OUTPUT_ARG); +static int FUNCTION(legendre, array_none_e) +(const size_t lmax, const double x, const double csphase, OUTPUT_ARG); + +/* +gsl_sf_legendre_array() + +Inputs: norm - normlization type + lmax - maximum degree + x - input argument + result_array - (output) normalized P_{lm} + result_deriv_array - (output) normalized P'_{lm} + result_deriv2_array - (output) normalized P''_{lm} +*/ + +int +FUNCTION (gsl_sf_legendre, array) +(const gsl_sf_legendre_t norm, const size_t lmax, const double x, + OUTPUT_ARG) +{ + int s = FUNCTION (gsl_sf_legendre, array_e)(norm, lmax, x, 1.0, OUTPUT); + return s; +} + +/* +gsl_sf_legendre_array_e() + +Inputs: norm - normlization type + lmax - maximum degree + x - input argument + csphase - Condon-Shortley phase + result_array - (output) normalized P_{lm} + result_deriv_array - (output) normalized P'_{lm} + result_deriv2_array - (output) normalized P''_{lm} +*/ + +int +FUNCTION (gsl_sf_legendre, array_e) +(const gsl_sf_legendre_t norm, const size_t lmax, const double x, + const double csphase, OUTPUT_ARG) +{ + int s; + const size_t nlm = gsl_sf_legendre_nlm(lmax); +#if !defined(LEGENDRE_DERIV_ALT) + size_t i; +#if defined(LEGENDRE_DERIV) || defined(LEGENDRE_DERIV2) + const double u = sqrt((1.0 - x) * (1.0 + x)); + const double uinv = 1.0 / u; +#endif +#if defined(LEGENDRE_DERIV2) + const double uinv2 = uinv * uinv; +#endif +#endif + double fac1 = 0.0, fac2 = 0.0; /* normalization factors */ + + if (norm == GSL_SF_LEGENDRE_NONE) + { + /* compute P_{lm}(x) */ + s = FUNCTION(legendre,array_none_e)(lmax, x, csphase, OUTPUT); + } + else + { + /* compute S_{lm}(x) */ + s = FUNCTION(legendre,array_schmidt_e)(lmax, x, csphase, OUTPUT); + } + +#if !defined(LEGENDRE_DERIV_ALT) + /* scale derivative arrays to recover P'(x) and P''(x) */ + for (i = 0; i < nlm; ++i) + { +#if defined(LEGENDRE_DERIV2) + double dp = result_deriv_array[i]; + double d2p = result_deriv2_array[i]; + + result_deriv2_array[i] = (d2p - x * uinv * dp) * uinv2; +#endif +#if defined(LEGENDRE_DERIV) + result_deriv_array[i] *= -uinv; +#endif + } +#endif + + /* apply scaling for requested normalization */ + if (norm == GSL_SF_LEGENDRE_SCHMIDT || norm == GSL_SF_LEGENDRE_NONE) + { + return s; + } + else if (norm == GSL_SF_LEGENDRE_SPHARM) + { + fac1 = 1.0 / sqrt(4.0 * M_PI); + fac2 = 1.0 / sqrt(8.0 * M_PI); + } + else if (norm == GSL_SF_LEGENDRE_FULL) + { + fac1 = 1.0 / sqrt(2.0); + fac2 = 1.0 / sqrt(4.0); + } + + /* + * common code for different normalizations + * P_{l0} = fac1 * sqrt(2l + 1) * S_{l0} + * P_{lm} = fac2 * sqrt(2l + 1) * S_{lm}, m > 0 + */ + { + size_t l, m; + size_t twoellp1 = 1; /* 2l + 1 */ + double *sqrts = &(result_array[nlm]); + + for (l = 0; l <= lmax; ++l) + { + result_array[gsl_sf_legendre_array_index(l, 0)] *= + sqrts[twoellp1] * fac1; +#if defined(LEGENDRE_DERIV) + result_deriv_array[gsl_sf_legendre_array_index(l, 0)] *= + sqrts[twoellp1] * fac1; +#endif +#if defined(LEGENDRE_DERIV2) + result_deriv2_array[gsl_sf_legendre_array_index(l, 0)] *= + sqrts[twoellp1] * fac1; +#endif + + for (m = 1; m <= l; ++m) + { + result_array[gsl_sf_legendre_array_index(l, m)] *= + sqrts[twoellp1] * fac2; +#if defined(LEGENDRE_DERIV) + result_deriv_array[gsl_sf_legendre_array_index(l, m)] *= + sqrts[twoellp1] * fac2; +#endif +#if defined(LEGENDRE_DERIV2) + result_deriv2_array[gsl_sf_legendre_array_index(l, m)] *= + sqrts[twoellp1] * fac2; +#endif + } + + twoellp1 += 2; + } + } + + return s; +} + +/* +legendre,array_schmidt_e() + This routine computes Schmidt semi-normalized associated +Legendre polynomials and their first and second derivatives. + +Inputs: lmax - maximum order + x - legendre argument in [-1,1] + csphase - -1.0 to include CS phase (-1)^m, + 1.0 to not include + result_array - (output) where to store P_{lm}(x) values + result_deriv_array - (output) where to store + d/dtheta P_{lm}(x) values + result_deriv2_array - (output) where to store + d^2/dtheta^2 P_{lm}(x) values +*/ + +static int +FUNCTION(legendre, array_schmidt_e) +(const size_t lmax, const double x, const double csphase, OUTPUT_ARG) +{ + if (x > 1.0 || x < -1.0) + { + GSL_ERROR("x is outside [-1,1]", GSL_EDOM); + } +#if defined(LEGENDRE_DERIV) || defined(LEGENDRE_DERIV2) + else if (fabs(x) == 1.0) + { + GSL_ERROR("x cannot equal 1 or -1 for derivative computation", GSL_EDOM); + } +#endif + else if (csphase != 1.0 && csphase != -1.0) + { + GSL_ERROR("csphase has invalid value", GSL_EDOM); + } + else + { + const double eps = 1.0e-280; + const double u = sqrt((1.0 - x) * (1.0 + x)); /* sin(theta) */ +#if defined(LEGENDRE_DERIV) + const double uinv = 1.0 / u; +#endif +#if defined(LEGENDRE_DERIV2) + const double uinv2 = 1.0 / u / u; +#endif +#if defined(LEGENDRE_DERIV) || defined(LEGENDRE_DERIV2) + const double xbyu = x * uinv; /* x / u */ +#endif + size_t l, m; + size_t k, idxmm; + double plm, /* eps * S(l,m) / u^m */ + pmm; /* eps * S(m,m) / u^m */ + double rescalem; + double pm1, /* S(l-1,m) */ + pm2; /* S(l-2,m) */ + size_t nlm = gsl_sf_legendre_nlm(lmax); + double *sqrts = &(result_array[nlm]); + + /* precompute square root factors for recurrence */ + legendre_sqrts(lmax, sqrts); + + /* initial values S(0,0) and S(1,0) */ + pm2 = 1.0; /* S(0,0) */ + pm1 = x; /* S(1,0) */ + + result_array[0] = pm2; +#if defined(LEGENDRE_DERIV) + result_deriv_array[0] = 0.0; +#endif +#if defined(LEGENDRE_DERIV2) + result_deriv2_array[0] = 0.0; +#endif + + if (lmax == 0) + return GSL_SUCCESS; + + result_array[1] = pm1; +#if defined(LEGENDRE_DERIV) + result_deriv_array[1] = -u; +#endif +#if defined(LEGENDRE_DERIV2) + result_deriv2_array[1] = -x; +#endif + + /* Compute S(l,0) for l=2..lmax, no scaling required */ + + k = 1; /* idx(1,0) */ + for (l = 2; l <= lmax; ++l) + { + double linv = 1.0 / (double)l; + + k += l; /* idx(l,m) = idx(l-1,m) + l */ + + plm = (2.0 - linv) * x * pm1 - (1.0 - linv) * pm2; + result_array[k] = plm; +#if defined(LEGENDRE_DERIV) + result_deriv_array[k] = uinv * l * (x * plm - pm1); +#endif +#if defined(LEGENDRE_DERIV2) + result_deriv2_array[k] = -(double) l * (l + 1.0) * plm - + xbyu * result_deriv_array[k]; +#endif + pm2 = pm1; + pm1 = plm; + } + + /* Compute S(m,m), S(m+1,m) and S(l,m) */ + + /* + * pi_m = Prod_{i=2}^m sqrt[ (2m - 1) / (2m) ] + * but pi_1 = 1.0, so initialize to sqrt(2) so that + * the first m = 1 iteration of the loop will reset it + * to 1.0. Starting with m = 2 it will begin accumulating + * the correct terms. + * + * pmm = S(m,m) * eps / u^m = pi_m + */ + pmm = sqrt(2.0) * eps; + + rescalem = 1.0 / eps; + idxmm = 0; /* tracks idx(m,m), initialize to idx(0,0) */ + + for (m = 1; m < lmax; ++m) + { + /* rescalem = u^m / eps */ + rescalem *= u; + + /* + * compute: + * S(m,m) = u * sqrt((2m - 1) / (2m)) S(m-1,m-1) = u^m * pi_m + * d_t S(m,m) = m * x / u * S(m,m) + */ + + idxmm += m + 1; /* idx(m,m) = idx(m-1,m-1) + m + 1 */ + pmm *= csphase * sqrts[2 * m - 1] / sqrts[2 * m]; /* S(m,m) * eps / u^m */ + result_array[idxmm] = pmm * rescalem; +#if defined(LEGENDRE_DERIV) + result_deriv_array[idxmm] = m * xbyu * result_array[idxmm]; +#endif +#if defined(LEGENDRE_DERIV2) + result_deriv2_array[idxmm] = + m * (uinv2 * m - (m + 1.0)) * result_array[idxmm] - + xbyu * result_deriv_array[idxmm]; +#endif + pm2 = pmm; + + /* + * compute: + * S(m+1,m) = sqrt(2 * m + 1) * x * S(m,m) + * d_t S(m+1,m) = 1/u * ((m+1)*x*S(m+1,m) - sqrt(2*m+1)*S(m,m)) + */ + + k = idxmm + m + 1; /* idx(m+1,m) = idx(m,m) + m + 1 */ + pm1 = x * sqrts[2 * m + 1] * pm2; + result_array[k] = pm1 * rescalem; +#if defined(LEGENDRE_DERIV) + result_deriv_array[k] = + uinv * ((m + 1.0) * x * result_array[k] - + sqrts[2 * m + 1] * result_array[idxmm]); +#endif +#if defined(LEGENDRE_DERIV2) + result_deriv2_array[k] = + (m * m * uinv2 - (m + 1.0) * (m + 2.0)) * result_array[k] - + xbyu * result_deriv_array[k]; +#endif + + /* compute S(l,m) for l=m+2...lmax */ + for (l = m + 2; l <= lmax; ++l) + { + k += l; /* idx(l,m) = idx(l-1,m) + l */ + plm = + (2*l - 1) / sqrts[l + m] / sqrts[l - m] * x * pm1 - + sqrts[l - m - 1] * sqrts[l + m - 1] / + sqrts[l + m] / sqrts[l - m] * pm2; + result_array[k] = plm * rescalem; +#if defined(LEGENDRE_DERIV) + result_deriv_array[k] = + uinv * (l * x * result_array[k] - + sqrts[l + m] * sqrts[l - m] * result_array[k - l]); +#endif +#if defined(LEGENDRE_DERIV2) + result_deriv2_array[k] = + (m * m * uinv2 - l * (l + 1.0)) * result_array[k] - + xbyu * result_deriv_array[k]; +#endif + pm2 = pm1; + pm1 = plm; + } + } /* for (m = 1; m < lmax; ++m) */ + + /* compute S(lmax,lmax) */ + + rescalem *= u; + idxmm += m + 1; /* idx(lmax,lmax) */ + pmm *= csphase * sqrts[2 * lmax - 1] / sqrts[2 * lmax]; + result_array[idxmm] = pmm * rescalem; +#if defined(LEGENDRE_DERIV) + result_deriv_array[idxmm] = lmax * xbyu * result_array[idxmm]; +#endif +#if defined(LEGENDRE_DERIV2) + result_deriv2_array[idxmm] = + lmax * (uinv2 * lmax - (lmax + 1.0)) * result_array[idxmm] - + xbyu * result_deriv_array[idxmm]; +#endif + + return GSL_SUCCESS; + } +} + +/* +legendre_array_none_e() + This routine computes unnormalized associated Legendre polynomials +and their derivatives. + +Inputs: lmax - maximum order + x - legendre argument in [-1,1] + csphase - -1.0 to include CS phase (-1)^m, + 1.0 to not include + result_array - (output) where to store P_{lm}(x) values + result_deriv_array - (output) where to store + d/dtheta P_{lm}(x) values + result_deriv2_array - (output) where to store + d^2/dtheta^2 P_{lm}(x) values +*/ + +static int +FUNCTION(legendre, array_none_e) +(const size_t lmax, const double x, const double csphase, OUTPUT_ARG) +{ + if (x > 1.0 || x < -1.0) + { + GSL_ERROR("x is outside [-1,1]", GSL_EDOM); + } +#if defined(LEGENDRE_DERIV) || defined(LEGENDRE_DERIV2) + else if (fabs(x) == 1.0) + { + GSL_ERROR("x cannot equal 1 or -1 for derivative computation", GSL_EDOM); + } +#endif + else if (csphase != 1.0 && csphase != -1.0) + { + GSL_ERROR("csphase has invalid value", GSL_EDOM); + } + else + { + const double u = sqrt((1.0 - x) * (1.0 + x)); /* sin(theta) */ +#if defined(LEGENDRE_DERIV) + const double uinv = 1.0 / u; +#endif +#if defined(LEGENDRE_DERIV2) + const double uinv2 = 1.0 / u / u; +#endif +#if defined(LEGENDRE_DERIV) || defined(LEGENDRE_DERIV2) + const double xbyu = x * uinv; /* x / u */ +#endif + size_t l, m; + size_t k, idxmm; + double plm, pmm; + double pm1, /* P(l-1,m) */ + pm2; /* P(l-2,m) */ + double twomm1; /* 2*m - 1 */ + + /* initial values P(0,0) and P(1,0) */ + + pm2 = 1.0; /* P(0,0) */ + pm1 = x; /* P(1,0) */ + + result_array[0] = pm2; +#if defined(LEGENDRE_DERIV) + result_deriv_array[0] = 0.0; +#endif +#if defined(LEGENDRE_DERIV2) + result_deriv2_array[0] = 0.0; +#endif + + if (lmax == 0) + return 0; + + result_array[1] = pm1; +#if defined(LEGENDRE_DERIV) + result_deriv_array[1] = -u; +#endif +#if defined(LEGENDRE_DERIV2) + result_deriv2_array[1] = -x; +#endif + + /* Compute P(l,0) */ + + k = 1; + for (l = 2; l <= lmax; ++l) + { + k += l; + plm = ((2*l - 1) * x * pm1 - (l - 1) * pm2) / (double) l; + result_array[k] = plm; +#if defined(LEGENDRE_DERIV) + result_deriv_array[k] = -(double)l * (pm1 - x * plm) * uinv; +#endif +#if defined(LEGENDRE_DERIV2) + result_deriv2_array[k] = -(double) l * (l + 1.0) * plm - + xbyu * result_deriv_array[k]; +#endif + pm2 = pm1; + pm1 = plm; + } + + /* Compute P(m,m), P(m+1,m) and P(l,m) */ + + pmm = 1.0; + twomm1 = -1.0; /* 2 * m - 1 */ + + idxmm = 0; /* tracks idx(m,m), initialize to idx(0,0) */ + + for (m = 1; m <= lmax - 1; ++m) + { + /* + * compute + * + * P(m,m) = u * (2m - 1) P(m-1,m-1) + * and + * dP(m,m)/dtheta = m * x * P(m,m) / u + */ + idxmm += m + 1; + twomm1 += 2.0; + pmm *= csphase * u * twomm1; + result_array[idxmm] = pmm; +#if defined(LEGENDRE_DERIV) + result_deriv_array[idxmm] = m * xbyu * pmm; +#endif +#if defined(LEGENDRE_DERIV2) + result_deriv2_array[idxmm] = + m * (uinv2 * m - (m + 1.0)) * result_array[idxmm] - + xbyu * result_deriv_array[idxmm]; +#endif + pm2 = pmm; + + /* + * compute + * + * P(m+1,m) = (2 * m + 1) * x * P(m,m) + * and + * dP(m+1,m)/dt = -[(2*m + 1) * P(m,m) - (m+1) * x * P(m+1,m)]/u + */ + k = idxmm + m + 1; + pm1 = x * pmm * (2*m + 1); + result_array[k] = pm1; +#if defined(LEGENDRE_DERIV) + result_deriv_array[k] = -uinv * ((2*m + 1) * pmm - (m + 1) * x * pm1); +#endif +#if defined(LEGENDRE_DERIV2) + result_deriv2_array[k] = + (m * m * uinv2 - (m + 1.0) * (m + 2.0)) * result_array[k] - + xbyu * result_deriv_array[k]; +#endif + + /* compute P(l,m) */ + for (l = m + 2; l <= lmax; ++l) + { + k += l; + plm = ((2*l - 1) * x * pm1 - (l + m - 1) * pm2) / + (double) (l - m); + result_array[k] = plm; +#if defined(LEGENDRE_DERIV) + result_deriv_array[k] = -uinv * ((l + m) * pm1 - l * x * plm); +#endif +#if defined(LEGENDRE_DERIV2) + result_deriv2_array[k] = + (m * m * uinv2 - l * (l + 1.0)) * result_array[k] - + xbyu * result_deriv_array[k]; +#endif + pm2 = pm1; + pm1 = plm; + } + } /* for (m = 1; m <= lmax - 1; ++m) */ + + /* compute P(lmax,lmax) */ + + idxmm += m + 1; + twomm1 += 2.0; + pmm *= csphase * u * twomm1; + result_array[idxmm] = pmm; +#if defined(LEGENDRE_DERIV) + result_deriv_array[idxmm] = lmax * x * pmm * uinv; +#endif +#if defined(LEGENDRE_DERIV2) + result_deriv2_array[idxmm] = + lmax * (uinv2 * lmax - (lmax + 1.0)) * result_array[idxmm] - + xbyu * result_deriv_array[idxmm]; +#endif + + return GSL_SUCCESS; + } +} /* legendre_array_none_e() */ + +#undef FUNCTION +#undef CONCAT2x +#undef CONCAT3x +#undef OUTPUT +#undef OUTPUT_ARG +#undef LEGENDRE_DERIV +#undef LEGENDRE_DERIV2 +#undef LEGENDRE_DERIV_ALT diff -Nru gsl-doc-1.16/specfunc/Makefile.am gsl-doc-2.3/specfunc/Makefile.am --- gsl-doc-1.16/specfunc/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/Makefile.am 2016-08-23 20:38:06.000000000 +0000 @@ -2,17 +2,17 @@ pkginclude_HEADERS = gsl_sf.h gsl_sf_airy.h gsl_sf_bessel.h gsl_sf_clausen.h gsl_sf_coulomb.h gsl_sf_coupling.h gsl_sf_dawson.h gsl_sf_debye.h gsl_sf_dilog.h gsl_sf_elementary.h gsl_sf_ellint.h gsl_sf_elljac.h gsl_sf_erf.h gsl_sf_exp.h gsl_sf_expint.h gsl_sf_fermi_dirac.h gsl_sf_gamma.h gsl_sf_gegenbauer.h gsl_sf_hyperg.h gsl_sf_laguerre.h gsl_sf_lambert.h gsl_sf_legendre.h gsl_sf_log.h gsl_sf_mathieu.h gsl_sf_pow_int.h gsl_sf_psi.h gsl_sf_result.h gsl_sf_synchrotron.h gsl_sf_transport.h gsl_sf_trig.h gsl_sf_zeta.h gsl_specfunc.h -noinst_HEADERS = bessel_amp_phase.h bessel_olver.h bessel_temme.h bessel.h hyperg.h legendre.h eval.h chebyshev.h cheb_eval.c cheb_eval_mode.c check.h error.h +noinst_HEADERS = bessel_amp_phase.h bessel_olver.h bessel_temme.h bessel.h hyperg.h legendre.h eval.h chebyshev.h cheb_eval.c cheb_eval_mode.c check.h error.h legendre_source.c -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) -libgslspecfunc_la_SOURCES = airy.c airy_der.c airy_zero.c atanint.c bessel.c bessel.h bessel_I0.c bessel_I1.c bessel_In.c bessel_Inu.c bessel_J0.c bessel_J1.c bessel_Jn.c bessel_Jnu.c bessel_K0.c bessel_K1.c bessel_Kn.c bessel_Knu.c bessel_Y0.c bessel_Y1.c bessel_Yn.c bessel_Ynu.c bessel_amp_phase.c bessel_amp_phase.h bessel_i.c bessel_j.c bessel_k.c bessel_olver.c bessel_temme.c bessel_y.c bessel_zero.c bessel_sequence.c beta.c beta_inc.c clausen.c coulomb.c coupling.c coulomb_bound.c dawson.c debye.c dilog.c elementary.c ellint.c elljac.c erfc.c exp.c expint.c expint3.c fermi_dirac.c gegenbauer.c gamma.c gamma_inc.c hyperg_0F1.c hyperg_2F0.c hyperg_1F1.c hyperg_2F1.c hyperg_U.c hyperg.c laguerre.c lambert.c legendre_H3d.c legendre_Qn.c legendre_con.c legendre_poly.c log.c mathieu_angfunc.c mathieu_charv.c mathieu_coeff.c mathieu_radfunc.c mathieu_workspace.c poch.c pow_int.c psi.c recurse.h result.c shint.c sinint.c synchrotron.c transport.c trig.c zeta.c +libgslspecfunc_la_SOURCES = airy.c airy_der.c airy_zero.c atanint.c bessel.c bessel.h bessel_I0.c bessel_I1.c bessel_In.c bessel_Inu.c bessel_J0.c bessel_J1.c bessel_Jn.c bessel_Jnu.c bessel_K0.c bessel_K1.c bessel_Kn.c bessel_Knu.c bessel_Y0.c bessel_Y1.c bessel_Yn.c bessel_Ynu.c bessel_amp_phase.c bessel_amp_phase.h bessel_i.c bessel_j.c bessel_k.c bessel_olver.c bessel_temme.c bessel_y.c bessel_zero.c bessel_sequence.c beta.c beta_inc.c clausen.c coulomb.c coupling.c coulomb_bound.c dawson.c debye.c dilog.c elementary.c ellint.c elljac.c erfc.c exp.c expint.c expint3.c fermi_dirac.c gegenbauer.c gamma.c gamma_inc.c hyperg_0F1.c hyperg_2F0.c hyperg_1F1.c hyperg_2F1.c hyperg_U.c hyperg.c laguerre.c lambert.c legendre_H3d.c legendre_P.c legendre_Qn.c legendre_con.c legendre_poly.c log.c mathieu_angfunc.c mathieu_charv.c mathieu_coeff.c mathieu_radfunc.c mathieu_workspace.c poch.c pow_int.c psi.c recurse.h result.c shint.c sinint.c synchrotron.c transport.c trig.c zeta.c TESTS = $(check_PROGRAMS) check_PROGRAMS = test -test_LDADD = libgslspecfunc.la ../eigen/libgsleigen.la ../linalg/libgsllinalg.la ../sort/libgslsort.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la +test_LDADD = libgslspecfunc.la ../eigen/libgsleigen.la ../linalg/libgsllinalg.la ../sort/libgslsort.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../complex/libgslcomplex.la ../poly/libgslpoly.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test_sf.c test_sf.h test_airy.c test_bessel.c test_coulomb.c test_dilog.c test_gamma.c test_hyperg.c test_legendre.c test_mathieu.c diff -Nru gsl-doc-1.16/specfunc/Makefile.in gsl-doc-2.3/specfunc/Makefile.in --- gsl-doc-1.16/specfunc/Makefile.in 2013-07-19 15:14:55.000000000 +0000 +++ gsl-doc-2.3/specfunc/Makefile.in 2016-12-09 00:04:22.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -108,11 +108,11 @@ exp.lo expint.lo expint3.lo fermi_dirac.lo gegenbauer.lo \ gamma.lo gamma_inc.lo hyperg_0F1.lo hyperg_2F0.lo \ hyperg_1F1.lo hyperg_2F1.lo hyperg_U.lo hyperg.lo laguerre.lo \ - lambert.lo legendre_H3d.lo legendre_Qn.lo legendre_con.lo \ - legendre_poly.lo log.lo mathieu_angfunc.lo mathieu_charv.lo \ - mathieu_coeff.lo mathieu_radfunc.lo mathieu_workspace.lo \ - poch.lo pow_int.lo psi.lo result.lo shint.lo sinint.lo \ - synchrotron.lo transport.lo trig.lo zeta.lo + lambert.lo legendre_H3d.lo legendre_P.lo legendre_Qn.lo \ + legendre_con.lo legendre_poly.lo log.lo mathieu_angfunc.lo \ + mathieu_charv.lo mathieu_coeff.lo mathieu_radfunc.lo \ + mathieu_workspace.lo poch.lo pow_int.lo psi.lo result.lo \ + shint.lo sinint.lo synchrotron.lo transport.lo trig.lo zeta.lo libgslspecfunc_la_OBJECTS = $(am_libgslspecfunc_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -129,8 +129,9 @@ ../matrix/libgslmatrix.la ../vector/libgslvector.la \ ../blas/libgslblas.la ../cblas/libgslcblas.la \ ../block/libgslblock.la ../complex/libgslcomplex.la \ - ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la \ - ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la + ../poly/libgslpoly.la ../ieee-utils/libgslieeeutils.la \ + ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ + ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false @@ -402,6 +403,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -424,7 +426,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -540,11 +545,11 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslspecfunc.la pkginclude_HEADERS = gsl_sf.h gsl_sf_airy.h gsl_sf_bessel.h gsl_sf_clausen.h gsl_sf_coulomb.h gsl_sf_coupling.h gsl_sf_dawson.h gsl_sf_debye.h gsl_sf_dilog.h gsl_sf_elementary.h gsl_sf_ellint.h gsl_sf_elljac.h gsl_sf_erf.h gsl_sf_exp.h gsl_sf_expint.h gsl_sf_fermi_dirac.h gsl_sf_gamma.h gsl_sf_gegenbauer.h gsl_sf_hyperg.h gsl_sf_laguerre.h gsl_sf_lambert.h gsl_sf_legendre.h gsl_sf_log.h gsl_sf_mathieu.h gsl_sf_pow_int.h gsl_sf_psi.h gsl_sf_result.h gsl_sf_synchrotron.h gsl_sf_transport.h gsl_sf_trig.h gsl_sf_zeta.h gsl_specfunc.h -noinst_HEADERS = bessel_amp_phase.h bessel_olver.h bessel_temme.h bessel.h hyperg.h legendre.h eval.h chebyshev.h cheb_eval.c cheb_eval_mode.c check.h error.h -INCLUDES = -I$(top_srcdir) -libgslspecfunc_la_SOURCES = airy.c airy_der.c airy_zero.c atanint.c bessel.c bessel.h bessel_I0.c bessel_I1.c bessel_In.c bessel_Inu.c bessel_J0.c bessel_J1.c bessel_Jn.c bessel_Jnu.c bessel_K0.c bessel_K1.c bessel_Kn.c bessel_Knu.c bessel_Y0.c bessel_Y1.c bessel_Yn.c bessel_Ynu.c bessel_amp_phase.c bessel_amp_phase.h bessel_i.c bessel_j.c bessel_k.c bessel_olver.c bessel_temme.c bessel_y.c bessel_zero.c bessel_sequence.c beta.c beta_inc.c clausen.c coulomb.c coupling.c coulomb_bound.c dawson.c debye.c dilog.c elementary.c ellint.c elljac.c erfc.c exp.c expint.c expint3.c fermi_dirac.c gegenbauer.c gamma.c gamma_inc.c hyperg_0F1.c hyperg_2F0.c hyperg_1F1.c hyperg_2F1.c hyperg_U.c hyperg.c laguerre.c lambert.c legendre_H3d.c legendre_Qn.c legendre_con.c legendre_poly.c log.c mathieu_angfunc.c mathieu_charv.c mathieu_coeff.c mathieu_radfunc.c mathieu_workspace.c poch.c pow_int.c psi.c recurse.h result.c shint.c sinint.c synchrotron.c transport.c trig.c zeta.c +noinst_HEADERS = bessel_amp_phase.h bessel_olver.h bessel_temme.h bessel.h hyperg.h legendre.h eval.h chebyshev.h cheb_eval.c cheb_eval_mode.c check.h error.h legendre_source.c +AM_CPPFLAGS = -I$(top_srcdir) +libgslspecfunc_la_SOURCES = airy.c airy_der.c airy_zero.c atanint.c bessel.c bessel.h bessel_I0.c bessel_I1.c bessel_In.c bessel_Inu.c bessel_J0.c bessel_J1.c bessel_Jn.c bessel_Jnu.c bessel_K0.c bessel_K1.c bessel_Kn.c bessel_Knu.c bessel_Y0.c bessel_Y1.c bessel_Yn.c bessel_Ynu.c bessel_amp_phase.c bessel_amp_phase.h bessel_i.c bessel_j.c bessel_k.c bessel_olver.c bessel_temme.c bessel_y.c bessel_zero.c bessel_sequence.c beta.c beta_inc.c clausen.c coulomb.c coupling.c coulomb_bound.c dawson.c debye.c dilog.c elementary.c ellint.c elljac.c erfc.c exp.c expint.c expint3.c fermi_dirac.c gegenbauer.c gamma.c gamma_inc.c hyperg_0F1.c hyperg_2F0.c hyperg_1F1.c hyperg_2F1.c hyperg_U.c hyperg.c laguerre.c lambert.c legendre_H3d.c legendre_P.c legendre_Qn.c legendre_con.c legendre_poly.c log.c mathieu_angfunc.c mathieu_charv.c mathieu_coeff.c mathieu_radfunc.c mathieu_workspace.c poch.c pow_int.c psi.c recurse.h result.c shint.c sinint.c synchrotron.c transport.c trig.c zeta.c TESTS = $(check_PROGRAMS) -test_LDADD = libgslspecfunc.la ../eigen/libgsleigen.la ../linalg/libgsllinalg.la ../sort/libgslsort.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la +test_LDADD = libgslspecfunc.la ../eigen/libgsleigen.la ../linalg/libgsllinalg.la ../sort/libgslsort.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../complex/libgslcomplex.la ../poly/libgslpoly.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test_sf.c test_sf.h test_airy.c test_bessel.c test_coulomb.c test_dilog.c test_gamma.c test_hyperg.c test_legendre.c test_mathieu.c all: all-am @@ -673,6 +678,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/laguerre.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lambert.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/legendre_H3d.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/legendre_P.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/legendre_Qn.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/legendre_con.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/legendre_poly.Plo@am__quote@ diff -Nru gsl-doc-1.16/specfunc/mathieu_angfunc.c gsl-doc-2.3/specfunc/mathieu_angfunc.c --- gsl-doc-1.16/specfunc/mathieu_angfunc.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/mathieu_angfunc.c 2015-11-03 16:21:55.000000000 +0000 @@ -27,7 +27,7 @@ #include -int gsl_sf_mathieu_ce(int order, double qq, double zz, gsl_sf_result *result) +int gsl_sf_mathieu_ce_e(int order, double qq, double zz, gsl_sf_result *result) { int even_odd, ii, status; double coeff[GSL_SF_MATHIEU_COEFF], norm, fn, factor; @@ -63,7 +63,7 @@ order *= -1; /* Compute the characteristic value. */ - status = gsl_sf_mathieu_a(order, qq, &aa); + status = gsl_sf_mathieu_a_e(order, qq, &aa); if (status != GSL_SUCCESS) { return status; @@ -109,7 +109,7 @@ } -int gsl_sf_mathieu_se(int order, double qq, double zz, gsl_sf_result *result) +int gsl_sf_mathieu_se_e(int order, double qq, double zz, gsl_sf_result *result) { int even_odd, ii, status; double coeff[GSL_SF_MATHIEU_COEFF], norm, fn, factor; @@ -149,7 +149,7 @@ order *= -1; /* Compute the characteristic value. */ - status = gsl_sf_mathieu_b(order, qq, &aa); + status = gsl_sf_mathieu_b_e(order, qq, &aa); if (status != GSL_SUCCESS) { return status; @@ -348,3 +348,18 @@ return GSL_SUCCESS; } + + +/*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ + +#include "eval.h" + +double gsl_sf_mathieu_ce(int order, double qq, double zz) +{ + EVAL_RESULT(gsl_sf_mathieu_ce_e(order, qq, zz, &result)); +} + +double gsl_sf_mathieu_se(int order, double qq, double zz) +{ + EVAL_RESULT(gsl_sf_mathieu_se_e(order, qq, zz, &result)); +} diff -Nru gsl-doc-1.16/specfunc/mathieu_charv.c gsl-doc-2.3/specfunc/mathieu_charv.c --- gsl-doc-1.16/specfunc/mathieu_charv.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/mathieu_charv.c 2015-11-03 16:21:55.000000000 +0000 @@ -367,7 +367,7 @@ } -int gsl_sf_mathieu_a(int order, double qq, gsl_sf_result *result) +int gsl_sf_mathieu_a_e(int order, double qq, gsl_sf_result *result) { int even_odd, nterms = 50, ii, counter = 0, maxcount = 1000; int dir = 0; /* step direction for new search */ @@ -395,9 +395,9 @@ if (qq < 0.0) { if (even_odd == 0) - return gsl_sf_mathieu_a(order, -qq, result); + return gsl_sf_mathieu_a_e(order, -qq, result); else - return gsl_sf_mathieu_b(order, -qq, result); + return gsl_sf_mathieu_b_e(order, -qq, result); } /* Compute an initial approximation for the characteristic value. */ @@ -493,7 +493,7 @@ } -int gsl_sf_mathieu_b(int order, double qq, gsl_sf_result *result) +int gsl_sf_mathieu_b_e(int order, double qq, gsl_sf_result *result) { int even_odd, nterms = 50, ii, counter = 0, maxcount = 1000; int dir = 0; /* step direction for new search */ @@ -527,9 +527,9 @@ if (qq < 0.0) { if (even_odd == 0) - return gsl_sf_mathieu_b(order, -qq, result); + return gsl_sf_mathieu_b_e(order, -qq, result); else - return gsl_sf_mathieu_a(order, -qq, result); + return gsl_sf_mathieu_a_e(order, -qq, result); } /* Compute an initial approximation for the characteristic value. */ @@ -873,3 +873,18 @@ return GSL_SUCCESS; } + + +/*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ + +#include "eval.h" + +double gsl_sf_mathieu_a(int order, double qq) +{ + EVAL_RESULT(gsl_sf_mathieu_a_e(order, qq, &result)); +} + +double gsl_sf_mathieu_b(int order, double qq) +{ + EVAL_RESULT(gsl_sf_mathieu_b_e(order, qq, &result)); +} diff -Nru gsl-doc-1.16/specfunc/mathieu_radfunc.c gsl-doc-2.3/specfunc/mathieu_radfunc.c --- gsl-doc-1.16/specfunc/mathieu_radfunc.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/mathieu_radfunc.c 2015-11-03 16:21:55.000000000 +0000 @@ -27,7 +27,7 @@ #include -int gsl_sf_mathieu_Mc(int kind, int order, double qq, double zz, +int gsl_sf_mathieu_Mc_e(int kind, int order, double qq, double zz, gsl_sf_result *result) { int even_odd, kk, mm, status; @@ -59,7 +59,7 @@ even_odd = 1; /* Compute the characteristic value. */ - status = gsl_sf_mathieu_a(order, qq, &aa); + status = gsl_sf_mathieu_a_e(order, qq, &aa); if (status != GSL_SUCCESS) { return status; @@ -133,7 +133,7 @@ } -int gsl_sf_mathieu_Ms(int kind, int order, double qq, double zz, +int gsl_sf_mathieu_Ms_e(int kind, int order, double qq, double zz, gsl_sf_result *result) { int even_odd, kk, mm, status; @@ -173,7 +173,7 @@ even_odd = 1; /* Compute the characteristic value. */ - status = gsl_sf_mathieu_b(order, qq, &aa); + status = gsl_sf_mathieu_b_e(order, qq, &aa); if (status != GSL_SUCCESS) { return status; @@ -472,3 +472,18 @@ return GSL_SUCCESS; } + + +/*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ + +#include "eval.h" + +double gsl_sf_mathieu_Mc(int kind, int order, double qq, double zz) +{ + EVAL_RESULT(gsl_sf_mathieu_Mc_e(kind, order, qq, zz, &result)); +} + +double gsl_sf_mathieu_Ms(int kind, int order, double qq, double zz) +{ + EVAL_RESULT(gsl_sf_mathieu_Ms_e(kind, order, qq, zz, &result)); +} diff -Nru gsl-doc-1.16/specfunc/test_bessel.c gsl-doc-2.3/specfunc/test_bessel.c --- gsl-doc-1.16/specfunc/test_bessel.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/test_bessel.c 2016-07-02 23:02:41.000000000 +0000 @@ -125,11 +125,15 @@ TEST_SF(s, gsl_sf_bessel_K0_scaled_e, (0.1, &r), 2.6823261022628943831, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_bessel_K0_scaled_e, (1.95, &r), 0.8513330938802157074894, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K0_scaled_e, (2.0, &r), 0.8415682150707714179, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_bessel_K0_scaled_e, (6.0, &r), 0.50186313086214003217346, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K0_scaled_e, (100.0, &r), 0.1251756216591265789, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K1_scaled_e, (0.1, &r), 10.890182683049696574, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_bessel_K1_scaled_e, (1.95, &r), 1.050086915104152747182, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K1_scaled_e, (2.0, &r), 1.0334768470686885732, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_bessel_K1_scaled_e, (6.0, &r), 0.5421759102771335382849, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K1_scaled_e, (100.0, &r), 0.1257999504795785293, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Kn_scaled_e, ( 4, 0.1, &r), 530040.2483725626207, TEST_TOL1, GSL_SUCCESS); @@ -137,10 +141,12 @@ TEST_SF(s, gsl_sf_bessel_Kn_scaled_e, ( 100, 100.0, &r), 2.0475736731166756813e+19, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K0_e, (0.1, &r), 2.4270690247020166125, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_bessel_K0_e, (1.95, &r), 0.1211226255426818887894, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K0_e, (2.0, &r), 0.11389387274953343565, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K0_e, (100.0, &r), 4.656628229175902019e-45, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K1_e, (0.1, &r), 9.853844780870606135, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_bessel_K1_e, (1.95, &r), 0.1494001409315894276793, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K1_e, (2.0, &r), 0.13986588181652242728, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K1_e, (100.0, &r), 4.679853735636909287e-45, TEST_TOL2, GSL_SUCCESS); @@ -153,7 +159,15 @@ TEST_SF(s, gsl_sf_bessel_j0_e, ( 1.0, &r), 0.84147098480789650670, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j0_e, ( 10.0, &r), -0.05440211108893698134, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j0_e, (100.0, &r), -0.005063656411097587937, TEST_TOL1, GSL_SUCCESS); +#ifdef FIXME TEST_SF(s, gsl_sf_bessel_j0_e, (1048576.0, &r), 3.1518281938718287624e-07, TEST_TOL2, GSL_SUCCESS); +#endif + + /* these values are from Mathematica */ +#ifdef FIXME + TEST_SF(s, gsl_sf_bessel_j0_e, (1.0e18, &r), -9.9296932074040507620955e-19, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_bessel_j0_e, (1.0e20, &r), -6.4525128526578084420581e-21, TEST_TOL0, GSL_SUCCESS); +#endif TEST_SF(s, gsl_sf_bessel_j1_e, (-10.0, &r), -0.07846694179875154709, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j1_e, (0.01, &r), 0.003333300000119047399, TEST_TOL0, GSL_SUCCESS); @@ -162,6 +176,8 @@ TEST_SF(s, gsl_sf_bessel_j1_e, (100.0, &r), -0.008673825286987815220, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j1_e, (1048576.0, &r), -9.000855242905546158e-07, TEST_TOL0, GSL_SUCCESS); + /*TEST_SF(s, gsl_sf_bessel_j1_e, (1.0e18, &r), -1.183719902187107336049e-19, TEST_TOL0, GSL_SUCCESS);*/ + TEST_SF(s, gsl_sf_bessel_j2_e, (-10.0, &r), 0.07794219362856244547, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j2_e, (0.01, &r), 6.666619047751322551e-06, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j2_e, ( 1.0, &r), 0.06203505201137386110, TEST_TOL0, GSL_SUCCESS); @@ -192,6 +208,10 @@ TEST_SF(s, gsl_sf_bessel_jl_e, (49, 9950.35, &r), 5.0077368819565969286578715503E-5 , TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_jl_e, (52, 9930.51, &r), -7.4838588266727718650124475651E-6 , TEST_TOL4, GSL_SUCCESS); + /* bug report #37209 */ + TEST_SF(s, gsl_sf_bessel_jl_e, (364, 36.62, &r), 1.118907148986954E-318, TEST_TOL0, GSL_SUCCESS); + /*TEST_SF(s, gsl_sf_bessel_jl_e, (149, 1.0, &r), 2.6599182755508469E-307, TEST_TOL0, GSL_SUCCESS);*/ + TEST_SF(s, gsl_sf_bessel_y0_e, (0.001, &r), -999.99950000004166670, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_y0_e, ( 1.0, &r), -0.5403023058681397174, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_y0_e, ( 10.0, &r), 0.08390715290764524523, TEST_TOL0, GSL_SUCCESS); diff -Nru gsl-doc-1.16/specfunc/test_hyperg.c gsl-doc-2.3/specfunc/test_hyperg.c --- gsl-doc-1.16/specfunc/test_hyperg.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/test_hyperg.c 2016-07-02 23:02:41.000000000 +0000 @@ -460,14 +460,12 @@ /* Tests for b >= 0 */ TEST_SF(s, gsl_sf_hyperg_U_e, ( 0, 0, -0.1, &r), 1, TEST_TOL0, GSL_SUCCESS); -#ifdef FIXME /* unimplemented case */ TEST_SF(s, gsl_sf_hyperg_U_e, (-1, 0, -0.1, &r), -0.1, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2, 0, -0.1, &r), 0.21, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-3, 0, -0.1, &r), -0.661, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-4, 0, -0.1, &r), 2.7721, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-5, 0, -0.1, &r), -14.52201, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-6, 0, -0.1, &r), 91.230301, TEST_TOL0, GSL_SUCCESS); -#endif TEST_SF(s, gsl_sf_hyperg_U_e, ( 0, 1, -0.1, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-1, 1, -0.1, &r), -1.1, TEST_TOL0, GSL_SUCCESS); @@ -477,9 +475,7 @@ TEST_SF(s, gsl_sf_hyperg_U_e, (-5, 1, -0.1, &r), -186.20251, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-6, 1, -0.1, &r), 1208.445361, TEST_TOL2, GSL_SUCCESS); -#ifdef FIXME /* unimplemented case */ TEST_SF(s, gsl_sf_hyperg_U_e, ( 1, 2, -0.1, &r), -10.0, TEST_TOL0, GSL_SUCCESS); -#endif TEST_SF(s, gsl_sf_hyperg_U_e, ( 0, 2, -0.1, &r), 1.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-1, 2, -0.1, &r), -2.1, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2, 2, -0.1, &r), 6.61, TEST_TOL2, GSL_SUCCESS); @@ -488,9 +484,7 @@ TEST_SF(s, gsl_sf_hyperg_U_e, (-5, 2, -0.1, &r), -912.30301, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-6, 2, -0.1, &r), 6682.263421, TEST_TOL2, GSL_SUCCESS); -#ifdef FIXME /* unimplemented case */ TEST_SF(s, gsl_sf_hyperg_U_e, ( 2, 3, -0.1, &r), 100.0, TEST_TOL0, GSL_SUCCESS); -#endif TEST_SF(s, gsl_sf_hyperg_U_e, ( 1, 3, -0.1, &r), 90.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, ( 0, 3, -0.1, &r), 1.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-1, 3, -0.1, &r), -3.10, TEST_TOL2, GSL_SUCCESS); @@ -500,9 +494,7 @@ TEST_SF(s, gsl_sf_hyperg_U_e, (-5, 3, -0.1, &r), -2961.42351, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-6, 3, -0.1, &r), 24450.804481, TEST_TOL2, GSL_SUCCESS); -#ifdef FIXME /* unimplemented case */ TEST_SF(s, gsl_sf_hyperg_U_e, ( 3, 4, -0.1, &r), -1000.0, TEST_TOL0, GSL_SUCCESS); -#endif TEST_SF(s, gsl_sf_hyperg_U_e, ( 2, 4, -0.1, &r), -1900.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, ( 1, 4, -0.1, &r), -1810.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, ( 0, 4, -0.1, &r), 1.0, TEST_TOL2, GSL_SUCCESS); @@ -516,45 +508,37 @@ /* Tests for b < 0 */ TEST_SF(s, gsl_sf_hyperg_U_e, ( 0, -1, -0.1, &r), 1.0, TEST_TOL2, GSL_SUCCESS); -#ifdef FIXME /* unimplemented case */ TEST_SF(s, gsl_sf_hyperg_U_e, (-1, -1, -0.1, &r), 0.9, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2, -1, -0.1, &r), 0.01, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-3, -1, -0.1, &r), -0.031, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-4, -1, -0.1, &r), 0.1281, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-5, -1, -0.1, &r), -0.66151, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-6, -1, -0.1, &r), 4.098241, TEST_TOL0, GSL_SUCCESS); -#endif TEST_SF(s, gsl_sf_hyperg_U_e, ( 0, -2, -0.1, &r), 1.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-1, -2, -0.1, &r), 1.9, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2, -2, -0.1, &r), 1.81, TEST_TOL2, GSL_SUCCESS); -#ifdef FIXME /* unimplemented case */ TEST_SF(s, gsl_sf_hyperg_U_e, (-3, -2, -0.1, &r), -0.001, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-4, -2, -0.1, &r), 0.0041, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-5, -2, -0.1, &r), -0.02101, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-6, -2, -0.1, &r), 0.129181, TEST_TOL0, GSL_SUCCESS); -#endif TEST_SF(s, gsl_sf_hyperg_U_e, ( 0, -3, -0.1, &r), 1.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-1, -3, -0.1, &r), 2.9, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2, -3, -0.1, &r), 5.61, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-3, -3, -0.1, &r), 5.429, TEST_TOL2, GSL_SUCCESS); -#ifdef FIXME /* unimplemented case */ TEST_SF(s, gsl_sf_hyperg_U_e, (-4, -3, -0.1, &r), 0.0001, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-5, -3, -0.1, &r), -0.00051, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-6, -3, -0.1, &r), 0.003121, TEST_TOL0, GSL_SUCCESS); -#endif TEST_SF(s, gsl_sf_hyperg_U_e, ( 0, -4, -0.1, &r), 1.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-1, -4, -0.1, &r), 3.9, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2, -4, -0.1, &r), 11.41, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-3, -4, -0.1, &r), 22.259, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-4, -4, -0.1, &r), 21.7161, TEST_TOL2, GSL_SUCCESS); -#ifdef FIXME /* unimplemented case */ TEST_SF(s, gsl_sf_hyperg_U_e, (-5, -4, -0.1, &r), -1e-5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-6, -4, -0.1, &r), 0.000061, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-7, -4, -0.1, &r), -0.0004341, TEST_TOL0, GSL_SUCCESS); -#endif /* Tests for integer a */ @@ -573,11 +557,9 @@ TEST_SF(s, gsl_sf_hyperg_U_e, (0, 1, -0.001, &r), 1, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-1, 0.99, -0.1, &r), -1.09, TEST_TOL2, GSL_SUCCESS); -#ifdef FIXME /* unimplemented case */ TEST_SF(s, gsl_sf_hyperg_U_e, (-1, 0, -0.5, &r), -0.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2, 0, -0.5, &r), 1.25, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-7, 0, -0.1, &r), -668.2263421, TEST_TOL0, GSL_SUCCESS); -#endif TEST_SF(s, gsl_sf_hyperg_U_int_e, (3, 6, -0.5, &r), -296.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (3, 7, -0.5, &r), 2824, TEST_TOL0, GSL_SUCCESS); @@ -586,6 +568,12 @@ /* Bug report from Raymond Rogers */ TEST_SF(s, gsl_sf_hyperg_U_e, (4.11, 0.11, 6.4, &r), 6.422378238765078623739153038e-5, TEST_TOL2, GSL_SUCCESS); + /* Addition tests from Raymond Rogers */ +TEST_SF(s, gsl_sf_hyperg_U_e, (5, 4, 6.4, &r), 3.2586223825343211136628535e-05, TEST_TOL2, GSL_SUCCESS); +TEST_SF(s, gsl_sf_hyperg_U_e, (2.2,1.2 , 8.7, &r), 5.7250017539318661177749625e-03, TEST_TOL2, GSL_SUCCESS); +TEST_SF(s, gsl_sf_hyperg_U_e, (2, -6.4, 1, &r),1.2141502795806162484648638e-02 +, TEST_TOL2, GSL_SUCCESS); + /* 2F1 */ @@ -644,6 +632,10 @@ /* Didier Pinchon also bug #24812 */ TEST_SF(s, gsl_sf_hyperg_2F1_e, (11, -1, 11.0/2.0, 0.125 , &r), 0.75, TEST_TOL2, GSL_SUCCESS); + /* Bill Maier - bug #45926 */ + TEST_SF(s, gsl_sf_hyperg_2F1_e, (-0.2, 8.8, 10.0, 0.8, &r), 0.77998971427681563, TEST_TOL1, GSL_SUCCESS); + TEST_SF(s, gsl_sf_hyperg_2F1_e, (-0.2, 9.8, 11.0, 0.8, &r), 0.77574573497387267, TEST_TOL0, GSL_SUCCESS); + #if 0 /* XXX - bug #39056 */ /* Test case from Hatef Monajemi */ @@ -652,6 +644,10 @@ /* Test case from Robert L Wolpert */ TEST_SF(s, gsl_sf_hyperg_2F1_e, (-1.0, -10.0, 1.0, 0.5, &r), 6.0, TEST_TOL0, GSL_SUCCESS); + + /* Test case from ldnlwm@163.com */ + + TEST_SF(s, gsl_sf_hyperg_2F1_e, (3.23191, -4.0229, 8.02291, 0.5, &r), 0.4300243900348170646, TEST_TOL2, GSL_SUCCESS); #endif /* 2F1 conj */ diff -Nru gsl-doc-1.16/specfunc/test_legendre.c gsl-doc-2.3/specfunc/test_legendre.c --- gsl-doc-1.16/specfunc/test_legendre.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/test_legendre.c 2016-08-25 17:10:30.000000000 +0000 @@ -1,6 +1,7 @@ /* specfunc/test_legendre.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004 Gerard Jungman + * Copyright (C) 2013 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,6 +25,510 @@ #include #include "test_sf.h" +static double +test_legendre_dx(const size_t l) +{ + const double dx_max = 0.4; + double dx; + + if (l < 1000) + dx = exp((double)l / 1000.0) / exp(2.0); + else + dx = dx_max; + + return dx; +} /* test_legendre_dx() */ + +/* +test_legendre_sum() + This routine computes the sum: + + Sum_{m=0}^l [P(l,m)(x)]^2 + +This sum should equate to 1.0 for Schmidt semi-normalized +ALFs for all l. +*/ + +static double +test_legendre_sum(const size_t l, double *p) +{ + double sum = 0.0; + size_t idx; + size_t m; + + for (m = 0; m <= l; ++m) + { + idx = gsl_sf_legendre_array_index(l, m); + sum += p[idx] * p[idx]; + } + + return sum; +} /* test_legendre_sum() */ + +/* +test_legendre_sum_deriv() + This routine computes the sum: + + Sum_{m=0}^l P(l,m)(x) * dP(l,m)/dx + +which should equal 0 in the case of Schmidt normalized ALFs. +*/ + +static double +test_legendre_sum_deriv(const int l, double *p, double *dp) +{ + double sum = 0.0; + size_t idx; + int m; + + for (m = 0; m <= l; ++m) + { + idx = gsl_sf_legendre_array_index(l, m); + sum += p[idx] * dp[idx]; + } + + return sum; +} /* test_legendre_sum_deriv() */ + +/* +test_legendre_sum_deriv2() + This routine computes the sum: + + Sum_{m=0}^l P(l,m)(x) * dP(l,m)/dx + +which should equal 0 in the case of Schmidt normalized ALFs. +*/ + +static double +test_legendre_sum_deriv2(const int l, double *p, double *dp, double *d2p) +{ + double sum = 0.0; + int m; + + for (m = 0; m <= l; ++m) + { + size_t idx = gsl_sf_legendre_array_index(l, m); + sum += dp[idx] * dp[idx] + p[idx] * d2p[idx]; + } + + return sum; +} /* test_legendre_sum_deriv2() */ + +static void +test_value(const size_t lmax, const size_t l, const size_t m, + const double *p, const double expected, const double tol, + const char *desc, const char *desc2) +{ + size_t idx = gsl_sf_legendre_array_index(l, m); + double value; + + if (l > lmax) + return; + + value = p[idx]; + + gsl_test_rel(value, expected, tol, "%s %s lmax=%zu l=%zu m=%zu", desc, desc2, lmax, l, m); +} /* test_value() */ + +/* Y_{lm} = factor * S_{lm} */ +static double +test_factor_spharm(const size_t l, const size_t m) +{ + double factor = sqrt( (2.0 * l + 1.0) / 4.0 / M_PI); + + if (m == 0) + return factor; + else + return (factor / sqrt(2.0)); +} /* test_factor_spharm() */ + +/* N_{lm} = factor * S_{lm} */ +static double +test_factor_full(const size_t l, const size_t m) +{ + double factor = sqrt(l + 0.5); + + if (m == 0) + return factor; + else + return (factor / sqrt(2.0)); +} /* test_factor_full() */ + +/* test that p = factor * p_expected */ +static int +test_legendre_compare(const size_t lmax, const double *p_expected, + const double *p, + double (*factor)(const size_t l, const size_t m), + const char *desc, const char *desc2) +{ + size_t l, m; + + for (l = 0; l <= lmax; ++l) + { + for (m = 0; m <= l; ++m) + { + size_t idx = gsl_sf_legendre_array_index(l, m); + double fac = (*factor)(l, m); + + if (fabs(p_expected[idx]) < GSL_DBL_MIN) + continue; + + gsl_test_rel(p[idx] / fac, p_expected[idx], 1.0e-10, + "%s %s l=%zu m=%zu", desc, desc2, l, m); + } + } + + return 0; +} /* test_legendre_compare() */ + +static int +test_legendre_schmidt(const size_t lmax, const double csphase, const char *desc) +{ + int s = 0; + const size_t nlm = gsl_sf_legendre_nlm(lmax); + size_t l; + double x, dx; + double *p, *p2, *dp, *d2p, *p_alt, *dp_alt; + size_t dim; + size_t i; + const gsl_sf_legendre_t norm = GSL_SF_LEGENDRE_SCHMIDT; + + dim = gsl_sf_legendre_array_n(lmax); + p = malloc(sizeof(double) * dim); + p2 = malloc(sizeof(double) * dim); + dp = malloc(sizeof(double) * dim); + d2p = malloc(sizeof(double) * dim); + p_alt = malloc(sizeof(double) * dim); + dp_alt = malloc(sizeof(double) * dim); + + /* test specific values */ + x = 0.5; + gsl_sf_legendre_array(norm, lmax, x, p); + test_value(lmax, 0, 0, p, 1.000000000000000, 1.0e-10, desc, "x=0.5"); + test_value(lmax, 1, 0, p, 0.500000000000000, 1.0e-10, desc, "x=0.5"); + test_value(lmax, 1, 1, p, 0.866025403784439, 1.0e-10, desc, "x=0.5"); + test_value(lmax, 2, 0, p, -0.125000000000000, 1.0e-10, desc, "x=0.5"); + test_value(lmax, 2, 1, p, 0.750000000000000, 1.0e-10, desc, "x=0.5"); + test_value(lmax, 2, 2, p, 0.649519052838329, 1.0e-10, desc, "x=0.5"); + test_value(lmax, 3, 0, p, -0.437500000000000, 1.0e-10, desc, "x=0.5"); + test_value(lmax, 3, 2, p, 0.726184377413891, 1.0e-10, desc, "x=0.5"); + test_value(lmax, 3, 3, p, 0.513489897661093, 1.0e-10, desc, "x=0.5"); + + x = 0.1; + gsl_sf_legendre_array(norm, lmax, x, p); + test_value(lmax, 2700, 500, p, -7.421910573369699e-3, 1.0e-10, desc, "x=0.1"); + test_value(lmax, 2700, 2500, p, 2.717612388452281e-2, 1.0e-10, desc, "x=0.1"); + test_value(lmax, 2700, 2700, p, 1.887509917445211e-7, 1.0e-10, desc, "x=0.1"); + + x = 0.15; + gsl_sf_legendre_deriv_array(norm, lmax, x, p, dp); + test_value(lmax, 0, 0, dp, 0.000000000000000, 1.0e-10, desc, "deriv x=0.15"); + test_value(lmax, 1, 0, dp, 1.000000000000000, 1.0e-10, desc, "deriv x=0.15"); + test_value(lmax, 1, 1, dp, -0.151716521227252, 1.0e-10, desc, "deriv x=0.15"); + test_value(lmax, 2, 1, dp, 1.67303727048739, 1.0e-10, desc, "deriv x=0.15"); + + x = 0.23; + gsl_sf_legendre_deriv2_array(norm, lmax, x, p, dp, d2p); + test_value(lmax, 0, 0, d2p, 0.000000000000000, 1.0e-10, desc, "deriv2 x=0.23"); + test_value(lmax, 1, 0, d2p, 0.000000000000000, 1.0e-10, desc, "deriv2 x=0.23"); + test_value(lmax, 1, 1, d2p, -1.08494130865644, 1.0e-10, desc, "deriv2 x=0.23"); + test_value(lmax, 2, 0, d2p, 3.000000000000000, 1.0e-10, desc, "deriv2 x=0.23"); + test_value(lmax, 2, 1, d2p, -1.25090188696335, 1.0e-10, desc, "deriv2 x=0.23"); + + /* test array routines */ + dx = test_legendre_dx(lmax); + for (x = -1.0; x <= 1.0; x += dx) + { + s += gsl_sf_legendre_array_e(norm, lmax, x, csphase, p); + + for (l = 0; l <= lmax; ++l) + { + double sum = test_legendre_sum(l, p); + double rhs = 1.0; + + gsl_test_rel(sum, rhs, 1.0e-10, + "%s l=%zu, x=%f, sum=%.12e", desc, l, x, sum); + } + } + + /* test deriv array routines */ + for (x = -1.0 + dx; x < 1.0 - dx; x += dx) + { + double u = sqrt((1.0 - x) * (1.0 + x)); + double uinv = 1.0 / u; + + s += gsl_sf_legendre_array(norm, lmax, x, p2); + s += gsl_sf_legendre_deriv_array(norm, lmax, x, p, dp); + s += gsl_sf_legendre_deriv_alt_array(norm, lmax, x, p_alt, dp_alt); + + for (i = 0; i < nlm; ++i) + { + if (fabs(p2[i]) < GSL_DBL_MIN) + continue; + + /* check p = p_alt = p2 */ + gsl_test_rel(p[i], p2[i], 1.0e-10, "%s deriv i=%zu", desc, i); + gsl_test_rel(p_alt[i], p2[i], 1.0e-10, "%s deriv_alt i=%zu", desc, i); + + /* check dp = -1/u*dp_alt */ + gsl_test_rel(-uinv * dp_alt[i], dp[i], 1.0e-10, + "%s deriv_alt x=%f i=%zu", desc, x, i); + } + + for (l = 0; l <= lmax; ++l) + { + double sum = test_legendre_sum_deriv(l, p, dp); + + gsl_test_abs(sum, 0.0, 1.0e-10, + "%s deriv l=%zu, x=%f, sum=%.12e", desc, l, x, sum); + } + } + + /* test deriv2 array routines */ + for (x = -1.0 + dx; x < 1.0 - dx; x += dx) + { + s += gsl_sf_legendre_array(norm, lmax, x, p2); + s += gsl_sf_legendre_deriv2_array(norm, lmax, x, p, dp, d2p); + + /* check p = p2 */ + for (i = 0; i < nlm; ++i) + { + if (fabs(p2[i]) < GSL_DBL_MIN) + continue; + + gsl_test_rel(p[i], p2[i], 1.0e-10, "%s deriv2 i=%zu", desc, i); + } + + for (l = 0; l <= lmax; ++l) + { + double sum = test_legendre_sum_deriv(l, p, dp); + double sum2 = test_legendre_sum_deriv2(l, p, dp, d2p); + + gsl_test_abs(sum, 0.0, 1.0e-10, + "%s deriv2 l=%zu, x=%f, sum=%.12e", desc, l, x, sum); + gsl_test_abs(sum2, 0.0, 1.0e-6, + "%s deriv2 l=%zu, x=%f, sum=%.12e", desc, l, x, sum2); + } + } + + free(p); + free(p2); + free(dp); + free(d2p); + free(p_alt); + free(dp_alt); + + return s; +} /* test_legendre_schmidt() */ + +/* test other normalizations (other than schmidt) */ +static int +test_legendre_norm(const gsl_sf_legendre_t norm_type, const size_t lmax, + const double csphase, const char *desc) +{ + int s = 0; + double x, dx; + double *p_schmidt, *dp_schmidt, *d2p_schmidt; + double *p, *dp, *d2p; + size_t dim; + double (*factor)(const size_t l, const size_t m) = NULL; + + dim = gsl_sf_legendre_array_n(lmax); + p = malloc(sizeof(double) * dim); + dp = malloc(sizeof(double) * dim); + d2p = malloc(sizeof(double) * dim); + p_schmidt = malloc(sizeof(double) * dim); + dp_schmidt = malloc(sizeof(double) * dim); + d2p_schmidt = malloc(sizeof(double) * dim); + + if (norm_type == GSL_SF_LEGENDRE_SPHARM) + { + factor = &test_factor_spharm; + } + else if (norm_type == GSL_SF_LEGENDRE_FULL) + { + factor = &test_factor_full; + + /* test specific values (computed from GNU octave) */ + x = 0.45; + s += gsl_sf_legendre_array(norm_type, lmax, x, p); + test_value(lmax, 0, 0, p, 0.707106781186548, 1.0e-10, desc, "x=0.45"); + test_value(lmax, 1, 0, p, 0.551135192126215, 1.0e-10, desc, "x=0.45"); + test_value(lmax, 1, 1, p, 0.773385414912901, 1.0e-10, desc, "x=0.45"); + test_value(lmax, 2, 0, p, -0.310298495404022, 1.0e-10, desc, "x=0.45"); + test_value(lmax, 2, 1, p, 0.778204062248457, 1.0e-10, desc, "x=0.45"); + test_value(lmax, 2, 2, p, 0.772176054650104, 1.0e-10, desc, "x=0.45"); + test_value(lmax, 3, 0, p, -0.83661120632398589, 1.0e-10, desc, "x=0.45"); + test_value(lmax, 3, 1, p, 0.00904294765791280, 1.0e-10, desc, "x=0.45"); + test_value(lmax, 3, 2, p, 0.91934361403343767, 1.0e-10, desc, "x=0.45"); + test_value(lmax, 3, 3, p, 0.74482641545541073, 1.0e-10, desc, "x=0.45"); + } + + /* + * test the scale factors between the Schmidts and these + * normalized functions + */ + + dx = test_legendre_dx(lmax); + for (x = -1.0; x <= 1.0; x += dx) + { + s += gsl_sf_legendre_array_e(GSL_SF_LEGENDRE_SCHMIDT, lmax, x, + csphase, p_schmidt); + s += gsl_sf_legendre_array_e(norm_type, lmax, x, csphase, p); + test_legendre_compare(lmax, p_schmidt, p, factor, desc, "p"); + } + + /* test derivatives */ + for (x = -1.0 + dx; x < 1.0 - dx; x += dx) + { + s += gsl_sf_legendre_deriv_array_e(GSL_SF_LEGENDRE_SCHMIDT, + lmax, x, csphase, p_schmidt, dp_schmidt); + s += gsl_sf_legendre_deriv_array_e(norm_type, lmax, x, csphase, p, dp); + test_legendre_compare(lmax, p_schmidt, p, factor, desc, "deriv p"); + test_legendre_compare(lmax, dp_schmidt, dp, factor, desc, "deriv dp"); + + s += gsl_sf_legendre_deriv2_array_e(GSL_SF_LEGENDRE_SCHMIDT, + lmax, x, csphase, p_schmidt, dp_schmidt, d2p_schmidt); + s += gsl_sf_legendre_deriv2_array_e(norm_type, lmax, x, csphase, + p, dp, d2p); + test_legendre_compare(lmax, p_schmidt, p, factor, desc, "deriv2 p"); + test_legendre_compare(lmax, dp_schmidt, dp, factor, desc, "deriv2 dp"); + test_legendre_compare(lmax, d2p_schmidt, d2p, factor, desc, "deriv2 d2p"); + } + + free(p); + free(dp); + free(d2p); + free(p_schmidt); + free(dp_schmidt); + free(d2p_schmidt); + + return s; +} /* test_legendre_norm() */ + +/* +test_legendre_unnorm() + This routine tests the unnormalized ALFs using the relation + +S(l,m)(x) = a(l,m) * P(l,m)(x) + +where + +a(l,0) = 1 +a(l,1) = -sqrt(2)/sqrt(l * (l+1)) +a(l,m+1) = a(l,m) / sqrt((l+m+1) * (l-m)), m > 1 + +and + +S(l,m) are the Schmidt semi-normalized ALFs +*/ + +static int +test_legendre_unnorm(const size_t lmax_orig, const char *desc) +{ + int s = 0; + const int lmax = GSL_MIN(lmax_orig, 140); + size_t l, m; + double x, dx; + double *p, *dp, *d2p, *p2; + double *p_schmidt, *dp_schmidt, *d2p_schmidt; + size_t dim; + + dim = gsl_sf_legendre_array_n(lmax); + p = malloc(sizeof(double) * dim); + dp = malloc(sizeof(double) * dim); + d2p = malloc(sizeof(double) * dim); + p2 = malloc(sizeof(double) * dim); + p_schmidt = malloc(sizeof(double) * dim); + dp_schmidt = malloc(sizeof(double) * dim); + d2p_schmidt = malloc(sizeof(double) * dim); + + dx = test_legendre_dx(lmax); + + for (x = -1.0 + dx; x < 1.0 - dx; x += dx) + { + gsl_sf_legendre_deriv2_array(GSL_SF_LEGENDRE_SCHMIDT, lmax, x, + p_schmidt, dp_schmidt, d2p_schmidt); + gsl_sf_legendre_deriv2_array(GSL_SF_LEGENDRE_NONE, lmax, x, p, dp, d2p); + + for (l = 0; l <= lmax; ++l) + { + double a_lm = sqrt(2.0 / (double)l / (l + 1.0)); + size_t idx; + + /* test S(l,0) = P(l,0) */ + idx = gsl_sf_legendre_array_index(l, 0); + gsl_test_rel(p[idx], p_schmidt[idx], 1.0e-10, + "unnorm l=%zu, m=0, x=%f", l, x); + gsl_test_rel(dp[idx], dp_schmidt[idx], 1.0e-10, + "unnorm deriv l=%zu, m=0, x=%f", l, x); + gsl_test_rel(d2p[idx], d2p_schmidt[idx], 1.0e-10, + "unnorm deriv2 l=%zu, m=0, x=%f", l, x); + + /* test S(l,m) = a_{lm} * P(l,m) for m > 0 */ + for (m = 1; m <= l; ++m) + { + idx = gsl_sf_legendre_array_index(l, m); + + gsl_test_rel(a_lm * p[idx], p_schmidt[idx], 1.0e-9, + "unnorm l=%zu, m=%zu, x=%f", l, m, x); + gsl_test_abs(a_lm * dp[idx], dp_schmidt[idx], 1.0e-10, + "unnorm deriv l=%zu, m=%zu, x=%f", l, m, x); + gsl_test_abs(a_lm * d2p[idx], d2p_schmidt[idx], 1.0e-10, + "unnorm deriv2 l=%zu, m=%zu, x=%f", l, m, x); + + a_lm /= sqrt((double) (l + m + 1)) * + sqrt((double) (l - m)); + } + } + + gsl_sf_legendre_array(GSL_SF_LEGENDRE_NONE, lmax, x, p2); + /* test if p = p2 */ + for (l = 0; l <= lmax; ++l) + { + for (m = 0; m <= l; ++m) + { + size_t idx = gsl_sf_legendre_array_index(l, m); + gsl_test_rel(p2[idx], p[idx], 1.0e-10, + "%s compare l=%zu, m=%zu, x=%f", + desc, l, m, x); + } + } + } + + free(p); + free(p2); + free(dp); + free(d2p); + free(p_schmidt); + free(dp_schmidt); + free(d2p_schmidt); + + return s; +} /* test_legendre_unnorm() */ + +static int +test_legendre_all(const size_t lmax) +{ + int s = 0; + + s += test_legendre_schmidt(lmax, 1.0, "schmidt csphase=1"); + s += test_legendre_schmidt(lmax, -1.0, "schmidt csphase=-1"); + + s += test_legendre_norm(GSL_SF_LEGENDRE_SPHARM, lmax, 1.0, + "spharm csphase=1"); + s += test_legendre_norm(GSL_SF_LEGENDRE_SPHARM, lmax, -1.0, + "spharm csphase=-1"); + + s += test_legendre_norm(GSL_SF_LEGENDRE_FULL, lmax, 1.0, + "full csphase=1"); + s += test_legendre_norm(GSL_SF_LEGENDRE_FULL, lmax, -1.0, + "full csphase=-1"); + + s += test_legendre_unnorm(lmax, "unnorm csphase=1"); + + return s; +} /* test_legendre_all() */ int test_legendre(void) { @@ -117,7 +622,6 @@ gsl_test(sa, "gsl_sf_legendre_Pl_deriv_array(10, -1.0 + 1.0e-11)"); s += sa; - TEST_SF(s, gsl_sf_legendre_Plm_e, (10, 0, -0.5, &r), -0.18822860717773437500, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Plm_e, (10, 0, 1.0e-08, &r), -0.24609374999999864648, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Plm_e, (10, 0, 0.5, &r), -0.18822860717773437500, TEST_TOL0, GSL_SUCCESS); @@ -136,6 +640,7 @@ TEST_SF(s, gsl_sf_legendre_Plm_e, (100, 5, 0.5, &r), 6.617107444248382171e+08, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Plm_e, (100, 5, 0.999, &r), -1.9831610803806212189e+09, TEST_TOL2, GSL_SUCCESS); +#ifndef GSL_DISABLE_DEPRECATED sa = 0; gsl_sf_legendre_Plm_deriv_array(100, 2, -1.0 + 1.0/1125899906842624.0, L, DL); @@ -218,6 +723,8 @@ gsl_test(sa, "gsl_sf_legendre_Plm_deriv_array(100, 5, 0.999)"); s += sa; +#endif /* !GSL_DISABLE_DEPRECATED */ + TEST_SF(s, gsl_sf_legendre_sphPlm_e, (10, 0, -0.5, &r), -0.24332702369300133776, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_sphPlm_e, (10, 0, 0.5, &r), -0.24332702369300133776, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_sphPlm_e, (10, 0, 0.999, &r), 1.2225754122797385990, TEST_TOL1, GSL_SUCCESS); @@ -250,6 +757,8 @@ TEST_SF(s, gsl_sf_legendre_sphPlm_e, (140,135,0.99998689456491752,&r), -6.54265253269093276310395668335e-305, TEST_TOL6, GSL_SUCCESS); #endif +#ifndef GSL_DISABLE_DEPRECATED + sa = 0; gsl_sf_legendre_sphPlm_array(100, 5, 0.5, L); TEST_SF_VAL(sa, L[0], +0.0, -0.22609703187800460722, TEST_TOL1); @@ -337,6 +846,8 @@ gsl_test(sa, "gsl_sf_legendre_sphPlm_deriv_array(100, 5, -1.0 + 2^(-50))"); s += sa; +#endif /* !GSL_DISABLE_DEPRECATED */ + TEST_SF(s, gsl_sf_conicalP_half_e, (0.0, -0.5, &r), 0.8573827581049917129, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_half_e, (0.0, 0.5, &r), 0.8573827581049917129, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_half_e, (0.0, 2.0, &r), 0.6062611623284649811, TEST_TOL0, GSL_SUCCESS); @@ -548,5 +1059,17 @@ TEST_SF(s, gsl_sf_legendre_Ql_e, (1000, 0.5, &r), 0.030105074974005303500, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Ql_e, (1000, 1.1, &r), 1.0757258447825356443e-194, TEST_TOL3, GSL_SUCCESS); + /* test associated legendre functions */ + { + size_t l; + + for (l = 0; l <= 10; ++l) + test_legendre_all(l); + + test_legendre_all(140); + test_legendre_all(1000); + /*test_legendre_all(2700);*/ + } + return s; } diff -Nru gsl-doc-1.16/specfunc/test_mathieu.c gsl-doc-2.3/specfunc/test_mathieu.c --- gsl-doc-1.16/specfunc/test_mathieu.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/test_mathieu.c 2015-11-03 16:21:55.000000000 +0000 @@ -34,149 +34,149 @@ int s = 0; int sa; - TEST_SF(s, gsl_sf_mathieu_ce, (0, 0.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 0.0, 0.0, &r), 0.7071067811865475, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (0, 0.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 0.0, M_PI_2, &r), 0.7071067811865475, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (0, 5.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 5.0, 0.0, &r), 0.04480018165188902, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (0, 5.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 5.0, M_PI_2, &r), 1.334848674698019, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (0, 10.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 10.0, 0.0, &r), 0.007626517570935782, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (0, 10.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 10.0, M_PI_2, &r), 1.468660470712856, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (0, 15.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 15.0, 0.0, &r), 0.001932508315204592, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (0, 15.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 15.0, M_PI_2, &r), 1.550108146686649, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (0, 20.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 20.0, 0.0, &r), 0.0006037438292242197, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (0, 20.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 20.0, M_PI_2, &r), 1.609890857395926, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (0, 25.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 25.0, 0.0, &r), 0.0002158630184146612, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (0, 25.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 25.0, M_PI_2, &r), 1.657510298323475, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (1, 0.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (1, 0.0, 0.0, &r), 1.00000000, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (1, 5.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (1, 5.0, 0.0, &r), 0.2565428793223637, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (1, 10.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (1, 10.0, 0.0, &r), 0.05359874774717657, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (1, 15.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (1, 15.0, 0.0, &r), 0.01504006645382623, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (1, 20.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (1, 20.0, 0.0, &r), 0.005051813764712904, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (1, 25.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (1, 25.0, 0.0, &r), 0.001911051506657645, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_se, (1, 0.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_se_e, (1, 0.0, M_PI_2, &r), 1.0000000, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_se, (1, 5.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_se_e, (1, 5.0, M_PI_2, &r), 1.337433887022345, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_se, (1, 10.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_se_e, (1, 10.0, M_PI_2, &r), 1.468755664102938, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_se, (1, 15.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_se_e, (1, 15.0, M_PI_2, &r), 1.550115074357552, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_se, (1, 20.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_se_e, (1, 20.0, M_PI_2, &r), 1.609891592603772, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_se, (1, 25.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_se_e, (1, 25.0, M_PI_2, &r), 1.657510398374516, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (2, 0.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 0.0, 0.0, &r), 1.00000000, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (2, 0.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 0.0, M_PI_2, &r), -1.00000000, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (2, 5.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 5.0, 0.0, &r), 0.7352943084006845, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (2, 5.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 5.0, M_PI_2, &r), -0.7244881519676682, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (2, 10.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 10.0, 0.0, &r), 0.2458883492913189, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (2, 10.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 10.0, M_PI_2, &r), -0.9267592641263211, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (2, 15.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 15.0, 0.0, &r), 0.07879282784639313, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (2, 15.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 15.0, M_PI_2, &r), -1.019966226030262, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (2, 20.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 20.0, 0.0, &r), 0.02864894314707431, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (2, 20.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 20.0, M_PI_2, &r), -1.075293228779687, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (2, 25.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 25.0, 0.0, &r), 0.0115128663308875, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (2, 25.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 25.0, M_PI_2, &r), -1.116278953295253, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (5, 0.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (5, 0.0, 0.0, &r), 1.00000000, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (5, 5.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (5, 5.0, 0.0, &r), 1.12480725063848, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (5, 10.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (5, 10.0, 0.0, &r), 1.258019941308287, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (5, 15.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (5, 15.0, 0.0, &r), 1.193432230413072, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (5, 20.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (5, 20.0, 0.0, &r), 0.9365755314226215, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (5, 25.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (5, 25.0, 0.0, &r), 0.6106943100506986, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_se, (5, 0.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_se_e, (5, 0.0, M_PI_2, &r), 1.0000000, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_se, (5, 5.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_se_e, (5, 5.0, M_PI_2, &r), 0.9060779302023551, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_se, (5, 10.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_se_e, (5, 10.0, M_PI_2, &r), 0.8460384335355106, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_se, (5, 15.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_se_e, (5, 15.0, M_PI_2, &r), 0.837949340012484, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_se, (5, 20.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_se_e, (5, 20.0, M_PI_2, &r), 0.8635431218533667, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_se, (5, 25.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_se_e, (5, 25.0, M_PI_2, &r), 0.8992683245108413, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (10, 0.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 0.0, 0.0, &r), 1.00000000, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (10, 0.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 0.0, M_PI_2, &r), -1.00000000, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (10, 5.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 5.0, 0.0, &r), 1.025995027089438, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (10, 5.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 5.0, M_PI_2, &r), -0.975347487235964, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (10, 10.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 10.0, 0.0, &r), 1.053815992100935, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (10, 10.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 10.0, M_PI_2, &r), -0.9516453181789554, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (10, 15.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 15.0, 0.0, &r), 1.084106311839221, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (10, 15.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 15.0, M_PI_2, &r), -0.9285480638845388, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (10, 20.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 20.0, 0.0, &r), 1.117788631259397, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (10, 20.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 20.0, M_PI_2, &r), -0.9057107845940974, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (10, 25.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 25.0, 0.0, &r), 1.156239918632239, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (10, 25.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 25.0, M_PI_2, &r), -0.8826919105636903, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (15, 0.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (15, 0.0, 0.0, &r), 1.00000000, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (15, 5.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (15, 5.0, 0.0, &r), 1.011293732529566, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (15, 10.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (15, 10.0, 0.0, &r), 1.022878282438181, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (15, 15.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (15, 15.0, 0.0, &r), 1.034793652236873, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (15, 20.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (15, 20.0, 0.0, &r), 1.047084344162887, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_ce, (15, 25.0, 0.0, &r), + TEST_SF(s, gsl_sf_mathieu_ce_e, (15, 25.0, 0.0, &r), 1.059800441813937, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_se, (15, 0.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_se_e, (15, 0.0, M_PI_2, &r), -1.0000000, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_se, (15, 5.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_se_e, (15, 5.0, M_PI_2, &r), -0.9889607027406357, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_se, (15, 10.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_se_e, (15, 10.0, M_PI_2, &r), -0.9781423471832157, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_se, (15, 15.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_se_e, (15, 15.0, M_PI_2, &r), -0.9675137031854538, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_se, (15, 20.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_se_e, (15, 20.0, M_PI_2, &r), -0.9570452540612817, TEST_SNGL, GSL_SUCCESS); - TEST_SF(s, gsl_sf_mathieu_se, (15, 25.0, M_PI_2, &r), + TEST_SF(s, gsl_sf_mathieu_se_e, (15, 25.0, M_PI_2, &r), -0.9467086958780897, TEST_SNGL, GSL_SUCCESS); work = gsl_sf_mathieu_alloc(NVAL, 20.0); diff -Nru gsl-doc-1.16/specfunc/test_sf.c gsl-doc-2.3/specfunc/test_sf.c --- gsl-doc-1.16/specfunc/test_sf.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/specfunc/test_sf.c 2015-11-03 16:21:55.000000000 +0000 @@ -814,71 +814,71 @@ /* D, argument phi > pi/2 */ - TEST_SF(s, gsl_sf_ellint_D_e, (M_PI/2.0, 0.99, 0, mode, &r), 2.375395076351788975665323192, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (M_PI/2.0, 0.50, 0, mode, &r), 0.8731525818926755496456335628, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (M_PI/2.0, 0.01, 0, mode, &r), 0.7854276176694868932799393751, TEST_TOL0, GSL_SUCCESS); - - TEST_SF(s, gsl_sf_ellint_D_e, (2*M_PI/3.0, 0.99, 0, mode, &r), 4.305885125424644860264320635, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (2*M_PI/3.0, 0.50, 0, mode, &r), 1.418324704155697579394036402, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (2*M_PI/3.0, 0.01, 0, mode, &r), 1.263755353901126149206022061, TEST_TOL0, GSL_SUCCESS); - - TEST_SF(s, gsl_sf_ellint_D_e, (M_PI, 0.99, 0, mode, &r), 4.750790152703577951330646444, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (M_PI, 0.50, 0, mode, &r), 1.746305163785351099291267125, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (M_PI, 0.01, 0, mode, &r), 1.570855235338973786559878750, TEST_TOL0, GSL_SUCCESS); - - TEST_SF(s, gsl_sf_ellint_D_e, (4*M_PI/3, 0.99, 0, mode, &r), 5.195695179982511042396972113, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (4*M_PI/3, 0.50, 0, mode, &r), 2.074285623415004619188497818, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (4*M_PI/3, 0.01, 0, mode, &r), 1.877955116776821423913735408, TEST_TOL0, GSL_SUCCESS); - - TEST_SF(s, gsl_sf_ellint_D_e, (3*M_PI/2.0, 0.99, 0, mode, &r), 7.126185229055366926995969476, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (3*M_PI/2.0, 0.50, 0, mode, &r), 2.619457745678026648936900687, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (3*M_PI/2.0, 0.01, 0, mode, &r), 2.356282853008460679839818125, TEST_TOL0, GSL_SUCCESS); - - TEST_SF(s, gsl_sf_ellint_D_e, (5*M_PI/3, 0.99, 0, mode, &r), 9.056675278128222811594967044, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (5*M_PI/3, 0.50, 0, mode, &r), 3.164629867941048678685303509, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (5*M_PI/3, 0.01, 0, mode, &r), 2.834610589240099935765900794, TEST_TOL0, GSL_SUCCESS); - - TEST_SF(s, gsl_sf_ellint_D_e, (2*M_PI, 0.99, 0, mode, &r), 9.501580305407155902661292832, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (2*M_PI, 0.50, 0, mode, &r), 3.492610327570702198582534249, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (2*M_PI, 0.01, 0, mode, &r), 3.141710470677947573119757500, TEST_TOL0, GSL_SUCCESS); - - TEST_SF(s, gsl_sf_ellint_D_e, (7*M_PI/3.0, 0.99, 0, mode, &r), 9.946485332686088993727618315, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (7*M_PI/3.0, 0.50, 0, mode, &r), 3.820590787200355718479764901, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (7*M_PI/3.0, 0.01, 0, mode, &r), 3.448810352115795210473614120, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (M_PI/2.0, 0.99, mode, &r), 2.375395076351788975665323192, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (M_PI/2.0, 0.50, mode, &r), 0.8731525818926755496456335628, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (M_PI/2.0, 0.01, mode, &r), 0.7854276176694868932799393751, TEST_TOL0, GSL_SUCCESS); + + TEST_SF(s, gsl_sf_ellint_D_e, (2*M_PI/3.0, 0.99, mode, &r), 4.305885125424644860264320635, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (2*M_PI/3.0, 0.50, mode, &r), 1.418324704155697579394036402, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (2*M_PI/3.0, 0.01, mode, &r), 1.263755353901126149206022061, TEST_TOL0, GSL_SUCCESS); + + TEST_SF(s, gsl_sf_ellint_D_e, (M_PI, 0.99, mode, &r), 4.750790152703577951330646444, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (M_PI, 0.50, mode, &r), 1.746305163785351099291267125, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (M_PI, 0.01, mode, &r), 1.570855235338973786559878750, TEST_TOL0, GSL_SUCCESS); + + TEST_SF(s, gsl_sf_ellint_D_e, (4*M_PI/3, 0.99, mode, &r), 5.195695179982511042396972113, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (4*M_PI/3, 0.50, mode, &r), 2.074285623415004619188497818, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (4*M_PI/3, 0.01, mode, &r), 1.877955116776821423913735408, TEST_TOL0, GSL_SUCCESS); + + TEST_SF(s, gsl_sf_ellint_D_e, (3*M_PI/2.0, 0.99, mode, &r), 7.126185229055366926995969476, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (3*M_PI/2.0, 0.50, mode, &r), 2.619457745678026648936900687, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (3*M_PI/2.0, 0.01, mode, &r), 2.356282853008460679839818125, TEST_TOL0, GSL_SUCCESS); + + TEST_SF(s, gsl_sf_ellint_D_e, (5*M_PI/3, 0.99, mode, &r), 9.056675278128222811594967044, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (5*M_PI/3, 0.50, mode, &r), 3.164629867941048678685303509, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (5*M_PI/3, 0.01, mode, &r), 2.834610589240099935765900794, TEST_TOL0, GSL_SUCCESS); + + TEST_SF(s, gsl_sf_ellint_D_e, (2*M_PI, 0.99, mode, &r), 9.501580305407155902661292832, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (2*M_PI, 0.50, mode, &r), 3.492610327570702198582534249, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (2*M_PI, 0.01, mode, &r), 3.141710470677947573119757500, TEST_TOL0, GSL_SUCCESS); + + TEST_SF(s, gsl_sf_ellint_D_e, (7*M_PI/3.0, 0.99, mode, &r), 9.946485332686088993727618315, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (7*M_PI/3.0, 0.50, mode, &r), 3.820590787200355718479764901, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (7*M_PI/3.0, 0.01, mode, &r), 3.448810352115795210473614120, TEST_TOL0, GSL_SUCCESS); /* P, negative argument phi < 0 */ - TEST_SF(s, gsl_sf_ellint_D_e, (-M_PI/2.0, 0.99, 0, mode, &r), -2.375395076351788975665323192, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (-M_PI/2.0, 0.50, 0, mode, &r), -0.8731525818926755496456335628, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (-M_PI/2.0, 0.01, 0, mode, &r), -0.7854276176694868932799393751, TEST_TOL0, GSL_SUCCESS); - - TEST_SF(s, gsl_sf_ellint_D_e, (-2*M_PI/3.0, 0.99, 0, mode, &r), -4.305885125424644860264320635, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (-2*M_PI/3.0, 0.50, 0, mode, &r), -1.418324704155697579394036402, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (-2*M_PI/3.0, 0.01, 0, mode, &r), -1.263755353901126149206022061, TEST_TOL0, GSL_SUCCESS); - - TEST_SF(s, gsl_sf_ellint_D_e, (-M_PI, 0.99, 0, mode, &r), -4.750790152703577951330646444, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (-M_PI, 0.50, 0, mode, &r), -1.746305163785351099291267125, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (-M_PI, 0.01, 0, mode, &r), -1.570855235338973786559878750, TEST_TOL0, GSL_SUCCESS); - - TEST_SF(s, gsl_sf_ellint_D_e, (-4*M_PI/3, 0.99, 0, mode, &r), -5.195695179982511042396972113, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (-4*M_PI/3, 0.50, 0, mode, &r), -2.074285623415004619188497818, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (-4*M_PI/3, 0.01, 0, mode, &r), -1.877955116776821423913735408, TEST_TOL0, GSL_SUCCESS); - - TEST_SF(s, gsl_sf_ellint_D_e, (-3*M_PI/2.0, 0.99, 0, mode, &r), -7.126185229055366926995969476, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (-3*M_PI/2.0, 0.50, 0, mode, &r), -2.619457745678026648936900687, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (-3*M_PI/2.0, 0.01, 0, mode, &r), -2.356282853008460679839818125, TEST_TOL0, GSL_SUCCESS); - - TEST_SF(s, gsl_sf_ellint_D_e, (-5*M_PI/3, 0.99, 0, mode, &r), -9.056675278128222811594967044, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (-5*M_PI/3, 0.50, 0, mode, &r), -3.164629867941048678685303509, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (-5*M_PI/3, 0.01, 0, mode, &r), -2.834610589240099935765900794, TEST_TOL0, GSL_SUCCESS); - - TEST_SF(s, gsl_sf_ellint_D_e, (-2*M_PI, 0.99, 0, mode, &r), -9.501580305407155902661292832, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (-2*M_PI, 0.50, 0, mode, &r), -3.492610327570702198582534249, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (-2*M_PI, 0.01, 0, mode, &r), -3.141710470677947573119757500, TEST_TOL0, GSL_SUCCESS); - - TEST_SF(s, gsl_sf_ellint_D_e, (-7*M_PI/3.0, 0.99, 0, mode, &r), -9.946485332686088993727618315, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (-7*M_PI/3.0, 0.50, 0, mode, &r), -3.820590787200355718479764901, TEST_TOL0, GSL_SUCCESS); - TEST_SF(s, gsl_sf_ellint_D_e, (-7*M_PI/3.0, 0.01, 0, mode, &r), -3.448810352115795210473614120, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (-M_PI/2.0, 0.99, mode, &r), -2.375395076351788975665323192, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (-M_PI/2.0, 0.50, mode, &r), -0.8731525818926755496456335628, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (-M_PI/2.0, 0.01, mode, &r), -0.7854276176694868932799393751, TEST_TOL0, GSL_SUCCESS); + + TEST_SF(s, gsl_sf_ellint_D_e, (-2*M_PI/3.0, 0.99, mode, &r), -4.305885125424644860264320635, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (-2*M_PI/3.0, 0.50, mode, &r), -1.418324704155697579394036402, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (-2*M_PI/3.0, 0.01, mode, &r), -1.263755353901126149206022061, TEST_TOL0, GSL_SUCCESS); + + TEST_SF(s, gsl_sf_ellint_D_e, (-M_PI, 0.99, mode, &r), -4.750790152703577951330646444, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (-M_PI, 0.50, mode, &r), -1.746305163785351099291267125, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (-M_PI, 0.01, mode, &r), -1.570855235338973786559878750, TEST_TOL0, GSL_SUCCESS); + + TEST_SF(s, gsl_sf_ellint_D_e, (-4*M_PI/3, 0.99, mode, &r), -5.195695179982511042396972113, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (-4*M_PI/3, 0.50, mode, &r), -2.074285623415004619188497818, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (-4*M_PI/3, 0.01, mode, &r), -1.877955116776821423913735408, TEST_TOL0, GSL_SUCCESS); + + TEST_SF(s, gsl_sf_ellint_D_e, (-3*M_PI/2.0, 0.99, mode, &r), -7.126185229055366926995969476, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (-3*M_PI/2.0, 0.50, mode, &r), -2.619457745678026648936900687, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (-3*M_PI/2.0, 0.01, mode, &r), -2.356282853008460679839818125, TEST_TOL0, GSL_SUCCESS); + + TEST_SF(s, gsl_sf_ellint_D_e, (-5*M_PI/3, 0.99, mode, &r), -9.056675278128222811594967044, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (-5*M_PI/3, 0.50, mode, &r), -3.164629867941048678685303509, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (-5*M_PI/3, 0.01, mode, &r), -2.834610589240099935765900794, TEST_TOL0, GSL_SUCCESS); + + TEST_SF(s, gsl_sf_ellint_D_e, (-2*M_PI, 0.99, mode, &r), -9.501580305407155902661292832, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (-2*M_PI, 0.50, mode, &r), -3.492610327570702198582534249, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (-2*M_PI, 0.01, mode, &r), -3.141710470677947573119757500, TEST_TOL0, GSL_SUCCESS); + + TEST_SF(s, gsl_sf_ellint_D_e, (-7*M_PI/3.0, 0.99, mode, &r), -9.946485332686088993727618315, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (-7*M_PI/3.0, 0.50, mode, &r), -3.820590787200355718479764901, TEST_TOL0, GSL_SUCCESS); + TEST_SF(s, gsl_sf_ellint_D_e, (-7*M_PI/3.0, 0.01, mode, &r), -3.448810352115795210473614120, TEST_TOL0, GSL_SUCCESS); return s; } diff -Nru gsl-doc-1.16/splinalg/gmres.c gsl-doc-2.3/splinalg/gmres.c --- gsl-doc-1.16/splinalg/gmres.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/splinalg/gmres.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,435 @@ +/* gmres.c + * + * Copyright (C) 2014 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * The code in this module is based on the Householder GMRES + * algorithm described in + * + * [1] H. F. Walker, Implementation of the GMRES method using + * Householder transformations, SIAM J. Sci. Stat. Comput. + * 9(1), 1988. + * + * [2] Y. Saad, Iterative methods for sparse linear systems, + * 2nd edition, SIAM, 2003. + */ + +typedef struct +{ + size_t n; /* size of linear system */ + size_t m; /* dimension of Krylov subspace K_m */ + gsl_vector *r; /* residual vector r = b - A*x */ + gsl_matrix *H; /* Hessenberg matrix n-by-(m+1) */ + gsl_vector *tau; /* householder scalars */ + gsl_vector *y; /* least squares rhs and solution vector */ + + double *c; /* Givens rotations */ + double *s; + + double normr; /* residual norm ||r|| */ +} gmres_state_t; + +static void gmres_free(void *vstate); +static int gmres_iterate(const gsl_spmatrix *A, const gsl_vector *b, + const double tol, gsl_vector *x, void *vstate); + +/* +gmres_alloc() + Allocate a GMRES workspace for solving an n-by-n system A x = b + +Inputs: n - size of system + krylov_m - size of Krylov subspace (ie: number of inner iterations) + if this parameter is 0, the value GSL_MIN(n,10) is + used + +Return: pointer to workspace +*/ + +static void * +gmres_alloc(const size_t n, const size_t m) +{ + gmres_state_t *state; + + if (n == 0) + { + GSL_ERROR_NULL("matrix dimension n must be a positive integer", + GSL_EINVAL); + } + + state = calloc(1, sizeof(gmres_state_t)); + if (!state) + { + GSL_ERROR_NULL("failed to allocate gmres state", GSL_ENOMEM); + } + + state->n = n; + + /* compute size of Krylov subspace */ + if (m == 0) + state->m = GSL_MIN(n, 10); + else + state->m = GSL_MIN(n, m); + + state->r = gsl_vector_alloc(n); + if (!state->r) + { + gmres_free(state); + GSL_ERROR_NULL("failed to allocate r vector", GSL_ENOMEM); + } + + state->H = gsl_matrix_alloc(n, state->m + 1); + if (!state->H) + { + gmres_free(state); + GSL_ERROR_NULL("failed to allocate H matrix", GSL_ENOMEM); + } + + state->tau = gsl_vector_alloc(state->m + 1); + if (!state->tau) + { + gmres_free(state); + GSL_ERROR_NULL("failed to allocate tau vector", GSL_ENOMEM); + } + + state->y = gsl_vector_alloc(state->m + 1); + if (!state->y) + { + gmres_free(state); + GSL_ERROR_NULL("failed to allocate y vector", GSL_ENOMEM); + } + + state->c = malloc(state->m * sizeof(double)); + state->s = malloc(state->m * sizeof(double)); + if (!state->c || !state->s) + { + gmres_free(state); + GSL_ERROR_NULL("failed to allocate Givens vectors", GSL_ENOMEM); + } + + state->normr = 0.0; + + return state; +} /* gmres_alloc() */ + +static void +gmres_free(void *vstate) +{ + gmres_state_t *state = (gmres_state_t *) vstate; + + if (state->r) + gsl_vector_free(state->r); + + if (state->H) + gsl_matrix_free(state->H); + + if (state->tau) + gsl_vector_free(state->tau); + + if (state->y) + gsl_vector_free(state->y); + + if (state->c) + free(state->c); + + if (state->s) + free(state->s); + + free(state); +} /* gmres_free() */ + +/* +gmres_iterate() + Solve A*x = b using GMRES algorithm + +Inputs: A - sparse square matrix + b - right hand side vector + tol - stopping tolerance (see below) + x - (input/output) on input, initial estimate x_0; + on output, solution vector + work - workspace + +Return: +GSL_SUCCESS if converged to solution (solution stored in x). In +this case the following will be true: + +||b - A*x|| <= tol * ||b|| + +GSL_CONTINUE if not yet converged; in this case x contains the +most recent solution vector and calling this function more times +with the input x could result in convergence (ie: restarted GMRES) + +Notes: +1) Based on algorithm 2.2 of (Walker, 1998 [1]) and algorithm 6.10 of +(Saad, 2003 [2]) + +2) On output, work->normr contains ||b - A*x|| +*/ + +static int +gmres_iterate(const gsl_spmatrix *A, const gsl_vector *b, + const double tol, gsl_vector *x, + void *vstate) +{ + const size_t N = A->size1; + gmres_state_t *state = (gmres_state_t *) vstate; + + if (N != A->size2) + { + GSL_ERROR("matrix must be square", GSL_ENOTSQR); + } + else if (N != b->size) + { + GSL_ERROR("matrix does not match right hand side", GSL_EBADLEN); + } + else if (N != x->size) + { + GSL_ERROR("matrix does not match solution vector", GSL_EBADLEN); + } + else if (N != state->n) + { + GSL_ERROR("matrix does not match workspace", GSL_EBADLEN); + } + else + { + int status = GSL_SUCCESS; + const size_t maxit = state->m; + const double normb = gsl_blas_dnrm2(b); /* ||b|| */ + const double reltol = tol * normb; /* tol*||b|| */ + double normr; /* ||r|| */ + size_t m, k; + double tau; /* householder scalar */ + gsl_matrix *H = state->H; /* Hessenberg matrix */ + gsl_vector *r = state->r; /* residual vector */ + gsl_vector *w = state->y; /* least squares RHS */ + gsl_matrix_view Rm; /* R_m = H(1:m,2:m+1) */ + gsl_vector_view ym; /* y(1:m) */ + gsl_vector_view h0 = gsl_matrix_column(H, 0); + + /* + * The Hessenberg matrix will have the following structure: + * + * H = [ ||r_0|| | v_1 v_2 ... v_m ] + * [ u_1 | u_2 u_3 ... u_{m+1} ] + * + * where v_j are the orthonormal vectors spanning the Krylov + * subpsace of length j + 1 and u_{j+1} are the householder + * vectors of length n - j - 1. + * In fact, u_{j+1} has length n - j since u_{j+1}[0] = 1, + * but this 1 is not stored. + */ + gsl_matrix_set_zero(H); + + /* Step 1a: compute r = b - A*x_0 */ + gsl_vector_memcpy(r, b); + gsl_spblas_dgemv(CblasNoTrans, -1.0, A, x, 1.0, r); + + /* Step 1b */ + gsl_vector_memcpy(&h0.vector, r); + tau = gsl_linalg_householder_transform(&h0.vector); + + /* store tau_1 */ + gsl_vector_set(state->tau, 0, tau); + + /* initialize w (stored in state->y) */ + gsl_vector_set_zero(w); + gsl_vector_set(w, 0, gsl_vector_get(&h0.vector, 0)); + + for (m = 1; m <= maxit; ++m) + { + size_t j = m - 1; /* C indexing */ + double c, s; /* Givens rotation */ + + /* v_m */ + gsl_vector_view vm = gsl_matrix_column(H, m); + + /* v_m(m:end) */ + gsl_vector_view vv = gsl_vector_subvector(&vm.vector, j, N - j); + + /* householder vector u_m for projection P_m */ + gsl_vector_view um = gsl_matrix_subcolumn(H, j, j, N - j); + + /* Step 2a: form v_m = P_m e_m = e_m - tau_m w_m */ + gsl_vector_set_zero(&vm.vector); + gsl_vector_memcpy(&vv.vector, &um.vector); + tau = gsl_vector_get(state->tau, j); /* tau_m */ + gsl_vector_scale(&vv.vector, -tau); + gsl_vector_set(&vv.vector, 0, 1.0 - tau); + + /* Step 2a: v_m <- P_1 P_2 ... P_{m-1} v_m */ + for (k = j; k > 0 && k--; ) + { + gsl_vector_view uk = + gsl_matrix_subcolumn(H, k, k, N - k); + gsl_vector_view vk = + gsl_vector_subvector(&vm.vector, k, N - k); + tau = gsl_vector_get(state->tau, k); + gsl_linalg_householder_hv(tau, &uk.vector, &vk.vector); + } + + /* Step 2a: v_m <- A*v_m */ + gsl_spblas_dgemv(CblasNoTrans, 1.0, A, &vm.vector, 0.0, r); + gsl_vector_memcpy(&vm.vector, r); + + /* Step 2a: v_m <- P_m ... P_1 v_m */ + for (k = 0; k <= j; ++k) + { + gsl_vector_view uk = gsl_matrix_subcolumn(H, k, k, N - k); + gsl_vector_view vk = gsl_vector_subvector(&vm.vector, k, N - k); + tau = gsl_vector_get(state->tau, k); + gsl_linalg_householder_hv(tau, &uk.vector, &vk.vector); + } + + /* Steps 2c,2d: find P_{m+1} and set v_m <- P_{m+1} v_m */ + if (m < N) + { + /* householder vector u_{m+1} for projection P_{m+1} */ + gsl_vector_view ump1 = gsl_matrix_subcolumn(H, m, m, N - m); + + tau = gsl_linalg_householder_transform(&ump1.vector); + gsl_vector_set(state->tau, j + 1, tau); + } + + /* Step 2e: v_m <- J_{m-1} ... J_1 v_m */ + for (k = 0; k < j; ++k) + { + gsl_linalg_givens_gv(&vm.vector, k, k + 1, + state->c[k], state->s[k]); + } + + if (m < N) + { + /* Step 2g: find givens rotation J_m for v_m(m:m+1) */ + gsl_linalg_givens(gsl_vector_get(&vm.vector, j), + gsl_vector_get(&vm.vector, j + 1), + &c, &s); + + /* store givens rotation for later use */ + state->c[j] = c; + state->s[j] = s; + + /* Step 2h: v_m <- J_m v_m */ + gsl_linalg_givens_gv(&vm.vector, j, j + 1, c, s); + + /* Step 2h: w <- J_m w */ + gsl_linalg_givens_gv(w, j, j + 1, c, s); + } + + /* + * Step 2i: R_m = [ R_{m-1}, v_m ] - already taken care + * of due to our memory storage scheme + */ + + /* Step 2j: check residual w_{m+1} for convergence */ + normr = fabs(gsl_vector_get(w, j + 1)); + if (normr <= reltol) + { + /* + * method has converged, break out of loop to compute + * update to solution vector x + */ + break; + } + } + + /* + * At this point, we have either converged to a solution or + * completed all maxit iterations. In either case, compute + * an update to the solution vector x and test again for + * convergence. + */ + + /* rewind m if we exceeded maxit iterations */ + if (m > maxit) + m--; + + /* Step 3a: solve triangular system R_m y_m = w, in place */ + Rm = gsl_matrix_submatrix(H, 0, 1, m, m); + ym = gsl_vector_subvector(w, 0, m); + gsl_blas_dtrsv(CblasUpper, CblasNoTrans, CblasNonUnit, + &Rm.matrix, &ym.vector); + + /* + * Step 3b: update solution vector x; the loop below + * uses a different but equivalent formulation from + * Saad, algorithm 6.10, step 14; store Krylov projection + * V_m y_m in 'r' + */ + gsl_vector_set_zero(r); + for (k = m; k > 0 && k--; ) + { + double ymk = gsl_vector_get(&ym.vector, k); + gsl_vector_view uk = gsl_matrix_subcolumn(H, k, k, N - k); + gsl_vector_view rk = gsl_vector_subvector(r, k, N - k); + + /* r <- n_k e_k + r */ + gsl_vector_set(r, k, gsl_vector_get(r, k) + ymk); + + /* r <- P_k r */ + tau = gsl_vector_get(state->tau, k); + gsl_linalg_householder_hv(tau, &uk.vector, &rk.vector); + } + + /* x <- x + V_m y_m */ + gsl_vector_add(x, r); + + /* compute new residual r = b - A*x */ + gsl_vector_memcpy(r, b); + gsl_spblas_dgemv(CblasNoTrans, -1.0, A, x, 1.0, r); + normr = gsl_blas_dnrm2(r); + + if (normr <= reltol) + status = GSL_SUCCESS; /* converged */ + else + status = GSL_CONTINUE; /* not yet converged */ + + /* store residual norm */ + state->normr = normr; + + return status; + } +} /* gmres_iterate() */ + +static double +gmres_normr(const void *vstate) +{ + const gmres_state_t *state = (const gmres_state_t *) vstate; + return state->normr; +} /* gmres_normr() */ + +static const gsl_splinalg_itersolve_type gmres_type = +{ + "gmres", + &gmres_alloc, + &gmres_iterate, + &gmres_normr, + &gmres_free +}; + +const gsl_splinalg_itersolve_type * gsl_splinalg_itersolve_gmres = + &gmres_type; diff -Nru gsl-doc-1.16/splinalg/gsl_splinalg.h gsl-doc-2.3/splinalg/gsl_splinalg.h --- gsl-doc-1.16/splinalg/gsl_splinalg.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/splinalg/gsl_splinalg.h 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,79 @@ +/* gsl_splinalg.h + * + * Copyright (C) 2012-2014 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_SPLINALG_H__ +#define __GSL_SPLINALG_H__ + +#include +#include +#include +#include +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +/* iteration solver type */ +typedef struct +{ + const char *name; + void * (*alloc) (const size_t n, const size_t m); + int (*iterate) (const gsl_spmatrix *A, const gsl_vector *b, + const double tol, gsl_vector *x, void *); + double (*normr)(const void *); + void (*free) (void *); +} gsl_splinalg_itersolve_type; + +typedef struct +{ + const gsl_splinalg_itersolve_type * type; + double normr; /* current residual norm || b - A x || */ + void * state; +} gsl_splinalg_itersolve; + +/* available types */ +GSL_VAR const gsl_splinalg_itersolve_type * gsl_splinalg_itersolve_gmres; + +/* + * Prototypes + */ +gsl_splinalg_itersolve * +gsl_splinalg_itersolve_alloc(const gsl_splinalg_itersolve_type *T, + const size_t n, const size_t m); +void gsl_splinalg_itersolve_free(gsl_splinalg_itersolve *w); +const char *gsl_splinalg_itersolve_name(const gsl_splinalg_itersolve *w); +int gsl_splinalg_itersolve_iterate(const gsl_spmatrix *A, + const gsl_vector *b, + const double tol, gsl_vector *x, + gsl_splinalg_itersolve *w); +double gsl_splinalg_itersolve_normr(const gsl_splinalg_itersolve *w); + +__END_DECLS + +#endif /* __GSL_SPLINALG_H__ */ diff -Nru gsl-doc-1.16/splinalg/itersolve.c gsl-doc-2.3/splinalg/itersolve.c --- gsl-doc-1.16/splinalg/itersolve.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/splinalg/itersolve.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,90 @@ +/* itersolve.c + * + * Copyright (C) 2014 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +gsl_splinalg_itersolve * +gsl_splinalg_itersolve_alloc(const gsl_splinalg_itersolve_type *T, + const size_t n, const size_t m) +{ + gsl_splinalg_itersolve *w; + + w = calloc(1, sizeof(gsl_splinalg_itersolve)); + if (w == NULL) + { + GSL_ERROR_NULL("failed to allocate space for itersolve struct", + GSL_ENOMEM); + } + + w->type = T; + w->normr = 0.0; + + w->state = w->type->alloc(n, m); + if (w->state == NULL) + { + gsl_splinalg_itersolve_free(w); + GSL_ERROR_NULL("failed to allocate space for itersolve state", + GSL_ENOMEM); + } + + return w; +} /* gsl_splinalg_itersolve_alloc() */ + +void +gsl_splinalg_itersolve_free(gsl_splinalg_itersolve *w) +{ + RETURN_IF_NULL(w); + + if (w->state) + w->type->free(w->state); + + free(w); +} + +const char * +gsl_splinalg_itersolve_name(const gsl_splinalg_itersolve *w) +{ + return w->type->name; +} + +int +gsl_splinalg_itersolve_iterate(const gsl_spmatrix *A, const gsl_vector *b, + const double tol, gsl_vector *x, + gsl_splinalg_itersolve *w) +{ + int status = w->type->iterate(A, b, tol, x, w->state); + + /* store current residual */ + w->normr = w->type->normr(w->state); + + return status; +} + +double +gsl_splinalg_itersolve_normr(const gsl_splinalg_itersolve *w) +{ + return w->normr; +} diff -Nru gsl-doc-1.16/splinalg/Makefile.am gsl-doc-2.3/splinalg/Makefile.am --- gsl-doc-1.16/splinalg/Makefile.am 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/splinalg/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,15 @@ +noinst_LTLIBRARIES = libgslsplinalg.la + +check_PROGRAMS = test + +pkginclude_HEADERS = gsl_splinalg.h + +libgslsplinalg_la_SOURCES = itersolve.c gmres.c + +AM_CPPFLAGS = -I$(top_srcdir) + +TESTS = $(check_PROGRAMS) + +test_LDADD = libgslsplinalg.la ../spmatrix/libgslspmatrix.la ../spblas/libgslspblas.la ../test/libgsltest.la ../linalg/libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../sys/libgslsys.la ../utils/libutils.la ../rng/libgslrng.la ../err/libgslerr.la + +test_SOURCES = test.c diff -Nru gsl-doc-1.16/splinalg/Makefile.in gsl-doc-2.3/splinalg/Makefile.in --- gsl-doc-1.16/splinalg/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/splinalg/Makefile.in 2016-12-09 00:04:23.000000000 +0000 @@ -0,0 +1,1029 @@ +# Makefile.in generated by automake 1.13.4 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +check_PROGRAMS = test$(EXEEXT) +subdir = splinalg +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp \ + $(pkginclude_HEADERS) $(top_srcdir)/test-driver +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libgslsplinalg_la_LIBADD = +am_libgslsplinalg_la_OBJECTS = itersolve.lo gmres.lo +libgslsplinalg_la_OBJECTS = $(am_libgslsplinalg_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +am_test_OBJECTS = test.$(OBJEXT) +test_OBJECTS = $(am_test_OBJECTS) +test_DEPENDENCIES = libgslsplinalg.la ../spmatrix/libgslspmatrix.la \ + ../spblas/libgslspblas.la ../test/libgsltest.la \ + ../linalg/libgsllinalg.la ../blas/libgslblas.la \ + ../cblas/libgslcblas.la ../matrix/libgslmatrix.la \ + ../vector/libgslvector.la ../block/libgslblock.la \ + ../sys/libgslsys.la ../utils/libutils.la ../rng/libgslrng.la \ + ../err/libgslerr.la +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libgslsplinalg_la_SOURCES) $(test_SOURCES) +DIST_SOURCES = $(libgslsplinalg_la_SOURCES) $(test_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(pkgincludedir)" +HEADERS = $(pkginclude_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +AM_RECURSIVE_TARGETS = check recheck +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ +GSL_LIBM = @GSL_LIBM@ +GSL_LIBS = @GSL_LIBS@ +GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ +GSL_LT_VERSION = @GSL_LT_VERSION@ +GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ +GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ +HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ +HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ +HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ +HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ +HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ +HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ +HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ +HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ +HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ +HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ +HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ +HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ +HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ +HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ +HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ +HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ +HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBM = @LIBM@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +noinst_LTLIBRARIES = libgslsplinalg.la +pkginclude_HEADERS = gsl_splinalg.h +libgslsplinalg_la_SOURCES = itersolve.c gmres.c +AM_CPPFLAGS = -I$(top_srcdir) +TESTS = $(check_PROGRAMS) +test_LDADD = libgslsplinalg.la ../spmatrix/libgslspmatrix.la ../spblas/libgslspblas.la ../test/libgsltest.la ../linalg/libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../sys/libgslsys.la ../utils/libutils.la ../rng/libgslrng.la ../err/libgslerr.la +test_SOURCES = test.c +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu splinalg/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu splinalg/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libgslsplinalg.la: $(libgslsplinalg_la_OBJECTS) $(libgslsplinalg_la_DEPENDENCIES) $(EXTRA_libgslsplinalg_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(libgslsplinalg_la_OBJECTS) $(libgslsplinalg_la_LIBADD) $(LIBS) + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) + @rm -f test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gmres.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/itersolve.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgincludeHEADERS: $(pkginclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ + done + +uninstall-pkgincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + else \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all $(check_PROGRAMS) + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +test.log: test$(EXEEXT) + @p='test$(EXEEXT)'; \ + b='test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(pkgincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ + clean-noinstLTLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pkgincludeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pkgincludeHEADERS + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ + clean-checkPROGRAMS clean-generic clean-libtool \ + clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgincludeHEADERS \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + recheck tags tags-am uninstall uninstall-am \ + uninstall-pkgincludeHEADERS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -Nru gsl-doc-1.16/splinalg/test.c gsl-doc-2.3/splinalg/test.c --- gsl-doc-1.16/splinalg/test.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/splinalg/test.c 2015-11-03 16:21:55.000000000 +0000 @@ -0,0 +1,372 @@ +/* test.c + * + * Copyright (C) 2012-2014 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* +create_random_sparse() + Create a random sparse matrix with approximately +M*N*density non-zero entries + +Inputs: M - number of rows + N - number of columns + density - sparse density \in [0,1] + 0 = no non-zero entries + 1 = all m*n entries are filled + r - random number generator + +Return: pointer to sparse matrix in triplet format (must be freed by caller) + +Notes: +1) non-zero matrix entries are uniformly distributed in [0,1] +*/ + +static gsl_spmatrix * +create_random_sparse(const size_t M, const size_t N, const double density, + const gsl_rng *r) +{ + size_t nnzwanted = (size_t) floor(M * N * GSL_MIN(density, 1.0)); + gsl_spmatrix *m = gsl_spmatrix_alloc_nzmax(M, N, + nnzwanted, + GSL_SPMATRIX_TRIPLET); + size_t i; + + /* set diagonal entries to try to ensure non-singularity */ + for (i = 0; i < GSL_MIN(M, N); ++i) + { + double x = gsl_rng_uniform(r); + gsl_spmatrix_set(m, i, i, x); + } + + while (gsl_spmatrix_nnz(m) < nnzwanted) + { + /* generate a random row and column */ + size_t i = gsl_rng_uniform(r) * M; + size_t j = gsl_rng_uniform(r) * N; + + /* generate random m_{ij} and add it */ + double x = gsl_rng_uniform(r); + gsl_spmatrix_set(m, i, j, x); + } + + return m; +} /* create_random_sparse() */ + +static void +create_random_vector(gsl_vector *v, const gsl_rng *r) +{ + size_t i; + + for (i = 0; i < v->size; ++i) + { + double x = gsl_rng_uniform(r); + gsl_vector_set(v, i, x); + } +} /* create_random_vector() */ + +/* +test_poisson() + Solve u''(x) = -pi^2 sin(pi*x), u(x) = sin(pi*x) + epsrel is the relative error threshold with the exact solution +*/ +static void +test_poisson(const size_t N, const double epsrel, const int compress) +{ + const gsl_splinalg_itersolve_type *T = gsl_splinalg_itersolve_gmres; + const size_t n = N - 2; /* subtract 2 to exclude boundaries */ + const double h = 1.0 / (N - 1.0); /* grid spacing */ + const double tol = 1.0e-9; + const size_t max_iter = 10; + size_t iter = 0; + gsl_spmatrix *A = gsl_spmatrix_alloc(n ,n); /* triplet format */ + gsl_spmatrix *B; + gsl_vector *b = gsl_vector_alloc(n); /* right hand side vector */ + gsl_vector *u = gsl_vector_calloc(n); /* solution vector, u0 = 0 */ + gsl_splinalg_itersolve *w = gsl_splinalg_itersolve_alloc(T, n, 0); + const char *desc = gsl_splinalg_itersolve_name(w); + size_t i; + int status; + + /* construct the sparse matrix for the finite difference equation */ + + /* first row of matrix */ + gsl_spmatrix_set(A, 0, 0, -2.0); + gsl_spmatrix_set(A, 0, 1, 1.0); + + /* loop over interior grid points */ + for (i = 1; i < n - 1; ++i) + { + gsl_spmatrix_set(A, i, i + 1, 1.0); + gsl_spmatrix_set(A, i, i, -2.0); + gsl_spmatrix_set(A, i, i - 1, 1.0); + } + + /* last row of matrix */ + gsl_spmatrix_set(A, n - 1, n - 1, -2.0); + gsl_spmatrix_set(A, n - 1, n - 2, 1.0); + + /* scale by h^2 */ + gsl_spmatrix_scale(A, 1.0 / (h * h)); + + /* construct right hand side vector */ + for (i = 0; i < n; ++i) + { + double xi = (i + 1) * h; + double bi = -M_PI * M_PI * sin(M_PI * xi); + gsl_vector_set(b, i, bi); + } + + if (compress) + B = gsl_spmatrix_compcol(A); + else + B = A; + + /* solve the system */ + do + { + status = gsl_splinalg_itersolve_iterate(B, b, tol, u, w); + } + while (status == GSL_CONTINUE && ++iter < max_iter); + + gsl_test(status, "%s poisson status s=%d N=%zu", desc, status, N); + + /* check solution against analytic */ + for (i = 0; i < n; ++i) + { + double xi = (i + 1) * h; + double u_gsl = gsl_vector_get(u, i); + double u_exact = sin(M_PI * xi); + + gsl_test_rel(u_gsl, u_exact, epsrel, "%s poisson N=%zu i=%zu", + desc, N, i); + } + + /* check that the residual satisfies ||r|| <= tol*||b|| */ + { + gsl_vector *r = gsl_vector_alloc(n); + double normr, normb; + + gsl_vector_memcpy(r, b); + gsl_spblas_dgemv(CblasNoTrans, -1.0, A, u, 1.0, r); + + normr = gsl_blas_dnrm2(r); + normb = gsl_blas_dnrm2(b); + + status = (normr <= tol*normb) != 1; + gsl_test(status, "%s poisson residual N=%zu normr=%.12e normb=%.12e", + desc, N, normr, normb); + + gsl_vector_free(r); + } + + gsl_splinalg_itersolve_free(w); + gsl_spmatrix_free(A); + gsl_vector_free(b); + gsl_vector_free(u); + + if (compress) + gsl_spmatrix_free(B); +} /* test_poisson() */ + +/* +test_toeplitz() + Test Toeplitz matrix T = A + B + C where: +A = diag(a,-1) +B = diag(b) +C = diag(c,1) + +rhs = ones(n,1) +*/ + +static void +test_toeplitz(const size_t N, const double a, const double b, + const double c) +{ + int status; + const double tol = 1.0e-10; + const size_t max_iter = 10; + const gsl_splinalg_itersolve_type *T = gsl_splinalg_itersolve_gmres; + const char *desc; + gsl_spmatrix *A; + gsl_vector *rhs, *x; + gsl_splinalg_itersolve *w; + size_t i, iter = 0; + + if (N <= 1) + return; + + A = gsl_spmatrix_alloc(N ,N); + rhs = gsl_vector_alloc(N); + x = gsl_vector_calloc(N); + w = gsl_splinalg_itersolve_alloc(T, N, 0); + desc = gsl_splinalg_itersolve_name(w); + + /* first row */ + gsl_spmatrix_set(A, 0, 0, b); + gsl_spmatrix_set(A, 0, 1, c); + + /* interior rows */ + for (i = 1; i < N - 1; ++i) + { + gsl_spmatrix_set(A, i, i - 1, a); + gsl_spmatrix_set(A, i, i, b); + gsl_spmatrix_set(A, i, i + 1, c); + } + + /* last row */ + gsl_spmatrix_set(A, N - 1, N - 2, a); + gsl_spmatrix_set(A, N - 1, N - 1, b); + + /* set rhs vector */ + gsl_vector_set_all(rhs, 1.0); + + /* solve the system */ + do + { + status = gsl_splinalg_itersolve_iterate(A, rhs, tol, x, w); + } + while (status == GSL_CONTINUE && ++iter < max_iter); + + gsl_test(status, "%s toeplitz status s=%d N=%zu a=%f b=%f c=%f", + desc, status, N, a, b, c); + + /* check that the residual satisfies ||r|| <= tol*||b|| */ + { + gsl_vector *r = gsl_vector_alloc(N); + double normr, normb; + + gsl_vector_memcpy(r, rhs); + gsl_spblas_dgemv(CblasNoTrans, -1.0, A, x, 1.0, r); + + normr = gsl_blas_dnrm2(r); + normb = gsl_blas_dnrm2(rhs); + + status = (normr <= tol*normb) != 1; + gsl_test(status, "%s toeplitz residual N=%zu a=%f b=%f c=%f normr=%.12e normb=%.12e", + desc, N, a, b, c, normr, normb); + + gsl_vector_free(r); + } + + gsl_vector_free(x); + gsl_vector_free(rhs); + gsl_spmatrix_free(A); + gsl_splinalg_itersolve_free(w); +} /* test_toeplitz() */ + +static void +test_random(const size_t N, const gsl_rng *r, const int compress) +{ + const gsl_splinalg_itersolve_type *T = gsl_splinalg_itersolve_gmres; + const double tol = 1.0e-8; + int status; + gsl_spmatrix *A = create_random_sparse(N, N, 0.3, r); + gsl_spmatrix *B; + gsl_vector *b = gsl_vector_alloc(N); + gsl_vector *x = gsl_vector_calloc(N); + + /* these random matrices require all N iterations to converge */ + gsl_splinalg_itersolve *w = gsl_splinalg_itersolve_alloc(T, N, N); + + const char *desc = gsl_splinalg_itersolve_name(w); + + create_random_vector(b, r); + + if (compress) + B = gsl_spmatrix_compcol(A); + else + B = A; + + status = gsl_splinalg_itersolve_iterate(B, b, tol, x, w); + gsl_test(status, "%s random status s=%d N=%zu", desc, status, N); + + /* check that the residual satisfies ||r|| <= tol*||b|| */ + { + gsl_vector *res = gsl_vector_alloc(N); + double normr, normb; + + gsl_vector_memcpy(res, b); + gsl_spblas_dgemv(CblasNoTrans, -1.0, A, x, 1.0, res); + + normr = gsl_blas_dnrm2(res); + normb = gsl_blas_dnrm2(b); + + status = (normr <= tol*normb) != 1; + gsl_test(status, "%s random residual N=%zu normr=%.12e normb=%.12e", + desc, N, normr, normb); + + gsl_vector_free(res); + } + + gsl_spmatrix_free(A); + gsl_vector_free(b); + gsl_vector_free(x); + gsl_splinalg_itersolve_free(w); + + if (compress) + gsl_spmatrix_free(B); +} /* test_random() */ + +int +main() +{ + gsl_rng *r = gsl_rng_alloc(gsl_rng_default); + size_t n; + + test_poisson(7, 1.0e-1, 0); + test_poisson(7, 1.0e-1, 1); + + test_poisson(543, 1.0e-5, 0); + test_poisson(543, 1.0e-5, 1); + + test_poisson(1000, 1.0e-6, 0); + test_poisson(1000, 1.0e-6, 1); + + test_poisson(5000, 1.0e-7, 0); + test_poisson(5000, 1.0e-7, 1); + + test_toeplitz(15, 0.01, 1.0, 0.01); + test_toeplitz(15, 1.0, 1.0, 0.01); + test_toeplitz(50, 1.0, 2.0, 0.01); + test_toeplitz(1000, 0.5, 1.0, 0.01); + + for (n = 1; n <= 100; ++n) + { + test_random(n, r, 0); + test_random(n, r, 1); + } + + gsl_rng_free(r); + + exit (gsl_test_summary()); +} /* main() */ diff -Nru gsl-doc-1.16/spmatrix/avl.c gsl-doc-2.3/spmatrix/avl.c --- gsl-doc-1.16/spmatrix/avl.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/spmatrix/avl.c 2016-07-02 23:02:41.000000000 +0000 @@ -0,0 +1,611 @@ +/* avl.c + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004 Free Software + * Foundation, Inc. + * Copyright (C) 2014 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* + * This code is originally from GNU libavl. The memory management + * was slightly modified for use with preallocating GSL sparse matrices + * + * The allocator->libavl_malloc function is called only for creating + * a new avl_node (tree node). This allows GSL to preallocate some number + * of avl_node structs and then return pointers to them while the tree + * is being assembled, avoiding multiple malloc calls + */ + +#include +#include +#include +#include + +/* Function types. */ +typedef int avl_comparison_func (const void *avl_a, const void *avl_b, + void *avl_param); +typedef void avl_item_func (void *avl_item, void *avl_param); +typedef void *avl_copy_func (void *avl_item, void *avl_param); + +/* Memory allocator. */ +struct libavl_allocator + { + void *(*libavl_malloc) (size_t libavl_size, void *param); + void (*libavl_free) (void *libavl_block, void *param); + }; + +/* Default memory allocator. */ +static struct libavl_allocator avl_allocator_default; +static void *avl_malloc (size_t, void *param); +static void avl_free (void *, void *param); + +/* Maximum AVL tree height. */ +#ifndef AVL_MAX_HEIGHT +#define AVL_MAX_HEIGHT 92 +#endif + +/* An AVL tree node. */ +struct avl_node + { + struct avl_node *avl_link[2]; /* Subtrees. */ + void *avl_data; /* Pointer to data. */ + signed char avl_balance; /* Balance factor. */ + }; + +/* Tree data structure. */ +struct avl_table + { + struct avl_node *avl_root; /* Tree's root. */ + avl_comparison_func *avl_compare; /* Comparison function. */ + void *avl_param; /* Extra argument to |avl_compare|. */ + struct libavl_allocator *avl_alloc; /* Memory allocator. */ + size_t avl_count; /* Number of items in tree. */ + unsigned long avl_generation; /* Generation number. */ + }; + +/* Table functions. */ +static struct avl_table *avl_create (avl_comparison_func *, void *, + struct libavl_allocator *); +static struct avl_table *avl_copy (const struct avl_table *, avl_copy_func *, + avl_item_func *, struct libavl_allocator *); +static void avl_empty (struct avl_table *, avl_item_func *); +static void avl_destroy (struct avl_table *, avl_item_func *); +static void **avl_probe (struct avl_table *, void *); +static void *avl_insert (struct avl_table *, void *); +static void *avl_replace (struct avl_table *, void *); +static void *avl_delete (struct avl_table *, const void *); +static void *avl_find (const struct avl_table *, const void *); + +/* Creates and returns a new table + with comparison function |compare| using parameter |param| + and memory allocator |allocator|. + Returns |NULL| if memory allocation failed. */ +static struct avl_table * +avl_create (avl_comparison_func *compare, void *param, + struct libavl_allocator *allocator) +{ + struct avl_table *tree; + + if (allocator == NULL) + allocator = &avl_allocator_default; + + /*tree = allocator->libavl_malloc (allocator, sizeof *tree);*/ + tree = malloc(sizeof *tree); + if (tree == NULL) + return NULL; + + tree->avl_root = NULL; + tree->avl_compare = compare; + tree->avl_param = param; + tree->avl_alloc = allocator; + tree->avl_count = 0; + tree->avl_generation = 0; + + return tree; +} + +/* Search |tree| for an item matching |item|, and return it if found. + Otherwise return |NULL|. */ +static void * +avl_find (const struct avl_table *tree, const void *item) +{ + const struct avl_node *p; + + for (p = tree->avl_root; p != NULL; ) + { + int cmp = tree->avl_compare (item, p->avl_data, tree->avl_param); + + if (cmp < 0) + p = p->avl_link[0]; + else if (cmp > 0) + p = p->avl_link[1]; + else /* |cmp == 0| */ + return p->avl_data; + } + + return NULL; +} + +/* Inserts |item| into |tree| and returns a pointer to |item|'s address. + If a duplicate item is found in the tree, + returns a pointer to the duplicate without inserting |item|. + Returns |NULL| in case of memory allocation failure. */ +static void ** +avl_probe (struct avl_table *tree, void *item) +{ + struct avl_node *y, *z; /* Top node to update balance factor, and parent. */ + struct avl_node *p, *q; /* Iterator, and parent. */ + struct avl_node *n; /* Newly inserted node. */ + struct avl_node *w; /* New root of rebalanced subtree. */ + int dir; /* Direction to descend. */ + + unsigned char da[AVL_MAX_HEIGHT]; /* Cached comparison results. */ + int k = 0; /* Number of cached results. */ + + z = (struct avl_node *) &tree->avl_root; + y = tree->avl_root; + dir = 0; + for (q = z, p = y; p != NULL; q = p, p = p->avl_link[dir]) + { + int cmp = tree->avl_compare (item, p->avl_data, tree->avl_param); + if (cmp == 0) + return &p->avl_data; + + if (p->avl_balance != 0) + z = q, y = p, k = 0; + da[k++] = dir = cmp > 0; + } + + n = q->avl_link[dir] = + tree->avl_alloc->libavl_malloc (sizeof *n, tree->avl_param); + if (n == NULL) + return NULL; + + tree->avl_count++; + n->avl_data = item; + n->avl_link[0] = n->avl_link[1] = NULL; + n->avl_balance = 0; + if (y == NULL) + return &n->avl_data; + + for (p = y, k = 0; p != n; p = p->avl_link[da[k]], k++) + if (da[k] == 0) + p->avl_balance--; + else + p->avl_balance++; + + if (y->avl_balance == -2) + { + struct avl_node *x = y->avl_link[0]; + if (x->avl_balance == -1) + { + w = x; + y->avl_link[0] = x->avl_link[1]; + x->avl_link[1] = y; + x->avl_balance = y->avl_balance = 0; + } + else + { + w = x->avl_link[1]; + x->avl_link[1] = w->avl_link[0]; + w->avl_link[0] = x; + y->avl_link[0] = w->avl_link[1]; + w->avl_link[1] = y; + if (w->avl_balance == -1) + x->avl_balance = 0, y->avl_balance = +1; + else if (w->avl_balance == 0) + x->avl_balance = y->avl_balance = 0; + else /* |w->avl_balance == +1| */ + x->avl_balance = -1, y->avl_balance = 0; + w->avl_balance = 0; + } + } + else if (y->avl_balance == +2) + { + struct avl_node *x = y->avl_link[1]; + if (x->avl_balance == +1) + { + w = x; + y->avl_link[1] = x->avl_link[0]; + x->avl_link[0] = y; + x->avl_balance = y->avl_balance = 0; + } + else + { + w = x->avl_link[0]; + x->avl_link[0] = w->avl_link[1]; + w->avl_link[1] = x; + y->avl_link[1] = w->avl_link[0]; + w->avl_link[0] = y; + if (w->avl_balance == +1) + x->avl_balance = 0, y->avl_balance = -1; + else if (w->avl_balance == 0) + x->avl_balance = y->avl_balance = 0; + else /* |w->avl_balance == -1| */ + x->avl_balance = +1, y->avl_balance = 0; + w->avl_balance = 0; + } + } + else + return &n->avl_data; + z->avl_link[y != z->avl_link[0]] = w; + + tree->avl_generation++; + return &n->avl_data; +} + +/* Inserts |item| into |table|. + Returns |NULL| if |item| was successfully inserted + or if a memory allocation error occurred. + Otherwise, returns the duplicate item. */ +static void * +avl_insert (struct avl_table *table, void *item) +{ + void **p = avl_probe (table, item); + return p == NULL || *p == item ? NULL : *p; +} + +/* Inserts |item| into |table|, replacing any duplicate item. + Returns |NULL| if |item| was inserted without replacing a duplicate, + or if a memory allocation error occurred. + Otherwise, returns the item that was replaced. */ +static void * +avl_replace (struct avl_table *table, void *item) +{ + void **p = avl_probe (table, item); + if (p == NULL || *p == item) + return NULL; + else + { + void *r = *p; + *p = item; + return r; + } +} + +/* Deletes from |tree| and returns an item matching |item|. + Returns a null pointer if no matching item found. */ +static void * +avl_delete (struct avl_table *tree, const void *item) +{ + /* Stack of nodes. */ + struct avl_node *pa[AVL_MAX_HEIGHT]; /* Nodes. */ + unsigned char da[AVL_MAX_HEIGHT]; /* |avl_link[]| indexes. */ + int k; /* Stack pointer. */ + + struct avl_node *p; /* Traverses tree to find node to delete. */ + int cmp; /* Result of comparison between |item| and |p|. */ + + k = 0; + p = (struct avl_node *) &tree->avl_root; + for (cmp = -1; cmp != 0; + cmp = tree->avl_compare (item, p->avl_data, tree->avl_param)) + { + int dir = cmp > 0; + + pa[k] = p; + da[k++] = dir; + + p = p->avl_link[dir]; + if (p == NULL) + return NULL; + } + item = p->avl_data; + + if (p->avl_link[1] == NULL) + pa[k - 1]->avl_link[da[k - 1]] = p->avl_link[0]; + else + { + struct avl_node *r = p->avl_link[1]; + if (r->avl_link[0] == NULL) + { + r->avl_link[0] = p->avl_link[0]; + r->avl_balance = p->avl_balance; + pa[k - 1]->avl_link[da[k - 1]] = r; + da[k] = 1; + pa[k++] = r; + } + else + { + struct avl_node *s; + int j = k++; + + for (;;) + { + da[k] = 0; + pa[k++] = r; + s = r->avl_link[0]; + if (s->avl_link[0] == NULL) + break; + + r = s; + } + + s->avl_link[0] = p->avl_link[0]; + r->avl_link[0] = s->avl_link[1]; + s->avl_link[1] = p->avl_link[1]; + s->avl_balance = p->avl_balance; + + pa[j - 1]->avl_link[da[j - 1]] = s; + da[j] = 1; + pa[j] = s; + } + } + + tree->avl_alloc->libavl_free (p, tree->avl_param); + + while (--k > 0) + { + struct avl_node *y = pa[k]; + + if (da[k] == 0) + { + y->avl_balance++; + if (y->avl_balance == +1) + break; + else if (y->avl_balance == +2) + { + struct avl_node *x = y->avl_link[1]; + if (x->avl_balance == -1) + { + struct avl_node *w; + w = x->avl_link[0]; + x->avl_link[0] = w->avl_link[1]; + w->avl_link[1] = x; + y->avl_link[1] = w->avl_link[0]; + w->avl_link[0] = y; + if (w->avl_balance == +1) + x->avl_balance = 0, y->avl_balance = -1; + else if (w->avl_balance == 0) + x->avl_balance = y->avl_balance = 0; + else /* |w->avl_balance == -1| */ + x->avl_balance = +1, y->avl_balance = 0; + w->avl_balance = 0; + pa[k - 1]->avl_link[da[k - 1]] = w; + } + else + { + y->avl_link[1] = x->avl_link[0]; + x->avl_link[0] = y; + pa[k - 1]->avl_link[da[k - 1]] = x; + if (x->avl_balance == 0) + { + x->avl_balance = -1; + y->avl_balance = +1; + break; + } + else + x->avl_balance = y->avl_balance = 0; + } + } + } + else + { + y->avl_balance--; + if (y->avl_balance == -1) + break; + else if (y->avl_balance == -2) + { + struct avl_node *x = y->avl_link[0]; + if (x->avl_balance == +1) + { + struct avl_node *w; + w = x->avl_link[1]; + x->avl_link[1] = w->avl_link[0]; + w->avl_link[0] = x; + y->avl_link[0] = w->avl_link[1]; + w->avl_link[1] = y; + if (w->avl_balance == -1) + x->avl_balance = 0, y->avl_balance = +1; + else if (w->avl_balance == 0) + x->avl_balance = y->avl_balance = 0; + else /* |w->avl_balance == +1| */ + x->avl_balance = -1, y->avl_balance = 0; + w->avl_balance = 0; + pa[k - 1]->avl_link[da[k - 1]] = w; + } + else + { + y->avl_link[0] = x->avl_link[1]; + x->avl_link[1] = y; + pa[k - 1]->avl_link[da[k - 1]] = x; + if (x->avl_balance == 0) + { + x->avl_balance = +1; + y->avl_balance = -1; + break; + } + else + x->avl_balance = y->avl_balance = 0; + } + } + } + } + + tree->avl_count--; + tree->avl_generation++; + return (void *) item; +} + +/* Destroys |new| with |avl_destroy (new, destroy)|, + first setting right links of nodes in |stack| within |new| + to null pointers to avoid touching uninitialized data. */ +static void +copy_error_recovery (struct avl_node **stack, int height, + struct avl_table *new, avl_item_func *destroy) +{ + for (; height > 2; height -= 2) + stack[height - 1]->avl_link[1] = NULL; + avl_destroy (new, destroy); +} + +/* Copies |org| to a newly created tree, which is returned. + If |copy != NULL|, each data item in |org| is first passed to |copy|, + and the return values are inserted into the tree, + with |NULL| return values taken as indications of failure. + On failure, destroys the partially created new tree, + applying |destroy|, if non-null, to each item in the new tree so far, + and returns |NULL|. + If |allocator != NULL|, it is used for allocation in the new tree. + Otherwise, the same allocator used for |org| is used. */ +static struct avl_table * +avl_copy (const struct avl_table *org, avl_copy_func *copy, + avl_item_func *destroy, struct libavl_allocator *allocator) +{ + struct avl_node *stack[2 * (AVL_MAX_HEIGHT + 1)]; + int height = 0; + + struct avl_table *new; + const struct avl_node *x; + struct avl_node *y; + + new = avl_create (org->avl_compare, org->avl_param, + allocator != NULL ? allocator : org->avl_alloc); + if (new == NULL) + return NULL; + new->avl_count = org->avl_count; + if (new->avl_count == 0) + return new; + + x = (const struct avl_node *) &org->avl_root; + y = (struct avl_node *) &new->avl_root; + for (;;) + { + while (x->avl_link[0] != NULL) + { + y->avl_link[0] = + new->avl_alloc->libavl_malloc (sizeof *y->avl_link[0], + new->avl_param); + if (y->avl_link[0] == NULL) + { + if (y != (struct avl_node *) &new->avl_root) + { + y->avl_data = NULL; + y->avl_link[1] = NULL; + } + + copy_error_recovery (stack, height, new, destroy); + return NULL; + } + + stack[height++] = (struct avl_node *) x; + stack[height++] = y; + x = x->avl_link[0]; + y = y->avl_link[0]; + } + y->avl_link[0] = NULL; + + for (;;) + { + y->avl_balance = x->avl_balance; + if (copy == NULL) + y->avl_data = x->avl_data; + else + { + y->avl_data = copy (x->avl_data, org->avl_param); + if (y->avl_data == NULL) + { + y->avl_link[1] = NULL; + copy_error_recovery (stack, height, new, destroy); + return NULL; + } + } + + if (x->avl_link[1] != NULL) + { + y->avl_link[1] = + new->avl_alloc->libavl_malloc (sizeof *y->avl_link[1], + new->avl_param); + if (y->avl_link[1] == NULL) + { + copy_error_recovery (stack, height, new, destroy); + return NULL; + } + + x = x->avl_link[1]; + y = y->avl_link[1]; + break; + } + else + y->avl_link[1] = NULL; + + if (height <= 2) + return new; + + y = stack[--height]; + x = stack[--height]; + } + } +} + +/* empty tree (delete all nodes) but do not free the tree itself */ +static void +avl_empty (struct avl_table *tree, avl_item_func *destroy) +{ + struct avl_node *p, *q; + + for (p = tree->avl_root; p != NULL; p = q) + if (p->avl_link[0] == NULL) + { + q = p->avl_link[1]; + if (destroy != NULL && p->avl_data != NULL) + destroy (p->avl_data, tree->avl_param); + tree->avl_alloc->libavl_free (p, tree->avl_param); + } + else + { + q = p->avl_link[0]; + p->avl_link[0] = q->avl_link[1]; + q->avl_link[1] = p; + } + + tree->avl_root = NULL; + tree->avl_count = 0; + tree->avl_generation = 0; +} + +/* Frees storage allocated for |tree|. + If |destroy != NULL|, applies it to each data item in inorder. */ +static void +avl_destroy (struct avl_table *tree, avl_item_func *destroy) +{ + avl_empty(tree, destroy); + free(tree); +} + +/* Allocates |size| bytes of space using |malloc()|. + Returns a null pointer if allocation fails. */ +static void * +avl_malloc (size_t size, void *param) +{ + (void)param; /* avoid unused parameter warning */ + return malloc (size); +} + +/* Frees |block|. */ +static void +avl_free (void *block, void *param) +{ + (void)param; /* avoid unused parameter warning */ + free (block); +} + +/* Default memory allocator that uses |malloc()| and |free()|. */ +static struct libavl_allocator avl_allocator_default = + { + avl_malloc, + avl_free + }; diff -Nru gsl-doc-1.16/spmatrix/gsl_spmatrix.h gsl-doc-2.3/spmatrix/gsl_spmatrix.h --- gsl-doc-1.16/spmatrix/gsl_spmatrix.h 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/spmatrix/gsl_spmatrix.h 2016-07-02 23:02:41.000000000 +0000 @@ -0,0 +1,179 @@ +/* gsl_spmatrix.h + * + * Copyright (C) 2012-2014 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __GSL_SPMATRIX_H__ +#define __GSL_SPMATRIX_H__ + +#include + +#include +#include +#include + +#undef __BEGIN_DECLS +#undef __END_DECLS +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS /* empty */ +# define __END_DECLS /* empty */ +#endif + +__BEGIN_DECLS + +/* + * Binary tree data structure for storing sparse matrix elements + * in triplet format. This is used for efficiently detecting + * duplicates and element retrieval via gsl_spmatrix_get + */ +typedef struct +{ + void *tree; /* tree structure */ + void *node_array; /* preallocated array of tree nodes */ + size_t n; /* number of tree nodes in use (<= nzmax) */ +} gsl_spmatrix_tree; + +/* + * Triplet format: + * + * If data[n] = A_{ij}, then: + * i = A->i[n] + * j = A->p[n] + * + * Compressed column format (CCS): + * + * If data[n] = A_{ij}, then: + * i = A->i[n] + * A->p[j] <= n < A->p[j+1] + * so that column j is stored in + * [ data[p[j]], data[p[j] + 1], ..., data[p[j+1] - 1] ] + * + * Compressed row format (CRS): + * + * If data[n] = A_{ij}, then: + * j = A->i[n] + * A->p[i] <= n < A->p[i+1] + * so that row i is stored in + * [ data[p[i]], data[p[i] + 1], ..., data[p[i+1] - 1] ] + */ + +typedef struct +{ + size_t size1; /* number of rows */ + size_t size2; /* number of columns */ + + /* i (size nzmax) contains: + * + * Triplet/CCS: row indices + * CRS: column indices + */ + size_t *i; + + double *data; /* matrix elements of size nzmax */ + + /* + * p contains the column indices (triplet) or column pointers (compcol) + * + * triplet: p[n] = column number of element data[n] + * CCS: p[j] = index in data of first non-zero element in column j + * CRS: p[i] = index in data of first non-zero element in row i + */ + size_t *p; + + size_t nzmax; /* maximum number of matrix elements */ + size_t nz; /* number of non-zero values in matrix */ + + gsl_spmatrix_tree *tree_data; /* binary tree for sorting triplet data */ + + /* + * workspace of size MAX(size1,size2)*MAX(sizeof(double),sizeof(size_t)) + * used in various routines + */ + void *work; + + size_t sptype; /* sparse storage type */ +} gsl_spmatrix; + +#define GSL_SPMATRIX_TRIPLET (0) +#define GSL_SPMATRIX_CCS (1) +#define GSL_SPMATRIX_CRS (2) + +#define GSL_SPMATRIX_ISTRIPLET(m) ((m)->sptype == GSL_SPMATRIX_TRIPLET) +#define GSL_SPMATRIX_ISCCS(m) ((m)->sptype == GSL_SPMATRIX_CCS) +#define GSL_SPMATRIX_ISCRS(m) ((m)->sptype == GSL_SPMATRIX_CRS) + +/* + * Prototypes + */ + +gsl_spmatrix *gsl_spmatrix_alloc(const size_t n1, const size_t n2); +gsl_spmatrix *gsl_spmatrix_alloc_nzmax(const size_t n1, const size_t n2, + const size_t nzmax, const size_t flags); +void gsl_spmatrix_free(gsl_spmatrix *m); +int gsl_spmatrix_realloc(const size_t nzmax, gsl_spmatrix *m); +int gsl_spmatrix_set_zero(gsl_spmatrix *m); +size_t gsl_spmatrix_nnz(const gsl_spmatrix *m); +int gsl_spmatrix_compare_idx(const size_t ia, const size_t ja, + const size_t ib, const size_t jb); +int gsl_spmatrix_tree_rebuild(gsl_spmatrix * m); + +/* spcopy.c */ +int gsl_spmatrix_memcpy(gsl_spmatrix *dest, const gsl_spmatrix *src); + +/* spgetset.c */ +double gsl_spmatrix_get(const gsl_spmatrix *m, const size_t i, + const size_t j); +int gsl_spmatrix_set(gsl_spmatrix *m, const size_t i, const size_t j, + const double x); +double *gsl_spmatrix_ptr(gsl_spmatrix *m, const size_t i, const size_t j); + +/* spcompress.c */ +gsl_spmatrix *gsl_spmatrix_compcol(const gsl_spmatrix *T); +gsl_spmatrix *gsl_spmatrix_ccs(const gsl_spmatrix *T); +gsl_spmatrix *gsl_spmatrix_crs(const gsl_spmatrix *T); +void gsl_spmatrix_cumsum(const size_t n, size_t *c); + +/* spio.c */ +int gsl_spmatrix_fprintf(FILE *stream, const gsl_spmatrix *m, + const char *format); +gsl_spmatrix * gsl_spmatrix_fscanf(FILE *stream); +int gsl_spmatrix_fwrite(FILE *stream, const gsl_spmatrix *m); +int gsl_spmatrix_fread(FILE *stream, gsl_spmatrix *m); + +/* spoper.c */ +int gsl_spmatrix_scale(gsl_spmatrix *m, const double x); +int gsl_spmatrix_minmax(const gsl_spmatrix *m, double *min_out, + double *max_out); +int gsl_spmatrix_add(gsl_spmatrix *c, const gsl_spmatrix *a, + const gsl_spmatrix *b); +int gsl_spmatrix_d2sp(gsl_spmatrix *S, const gsl_matrix *A); +int gsl_spmatrix_sp2d(gsl_matrix *A, const gsl_spmatrix *S); + +/* spprop.c */ +int gsl_spmatrix_equal(const gsl_spmatrix *a, const gsl_spmatrix *b); + +/* spswap.c */ +int gsl_spmatrix_transpose(gsl_spmatrix * m); +int gsl_spmatrix_transpose2(gsl_spmatrix * m); +int gsl_spmatrix_transpose_memcpy(gsl_spmatrix *dest, const gsl_spmatrix *src); + +__END_DECLS + +#endif /* __GSL_SPMATRIX_H__ */ diff -Nru gsl-doc-1.16/spmatrix/Makefile.am gsl-doc-2.3/spmatrix/Makefile.am --- gsl-doc-1.16/spmatrix/Makefile.am 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/spmatrix/Makefile.am 2016-07-02 23:02:41.000000000 +0000 @@ -0,0 +1,17 @@ +noinst_LTLIBRARIES = libgslspmatrix.la + +check_PROGRAMS = test + +pkginclude_HEADERS = gsl_spmatrix.h + +libgslspmatrix_la_SOURCES = spcompress.c spcopy.c spgetset.c spio.c spmatrix.c spoper.c spprop.c spswap.c + +AM_CPPFLAGS = -I$(top_srcdir) + +noinst_HEADERS = avl.c + +TESTS = $(check_PROGRAMS) + +test_LDADD = libgslspmatrix.la ../spblas/libgslspblas.la ../test/libgsltest.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../sys/libgslsys.la ../err/libgslerr.la ../utils/libutils.la ../rng/libgslrng.la + +test_SOURCES = test.c diff -Nru gsl-doc-1.16/spmatrix/Makefile.in gsl-doc-2.3/spmatrix/Makefile.in --- gsl-doc-1.16/spmatrix/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/spmatrix/Makefile.in 2016-12-09 00:04:23.000000000 +0000 @@ -0,0 +1,1037 @@ +# Makefile.in generated by automake 1.13.4 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +check_PROGRAMS = test$(EXEEXT) +subdir = spmatrix +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp \ + $(noinst_HEADERS) $(pkginclude_HEADERS) \ + $(top_srcdir)/test-driver TODO +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libgslspmatrix_la_LIBADD = +am_libgslspmatrix_la_OBJECTS = spcompress.lo spcopy.lo spgetset.lo \ + spio.lo spmatrix.lo spoper.lo spprop.lo spswap.lo +libgslspmatrix_la_OBJECTS = $(am_libgslspmatrix_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +am_test_OBJECTS = test.$(OBJEXT) +test_OBJECTS = $(am_test_OBJECTS) +test_DEPENDENCIES = libgslspmatrix.la ../spblas/libgslspblas.la \ + ../test/libgsltest.la ../blas/libgslblas.la \ + ../cblas/libgslcblas.la ../matrix/libgslmatrix.la \ + ../vector/libgslvector.la ../block/libgslblock.la \ + ../sys/libgslsys.la ../err/libgslerr.la ../utils/libutils.la \ + ../rng/libgslrng.la +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libgslspmatrix_la_SOURCES) $(test_SOURCES) +DIST_SOURCES = $(libgslspmatrix_la_SOURCES) $(test_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(pkgincludedir)" +HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +AM_RECURSIVE_TARGETS = check recheck +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ +GSL_LIBM = @GSL_LIBM@ +GSL_LIBS = @GSL_LIBS@ +GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ +GSL_LT_VERSION = @GSL_LT_VERSION@ +GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ +GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ +HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ +HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ +HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ +HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ +HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ +HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ +HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ +HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ +HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ +HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ +HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ +HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ +HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ +HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ +HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ +HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ +HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBM = @LIBM@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +noinst_LTLIBRARIES = libgslspmatrix.la +pkginclude_HEADERS = gsl_spmatrix.h +libgslspmatrix_la_SOURCES = spcompress.c spcopy.c spgetset.c spio.c spmatrix.c spoper.c spprop.c spswap.c +AM_CPPFLAGS = -I$(top_srcdir) +noinst_HEADERS = avl.c +TESTS = $(check_PROGRAMS) +test_LDADD = libgslspmatrix.la ../spblas/libgslspblas.la ../test/libgsltest.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../sys/libgslsys.la ../err/libgslerr.la ../utils/libutils.la ../rng/libgslrng.la +test_SOURCES = test.c +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu spmatrix/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu spmatrix/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libgslspmatrix.la: $(libgslspmatrix_la_OBJECTS) $(libgslspmatrix_la_DEPENDENCIES) $(EXTRA_libgslspmatrix_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(libgslspmatrix_la_OBJECTS) $(libgslspmatrix_la_LIBADD) $(LIBS) + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) + @rm -f test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spcompress.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spcopy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spgetset.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spmatrix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spoper.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spprop.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spswap.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgincludeHEADERS: $(pkginclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ + done + +uninstall-pkgincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + else \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all $(check_PROGRAMS) + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +test.log: test$(EXEEXT) + @p='test$(EXEEXT)'; \ + b='test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(pkgincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ + clean-noinstLTLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pkgincludeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pkgincludeHEADERS + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ + clean-checkPROGRAMS clean-generic clean-libtool \ + clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgincludeHEADERS \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + recheck tags tags-am uninstall uninstall-am \ + uninstall-pkgincludeHEADERS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -Nru gsl-doc-1.16/spmatrix/spcompress.c gsl-doc-2.3/spmatrix/spcompress.c --- gsl-doc-1.16/spmatrix/spcompress.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/spmatrix/spcompress.c 2016-07-02 23:02:41.000000000 +0000 @@ -0,0 +1,198 @@ +/* spcompress.c + * + * Copyright (C) 2012-2014, 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include + +/* +gsl_spmatrix_ccs() + Create a sparse matrix in compressed column format + +Inputs: T - sparse matrix in triplet format + +Return: pointer to new matrix (should be freed when finished with it) +*/ + +gsl_spmatrix * +gsl_spmatrix_ccs(const gsl_spmatrix *T) +{ + if (!GSL_SPMATRIX_ISTRIPLET(T)) + { + GSL_ERROR_NULL("matrix must be in triplet format", GSL_EINVAL); + } + else + { + const size_t *Tj; /* column indices of triplet matrix */ + size_t *Cp; /* column pointers of compressed column matrix */ + size_t *w; /* copy of column pointers */ + gsl_spmatrix *m; + size_t n; + + m = gsl_spmatrix_alloc_nzmax(T->size1, T->size2, T->nz, + GSL_SPMATRIX_CCS); + if (!m) + return NULL; + + Tj = T->p; + Cp = m->p; + + /* initialize column pointers to 0 */ + for (n = 0; n < m->size2 + 1; ++n) + Cp[n] = 0; + + /* + * compute the number of elements in each column: + * Cp[j] = # non-zero elements in column j + */ + for (n = 0; n < T->nz; ++n) + Cp[Tj[n]]++; + + /* compute column pointers: p[j] = p[j-1] + nnz[j-1] */ + gsl_spmatrix_cumsum(m->size2, Cp); + + /* make a copy of the column pointers */ + w = (size_t *) m->work; + for (n = 0; n < m->size2; ++n) + w[n] = Cp[n]; + + /* transfer data from triplet format to CCS */ + for (n = 0; n < T->nz; ++n) + { + size_t k = w[Tj[n]]++; + m->i[k] = T->i[n]; + m->data[k] = T->data[n]; + } + + m->nz = T->nz; + + return m; + } +} + +gsl_spmatrix * +gsl_spmatrix_compcol(const gsl_spmatrix *T) +{ + return gsl_spmatrix_ccs(T); +} + +/* +gsl_spmatrix_crs() + Create a sparse matrix in compressed row format + +Inputs: T - sparse matrix in triplet format + +Return: pointer to new matrix (should be freed when finished with it) +*/ + +gsl_spmatrix * +gsl_spmatrix_crs(const gsl_spmatrix *T) +{ + if (!GSL_SPMATRIX_ISTRIPLET(T)) + { + GSL_ERROR_NULL("matrix must be in triplet format", GSL_EINVAL); + } + else + { + const size_t *Ti; /* row indices of triplet matrix */ + size_t *Cp; /* row pointers of compressed row matrix */ + size_t *w; /* copy of column pointers */ + gsl_spmatrix *m; + size_t n; + + m = gsl_spmatrix_alloc_nzmax(T->size1, T->size2, T->nz, + GSL_SPMATRIX_CRS); + if (!m) + return NULL; + + Ti = T->i; + Cp = m->p; + + /* initialize row pointers to 0 */ + for (n = 0; n < m->size1 + 1; ++n) + Cp[n] = 0; + + /* + * compute the number of elements in each row: + * Cp[i] = # non-zero elements in row i + */ + for (n = 0; n < T->nz; ++n) + Cp[Ti[n]]++; + + /* compute row pointers: p[i] = p[i-1] + nnz[i-1] */ + gsl_spmatrix_cumsum(m->size1, Cp); + + /* make a copy of the row pointers */ + w = (size_t *) m->work; + for (n = 0; n < m->size1; ++n) + w[n] = Cp[n]; + + /* transfer data from triplet format to CRS */ + for (n = 0; n < T->nz; ++n) + { + size_t k = w[Ti[n]]++; + m->i[k] = T->p[n]; + m->data[k] = T->data[n]; + } + + m->nz = T->nz; + + return m; + } +} + +/* +gsl_spmatrix_cumsum() + +Compute the cumulative sum: + +p[j] = Sum_{k=0...j-1} c[k] + +0 <= j < n + 1 + +Alternatively, +p[0] = 0 +p[j] = p[j - 1] + c[j - 1] + +Inputs: n - length of input array + c - (input/output) array of size n + 1 + on input, contains the n values c[k] + on output, contains the n + 1 values p[j] + +Return: success or error +*/ + +void +gsl_spmatrix_cumsum(const size_t n, size_t *c) +{ + size_t sum = 0; + size_t k; + + for (k = 0; k < n; ++k) + { + size_t ck = c[k]; + c[k] = sum; + sum += ck; + } + + c[n] = sum; +} /* gsl_spmatrix_cumsum() */ diff -Nru gsl-doc-1.16/spmatrix/spcopy.c gsl-doc-2.3/spmatrix/spcopy.c --- gsl-doc-1.16/spmatrix/spcopy.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/spmatrix/spcopy.c 2016-07-02 23:02:41.000000000 +0000 @@ -0,0 +1,109 @@ +/* spcopy.c + * + * Copyright (C) 2014 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include + +#include "avl.c" + +int +gsl_spmatrix_memcpy(gsl_spmatrix *dest, const gsl_spmatrix *src) +{ + const size_t M = src->size1; + const size_t N = src->size2; + + if (M != dest->size1 || N != dest->size2) + { + GSL_ERROR("matrix sizes are different", GSL_EBADLEN); + } + else if (dest->sptype != src->sptype) + { + GSL_ERROR("cannot copy matrices of different storage formats", + GSL_EINVAL); + } + else + { + int s = GSL_SUCCESS; + size_t n; + + if (dest->nzmax < src->nz) + { + s = gsl_spmatrix_realloc(src->nz, dest); + if (s) + return s; + } + + /* copy indices and data to dest */ + if (GSL_SPMATRIX_ISTRIPLET(src)) + { + void *ptr; + + for (n = 0; n < src->nz; ++n) + { + dest->i[n] = src->i[n]; + dest->p[n] = src->p[n]; + dest->data[n] = src->data[n]; + + /* copy binary tree data */ + ptr = avl_insert(dest->tree_data->tree, &dest->data[n]); + if (ptr != NULL) + { + GSL_ERROR("detected duplicate entry", GSL_EINVAL); + } + } + } + else if (GSL_SPMATRIX_ISCCS(src)) + { + for (n = 0; n < src->nz; ++n) + { + dest->i[n] = src->i[n]; + dest->data[n] = src->data[n]; + } + + for (n = 0; n < src->size2 + 1; ++n) + { + dest->p[n] = src->p[n]; + } + } + else if (GSL_SPMATRIX_ISCRS(src)) + { + for (n = 0; n < src->nz; ++n) + { + dest->i[n] = src->i[n]; + dest->data[n] = src->data[n]; + } + + for (n = 0; n < src->size1 + 1; ++n) + { + dest->p[n] = src->p[n]; + } + } + else + { + GSL_ERROR("invalid matrix type for src", GSL_EINVAL); + } + + dest->nz = src->nz; + + return s; + } +} /* gsl_spmatrix_memcpy() */ diff -Nru gsl-doc-1.16/spmatrix/spgetset.c gsl-doc-2.3/spmatrix/spgetset.c --- gsl-doc-1.16/spmatrix/spgetset.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/spmatrix/spgetset.c 2016-07-02 23:02:41.000000000 +0000 @@ -0,0 +1,251 @@ +/* spgetset.c + * + * Copyright (C) 2012 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include + +#include +#include +#include + +#include "avl.c" + +static void *tree_find(const gsl_spmatrix *m, const size_t i, const size_t j); + +double +gsl_spmatrix_get(const gsl_spmatrix *m, const size_t i, const size_t j) +{ + if (i >= m->size1) + { + GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0.0); + } + else if (j >= m->size2) + { + GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0.0); + } + else + { + if (GSL_SPMATRIX_ISTRIPLET(m)) + { + /* traverse binary tree to search for (i,j) element */ + void *ptr = tree_find(m, i, j); + double x = ptr ? *(double *) ptr : 0.0; + + return x; + } + else if (GSL_SPMATRIX_ISCCS(m)) + { + const size_t *mi = m->i; + const size_t *mp = m->p; + size_t p; + + /* loop over column j and search for row index i */ + for (p = mp[j]; p < mp[j + 1]; ++p) + { + if (mi[p] == i) + return m->data[p]; + } + } + else if (GSL_SPMATRIX_ISCRS(m)) + { + const size_t *mj = m->i; + const size_t *mp = m->p; + size_t p; + + /* loop over row i and search for column index j */ + for (p = mp[i]; p < mp[i + 1]; ++p) + { + if (mj[p] == j) + return m->data[p]; + } + } + else + { + GSL_ERROR_VAL("unknown sparse matrix type", GSL_EINVAL, 0.0); + } + + /* element not found; return 0 */ + return 0.0; + } +} /* gsl_spmatrix_get() */ + +/* +gsl_spmatrix_set() + Add an element to a matrix in triplet form + +Inputs: m - spmatrix + i - row index + j - column index + x - matrix value +*/ + +int +gsl_spmatrix_set(gsl_spmatrix *m, const size_t i, const size_t j, + const double x) +{ + if (!GSL_SPMATRIX_ISTRIPLET(m)) + { + GSL_ERROR("matrix not in triplet representation", GSL_EINVAL); + } + else if (x == 0.0) + { + /* traverse binary tree to search for (i,j) element */ + void *ptr = tree_find(m, i, j); + + /* + * just set the data element to 0; it would be easy to + * delete the node from the tree with avl_delete(), but + * we'd also have to delete it from the data arrays which + * is less simple + */ + if (ptr != NULL) + *(double *) ptr = 0.0; + + return GSL_SUCCESS; + } + else + { + int s = GSL_SUCCESS; + void *ptr; + + /* check if matrix needs to be realloced */ + if (m->nz >= m->nzmax) + { + s = gsl_spmatrix_realloc(2 * m->nzmax, m); + if (s) + return s; + } + + /* store the triplet (i, j, x) */ + m->i[m->nz] = i; + m->p[m->nz] = j; + m->data[m->nz] = x; + + ptr = avl_insert(m->tree_data->tree, &m->data[m->nz]); + if (ptr != NULL) + { + /* found duplicate entry (i,j), replace with new x */ + *((double *) ptr) = x; + } + else + { + /* no duplicate (i,j) found, update indices as needed */ + + /* increase matrix dimensions if needed */ + m->size1 = GSL_MAX(m->size1, i + 1); + m->size2 = GSL_MAX(m->size2, j + 1); + + ++(m->nz); + } + + return s; + } +} /* gsl_spmatrix_set() */ + +double * +gsl_spmatrix_ptr(gsl_spmatrix *m, const size_t i, const size_t j) +{ + if (i >= m->size1) + { + GSL_ERROR_NULL("first index out of range", GSL_EINVAL); + } + else if (j >= m->size2) + { + GSL_ERROR_NULL("second index out of range", GSL_EINVAL); + } + else + { + if (GSL_SPMATRIX_ISTRIPLET(m)) + { + /* traverse binary tree to search for (i,j) element */ + void *ptr = tree_find(m, i, j); + return (double *) ptr; + } + else if (GSL_SPMATRIX_ISCCS(m)) + { + const size_t *mi = m->i; + const size_t *mp = m->p; + size_t p; + + /* loop over column j and search for row index i */ + for (p = mp[j]; p < mp[j + 1]; ++p) + { + if (mi[p] == i) + return &(m->data[p]); + } + } + else if (GSL_SPMATRIX_ISCRS(m)) + { + const size_t *mj = m->i; + const size_t *mp = m->p; + size_t p; + + /* loop over row i and search for column index j */ + for (p = mp[i]; p < mp[i + 1]; ++p) + { + if (mj[p] == j) + return &(m->data[p]); + } + } + else + { + GSL_ERROR_NULL("unknown sparse matrix type", GSL_EINVAL); + } + + /* element not found; return 0 */ + return NULL; + } +} /* gsl_spmatrix_ptr() */ + +/* +tree_find() + Find node in tree corresponding to matrix entry (i,j). Adapted +from avl_find() + +Inputs: m - spmatrix + i - row index + j - column index + +Return: pointer to tree node data if found, NULL if not found +*/ + +static void * +tree_find(const gsl_spmatrix *m, const size_t i, const size_t j) +{ + const struct avl_table *tree = (struct avl_table *) m->tree_data->tree; + const struct avl_node *p; + + for (p = tree->avl_root; p != NULL; ) + { + size_t n = (double *) p->avl_data - m->data; + size_t pi = m->i[n]; + size_t pj = m->p[n]; + int cmp = gsl_spmatrix_compare_idx(i, j, pi, pj); + + if (cmp < 0) + p = p->avl_link[0]; + else if (cmp > 0) + p = p->avl_link[1]; + else /* |cmp == 0| */ + return p->avl_data; + } + + return NULL; +} /* tree_find() */ diff -Nru gsl-doc-1.16/spmatrix/spio.c gsl-doc-2.3/spmatrix/spio.c --- gsl-doc-1.16/spmatrix/spio.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/spmatrix/spio.c 2016-12-07 17:53:17.000000000 +0000 @@ -0,0 +1,368 @@ +/* spio.c + * + * Copyright (C) 2016 Patrick Alken + * Copyright (C) 2016 Alexis Tantet + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include + +#include +#include +#include + +/* +gsl_spmatrix_fprintf() + Print sparse matrix to file in MatrixMarket format: + +M N NNZ +I1 J1 A(I1,J1) +... + +Note that indices start at 1 and not 0 +*/ + +int +gsl_spmatrix_fprintf(FILE *stream, const gsl_spmatrix *m, + const char *format) +{ + int status; + + /* print header */ + status = fprintf(stream, "%%%%MatrixMarket matrix coordinate real general\n"); + if (status < 0) + { + GSL_ERROR("fprintf failed for header", GSL_EFAILED); + } + + /* print rows,columns,nnz */ + status = fprintf(stream, "%u\t%u\t%u\n", + (unsigned int) m->size1, + (unsigned int) m->size2, + (unsigned int) m->nz); + if (status < 0) + { + GSL_ERROR("fprintf failed for dimension header", GSL_EFAILED); + } + + if (GSL_SPMATRIX_ISTRIPLET(m)) + { + size_t n; + + for (n = 0; n < m->nz; ++n) + { + status = fprintf(stream, "%u\t%u\t", (unsigned int) m->i[n] + 1, (unsigned int) m->p[n] + 1); + if (status < 0) + { + GSL_ERROR("fprintf failed", GSL_EFAILED); + } + + status = fprintf(stream, format, m->data[n]); + if (status < 0) + { + GSL_ERROR("fprintf failed", GSL_EFAILED); + } + + status = putc('\n', stream); + if (status == EOF) + { + GSL_ERROR("putc failed", GSL_EFAILED); + } + } + } + else if (GSL_SPMATRIX_ISCCS(m)) + { + size_t j, p; + + for (j = 0; j < m->size2; ++j) + { + for (p = m->p[j]; p < m->p[j + 1]; ++p) + { + status = fprintf(stream, "%u\t%u\t", (unsigned int) m->i[p] + 1, (unsigned int) j + 1); + if (status < 0) + { + GSL_ERROR("fprintf failed", GSL_EFAILED); + } + + status = fprintf(stream, format, m->data[p]); + if (status < 0) + { + GSL_ERROR("fprintf failed", GSL_EFAILED); + } + + status = putc('\n', stream); + if (status == EOF) + { + GSL_ERROR("putc failed", GSL_EFAILED); + } + } + } + } + else if (GSL_SPMATRIX_ISCRS(m)) + { + size_t i, p; + + for (i = 0; i < m->size1; ++i) + { + for (p = m->p[i]; p < m->p[i + 1]; ++p) + { + status = fprintf(stream, "%u\t%u\t", (unsigned int) i + 1, (unsigned int) m->i[p] + 1); + if (status < 0) + { + GSL_ERROR("fprintf failed", GSL_EFAILED); + } + + status = fprintf(stream, format, m->data[p]); + if (status < 0) + { + GSL_ERROR("fprintf failed", GSL_EFAILED); + } + + status = putc('\n', stream); + if (status == EOF) + { + GSL_ERROR("putc failed", GSL_EFAILED); + } + } + } + } + else + { + GSL_ERROR("unknown sparse matrix type", GSL_EINVAL); + } + + return GSL_SUCCESS; +} + +gsl_spmatrix * +gsl_spmatrix_fscanf(FILE *stream) +{ + gsl_spmatrix *m; + unsigned int size1, size2, nz; + char buf[1024]; + int found_header = 0; + + /* read file until we find rows,cols,nz header */ + while (fgets(buf, 1024, stream) != NULL) + { + int c; + + /* skip comments */ + if (*buf == '%') + continue; + + c = sscanf(buf, "%u %u %u", + &size1, &size2, &nz); + if (c == 3) + { + found_header = 1; + break; + } + } + + if (!found_header) + { + GSL_ERROR_NULL ("fscanf failed reading header", GSL_EFAILED); + } + + m = gsl_spmatrix_alloc_nzmax((size_t) size1, (size_t) size2, (size_t) nz, GSL_SPMATRIX_TRIPLET); + if (!m) + { + GSL_ERROR_NULL ("error allocating m", GSL_ENOMEM); + } + + { + unsigned int i, j; + double val; + + while (fgets(buf, 1024, stream) != NULL) + { + int c = sscanf(buf, "%u %u %lg", &i, &j, &val); + if (c < 3 || (i == 0) || (j == 0)) + { + GSL_ERROR_NULL ("error in input file format", GSL_EFAILED); + } + else if ((i > size1) || (j > size2)) + { + GSL_ERROR_NULL ("element exceeds matrix dimensions", GSL_EBADLEN); + } + else + { + /* subtract 1 from (i,j) since indexing starts at 1 */ + gsl_spmatrix_set(m, i - 1, j - 1, val); + } + } + } + + return m; +} + +int +gsl_spmatrix_fwrite(FILE *stream, const gsl_spmatrix *m) +{ + size_t items; + + /* write header: size1, size2, nz */ + + items = fwrite(&(m->size1), sizeof(size_t), 1, stream); + if (items != 1) + { + GSL_ERROR("fwrite failed on size1", GSL_EFAILED); + } + + items = fwrite(&(m->size2), sizeof(size_t), 1, stream); + if (items != 1) + { + GSL_ERROR("fwrite failed on size2", GSL_EFAILED); + } + + items = fwrite(&(m->nz), sizeof(size_t), 1, stream); + if (items != 1) + { + GSL_ERROR("fwrite failed on nz", GSL_EFAILED); + } + + /* write m->i and m->data which are size nz in all storage formats */ + + items = fwrite(m->i, sizeof(size_t), m->nz, stream); + if (items != m->nz) + { + GSL_ERROR("fwrite failed on row indices", GSL_EFAILED); + } + + items = fwrite(m->data, sizeof(double), m->nz, stream); + if (items != m->nz) + { + GSL_ERROR("fwrite failed on data", GSL_EFAILED); + } + + if (GSL_SPMATRIX_ISTRIPLET(m)) + { + items = fwrite(m->p, sizeof(size_t), m->nz, stream); + if (items != m->nz) + { + GSL_ERROR("fwrite failed on column indices", GSL_EFAILED); + } + } + else if (GSL_SPMATRIX_ISCCS(m)) + { + items = fwrite(m->p, sizeof(size_t), m->size2 + 1, stream); + if (items != m->size2 + 1) + { + GSL_ERROR("fwrite failed on column indices", GSL_EFAILED); + } + } + else if (GSL_SPMATRIX_ISCRS(m)) + { + items = fwrite(m->p, sizeof(size_t), m->size1 + 1, stream); + if (items != m->size1 + 1) + { + GSL_ERROR("fwrite failed on column indices", GSL_EFAILED); + } + } + + return GSL_SUCCESS; +} + +int +gsl_spmatrix_fread(FILE *stream, gsl_spmatrix *m) +{ + size_t size1, size2, nz; + size_t items; + + /* read header: size1, size2, nz */ + + items = fread(&size1, sizeof(size_t), 1, stream); + if (items != 1) + { + GSL_ERROR("fread failed on size1", GSL_EFAILED); + } + + items = fread(&size2, sizeof(size_t), 1, stream); + if (items != 1) + { + GSL_ERROR("fread failed on size2", GSL_EFAILED); + } + + items = fread(&nz, sizeof(size_t), 1, stream); + if (items != 1) + { + GSL_ERROR("fread failed on nz", GSL_EFAILED); + } + + if (m->size1 != size1) + { + GSL_ERROR("matrix has wrong size1", GSL_EBADLEN); + } + else if (m->size2 != size2) + { + GSL_ERROR("matrix has wrong size2", GSL_EBADLEN); + } + else if (nz > m->nzmax) + { + GSL_ERROR("matrix nzmax is too small", GSL_EBADLEN); + } + else + { + /* read m->i and m->data arrays, which are size nz for all formats */ + + items = fread(m->i, sizeof(size_t), nz, stream); + if (items != nz) + { + GSL_ERROR("fread failed on row indices", GSL_EFAILED); + } + + items = fread(m->data, sizeof(double), nz, stream); + if (items != nz) + { + GSL_ERROR("fread failed on data", GSL_EFAILED); + } + + m->nz = nz; + + if (GSL_SPMATRIX_ISTRIPLET(m)) + { + items = fread(m->p, sizeof(size_t), nz, stream); + if (items != nz) + { + GSL_ERROR("fread failed on column indices", GSL_EFAILED); + } + + /* build binary search tree for m */ + gsl_spmatrix_tree_rebuild(m); + } + else if (GSL_SPMATRIX_ISCCS(m)) + { + items = fread(m->p, sizeof(size_t), size2 + 1, stream); + if (items != size2 + 1) + { + GSL_ERROR("fread failed on row pointers", GSL_EFAILED); + } + } + else if (GSL_SPMATRIX_ISCRS(m)) + { + items = fread(m->p, sizeof(size_t), size1 + 1, stream); + if (items != size1 + 1) + { + GSL_ERROR("fread failed on column pointers", GSL_EFAILED); + } + } + } + + return GSL_SUCCESS; +} diff -Nru gsl-doc-1.16/spmatrix/spmatrix.c gsl-doc-2.3/spmatrix/spmatrix.c --- gsl-doc-1.16/spmatrix/spmatrix.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/spmatrix/spmatrix.c 2016-07-02 23:02:41.000000000 +0000 @@ -0,0 +1,489 @@ +/* spmatrix.c + * + * Copyright (C) 2012 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include + +#include +#include +#include + +#include "avl.c" + +static int compare_triplet(const void *pa, const void *pb, void *param); +static void *avl_spmalloc (size_t size, void *param); +static void avl_spfree (void *block, void *param); + +static struct libavl_allocator avl_allocator_spmatrix = +{ + avl_spmalloc, + avl_spfree +}; + +/* +gsl_spmatrix_alloc() + Allocate a sparse matrix in triplet representation + +Inputs: n1 - number of rows + n2 - number of columns + +Notes: if (n1,n2) are not known at allocation time, they can each be +set to 1, and they will be expanded as elements are added to the matrix +*/ + +gsl_spmatrix * +gsl_spmatrix_alloc(const size_t n1, const size_t n2) +{ + const double density = 0.1; /* estimate */ + size_t nzmax = (size_t) floor(n1 * n2 * density); + + if (nzmax == 0) + nzmax = 10; + + return gsl_spmatrix_alloc_nzmax(n1, n2, nzmax, GSL_SPMATRIX_TRIPLET); +} /* gsl_spmatrix_alloc() */ + +/* +gsl_spmatrix_alloc_nzmax() + Allocate a sparse matrix with given nzmax + +Inputs: n1 - number of rows + n2 - number of columns + nzmax - maximum number of matrix elements + sptype - type of matrix (triplet, CCS, CRS) + +Notes: if (n1,n2) are not known at allocation time, they can each be +set to 1, and they will be expanded as elements are added to the matrix +*/ + +gsl_spmatrix * +gsl_spmatrix_alloc_nzmax(const size_t n1, const size_t n2, + const size_t nzmax, const size_t sptype) +{ + gsl_spmatrix *m; + + if (n1 == 0) + { + GSL_ERROR_NULL ("matrix dimension n1 must be positive integer", + GSL_EINVAL); + } + else if (n2 == 0) + { + GSL_ERROR_NULL ("matrix dimension n2 must be positive integer", + GSL_EINVAL); + } + + m = calloc(1, sizeof(gsl_spmatrix)); + if (!m) + { + GSL_ERROR_NULL("failed to allocate space for spmatrix struct", + GSL_ENOMEM); + } + + m->size1 = n1; + m->size2 = n2; + m->nz = 0; + m->nzmax = GSL_MAX(nzmax, 1); + m->sptype = sptype; + + m->i = malloc(m->nzmax * sizeof(size_t)); + if (!m->i) + { + gsl_spmatrix_free(m); + GSL_ERROR_NULL("failed to allocate space for row indices", + GSL_ENOMEM); + } + + if (sptype == GSL_SPMATRIX_TRIPLET) + { + m->tree_data = malloc(sizeof(gsl_spmatrix_tree)); + if (!m->tree_data) + { + gsl_spmatrix_free(m); + GSL_ERROR_NULL("failed to allocate space for AVL tree struct", + GSL_ENOMEM); + } + + m->tree_data->n = 0; + + /* allocate tree data structure */ + m->tree_data->tree = avl_create(compare_triplet, (void *) m, + &avl_allocator_spmatrix); + if (!m->tree_data->tree) + { + gsl_spmatrix_free(m); + GSL_ERROR_NULL("failed to allocate space for AVL tree", + GSL_ENOMEM); + } + + /* preallocate nzmax tree nodes */ + m->tree_data->node_array = malloc(m->nzmax * sizeof(struct avl_node)); + if (!m->tree_data->node_array) + { + gsl_spmatrix_free(m); + GSL_ERROR_NULL("failed to allocate space for AVL tree nodes", + GSL_ENOMEM); + } + + m->p = malloc(m->nzmax * sizeof(size_t)); + if (!m->p) + { + gsl_spmatrix_free(m); + GSL_ERROR_NULL("failed to allocate space for column indices", + GSL_ENOMEM); + } + } + else if (sptype == GSL_SPMATRIX_CCS) + { + m->p = malloc((n2 + 1) * sizeof(size_t)); + m->work = malloc(GSL_MAX(n1, n2) * + GSL_MAX(sizeof(size_t), sizeof(double))); + if (!m->p || !m->work) + { + gsl_spmatrix_free(m); + GSL_ERROR_NULL("failed to allocate space for column pointers", + GSL_ENOMEM); + } + } + else if (sptype == GSL_SPMATRIX_CRS) + { + m->p = malloc((n1 + 1) * sizeof(size_t)); + m->work = malloc(GSL_MAX(n1, n2) * + GSL_MAX(sizeof(size_t), sizeof(double))); + if (!m->p || !m->work) + { + gsl_spmatrix_free(m); + GSL_ERROR_NULL("failed to allocate space for row pointers", + GSL_ENOMEM); + } + } + + m->data = malloc(m->nzmax * sizeof(double)); + if (!m->data) + { + gsl_spmatrix_free(m); + GSL_ERROR_NULL("failed to allocate space for data", + GSL_ENOMEM); + } + + return m; +} /* gsl_spmatrix_alloc_nzmax() */ + +/* +gsl_spmatrix_free() + Free sparse matrix object +*/ + +void +gsl_spmatrix_free(gsl_spmatrix *m) +{ + if (m->i) + free(m->i); + + if (m->p) + free(m->p); + + if (m->data) + free(m->data); + + if (m->work) + free(m->work); + + if (m->tree_data) + { + if (m->tree_data->tree) + avl_destroy(m->tree_data->tree, NULL); + + if (m->tree_data->node_array) + free(m->tree_data->node_array); + + free(m->tree_data); + } + + free(m); +} /* gsl_spmatrix_free() */ + +/* +gsl_spmatrix_realloc() + As elements are added to the sparse matrix, its possible that they +will exceed the previously specified nzmax - reallocate the matrix +with a new nzmax +*/ + +int +gsl_spmatrix_realloc(const size_t nzmax, gsl_spmatrix *m) +{ + int s = GSL_SUCCESS; + void *ptr; + + if (nzmax < m->nz) + { + GSL_ERROR("new nzmax is less than current nz", GSL_EINVAL); + } + + ptr = realloc(m->i, nzmax * sizeof(size_t)); + if (!ptr) + { + GSL_ERROR("failed to allocate space for row indices", GSL_ENOMEM); + } + + m->i = (size_t *) ptr; + + if (GSL_SPMATRIX_ISTRIPLET(m)) + { + ptr = realloc(m->p, nzmax * sizeof(size_t)); + if (!ptr) + { + GSL_ERROR("failed to allocate space for column indices", GSL_ENOMEM); + } + + m->p = (size_t *) ptr; + } + + ptr = realloc(m->data, nzmax * sizeof(double)); + if (!ptr) + { + GSL_ERROR("failed to allocate space for data", GSL_ENOMEM); + } + + m->data = (double *) ptr; + + /* rebuild binary tree */ + if (GSL_SPMATRIX_ISTRIPLET(m)) + { + size_t n; + + /* reset tree to empty state, but don't free root tree ptr */ + avl_empty(m->tree_data->tree, NULL); + m->tree_data->n = 0; + + ptr = realloc(m->tree_data->node_array, nzmax * sizeof(struct avl_node)); + if (!ptr) + { + GSL_ERROR("failed to allocate space for AVL tree nodes", GSL_ENOMEM); + } + + m->tree_data->node_array = ptr; + + /* + * need to reinsert all tree elements since the m->data addresses + * have changed + */ + for (n = 0; n < m->nz; ++n) + { + ptr = avl_insert(m->tree_data->tree, &m->data[n]); + if (ptr != NULL) + { + GSL_ERROR("detected duplicate entry", GSL_EINVAL); + } + } + } + + /* update to new nzmax */ + m->nzmax = nzmax; + + return s; +} /* gsl_spmatrix_realloc() */ + +int +gsl_spmatrix_set_zero(gsl_spmatrix *m) +{ + m->nz = 0; + + if (GSL_SPMATRIX_ISTRIPLET(m)) + { + /* reset tree to empty state and node index pointer to 0 */ + avl_empty(m->tree_data->tree, NULL); + m->tree_data->n = 0; + } + + return GSL_SUCCESS; +} /* gsl_spmatrix_set_zero() */ + +size_t +gsl_spmatrix_nnz(const gsl_spmatrix *m) +{ + return m->nz; +} /* gsl_spmatrix_nnz() */ + +/* +gsl_spmatrix_compare_idx() + Comparison function for searching binary tree in triplet +representation. + +To detect duplicate elements in the tree, we want to determine +if there already exists an entry for (i,j) in the tree. Since +the actual tree node stores only the data elements data[n], +we will do pointer arithmetic to get from the given data[n] +to the row/column indices i[n] and j[n]. + +This compare function will sort the tree first by row i, +and for equal rows, it will then sort by column j + +Inputs: ia - row index of element a + ja - column index of element a + ib - row index of element b + jb - column index of element b + +Return: + -1 if pa < pb: (ia,ja) < (ib,jb) + +1 if pa > pb: (ia,ja) > (ib,jb) + 0 if pa = pb: (ia,ja) == (ib,jb) +*/ + +int +gsl_spmatrix_compare_idx(const size_t ia, const size_t ja, + const size_t ib, const size_t jb) +{ + if (ia < ib) + return -1; + else if (ia > ib) + return 1; + else + { + /* row indices are equal, sort by column index */ + if (ja < jb) + return -1; + else if (ja > jb) + return 1; + else + return 0; /* row and column indices are equal */ + } +} + +/* +gsl_spmatrix_tree_rebuild() + When reading a triplet matrix from disk, or when +copying a triplet matrix, it is necessary to rebuild the +binary tree for element searches. + +Inputs: m - triplet matrix +*/ + +int +gsl_spmatrix_tree_rebuild(gsl_spmatrix * m) +{ + if (!GSL_SPMATRIX_ISTRIPLET(m)) + { + GSL_ERROR("m must be in triplet format", GSL_EINVAL); + } + else + { + size_t n; + + /* reset tree to empty state, but don't free root tree ptr */ + avl_empty(m->tree_data->tree, NULL); + m->tree_data->n = 0; + + /* insert all tree elements */ + for (n = 0; n < m->nz; ++n) + { + void *ptr = avl_insert(m->tree_data->tree, &m->data[n]); + if (ptr != NULL) + { + GSL_ERROR("detected duplicate entry", GSL_EINVAL); + } + } + + return GSL_SUCCESS; + } +} + +/* +compare_triplet() + Comparison function for searching binary tree in triplet +representation. + +To detect duplicate elements in the tree, we want to determine +if there already exists an entry for (i,j) in the tree. Since +the actual tree node stores only the data elements data[n], +we will do pointer arithmetic to get from the given data[n] +to the row/column indices i[n] and j[n]. + +This compare function will sort the tree first by row i, +and for equal rows, it will then sort by column j + +Inputs: pa - element 1 for comparison (double *) + pb - element 2 for comparison (double *) + param - parameter (gsl_spmatrix) + +Return: + -1 if pa < pb: (ia,ja) < (ib,jb) + +1 if pa > pb: (ia,ja) > (ib,jb) + 0 if pa = pb: (ia,ja) == (ib,jb) +*/ + +static int +compare_triplet(const void *pa, const void *pb, void *param) +{ + gsl_spmatrix *m = (gsl_spmatrix *) param; + + /* pointer arithmetic to find indices in data array */ + const size_t idxa = (const double *) pa - m->data; + const size_t idxb = (const double *) pb - m->data; + + return gsl_spmatrix_compare_idx(m->i[idxa], m->p[idxa], + m->i[idxb], m->p[idxb]); +} /* compare_triplet() */ + +static void * +avl_spmalloc (size_t size, void *param) +{ + gsl_spmatrix *m = (gsl_spmatrix *) param; + + if (size != sizeof(struct avl_node)) + { + GSL_ERROR_NULL("attemping to allocate incorrect node size", GSL_EBADLEN); + } + + /* + * return the next available avl_node slot; index + * m->tree_data->n keeps track of next open slot + */ + if (m->tree_data->n < m->nzmax) + { + /* cast to char* for pointer arithmetic */ + unsigned char *node_ptr = (unsigned char *) m->tree_data->node_array; + + /* offset in bytes for next node slot */ + size_t offset = (m->tree_data->n)++ * sizeof(struct avl_node); + + return node_ptr + offset; + } + else + { + /* + * we should never get here - gsl_spmatrix_realloc() should + * be called before exceeding nzmax nodes + */ + GSL_ERROR_NULL("attemping to allocate tree node past nzmax", GSL_EINVAL); + } +} + +static void +avl_spfree (void *block, void *param) +{ + (void)block; + (void)param; + /* + * do nothing - instead of allocating/freeing individual nodes, + * we malloc and free nzmax nodes at a time + */ +} diff -Nru gsl-doc-1.16/spmatrix/spoper.c gsl-doc-2.3/spmatrix/spoper.c --- gsl-doc-1.16/spmatrix/spoper.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/spmatrix/spoper.c 2016-07-02 23:02:41.000000000 +0000 @@ -0,0 +1,234 @@ +/* spoper.c + * + * Copyright (C) 2012 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include + +#include +#include +#include +#include +#include + +int +gsl_spmatrix_scale(gsl_spmatrix *m, const double x) +{ + size_t i; + + for (i = 0; i < m->nz; ++i) + m->data[i] *= x; + + return GSL_SUCCESS; +} /* gsl_spmatrix_scale() */ + +int +gsl_spmatrix_minmax(const gsl_spmatrix *m, double *min_out, double *max_out) +{ + double min, max; + size_t n; + + if (m->nz == 0) + { + GSL_ERROR("matrix is empty", GSL_EINVAL); + } + + min = m->data[0]; + max = m->data[0]; + + for (n = 1; n < m->nz; ++n) + { + double x = m->data[n]; + + if (x < min) + min = x; + + if (x > max) + max = x; + } + + *min_out = min; + *max_out = max; + + return GSL_SUCCESS; +} /* gsl_spmatrix_minmax() */ + +/* +gsl_spmatrix_add() + Add two sparse matrices + +Inputs: c - (output) a + b + a - (input) sparse matrix + b - (input) sparse matrix + +Return: success or error +*/ + +int +gsl_spmatrix_add(gsl_spmatrix *c, const gsl_spmatrix *a, + const gsl_spmatrix *b) +{ + const size_t M = a->size1; + const size_t N = a->size2; + + if (b->size1 != M || b->size2 != N || c->size1 != M || c->size2 != N) + { + GSL_ERROR("matrices must have same dimensions", GSL_EBADLEN); + } + else if (a->sptype != b->sptype || a->sptype != c->sptype) + { + GSL_ERROR("matrices must have same sparse storage format", + GSL_EINVAL); + } + else if (GSL_SPMATRIX_ISTRIPLET(a)) + { + GSL_ERROR("triplet format not yet supported", GSL_EINVAL); + } + else + { + int status = GSL_SUCCESS; + size_t *w = (size_t *) a->work; + double *x = (double *) b->work; + size_t *Cp, *Ci; + double *Cd; + size_t j, p; + size_t nz = 0; /* number of non-zeros in c */ + size_t inner_size, outer_size; + + if (GSL_SPMATRIX_ISCCS(a)) + { + inner_size = M; + outer_size = N; + } + else if (GSL_SPMATRIX_ISCRS(a)) + { + inner_size = N; + outer_size = M; + } + else + { + GSL_ERROR("unknown sparse matrix type", GSL_EINVAL); + } + + if (c->nzmax < a->nz + b->nz) + { + status = gsl_spmatrix_realloc(a->nz + b->nz, c); + if (status) + return status; + } + + /* initialize w = 0 */ + for (j = 0; j < inner_size; ++j) + w[j] = 0; + + Ci = c->i; + Cp = c->p; + Cd = c->data; + + for (j = 0; j < outer_size; ++j) + { + Cp[j] = nz; + + /* CCS: x += A(:,j); CRS: x += A(j,:) */ + nz = gsl_spblas_scatter(a, j, 1.0, w, x, j + 1, c, nz); + + /* CCS: x += B(:,j); CRS: x += B(j,:) */ + nz = gsl_spblas_scatter(b, j, 1.0, w, x, j + 1, c, nz); + + for (p = Cp[j]; p < nz; ++p) + Cd[p] = x[Ci[p]]; + } + + /* finalize last column of c */ + Cp[j] = nz; + c->nz = nz; + + return status; + } +} /* gsl_spmatrix_add() */ + +/* +gsl_spmatrix_d2sp() + Convert a dense gsl_matrix to sparse (triplet) format + +Inputs: S - (output) sparse matrix in triplet format + A - (input) dense matrix to convert +*/ + +int +gsl_spmatrix_d2sp(gsl_spmatrix *S, const gsl_matrix *A) +{ + int s = GSL_SUCCESS; + size_t i, j; + + gsl_spmatrix_set_zero(S); + S->size1 = A->size1; + S->size2 = A->size2; + + for (i = 0; i < A->size1; ++i) + { + for (j = 0; j < A->size2; ++j) + { + double x = gsl_matrix_get(A, i, j); + + if (x != 0.0) + gsl_spmatrix_set(S, i, j, x); + } + } + + return s; +} /* gsl_spmatrix_d2sp() */ + +/* +gsl_spmatrix_sp2d() + Convert a sparse matrix to dense format +*/ + +int +gsl_spmatrix_sp2d(gsl_matrix *A, const gsl_spmatrix *S) +{ + if (A->size1 != S->size1 || A->size2 != S->size2) + { + GSL_ERROR("matrix sizes do not match", GSL_EBADLEN); + } + else + { + gsl_matrix_set_zero(A); + + if (GSL_SPMATRIX_ISTRIPLET(S)) + { + size_t n; + + for (n = 0; n < S->nz; ++n) + { + size_t i = S->i[n]; + size_t j = S->p[n]; + double x = S->data[n]; + + gsl_matrix_set(A, i, j, x); + } + } + else + { + GSL_ERROR("non-triplet formats not yet supported", GSL_EINVAL); + } + + return GSL_SUCCESS; + } +} /* gsl_spmatrix_sp2d() */ diff -Nru gsl-doc-1.16/spmatrix/spprop.c gsl-doc-2.3/spmatrix/spprop.c --- gsl-doc-1.16/spmatrix/spprop.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/spmatrix/spprop.c 2016-07-02 23:02:41.000000000 +0000 @@ -0,0 +1,116 @@ +/* spprop.c + * + * Copyright (C) 2014 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include + +#include +#include + +/* +gsl_spmatrix_equal() + Return 1 if a = b, 0 otherwise +*/ + +int +gsl_spmatrix_equal(const gsl_spmatrix *a, const gsl_spmatrix *b) +{ + const size_t M = a->size1; + const size_t N = a->size2; + + if (b->size1 != M || b->size2 != N) + { + GSL_ERROR_VAL("matrices must have same dimensions", GSL_EBADLEN, 0); + } + else if (a->sptype != b->sptype) + { + GSL_ERROR_VAL("trying to compare different sparse matrix types", GSL_EINVAL, 0); + } + else + { + const size_t nz = a->nz; + size_t n; + + if (nz != b->nz) + return 0; /* different number of non-zero elements */ + + if (GSL_SPMATRIX_ISTRIPLET(a)) + { + /* + * triplet formats could be out of order but identical, so use + * gsl_spmatrix_get() on b for each aij + */ + for (n = 0; n < nz; ++n) + { + double bij = gsl_spmatrix_get(b, a->i[n], a->p[n]); + + if (a->data[n] != bij) + return 0; + } + } + else if (GSL_SPMATRIX_ISCCS(a)) + { + /* + * for CCS, both matrices should have everything + * in the same order + */ + + /* check row indices and data */ + for (n = 0; n < nz; ++n) + { + if ((a->i[n] != b->i[n]) || (a->data[n] != b->data[n])) + return 0; + } + + /* check column pointers */ + for (n = 0; n < a->size2 + 1; ++n) + { + if (a->p[n] != b->p[n]) + return 0; + } + } + else if (GSL_SPMATRIX_ISCRS(a)) + { + /* + * for CRS, both matrices should have everything + * in the same order + */ + + /* check column indices and data */ + for (n = 0; n < nz; ++n) + { + if ((a->i[n] != b->i[n]) || (a->data[n] != b->data[n])) + return 0; + } + + /* check row pointers */ + for (n = 0; n < a->size1 + 1; ++n) + { + if (a->p[n] != b->p[n]) + return 0; + } + } + else + { + GSL_ERROR_VAL("unknown sparse matrix type", GSL_EINVAL, 0); + } + + return 1; + } +} /* gsl_spmatrix_equal() */ diff -Nru gsl-doc-1.16/spmatrix/spswap.c gsl-doc-2.3/spmatrix/spswap.c --- gsl-doc-1.16/spmatrix/spswap.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/spmatrix/spswap.c 2016-07-02 23:02:41.000000000 +0000 @@ -0,0 +1,243 @@ +/* spswap.c + * + * Copyright (C) 2014 Patrick Alken + * Copyright (C) 2016 Alexis Tantet + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include + +#include +#include +#include +#include + +#include "avl.c" + +/* +gsl_spmatrix_transpose() + Replace the sparse matrix src by its transpose, +keeping the matrix in the same storage format + +Inputs: A - (input/output) sparse matrix to transpose. +*/ + +int +gsl_spmatrix_transpose(gsl_spmatrix * m) +{ + if (GSL_SPMATRIX_ISTRIPLET(m)) + { + size_t n; + + /* swap row/column indices */ + for (n = 0; n < m->nz; ++n) + { + size_t tmp = m->p[n]; + m->p[n] = m->i[n]; + m->i[n] = tmp; + } + + /* need to rebuild AVL tree, or element searches won't + * work correctly with transposed indices */ + gsl_spmatrix_tree_rebuild(m); + } + else + { + GSL_ERROR("unknown sparse matrix type", GSL_EINVAL); + } + + /* swap dimensions */ + if (m->size1 != m->size2) + { + size_t tmp = m->size1; + m->size1 = m->size2; + m->size2 = tmp; + } + + return GSL_SUCCESS; +} + +/* +gsl_spmatrix_transpose2() + Replace the sparse matrix src by its transpose either by + swapping its row and column indices if it is in triplet storage, + or by switching its major if it is in compressed storage. + +Inputs: A - (input/output) sparse matrix to transpose. +*/ + +int +gsl_spmatrix_transpose2(gsl_spmatrix * m) +{ + if (GSL_SPMATRIX_ISTRIPLET(m)) + { + return gsl_spmatrix_transpose(m); + } + else if (GSL_SPMATRIX_ISCCS(m)) + { + m->sptype = GSL_SPMATRIX_CRS; + } + else if (GSL_SPMATRIX_ISCRS(m)) + { + m->sptype = GSL_SPMATRIX_CCS; + } + else + { + GSL_ERROR("unknown sparse matrix type", GSL_EINVAL); + } + + /* swap dimensions */ + if (m->size1 != m->size2) + { + size_t tmp = m->size1; + m->size1 = m->size2; + m->size2 = tmp; + } + + return GSL_SUCCESS; +} + +int +gsl_spmatrix_transpose_memcpy(gsl_spmatrix *dest, const gsl_spmatrix *src) +{ + const size_t M = src->size1; + const size_t N = src->size2; + + if (M != dest->size2 || N != dest->size1) + { + GSL_ERROR("dimensions of dest must be transpose of src matrix", + GSL_EBADLEN); + } + else if (dest->sptype != src->sptype) + { + GSL_ERROR("cannot copy matrices of different storage formats", + GSL_EINVAL); + } + else + { + int s = GSL_SUCCESS; + const size_t nz = src->nz; + + if (dest->nzmax < src->nz) + { + s = gsl_spmatrix_realloc(src->nz, dest); + if (s) + return s; + } + + if (GSL_SPMATRIX_ISTRIPLET(src)) + { + size_t n; + void *ptr; + + for (n = 0; n < nz; ++n) + { + dest->i[n] = src->p[n]; + dest->p[n] = src->i[n]; + dest->data[n] = src->data[n]; + + /* copy binary tree data */ + ptr = avl_insert(dest->tree_data->tree, &dest->data[n]); + if (ptr != NULL) + { + GSL_ERROR("detected duplicate entry", GSL_EINVAL); + } + } + } + else if (GSL_SPMATRIX_ISCCS(src)) + { + size_t *Ai = src->i; + size_t *Ap = src->p; + double *Ad = src->data; + size_t *ATi = dest->i; + size_t *ATp = dest->p; + double *ATd = dest->data; + size_t *w = (size_t *) dest->work; + size_t p, j; + + /* initialize to 0 */ + for (p = 0; p < M + 1; ++p) + ATp[p] = 0; + + /* compute row counts of A (= column counts for A^T) */ + for (p = 0; p < nz; ++p) + ATp[Ai[p]]++; + + /* compute row pointers for A (= column pointers for A^T) */ + gsl_spmatrix_cumsum(M, ATp); + + /* make copy of row pointers */ + for (j = 0; j < M; ++j) + w[j] = ATp[j]; + + for (j = 0; j < N; ++j) + { + for (p = Ap[j]; p < Ap[j + 1]; ++p) + { + size_t k = w[Ai[p]]++; + ATi[k] = j; + ATd[k] = Ad[p]; + } + } + } + else if (GSL_SPMATRIX_ISCRS(src)) + { + size_t *Aj = src->i; + size_t *Ap = src->p; + double *Ad = src->data; + size_t *ATj = dest->i; + size_t *ATp = dest->p; + double *ATd = dest->data; + size_t *w = (size_t *) dest->work; + size_t p, i; + + /* initialize to 0 */ + for (p = 0; p < N + 1; ++p) + ATp[p] = 0; + + /* compute column counts of A (= row counts for A^T) */ + for (p = 0; p < nz; ++p) + ATp[Aj[p]]++; + + /* compute column pointers for A (= row pointers for A^T) */ + gsl_spmatrix_cumsum(N, ATp); + + /* make copy of column pointers */ + for (i = 0; i < N; ++i) + w[i] = ATp[i]; + + for (i = 0; i < M; ++i) + { + for (p = Ap[i]; p < Ap[i + 1]; ++p) + { + size_t k = w[Aj[p]]++; + ATj[k] = i; + ATd[k] = Ad[p]; + } + } + } + else + { + GSL_ERROR("unknown sparse matrix type", GSL_EINVAL); + } + + dest->nz = nz; + + return s; + } +} /* gsl_spmatrix_transpose_memcpy() */ diff -Nru gsl-doc-1.16/spmatrix/test.c gsl-doc-2.3/spmatrix/test.c --- gsl-doc-1.16/spmatrix/test.c 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/spmatrix/test.c 2016-12-07 17:47:52.000000000 +0000 @@ -0,0 +1,756 @@ +/* test.c + * + * Copyright (C) 2012-2014, 2016 Patrick Alken + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* +create_random_sparse() + Create a random sparse matrix with approximately +M*N*density non-zero entries + +Inputs: M - number of rows + N - number of columns + density - sparse density \in [0,1] + 0 = no non-zero entries + 1 = all m*n entries are filled + r - random number generator + +Return: pointer to sparse matrix in triplet format (must be freed by caller) + +Notes: +1) non-zero matrix entries are uniformly distributed in [0,1] +*/ + +static gsl_spmatrix * +create_random_sparse(const size_t M, const size_t N, const double density, + const gsl_rng *r) +{ + size_t nnzwanted = (size_t) floor(M * N * GSL_MIN(density, 1.0)); + gsl_spmatrix *m = gsl_spmatrix_alloc_nzmax(M, N, + nnzwanted, + GSL_SPMATRIX_TRIPLET); + + while (gsl_spmatrix_nnz(m) < nnzwanted) + { + /* generate a random row and column */ + size_t i = gsl_rng_uniform(r) * M; + size_t j = gsl_rng_uniform(r) * N; + + /* generate random m_{ij} and add it */ + double x = gsl_rng_uniform(r); + gsl_spmatrix_set(m, i, j, x); + } + + return m; +} /* create_random_sparse() */ + +static gsl_spmatrix * +create_random_sparse_int(const size_t M, const size_t N, const double density, + const gsl_rng *r) +{ + const double lower = 1.0; + const double upper = 10.0; + size_t nnzwanted = (size_t) floor(M * N * GSL_MIN(density, 1.0)); + gsl_spmatrix *m = gsl_spmatrix_alloc_nzmax(M, N, + nnzwanted, + GSL_SPMATRIX_TRIPLET); + + while (gsl_spmatrix_nnz(m) < nnzwanted) + { + /* generate a random row and column */ + size_t i = gsl_rng_uniform(r) * M; + size_t j = gsl_rng_uniform(r) * N; + + /* generate random m_{ij} and add it */ + int x = (int) (gsl_rng_uniform(r) * (upper - lower) + lower); + gsl_spmatrix_set(m, i, j, (double) x); + } + + return m; +} + +static void +test_getset(const size_t M, const size_t N, + const double density, const gsl_rng *r) +{ + int status; + size_t i, j; + + /* test triplet versions of _get and _set */ + { + const double val = 0.75; + size_t k = 0; + gsl_spmatrix *m = gsl_spmatrix_alloc(M, N); + + status = 0; + for (i = 0; i < M; ++i) + { + for (j = 0; j < N; ++j) + { + double x = (double) ++k; + double y; + + gsl_spmatrix_set(m, i, j, x); + y = gsl_spmatrix_get(m, i, j); + if (x != y) + status = 1; + } + } + + gsl_test(status, "test_getset: M=%zu N=%zu _get != _set", M, N); + + /* test setting an element to 0 */ + gsl_spmatrix_set(m, 0, 0, 1.0); + gsl_spmatrix_set(m, 0, 0, 0.0); + + status = gsl_spmatrix_get(m, 0, 0) != 0.0; + gsl_test(status, "test_getset: M=%zu N=%zu m(0,0) = %f", + M, N, gsl_spmatrix_get(m, 0, 0)); + + /* test gsl_spmatrix_set_zero() */ + gsl_spmatrix_set(m, 0, 0, 1.0); + gsl_spmatrix_set_zero(m); + status = gsl_spmatrix_get(m, 0, 0) != 0.0; + gsl_test(status, "test_getset: M=%zu N=%zu set_zero m(0,0) = %f", + M, N, gsl_spmatrix_get(m, 0, 0)); + + /* resassemble matrix to ensure nz is calculated correctly */ + k = 0; + for (i = 0; i < M; ++i) + { + for (j = 0; j < N; ++j) + { + double x = (double) ++k; + gsl_spmatrix_set(m, i, j, x); + } + } + + status = gsl_spmatrix_nnz(m) != M * N; + gsl_test(status, "test_getset: M=%zu N=%zu set_zero nz = %zu", + M, N, gsl_spmatrix_nnz(m)); + + /* test gsl_spmatrix_ptr() */ + status = 0; + for (i = 0; i < M; ++i) + { + for (j = 0; j < N; ++j) + { + double mij = gsl_spmatrix_get(m, i, j); + double *ptr = gsl_spmatrix_ptr(m, i, j); + + *ptr += val; + if (gsl_spmatrix_get(m, i, j) != mij + val) + status = 2; + } + } + + gsl_test(status == 2, "test_getset: M=%zu N=%zu triplet ptr", M, N); + + gsl_spmatrix_free(m); + } + + /* test duplicate values are handled correctly */ + { + size_t min = GSL_MIN(M, N); + size_t expected_nnz = min; + size_t nnz; + size_t k = 0; + gsl_spmatrix *m = gsl_spmatrix_alloc(M, N); + + status = 0; + for (i = 0; i < min; ++i) + { + for (j = 0; j < 5; ++j) + { + double x = (double) ++k; + double y; + + gsl_spmatrix_set(m, i, i, x); + y = gsl_spmatrix_get(m, i, i); + if (x != y) + status = 1; + } + } + + gsl_test(status, "test_getset: duplicate test M=%zu N=%zu _get != _set", M, N); + + nnz = gsl_spmatrix_nnz(m); + status = nnz != expected_nnz; + gsl_test(status, "test_getset: duplicate test M=%zu N=%zu nnz=%zu, expected=%zu", + M, N, nnz, expected_nnz); + + gsl_spmatrix_free(m); + } + + /* test CCS version of gsl_spmatrix_get() */ + { + const double val = 0.75; + gsl_spmatrix *T = create_random_sparse(M, N, density, r); + gsl_spmatrix *C = gsl_spmatrix_ccs(T); + + status = 0; + for (i = 0; i < M; ++i) + { + for (j = 0; j < N; ++j) + { + double Tij = gsl_spmatrix_get(T, i, j); + double Cij = gsl_spmatrix_get(C, i, j); + double *ptr = gsl_spmatrix_ptr(C, i, j); + + if (Tij != Cij) + status = 1; + + if (ptr) + { + *ptr += val; + Cij = gsl_spmatrix_get(C, i, j); + if (Tij + val != Cij) + status = 2; + } + } + } + + gsl_test(status == 1, "test_getset: M=%zu N=%zu CCS get", M, N); + gsl_test(status == 2, "test_getset: M=%zu N=%zu CCS ptr", M, N); + + gsl_spmatrix_free(T); + gsl_spmatrix_free(C); + } + + /* test CRS version of gsl_spmatrix_get() */ + { + const double val = 0.75; + gsl_spmatrix *T = create_random_sparse(M, N, density, r); + gsl_spmatrix *C = gsl_spmatrix_crs(T); + + status = 0; + for (i = 0; i < M; ++i) + { + for (j = 0; j < N; ++j) + { + double Tij = gsl_spmatrix_get(T, i, j); + double Cij = gsl_spmatrix_get(C, i, j); + double *ptr = gsl_spmatrix_ptr(C, i, j); + + if (Tij != Cij) + status = 1; + + if (ptr) + { + *ptr += val; + Cij = gsl_spmatrix_get(C, i, j); + if (Tij + val != Cij) + status = 2; + } + } + } + + gsl_test(status == 1, "test_getset: M=%zu N=%zu CRS get", M, N); + gsl_test(status == 2, "test_getset: M=%zu N=%zu CRS ptr", M, N); + + gsl_spmatrix_free(T); + gsl_spmatrix_free(C); + } +} /* test_getset() */ + +static void +test_memcpy(const size_t M, const size_t N, + const double density, const gsl_rng *r) +{ + int status; + + { + gsl_spmatrix *A = create_random_sparse(M, N, density, r); + gsl_spmatrix *A_ccs = gsl_spmatrix_ccs(A); + gsl_spmatrix *A_crs = gsl_spmatrix_crs(A); + gsl_spmatrix *B_t, *B_ccs, *B_crs; + + B_t = gsl_spmatrix_alloc(M, N); + gsl_spmatrix_memcpy(B_t, A); + + status = gsl_spmatrix_equal(A, B_t) != 1; + gsl_test(status, "test_memcpy: _memcpy M=%zu N=%zu triplet format", M, N); + + B_ccs = gsl_spmatrix_alloc_nzmax(M, N, A_ccs->nzmax, GSL_SPMATRIX_CCS); + B_crs = gsl_spmatrix_alloc_nzmax(M, N, A_ccs->nzmax, GSL_SPMATRIX_CRS); + + gsl_spmatrix_memcpy(B_ccs, A_ccs); + gsl_spmatrix_memcpy(B_crs, A_crs); + + status = gsl_spmatrix_equal(A_ccs, B_ccs) != 1; + gsl_test(status, "test_memcpy: _memcpy M=%zu N=%zu CCS", M, N); + + status = gsl_spmatrix_equal(A_crs, B_crs) != 1; + gsl_test(status, "test_memcpy: _memcpy M=%zu N=%zu CRS", M, N); + + gsl_spmatrix_free(A); + gsl_spmatrix_free(A_ccs); + gsl_spmatrix_free(A_crs); + gsl_spmatrix_free(B_t); + gsl_spmatrix_free(B_ccs); + gsl_spmatrix_free(B_crs); + } + + /* test transpose_memcpy */ + { + gsl_spmatrix *A = create_random_sparse(M, N, density, r); + gsl_spmatrix *AT = gsl_spmatrix_alloc(N, M); + gsl_spmatrix *B = gsl_spmatrix_ccs(A); + gsl_spmatrix *BT = gsl_spmatrix_alloc_nzmax(N, M, 1, GSL_SPMATRIX_CCS); + gsl_spmatrix *C = gsl_spmatrix_crs(A); + gsl_spmatrix *CT = gsl_spmatrix_alloc_nzmax(N, M, 1, GSL_SPMATRIX_CRS); + size_t i, j; + + gsl_spmatrix_transpose_memcpy(AT, A); + gsl_spmatrix_transpose_memcpy(BT, B); + gsl_spmatrix_transpose_memcpy(CT, C); + + status = 0; + for (i = 0; i < M; ++i) + { + for (j = 0; j < N; ++j) + { + double Aij = gsl_spmatrix_get(A, i, j); + double ATji = gsl_spmatrix_get(AT, j, i); + + if (Aij != ATji) + status = 1; + } + } + + gsl_test(status, "test_memcpy: _transpose_memcpy M=%zu N=%zu triplet format", M, N); + + status = 0; + for (i = 0; i < M; ++i) + { + for (j = 0; j < N; ++j) + { + double Aij = gsl_spmatrix_get(A, i, j); + double Bij = gsl_spmatrix_get(B, i, j); + double BTji = gsl_spmatrix_get(BT, j, i); + + if ((Bij != BTji) || (Aij != Bij)) + status = 1; + } + } + + gsl_test(status, "test_memcpy: _transpose_memcpy M=%zu N=%zu CCS format", M, N); + + status = 0; + for (i = 0; i < M; ++i) + { + for (j = 0; j < N; ++j) + { + double Aij = gsl_spmatrix_get(A, i, j); + double Cij = gsl_spmatrix_get(C, i, j); + double CTji = gsl_spmatrix_get(CT, j, i); + + if ((Cij != CTji) || (Aij != Cij)) + status = 1; + } + } + + gsl_test(status, "test_memcpy: _transpose_memcpy M=%zu N=%zu CRS format", M, N); + + gsl_spmatrix_free(A); + gsl_spmatrix_free(AT); + gsl_spmatrix_free(B); + gsl_spmatrix_free(BT); + gsl_spmatrix_free(C); + gsl_spmatrix_free(CT); + } +} /* test_memcpy() */ + +static void +test_transpose(const size_t M, const size_t N, + const double density, const gsl_rng *r) +{ + int status; + gsl_spmatrix *A = create_random_sparse(M, N, density, r); + gsl_spmatrix *AT = gsl_spmatrix_alloc_nzmax(M, N, A->nz, A->sptype); + gsl_spmatrix *AT2 = gsl_spmatrix_alloc_nzmax(M, N, A->nz, A->sptype); + gsl_spmatrix *AT2_ccs, *AT2_crs; + size_t i, j; + + /* test triplet transpose */ + + gsl_spmatrix_memcpy(AT, A); + gsl_spmatrix_memcpy(AT2, A); + + gsl_spmatrix_transpose(AT); + gsl_spmatrix_transpose2(AT2); + + status = 0; + for (i = 0; i < M; ++i) + { + for (j = 0; j < N; ++j) + { + double Aij = gsl_spmatrix_get(A, i, j); + double ATji = gsl_spmatrix_get(AT, j, i); + double AT2ji = gsl_spmatrix_get(AT2, j, i); + + if (Aij != ATji) + status = 1; + + if (Aij != AT2ji) + status = 2; + } + } + + gsl_test(status == 1, "test_transpose: transpose M=%zu N=%zu triplet format", + M, N); + gsl_test(status == 2, "test_transpose: transpose2 M=%zu N=%zu triplet format", + M, N); + + /* test CCS transpose */ + + AT2_ccs = gsl_spmatrix_ccs(A); + gsl_spmatrix_transpose2(AT2_ccs); + + status = 0; + for (i = 0; i < M; ++i) + { + for (j = 0; j < N; ++j) + { + double Aij = gsl_spmatrix_get(A, i, j); + double AT2ji = gsl_spmatrix_get(AT2_ccs, j, i); + + if (Aij != AT2ji) + status = 2; + } + } + + gsl_test(status == 2, "test_transpose: transpose2 M=%zu N=%zu CCS format", + M, N); + + /* test CRS transpose */ + + AT2_crs = gsl_spmatrix_crs(A); + gsl_spmatrix_transpose2(AT2_crs); + + status = 0; + for (i = 0; i < M; ++i) + { + for (j = 0; j < N; ++j) + { + double Aij = gsl_spmatrix_get(A, i, j); + double AT2ji = gsl_spmatrix_get(AT2_crs, j, i); + + if (Aij != AT2ji) + status = 2; + } + } + + gsl_test(status == 2, "test_transpose: transpose2 M=%zu N=%zu CRS format", + M, N); + + gsl_spmatrix_free(A); + gsl_spmatrix_free(AT); + gsl_spmatrix_free(AT2); + gsl_spmatrix_free(AT2_ccs); + gsl_spmatrix_free(AT2_crs); +} + +static void +test_ops(const size_t M, const size_t N, + const double density, const gsl_rng *r) +{ + size_t i, j; + int status; + + /* test gsl_spmatrix_add */ + { + gsl_spmatrix *A = create_random_sparse(M, N, density, r); + gsl_spmatrix *B = create_random_sparse(M, N, density, r); + + gsl_spmatrix *A_ccs = gsl_spmatrix_ccs(A); + gsl_spmatrix *B_ccs = gsl_spmatrix_ccs(B); + gsl_spmatrix *C_ccs = gsl_spmatrix_alloc_nzmax(M, N, 1, GSL_SPMATRIX_CCS); + + gsl_spmatrix *A_crs = gsl_spmatrix_crs(A); + gsl_spmatrix *B_crs = gsl_spmatrix_crs(B); + gsl_spmatrix *C_crs = gsl_spmatrix_alloc_nzmax(M, N, 1, GSL_SPMATRIX_CRS); + + gsl_spmatrix_add(C_ccs, A_ccs, B_ccs); + gsl_spmatrix_add(C_crs, A_crs, B_crs); + + status = 0; + for (i = 0; i < M; ++i) + { + for (j = 0; j < N; ++j) + { + double aij, bij, cij; + + aij = gsl_spmatrix_get(A_ccs, i, j); + bij = gsl_spmatrix_get(B_ccs, i, j); + cij = gsl_spmatrix_get(C_ccs, i, j); + if (aij + bij != cij) + status = 1; + + aij = gsl_spmatrix_get(A_crs, i, j); + bij = gsl_spmatrix_get(B_crs, i, j); + cij = gsl_spmatrix_get(C_crs, i, j); + if (aij + bij != cij) + status = 2; + } + } + + gsl_test(status == 1, "test_ops: add M=%zu N=%zu CCS", M, N); + gsl_test(status == 2, "test_ops: add M=%zu N=%zu CRS", M, N); + + gsl_spmatrix_free(A); + gsl_spmatrix_free(B); + gsl_spmatrix_free(A_ccs); + gsl_spmatrix_free(B_ccs); + gsl_spmatrix_free(C_ccs); + gsl_spmatrix_free(A_crs); + gsl_spmatrix_free(B_crs); + gsl_spmatrix_free(C_crs); + } +} /* test_ops() */ + +static void +test_io_ascii(const size_t M, const size_t N, + const double density, const gsl_rng *r) +{ + int status; + gsl_spmatrix *A = create_random_sparse_int(M, N, density, r); + + char filename[] = "test.XXXXXX"; +#if !defined( _WIN32 ) + int fd = mkstemp(filename); +#else + char * fd = _mktemp(filename); +# define fdopen fopen +#endif + + /* test triplet I/O */ + { + FILE *f = fdopen(fd, "w"); + + gsl_spmatrix_fprintf(f, A, "%g"); + + fclose(f); + } + + { + FILE *f = fopen(filename, "r"); + gsl_spmatrix *B = gsl_spmatrix_fscanf(f); + + status = gsl_spmatrix_equal(A, B) != 1; + gsl_test(status, "test_io_ascii: fprintf/fscanf M=%zu N=%zu triplet format", M, N); + + fclose(f); + gsl_spmatrix_free(B); + } + + /* test CCS I/O */ + { + FILE *f = fopen(filename, "w"); + gsl_spmatrix *A_ccs = gsl_spmatrix_ccs(A); + + gsl_spmatrix_fprintf(f, A_ccs, "%g"); + + fclose(f); + gsl_spmatrix_free(A_ccs); + } + + { + FILE *f = fopen(filename, "r"); + gsl_spmatrix *B = gsl_spmatrix_fscanf(f); + + status = gsl_spmatrix_equal(A, B) != 1; + gsl_test(status, "test_io_ascii: fprintf/fscanf M=%zu N=%zu CCS format", M, N); + + fclose(f); + gsl_spmatrix_free(B); + } + + /* test CRS I/O */ + { + FILE *f = fopen(filename, "w"); + gsl_spmatrix *A_crs = gsl_spmatrix_crs(A); + + gsl_spmatrix_fprintf(f, A_crs, "%g"); + + fclose(f); + gsl_spmatrix_free(A_crs); + } + + { + FILE *f = fopen(filename, "r"); + gsl_spmatrix *B = gsl_spmatrix_fscanf(f); + + status = gsl_spmatrix_equal(A, B) != 1; + gsl_test(status, "test_io_ascii: fprintf/fscanf M=%zu N=%zu CRS format", M, N); + + fclose(f); + gsl_spmatrix_free(B); + } + + unlink(filename); + + gsl_spmatrix_free(A); +} + +static void +test_io_binary(const size_t M, const size_t N, + const double density, const gsl_rng *r) +{ + int status; + gsl_spmatrix *A = create_random_sparse(M, N, density, r); + gsl_spmatrix *A_ccs, *A_crs; + + char filename[] = "test.XXXXXX"; +#if !defined( _WIN32 ) + int fd = mkstemp(filename); +#else + char * fd = _mktemp(filename); +# define fdopen fopen +#endif + + /* test triplet I/O */ + { + FILE *f = fdopen(fd, "wb"); + + gsl_spmatrix_fwrite(f, A); + + fclose(f); + } + + { + FILE *f = fopen(filename, "rb"); + gsl_spmatrix *B = gsl_spmatrix_alloc_nzmax(M, N, A->nz, A->sptype); + + gsl_spmatrix_fread(f, B); + + status = gsl_spmatrix_equal(A, B) != 1; + gsl_test(status, "test_io_binary: fwrite/fread M=%zu N=%zu triplet format", M, N); + + fclose(f); + gsl_spmatrix_free(B); + } + + /* test CCS I/O */ + A_ccs = gsl_spmatrix_ccs(A); + + { + FILE *f = fopen(filename, "wb"); + + gsl_spmatrix_fwrite(f, A_ccs); + + fclose(f); + } + + { + FILE *f = fopen(filename, "rb"); + gsl_spmatrix *B = gsl_spmatrix_alloc_nzmax(M, N, A->nz, GSL_SPMATRIX_CCS); + + gsl_spmatrix_fread(f, B); + + status = gsl_spmatrix_equal(A_ccs, B) != 1; + gsl_test(status, "test_io_binary: fwrite/fread M=%zu N=%zu CCS format", M, N); + + fclose(f); + gsl_spmatrix_free(B); + } + + /* test CRS I/O */ + A_crs = gsl_spmatrix_crs(A); + + { + FILE *f = fopen(filename, "wb"); + + gsl_spmatrix_fwrite(f, A_crs); + + fclose(f); + } + + { + FILE *f = fopen(filename, "rb"); + gsl_spmatrix *B = gsl_spmatrix_alloc_nzmax(M, N, A->nz, GSL_SPMATRIX_CRS); + + gsl_spmatrix_fread(f, B); + + status = gsl_spmatrix_equal(A_crs, B) != 1; + gsl_test(status, "test_io_binary: fwrite/fread M=%zu N=%zu CRS format", M, N); + + fclose(f); + gsl_spmatrix_free(B); + } + + unlink(filename); + + gsl_spmatrix_free(A); + gsl_spmatrix_free(A_ccs); + gsl_spmatrix_free(A_crs); +} + +int +main() +{ + gsl_rng *r = gsl_rng_alloc(gsl_rng_default); + + test_memcpy(10, 10, 0.2, r); + test_memcpy(10, 15, 0.3, r); + test_memcpy(53, 213, 0.4, r); + test_memcpy(920, 2, 0.2, r); + test_memcpy(2, 920, 0.3, r); + + test_getset(20, 20, 0.3, r); + test_getset(30, 20, 0.3, r); + test_getset(15, 210, 0.3, r); + + test_transpose(50, 50, 0.5, r); + test_transpose(10, 40, 0.3, r); + test_transpose(40, 10, 0.3, r); + test_transpose(57, 13, 0.2, r); + + test_ops(20, 20, 0.2, r); + test_ops(50, 20, 0.3, r); + test_ops(20, 50, 0.3, r); + test_ops(76, 43, 0.4, r); + + test_io_ascii(30, 30, 0.3, r); + test_io_ascii(20, 10, 0.2, r); + test_io_ascii(10, 20, 0.2, r); + test_io_ascii(34, 78, 0.3, r); + + test_io_binary(50, 50, 0.3, r); + test_io_binary(25, 10, 0.2, r); + test_io_binary(10, 25, 0.2, r); + test_io_binary(101, 253, 0.3, r); + + gsl_rng_free(r); + + exit (gsl_test_summary()); +} /* main() */ diff -Nru gsl-doc-1.16/spmatrix/TODO gsl-doc-2.3/spmatrix/TODO --- gsl-doc-1.16/spmatrix/TODO 1970-01-01 00:00:00.000000000 +0000 +++ gsl-doc-2.3/spmatrix/TODO 2016-07-02 23:02:41.000000000 +0000 @@ -0,0 +1,2 @@ +1. extend transpose to CCS/CRS (in-place) +2. extend spblas_dgemm to CRS diff -Nru gsl-doc-1.16/statistics/Makefile.am gsl-doc-2.3/statistics/Makefile.am --- gsl-doc-1.16/statistics/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/statistics/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -4,7 +4,7 @@ pkginclude_HEADERS = gsl_statistics.h gsl_statistics_char.h gsl_statistics_double.h gsl_statistics_float.h gsl_statistics_int.h gsl_statistics_long.h gsl_statistics_long_double.h gsl_statistics_short.h gsl_statistics_uchar.h gsl_statistics_uint.h gsl_statistics_ulong.h gsl_statistics_ushort.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslstatistics_la_SOURCES = mean.c variance.c absdev.c skew.c kurtosis.c lag1.c p_variance.c minmax.c ttest.c median.c covariance.c quantiles.c wmean.c wvariance.c wabsdev.c wskew.c wkurtosis.c diff -Nru gsl-doc-1.16/statistics/Makefile.in gsl-doc-2.3/statistics/Makefile.in --- gsl-doc-1.16/statistics/Makefile.in 2013-07-19 15:14:55.000000000 +0000 +++ gsl-doc-2.3/statistics/Makefile.in 2016-12-09 00:04:23.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -381,6 +381,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -403,7 +404,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -519,7 +523,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslstatistics.la pkginclude_HEADERS = gsl_statistics.h gsl_statistics_char.h gsl_statistics_double.h gsl_statistics_float.h gsl_statistics_int.h gsl_statistics_long.h gsl_statistics_long_double.h gsl_statistics_short.h gsl_statistics_uchar.h gsl_statistics_uint.h gsl_statistics_ulong.h gsl_statistics_ushort.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslstatistics_la_SOURCES = mean.c variance.c absdev.c skew.c kurtosis.c lag1.c p_variance.c minmax.c ttest.c median.c covariance.c quantiles.c wmean.c wvariance.c wabsdev.c wskew.c wkurtosis.c noinst_HEADERS = mean_source.c variance_source.c covariance_source.c absdev_source.c skew_source.c kurtosis_source.c lag1_source.c p_variance_source.c minmax_source.c ttest_source.c median_source.c quantiles_source.c wmean_source.c wvariance_source.c wabsdev_source.c wskew_source.c wkurtosis_source.c test_float_source.c test_int_source.c TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/sum/Makefile.am gsl-doc-2.3/sum/Makefile.am --- gsl-doc-1.16/sum/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/sum/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ pkginclude_HEADERS = gsl_sum.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslsum_la_SOURCES = levin_u.c levin_utrunc.c work_u.c work_utrunc.c diff -Nru gsl-doc-1.16/sum/Makefile.in gsl-doc-2.3/sum/Makefile.in --- gsl-doc-1.16/sum/Makefile.in 2013-07-19 15:14:55.000000000 +0000 +++ gsl-doc-2.3/sum/Makefile.in 2016-12-09 00:04:23.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -377,6 +377,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -399,7 +400,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -515,7 +519,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslsum.la pkginclude_HEADERS = gsl_sum.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslsum_la_SOURCES = levin_u.c levin_utrunc.c work_u.c work_utrunc.c TESTS = $(check_PROGRAMS) test_LDADD = libgslsum.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la diff -Nru gsl-doc-1.16/sys/ldfrexp.c gsl-doc-2.3/sys/ldfrexp.c --- gsl-doc-1.16/sys/ldfrexp.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/sys/ldfrexp.c 2015-11-03 16:21:55.000000000 +0000 @@ -60,7 +60,7 @@ *e = 0; return 0.0; } - else if (!finite (x)) + else if (!gsl_finite (x)) { *e = 0; return x; @@ -85,7 +85,7 @@ f = x * pow (2.0, -ei); - if (!finite (f)) + if (!gsl_finite (f)) { /* This should not happen */ *e = 0; diff -Nru gsl-doc-1.16/sys/Makefile.am gsl-doc-2.3/sys/Makefile.am --- gsl-doc-1.16/sys/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/sys/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -4,7 +4,7 @@ libgslsys_la_SOURCES = minmax.c prec.c hypot.c log1p.c expm1.c coerce.c invhyp.c pow_int.c infnan.c fdiv.c fcmp.c ldfrexp.c -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) check_PROGRAMS = test TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/sys/Makefile.in gsl-doc-2.3/sys/Makefile.in --- gsl-doc-1.16/sys/Makefile.in 2013-07-19 15:14:55.000000000 +0000 +++ gsl-doc-2.3/sys/Makefile.in 2016-12-09 00:04:23.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -378,6 +378,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -400,7 +401,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -517,7 +521,7 @@ noinst_LTLIBRARIES = libgslsys.la pkginclude_HEADERS = gsl_sys.h libgslsys_la_SOURCES = minmax.c prec.c hypot.c log1p.c expm1.c coerce.c invhyp.c pow_int.c infnan.c fdiv.c fcmp.c ldfrexp.c -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslsys.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la libgslsys.la ../utils/libutils.la diff -Nru gsl-doc-1.16/sys/test.c gsl-doc-2.3/sys/test.c --- gsl-doc-1.16/sys/test.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/sys/test.c 2015-11-03 16:21:55.000000000 +0000 @@ -563,7 +563,7 @@ s = gsl_isnan (-inf); gsl_test_int (s, 0, "gsl_isnan(-inf)"); - s = gsl_isnan (nan); + s = gsl_isnan (nan) != 0; gsl_test_int (s, 1, "gsl_isnan(nan)"); diff -Nru gsl-doc-1.16/test/Makefile.in gsl-doc-2.3/test/Makefile.in --- gsl-doc-1.16/test/Makefile.in 2013-07-19 15:14:55.000000000 +0000 +++ gsl-doc-2.3/test/Makefile.in 2016-12-09 00:04:23.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -193,6 +193,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -215,7 +216,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ diff -Nru gsl-doc-1.16/THANKS gsl-doc-2.3/THANKS --- gsl-doc-1.16/THANKS 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/THANKS 2016-07-07 20:36:10.000000000 +0000 @@ -13,7 +13,7 @@ * Thomas Walter for heapsort routines, cholesky decomposition, bug reports and useful suggestions -* Jorma Olavi Tähtinen for complex arithmetic +* Jorma Olavi Tähtinen for complex arithmetic functions * Barak Pearlmutter @@ -140,7 +140,7 @@ * Vladimir Savichev bug reports -* Jochen Küpper doc bug fixes, additional +* Jochen Küpper doc bug fixes, additional constants * John Ketchum for bug reports for the blas library @@ -297,7 +297,7 @@ * James Scott fix for linalg tests on MSVC -* Rémi Butel fixes for multimin overflow +* Rémi Butel fixes for multimin overflow conditions * Andris Pavenis Makefile fix for EXEEXT @@ -336,7 +336,7 @@ * Dirk Eddelbuettel for bug reports and testing, and maintaining the Debian package for GSL. -* Jari Häkkinen for svd bug reports, rng bug reports +* Jari Häkkinen for svd bug reports, rng bug reports * Marco Canini patch for IXP2400 Xscale @@ -424,7 +424,7 @@ * Justin Lenzo bug reports for vector/matrix tests. -* Sebastian Queißer bug report for +* Sebastian Queißer bug report for gsl_cdf_beta_Pinv * Andries Brouwer bug report for @@ -464,7 +464,7 @@ * Marco Maggi bug fix for gsl_blas_drotm -* Mateus Araújo Santos - bug fix for LM set +* Mateus Araújo Santos - bug fix for LM set * James Howse - quad_golden minimisation algorithm @@ -484,7 +484,7 @@ * Sam Mason - bug fix for gsl_pow_int -* José Luis García Pallero - error checking for GSL cblas +* José Luis García Pallero - error checking for GSL cblas * Teemu Ikonen patch for gsl_ran_chisq_pdf @@ -508,3 +508,6 @@ * Matthias Sitte - bug report and patch for failing complex matrix IO routines + +* Raymond Rogers - bug fixes for confluent + hypergeometric functions diff -Nru gsl-doc-1.16/TODO gsl-doc-2.3/TODO --- gsl-doc-1.16/TODO 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/TODO 2015-11-03 16:21:55.000000000 +0000 @@ -19,8 +19,6 @@ ** Incomplete Fermi-Dirac functions -** General Legendre functions - ** Spheroidal wave functions ** Weierstrass elliptic functions @@ -56,11 +54,28 @@ vs _inverse). Also adopt a convection for functions which can operate in place vs use of workspace (e.g linalg_solve functions). -** gsl_sf_ellint_D - remove useless argument n? - ** gsl_roots doesn't store function value, so testing the residual requires function to be recomputed Generally all the iterative routines should follow a consistent approach to outputting everything that is necessary for the next iteration + +** gsl_roots - consider having two returns from solvers - GSL_SUCCESS +if a root has been found or GSL_CONTINUE if further iterations may +be needed. + +** mathieu functions - bring functional interfaces into line with GSL +conventions for special functions. + +** rewriting the spherical Bessel routines (there are +around 3 separate bug reports for these) + +** the nonlinear least squares Levenberg-Marquardt solver should be +rewritten from scratch - the current version is filled with goto +statements, and while its supposed to be based on MINPACK, I've found +numerous examples where GSL fails to converge when MINPACK succeeds, so +something was not implemented correctly. + +** import 2D interpolation code; 3d or nd linear interpolation? + * Other tasks ** Remove use of long double internally, e.g. as an accumulator in diff -Nru gsl-doc-1.16/utils/Makefile.in gsl-doc-2.3/utils/Makefile.in --- gsl-doc-1.16/utils/Makefile.in 2013-07-19 15:14:55.000000000 +0000 +++ gsl-doc-2.3/utils/Makefile.in 2016-12-09 00:04:23.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -163,6 +163,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -185,7 +186,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ diff -Nru gsl-doc-1.16/vector/init.c gsl-doc-2.3/vector/init.c --- gsl-doc-1.16/vector/init.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/vector/init.c 2015-11-03 16:21:55.000000000 +0000 @@ -1,5 +1,6 @@ #include #include +#include #include #define BASE_GSL_COMPLEX_LONG diff -Nru gsl-doc-1.16/vector/init_source.c gsl-doc-2.3/vector/init_source.c --- gsl-doc-1.16/vector/init_source.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/vector/init_source.c 2015-11-03 16:21:55.000000000 +0000 @@ -66,7 +66,8 @@ if (v == 0) return 0; - /* initialize vector to zero */ + /* initialize vector to zero; memset takes care of the padding bytes */ + memset(v->data, 0, MULTIPLICITY * n * sizeof(ATOMIC)); for (i = 0; i < MULTIPLICITY * n; i++) { diff -Nru gsl-doc-1.16/vector/Makefile.am gsl-doc-2.3/vector/Makefile.am --- gsl-doc-1.16/vector/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/vector/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -4,7 +4,7 @@ pkginclude_HEADERS = gsl_vector.h gsl_vector_char.h gsl_vector_complex.h gsl_vector_complex_double.h gsl_vector_complex_float.h gsl_vector_complex_long_double.h gsl_vector_double.h gsl_vector_float.h gsl_vector_int.h gsl_vector_long.h gsl_vector_long_double.h gsl_vector_short.h gsl_vector_uchar.h gsl_vector_uint.h gsl_vector_ulong.h gsl_vector_ushort.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) diff -Nru gsl-doc-1.16/vector/Makefile.in gsl-doc-2.3/vector/Makefile.in --- gsl-doc-1.16/vector/Makefile.in 2013-07-19 15:14:55.000000000 +0000 +++ gsl-doc-2.3/vector/Makefile.in 2016-12-09 00:04:23.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -385,6 +385,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -407,7 +408,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -523,7 +527,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslvector.la pkginclude_HEADERS = gsl_vector.h gsl_vector_char.h gsl_vector_complex.h gsl_vector_complex_double.h gsl_vector_complex_float.h gsl_vector_complex_long_double.h gsl_vector_double.h gsl_vector_float.h gsl_vector_int.h gsl_vector_long.h gsl_vector_long_double.h gsl_vector_short.h gsl_vector_uchar.h gsl_vector_uint.h gsl_vector_ulong.h gsl_vector_ushort.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_LDADD = libgslvector.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_static_LDADD = libgslvector.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la diff -Nru gsl-doc-1.16/vector/test.c gsl-doc-2.3/vector/test.c --- gsl-doc-1.16/vector/test.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/vector/test.c 2015-11-03 16:21:55.000000000 +0000 @@ -19,12 +19,18 @@ #include +#if defined( _MSC_VER ) && defined( GSL_DLL ) +#undef inline +#define inline __forceinline +#endif + #if (!GSL_RANGE_CHECK) && defined(HAVE_INLINE) #undef GSL_RANGE_CHECK #define GSL_RANGE_CHECK 1 #endif #include +#include #include #include #include diff -Nru gsl-doc-1.16/vector/test_complex_source.c gsl-doc-2.3/vector/test_complex_source.c --- gsl-doc-1.16/vector/test_complex_source.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/vector/test_complex_source.c 2015-11-03 16:21:55.000000000 +0000 @@ -638,8 +638,16 @@ size_t i; + char filename[] = "test.XXXXXX"; +#if !defined( _WIN32 ) + int fd = mkstemp(filename); +#else + char * fd = _mktemp(filename); +# define fdopen fopen +#endif + { - FILE *f = fopen ("test.dat", "wb"); + FILE *f = fdopen(fd, "wb"); for (i = 0; i < N; i++) { @@ -655,7 +663,7 @@ } { - FILE *f = fopen ("test.dat", "rb"); + FILE *f = fopen(filename, "rb"); FUNCTION (gsl_vector, fread) (f, w); @@ -668,11 +676,12 @@ fclose (f); } + unlink(filename); + FUNCTION (gsl_vector, free) (v); FUNCTION (gsl_vector, free) (w); gsl_test (status, NAME (gsl_vector) "_write and read work"); - } #if USES_LONGDOUBLE && ! HAVE_PRINTF_LONGDOUBLE @@ -686,8 +695,16 @@ size_t i; + char filename[] = "test.XXXXXX"; +#if !defined( _WIN32 ) + int fd = mkstemp(filename); +#else + char * fd = _mktemp(filename); +# define fdopen fopen +#endif + { - FILE *f = fopen ("test.txt", "w"); + FILE *f = fdopen(fd, "w"); for (i = 0; i < N; i++) { @@ -703,7 +720,7 @@ } { - FILE *f = fopen ("test.txt", "r"); + FILE *f = fopen(filename, "r"); FUNCTION (gsl_vector, fscanf) (f, w); @@ -716,6 +733,8 @@ fclose (f); } + unlink(filename); + FUNCTION (gsl_vector, free) (v); FUNCTION (gsl_vector, free) (w); diff -Nru gsl-doc-1.16/vector/test_source.c gsl-doc-2.3/vector/test_source.c --- gsl-doc-1.16/vector/test_source.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/vector/test_source.c 2015-11-03 16:21:55.000000000 +0000 @@ -357,7 +357,7 @@ for (i = 0; i < N; i++) { - if (FUNCTION (gsl_vector, get) (v, i) != (ATOMIC) (i*2.0)) + if (FUNCTION (gsl_vector, get) (v, i) != (ATOMIC) ((ATOMIC)i*(ATOMIC)2.0)) status = 1; }; @@ -371,7 +371,7 @@ for (i = 0; i < N; i++) { - if (FUNCTION (gsl_vector, get) (v, i) != (ATOMIC) (i*2.0 + 7)) + if (FUNCTION (gsl_vector, get) (v, i) != (ATOMIC) ((ATOMIC)i*(ATOMIC)2.0 + (ATOMIC)7)) status = 1; }; @@ -718,8 +718,15 @@ size_t i; + char filename[] = "test.XXXXXX"; +#if !defined( _WIN32 ) + int fd = mkstemp(filename); +#else + char * fd = _mktemp(filename); +# define fdopen fopen +#endif { - FILE *f = fopen ("test.dat", "wb"); + FILE *f = fdopen (fd, "wb"); for (i = 0; i < N; i++) { @@ -732,7 +739,7 @@ } { - FILE *f = fopen ("test.dat", "rb"); + FILE *f = fopen (filename, "rb"); FUNCTION (gsl_vector, fread) (f, w); @@ -748,6 +755,8 @@ fclose (f); } + unlink(filename); + FUNCTION (gsl_vector, free) (v); /* free whatever is in v */ FUNCTION (gsl_vector, free) (w); /* free whatever is in w */ } @@ -763,8 +772,15 @@ size_t i; + char filename[] = "test.XXXXXX"; +#if !defined( _WIN32 ) + int fd = mkstemp(filename); +#else + char * fd = _mktemp(filename); +# define fdopen fopen +#endif { - FILE *f = fopen ("test.txt", "w"); + FILE *f = fdopen (fd, "w"); for (i = 0; i < N; i++) { @@ -777,7 +793,7 @@ } { - FILE *f = fopen ("test.txt", "r"); + FILE *f = fopen (filename, "r"); FUNCTION (gsl_vector, fscanf) (f, w); @@ -793,6 +809,8 @@ fclose (f); } + unlink(filename); + FUNCTION (gsl_vector, free) (v); FUNCTION (gsl_vector, free) (w); } diff -Nru gsl-doc-1.16/wavelet/dwt.c gsl-doc-2.3/wavelet/dwt.c --- gsl-doc-1.16/wavelet/dwt.c 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/wavelet/dwt.c 2015-11-03 16:21:55.000000000 +0000 @@ -44,7 +44,7 @@ logn++; } - ntest = (1 << logn); + ntest = ((size_t)1 << logn); if (n != ntest) { diff -Nru gsl-doc-1.16/wavelet/Makefile.am gsl-doc-2.3/wavelet/Makefile.am --- gsl-doc-1.16/wavelet/Makefile.am 2013-07-17 20:04:26.000000000 +0000 +++ gsl-doc-2.3/wavelet/Makefile.am 2015-11-03 16:21:55.000000000 +0000 @@ -2,7 +2,7 @@ pkginclude_HEADERS = gsl_wavelet.h gsl_wavelet2d.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslwavelet_la_SOURCES = dwt.c wavelet.c bspline.c daubechies.c haar.c diff -Nru gsl-doc-1.16/wavelet/Makefile.in gsl-doc-2.3/wavelet/Makefile.in --- gsl-doc-1.16/wavelet/Makefile.in 2013-07-19 15:14:55.000000000 +0000 +++ gsl-doc-2.3/wavelet/Makefile.in 2016-12-09 00:04:23.000000000 +0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -379,6 +379,7 @@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -401,7 +402,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ +GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ +GSL_LDFLAGS = @GSL_LDFLAGS@ +GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ @@ -517,7 +521,7 @@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslwavelet.la pkginclude_HEADERS = gsl_wavelet.h gsl_wavelet2d.h -INCLUDES = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) libgslwavelet_la_SOURCES = dwt.c wavelet.c bspline.c daubechies.c haar.c TESTS = $(check_PROGRAMS) test_LDADD = libgslwavelet.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la